diff --git a/README.md b/README.md index 58b49c3..ea24d4d 100644 --- a/README.md +++ b/README.md @@ -385,7 +385,7 @@ Company Mode turns one brief into a runtime session plus role-owned work items. | `Agents` | Role rollup: active/waiting/pending/done roles, current tool, role work items, filters, search, and links to detailed execution progress. | | `Info` | Status, assignees, role identity, employee assignment, selected execution agent, timing, and developer details. | | `Comms` | Role inboxes, unread/read/sent messages, meetings, decisions, and recent communication failures. | -| `Team` | Runtime cockpit: teams, seats, approvals, unread communication, recovery state, and stop controls for the current run. | +| `Team` | Runtime cockpit: teams, seats, approvals, unread communication, run state, and stop controls for the current run. | To inspect the detailed workflow for a role, open a company-mode session and click a role/work item in the `Chat` progress card or `Agents` tab. The Execution Progress panel shows each work item, its status, activity sections, tool progress, handoffs, review targets, and execution turn metadata. @@ -522,7 +522,6 @@ See [`docs/cli-chat-slash.md`](docs/cli-chat-slash.md) for the full command tabl | `opc talent` | `list`, `employees`, `import`, `hire`, `scan`, `import-selected`, `employee-detail`, `import-agent` | | `opc market` | `presets`, `browse`, `preview`, `apply-preset`, `export`, `install`, `list`, `uninstall --yes` | | `opc runtime` | `status`, `checkpoints`, `logs`, `run` | -| `opc recovery` | `scan`, `resume`, `cancel --yes`, `retry` | | `opc channels` | `status`, `login`, `start`, `stop` | Most service-style commands accept `--project/-p` and `--json`. diff --git a/README.zh-CN.md b/README.zh-CN.md index 390ec03..fe78cc3 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -522,7 +522,6 @@ opc talent hire -p demo | `opc talent` | `list`、`employees`、`import`、`hire`、`scan`、`import-selected`、`employee-detail`、`import-agent` | | `opc market` | `presets`、`browse`、`preview`、`apply-preset`、`export`、`install`、`list`、`uninstall --yes` | | `opc runtime` | `status`、`checkpoints`、`logs`、`run` | -| `opc recovery` | `scan`、`resume`、`cancel --yes`、`retry` | | `opc channels` | `status`、`login`、`start`、`stop` | 大多数服务类命令都支持 `--project/-p` 与 `--json`。 diff --git a/docs/cli-chat-slash.md b/docs/cli-chat-slash.md index 534f805..795edcf 100644 --- a/docs/cli-chat-slash.md +++ b/docs/cli-chat-slash.md @@ -13,7 +13,7 @@ The source of truth for this table is `_SLASH_COMMANDS` in `opc/cli/app.py`. - `/mode [task|company] [corporate|custom]` changes how future natural-language messages run. - `/agent [native|codex|claude_code|cursor|opencode|none]` sets or clears the preferred execution agent. - `/domains [domain ...|clear]` sets or clears domain hints. -- Aliases: `/p` is `/project`, `/s` is `/session`, `/t` is `/task`, `/checkpoint` is `/checkpoints`, `/recovery` is `/recover`. +- Aliases: `/p` is `/project`, `/s` is `/session`, `/t` is `/task`, and `/checkpoint` is `/checkpoints`. ## Project And Session @@ -30,8 +30,6 @@ The source of truth for this table is `_SLASH_COMMANDS` in `opc/cli/app.py`. - `/tasks [status] [--limit N] [--full]` lists project tasks. - `/task show|move|done|rename|delete` inspects and updates persisted tasks. - `/runtime [--limit N] [--full]` shows live runtime, active tasks, external sessions, and checkpoints. -- `/recover [--limit N] [--full]` lists interrupted runtimes and resumable checkpoints. -- `/recover resume|cancel|retry ` acts on interrupted company runtimes. - `/logs [--limit N] [--full]` shows execution logs, runtime events, tools, and transcript. - `/comms [--limit N] [--full]` shows company-mode messages, handoffs, review notes, and handoff context. - `/attachments [--limit N] [--full]` lists current-session attachment references. diff --git a/opc/cli/app.py b/opc/cli/app.py index 7a795d9..9b3c455 100644 --- a/opc/cli/app.py +++ b/opc/cli/app.py @@ -2118,33 +2118,6 @@ def runtime_run(task_id: str = typer.Argument(...), project: Optional[str] = typ asyncio.run(_run_service_command(project, lambda svc: svc.runtime.run_task(project_id=project or "default", task_id=task_id), json_output=json_output)) -recovery_app = typer.Typer(help="Recover interrupted company runtimes") -app.add_typer(recovery_app, name="recovery") - - -@recovery_app.command("scan") -def recovery_scan(project: Optional[str] = typer.Option(None, "--project", "-p"), json_output: bool = typer.Option(False, "--json")): - asyncio.run(_run_service_command(project, lambda svc: svc.runtime.recovery_scan(project_id=project or "default"), json_output=json_output)) - - -@recovery_app.command("resume") -def recovery_resume(parent_task_id: str = typer.Argument(...), project: Optional[str] = typer.Option(None, "--project", "-p"), json_output: bool = typer.Option(False, "--json")): - asyncio.run(_run_service_command(project, lambda svc: svc.runtime.recovery_action(project_id=project or "default", action="resume", parent_task_id=parent_task_id), json_output=json_output)) - - -@recovery_app.command("cancel") -def recovery_cancel(parent_task_id: str = typer.Argument(...), yes: bool = typer.Option(False, "--yes", "-y"), project: Optional[str] = typer.Option(None, "--project", "-p"), json_output: bool = typer.Option(False, "--json")): - if not yes: - console.print("[warning]Destructive command requires --yes.[/warning]") - raise typer.Exit(code=1) - asyncio.run(_run_service_command(project, lambda svc: svc.runtime.recovery_action(project_id=project or "default", action="cancel", parent_task_id=parent_task_id), json_output=json_output)) - - -@recovery_app.command("retry") -def recovery_retry(parent_task_id: str = typer.Argument(...), project: Optional[str] = typer.Option(None, "--project", "-p"), json_output: bool = typer.Option(False, "--json")): - asyncio.run(_run_service_command(project, lambda svc: svc.runtime.recovery_action(project_id=project or "default", action="retry", parent_task_id=parent_task_id), json_output=json_output)) - - comms_app = typer.Typer(help="Inspect company-mode comms") app.add_typer(comms_app, name="comms") @@ -2834,6 +2807,17 @@ class ChatTurnController: self._closing = True self.queue.clear() await self.stop_kanban_watch(silent=True) + prepare = getattr( + self.state.engine, + "prepare_active_company_runtimes_for_shutdown", + None, + ) + if callable(prepare): + # Persist company checkpoints and put the engine into + # infrastructure-shutdown mode before cancelling the active turn. + # Engine.shutdown() repeats this idempotently when it closes the + # remaining stores and subsystems. + await prepare() task = self.active_task if task is None or task.done(): return @@ -2994,8 +2978,6 @@ _SLASH_COMMANDS: tuple[_SlashCommandSpec, ...] = ( _SlashCommandSpec("Tasks", "/task rename ", "Rename a task and its session title."), _SlashCommandSpec("Tasks", "/task delete <task_id> --yes", "Hard-delete a task and its persisted lifecycle data."), _SlashCommandSpec("Runtime", "/runtime [--limit N] [--full]", "Show live runtime, active tasks, external sessions, and checkpoints."), - _SlashCommandSpec("Runtime", "/recover [--limit N] [--full]", "Show interrupted runtime and resumable checkpoints.", ("scan", "resume", "cancel", "retry")), - _SlashCommandSpec("Runtime", "/recover resume|cancel|retry <parent_task_id>", "Act on an interrupted company runtime."), _SlashCommandSpec("Runtime", "/logs <task_id|session_id> [--limit N] [--full]", "Show execution logs, runtime events, tools, and transcript."), _SlashCommandSpec("Runtime", "/comms <task_id> [--limit N] [--full]", "Show company-mode messages, handoffs, and review notes."), _SlashCommandSpec("Runtime", "/attachments [--limit N] [--full]", "List current session attachment references."), @@ -3027,7 +3009,7 @@ _SLASH_COMMANDS: tuple[_SlashCommandSpec, ...] = ( _SlashCommandSpec("Diagnostics", "/checkpoints [--limit N] [--full]", "List pending execution checkpoints."), ) CommandSpec = _SlashCommandSpec -_SLASH_ALIASES = {"p": "project", "s": "session", "t": "task", "checkpoint": "checkpoints", "recovery": "recover", "work-item": "work-items", "workitems": "work-items"} +_SLASH_ALIASES = {"p": "project", "s": "session", "t": "task", "checkpoint": "checkpoints", "work-item": "work-items", "workitems": "work-items"} def _initial_company_profile(config: OPCConfig) -> str: @@ -3862,6 +3844,8 @@ async def _resolve_session_or_task(state: _InteractiveChatState, token: str) -> async def _resolve_runtime_control_target(state: _InteractiveChatState, target: str = "") -> tuple[str, str]: + from opc.layer2_organization.company_runtime_identity import load_company_runtime_identity_index + store = _require_chat_store(state, label="Session store") if store is None: return "", "" @@ -3869,24 +3853,38 @@ async def _resolve_runtime_control_target(state: _InteractiveChatState, target: if not raw_target: console.print("[warning]No current session. Use /session list or /session create first.[/warning]") return "", "" + project_id = _current_project_id(state.engine) + identity_index = await load_company_runtime_identity_index(store, project_id) task = await store.get_task(raw_target) if hasattr(store, "get_task") else None if task is not None: - project_id = str(getattr(task, "project_id", "") or "default") - if project_id != _current_project_id(state.engine): - console.print(f"[warning]Target belongs to project '{project_id}'. Switch project first.[/warning]") + task_project_id = str(getattr(task, "project_id", "") or "default") + if task_project_id != project_id: + console.print(f"[warning]Target belongs to project '{task_project_id}'. Switch project first.[/warning]") return "", "" + runtime_identity = identity_index.resolve(task_id=raw_target) + if runtime_identity is not None: + return raw_target, runtime_identity.runtime_session_id return str(getattr(task, "id", "") or ""), str(getattr(task, "session_id", "") or getattr(task, "parent_session_id", "") or "") + runtime_identity = ( + identity_index.resolve(runtime_session_id=raw_target) + or identity_index.resolve(task_session_id=raw_target) + ) + if runtime_identity is not None: + control_task_id = ( + runtime_identity.ui_anchor_task_id + or runtime_identity.config_source_task_id + ) + if control_task_id: + return control_task_id, runtime_identity.runtime_session_id session = await store.get_session(raw_target) if hasattr(store, "get_session") else None if session is None: console.print(f"[warning]Task or session not found: {raw_target}[/warning]") return "", "" - project_id = str(getattr(session, "project_id", "") or "default") - if project_id != _current_project_id(state.engine): - console.print(f"[warning]Target belongs to project '{project_id}'. Switch project first.[/warning]") + session_project_id = str(getattr(session, "project_id", "") or "default") + if session_project_id != project_id: + console.print(f"[warning]Target belongs to project '{session_project_id}'. Switch project first.[/warning]") return "", "" - if raw_target in state.session_to_task: - return state.session_to_task[raw_target], raw_target - tasks = await store.get_tasks(project_id=project_id) if hasattr(store, "get_tasks") else [] + tasks = list(identity_index.tasks) candidates = [ item for item in tasks if str(getattr(item, "session_id", "") or "") == raw_target @@ -3894,8 +3892,15 @@ async def _resolve_runtime_control_target(state: _InteractiveChatState, target: if not candidates: console.print(f"[warning]Session is not task-backed: {raw_target}[/warning]") return "", raw_target - candidates.sort(key=lambda item: bool(str(getattr(item, "parent_session_id", "") or ""))) - return str(getattr(candidates[0], "id", "") or ""), raw_target + task_mode_anchor = min( + candidates, + key=lambda item: ( + bool(str(getattr(item, "parent_session_id", "") or "")), + str(getattr(item, "created_at", "") or ""), + str(getattr(item, "id", "") or ""), + ), + ) + return str(getattr(task_mode_anchor, "id", "") or ""), raw_target def _make_cli_runtime_control_context(state: _InteractiveChatState, controller: ChatTurnController | None = None) -> Any: @@ -3923,35 +3928,66 @@ def _make_cli_runtime_control_context(state: _InteractiveChatState, controller: return context -async def _latest_company_suspend_checkpoint(state: _InteractiveChatState) -> Any | None: - session_id = str(state.session_id or "").strip() - if not session_id: - return None - for name in ("get_active_company_runtime_suspend_checkpoint", "get_pending_company_runtime_suspend_checkpoint"): - getter = getattr(state.engine, name, None) - if callable(getter): - try: - checkpoint = await getter(session_id) - except Exception: - checkpoint = None - if checkpoint is not None and str(getattr(checkpoint, "status", "") or "pending") == "pending": - return checkpoint +async def _company_runtime_identity_for_session( + state: _InteractiveChatState, + session_id: str | None = None, +) -> Any | None: + from opc.layer2_organization.company_runtime_identity import ( + load_company_runtime_identity_index, + ) + + runtime_session_id = str(session_id or state.session_id or "").strip() store = getattr(state.engine, "store", None) - if store is not None and hasattr(store, "get_pending_checkpoints"): - try: - checkpoints = await store.get_pending_checkpoints( - project_id=_current_project_id(state.engine), - session_id=session_id, - checkpoint_types=["company_runtime_suspended", "company_runtime_interrupted"], - ) - except TypeError: - checkpoints = await store.get_pending_checkpoints(project_id=_current_project_id(state.engine), session_id=session_id) - except Exception: - checkpoints = [] - for checkpoint in list(checkpoints or []): - if str(getattr(checkpoint, "checkpoint_type", "") or "") in {"company_runtime_suspended", "company_runtime_interrupted"}: - return checkpoint - return None + if not runtime_session_id or store is None: + return None + try: + identity_index = await load_company_runtime_identity_index( + store, + _current_project_id(state.engine), + ) + # The interactive session may be a role/work-item session. Resolve it + # as a task session after trying the canonical root session so both UI + # roots and child channels converge on the same company runtime. + identity = ( + identity_index.resolve(runtime_session_id=runtime_session_id) + or identity_index.resolve(task_session_id=runtime_session_id) + ) + except Exception: + return None + return identity + + +async def _latest_company_suspend_checkpoint( + state: _InteractiveChatState, + session_id: str | None = None, +) -> Any | None: + identity = await _company_runtime_identity_for_session(state, session_id) + return identity.checkpoint if identity is not None and identity.resumable else None + + +async def _company_runtime_execution_identity( + state: _InteractiveChatState, + runtime_identity: Any, +) -> Any: + """Read execution configuration from the durable runtime config source.""" + from opc.plugins.office_ui.execution_identity import execution_identity_from_task + + config_source_task_id = str( + getattr(runtime_identity, "config_source_task_id", "") or "" + ).strip() + store = getattr(state.engine, "store", None) + if not config_source_task_id or store is None or not hasattr(store, "get_task"): + raise RuntimeError("Company runtime has no durable configuration source.") + config_task = await store.get_task(config_source_task_id) + if config_task is None: + raise RuntimeError("Company runtime configuration source no longer exists.") + return execution_identity_from_task( + config_task, + default_exec_mode=state.mode, + default_company_profile=state.company_profile, + default_preferred_agent=state.preferred_agent or "native", + default_org_id=state.org_id, + ) async def _handle_stop_slash(state: _InteractiveChatState, args: list[str], controller: ChatTurnController | None = None) -> None: @@ -3972,22 +4008,35 @@ async def _handle_stop_slash(state: _InteractiveChatState, args: list[str], cont return payload = dict(result.payload) state.runtime_control_state = str(payload.get("runtime_control_state") or payload.get("status") or "stopped") - state.runtime_control_task_id = str(payload.get("resume_parent_task_id") or payload.get("task_id") or task_id) + state.runtime_control_task_id = str(payload.get("task_id") or task_id) state.runtime_control_session_id = str(payload.get("resume_parent_session_id") or payload.get("session_id") or session_id) state.runtime_control_checkpoint_id = str(payload.get("checkpoint_id") or "") console.print("[success]Stopped.[/success] [dim]Send a message to revise, or /continue to resume.[/dim]") -async def _runtime_control_identity_for_task(state: _InteractiveChatState, task_id: str) -> Any: +async def _runtime_control_execution_identity(state: _InteractiveChatState, task_id: str) -> Any: + from opc.layer2_organization.company_runtime_identity import load_company_runtime_identity_index from opc.plugins.office_ui.execution_identity import execution_identity_from_task store = getattr(state.engine, "store", None) task = None - if store is not None and hasattr(store, "get_task") and task_id: + if store is not None and task_id: try: - task = await store.get_task(task_id) + identity_index = await load_company_runtime_identity_index( + store, + _current_project_id(state.engine), + ) + runtime_identity = identity_index.resolve(task_id=task_id) + task = identity_index.task( + runtime_identity.config_source_task_id if runtime_identity is not None else task_id + ) except Exception: task = None + if task is None and hasattr(store, "get_task"): + try: + task = await store.get_task(task_id) + except Exception: + task = None return execution_identity_from_task( task, default_exec_mode=state.mode, @@ -4014,13 +4063,24 @@ async def _handle_continue_slash(state: _InteractiveChatState, args: list[str], task_id, session_id = await _resolve_runtime_control_target(state, target) if not task_id: return - identity = await _runtime_control_identity_for_task(state, task_id) + identity = await _runtime_control_execution_identity(state, task_id) content = " ".join(message_parts).strip() or "Resume the existing runtime." + checkpoint = await _latest_company_suspend_checkpoint(state, session_id) + if identity.exec_mode in {"company", "org", "custom"} and checkpoint is None: + console.print( + "[warning]No suspended or interrupted company runtime is available to continue.[/warning]" + ) + return if controller is not None and controller.is_busy: - checkpoint = await _latest_company_suspend_checkpoint(state) if checkpoint is None and state.runtime_control_state not in {"suspended", "stopped"}: console.print("[warning]Busy: wait for the current turn or /stop it before /continue.[/warning]") return + metadata: dict[str, Any] = {"ui_force_resume": True} + if checkpoint is not None: + metadata["response_to_checkpoint_id"] = str(getattr(checkpoint, "checkpoint_id", "") or "") + metadata["response_to_checkpoint_type"] = str( + getattr(checkpoint, "checkpoint_type", "") or "company_runtime_suspended" + ) item = QueuedChatInput( text=content, project_id=_current_project_id(state.engine), @@ -4030,26 +4090,29 @@ async def _handle_continue_slash(state: _InteractiveChatState, args: list[str], org_id=identity.org_id, preferred_agent=identity.preferred_agent, domains=list(state.domains), - message_metadata={"ui_force_resume": True}, + message_metadata=metadata, ) state.runtime_control_state = "resuming" state.runtime_control_task_id = task_id state.runtime_control_session_id = session_id or state.session_id - state.runtime_control_checkpoint_id = "" + state.runtime_control_checkpoint_id = str(getattr(checkpoint, "checkpoint_id", "") or "") if controller is not None: await controller.submit_item(item) else: + previous_session_id = state.session_id previous_mode = state.mode previous_profile = state.company_profile previous_org_id = state.org_id previous_agent = state.preferred_agent + state.session_id = session_id or state.session_id state.mode = identity.exec_mode state.company_profile = identity.company_profile state.org_id = identity.org_id state.preferred_agent = identity.preferred_agent try: - await _process_interactive_chat_message(state, content, message_metadata={"ui_force_resume": True}) + await _process_interactive_chat_message(state, content, message_metadata=metadata) finally: + state.session_id = previous_session_id state.mode = previous_mode state.company_profile = previous_profile state.org_id = previous_org_id @@ -5630,140 +5693,6 @@ async def _handle_runtime_slash(state: _InteractiveChatState, args: list[str]) - _render_checkpoint_table(checkpoints[:limit], title="Pending Checkpoints", full=full) -class _ChatRecoveryFacade: - def __init__(self, state: _InteractiveChatState) -> None: - self._state = state - self.project_id = _current_project_id(state.engine) - - @property - def store(self): # noqa: ANN201 - preserve recovery facade shape - return getattr(self._state.engine, "store", None) - - @property - def opc_home(self) -> Path: - return Path(getattr(self._state.engine, "opc_home", get_opc_home())) - - async def ensure_ready(self): - return self._state.engine - - -def _get_chat_recovery_manager(state: _InteractiveChatState) -> Any: - cached = getattr(state, "_cli_chat_recovery_manager", None) - engine_id = id(state.engine) - if cached and cached[0] == engine_id: - return cached[1] - from opc.plugins.cli_board.services.recovery import CliRecoveryManager - - manager = CliRecoveryManager(_ChatRecoveryFacade(state)) - setattr(state, "_cli_chat_recovery_manager", (engine_id, manager)) - return manager - - -def _render_recovery_status(status: Any, *, limit: int, full: bool = False) -> None: - workflows = list(getattr(status, "interrupted", []) or [])[:limit] - if workflows: - table = Table(title=f"Interrupted Company Runtimes ({len(workflows)})") - table.add_column("Parent Task") - table.add_column("Parent Session") - table.add_column("Title") - table.add_column("Profile") - table.add_column("Interrupted") - table.add_column("Work Items") - for workflow in workflows: - interrupted_items = [ - item for item in list(getattr(workflow, "work_items", []) or []) - if bool(getattr(item, "interrupted", False)) - ] - table.add_row( - str(getattr(workflow, "parent_task_id", "") or ""), - str(getattr(workflow, "parent_session_id", "") or ""), - _clip_text(getattr(workflow, "title", "") or "", 70, full=full), - str(getattr(workflow, "profile", "") or ""), - str(getattr(workflow, "interrupted_at", "") or ""), - f"{len(interrupted_items)}/{len(list(getattr(workflow, 'work_items', []) or []))}", - ) - console.print(table) - else: - console.print("[info]No interrupted company runtimes found.[/info]") - - active = list(getattr(status, "active_recoveries", []) or []) - if active: - console.print(f"[info]Active recoveries: {', '.join(active)}[/info]") - - -async def _find_checkpoint_by_id(store: Any, project_id: str, checkpoint_id: str) -> Any | None: - if hasattr(store, "get_execution_checkpoints"): - checkpoints = await store.get_execution_checkpoints(project_id=project_id) - else: - checkpoints = await store.get_pending_checkpoints(project_id=project_id) - return next((item for item in checkpoints if str(getattr(item, "checkpoint_id", "") or "") == checkpoint_id), None) - - -async def _handle_recover_slash(state: _InteractiveChatState, args: list[str]) -> None: - store = _require_chat_store(state, label="Recovery store") - if store is None: - return - if args and args[0].lower() == "resume": - if len(args) != 2: - console.print("[warning]Usage: /recover resume <parent_task_id>. Try /recover.[/warning]") - return - manager = _get_chat_recovery_manager(state) - result = await manager.resume(args[1]) - if result.get("ok"): - resumed = result.get("resumed_work_item_projection_ids", []) or [] - console.print(f"[success]Recovery started for {args[1]}: {', '.join(resumed) or 'runtime queued'}.[/success]") - return - if result.get("error") == "not_found": - checkpoint = await _find_checkpoint_by_id(store, _current_project_id(state.engine), args[1]) - if checkpoint: - session_id = str(getattr(checkpoint, "session_id", "") or "") - suffix = f" Try /session resume {session_id}." if session_id else " Try /checkpoints." - console.print(f"[warning]Checkpoint {args[1]} is not resumed directly.{suffix}[/warning]") - return - console.print(f"[warning]Recovery could not start: {result.get('error', 'unknown_error')}[/warning]") - return - if args and args[0].lower() in {"cancel", "retry"}: - action = args[0].lower() - if len(args) < 2: - console.print(f"[warning]Usage: /recover {action} <parent_task_id>{' --yes' if action == 'cancel' else ''}. Try /recover.[/warning]") - return - if action == "cancel": - remaining, ok = _require_yes_arg(args[2:], usage="/recover cancel <parent_task_id> --yes") - if not ok or remaining: - return - elif len(args) > 2: - console.print(f"[warning]Usage: /recover {action} <parent_task_id>[/warning]") - return - payload = await _run_chat_office_service( - state, - lambda svc: svc.runtime.recovery_action(project_id=_current_project_id(state.engine), action=action, parent_task_id=args[1]), - ) - if payload: - _emit_payload(payload) - return - try: - if args and args[0].lower() == "scan": - args = args[1:] - args, limit, full = _parse_view_args(args) - except ValueError as exc: - console.print(f"[warning]{exc}. Try /recover --limit 20.[/warning]") - return - if args: - console.print("[warning]Usage: /recover [--limit N] [--full] or /recover resume <parent_task_id>.[/warning]") - return - manager = _get_chat_recovery_manager(state) - status = await manager.get_status() - _render_recovery_status(status, limit=limit, full=full) - if hasattr(store, "get_execution_checkpoints"): - checkpoints = await store.get_execution_checkpoints( - project_id=_current_project_id(state.engine), - statuses=["pending", "resuming"], - ) - else: - checkpoints = await store.get_pending_checkpoints(project_id=_current_project_id(state.engine)) - _render_checkpoint_table(checkpoints[:limit], title="Recovery Checkpoints", full=full) - - async def _resolve_logs_target( state: _InteractiveChatState, target: str, @@ -7487,10 +7416,6 @@ def _busy_slash_policy(command: str, args: list[str]) -> BusyCommandPolicy: } if command in readonly_roots: return BusyCommandPolicy.IMMEDIATE_READONLY - if command == "recover": - if not args or args[0].lower() in {"scan", "status", "list"}: - return BusyCommandPolicy.IMMEDIATE_READONLY - return BusyCommandPolicy.BLOCKED_WHEN_BUSY if command == "task": if args and args[0].lower() == "show": return BusyCommandPolicy.IMMEDIATE_READONLY @@ -7810,8 +7735,6 @@ async def _handle_chat_slash_command(state: _InteractiveChatState, user_input: s await _handle_reorg_slash(state, args) elif command == "runtime": await _handle_runtime_slash(state, args) - elif command == "recover": - await _handle_recover_slash(state, args) elif command in {"work-items", "work-item"}: await _handle_work_items_slash(state, args) elif command == "logs": @@ -7835,6 +7758,13 @@ async def _sync_runtime_checkpoint_hint(state: _InteractiveChatState) -> None: display = state.runtime_display if not hasattr(display, "set_checkpoint_hint"): return + runtime_identity = await _company_runtime_identity_for_session(state) + if runtime_identity is not None and runtime_identity.checkpoint is not None: + checkpoint = runtime_identity.checkpoint + checkpoint_type = str(getattr(checkpoint, "checkpoint_type", "") or "pending") + checkpoint_id = str(getattr(checkpoint, "checkpoint_id", "") or "") + display.set_checkpoint_hint(checkpoint_type or checkpoint_id) + return getter = getattr(state.engine, "get_latest_pending_checkpoint_for_session", None) if not callable(getter) or not state.session_id: display.set_checkpoint_hint("") @@ -7862,24 +7792,110 @@ async def _process_interactive_chat_message( try: state.runtime_display.begin_turn() effective_metadata = message_metadata - if effective_metadata is None: - suspend_checkpoint = await _latest_company_suspend_checkpoint(state) - if suspend_checkpoint is not None: - effective_metadata = { - "response_to_checkpoint_id": str(getattr(suspend_checkpoint, "checkpoint_id", "") or ""), - "response_to_checkpoint_type": str(getattr(suspend_checkpoint, "checkpoint_type", "") or "company_runtime_suspended"), - } - elif state.mode == "company": + execution_session_id = state.session_id + execution_origin_task_id: str | None = None + execution_mode = state.mode + execution_company_profile = state.company_profile + execution_org_id = state.org_id + execution_preferred_agent = state.preferred_agent + handoff_identity = None + runtime_identity = await _company_runtime_identity_for_session(state) + runtime_checkpoint = ( + runtime_identity.checkpoint + if runtime_identity is not None + else None + ) + explicit_runtime_type = str( + (effective_metadata or {}).get("response_to_checkpoint_type", "") or "" + ).strip() + explicit_runtime_id = str( + (effective_metadata or {}).get("response_to_checkpoint_id", "") or "" + ).strip() + is_explicit_runtime_handoff = explicit_runtime_type in { + "company_runtime_suspended", + "company_runtime_interrupted", + } + + if is_explicit_runtime_handoff: + if runtime_identity is None or runtime_checkpoint is None: + raise RuntimeError( + "Company runtime checkpoint does not match the current session." + ) + checkpoint_id = str( + getattr(runtime_checkpoint, "checkpoint_id", "") or "" + ).strip() + checkpoint_type = str( + getattr(runtime_checkpoint, "checkpoint_type", "") or "" + ).strip() + checkpoint_status = str( + getattr(runtime_checkpoint, "status", "") or "" + ).strip().lower() + if ( + not explicit_runtime_id + or explicit_runtime_id != checkpoint_id + or explicit_runtime_type != checkpoint_type + ): + raise RuntimeError( + "Company runtime checkpoint identity mismatch; refresh before continuing." + ) + if checkpoint_status != "pending": + raise RuntimeError( + f"Company runtime checkpoint is {checkpoint_status or 'not pending'}." + ) + execution_session_id = runtime_identity.runtime_session_id + execution_origin_task_id = runtime_identity.ui_anchor_task_id or None + handoff_identity = runtime_identity + elif effective_metadata is None and runtime_checkpoint is not None: + checkpoint_status = str( + getattr(runtime_checkpoint, "status", "") or "" + ).strip().lower() + if checkpoint_status != "pending": + raise RuntimeError( + f"Company runtime checkpoint is {checkpoint_status or 'not pending'}." + ) + if runtime_identity is None: + raise RuntimeError( + "Company runtime checkpoint does not match the current session." + ) + effective_metadata = { + "response_to_checkpoint_id": str(getattr(runtime_checkpoint, "checkpoint_id", "") or ""), + "response_to_checkpoint_type": str(getattr(runtime_checkpoint, "checkpoint_type", "") or "company_runtime_suspended"), + } + execution_session_id = runtime_identity.runtime_session_id + execution_origin_task_id = runtime_identity.ui_anchor_task_id or None + handoff_identity = runtime_identity + elif effective_metadata is None: + if runtime_identity is not None and runtime_identity.pending_checkpoint_id: + # An active checkpoint may only be pending or resuming. Never + # let a malformed identity/status fall through as a new turn. + raise RuntimeError( + "Company runtime checkpoint is not available for a new turn." + ) + if state.mode == "company": effective_metadata = {"company_preflight": "manual"} + if handoff_identity is not None: + runtime_execution_identity = await _company_runtime_execution_identity( + state, + handoff_identity, + ) + execution_mode = runtime_execution_identity.exec_mode + execution_company_profile = runtime_execution_identity.company_profile + execution_org_id = runtime_execution_identity.org_id + execution_preferred_agent = runtime_execution_identity.preferred_agent response = await state.engine.process_message( user_input, project_id=getattr(state.engine, "project_id", None), - session_id=state.session_id, - mode=state.mode, - org_id=state.org_id or None, - company_profile=state.company_profile if state.mode == "company" else None, - preferred_agent=state.preferred_agent, + session_id=execution_session_id, + mode=execution_mode, + org_id=execution_org_id or None, + company_profile=( + execution_company_profile + if execution_mode == "company" + else None + ), + preferred_agent=execution_preferred_agent, domains=list(state.domains), + origin_task_id=execution_origin_task_id, message_metadata=effective_metadata, ) await state.runtime_display.flush() @@ -7910,7 +7926,15 @@ async def _process_interactive_chat_message( "company_runtime_interrupted", } ): - state.runtime_control_state = "running" + remaining_checkpoint = await _latest_company_suspend_checkpoint(state) + if remaining_checkpoint is not None: + state.runtime_control_state = "suspended" + state.runtime_control_checkpoint_id = str( + getattr(remaining_checkpoint, "checkpoint_id", "") or "" + ) + else: + state.runtime_control_state = "idle" + state.runtime_control_checkpoint_id = "" except KeyboardInterrupt: console.print("\n[warning]Interrupted. Type /quit to exit.[/warning]") except Exception as e: diff --git a/opc/core/active_task_runs.py b/opc/core/active_task_runs.py new file mode 100644 index 0000000..357e5cf --- /dev/null +++ b/opc/core/active_task_runs.py @@ -0,0 +1,269 @@ +"""Controller-local ownership of active task execution attempts. + +Persisted task rows describe durable workflow state; they cannot prove that +the controller which owns an execution coroutine is still alive. This +registry intentionally stays in memory and is shared by all engines owned by +one controller. +""" + +from __future__ import annotations + +import asyncio +from contextlib import contextmanager +from contextvars import ContextVar +import uuid +from collections.abc import Iterator + + +_CURRENT_HANDOFF: ContextVar[tuple[object, str] | None] = ContextVar( + "opc_active_task_run_handoff", + default=None, +) +_CURRENT_DRIVER_ATTEMPT: ContextVar[tuple[object, str] | None] = ContextVar( + "opc_active_task_run_driver_attempt", + default=None, +) + + +class ActiveTaskRunAdmissionClosed(RuntimeError): + """Raised when execution registration starts after shutdown admission closes.""" + + +class ActiveTaskRunRegistry: + """Track active execution attempts by ``(project_id, task_id)``. + + A task can briefly have overlapping attempts while cancellation and a new + dispatch cross. Each registration therefore receives its own token and a + task remains active until its last token is removed. + """ + + def __init__(self) -> None: + self._attempts: dict[tuple[str, str], set[str]] = {} + self._scope_locks: dict[tuple[str, str], asyncio.Lock] = {} + self._handoff_refs: dict[str, int] = {} + self._handoffs_drained = asyncio.Event() + self._handoffs_drained.set() + self._admission_closed = False + + @staticmethod + def _key(project_id: str | None, task_id: str | None) -> tuple[str, str]: + project = str(project_id or "default").strip() or "default" + task = str(task_id or "").strip() + if not task: + raise ValueError("task_id is required") + return project, task + + def register(self, project_id: str | None, task_id: str | None) -> str: + handoff_token = self._current_pending_handoff_token() + driver_attempt_token = self._current_driver_attempt_token() + if ( + self._admission_closed + and handoff_token is None + and driver_attempt_token is None + ): + raise ActiveTaskRunAdmissionClosed( + "task execution admission is closed for controller shutdown" + ) + key = self._key(project_id, task_id) + attempt_token = uuid.uuid4().hex + self._attempts.setdefault(key, set()).add(attempt_token) + # A pre-shutdown WS request is handed off once its first real execution + # coroutine is registered. The reservation itself is deliberately not + # reported by is_active()/active_task_ids(); only this attempt is. + if handoff_token is not None: + self._settle_handoff(handoff_token) + return attempt_token + + @contextmanager + def bind_driver_attempt(self, attempt_token: str) -> Iterator[None]: + """Allow nested attempts while their live scheduler owns the scope. + + Closing controller admission rejects new ingress, but a scheduler that + was already running may be between its atomic WorkItem claim and child + coroutine creation. Its nested registrations remain admissible until + that scheduler attempt ends, so shutdown can snapshot the still-live + scope instead of creating an orphan RUNNING claim. + """ + + if not self._attempt_token_is_active(attempt_token): + raise ValueError("driver attempt is not active") + context_token = _CURRENT_DRIVER_ATTEMPT.set((self, attempt_token)) + try: + yield + finally: + _CURRENT_DRIVER_ATTEMPT.reset(context_token) + + def reserve_handoff(self) -> str: + """Reserve one accepted ingress request until execution is registered. + + Reservations bridge the short scheduling gap between the WS router and + ``register``. They are controller-local synchronization only and never + become a second liveness source. + """ + + if self._admission_closed: + raise ActiveTaskRunAdmissionClosed( + "task execution admission is closed for controller shutdown" + ) + token = uuid.uuid4().hex + self._handoff_refs[token] = 1 + self._handoffs_drained.clear() + return token + + @contextmanager + def bind_handoff(self, handoff_token: str) -> Iterator[None]: + """Propagate a reservation through tasks spawned by an ingress handler.""" + + if handoff_token not in self._handoff_refs: + raise ValueError("handoff reservation is not pending") + context_token = _CURRENT_HANDOFF.set((self, handoff_token)) + try: + yield + finally: + _CURRENT_HANDOFF.reset(context_token) + + def retain_current_handoff(self) -> str | None: + """Retain the bound reservation for a newly scheduled coroutine.""" + + handoff_token = self._current_pending_handoff_token() + if handoff_token is None: + return None + self._handoff_refs[handoff_token] += 1 + return handoff_token + + def release_current_handoff(self) -> bool: + """Release an accepted request that will not start an execution.""" + + handoff_token = self._current_pending_handoff_token() + if handoff_token is None: + return False + return self.release_handoff(handoff_token) + + def release_handoff(self, handoff_token: str) -> bool: + """Release one owner, draining a request that exited before execution.""" + + refs = self._handoff_refs.get(handoff_token) + if refs is None: + return False + if refs > 1: + self._handoff_refs[handoff_token] = refs - 1 + return True + self._settle_handoff(handoff_token) + return True + + def revoke_handoff(self, handoff_token: str) -> bool: + """Invalidate every retained owner of a queued ingress handoff. + + Controller shutdown uses this after synchronously cancelling a request + which has not registered its first execution attempt. Revocation is + intentionally stronger than ``release_handoff``: callbacks may be + delayed by cancellation cleanup, but the revoked request must neither + keep the shutdown barrier open nor register work after admission has + closed. + """ + + if handoff_token not in self._handoff_refs: + return False + self._settle_handoff(handoff_token) + return True + + def _current_pending_handoff_token(self) -> str | None: + binding = _CURRENT_HANDOFF.get() + if binding is None or binding[0] is not self: + return None + token = binding[1] + return token if token in self._handoff_refs else None + + def _current_driver_attempt_token(self) -> str | None: + binding = _CURRENT_DRIVER_ATTEMPT.get() + if binding is None or binding[0] is not self: + return None + token = binding[1] + return token if self._attempt_token_is_active(token) else None + + def _attempt_token_is_active(self, attempt_token: str) -> bool: + return any( + attempt_token in attempts + for attempts in self._attempts.values() + ) + + def _settle_handoff(self, handoff_token: str) -> None: + self._handoff_refs.pop(handoff_token, None) + if not self._handoff_refs: + self._handoffs_drained.set() + + @property + def admission_closed(self) -> bool: + return self._admission_closed + + def close_admission(self) -> None: + """Reject future attempts without dropping attempts already in flight.""" + + self._admission_closed = True + + async def close_admission_and_wait_for_handoffs(self) -> None: + """Close ingress and wait until every already-accepted request hands off. + + A bound pending reservation may still call ``register`` after admission + closes. That registration atomically drains the reservation and turns + the real coroutine into the sole active fact. This wait therefore ends + at handoff, never at completion of the potentially long execution. + """ + + self.close_admission() + while self._handoff_refs: + await self._handoffs_drained.wait() + + @property + def pending_handoff_count(self) -> int: + return len(self._handoff_refs) + + def is_handoff_pending(self, handoff_token: str | None) -> bool: + return bool(handoff_token and handoff_token in self._handoff_refs) + + def scope_lock( + self, + project_id: str | None, + runtime_session_id: str | None, + ) -> asyncio.Lock: + """Return the controller-shared lock for one durable runtime scope.""" + + project = str(project_id or "default").strip() or "default" + session = str(runtime_session_id or "").strip() + if not session: + raise ValueError("runtime_session_id is required") + key = (project, session) + lock = self._scope_locks.get(key) + if lock is None: + lock = asyncio.Lock() + self._scope_locks[key] = lock + return lock + + def unregister( + self, + project_id: str | None, + task_id: str | None, + attempt_token: str, + ) -> bool: + key = self._key(project_id, task_id) + attempts = self._attempts.get(key) + if not attempts or attempt_token not in attempts: + return False + attempts.remove(attempt_token) + if not attempts: + self._attempts.pop(key, None) + return True + + def is_active(self, project_id: str | None, task_id: str | None) -> bool: + return bool(self._attempts.get(self._key(project_id, task_id))) + + def active_task_ids(self, project_id: str | None) -> set[str]: + project = str(project_id or "default").strip() or "default" + return { + task_id + for (candidate_project, task_id), attempts in self._attempts.items() + if candidate_project == project and attempts + } + + def attempt_count(self, project_id: str | None, task_id: str | None) -> int: + return len(self._attempts.get(self._key(project_id, task_id), ())) diff --git a/opc/database/store.py b/opc/database/store.py index 1928912..6c4fe1a 100644 --- a/opc/database/store.py +++ b/opc/database/store.py @@ -2862,32 +2862,6 @@ class OPCStore: await self._db.commit() return cursor.rowcount > 0 - async def renew_task_lock(self, task_id: str) -> bool: - """Refresh ``execution_locked_at`` for a live running task. - - This is the heartbeat used by the WS handler while it is actively - processing a session message. It only updates rows whose ``status`` is - still ``running`` (anything else has already ended and must not keep a - live timestamp), and deliberately ignores ``execution_lock``: that bit - is set only by delegation checkout, while the office_ui dispatch path - serializes through an in-memory asyncio.Lock and never flips it. The - refreshed ``execution_locked_at`` is what ``reset_orphan_running_tasks`` - compares against on startup to distinguish live work from abandoned - ``running`` rows. - - Returns ``True`` when the row was still ``status=running`` (heartbeat - extended), ``False`` otherwise (task ended or gone — caller should - stop heartbeating). - """ - assert self._db - now_iso = datetime.now().isoformat() - async with self._db.execute( - "UPDATE tasks SET execution_locked_at = ? WHERE id = ? AND status = 'running'", - (now_iso, task_id), - ) as cursor: - await self._db.commit() - return cursor.rowcount > 0 - async def release_task_lock(self, task_id: str) -> None: assert self._db await self._db.execute( @@ -2896,37 +2870,6 @@ class OPCStore: ) await self._db.commit() - async def reset_orphan_running_tasks(self, *, lease_seconds: int = 300) -> dict[str, int]: - """Reset ``status=running`` tasks abandoned by a prior process. - - Safe single-process assumption: when this runs during server startup, - any task that still claims ``status=running`` must be an orphan — its - worker coroutine died with the previous process. We revert it to - ``idle`` so the UI can Continue it, and clear any stale execution lock - regardless of status when the lease has expired. - - Returns a summary dict with keys ``statuses_reset`` and - ``locks_cleared`` giving the affected row counts. - """ - assert self._db - cutoff_iso = (datetime.now() - timedelta(seconds=int(lease_seconds))).isoformat() - async with self._db.execute( - "UPDATE tasks SET status = 'idle', execution_lock = 0, execution_locked_at = NULL " - "WHERE status = 'running' AND (" - "execution_locked_at IS NULL OR execution_locked_at < ?" - ")", - (cutoff_iso,), - ) as cursor: - statuses_reset = cursor.rowcount or 0 - async with self._db.execute( - "UPDATE tasks SET execution_lock = 0, execution_locked_at = NULL " - "WHERE execution_lock = 1 AND execution_locked_at IS NOT NULL AND execution_locked_at < ?", - (cutoff_iso,), - ) as cursor: - locks_cleared = cursor.rowcount or 0 - await self._db.commit() - return {"statuses_reset": statuses_reset, "locks_cleared": locks_cleared} - def _row_to_task(self, row: Any, description: Any) -> Task: cols = [d[0] for d in description] data = dict(zip(cols, row)) @@ -5509,6 +5452,108 @@ class OPCStore: await self.save_delegation_work_item(item) return item + async def claim_delegation_work_item_if_dispatchable( + self, + work_item_id: str, + *, + expected_phase: Phase | str, + role_runtime_session_id: str, + seat_id: str, + task_id: str, + work_item_revision: int = 0, + ) -> DelegationWorkItem | None: + """Atomically claim an unheld, unowned dispatchable WorkItem. + + The dispatcher may be operating on a snapshot loaded before a Stop or + shutdown transition. Keeping the phase, claim, queue, and durable + hold predicates in the same UPDATE prevents that stale snapshot from + resurrecting a suspended WorkItem. + """ + + phase = coerce_phase(expected_phase) + dispatchable_phases = { + Phase.READY, + Phase.READY_FOR_REWORK, + *IN_PROGRESS_PHASES, + } + if phase not in dispatchable_phases: + return None + if phase != Phase.RUNNING: + validate_transition(phase, Phase.RUNNING) + role_session_id = str(role_runtime_session_id or "").strip() + claimed_task_id = str(task_id or "").strip() + if not work_item_id or not role_session_id or not claimed_task_id: + return None + + updated_at = datetime.now() + db = self._require_db() + cursor = await db.execute( + """UPDATE delegation_work_items + SET phase = ?, + role_runtime_session_id = ?, + claimed_by_role_runtime_session_id = ?, + claimed_by_seat_id = ?, + metadata = json_set( + COALESCE(NULLIF(metadata, ''), '{}'), + '$.claimed_by_role_session_id', ?, + '$.claimed_task_id', ?, + '$.claimed_work_item_revision', ? + ), + updated_at = ? + WHERE work_item_id = ? + AND phase = ? + AND COALESCE(claimed_by_role_runtime_session_id, '') = '' + AND COALESCE(claimed_by_seat_id, '') = '' + AND COALESCE(json_extract(metadata, '$.claimed_by_role_session_id'), '') = '' + AND COALESCE(json_extract(metadata, '$.claimed_task_id'), '') = '' + AND COALESCE(json_extract(metadata, '$.dispatch_hold'), '') = '' + AND COALESCE(json_extract(metadata, '$.queued_behind_session'), '') = '' + AND COALESCE( + CAST(json_extract(metadata, '$.manager_mutation_revision') AS INTEGER), + 0 + ) = ?""", + ( + Phase.RUNNING.value, + role_session_id, + role_session_id, + str(seat_id or "").strip(), + role_session_id, + claimed_task_id, + int(work_item_revision or 0), + updated_at.isoformat(), + str(work_item_id or "").strip(), + phase.value, + int(work_item_revision or 0), + ), + ) + await db.commit() + if not (getattr(cursor, "rowcount", 0) or 0): + return None + persisted = await self.get_delegation_work_item(work_item_id) + if persisted is None: + return None + persisted_metadata = dict(persisted.metadata or {}) + if ( + persisted.phase != Phase.RUNNING + or str(persisted.claimed_by_role_runtime_session_id or "").strip() + != role_session_id + or str(persisted_metadata.get("claimed_by_role_session_id", "") or "").strip() + != role_session_id + or str(persisted_metadata.get("claimed_task_id", "") or "").strip() + != claimed_task_id + or str(persisted_metadata.get("dispatch_hold", "") or "").strip() + or str(persisted_metadata.get("queued_behind_session", "") or "").strip() + ): + # Stop/shutdown may have won immediately after the CAS commit and + # cleared this claim while adding a durable hold. The committed + # UPDATE is not permission to spawn once that newer state exists. + return None + # Do not fire the generic phase hooks here. The executor's first + # idempotent RUNNING transition performs projection. Deferring it + # avoids a post-commit hook racing after Stop and projecting the Task + # back to RUNNING from an already-held WorkItem. + return persisted + async def apply_delegation_review_resolution( self, work_item_id: str, @@ -7148,6 +7193,262 @@ class OPCStore: ) await self._db.commit() + async def get_or_create_active_execution_checkpoint( + self, + checkpoint: ExecutionCheckpoint, + *, + checkpoint_types: list[str] | tuple[str, ...] | set[str], + create_if_missing: bool = True, + ) -> tuple[ExecutionCheckpoint | None, bool]: + """Atomically reuse or create one active checkpoint for a session scope. + + ``BEGIN IMMEDIATE`` serializes checkpoint creation across independent + controller/store connections. It also repairs historical duplicate + active rows in the same transaction, so concurrent startup/shutdown + reconcilers can never supersede each other's newly-created checkpoint + and leave the scope without a durable recovery point. + """ + + assert self._db + clean_types = sorted( + { + str(item).strip() + for item in checkpoint_types + if str(item).strip() + } + ) + project_id = str(checkpoint.project_id or "default").strip() or "default" + session_id = str(checkpoint.session_id or "").strip() + checkpoint_type = str(checkpoint.checkpoint_type or "").strip() + if not session_id: + raise ValueError("active execution checkpoint requires session_id") + if checkpoint_type not in clean_types: + raise ValueError( + "checkpoint_type must be included in the active checkpoint scope" + ) + + placeholders = ", ".join("?" for _ in clean_types) + try: + await self._db.execute("BEGIN IMMEDIATE") + async with self._db.execute( + f"""SELECT * FROM execution_checkpoints + WHERE project_id = ? + AND session_id = ? + AND checkpoint_type IN ({placeholders}) + AND status IN ('pending', 'resuming') + ORDER BY updated_at DESC, created_at DESC, checkpoint_id DESC""", + (project_id, session_id, *clean_types), + ) as cursor: + rows = await cursor.fetchall() + cols = [description[0] for description in cursor.description] + + if rows: + decoded = [dict(zip(cols, row)) for row in rows] + winner_data = decoded[0] + winner_id = str(winner_data["checkpoint_id"]) + now = datetime.now().isoformat() + for duplicate in decoded[1:]: + duplicate_id = str(duplicate.get("checkpoint_id", "") or "").strip() + if not duplicate_id: + continue + payload = _json_loads(duplicate.get("payload"), {}) + payload["superseded_at"] = now + payload["superseded_by_checkpoint_id"] = winner_id + await self._db.execute( + """UPDATE execution_checkpoints + SET status = 'superseded', payload = ?, updated_at = ? + WHERE checkpoint_id = ? AND status IN ('pending', 'resuming')""", + (_json_dumps(payload), now, duplicate_id), + ) + await self._db.commit() + return ( + ExecutionCheckpoint( + checkpoint_id=winner_id, + project_id=str(winner_data["project_id"]), + session_id=winner_data.get("session_id"), + checkpoint_type=str(winner_data["checkpoint_type"]), + status=str(winner_data["status"]), + task_id=winner_data.get("task_id"), + payload=_json_loads(winner_data.get("payload"), {}), + created_at=datetime.fromisoformat(str(winner_data["created_at"])), + updated_at=datetime.fromisoformat(str(winner_data["updated_at"])), + ), + False, + ) + + if not create_if_missing: + await self._db.commit() + return None, False + + await self._db.execute( + """INSERT INTO execution_checkpoints + (checkpoint_id, project_id, session_id, checkpoint_type, status, + task_id, payload, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""", + ( + checkpoint.checkpoint_id, + project_id, + session_id, + checkpoint_type, + checkpoint.status, + checkpoint.task_id, + _json_dumps(checkpoint.payload), + checkpoint.created_at.isoformat(), + checkpoint.updated_at.isoformat(), + ), + ) + await self._db.commit() + return checkpoint, True + except Exception: + await self._db.rollback() + raise + + async def normalize_active_execution_checkpoints( + self, + *, + project_id: str, + session_id: str, + checkpoint_types: list[str] | tuple[str, ...] | set[str], + ) -> ExecutionCheckpoint | None: + """Return one active scope owner while superseding duplicate rows. + + Unlike creation, startup reconciliation must not manufacture a + checkpoint merely because none exists. This wrapper reuses the same + serialized transaction and duplicate winner rule with insertion + explicitly disabled. + """ + + clean_types = sorted( + { + str(item).strip() + for item in checkpoint_types + if str(item).strip() + } + ) + if not clean_types or not str(session_id or "").strip(): + return None + candidate = ExecutionCheckpoint( + project_id=str(project_id or "default").strip() or "default", + session_id=str(session_id or "").strip(), + checkpoint_type=clean_types[0], + ) + checkpoint, _created = await self.get_or_create_active_execution_checkpoint( + candidate, + checkpoint_types=clean_types, + create_if_missing=False, + ) + return checkpoint + + async def compare_and_set_execution_checkpoint( + self, + checkpoint_id: str, + *, + expected_statuses: list[str] | tuple[str, ...] | set[str], + status: str, + payload: dict[str, Any], + updated_at: datetime | None = None, + ) -> bool: + """Atomically transition a checkpoint only from an expected state. + + The conditional UPDATE is the cross-controller guard for checkpoint + consumption. In-memory scope locks serialize one Office controller; + this CAS prevents a standalone CLI/controller from claiming the same + pending runtime concurrently. + """ + + assert self._db + expected = [ + str(item).strip() + for item in expected_statuses + if str(item).strip() + ] + if not checkpoint_id or not expected: + return False + placeholders = ", ".join("?" for _ in expected) + cursor = await self._db.execute( + f"""UPDATE execution_checkpoints + SET status = ?, payload = ?, updated_at = ? + WHERE checkpoint_id = ? AND status IN ({placeholders})""", + ( + str(status or "").strip(), + _json_dumps(dict(payload or {})), + (updated_at or datetime.now()).isoformat(), + checkpoint_id, + *expected, + ), + ) + await self._db.commit() + return cursor.rowcount == 1 + + async def complete_execution_checkpoint_and_reopen_ui_anchor( + self, + checkpoint_id: str, + *, + project_id: str, + session_id: str, + expected_status: str, + status: str, + payload: dict[str, Any], + ui_anchor_task_id: str = "", + updated_at: datetime | None = None, + ) -> bool: + """Atomically complete a runtime handoff and reopen its UI anchor. + + The anchor must never become chat-runnable if a concurrent Stop already + took checkpoint ownership back. Keeping both writes in one SQLite + transaction makes the checkpoint CAS the gate for the UI projection. + """ + + assert self._db + checkpoint_id = str(checkpoint_id or "").strip() + project_id = str(project_id or "default").strip() or "default" + session_id = str(session_id or "").strip() + expected_status = str(expected_status or "").strip() + status = str(status or "").strip() + ui_anchor_task_id = str(ui_anchor_task_id or "").strip() + if not checkpoint_id or not session_id or not expected_status or not status: + return False + now = updated_at or datetime.now() + try: + await self._db.execute("BEGIN IMMEDIATE") + cursor = await self._db.execute( + """UPDATE execution_checkpoints + SET status = ?, payload = ?, updated_at = ? + WHERE checkpoint_id = ? + AND project_id = ? + AND session_id = ? + AND status = ?""", + ( + status, + _json_dumps(dict(payload or {})), + now.isoformat(), + checkpoint_id, + project_id, + session_id, + expected_status, + ), + ) + if cursor.rowcount != 1: + await self._db.rollback() + return False + if ui_anchor_task_id: + await self._db.execute( + """UPDATE tasks + SET status = ?, execution_lock = 0, execution_locked_at = NULL + WHERE id = ? AND project_id = ? AND status = ?""", + ( + TaskStatus.IDLE.value, + ui_anchor_task_id, + project_id, + TaskStatus.CANCELLED.value, + ), + ) + await self._db.commit() + return True + except Exception: + await self._db.rollback() + raise + async def get_execution_checkpoints( self, project_id: str = "default", diff --git a/opc/engine.py b/opc/engine.py index 15d9917..121065d 100644 --- a/opc/engine.py +++ b/opc/engine.py @@ -7,11 +7,11 @@ import copy import hashlib import inspect import json -import os import re import shutil import time import uuid +from contextlib import nullcontext from datetime import datetime from pathlib import Path from types import SimpleNamespace @@ -21,6 +21,10 @@ from loguru import logger from opc.core.attachment_store import AttachmentRef, AttachmentStore from opc.core.attachment_content import can_extract_text, extract_attachment_text +from opc.core.active_task_runs import ( + ActiveTaskRunAdmissionClosed, + ActiveTaskRunRegistry, +) from opc.core.company_tools import ( company_collaboration_enabled_for_task, resolve_company_turn_mode, @@ -81,6 +85,7 @@ from opc.layer2_organization.communication import CommunicationManager from opc.layer2_organization.collaboration_policy import ownership_guard_violation from opc.layer2_organization.secretary import SecretaryService from opc.layer2_organization.company_mode import ( + CompanyExecutorDriverOwnership, CompanyRuntimeSpec, CompanyRuntimeSpecBuilder, CompanyWorkItemExecutor, @@ -91,6 +96,12 @@ from opc.layer2_organization.company_mode import ( serialized_company_plan_from_metadata, ) from opc.layer2_organization.company_runtime import canonical_role_session_id +from opc.layer2_organization.company_runtime_identity import ( + build_company_runtime_identity_index, + is_company_runtime_task, + is_pure_company_ui_anchor, + load_company_runtime_identity_index, +) from opc.layer2_organization.metadata_ownership import ( build_work_item_owner_execution_copy, ) @@ -354,6 +365,8 @@ class OPCEngine: store: OPCStore | None = None, owns_store: bool = True, run_startup_reconcile: bool = True, + active_task_run_registry: ActiveTaskRunRegistry | None = None, + owns_active_task_run_registry: bool | None = None, on_progress: Callable[[str], Coroutine[Any, Any, None]] | None = None, on_runtime_event: Callable[[OPCEvent], Coroutine[Any, Any, None]] | None = None, on_escalation: Callable[[str, list[dict]], Coroutine[Any, Any, str | None]] | None = None, @@ -373,6 +386,17 @@ class OPCEngine: self.store: OPCStore | None = store self._owns_store = bool(owns_store) self._run_startup_reconcile = bool(run_startup_reconcile) + if active_task_run_registry is None: + self._active_task_run_registry = ActiveTaskRunRegistry() + default_registry_owner = True + else: + self._active_task_run_registry = active_task_run_registry + default_registry_owner = False + self._owns_active_task_run_registry = ( + default_registry_owner + if owns_active_task_run_registry is None + else bool(owns_active_task_run_registry) + ) self.llm: LLMProvider | None = None self.attachment_store: AttachmentStore | None = None @@ -410,7 +434,7 @@ class OPCEngine: self.task_router: TaskRouter | None = None self._initialized = False - self._active_task_runs: set[str] = set() + self._shutting_down = False self._runtime_config_signature: tuple[tuple[str, float], ...] | None = None self._project_delegate_lock: asyncio.Lock | None = None self._project_engine_delegates: dict[str, OPCEngine] = {} @@ -661,6 +685,7 @@ class OPCEngine: emit_runtime_event=self._emit_company_runtime_event, work_item_timeout=self.config.system.task_mode.sub_agent_timeout_sec, role_prompt_runner=self._run_role_prompt_via_task_execution_agent, + active_task_run_registry=self._active_task_run_registry, ) self.communication.set_meeting_turn_runner(self._run_meeting_turn) self.reorg_manager = ReorgManager( @@ -729,14 +754,16 @@ class OPCEngine: reconciled = await self._reconcile_interrupted_project_tasks() except InvalidPhaseTransition: logger.opt(exception=True).error( - "Startup reconcile hit an invalid work-item phase transition for project {}; continuing initialization", + "Startup reconcile hit an invalid work-item phase transition for project {}; aborting initialization", self.project_id or "default", ) + raise except Exception: logger.opt(exception=True).error( - "Startup reconcile failed for project {}; continuing initialization", + "Startup reconcile failed for project {}; aborting initialization", self.project_id or "default", ) + raise if self.comms_reactivation_sweeper is not None: await self.comms_reactivation_sweeper.start() self._initialized = True @@ -4963,14 +4990,24 @@ class OPCEngine: ) -> tuple[CompanyWorkItemRuntimePlan, list[Task]] | None: if not self.store or not parent_session_id: return None - tasks = await self.store.get_tasks(project_id=self.project_id or "default") + identity_index = await load_company_runtime_identity_index( + self.store, + self.project_id or "default", + ) + identity = identity_index.resolve(runtime_session_id=parent_session_id) + if identity is None: + return None work_item_tasks = [ task - for task in tasks - if str(getattr(task, "parent_session_id", "") or "").strip() == parent_session_id + for task_id in identity.runtime_task_ids + if task_id != identity.ui_anchor_task_id + for task in [identity_index.task(task_id)] + if task is not None + and is_company_runtime_task(task) and ( work_item_projection_id_from_metadata(getattr(task, "metadata", {}) or {}) or is_work_item_runtime_metadata(getattr(task, "metadata", {}) or {}) + or linked_work_item_id_for_task(task) ) ] if not work_item_tasks: @@ -4989,7 +5026,17 @@ class OPCEngine: return None plan_data = None - for task in sorted(latest_by_projection_id.values(), key=lambda item: (item.created_at, item.id), reverse=True): + plan_sources = list(latest_by_projection_id.values()) + config_source = identity_index.task(identity.config_source_task_id) + if config_source is not None and config_source.id not in { + task.id for task in plan_sources + }: + plan_sources.append(config_source) + for task in sorted( + plan_sources, + key=lambda item: (item.created_at, item.id), + reverse=True, + ): candidate = serialized_company_plan_from_metadata(task.metadata) if candidate: plan_data = candidate @@ -5215,6 +5262,38 @@ class OPCEngine: payload["basis_hash"] = self._checkpoint_basis_hash(payload) return payload + async def _build_company_runtime_suspend_checkpoint( + self, + *, + checkpoint_type: str, + reason: str, + parent_session_id: str, + origin_task_id: str | None, + plan: CompanyWorkItemRuntimePlan, + tasks: list[Task], + stop_intent_id: str | None = None, + payload_updates: dict[str, Any] | None = None, + ) -> ExecutionCheckpoint: + payload = await self._company_runtime_checkpoint_payload( + checkpoint_type=checkpoint_type, + reason=reason, + parent_session_id=parent_session_id, + origin_task_id=origin_task_id, + plan=plan, + tasks=tasks, + stop_intent_id=stop_intent_id, + ) + if payload_updates: + payload.update(dict(payload_updates)) + payload["basis_hash"] = self._checkpoint_basis_hash(payload) + return ExecutionCheckpoint( + project_id=self.project_id or "default", + session_id=parent_session_id, + checkpoint_type=checkpoint_type, + task_id=origin_task_id, + payload=payload, + ) + async def _save_company_runtime_suspend_checkpoint( self, *, @@ -5225,9 +5304,10 @@ class OPCEngine: plan: CompanyWorkItemRuntimePlan, tasks: list[Task], stop_intent_id: str | None = None, - ) -> ExecutionCheckpoint: + payload_updates: dict[str, Any] | None = None, + ) -> tuple[ExecutionCheckpoint, bool]: assert self.store - payload = await self._company_runtime_checkpoint_payload( + checkpoint = await self._build_company_runtime_suspend_checkpoint( checkpoint_type=checkpoint_type, reason=reason, parent_session_id=parent_session_id, @@ -5235,24 +5315,12 @@ class OPCEngine: plan=plan, tasks=tasks, stop_intent_id=stop_intent_id, + payload_updates=payload_updates, ) - checkpoint = ExecutionCheckpoint( - project_id=self.project_id or "default", - session_id=parent_session_id, - checkpoint_type=checkpoint_type, - task_id=origin_task_id, - payload=payload, + return await self.store.get_or_create_active_execution_checkpoint( + checkpoint, + checkpoint_types=_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES, ) - await self.store.save_execution_checkpoint(checkpoint) - supersede = getattr(self.store, "supersede_pending_checkpoints", None) - if callable(supersede): - await supersede( - project_id=checkpoint.project_id, - session_id=parent_session_id, - checkpoint_types=list(_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES), - exclude_checkpoint_id=checkpoint.checkpoint_id, - ) - return checkpoint async def get_pending_company_runtime_suspend_checkpoint( self, @@ -5309,6 +5377,73 @@ class OPCEngine: return phase return Phase.READY + async def _company_runtime_task_is_fully_suspended( + self, + task: Task, + *, + checkpoint_type: str, + ) -> bool: + if not self.store: + return False + metadata = dict(task.metadata or {}) + if ( + str(metadata.get("company_runtime_stop_state", "") or "").strip() != "suspended" + or str(metadata.get("company_runtime_suspend_checkpoint_type", "") or "").strip() + != checkpoint_type + or not str(metadata.get("company_runtime_suspended_at", "") or "").strip() + or task.execution_lock + or task.execution_locked_at is not None + ): + return False + + work_item_id = linked_work_item_id_for_task(task) + if work_item_id: + getter = getattr(self.store, "get_delegation_work_item", None) + if not callable(getter): + return False + try: + work_item = await getter(work_item_id) + except Exception: + return False + if work_item is None: + return False + work_item_metadata = dict(getattr(work_item, "metadata", {}) or {}) + if getattr(work_item, "phase", None) not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED}: + if ( + str(metadata.get("dispatch_hold", "") or "").strip() + != "company_runtime_suspended" + or str(work_item_metadata.get("dispatch_hold", "") or "").strip() + != "company_runtime_suspended" + or str(work_item_metadata.get("suspend_checkpoint_type", "") or "").strip() + != checkpoint_type + or str(getattr(work_item, "claimed_by_role_runtime_session_id", "") or "").strip() + or str(getattr(work_item, "claimed_by_seat_id", "") or "").strip() + or str(work_item_metadata.get("claimed_by_role_session_id", "") or "").strip() + or str(work_item_metadata.get("claimed_task_id", "") or "").strip() + ): + return False + + role_session_id = str(metadata.get("delegation_role_session_id", "") or "").strip() + if role_session_id: + getter = getattr(self.store, "get_delegation_role_session", None) + if callable(getter): + try: + role_session = await getter(role_session_id) + except Exception: + return False + if role_session is not None and ( + str(getattr(role_session, "focused_work_item_id", "") or "").strip() + or str(getattr(role_session, "status", "") or "").strip().lower() != "idle" + ): + return False + + latest_session = await self._load_latest_external_session_for_task(task) + if latest_session is not None: + session_status = str(getattr(latest_session, "status", "") or "").strip().lower() + if session_status not in {"suspended", "failed", "cancelled", "denied", "rejected"}: + return False + return True + async def _suspend_company_runtime_tasks( self, tasks: list[Task], @@ -5325,7 +5460,41 @@ class OPCEngine: update_role_session = getattr(self.store, "update_delegation_role_session", None) update_work_item = getattr(self.store, "update_delegation_work_item", None) for task in tasks: - if task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: + work_item_id = linked_work_item_id_for_task(task) + work_item = None + if work_item_id: + if not callable(get_work_item) or not callable(update_work_item): + raise RuntimeError( + f"company runtime cannot durably suspend work item {work_item_id}" + ) + try: + work_item = await get_work_item(work_item_id) + except Exception: + logger.opt(exception=True).error( + "company runtime suspend: failed to load authoritative work item {}", + work_item_id, + ) + raise + if work_item is None: + raise RuntimeError( + f"company runtime work item {work_item_id} no longer exists" + ) + task_is_terminal = task.status in { + TaskStatus.DONE, + TaskStatus.FAILED, + TaskStatus.CANCELLED, + } + work_item_is_active = bool( + work_item is not None + and getattr(work_item, "phase", None) + not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED} + ) + if task_is_terminal and not work_item_is_active: + continue + if await self._company_runtime_task_is_fully_suspended( + task, + checkpoint_type=checkpoint_type, + ): continue affected.append(task.id) task.metadata = dict(task.metadata or {}) @@ -5341,17 +5510,11 @@ class OPCEngine: task.execution_locked_at = None task.result = task.result if task.result else None - work_item_id = linked_work_item_id_for_task(task) suspended_phase: Phase | None = None - if work_item_id and callable(get_work_item): - try: - work_item = await get_work_item(work_item_id) - except Exception: - work_item = None + if work_item_id: if ( - work_item is not None - and callable(update_work_item) - and getattr(work_item, "phase", None) not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED} + getattr(work_item, "phase", None) + not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED} ): current_phase = getattr(work_item, "phase", None) suspended_phase = current_phase if isinstance(current_phase, Phase) else self._suspend_target_phase(current_phase) @@ -5381,10 +5544,11 @@ class OPCEngine: claimed_by_seat_id="", ) except Exception: - logger.opt(exception=True).debug( - "company runtime suspend: hold/release failed for %s", + logger.opt(exception=True).error( + "company runtime suspend: authoritative hold/release failed for {}", work_item_id, ) + raise else: task.metadata["dispatch_hold"] = "company_runtime_suspended" task.metadata["suspended_phase"] = suspended_phase.value @@ -5410,7 +5574,14 @@ class OPCEngine: target.metadata = {**dict(getattr(target, "metadata", {}) or {}), **dict(task.metadata or {})} target.execution_lock = False target.execution_locked_at = None - if target.status not in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: + if task_is_terminal: + # The WorkItem hold write fires the generic phase projection + # hook, which can briefly rewrite a stale terminal Task to the + # authoritative nonterminal phase. A suspend is not a resume: + # retain the pre-existing Task projection while attaching the + # durable hold; resume will project the WorkItem deliberately. + target.status = task.status + elif target.status not in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: if suspended_phase is not None: target.status = task_status_for_phase(suspended_phase) elif original_task_status: @@ -5438,6 +5609,127 @@ class OPCEngine: logger.opt(exception=True).debug("company runtime suspend: role session idle update failed") return affected + async def _checkpoint_and_suspend_company_runtime_scope( + self, + *, + checkpoint_type: str, + reason: str, + parent_session_id: str, + origin_task_id: str | None, + plan: CompanyWorkItemRuntimePlan, + tasks: list[Task], + stop_intent_id: str | None = None, + ) -> tuple[ExecutionCheckpoint, bool, list[str]]: + """Install durable holds before publishing a resumable checkpoint. + + A pending checkpoint is an execution capability, so exposing it before + WorkItem/Task holds are committed lets another controller resume while + Stop is still suspending the scope. Build the pre-stop snapshot first, + commit all holds, and only then atomically create (or normalize) the + single active checkpoint. + """ + + assert self.store + candidate = await self._build_company_runtime_suspend_checkpoint( + checkpoint_type=checkpoint_type, + reason=reason, + parent_session_id=parent_session_id, + origin_task_id=origin_task_id, + plan=plan, + tasks=tasks, + stop_intent_id=stop_intent_id, + ) + existing = await self.get_active_company_runtime_suspend_checkpoint( + parent_session_id + ) + checkpoint = existing or candidate + payload = dict(checkpoint.payload or {}) + effective_reason = str(payload.get("reason", "") or reason) + effective_type = str(checkpoint.checkpoint_type or checkpoint_type) + effective_stop_intent_id = str( + payload.get("stop_intent_id", "") or stop_intent_id or "" + ) + affected = await self._suspend_company_runtime_tasks( + tasks, + reason=effective_reason, + checkpoint_type=effective_type, + stop_intent_id=effective_stop_intent_id, + ) + + created = False + if existing is None: + checkpoint, created = ( + await self.store.get_or_create_active_execution_checkpoint( + candidate, + checkpoint_types=_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES, + ) + ) + if checkpoint.checkpoint_id != candidate.checkpoint_id: + payload = dict(checkpoint.payload or {}) + affected.extend( + await self._suspend_company_runtime_tasks( + tasks, + reason=str(payload.get("reason", "") or reason), + checkpoint_type=str( + checkpoint.checkpoint_type or checkpoint_type + ), + stop_intent_id=str( + payload.get("stop_intent_id", "") + or stop_intent_id + or "" + ), + ) + ) + + # Stop wins over an in-flight resume only after its holds are durable. + # If resume completed in the meantime, create a fresh checkpoint over + # those already-installed holds instead of leaving the scope held with + # no resumable fact. + for _attempt in range(4): + status = str(checkpoint.status or "").strip().lower() + if status in {"pending", "resuming"}: + transitioned = await self._mark_company_runtime_checkpoint_status( + checkpoint, + status="pending", + payload_updates=( + { + "resume_state": "interrupted", + "resume_interrupted_at": datetime.now().isoformat(), + "resume_interruption_reason": reason, + } + if status == "resuming" + else None + ), + expected_statuses={status}, + ) + if transitioned: + return checkpoint, created, list(dict.fromkeys(affected)) + refreshed = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if refreshed is not None: + checkpoint = refreshed + continue + + replacement = ExecutionCheckpoint( + project_id=candidate.project_id, + session_id=candidate.session_id, + checkpoint_type=candidate.checkpoint_type, + task_id=candidate.task_id, + payload=dict(candidate.payload or {}), + ) + checkpoint, replacement_created = ( + await self.store.get_or_create_active_execution_checkpoint( + replacement, + checkpoint_types=_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES, + ) + ) + created = created or replacement_created + + raise RuntimeError( + "company runtime checkpoint kept changing while suspension was finalized" + ) + async def suspend_company_runtime( self, *, @@ -5449,53 +5741,61 @@ class OPCEngine: ) -> dict[str, Any] | None: if not self.store: return None - task = await self.store.get_task(origin_task_id) - parent_session_id = ( - str(session_id or "").strip() - or (str(task.session_id or task.parent_session_id or "").strip() if task else "") + project_id = str(self.project_id or "default").strip() or "default" + requested_session_id = str(session_id or "").strip() + identity_index = await load_company_runtime_identity_index( + self.store, + project_id, ) - if not parent_session_id: + identity = identity_index.resolve(task_id=origin_task_id) + if identity is None and requested_session_id: + identity = identity_index.resolve(runtime_session_id=requested_session_id) + if identity is None: return None - existing = await self.get_pending_company_runtime_suspend_checkpoint(parent_session_id) - if existing is not None and existing.checkpoint_type == checkpoint_type: - payload = dict(existing.payload or {}) + parent_session_id = identity.runtime_session_id + if requested_session_id and requested_session_id != parent_session_id: + requested_identity = identity_index.resolve( + runtime_session_id=requested_session_id, + ) + if requested_identity is None or requested_identity != identity: + return None + + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + snapshot = await self._load_company_runtime_snapshot(parent_session_id) + if not snapshot: + return None + plan, tasks = snapshot + if not tasks: + return None + + checkpoint, created, affected_ids = ( + await self._checkpoint_and_suspend_company_runtime_scope( + checkpoint_type=checkpoint_type, + reason=reason, + parent_session_id=parent_session_id, + origin_task_id=origin_task_id, + plan=plan, + tasks=tasks, + stop_intent_id=stop_intent_id, + ) + ) + idempotent = not created + + payload = dict(checkpoint.payload or {}) + effective_stop_intent_id = str( + payload.get("stop_intent_id", "") or stop_intent_id or "" + ) return { - "checkpoint_id": existing.checkpoint_id, - "checkpoint_type": existing.checkpoint_type, + "checkpoint_id": checkpoint.checkpoint_id, + "checkpoint_type": checkpoint.checkpoint_type, "session_id": parent_session_id, - "task_ids": list(payload.get("task_ids", []) or []), - "stop_intent_id": str(payload.get("stop_intent_id", "") or stop_intent_id or ""), - "idempotent": True, + "task_ids": affected_ids, + "stop_intent_id": effective_stop_intent_id, + "idempotent": idempotent, } - snapshot = await self._load_company_runtime_snapshot(parent_session_id) - if not snapshot: - return None - plan, tasks = snapshot - if not tasks: - return None - checkpoint = await self._save_company_runtime_suspend_checkpoint( - checkpoint_type=checkpoint_type, - reason=reason, - parent_session_id=parent_session_id, - origin_task_id=origin_task_id, - plan=plan, - tasks=tasks, - stop_intent_id=stop_intent_id, - ) - affected_ids = await self._suspend_company_runtime_tasks( - tasks, - reason=reason, - checkpoint_type=checkpoint_type, - stop_intent_id=stop_intent_id, - ) - return { - "checkpoint_id": checkpoint.checkpoint_id, - "checkpoint_type": checkpoint.checkpoint_type, - "session_id": parent_session_id, - "task_ids": affected_ids, - "stop_intent_id": stop_intent_id or "", - "idempotent": False, - } @staticmethod def _external_resume_token_is_provider_token( @@ -5638,7 +5938,39 @@ class OPCEngine: if resume_task_ids is not None and task.id not in resume_task_ids: refreshed.append(task) continue - if task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: + work_item_id = linked_work_item_id_for_task(task) + work_item = work_item_by_id.get(work_item_id) + if work_item_id and ( + not callable(get_work_item) or not callable(update_work_item) + ): + raise RuntimeError( + f"company runtime cannot durably resume work item {work_item_id}" + ) + if work_item is None and work_item_id: + try: + work_item = await get_work_item(work_item_id) + except Exception: + logger.opt(exception=True).error( + "company runtime resume: failed to load authoritative work item {}", + work_item_id, + ) + raise + if work_item is not None: + work_item_by_id[work_item_id] = work_item + if work_item_id and work_item is None: + raise RuntimeError( + f"company runtime work item {work_item_id} no longer exists" + ) + task_is_terminal = task.status in { + TaskStatus.DONE, + TaskStatus.FAILED, + TaskStatus.CANCELLED, + } + work_item_is_nonterminal = bool( + work_item is not None + and getattr(work_item, "phase", None) not in DONE_PHASES + ) + if task_is_terminal and not work_item_is_nonterminal: refreshed.append(task) continue task.metadata = dict(task.metadata or {}) @@ -5686,7 +6018,6 @@ class OPCEngine: task.execution_locked_at = None task.result = None task_snapshot = task_snapshot_by_id.get(task.id, {}) - work_item_id = linked_work_item_id_for_task(task) work_item_snapshot = work_item_snapshot_by_id.get(work_item_id, {}) task_work_item_snapshot = task_snapshot.get("work_item", {}) phase_value = str(work_item_snapshot.get("phase", "") or "").strip() @@ -5696,14 +6027,6 @@ class OPCEngine: restored_phase = Phase(phase_value) if phase_value else None except ValueError: restored_phase = None - work_item = work_item_by_id.get(work_item_id) - if work_item is None and work_item_id and callable(get_work_item): - try: - work_item = await get_work_item(work_item_id) - except Exception: - work_item = None - if work_item is not None: - work_item_by_id[work_item_id] = work_item work_item_phase = getattr(work_item, "phase", None) if work_item is not None else None if work_item is not None and work_item_phase in DONE_PHASES: task.status = task_status_for_phase(work_item_phase) @@ -5746,12 +6069,16 @@ class OPCEngine: progress.append("Resumed from company runtime suspend checkpoint.") task.metadata["progress_log"] = progress[-20:] - if work_item_id and callable(get_work_item) and callable(update_work_item): + if work_item_id: if work_item is None: try: work_item = await get_work_item(work_item_id) except Exception: - work_item = None + logger.opt(exception=True).error( + "company runtime resume: failed to reload authoritative work item {}", + work_item_id, + ) + raise if work_item is not None and getattr(work_item, "phase", None) not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED}: phase_kwargs: dict[str, Any] = {} if target_phase is not None and target_phase not in DONE_PHASES: @@ -5787,7 +6114,10 @@ class OPCEngine: claimed_by_seat_id="", ) except Exception: - logger.opt(exception=True).debug("company runtime resume: fallback hold clear failed") + logger.opt(exception=True).error( + "company runtime resume: authoritative fallback hold clear failed" + ) + raise role_session_id = str(task.metadata.get("delegation_role_session_id", "") or "").strip() if role_session_id and callable(update_role_session): @@ -5821,27 +6151,33 @@ class OPCEngine: if not parent_session_id: return checkpoint_id = str(payload.get("checkpoint_id", "") or "").strip() - try: - tasks = await self.store.get_tasks(project_id=self.project_id or "default") - except Exception: - tasks = [] - for task in tasks: - session_id = str(getattr(task, "session_id", "") or "").strip() - task_parent_session_id = str(getattr(task, "parent_session_id", "") or "").strip() - if session_id != parent_session_id or task_parent_session_id: - continue - metadata = dict(getattr(task, "metadata", {}) or {}) - had_control_state = any(key in metadata for key in _COMPANY_RUNTIME_CONTROL_METADATA_KEYS) - if not had_control_state: - continue - for key in _COMPANY_RUNTIME_CONTROL_METADATA_KEYS: - metadata.pop(key, None) - metadata["company_runtime_resume_checkpoint_id"] = checkpoint_id - metadata["company_runtime_resume_requested_at"] = datetime.now().isoformat() - task.metadata = metadata - task.execution_lock = False - task.execution_locked_at = None - await self.store.save_task(task) + identity_index = await load_company_runtime_identity_index( + self.store, + self.project_id or "default", + ) + identity = identity_index.resolve( + runtime_session_id=parent_session_id, + checkpoint_id=checkpoint_id, + ) + if identity is None or not identity.ui_anchor_task_id: + return + task = identity_index.task(identity.ui_anchor_task_id) + if task is None or not is_pure_company_ui_anchor( + task, + identity.runtime_session_id, + ): + return + metadata = dict(getattr(task, "metadata", {}) or {}) + if not any(key in metadata for key in _COMPANY_RUNTIME_CONTROL_METADATA_KEYS): + return + for key in _COMPANY_RUNTIME_CONTROL_METADATA_KEYS: + metadata.pop(key, None) + metadata["company_runtime_resume_checkpoint_id"] = checkpoint_id + metadata["company_runtime_resume_requested_at"] = datetime.now().isoformat() + task.metadata = metadata + task.execution_lock = False + task.execution_locked_at = None + await self.store.save_task(task) @staticmethod def _clear_pending_reorg_marker(task: Task) -> None: @@ -6041,74 +6377,9 @@ class OPCEngine: } return run_adapter, resume_metadata - @staticmethod - def _pid_is_running(pid: int | None) -> bool: - if not pid or pid <= 0: - return False - if os.name == "nt": - try: - import ctypes - from ctypes import wintypes - - kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) - open_process = kernel32.OpenProcess - open_process.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD] - open_process.restype = wintypes.HANDLE - close_handle = kernel32.CloseHandle - close_handle.argtypes = [wintypes.HANDLE] - close_handle.restype = wintypes.BOOL - get_exit_code = kernel32.GetExitCodeProcess - get_exit_code.argtypes = [wintypes.HANDLE, ctypes.POINTER(wintypes.DWORD)] - get_exit_code.restype = wintypes.BOOL - - process_query_limited_information = 0x1000 - still_active = 259 - handle = open_process(process_query_limited_information, False, int(pid)) - if not handle: - error = ctypes.get_last_error() - # Access denied means a process exists but cannot be queried. - return error == 5 - try: - exit_code = wintypes.DWORD() - if not get_exit_code(handle, ctypes.byref(exit_code)): - return True - return int(exit_code.value) == still_active - finally: - close_handle(handle) - except Exception: - return False - try: - os.kill(pid, 0) - except ProcessLookupError: - return False - except PermissionError: - return True - except OSError: - return False - return True - async def _task_runtime_is_live(self, task: Task) -> bool: - if task.id in self._active_task_runs: - return True - session = await self._load_latest_external_session_for_task(task) - if not session: - return False - status = str(getattr(session, "status", "") or "").strip().lower() - if status not in {"starting", "running", "working"}: - return False - metadata = dict(getattr(session, "metadata", {}) or {}) - try: - pid = int(metadata.get("pid")) - except (TypeError, ValueError): - pid = None - if self._pid_is_running(pid): - return True - try: - heartbeat_seconds = max(1, int(metadata.get("status_heartbeat_seconds", 5) or 5)) - except (TypeError, ValueError): - heartbeat_seconds = 5 - age_seconds = (datetime.now() - session.updated_at).total_seconds() - return age_seconds <= max(heartbeat_seconds * 3, 15) + project_id = str(task.project_id or self.project_id or "default").strip() or "default" + return self._active_task_run_registry.is_active(project_id, task.id) def _describe_interrupted_task_reason(self, task: Task, session: Any | None) -> str: projection_id = str(projection_id_for_task(task) or task.title or task.id).strip() @@ -6289,117 +6560,6 @@ class OPCEngine: return True return bool(str(metadata.get("feedback_scope", "") or "").strip()) - async def _resolved_human_wait_checkpoint_task_ids(self) -> set[str]: - """Task ids whose human-wait checkpoint was already answered. - - Covers ``task_user_input`` / ``company_work_item_gate`` checkpoints in - ``resolved`` status: the human replied, so a task still parked in - ``awaiting_human`` for one of these ids is waiting on input that was - already given (the resume was interrupted before the state machine - advanced) and can be safely reopened. - """ - if not self.store: - return set() - try: - checkpoints = await self.store.get_execution_checkpoints( - project_id=self.project_id or "default", - checkpoint_types=["task_user_input", "company_work_item_gate"], - statuses=["resolved"], - ) - except Exception: - logger.opt(exception=True).debug( - "resolved_human_wait_checkpoint_task_ids: checkpoint load failed" - ) - return set() - task_ids: set[str] = set() - for checkpoint in checkpoints or []: - payload = dict(getattr(checkpoint, "payload", {}) or {}) - task_id = str( - checkpoint.task_id - or payload.get("waiting_task_id", "") - or payload.get("task_id", "") - or "" - ).strip() - if task_id: - task_ids.add(task_id) - return task_ids - - async def _reopen_answered_human_waits(self, tasks: list[Task]) -> int: - """Reverse self-heal for company tasks stuck on an answered human wait. - - A task parked in ``awaiting_human`` whose park checkpoint was already - RESOLVED means the human answered but the resume was cut off before the - work item advanced (process death between checkpoint resolution and - phase write). Reopen it for dispatch instead of preserving a wait - nobody can end. Mirror direction of the stale-checkpoint self-heal. - """ - if not self.store or not tasks: - return 0 - candidates = [ - task - for task in tasks - if task.status == TaskStatus.AWAITING_HUMAN - and str((task.metadata or {}).get("dispatch_hold", "") or "").strip() != "company_runtime_suspended" - and str((task.metadata or {}).get("company_runtime_stop_state", "") or "").strip() - not in {"suspending", "suspended"} - and not self._is_company_feedback_waiting_task(task) - ] - if not candidates: - return 0 - try: - pending_checkpoints = await self.store.get_pending_checkpoints( - project_id=self.project_id or "default" - ) - except Exception: - logger.opt(exception=True).debug( - "reopen_answered_human_waits: pending checkpoint load failed" - ) - return 0 - pending_task_ids = { - str( - checkpoint.task_id - or checkpoint.payload.get("waiting_task_id") - or checkpoint.payload.get("task_id") - or "" - ).strip() - for checkpoint in pending_checkpoints or [] - } - candidates = [task for task in candidates if task.id not in pending_task_ids] - if not candidates: - return 0 - resolved_task_ids = await self._resolved_human_wait_checkpoint_task_ids() - updated = 0 - for task in candidates: - if task.id not in resolved_task_ids: - continue - if await self._reopen_answered_human_wait_after_restart(task): - updated += 1 - return updated - - async def _reopen_answered_human_wait_after_restart(self, task: Task) -> bool: - """Reopen an ``awaiting_human`` task whose checkpoint was already resolved.""" - if not self.store: - return False - released = await self._release_work_item_human_wait( - task, reason="startup_resolved_checkpoint" - ) - task.metadata = dict(task.metadata or {}) - task.metadata["startup_reconcile_reopened_answered_wait"] = { - "detected_at": datetime.now().isoformat(), - "previous_status": getattr(task.status, "value", str(task.status)), - "work_item_phase_released": released, - } - task.status = TaskStatus.PENDING - task.result = None - await self.store.save_task(task) - logger.info( - "Startup recovery reopened task {} left in awaiting_human with an already-resolved " - "human-wait checkpoint (work_item_released={})", - task.id, - released, - ) - return True - async def _preserve_stable_waiting_task_after_restart( self, task: Task, @@ -6417,12 +6577,22 @@ class OPCEngine: if not self.store: return False task.metadata = dict(task.metadata or {}) - task.metadata["startup_reconcile_preserved_waiting_state"] = { - "detected_at": datetime.now().isoformat(), - "status": getattr(task.status, "value", str(task.status)), - "reason": reason, - } - await self.store.save_task(task) + status_value = getattr(task.status, "value", str(task.status)) + existing_preserved = dict( + task.metadata.get("startup_reconcile_preserved_waiting_state", {}) + or {} + ) + marker_changed = ( + str(existing_preserved.get("status", "") or "") != status_value + or str(existing_preserved.get("reason", "") or "") != reason + ) + if marker_changed: + task.metadata["startup_reconcile_preserved_waiting_state"] = { + "detected_at": datetime.now().isoformat(), + "status": status_value, + "reason": reason, + } + await self.store.save_task(task) restored_checkpoint = False if self._is_company_feedback_waiting_task(task): try: @@ -6436,11 +6606,141 @@ class OPCEngine: if restored_checkpoint: task.metadata = dict(task.metadata or {}) preserved = dict(task.metadata.get("startup_reconcile_preserved_waiting_state", {}) or {}) - preserved["restored_checkpoint_type"] = "company_delivery_feedback" - preserved["restored_checkpoint_at"] = datetime.now().isoformat() - task.metadata["startup_reconcile_preserved_waiting_state"] = preserved + if not str(preserved.get("restored_checkpoint_type", "") or "").strip(): + preserved["restored_checkpoint_type"] = "company_delivery_feedback" + preserved["restored_checkpoint_at"] = datetime.now().isoformat() + task.metadata["startup_reconcile_preserved_waiting_state"] = preserved + await self.store.save_task(task) + marker_changed = True + return marker_changed or restored_checkpoint + + def _company_runtime_plan_for_tasks( + self, + tasks: list[Task], + ) -> CompanyWorkItemRuntimePlan: + for task in sorted(tasks, key=lambda item: (item.created_at, item.id), reverse=True): + candidate = serialized_company_plan_from_metadata(task.metadata) + if candidate: + return deserialize_company_work_item_runtime_plan(candidate) + sample = tasks[0] + return CompanyWorkItemRuntimePlan( + profile=str( + (sample.metadata or {}).get("company_profile", "") + or getattr(self.config.org, "company_profile", "corporate") + ).strip() + or "corporate", + metadata={ + "execution_model": str( + (sample.metadata or {}).get("execution_model", "") or "multi_team_org" + ).strip() + or "multi_team_org", + "work_item_driven": True, + }, + ) + + async def _normalize_legacy_company_interruption( + self, + task: Task, + ) -> dict[str, Any] | None: + """Convert the old FAILED+marker patch into checkpoint-ready state. + + A work item whose authoritative phase is genuinely terminal is never + revived. The old recovery marker, interrupted result artifact, or a + PAUSED work-item phase is accepted only as evidence that FAILED was a + crash projection rather than a business outcome. + """ + if not self.store or task.status != TaskStatus.FAILED: + return None + metadata = dict(task.metadata or {}) + marker = metadata.get("interrupted_recovery") + marker = dict(marker) if isinstance(marker, dict) else {} + result = dict(task.result or {}) + artifacts = dict(result.get("artifacts", {}) or {}) + work_item_id = linked_work_item_id_for_task(task) + work_item = None + if work_item_id: + getter = getattr(self.store, "get_delegation_work_item", None) + if callable(getter): + try: + work_item = await getter(work_item_id) + except Exception: + work_item = None + phase = getattr(work_item, "phase", None) + if phase in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED}: + return None + previous_status_value = str( + marker.get("previous_status") + or artifacts.get("interrupted_previous_status") + or "" + ).strip() + interrupted_artifact = bool(artifacts.get("interrupted", False)) + paused_work_item = phase == Phase.PAUSED + if not previous_status_value and not interrupted_artifact and not paused_work_item: + return None + + previous_status = None + if previous_status_value: + try: + candidate = TaskStatus(previous_status_value) + except ValueError: + candidate = None + if candidate not in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: + previous_status = candidate + if paused_work_item: + target_status = task_status_for_phase(Phase.PAUSED) + else: + target_status = previous_status or TaskStatus.PENDING + + provenance = { + "task_id": task.id, + "work_item_id": work_item_id or "", + "legacy_failed_status": TaskStatus.FAILED.value, + "restored_status": target_status.value, + "work_item_phase": phase.value if isinstance(phase, Phase) else str(phase or ""), + "interrupted_recovery": marker, + "interrupted_artifacts": { + key: artifacts.get(key) + for key in ( + "interrupted", + "interrupted_detected_at", + "interrupted_previous_status", + "latest_external_session_status", + "latest_external_session_updated_at", + ) + if key in artifacts + }, + } + task.status = target_status + task.execution_lock = False + task.execution_locked_at = None + return provenance + + async def _clear_migrated_company_interruption_markers( + self, + tasks: list[Task], + migrated_task_ids: set[str], + ) -> None: + if not self.store or not migrated_task_ids: + return + artifact_keys = { + "interrupted", + "interrupted_detected_at", + "interrupted_previous_status", + "latest_external_session_status", + "latest_external_session_updated_at", + } + for task in tasks: + if task.id not in migrated_task_ids: + continue + task.metadata = dict(task.metadata or {}) + task.metadata.pop("interrupted_recovery", None) + if task.result: + task.result = dict(task.result) + artifacts = dict(task.result.get("artifacts", {}) or {}) + for key in artifact_keys: + artifacts.pop(key, None) + task.result["artifacts"] = artifacts await self.store.save_task(task) - return True async def _reconcile_company_runtime_state( self, @@ -6452,19 +6752,53 @@ class OPCEngine: return 0 project_id = self.project_id or "default" pending_checkpoints = await self.store.get_pending_checkpoints(project_id=project_id) - pending_suspend_checkpoint = await self.get_active_company_runtime_suspend_checkpoint(parent_session_id) + legacy_provenance: list[dict[str, Any]] = [] + for task in tasks: + provenance = await self._normalize_legacy_company_interruption(task) + if provenance is not None: + legacy_provenance.append(provenance) + migrated_task_ids = { + str(item.get("task_id", "") or "").strip() + for item in legacy_provenance + if str(item.get("task_id", "") or "").strip() + } + normalize_active = getattr( + self.store, + "normalize_active_execution_checkpoints", + None, + ) + if callable(normalize_active): + pending_suspend_checkpoint = await normalize_active( + project_id=project_id, + session_id=parent_session_id, + checkpoint_types=_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES, + ) + else: + pending_suspend_checkpoint = await self.get_active_company_runtime_suspend_checkpoint( + parent_session_id + ) if pending_suspend_checkpoint is not None: payload = dict(pending_suspend_checkpoint.payload or {}) - if str(getattr(pending_suspend_checkpoint, "status", "") or "").strip() == "resuming": - await self._mark_company_runtime_checkpoint_status( - pending_suspend_checkpoint, - status="pending", - payload_updates={ - **payload, + checkpoint_status = str(getattr(pending_suspend_checkpoint, "status", "") or "").strip() + if checkpoint_status == "resuming" or legacy_provenance: + payload_updates: dict[str, Any] = {} + if checkpoint_status == "resuming": + payload_updates.update({ "resume_state": "interrupted", "resume_interrupted_at": datetime.now().isoformat(), - }, + }) + if legacy_provenance: + payload_updates["legacy_interrupted_recovery"] = legacy_provenance + transitioned = await self._mark_company_runtime_checkpoint_status( + pending_suspend_checkpoint, + status="pending", + payload_updates=payload_updates, + expected_statuses={checkpoint_status}, ) + if not transitioned: + return 0 + payload = dict(pending_suspend_checkpoint.payload or {}) + await self._clear_migrated_company_interruption_markers(tasks, migrated_task_ids) affected = await self._suspend_company_runtime_tasks( tasks, reason=str(payload.get("reason", "") or "startup_recovery"), @@ -6480,6 +6814,7 @@ class OPCEngine: if str(getattr(task, "session_id", "") or "").strip() }, } + group_task_ids = {str(task.id or "").strip() for task in tasks} checkpoint_task_ids = { str( checkpoint.task_id @@ -6495,59 +6830,133 @@ class OPCEngine: or checkpoint.payload.get("waiting_task_id") or checkpoint.payload.get("task_id") or "" - ).strip() + ).strip() in group_task_ids ) } updated = 0 - stale_running_tasks: list[Task] = [] + interrupted_tasks: list[Task] = [] + get_work_item = getattr( + self.store, + "get_delegation_work_item", + None, + ) for task in tasks: task_metadata = dict(getattr(task, "metadata", {}) or {}) if ( str(task_metadata.get("dispatch_hold", "") or "").strip() == "company_runtime_suspended" or str(task_metadata.get("company_runtime_stop_state", "") or "").strip() in {"suspending", "suspended"} ): + interrupted_tasks.append(task) + continue + work_item_id = linked_work_item_id_for_task(task) + work_item = ( + await get_work_item(work_item_id) + if work_item_id and callable(get_work_item) + else None + ) + work_item_phase = getattr(work_item, "phase", None) + # A linked WorkItem is the company workflow state. Task.status is + # only its UI/execution projection and may lag on either side of a + # crash. Fall back to Task status only for legacy envelopes that + # have no durable WorkItem. + stable_review_wait = ( + work_item_phase in IN_REVIEW_PHASES + if work_item is not None + else task.status in _REVIEW_WAITING_STATUSES + ) + if stable_review_wait: + if task.id not in checkpoint_task_ids: + waiting_label = ( + work_item_phase.value + if isinstance(work_item_phase, Phase) + else task.status.value + ) + reason = ( + f"Work item `{projection_id_for_task(task) or task.title}` was left in " + f"`{waiting_label}` but no pending checkpoint could be found after restart. " + "Preserving stable waiting state." + ) + if await self._preserve_stable_waiting_task_after_restart( + task, + reason=reason, + plan=plan, + tasks=tasks, + ): + updated += 1 + continue + if task.id in checkpoint_task_ids and ( + task.status in _WAITING_TASK_STATUSES + or work_item_phase == Phase.WAITING_FOR_PEER + ): + # A durable peer/specialized wait already owns this Task. + # Startup must not layer a company-runtime interruption over + # that independent waiting checkpoint. + continue + if work_item is not None and work_item_phase not in DONE_PHASES: + # A controller coroutine is required to dispatch READY work, + # revisit dependency waits, and finalize RUNNING work. After + # process start the registry is empty, so every such WorkItem + # is interrupted even when its Task projection is still + # PENDING/BLOCKED or was prematurely terminalized. + interrupted_tasks.append(task) continue if task.status == TaskStatus.RUNNING and not await self._task_runtime_is_live(task): - stale_running_tasks.append(task) - continue - if task.status in _REVIEW_WAITING_STATUSES and task.id not in checkpoint_task_ids: - reason = ( - f"Work item `{projection_id_for_task(task) or task.title}` was left in " - f"`{task.status.value}` but no pending checkpoint could be found after restart. " - "Preserving stable waiting state." - ) - if await self._preserve_stable_waiting_task_after_restart( - task, - reason=reason, - plan=plan, - tasks=tasks, - ): - updated += 1 + interrupted_tasks.append(task) continue if task.status in _WAITING_TASK_STATUSES and task.id not in checkpoint_task_ids: - reason = ( - f"Work item `{projection_id_for_task(task) or task.title}` was left in " - f"`{task.status.value}` but no pending checkpoint could be found after restart. " - "Use `continue` to reopen this work item." - ) - if await self._mark_task_interrupted(task, reason=reason): - updated += 1 - if stale_running_tasks: - origin_task_id = str(getattr(stale_running_tasks[0], "id", "") or "").strip() - await self._save_company_runtime_suspend_checkpoint( + interrupted_tasks.append(task) + if legacy_provenance: + interrupted_tasks.extend( + task for task in tasks if task.id in migrated_task_ids + ) + if interrupted_tasks: + interrupted_task_ids = list(dict.fromkeys(task.id for task in interrupted_tasks)) + task_by_id = {task.id: task for task in tasks} + interrupted_task_objects = [task_by_id[task_id] for task_id in interrupted_task_ids] + origin_task_id = str(getattr(interrupted_task_objects[0], "id", "") or "").strip() + checkpoint, _created = await self._save_company_runtime_suspend_checkpoint( checkpoint_type="company_runtime_interrupted", reason="startup_recovery", parent_session_id=parent_session_id, origin_task_id=origin_task_id or None, plan=plan, tasks=tasks, + payload_updates=( + {"legacy_interrupted_recovery": legacy_provenance} + if legacy_provenance + else None + ), ) + if ( + legacy_provenance + and "legacy_interrupted_recovery" + not in dict(checkpoint.payload or {}) + ): + transitioned = await self._mark_company_runtime_checkpoint_status( + checkpoint, + status="pending", + payload_updates={ + "legacy_interrupted_recovery": legacy_provenance, + "resume_state": "interrupted", + "resume_interrupted_at": datetime.now().isoformat(), + }, + expected_statuses={"pending", "resuming"}, + ) + if not transitioned: + return updated + await self._clear_migrated_company_interruption_markers(tasks, migrated_task_ids) + checkpoint_payload = dict(checkpoint.payload or {}) affected = await self._suspend_company_runtime_tasks( tasks, - reason="startup_recovery", - checkpoint_type="company_runtime_interrupted", + reason=str(checkpoint_payload.get("reason", "") or "startup_recovery"), + checkpoint_type=str( + checkpoint.checkpoint_type or "company_runtime_interrupted" + ), + stop_intent_id=str( + checkpoint_payload.get("stop_intent_id", "") or "" + ), ) - updated += len(affected) or len(stale_running_tasks) + updated += len(affected) or len(interrupted_task_objects) return updated async def _reconcile_interrupted_project_tasks(self) -> int: @@ -6558,13 +6967,47 @@ class OPCEngine: if not tasks: return 0 - updated = 0 + checkpoint_getter = getattr(self.store, "get_execution_checkpoints", None) + active_company_checkpoints = ( + await checkpoint_getter( + project_id=project_id, + checkpoint_types=list(_COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES), + statuses=["pending", "resuming"], + ) + if callable(checkpoint_getter) + else [] + ) + identity_index = build_company_runtime_identity_index( + tasks, + active_company_checkpoints, + ) + task_by_id = {task.id: task for task in tasks} runtime_groups: dict[str, list[Task]] = {} + runtime_task_ids: set[str] = set() + ui_anchor_task_ids: set[str] = set() + for identity in identity_index.identities: + if identity.ui_anchor_task_id: + ui_anchor_task_ids.add(identity.ui_anchor_task_id) + group = [ + task_by_id[task_id] + for task_id in identity.runtime_task_ids + if task_id != identity.ui_anchor_task_id + and task_id in task_by_id + and is_company_runtime_task(task_by_id[task_id]) + ] + if group: + runtime_groups[identity.runtime_session_id] = group + runtime_task_ids.update(task.id for task in group) + + updated = 0 + for anchor_task_id in ui_anchor_task_ids: + anchor = task_by_id.get(anchor_task_id) + if anchor is not None and anchor.status == TaskStatus.RUNNING: + if await self._clear_stale_company_session_anchor(anchor): + updated += 1 + for task in tasks: - projection_id = projection_id_for_task(task) - parent_session_id = str(getattr(task, "parent_session_id", "") or "").strip() - if projection_id and parent_session_id: - runtime_groups.setdefault(parent_session_id, []).append(task) + if task.id in runtime_task_ids or task.id in ui_anchor_task_ids: continue task_metadata = dict(getattr(task, "metadata", {}) or {}) if ( @@ -6572,66 +7015,115 @@ class OPCEngine: or str(task_metadata.get("company_runtime_stop_state", "") or "").strip() in {"suspending", "suspended"} ): continue - if task.status == TaskStatus.RUNNING and not await self._task_runtime_is_live(task): - if self._is_company_primary_session_anchor_task(task): + if is_company_runtime_task(task): + continue + if self._is_company_primary_session_anchor_task(task): + if task.status == TaskStatus.RUNNING: if await self._clear_stale_company_session_anchor(task): updated += 1 - continue + continue + if task.status == TaskStatus.RUNNING and not await self._task_runtime_is_live(task): session = await self._load_latest_external_session_for_task(task) reason = self._describe_interrupted_task_reason(task, session) if await self._mark_task_interrupted(task, reason=reason, session=session): updated += 1 - if runtime_groups: - # Reverse self-heal runs before the plan-gated reconcile below: - # modern runs keep the runtime plan in checkpoint payloads / - # snapshots rather than task metadata, so groups without a - # metadata plan would otherwise skip recovery entirely. - updated += await self._reopen_answered_human_waits( - [task for group in runtime_groups.values() for task in group] - ) - for parent_session_id, group in runtime_groups.items(): - plan_data = None - for task in sorted(group, key=lambda item: (item.created_at, item.id), reverse=True): - candidate = serialized_company_plan_from_metadata(task.metadata) - if candidate: - plan_data = candidate - break - if not plan_data: - stale_group = [ - task - for task in group - if task.status == TaskStatus.RUNNING and not await self._task_runtime_is_live(task) - ] - if stale_group: - sample = stale_group[0] - fallback_plan = CompanyWorkItemRuntimePlan( - profile=str((sample.metadata or {}).get("company_profile", "") or getattr(self.config.org, "company_profile", "corporate")).strip() or "corporate", - metadata={"execution_model": "multi_team_org", "work_item_driven": True}, - ) - await self._save_company_runtime_suspend_checkpoint( - checkpoint_type="company_runtime_interrupted", - reason="startup_recovery", - parent_session_id=parent_session_id, - origin_task_id=sample.id, - plan=fallback_plan, - tasks=group, - ) - affected = await self._suspend_company_runtime_tasks( - group, - reason="startup_recovery", - checkpoint_type="company_runtime_interrupted", - ) - updated += len(affected) or len(stale_group) - continue - updated += await self._reconcile_company_runtime_state( + async with self._active_task_run_registry.scope_lock( + project_id, parent_session_id, - deserialize_company_work_item_runtime_plan(plan_data), - group, - ) + ): + updated += await self._reconcile_company_runtime_state( + parent_session_id, + self._company_runtime_plan_for_tasks(group), + group, + ) return updated + async def prepare_active_company_runtimes_for_shutdown( + self, + *, + _controller_shutdown: bool = False, + ) -> list[dict[str, Any]]: + """Persist checkpoints for company attempts owned by this controller. + + Callers invoke this before cancelling in-flight session coroutines. It + is safe to call repeatedly: an existing suspended/interrupted + checkpoint is reused and never replaced. + """ + self._shutting_down = True + if not self._owns_active_task_run_registry and not _controller_shutdown: + # Project delegates and CustomRuntimeRunner engines borrow the + # controller registry. Their local teardown must not close + # controller-wide admission or checkpoint unrelated attempts. + return [] + if self._owns_active_task_run_registry: + self._active_task_run_registry.close_admission() + project_id = str(self.project_id or "default").strip() or "default" + active_task_ids = self._active_task_run_registry.active_task_ids(project_id) + delegate_prepared: list[dict[str, Any]] = [] + for delegate in list(self._project_engine_delegates.values()): + delegate_prepared.extend( + await delegate.prepare_active_company_runtimes_for_shutdown( + _controller_shutdown=True, + ) + ) + if not self.store or not bool(getattr(self.store, "is_ready", True)): + return delegate_prepared + if not active_task_ids: + return delegate_prepared + identity_index = await load_company_runtime_identity_index( + self.store, + project_id, + ) + active_by_scope: dict[str, list[Task]] = {} + for task_id in active_task_ids: + identity = identity_index.resolve(task_id=task_id) + task = identity_index.task(task_id) + if ( + identity is None + or task is None + or task_id == identity.ui_anchor_task_id + or not is_company_runtime_task(task) + ): + continue + active_by_scope.setdefault(identity.runtime_session_id, []).append(task) + + prepared: list[dict[str, Any]] = delegate_prepared + for parent_session_id, active_scope_tasks in active_by_scope.items(): + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + snapshot = await self._load_company_runtime_snapshot(parent_session_id) + if snapshot is None: + tasks = active_scope_tasks + plan = self._company_runtime_plan_for_tasks(tasks) + else: + plan, tasks = snapshot + origin_task_id = str(active_scope_tasks[0].id or "").strip() or None + checkpoint, created, affected_task_ids = ( + await self._checkpoint_and_suspend_company_runtime_scope( + checkpoint_type="company_runtime_interrupted", + reason="service_shutdown", + parent_session_id=parent_session_id, + origin_task_id=origin_task_id, + plan=plan, + tasks=tasks, + ) + ) + idempotent = not created + prepared.append( + { + "session_id": parent_session_id, + "checkpoint_id": checkpoint.checkpoint_id, + "checkpoint_type": checkpoint.checkpoint_type, + "task_ids": affected_task_ids, + "idempotent": idempotent, + } + ) + return prepared + @staticmethod def _is_company_primary_session_anchor_task(task: Task) -> bool: """Return True for the user-facing chat task that anchors a company run. @@ -7999,50 +8491,66 @@ class OPCEngine: return native_result async def _execute_task(self, task: Task) -> TaskResult: - self._active_task_runs.add(task.id) + project_id = str(task.project_id or self.project_id or "default").strip() or "default" try: - try: - result = await self._run_task_once(task) - except asyncio.CancelledError: - store = self.store - if not store or not bool(getattr(store, "is_ready", True)): - raise - try: - fresh = await store.get_task(task.id) - except AssertionError: - logger.debug( - "Task cancellation cleanup skipped because store is already closed for task {}", - task.id, - ) - raise - target = fresh or task - if is_work_item_runtime_metadata(getattr(target, "metadata", {}) or {}): - target.metadata = dict(target.metadata or {}) - target.metadata["company_runtime_suspended_at"] = datetime.now().isoformat() - target.metadata.setdefault("last_stop_reason", "runtime_cancelled") - target.execution_lock = False - target.execution_locked_at = None - if target.status not in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: - if str(target.metadata.get("dispatch_hold", "") or "").strip() == "company_runtime_suspended": - suspended_status = str(target.metadata.get("suspended_task_status", "") or "").strip() - try: - target.status = TaskStatus(suspended_status) if suspended_status else target.status - except ValueError: - pass - else: - target.status = TaskStatus.PENDING - await store.save_task(target) - elif target.status != TaskStatus.CANCELLED: - target.status = TaskStatus.CANCELLED - await store.save_task(target) - raise + attempt_token = self._active_task_run_registry.register(project_id, task.id) + except ActiveTaskRunAdmissionClosed as exc: + raise asyncio.CancelledError(str(exc)) from exc + try: + return await self._execute_registered_task_attempt(task) finally: - self._active_task_runs.discard(task.id) + self._active_task_run_registry.unregister(project_id, task.id, attempt_token) + + @staticmethod + def _company_runtime_task_has_durable_hold(task: Task | None) -> bool: + if task is None or not is_company_runtime_task(task): + return False + metadata = dict(task.metadata or {}) + return ( + str(metadata.get("dispatch_hold", "") or "").strip() + == "company_runtime_suspended" + or str(metadata.get("company_runtime_stop_state", "") or "").strip() + in {"suspending", "suspended"} + ) + + async def _execute_registered_task_attempt(self, task: Task) -> TaskResult: + try: + result = await self._run_task_once(task) + except asyncio.CancelledError: + if self._shutting_down or is_company_runtime_task(task): + raise + store = self.store + if not store or not bool(getattr(store, "is_ready", True)): + raise + try: + fresh = await store.get_task(task.id) + except AssertionError: + logger.debug( + "Task cancellation cleanup skipped because store is already closed for task {}", + task.id, + ) + raise + target = fresh or task + if is_company_runtime_task(target): + raise + if target.status != TaskStatus.CANCELLED: + target.status = TaskStatus.CANCELLED + await store.save_task(target) + raise # Re-read task to check if user cancelled during execution fresh = await self.store.get_task(task.id) if fresh and fresh.status == TaskStatus.CANCELLED: logger.info(f"Task {task.id} was cancelled during execution, preserving CANCELLED status") return result + if self._company_runtime_task_has_durable_hold(fresh): + logger.info( + "Discarding completed result for task {} because a durable company " + "runtime hold won the completion race", + task.id, + ) + raise asyncio.CancelledError( + "company runtime was suspended before result commit" + ) self._apply_runtime_state_to_task(task, result) task.status = result.status task.result = {"content": result.content, "artifacts": result.artifacts} @@ -8116,6 +8624,15 @@ class OPCEngine: if fresh and fresh.status == TaskStatus.CANCELLED: logger.info(f"Task {task.id} was cancelled during retry, preserving CANCELLED status") return result + if self._company_runtime_task_has_durable_hold(fresh): + logger.info( + "Discarding retry result for task {} because a durable company " + "runtime hold won the completion race", + task.id, + ) + raise asyncio.CancelledError( + "company runtime was suspended before retry result commit" + ) self._apply_runtime_state_to_task(task, result) task.status = result.status task.result = {"content": result.content, "artifacts": result.artifacts} @@ -9506,13 +10023,7 @@ class OPCEngine: return await self._ensure_checkpoint_runtime_v2_payload(selected_suspend_checkpoint) if selected_suspend_checkpoint else None async def _company_runtime_parent_session_for_session_id(self, session_id: str | None) -> str: - """Return the company runtime parent session for a child work-item session. - - Stop/resume checkpoints are stored on the primary company session. If the - UI sends a follow-up from a child work-item chat, the engine must still - resume the suspended parent runtime instead of treating the text as a new - company-mode request. - """ + """Resolve any durable task session to its company runtime session.""" if not self.store: return "" sid = str(session_id or "").strip() @@ -9521,29 +10032,23 @@ class OPCEngine: try: get_by_session = getattr(self.store, "get_tasks_by_session_id", None) if callable(get_by_session): - # Targeted lookup: this runs on every UI sync tick, and loading - # every task in the project rescans the whole tasks table. - tasks = await get_by_session(sid, project_id=self.project_id or "default") + tasks = await get_by_session( + sid, + project_id=self.project_id or "default", + ) + identity_index = build_company_runtime_identity_index(tasks) else: - tasks = await self.store.get_tasks(project_id=self.project_id or "default") + identity_index = await load_company_runtime_identity_index( + self.store, + self.project_id or "default", + ) + identity = identity_index.resolve(task_session_id=sid) except Exception: - logger.opt(exception=True).debug("failed to load tasks while resolving company parent session") + logger.opt(exception=True).debug( + "failed to resolve company runtime session identity" + ) return "" - for task in tasks: - task_session_id = str(getattr(task, "session_id", "") or "").strip() - if task_session_id != sid: - continue - parent_session_id = str(getattr(task, "parent_session_id", "") or "").strip() - if parent_session_id and parent_session_id != sid: - metadata = dict(getattr(task, "metadata", {}) or {}) - if ( - work_item_projection_id_from_metadata(metadata) - or is_work_item_runtime_metadata(metadata) - or str(metadata.get("delegation_work_item_id", "") or "").strip() - or str(metadata.get("linked_work_item_id", "") or "").strip() - ): - return parent_session_id - return "" + return str(getattr(identity, "runtime_session_id", "") or "").strip() @staticmethod def _checkpoint_is_user_visible(checkpoint: ExecutionCheckpoint) -> bool: @@ -10011,18 +10516,44 @@ class OPCEngine: *, status: str, payload_updates: dict[str, Any] | None = None, - ) -> None: + expected_statuses: set[str] | None = None, + ) -> bool: if not self.store: - return + return False payload = {**dict(checkpoint.payload or {}), **dict(payload_updates or {})} + updated_at = datetime.now() + expected = { + str(item).strip() + for item in set(expected_statuses or set()) + if str(item).strip() + } + compare_and_set = getattr( + self.store, + "compare_and_set_execution_checkpoint", + None, + ) + if expected and callable(compare_and_set): + transitioned = await compare_and_set( + checkpoint.checkpoint_id, + expected_statuses=expected, + status=status, + payload=payload, + updated_at=updated_at, + ) + if not transitioned: + return False checkpoint.payload = payload checkpoint.status = status - checkpoint.updated_at = datetime.now() + checkpoint.updated_at = updated_at save_checkpoint = getattr(self.store, "save_execution_checkpoint", None) - if callable(save_checkpoint): + if callable(save_checkpoint) and not (expected and callable(compare_and_set)): await save_checkpoint(checkpoint) - return - await self.store.resolve_execution_checkpoint(checkpoint.checkpoint_id, status=status) + elif not (expected and callable(compare_and_set)): + await self.store.resolve_execution_checkpoint( + checkpoint.checkpoint_id, + status=status, + ) + return True async def _reset_company_executor_runtime_for_resume( self, @@ -10070,6 +10601,158 @@ class OPCEngine: payload["checkpoint_type"] = checkpoint.checkpoint_type return payload, parent_session_id, plan, tasks + async def _resolve_company_runtime_ui_anchor_task_id( + self, + *, + parent_session_id: str, + checkpoint_id: str, + ) -> str: + if not self.store: + return "" + identity_index = await load_company_runtime_identity_index( + self.store, + self.project_id or "default", + ) + identity = identity_index.resolve( + runtime_session_id=parent_session_id, + checkpoint_id=checkpoint_id, + ) + return str(getattr(identity, "ui_anchor_task_id", "") or "").strip() + + async def _restore_company_suspend_checkpoint_pending( + self, + checkpoint: ExecutionCheckpoint, + *, + parent_session_id: str, + tasks: list[Task], + resume_state: str, + error: BaseException | str, + ) -> None: + """Fail a resume closed: restore the durable hold before publishing pending.""" + + if not self.store: + return + project_id = str(self.project_id or "default").strip() or "default" + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + current = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if current is None or str(current.status or "").strip() == "resolved": + return + payload = dict(current.payload or checkpoint.payload or {}) + await self._suspend_company_runtime_tasks( + tasks, + reason="resume_failed", + checkpoint_type=str( + current.checkpoint_type + or checkpoint.checkpoint_type + or "company_runtime_interrupted" + ), + stop_intent_id=str(payload.get("stop_intent_id", "") or ""), + ) + error_text = str(error).strip() or type(error).__name__ + transitioned = await self._mark_company_runtime_checkpoint_status( + current, + status="pending", + payload_updates={ + "resume_state": resume_state, + "resume_failed_at": datetime.now().isoformat(), + "resume_error": error_text, + }, + expected_statuses={"resuming"}, + ) + if not transitioned: + refreshed = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if refreshed is None: + return + current = refreshed + checkpoint.status = current.status + checkpoint.payload = dict(current.payload or {}) + checkpoint.updated_at = current.updated_at + + async def _restore_company_suspend_checkpoint_pending_after_cancellation( + self, + checkpoint: ExecutionCheckpoint, + *, + parent_session_id: str, + tasks: list[Task], + resume_state: str, + error: BaseException, + ) -> None: + recovery = asyncio.create_task( + self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state=resume_state, + error=error, + ) + ) + try: + await asyncio.shield(recovery) + except asyncio.CancelledError: + await recovery + + async def _complete_company_suspend_checkpoint_resume( + self, + checkpoint: ExecutionCheckpoint, + *, + parent_session_id: str, + ) -> None: + """Publish one successful resume and its UI projection as one boundary.""" + + if not self.store: + return + project_id = str(self.project_id or "default").strip() or "default" + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + current = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if current is None or str(current.status or "").strip() != "resuming": + raise RuntimeError( + "company runtime resume was interrupted before completion" + ) + payload = dict(current.payload or {}) + resolved_at = datetime.now() + resolved_payload = { + **payload, + "resume_state": "handoff_complete", + "resume_handoff_at": resolved_at.isoformat(), + "resume_resolved_at": resolved_at.isoformat(), + } + transitioned = ( + await self.store.complete_execution_checkpoint_and_reopen_ui_anchor( + current.checkpoint_id, + project_id=project_id, + session_id=parent_session_id, + expected_status="resuming", + status="resolved", + payload=resolved_payload, + ui_anchor_task_id=str( + payload.get("ui_anchor_task_id", "") or "" + ).strip(), + updated_at=resolved_at, + ) + ) + if not transitioned: + raise RuntimeError( + "company runtime checkpoint changed during resume completion" + ) + current.status = "resolved" + current.payload = resolved_payload + current.updated_at = resolved_at + checkpoint.status = current.status + checkpoint.payload = dict(current.payload or {}) + checkpoint.updated_at = current.updated_at + async def _handoff_company_suspend_checkpoint( self, checkpoint: ExecutionCheckpoint, @@ -10078,50 +10761,121 @@ class OPCEngine: parent_session_id: str, tasks: list[Task], resume_task_ids: set[str] | None = None, - ) -> list[Task]: + ) -> tuple[list[Task], CompanyExecutorDriverOwnership | None] | None: assert self.company_executor - await self._mark_company_runtime_checkpoint_status( - checkpoint, - status="resuming", - payload_updates={ - **payload, - "resume_state": "resuming", - "resume_started_at": datetime.now().isoformat(), - }, - ) + if not self.store: + return None + project_id = str(self.project_id or "default").strip() or "default" + claimed = False + driver_ownership: CompanyExecutorDriverOwnership | None = None try: - tasks = await self._prepare_company_runtime_tasks_for_resume( - tasks, - payload, - resume_task_ids=resume_task_ids, - ) - await self._reset_company_executor_runtime_for_resume(tasks, payload) - await self._clear_company_runtime_parent_stop_state(parent_session_id, payload) - if parent_session_id: - self._reregister_company_runtime_children(tasks, checkpoint_session_id=parent_session_id) - except Exception as exc: - await self._mark_company_runtime_checkpoint_status( - checkpoint, - status="pending", - payload_updates={ - **dict(checkpoint.payload or {}), - "resume_state": "failed_before_handoff", - "resume_failed_at": datetime.now().isoformat(), - "resume_error": str(exc), - }, - ) + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + current = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if current is None or str(current.status or "").strip() != "pending": + return None + checkpoint.status = current.status + checkpoint.payload = dict(current.payload or {}) + checkpoint.updated_at = current.updated_at + ui_anchor_task_id = await self._resolve_company_runtime_ui_anchor_task_id( + parent_session_id=parent_session_id, + checkpoint_id=checkpoint.checkpoint_id, + ) + transitioned = await self._mark_company_runtime_checkpoint_status( + checkpoint, + status="resuming", + payload_updates={ + **payload, + "resume_state": "resuming", + "resume_started_at": datetime.now().isoformat(), + "ui_anchor_task_id": ui_anchor_task_id, + }, + expected_statuses={"pending"}, + ) + if transitioned is False: + return None + claimed = True + driver_ownership = self._acquire_company_executor_driver_ownership( + tasks, + preferred_task_ids=resume_task_ids, + ) + tasks = await self._prepare_company_runtime_tasks_for_resume( + tasks, + payload, + resume_task_ids=resume_task_ids, + ) + await self._reset_company_executor_runtime_for_resume(tasks, payload) + await self._clear_company_runtime_parent_stop_state( + parent_session_id, + payload, + ) + if parent_session_id: + self._reregister_company_runtime_children( + tasks, + checkpoint_session_id=parent_session_id, + ) + except asyncio.CancelledError as exc: + if driver_ownership is not None: + driver_ownership.release() + if claimed: + await self._restore_company_suspend_checkpoint_pending_after_cancellation( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_before_handoff", + error=exc, + ) raise - await self._mark_company_runtime_checkpoint_status( - checkpoint, - status="resolved", - payload_updates={ - **dict(checkpoint.payload or {}), - "resume_state": "handoff_complete", - "resume_handoff_at": datetime.now().isoformat(), - "resume_resolved_at": datetime.now().isoformat(), - }, + except Exception as exc: + if driver_ownership is not None: + driver_ownership.release() + if claimed: + await self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_before_handoff", + error=exc, + ) + raise + return tasks, driver_ownership + + def _acquire_company_executor_driver_ownership( + self, + tasks: list[Task], + *, + preferred_task_ids: set[str] | None = None, + ) -> CompanyExecutorDriverOwnership | None: + task = CompanyWorkItemExecutor._driver_ownership_task( + tasks, + preferred_task_ids=preferred_task_ids, ) - return tasks + if task is None: + return None + project_id = str(task.project_id or self.project_id or "default").strip() or "default" + try: + attempt_token = self._active_task_run_registry.register( + project_id, + task.id, + ) + except ActiveTaskRunAdmissionClosed as exc: + raise asyncio.CancelledError(str(exc)) from exc + return CompanyExecutorDriverOwnership( + registry=self._active_task_run_registry, + project_id=project_id, + task_id=task.id, + attempt_token=attempt_token, + ) + + @staticmethod + def _company_executor_driver_context( + ownership: CompanyExecutorDriverOwnership | None, + ): + return ownership.bind() if ownership is not None else nullcontext() async def _company_suspend_resume_candidate_task_ids( self, @@ -10138,12 +10892,11 @@ class OPCEngine: task_id = str(getattr(task, "id", "") or "").strip() if not task_id or task_id in excluded: continue - if task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: - continue metadata = dict(getattr(task, "metadata", {}) or {}) task_is_held = any(str(metadata.get(key, "") or "").strip() for key in _COMPANY_RUNTIME_CONTROL_METADATA_KEYS) work_item_id = linked_work_item_id_for_task(task) work_item_is_held = False + work_item = None if work_item_id and callable(get_work_item): try: work_item = await get_work_item(work_item_id) @@ -10154,6 +10907,14 @@ class OPCEngine: continue work_item_metadata = dict(getattr(work_item, "metadata", {}) or {}) work_item_is_held = str(work_item_metadata.get("dispatch_hold", "") or "").strip() == "company_runtime_suspended" + if ( + task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED} + and ( + work_item is None + or getattr(work_item, "phase", None) in DONE_PHASES + ) + ): + continue if task_is_held or work_item_is_held: candidate_ids.add(task_id) return candidate_ids @@ -10161,38 +10922,108 @@ class OPCEngine: async def _resume_remaining_company_runtime_after_final_decider( self, *, + checkpoint: ExecutionCheckpoint, plan: CompanyWorkItemRuntimePlan, tasks: list[Task], payload: dict[str, Any], parent_session_id: str, final_decider_task_id: str, - ) -> str | None: + ) -> tuple[bool, str | None]: assert self.company_executor - if not await self._company_followup_target_progressed(final_decider_task_id): + target_progressed = await self._company_followup_target_progressed( + final_decider_task_id + ) + project_id = str(self.project_id or "default").strip() or "default" + driver_ownership: CompanyExecutorDriverOwnership | None = None + awaiting_final_decider_action = False + try: + async with self._active_task_run_registry.scope_lock( + project_id, + parent_session_id, + ): + current = await self._load_execution_checkpoint_by_id( + checkpoint.checkpoint_id + ) + if ( + current is None + or str(current.status or "").strip() != "resuming" + or str(current.project_id or "default").strip() != project_id + or str(current.session_id or "").strip() != parent_session_id + or str(current.checkpoint_type or "").strip() + not in _COMPANY_RUNTIME_SUSPEND_CHECKPOINT_TYPES + ): + logger.info( + "company runtime resume: remaining handoff skipped because checkpoint {} " + "is no longer the resuming owner of scope {}", + checkpoint.checkpoint_id, + parent_session_id, + ) + return False, None + checkpoint.status = current.status + checkpoint.payload = dict(current.payload or {}) + checkpoint.updated_at = current.updated_at + refreshed_snapshot = await self._load_company_runtime_snapshot( + parent_session_id + ) + if refreshed_snapshot: + plan, tasks = refreshed_snapshot + resume_task_ids = await self._company_suspend_resume_candidate_task_ids( + tasks, + exclude_task_ids={final_decider_task_id}, + ) + if not resume_task_ids: + return True, None + if not target_progressed: + awaiting_final_decider_action = True + else: + # Acquire the scheduler attempt while the scope lock still + # owns the checkpoint. Stop/shutdown can therefore never + # observe the released WorkItems without a live coroutine. + driver_ownership = self._acquire_company_executor_driver_ownership( + tasks, + preferred_task_ids=resume_task_ids, + ) + tasks = await self._prepare_company_runtime_tasks_for_resume( + tasks, + payload, + resume_task_ids=resume_task_ids, + ) + await self._reset_company_executor_runtime_for_resume(tasks, payload) + if parent_session_id: + self._reregister_company_runtime_children( + tasks, + checkpoint_session_id=parent_session_id, + ) + except BaseException: + if driver_ownership is not None: + driver_ownership.release() + raise + if awaiting_final_decider_action: logger.info( - "company runtime resume: keeping suspended work items held because final decider has not run yet" + "company runtime resume: restoring checkpoint {} to pending because " + "remaining work is held and final decider has no durable arbitration action", + checkpoint.checkpoint_id, ) - return None - refreshed_snapshot = await self._load_company_runtime_snapshot(parent_session_id) - if refreshed_snapshot: - plan, tasks = refreshed_snapshot - resume_task_ids = await self._company_suspend_resume_candidate_task_ids( - tasks, - exclude_task_ids={final_decider_task_id}, - ) - if not resume_task_ids: - return None - tasks = await self._prepare_company_runtime_tasks_for_resume( - tasks, - payload, - resume_task_ids=resume_task_ids, - ) - await self._reset_company_executor_runtime_for_resume(tasks, payload) - if parent_session_id: - self._reregister_company_runtime_children(tasks, checkpoint_session_id=parent_session_id) - if self.on_company_runtime_children and parent_session_id and tasks: - self.on_company_runtime_children(parent_session_id, [t.id for t in tasks]) - return await self.company_executor.execute(plan, tasks) + await self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="awaiting_final_decider_action", + error="final decider returned without a durable arbitration action", + ) + return False, None + try: + with self._company_executor_driver_context(driver_ownership): + if self.on_company_runtime_children and parent_session_id and tasks: + self.on_company_runtime_children( + parent_session_id, + [t.id for t in tasks], + ) + result = await self.company_executor.execute(plan, tasks) + return True, result + finally: + if driver_ownership is not None: + driver_ownership.release() async def _company_followup_target_progressed(self, task_id: str) -> bool: if not self.store: @@ -10226,31 +11057,85 @@ class OPCEngine: if target_task is None: return "Could not route the suspended company runtime because no CEO/final-decider work item was available." - tasks = await self._handoff_company_suspend_checkpoint( + handoff = await self._handoff_company_suspend_checkpoint( checkpoint, payload=payload, parent_session_id=parent_session_id, tasks=tasks, resume_task_ids={target_task.id}, ) - followup_result = await self._resume_company_runtime_via_final_decider( - plan=plan, - tasks=tasks, - user_reply=user_reply, - session_id=parent_session_id, - ) - if followup_result is None: + if handoff is None: return ( - "Could not route the suspended company runtime because the CEO/final-decider " - "work item was unavailable after resume handoff." + "This company runtime is already being resumed by another request." ) - continuation_result = await self._resume_remaining_company_runtime_after_final_decider( - plan=plan, - tasks=tasks, - payload=payload, - parent_session_id=parent_session_id, - final_decider_task_id=target_task.id, - ) + tasks, driver_ownership = handoff + try: + with self._company_executor_driver_context(driver_ownership): + followup_result = await self._resume_company_runtime_via_final_decider( + plan=plan, + tasks=tasks, + user_reply=user_reply, + session_id=parent_session_id, + ) + if followup_result is None: + await self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_during_execution", + error="final-decider work item was unavailable", + ) + return ( + "Could not route the suspended company runtime because the CEO/final-decider " + "work item was unavailable after resume handoff." + ) + continuation_owned, continuation_result = await self._resume_remaining_company_runtime_after_final_decider( + checkpoint=checkpoint, + plan=plan, + tasks=tasks, + payload=payload, + parent_session_id=parent_session_id, + final_decider_task_id=target_task.id, + ) + if not continuation_owned: + if ( + str(checkpoint.payload.get("resume_state", "") or "").strip() + == "awaiting_final_decider_action" + ): + return ( + f"{followup_result}\n\nThe CEO/final decider has not yet recorded " + "a durable arbitration action. Remaining work items stay suspended " + "and this checkpoint remains available to continue." + ).strip() + return ( + f"{followup_result}\n\nThe company runtime was suspended before " + "remaining work items were released; they remain held." + ).strip() + await self._complete_company_suspend_checkpoint_resume( + checkpoint, + parent_session_id=parent_session_id, + ) + except asyncio.CancelledError as exc: + await self._restore_company_suspend_checkpoint_pending_after_cancellation( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_during_execution", + error=exc, + ) + raise + except Exception as exc: + await self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_during_execution", + error=exc, + ) + raise + finally: + if driver_ownership is not None: + driver_ownership.release() if continuation_result: return f"{followup_result}\n\nResumed remaining company runtime after CEO/final-decider arbitration.\n\n{continuation_result}".strip() return followup_result @@ -10265,13 +11150,43 @@ class OPCEngine: if loaded is None: return "Could not resume the suspended company runtime because its task set could not be restored." payload, parent_session_id, plan, tasks = loaded - tasks = await self._handoff_company_suspend_checkpoint( + handoff = await self._handoff_company_suspend_checkpoint( checkpoint, payload=payload, parent_session_id=parent_session_id, tasks=tasks, ) - result = await self.company_executor.execute(plan, tasks) + if handoff is None: + return "This company runtime is already being resumed by another request." + tasks, driver_ownership = handoff + try: + with self._company_executor_driver_context(driver_ownership): + result = await self.company_executor.execute(plan, tasks) + await self._complete_company_suspend_checkpoint_resume( + checkpoint, + parent_session_id=parent_session_id, + ) + except asyncio.CancelledError as exc: + await self._restore_company_suspend_checkpoint_pending_after_cancellation( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_during_execution", + error=exc, + ) + raise + except Exception as exc: + await self._restore_company_suspend_checkpoint_pending( + checkpoint, + parent_session_id=parent_session_id, + tasks=tasks, + resume_state="failed_during_execution", + error=exc, + ) + raise + finally: + if driver_ownership is not None: + driver_ownership.release() prefix = ( "Resuming the suspended company runtime" if checkpoint.checkpoint_type == "company_runtime_suspended" @@ -12051,6 +12966,8 @@ class OPCEngine: config=delegate_config, opc_home=self.opc_home, project_id=normalized_project_id, + active_task_run_registry=self._active_task_run_registry, + owns_active_task_run_registry=False, on_progress=self.on_progress, on_runtime_event=self.on_runtime_event, on_escalation=self.on_escalation, @@ -12185,7 +13102,10 @@ class OPCEngine: async def shutdown(self) -> None: """Clean shutdown of all subsystems.""" + self._shutting_down = True logger.info("Shutting down OPC Engine...") + if self._owns_active_task_run_registry: + await self.prepare_active_company_runtimes_for_shutdown() delegates = list(self._project_engine_delegates.values()) self._project_engine_delegates.clear() for delegate in delegates: diff --git a/opc/layer2_organization/company_mode.py b/opc/layer2_organization/company_mode.py index 10b25f9..52b4d04 100644 --- a/opc/layer2_organization/company_mode.py +++ b/opc/layer2_organization/company_mode.py @@ -17,6 +17,10 @@ from typing import Any, Awaitable, Callable from loguru import logger +from opc.core.active_task_runs import ( + ActiveTaskRunAdmissionClosed, + ActiveTaskRunRegistry, +) from opc.core.config import DEFAULT_EXTERNAL_AGENT_STARTUP_TIMEOUT_SECONDS, DEFAULT_ORGANIZATION_ID from opc.core.models import ( AdaptiveRoleProfile, @@ -456,6 +460,26 @@ class WorkItemOutputBundle: summary: str = "" +@dataclass(frozen=True) +class CompanyExecutorDriverOwnership: + """One registry attempt covering a complete company scheduler run.""" + + registry: ActiveTaskRunRegistry + project_id: str + task_id: str + attempt_token: str + + def bind(self): + return self.registry.bind_driver_attempt(self.attempt_token) + + def release(self) -> bool: + return self.registry.unregister( + self.project_id, + self.task_id, + self.attempt_token, + ) + + def serialize_company_runtime_spec(spec: CompanyRuntimeSpec | None) -> dict[str, Any]: if spec is None: return {} @@ -1354,6 +1378,7 @@ class CompanyWorkItemExecutor: store: Any | None = None, llm: Any | None = None, role_prompt_runner: Callable[[Task, str, dict[str, Any], str, bool], Awaitable[str | None]] | None = None, + active_task_run_registry: ActiveTaskRunRegistry | None = None, ) -> None: self.org_engine = org_engine self.communication = communication @@ -1373,6 +1398,7 @@ class CompanyWorkItemExecutor: self.on_kanban_changed = on_kanban_changed self.work_item_timeout = work_item_timeout self.role_prompt_runner = role_prompt_runner + self.active_task_run_registry = active_task_run_registry self._default_run_state = CompanyExecutorRunState() self._run_state_var: ContextVar[CompanyExecutorRunState | None] = ContextVar( f"company-executor-run-state:{id(self)}", @@ -3368,12 +3394,6 @@ class CompanyWorkItemExecutor: "cell_id": work_item.cell_id, "parent_work_item_id": work_item.parent_work_item_id, } - if work_item.phase == Phase.PAUSED: - task.metadata.setdefault("interrupted_recovery", { - "reason": "work_item_interrupted", - "detected_at": datetime.now().isoformat(), - }) - if task.metadata != before_metadata: changed = True return changed @@ -4359,14 +4379,76 @@ class CompanyWorkItemExecutor: return "dispatch_required" return "worker_execute" - async def execute(self, plan: CompanyWorkItemRuntimePlan, tasks: list[Task]) -> str: - plan = _coerce_company_work_item_runtime_plan(plan) or CompanyWorkItemRuntimePlan() - plan.metadata = { - **dict(plan.metadata or {}), - "execution_model": "multi_team_org", - "runtime_model": "multi_team_org", + @staticmethod + def _driver_ownership_task( + tasks: list[Task], + *, + preferred_task_ids: set[str] | None = None, + ) -> Task | None: + preferred = { + str(task_id or "").strip() + for task_id in set(preferred_task_ids or set()) + if str(task_id or "").strip() } - return await self._execute_multi_team_org(plan, tasks) + candidates = [ + task + for task in tasks + if str(getattr(task, "id", "") or "").strip() + and (not preferred or task.id in preferred) + ] + for task in candidates: + if linked_work_item_id_for_task(task): + return task + for task in candidates: + if is_work_item_runtime_metadata(dict(task.metadata or {})): + return task + return candidates[0] if candidates else None + + def acquire_driver_ownership( + self, + tasks: list[Task], + *, + preferred_task_ids: set[str] | None = None, + ) -> CompanyExecutorDriverOwnership | None: + registry = self.active_task_run_registry + task = self._driver_ownership_task( + tasks, + preferred_task_ids=preferred_task_ids, + ) + if registry is None or task is None: + return None + project_id = str(task.project_id or "default").strip() or "default" + try: + attempt_token = registry.register(project_id, task.id) + except ActiveTaskRunAdmissionClosed as exc: + raise asyncio.CancelledError(str(exc)) from exc + return CompanyExecutorDriverOwnership( + registry=registry, + project_id=project_id, + task_id=task.id, + attempt_token=attempt_token, + ) + + async def execute( + self, + plan: CompanyWorkItemRuntimePlan, + tasks: list[Task], + ) -> str: + ownership = self.acquire_driver_ownership(tasks) + try: + plan = _coerce_company_work_item_runtime_plan(plan) or CompanyWorkItemRuntimePlan() + plan.metadata = { + **dict(plan.metadata or {}), + "execution_model": "multi_team_org", + "runtime_model": "multi_team_org", + } + if ownership is None: + return await self._execute_multi_team_org(plan, tasks) + with ownership.bind(): + return await self._execute_multi_team_org(plan, tasks) + finally: + if ownership is not None: + ownership.release() async def _execute_multi_team_org( self, @@ -4501,11 +4583,11 @@ class CompanyWorkItemExecutor: # Claim whatever is immediately claimable and spawn each # work item as an independent asyncio.Task so the loop no # longer blocks on the slowest sibling. - claims = await self.runtime.claim_runnable_tasks(tasks, work_items=work_items) - for member_session, claimed_task in claims: - work_item_coro = self._run_claimed_work_item(member_session, claimed_task, {}) - work_item_task = asyncio.create_task(work_item_coro) - active_work_item_tasks[work_item_task] = (member_session, claimed_task) + claims = await self._claim_and_create_work_item_tasks( + tasks, + work_items, + active_work_item_tasks, + ) # Termination: only when nothing is in-flight AND nothing # else is runnable. If work items are still running, even an # "empty runnable" snapshot may become non-empty within @@ -4608,10 +4690,6 @@ class CompanyWorkItemExecutor: self._schedule_kanban_notification() except asyncio.CancelledError: claimed_pairs = list(active_work_item_tasks.values()) - claimed_tasks = [ - claimed_task - for _member_session, claimed_task in claimed_pairs - ] for work_item_task in list(active_work_item_tasks.keys()): if not work_item_task.done(): work_item_task.cancel() @@ -4660,63 +4738,6 @@ class CompanyWorkItemExecutor: ) except Exception: logger.opt(exception=True).debug("company runtime cancellation: failed session idle reset") - for claimed_task in claimed_tasks: - if claimed_task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: - continue - claimed_task.metadata = dict(claimed_task.metadata or {}) - claimed_task.metadata["company_runtime_suspended_at"] = datetime.now().isoformat() - claimed_task.metadata.setdefault("last_stop_reason", "runtime_cancelled") - claimed_task.metadata["company_runtime_stop_state"] = "suspended" - claimed_task.metadata["company_runtime_stop_marked_at"] = ( - claimed_task.metadata.get("company_runtime_stop_marked_at") or datetime.now().isoformat() - ) - claimed_task.metadata.setdefault( - "suspended_task_status", - claimed_task.status.value if isinstance(claimed_task.status, TaskStatus) else str(claimed_task.status or ""), - ) - work_item_id = linked_work_item_id_for_task(claimed_task) - try: - if work_item_id and self._store_is_ready(self.store) and hasattr(self.store, "get_delegation_work_item"): - work_item = await self.store.get_delegation_work_item(work_item_id) - else: - work_item = None - if work_item is not None and getattr(work_item, "phase", None) not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED}: - phase = getattr(work_item, "phase", Phase.RUNNING) - phase_value = phase.value if isinstance(phase, Phase) else str(phase or "") - original_claim = { - "claimed_by_role_runtime_session_id": str(getattr(work_item, "claimed_by_role_runtime_session_id", "") or ""), - "claimed_by_seat_id": str(getattr(work_item, "claimed_by_seat_id", "") or ""), - "claimed_by_role_session_id": str((getattr(work_item, "metadata", {}) or {}).get("claimed_by_role_session_id", "") or ""), - "claimed_task_id": str((getattr(work_item, "metadata", {}) or {}).get("claimed_task_id", "") or claimed_task.id), - } - await self.store.update_delegation_work_item( - work_item_id, - metadata_updates={ - "dispatch_hold": "company_runtime_suspended", - "suspended_at": datetime.now().isoformat(), - "suspend_reason": claimed_task.metadata.get("last_stop_reason", "runtime_cancelled"), - "suspended_phase": phase_value, - "suspended_task_status": claimed_task.metadata.get("suspended_task_status", ""), - "suspended_claim": original_claim, - "claimed_by_role_session_id": "", - "claimed_task_id": "", - }, - claimed_by_role_runtime_session_id="", - claimed_by_seat_id="", - ) - claimed_task.metadata["dispatch_hold"] = "company_runtime_suspended" - claimed_task.metadata["suspended_phase"] = phase_value - except Exception: - logger.opt(exception=True).debug( - "company runtime cancellation: failed suspend hold release", - ) - if self.save_task and self._store_is_ready(self.store): - try: - await self.save_task(claimed_task) - except Exception: - logger.opt(exception=True).debug( - "company runtime cancellation: failed suspended task save", - ) raise finally: # Drain any work items still running (shouldn't happen given the @@ -4739,6 +4760,97 @@ class CompanyWorkItemExecutor: active_work_item_tasks.clear() return self._summarize_multi_team_org_results(tasks) + @staticmethod + def _runtime_scope_for_tasks(tasks: list[Task]) -> tuple[str, str]: + project_id = "default" + runtime_session_id = "" + for task in tasks: + project_id = str(task.project_id or project_id).strip() or "default" + metadata = dict(task.metadata or {}) + runtime_session_id = str( + getattr(task, "parent_session_id", "") + or metadata.get("company_runtime_root_session_id") + or metadata.get("parent_session_id") + or "" + ).strip() + if runtime_session_id: + return project_id, runtime_session_id + for task in tasks: + runtime_session_id = str(getattr(task, "session_id", "") or "").strip() + if runtime_session_id: + return project_id, runtime_session_id + return project_id, "" + + async def _claim_and_create_work_item_tasks( + self, + tasks: list[Task], + work_items: list[DelegationWorkItem], + active_work_item_tasks: dict[ + asyncio.Task[TaskResult | None], + tuple[CompanyMemberSession, Task], + ], + ) -> list[tuple[CompanyMemberSession, Task]]: + """Keep durable claim and coroutine ownership in one scope boundary.""" + + async def claim_and_create() -> list[tuple[CompanyMemberSession, Task]]: + claims = await self.runtime.claim_runnable_tasks( + tasks, + work_items=work_items, + ) + for member_session, claimed_task in claims: + work_item_task = self._create_claimed_work_item_task( + member_session, + claimed_task, + {}, + ) + active_work_item_tasks[work_item_task] = ( + member_session, + claimed_task, + ) + return claims + + registry = self.active_task_run_registry + project_id, runtime_session_id = self._runtime_scope_for_tasks(tasks) + if registry is None or not runtime_session_id: + return await claim_and_create() + async with registry.scope_lock(project_id, runtime_session_id): + return await claim_and_create() + + def _create_claimed_work_item_task( + self, + member_session: CompanyMemberSession, + task: Task, + task_by_projection_id: dict[str, Task], + ) -> asyncio.Task[TaskResult | None]: + """Register ownership before scheduling the full claimed-item coroutine.""" + + registry = self.active_task_run_registry + project_id = str(task.project_id or "default").strip() or "default" + attempt_token = "" + if registry is not None: + try: + attempt_token = registry.register(project_id, task.id) + except ActiveTaskRunAdmissionClosed as exc: + raise asyncio.CancelledError(str(exc)) from exc + + async def run_owned() -> TaskResult | None: + try: + return await self._run_claimed_work_item( + member_session, + task, + task_by_projection_id, + ) + finally: + if registry is not None and attempt_token: + registry.unregister(project_id, task.id, attempt_token) + + try: + return asyncio.create_task(run_owned()) + except BaseException: + if registry is not None and attempt_token: + registry.unregister(project_id, task.id, attempt_token) + raise + async def _run_claimed_work_item( self, member_session: CompanyMemberSession, @@ -5298,69 +5410,10 @@ class CompanyWorkItemExecutor: timeout=self.work_item_timeout, ) except asyncio.CancelledError: - task.metadata = dict(task.metadata or {}) - task.metadata["company_runtime_suspended_at"] = datetime.now().isoformat() - task.metadata.setdefault("last_stop_reason", "runtime_cancelled") - task.metadata["company_runtime_stop_state"] = "suspended" - task.metadata["company_runtime_stop_marked_at"] = ( - task.metadata.get("company_runtime_stop_marked_at") or datetime.now().isoformat() - ) - task.metadata.setdefault( - "suspended_task_status", - task.status.value if isinstance(task.status, TaskStatus) else str(task.status or ""), - ) - work_item_id = linked_work_item_id_for_task(task) - store_ready = self._store_is_ready(self.store) - if work_item_id and self.store and store_ready: - task.metadata.pop("progress_log", None) - await append_work_item_progress( - self.store, - work_item_id, - "Work item suspended by runtime cancellation.", - ) - else: - progress = list(task.metadata.get("progress_log", []) or []) - progress.append("Work item suspended by runtime cancellation.") - task.metadata["progress_log"] = progress[-20:] - try: - work_item = ( - await self.store.get_delegation_work_item(work_item_id) - if work_item_id and store_ready and hasattr(self.store, "get_delegation_work_item") - else None - ) - if work_item is not None and getattr(work_item, "phase", None) not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED}: - phase = getattr(work_item, "phase", Phase.RUNNING) - phase_value = phase.value if isinstance(phase, Phase) else str(phase or "") - original_claim = { - "claimed_by_role_runtime_session_id": str(getattr(work_item, "claimed_by_role_runtime_session_id", "") or ""), - "claimed_by_seat_id": str(getattr(work_item, "claimed_by_seat_id", "") or ""), - "claimed_by_role_session_id": str((getattr(work_item, "metadata", {}) or {}).get("claimed_by_role_session_id", "") or ""), - "claimed_task_id": str((getattr(work_item, "metadata", {}) or {}).get("claimed_task_id", "") or task.id), - } - await self.store.update_delegation_work_item( - work_item_id, - metadata_updates={ - "dispatch_hold": "company_runtime_suspended", - "suspended_at": datetime.now().isoformat(), - "suspend_reason": task.metadata.get("last_stop_reason", "runtime_cancelled"), - "suspended_phase": phase_value, - "suspended_task_status": task.metadata.get("suspended_task_status", ""), - "suspended_claim": original_claim, - "claimed_by_role_session_id": "", - "claimed_task_id": "", - }, - claimed_by_role_runtime_session_id="", - claimed_by_seat_id="", - ) - task.metadata["dispatch_hold"] = "company_runtime_suspended" - task.metadata["suspended_phase"] = phase_value - task.status = task_status_for_phase(phase) if isinstance(phase, Phase) else task.status - except Exception: - logger.opt(exception=True).debug( - "company runtime cancellation: failed to apply suspend hold", - ) - if self.save_task and self._store_is_ready(self.store): - await self.save_task(task) + # Suspension is a checkpoint transition owned by OPCEngine. + # This task object may be stale by the time cancellation is + # observed, so persisting it here can erase the canonical + # checkpoint type, stop intent, or WorkItem hold. raise except asyncio.TimeoutError: logger.error(f"Company work item {projection_id} timed out after {self.work_item_timeout}s") diff --git a/opc/layer2_organization/company_runtime.py b/opc/layer2_organization/company_runtime.py index b18e36e..709208e 100644 --- a/opc/layer2_organization/company_runtime.py +++ b/opc/layer2_organization/company_runtime.py @@ -1373,7 +1373,6 @@ class CompanyRuntime: _skip("no task materialized for work_item this tick", session=session_label, work_item_id=work_item_id) continue - self._claimed_work_item_ids.add(work_item_id) else: task_id = queued_item_id self._queued_task_ids.discard(task_id) @@ -1392,6 +1391,30 @@ class CompanyRuntime: status=getattr(task, "status", None)) continue self._claimed_task_ids.add(task_id) + if work_item is not None: + claimed = await self._claim_role_session_work_item( + session, + work_item, + task, + ) + if not claimed: + fresh_work_item = None + get_work_item = getattr( + self.store, + "get_delegation_work_item", + None, + ) + if callable(get_work_item): + fresh_work_item = await get_work_item(work_item_id) + if fresh_work_item is not None: + work_item_map[work_item_id] = fresh_work_item + _skip( + "atomic WorkItem claim lost to a phase/hold/owner update", + session=session_label, + work_item_id=work_item_id, + ) + continue + self._claimed_work_item_ids.add(work_item_id) if can_soft_wake and ( bool((task.metadata or {}).get("review_task", False)) or bool((task.metadata or {}).get("review_execution_work_item", False)) @@ -1412,7 +1435,6 @@ class CompanyRuntime: self.prepare_task_for_session(session, task) await self._sync_current_turn_mode_to_work_item(task, session.current_turn_mode) if work_item is not None: - await self._claim_role_session_work_item(session, work_item, task) # #7: mirror the claim onto the in-memory work_item so # subsequent iterations in the same claim pass see it # and is_dispatchable returns False (race safety after @@ -1908,21 +1930,65 @@ class CompanyRuntime: self.role_sessions[role_session_id] = role_session return role_session - async def _claim_role_session_work_item(self, session: CompanyMemberSession, work_item: Any, task: Task) -> None: + async def _claim_role_session_work_item( + self, + session: CompanyMemberSession, + work_item: Any, + task: Task, + ) -> bool: """Atomically claim ``work_item`` for the role-instance behind ``session``. In the role-instance model the claim identity is ``role_runtime_session_id``. Seat / manager-seat columns are still written for org-chart lookups but they are NOT part of - the claim key — only the role session is. + the claim key — only the role session is. Pure in-memory runtimes have + no durable race to arbitrate and keep the same local claim semantics. """ work_item_id = str(getattr(work_item, "work_item_id", "") or "").strip() if not work_item_id: - return + return False role_session = self._ensure_role_session(task) if role_session is None: - return + return False + work_item_revision = 0 + try: + work_item_revision = int((getattr(work_item, "metadata", {}) or {}).get("manager_mutation_revision") or 0) + except (TypeError, ValueError): + work_item_revision = 0 + store_ready = self.store is not None and bool( + getattr(self.store, "is_ready", False) + ) + claim = ( + getattr(self.store, "claim_delegation_work_item_if_dispatchable", None) + if store_ready + else None + ) + if store_ready: + # A durable runtime must win the store CAS before it mutates any + # in-memory scheduling state. This is the Stop/shutdown race + # boundary: a missing CAS API is a failed claim, not permission to + # fall back to the former best-effort update path. + if not callable(claim): + return False + persisted = await claim( + work_item_id, + expected_phase=getattr(work_item, "phase", Phase.READY), + role_runtime_session_id=role_session.role_session_id, + seat_id=str(getattr(session, "seat_id", "") or "").strip(), + task_id=task.id, + work_item_revision=work_item_revision, + ) + if persisted is None: + return False + + work_item.phase = persisted.phase + work_item.role_runtime_session_id = persisted.role_runtime_session_id + work_item.claimed_by_role_runtime_session_id = ( + persisted.claimed_by_role_runtime_session_id + ) + work_item.claimed_by_seat_id = persisted.claimed_by_seat_id + work_item.metadata = dict(persisted.metadata or {}) ready_background_ids = [ item_id for item_id in list(role_session.background_work_item_ids or []) @@ -1937,39 +2003,11 @@ class CompanyRuntime: session.background_work_item_ids = list(role_session.background_work_item_ids) task.metadata = dict(task.metadata) task.metadata["delegation_role_session_id"] = role_session.role_session_id - work_item_revision = 0 - try: - work_item_revision = int((getattr(work_item, "metadata", {}) or {}).get("manager_mutation_revision") or 0) - except (TypeError, ValueError): - work_item_revision = 0 task.metadata["started_work_item_revision"] = work_item_revision task.metadata["claimed_work_item_revision"] = work_item_revision - if self.store and bool(getattr(self.store, "is_ready", False)) and hasattr(self.store, "update_delegation_work_item"): - # Do not regress a work item that is already in a review - # phase (AWAITING_MANAGER_REVIEW / AWAITING_HUMAN) back to - # RUNNING: the DB phase validator rejects that transition - # and the error bubbles up to the session loop. This - # happens when the reactivation sweeper wakes a task whose - # work item has already been promoted to review — treat - # the claim as "refresh the task/role-session bindings - # only" and leave the phase alone. - current_phase = getattr(work_item, "phase", None) - phase_to_write: Phase | None = Phase.RUNNING - if current_phase in IN_REVIEW_PHASES: - phase_to_write = None - await self.store.update_delegation_work_item( - work_item_id, - phase=phase_to_write, - role_runtime_session_id=role_session.role_session_id, - claimed_by_role_runtime_session_id=role_session.role_session_id, - metadata_updates={ - "claimed_by_role_session_id": role_session.role_session_id, - "claimed_task_id": task.id, - "claimed_work_item_revision": work_item_revision, - }, - ) if self.store and bool(getattr(self.store, "is_ready", False)) and hasattr(self.store, "save_delegation_role_session"): await self.store.save_delegation_role_session(role_session) + return True def ensure_role_instance_session( self, task: Task diff --git a/opc/layer2_organization/company_runtime_identity.py b/opc/layer2_organization/company_runtime_identity.py new file mode 100644 index 0000000..2572d9f --- /dev/null +++ b/opc/layer2_organization/company_runtime_identity.py @@ -0,0 +1,391 @@ +"""Canonical company-runtime identity derived from durable records. + +Company-mode Tasks are execution envelopes, not the identity of a run. A +runtime is owned by its root session and an active suspend checkpoint. This +module deliberately has no UI dependencies so every surface can resolve the +same scope without relying on process-local task maps. +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from datetime import datetime +from typing import Any, Iterable + +from opc.layer2_organization.work_item_links import linked_work_item_id_for_task +from opc.layer2_organization.work_item_runtime import is_work_item_runtime_metadata + + +COMPANY_RUNTIME_CHECKPOINT_TYPES: frozenset[str] = frozenset({ + "company_runtime_suspended", + "company_runtime_interrupted", +}) +ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES: frozenset[str] = frozenset({ + "pending", + "resuming", +}) + + +def _text(value: Any) -> str: + return str(value or "").strip() + + +def _metadata(task: Any) -> dict[str, Any]: + return dict(getattr(task, "metadata", {}) or {}) + + +def _task_id(task: Any) -> str: + return _text(getattr(task, "id", "")) + + +def _task_session_id(task: Any) -> str: + return _text(getattr(task, "session_id", "")) + + +def _task_parent_session_id(task: Any) -> str: + metadata = _metadata(task) + return _text( + getattr(task, "parent_session_id", "") + or metadata.get("company_runtime_root_session_id") + or metadata.get("parent_session_id") + ) + + +def _has_company_runtime_marker(task: Any) -> bool: + metadata = _metadata(task) + exec_mode = _text(metadata.get("exec_mode")).lower() + mode = _text(metadata.get("mode")).lower() + execution_mode = _text(metadata.get("execution_mode")).lower() + if exec_mode in {"company", "org", "custom"} or mode in {"company", "org", "custom"}: + return True + if execution_mode in {"company", "company_mode", "multi_team_org"}: + return True + if is_work_item_runtime_metadata(metadata): + return True + if linked_work_item_id_for_task(task): + return True + if any( + metadata.get(key) not in (None, "", [], {}) + for key in ( + "company_work_item_plan", + "company_runtime_root_session_id", + "delegation_run_id", + "work_item_projection_id", + "work_item_projection_ref", + "work_item_role_id", + "shared_role_session", + ) + ): + return True + # Old company records may predate exec_mode. An explicit task-mode marker + # wins over the legacy profile hint. + explicitly_task_mode = ( + exec_mode in {"task", "project", "single"} + or mode == "task" + or execution_mode in {"task", "task_mode", "project"} + or _text(metadata.get("task_mode_contract")) == "single_full_capability_main_agent" + ) + return not explicitly_task_mode and bool(_text(metadata.get("company_profile"))) + + +def is_company_runtime_task(task: Any) -> bool: + """Return whether durable Task metadata identifies company-owned work.""" + + return _has_company_runtime_marker(task) + + +def is_pure_company_ui_anchor(task: Any, runtime_session_id: str) -> bool: + """Return whether *task* is the user-facing container for a runtime. + + A shared final-decider Task can have the same ``session_id`` as the UI + anchor. Work-item, role, or parent links therefore disqualify a Task even + when its session id is an exact match. + """ + + session_id = _text(runtime_session_id) + if not session_id or _task_session_id(task) != session_id: + return False + if _text(getattr(task, "parent_session_id", "")) or _text(getattr(task, "parent_id", "")): + return False + if linked_work_item_id_for_task(task): + return False + metadata = _metadata(task) + return not any( + metadata.get(key) not in (None, "", [], {}, False) + for key in ( + "work_item_runtime", + "work_item_projection_id", + "work_item_projection_ref", + "work_item_id", + "work_item_role_id", + "delegation_role_session_id", + "shared_role_session", + "shared_role_id", + "company_runtime_root_session_id", + ) + ) + + +def _created_sort_key(value: Any) -> tuple[float, str]: + created_at = getattr(value, "created_at", None) + if isinstance(created_at, datetime): + timestamp = created_at.timestamp() + elif hasattr(created_at, "timestamp"): + try: + timestamp = float(created_at.timestamp()) + except Exception: + timestamp = 0.0 + else: + timestamp = 0.0 + return timestamp, _task_id(value) + + +def _checkpoint_sort_key(checkpoint: Any) -> tuple[float, float, str]: + def _timestamp(value: Any) -> float: + if isinstance(value, datetime): + return value.timestamp() + if hasattr(value, "timestamp"): + try: + return float(value.timestamp()) + except Exception: + return 0.0 + return 0.0 + + return ( + _timestamp(getattr(checkpoint, "updated_at", None)), + _timestamp(getattr(checkpoint, "created_at", None)), + _text(getattr(checkpoint, "checkpoint_id", "")), + ) + + +def _checkpoint_runtime_session_id(checkpoint: Any) -> str: + payload = dict(getattr(checkpoint, "payload", {}) or {}) + return _text( + getattr(checkpoint, "session_id", "") + or payload.get("parent_session_id") + or payload.get("session_id") + ) + + +@dataclass(frozen=True) +class CompanyRuntimeIdentity: + """Resolved identity for one company runtime scope.""" + + project_id: str + runtime_session_id: str + runtime_task_ids: tuple[str, ...] + ui_anchor_task_id: str = "" + config_source_task_id: str = "" + pending_checkpoint_id: str = "" + pending_checkpoint_type: str = "" + pending_checkpoint_status: str = "" + resumable: bool = False + checkpoint: Any | None = field(default=None, repr=False, compare=False) + + +class CompanyRuntimeIdentityIndex: + """Session-first index over preloaded Tasks and checkpoints.""" + + def __init__(self, tasks: Iterable[Any], checkpoints: Iterable[Any] = ()) -> None: + self.tasks = tuple(tasks or ()) + self.checkpoints = tuple(checkpoints or ()) + self.tasks_by_id = { + _task_id(task): task + for task in self.tasks + if _task_id(task) + } + self.checkpoints_by_id = { + _text(getattr(checkpoint, "checkpoint_id", "")): checkpoint + for checkpoint in self.checkpoints + if _text(getattr(checkpoint, "checkpoint_id", "")) + } + self._identities_by_session = self._build_identities() + self._runtime_session_by_task_id: dict[str, str] = {} + runtime_sessions_by_task_session_id: dict[str, set[str]] = {} + for runtime_session_id, identity in self._identities_by_session.items(): + for task_id in identity.runtime_task_ids: + self._runtime_session_by_task_id[task_id] = runtime_session_id + task_session_id = _task_session_id(self.tasks_by_id.get(task_id)) + if task_session_id: + runtime_sessions_by_task_session_id.setdefault( + task_session_id, + set(), + ).add(runtime_session_id) + self._runtime_session_by_task_session_id = { + task_session_id: next(iter(runtime_session_ids)) + for task_session_id, runtime_session_ids in runtime_sessions_by_task_session_id.items() + if len(runtime_session_ids) == 1 + } + + @property + def identities(self) -> tuple[CompanyRuntimeIdentity, ...]: + return tuple(self._identities_by_session.values()) + + def task(self, task_id: str) -> Any | None: + return self.tasks_by_id.get(_text(task_id)) + + def resolve( + self, + *, + task_id: str = "", + task_session_id: str = "", + runtime_session_id: str = "", + checkpoint_id: str = "", + ) -> CompanyRuntimeIdentity | None: + requested_task_id = _text(task_id) + requested_task_session_id = _text(task_session_id) + requested_session_id = _text(runtime_session_id) + requested_checkpoint_id = _text(checkpoint_id) + + task_scope_id = self._runtime_session_by_task_id.get(requested_task_id, "") + session_scope_id = self._runtime_session_by_task_session_id.get( + requested_task_session_id, + "", + ) + checkpoint = self.checkpoints_by_id.get(requested_checkpoint_id) if requested_checkpoint_id else None + checkpoint_session_id = _checkpoint_runtime_session_id(checkpoint) if checkpoint is not None else "" + + candidates = { + value + for value in ( + requested_session_id, + task_scope_id, + session_scope_id, + checkpoint_session_id, + ) + if value + } + if requested_task_session_id and not session_scope_id: + return None + if len(candidates) != 1: + return None + resolved_session_id = next(iter(candidates)) + identity = self._identities_by_session.get(resolved_session_id) + if identity is None: + return None + if requested_task_id and requested_task_id not in identity.runtime_task_ids: + return None + if requested_checkpoint_id and requested_checkpoint_id != identity.pending_checkpoint_id: + return None + return identity + + def _build_identities(self) -> dict[str, CompanyRuntimeIdentity]: + active_checkpoints_by_session: dict[str, list[Any]] = {} + for checkpoint in self.checkpoints: + checkpoint_type = _text(getattr(checkpoint, "checkpoint_type", "")) + checkpoint_status = _text(getattr(checkpoint, "status", "")).lower() + if ( + checkpoint_type not in COMPANY_RUNTIME_CHECKPOINT_TYPES + or checkpoint_status not in ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES + ): + continue + runtime_session_id = _checkpoint_runtime_session_id(checkpoint) + if runtime_session_id: + active_checkpoints_by_session.setdefault(runtime_session_id, []).append(checkpoint) + + known_sessions = set(active_checkpoints_by_session) + for task in self.tasks: + if not _has_company_runtime_marker(task): + continue + runtime_session_id = _task_parent_session_id(task) or _task_session_id(task) + if runtime_session_id: + known_sessions.add(runtime_session_id) + + tasks_by_session: dict[str, list[Any]] = {session_id: [] for session_id in known_sessions} + for task in self.tasks: + task_id = _task_id(task) + if not task_id: + continue + parent_session_id = _task_parent_session_id(task) + own_session_id = _task_session_id(task) + runtime_session_id = parent_session_id or own_session_id + if runtime_session_id not in known_sessions: + continue + if not ( + _has_company_runtime_marker(task) + or runtime_session_id in active_checkpoints_by_session + or is_pure_company_ui_anchor(task, runtime_session_id) + ): + continue + tasks_by_session.setdefault(runtime_session_id, []).append(task) + + identities: dict[str, CompanyRuntimeIdentity] = {} + for runtime_session_id in sorted(known_sessions): + group = sorted(tasks_by_session.get(runtime_session_id, []), key=_created_sort_key) + anchor = next( + (task for task in group if is_pure_company_ui_anchor(task, runtime_session_id)), + None, + ) + def _has_runtime_config(task: Any) -> bool: + metadata = _metadata(task) + return any( + metadata.get(key) not in (None, "", [], {}) + for key in ( + "exec_mode", + "mode", + "company_profile", + "org_id", + "organization_id", + "preferred_agent", + "selected_execution_agent", + ) + ) + + config_source = ( + anchor if anchor is not None and _has_runtime_config(anchor) else None + ) or next( + ( + task for task in group + if _has_runtime_config(task) + ), + anchor or (group[0] if group else None), + ) + checkpoint_candidates = active_checkpoints_by_session.get(runtime_session_id, []) + checkpoint = max(checkpoint_candidates, key=_checkpoint_sort_key) if checkpoint_candidates else None + checkpoint_status = _text(getattr(checkpoint, "status", "")).lower() if checkpoint is not None else "" + project_id = _text( + getattr(checkpoint, "project_id", "") if checkpoint is not None else "" + ) or _text(getattr(config_source, "project_id", "") if config_source is not None else "") or "default" + identities[runtime_session_id] = CompanyRuntimeIdentity( + project_id=project_id, + runtime_session_id=runtime_session_id, + runtime_task_ids=tuple(_task_id(task) for task in group if _task_id(task)), + ui_anchor_task_id=_task_id(anchor) if anchor is not None else "", + config_source_task_id=_task_id(config_source) if config_source is not None else "", + pending_checkpoint_id=_text(getattr(checkpoint, "checkpoint_id", "")) if checkpoint is not None else "", + pending_checkpoint_type=_text(getattr(checkpoint, "checkpoint_type", "")) if checkpoint is not None else "", + pending_checkpoint_status=checkpoint_status, + resumable=checkpoint_status == "pending", + checkpoint=checkpoint, + ) + return identities + + +def build_company_runtime_identity_index( + tasks: Iterable[Any], + checkpoints: Iterable[Any] = (), +) -> CompanyRuntimeIdentityIndex: + return CompanyRuntimeIdentityIndex(tasks, checkpoints) + + +async def load_company_runtime_identity_index( + store: Any, + project_id: str, +) -> CompanyRuntimeIdentityIndex: + """Load durable records once and build the canonical runtime index.""" + + tasks = await store.get_tasks(project_id=project_id) + checkpoint_getter = getattr(store, "get_execution_checkpoints", None) + if callable(checkpoint_getter): + checkpoints = await checkpoint_getter( + project_id=project_id, + checkpoint_types=sorted(COMPANY_RUNTIME_CHECKPOINT_TYPES), + statuses=sorted(ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES), + ) + else: + checkpoint_getter = getattr(store, "get_pending_checkpoints", None) + checkpoints = await checkpoint_getter( + project_id=project_id, + checkpoint_types=sorted(COMPANY_RUNTIME_CHECKPOINT_TYPES), + ) if callable(checkpoint_getter) else [] + return build_company_runtime_identity_index(tasks, checkpoints) diff --git a/opc/layer2_organization/custom_runtime.py b/opc/layer2_organization/custom_runtime.py index a1018b5..24aa5e8 100644 --- a/opc/layer2_organization/custom_runtime.py +++ b/opc/layer2_organization/custom_runtime.py @@ -75,6 +75,8 @@ class CustomRuntimeRunner: store=shared_store, owns_store=shared_store is None, run_startup_reconcile=shared_store is None, + active_task_run_registry=getattr(self.parent, "_active_task_run_registry", None), + owns_active_task_run_registry=False, on_progress=self.parent.on_progress, on_runtime_event=self.parent.on_runtime_event, on_escalation=self.parent.on_escalation, diff --git a/opc/layer2_organization/seat_executor.py b/opc/layer2_organization/seat_executor.py index 0d6e557..4ee9f2a 100644 --- a/opc/layer2_organization/seat_executor.py +++ b/opc/layer2_organization/seat_executor.py @@ -144,8 +144,10 @@ class EngineSeatExecutor: member_session: CompanyMemberSession | None = None, ) -> None: _ = member_session - if hasattr(self.host, "_active_task_runs"): - self.host._active_task_runs.discard(task.id) + # The task coroutine owns its registry attempt token and removes it in + # ``finally``. Interrupt requests must not make a still-running + # coroutine appear inactive. + return None async def shutdown( self, diff --git a/opc/plugins/cli_board/services/recovery.py b/opc/plugins/cli_board/services/recovery.py deleted file mode 100644 index b53389c..0000000 --- a/opc/plugins/cli_board/services/recovery.py +++ /dev/null @@ -1,297 +0,0 @@ -"""CLI-board-specific company runtime recovery manager. - -Independent from office_ui/recovery_manager.py — same Core Engine APIs, -different notification path (TUI event bridge instead of WebSocket broadcast). -""" - -from __future__ import annotations - -import asyncio -import logging -import time -from dataclasses import dataclass, field -from datetime import datetime -from typing import TYPE_CHECKING, Any - -from opc.layer2_organization.work_item_identity import work_item_projection_id_from_metadata -from opc.layer2_organization.work_item_transition import apply_task_status_transition - -if TYPE_CHECKING: - from .engine_facade import EngineFacade - -logger = logging.getLogger(__name__) - - -@dataclass -class RecoverableWorkItem: - projection_id: str - title: str - task_id: str - status: str - interrupted: bool - previous_status: str = "" - - -@dataclass -class InterruptedCompanyRuntime: - parent_session_id: str - parent_task_id: str - project_id: str - title: str - profile: str - interrupted_at: str - work_items: list[RecoverableWorkItem] = field(default_factory=list) - - -@dataclass -class RecoveryStatus: - interrupted: list[InterruptedCompanyRuntime] = field(default_factory=list) - active_recoveries: list[str] = field(default_factory=list) - scanned_at: float = 0.0 - - -def _is_interrupted(task: Any) -> bool: - from opc.core.models import TaskStatus - if task.status != TaskStatus.FAILED: - return False - meta = getattr(task, "metadata", {}) or {} - if meta.get("interrupted_recovery"): - return True - result = getattr(task, "result", {}) or {} - artifacts = result.get("artifacts", {}) or {} - return bool(artifacts.get("interrupted")) - - -class CliRecoveryManager: - """Scan for interrupted company runtimes and provide resume/cancel.""" - - _CACHE_TTL = 10.0 - - def __init__(self, facade: EngineFacade) -> None: - self._facade = facade - self._lock = asyncio.Lock() - self._active: dict[str, asyncio.Task[Any]] = {} - self._cached: RecoveryStatus | None = None - self._cache_until: float = 0.0 - - @property - def _project_id(self) -> str: - return self._facade.project_id or "default" - - async def get_status(self) -> RecoveryStatus: - now = time.time() - if self._cached is not None and now < self._cache_until: - self._cached.active_recoveries = list(self._active.keys()) - return self._cached - status = await self.scan() - self._cached = status - self._cache_until = now + self._CACHE_TTL - return status - - async def scan(self) -> RecoveryStatus: - engine = await self._facade.ensure_ready() - if not engine.store: - return RecoveryStatus() - - try: - all_tasks = await engine.store.get_tasks(project_id=self._project_id) - except Exception as exc: - logger.warning("Recovery scan failed: %s", exc) - return RecoveryStatus() - - groups: dict[str, list[Any]] = {} - tasks_by_session: dict[str, Any] = {} - for task in all_tasks: - sid = str(getattr(task, "session_id", "") or "").strip() - if sid: - tasks_by_session[sid] = task - parent_sid = str(getattr(task, "parent_session_id", "") or "").strip() - projection_id = work_item_projection_id_from_metadata(getattr(task, "metadata", {}) or {}) - if parent_sid and projection_id: - groups.setdefault(parent_sid, []).append(task) - - from opc.core.models import TaskStatus - interrupted: list[InterruptedCompanyRuntime] = [] - - for parent_sid, tasks in groups.items(): - if not any(_is_interrupted(t) for t in tasks): - continue - non_terminal = [t for t in tasks if t.status not in (TaskStatus.DONE, TaskStatus.CANCELLED)] - if not non_terminal: - continue - - parent_task = tasks_by_session.get(parent_sid) - parent_task_id = parent_task.id if parent_task else parent_sid - title = parent_task.title if parent_task else "Unknown company runtime" - - work_items: list[RecoverableWorkItem] = [] - earliest = "" - for t in sorted(tasks, key=lambda x: (x.created_at, x.id)): - meta = dict(getattr(t, "metadata", {}) or {}) - rmeta = meta.get("interrupted_recovery", {}) - is_int = _is_interrupted(t) - if is_int and rmeta.get("detected_at", ""): - det = rmeta["detected_at"] - if not earliest or det < earliest: - earliest = det - work_items.append(RecoverableWorkItem( - projection_id=work_item_projection_id_from_metadata(meta, fallback=t.id), - title=t.title, - task_id=t.id, - status=t.status.value if hasattr(t.status, "value") else str(t.status), - interrupted=is_int, - previous_status=rmeta.get("previous_status", ""), - )) - - profile = "" - for t in tasks: - p = (getattr(t, "metadata", {}) or {}).get("company_profile", "") - if p: - profile = p - break - - interrupted.append(InterruptedCompanyRuntime( - parent_session_id=parent_sid, - parent_task_id=parent_task_id, - project_id=self._project_id, - title=title, - profile=profile, - interrupted_at=earliest or datetime.now().isoformat(), - work_items=work_items, - )) - - return RecoveryStatus( - interrupted=interrupted, - active_recoveries=list(self._active.keys()), - scanned_at=time.time(), - ) - - async def resume(self, parent_task_id: str) -> dict[str, Any]: - async with self._lock: - if parent_task_id in self._active: - return {"ok": False, "error": "already_in_progress"} - - status = await self.scan() - wf = next((w for w in status.interrupted if w.parent_task_id == parent_task_id), None) - if not wf: - return {"ok": False, "error": "not_found"} - - engine = await self._facade.ensure_ready() - snapshot = await engine._load_company_runtime_snapshot(wf.parent_session_id) - if not snapshot: - return {"ok": False, "error": "snapshot_unavailable"} - - plan, tasks = snapshot - - await self._clean_checkpoints(wf, tasks) - - from opc.core.models import TaskStatus - resumed_ids: list[str] = [] - for task in tasks: - if task.status == TaskStatus.DONE: - continue - if task.status in (TaskStatus.FAILED, TaskStatus.BLOCKED): - task.result = None - task.execution_lock = False - task.execution_locked_at = None - meta = dict(task.metadata) - meta.pop("interrupted_recovery", None) - progress = list(meta.get("progress_log", [])) - progress.append(f"[Recovery] Resumed at {datetime.now().isoformat()}") - meta["progress_log"] = progress[-20:] - task.metadata = meta - try: - await apply_task_status_transition( - engine.store, - task, - target_status_or_phase=TaskStatus.PENDING, - reason="cli_recovery_resume", - release_claim=True, - ) - except Exception as exc: - logger.warning("Recovery resume skipped %s: %s", task.id, exc) - continue - if task.status != TaskStatus.PENDING: - logger.warning("Recovery resume preserved non-runnable phase for %s", task.id) - continue - await engine.store.save_task(task) - resumed_ids.append(work_item_projection_id_from_metadata(meta, fallback=task.id)) - - if not resumed_ids: - return {"ok": False, "error": "no_work_items_to_resume"} - - self._cache_until = 0.0 - bg = asyncio.create_task(self._execute(parent_task_id, plan, tasks)) - self._active[parent_task_id] = bg - return {"ok": True, "resumed_work_item_projection_ids": resumed_ids} - - async def cancel(self, parent_task_id: str) -> dict[str, Any]: - async with self._lock: - bg = self._active.pop(parent_task_id, None) - if bg and not bg.done(): - bg.cancel() - - status = await self.scan() - wf = next((w for w in status.interrupted if w.parent_task_id == parent_task_id), None) - if not wf: - return {"ok": False, "error": "not_found"} - - engine = await self._facade.ensure_ready() - snapshot = await engine._load_company_runtime_snapshot(wf.parent_session_id) - if not snapshot: - return {"ok": False, "error": "snapshot_unavailable"} - - _, tasks = snapshot - from opc.core.models import TaskStatus - cancelled = 0 - for task in tasks: - if task.status not in (TaskStatus.DONE, TaskStatus.CANCELLED): - try: - await apply_task_status_transition( - engine.store, - task, - target_status_or_phase=TaskStatus.CANCELLED, - reason="cli_recovery_cancel", - release_claim=True, - ) - except Exception as exc: - logger.warning("Recovery cancel skipped %s: %s", task.id, exc) - continue - if task.status != TaskStatus.CANCELLED: - logger.warning("Recovery cancel preserved non-cancelled phase for %s", task.id) - continue - cancelled += 1 - - await self._clean_checkpoints(wf, tasks) - self._cache_until = 0.0 - return {"ok": True, "cancelled_count": cancelled} - - async def _execute(self, parent_task_id: str, plan: Any, tasks: list[Any]) -> None: - try: - engine = await self._facade.ensure_ready() - executor = engine.company_executor - if not executor: - raise RuntimeError("company_executor not available") - await executor.execute(plan, tasks) - except asyncio.CancelledError: - pass - except Exception as exc: - logger.warning("Recovery execution failed for %s: %s", parent_task_id, exc) - finally: - self._active.pop(parent_task_id, None) - self._cache_until = 0.0 - - async def _clean_checkpoints(self, wf: InterruptedCompanyRuntime, tasks: list[Any]) -> None: - engine = await self._facade.ensure_ready() - if not engine.store: - return - session_ids = {str(getattr(t, "session_id", "") or "").strip() for t in tasks} - session_ids.add(wf.parent_session_id) - session_ids.discard("") - try: - pending = await engine.store.get_pending_checkpoints(project_id=wf.project_id) - for cp in pending: - if str(cp.session_id or "").strip() in session_ids: - await engine.store.resolve_execution_checkpoint(cp.checkpoint_id, status="cancelled") - except Exception as exc: - logger.debug("Checkpoint cleanup error: %s", exc) diff --git a/opc/plugins/cli_board/tui/app.py b/opc/plugins/cli_board/tui/app.py index 4e8c75c..de50393 100644 --- a/opc/plugins/cli_board/tui/app.py +++ b/opc/plugins/cli_board/tui/app.py @@ -15,7 +15,6 @@ from opc.plugins.cli_board.state.store import BoardStateStore from opc.plugins.cli_board.tui.screens.help import HelpScreen from opc.plugins.cli_board.tui.screens.palette import CommandPaletteScreen, PaletteCommand from opc.plugins.cli_board.tui.screens.prompt import PromptField, PromptScreen -from opc.plugins.cli_board.tui.screens.recovery import RecoveryAction, RecoveryScreen from opc.plugins.cli_board.widgets.activity_pane import ActivityPaneWidget from opc.plugins.cli_board.widgets.context_tabs import ContextTabsWidget from opc.plugins.cli_board.widgets.detail_pane import DetailPaneWidget @@ -36,7 +35,6 @@ if TYPE_CHECKING: from opc.plugins.cli_board.services.engine_facade import EngineFacade from opc.plugins.cli_board.services.event_bridge import CliBoardEventBridge from opc.plugins.cli_board.services.reconcile import ReconcileLoop - from opc.plugins.cli_board.services.recovery import CliRecoveryManager class CliBoardApp(App[None]): @@ -74,7 +72,6 @@ class CliBoardApp(App[None]): Binding("x", "cancel_task", "Cancel"), Binding("t", "retry_selected", "Retry"), Binding("e", "checkpoint_feedback", "Feedback"), - Binding("w", "recovery_scan", "Recovery"), Binding("R", "rename_session", "Rename", show=False), Binding("D", "delete_session", "Delete", show=False), Binding("E", "switch_mode", "Mode", show=False), @@ -115,7 +112,6 @@ class CliBoardApp(App[None]): self.repository: BoardRepository | None = None self.actions: BoardActions | None = None self.event_bridge: CliBoardEventBridge | None = None - self.recovery_manager: CliRecoveryManager | None = None self.reconcile_loop: ReconcileLoop | None = None self.exec_mode = "task" self.company_profile = "corporate" @@ -143,13 +139,10 @@ class CliBoardApp(App[None]): from opc.plugins.cli_board.services.engine_facade import EngineFacade from opc.plugins.cli_board.services.event_bridge import CliBoardEventBridge - from opc.plugins.cli_board.services.recovery import CliRecoveryManager - self.facade = EngineFacade(project_id=self.project_id) self.repository = BoardRepository(self.facade, project_id=self.project_id) self.actions = BoardActions(self.facade, project_id=self.project_id) self.event_bridge = CliBoardEventBridge(self._handle_board_event) - self.recovery_manager = CliRecoveryManager(self.facade) def compose(self) -> ComposeResult: yield Header(show_clock=True) @@ -650,36 +643,6 @@ class CliBoardApp(App[None]): success_message=f"{label} checkpoint for {task.title}{suffix}.", ) - def action_recovery_scan(self) -> None: - if self._readonly_guard(): - return - self._action_recovery_scan() - - @work(group="modal", exclusive=True) - async def _action_recovery_scan(self) -> None: - if self.recovery_manager is None: - self.status_widget.set_message("Recovery unavailable.") - return - status = await self.recovery_manager.get_status() - result = await self.push_screen_wait(RecoveryScreen(status)) - if result is None: - return - if result.action == "resume": - self.status_widget.set_message(f"Resuming {result.parent_task_id}...") - outcome = await self.recovery_manager.resume(result.parent_task_id) - if outcome.get("ok"): - ids = outcome.get("resumed_work_item_projection_ids", []) - self.status_widget.set_message(f"Resumed {len(ids)} work item(s).") - else: - self.status_widget.set_message(f"Resume failed: {outcome.get('error', '?')}.") - elif result.action == "cancel": - outcome = await self.recovery_manager.cancel(result.parent_task_id) - if outcome.get("ok"): - self.status_widget.set_message(f"Cancelled {outcome.get('cancelled_count', 0)} task(s).") - else: - self.status_widget.set_message(f"Cancel failed: {outcome.get('error', '?')}.") - await self._refresh_snapshot(reason="recovery", silent=True) - def action_rename_session(self) -> None: if self._readonly_guard(): return @@ -1354,7 +1317,6 @@ class CliBoardApp(App[None]): PaletteCommand("view_focus", "Switch to Focus", "Zoom into the selected task.", "3"), PaletteCommand("view_pipeline", "Switch to Projection", "Show the read-only work-item projection for the selected company run.", "4"), PaletteCommand("view_org", "Switch to Organisation", "Show read-only org structure.", "5"), - PaletteCommand("recovery_scan", "Runtime Recovery", "Scan and resume interrupted company runtimes.", "w"), PaletteCommand("rename_session", "Rename Session", "Change the title of the selected task.", "R"), PaletteCommand("delete_session", "Delete Session", "Cancel and remove the selected task.", "D"), PaletteCommand("purge_cancelled", "Purge Cancelled Tasks", "Permanently delete all cancelled/failed tasks.", ""), @@ -1382,7 +1344,6 @@ class CliBoardApp(App[None]): "project_delete", "session_config", "org_add_role", - "recovery_scan", "rename_session", "delete_session", "purge_cancelled", diff --git a/opc/plugins/cli_board/tui/screens/help.py b/opc/plugins/cli_board/tui/screens/help.py index 3dd8895..42ce108 100644 --- a/opc/plugins/cli_board/tui/screens/help.py +++ b/opc/plugins/cli_board/tui/screens/help.py @@ -49,7 +49,7 @@ class HelpScreen(ModalScreen[None]): " s: reply in session m: move between columns\n" " a / d: approve / deny checkpoint\n" " e: checkpoint feedback (approve/deny with message)\n" - " c: done x: cancel t: retry w: runtime recovery\n" + " c: done x: cancel t: retry\n" "\n" "Session Management\n" " R: rename session D: delete session\n" diff --git a/opc/plugins/cli_board/tui/screens/recovery.py b/opc/plugins/cli_board/tui/screens/recovery.py deleted file mode 100644 index 2aa2bd3..0000000 --- a/opc/plugins/cli_board/tui/screens/recovery.py +++ /dev/null @@ -1,126 +0,0 @@ -"""Recovery modal screen for the CLI board.""" - -from __future__ import annotations - -from dataclasses import dataclass - -from textual.app import ComposeResult -from textual.containers import Horizontal, Vertical, VerticalScroll -from textual.screen import ModalScreen -from textual.widgets import Button, Label, Static - -from opc.plugins.cli_board.services.recovery import RecoveryStatus - - -@dataclass -class RecoveryAction: - action: str # "resume" | "cancel" | "dismiss" - parent_task_id: str = "" - - -class RecoveryScreen(ModalScreen[RecoveryAction | None]): - """Show interrupted company runtimes with resume/cancel options.""" - - DEFAULT_CSS = """ - RecoveryScreen { - align: center middle; - } - - .recovery-dialog { - width: 88; - max-width: 90%; - height: auto; - max-height: 80%; - border: solid $primary; - background: $surface; - padding: 1 2; - } - - .recovery-title { - text-style: bold; - margin-bottom: 1; - } - - .recovery-runtime { - margin-bottom: 1; - padding: 1; - border: round $secondary; - } - - .recovery-actions { - align-horizontal: right; - height: auto; - margin-top: 1; - } - - .recovery-empty { - color: $text-muted; - margin: 1; - } - """ - - BINDINGS = [("escape", "dismiss_screen", "Close")] - - def __init__(self, status: RecoveryStatus) -> None: - super().__init__() - self.status = status - - def compose(self) -> ComposeResult: - with Vertical(classes="recovery-dialog"): - yield Static("Interrupted Runtimes", classes="recovery-title") - - if not self.status.interrupted: - yield Static("No interrupted runtimes found.", classes="recovery-empty") - else: - with VerticalScroll(): - for wf in self.status.interrupted: - with Vertical(classes="recovery-runtime"): - # Runtime header - active = wf.parent_task_id in set(self.status.active_recoveries) - status_label = " (recovering...)" if active else "" - yield Label(f"{wf.title}{status_label}") - yield Static( - f" Profile: {wf.profile or 'unknown'} " - f"Interrupted: {wf.interrupted_at[:19] if wf.interrupted_at else '?'}" - ) - - # Work-item summary - done = sum(1 for s in wf.work_items if s.status == "done") - total = len(wf.work_items) - failed = sum(1 for s in wf.work_items if s.interrupted) - yield Static( - f" Work items: {done}/{total} done, {failed} interrupted" - ) - - if not active: - with Horizontal(): - yield Button( - "Resume", - id=f"resume-{wf.parent_task_id}", - variant="primary", - ) - yield Button( - "Cancel", - id=f"cancel-{wf.parent_task_id}", - variant="error", - ) - - with Horizontal(classes="recovery-actions"): - yield Button("Close", id="close-recovery") - - def on_button_pressed(self, event: Button.Pressed) -> None: - btn_id = event.button.id or "" - if btn_id == "close-recovery": - self.dismiss(None) - return - if btn_id.startswith("resume-"): - task_id = btn_id[len("resume-"):] - self.dismiss(RecoveryAction(action="resume", parent_task_id=task_id)) - return - if btn_id.startswith("cancel-"): - task_id = btn_id[len("cancel-"):] - self.dismiss(RecoveryAction(action="cancel", parent_task_id=task_id)) - return - - def action_dismiss_screen(self) -> None: - self.dismiss(None) diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js b/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js deleted file mode 100644 index fab544b..0000000 --- a/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js +++ /dev/null @@ -1,155 +0,0 @@ -import{g as ca,r as H3}from"./phaser-DFK5Ua9d.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var ug={exports:{}},Dc={};var _k;function F3(){if(_k)return Dc;_k=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,i,o){var a=null;if(o!==void 0&&(a=""+o),i.key!==void 0&&(a=""+i.key),"key"in i){o={};for(var c in i)c!=="key"&&(o[c]=i[c])}else o=i;return i=o.ref,{$$typeof:e,type:r,key:a,ref:i!==void 0?i:null,props:o}}return Dc.Fragment=t,Dc.jsx=n,Dc.jsxs=n,Dc}var kk;function V3(){return kk||(kk=1,ug.exports=F3()),ug.exports}var u=V3(),dg={exports:{}},St={};var Sk;function U3(){if(Sk)return St;Sk=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),a=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),g=Symbol.iterator;function x(G){return G===null||typeof G!="object"?null:(G=g&&G[g]||G["@@iterator"],typeof G=="function"?G:null)}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,S={};function b(G,J,P){this.props=G,this.context=J,this.refs=S,this.updater=P||v}b.prototype.isReactComponent={},b.prototype.setState=function(G,J){if(typeof G!="object"&&typeof G!="function"&&G!=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,G,J,"setState")},b.prototype.forceUpdate=function(G){this.updater.enqueueForceUpdate(this,G,"forceUpdate")};function w(){}w.prototype=b.prototype;function j(G,J,P){this.props=G,this.context=J,this.refs=S,this.updater=P||v}var N=j.prototype=new w;N.constructor=j,k(N,b.prototype),N.isPureReactComponent=!0;var O=Array.isArray;function R(){}var L={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function D(G,J,P){var K=P.ref;return{$$typeof:e,type:G,key:J,ref:K!==void 0?K:null,props:P}}function M(G,J){return D(G.type,J,G.props)}function A(G){return typeof G=="object"&&G!==null&&G.$$typeof===e}function $(G){var J={"=":"=0",":":"=2"};return"$"+G.replace(/[=:]/g,function(P){return J[P]})}var W=/\/+/g;function B(G,J){return typeof G=="object"&&G!==null&&G.key!=null?$(""+G.key):J.toString(36)}function V(G){switch(G.status){case"fulfilled":return G.value;case"rejected":throw G.reason;default:switch(typeof G.status=="string"?G.then(R,R):(G.status="pending",G.then(function(J){G.status==="pending"&&(G.status="fulfilled",G.value=J)},function(J){G.status==="pending"&&(G.status="rejected",G.reason=J)})),G.status){case"fulfilled":return G.value;case"rejected":throw G.reason}}throw G}function H(G,J,P,K,ee){var te=typeof G;(te==="undefined"||te==="boolean")&&(G=null);var ie=!1;if(G===null)ie=!0;else switch(te){case"bigint":case"string":case"number":ie=!0;break;case"object":switch(G.$$typeof){case e:case t:ie=!0;break;case h:return ie=G._init,H(ie(G._payload),J,P,K,ee)}}if(ie)return ee=ee(G),ie=K===""?"."+B(G,0):K,O(ee)?(P="",ie!=null&&(P=ie.replace(W,"$&/")+"/"),H(ee,J,P,"",function(oe){return oe})):ee!=null&&(A(ee)&&(ee=M(ee,P+(ee.key==null||G&&G.key===ee.key?"":(""+ee.key).replace(W,"$&/")+"/")+ie)),J.push(ee)),1;ie=0;var se=K===""?".":K+":";if(O(G))for(var de=0;de<G.length;de++)K=G[de],te=se+B(K,de),ie+=H(K,J,P,te,ee);else if(de=x(G),typeof de=="function")for(G=de.call(G),de=0;!(K=G.next()).done;)K=K.value,te=se+B(K,de++),ie+=H(K,J,P,te,ee);else if(te==="object"){if(typeof G.then=="function")return H(V(G),J,P,K,ee);throw J=String(G),Error("Objects are not valid as a React child (found: "+(J==="[object Object]"?"object with keys {"+Object.keys(G).join(", ")+"}":J)+"). If you meant to render a collection of children, use an array instead.")}return ie}function U(G,J,P){if(G==null)return G;var K=[],ee=0;return H(G,K,"","",function(te){return J.call(P,te,ee++)}),K}function Y(G){if(G._status===-1){var J=G._result;J=J(),J.then(function(P){(G._status===0||G._status===-1)&&(G._status=1,G._result=P)},function(P){(G._status===0||G._status===-1)&&(G._status=2,G._result=P)}),G._status===-1&&(G._status=0,G._result=J)}if(G._status===1)return G._result.default;throw G._result}var Q=typeof reportError=="function"?reportError:function(G){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var J=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof G=="object"&&G!==null&&typeof G.message=="string"?String(G.message):String(G),error:G});if(!window.dispatchEvent(J))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",G);return}console.error(G)},q={map:U,forEach:function(G,J,P){U(G,function(){J.apply(this,arguments)},P)},count:function(G){var J=0;return U(G,function(){J++}),J},toArray:function(G){return U(G,function(J){return J})||[]},only:function(G){if(!A(G))throw Error("React.Children.only expected to receive a single React element child.");return G}};return St.Activity=p,St.Children=q,St.Component=b,St.Fragment=n,St.Profiler=i,St.PureComponent=j,St.StrictMode=r,St.Suspense=d,St.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=L,St.__COMPILER_RUNTIME={__proto__:null,c:function(G){return L.H.useMemoCache(G)}},St.cache=function(G){return function(){return G.apply(null,arguments)}},St.cacheSignal=function(){return null},St.cloneElement=function(G,J,P){if(G==null)throw Error("The argument must be a React element, but you passed "+G+".");var K=k({},G.props),ee=G.key;if(J!=null)for(te in J.key!==void 0&&(ee=""+J.key),J)!I.call(J,te)||te==="key"||te==="__self"||te==="__source"||te==="ref"&&J.ref===void 0||(K[te]=J[te]);var te=arguments.length-2;if(te===1)K.children=P;else if(1<te){for(var ie=Array(te),se=0;se<te;se++)ie[se]=arguments[se+2];K.children=ie}return D(G.type,ee,K)},St.createContext=function(G){return G={$$typeof:a,_currentValue:G,_currentValue2:G,_threadCount:0,Provider:null,Consumer:null},G.Provider=G,G.Consumer={$$typeof:o,_context:G},G},St.createElement=function(G,J,P){var K,ee={},te=null;if(J!=null)for(K in J.key!==void 0&&(te=""+J.key),J)I.call(J,K)&&K!=="key"&&K!=="__self"&&K!=="__source"&&(ee[K]=J[K]);var ie=arguments.length-2;if(ie===1)ee.children=P;else if(1<ie){for(var se=Array(ie),de=0;de<ie;de++)se[de]=arguments[de+2];ee.children=se}if(G&&G.defaultProps)for(K in ie=G.defaultProps,ie)ee[K]===void 0&&(ee[K]=ie[K]);return D(G,te,ee)},St.createRef=function(){return{current:null}},St.forwardRef=function(G){return{$$typeof:c,render:G}},St.isValidElement=A,St.lazy=function(G){return{$$typeof:h,_payload:{_status:-1,_result:G},_init:Y}},St.memo=function(G,J){return{$$typeof:m,type:G,compare:J===void 0?null:J}},St.startTransition=function(G){var J=L.T,P={};L.T=P;try{var K=G(),ee=L.S;ee!==null&&ee(P,K),typeof K=="object"&&K!==null&&typeof K.then=="function"&&K.then(R,Q)}catch(te){Q(te)}finally{J!==null&&P.types!==null&&(J.types=P.types),L.T=J}},St.unstable_useCacheRefresh=function(){return L.H.useCacheRefresh()},St.use=function(G){return L.H.use(G)},St.useActionState=function(G,J,P){return L.H.useActionState(G,J,P)},St.useCallback=function(G,J){return L.H.useCallback(G,J)},St.useContext=function(G){return L.H.useContext(G)},St.useDebugValue=function(){},St.useDeferredValue=function(G,J){return L.H.useDeferredValue(G,J)},St.useEffect=function(G,J){return L.H.useEffect(G,J)},St.useEffectEvent=function(G){return L.H.useEffectEvent(G)},St.useId=function(){return L.H.useId()},St.useImperativeHandle=function(G,J,P){return L.H.useImperativeHandle(G,J,P)},St.useInsertionEffect=function(G,J){return L.H.useInsertionEffect(G,J)},St.useLayoutEffect=function(G,J){return L.H.useLayoutEffect(G,J)},St.useMemo=function(G,J){return L.H.useMemo(G,J)},St.useOptimistic=function(G,J){return L.H.useOptimistic(G,J)},St.useReducer=function(G,J,P){return L.H.useReducer(G,J,P)},St.useRef=function(G){return L.H.useRef(G)},St.useState=function(G){return L.H.useState(G)},St.useSyncExternalStore=function(G,J,P){return L.H.useSyncExternalStore(G,J,P)},St.useTransition=function(){return L.H.useTransition()},St.version="19.2.4",St}var wk;function zl(){return wk||(wk=1,dg.exports=U3()),dg.exports}var C=zl();const It=ca(C);var fg={exports:{}},Oc={},mg={exports:{}},pg={};var Ck;function q3(){return Ck||(Ck=1,(function(e){function t(H,U){var Y=H.length;H.push(U);e:for(;0<Y;){var Q=Y-1>>>1,q=H[Q];if(0<i(q,U))H[Q]=U,H[Y]=q,Y=Q;else break e}}function n(H){return H.length===0?null:H[0]}function r(H){if(H.length===0)return null;var U=H[0],Y=H.pop();if(Y!==U){H[0]=Y;e:for(var Q=0,q=H.length,G=q>>>1;Q<G;){var J=2*(Q+1)-1,P=H[J],K=J+1,ee=H[K];if(0>i(P,Y))K<q&&0>i(ee,P)?(H[Q]=ee,H[K]=Y,Q=K):(H[Q]=P,H[J]=Y,Q=J);else if(K<q&&0>i(ee,Y))H[Q]=ee,H[K]=Y,Q=K;else break e}}return U}function i(H,U){var Y=H.sortIndex-U.sortIndex;return Y!==0?Y:H.id-U.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,c=a.now();e.unstable_now=function(){return a.now()-c}}var d=[],m=[],h=1,p=null,g=3,x=!1,v=!1,k=!1,S=!1,b=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,j=typeof setImmediate<"u"?setImmediate:null;function N(H){for(var U=n(m);U!==null;){if(U.callback===null)r(m);else if(U.startTime<=H)r(m),U.sortIndex=U.expirationTime,t(d,U);else break;U=n(m)}}function O(H){if(k=!1,N(H),!v)if(n(d)!==null)v=!0,R||(R=!0,$());else{var U=n(m);U!==null&&V(O,U.startTime-H)}}var R=!1,L=-1,I=5,D=-1;function M(){return S?!0:!(e.unstable_now()-D<I)}function A(){if(S=!1,R){var H=e.unstable_now();D=H;var U=!0;try{e:{v=!1,k&&(k=!1,w(L),L=-1),x=!0;var Y=g;try{t:{for(N(H),p=n(d);p!==null&&!(p.expirationTime>H&&M());){var Q=p.callback;if(typeof Q=="function"){p.callback=null,g=p.priorityLevel;var q=Q(p.expirationTime<=H);if(H=e.unstable_now(),typeof q=="function"){p.callback=q,N(H),U=!0;break t}p===n(d)&&r(d),N(H)}else r(d);p=n(d)}if(p!==null)U=!0;else{var G=n(m);G!==null&&V(O,G.startTime-H),U=!1}}break e}finally{p=null,g=Y,x=!1}U=void 0}}finally{U?$():R=!1}}}var $;if(typeof j=="function")$=function(){j(A)};else if(typeof MessageChannel<"u"){var W=new MessageChannel,B=W.port2;W.port1.onmessage=A,$=function(){B.postMessage(null)}}else $=function(){b(A,0)};function V(H,U){L=b(function(){H(e.unstable_now())},U)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(H){H.callback=null},e.unstable_forceFrameRate=function(H){0>H||125<H?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):I=0<H?Math.floor(1e3/H):5},e.unstable_getCurrentPriorityLevel=function(){return g},e.unstable_next=function(H){switch(g){case 1:case 2:case 3:var U=3;break;default:U=g}var Y=g;g=U;try{return H()}finally{g=Y}},e.unstable_requestPaint=function(){S=!0},e.unstable_runWithPriority=function(H,U){switch(H){case 1:case 2:case 3:case 4:case 5:break;default:H=3}var Y=g;g=H;try{return U()}finally{g=Y}},e.unstable_scheduleCallback=function(H,U,Y){var Q=e.unstable_now();switch(typeof Y=="object"&&Y!==null?(Y=Y.delay,Y=typeof Y=="number"&&0<Y?Q+Y:Q):Y=Q,H){case 1:var q=-1;break;case 2:q=250;break;case 5:q=1073741823;break;case 4:q=1e4;break;default:q=5e3}return q=Y+q,H={id:h++,callback:U,priorityLevel:H,startTime:Y,expirationTime:q,sortIndex:-1},Y>Q?(H.sortIndex=Y,t(m,H),n(d)===null&&H===n(m)&&(k?(w(L),L=-1):k=!0,V(O,Y-Q))):(H.sortIndex=q,t(d,H),v||x||(v=!0,R||(R=!0,$()))),H},e.unstable_shouldYield=M,e.unstable_wrapCallback=function(H){var U=g;return function(){var Y=g;g=U;try{return H.apply(this,arguments)}finally{g=Y}}}})(pg)),pg}var jk;function G3(){return jk||(jk=1,mg.exports=q3()),mg.exports}var hg={exports:{}},Mr={};var Ek;function W3(){if(Ek)return Mr;Ek=1;var e=zl();function t(d){var m="https://react.dev/errors/"+d;if(1<arguments.length){m+="?args[]="+encodeURIComponent(arguments[1]);for(var h=2;h<arguments.length;h++)m+="&args[]="+encodeURIComponent(arguments[h])}return"Minified React error #"+d+"; visit "+m+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function n(){}var r={d:{f:n,r:function(){throw Error(t(522))},D:n,C:n,L:n,m:n,X:n,S:n,M:n},p:0,findDOMNode:null},i=Symbol.for("react.portal");function o(d,m,h){var p=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:i,key:p==null?null:""+p,children:d,containerInfo:m,implementation:h}}var a=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(d,m){if(d==="font")return"";if(typeof m=="string")return m==="use-credentials"?m:""}return Mr.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=r,Mr.createPortal=function(d,m){var h=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!m||m.nodeType!==1&&m.nodeType!==9&&m.nodeType!==11)throw Error(t(299));return o(d,m,null,h)},Mr.flushSync=function(d){var m=a.T,h=r.p;try{if(a.T=null,r.p=2,d)return d()}finally{a.T=m,r.p=h,r.d.f()}},Mr.preconnect=function(d,m){typeof d=="string"&&(m?(m=m.crossOrigin,m=typeof m=="string"?m==="use-credentials"?m:"":void 0):m=null,r.d.C(d,m))},Mr.prefetchDNS=function(d){typeof d=="string"&&r.d.D(d)},Mr.preinit=function(d,m){if(typeof d=="string"&&m&&typeof m.as=="string"){var h=m.as,p=c(h,m.crossOrigin),g=typeof m.integrity=="string"?m.integrity:void 0,x=typeof m.fetchPriority=="string"?m.fetchPriority:void 0;h==="style"?r.d.S(d,typeof m.precedence=="string"?m.precedence:void 0,{crossOrigin:p,integrity:g,fetchPriority:x}):h==="script"&&r.d.X(d,{crossOrigin:p,integrity:g,fetchPriority:x,nonce:typeof m.nonce=="string"?m.nonce:void 0})}},Mr.preinitModule=function(d,m){if(typeof d=="string")if(typeof m=="object"&&m!==null){if(m.as==null||m.as==="script"){var h=c(m.as,m.crossOrigin);r.d.M(d,{crossOrigin:h,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0})}}else m==null&&r.d.M(d)},Mr.preload=function(d,m){if(typeof d=="string"&&typeof m=="object"&&m!==null&&typeof m.as=="string"){var h=m.as,p=c(h,m.crossOrigin);r.d.L(d,h,{crossOrigin:p,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0,type:typeof m.type=="string"?m.type:void 0,fetchPriority:typeof m.fetchPriority=="string"?m.fetchPriority:void 0,referrerPolicy:typeof m.referrerPolicy=="string"?m.referrerPolicy:void 0,imageSrcSet:typeof m.imageSrcSet=="string"?m.imageSrcSet:void 0,imageSizes:typeof m.imageSizes=="string"?m.imageSizes:void 0,media:typeof m.media=="string"?m.media:void 0})}},Mr.preloadModule=function(d,m){if(typeof d=="string")if(m){var h=c(m.as,m.crossOrigin);r.d.m(d,{as:typeof m.as=="string"&&m.as!=="script"?m.as:void 0,crossOrigin:h,integrity:typeof m.integrity=="string"?m.integrity:void 0})}else r.d.m(d)},Mr.requestFormReset=function(d){r.d.r(d)},Mr.unstable_batchedUpdates=function(d,m){return d(m)},Mr.useFormState=function(d,m,h){return a.H.useFormState(d,m,h)},Mr.useFormStatus=function(){return a.H.useHostTransitionStatus()},Mr.version="19.2.4",Mr}var Nk;function Vj(){if(Nk)return hg.exports;Nk=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),hg.exports=W3(),hg.exports}var Ik;function Y3(){if(Ik)return Oc;Ik=1;var e=G3(),t=zl(),n=Vj();function r(s){var l="https://react.dev/errors/"+s;if(1<arguments.length){l+="?args[]="+encodeURIComponent(arguments[1]);for(var f=2;f<arguments.length;f++)l+="&args[]="+encodeURIComponent(arguments[f])}return"Minified React error #"+s+"; visit "+l+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function i(s){return!(!s||s.nodeType!==1&&s.nodeType!==9&&s.nodeType!==11)}function o(s){var l=s,f=s;if(s.alternate)for(;l.return;)l=l.return;else{s=l;do l=s,(l.flags&4098)!==0&&(f=l.return),s=l.return;while(s)}return l.tag===3?f:null}function a(s){if(s.tag===13){var l=s.memoizedState;if(l===null&&(s=s.alternate,s!==null&&(l=s.memoizedState)),l!==null)return l.dehydrated}return null}function c(s){if(s.tag===31){var l=s.memoizedState;if(l===null&&(s=s.alternate,s!==null&&(l=s.memoizedState)),l!==null)return l.dehydrated}return null}function d(s){if(o(s)!==s)throw Error(r(188))}function m(s){var l=s.alternate;if(!l){if(l=o(s),l===null)throw Error(r(188));return l!==s?null:s}for(var f=s,y=l;;){var _=f.return;if(_===null)break;var E=_.alternate;if(E===null){if(y=_.return,y!==null){f=y;continue}break}if(_.child===E.child){for(E=_.child;E;){if(E===f)return d(_),s;if(E===y)return d(_),l;E=E.sibling}throw Error(r(188))}if(f.return!==y.return)f=_,y=E;else{for(var F=!1,X=_.child;X;){if(X===f){F=!0,f=_,y=E;break}if(X===y){F=!0,y=_,f=E;break}X=X.sibling}if(!F){for(X=E.child;X;){if(X===f){F=!0,f=E,y=_;break}if(X===y){F=!0,y=E,f=_;break}X=X.sibling}if(!F)throw Error(r(189))}}if(f.alternate!==y)throw Error(r(190))}if(f.tag!==3)throw Error(r(188));return f.stateNode.current===f?s:l}function h(s){var l=s.tag;if(l===5||l===26||l===27||l===6)return s;for(s=s.child;s!==null;){if(l=h(s),l!==null)return l;s=s.sibling}return null}var p=Object.assign,g=Symbol.for("react.element"),x=Symbol.for("react.transitional.element"),v=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),S=Symbol.for("react.strict_mode"),b=Symbol.for("react.profiler"),w=Symbol.for("react.consumer"),j=Symbol.for("react.context"),N=Symbol.for("react.forward_ref"),O=Symbol.for("react.suspense"),R=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),I=Symbol.for("react.lazy"),D=Symbol.for("react.activity"),M=Symbol.for("react.memo_cache_sentinel"),A=Symbol.iterator;function $(s){return s===null||typeof s!="object"?null:(s=A&&s[A]||s["@@iterator"],typeof s=="function"?s:null)}var W=Symbol.for("react.client.reference");function B(s){if(s==null)return null;if(typeof s=="function")return s.$$typeof===W?null:s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case k:return"Fragment";case b:return"Profiler";case S:return"StrictMode";case O:return"Suspense";case R:return"SuspenseList";case D:return"Activity"}if(typeof s=="object")switch(s.$$typeof){case v:return"Portal";case j:return s.displayName||"Context";case w:return(s._context.displayName||"Context")+".Consumer";case N:var l=s.render;return s=s.displayName,s||(s=l.displayName||l.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case L:return l=s.displayName||null,l!==null?l:B(s.type)||"Memo";case I:l=s._payload,s=s._init;try{return B(s(l))}catch{}}return null}var V=Array.isArray,H=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,U=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Y={pending:!1,data:null,method:null,action:null},Q=[],q=-1;function G(s){return{current:s}}function J(s){0>q||(s.current=Q[q],Q[q]=null,q--)}function P(s,l){q++,Q[q]=s.current,s.current=l}var K=G(null),ee=G(null),te=G(null),ie=G(null);function se(s,l){switch(P(te,l),P(ee,s),P(K,null),l.nodeType){case 9:case 11:s=(s=l.documentElement)&&(s=s.namespaceURI)?U_(s):0;break;default:if(s=l.tagName,l=l.namespaceURI)l=U_(l),s=q_(l,s);else switch(s){case"svg":s=1;break;case"math":s=2;break;default:s=0}}J(K),P(K,s)}function de(){J(K),J(ee),J(te)}function oe(s){s.memoizedState!==null&&P(ie,s);var l=K.current,f=q_(l,s.type);l!==f&&(P(ee,s),P(K,f))}function Ne(s){ee.current===s&&(J(K),J(ee)),ie.current===s&&(J(ie),Tc._currentValue=Y)}var Ee,Ie;function Be(s){if(Ee===void 0)try{throw Error()}catch(f){var l=f.stack.trim().match(/\n( *(at )?)/);Ee=l&&l[1]||"",Ie=-1<f.stack.indexOf(` - at`)?" (<anonymous>)":-1<f.stack.indexOf("@")?"@unknown:0:0":""}return` -`+Ee+s+Ie}var Ge=!1;function Ue(s,l){if(!s||Ge)return"";Ge=!0;var f=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var y={DetermineComponentFrameRoot:function(){try{if(l){var Te=function(){throw Error()};if(Object.defineProperty(Te.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Te,[])}catch(_e){var xe=_e}Reflect.construct(s,[],Te)}else{try{Te.call()}catch(_e){xe=_e}s.call(Te.prototype)}}else{try{throw Error()}catch(_e){xe=_e}(Te=s())&&typeof Te.catch=="function"&&Te.catch(function(){})}}catch(_e){if(_e&&xe&&typeof _e.stack=="string")return[_e.stack,xe.stack]}return[null,null]}};y.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var _=Object.getOwnPropertyDescriptor(y.DetermineComponentFrameRoot,"name");_&&_.configurable&&Object.defineProperty(y.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var E=y.DetermineComponentFrameRoot(),F=E[0],X=E[1];if(F&&X){var re=F.split(` -`),ye=X.split(` -`);for(_=y=0;y<re.length&&!re[y].includes("DetermineComponentFrameRoot");)y++;for(;_<ye.length&&!ye[_].includes("DetermineComponentFrameRoot");)_++;if(y===re.length||_===ye.length)for(y=re.length-1,_=ye.length-1;1<=y&&0<=_&&re[y]!==ye[_];)_--;for(;1<=y&&0<=_;y--,_--)if(re[y]!==ye[_]){if(y!==1||_!==1)do if(y--,_--,0>_||re[y]!==ye[_]){var we=` -`+re[y].replace(" at new "," at ");return s.displayName&&we.includes("<anonymous>")&&(we=we.replace("<anonymous>",s.displayName)),we}while(1<=y&&0<=_);break}}}finally{Ge=!1,Error.prepareStackTrace=f}return(f=s?s.displayName||s.name:"")?Be(f):""}function at(s,l){switch(s.tag){case 26:case 27:case 5:return Be(s.type);case 16:return Be("Lazy");case 13:return s.child!==l&&l!==null?Be("Suspense Fallback"):Be("Suspense");case 19:return Be("SuspenseList");case 0:case 15:return Ue(s.type,!1);case 11:return Ue(s.type.render,!1);case 1:return Ue(s.type,!0);case 31:return Be("Activity");default:return""}}function Pt(s){try{var l="",f=null;do l+=at(s,f),f=s,s=s.return;while(s);return l}catch(y){return` -Error generating stack: `+y.message+` -`+y.stack}}var wt=Object.prototype.hasOwnProperty,Ct=e.unstable_scheduleCallback,pe=e.unstable_cancelCallback,$e=e.unstable_shouldYield,et=e.unstable_requestPaint,tt=e.unstable_now,pt=e.unstable_getCurrentPriorityLevel,me=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Me=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,He=e.unstable_IdlePriority,jt=e.log,an=e.unstable_setDisableYieldValue,ke=null,Oe=null;function We(s){if(typeof jt=="function"&&an(s),Oe&&typeof Oe.setStrictMode=="function")try{Oe.setStrictMode(ke,s)}catch{}}var Ze=Math.clz32?Math.clz32:Yt,qe=Math.log,ut=Math.LN2;function Yt(s){return s>>>=0,s===0?32:31-(qe(s)/ut|0)|0}var Nn=256,ln=262144,Ln=4194304;function lt(s){var l=s&42;if(l!==0)return l;switch(s&-s){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 s&261888;case 262144:case 524288:case 1048576:case 2097152:return s&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return s&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return s}}function In(s,l,f){var y=s.pendingLanes;if(y===0)return 0;var _=0,E=s.suspendedLanes,F=s.pingedLanes;s=s.warmLanes;var X=y&134217727;return X!==0?(y=X&~E,y!==0?_=lt(y):(F&=X,F!==0?_=lt(F):f||(f=X&~s,f!==0&&(_=lt(f))))):(X=y&~E,X!==0?_=lt(X):F!==0?_=lt(F):f||(f=y&~s,f!==0&&(_=lt(f)))),_===0?0:l!==0&&l!==_&&(l&E)===0&&(E=_&-_,f=l&-l,E>=f||E===32&&(f&4194048)!==0)?l:_}function Et(s,l){return(s.pendingLanes&~(s.suspendedLanes&~s.pingedLanes)&l)===0}function Dt(s,l){switch(s){case 1:case 2:case 4:case 8:case 64:return l+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 l+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 Ye(){var s=Ln;return Ln<<=1,(Ln&62914560)===0&&(Ln=4194304),s}function nt(s){for(var l=[],f=0;31>f;f++)l.push(s);return l}function Qt(s,l){s.pendingLanes|=l,l!==268435456&&(s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0)}function _n(s,l,f,y,_,E){var F=s.pendingLanes;s.pendingLanes=f,s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0,s.expiredLanes&=f,s.entangledLanes&=f,s.errorRecoveryDisabledLanes&=f,s.shellSuspendCounter=0;var X=s.entanglements,re=s.expirationTimes,ye=s.hiddenUpdates;for(f=F&~f;0<f;){var we=31-Ze(f),Te=1<<we;X[we]=0,re[we]=-1;var xe=ye[we];if(xe!==null)for(ye[we]=null,we=0;we<xe.length;we++){var _e=xe[we];_e!==null&&(_e.lane&=-536870913)}f&=~Te}y!==0&&Tt(s,y,0),E!==0&&_===0&&s.tag!==0&&(s.suspendedLanes|=E&~(F&~l))}function Tt(s,l,f){s.pendingLanes|=l,s.suspendedLanes&=~l;var y=31-Ze(l);s.entangledLanes|=l,s.entanglements[y]=s.entanglements[y]|1073741824|f&261930}function er(s,l){var f=s.entangledLanes|=l;for(s=s.entanglements;f;){var y=31-Ze(f),_=1<<y;_&l|s[y]&l&&(s[y]|=l),f&=~_}}function Tn(s,l){var f=l&-l;return f=(f&42)!==0?1:ht(f),(f&(s.suspendedLanes|l))!==0?0:f}function ht(s){switch(s){case 2:s=1;break;case 8:s=4;break;case 32:s=16;break;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:case 4194304:case 8388608:case 16777216:case 33554432:s=128;break;case 268435456:s=134217728;break;default:s=0}return s}function tr(s){return s&=-s,2<s?8<s?(s&134217727)!==0?32:268435456:8:2}function mn(){var s=U.p;return s!==0?s:(s=window.event,s===void 0?32:pk(s.type))}function cn(s,l){var f=U.p;try{return U.p=s,l()}finally{U.p=f}}var Fn=Math.random().toString(36).slice(2),Jt="__reactFiber$"+Fn,Vt="__reactProps$"+Fn,Vn="__reactContainer$"+Fn,Un="__reactEvents$"+Fn,Re="__reactListeners$"+Fn,bt="__reactHandles$"+Fn,Cn="__reactResources$"+Fn,vr="__reactMarker$"+Fn;function Mn(s){delete s[Jt],delete s[Vt],delete s[Un],delete s[Re],delete s[bt]}function _t(s){var l=s[Jt];if(l)return l;for(var f=s.parentNode;f;){if(l=f[Vn]||f[Jt]){if(f=l.alternate,l.child!==null||f!==null&&f.child!==null)for(s=Q_(s);s!==null;){if(f=s[Jt])return f;s=Q_(s)}return l}s=f,f=s.parentNode}return null}function wr(s){if(s=s[Jt]||s[Vn]){var l=s.tag;if(l===5||l===6||l===13||l===31||l===26||l===27||l===3)return s}return null}function fr(s){var l=s.tag;if(l===5||l===26||l===27||l===6)return s.stateNode;throw Error(r(33))}function Xt(s){var l=s[Cn];return l||(l=s[Cn]={hoistableStyles:new Map,hoistableScripts:new Map}),l}function Ut(s){s[vr]=!0}var hn=new Set,qn={};function gt(s,l){Gn(s,l),Gn(s+"Capture",l)}function Gn(s,l){for(qn[s]=l,s=0;s<l.length;s++)hn.add(l[s])}var mr=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Rn={},Je={};function xn(s){return wt.call(Je,s)?!0:wt.call(Rn,s)?!1:mr.test(s)?Je[s]=!0:(Rn[s]=!0,!1)}function Kt(s,l,f){if(xn(l))if(f===null)s.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":s.removeAttribute(l);return;case"boolean":var y=l.toLowerCase().slice(0,5);if(y!=="data-"&&y!=="aria-"){s.removeAttribute(l);return}}s.setAttribute(l,""+f)}}function kt(s,l,f){if(f===null)s.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(l);return}s.setAttribute(l,""+f)}}function Wn(s,l,f,y){if(y===null)s.removeAttribute(f);else{switch(typeof y){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(f);return}s.setAttributeNS(l,f,""+y)}}function gn(s){switch(typeof s){case"bigint":case"boolean":case"number":case"string":case"undefined":return s;case"object":return s;default:return""}}function nr(s){var l=s.type;return(s=s.nodeName)&&s.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function ds(s,l,f){var y=Object.getOwnPropertyDescriptor(s.constructor.prototype,l);if(!s.hasOwnProperty(l)&&typeof y<"u"&&typeof y.get=="function"&&typeof y.set=="function"){var _=y.get,E=y.set;return Object.defineProperty(s,l,{configurable:!0,get:function(){return _.call(this)},set:function(F){f=""+F,E.call(this,F)}}),Object.defineProperty(s,l,{enumerable:y.enumerable}),{getValue:function(){return f},setValue:function(F){f=""+F},stopTracking:function(){s._valueTracker=null,delete s[l]}}}}function pr(s){if(!s._valueTracker){var l=nr(s)?"checked":"value";s._valueTracker=ds(s,l,""+s[l])}}function rr(s){if(!s)return!1;var l=s._valueTracker;if(!l)return!0;var f=l.getValue(),y="";return s&&(y=nr(s)?s.checked?"true":"false":s.value),s=y,s!==f?(l.setValue(s),!0):!1}function ue(s){if(s=s||(typeof document<"u"?document:void 0),typeof s>"u")return null;try{return s.activeElement||s.body}catch{return s.body}}var Se=/[\n"\\]/g;function Pe(s){return s.replace(Se,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function ae(s,l,f,y,_,E,F,X){s.name="",F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?s.type=F:s.removeAttribute("type"),l!=null?F==="number"?(l===0&&s.value===""||s.value!=l)&&(s.value=""+gn(l)):s.value!==""+gn(l)&&(s.value=""+gn(l)):F!=="submit"&&F!=="reset"||s.removeAttribute("value"),l!=null?Ae(s,F,gn(l)):f!=null?Ae(s,F,gn(f)):y!=null&&s.removeAttribute("value"),_==null&&E!=null&&(s.defaultChecked=!!E),_!=null&&(s.checked=_&&typeof _!="function"&&typeof _!="symbol"),X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"?s.name=""+gn(X):s.removeAttribute("name")}function ve(s,l,f,y,_,E,F,X){if(E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"&&(s.type=E),l!=null||f!=null){if(!(E!=="submit"&&E!=="reset"||l!=null)){pr(s);return}f=f!=null?""+gn(f):"",l=l!=null?""+gn(l):f,X||l===s.value||(s.value=l),s.defaultValue=l}y=y??_,y=typeof y!="function"&&typeof y!="symbol"&&!!y,s.checked=X?s.checked:!!y,s.defaultChecked=!!y,F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"&&(s.name=F),pr(s)}function Ae(s,l,f){l==="number"&&ue(s.ownerDocument)===s||s.defaultValue===""+f||(s.defaultValue=""+f)}function Le(s,l,f,y){if(s=s.options,l){l={};for(var _=0;_<f.length;_++)l["$"+f[_]]=!0;for(f=0;f<s.length;f++)_=l.hasOwnProperty("$"+s[f].value),s[f].selected!==_&&(s[f].selected=_),_&&y&&(s[f].defaultSelected=!0)}else{for(f=""+gn(f),l=null,_=0;_<s.length;_++){if(s[_].value===f){s[_].selected=!0,y&&(s[_].defaultSelected=!0);return}l!==null||s[_].disabled||(l=s[_])}l!==null&&(l.selected=!0)}}function vt(s,l,f){if(l!=null&&(l=""+gn(l),l!==s.value&&(s.value=l),f==null)){s.defaultValue!==l&&(s.defaultValue=l);return}s.defaultValue=f!=null?""+gn(f):""}function ct(s,l,f,y){if(l==null){if(y!=null){if(f!=null)throw Error(r(92));if(V(y)){if(1<y.length)throw Error(r(93));y=y[0]}f=y}f==null&&(f=""),l=f}f=gn(l),s.defaultValue=f,y=s.textContent,y===f&&y!==""&&y!==null&&(s.value=y),pr(s)}function dt(s,l){if(l){var f=s.firstChild;if(f&&f===s.lastChild&&f.nodeType===3){f.nodeValue=l;return}}s.textContent=l}var un=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function zn(s,l,f){var y=l.indexOf("--")===0;f==null||typeof f=="boolean"||f===""?y?s.setProperty(l,""):l==="float"?s.cssFloat="":s[l]="":y?s.setProperty(l,f):typeof f!="number"||f===0||un.has(l)?l==="float"?s.cssFloat=f:s[l]=(""+f).trim():s[l]=f+"px"}function qt(s,l,f){if(l!=null&&typeof l!="object")throw Error(r(62));if(s=s.style,f!=null){for(var y in f)!f.hasOwnProperty(y)||l!=null&&l.hasOwnProperty(y)||(y.indexOf("--")===0?s.setProperty(y,""):y==="float"?s.cssFloat="":s[y]="");for(var _ in l)y=l[_],l.hasOwnProperty(_)&&f[_]!==y&&zn(s,_,y)}else for(var E in l)l.hasOwnProperty(E)&&zn(s,E,l[E])}function Rt(s){if(s.indexOf("-")===-1)return!1;switch(s){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var en=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),sn=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Vr(s){return sn.test(""+s)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":s}function Pr(){}var Ul=null;function ql(s){return s=s.target||s.srcElement||window,s.correspondingUseElement&&(s=s.correspondingUseElement),s.nodeType===3?s.parentNode:s}var fs=null,Hs=null;function Zu(s){var l=wr(s);if(l&&(s=l.stateNode)){var f=s[Vt]||null;e:switch(s=l.stateNode,l.type){case"input":if(ae(s,f.value,f.defaultValue,f.defaultValue,f.checked,f.defaultChecked,f.type,f.name),l=f.name,f.type==="radio"&&l!=null){for(f=s;f.parentNode;)f=f.parentNode;for(f=f.querySelectorAll('input[name="'+Pe(""+l)+'"][type="radio"]'),l=0;l<f.length;l++){var y=f[l];if(y!==s&&y.form===s.form){var _=y[Vt]||null;if(!_)throw Error(r(90));ae(y,_.value,_.defaultValue,_.defaultValue,_.checked,_.defaultChecked,_.type,_.name)}}for(l=0;l<f.length;l++)y=f[l],y.form===s.form&&rr(y)}break e;case"textarea":vt(s,f.value,f.defaultValue);break e;case"select":l=f.value,l!=null&&Le(s,!!f.multiple,l,!1)}}}var da=!1;function Ri(s,l,f){if(da)return s(l,f);da=!0;try{var y=s(l);return y}finally{if(da=!1,(fs!==null||Hs!==null)&&(Od(),fs&&(l=fs,s=Hs,Hs=fs=null,Zu(l),s)))for(l=0;l<s.length;l++)Zu(s[l])}}function Wi(s,l){var f=s.stateNode;if(f===null)return null;var y=f[Vt]||null;if(y===null)return null;f=y[l];e:switch(l){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(y=!y.disabled)||(s=s.type,y=!(s==="button"||s==="input"||s==="select"||s==="textarea")),s=!y;break e;default:s=!1}if(s)return null;if(f&&typeof f!="function")throw Error(r(231,l,typeof f));return f}var Ai=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Gl=!1;if(Ai)try{var ms={};Object.defineProperty(ms,"passive",{get:function(){Gl=!0}}),window.addEventListener("test",ms,ms),window.removeEventListener("test",ms,ms)}catch{Gl=!1}var gi=null,fa=null,No=null;function Wl(){if(No)return No;var s,l=fa,f=l.length,y,_="value"in gi?gi.value:gi.textContent,E=_.length;for(s=0;s<f&&l[s]===_[s];s++);var F=f-s;for(y=1;y<=F&&l[f-y]===_[E-y];y++);return No=_.slice(s,1<y?1-y:void 0)}function ma(s){var l=s.keyCode;return"charCode"in s?(s=s.charCode,s===0&&l===13&&(s=13)):s=l,s===10&&(s=13),32<=s||s===13?s:0}function hr(){return!0}function Qu(){return!1}function Cr(s){function l(f,y,_,E,F){this._reactName=f,this._targetInst=_,this.type=y,this.nativeEvent=E,this.target=F,this.currentTarget=null;for(var X in s)s.hasOwnProperty(X)&&(f=s[X],this[X]=f?f(E):E[X]);return this.isDefaultPrevented=(E.defaultPrevented!=null?E.defaultPrevented:E.returnValue===!1)?hr:Qu,this.isPropagationStopped=Qu,this}return p(l.prototype,{preventDefault:function(){this.defaultPrevented=!0;var f=this.nativeEvent;f&&(f.preventDefault?f.preventDefault():typeof f.returnValue!="unknown"&&(f.returnValue=!1),this.isDefaultPrevented=hr)},stopPropagation:function(){var f=this.nativeEvent;f&&(f.stopPropagation?f.stopPropagation():typeof f.cancelBubble!="unknown"&&(f.cancelBubble=!0),this.isPropagationStopped=hr)},persist:function(){},isPersistent:hr}),l}var ps={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(s){return s.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pa=Cr(ps),Io=p({},ps,{view:0,detail:0}),Yl=Cr(Io),Xl,Kl,To,hs=p({},Io,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Ot,button:0,buttons:0,relatedTarget:function(s){return s.relatedTarget===void 0?s.fromElement===s.srcElement?s.toElement:s.fromElement:s.relatedTarget},movementX:function(s){return"movementX"in s?s.movementX:(s!==To&&(To&&s.type==="mousemove"?(Xl=s.screenX-To.screenX,Kl=s.screenY-To.screenY):Kl=Xl=0,To=s),Xl)},movementY:function(s){return"movementY"in s?s.movementY:Kl}}),Ju=Cr(hs),pp=p({},hs,{dataTransfer:0}),Fs=Cr(pp),hp=p({},Io,{relatedTarget:0}),Z=Cr(hp),z=p({},ps,{animationName:0,elapsedTime:0,pseudoElement:0}),ne=Cr(z),le=p({},ps,{clipboardData:function(s){return"clipboardData"in s?s.clipboardData:window.clipboardData}}),he=Cr(le),Ce=p({},ps,{data:0}),Xe=Cr(Ce),Ve={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Lt={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},on={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function zt(s){var l=this.nativeEvent;return l.getModifierState?l.getModifierState(s):(s=on[s])?!!l[s]:!1}function Ot(){return zt}var Bt=p({},Io,{key:function(s){if(s.key){var l=Ve[s.key]||s.key;if(l!=="Unidentified")return l}return s.type==="keypress"?(s=ma(s),s===13?"Enter":String.fromCharCode(s)):s.type==="keydown"||s.type==="keyup"?Lt[s.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Ot,charCode:function(s){return s.type==="keypress"?ma(s):0},keyCode:function(s){return s.type==="keydown"||s.type==="keyup"?s.keyCode:0},which:function(s){return s.type==="keypress"?ma(s):s.type==="keydown"||s.type==="keyup"?s.keyCode:0}}),Jr=Cr(Bt),Ar=p({},hs,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Ro=Cr(Ar),Vs=p({},Io,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Ot}),Mi=Cr(Vs),gr=p({},ps,{propertyName:0,elapsedTime:0,pseudoElement:0}),ha=Cr(gr),sA=p({},hs,{deltaX:function(s){return"deltaX"in s?s.deltaX:"wheelDeltaX"in s?-s.wheelDeltaX:0},deltaY:function(s){return"deltaY"in s?s.deltaY:"wheelDeltaY"in s?-s.wheelDeltaY:"wheelDelta"in s?-s.wheelDelta:0},deltaZ:0,deltaMode:0}),oA=Cr(sA),aA=p({},ps,{newState:0,oldState:0}),lA=Cr(aA),cA=[9,13,27,32],gp=Ai&&"CompositionEvent"in window,Zl=null;Ai&&"documentMode"in document&&(Zl=document.documentMode);var uA=Ai&&"TextEvent"in window&&!Zl,K0=Ai&&(!gp||Zl&&8<Zl&&11>=Zl),Z0=" ",Q0=!1;function J0(s,l){switch(s){case"keyup":return cA.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function eb(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var ga=!1;function dA(s,l){switch(s){case"compositionend":return eb(l);case"keypress":return l.which!==32?null:(Q0=!0,Z0);case"textInput":return s=l.data,s===Z0&&Q0?null:s;default:return null}}function fA(s,l){if(ga)return s==="compositionend"||!gp&&J0(s,l)?(s=Wl(),No=fa=gi=null,ga=!1,s):null;switch(s){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1<l.char.length)return l.char;if(l.which)return String.fromCharCode(l.which)}return null;case"compositionend":return K0&&l.locale!=="ko"?null:l.data;default:return null}}var mA={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function tb(s){var l=s&&s.nodeName&&s.nodeName.toLowerCase();return l==="input"?!!mA[s.type]:l==="textarea"}function nb(s,l,f,y){fs?Hs?Hs.push(y):Hs=[y]:fs=y,l=Fd(l,"onChange"),0<l.length&&(f=new pa("onChange","change",null,f,y),s.push({event:f,listeners:l}))}var Ql=null,Jl=null;function pA(s){P_(s,0)}function ed(s){var l=fr(s);if(rr(l))return s}function rb(s,l){if(s==="change")return l}var ib=!1;if(Ai){var yp;if(Ai){var xp="oninput"in document;if(!xp){var sb=document.createElement("div");sb.setAttribute("oninput","return;"),xp=typeof sb.oninput=="function"}yp=xp}else yp=!1;ib=yp&&(!document.documentMode||9<document.documentMode)}function ob(){Ql&&(Ql.detachEvent("onpropertychange",ab),Jl=Ql=null)}function ab(s){if(s.propertyName==="value"&&ed(Jl)){var l=[];nb(l,Jl,s,ql(s)),Ri(pA,l)}}function hA(s,l,f){s==="focusin"?(ob(),Ql=l,Jl=f,Ql.attachEvent("onpropertychange",ab)):s==="focusout"&&ob()}function gA(s){if(s==="selectionchange"||s==="keyup"||s==="keydown")return ed(Jl)}function yA(s,l){if(s==="click")return ed(l)}function xA(s,l){if(s==="input"||s==="change")return ed(l)}function vA(s,l){return s===l&&(s!==0||1/s===1/l)||s!==s&&l!==l}var ei=typeof Object.is=="function"?Object.is:vA;function ec(s,l){if(ei(s,l))return!0;if(typeof s!="object"||s===null||typeof l!="object"||l===null)return!1;var f=Object.keys(s),y=Object.keys(l);if(f.length!==y.length)return!1;for(y=0;y<f.length;y++){var _=f[y];if(!wt.call(l,_)||!ei(s[_],l[_]))return!1}return!0}function lb(s){for(;s&&s.firstChild;)s=s.firstChild;return s}function cb(s,l){var f=lb(s);s=0;for(var y;f;){if(f.nodeType===3){if(y=s+f.textContent.length,s<=l&&y>=l)return{node:f,offset:l-s};s=y}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=lb(f)}}function ub(s,l){return s&&l?s===l?!0:s&&s.nodeType===3?!1:l&&l.nodeType===3?ub(s,l.parentNode):"contains"in s?s.contains(l):s.compareDocumentPosition?!!(s.compareDocumentPosition(l)&16):!1:!1}function db(s){s=s!=null&&s.ownerDocument!=null&&s.ownerDocument.defaultView!=null?s.ownerDocument.defaultView:window;for(var l=ue(s.document);l instanceof s.HTMLIFrameElement;){try{var f=typeof l.contentWindow.location.href=="string"}catch{f=!1}if(f)s=l.contentWindow;else break;l=ue(s.document)}return l}function vp(s){var l=s&&s.nodeName&&s.nodeName.toLowerCase();return l&&(l==="input"&&(s.type==="text"||s.type==="search"||s.type==="tel"||s.type==="url"||s.type==="password")||l==="textarea"||s.contentEditable==="true")}var bA=Ai&&"documentMode"in document&&11>=document.documentMode,ya=null,bp=null,tc=null,_p=!1;function fb(s,l,f){var y=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;_p||ya==null||ya!==ue(y)||(y=ya,"selectionStart"in y&&vp(y)?y={start:y.selectionStart,end:y.selectionEnd}:(y=(y.ownerDocument&&y.ownerDocument.defaultView||window).getSelection(),y={anchorNode:y.anchorNode,anchorOffset:y.anchorOffset,focusNode:y.focusNode,focusOffset:y.focusOffset}),tc&&ec(tc,y)||(tc=y,y=Fd(bp,"onSelect"),0<y.length&&(l=new pa("onSelect","select",null,l,f),s.push({event:l,listeners:y}),l.target=ya)))}function Ao(s,l){var f={};return f[s.toLowerCase()]=l.toLowerCase(),f["Webkit"+s]="webkit"+l,f["Moz"+s]="moz"+l,f}var xa={animationend:Ao("Animation","AnimationEnd"),animationiteration:Ao("Animation","AnimationIteration"),animationstart:Ao("Animation","AnimationStart"),transitionrun:Ao("Transition","TransitionRun"),transitionstart:Ao("Transition","TransitionStart"),transitioncancel:Ao("Transition","TransitionCancel"),transitionend:Ao("Transition","TransitionEnd")},kp={},mb={};Ai&&(mb=document.createElement("div").style,"AnimationEvent"in window||(delete xa.animationend.animation,delete xa.animationiteration.animation,delete xa.animationstart.animation),"TransitionEvent"in window||delete xa.transitionend.transition);function Mo(s){if(kp[s])return kp[s];if(!xa[s])return s;var l=xa[s],f;for(f in l)if(l.hasOwnProperty(f)&&f in mb)return kp[s]=l[f];return s}var pb=Mo("animationend"),hb=Mo("animationiteration"),gb=Mo("animationstart"),_A=Mo("transitionrun"),kA=Mo("transitionstart"),SA=Mo("transitioncancel"),yb=Mo("transitionend"),xb=new Map,Sp="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Sp.push("scrollEnd");function Di(s,l){xb.set(s,l),gt(l,[s])}var td=typeof reportError=="function"?reportError:function(s){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var l=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof s=="object"&&s!==null&&typeof s.message=="string"?String(s.message):String(s),error:s});if(!window.dispatchEvent(l))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",s);return}console.error(s)},yi=[],va=0,wp=0;function nd(){for(var s=va,l=wp=va=0;l<s;){var f=yi[l];yi[l++]=null;var y=yi[l];yi[l++]=null;var _=yi[l];yi[l++]=null;var E=yi[l];if(yi[l++]=null,y!==null&&_!==null){var F=y.pending;F===null?_.next=_:(_.next=F.next,F.next=_),y.pending=_}E!==0&&vb(f,_,E)}}function rd(s,l,f,y){yi[va++]=s,yi[va++]=l,yi[va++]=f,yi[va++]=y,wp|=y,s.lanes|=y,s=s.alternate,s!==null&&(s.lanes|=y)}function Cp(s,l,f,y){return rd(s,l,f,y),id(s)}function Do(s,l){return rd(s,null,null,l),id(s)}function vb(s,l,f){s.lanes|=f;var y=s.alternate;y!==null&&(y.lanes|=f);for(var _=!1,E=s.return;E!==null;)E.childLanes|=f,y=E.alternate,y!==null&&(y.childLanes|=f),E.tag===22&&(s=E.stateNode,s===null||s._visibility&1||(_=!0)),s=E,E=E.return;return s.tag===3?(E=s.stateNode,_&&l!==null&&(_=31-Ze(f),s=E.hiddenUpdates,y=s[_],y===null?s[_]=[l]:y.push(l),l.lane=f|536870912),E):null}function id(s){if(50<Sc)throw Sc=0,Dh=null,Error(r(185));for(var l=s.return;l!==null;)s=l,l=s.return;return s.tag===3?s.stateNode:null}var ba={};function wA(s,l,f,y){this.tag=s,this.key=f,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=l,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=y,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ti(s,l,f,y){return new wA(s,l,f,y)}function jp(s){return s=s.prototype,!(!s||!s.isReactComponent)}function gs(s,l){var f=s.alternate;return f===null?(f=ti(s.tag,l,s.key,s.mode),f.elementType=s.elementType,f.type=s.type,f.stateNode=s.stateNode,f.alternate=s,s.alternate=f):(f.pendingProps=l,f.type=s.type,f.flags=0,f.subtreeFlags=0,f.deletions=null),f.flags=s.flags&65011712,f.childLanes=s.childLanes,f.lanes=s.lanes,f.child=s.child,f.memoizedProps=s.memoizedProps,f.memoizedState=s.memoizedState,f.updateQueue=s.updateQueue,l=s.dependencies,f.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext},f.sibling=s.sibling,f.index=s.index,f.ref=s.ref,f.refCleanup=s.refCleanup,f}function bb(s,l){s.flags&=65011714;var f=s.alternate;return f===null?(s.childLanes=0,s.lanes=l,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=f.childLanes,s.lanes=f.lanes,s.child=f.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=f.memoizedProps,s.memoizedState=f.memoizedState,s.updateQueue=f.updateQueue,s.type=f.type,l=f.dependencies,s.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext}),s}function sd(s,l,f,y,_,E){var F=0;if(y=s,typeof s=="function")jp(s)&&(F=1);else if(typeof s=="string")F=I3(s,f,K.current)?26:s==="html"||s==="head"||s==="body"?27:5;else e:switch(s){case D:return s=ti(31,f,l,_),s.elementType=D,s.lanes=E,s;case k:return Oo(f.children,_,E,l);case S:F=8,_|=24;break;case b:return s=ti(12,f,l,_|2),s.elementType=b,s.lanes=E,s;case O:return s=ti(13,f,l,_),s.elementType=O,s.lanes=E,s;case R:return s=ti(19,f,l,_),s.elementType=R,s.lanes=E,s;default:if(typeof s=="object"&&s!==null)switch(s.$$typeof){case j:F=10;break e;case w:F=9;break e;case N:F=11;break e;case L:F=14;break e;case I:F=16,y=null;break e}F=29,f=Error(r(130,s===null?"null":typeof s,"")),y=null}return l=ti(F,f,l,_),l.elementType=s,l.type=y,l.lanes=E,l}function Oo(s,l,f,y){return s=ti(7,s,y,l),s.lanes=f,s}function Ep(s,l,f){return s=ti(6,s,null,l),s.lanes=f,s}function _b(s){var l=ti(18,null,null,0);return l.stateNode=s,l}function Np(s,l,f){return l=ti(4,s.children!==null?s.children:[],s.key,l),l.lanes=f,l.stateNode={containerInfo:s.containerInfo,pendingChildren:null,implementation:s.implementation},l}var kb=new WeakMap;function xi(s,l){if(typeof s=="object"&&s!==null){var f=kb.get(s);return f!==void 0?f:(l={value:s,source:l,stack:Pt(l)},kb.set(s,l),l)}return{value:s,source:l,stack:Pt(l)}}var _a=[],ka=0,od=null,nc=0,vi=[],bi=0,Us=null,Yi=1,Xi="";function ys(s,l){_a[ka++]=nc,_a[ka++]=od,od=s,nc=l}function Sb(s,l,f){vi[bi++]=Yi,vi[bi++]=Xi,vi[bi++]=Us,Us=s;var y=Yi;s=Xi;var _=32-Ze(y)-1;y&=~(1<<_),f+=1;var E=32-Ze(l)+_;if(30<E){var F=_-_%5;E=(y&(1<<F)-1).toString(32),y>>=F,_-=F,Yi=1<<32-Ze(l)+_|f<<_|y,Xi=E+s}else Yi=1<<E|f<<_|y,Xi=s}function Ip(s){s.return!==null&&(ys(s,1),Sb(s,1,0))}function Tp(s){for(;s===od;)od=_a[--ka],_a[ka]=null,nc=_a[--ka],_a[ka]=null;for(;s===Us;)Us=vi[--bi],vi[bi]=null,Xi=vi[--bi],vi[bi]=null,Yi=vi[--bi],vi[bi]=null}function wb(s,l){vi[bi++]=Yi,vi[bi++]=Xi,vi[bi++]=Us,Yi=l.id,Xi=l.overflow,Us=s}var jr=null,Dn=null,Zt=!1,qs=null,_i=!1,Rp=Error(r(519));function Gs(s){var l=Error(r(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw rc(xi(l,s)),Rp}function Cb(s){var l=s.stateNode,f=s.type,y=s.memoizedProps;switch(l[Jt]=s,l[Vt]=y,f){case"dialog":Ht("cancel",l),Ht("close",l);break;case"iframe":case"object":case"embed":Ht("load",l);break;case"video":case"audio":for(f=0;f<Cc.length;f++)Ht(Cc[f],l);break;case"source":Ht("error",l);break;case"img":case"image":case"link":Ht("error",l),Ht("load",l);break;case"details":Ht("toggle",l);break;case"input":Ht("invalid",l),ve(l,y.value,y.defaultValue,y.checked,y.defaultChecked,y.type,y.name,!0);break;case"select":Ht("invalid",l);break;case"textarea":Ht("invalid",l),ct(l,y.value,y.defaultValue,y.children)}f=y.children,typeof f!="string"&&typeof f!="number"&&typeof f!="bigint"||l.textContent===""+f||y.suppressHydrationWarning===!0||F_(l.textContent,f)?(y.popover!=null&&(Ht("beforetoggle",l),Ht("toggle",l)),y.onScroll!=null&&Ht("scroll",l),y.onScrollEnd!=null&&Ht("scrollend",l),y.onClick!=null&&(l.onclick=Pr),l=!0):l=!1,l||Gs(s,!0)}function jb(s){for(jr=s.return;jr;)switch(jr.tag){case 5:case 31:case 13:_i=!1;return;case 27:case 3:_i=!0;return;default:jr=jr.return}}function Sa(s){if(s!==jr)return!1;if(!Zt)return jb(s),Zt=!0,!1;var l=s.tag,f;if((f=l!==3&&l!==27)&&((f=l===5)&&(f=s.type,f=!(f!=="form"&&f!=="button")||Xh(s.type,s.memoizedProps)),f=!f),f&&Dn&&Gs(s),jb(s),l===13){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(r(317));Dn=Z_(s)}else if(l===31){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(r(317));Dn=Z_(s)}else l===27?(l=Dn,oo(s.type)?(s=eg,eg=null,Dn=s):Dn=l):Dn=jr?Si(s.stateNode.nextSibling):null;return!0}function Lo(){Dn=jr=null,Zt=!1}function Ap(){var s=qs;return s!==null&&(Wr===null?Wr=s:Wr.push.apply(Wr,s),qs=null),s}function rc(s){qs===null?qs=[s]:qs.push(s)}var Mp=G(null),zo=null,xs=null;function Ws(s,l,f){P(Mp,l._currentValue),l._currentValue=f}function vs(s){s._currentValue=Mp.current,J(Mp)}function Dp(s,l,f){for(;s!==null;){var y=s.alternate;if((s.childLanes&l)!==l?(s.childLanes|=l,y!==null&&(y.childLanes|=l)):y!==null&&(y.childLanes&l)!==l&&(y.childLanes|=l),s===f)break;s=s.return}}function Op(s,l,f,y){var _=s.child;for(_!==null&&(_.return=s);_!==null;){var E=_.dependencies;if(E!==null){var F=_.child;E=E.firstContext;e:for(;E!==null;){var X=E;E=_;for(var re=0;re<l.length;re++)if(X.context===l[re]){E.lanes|=f,X=E.alternate,X!==null&&(X.lanes|=f),Dp(E.return,f,s),y||(F=null);break e}E=X.next}}else if(_.tag===18){if(F=_.return,F===null)throw Error(r(341));F.lanes|=f,E=F.alternate,E!==null&&(E.lanes|=f),Dp(F,f,s),F=null}else F=_.child;if(F!==null)F.return=_;else for(F=_;F!==null;){if(F===s){F=null;break}if(_=F.sibling,_!==null){_.return=F.return,F=_;break}F=F.return}_=F}}function wa(s,l,f,y){s=null;for(var _=l,E=!1;_!==null;){if(!E){if((_.flags&524288)!==0)E=!0;else if((_.flags&262144)!==0)break}if(_.tag===10){var F=_.alternate;if(F===null)throw Error(r(387));if(F=F.memoizedProps,F!==null){var X=_.type;ei(_.pendingProps.value,F.value)||(s!==null?s.push(X):s=[X])}}else if(_===ie.current){if(F=_.alternate,F===null)throw Error(r(387));F.memoizedState.memoizedState!==_.memoizedState.memoizedState&&(s!==null?s.push(Tc):s=[Tc])}_=_.return}s!==null&&Op(l,s,f,y),l.flags|=262144}function ad(s){for(s=s.firstContext;s!==null;){if(!ei(s.context._currentValue,s.memoizedValue))return!0;s=s.next}return!1}function Po(s){zo=s,xs=null,s=s.dependencies,s!==null&&(s.firstContext=null)}function Er(s){return Eb(zo,s)}function ld(s,l){return zo===null&&Po(s),Eb(s,l)}function Eb(s,l){var f=l._currentValue;if(l={context:l,memoizedValue:f,next:null},xs===null){if(s===null)throw Error(r(308));xs=l,s.dependencies={lanes:0,firstContext:l},s.flags|=524288}else xs=xs.next=l;return f}var CA=typeof AbortController<"u"?AbortController:function(){var s=[],l=this.signal={aborted:!1,addEventListener:function(f,y){s.push(y)}};this.abort=function(){l.aborted=!0,s.forEach(function(f){return f()})}},jA=e.unstable_scheduleCallback,EA=e.unstable_NormalPriority,ir={$$typeof:j,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Lp(){return{controller:new CA,data:new Map,refCount:0}}function ic(s){s.refCount--,s.refCount===0&&jA(EA,function(){s.controller.abort()})}var sc=null,zp=0,Ca=0,ja=null;function NA(s,l){if(sc===null){var f=sc=[];zp=0,Ca=$h(),ja={status:"pending",value:void 0,then:function(y){f.push(y)}}}return zp++,l.then(Nb,Nb),l}function Nb(){if(--zp===0&&sc!==null){ja!==null&&(ja.status="fulfilled");var s=sc;sc=null,Ca=0,ja=null;for(var l=0;l<s.length;l++)(0,s[l])()}}function IA(s,l){var f=[],y={status:"pending",value:null,reason:null,then:function(_){f.push(_)}};return s.then(function(){y.status="fulfilled",y.value=l;for(var _=0;_<f.length;_++)(0,f[_])(l)},function(_){for(y.status="rejected",y.reason=_,_=0;_<f.length;_++)(0,f[_])(void 0)}),y}var Ib=H.S;H.S=function(s,l){f_=tt(),typeof l=="object"&&l!==null&&typeof l.then=="function"&&NA(s,l),Ib!==null&&Ib(s,l)};var Bo=G(null);function Pp(){var s=Bo.current;return s!==null?s:jn.pooledCache}function cd(s,l){l===null?P(Bo,Bo.current):P(Bo,l.pool)}function Tb(){var s=Pp();return s===null?null:{parent:ir._currentValue,pool:s}}var Ea=Error(r(460)),Bp=Error(r(474)),ud=Error(r(542)),dd={then:function(){}};function Rb(s){return s=s.status,s==="fulfilled"||s==="rejected"}function Ab(s,l,f){switch(f=s[f],f===void 0?s.push(l):f!==l&&(l.then(Pr,Pr),l=f),l.status){case"fulfilled":return l.value;case"rejected":throw s=l.reason,Db(s),s;default:if(typeof l.status=="string")l.then(Pr,Pr);else{if(s=jn,s!==null&&100<s.shellSuspendCounter)throw Error(r(482));s=l,s.status="pending",s.then(function(y){if(l.status==="pending"){var _=l;_.status="fulfilled",_.value=y}},function(y){if(l.status==="pending"){var _=l;_.status="rejected",_.reason=y}})}switch(l.status){case"fulfilled":return l.value;case"rejected":throw s=l.reason,Db(s),s}throw Ho=l,Ea}}function $o(s){try{var l=s._init;return l(s._payload)}catch(f){throw f!==null&&typeof f=="object"&&typeof f.then=="function"?(Ho=f,Ea):f}}var Ho=null;function Mb(){if(Ho===null)throw Error(r(459));var s=Ho;return Ho=null,s}function Db(s){if(s===Ea||s===ud)throw Error(r(483))}var Na=null,oc=0;function fd(s){var l=oc;return oc+=1,Na===null&&(Na=[]),Ab(Na,s,l)}function ac(s,l){l=l.props.ref,s.ref=l!==void 0?l:null}function md(s,l){throw l.$$typeof===g?Error(r(525)):(s=Object.prototype.toString.call(l),Error(r(31,s==="[object Object]"?"object with keys {"+Object.keys(l).join(", ")+"}":s)))}function Ob(s){function l(fe,ce){if(s){var ge=fe.deletions;ge===null?(fe.deletions=[ce],fe.flags|=16):ge.push(ce)}}function f(fe,ce){if(!s)return null;for(;ce!==null;)l(fe,ce),ce=ce.sibling;return null}function y(fe){for(var ce=new Map;fe!==null;)fe.key!==null?ce.set(fe.key,fe):ce.set(fe.index,fe),fe=fe.sibling;return ce}function _(fe,ce){return fe=gs(fe,ce),fe.index=0,fe.sibling=null,fe}function E(fe,ce,ge){return fe.index=ge,s?(ge=fe.alternate,ge!==null?(ge=ge.index,ge<ce?(fe.flags|=67108866,ce):ge):(fe.flags|=67108866,ce)):(fe.flags|=1048576,ce)}function F(fe){return s&&fe.alternate===null&&(fe.flags|=67108866),fe}function X(fe,ce,ge,je){return ce===null||ce.tag!==6?(ce=Ep(ge,fe.mode,je),ce.return=fe,ce):(ce=_(ce,ge),ce.return=fe,ce)}function re(fe,ce,ge,je){var ot=ge.type;return ot===k?we(fe,ce,ge.props.children,je,ge.key):ce!==null&&(ce.elementType===ot||typeof ot=="object"&&ot!==null&&ot.$$typeof===I&&$o(ot)===ce.type)?(ce=_(ce,ge.props),ac(ce,ge),ce.return=fe,ce):(ce=sd(ge.type,ge.key,ge.props,null,fe.mode,je),ac(ce,ge),ce.return=fe,ce)}function ye(fe,ce,ge,je){return ce===null||ce.tag!==4||ce.stateNode.containerInfo!==ge.containerInfo||ce.stateNode.implementation!==ge.implementation?(ce=Np(ge,fe.mode,je),ce.return=fe,ce):(ce=_(ce,ge.children||[]),ce.return=fe,ce)}function we(fe,ce,ge,je,ot){return ce===null||ce.tag!==7?(ce=Oo(ge,fe.mode,je,ot),ce.return=fe,ce):(ce=_(ce,ge),ce.return=fe,ce)}function Te(fe,ce,ge){if(typeof ce=="string"&&ce!==""||typeof ce=="number"||typeof ce=="bigint")return ce=Ep(""+ce,fe.mode,ge),ce.return=fe,ce;if(typeof ce=="object"&&ce!==null){switch(ce.$$typeof){case x:return ge=sd(ce.type,ce.key,ce.props,null,fe.mode,ge),ac(ge,ce),ge.return=fe,ge;case v:return ce=Np(ce,fe.mode,ge),ce.return=fe,ce;case I:return ce=$o(ce),Te(fe,ce,ge)}if(V(ce)||$(ce))return ce=Oo(ce,fe.mode,ge,null),ce.return=fe,ce;if(typeof ce.then=="function")return Te(fe,fd(ce),ge);if(ce.$$typeof===j)return Te(fe,ld(fe,ce),ge);md(fe,ce)}return null}function xe(fe,ce,ge,je){var ot=ce!==null?ce.key:null;if(typeof ge=="string"&&ge!==""||typeof ge=="number"||typeof ge=="bigint")return ot!==null?null:X(fe,ce,""+ge,je);if(typeof ge=="object"&&ge!==null){switch(ge.$$typeof){case x:return ge.key===ot?re(fe,ce,ge,je):null;case v:return ge.key===ot?ye(fe,ce,ge,je):null;case I:return ge=$o(ge),xe(fe,ce,ge,je)}if(V(ge)||$(ge))return ot!==null?null:we(fe,ce,ge,je,null);if(typeof ge.then=="function")return xe(fe,ce,fd(ge),je);if(ge.$$typeof===j)return xe(fe,ce,ld(fe,ge),je);md(fe,ge)}return null}function _e(fe,ce,ge,je,ot){if(typeof je=="string"&&je!==""||typeof je=="number"||typeof je=="bigint")return fe=fe.get(ge)||null,X(ce,fe,""+je,ot);if(typeof je=="object"&&je!==null){switch(je.$$typeof){case x:return fe=fe.get(je.key===null?ge:je.key)||null,re(ce,fe,je,ot);case v:return fe=fe.get(je.key===null?ge:je.key)||null,ye(ce,fe,je,ot);case I:return je=$o(je),_e(fe,ce,ge,je,ot)}if(V(je)||$(je))return fe=fe.get(ge)||null,we(ce,fe,je,ot,null);if(typeof je.then=="function")return _e(fe,ce,ge,fd(je),ot);if(je.$$typeof===j)return _e(fe,ce,ge,ld(ce,je),ot);md(ce,je)}return null}function Ke(fe,ce,ge,je){for(var ot=null,dn=null,Qe=ce,At=ce=0,Wt=null;Qe!==null&&At<ge.length;At++){Qe.index>At?(Wt=Qe,Qe=null):Wt=Qe.sibling;var fn=xe(fe,Qe,ge[At],je);if(fn===null){Qe===null&&(Qe=Wt);break}s&&Qe&&fn.alternate===null&&l(fe,Qe),ce=E(fn,ce,At),dn===null?ot=fn:dn.sibling=fn,dn=fn,Qe=Wt}if(At===ge.length)return f(fe,Qe),Zt&&ys(fe,At),ot;if(Qe===null){for(;At<ge.length;At++)Qe=Te(fe,ge[At],je),Qe!==null&&(ce=E(Qe,ce,At),dn===null?ot=Qe:dn.sibling=Qe,dn=Qe);return Zt&&ys(fe,At),ot}for(Qe=y(Qe);At<ge.length;At++)Wt=_e(Qe,fe,At,ge[At],je),Wt!==null&&(s&&Wt.alternate!==null&&Qe.delete(Wt.key===null?At:Wt.key),ce=E(Wt,ce,At),dn===null?ot=Wt:dn.sibling=Wt,dn=Wt);return s&&Qe.forEach(function(fo){return l(fe,fo)}),Zt&&ys(fe,At),ot}function mt(fe,ce,ge,je){if(ge==null)throw Error(r(151));for(var ot=null,dn=null,Qe=ce,At=ce=0,Wt=null,fn=ge.next();Qe!==null&&!fn.done;At++,fn=ge.next()){Qe.index>At?(Wt=Qe,Qe=null):Wt=Qe.sibling;var fo=xe(fe,Qe,fn.value,je);if(fo===null){Qe===null&&(Qe=Wt);break}s&&Qe&&fo.alternate===null&&l(fe,Qe),ce=E(fo,ce,At),dn===null?ot=fo:dn.sibling=fo,dn=fo,Qe=Wt}if(fn.done)return f(fe,Qe),Zt&&ys(fe,At),ot;if(Qe===null){for(;!fn.done;At++,fn=ge.next())fn=Te(fe,fn.value,je),fn!==null&&(ce=E(fn,ce,At),dn===null?ot=fn:dn.sibling=fn,dn=fn);return Zt&&ys(fe,At),ot}for(Qe=y(Qe);!fn.done;At++,fn=ge.next())fn=_e(Qe,fe,At,fn.value,je),fn!==null&&(s&&fn.alternate!==null&&Qe.delete(fn.key===null?At:fn.key),ce=E(fn,ce,At),dn===null?ot=fn:dn.sibling=fn,dn=fn);return s&&Qe.forEach(function($3){return l(fe,$3)}),Zt&&ys(fe,At),ot}function wn(fe,ce,ge,je){if(typeof ge=="object"&&ge!==null&&ge.type===k&&ge.key===null&&(ge=ge.props.children),typeof ge=="object"&&ge!==null){switch(ge.$$typeof){case x:e:{for(var ot=ge.key;ce!==null;){if(ce.key===ot){if(ot=ge.type,ot===k){if(ce.tag===7){f(fe,ce.sibling),je=_(ce,ge.props.children),je.return=fe,fe=je;break e}}else if(ce.elementType===ot||typeof ot=="object"&&ot!==null&&ot.$$typeof===I&&$o(ot)===ce.type){f(fe,ce.sibling),je=_(ce,ge.props),ac(je,ge),je.return=fe,fe=je;break e}f(fe,ce);break}else l(fe,ce);ce=ce.sibling}ge.type===k?(je=Oo(ge.props.children,fe.mode,je,ge.key),je.return=fe,fe=je):(je=sd(ge.type,ge.key,ge.props,null,fe.mode,je),ac(je,ge),je.return=fe,fe=je)}return F(fe);case v:e:{for(ot=ge.key;ce!==null;){if(ce.key===ot)if(ce.tag===4&&ce.stateNode.containerInfo===ge.containerInfo&&ce.stateNode.implementation===ge.implementation){f(fe,ce.sibling),je=_(ce,ge.children||[]),je.return=fe,fe=je;break e}else{f(fe,ce);break}else l(fe,ce);ce=ce.sibling}je=Np(ge,fe.mode,je),je.return=fe,fe=je}return F(fe);case I:return ge=$o(ge),wn(fe,ce,ge,je)}if(V(ge))return Ke(fe,ce,ge,je);if($(ge)){if(ot=$(ge),typeof ot!="function")throw Error(r(150));return ge=ot.call(ge),mt(fe,ce,ge,je)}if(typeof ge.then=="function")return wn(fe,ce,fd(ge),je);if(ge.$$typeof===j)return wn(fe,ce,ld(fe,ge),je);md(fe,ge)}return typeof ge=="string"&&ge!==""||typeof ge=="number"||typeof ge=="bigint"?(ge=""+ge,ce!==null&&ce.tag===6?(f(fe,ce.sibling),je=_(ce,ge),je.return=fe,fe=je):(f(fe,ce),je=Ep(ge,fe.mode,je),je.return=fe,fe=je),F(fe)):f(fe,ce)}return function(fe,ce,ge,je){try{oc=0;var ot=wn(fe,ce,ge,je);return Na=null,ot}catch(Qe){if(Qe===Ea||Qe===ud)throw Qe;var dn=ti(29,Qe,null,fe.mode);return dn.lanes=je,dn.return=fe,dn}}}var Fo=Ob(!0),Lb=Ob(!1),Ys=!1;function $p(s){s.updateQueue={baseState:s.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hp(s,l){s=s.updateQueue,l.updateQueue===s&&(l.updateQueue={baseState:s.baseState,firstBaseUpdate:s.firstBaseUpdate,lastBaseUpdate:s.lastBaseUpdate,shared:s.shared,callbacks:null})}function Xs(s){return{lane:s,tag:0,payload:null,callback:null,next:null}}function Ks(s,l,f){var y=s.updateQueue;if(y===null)return null;if(y=y.shared,(pn&2)!==0){var _=y.pending;return _===null?l.next=l:(l.next=_.next,_.next=l),y.pending=l,l=id(s),vb(s,null,f),l}return rd(s,y,l,f),id(s)}function lc(s,l,f){if(l=l.updateQueue,l!==null&&(l=l.shared,(f&4194048)!==0)){var y=l.lanes;y&=s.pendingLanes,f|=y,l.lanes=f,er(s,f)}}function Fp(s,l){var f=s.updateQueue,y=s.alternate;if(y!==null&&(y=y.updateQueue,f===y)){var _=null,E=null;if(f=f.firstBaseUpdate,f!==null){do{var F={lane:f.lane,tag:f.tag,payload:f.payload,callback:null,next:null};E===null?_=E=F:E=E.next=F,f=f.next}while(f!==null);E===null?_=E=l:E=E.next=l}else _=E=l;f={baseState:y.baseState,firstBaseUpdate:_,lastBaseUpdate:E,shared:y.shared,callbacks:y.callbacks},s.updateQueue=f;return}s=f.lastBaseUpdate,s===null?f.firstBaseUpdate=l:s.next=l,f.lastBaseUpdate=l}var Vp=!1;function cc(){if(Vp){var s=ja;if(s!==null)throw s}}function uc(s,l,f,y){Vp=!1;var _=s.updateQueue;Ys=!1;var E=_.firstBaseUpdate,F=_.lastBaseUpdate,X=_.shared.pending;if(X!==null){_.shared.pending=null;var re=X,ye=re.next;re.next=null,F===null?E=ye:F.next=ye,F=re;var we=s.alternate;we!==null&&(we=we.updateQueue,X=we.lastBaseUpdate,X!==F&&(X===null?we.firstBaseUpdate=ye:X.next=ye,we.lastBaseUpdate=re))}if(E!==null){var Te=_.baseState;F=0,we=ye=re=null,X=E;do{var xe=X.lane&-536870913,_e=xe!==X.lane;if(_e?(Gt&xe)===xe:(y&xe)===xe){xe!==0&&xe===Ca&&(Vp=!0),we!==null&&(we=we.next={lane:0,tag:X.tag,payload:X.payload,callback:null,next:null});e:{var Ke=s,mt=X;xe=l;var wn=f;switch(mt.tag){case 1:if(Ke=mt.payload,typeof Ke=="function"){Te=Ke.call(wn,Te,xe);break e}Te=Ke;break e;case 3:Ke.flags=Ke.flags&-65537|128;case 0:if(Ke=mt.payload,xe=typeof Ke=="function"?Ke.call(wn,Te,xe):Ke,xe==null)break e;Te=p({},Te,xe);break e;case 2:Ys=!0}}xe=X.callback,xe!==null&&(s.flags|=64,_e&&(s.flags|=8192),_e=_.callbacks,_e===null?_.callbacks=[xe]:_e.push(xe))}else _e={lane:xe,tag:X.tag,payload:X.payload,callback:X.callback,next:null},we===null?(ye=we=_e,re=Te):we=we.next=_e,F|=xe;if(X=X.next,X===null){if(X=_.shared.pending,X===null)break;_e=X,X=_e.next,_e.next=null,_.lastBaseUpdate=_e,_.shared.pending=null}}while(!0);we===null&&(re=Te),_.baseState=re,_.firstBaseUpdate=ye,_.lastBaseUpdate=we,E===null&&(_.shared.lanes=0),to|=F,s.lanes=F,s.memoizedState=Te}}function zb(s,l){if(typeof s!="function")throw Error(r(191,s));s.call(l)}function Pb(s,l){var f=s.callbacks;if(f!==null)for(s.callbacks=null,s=0;s<f.length;s++)zb(f[s],l)}var Ia=G(null),pd=G(0);function Bb(s,l){s=Ns,P(pd,s),P(Ia,l),Ns=s|l.baseLanes}function Up(){P(pd,Ns),P(Ia,Ia.current)}function qp(){Ns=pd.current,J(Ia),J(pd)}var ni=G(null),ki=null;function Zs(s){var l=s.alternate;P(Qn,Qn.current&1),P(ni,s),ki===null&&(l===null||Ia.current!==null||l.memoizedState!==null)&&(ki=s)}function Gp(s){P(Qn,Qn.current),P(ni,s),ki===null&&(ki=s)}function $b(s){s.tag===22?(P(Qn,Qn.current),P(ni,s),ki===null&&(ki=s)):Qs()}function Qs(){P(Qn,Qn.current),P(ni,ni.current)}function ri(s){J(ni),ki===s&&(ki=null),J(Qn)}var Qn=G(0);function hd(s){for(var l=s;l!==null;){if(l.tag===13){var f=l.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||Qh(f)||Jh(f)))return l}else if(l.tag===19&&(l.memoizedProps.revealOrder==="forwards"||l.memoizedProps.revealOrder==="backwards"||l.memoizedProps.revealOrder==="unstable_legacy-backwards"||l.memoizedProps.revealOrder==="together")){if((l.flags&128)!==0)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===s)break;for(;l.sibling===null;){if(l.return===null||l.return===s)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var bs=0,Nt=null,kn=null,sr=null,gd=!1,Ta=!1,Vo=!1,yd=0,dc=0,Ra=null,TA=0;function Yn(){throw Error(r(321))}function Wp(s,l){if(l===null)return!1;for(var f=0;f<l.length&&f<s.length;f++)if(!ei(s[f],l[f]))return!1;return!0}function Yp(s,l,f,y,_,E){return bs=E,Nt=l,l.memoizedState=null,l.updateQueue=null,l.lanes=0,H.H=s===null||s.memoizedState===null?S1:ch,Vo=!1,E=f(y,_),Vo=!1,Ta&&(E=Fb(l,f,y,_)),Hb(s),E}function Hb(s){H.H=pc;var l=kn!==null&&kn.next!==null;if(bs=0,sr=kn=Nt=null,gd=!1,dc=0,Ra=null,l)throw Error(r(300));s===null||or||(s=s.dependencies,s!==null&&ad(s)&&(or=!0))}function Fb(s,l,f,y){Nt=s;var _=0;do{if(Ta&&(Ra=null),dc=0,Ta=!1,25<=_)throw Error(r(301));if(_+=1,sr=kn=null,s.updateQueue!=null){var E=s.updateQueue;E.lastEffect=null,E.events=null,E.stores=null,E.memoCache!=null&&(E.memoCache.index=0)}H.H=w1,E=l(f,y)}while(Ta);return E}function RA(){var s=H.H,l=s.useState()[0];return l=typeof l.then=="function"?fc(l):l,s=s.useState()[0],(kn!==null?kn.memoizedState:null)!==s&&(Nt.flags|=1024),l}function Xp(){var s=yd!==0;return yd=0,s}function Kp(s,l,f){l.updateQueue=s.updateQueue,l.flags&=-2053,s.lanes&=~f}function Zp(s){if(gd){for(s=s.memoizedState;s!==null;){var l=s.queue;l!==null&&(l.pending=null),s=s.next}gd=!1}bs=0,sr=kn=Nt=null,Ta=!1,dc=yd=0,Ra=null}function Br(){var s={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return sr===null?Nt.memoizedState=sr=s:sr=sr.next=s,sr}function Jn(){if(kn===null){var s=Nt.alternate;s=s!==null?s.memoizedState:null}else s=kn.next;var l=sr===null?Nt.memoizedState:sr.next;if(l!==null)sr=l,kn=s;else{if(s===null)throw Nt.alternate===null?Error(r(467)):Error(r(310));kn=s,s={memoizedState:kn.memoizedState,baseState:kn.baseState,baseQueue:kn.baseQueue,queue:kn.queue,next:null},sr===null?Nt.memoizedState=sr=s:sr=sr.next=s}return sr}function xd(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function fc(s){var l=dc;return dc+=1,Ra===null&&(Ra=[]),s=Ab(Ra,s,l),l=Nt,(sr===null?l.memoizedState:sr.next)===null&&(l=l.alternate,H.H=l===null||l.memoizedState===null?S1:ch),s}function vd(s){if(s!==null&&typeof s=="object"){if(typeof s.then=="function")return fc(s);if(s.$$typeof===j)return Er(s)}throw Error(r(438,String(s)))}function Qp(s){var l=null,f=Nt.updateQueue;if(f!==null&&(l=f.memoCache),l==null){var y=Nt.alternate;y!==null&&(y=y.updateQueue,y!==null&&(y=y.memoCache,y!=null&&(l={data:y.data.map(function(_){return _.slice()}),index:0})))}if(l==null&&(l={data:[],index:0}),f===null&&(f=xd(),Nt.updateQueue=f),f.memoCache=l,f=l.data[l.index],f===void 0)for(f=l.data[l.index]=Array(s),y=0;y<s;y++)f[y]=M;return l.index++,f}function _s(s,l){return typeof l=="function"?l(s):l}function bd(s){var l=Jn();return Jp(l,kn,s)}function Jp(s,l,f){var y=s.queue;if(y===null)throw Error(r(311));y.lastRenderedReducer=f;var _=s.baseQueue,E=y.pending;if(E!==null){if(_!==null){var F=_.next;_.next=E.next,E.next=F}l.baseQueue=_=E,y.pending=null}if(E=s.baseState,_===null)s.memoizedState=E;else{l=_.next;var X=F=null,re=null,ye=l,we=!1;do{var Te=ye.lane&-536870913;if(Te!==ye.lane?(Gt&Te)===Te:(bs&Te)===Te){var xe=ye.revertLane;if(xe===0)re!==null&&(re=re.next={lane:0,revertLane:0,gesture:null,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null}),Te===Ca&&(we=!0);else if((bs&xe)===xe){ye=ye.next,xe===Ca&&(we=!0);continue}else Te={lane:0,revertLane:ye.revertLane,gesture:null,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null},re===null?(X=re=Te,F=E):re=re.next=Te,Nt.lanes|=xe,to|=xe;Te=ye.action,Vo&&f(E,Te),E=ye.hasEagerState?ye.eagerState:f(E,Te)}else xe={lane:Te,revertLane:ye.revertLane,gesture:ye.gesture,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null},re===null?(X=re=xe,F=E):re=re.next=xe,Nt.lanes|=Te,to|=Te;ye=ye.next}while(ye!==null&&ye!==l);if(re===null?F=E:re.next=X,!ei(E,s.memoizedState)&&(or=!0,we&&(f=ja,f!==null)))throw f;s.memoizedState=E,s.baseState=F,s.baseQueue=re,y.lastRenderedState=E}return _===null&&(y.lanes=0),[s.memoizedState,y.dispatch]}function eh(s){var l=Jn(),f=l.queue;if(f===null)throw Error(r(311));f.lastRenderedReducer=s;var y=f.dispatch,_=f.pending,E=l.memoizedState;if(_!==null){f.pending=null;var F=_=_.next;do E=s(E,F.action),F=F.next;while(F!==_);ei(E,l.memoizedState)||(or=!0),l.memoizedState=E,l.baseQueue===null&&(l.baseState=E),f.lastRenderedState=E}return[E,y]}function Vb(s,l,f){var y=Nt,_=Jn(),E=Zt;if(E){if(f===void 0)throw Error(r(407));f=f()}else f=l();var F=!ei((kn||_).memoizedState,f);if(F&&(_.memoizedState=f,or=!0),_=_.queue,rh(Gb.bind(null,y,_,s),[s]),_.getSnapshot!==l||F||sr!==null&&sr.memoizedState.tag&1){if(y.flags|=2048,Aa(9,{destroy:void 0},qb.bind(null,y,_,f,l),null),jn===null)throw Error(r(349));E||(bs&127)!==0||Ub(y,l,f)}return f}function Ub(s,l,f){s.flags|=16384,s={getSnapshot:l,value:f},l=Nt.updateQueue,l===null?(l=xd(),Nt.updateQueue=l,l.stores=[s]):(f=l.stores,f===null?l.stores=[s]:f.push(s))}function qb(s,l,f,y){l.value=f,l.getSnapshot=y,Wb(l)&&Yb(s)}function Gb(s,l,f){return f(function(){Wb(l)&&Yb(s)})}function Wb(s){var l=s.getSnapshot;s=s.value;try{var f=l();return!ei(s,f)}catch{return!0}}function Yb(s){var l=Do(s,2);l!==null&&Yr(l,s,2)}function th(s){var l=Br();if(typeof s=="function"){var f=s;if(s=f(),Vo){We(!0);try{f()}finally{We(!1)}}}return l.memoizedState=l.baseState=s,l.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:_s,lastRenderedState:s},l}function Xb(s,l,f,y){return s.baseState=f,Jp(s,kn,typeof y=="function"?y:_s)}function AA(s,l,f,y,_){if(Sd(s))throw Error(r(485));if(s=l.action,s!==null){var E={payload:_,action:s,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(F){E.listeners.push(F)}};H.T!==null?f(!0):E.isTransition=!1,y(E),f=l.pending,f===null?(E.next=l.pending=E,Kb(l,E)):(E.next=f.next,l.pending=f.next=E)}}function Kb(s,l){var f=l.action,y=l.payload,_=s.state;if(l.isTransition){var E=H.T,F={};H.T=F;try{var X=f(_,y),re=H.S;re!==null&&re(F,X),Zb(s,l,X)}catch(ye){nh(s,l,ye)}finally{E!==null&&F.types!==null&&(E.types=F.types),H.T=E}}else try{E=f(_,y),Zb(s,l,E)}catch(ye){nh(s,l,ye)}}function Zb(s,l,f){f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(function(y){Qb(s,l,y)},function(y){return nh(s,l,y)}):Qb(s,l,f)}function Qb(s,l,f){l.status="fulfilled",l.value=f,Jb(l),s.state=f,l=s.pending,l!==null&&(f=l.next,f===l?s.pending=null:(f=f.next,l.next=f,Kb(s,f)))}function nh(s,l,f){var y=s.pending;if(s.pending=null,y!==null){y=y.next;do l.status="rejected",l.reason=f,Jb(l),l=l.next;while(l!==y)}s.action=null}function Jb(s){s=s.listeners;for(var l=0;l<s.length;l++)(0,s[l])()}function e1(s,l){return l}function t1(s,l){if(Zt){var f=jn.formState;if(f!==null){e:{var y=Nt;if(Zt){if(Dn){t:{for(var _=Dn,E=_i;_.nodeType!==8;){if(!E){_=null;break t}if(_=Si(_.nextSibling),_===null){_=null;break t}}E=_.data,_=E==="F!"||E==="F"?_:null}if(_){Dn=Si(_.nextSibling),y=_.data==="F!";break e}}Gs(y)}y=!1}y&&(l=f[0])}}return f=Br(),f.memoizedState=f.baseState=l,y={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e1,lastRenderedState:l},f.queue=y,f=b1.bind(null,Nt,y),y.dispatch=f,y=th(!1),E=lh.bind(null,Nt,!1,y.queue),y=Br(),_={state:l,dispatch:null,action:s,pending:null},y.queue=_,f=AA.bind(null,Nt,_,E,f),_.dispatch=f,y.memoizedState=s,[l,f,!1]}function n1(s){var l=Jn();return r1(l,kn,s)}function r1(s,l,f){if(l=Jp(s,l,e1)[0],s=bd(_s)[0],typeof l=="object"&&l!==null&&typeof l.then=="function")try{var y=fc(l)}catch(F){throw F===Ea?ud:F}else y=l;l=Jn();var _=l.queue,E=_.dispatch;return f!==l.memoizedState&&(Nt.flags|=2048,Aa(9,{destroy:void 0},MA.bind(null,_,f),null)),[y,E,s]}function MA(s,l){s.action=l}function i1(s){var l=Jn(),f=kn;if(f!==null)return r1(l,f,s);Jn(),l=l.memoizedState,f=Jn();var y=f.queue.dispatch;return f.memoizedState=s,[l,y,!1]}function Aa(s,l,f,y){return s={tag:s,create:f,deps:y,inst:l,next:null},l=Nt.updateQueue,l===null&&(l=xd(),Nt.updateQueue=l),f=l.lastEffect,f===null?l.lastEffect=s.next=s:(y=f.next,f.next=s,s.next=y,l.lastEffect=s),s}function s1(){return Jn().memoizedState}function _d(s,l,f,y){var _=Br();Nt.flags|=s,_.memoizedState=Aa(1|l,{destroy:void 0},f,y===void 0?null:y)}function kd(s,l,f,y){var _=Jn();y=y===void 0?null:y;var E=_.memoizedState.inst;kn!==null&&y!==null&&Wp(y,kn.memoizedState.deps)?_.memoizedState=Aa(l,E,f,y):(Nt.flags|=s,_.memoizedState=Aa(1|l,E,f,y))}function o1(s,l){_d(8390656,8,s,l)}function rh(s,l){kd(2048,8,s,l)}function DA(s){Nt.flags|=4;var l=Nt.updateQueue;if(l===null)l=xd(),Nt.updateQueue=l,l.events=[s];else{var f=l.events;f===null?l.events=[s]:f.push(s)}}function a1(s){var l=Jn().memoizedState;return DA({ref:l,nextImpl:s}),function(){if((pn&2)!==0)throw Error(r(440));return l.impl.apply(void 0,arguments)}}function l1(s,l){return kd(4,2,s,l)}function c1(s,l){return kd(4,4,s,l)}function u1(s,l){if(typeof l=="function"){s=s();var f=l(s);return function(){typeof f=="function"?f():l(null)}}if(l!=null)return s=s(),l.current=s,function(){l.current=null}}function d1(s,l,f){f=f!=null?f.concat([s]):null,kd(4,4,u1.bind(null,l,s),f)}function ih(){}function f1(s,l){var f=Jn();l=l===void 0?null:l;var y=f.memoizedState;return l!==null&&Wp(l,y[1])?y[0]:(f.memoizedState=[s,l],s)}function m1(s,l){var f=Jn();l=l===void 0?null:l;var y=f.memoizedState;if(l!==null&&Wp(l,y[1]))return y[0];if(y=s(),Vo){We(!0);try{s()}finally{We(!1)}}return f.memoizedState=[y,l],y}function sh(s,l,f){return f===void 0||(bs&1073741824)!==0&&(Gt&261930)===0?s.memoizedState=l:(s.memoizedState=f,s=p_(),Nt.lanes|=s,to|=s,f)}function p1(s,l,f,y){return ei(f,l)?f:Ia.current!==null?(s=sh(s,f,y),ei(s,l)||(or=!0),s):(bs&42)===0||(bs&1073741824)!==0&&(Gt&261930)===0?(or=!0,s.memoizedState=f):(s=p_(),Nt.lanes|=s,to|=s,l)}function h1(s,l,f,y,_){var E=U.p;U.p=E!==0&&8>E?E:8;var F=H.T,X={};H.T=X,lh(s,!1,l,f);try{var re=_(),ye=H.S;if(ye!==null&&ye(X,re),re!==null&&typeof re=="object"&&typeof re.then=="function"){var we=IA(re,y);mc(s,l,we,oi(s))}else mc(s,l,y,oi(s))}catch(Te){mc(s,l,{then:function(){},status:"rejected",reason:Te},oi())}finally{U.p=E,F!==null&&X.types!==null&&(F.types=X.types),H.T=F}}function OA(){}function oh(s,l,f,y){if(s.tag!==5)throw Error(r(476));var _=g1(s).queue;h1(s,_,l,Y,f===null?OA:function(){return y1(s),f(y)})}function g1(s){var l=s.memoizedState;if(l!==null)return l;l={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_s,lastRenderedState:Y},next:null};var f={};return l.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_s,lastRenderedState:f},next:null},s.memoizedState=l,s=s.alternate,s!==null&&(s.memoizedState=l),l}function y1(s){var l=g1(s);l.next===null&&(l=s.alternate.memoizedState),mc(s,l.next.queue,{},oi())}function ah(){return Er(Tc)}function x1(){return Jn().memoizedState}function v1(){return Jn().memoizedState}function LA(s){for(var l=s.return;l!==null;){switch(l.tag){case 24:case 3:var f=oi();s=Xs(f);var y=Ks(l,s,f);y!==null&&(Yr(y,l,f),lc(y,l,f)),l={cache:Lp()},s.payload=l;return}l=l.return}}function zA(s,l,f){var y=oi();f={lane:y,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null},Sd(s)?_1(l,f):(f=Cp(s,l,f,y),f!==null&&(Yr(f,s,y),k1(f,l,y)))}function b1(s,l,f){var y=oi();mc(s,l,f,y)}function mc(s,l,f,y){var _={lane:y,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null};if(Sd(s))_1(l,_);else{var E=s.alternate;if(s.lanes===0&&(E===null||E.lanes===0)&&(E=l.lastRenderedReducer,E!==null))try{var F=l.lastRenderedState,X=E(F,f);if(_.hasEagerState=!0,_.eagerState=X,ei(X,F))return rd(s,l,_,0),jn===null&&nd(),!1}catch{}if(f=Cp(s,l,_,y),f!==null)return Yr(f,s,y),k1(f,l,y),!0}return!1}function lh(s,l,f,y){if(y={lane:2,revertLane:$h(),gesture:null,action:y,hasEagerState:!1,eagerState:null,next:null},Sd(s)){if(l)throw Error(r(479))}else l=Cp(s,f,y,2),l!==null&&Yr(l,s,2)}function Sd(s){var l=s.alternate;return s===Nt||l!==null&&l===Nt}function _1(s,l){Ta=gd=!0;var f=s.pending;f===null?l.next=l:(l.next=f.next,f.next=l),s.pending=l}function k1(s,l,f){if((f&4194048)!==0){var y=l.lanes;y&=s.pendingLanes,f|=y,l.lanes=f,er(s,f)}}var pc={readContext:Er,use:vd,useCallback:Yn,useContext:Yn,useEffect:Yn,useImperativeHandle:Yn,useLayoutEffect:Yn,useInsertionEffect:Yn,useMemo:Yn,useReducer:Yn,useRef:Yn,useState:Yn,useDebugValue:Yn,useDeferredValue:Yn,useTransition:Yn,useSyncExternalStore:Yn,useId:Yn,useHostTransitionStatus:Yn,useFormState:Yn,useActionState:Yn,useOptimistic:Yn,useMemoCache:Yn,useCacheRefresh:Yn};pc.useEffectEvent=Yn;var S1={readContext:Er,use:vd,useCallback:function(s,l){return Br().memoizedState=[s,l===void 0?null:l],s},useContext:Er,useEffect:o1,useImperativeHandle:function(s,l,f){f=f!=null?f.concat([s]):null,_d(4194308,4,u1.bind(null,l,s),f)},useLayoutEffect:function(s,l){return _d(4194308,4,s,l)},useInsertionEffect:function(s,l){_d(4,2,s,l)},useMemo:function(s,l){var f=Br();l=l===void 0?null:l;var y=s();if(Vo){We(!0);try{s()}finally{We(!1)}}return f.memoizedState=[y,l],y},useReducer:function(s,l,f){var y=Br();if(f!==void 0){var _=f(l);if(Vo){We(!0);try{f(l)}finally{We(!1)}}}else _=l;return y.memoizedState=y.baseState=_,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:_},y.queue=s,s=s.dispatch=zA.bind(null,Nt,s),[y.memoizedState,s]},useRef:function(s){var l=Br();return s={current:s},l.memoizedState=s},useState:function(s){s=th(s);var l=s.queue,f=b1.bind(null,Nt,l);return l.dispatch=f,[s.memoizedState,f]},useDebugValue:ih,useDeferredValue:function(s,l){var f=Br();return sh(f,s,l)},useTransition:function(){var s=th(!1);return s=h1.bind(null,Nt,s.queue,!0,!1),Br().memoizedState=s,[!1,s]},useSyncExternalStore:function(s,l,f){var y=Nt,_=Br();if(Zt){if(f===void 0)throw Error(r(407));f=f()}else{if(f=l(),jn===null)throw Error(r(349));(Gt&127)!==0||Ub(y,l,f)}_.memoizedState=f;var E={value:f,getSnapshot:l};return _.queue=E,o1(Gb.bind(null,y,E,s),[s]),y.flags|=2048,Aa(9,{destroy:void 0},qb.bind(null,y,E,f,l),null),f},useId:function(){var s=Br(),l=jn.identifierPrefix;if(Zt){var f=Xi,y=Yi;f=(y&~(1<<32-Ze(y)-1)).toString(32)+f,l="_"+l+"R_"+f,f=yd++,0<f&&(l+="H"+f.toString(32)),l+="_"}else f=TA++,l="_"+l+"r_"+f.toString(32)+"_";return s.memoizedState=l},useHostTransitionStatus:ah,useFormState:t1,useActionState:t1,useOptimistic:function(s){var l=Br();l.memoizedState=l.baseState=s;var f={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return l.queue=f,l=lh.bind(null,Nt,!0,f),f.dispatch=l,[s,l]},useMemoCache:Qp,useCacheRefresh:function(){return Br().memoizedState=LA.bind(null,Nt)},useEffectEvent:function(s){var l=Br(),f={impl:s};return l.memoizedState=f,function(){if((pn&2)!==0)throw Error(r(440));return f.impl.apply(void 0,arguments)}}},ch={readContext:Er,use:vd,useCallback:f1,useContext:Er,useEffect:rh,useImperativeHandle:d1,useInsertionEffect:l1,useLayoutEffect:c1,useMemo:m1,useReducer:bd,useRef:s1,useState:function(){return bd(_s)},useDebugValue:ih,useDeferredValue:function(s,l){var f=Jn();return p1(f,kn.memoizedState,s,l)},useTransition:function(){var s=bd(_s)[0],l=Jn().memoizedState;return[typeof s=="boolean"?s:fc(s),l]},useSyncExternalStore:Vb,useId:x1,useHostTransitionStatus:ah,useFormState:n1,useActionState:n1,useOptimistic:function(s,l){var f=Jn();return Xb(f,kn,s,l)},useMemoCache:Qp,useCacheRefresh:v1};ch.useEffectEvent=a1;var w1={readContext:Er,use:vd,useCallback:f1,useContext:Er,useEffect:rh,useImperativeHandle:d1,useInsertionEffect:l1,useLayoutEffect:c1,useMemo:m1,useReducer:eh,useRef:s1,useState:function(){return eh(_s)},useDebugValue:ih,useDeferredValue:function(s,l){var f=Jn();return kn===null?sh(f,s,l):p1(f,kn.memoizedState,s,l)},useTransition:function(){var s=eh(_s)[0],l=Jn().memoizedState;return[typeof s=="boolean"?s:fc(s),l]},useSyncExternalStore:Vb,useId:x1,useHostTransitionStatus:ah,useFormState:i1,useActionState:i1,useOptimistic:function(s,l){var f=Jn();return kn!==null?Xb(f,kn,s,l):(f.baseState=s,[s,f.queue.dispatch])},useMemoCache:Qp,useCacheRefresh:v1};w1.useEffectEvent=a1;function uh(s,l,f,y){l=s.memoizedState,f=f(y,l),f=f==null?l:p({},l,f),s.memoizedState=f,s.lanes===0&&(s.updateQueue.baseState=f)}var dh={enqueueSetState:function(s,l,f){s=s._reactInternals;var y=oi(),_=Xs(y);_.payload=l,f!=null&&(_.callback=f),l=Ks(s,_,y),l!==null&&(Yr(l,s,y),lc(l,s,y))},enqueueReplaceState:function(s,l,f){s=s._reactInternals;var y=oi(),_=Xs(y);_.tag=1,_.payload=l,f!=null&&(_.callback=f),l=Ks(s,_,y),l!==null&&(Yr(l,s,y),lc(l,s,y))},enqueueForceUpdate:function(s,l){s=s._reactInternals;var f=oi(),y=Xs(f);y.tag=2,l!=null&&(y.callback=l),l=Ks(s,y,f),l!==null&&(Yr(l,s,f),lc(l,s,f))}};function C1(s,l,f,y,_,E,F){return s=s.stateNode,typeof s.shouldComponentUpdate=="function"?s.shouldComponentUpdate(y,E,F):l.prototype&&l.prototype.isPureReactComponent?!ec(f,y)||!ec(_,E):!0}function j1(s,l,f,y){s=l.state,typeof l.componentWillReceiveProps=="function"&&l.componentWillReceiveProps(f,y),typeof l.UNSAFE_componentWillReceiveProps=="function"&&l.UNSAFE_componentWillReceiveProps(f,y),l.state!==s&&dh.enqueueReplaceState(l,l.state,null)}function Uo(s,l){var f=l;if("ref"in l){f={};for(var y in l)y!=="ref"&&(f[y]=l[y])}if(s=s.defaultProps){f===l&&(f=p({},f));for(var _ in s)f[_]===void 0&&(f[_]=s[_])}return f}function E1(s){td(s)}function N1(s){console.error(s)}function I1(s){td(s)}function wd(s,l){try{var f=s.onUncaughtError;f(l.value,{componentStack:l.stack})}catch(y){setTimeout(function(){throw y})}}function T1(s,l,f){try{var y=s.onCaughtError;y(f.value,{componentStack:f.stack,errorBoundary:l.tag===1?l.stateNode:null})}catch(_){setTimeout(function(){throw _})}}function fh(s,l,f){return f=Xs(f),f.tag=3,f.payload={element:null},f.callback=function(){wd(s,l)},f}function R1(s){return s=Xs(s),s.tag=3,s}function A1(s,l,f,y){var _=f.type.getDerivedStateFromError;if(typeof _=="function"){var E=y.value;s.payload=function(){return _(E)},s.callback=function(){T1(l,f,y)}}var F=f.stateNode;F!==null&&typeof F.componentDidCatch=="function"&&(s.callback=function(){T1(l,f,y),typeof _!="function"&&(no===null?no=new Set([this]):no.add(this));var X=y.stack;this.componentDidCatch(y.value,{componentStack:X!==null?X:""})})}function PA(s,l,f,y,_){if(f.flags|=32768,y!==null&&typeof y=="object"&&typeof y.then=="function"){if(l=f.alternate,l!==null&&wa(l,f,_,!0),f=ni.current,f!==null){switch(f.tag){case 31:case 13:return ki===null?Ld():f.alternate===null&&Xn===0&&(Xn=3),f.flags&=-257,f.flags|=65536,f.lanes=_,y===dd?f.flags|=16384:(l=f.updateQueue,l===null?f.updateQueue=new Set([y]):l.add(y),zh(s,y,_)),!1;case 22:return f.flags|=65536,y===dd?f.flags|=16384:(l=f.updateQueue,l===null?(l={transitions:null,markerInstances:null,retryQueue:new Set([y])},f.updateQueue=l):(f=l.retryQueue,f===null?l.retryQueue=new Set([y]):f.add(y)),zh(s,y,_)),!1}throw Error(r(435,f.tag))}return zh(s,y,_),Ld(),!1}if(Zt)return l=ni.current,l!==null?((l.flags&65536)===0&&(l.flags|=256),l.flags|=65536,l.lanes=_,y!==Rp&&(s=Error(r(422),{cause:y}),rc(xi(s,f)))):(y!==Rp&&(l=Error(r(423),{cause:y}),rc(xi(l,f))),s=s.current.alternate,s.flags|=65536,_&=-_,s.lanes|=_,y=xi(y,f),_=fh(s.stateNode,y,_),Fp(s,_),Xn!==4&&(Xn=2)),!1;var E=Error(r(520),{cause:y});if(E=xi(E,f),kc===null?kc=[E]:kc.push(E),Xn!==4&&(Xn=2),l===null)return!0;y=xi(y,f),f=l;do{switch(f.tag){case 3:return f.flags|=65536,s=_&-_,f.lanes|=s,s=fh(f.stateNode,y,s),Fp(f,s),!1;case 1:if(l=f.type,E=f.stateNode,(f.flags&128)===0&&(typeof l.getDerivedStateFromError=="function"||E!==null&&typeof E.componentDidCatch=="function"&&(no===null||!no.has(E))))return f.flags|=65536,_&=-_,f.lanes|=_,_=R1(_),A1(_,s,f,y),Fp(f,_),!1}f=f.return}while(f!==null);return!1}var mh=Error(r(461)),or=!1;function Nr(s,l,f,y){l.child=s===null?Lb(l,null,f,y):Fo(l,s.child,f,y)}function M1(s,l,f,y,_){f=f.render;var E=l.ref;if("ref"in y){var F={};for(var X in y)X!=="ref"&&(F[X]=y[X])}else F=y;return Po(l),y=Yp(s,l,f,F,E,_),X=Xp(),s!==null&&!or?(Kp(s,l,_),ks(s,l,_)):(Zt&&X&&Ip(l),l.flags|=1,Nr(s,l,y,_),l.child)}function D1(s,l,f,y,_){if(s===null){var E=f.type;return typeof E=="function"&&!jp(E)&&E.defaultProps===void 0&&f.compare===null?(l.tag=15,l.type=E,O1(s,l,E,y,_)):(s=sd(f.type,null,y,l,l.mode,_),s.ref=l.ref,s.return=l,l.child=s)}if(E=s.child,!_h(s,_)){var F=E.memoizedProps;if(f=f.compare,f=f!==null?f:ec,f(F,y)&&s.ref===l.ref)return ks(s,l,_)}return l.flags|=1,s=gs(E,y),s.ref=l.ref,s.return=l,l.child=s}function O1(s,l,f,y,_){if(s!==null){var E=s.memoizedProps;if(ec(E,y)&&s.ref===l.ref)if(or=!1,l.pendingProps=y=E,_h(s,_))(s.flags&131072)!==0&&(or=!0);else return l.lanes=s.lanes,ks(s,l,_)}return ph(s,l,f,y,_)}function L1(s,l,f,y){var _=y.children,E=s!==null?s.memoizedState:null;if(s===null&&l.stateNode===null&&(l.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),y.mode==="hidden"){if((l.flags&128)!==0){if(E=E!==null?E.baseLanes|f:f,s!==null){for(y=l.child=s.child,_=0;y!==null;)_=_|y.lanes|y.childLanes,y=y.sibling;y=_&~E}else y=0,l.child=null;return z1(s,l,E,f,y)}if((f&536870912)!==0)l.memoizedState={baseLanes:0,cachePool:null},s!==null&&cd(l,E!==null?E.cachePool:null),E!==null?Bb(l,E):Up(),$b(l);else return y=l.lanes=536870912,z1(s,l,E!==null?E.baseLanes|f:f,f,y)}else E!==null?(cd(l,E.cachePool),Bb(l,E),Qs(),l.memoizedState=null):(s!==null&&cd(l,null),Up(),Qs());return Nr(s,l,_,f),l.child}function hc(s,l){return s!==null&&s.tag===22||l.stateNode!==null||(l.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),l.sibling}function z1(s,l,f,y,_){var E=Pp();return E=E===null?null:{parent:ir._currentValue,pool:E},l.memoizedState={baseLanes:f,cachePool:E},s!==null&&cd(l,null),Up(),$b(l),s!==null&&wa(s,l,y,!0),l.childLanes=_,null}function Cd(s,l){return l=Ed({mode:l.mode,children:l.children},s.mode),l.ref=s.ref,s.child=l,l.return=s,l}function P1(s,l,f){return Fo(l,s.child,null,f),s=Cd(l,l.pendingProps),s.flags|=2,ri(l),l.memoizedState=null,s}function BA(s,l,f){var y=l.pendingProps,_=(l.flags&128)!==0;if(l.flags&=-129,s===null){if(Zt){if(y.mode==="hidden")return s=Cd(l,y),l.lanes=536870912,hc(null,s);if(Gp(l),(s=Dn)?(s=K_(s,_i),s=s!==null&&s.data==="&"?s:null,s!==null&&(l.memoizedState={dehydrated:s,treeContext:Us!==null?{id:Yi,overflow:Xi}:null,retryLane:536870912,hydrationErrors:null},f=_b(s),f.return=l,l.child=f,jr=l,Dn=null)):s=null,s===null)throw Gs(l);return l.lanes=536870912,null}return Cd(l,y)}var E=s.memoizedState;if(E!==null){var F=E.dehydrated;if(Gp(l),_)if(l.flags&256)l.flags&=-257,l=P1(s,l,f);else if(l.memoizedState!==null)l.child=s.child,l.flags|=128,l=null;else throw Error(r(558));else if(or||wa(s,l,f,!1),_=(f&s.childLanes)!==0,or||_){if(y=jn,y!==null&&(F=Tn(y,f),F!==0&&F!==E.retryLane))throw E.retryLane=F,Do(s,F),Yr(y,s,F),mh;Ld(),l=P1(s,l,f)}else s=E.treeContext,Dn=Si(F.nextSibling),jr=l,Zt=!0,qs=null,_i=!1,s!==null&&wb(l,s),l=Cd(l,y),l.flags|=4096;return l}return s=gs(s.child,{mode:y.mode,children:y.children}),s.ref=l.ref,l.child=s,s.return=l,s}function jd(s,l){var f=l.ref;if(f===null)s!==null&&s.ref!==null&&(l.flags|=4194816);else{if(typeof f!="function"&&typeof f!="object")throw Error(r(284));(s===null||s.ref!==f)&&(l.flags|=4194816)}}function ph(s,l,f,y,_){return Po(l),f=Yp(s,l,f,y,void 0,_),y=Xp(),s!==null&&!or?(Kp(s,l,_),ks(s,l,_)):(Zt&&y&&Ip(l),l.flags|=1,Nr(s,l,f,_),l.child)}function B1(s,l,f,y,_,E){return Po(l),l.updateQueue=null,f=Fb(l,y,f,_),Hb(s),y=Xp(),s!==null&&!or?(Kp(s,l,E),ks(s,l,E)):(Zt&&y&&Ip(l),l.flags|=1,Nr(s,l,f,E),l.child)}function $1(s,l,f,y,_){if(Po(l),l.stateNode===null){var E=ba,F=f.contextType;typeof F=="object"&&F!==null&&(E=Er(F)),E=new f(y,E),l.memoizedState=E.state!==null&&E.state!==void 0?E.state:null,E.updater=dh,l.stateNode=E,E._reactInternals=l,E=l.stateNode,E.props=y,E.state=l.memoizedState,E.refs={},$p(l),F=f.contextType,E.context=typeof F=="object"&&F!==null?Er(F):ba,E.state=l.memoizedState,F=f.getDerivedStateFromProps,typeof F=="function"&&(uh(l,f,F,y),E.state=l.memoizedState),typeof f.getDerivedStateFromProps=="function"||typeof E.getSnapshotBeforeUpdate=="function"||typeof E.UNSAFE_componentWillMount!="function"&&typeof E.componentWillMount!="function"||(F=E.state,typeof E.componentWillMount=="function"&&E.componentWillMount(),typeof E.UNSAFE_componentWillMount=="function"&&E.UNSAFE_componentWillMount(),F!==E.state&&dh.enqueueReplaceState(E,E.state,null),uc(l,y,E,_),cc(),E.state=l.memoizedState),typeof E.componentDidMount=="function"&&(l.flags|=4194308),y=!0}else if(s===null){E=l.stateNode;var X=l.memoizedProps,re=Uo(f,X);E.props=re;var ye=E.context,we=f.contextType;F=ba,typeof we=="object"&&we!==null&&(F=Er(we));var Te=f.getDerivedStateFromProps;we=typeof Te=="function"||typeof E.getSnapshotBeforeUpdate=="function",X=l.pendingProps!==X,we||typeof E.UNSAFE_componentWillReceiveProps!="function"&&typeof E.componentWillReceiveProps!="function"||(X||ye!==F)&&j1(l,E,y,F),Ys=!1;var xe=l.memoizedState;E.state=xe,uc(l,y,E,_),cc(),ye=l.memoizedState,X||xe!==ye||Ys?(typeof Te=="function"&&(uh(l,f,Te,y),ye=l.memoizedState),(re=Ys||C1(l,f,re,y,xe,ye,F))?(we||typeof E.UNSAFE_componentWillMount!="function"&&typeof E.componentWillMount!="function"||(typeof E.componentWillMount=="function"&&E.componentWillMount(),typeof E.UNSAFE_componentWillMount=="function"&&E.UNSAFE_componentWillMount()),typeof E.componentDidMount=="function"&&(l.flags|=4194308)):(typeof E.componentDidMount=="function"&&(l.flags|=4194308),l.memoizedProps=y,l.memoizedState=ye),E.props=y,E.state=ye,E.context=F,y=re):(typeof E.componentDidMount=="function"&&(l.flags|=4194308),y=!1)}else{E=l.stateNode,Hp(s,l),F=l.memoizedProps,we=Uo(f,F),E.props=we,Te=l.pendingProps,xe=E.context,ye=f.contextType,re=ba,typeof ye=="object"&&ye!==null&&(re=Er(ye)),X=f.getDerivedStateFromProps,(ye=typeof X=="function"||typeof E.getSnapshotBeforeUpdate=="function")||typeof E.UNSAFE_componentWillReceiveProps!="function"&&typeof E.componentWillReceiveProps!="function"||(F!==Te||xe!==re)&&j1(l,E,y,re),Ys=!1,xe=l.memoizedState,E.state=xe,uc(l,y,E,_),cc();var _e=l.memoizedState;F!==Te||xe!==_e||Ys||s!==null&&s.dependencies!==null&&ad(s.dependencies)?(typeof X=="function"&&(uh(l,f,X,y),_e=l.memoizedState),(we=Ys||C1(l,f,we,y,xe,_e,re)||s!==null&&s.dependencies!==null&&ad(s.dependencies))?(ye||typeof E.UNSAFE_componentWillUpdate!="function"&&typeof E.componentWillUpdate!="function"||(typeof E.componentWillUpdate=="function"&&E.componentWillUpdate(y,_e,re),typeof E.UNSAFE_componentWillUpdate=="function"&&E.UNSAFE_componentWillUpdate(y,_e,re)),typeof E.componentDidUpdate=="function"&&(l.flags|=4),typeof E.getSnapshotBeforeUpdate=="function"&&(l.flags|=1024)):(typeof E.componentDidUpdate!="function"||F===s.memoizedProps&&xe===s.memoizedState||(l.flags|=4),typeof E.getSnapshotBeforeUpdate!="function"||F===s.memoizedProps&&xe===s.memoizedState||(l.flags|=1024),l.memoizedProps=y,l.memoizedState=_e),E.props=y,E.state=_e,E.context=re,y=we):(typeof E.componentDidUpdate!="function"||F===s.memoizedProps&&xe===s.memoizedState||(l.flags|=4),typeof E.getSnapshotBeforeUpdate!="function"||F===s.memoizedProps&&xe===s.memoizedState||(l.flags|=1024),y=!1)}return E=y,jd(s,l),y=(l.flags&128)!==0,E||y?(E=l.stateNode,f=y&&typeof f.getDerivedStateFromError!="function"?null:E.render(),l.flags|=1,s!==null&&y?(l.child=Fo(l,s.child,null,_),l.child=Fo(l,null,f,_)):Nr(s,l,f,_),l.memoizedState=E.state,s=l.child):s=ks(s,l,_),s}function H1(s,l,f,y){return Lo(),l.flags|=256,Nr(s,l,f,y),l.child}var hh={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function gh(s){return{baseLanes:s,cachePool:Tb()}}function yh(s,l,f){return s=s!==null?s.childLanes&~f:0,l&&(s|=si),s}function F1(s,l,f){var y=l.pendingProps,_=!1,E=(l.flags&128)!==0,F;if((F=E)||(F=s!==null&&s.memoizedState===null?!1:(Qn.current&2)!==0),F&&(_=!0,l.flags&=-129),F=(l.flags&32)!==0,l.flags&=-33,s===null){if(Zt){if(_?Zs(l):Qs(),(s=Dn)?(s=K_(s,_i),s=s!==null&&s.data!=="&"?s:null,s!==null&&(l.memoizedState={dehydrated:s,treeContext:Us!==null?{id:Yi,overflow:Xi}:null,retryLane:536870912,hydrationErrors:null},f=_b(s),f.return=l,l.child=f,jr=l,Dn=null)):s=null,s===null)throw Gs(l);return Jh(s)?l.lanes=32:l.lanes=536870912,null}var X=y.children;return y=y.fallback,_?(Qs(),_=l.mode,X=Ed({mode:"hidden",children:X},_),y=Oo(y,_,f,null),X.return=l,y.return=l,X.sibling=y,l.child=X,y=l.child,y.memoizedState=gh(f),y.childLanes=yh(s,F,f),l.memoizedState=hh,hc(null,y)):(Zs(l),xh(l,X))}var re=s.memoizedState;if(re!==null&&(X=re.dehydrated,X!==null)){if(E)l.flags&256?(Zs(l),l.flags&=-257,l=vh(s,l,f)):l.memoizedState!==null?(Qs(),l.child=s.child,l.flags|=128,l=null):(Qs(),X=y.fallback,_=l.mode,y=Ed({mode:"visible",children:y.children},_),X=Oo(X,_,f,null),X.flags|=2,y.return=l,X.return=l,y.sibling=X,l.child=y,Fo(l,s.child,null,f),y=l.child,y.memoizedState=gh(f),y.childLanes=yh(s,F,f),l.memoizedState=hh,l=hc(null,y));else if(Zs(l),Jh(X)){if(F=X.nextSibling&&X.nextSibling.dataset,F)var ye=F.dgst;F=ye,y=Error(r(419)),y.stack="",y.digest=F,rc({value:y,source:null,stack:null}),l=vh(s,l,f)}else if(or||wa(s,l,f,!1),F=(f&s.childLanes)!==0,or||F){if(F=jn,F!==null&&(y=Tn(F,f),y!==0&&y!==re.retryLane))throw re.retryLane=y,Do(s,y),Yr(F,s,y),mh;Qh(X)||Ld(),l=vh(s,l,f)}else Qh(X)?(l.flags|=192,l.child=s.child,l=null):(s=re.treeContext,Dn=Si(X.nextSibling),jr=l,Zt=!0,qs=null,_i=!1,s!==null&&wb(l,s),l=xh(l,y.children),l.flags|=4096);return l}return _?(Qs(),X=y.fallback,_=l.mode,re=s.child,ye=re.sibling,y=gs(re,{mode:"hidden",children:y.children}),y.subtreeFlags=re.subtreeFlags&65011712,ye!==null?X=gs(ye,X):(X=Oo(X,_,f,null),X.flags|=2),X.return=l,y.return=l,y.sibling=X,l.child=y,hc(null,y),y=l.child,X=s.child.memoizedState,X===null?X=gh(f):(_=X.cachePool,_!==null?(re=ir._currentValue,_=_.parent!==re?{parent:re,pool:re}:_):_=Tb(),X={baseLanes:X.baseLanes|f,cachePool:_}),y.memoizedState=X,y.childLanes=yh(s,F,f),l.memoizedState=hh,hc(s.child,y)):(Zs(l),f=s.child,s=f.sibling,f=gs(f,{mode:"visible",children:y.children}),f.return=l,f.sibling=null,s!==null&&(F=l.deletions,F===null?(l.deletions=[s],l.flags|=16):F.push(s)),l.child=f,l.memoizedState=null,f)}function xh(s,l){return l=Ed({mode:"visible",children:l},s.mode),l.return=s,s.child=l}function Ed(s,l){return s=ti(22,s,null,l),s.lanes=0,s}function vh(s,l,f){return Fo(l,s.child,null,f),s=xh(l,l.pendingProps.children),s.flags|=2,l.memoizedState=null,s}function V1(s,l,f){s.lanes|=l;var y=s.alternate;y!==null&&(y.lanes|=l),Dp(s.return,l,f)}function bh(s,l,f,y,_,E){var F=s.memoizedState;F===null?s.memoizedState={isBackwards:l,rendering:null,renderingStartTime:0,last:y,tail:f,tailMode:_,treeForkCount:E}:(F.isBackwards=l,F.rendering=null,F.renderingStartTime=0,F.last=y,F.tail=f,F.tailMode=_,F.treeForkCount=E)}function U1(s,l,f){var y=l.pendingProps,_=y.revealOrder,E=y.tail;y=y.children;var F=Qn.current,X=(F&2)!==0;if(X?(F=F&1|2,l.flags|=128):F&=1,P(Qn,F),Nr(s,l,y,f),y=Zt?nc:0,!X&&s!==null&&(s.flags&128)!==0)e:for(s=l.child;s!==null;){if(s.tag===13)s.memoizedState!==null&&V1(s,f,l);else if(s.tag===19)V1(s,f,l);else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===l)break e;for(;s.sibling===null;){if(s.return===null||s.return===l)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}switch(_){case"forwards":for(f=l.child,_=null;f!==null;)s=f.alternate,s!==null&&hd(s)===null&&(_=f),f=f.sibling;f=_,f===null?(_=l.child,l.child=null):(_=f.sibling,f.sibling=null),bh(l,!1,_,f,E,y);break;case"backwards":case"unstable_legacy-backwards":for(f=null,_=l.child,l.child=null;_!==null;){if(s=_.alternate,s!==null&&hd(s)===null){l.child=_;break}s=_.sibling,_.sibling=f,f=_,_=s}bh(l,!0,f,null,E,y);break;case"together":bh(l,!1,null,null,void 0,y);break;default:l.memoizedState=null}return l.child}function ks(s,l,f){if(s!==null&&(l.dependencies=s.dependencies),to|=l.lanes,(f&l.childLanes)===0)if(s!==null){if(wa(s,l,f,!1),(f&l.childLanes)===0)return null}else return null;if(s!==null&&l.child!==s.child)throw Error(r(153));if(l.child!==null){for(s=l.child,f=gs(s,s.pendingProps),l.child=f,f.return=l;s.sibling!==null;)s=s.sibling,f=f.sibling=gs(s,s.pendingProps),f.return=l;f.sibling=null}return l.child}function _h(s,l){return(s.lanes&l)!==0?!0:(s=s.dependencies,!!(s!==null&&ad(s)))}function $A(s,l,f){switch(l.tag){case 3:se(l,l.stateNode.containerInfo),Ws(l,ir,s.memoizedState.cache),Lo();break;case 27:case 5:oe(l);break;case 4:se(l,l.stateNode.containerInfo);break;case 10:Ws(l,l.type,l.memoizedProps.value);break;case 31:if(l.memoizedState!==null)return l.flags|=128,Gp(l),null;break;case 13:var y=l.memoizedState;if(y!==null)return y.dehydrated!==null?(Zs(l),l.flags|=128,null):(f&l.child.childLanes)!==0?F1(s,l,f):(Zs(l),s=ks(s,l,f),s!==null?s.sibling:null);Zs(l);break;case 19:var _=(s.flags&128)!==0;if(y=(f&l.childLanes)!==0,y||(wa(s,l,f,!1),y=(f&l.childLanes)!==0),_){if(y)return U1(s,l,f);l.flags|=128}if(_=l.memoizedState,_!==null&&(_.rendering=null,_.tail=null,_.lastEffect=null),P(Qn,Qn.current),y)break;return null;case 22:return l.lanes=0,L1(s,l,f,l.pendingProps);case 24:Ws(l,ir,s.memoizedState.cache)}return ks(s,l,f)}function q1(s,l,f){if(s!==null)if(s.memoizedProps!==l.pendingProps)or=!0;else{if(!_h(s,f)&&(l.flags&128)===0)return or=!1,$A(s,l,f);or=(s.flags&131072)!==0}else or=!1,Zt&&(l.flags&1048576)!==0&&Sb(l,nc,l.index);switch(l.lanes=0,l.tag){case 16:e:{var y=l.pendingProps;if(s=$o(l.elementType),l.type=s,typeof s=="function")jp(s)?(y=Uo(s,y),l.tag=1,l=$1(null,l,s,y,f)):(l.tag=0,l=ph(null,l,s,y,f));else{if(s!=null){var _=s.$$typeof;if(_===N){l.tag=11,l=M1(null,l,s,y,f);break e}else if(_===L){l.tag=14,l=D1(null,l,s,y,f);break e}}throw l=B(s)||s,Error(r(306,l,""))}}return l;case 0:return ph(s,l,l.type,l.pendingProps,f);case 1:return y=l.type,_=Uo(y,l.pendingProps),$1(s,l,y,_,f);case 3:e:{if(se(l,l.stateNode.containerInfo),s===null)throw Error(r(387));y=l.pendingProps;var E=l.memoizedState;_=E.element,Hp(s,l),uc(l,y,null,f);var F=l.memoizedState;if(y=F.cache,Ws(l,ir,y),y!==E.cache&&Op(l,[ir],f,!0),cc(),y=F.element,E.isDehydrated)if(E={element:y,isDehydrated:!1,cache:F.cache},l.updateQueue.baseState=E,l.memoizedState=E,l.flags&256){l=H1(s,l,y,f);break e}else if(y!==_){_=xi(Error(r(424)),l),rc(_),l=H1(s,l,y,f);break e}else for(s=l.stateNode.containerInfo,s.nodeType===9?s=s.body:s=s.nodeName==="HTML"?s.ownerDocument.body:s,Dn=Si(s.firstChild),jr=l,Zt=!0,qs=null,_i=!0,f=Lb(l,null,y,f),l.child=f;f;)f.flags=f.flags&-3|4096,f=f.sibling;else{if(Lo(),y===_){l=ks(s,l,f);break e}Nr(s,l,y,f)}l=l.child}return l;case 26:return jd(s,l),s===null?(f=nk(l.type,null,l.pendingProps,null))?l.memoizedState=f:Zt||(f=l.type,s=l.pendingProps,y=Vd(te.current).createElement(f),y[Jt]=l,y[Vt]=s,Ir(y,f,s),Ut(y),l.stateNode=y):l.memoizedState=nk(l.type,s.memoizedProps,l.pendingProps,s.memoizedState),null;case 27:return oe(l),s===null&&Zt&&(y=l.stateNode=J_(l.type,l.pendingProps,te.current),jr=l,_i=!0,_=Dn,oo(l.type)?(eg=_,Dn=Si(y.firstChild)):Dn=_),Nr(s,l,l.pendingProps.children,f),jd(s,l),s===null&&(l.flags|=4194304),l.child;case 5:return s===null&&Zt&&((_=y=Dn)&&(y=g3(y,l.type,l.pendingProps,_i),y!==null?(l.stateNode=y,jr=l,Dn=Si(y.firstChild),_i=!1,_=!0):_=!1),_||Gs(l)),oe(l),_=l.type,E=l.pendingProps,F=s!==null?s.memoizedProps:null,y=E.children,Xh(_,E)?y=null:F!==null&&Xh(_,F)&&(l.flags|=32),l.memoizedState!==null&&(_=Yp(s,l,RA,null,null,f),Tc._currentValue=_),jd(s,l),Nr(s,l,y,f),l.child;case 6:return s===null&&Zt&&((s=f=Dn)&&(f=y3(f,l.pendingProps,_i),f!==null?(l.stateNode=f,jr=l,Dn=null,s=!0):s=!1),s||Gs(l)),null;case 13:return F1(s,l,f);case 4:return se(l,l.stateNode.containerInfo),y=l.pendingProps,s===null?l.child=Fo(l,null,y,f):Nr(s,l,y,f),l.child;case 11:return M1(s,l,l.type,l.pendingProps,f);case 7:return Nr(s,l,l.pendingProps,f),l.child;case 8:return Nr(s,l,l.pendingProps.children,f),l.child;case 12:return Nr(s,l,l.pendingProps.children,f),l.child;case 10:return y=l.pendingProps,Ws(l,l.type,y.value),Nr(s,l,y.children,f),l.child;case 9:return _=l.type._context,y=l.pendingProps.children,Po(l),_=Er(_),y=y(_),l.flags|=1,Nr(s,l,y,f),l.child;case 14:return D1(s,l,l.type,l.pendingProps,f);case 15:return O1(s,l,l.type,l.pendingProps,f);case 19:return U1(s,l,f);case 31:return BA(s,l,f);case 22:return L1(s,l,f,l.pendingProps);case 24:return Po(l),y=Er(ir),s===null?(_=Pp(),_===null&&(_=jn,E=Lp(),_.pooledCache=E,E.refCount++,E!==null&&(_.pooledCacheLanes|=f),_=E),l.memoizedState={parent:y,cache:_},$p(l),Ws(l,ir,_)):((s.lanes&f)!==0&&(Hp(s,l),uc(l,null,null,f),cc()),_=s.memoizedState,E=l.memoizedState,_.parent!==y?(_={parent:y,cache:y},l.memoizedState=_,l.lanes===0&&(l.memoizedState=l.updateQueue.baseState=_),Ws(l,ir,y)):(y=E.cache,Ws(l,ir,y),y!==_.cache&&Op(l,[ir],f,!0))),Nr(s,l,l.pendingProps.children,f),l.child;case 29:throw l.pendingProps}throw Error(r(156,l.tag))}function Ss(s){s.flags|=4}function kh(s,l,f,y,_){if((l=(s.mode&32)!==0)&&(l=!1),l){if(s.flags|=16777216,(_&335544128)===_)if(s.stateNode.complete)s.flags|=8192;else if(x_())s.flags|=8192;else throw Ho=dd,Bp}else s.flags&=-16777217}function G1(s,l){if(l.type!=="stylesheet"||(l.state.loading&4)!==0)s.flags&=-16777217;else if(s.flags|=16777216,!ak(l))if(x_())s.flags|=8192;else throw Ho=dd,Bp}function Nd(s,l){l!==null&&(s.flags|=4),s.flags&16384&&(l=s.tag!==22?Ye():536870912,s.lanes|=l,La|=l)}function gc(s,l){if(!Zt)switch(s.tailMode){case"hidden":l=s.tail;for(var f=null;l!==null;)l.alternate!==null&&(f=l),l=l.sibling;f===null?s.tail=null:f.sibling=null;break;case"collapsed":f=s.tail;for(var y=null;f!==null;)f.alternate!==null&&(y=f),f=f.sibling;y===null?l||s.tail===null?s.tail=null:s.tail.sibling=null:y.sibling=null}}function On(s){var l=s.alternate!==null&&s.alternate.child===s.child,f=0,y=0;if(l)for(var _=s.child;_!==null;)f|=_.lanes|_.childLanes,y|=_.subtreeFlags&65011712,y|=_.flags&65011712,_.return=s,_=_.sibling;else for(_=s.child;_!==null;)f|=_.lanes|_.childLanes,y|=_.subtreeFlags,y|=_.flags,_.return=s,_=_.sibling;return s.subtreeFlags|=y,s.childLanes=f,l}function HA(s,l,f){var y=l.pendingProps;switch(Tp(l),l.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return On(l),null;case 1:return On(l),null;case 3:return f=l.stateNode,y=null,s!==null&&(y=s.memoizedState.cache),l.memoizedState.cache!==y&&(l.flags|=2048),vs(ir),de(),f.pendingContext&&(f.context=f.pendingContext,f.pendingContext=null),(s===null||s.child===null)&&(Sa(l)?Ss(l):s===null||s.memoizedState.isDehydrated&&(l.flags&256)===0||(l.flags|=1024,Ap())),On(l),null;case 26:var _=l.type,E=l.memoizedState;return s===null?(Ss(l),E!==null?(On(l),G1(l,E)):(On(l),kh(l,_,null,y,f))):E?E!==s.memoizedState?(Ss(l),On(l),G1(l,E)):(On(l),l.flags&=-16777217):(s=s.memoizedProps,s!==y&&Ss(l),On(l),kh(l,_,s,y,f)),null;case 27:if(Ne(l),f=te.current,_=l.type,s!==null&&l.stateNode!=null)s.memoizedProps!==y&&Ss(l);else{if(!y){if(l.stateNode===null)throw Error(r(166));return On(l),null}s=K.current,Sa(l)?Cb(l):(s=J_(_,y,f),l.stateNode=s,Ss(l))}return On(l),null;case 5:if(Ne(l),_=l.type,s!==null&&l.stateNode!=null)s.memoizedProps!==y&&Ss(l);else{if(!y){if(l.stateNode===null)throw Error(r(166));return On(l),null}if(E=K.current,Sa(l))Cb(l);else{var F=Vd(te.current);switch(E){case 1:E=F.createElementNS("http://www.w3.org/2000/svg",_);break;case 2:E=F.createElementNS("http://www.w3.org/1998/Math/MathML",_);break;default:switch(_){case"svg":E=F.createElementNS("http://www.w3.org/2000/svg",_);break;case"math":E=F.createElementNS("http://www.w3.org/1998/Math/MathML",_);break;case"script":E=F.createElement("div"),E.innerHTML="<script><\/script>",E=E.removeChild(E.firstChild);break;case"select":E=typeof y.is=="string"?F.createElement("select",{is:y.is}):F.createElement("select"),y.multiple?E.multiple=!0:y.size&&(E.size=y.size);break;default:E=typeof y.is=="string"?F.createElement(_,{is:y.is}):F.createElement(_)}}E[Jt]=l,E[Vt]=y;e:for(F=l.child;F!==null;){if(F.tag===5||F.tag===6)E.appendChild(F.stateNode);else if(F.tag!==4&&F.tag!==27&&F.child!==null){F.child.return=F,F=F.child;continue}if(F===l)break e;for(;F.sibling===null;){if(F.return===null||F.return===l)break e;F=F.return}F.sibling.return=F.return,F=F.sibling}l.stateNode=E;e:switch(Ir(E,_,y),_){case"button":case"input":case"select":case"textarea":y=!!y.autoFocus;break e;case"img":y=!0;break e;default:y=!1}y&&Ss(l)}}return On(l),kh(l,l.type,s===null?null:s.memoizedProps,l.pendingProps,f),null;case 6:if(s&&l.stateNode!=null)s.memoizedProps!==y&&Ss(l);else{if(typeof y!="string"&&l.stateNode===null)throw Error(r(166));if(s=te.current,Sa(l)){if(s=l.stateNode,f=l.memoizedProps,y=null,_=jr,_!==null)switch(_.tag){case 27:case 5:y=_.memoizedProps}s[Jt]=l,s=!!(s.nodeValue===f||y!==null&&y.suppressHydrationWarning===!0||F_(s.nodeValue,f)),s||Gs(l,!0)}else s=Vd(s).createTextNode(y),s[Jt]=l,l.stateNode=s}return On(l),null;case 31:if(f=l.memoizedState,s===null||s.memoizedState!==null){if(y=Sa(l),f!==null){if(s===null){if(!y)throw Error(r(318));if(s=l.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(r(557));s[Jt]=l}else Lo(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;On(l),s=!1}else f=Ap(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=f),s=!0;if(!s)return l.flags&256?(ri(l),l):(ri(l),null);if((l.flags&128)!==0)throw Error(r(558))}return On(l),null;case 13:if(y=l.memoizedState,s===null||s.memoizedState!==null&&s.memoizedState.dehydrated!==null){if(_=Sa(l),y!==null&&y.dehydrated!==null){if(s===null){if(!_)throw Error(r(318));if(_=l.memoizedState,_=_!==null?_.dehydrated:null,!_)throw Error(r(317));_[Jt]=l}else Lo(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;On(l),_=!1}else _=Ap(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=_),_=!0;if(!_)return l.flags&256?(ri(l),l):(ri(l),null)}return ri(l),(l.flags&128)!==0?(l.lanes=f,l):(f=y!==null,s=s!==null&&s.memoizedState!==null,f&&(y=l.child,_=null,y.alternate!==null&&y.alternate.memoizedState!==null&&y.alternate.memoizedState.cachePool!==null&&(_=y.alternate.memoizedState.cachePool.pool),E=null,y.memoizedState!==null&&y.memoizedState.cachePool!==null&&(E=y.memoizedState.cachePool.pool),E!==_&&(y.flags|=2048)),f!==s&&f&&(l.child.flags|=8192),Nd(l,l.updateQueue),On(l),null);case 4:return de(),s===null&&Uh(l.stateNode.containerInfo),On(l),null;case 10:return vs(l.type),On(l),null;case 19:if(J(Qn),y=l.memoizedState,y===null)return On(l),null;if(_=(l.flags&128)!==0,E=y.rendering,E===null)if(_)gc(y,!1);else{if(Xn!==0||s!==null&&(s.flags&128)!==0)for(s=l.child;s!==null;){if(E=hd(s),E!==null){for(l.flags|=128,gc(y,!1),s=E.updateQueue,l.updateQueue=s,Nd(l,s),l.subtreeFlags=0,s=f,f=l.child;f!==null;)bb(f,s),f=f.sibling;return P(Qn,Qn.current&1|2),Zt&&ys(l,y.treeForkCount),l.child}s=s.sibling}y.tail!==null&&tt()>Md&&(l.flags|=128,_=!0,gc(y,!1),l.lanes=4194304)}else{if(!_)if(s=hd(E),s!==null){if(l.flags|=128,_=!0,s=s.updateQueue,l.updateQueue=s,Nd(l,s),gc(y,!0),y.tail===null&&y.tailMode==="hidden"&&!E.alternate&&!Zt)return On(l),null}else 2*tt()-y.renderingStartTime>Md&&f!==536870912&&(l.flags|=128,_=!0,gc(y,!1),l.lanes=4194304);y.isBackwards?(E.sibling=l.child,l.child=E):(s=y.last,s!==null?s.sibling=E:l.child=E,y.last=E)}return y.tail!==null?(s=y.tail,y.rendering=s,y.tail=s.sibling,y.renderingStartTime=tt(),s.sibling=null,f=Qn.current,P(Qn,_?f&1|2:f&1),Zt&&ys(l,y.treeForkCount),s):(On(l),null);case 22:case 23:return ri(l),qp(),y=l.memoizedState!==null,s!==null?s.memoizedState!==null!==y&&(l.flags|=8192):y&&(l.flags|=8192),y?(f&536870912)!==0&&(l.flags&128)===0&&(On(l),l.subtreeFlags&6&&(l.flags|=8192)):On(l),f=l.updateQueue,f!==null&&Nd(l,f.retryQueue),f=null,s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(f=s.memoizedState.cachePool.pool),y=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(y=l.memoizedState.cachePool.pool),y!==f&&(l.flags|=2048),s!==null&&J(Bo),null;case 24:return f=null,s!==null&&(f=s.memoizedState.cache),l.memoizedState.cache!==f&&(l.flags|=2048),vs(ir),On(l),null;case 25:return null;case 30:return null}throw Error(r(156,l.tag))}function FA(s,l){switch(Tp(l),l.tag){case 1:return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 3:return vs(ir),de(),s=l.flags,(s&65536)!==0&&(s&128)===0?(l.flags=s&-65537|128,l):null;case 26:case 27:case 5:return Ne(l),null;case 31:if(l.memoizedState!==null){if(ri(l),l.alternate===null)throw Error(r(340));Lo()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 13:if(ri(l),s=l.memoizedState,s!==null&&s.dehydrated!==null){if(l.alternate===null)throw Error(r(340));Lo()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 19:return J(Qn),null;case 4:return de(),null;case 10:return vs(l.type),null;case 22:case 23:return ri(l),qp(),s!==null&&J(Bo),s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 24:return vs(ir),null;case 25:return null;default:return null}}function W1(s,l){switch(Tp(l),l.tag){case 3:vs(ir),de();break;case 26:case 27:case 5:Ne(l);break;case 4:de();break;case 31:l.memoizedState!==null&&ri(l);break;case 13:ri(l);break;case 19:J(Qn);break;case 10:vs(l.type);break;case 22:case 23:ri(l),qp(),s!==null&&J(Bo);break;case 24:vs(ir)}}function yc(s,l){try{var f=l.updateQueue,y=f!==null?f.lastEffect:null;if(y!==null){var _=y.next;f=_;do{if((f.tag&s)===s){y=void 0;var E=f.create,F=f.inst;y=E(),F.destroy=y}f=f.next}while(f!==_)}}catch(X){bn(l,l.return,X)}}function Js(s,l,f){try{var y=l.updateQueue,_=y!==null?y.lastEffect:null;if(_!==null){var E=_.next;y=E;do{if((y.tag&s)===s){var F=y.inst,X=F.destroy;if(X!==void 0){F.destroy=void 0,_=l;var re=f,ye=X;try{ye()}catch(we){bn(_,re,we)}}}y=y.next}while(y!==E)}}catch(we){bn(l,l.return,we)}}function Y1(s){var l=s.updateQueue;if(l!==null){var f=s.stateNode;try{Pb(l,f)}catch(y){bn(s,s.return,y)}}}function X1(s,l,f){f.props=Uo(s.type,s.memoizedProps),f.state=s.memoizedState;try{f.componentWillUnmount()}catch(y){bn(s,l,y)}}function xc(s,l){try{var f=s.ref;if(f!==null){switch(s.tag){case 26:case 27:case 5:var y=s.stateNode;break;case 30:y=s.stateNode;break;default:y=s.stateNode}typeof f=="function"?s.refCleanup=f(y):f.current=y}}catch(_){bn(s,l,_)}}function Ki(s,l){var f=s.ref,y=s.refCleanup;if(f!==null)if(typeof y=="function")try{y()}catch(_){bn(s,l,_)}finally{s.refCleanup=null,s=s.alternate,s!=null&&(s.refCleanup=null)}else if(typeof f=="function")try{f(null)}catch(_){bn(s,l,_)}else f.current=null}function K1(s){var l=s.type,f=s.memoizedProps,y=s.stateNode;try{e:switch(l){case"button":case"input":case"select":case"textarea":f.autoFocus&&y.focus();break e;case"img":f.src?y.src=f.src:f.srcSet&&(y.srcset=f.srcSet)}}catch(_){bn(s,s.return,_)}}function Sh(s,l,f){try{var y=s.stateNode;u3(y,s.type,f,l),y[Vt]=l}catch(_){bn(s,s.return,_)}}function Z1(s){return s.tag===5||s.tag===3||s.tag===26||s.tag===27&&oo(s.type)||s.tag===4}function wh(s){e:for(;;){for(;s.sibling===null;){if(s.return===null||Z1(s.return))return null;s=s.return}for(s.sibling.return=s.return,s=s.sibling;s.tag!==5&&s.tag!==6&&s.tag!==18;){if(s.tag===27&&oo(s.type)||s.flags&2||s.child===null||s.tag===4)continue e;s.child.return=s,s=s.child}if(!(s.flags&2))return s.stateNode}}function Ch(s,l,f){var y=s.tag;if(y===5||y===6)s=s.stateNode,l?(f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f).insertBefore(s,l):(l=f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f,l.appendChild(s),f=f._reactRootContainer,f!=null||l.onclick!==null||(l.onclick=Pr));else if(y!==4&&(y===27&&oo(s.type)&&(f=s.stateNode,l=null),s=s.child,s!==null))for(Ch(s,l,f),s=s.sibling;s!==null;)Ch(s,l,f),s=s.sibling}function Id(s,l,f){var y=s.tag;if(y===5||y===6)s=s.stateNode,l?f.insertBefore(s,l):f.appendChild(s);else if(y!==4&&(y===27&&oo(s.type)&&(f=s.stateNode),s=s.child,s!==null))for(Id(s,l,f),s=s.sibling;s!==null;)Id(s,l,f),s=s.sibling}function Q1(s){var l=s.stateNode,f=s.memoizedProps;try{for(var y=s.type,_=l.attributes;_.length;)l.removeAttributeNode(_[0]);Ir(l,y,f),l[Jt]=s,l[Vt]=f}catch(E){bn(s,s.return,E)}}var ws=!1,ar=!1,jh=!1,J1=typeof WeakSet=="function"?WeakSet:Set,br=null;function VA(s,l){if(s=s.containerInfo,Wh=Kd,s=db(s),vp(s)){if("selectionStart"in s)var f={start:s.selectionStart,end:s.selectionEnd};else e:{f=(f=s.ownerDocument)&&f.defaultView||window;var y=f.getSelection&&f.getSelection();if(y&&y.rangeCount!==0){f=y.anchorNode;var _=y.anchorOffset,E=y.focusNode;y=y.focusOffset;try{f.nodeType,E.nodeType}catch{f=null;break e}var F=0,X=-1,re=-1,ye=0,we=0,Te=s,xe=null;t:for(;;){for(var _e;Te!==f||_!==0&&Te.nodeType!==3||(X=F+_),Te!==E||y!==0&&Te.nodeType!==3||(re=F+y),Te.nodeType===3&&(F+=Te.nodeValue.length),(_e=Te.firstChild)!==null;)xe=Te,Te=_e;for(;;){if(Te===s)break t;if(xe===f&&++ye===_&&(X=F),xe===E&&++we===y&&(re=F),(_e=Te.nextSibling)!==null)break;Te=xe,xe=Te.parentNode}Te=_e}f=X===-1||re===-1?null:{start:X,end:re}}else f=null}f=f||{start:0,end:0}}else f=null;for(Yh={focusedElem:s,selectionRange:f},Kd=!1,br=l;br!==null;)if(l=br,s=l.child,(l.subtreeFlags&1028)!==0&&s!==null)s.return=l,br=s;else for(;br!==null;){switch(l=br,E=l.alternate,s=l.flags,l.tag){case 0:if((s&4)!==0&&(s=l.updateQueue,s=s!==null?s.events:null,s!==null))for(f=0;f<s.length;f++)_=s[f],_.ref.impl=_.nextImpl;break;case 11:case 15:break;case 1:if((s&1024)!==0&&E!==null){s=void 0,f=l,_=E.memoizedProps,E=E.memoizedState,y=f.stateNode;try{var Ke=Uo(f.type,_);s=y.getSnapshotBeforeUpdate(Ke,E),y.__reactInternalSnapshotBeforeUpdate=s}catch(mt){bn(f,f.return,mt)}}break;case 3:if((s&1024)!==0){if(s=l.stateNode.containerInfo,f=s.nodeType,f===9)Zh(s);else if(f===1)switch(s.nodeName){case"HEAD":case"HTML":case"BODY":Zh(s);break;default:s.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((s&1024)!==0)throw Error(r(163))}if(s=l.sibling,s!==null){s.return=l.return,br=s;break}br=l.return}}function e_(s,l,f){var y=f.flags;switch(f.tag){case 0:case 11:case 15:js(s,f),y&4&&yc(5,f);break;case 1:if(js(s,f),y&4)if(s=f.stateNode,l===null)try{s.componentDidMount()}catch(F){bn(f,f.return,F)}else{var _=Uo(f.type,l.memoizedProps);l=l.memoizedState;try{s.componentDidUpdate(_,l,s.__reactInternalSnapshotBeforeUpdate)}catch(F){bn(f,f.return,F)}}y&64&&Y1(f),y&512&&xc(f,f.return);break;case 3:if(js(s,f),y&64&&(s=f.updateQueue,s!==null)){if(l=null,f.child!==null)switch(f.child.tag){case 27:case 5:l=f.child.stateNode;break;case 1:l=f.child.stateNode}try{Pb(s,l)}catch(F){bn(f,f.return,F)}}break;case 27:l===null&&y&4&&Q1(f);case 26:case 5:js(s,f),l===null&&y&4&&K1(f),y&512&&xc(f,f.return);break;case 12:js(s,f);break;case 31:js(s,f),y&4&&r_(s,f);break;case 13:js(s,f),y&4&&i_(s,f),y&64&&(s=f.memoizedState,s!==null&&(s=s.dehydrated,s!==null&&(f=QA.bind(null,f),x3(s,f))));break;case 22:if(y=f.memoizedState!==null||ws,!y){l=l!==null&&l.memoizedState!==null||ar,_=ws;var E=ar;ws=y,(ar=l)&&!E?Es(s,f,(f.subtreeFlags&8772)!==0):js(s,f),ws=_,ar=E}break;case 30:break;default:js(s,f)}}function t_(s){var l=s.alternate;l!==null&&(s.alternate=null,t_(l)),s.child=null,s.deletions=null,s.sibling=null,s.tag===5&&(l=s.stateNode,l!==null&&Mn(l)),s.stateNode=null,s.return=null,s.dependencies=null,s.memoizedProps=null,s.memoizedState=null,s.pendingProps=null,s.stateNode=null,s.updateQueue=null}var Pn=null,Ur=!1;function Cs(s,l,f){for(f=f.child;f!==null;)n_(s,l,f),f=f.sibling}function n_(s,l,f){if(Oe&&typeof Oe.onCommitFiberUnmount=="function")try{Oe.onCommitFiberUnmount(ke,f)}catch{}switch(f.tag){case 26:ar||Ki(f,l),Cs(s,l,f),f.memoizedState?f.memoizedState.count--:f.stateNode&&(f=f.stateNode,f.parentNode.removeChild(f));break;case 27:ar||Ki(f,l);var y=Pn,_=Ur;oo(f.type)&&(Pn=f.stateNode,Ur=!1),Cs(s,l,f),Ec(f.stateNode),Pn=y,Ur=_;break;case 5:ar||Ki(f,l);case 6:if(y=Pn,_=Ur,Pn=null,Cs(s,l,f),Pn=y,Ur=_,Pn!==null)if(Ur)try{(Pn.nodeType===9?Pn.body:Pn.nodeName==="HTML"?Pn.ownerDocument.body:Pn).removeChild(f.stateNode)}catch(E){bn(f,l,E)}else try{Pn.removeChild(f.stateNode)}catch(E){bn(f,l,E)}break;case 18:Pn!==null&&(Ur?(s=Pn,Y_(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,f.stateNode),Ua(s)):Y_(Pn,f.stateNode));break;case 4:y=Pn,_=Ur,Pn=f.stateNode.containerInfo,Ur=!0,Cs(s,l,f),Pn=y,Ur=_;break;case 0:case 11:case 14:case 15:Js(2,f,l),ar||Js(4,f,l),Cs(s,l,f);break;case 1:ar||(Ki(f,l),y=f.stateNode,typeof y.componentWillUnmount=="function"&&X1(f,l,y)),Cs(s,l,f);break;case 21:Cs(s,l,f);break;case 22:ar=(y=ar)||f.memoizedState!==null,Cs(s,l,f),ar=y;break;default:Cs(s,l,f)}}function r_(s,l){if(l.memoizedState===null&&(s=l.alternate,s!==null&&(s=s.memoizedState,s!==null))){s=s.dehydrated;try{Ua(s)}catch(f){bn(l,l.return,f)}}}function i_(s,l){if(l.memoizedState===null&&(s=l.alternate,s!==null&&(s=s.memoizedState,s!==null&&(s=s.dehydrated,s!==null))))try{Ua(s)}catch(f){bn(l,l.return,f)}}function UA(s){switch(s.tag){case 31:case 13:case 19:var l=s.stateNode;return l===null&&(l=s.stateNode=new J1),l;case 22:return s=s.stateNode,l=s._retryCache,l===null&&(l=s._retryCache=new J1),l;default:throw Error(r(435,s.tag))}}function Td(s,l){var f=UA(s);l.forEach(function(y){if(!f.has(y)){f.add(y);var _=JA.bind(null,s,y);y.then(_,_)}})}function qr(s,l){var f=l.deletions;if(f!==null)for(var y=0;y<f.length;y++){var _=f[y],E=s,F=l,X=F;e:for(;X!==null;){switch(X.tag){case 27:if(oo(X.type)){Pn=X.stateNode,Ur=!1;break e}break;case 5:Pn=X.stateNode,Ur=!1;break e;case 3:case 4:Pn=X.stateNode.containerInfo,Ur=!0;break e}X=X.return}if(Pn===null)throw Error(r(160));n_(E,F,_),Pn=null,Ur=!1,E=_.alternate,E!==null&&(E.return=null),_.return=null}if(l.subtreeFlags&13886)for(l=l.child;l!==null;)s_(l,s),l=l.sibling}var Oi=null;function s_(s,l){var f=s.alternate,y=s.flags;switch(s.tag){case 0:case 11:case 14:case 15:qr(l,s),Gr(s),y&4&&(Js(3,s,s.return),yc(3,s),Js(5,s,s.return));break;case 1:qr(l,s),Gr(s),y&512&&(ar||f===null||Ki(f,f.return)),y&64&&ws&&(s=s.updateQueue,s!==null&&(y=s.callbacks,y!==null&&(f=s.shared.hiddenCallbacks,s.shared.hiddenCallbacks=f===null?y:f.concat(y))));break;case 26:var _=Oi;if(qr(l,s),Gr(s),y&512&&(ar||f===null||Ki(f,f.return)),y&4){var E=f!==null?f.memoizedState:null;if(y=s.memoizedState,f===null)if(y===null)if(s.stateNode===null){e:{y=s.type,f=s.memoizedProps,_=_.ownerDocument||_;t:switch(y){case"title":E=_.getElementsByTagName("title")[0],(!E||E[vr]||E[Jt]||E.namespaceURI==="http://www.w3.org/2000/svg"||E.hasAttribute("itemprop"))&&(E=_.createElement(y),_.head.insertBefore(E,_.querySelector("head > title"))),Ir(E,y,f),E[Jt]=s,Ut(E),y=E;break e;case"link":var F=sk("link","href",_).get(y+(f.href||""));if(F){for(var X=0;X<F.length;X++)if(E=F[X],E.getAttribute("href")===(f.href==null||f.href===""?null:f.href)&&E.getAttribute("rel")===(f.rel==null?null:f.rel)&&E.getAttribute("title")===(f.title==null?null:f.title)&&E.getAttribute("crossorigin")===(f.crossOrigin==null?null:f.crossOrigin)){F.splice(X,1);break t}}E=_.createElement(y),Ir(E,y,f),_.head.appendChild(E);break;case"meta":if(F=sk("meta","content",_).get(y+(f.content||""))){for(X=0;X<F.length;X++)if(E=F[X],E.getAttribute("content")===(f.content==null?null:""+f.content)&&E.getAttribute("name")===(f.name==null?null:f.name)&&E.getAttribute("property")===(f.property==null?null:f.property)&&E.getAttribute("http-equiv")===(f.httpEquiv==null?null:f.httpEquiv)&&E.getAttribute("charset")===(f.charSet==null?null:f.charSet)){F.splice(X,1);break t}}E=_.createElement(y),Ir(E,y,f),_.head.appendChild(E);break;default:throw Error(r(468,y))}E[Jt]=s,Ut(E),y=E}s.stateNode=y}else ok(_,s.type,s.stateNode);else s.stateNode=ik(_,y,s.memoizedProps);else E!==y?(E===null?f.stateNode!==null&&(f=f.stateNode,f.parentNode.removeChild(f)):E.count--,y===null?ok(_,s.type,s.stateNode):ik(_,y,s.memoizedProps)):y===null&&s.stateNode!==null&&Sh(s,s.memoizedProps,f.memoizedProps)}break;case 27:qr(l,s),Gr(s),y&512&&(ar||f===null||Ki(f,f.return)),f!==null&&y&4&&Sh(s,s.memoizedProps,f.memoizedProps);break;case 5:if(qr(l,s),Gr(s),y&512&&(ar||f===null||Ki(f,f.return)),s.flags&32){_=s.stateNode;try{dt(_,"")}catch(Ke){bn(s,s.return,Ke)}}y&4&&s.stateNode!=null&&(_=s.memoizedProps,Sh(s,_,f!==null?f.memoizedProps:_)),y&1024&&(jh=!0);break;case 6:if(qr(l,s),Gr(s),y&4){if(s.stateNode===null)throw Error(r(162));y=s.memoizedProps,f=s.stateNode;try{f.nodeValue=y}catch(Ke){bn(s,s.return,Ke)}}break;case 3:if(Gd=null,_=Oi,Oi=Ud(l.containerInfo),qr(l,s),Oi=_,Gr(s),y&4&&f!==null&&f.memoizedState.isDehydrated)try{Ua(l.containerInfo)}catch(Ke){bn(s,s.return,Ke)}jh&&(jh=!1,o_(s));break;case 4:y=Oi,Oi=Ud(s.stateNode.containerInfo),qr(l,s),Gr(s),Oi=y;break;case 12:qr(l,s),Gr(s);break;case 31:qr(l,s),Gr(s),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Td(s,y)));break;case 13:qr(l,s),Gr(s),s.child.flags&8192&&s.memoizedState!==null!=(f!==null&&f.memoizedState!==null)&&(Ad=tt()),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Td(s,y)));break;case 22:_=s.memoizedState!==null;var re=f!==null&&f.memoizedState!==null,ye=ws,we=ar;if(ws=ye||_,ar=we||re,qr(l,s),ar=we,ws=ye,Gr(s),y&8192)e:for(l=s.stateNode,l._visibility=_?l._visibility&-2:l._visibility|1,_&&(f===null||re||ws||ar||qo(s)),f=null,l=s;;){if(l.tag===5||l.tag===26){if(f===null){re=f=l;try{if(E=re.stateNode,_)F=E.style,typeof F.setProperty=="function"?F.setProperty("display","none","important"):F.display="none";else{X=re.stateNode;var Te=re.memoizedProps.style,xe=Te!=null&&Te.hasOwnProperty("display")?Te.display:null;X.style.display=xe==null||typeof xe=="boolean"?"":(""+xe).trim()}}catch(Ke){bn(re,re.return,Ke)}}}else if(l.tag===6){if(f===null){re=l;try{re.stateNode.nodeValue=_?"":re.memoizedProps}catch(Ke){bn(re,re.return,Ke)}}}else if(l.tag===18){if(f===null){re=l;try{var _e=re.stateNode;_?X_(_e,!0):X_(re.stateNode,!1)}catch(Ke){bn(re,re.return,Ke)}}}else if((l.tag!==22&&l.tag!==23||l.memoizedState===null||l===s)&&l.child!==null){l.child.return=l,l=l.child;continue}if(l===s)break e;for(;l.sibling===null;){if(l.return===null||l.return===s)break e;f===l&&(f=null),l=l.return}f===l&&(f=null),l.sibling.return=l.return,l=l.sibling}y&4&&(y=s.updateQueue,y!==null&&(f=y.retryQueue,f!==null&&(y.retryQueue=null,Td(s,f))));break;case 19:qr(l,s),Gr(s),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Td(s,y)));break;case 30:break;case 21:break;default:qr(l,s),Gr(s)}}function Gr(s){var l=s.flags;if(l&2){try{for(var f,y=s.return;y!==null;){if(Z1(y)){f=y;break}y=y.return}if(f==null)throw Error(r(160));switch(f.tag){case 27:var _=f.stateNode,E=wh(s);Id(s,E,_);break;case 5:var F=f.stateNode;f.flags&32&&(dt(F,""),f.flags&=-33);var X=wh(s);Id(s,X,F);break;case 3:case 4:var re=f.stateNode.containerInfo,ye=wh(s);Ch(s,ye,re);break;default:throw Error(r(161))}}catch(we){bn(s,s.return,we)}s.flags&=-3}l&4096&&(s.flags&=-4097)}function o_(s){if(s.subtreeFlags&1024)for(s=s.child;s!==null;){var l=s;o_(l),l.tag===5&&l.flags&1024&&l.stateNode.reset(),s=s.sibling}}function js(s,l){if(l.subtreeFlags&8772)for(l=l.child;l!==null;)e_(s,l.alternate,l),l=l.sibling}function qo(s){for(s=s.child;s!==null;){var l=s;switch(l.tag){case 0:case 11:case 14:case 15:Js(4,l,l.return),qo(l);break;case 1:Ki(l,l.return);var f=l.stateNode;typeof f.componentWillUnmount=="function"&&X1(l,l.return,f),qo(l);break;case 27:Ec(l.stateNode);case 26:case 5:Ki(l,l.return),qo(l);break;case 22:l.memoizedState===null&&qo(l);break;case 30:qo(l);break;default:qo(l)}s=s.sibling}}function Es(s,l,f){for(f=f&&(l.subtreeFlags&8772)!==0,l=l.child;l!==null;){var y=l.alternate,_=s,E=l,F=E.flags;switch(E.tag){case 0:case 11:case 15:Es(_,E,f),yc(4,E);break;case 1:if(Es(_,E,f),y=E,_=y.stateNode,typeof _.componentDidMount=="function")try{_.componentDidMount()}catch(ye){bn(y,y.return,ye)}if(y=E,_=y.updateQueue,_!==null){var X=y.stateNode;try{var re=_.shared.hiddenCallbacks;if(re!==null)for(_.shared.hiddenCallbacks=null,_=0;_<re.length;_++)zb(re[_],X)}catch(ye){bn(y,y.return,ye)}}f&&F&64&&Y1(E),xc(E,E.return);break;case 27:Q1(E);case 26:case 5:Es(_,E,f),f&&y===null&&F&4&&K1(E),xc(E,E.return);break;case 12:Es(_,E,f);break;case 31:Es(_,E,f),f&&F&4&&r_(_,E);break;case 13:Es(_,E,f),f&&F&4&&i_(_,E);break;case 22:E.memoizedState===null&&Es(_,E,f),xc(E,E.return);break;case 30:break;default:Es(_,E,f)}l=l.sibling}}function Eh(s,l){var f=null;s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(f=s.memoizedState.cachePool.pool),s=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(s=l.memoizedState.cachePool.pool),s!==f&&(s!=null&&s.refCount++,f!=null&&ic(f))}function Nh(s,l){s=null,l.alternate!==null&&(s=l.alternate.memoizedState.cache),l=l.memoizedState.cache,l!==s&&(l.refCount++,s!=null&&ic(s))}function Li(s,l,f,y){if(l.subtreeFlags&10256)for(l=l.child;l!==null;)a_(s,l,f,y),l=l.sibling}function a_(s,l,f,y){var _=l.flags;switch(l.tag){case 0:case 11:case 15:Li(s,l,f,y),_&2048&&yc(9,l);break;case 1:Li(s,l,f,y);break;case 3:Li(s,l,f,y),_&2048&&(s=null,l.alternate!==null&&(s=l.alternate.memoizedState.cache),l=l.memoizedState.cache,l!==s&&(l.refCount++,s!=null&&ic(s)));break;case 12:if(_&2048){Li(s,l,f,y),s=l.stateNode;try{var E=l.memoizedProps,F=E.id,X=E.onPostCommit;typeof X=="function"&&X(F,l.alternate===null?"mount":"update",s.passiveEffectDuration,-0)}catch(re){bn(l,l.return,re)}}else Li(s,l,f,y);break;case 31:Li(s,l,f,y);break;case 13:Li(s,l,f,y);break;case 23:break;case 22:E=l.stateNode,F=l.alternate,l.memoizedState!==null?E._visibility&2?Li(s,l,f,y):vc(s,l):E._visibility&2?Li(s,l,f,y):(E._visibility|=2,Ma(s,l,f,y,(l.subtreeFlags&10256)!==0||!1)),_&2048&&Eh(F,l);break;case 24:Li(s,l,f,y),_&2048&&Nh(l.alternate,l);break;default:Li(s,l,f,y)}}function Ma(s,l,f,y,_){for(_=_&&((l.subtreeFlags&10256)!==0||!1),l=l.child;l!==null;){var E=s,F=l,X=f,re=y,ye=F.flags;switch(F.tag){case 0:case 11:case 15:Ma(E,F,X,re,_),yc(8,F);break;case 23:break;case 22:var we=F.stateNode;F.memoizedState!==null?we._visibility&2?Ma(E,F,X,re,_):vc(E,F):(we._visibility|=2,Ma(E,F,X,re,_)),_&&ye&2048&&Eh(F.alternate,F);break;case 24:Ma(E,F,X,re,_),_&&ye&2048&&Nh(F.alternate,F);break;default:Ma(E,F,X,re,_)}l=l.sibling}}function vc(s,l){if(l.subtreeFlags&10256)for(l=l.child;l!==null;){var f=s,y=l,_=y.flags;switch(y.tag){case 22:vc(f,y),_&2048&&Eh(y.alternate,y);break;case 24:vc(f,y),_&2048&&Nh(y.alternate,y);break;default:vc(f,y)}l=l.sibling}}var bc=8192;function Da(s,l,f){if(s.subtreeFlags&bc)for(s=s.child;s!==null;)l_(s,l,f),s=s.sibling}function l_(s,l,f){switch(s.tag){case 26:Da(s,l,f),s.flags&bc&&s.memoizedState!==null&&T3(f,Oi,s.memoizedState,s.memoizedProps);break;case 5:Da(s,l,f);break;case 3:case 4:var y=Oi;Oi=Ud(s.stateNode.containerInfo),Da(s,l,f),Oi=y;break;case 22:s.memoizedState===null&&(y=s.alternate,y!==null&&y.memoizedState!==null?(y=bc,bc=16777216,Da(s,l,f),bc=y):Da(s,l,f));break;default:Da(s,l,f)}}function c_(s){var l=s.alternate;if(l!==null&&(s=l.child,s!==null)){l.child=null;do l=s.sibling,s.sibling=null,s=l;while(s!==null)}}function _c(s){var l=s.deletions;if((s.flags&16)!==0){if(l!==null)for(var f=0;f<l.length;f++){var y=l[f];br=y,d_(y,s)}c_(s)}if(s.subtreeFlags&10256)for(s=s.child;s!==null;)u_(s),s=s.sibling}function u_(s){switch(s.tag){case 0:case 11:case 15:_c(s),s.flags&2048&&Js(9,s,s.return);break;case 3:_c(s);break;case 12:_c(s);break;case 22:var l=s.stateNode;s.memoizedState!==null&&l._visibility&2&&(s.return===null||s.return.tag!==13)?(l._visibility&=-3,Rd(s)):_c(s);break;default:_c(s)}}function Rd(s){var l=s.deletions;if((s.flags&16)!==0){if(l!==null)for(var f=0;f<l.length;f++){var y=l[f];br=y,d_(y,s)}c_(s)}for(s=s.child;s!==null;){switch(l=s,l.tag){case 0:case 11:case 15:Js(8,l,l.return),Rd(l);break;case 22:f=l.stateNode,f._visibility&2&&(f._visibility&=-3,Rd(l));break;default:Rd(l)}s=s.sibling}}function d_(s,l){for(;br!==null;){var f=br;switch(f.tag){case 0:case 11:case 15:Js(8,f,l);break;case 23:case 22:if(f.memoizedState!==null&&f.memoizedState.cachePool!==null){var y=f.memoizedState.cachePool.pool;y!=null&&y.refCount++}break;case 24:ic(f.memoizedState.cache)}if(y=f.child,y!==null)y.return=f,br=y;else e:for(f=s;br!==null;){y=br;var _=y.sibling,E=y.return;if(t_(y),y===f){br=null;break e}if(_!==null){_.return=E,br=_;break e}br=E}}}var qA={getCacheForType:function(s){var l=Er(ir),f=l.data.get(s);return f===void 0&&(f=s(),l.data.set(s,f)),f},cacheSignal:function(){return Er(ir).controller.signal}},GA=typeof WeakMap=="function"?WeakMap:Map,pn=0,jn=null,$t=null,Gt=0,vn=0,ii=null,eo=!1,Oa=!1,Ih=!1,Ns=0,Xn=0,to=0,Go=0,Th=0,si=0,La=0,kc=null,Wr=null,Rh=!1,Ad=0,f_=0,Md=1/0,Dd=null,no=null,yr=0,ro=null,za=null,Is=0,Ah=0,Mh=null,m_=null,Sc=0,Dh=null;function oi(){return(pn&2)!==0&&Gt!==0?Gt&-Gt:H.T!==null?$h():mn()}function p_(){if(si===0)if((Gt&536870912)===0||Zt){var s=ln;ln<<=1,(ln&3932160)===0&&(ln=262144),si=s}else si=536870912;return s=ni.current,s!==null&&(s.flags|=32),si}function Yr(s,l,f){(s===jn&&(vn===2||vn===9)||s.cancelPendingCommit!==null)&&(Pa(s,0),io(s,Gt,si,!1)),Qt(s,f),((pn&2)===0||s!==jn)&&(s===jn&&((pn&2)===0&&(Go|=f),Xn===4&&io(s,Gt,si,!1)),Zi(s))}function h_(s,l,f){if((pn&6)!==0)throw Error(r(327));var y=!f&&(l&127)===0&&(l&s.expiredLanes)===0||Et(s,l),_=y?XA(s,l):Lh(s,l,!0),E=y;do{if(_===0){Oa&&!y&&io(s,l,0,!1);break}else{if(f=s.current.alternate,E&&!WA(f)){_=Lh(s,l,!1),E=!1;continue}if(_===2){if(E=l,s.errorRecoveryDisabledLanes&E)var F=0;else F=s.pendingLanes&-536870913,F=F!==0?F:F&536870912?536870912:0;if(F!==0){l=F;e:{var X=s;_=kc;var re=X.current.memoizedState.isDehydrated;if(re&&(Pa(X,F).flags|=256),F=Lh(X,F,!1),F!==2){if(Ih&&!re){X.errorRecoveryDisabledLanes|=E,Go|=E,_=4;break e}E=Wr,Wr=_,E!==null&&(Wr===null?Wr=E:Wr.push.apply(Wr,E))}_=F}if(E=!1,_!==2)continue}}if(_===1){Pa(s,0),io(s,l,0,!0);break}e:{switch(y=s,E=_,E){case 0:case 1:throw Error(r(345));case 4:if((l&4194048)!==l)break;case 6:io(y,l,si,!eo);break e;case 2:Wr=null;break;case 3:case 5:break;default:throw Error(r(329))}if((l&62914560)===l&&(_=Ad+300-tt(),10<_)){if(io(y,l,si,!eo),In(y,0,!0)!==0)break e;Is=l,y.timeoutHandle=G_(g_.bind(null,y,f,Wr,Dd,Rh,l,si,Go,La,eo,E,"Throttled",-0,0),_);break e}g_(y,f,Wr,Dd,Rh,l,si,Go,La,eo,E,null,-0,0)}}break}while(!0);Zi(s)}function g_(s,l,f,y,_,E,F,X,re,ye,we,Te,xe,_e){if(s.timeoutHandle=-1,Te=l.subtreeFlags,Te&8192||(Te&16785408)===16785408){Te={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Pr},l_(l,E,Te);var Ke=(E&62914560)===E?Ad-tt():(E&4194048)===E?f_-tt():0;if(Ke=R3(Te,Ke),Ke!==null){Is=E,s.cancelPendingCommit=Ke(w_.bind(null,s,l,E,f,y,_,F,X,re,we,Te,null,xe,_e)),io(s,E,F,!ye);return}}w_(s,l,E,f,y,_,F,X,re)}function WA(s){for(var l=s;;){var f=l.tag;if((f===0||f===11||f===15)&&l.flags&16384&&(f=l.updateQueue,f!==null&&(f=f.stores,f!==null)))for(var y=0;y<f.length;y++){var _=f[y],E=_.getSnapshot;_=_.value;try{if(!ei(E(),_))return!1}catch{return!1}}if(f=l.child,l.subtreeFlags&16384&&f!==null)f.return=l,l=f;else{if(l===s)break;for(;l.sibling===null;){if(l.return===null||l.return===s)return!0;l=l.return}l.sibling.return=l.return,l=l.sibling}}return!0}function io(s,l,f,y){l&=~Th,l&=~Go,s.suspendedLanes|=l,s.pingedLanes&=~l,y&&(s.warmLanes|=l),y=s.expirationTimes;for(var _=l;0<_;){var E=31-Ze(_),F=1<<E;y[E]=-1,_&=~F}f!==0&&Tt(s,f,l)}function Od(){return(pn&6)===0?(wc(0),!1):!0}function Oh(){if($t!==null){if(vn===0)var s=$t.return;else s=$t,xs=zo=null,Zp(s),Na=null,oc=0,s=$t;for(;s!==null;)W1(s.alternate,s),s=s.return;$t=null}}function Pa(s,l){var f=s.timeoutHandle;f!==-1&&(s.timeoutHandle=-1,m3(f)),f=s.cancelPendingCommit,f!==null&&(s.cancelPendingCommit=null,f()),Is=0,Oh(),jn=s,$t=f=gs(s.current,null),Gt=l,vn=0,ii=null,eo=!1,Oa=Et(s,l),Ih=!1,La=si=Th=Go=to=Xn=0,Wr=kc=null,Rh=!1,(l&8)!==0&&(l|=l&32);var y=s.entangledLanes;if(y!==0)for(s=s.entanglements,y&=l;0<y;){var _=31-Ze(y),E=1<<_;l|=s[_],y&=~E}return Ns=l,nd(),f}function y_(s,l){Nt=null,H.H=pc,l===Ea||l===ud?(l=Mb(),vn=3):l===Bp?(l=Mb(),vn=4):vn=l===mh?8:l!==null&&typeof l=="object"&&typeof l.then=="function"?6:1,ii=l,$t===null&&(Xn=1,wd(s,xi(l,s.current)))}function x_(){var s=ni.current;return s===null?!0:(Gt&4194048)===Gt?ki===null:(Gt&62914560)===Gt||(Gt&536870912)!==0?s===ki:!1}function v_(){var s=H.H;return H.H=pc,s===null?pc:s}function b_(){var s=H.A;return H.A=qA,s}function Ld(){Xn=4,eo||(Gt&4194048)!==Gt&&ni.current!==null||(Oa=!0),(to&134217727)===0&&(Go&134217727)===0||jn===null||io(jn,Gt,si,!1)}function Lh(s,l,f){var y=pn;pn|=2;var _=v_(),E=b_();(jn!==s||Gt!==l)&&(Dd=null,Pa(s,l)),l=!1;var F=Xn;e:do try{if(vn!==0&&$t!==null){var X=$t,re=ii;switch(vn){case 8:Oh(),F=6;break e;case 3:case 2:case 9:case 6:ni.current===null&&(l=!0);var ye=vn;if(vn=0,ii=null,Ba(s,X,re,ye),f&&Oa){F=0;break e}break;default:ye=vn,vn=0,ii=null,Ba(s,X,re,ye)}}YA(),F=Xn;break}catch(we){y_(s,we)}while(!0);return l&&s.shellSuspendCounter++,xs=zo=null,pn=y,H.H=_,H.A=E,$t===null&&(jn=null,Gt=0,nd()),F}function YA(){for(;$t!==null;)__($t)}function XA(s,l){var f=pn;pn|=2;var y=v_(),_=b_();jn!==s||Gt!==l?(Dd=null,Md=tt()+500,Pa(s,l)):Oa=Et(s,l);e:do try{if(vn!==0&&$t!==null){l=$t;var E=ii;t:switch(vn){case 1:vn=0,ii=null,Ba(s,l,E,1);break;case 2:case 9:if(Rb(E)){vn=0,ii=null,k_(l);break}l=function(){vn!==2&&vn!==9||jn!==s||(vn=7),Zi(s)},E.then(l,l);break e;case 3:vn=7;break e;case 4:vn=5;break e;case 7:Rb(E)?(vn=0,ii=null,k_(l)):(vn=0,ii=null,Ba(s,l,E,7));break;case 5:var F=null;switch($t.tag){case 26:F=$t.memoizedState;case 5:case 27:var X=$t;if(F?ak(F):X.stateNode.complete){vn=0,ii=null;var re=X.sibling;if(re!==null)$t=re;else{var ye=X.return;ye!==null?($t=ye,zd(ye)):$t=null}break t}}vn=0,ii=null,Ba(s,l,E,5);break;case 6:vn=0,ii=null,Ba(s,l,E,6);break;case 8:Oh(),Xn=6;break e;default:throw Error(r(462))}}KA();break}catch(we){y_(s,we)}while(!0);return xs=zo=null,H.H=y,H.A=_,pn=f,$t!==null?0:(jn=null,Gt=0,nd(),Xn)}function KA(){for(;$t!==null&&!$e();)__($t)}function __(s){var l=q1(s.alternate,s,Ns);s.memoizedProps=s.pendingProps,l===null?zd(s):$t=l}function k_(s){var l=s,f=l.alternate;switch(l.tag){case 15:case 0:l=B1(f,l,l.pendingProps,l.type,void 0,Gt);break;case 11:l=B1(f,l,l.pendingProps,l.type.render,l.ref,Gt);break;case 5:Zp(l);default:W1(f,l),l=$t=bb(l,Ns),l=q1(f,l,Ns)}s.memoizedProps=s.pendingProps,l===null?zd(s):$t=l}function Ba(s,l,f,y){xs=zo=null,Zp(l),Na=null,oc=0;var _=l.return;try{if(PA(s,_,l,f,Gt)){Xn=1,wd(s,xi(f,s.current)),$t=null;return}}catch(E){if(_!==null)throw $t=_,E;Xn=1,wd(s,xi(f,s.current)),$t=null;return}l.flags&32768?(Zt||y===1?s=!0:Oa||(Gt&536870912)!==0?s=!1:(eo=s=!0,(y===2||y===9||y===3||y===6)&&(y=ni.current,y!==null&&y.tag===13&&(y.flags|=16384))),S_(l,s)):zd(l)}function zd(s){var l=s;do{if((l.flags&32768)!==0){S_(l,eo);return}s=l.return;var f=HA(l.alternate,l,Ns);if(f!==null){$t=f;return}if(l=l.sibling,l!==null){$t=l;return}$t=l=s}while(l!==null);Xn===0&&(Xn=5)}function S_(s,l){do{var f=FA(s.alternate,s);if(f!==null){f.flags&=32767,$t=f;return}if(f=s.return,f!==null&&(f.flags|=32768,f.subtreeFlags=0,f.deletions=null),!l&&(s=s.sibling,s!==null)){$t=s;return}$t=s=f}while(s!==null);Xn=6,$t=null}function w_(s,l,f,y,_,E,F,X,re){s.cancelPendingCommit=null;do Pd();while(yr!==0);if((pn&6)!==0)throw Error(r(327));if(l!==null){if(l===s.current)throw Error(r(177));if(E=l.lanes|l.childLanes,E|=wp,_n(s,f,E,F,X,re),s===jn&&($t=jn=null,Gt=0),za=l,ro=s,Is=f,Ah=E,Mh=_,m_=y,(l.subtreeFlags&10256)!==0||(l.flags&10256)!==0?(s.callbackNode=null,s.callbackPriority=0,e3(Me,function(){return I_(),null})):(s.callbackNode=null,s.callbackPriority=0),y=(l.flags&13878)!==0,(l.subtreeFlags&13878)!==0||y){y=H.T,H.T=null,_=U.p,U.p=2,F=pn,pn|=4;try{VA(s,l,f)}finally{pn=F,U.p=_,H.T=y}}yr=1,C_(),j_(),E_()}}function C_(){if(yr===1){yr=0;var s=ro,l=za,f=(l.flags&13878)!==0;if((l.subtreeFlags&13878)!==0||f){f=H.T,H.T=null;var y=U.p;U.p=2;var _=pn;pn|=4;try{s_(l,s);var E=Yh,F=db(s.containerInfo),X=E.focusedElem,re=E.selectionRange;if(F!==X&&X&&X.ownerDocument&&ub(X.ownerDocument.documentElement,X)){if(re!==null&&vp(X)){var ye=re.start,we=re.end;if(we===void 0&&(we=ye),"selectionStart"in X)X.selectionStart=ye,X.selectionEnd=Math.min(we,X.value.length);else{var Te=X.ownerDocument||document,xe=Te&&Te.defaultView||window;if(xe.getSelection){var _e=xe.getSelection(),Ke=X.textContent.length,mt=Math.min(re.start,Ke),wn=re.end===void 0?mt:Math.min(re.end,Ke);!_e.extend&&mt>wn&&(F=wn,wn=mt,mt=F);var fe=cb(X,mt),ce=cb(X,wn);if(fe&&ce&&(_e.rangeCount!==1||_e.anchorNode!==fe.node||_e.anchorOffset!==fe.offset||_e.focusNode!==ce.node||_e.focusOffset!==ce.offset)){var ge=Te.createRange();ge.setStart(fe.node,fe.offset),_e.removeAllRanges(),mt>wn?(_e.addRange(ge),_e.extend(ce.node,ce.offset)):(ge.setEnd(ce.node,ce.offset),_e.addRange(ge))}}}}for(Te=[],_e=X;_e=_e.parentNode;)_e.nodeType===1&&Te.push({element:_e,left:_e.scrollLeft,top:_e.scrollTop});for(typeof X.focus=="function"&&X.focus(),X=0;X<Te.length;X++){var je=Te[X];je.element.scrollLeft=je.left,je.element.scrollTop=je.top}}Kd=!!Wh,Yh=Wh=null}finally{pn=_,U.p=y,H.T=f}}s.current=l,yr=2}}function j_(){if(yr===2){yr=0;var s=ro,l=za,f=(l.flags&8772)!==0;if((l.subtreeFlags&8772)!==0||f){f=H.T,H.T=null;var y=U.p;U.p=2;var _=pn;pn|=4;try{e_(s,l.alternate,l)}finally{pn=_,U.p=y,H.T=f}}yr=3}}function E_(){if(yr===4||yr===3){yr=0,et();var s=ro,l=za,f=Is,y=m_;(l.subtreeFlags&10256)!==0||(l.flags&10256)!==0?yr=5:(yr=0,za=ro=null,N_(s,s.pendingLanes));var _=s.pendingLanes;if(_===0&&(no=null),tr(f),l=l.stateNode,Oe&&typeof Oe.onCommitFiberRoot=="function")try{Oe.onCommitFiberRoot(ke,l,void 0,(l.current.flags&128)===128)}catch{}if(y!==null){l=H.T,_=U.p,U.p=2,H.T=null;try{for(var E=s.onRecoverableError,F=0;F<y.length;F++){var X=y[F];E(X.value,{componentStack:X.stack})}}finally{H.T=l,U.p=_}}(Is&3)!==0&&Pd(),Zi(s),_=s.pendingLanes,(f&261930)!==0&&(_&42)!==0?s===Dh?Sc++:(Sc=0,Dh=s):Sc=0,wc(0)}}function N_(s,l){(s.pooledCacheLanes&=l)===0&&(l=s.pooledCache,l!=null&&(s.pooledCache=null,ic(l)))}function Pd(){return C_(),j_(),E_(),I_()}function I_(){if(yr!==5)return!1;var s=ro,l=Ah;Ah=0;var f=tr(Is),y=H.T,_=U.p;try{U.p=32>f?32:f,H.T=null,f=Mh,Mh=null;var E=ro,F=Is;if(yr=0,za=ro=null,Is=0,(pn&6)!==0)throw Error(r(331));var X=pn;if(pn|=4,u_(E.current),a_(E,E.current,F,f),pn=X,wc(0,!1),Oe&&typeof Oe.onPostCommitFiberRoot=="function")try{Oe.onPostCommitFiberRoot(ke,E)}catch{}return!0}finally{U.p=_,H.T=y,N_(s,l)}}function T_(s,l,f){l=xi(f,l),l=fh(s.stateNode,l,2),s=Ks(s,l,2),s!==null&&(Qt(s,2),Zi(s))}function bn(s,l,f){if(s.tag===3)T_(s,s,f);else for(;l!==null;){if(l.tag===3){T_(l,s,f);break}else if(l.tag===1){var y=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof y.componentDidCatch=="function"&&(no===null||!no.has(y))){s=xi(f,s),f=R1(2),y=Ks(l,f,2),y!==null&&(A1(f,y,l,s),Qt(y,2),Zi(y));break}}l=l.return}}function zh(s,l,f){var y=s.pingCache;if(y===null){y=s.pingCache=new GA;var _=new Set;y.set(l,_)}else _=y.get(l),_===void 0&&(_=new Set,y.set(l,_));_.has(f)||(Ih=!0,_.add(f),s=ZA.bind(null,s,l,f),l.then(s,s))}function ZA(s,l,f){var y=s.pingCache;y!==null&&y.delete(l),s.pingedLanes|=s.suspendedLanes&f,s.warmLanes&=~f,jn===s&&(Gt&f)===f&&(Xn===4||Xn===3&&(Gt&62914560)===Gt&&300>tt()-Ad?(pn&2)===0&&Pa(s,0):Th|=f,La===Gt&&(La=0)),Zi(s)}function R_(s,l){l===0&&(l=Ye()),s=Do(s,l),s!==null&&(Qt(s,l),Zi(s))}function QA(s){var l=s.memoizedState,f=0;l!==null&&(f=l.retryLane),R_(s,f)}function JA(s,l){var f=0;switch(s.tag){case 31:case 13:var y=s.stateNode,_=s.memoizedState;_!==null&&(f=_.retryLane);break;case 19:y=s.stateNode;break;case 22:y=s.stateNode._retryCache;break;default:throw Error(r(314))}y!==null&&y.delete(l),R_(s,f)}function e3(s,l){return Ct(s,l)}var Bd=null,$a=null,Ph=!1,$d=!1,Bh=!1,so=0;function Zi(s){s!==$a&&s.next===null&&($a===null?Bd=$a=s:$a=$a.next=s),$d=!0,Ph||(Ph=!0,n3())}function wc(s,l){if(!Bh&&$d){Bh=!0;do for(var f=!1,y=Bd;y!==null;){if(s!==0){var _=y.pendingLanes;if(_===0)var E=0;else{var F=y.suspendedLanes,X=y.pingedLanes;E=(1<<31-Ze(42|s)+1)-1,E&=_&~(F&~X),E=E&201326741?E&201326741|1:E?E|2:0}E!==0&&(f=!0,O_(y,E))}else E=Gt,E=In(y,y===jn?E:0,y.cancelPendingCommit!==null||y.timeoutHandle!==-1),(E&3)===0||Et(y,E)||(f=!0,O_(y,E));y=y.next}while(f);Bh=!1}}function t3(){A_()}function A_(){$d=Ph=!1;var s=0;so!==0&&f3()&&(s=so);for(var l=tt(),f=null,y=Bd;y!==null;){var _=y.next,E=M_(y,l);E===0?(y.next=null,f===null?Bd=_:f.next=_,_===null&&($a=f)):(f=y,(s!==0||(E&3)!==0)&&($d=!0)),y=_}yr!==0&&yr!==5||wc(s),so!==0&&(so=0)}function M_(s,l){for(var f=s.suspendedLanes,y=s.pingedLanes,_=s.expirationTimes,E=s.pendingLanes&-62914561;0<E;){var F=31-Ze(E),X=1<<F,re=_[F];re===-1?((X&f)===0||(X&y)!==0)&&(_[F]=Dt(X,l)):re<=l&&(s.expiredLanes|=X),E&=~X}if(l=jn,f=Gt,f=In(s,s===l?f:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),y=s.callbackNode,f===0||s===l&&(vn===2||vn===9)||s.cancelPendingCommit!==null)return y!==null&&y!==null&&pe(y),s.callbackNode=null,s.callbackPriority=0;if((f&3)===0||Et(s,f)){if(l=f&-f,l===s.callbackPriority)return l;switch(y!==null&&pe(y),tr(f)){case 2:case 8:f=be;break;case 32:f=Me;break;case 268435456:f=He;break;default:f=Me}return y=D_.bind(null,s),f=Ct(f,y),s.callbackPriority=l,s.callbackNode=f,l}return y!==null&&y!==null&&pe(y),s.callbackPriority=2,s.callbackNode=null,2}function D_(s,l){if(yr!==0&&yr!==5)return s.callbackNode=null,s.callbackPriority=0,null;var f=s.callbackNode;if(Pd()&&s.callbackNode!==f)return null;var y=Gt;return y=In(s,s===jn?y:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),y===0?null:(h_(s,y,l),M_(s,tt()),s.callbackNode!=null&&s.callbackNode===f?D_.bind(null,s):null)}function O_(s,l){if(Pd())return null;h_(s,l,!0)}function n3(){p3(function(){(pn&6)!==0?Ct(me,t3):A_()})}function $h(){if(so===0){var s=Ca;s===0&&(s=Nn,Nn<<=1,(Nn&261888)===0&&(Nn=256)),so=s}return so}function L_(s){return s==null||typeof s=="symbol"||typeof s=="boolean"?null:typeof s=="function"?s:Vr(""+s)}function z_(s,l){var f=l.ownerDocument.createElement("input");return f.name=l.name,f.value=l.value,s.id&&f.setAttribute("form",s.id),l.parentNode.insertBefore(f,l),s=new FormData(s),f.parentNode.removeChild(f),s}function r3(s,l,f,y,_){if(l==="submit"&&f&&f.stateNode===_){var E=L_((_[Vt]||null).action),F=y.submitter;F&&(l=(l=F[Vt]||null)?L_(l.formAction):F.getAttribute("formAction"),l!==null&&(E=l,F=null));var X=new pa("action","action",null,y,_);s.push({event:X,listeners:[{instance:null,listener:function(){if(y.defaultPrevented){if(so!==0){var re=F?z_(_,F):new FormData(_);oh(f,{pending:!0,data:re,method:_.method,action:E},null,re)}}else typeof E=="function"&&(X.preventDefault(),re=F?z_(_,F):new FormData(_),oh(f,{pending:!0,data:re,method:_.method,action:E},E,re))},currentTarget:_}]})}}for(var Hh=0;Hh<Sp.length;Hh++){var Fh=Sp[Hh],i3=Fh.toLowerCase(),s3=Fh[0].toUpperCase()+Fh.slice(1);Di(i3,"on"+s3)}Di(pb,"onAnimationEnd"),Di(hb,"onAnimationIteration"),Di(gb,"onAnimationStart"),Di("dblclick","onDoubleClick"),Di("focusin","onFocus"),Di("focusout","onBlur"),Di(_A,"onTransitionRun"),Di(kA,"onTransitionStart"),Di(SA,"onTransitionCancel"),Di(yb,"onTransitionEnd"),Gn("onMouseEnter",["mouseout","mouseover"]),Gn("onMouseLeave",["mouseout","mouseover"]),Gn("onPointerEnter",["pointerout","pointerover"]),Gn("onPointerLeave",["pointerout","pointerover"]),gt("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),gt("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),gt("onBeforeInput",["compositionend","keypress","textInput","paste"]),gt("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),gt("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),gt("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Cc="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),o3=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Cc));function P_(s,l){l=(l&4)!==0;for(var f=0;f<s.length;f++){var y=s[f],_=y.event;y=y.listeners;e:{var E=void 0;if(l)for(var F=y.length-1;0<=F;F--){var X=y[F],re=X.instance,ye=X.currentTarget;if(X=X.listener,re!==E&&_.isPropagationStopped())break e;E=X,_.currentTarget=ye;try{E(_)}catch(we){td(we)}_.currentTarget=null,E=re}else for(F=0;F<y.length;F++){if(X=y[F],re=X.instance,ye=X.currentTarget,X=X.listener,re!==E&&_.isPropagationStopped())break e;E=X,_.currentTarget=ye;try{E(_)}catch(we){td(we)}_.currentTarget=null,E=re}}}}function Ht(s,l){var f=l[Un];f===void 0&&(f=l[Un]=new Set);var y=s+"__bubble";f.has(y)||(B_(l,s,2,!1),f.add(y))}function Vh(s,l,f){var y=0;l&&(y|=4),B_(f,s,y,l)}var Hd="_reactListening"+Math.random().toString(36).slice(2);function Uh(s){if(!s[Hd]){s[Hd]=!0,hn.forEach(function(f){f!=="selectionchange"&&(o3.has(f)||Vh(f,!1,s),Vh(f,!0,s))});var l=s.nodeType===9?s:s.ownerDocument;l===null||l[Hd]||(l[Hd]=!0,Vh("selectionchange",!1,l))}}function B_(s,l,f,y){switch(pk(l)){case 2:var _=D3;break;case 8:_=O3;break;default:_=sg}f=_.bind(null,l,f,s),_=void 0,!Gl||l!=="touchstart"&&l!=="touchmove"&&l!=="wheel"||(_=!0),y?_!==void 0?s.addEventListener(l,f,{capture:!0,passive:_}):s.addEventListener(l,f,!0):_!==void 0?s.addEventListener(l,f,{passive:_}):s.addEventListener(l,f,!1)}function qh(s,l,f,y,_){var E=y;if((l&1)===0&&(l&2)===0&&y!==null)e:for(;;){if(y===null)return;var F=y.tag;if(F===3||F===4){var X=y.stateNode.containerInfo;if(X===_)break;if(F===4)for(F=y.return;F!==null;){var re=F.tag;if((re===3||re===4)&&F.stateNode.containerInfo===_)return;F=F.return}for(;X!==null;){if(F=_t(X),F===null)return;if(re=F.tag,re===5||re===6||re===26||re===27){y=E=F;continue e}X=X.parentNode}}y=y.return}Ri(function(){var ye=E,we=ql(f),Te=[];e:{var xe=xb.get(s);if(xe!==void 0){var _e=pa,Ke=s;switch(s){case"keypress":if(ma(f)===0)break e;case"keydown":case"keyup":_e=Jr;break;case"focusin":Ke="focus",_e=Z;break;case"focusout":Ke="blur",_e=Z;break;case"beforeblur":case"afterblur":_e=Z;break;case"click":if(f.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":_e=Ju;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":_e=Fs;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":_e=Mi;break;case pb:case hb:case gb:_e=ne;break;case yb:_e=ha;break;case"scroll":case"scrollend":_e=Yl;break;case"wheel":_e=oA;break;case"copy":case"cut":case"paste":_e=he;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":_e=Ro;break;case"toggle":case"beforetoggle":_e=lA}var mt=(l&4)!==0,wn=!mt&&(s==="scroll"||s==="scrollend"),fe=mt?xe!==null?xe+"Capture":null:xe;mt=[];for(var ce=ye,ge;ce!==null;){var je=ce;if(ge=je.stateNode,je=je.tag,je!==5&&je!==26&&je!==27||ge===null||fe===null||(je=Wi(ce,fe),je!=null&&mt.push(jc(ce,je,ge))),wn)break;ce=ce.return}0<mt.length&&(xe=new _e(xe,Ke,null,f,we),Te.push({event:xe,listeners:mt}))}}if((l&7)===0){e:{if(xe=s==="mouseover"||s==="pointerover",_e=s==="mouseout"||s==="pointerout",xe&&f!==Ul&&(Ke=f.relatedTarget||f.fromElement)&&(_t(Ke)||Ke[Vn]))break e;if((_e||xe)&&(xe=we.window===we?we:(xe=we.ownerDocument)?xe.defaultView||xe.parentWindow:window,_e?(Ke=f.relatedTarget||f.toElement,_e=ye,Ke=Ke?_t(Ke):null,Ke!==null&&(wn=o(Ke),mt=Ke.tag,Ke!==wn||mt!==5&&mt!==27&&mt!==6)&&(Ke=null)):(_e=null,Ke=ye),_e!==Ke)){if(mt=Ju,je="onMouseLeave",fe="onMouseEnter",ce="mouse",(s==="pointerout"||s==="pointerover")&&(mt=Ro,je="onPointerLeave",fe="onPointerEnter",ce="pointer"),wn=_e==null?xe:fr(_e),ge=Ke==null?xe:fr(Ke),xe=new mt(je,ce+"leave",_e,f,we),xe.target=wn,xe.relatedTarget=ge,je=null,_t(we)===ye&&(mt=new mt(fe,ce+"enter",Ke,f,we),mt.target=ge,mt.relatedTarget=wn,je=mt),wn=je,_e&&Ke)t:{for(mt=a3,fe=_e,ce=Ke,ge=0,je=fe;je;je=mt(je))ge++;je=0;for(var ot=ce;ot;ot=mt(ot))je++;for(;0<ge-je;)fe=mt(fe),ge--;for(;0<je-ge;)ce=mt(ce),je--;for(;ge--;){if(fe===ce||ce!==null&&fe===ce.alternate){mt=fe;break t}fe=mt(fe),ce=mt(ce)}mt=null}else mt=null;_e!==null&&$_(Te,xe,_e,mt,!1),Ke!==null&&wn!==null&&$_(Te,wn,Ke,mt,!0)}}e:{if(xe=ye?fr(ye):window,_e=xe.nodeName&&xe.nodeName.toLowerCase(),_e==="select"||_e==="input"&&xe.type==="file")var dn=rb;else if(tb(xe))if(ib)dn=xA;else{dn=gA;var Qe=hA}else _e=xe.nodeName,!_e||_e.toLowerCase()!=="input"||xe.type!=="checkbox"&&xe.type!=="radio"?ye&&Rt(ye.elementType)&&(dn=rb):dn=yA;if(dn&&(dn=dn(s,ye))){nb(Te,dn,f,we);break e}Qe&&Qe(s,xe,ye),s==="focusout"&&ye&&xe.type==="number"&&ye.memoizedProps.value!=null&&Ae(xe,"number",xe.value)}switch(Qe=ye?fr(ye):window,s){case"focusin":(tb(Qe)||Qe.contentEditable==="true")&&(ya=Qe,bp=ye,tc=null);break;case"focusout":tc=bp=ya=null;break;case"mousedown":_p=!0;break;case"contextmenu":case"mouseup":case"dragend":_p=!1,fb(Te,f,we);break;case"selectionchange":if(bA)break;case"keydown":case"keyup":fb(Te,f,we)}var At;if(gp)e:{switch(s){case"compositionstart":var Wt="onCompositionStart";break e;case"compositionend":Wt="onCompositionEnd";break e;case"compositionupdate":Wt="onCompositionUpdate";break e}Wt=void 0}else ga?J0(s,f)&&(Wt="onCompositionEnd"):s==="keydown"&&f.keyCode===229&&(Wt="onCompositionStart");Wt&&(K0&&f.locale!=="ko"&&(ga||Wt!=="onCompositionStart"?Wt==="onCompositionEnd"&&ga&&(At=Wl()):(gi=we,fa="value"in gi?gi.value:gi.textContent,ga=!0)),Qe=Fd(ye,Wt),0<Qe.length&&(Wt=new Xe(Wt,s,null,f,we),Te.push({event:Wt,listeners:Qe}),At?Wt.data=At:(At=eb(f),At!==null&&(Wt.data=At)))),(At=uA?dA(s,f):fA(s,f))&&(Wt=Fd(ye,"onBeforeInput"),0<Wt.length&&(Qe=new Xe("onBeforeInput","beforeinput",null,f,we),Te.push({event:Qe,listeners:Wt}),Qe.data=At)),r3(Te,s,ye,f,we)}P_(Te,l)})}function jc(s,l,f){return{instance:s,listener:l,currentTarget:f}}function Fd(s,l){for(var f=l+"Capture",y=[];s!==null;){var _=s,E=_.stateNode;if(_=_.tag,_!==5&&_!==26&&_!==27||E===null||(_=Wi(s,f),_!=null&&y.unshift(jc(s,_,E)),_=Wi(s,l),_!=null&&y.push(jc(s,_,E))),s.tag===3)return y;s=s.return}return[]}function a3(s){if(s===null)return null;do s=s.return;while(s&&s.tag!==5&&s.tag!==27);return s||null}function $_(s,l,f,y,_){for(var E=l._reactName,F=[];f!==null&&f!==y;){var X=f,re=X.alternate,ye=X.stateNode;if(X=X.tag,re!==null&&re===y)break;X!==5&&X!==26&&X!==27||ye===null||(re=ye,_?(ye=Wi(f,E),ye!=null&&F.unshift(jc(f,ye,re))):_||(ye=Wi(f,E),ye!=null&&F.push(jc(f,ye,re)))),f=f.return}F.length!==0&&s.push({event:l,listeners:F})}var l3=/\r\n?/g,c3=/\u0000|\uFFFD/g;function H_(s){return(typeof s=="string"?s:""+s).replace(l3,` -`).replace(c3,"")}function F_(s,l){return l=H_(l),H_(s)===l}function Sn(s,l,f,y,_,E){switch(f){case"children":typeof y=="string"?l==="body"||l==="textarea"&&y===""||dt(s,y):(typeof y=="number"||typeof y=="bigint")&&l!=="body"&&dt(s,""+y);break;case"className":kt(s,"class",y);break;case"tabIndex":kt(s,"tabindex",y);break;case"dir":case"role":case"viewBox":case"width":case"height":kt(s,f,y);break;case"style":qt(s,y,E);break;case"data":if(l!=="object"){kt(s,"data",y);break}case"src":case"href":if(y===""&&(l!=="a"||f!=="href")){s.removeAttribute(f);break}if(y==null||typeof y=="function"||typeof y=="symbol"||typeof y=="boolean"){s.removeAttribute(f);break}y=Vr(""+y),s.setAttribute(f,y);break;case"action":case"formAction":if(typeof y=="function"){s.setAttribute(f,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof E=="function"&&(f==="formAction"?(l!=="input"&&Sn(s,l,"name",_.name,_,null),Sn(s,l,"formEncType",_.formEncType,_,null),Sn(s,l,"formMethod",_.formMethod,_,null),Sn(s,l,"formTarget",_.formTarget,_,null)):(Sn(s,l,"encType",_.encType,_,null),Sn(s,l,"method",_.method,_,null),Sn(s,l,"target",_.target,_,null)));if(y==null||typeof y=="symbol"||typeof y=="boolean"){s.removeAttribute(f);break}y=Vr(""+y),s.setAttribute(f,y);break;case"onClick":y!=null&&(s.onclick=Pr);break;case"onScroll":y!=null&&Ht("scroll",s);break;case"onScrollEnd":y!=null&&Ht("scrollend",s);break;case"dangerouslySetInnerHTML":if(y!=null){if(typeof y!="object"||!("__html"in y))throw Error(r(61));if(f=y.__html,f!=null){if(_.children!=null)throw Error(r(60));s.innerHTML=f}}break;case"multiple":s.multiple=y&&typeof y!="function"&&typeof y!="symbol";break;case"muted":s.muted=y&&typeof y!="function"&&typeof y!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(y==null||typeof y=="function"||typeof y=="boolean"||typeof y=="symbol"){s.removeAttribute("xlink:href");break}f=Vr(""+y),s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",f);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":y!=null&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,""+y):s.removeAttribute(f);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":y&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,""):s.removeAttribute(f);break;case"capture":case"download":y===!0?s.setAttribute(f,""):y!==!1&&y!=null&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,y):s.removeAttribute(f);break;case"cols":case"rows":case"size":case"span":y!=null&&typeof y!="function"&&typeof y!="symbol"&&!isNaN(y)&&1<=y?s.setAttribute(f,y):s.removeAttribute(f);break;case"rowSpan":case"start":y==null||typeof y=="function"||typeof y=="symbol"||isNaN(y)?s.removeAttribute(f):s.setAttribute(f,y);break;case"popover":Ht("beforetoggle",s),Ht("toggle",s),Kt(s,"popover",y);break;case"xlinkActuate":Wn(s,"http://www.w3.org/1999/xlink","xlink:actuate",y);break;case"xlinkArcrole":Wn(s,"http://www.w3.org/1999/xlink","xlink:arcrole",y);break;case"xlinkRole":Wn(s,"http://www.w3.org/1999/xlink","xlink:role",y);break;case"xlinkShow":Wn(s,"http://www.w3.org/1999/xlink","xlink:show",y);break;case"xlinkTitle":Wn(s,"http://www.w3.org/1999/xlink","xlink:title",y);break;case"xlinkType":Wn(s,"http://www.w3.org/1999/xlink","xlink:type",y);break;case"xmlBase":Wn(s,"http://www.w3.org/XML/1998/namespace","xml:base",y);break;case"xmlLang":Wn(s,"http://www.w3.org/XML/1998/namespace","xml:lang",y);break;case"xmlSpace":Wn(s,"http://www.w3.org/XML/1998/namespace","xml:space",y);break;case"is":Kt(s,"is",y);break;case"innerText":case"textContent":break;default:(!(2<f.length)||f[0]!=="o"&&f[0]!=="O"||f[1]!=="n"&&f[1]!=="N")&&(f=en.get(f)||f,Kt(s,f,y))}}function Gh(s,l,f,y,_,E){switch(f){case"style":qt(s,y,E);break;case"dangerouslySetInnerHTML":if(y!=null){if(typeof y!="object"||!("__html"in y))throw Error(r(61));if(f=y.__html,f!=null){if(_.children!=null)throw Error(r(60));s.innerHTML=f}}break;case"children":typeof y=="string"?dt(s,y):(typeof y=="number"||typeof y=="bigint")&&dt(s,""+y);break;case"onScroll":y!=null&&Ht("scroll",s);break;case"onScrollEnd":y!=null&&Ht("scrollend",s);break;case"onClick":y!=null&&(s.onclick=Pr);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!qn.hasOwnProperty(f))e:{if(f[0]==="o"&&f[1]==="n"&&(_=f.endsWith("Capture"),l=f.slice(2,_?f.length-7:void 0),E=s[Vt]||null,E=E!=null?E[f]:null,typeof E=="function"&&s.removeEventListener(l,E,_),typeof y=="function")){typeof E!="function"&&E!==null&&(f in s?s[f]=null:s.hasAttribute(f)&&s.removeAttribute(f)),s.addEventListener(l,y,_);break e}f in s?s[f]=y:y===!0?s.setAttribute(f,""):Kt(s,f,y)}}}function Ir(s,l,f){switch(l){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Ht("error",s),Ht("load",s);var y=!1,_=!1,E;for(E in f)if(f.hasOwnProperty(E)){var F=f[E];if(F!=null)switch(E){case"src":y=!0;break;case"srcSet":_=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(r(137,l));default:Sn(s,l,E,F,f,null)}}_&&Sn(s,l,"srcSet",f.srcSet,f,null),y&&Sn(s,l,"src",f.src,f,null);return;case"input":Ht("invalid",s);var X=E=F=_=null,re=null,ye=null;for(y in f)if(f.hasOwnProperty(y)){var we=f[y];if(we!=null)switch(y){case"name":_=we;break;case"type":F=we;break;case"checked":re=we;break;case"defaultChecked":ye=we;break;case"value":E=we;break;case"defaultValue":X=we;break;case"children":case"dangerouslySetInnerHTML":if(we!=null)throw Error(r(137,l));break;default:Sn(s,l,y,we,f,null)}}ve(s,E,X,re,ye,F,_,!1);return;case"select":Ht("invalid",s),y=F=E=null;for(_ in f)if(f.hasOwnProperty(_)&&(X=f[_],X!=null))switch(_){case"value":E=X;break;case"defaultValue":F=X;break;case"multiple":y=X;default:Sn(s,l,_,X,f,null)}l=E,f=F,s.multiple=!!y,l!=null?Le(s,!!y,l,!1):f!=null&&Le(s,!!y,f,!0);return;case"textarea":Ht("invalid",s),E=_=y=null;for(F in f)if(f.hasOwnProperty(F)&&(X=f[F],X!=null))switch(F){case"value":y=X;break;case"defaultValue":_=X;break;case"children":E=X;break;case"dangerouslySetInnerHTML":if(X!=null)throw Error(r(91));break;default:Sn(s,l,F,X,f,null)}ct(s,y,_,E);return;case"option":for(re in f)f.hasOwnProperty(re)&&(y=f[re],y!=null)&&(re==="selected"?s.selected=y&&typeof y!="function"&&typeof y!="symbol":Sn(s,l,re,y,f,null));return;case"dialog":Ht("beforetoggle",s),Ht("toggle",s),Ht("cancel",s),Ht("close",s);break;case"iframe":case"object":Ht("load",s);break;case"video":case"audio":for(y=0;y<Cc.length;y++)Ht(Cc[y],s);break;case"image":Ht("error",s),Ht("load",s);break;case"details":Ht("toggle",s);break;case"embed":case"source":case"link":Ht("error",s),Ht("load",s);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(ye in f)if(f.hasOwnProperty(ye)&&(y=f[ye],y!=null))switch(ye){case"children":case"dangerouslySetInnerHTML":throw Error(r(137,l));default:Sn(s,l,ye,y,f,null)}return;default:if(Rt(l)){for(we in f)f.hasOwnProperty(we)&&(y=f[we],y!==void 0&&Gh(s,l,we,y,f,void 0));return}}for(X in f)f.hasOwnProperty(X)&&(y=f[X],y!=null&&Sn(s,l,X,y,f,null))}function u3(s,l,f,y){switch(l){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var _=null,E=null,F=null,X=null,re=null,ye=null,we=null;for(_e in f){var Te=f[_e];if(f.hasOwnProperty(_e)&&Te!=null)switch(_e){case"checked":break;case"value":break;case"defaultValue":re=Te;default:y.hasOwnProperty(_e)||Sn(s,l,_e,null,y,Te)}}for(var xe in y){var _e=y[xe];if(Te=f[xe],y.hasOwnProperty(xe)&&(_e!=null||Te!=null))switch(xe){case"type":E=_e;break;case"name":_=_e;break;case"checked":ye=_e;break;case"defaultChecked":we=_e;break;case"value":F=_e;break;case"defaultValue":X=_e;break;case"children":case"dangerouslySetInnerHTML":if(_e!=null)throw Error(r(137,l));break;default:_e!==Te&&Sn(s,l,xe,_e,y,Te)}}ae(s,F,X,re,ye,we,E,_);return;case"select":_e=F=X=xe=null;for(E in f)if(re=f[E],f.hasOwnProperty(E)&&re!=null)switch(E){case"value":break;case"multiple":_e=re;default:y.hasOwnProperty(E)||Sn(s,l,E,null,y,re)}for(_ in y)if(E=y[_],re=f[_],y.hasOwnProperty(_)&&(E!=null||re!=null))switch(_){case"value":xe=E;break;case"defaultValue":X=E;break;case"multiple":F=E;default:E!==re&&Sn(s,l,_,E,y,re)}l=X,f=F,y=_e,xe!=null?Le(s,!!f,xe,!1):!!y!=!!f&&(l!=null?Le(s,!!f,l,!0):Le(s,!!f,f?[]:"",!1));return;case"textarea":_e=xe=null;for(X in f)if(_=f[X],f.hasOwnProperty(X)&&_!=null&&!y.hasOwnProperty(X))switch(X){case"value":break;case"children":break;default:Sn(s,l,X,null,y,_)}for(F in y)if(_=y[F],E=f[F],y.hasOwnProperty(F)&&(_!=null||E!=null))switch(F){case"value":xe=_;break;case"defaultValue":_e=_;break;case"children":break;case"dangerouslySetInnerHTML":if(_!=null)throw Error(r(91));break;default:_!==E&&Sn(s,l,F,_,y,E)}vt(s,xe,_e);return;case"option":for(var Ke in f)xe=f[Ke],f.hasOwnProperty(Ke)&&xe!=null&&!y.hasOwnProperty(Ke)&&(Ke==="selected"?s.selected=!1:Sn(s,l,Ke,null,y,xe));for(re in y)xe=y[re],_e=f[re],y.hasOwnProperty(re)&&xe!==_e&&(xe!=null||_e!=null)&&(re==="selected"?s.selected=xe&&typeof xe!="function"&&typeof xe!="symbol":Sn(s,l,re,xe,y,_e));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var mt in f)xe=f[mt],f.hasOwnProperty(mt)&&xe!=null&&!y.hasOwnProperty(mt)&&Sn(s,l,mt,null,y,xe);for(ye in y)if(xe=y[ye],_e=f[ye],y.hasOwnProperty(ye)&&xe!==_e&&(xe!=null||_e!=null))switch(ye){case"children":case"dangerouslySetInnerHTML":if(xe!=null)throw Error(r(137,l));break;default:Sn(s,l,ye,xe,y,_e)}return;default:if(Rt(l)){for(var wn in f)xe=f[wn],f.hasOwnProperty(wn)&&xe!==void 0&&!y.hasOwnProperty(wn)&&Gh(s,l,wn,void 0,y,xe);for(we in y)xe=y[we],_e=f[we],!y.hasOwnProperty(we)||xe===_e||xe===void 0&&_e===void 0||Gh(s,l,we,xe,y,_e);return}}for(var fe in f)xe=f[fe],f.hasOwnProperty(fe)&&xe!=null&&!y.hasOwnProperty(fe)&&Sn(s,l,fe,null,y,xe);for(Te in y)xe=y[Te],_e=f[Te],!y.hasOwnProperty(Te)||xe===_e||xe==null&&_e==null||Sn(s,l,Te,xe,y,_e)}function V_(s){switch(s){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function d3(){if(typeof performance.getEntriesByType=="function"){for(var s=0,l=0,f=performance.getEntriesByType("resource"),y=0;y<f.length;y++){var _=f[y],E=_.transferSize,F=_.initiatorType,X=_.duration;if(E&&X&&V_(F)){for(F=0,X=_.responseEnd,y+=1;y<f.length;y++){var re=f[y],ye=re.startTime;if(ye>X)break;var we=re.transferSize,Te=re.initiatorType;we&&V_(Te)&&(re=re.responseEnd,F+=we*(re<X?1:(X-ye)/(re-ye)))}if(--y,l+=8*(E+F)/(_.duration/1e3),s++,10<s)break}}if(0<s)return l/s/1e6}return navigator.connection&&(s=navigator.connection.downlink,typeof s=="number")?s:5}var Wh=null,Yh=null;function Vd(s){return s.nodeType===9?s:s.ownerDocument}function U_(s){switch(s){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function q_(s,l){if(s===0)switch(l){case"svg":return 1;case"math":return 2;default:return 0}return s===1&&l==="foreignObject"?0:s}function Xh(s,l){return s==="textarea"||s==="noscript"||typeof l.children=="string"||typeof l.children=="number"||typeof l.children=="bigint"||typeof l.dangerouslySetInnerHTML=="object"&&l.dangerouslySetInnerHTML!==null&&l.dangerouslySetInnerHTML.__html!=null}var Kh=null;function f3(){var s=window.event;return s&&s.type==="popstate"?s===Kh?!1:(Kh=s,!0):(Kh=null,!1)}var G_=typeof setTimeout=="function"?setTimeout:void 0,m3=typeof clearTimeout=="function"?clearTimeout:void 0,W_=typeof Promise=="function"?Promise:void 0,p3=typeof queueMicrotask=="function"?queueMicrotask:typeof W_<"u"?function(s){return W_.resolve(null).then(s).catch(h3)}:G_;function h3(s){setTimeout(function(){throw s})}function oo(s){return s==="head"}function Y_(s,l){var f=l,y=0;do{var _=f.nextSibling;if(s.removeChild(f),_&&_.nodeType===8)if(f=_.data,f==="/$"||f==="/&"){if(y===0){s.removeChild(_),Ua(l);return}y--}else if(f==="$"||f==="$?"||f==="$~"||f==="$!"||f==="&")y++;else if(f==="html")Ec(s.ownerDocument.documentElement);else if(f==="head"){f=s.ownerDocument.head,Ec(f);for(var E=f.firstChild;E;){var F=E.nextSibling,X=E.nodeName;E[vr]||X==="SCRIPT"||X==="STYLE"||X==="LINK"&&E.rel.toLowerCase()==="stylesheet"||f.removeChild(E),E=F}}else f==="body"&&Ec(s.ownerDocument.body);f=_}while(f);Ua(l)}function X_(s,l){var f=s;s=0;do{var y=f.nextSibling;if(f.nodeType===1?l?(f._stashedDisplay=f.style.display,f.style.display="none"):(f.style.display=f._stashedDisplay||"",f.getAttribute("style")===""&&f.removeAttribute("style")):f.nodeType===3&&(l?(f._stashedText=f.nodeValue,f.nodeValue=""):f.nodeValue=f._stashedText||""),y&&y.nodeType===8)if(f=y.data,f==="/$"){if(s===0)break;s--}else f!=="$"&&f!=="$?"&&f!=="$~"&&f!=="$!"||s++;f=y}while(f)}function Zh(s){var l=s.firstChild;for(l&&l.nodeType===10&&(l=l.nextSibling);l;){var f=l;switch(l=l.nextSibling,f.nodeName){case"HTML":case"HEAD":case"BODY":Zh(f),Mn(f);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(f.rel.toLowerCase()==="stylesheet")continue}s.removeChild(f)}}function g3(s,l,f,y){for(;s.nodeType===1;){var _=f;if(s.nodeName.toLowerCase()!==l.toLowerCase()){if(!y&&(s.nodeName!=="INPUT"||s.type!=="hidden"))break}else if(y){if(!s[vr])switch(l){case"meta":if(!s.hasAttribute("itemprop"))break;return s;case"link":if(E=s.getAttribute("rel"),E==="stylesheet"&&s.hasAttribute("data-precedence"))break;if(E!==_.rel||s.getAttribute("href")!==(_.href==null||_.href===""?null:_.href)||s.getAttribute("crossorigin")!==(_.crossOrigin==null?null:_.crossOrigin)||s.getAttribute("title")!==(_.title==null?null:_.title))break;return s;case"style":if(s.hasAttribute("data-precedence"))break;return s;case"script":if(E=s.getAttribute("src"),(E!==(_.src==null?null:_.src)||s.getAttribute("type")!==(_.type==null?null:_.type)||s.getAttribute("crossorigin")!==(_.crossOrigin==null?null:_.crossOrigin))&&E&&s.hasAttribute("async")&&!s.hasAttribute("itemprop"))break;return s;default:return s}}else if(l==="input"&&s.type==="hidden"){var E=_.name==null?null:""+_.name;if(_.type==="hidden"&&s.getAttribute("name")===E)return s}else return s;if(s=Si(s.nextSibling),s===null)break}return null}function y3(s,l,f){if(l==="")return null;for(;s.nodeType!==3;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!f||(s=Si(s.nextSibling),s===null))return null;return s}function K_(s,l){for(;s.nodeType!==8;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!l||(s=Si(s.nextSibling),s===null))return null;return s}function Qh(s){return s.data==="$?"||s.data==="$~"}function Jh(s){return s.data==="$!"||s.data==="$?"&&s.ownerDocument.readyState!=="loading"}function x3(s,l){var f=s.ownerDocument;if(s.data==="$~")s._reactRetry=l;else if(s.data!=="$?"||f.readyState!=="loading")l();else{var y=function(){l(),f.removeEventListener("DOMContentLoaded",y)};f.addEventListener("DOMContentLoaded",y),s._reactRetry=y}}function Si(s){for(;s!=null;s=s.nextSibling){var l=s.nodeType;if(l===1||l===3)break;if(l===8){if(l=s.data,l==="$"||l==="$!"||l==="$?"||l==="$~"||l==="&"||l==="F!"||l==="F")break;if(l==="/$"||l==="/&")return null}}return s}var eg=null;function Z_(s){s=s.nextSibling;for(var l=0;s;){if(s.nodeType===8){var f=s.data;if(f==="/$"||f==="/&"){if(l===0)return Si(s.nextSibling);l--}else f!=="$"&&f!=="$!"&&f!=="$?"&&f!=="$~"&&f!=="&"||l++}s=s.nextSibling}return null}function Q_(s){s=s.previousSibling;for(var l=0;s;){if(s.nodeType===8){var f=s.data;if(f==="$"||f==="$!"||f==="$?"||f==="$~"||f==="&"){if(l===0)return s;l--}else f!=="/$"&&f!=="/&"||l++}s=s.previousSibling}return null}function J_(s,l,f){switch(l=Vd(f),s){case"html":if(s=l.documentElement,!s)throw Error(r(452));return s;case"head":if(s=l.head,!s)throw Error(r(453));return s;case"body":if(s=l.body,!s)throw Error(r(454));return s;default:throw Error(r(451))}}function Ec(s){for(var l=s.attributes;l.length;)s.removeAttributeNode(l[0]);Mn(s)}var wi=new Map,ek=new Set;function Ud(s){return typeof s.getRootNode=="function"?s.getRootNode():s.nodeType===9?s:s.ownerDocument}var Ts=U.d;U.d={f:v3,r:b3,D:_3,C:k3,L:S3,m:w3,X:j3,S:C3,M:E3};function v3(){var s=Ts.f(),l=Od();return s||l}function b3(s){var l=wr(s);l!==null&&l.tag===5&&l.type==="form"?y1(l):Ts.r(s)}var Ha=typeof document>"u"?null:document;function tk(s,l,f){var y=Ha;if(y&&typeof l=="string"&&l){var _=Pe(l);_='link[rel="'+s+'"][href="'+_+'"]',typeof f=="string"&&(_+='[crossorigin="'+f+'"]'),ek.has(_)||(ek.add(_),s={rel:s,crossOrigin:f,href:l},y.querySelector(_)===null&&(l=y.createElement("link"),Ir(l,"link",s),Ut(l),y.head.appendChild(l)))}}function _3(s){Ts.D(s),tk("dns-prefetch",s,null)}function k3(s,l){Ts.C(s,l),tk("preconnect",s,l)}function S3(s,l,f){Ts.L(s,l,f);var y=Ha;if(y&&s&&l){var _='link[rel="preload"][as="'+Pe(l)+'"]';l==="image"&&f&&f.imageSrcSet?(_+='[imagesrcset="'+Pe(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(_+='[imagesizes="'+Pe(f.imageSizes)+'"]')):_+='[href="'+Pe(s)+'"]';var E=_;switch(l){case"style":E=Fa(s);break;case"script":E=Va(s)}wi.has(E)||(s=p({rel:"preload",href:l==="image"&&f&&f.imageSrcSet?void 0:s,as:l},f),wi.set(E,s),y.querySelector(_)!==null||l==="style"&&y.querySelector(Nc(E))||l==="script"&&y.querySelector(Ic(E))||(l=y.createElement("link"),Ir(l,"link",s),Ut(l),y.head.appendChild(l)))}}function w3(s,l){Ts.m(s,l);var f=Ha;if(f&&s){var y=l&&typeof l.as=="string"?l.as:"script",_='link[rel="modulepreload"][as="'+Pe(y)+'"][href="'+Pe(s)+'"]',E=_;switch(y){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":E=Va(s)}if(!wi.has(E)&&(s=p({rel:"modulepreload",href:s},l),wi.set(E,s),f.querySelector(_)===null)){switch(y){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector(Ic(E)))return}y=f.createElement("link"),Ir(y,"link",s),Ut(y),f.head.appendChild(y)}}}function C3(s,l,f){Ts.S(s,l,f);var y=Ha;if(y&&s){var _=Xt(y).hoistableStyles,E=Fa(s);l=l||"default";var F=_.get(E);if(!F){var X={loading:0,preload:null};if(F=y.querySelector(Nc(E)))X.loading=5;else{s=p({rel:"stylesheet",href:s,"data-precedence":l},f),(f=wi.get(E))&&tg(s,f);var re=F=y.createElement("link");Ut(re),Ir(re,"link",s),re._p=new Promise(function(ye,we){re.onload=ye,re.onerror=we}),re.addEventListener("load",function(){X.loading|=1}),re.addEventListener("error",function(){X.loading|=2}),X.loading|=4,qd(F,l,y)}F={type:"stylesheet",instance:F,count:1,state:X},_.set(E,F)}}}function j3(s,l){Ts.X(s,l);var f=Ha;if(f&&s){var y=Xt(f).hoistableScripts,_=Va(s),E=y.get(_);E||(E=f.querySelector(Ic(_)),E||(s=p({src:s,async:!0},l),(l=wi.get(_))&&ng(s,l),E=f.createElement("script"),Ut(E),Ir(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},y.set(_,E))}}function E3(s,l){Ts.M(s,l);var f=Ha;if(f&&s){var y=Xt(f).hoistableScripts,_=Va(s),E=y.get(_);E||(E=f.querySelector(Ic(_)),E||(s=p({src:s,async:!0,type:"module"},l),(l=wi.get(_))&&ng(s,l),E=f.createElement("script"),Ut(E),Ir(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},y.set(_,E))}}function nk(s,l,f,y){var _=(_=te.current)?Ud(_):null;if(!_)throw Error(r(446));switch(s){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(l=Fa(f.href),f=Xt(_).hoistableStyles,y=f.get(l),y||(y={type:"style",instance:null,count:0,state:null},f.set(l,y)),y):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){s=Fa(f.href);var E=Xt(_).hoistableStyles,F=E.get(s);if(F||(_=_.ownerDocument||_,F={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},E.set(s,F),(E=_.querySelector(Nc(s)))&&!E._p&&(F.instance=E,F.state.loading=5),wi.has(s)||(f={rel:"preload",as:"style",href:f.href,crossOrigin:f.crossOrigin,integrity:f.integrity,media:f.media,hrefLang:f.hrefLang,referrerPolicy:f.referrerPolicy},wi.set(s,f),E||N3(_,s,f,F.state))),l&&y===null)throw Error(r(528,""));return F}if(l&&y!==null)throw Error(r(529,""));return null;case"script":return l=f.async,f=f.src,typeof f=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=Va(f),f=Xt(_).hoistableScripts,y=f.get(l),y||(y={type:"script",instance:null,count:0,state:null},f.set(l,y)),y):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,s))}}function Fa(s){return'href="'+Pe(s)+'"'}function Nc(s){return'link[rel="stylesheet"]['+s+"]"}function rk(s){return p({},s,{"data-precedence":s.precedence,precedence:null})}function N3(s,l,f,y){s.querySelector('link[rel="preload"][as="style"]['+l+"]")?y.loading=1:(l=s.createElement("link"),y.preload=l,l.addEventListener("load",function(){return y.loading|=1}),l.addEventListener("error",function(){return y.loading|=2}),Ir(l,"link",f),Ut(l),s.head.appendChild(l))}function Va(s){return'[src="'+Pe(s)+'"]'}function Ic(s){return"script[async]"+s}function ik(s,l,f){if(l.count++,l.instance===null)switch(l.type){case"style":var y=s.querySelector('style[data-href~="'+Pe(f.href)+'"]');if(y)return l.instance=y,Ut(y),y;var _=p({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return y=(s.ownerDocument||s).createElement("style"),Ut(y),Ir(y,"style",_),qd(y,f.precedence,s),l.instance=y;case"stylesheet":_=Fa(f.href);var E=s.querySelector(Nc(_));if(E)return l.state.loading|=4,l.instance=E,Ut(E),E;y=rk(f),(_=wi.get(_))&&tg(y,_),E=(s.ownerDocument||s).createElement("link"),Ut(E);var F=E;return F._p=new Promise(function(X,re){F.onload=X,F.onerror=re}),Ir(E,"link",y),l.state.loading|=4,qd(E,f.precedence,s),l.instance=E;case"script":return E=Va(f.src),(_=s.querySelector(Ic(E)))?(l.instance=_,Ut(_),_):(y=f,(_=wi.get(E))&&(y=p({},f),ng(y,_)),s=s.ownerDocument||s,_=s.createElement("script"),Ut(_),Ir(_,"link",y),s.head.appendChild(_),l.instance=_);case"void":return null;default:throw Error(r(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(y=l.instance,l.state.loading|=4,qd(y,f.precedence,s));return l.instance}function qd(s,l,f){for(var y=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),_=y.length?y[y.length-1]:null,E=_,F=0;F<y.length;F++){var X=y[F];if(X.dataset.precedence===l)E=X;else if(E!==_)break}E?E.parentNode.insertBefore(s,E.nextSibling):(l=f.nodeType===9?f.head:f,l.insertBefore(s,l.firstChild))}function tg(s,l){s.crossOrigin==null&&(s.crossOrigin=l.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=l.referrerPolicy),s.title==null&&(s.title=l.title)}function ng(s,l){s.crossOrigin==null&&(s.crossOrigin=l.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=l.referrerPolicy),s.integrity==null&&(s.integrity=l.integrity)}var Gd=null;function sk(s,l,f){if(Gd===null){var y=new Map,_=Gd=new Map;_.set(f,y)}else _=Gd,y=_.get(f),y||(y=new Map,_.set(f,y));if(y.has(s))return y;for(y.set(s,null),f=f.getElementsByTagName(s),_=0;_<f.length;_++){var E=f[_];if(!(E[vr]||E[Jt]||s==="link"&&E.getAttribute("rel")==="stylesheet")&&E.namespaceURI!=="http://www.w3.org/2000/svg"){var F=E.getAttribute(l)||"";F=s+F;var X=y.get(F);X?X.push(E):y.set(F,[E])}}return y}function ok(s,l,f){s=s.ownerDocument||s,s.head.insertBefore(f,l==="title"?s.querySelector("head > title"):null)}function I3(s,l,f){if(f===1||l.itemProp!=null)return!1;switch(s){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;return l.rel==="stylesheet"?(s=l.disabled,typeof l.precedence=="string"&&s==null):!0;case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function ak(s){return!(s.type==="stylesheet"&&(s.state.loading&3)===0)}function T3(s,l,f,y){if(f.type==="stylesheet"&&(typeof y.media!="string"||matchMedia(y.media).matches!==!1)&&(f.state.loading&4)===0){if(f.instance===null){var _=Fa(y.href),E=l.querySelector(Nc(_));if(E){l=E._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(s.count++,s=Wd.bind(s),l.then(s,s)),f.state.loading|=4,f.instance=E,Ut(E);return}E=l.ownerDocument||l,y=rk(y),(_=wi.get(_))&&tg(y,_),E=E.createElement("link"),Ut(E);var F=E;F._p=new Promise(function(X,re){F.onload=X,F.onerror=re}),Ir(E,"link",y),f.instance=E}s.stylesheets===null&&(s.stylesheets=new Map),s.stylesheets.set(f,l),(l=f.state.preload)&&(f.state.loading&3)===0&&(s.count++,f=Wd.bind(s),l.addEventListener("load",f),l.addEventListener("error",f))}}var rg=0;function R3(s,l){return s.stylesheets&&s.count===0&&Xd(s,s.stylesheets),0<s.count||0<s.imgCount?function(f){var y=setTimeout(function(){if(s.stylesheets&&Xd(s,s.stylesheets),s.unsuspend){var E=s.unsuspend;s.unsuspend=null,E()}},6e4+l);0<s.imgBytes&&rg===0&&(rg=62500*d3());var _=setTimeout(function(){if(s.waitingForImages=!1,s.count===0&&(s.stylesheets&&Xd(s,s.stylesheets),s.unsuspend)){var E=s.unsuspend;s.unsuspend=null,E()}},(s.imgBytes>rg?50:800)+l);return s.unsuspend=f,function(){s.unsuspend=null,clearTimeout(y),clearTimeout(_)}}:null}function Wd(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xd(this,this.stylesheets);else if(this.unsuspend){var s=this.unsuspend;this.unsuspend=null,s()}}}var Yd=null;function Xd(s,l){s.stylesheets=null,s.unsuspend!==null&&(s.count++,Yd=new Map,l.forEach(A3,s),Yd=null,Wd.call(s))}function A3(s,l){if(!(l.state.loading&4)){var f=Yd.get(s);if(f)var y=f.get(null);else{f=new Map,Yd.set(s,f);for(var _=s.querySelectorAll("link[data-precedence],style[data-precedence]"),E=0;E<_.length;E++){var F=_[E];(F.nodeName==="LINK"||F.getAttribute("media")!=="not all")&&(f.set(F.dataset.precedence,F),y=F)}y&&f.set(null,y)}_=l.instance,F=_.getAttribute("data-precedence"),E=f.get(F)||y,E===y&&f.set(null,_),f.set(F,_),this.count++,y=Wd.bind(this),_.addEventListener("load",y),_.addEventListener("error",y),E?E.parentNode.insertBefore(_,E.nextSibling):(s=s.nodeType===9?s.head:s,s.insertBefore(_,s.firstChild)),l.state.loading|=4}}var Tc={$$typeof:j,Provider:null,Consumer:null,_currentValue:Y,_currentValue2:Y,_threadCount:0};function M3(s,l,f,y,_,E,F,X,re){this.tag=1,this.containerInfo=s,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=nt(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=nt(0),this.hiddenUpdates=nt(null),this.identifierPrefix=y,this.onUncaughtError=_,this.onCaughtError=E,this.onRecoverableError=F,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=re,this.incompleteTransitions=new Map}function lk(s,l,f,y,_,E,F,X,re,ye,we,Te){return s=new M3(s,l,f,F,re,ye,we,Te,X),l=1,E===!0&&(l|=24),E=ti(3,null,null,l),s.current=E,E.stateNode=s,l=Lp(),l.refCount++,s.pooledCache=l,l.refCount++,E.memoizedState={element:y,isDehydrated:f,cache:l},$p(E),s}function ck(s){return s?(s=ba,s):ba}function uk(s,l,f,y,_,E){_=ck(_),y.context===null?y.context=_:y.pendingContext=_,y=Xs(l),y.payload={element:f},E=E===void 0?null:E,E!==null&&(y.callback=E),f=Ks(s,y,l),f!==null&&(Yr(f,s,l),lc(f,s,l))}function dk(s,l){if(s=s.memoizedState,s!==null&&s.dehydrated!==null){var f=s.retryLane;s.retryLane=f!==0&&f<l?f:l}}function ig(s,l){dk(s,l),(s=s.alternate)&&dk(s,l)}function fk(s){if(s.tag===13||s.tag===31){var l=Do(s,67108864);l!==null&&Yr(l,s,67108864),ig(s,67108864)}}function mk(s){if(s.tag===13||s.tag===31){var l=oi();l=ht(l);var f=Do(s,l);f!==null&&Yr(f,s,l),ig(s,l)}}var Kd=!0;function D3(s,l,f,y){var _=H.T;H.T=null;var E=U.p;try{U.p=2,sg(s,l,f,y)}finally{U.p=E,H.T=_}}function O3(s,l,f,y){var _=H.T;H.T=null;var E=U.p;try{U.p=8,sg(s,l,f,y)}finally{U.p=E,H.T=_}}function sg(s,l,f,y){if(Kd){var _=og(y);if(_===null)qh(s,l,y,Zd,f),hk(s,y);else if(z3(_,s,l,f,y))y.stopPropagation();else if(hk(s,y),l&4&&-1<L3.indexOf(s)){for(;_!==null;){var E=wr(_);if(E!==null)switch(E.tag){case 3:if(E=E.stateNode,E.current.memoizedState.isDehydrated){var F=lt(E.pendingLanes);if(F!==0){var X=E;for(X.pendingLanes|=2,X.entangledLanes|=2;F;){var re=1<<31-Ze(F);X.entanglements[1]|=re,F&=~re}Zi(E),(pn&6)===0&&(Md=tt()+500,wc(0))}}break;case 31:case 13:X=Do(E,2),X!==null&&Yr(X,E,2),Od(),ig(E,2)}if(E=og(y),E===null&&qh(s,l,y,Zd,f),E===_)break;_=E}_!==null&&y.stopPropagation()}else qh(s,l,y,null,f)}}function og(s){return s=ql(s),ag(s)}var Zd=null;function ag(s){if(Zd=null,s=_t(s),s!==null){var l=o(s);if(l===null)s=null;else{var f=l.tag;if(f===13){if(s=a(l),s!==null)return s;s=null}else if(f===31){if(s=c(l),s!==null)return s;s=null}else if(f===3){if(l.stateNode.current.memoizedState.isDehydrated)return l.tag===3?l.stateNode.containerInfo:null;s=null}else l!==s&&(s=null)}}return Zd=s,null}function pk(s){switch(s){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(pt()){case me:return 2;case be:return 8;case Me:case Fe:return 32;case He:return 268435456;default:return 32}default:return 32}}var lg=!1,ao=null,lo=null,co=null,Rc=new Map,Ac=new Map,uo=[],L3="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function hk(s,l){switch(s){case"focusin":case"focusout":ao=null;break;case"dragenter":case"dragleave":lo=null;break;case"mouseover":case"mouseout":co=null;break;case"pointerover":case"pointerout":Rc.delete(l.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ac.delete(l.pointerId)}}function Mc(s,l,f,y,_,E){return s===null||s.nativeEvent!==E?(s={blockedOn:l,domEventName:f,eventSystemFlags:y,nativeEvent:E,targetContainers:[_]},l!==null&&(l=wr(l),l!==null&&fk(l)),s):(s.eventSystemFlags|=y,l=s.targetContainers,_!==null&&l.indexOf(_)===-1&&l.push(_),s)}function z3(s,l,f,y,_){switch(l){case"focusin":return ao=Mc(ao,s,l,f,y,_),!0;case"dragenter":return lo=Mc(lo,s,l,f,y,_),!0;case"mouseover":return co=Mc(co,s,l,f,y,_),!0;case"pointerover":var E=_.pointerId;return Rc.set(E,Mc(Rc.get(E)||null,s,l,f,y,_)),!0;case"gotpointercapture":return E=_.pointerId,Ac.set(E,Mc(Ac.get(E)||null,s,l,f,y,_)),!0}return!1}function gk(s){var l=_t(s.target);if(l!==null){var f=o(l);if(f!==null){if(l=f.tag,l===13){if(l=a(f),l!==null){s.blockedOn=l,cn(s.priority,function(){mk(f)});return}}else if(l===31){if(l=c(f),l!==null){s.blockedOn=l,cn(s.priority,function(){mk(f)});return}}else if(l===3&&f.stateNode.current.memoizedState.isDehydrated){s.blockedOn=f.tag===3?f.stateNode.containerInfo:null;return}}}s.blockedOn=null}function Qd(s){if(s.blockedOn!==null)return!1;for(var l=s.targetContainers;0<l.length;){var f=og(s.nativeEvent);if(f===null){f=s.nativeEvent;var y=new f.constructor(f.type,f);Ul=y,f.target.dispatchEvent(y),Ul=null}else return l=wr(f),l!==null&&fk(l),s.blockedOn=f,!1;l.shift()}return!0}function yk(s,l,f){Qd(s)&&f.delete(l)}function P3(){lg=!1,ao!==null&&Qd(ao)&&(ao=null),lo!==null&&Qd(lo)&&(lo=null),co!==null&&Qd(co)&&(co=null),Rc.forEach(yk),Ac.forEach(yk)}function Jd(s,l){s.blockedOn===l&&(s.blockedOn=null,lg||(lg=!0,e.unstable_scheduleCallback(e.unstable_NormalPriority,P3)))}var ef=null;function xk(s){ef!==s&&(ef=s,e.unstable_scheduleCallback(e.unstable_NormalPriority,function(){ef===s&&(ef=null);for(var l=0;l<s.length;l+=3){var f=s[l],y=s[l+1],_=s[l+2];if(typeof y!="function"){if(ag(y||f)===null)continue;break}var E=wr(f);E!==null&&(s.splice(l,3),l-=3,oh(E,{pending:!0,data:_,method:f.method,action:y},y,_))}}))}function Ua(s){function l(re){return Jd(re,s)}ao!==null&&Jd(ao,s),lo!==null&&Jd(lo,s),co!==null&&Jd(co,s),Rc.forEach(l),Ac.forEach(l);for(var f=0;f<uo.length;f++){var y=uo[f];y.blockedOn===s&&(y.blockedOn=null)}for(;0<uo.length&&(f=uo[0],f.blockedOn===null);)gk(f),f.blockedOn===null&&uo.shift();if(f=(s.ownerDocument||s).$$reactFormReplay,f!=null)for(y=0;y<f.length;y+=3){var _=f[y],E=f[y+1],F=_[Vt]||null;if(typeof E=="function")F||xk(f);else if(F){var X=null;if(E&&E.hasAttribute("formAction")){if(_=E,F=E[Vt]||null)X=F.formAction;else if(ag(_)!==null)continue}else X=F.action;typeof X=="function"?f[y+1]=X:(f.splice(y,3),y-=3),xk(f)}}}function vk(){function s(E){E.canIntercept&&E.info==="react-transition"&&E.intercept({handler:function(){return new Promise(function(F){return _=F})},focusReset:"manual",scroll:"manual"})}function l(){_!==null&&(_(),_=null),y||setTimeout(f,20)}function f(){if(!y&&!navigation.transition){var E=navigation.currentEntry;E&&E.url!=null&&navigation.navigate(E.url,{state:E.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var y=!1,_=null;return navigation.addEventListener("navigate",s),navigation.addEventListener("navigatesuccess",l),navigation.addEventListener("navigateerror",l),setTimeout(f,100),function(){y=!0,navigation.removeEventListener("navigate",s),navigation.removeEventListener("navigatesuccess",l),navigation.removeEventListener("navigateerror",l),_!==null&&(_(),_=null)}}}function cg(s){this._internalRoot=s}tf.prototype.render=cg.prototype.render=function(s){var l=this._internalRoot;if(l===null)throw Error(r(409));var f=l.current,y=oi();uk(f,y,s,l,null,null)},tf.prototype.unmount=cg.prototype.unmount=function(){var s=this._internalRoot;if(s!==null){this._internalRoot=null;var l=s.containerInfo;uk(s.current,2,null,s,null,null),Od(),l[Vn]=null}};function tf(s){this._internalRoot=s}tf.prototype.unstable_scheduleHydration=function(s){if(s){var l=mn();s={blockedOn:null,target:s,priority:l};for(var f=0;f<uo.length&&l!==0&&l<uo[f].priority;f++);uo.splice(f,0,s),f===0&&gk(s)}};var bk=t.version;if(bk!=="19.2.4")throw Error(r(527,bk,"19.2.4"));U.findDOMNode=function(s){var l=s._reactInternals;if(l===void 0)throw typeof s.render=="function"?Error(r(188)):(s=Object.keys(s).join(","),Error(r(268,s)));return s=m(l),s=s!==null?h(s):null,s=s===null?null:s.stateNode,s};var B3={bundleType:0,version:"19.2.4",rendererPackageName:"react-dom",currentDispatcherRef:H,reconcilerVersion:"19.2.4"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var nf=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!nf.isDisabled&&nf.supportsFiber)try{ke=nf.inject(B3),Oe=nf}catch{}}return Oc.createRoot=function(s,l){if(!i(s))throw Error(r(299));var f=!1,y="",_=E1,E=N1,F=I1;return l!=null&&(l.unstable_strictMode===!0&&(f=!0),l.identifierPrefix!==void 0&&(y=l.identifierPrefix),l.onUncaughtError!==void 0&&(_=l.onUncaughtError),l.onCaughtError!==void 0&&(E=l.onCaughtError),l.onRecoverableError!==void 0&&(F=l.onRecoverableError)),l=lk(s,1,!1,null,null,f,y,null,_,E,F,vk),s[Vn]=l.current,Uh(s),new cg(l)},Oc.hydrateRoot=function(s,l,f){if(!i(s))throw Error(r(299));var y=!1,_="",E=E1,F=N1,X=I1,re=null;return f!=null&&(f.unstable_strictMode===!0&&(y=!0),f.identifierPrefix!==void 0&&(_=f.identifierPrefix),f.onUncaughtError!==void 0&&(E=f.onUncaughtError),f.onCaughtError!==void 0&&(F=f.onCaughtError),f.onRecoverableError!==void 0&&(X=f.onRecoverableError),f.formState!==void 0&&(re=f.formState)),l=lk(s,1,!0,l,f??null,y,_,re,E,F,X,vk),l.context=ck(null),f=l.current,y=oi(),y=ht(y),_=Xs(y),_.callback=null,Ks(f,_,y),f=y,l.current.lanes=f,Qt(l,f),Zi(l),s[Vn]=l.current,Uh(s),new tf(l)},Oc.version="19.2.4",Oc}var Tk;function X3(){if(Tk)return fg.exports;Tk=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),fg.exports=Y3(),fg.exports}var K3=X3();const Z3=2e3,Q3=3e4,J3=20,eM=100,tM=3e4,nM=1e4,rM=new Set(["collab_sync","kanban_create_board","kanban_create_task","kanban_update_task","kanban_move_task","kanban_delete_board","kanban_delete_task","kanban_assign","kanban_status","kanban_switch_view","run_task","create_session","session_send","session_update_config","session_delete","session_detail","session_stop","session_resume","session_complete","session_update_title","secretary_send","project_index","recovery_action","comms_state","comms_read_message"]),iM=3e4;class sM{constructor(t,n){this.url=t,this.handlers=n,this.ws=null,this.reconnectTimer=null,this.closedByUser=!1,this.reconnectAttempt=0,this.pendingQueue=[],this.heartbeatTimer=null,this.pongTimer=null,this.pendingSessionDetailRequests=[]}updateUrl(t){this.url=t}connect(){this.closedByUser=!1,this.handlers.onStatus?.("connecting"),this.ws=new WebSocket(this.url),this.ws.onopen=()=>{this.reconnectAttempt=0,this.handlers.onStatus?.("connected"),this.flushPendingQueue(),this.startHeartbeat()},this.ws.onmessage=t=>{this.handleMessage(t.data)},this.ws.onerror=()=>{this.handlers.onStatus?.("error","WebSocket error")},this.ws.onclose=()=>{this.stopHeartbeat(),this.failPendingSessionDetailRequests("connection_closed"),this.handlers.onStatus?.("disconnected"),this.ws=null,this.closedByUser||this.scheduleReconnect()}}disconnect(){this.closedByUser=!0,this.stopHeartbeat(),this.failPendingSessionDetailRequests("disconnected"),this.reconnectTimer!==null&&(window.clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws?.close(),this.ws=null}send(t){if(!this.ensureProjectScope(t))return"send-failed";const n=JSON.stringify(t);if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return this.pendingQueue.length<eM?(this.pendingQueue.push(n),"queued"):"queue-full";try{return this.ws.send(n),"sent"}catch{return"send-failed"}}createAgent(t){this.send({type:"create_agent",role:t})}deleteAgent(t){this.send({type:"delete_agent",agent_id:t})}moveAgent(t,n,r){this.send({type:"move_agent",agent_id:t,office_id:n,seat_zone:r})}listAgents(){this.send({type:"list_agents"})}createFromTemplate(t,n){this.send({type:"create_agent",role:{id:t,template:t,name:n??t}})}setExecutionMode(t,n,r,i){this.send({type:"set_execution_mode",mode:t,profile:n??"corporate",preferred_agent:r,org_id:i})}assignTaskToAgent(t,n,r,i){const o=this.requireProjectId(t,"kanban_assign");this.send({type:"kanban_assign",task_id:n,agent_id:r,task_title:i,project_id:o})}updateTaskStatus(t,n,r){const i=this.requireProjectId(t,"kanban_status");this.send({type:"kanban_status",task_id:n,status:r,project_id:i})}kanbanCreateTask(t){const n=this.requireProjectId(t.project_id,"kanban_create_task");this.send({type:"kanban_create_task",...t,project_id:n})}kanbanUpdateTask(t,n,r){const i=this.requireProjectId(t,"kanban_update_task");this.send({type:"kanban_update_task",task_id:n,updates:r,project_id:i})}kanbanMoveTask(t,n,r,i=0){const o=this.requireProjectId(t,"kanban_move_task");this.send({type:"kanban_move_task",task_id:n,column_id:r,sort_order:i,project_id:o})}kanbanDeleteBoard(t,n){const r=this.requireProjectId(t,"kanban_delete_board");this.send({type:"kanban_delete_board",project_id:r,board_id:n})}kanbanDeleteTask(t,n){const r=this.requireProjectId(t,"kanban_delete_task");this.send({type:"kanban_delete_task",task_id:n,project_id:r})}kanbanSwitchView(t,n,r){const i=this.requireProjectId(t,"kanban_switch_view");this.send({type:"kanban_switch_view",level:n,target_id:r,project_id:i})}getAgentDetail(t){this.send({type:"get_agent_detail",agent_id:t})}collabSync(t,n,r){const i=this.requireProjectId(t,"collab_sync");this.send({type:"collab_sync",project_id:i,switch_seq:n,view_generation:r})}projectIndex(t,n,r){const i=this.requireProjectId(t,"project_index");this.send({type:"project_index",project_id:i,switch_seq:n,view_generation:r})}createSession(t,n,r,i,o,a){const c=this.requireProjectId(t,"create_session");this.send({type:"create_session",project_id:c,title:n??"New Chat",exec_mode:r,company_profile:i,preferred_agent:o,org_id:a})}sessionSend(t,n,r,i,o){const a=this.requireProjectId(t,"session_send");this.send({type:"session_send",project_id:a,task_id:n,content:r,attachments:i??[],metadata:o})}deleteSession(t,n){const r=this.requireProjectId(t,"session_delete");this.send({type:"session_delete",project_id:r,task_id:n})}sessionUpdateTitle(t,n,r){const i=this.requireProjectId(t,"session_update_title");this.send({type:"session_update_title",project_id:i,task_id:n,title:r})}sessionUpdateConfig(t,n,r,i,o,a){const c=this.requireProjectId(t,"session_update_config");this.send({type:"session_update_config",project_id:c,task_id:n,exec_mode:r,company_profile:i,preferred_agent:o,org_id:a})}sessionStop(t,n){const r=this.requireProjectId(t,"session_stop");this.send({type:"session_stop",project_id:r,task_id:n})}sessionResume(t,n,r){const i=this.requireProjectId(t,"session_resume");this.send({type:"session_resume",project_id:i,task_id:n,content:r})}sessionComplete(t,n){const r=this.requireProjectId(t,"session_complete");this.send({type:"session_complete",project_id:r,task_id:n})}sessionDetail(t,n,r){const i=this.requireProjectId(t,"session_detail"),o=r?.detailLevel??"summary";return new Promise(a=>{const c={type:"session_detail",project_id:i,task_id:n,limit:r?.limit,before_created_at:r?.beforeCreatedAt,before_message_id:r?.beforeMessageId,detail_level:o,include:r?.include,view_generation:r?.viewGeneration},d=JSON.stringify(c),m={projectId:i,taskId:n,detailLevel:o,viewGeneration:r?.viewGeneration,historyPage:r?.beforeCreatedAt!==void 0||!!r?.beforeMessageId,wireData:d,queued:!1,settled:!1,timeout:null,resolve:a};m.timeout=setTimeout(()=>{const p=this.pendingSessionDetailRequests.indexOf(m);p>=0&&this.timeoutSessionDetailRequest(p)},iM),this.pendingSessionDetailRequests.push(m);const h=this.send(c);if(m.queued=h==="queued",h==="queue-full"||h==="send-failed"){const p=this.pendingSessionDetailRequests.indexOf(m);p>=0&&this.failSessionDetailRequest(p,h==="queue-full"?"send_queue_full":"send_failed")}})}secretarySend(t,n){const r=this.requireProjectId(t,"secretary_send");this.send({type:"secretary_send",project_id:r,content:n})}listProjects(){this.send({type:"list_projects"})}createProject(t){this.send({type:"create_project",project_id:this.normalizeProjectId(t)})}deleteProject(t){this.send({type:"delete_project",project_id:this.normalizeProjectId(t)})}switchProject(t,n){this.send({type:"switch_project",project_id:this.normalizeProjectId(t),switch_seq:n})}orgInfo(){this.send({type:"org_info"})}talentImport(t){this.send({type:"talent_import",repo_path:t})}talentList(){this.send({type:"talent_list"})}talentScanLocal(){this.send({type:"talent_scan_local"})}talentImportSelected(t){this.send({type:"talent_import_selected",template_ids:t})}talentHire(t,n,r,i){this.send({type:"talent_hire",template_id:t,role_id:n,employee_name:r,org_id:i})}employeeDetail(t){this.send({type:"employee_detail",employee_id:t})}reorgList(){this.send({type:"reorg_list"})}reorgDecide(t,n,r){this.send({type:"reorg_decide",proposal_id:t,approved:n,notes:r})}importEmployeeAsAgent(t,n){this.send({type:"import_employee_as_agent",employee_id:t,office_id:n})}marketBrowse(){this.send({type:"market_browse"})}marketPreview(t){this.send({type:"market_preview",preset_id:t})}marketApplyPreset(t,n="namespace"){this.send({type:"market_apply_preset",preset_id:t,strategy:n})}marketListInstalled(){this.send({type:"market_list_installed"})}marketExport(t){this.send({type:"market_export",...t})}marketInstall(t,n="namespace"){this.send({type:"market_install",path:t,strategy:n})}marketUninstall(t){this.send({type:"market_uninstall",package_id:t})}addRole(t,n,r,i="owner",o){this.send({type:"add_role",role_id:t,name:n,responsibility:r,reports_to:i,icon:o||null})}bulkAddRoles(t){this.send({type:"bulk_add_roles",roles:t})}updateRole(t,n){this.send({type:"update_role",role_id:t,...n})}deleteRole(t){this.send({type:"delete_role",role_id:t})}updateRuntimePolicy(t){this.send({type:"update_runtime_policy",policy:t})}updateOrgStrategy(t){this.send({type:"update_org_strategy",...t})}resetArchitecture(){this.send({type:"reset_architecture"})}orgConfigExport(){this.send({type:"org_config_export"})}orgConfigImport(t,n){this.send({type:"org_config_import",yaml:t,dry_run:n})}orgSavedList(){this.send({type:"org_saved_list"})}orgSavedSaveAs(t,n){this.send({type:"org_saved_save_as",name:t,overwrite:n})}orgSavedCreate(t,n){this.send({type:"org_saved_create",organization_name:t,members:n})}orgSavedLoad(t){this.send({type:"org_saved_load",name:t})}orgSavedDelete(t){this.send({type:"org_saved_delete",name:t})}recoveryAction(t,n,r){const i=this.requireProjectId(t,"recovery_action");this.send({type:"recovery_action",project_id:i,action:n,parent_task_id:r})}commsState(t,n){const r=this.requireProjectId(t,"comms_state");this.send({type:"comms_state",project_id:r,...n||{}})}commsReadMessage(t,n){const r=this.requireProjectId(t,"comms_read_message");this.send({type:"comms_read_message",project_id:r,path:n})}normalizeProjectId(t){return typeof t=="string"?t.trim():""}requireProjectId(t,n){const r=this.normalizeProjectId(t);if(!r)throw new Error(`${n} requires non-empty project_id`);return r}ensureProjectScope(t){const n=typeof t.type=="string"?t.type:"";if(!rM.has(n))return!0;const r=this.normalizeProjectId(t.project_id??t.projectId);if(!r){const i=`${n} requires non-empty project_id`;return console.error(`[wsClient] ${i}`,t),this.handlers.onAck?.({ok:!1,error:i,action:n}),!1}return t.project_id=r,!0}handleMessage(t){if(typeof t!="string")return;let n=null;try{n=JSON.parse(t)}catch{return}if(!(!n||typeof n!="object"||!("type"in n)))try{switch(n.type){case"snapshot":this.handlers.onSnapshot?.(n.payload);break;case"event":this.handlers.onEvent?.(n.payload);break;case"ack":{const r=this.settleSessionDetailRequest(n.payload);this.handlers.onAck?.(r);break}case"channel_created":this.handlers.onChannelCreated?.(n.payload);break;case"board_task_created":case"board_task_moved":this.handlers.onBoardEvent?.(n.payload);break;case"board_task_status_changed":case"execution_mode_resolved":case"project_run_updated":case"seat_digest_updated":case"work_item_batch_updated":case"session_runtime_control":this.handlers.onCollabMessage?.(n.type,n.payload);break;case"cross_office_collab":this.handlers.onCrossOfficeCollab?.(n.payload);break;case"chat_new_message":case"chat_channel_created":case"kanban_updated":case"kanban_board_created":case"collab_sync_push":case"project_index_push":this.handlers.onCollabMessage?.(n.type,n.payload);break;case"agent_runtime_update":this.handlers.onAgentRuntimeUpdate?.(n.payload);break;case"worker_notification":this.handlers.onWorkerNotification?.(n.payload);break;case"session_progress":this.handlers.onSessionProgress?.(n.payload);break;case"work_item_progress":this.handlers.onWorkItemProgress?.(n.payload);break;case"kanban_view_data":this.handlers.onKanbanViewData?.(n.payload);break;case"session_created":this.handlers.onSessionCreated?.(n.payload);break;case"session_updated":this.handlers.onSessionUpdated?.(n.payload);break;case"session_message":this.handlers.onSessionMessage?.(n.payload);break;case"session_title_updated":this.handlers.onSessionTitleUpdated?.(n.payload);break;case"session_deleted":this.handlers.onSessionDeleted?.(n.payload);break;case"child_session_created":this.handlers.onChildSessionCreated?.(n.payload);break;case"project_switched":this.handlers.onProjectSwitched?.(n.payload);break;case"project_deleted":this.handlers.onProjectDeleted?.(n.payload);break;case"org_info":this.handlers.onOrgInfo?.(n.payload);break;case"comms_state":this.handlers.onCommsState?.(n.payload);break;case"comms_message":this.handlers.onCommsMessage?.(n.payload);break;case"comms_state_dirty":try{const r=typeof n.payload?.project_id=="string"?n.payload.project_id:"";r&&this.commsState(r)}catch{}break;case"recovery_status":this.handlers.onRecoveryStatus?.(n.payload);break;case"recovery_result":this.handlers.onRecoveryResult?.(n.payload);break;case"talent_list":this.handlers.onTalentList?.(n.payload);break;case"talent_scan_local":this.handlers.onTalentScanLocal?.(n.payload);break;case"employee_detail":this.handlers.onEmployeeDetail?.(n.payload);break;case"reorg_list":this.handlers.onReorgList?.(n.payload);break;case"market_list_installed":this.handlers.onMarketListInstalled?.(n.payload);break;case"market_browse":this.handlers.onMarketBrowse?.(n.payload);break;case"market_preview":this.handlers.onMarketPreview?.(n.payload);break;case"org_config_export":this.handlers.onOrgConfigExport?.(n.payload);break;case"org_config_import":this.handlers.onOrgConfigImport?.(n.payload);break;case"org_saved_list":this.handlers.onOrgSavedList?.(n.payload);break;case"org_saved_save_as":this.handlers.onOrgSavedSaveAs?.(n.payload);break;case"org_saved_create":this.handlers.onOrgSavedCreate?.(n.payload);break;case"org_saved_load":this.handlers.onOrgSavedLoad?.(n.payload);break;case"org_saved_delete":this.handlers.onOrgSavedDelete?.(n.payload);break;case"pong":this.handlePong();break;default:break}}catch(r){console.error("[wsClient] Error handling message:",n.type,r)}}settleSessionDetailRequest(t){const n=typeof t.action=="string"?t.action.trim():"";if(!(n==="session_detail"||!n&&t.error==="store_not_ready"))return t;const i=this.normalizeProjectId(t.project_id??t.projectId),o=typeof t.task_id=="string"?t.task_id:"",a=t.detail_level==="full"?"full":t.detail_level==="summary"?"summary":"",c=typeof t.view_generation=="number"?t.view_generation:void 0,d=this.pendingSessionDetailRequests.findIndex(p=>(!i||p.projectId===i)&&(!o||p.taskId===o)&&(!a||p.detailLevel===a)&&(c===void 0||p.viewGeneration===c));if(d<0)return t;const[m]=this.pendingSessionDetailRequests.splice(d,1);m.timeout!==null&&clearTimeout(m.timeout);const h={...t,action:"session_detail",project_id:i||m.projectId,task_id:o||m.taskId,detail_level:a||m.detailLevel,client_history_page:m.historyPage};return m.settled||(m.settled=!0,m.resolve(h)),h}timeoutSessionDetailRequest(t){const n=this.pendingSessionDetailRequests[t];if(n){if(n.queued){this.failSessionDetailRequest(t,"request_timeout");return}n.timeout!==null&&clearTimeout(n.timeout),n.timeout=null,n.settled||(n.settled=!0,n.resolve(this.sessionDetailFailurePayload(n,"request_timeout")))}}failSessionDetailRequest(t,n){const[r]=this.pendingSessionDetailRequests.splice(t,1);if(r){if(r.timeout!==null&&clearTimeout(r.timeout),r.queued){const i=this.pendingQueue.indexOf(r.wireData);i>=0&&this.pendingQueue.splice(i,1)}r.settled||r.resolve(this.sessionDetailFailurePayload(r,n))}}sessionDetailFailurePayload(t,n){return{ok:!1,action:"session_detail",error:n,project_id:t.projectId,task_id:t.taskId,detail_level:t.detailLevel,client_history_page:t.historyPage}}failPendingSessionDetailRequests(t){for(;this.pendingSessionDetailRequests.length>0;)this.failSessionDetailRequest(0,t)}flushPendingQueue(){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;const t=this.pendingQueue.splice(0);for(const n of t){const r=this.pendingSessionDetailRequests.findIndex(i=>i.queued&&i.wireData===n);try{this.ws.send(n),r>=0&&(this.pendingSessionDetailRequests[r].queued=!1)}catch{r>=0&&this.failSessionDetailRequest(r,"send_failed")}}}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=window.setInterval(()=>{!this.ws||this.ws.readyState!==WebSocket.OPEN||(this.ws.send(JSON.stringify({type:"ping"})),this.pongTimer=window.setTimeout(()=>{this.pongTimer=null,this.ws?.close()},nM))},tM)}stopHeartbeat(){this.heartbeatTimer!==null&&(window.clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pongTimer!==null&&(window.clearTimeout(this.pongTimer),this.pongTimer=null)}handlePong(){this.pongTimer!==null&&(window.clearTimeout(this.pongTimer),this.pongTimer=null)}scheduleReconnect(){if(this.reconnectTimer!==null)return;if(this.reconnectAttempt>=J3){this.handlers.onStatus?.("error","max reconnect attempts reached");return}const t=Math.min(Z3*Math.pow(2,this.reconnectAttempt),Q3);this.reconnectAttempt++,this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}}var oM=H3();const Kr=ca(oM),T=32,Kn=20,ci=25,Dv=2,Rk=3,aM=Kn*Rk+Dv*(Rk-1),lM=ci,gg=aM,Lc=lM,ru=T*8,il=T*4,ll=T*20,Uj=1.8,cM=Uj,uM=Uj,dM=30,fM=8,mM=-2,pM=.22,hM=5,gM=23;function yM(){if(typeof window>"u")return null;const e=o=>{const a=new URLSearchParams(o);return a.get("day")==="1"||a.get("daytime")==="1"?"day":a.get("night")==="1"?"night":null};let t=e(window.location.search||"");if(t)return t;const n=window.location.hash;if(!n)return null;const r=n.indexOf("?");if(r>=0&&(t=e(n.slice(r+1)),t))return t;const i=n.replace(/^#/,"");return i.includes("=")&&(t=e(i),t)?t:null}function iu(e=new Date){if(typeof window<"u")try{const n=yM();if(n==="day")return!0;if(n==="night")return!1;const r=window.localStorage?.getItem("opc_outdoor_override");if(r==="day")return!0;if(r==="night")return!1;if(window.localStorage?.getItem("opc_outdoor_day")==="1")return!0;if(window.localStorage?.getItem("opc_outdoor_night")==="1")return!1}catch{}const t=e.getHours();return t>=hM&&t<=gM}const Ak=11064556,Mk=3228986,xM=200,vM=100,bM=60,Rf=2,Af=20,qj=3,Gj=6,qa=2.5,_M=8,kM=15,Dk=5,Ok=10,SM=5,Lk=3,zk=2;function wM(e,t,n){const r=t||e.clientWidth||window.innerWidth-380,i=n||e.clientHeight||window.innerHeight-48,o=iu()?"#a8d4ec":"#31453a";return{type:Kr.CANVAS,parent:e,width:r,height:i,pixelArt:!0,backgroundColor:o,physics:{default:"arcade",arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:Kr.Scale.RESIZE,autoCenter:Kr.Scale.NONE,parent:e},render:{antialias:!1,pixelArt:!0}}}const CM=16,jM=32,Pk=6;class EM extends Kr.Scene{constructor(){super("Boot")}preload(){this.load.image("office-bg","assets/office-bg.png"),this.load.spritesheet("office-tileset-32","assets/office-tileset-32.png",{frameWidth:32,frameHeight:32});for(let n=0;n<Pk;n++)this.load.spritesheet(`char_${n}`,`assets/characters/char_${n}.png`,{frameWidth:CM,frameHeight:jM});const t=this.add.graphics();this.load.on("progress",n=>{t.clear(),t.fillStyle(4886745,1),t.fillRect(this.scale.width/2-100,this.scale.height/2-8,200*n,16)}),this.load.on("complete",()=>t.destroy())}create(){this.createCharacterAnimations(),console.log("[BootScene] All assets loaded"),this.scene.start("Office")}createCharacterAnimations(){const n=[{name:"down",row:0},{name:"up",row:1},{name:"right",row:2},{name:"left",row:2}];for(let r=0;r<Pk;r++){const i=`char_${r}`;for(const o of n){const a=o.row*7;this.anims.create({key:`${i}_walk_${o.name}`,frames:[{key:i,frame:a},{key:i,frame:a+1},{key:i,frame:a+2},{key:i,frame:a+1}],frameRate:8,repeat:-1}),this.anims.create({key:`${i}_idle_${o.name}`,frames:[{key:i,frame:a+1}],frameRate:1}),this.anims.create({key:`${i}_type_${o.name}`,frames:[{key:i,frame:a+3},{key:i,frame:a+4}],frameRate:3,repeat:-1}),this.anims.create({key:`${i}_read_${o.name}`,frames:[{key:i,frame:a+5},{key:i,frame:a+6}],frameRate:2,repeat:-1}),this.anims.create({key:`${i}_coffee_${o.name}`,frames:[{key:i,frame:a+1},{key:i,frame:a}],frameRate:2,repeat:-1}),this.anims.create({key:`${i}_celebrate_${o.name}`,frames:[{key:i,frame:a},{key:i,frame:a+1},{key:i,frame:a+2},{key:i,frame:a+1}],frameRate:6,repeat:-1})}}}}const su=["####################","####################","####################","#######......#######","#######..##..#######","#######..##..#######","#######..##..#######","#######......#######","#########.##########","#########.##########","#.............#....#","#..................#","#.#########....##..#","#...........#......#","#...........#..##..#","#.#########.#......#","#...........#......#","#...........####.###","##########..####.###","##########..#......#","#...........#..#...#","#...####....#.###..#","#...........#......#","#.##....#####....###","####################"],ou=[[8,4],[8,5],[8,6],[11,4],[11,5],[11,6],[3,13],[6,13],[9,13],[3,16],[6,16],[9,16],[14,12],[17,12],[14,14],[17,14],[15,22]],Wj="office-multi-config";function Yj(){const e=Kn+Dv;return[{id:"office-0",name:"Office A",offsetCol:0,mapStr:[...su],seats:[...ou],assignedAgents:[]},{id:"office-1",name:"Office B",offsetCol:e,mapStr:[...su],seats:[...ou],assignedAgents:[]},{id:"office-2",name:"Office C",offsetCol:e*2,mapStr:[...su],seats:[...ou],assignedAgents:[]}]}Yj();function Zn(){try{const e=localStorage.getItem(Wj);if(e){const t=JSON.parse(e);if(Array.isArray(t)&&t.length>0)return t}}catch{}return Yj()}function Rm(e){localStorage.setItem(Wj,JSON.stringify(e))}function NM(e,t){const n=Zn(),r=n.find(i=>i.id===e);r&&(r.name=t,Rm(n))}function yg(e,t){const n=Zn();for(const i of n)i.assignedAgents=i.assignedAgents.filter(o=>o!==t);const r=n.find(i=>i.id===e);r&&r.assignedAgents.push(t),Rm(n)}function IM(e){const t=Zn();for(const n of t)n.assignedAgents=n.assignedAgents.filter(r=>r!==e);Rm(t)}function TM(e){return Zn().find(t=>t.assignedAgents.includes(e))}function RM(e,t,n){const r=Zn(),i=r.find(o=>o.id===e);i&&(i.mapStr=t,i.seats=n,Rm(r))}function Xj(e){const t=[];for(let n=0;n<ci;n++){const r=[],i=n<e.length?e[n]:"#".repeat(Kn);for(let o=0;o<Kn;o++)r.push(o<i.length&&i[o]==="."?0:1);t.push(r)}return t}function Kj(e){const t=e.length>0?e[e.length-1].offsetCol+Kn:Kn,n=[];for(let r=0;r<ci;r++)n.push(new Array(t).fill(1));for(const r of e){const i=Xj(r.mapStr);for(let o=0;o<ci;o++)for(let a=0;a<Kn;a++)n[o][r.offsetCol+a]=i[o][a]}return n}function xg(e,t=Kn,n=ci){const r=[];for(let i=0;i<n;i++){const o=[],a=i<e.length?e[i]:"#".repeat(t);for(let c=0;c<t;c++)o.push(c<a.length&&a[c]==="."?0:1);r.push(o)}return r}function Bk(e){return e.map(t=>t.map(n=>n===0?".":"#").join(""))}function Dr(e,t,n,r,i=t+r){return{x:Math.round(e*T),y:Math.round(t*T),w:Math.round(n*T),h:Math.round(r*T),depthY:Math.round(i*T)}}const AM=[Dr(8,4,4.3,3.35,7.15),Dr(2.3,8.65,5.35,1.95,10.55),Dr(11.1,8.55,3.1,1.7,10.45),Dr(14.15,8.55,4.95,2,10.95),Dr(2.1,11.45,3.05,1.8,12.95),Dr(5.25,11.45,3.05,1.8,12.95),Dr(8.45,11.45,3.05,1.8,12.95),Dr(2.1,14.55,3.05,1.85,16.1),Dr(5.25,14.55,3.05,1.85,16.1),Dr(8.45,14.55,3.05,1.85,16.1),Dr(14,12.15,4.85,3,15.3),Dr(1,19.55,3.05,1.15,20.7),Dr(4.45,20.45,3.35,1.35,21.8),Dr(14.1,20.5,3.15,1.85,22.3),Dr(8.05,23.1,4.2,1,24.1),Dr(17,23.1,2.1,1,24.1)];class qf{constructor(){this.bgSprites=[],this.foregroundSprites=[],this.nameLabels=[],this.decor=[],this.outdoorBackdrop=null,this.outdoorParking=null,this.tilesetFrames={shelfA:61,shelfB:62,waterCooler:105,waterCoolerAlt:106,fridge:108,vending:110,plantA:148,plantB:150,boxA:153,boxB:154,boxC:158}}clearSceneDecor(){for(const t of this.bgSprites)t.destroy();for(const t of this.foregroundSprites)t.destroy();for(const t of this.nameLabels)t.destroy();for(const t of this.decor)t.destroy();this.bgSprites=[],this.foregroundSprites=[],this.nameLabels=[],this.decor=[],this.outdoorBackdrop=null,this.outdoorParking=null}addForegroundOccluders(t,n){const r=n.offsetCol*T;for(const i of AM){const o=t.add.image(r,0,"office-bg");o.setOrigin(0,0),o.setCrop(i.x,i.y,i.w,i.h),o.setDepth(i.depthY),this.foregroundSprites.push(o)}}addPixelLabel(t,n,r,i,o,a="#f5efe3",c="10px"){const d=t.add.text(n,r,i,{fontSize:c,fontFamily:"monospace",color:a,backgroundColor:o,padding:{left:4,right:4,top:2,bottom:2},resolution:2,align:"center"});return d.setOrigin(.5,.5),d.setDepth(-94),this.decor.push(d),d}addTilesetSprite(t,n,r,i,o=1){const a=t.add.image(n,r,"office-tileset-32",i);return a.setOrigin(0,0),a.setScale(o),a.setDepth(-92),this.decor.push(a),a}getOutdoorMetrics(t,n){const r=n+T*10.1,i=T*4.1,o=r+i+T*.15,a=o+T*1.1;return{gateCenterX:t/2,roadY:r,roadHeight:i,waterTopY:o,dockY:a,bottomY:n+ll}}paintStylizedParkingCar(t,n,r,i,o,a){const c=o?{outline:1314840,body:14240338,bodyMid:13057092,bodyDark:9316914,cabin:14706798,cabinHi:15894668,cabinLo:11546684,glass:6062264,glassDeep:3824776,glassHi:12116220,tire:1842724,tireOuter:1184794,bonnetHi:15233140}:{outline:1053728,body:4095176,bodyMid:3105960,bodyDark:2377848,cabin:6068444,cabinHi:8303856,cabinLo:3434664,glass:4878240,glassDeep:3164264,glassHi:11065599,tire:1842724,tireOuter:1184794,bonnetHi:7121128},d=(x,v,k,S,b,w=1)=>{t.fillStyle(b,w);const j=i?-x-k:x;t.fillRect(Math.round(n+j),Math.round(r+v),k,S)};t.fillStyle(988175,.28),t.fillEllipse(n,r+36,36,9),d(-16,-38,32,76,c.outline),d(-15,-37,30,74,c.body),d(-14,2,28,35,c.bodyDark),d(-14,-4,28,10,c.bodyMid),d(-13,8,26,22,c.body),d(-13,8,26,7,c.bonnetHi,.92),d(-13,-35,26,32,c.cabin),d(-13,-35,26,4,c.cabinHi),d(-13,-8,26,5,c.cabinLo),d(-11,-7,22,11,c.glassDeep),d(-11,-7,22,5,c.glass),d(-10,-6,8,3,c.glassHi),d(-1,-6,6,2,c.glassHi,.75),d(-16,-2,3,8,c.bodyDark),d(13,-2,3,8,c.bodyDark);const m=22,h=-30,p=7,g=9;for(const x of[m,h])d(-22,x,p,g,c.tire),d(15,x,p,g,c.tire),d(-22,x,1,g,c.tireOuter),d(15+p-1,x,1,g,c.tireOuter);for(const x of[m,h])d(-18,x+1,4,g-2,c.bodyDark),d(14,x+1,4,g-2,c.bodyDark);a&&(d(-12,33,5,4,16052970),d(7,33,5,4,16052970),d(-11,34,2,2,16775368),d(8,34,2,2,16775368),d(-13,-38,4,3,16733488),d(9,-38,4,3,13121568),d(-18,4,3,4,16763976),d(15,4,3,4,16752688)),d(-15,-37,30,1,c.cabinHi,.45),d(-14,28,28,1,0,.12)}buildOutdoorBackdrop(t,n,r,i,o,a){const c=t.add.graphics();c.setDepth(-320);const d=-ru,m=-il,h=n+ru*2,p=r+il+ll,g=d+h,x=r+ll,v=m+T*6.2,k=r+T*.35,S=r+T*4.25,b=r+T*5.9,{gateCenterX:w,roadY:j,roadHeight:N,waterTopY:O,dockY:R}=this.getOutdoorMetrics(n,r),L=o?{skyTop:7259376,skyBand:11066104,towerFar:8953780,towerNear:10268868,towerRoof:11847900,winColor:16777215,winAlpha:.22,facadeColor:14214384,facadeAlpha:.36,bridgeColor:12636384,bridgeAlpha:.92,grassBase:3831876,grassLawn:6076520,treeTrunk:3562560,treeMid:5023848,treeHi:7526532,grove0:3168312,grove1:5150816,grove2:6865016,fence:10127992,road:3948616,roadDash:14207120,curb:3551792,water:3508408,ripple:6073556,rippleHi:10017008,edgeGreen:5810280,edgeGreenHi:8310928,logoDirt:12105880,logoDirtHi:13684920}:{skyTop:2503493,skyBand:3494250,towerFar:1253426,towerNear:1911614,towerRoof:2373195,winColor:15979916,winAlpha:.42,facadeColor:3163484,facadeAlpha:.45,bridgeColor:2306631,bridgeAlpha:.95,grassBase:3232315,grassLawn:5210447,treeTrunk:2835501,treeMid:4156223,treeHi:5539412,grove0:2637864,grove1:4222784,grove2:6130776,fence:8153685,road:3159098,roadDash:13676922,curb:3025447,water:2181730,ripple:3967139,rippleHi:7913424,edgeGreen:7310175,edgeGreenHi:9417850,logoDirt:10265207,logoDirtHi:12301197};if(c.fillStyle(L.skyTop,1),c.fillRect(d,m,h,T*8.2),c.fillStyle(L.skyBand,1),c.fillRect(d,m+T*6.15,h,T*2.05),o){c.fillStyle(16775400,.45);for(let pe=0;pe<5;pe++){const $e=d+h*(.12+pe*.19)+pe*17%40,et=m+T*(1.4+pe%3*.35);c.fillEllipse($e,et,T*2.2,T*.95)}c.fillStyle(16773808,.92),c.fillCircle(g-T*2.4,m+T*1.25,T*.85),c.fillStyle(16776432,.35),c.fillCircle(g-T*2.4,m+T*1.25,T*1.45)}c.fillStyle(L.towerFar,1);for(let pe=d-T;pe<g+T;pe+=T*3.4){const $e=Math.floor((pe-d+T)/(T*3.4)),et=[2.3,1.7,2.9,2.1,3.2,1.9],tt=[6.8,8.7,7.2,10.4,8.1,9.6],pt=T*et[$e%et.length],me=T*tt[$e%tt.length],be=v-me-T*.9;c.fillRect(pe,be,pt,me),$e%3===0?c.fillRect(pe+pt*.22,be-T*.7,pt*.56,T*.7):$e%3===1?c.fillRect(pe+pt*.4,be-T*1,4,T):c.fillRect(pe+pt*.18,be-T*.45,pt*.64,T*.45)}c.fillStyle(L.towerNear,1);for(let pe=d;pe<g;pe+=T*2.65){const $e=Math.floor((pe-d)/(T*2.65)),et=[1.8,2.4,1.55,2.8,2.1,1.7,2.5],tt=[5.4,7.1,6,8.6,6.7,7.8,5.8],pt=T*et[$e%et.length],me=T*tt[$e%tt.length],be=v-me;c.fillRect(pe,be,pt,me),$e%4===0?(c.fillStyle(L.towerRoof,1),c.fillRect(pe+pt*.24,be-T*.42,pt*.52,T*.42),c.fillStyle(L.towerNear,1)):$e%4===1?(c.fillStyle(L.towerRoof,1),c.fillRect(pe+pt*.48,be-T*.8,4,T*.8),c.fillStyle(L.towerNear,1)):$e%4===2&&(c.fillStyle(L.towerRoof,1),c.fillRect(pe+pt*.18,be-T*.35,pt*.64,T*.35),c.fillStyle(L.towerNear,1)),c.fillStyle(L.winColor,L.winAlpha);for(let Me=be+T*.7;Me<be+me-T*.5;Me+=T*1.05)o&&($e+Math.floor(Me))%2!==0||((Math.floor(Me)+$e)%3===0&&c.fillRect(pe+5,Me,3,3),(Math.floor(Me)+$e)%2===0&&pt>T*1.9&&c.fillRect(pe+pt-8,Me+4,3,3));c.fillStyle(L.facadeColor,L.facadeAlpha),c.fillRect(pe+pt*.5,be+T*.4,2,me-T*.8),c.fillStyle(L.towerNear,1)}c.fillStyle(L.bridgeColor,L.bridgeAlpha);for(let pe=d+T*6;pe<g-T*6;pe+=T*11){const $e=v-T*(2.8+pe/T%2);c.fillRect(pe,$e,T*2.2,T*.35)}c.fillStyle(L.grassBase,1),c.fillRect(d,v,h,p-(v-m)),c.fillStyle(L.grassLawn,1),c.fillRect(d,k,h,j-k);const I=[];for(let pe=d+T*.1;pe<g;pe+=T*3.9)I.push(pe);for(const pe of I){const $e=T*(2.25+Math.abs(Math.floor(pe/T))%3*.32);c.fillStyle(L.treeTrunk,1),c.fillRect(pe+T*1.05,v+T*1.2,8,T*1.65),c.fillStyle(L.treeMid,1),c.fillRect(pe,v-T*1,$e,T*2.15),c.fillStyle(L.treeHi,1),c.fillRect(pe+5,v-T*1.3,$e-10,T*.95)}for(const pe of[d+T*1.2,g-T*6.5])for(let $e=0;$e<4;$e++){const et=pe+$e*T*1.8,tt=r-T*(4.5+$e%2*.9);c.fillStyle(L.grove0,1),c.fillRect(et+10,tt+T*1.5,8,T*1.45),c.fillStyle(L.grove1,1),c.fillRect(et,tt,T*2.35,T*1.9),c.fillStyle(L.grove2,1),c.fillRect(et+4,tt-6,T*1.75,T*.82)}const D=i.map(pe=>(pe.offsetCol+2.95)*T),M=T*.9,A=n-T*1.8,$=6,W=T*1.7,B=r+T*.08,V=T*2.05,H=B+V,U=T*9.4,Y=w-U/2,Q=H-2,q=T*3.1,G=Q+q,J=T*2.3;c.fillStyle(12428667,1),c.fillRect(w-T*4.25,G,T*8.5,j-G),c.fillStyle(14141089,.95);for(let pe=G+T*.35;pe<j-6;pe+=T*.8)c.fillRect(w-T*3.35,pe,T*6.7,3);const P=G+T*1.65;c.fillStyle(13284491,1),c.fillRect(w-T*3.6,P,T*7.2,T*2.15),c.fillStyle(14799277,.95),c.fillRect(w-T*2.8,P+T*.42,T*5.6,T*.18),c.fillStyle(7694937,1),c.fillRect(d,j-T*.35,h,3),c.fillRect(d,k+T*.18,h,3);for(const pe of[P+T*.35,P+T*1.45])c.fillStyle(L.edgeGreen,1),c.fillRect(w-T*5,pe,T*1.25,T*.4),c.fillRect(w+T*3.75,pe,T*1.25,T*.4),c.fillStyle(L.edgeGreenHi,1),c.fillRect(w-T*4.78,pe-2,T*.82,3),c.fillRect(w+T*3.96,pe-2,T*.82,3);c.fillStyle(12572630,1),c.fillRect(M,B,A,V),c.fillStyle(13624033,1);for(let pe=M+T*.2;pe<M+A-T*.2;pe+=T)c.fillRect(pe,B+T*.42,2,V-T*.62);for(let pe=B+T*.35;pe<H-T*.25;pe+=T*.72)c.fillRect(M+T*.2,pe,A-T*.4,2);c.fillStyle(15920612,1);let K=M;for(const pe of D){const $e=pe-W/2;$e>K&&c.fillRect(K,B,$e-K,$),c.fillStyle(8415310,1),c.fillRect($e-4,B,4,T*.62),c.fillRect($e+W,B,4,T*.62),c.fillStyle(11045217,1),c.fillRect($e,B,W,4),c.fillStyle(15920612,1),K=$e+W}K<M+A&&c.fillRect(K,B,M+A-K,$),c.fillRect(M,B,$,V),c.fillRect(M+A-$,B,$,V),c.fillRect(M,H-$,Y-M,$),c.fillRect(Y+U,H-$,M+A-(Y+U),$);for(const pe of D){const $e=pe-W/2;c.fillStyle(10257246,1),c.fillRect($e,B+T*.02,W,T*.16),c.fillStyle(14272413,1),c.fillRect($e+T*.12,B+T*.24,W-T*.24,3),c.fillStyle(6968898,.55),c.fillRect($e+T*.1,B+T*.34,W-T*.2,T*.26)}c.fillStyle(13032920,1),c.fillRect(Y,Q,U,q),c.fillStyle(14149603,1);for(let pe=Y+T*.3;pe<Y+U-T*.2;pe+=T)c.fillRect(pe,Q+T*.4,2,q-T*.6);for(let pe=Q+T*.35;pe<G-T*.2;pe+=T*.72)c.fillRect(Y+T*.24,pe,U-T*.48,2);c.fillStyle(15920612,1),c.fillRect(Y,Q,$,q),c.fillRect(Y+U-$,Q,$,q),c.fillRect(Y,G-$,(U-J)/2,$),c.fillRect(w+J/2,G-$,(U-J)/2,$),c.fillRect(Y,Q,T*1.1,$),c.fillRect(Y+U-T*1.1,Q,T*1.1,$),c.fillStyle(10454374,1),c.fillRect(Y+T*.2,Q+T*.18,T*.7,3),c.fillRect(Y+U-T*.9,Q+T*.18,T*.7,3),c.fillStyle(15266031,.7),c.fillRect(Y+T*1.15,Q+T*.38,T*1.15,T*.9),c.fillRect(Y+U-T*2.3,Q+T*.38,T*1.15,T*.9),c.fillStyle(8167589,.65);for(let pe=Q+T*.44;pe<Q+T*1.16;pe+=8)c.fillRect(Y+T*1.38,pe,T*.68,2),c.fillRect(Y+U-T*2.06,pe,T*.68,2);c.fillStyle(4608855,.9),c.fillRect(Y+T*1.1,Q+T*.34,2,T*.98),c.fillRect(Y+T*2.26,Q+T*.34,2,T*.98),c.fillRect(Y+U-T*2.3,Q+T*.34,2,T*.98),c.fillRect(Y+U-T*1.14,Q+T*.34,2,T*.98),c.fillStyle(7311251,.95),c.fillRect(w-T*1.65,Q+T*.65,T*3.3,T*1.1),c.fillStyle(8890283,1),c.fillRect(w-T*1.2,Q+T*.92,T*2.4,T*.18),c.fillStyle(12114129,.38),c.fillRect(w-T*2.45,Q+T*.08,T*4.9,T*1.25),c.fillStyle(15266799,.7),c.fillRect(w-T*1.7,Q+T*.18,T*3.4,T*.18),c.fillRect(Y+T*.55,Q+T*.22,T*.9,T*.12),c.fillRect(Y+U-T*1.45,Q+T*.22,T*.9,T*.12),c.fillStyle(5139304,1),c.fillRect(w-T*1.95,Q+T*.18,T*3.9,T*.42),c.fillStyle(14675688,1),c.fillRect(w-T*1.2,Q+T*.3,T*2.4,T*.12),c.fillStyle(5664630,.35),c.fillRect(w-T*1.65,Q+T*2.05,T*3.3,T*.32),c.fillRect(w-T*1.1,Q+T*2.38,T*2.2,T*.18),c.fillStyle(9342875,1),c.fillRect(w-T*1.28,Q+T*1.45,T*2.56,T*.72),c.fillStyle(15199984,1),c.fillRect(w-T*1,Q+T*1.6,T*2,T*.18),c.fillStyle(6251634,1),c.fillRect(w-T*.22,Q+T*1.42,T*.44,T*.18),c.fillStyle(16185330,.78),c.fillRect(w-T*.9,Q+T*1.72,T*1.8,T*.12),c.fillStyle(12559998,1),c.fillRect(Y+T*.7,Q+T*1.55,T*1.2,T*.52),c.fillStyle(15790314,1),c.fillRect(Y+T*.95,Q+T*1.7,T*.7,T*.18),c.fillStyle(10133418,1),c.fillRect(Y+T*.72,Q+T*2.2,T*1.6,T*.42),c.fillRect(Y+U-T*2.32,Q+T*2.2,T*1.6,T*.42),c.fillStyle(13160918,1),c.fillRect(Y+T*.88,Q+T*2.08,T*1.28,T*.16),c.fillRect(Y+U-T*2.16,Q+T*2.08,T*1.28,T*.16),c.fillStyle(6979413,1),c.fillRect(Y+T*.38,Q+T*2,T*.34,T*.62),c.fillRect(Y+U-T*.72,Q+T*2,T*.34,T*.62),c.fillStyle(9350004,1),c.fillRect(Y+T*.22,Q+T*1.78,T*.66,T*.34),c.fillRect(Y+U-T*.88,Q+T*1.78,T*.66,T*.34),c.fillStyle(15326400,.88),c.fillRect(w-T*1.78,Q+T*2.46,T*3.56,2),c.fillRect(w-T*.06,Q+T*1.98,2,T*1.18),c.fillStyle(10258534,.92),c.strokeRect(w-T*1.82,Q+T*2.3,T*3.64,T*.66),c.fillStyle(12033650,1),c.fillRect(Y+T*2.42,Q+T*2.03,T*.24,T*.78),c.fillRect(Y+U-T*2.66,Q+T*2.03,T*.24,T*.78),c.fillStyle(15261638,1),c.fillRect(Y+T*2.16,Q+T*1.9,T*.76,T*.16),c.fillRect(Y+U-T*2.92,Q+T*1.9,T*.76,T*.16),c.fillStyle(6257513,1),c.fillRect(Y+T*2.16,Q+T*2.18,T*.76,T*.56),c.fillRect(Y+U-T*2.92,Q+T*2.18,T*.76,T*.56),c.fillStyle(9401687,1),c.fillRect(w-J/2,G-$,J,$),c.fillStyle(14141342,1),c.fillRect(w-T*.72,G+2,T*1.44,3);const ee=T*4.7,te=T*1.2,ie=G-1;c.fillStyle(12702927,.98),c.fillRect(w-ee/2,ie,ee,te),c.fillStyle(15920612,1),c.fillRect(w-ee/2,ie,$,te),c.fillRect(w+ee/2-$,ie,$,te),c.fillStyle(14149603,1),c.fillRect(w-T*1.35,ie+T*.34,T*2.7,2),c.fillStyle(9742243,.8),c.fillRect(w-ee/2+T*.35,ie+T*.18,T*.55,2),c.fillRect(w+ee/2-T*.9,ie+T*.18,T*.55,2);const se=H+T*1.7,de=w+T*11.2;c.fillStyle(L.logoDirt,.95),c.fillRect(de-T*4.3,se-T*1.2,T*8.6,T*2.35),c.fillStyle(L.logoDirtHi,.9),c.fillRect(de-T*3.5,se-T*.8,T*7,T*1.55);for(const pe of[de-T*4.9,de-T*3.9,de+T*3.9,de+T*4.9])c.fillStyle(5929545,1),c.fillRect(pe,se-T*.42,T*.72,T*.42),c.fillStyle(8299882,1),c.fillRect(pe+2,se-T*.54,T*.48,T*.22);c.fillStyle(L.fence,1);for(let pe=d+T*.8;pe<g;pe+=T*1.25)pe>w-T*5.4&&pe<w+T*5.4||c.fillRect(pe,S,3,T*.8);c.fillRect(d+T*.8,S+T*.6,w-T*5.45-(d+T*.8),3),c.fillRect(w+T*5.45,S+T*.6,g-T*.8-(w+T*5.45),3),c.fillStyle(L.road,1),c.fillRect(d,j,h,N),c.fillStyle(L.roadDash,1);for(let pe=d+T;pe<g;pe+=T*2.6)c.fillRect(pe,j+T*2,T*1.6,4);for(let pe=d+T*2;pe<g;pe+=T*4.8)c.fillStyle(L.curb,1),c.fillRect(pe,j-T*1.45,4,T*1.45),c.fillStyle(15058544,.95),c.fillRect(pe-4,j-T*1.5,12,4);for(const pe of[w-T*4.8,w-T*2.4,w+T*2.4,w+T*4.8,de-T*5.7,de+T*5.7]){const $e=pe===de-T*5.7||pe===de+T*5.7?se+T*.75:P+T*.85;c.fillStyle(5063736,1),c.fillRect(pe,$e,3,T*.72),o||(c.fillStyle(15716218,.95),c.fillRect(pe-4,$e-4,11,4),c.fillStyle(15916442,.2),c.fillRect(pe-T*.38,$e+T*.42,T*.76,T*.24))}c.fillStyle(L.water,1),c.fillRect(d,O,h,x-O);const oe=[O+T*.9,O+T*2,O+T*3.25];for(let pe=0;pe<oe.length;pe++){const $e=oe[pe],et=pe%2===0?T*1.1:T*2.4;c.fillStyle(L.ripple,o?.38:.42);for(let tt=d+et;tt<g-T;tt+=T*5.2)c.fillRect(tt,$e,T*1.8,2),c.fillRect(tt+T*2.35,$e+3,T*.9,2)}c.fillStyle(L.rippleHi,o?.38:.34);for(const pe of[O+T*1.05,O+T*1.8])c.fillRect(w-T*4.8,pe,T*2,2),c.fillRect(w+T*2.8,pe,T*2,2);const Ne=T*12.5,Ee=j+N-2;c.fillStyle(7296059,1),c.fillRect(w-Ne/2,R,Ne,T*1.75),c.fillRect(w-T*.55,Ee,T*1.1,R-Ee),c.fillStyle(9267785,1);for(let pe=w-Ne/2+6;pe<w+Ne/2-6;pe+=T*.7)c.fillRect(pe,R+T*.35,3,T*1.2);if(c.fillStyle(5991010,1),c.fillRect(d,O-4,h,4),c.fillStyle(7307639,1),c.fillRect(d,O-8,h,3),this.outdoorParking){const pe=this.decor.indexOf(this.outdoorParking);pe>=0&&this.decor.splice(pe,1),this.outdoorParking.destroy(),this.outdoorParking=null}const Ie=t.add.graphics();Ie.setDepth(-300);const Be=4080460,Ge=15262424,Ue=[{x:d+T*2.2,count:5},{x:g-T*11.4,count:5}];Ie.lineStyle(0,0,0),Ie.fillStyle(Be,1);for(const pe of Ue)Ie.fillRect(pe.x,b,T*12.8,T*3.8);Ie.lineStyle(1,Ge,.95);for(const pe of Ue)for(let $e=0;$e<pe.count;$e++){const et=pe.x+T*.45+$e*T*1.5;Ie.strokeRect(et,b+T*.5,T*1.55,T*2.55)}Ie.lineStyle(0,0,0);const at=T*1.55,Pt=T*2.55,wt=T*.5,Ct=!o;for(const pe of Ue){const $e=pe.x>w-T;for(let et=0;et<pe.count-1;et+=2){const pt=pe.x+T*.45+et*T*1.5+at/2,me=b+wt+Pt/2,be=et%4===0;this.paintStylizedParkingCar(Ie,pt,me,$e,be,Ct)}}if(!a?.skipLabels){this.addPixelLabel(t,w,Q+T*.6,"OPENOPC","#4e6b68","#eef4ec","10px");const pe=se-T*.24,$e=T*.88,et=T*.28,tt="OPENOPC",pt=tt.length*$e+(tt.length-1)*et;let me=de-pt/2;for(const be of tt){const Me=t.add.text(me+T*.12,pe+T*.14,be,{fontSize:"26px",fontFamily:"monospace",color:"#4e6b46",resolution:2});Me.setOrigin(0,.5),Me.setDepth(-95),this.decor.push(Me);const Fe=t.add.text(me,pe,be,{fontSize:"26px",fontFamily:"monospace",color:"#f6f6ee",stroke:"#8f8c7a",strokeThickness:1,resolution:2});Fe.setOrigin(0,.5),Fe.setDepth(-94),this.decor.push(Fe),me+=$e+et}this.addPixelLabel(t,w,R+T*.95,"LAKE DOCK","#1d3d4f","#d7eef1","9px")}this.decor.push(c,Ie),this.outdoorBackdrop=c,this.outdoorParking=Ie}refreshOutdoorDayNight(t,n){const r=Zn(),i=((r[r.length-1]?.offsetCol??0)+Kn)*T,o=ci*T;if(this.outdoorParking){const a=this.decor.indexOf(this.outdoorParking);a>=0&&this.decor.splice(a,1),this.outdoorParking.destroy(),this.outdoorParking=null}if(this.outdoorBackdrop){const a=this.decor.indexOf(this.outdoorBackdrop);a>=0&&this.decor.splice(a,1),this.outdoorBackdrop.destroy(),this.outdoorBackdrop=null}this.buildOutdoorBackdrop(t,i,o,r,n,{skipLabels:!0})}buildBoundaryDecor(t,n,r){const i=t.add.graphics();i.setDepth(-140);const o=t.add.graphics();o.setDepth(-95);const a=((n[n.length-1]?.offsetCol??0)+Kn)*T,c=ci*T,d=Kn*T,m=T*2,h=T*20;this.buildOutdoorBackdrop(t,a,c,n,r),i.fillStyle(2498844,1),i.fillRect(-T,0,a+T*2,c),i.fillStyle(3221794,1),i.fillRect(0,0,a,c),i.fillStyle(6048831,1),i.fillRect(0,0,a,8),i.fillRect(0,c-8,a,8),i.fillRect(0,0,8,c),i.fillRect(a-8,0,8,c),i.fillStyle(2367001,1),i.fillRect(8,8,a-16,3),i.fillRect(8,c-11,a-16,3),i.fillStyle(1709844,1),i.fillRect(0,0,a,m),i.fillStyle(4931637,1),i.fillRect(0,m-5,a,5),i.fillStyle(4208173,1),i.fillRect(0,m,a,c-m),i.fillStyle(4865588,1),i.fillRect(0,T*8,a,T*4),i.fillStyle(3813416,1),i.fillRect(0,h,a,c-h),i.lineStyle(1,5917503,.32);for(let p=0;p<=a;p+=T)i.beginPath(),i.moveTo(p,m),i.lineTo(p,c),i.strokePath();for(let p=m;p<=c;p+=T)i.beginPath(),i.moveTo(0,p),i.lineTo(a,p),i.strokePath();for(let p=T*3;p<a;p+=T*6)i.fillStyle(14727791,.85),i.fillRect(p,T*.7,T*1.5,4),i.fillStyle(9334594,1),i.fillRect(p+T*.2,T*.55,T*1.1,2);this.addPixelLabel(t,a/2,T*.95,"MAIN HALL","#2a221b","#f3dcc0","11px");for(const p of n){const g=p.offsetCol*T,x=n.findIndex(A=>A.id===p.id);i.fillStyle(5785659,1),i.fillRect(g-10,0,d+20,c),i.fillStyle(2301208,1),i.fillRect(g-4,0,d+8,c),i.lineStyle(2,8087640,.9),i.strokeRect(g-10,0,d+20,c),i.lineStyle(2,10982014,.34),i.strokeRect(g-4,0,d+8,c),i.fillStyle(1578259,1),i.fillRect(g-4,0,d+8,T),i.fillStyle(7166796,1),i.fillRect(g+T*5.5,T*.55,T*9,5),i.fillStyle(9074018,1),i.fillRect(g-10,0,8,8),i.fillRect(g+d+2,0,8,8),i.fillRect(g-10,c-8,8,8),i.fillRect(g+d+2,c-8,8,8),i.fillStyle(3221536,1),i.fillRect(g-4,h,d+8,6);const v=g+T*.7,k=g+T*14.65,S=T*1.05,b=T*4.45,w=T*6.4,j=S+w+T*.35,N=T*.55,O=x%2===0?6115909:5069382,R=x%2===0?4609113:5984070,L=x%2===0?5205640:7297908,I=x%2===0?5666919:9073231,D=x%2===0?7045045:10119803,M=x%2===0?6196089:10979160;i.fillStyle(2827295,1),i.fillRect(g+T*.58,j,d-T*1.16,T*.44),i.fillStyle(7692879,1),i.fillRect(g+T*.92,j+2,d-T*1.84,2),i.fillRect(g+T*4.3,j-T*.2,4,T*.84),i.fillRect(g+d-T*4.3,j-T*.2,4,T*.84),o.fillStyle(1906966,1),o.fillRect(v,S,b,w),o.fillRect(k,S,b,w),o.fillStyle(3090722,1),o.fillRect(v+4,S+4,b-8,w-8),o.fillRect(k+4,S+4,b-8,w-8),o.fillStyle(O,1),o.fillRect(v+4,S+4,b-8,T*.7),o.fillStyle(R,1),o.fillRect(k+4,S+4,b-8,T*.7),o.fillStyle(L,.95),o.fillRect(v+4,S+T*1.15,b-8,w-T*1.45),o.fillStyle(I,.95),o.fillRect(k+4,S+T*1.15,b-8,w-T*1.45),o.fillStyle(15127204,.16),o.fillRect(v+10,S+10,b-20,2),o.fillRect(k+10,S+10,b-20,2),o.lineStyle(1,6181444,.28);for(let A=v+12;A<v+b-4;A+=T)o.beginPath(),o.moveTo(A,S+T*1.15),o.lineTo(A,S+w-4),o.strokePath();for(let A=k+12;A<k+b-4;A+=T)o.beginPath(),o.moveTo(A,S+T*1.15),o.lineTo(A,S+w-4),o.strokePath();for(let A=S+T*1.45;A<S+w-4;A+=T*.82)o.beginPath(),o.moveTo(v+4,A),o.lineTo(v+b-4,A),o.strokePath(),o.beginPath(),o.moveTo(k+4,A),o.lineTo(k+b-4,A),o.strokePath();o.fillStyle(D,.94),o.fillRect(v+T*.45,S+T*3.95,T*2.7,T*1.25),o.fillStyle(15261127,.34),o.strokeRect(v+T*.45,S+T*3.95,T*2.7,T*1.25),o.fillRect(v+T*.75,S+T*4.35,T*2.1,3),o.fillStyle(M,.94),o.fillRect(k+T*.45,S+T*3.95,T*2.7,T*1.25),o.fillStyle(15261127,.34),o.strokeRect(k+T*.45,S+T*3.95,T*2.7,T*1.25),o.fillRect(k+T*.75,S+T*4.35,T*2.1,3),o.fillStyle(15190399,.85),o.fillRect(v+T*1.45,S+12,T*1.55,4),o.fillRect(k+T*1.45,S+12,T*1.55,4),o.fillStyle(6180159,.5),o.fillRect(v+4,S+w-10,b-8,4),o.fillRect(k+4,S+w-10,b-8,4),o.fillStyle(8021585,1),o.fillRect(v+T*.22,S+w-T*.7,b-T*.44,3),o.fillRect(k+T*.22,S+w-T*.7,b-T*.44,3),this.addPixelLabel(t,v+b/2,S+T*.42,x%2===0?"ARCHIVE":"UTILITY","#4a4035","#f1dfc2","8px"),this.addPixelLabel(t,k+b/2,S+T*.42,x%2===0?"PANTRY":"SUPPLY","#4a4035","#f1dfc2","8px"),x%2===0?(this.addTilesetSprite(t,v+12,S+14+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,v+44,S+14+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,v+12,S+48+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,v+14,S+50+N,this.tilesetFrames.boxC),this.addTilesetSprite(t,v+26,S+82+N,this.tilesetFrames.boxA),this.addTilesetSprite(t,v+58,S+82+N,this.tilesetFrames.boxB),this.addTilesetSprite(t,v+60,S+48+N,this.tilesetFrames.plantA),this.addTilesetSprite(t,k+22,S+18+N,this.tilesetFrames.waterCooler),this.addTilesetSprite(t,k+56,S+18+N,this.tilesetFrames.plantA),this.addTilesetSprite(t,k+20,S+50+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,k+18,S+82+N,this.tilesetFrames.fridge),this.addTilesetSprite(t,k+54,S+82+N,this.tilesetFrames.boxA)):(this.addTilesetSprite(t,v+16,S+18+N,this.tilesetFrames.waterCoolerAlt),this.addTilesetSprite(t,v+52,S+18+N,this.tilesetFrames.plantB),this.addTilesetSprite(t,v+16,S+52+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,v+24,S+84+N,this.tilesetFrames.boxC),this.addTilesetSprite(t,v+58,S+84+N,this.tilesetFrames.boxA),this.addTilesetSprite(t,k+10,S+14+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,k+42,S+14+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,k+10,S+50+N,this.tilesetFrames.waterCooler),this.addTilesetSprite(t,k+26,S+82+N,this.tilesetFrames.vending),this.addTilesetSprite(t,k+58,S+82+N,this.tilesetFrames.plantB))}for(let p=0;p<n.length-1;p++){const g=(n[p].offsetCol+Kn)*T,x=Dv*T,v=g+x/2,k=p===0,S=k?6258019:6975375,b=k?"SHARE":"MEET";i.fillStyle(2104087,1),i.fillRect(g,0,x,c),i.fillStyle(3813416,1),i.fillRect(g+5,m,x-10,c-m),i.fillStyle(5194552,1);for(let w=m+6;w<c-6;w+=14)i.fillRect(g+8,w,x-16,2);i.fillStyle(2564380,1),i.fillRect(v-T*.52,T*2.4,T*1.04,c-T*4.8),i.fillStyle(6641740,1),i.fillRect(v-2,T*2.7,4,c-T*5.4),i.fillStyle(9074790,.88),i.fillRect(v-T*.68,T*3.15,T*.3,T*1.25),i.fillRect(v+T*.38,T*3.15,T*.3,T*1.25),i.fillRect(v-T*.68,T*15.6,T*.3,T*1.25),i.fillRect(v+T*.38,T*15.6,T*.3,T*1.25),i.lineStyle(2,8219222,.8),i.beginPath(),i.moveTo(v,m+8),i.lineTo(v,c-8),i.strokePath(),i.fillStyle(S,.95),i.fillRect(g+7,T*11.5,x-14,T*2.2),i.lineStyle(1,14209463,.18),i.strokeRect(g+7,T*11.5,x-14,T*2.2),k?(o.fillStyle(8675151,1),o.fillRect(v-12,T*11.95,24,7),o.fillStyle(14205586,1),o.fillRect(v-5,T*12.2,10,4),o.fillStyle(10267511,1),o.fillRect(v-15,T*13.1,5,6),o.fillStyle(10713943,1),o.fillRect(v+8,T*13,7,7),o.fillStyle(15128763,.85),o.fillRect(v+10,T*13.25,3,3)):(o.fillStyle(9401943,1),o.fillRect(v-8,T*12.1,16,9),o.fillStyle(5003638,1),o.fillRect(v-13,T*12.55,4,4),o.fillRect(v+9,T*12.55,4,4),o.fillRect(v-2,T*11.7,4,4),o.fillRect(v-2,T*13.95,4,4),o.fillStyle(14214122,.85),o.fillRect(v-14,T*11.65,6,3)),i.fillStyle(14727791,.9),i.fillRect(v-5,T*4.5,10,3),i.fillRect(v-5,T*18.5,10,3),this.addPixelLabel(t,v,T*8.75,b,"#2f2822","#f1dcc0","8px")}i.fillStyle(1644052,1),i.fillRect(0,c-6,a,6),i.fillRect(0,0,6,c),i.fillRect(a-6,0,6,c),this.addPixelLabel(t,T*7,T*1,"< WEST","#2d241c","#e8d5b6","8px"),this.addPixelLabel(t,a-T*7,T*1,"EAST >","#2d241c","#e8d5b6","8px"),this.decor.push(i,o)}buildMap(t,n=iu()){this.clearSceneDecor();const r=Zn(),i=((r[r.length-1]?.offsetCol??0)+Kn)*T,o=ci*T,a=this.getOutdoorMetrics(i,o);this.buildBoundaryDecor(t,r,n);for(const m of r){const h=(m.offsetCol+Kn/2)*T,p=t.add.image(m.offsetCol*T,0,"office-bg");p.setOrigin(0,0),p.setDepth(-100),this.bgSprites.push(p),this.addForegroundOccluders(t,m);const g=t.add.text(h,6,m.name,{fontSize:"14px",fontFamily:"monospace",color:"#ffffff",stroke:"#000000",strokeThickness:3,align:"center"});g.setOrigin(.5,0),g.setDepth(99999),g.setData("officeId",m.id),this.nameLabels.push(g)}const c=Kj(r),d=qf.buildWallBodies(t,c);return console.log("[OfficeMapBuilder] Composite map ready —",r.length,"offices"),{wallBodies:d,collisionGrid:c,waterfront:{dockCenterX:a.gateCenterX,dockY:a.dockY,waterTopY:a.waterTopY,waterBottomY:a.bottomY}}}getBackgroundSprites(){return this.bgSprites}getNameLabels(){return this.nameLabels}updateLabel(t,n){const r=this.nameLabels.find(i=>i.getData("officeId")===t);r&&r.setText(n)}static buildWallBodies(t,n){const r=n.length,i=r>0?n[0].length:0,o=t.physics.add.staticGroup();for(let a=0;a<r;a++){let c=-1;for(let d=0;d<=i;d++){const m=d<i&&n[a][d]===1;if(m&&c<0)c=d;else if(!m&&c>=0){const h=d-c,p=t.add.rectangle(c*T+h*T/2,a*T+T/2,h*T,T);p.setVisible(!1),o.add(p),c=-1}}}return o}static buildWallBodiesForRegion(t,n,r,i){const o=n.length,a=o>0?n[0].length:0;for(let c=0;c<o;c++){let d=-1;for(let m=0;m<=a;m++){const h=m<a&&n[c][m]===1;if(h&&d<0)d=m;else if(!h&&d>=0){const p=m-d,g=t.add.rectangle((i+d)*T+p*T/2,c*T+T/2,p*T,T);g.setVisible(!1),r.add(g),d=-1}}}}}const it={IDLE:"idle",WALK:"walk",TYPE:"type",THINK:"think",CELEBRATE:"celebrate",COFFEE:"coffee",CHAT:"chat",PRACTICE:"practice",REFLECT:"reflect",SLEEP:"sleep",PRESENT:"present"},Ga={DOWN:"down",LEFT:"left",RIGHT:"right",UP:"up"};function Px(e,t){return e+Math.random()*(t-e)}function MM(e,t){return Math.floor(Px(e,t+1))}class DM extends Kr.GameObjects.Container{constructor(t,n,r,i,o,a){const c=o*T+T/2,d=a*T+T/2;super(t,c,d),this.officeId="office-0",this.agentState=it.IDLE,this.dir=Ga.DOWN,this.isActive=!1,this.currentTool=null,this.seatId=null,this.urgency="relaxed",this.isSubagent=!1,this.parentAgentId=null,this.lastEventAt=0,this.stateTimer=0,this.seatTimer=0,this.wanderCount=0,this.hueShift=0,this.bubbleText=null,this.bubbleTimer=0,this.myceliumEffect=null,this.myceliumEffectTimer=0,this.myceliumSession=null,this.bubbleObj=null,this.currentPath=[],this.pathIndex=0,this.pathfinder=null,this.arrivalCallback=null,this.agentId=n,this.displayName=r,this.palette=i%6,this.wanderTimer=Px(.5,2.5),this.wanderLimit=MM(qj,Gj);const m=`char_${this.palette}`;this.shadow=t.add.ellipse(0,mM,dM,fM,1382432,pM),this.shadow.setOrigin(.5,.5),this.add(this.shadow),this.sprite=t.add.sprite(0,0,m),this.sprite.setScale(cM,uM),this.sprite.setOrigin(.5,1),this.add(this.sprite),t.add.existing(this),t.physics.world.enable(this);const h=Math.min(12,T-4),p=Math.min(6,T/2);this.body.setSize(h,p),this.body.setOffset(-h/2,-p),this.body.setCollideWorldBounds(!0),this.setDepth(d),this.playAnimForState()}setPathfinder(t){this.pathfinder=t}getState(){return this.agentState}getTilePos(){return{x:Math.floor(this.x/T),y:Math.floor(this.y/T)}}setAgentState(t){this.agentState!==t&&(this.agentState=t,this.playAnimForState())}setDirection(t){this.dir!==t&&(this.dir=t,this.playAnimForState())}playAnimForState(){if(!this.sprite?.anims)return;const t=`char_${this.palette}`,n=this.dir,r=n===Ga.LEFT;this.sprite.setFlipX(r);const i=r?"right":n;switch(this.agentState){case it.WALK:this.sprite.play(`${t}_walk_${i}`,!0);break;case it.CELEBRATE:this.sprite.play(`${t}_celebrate_${i}`,!0);break;case it.TYPE:case it.PRESENT:case it.PRACTICE:this.sprite.play(`${t}_type_${i}`,!0);break;case it.THINK:case it.REFLECT:this.sprite.play(`${t}_read_${i}`,!0);break;case it.COFFEE:case it.CHAT:this.sprite.play(`${t}_coffee_${i}`,!0);break;case it.SLEEP:case it.IDLE:default:this.sprite.play(`${t}_idle_${i}`,!0);break}}async walkTo(t,n,r){if(!this.pathfinder||!this.sprite?.anims)return!1;const i=this.getTilePos(),o=await this.pathfinder.findPath(i,{x:t,y:n});return o.length===0?!1:(this.currentPath=o,this.pathIndex=0,this.arrivalCallback=r??null,this.setAgentState(it.WALK),!0)}stopMovement(){this.currentPath=[],this.pathIndex=0,this.arrivalCallback=null,this.body?.setVelocity(0,0)}get isMoving(){return this.agentState===it.WALK&&this.currentPath.length>0}getWalkSpeed(){switch(this.urgency){case"urgent":return xM;case"normal":return vM;default:return bM}}showBubble(t,n=SM){this.bubbleText=t,this.bubbleTimer=n,this.updateBubbleDisplay()}clearBubble(){this.bubbleText=null,this.bubbleTimer=0,this.bubbleObj&&(this.bubbleObj.destroy(),this.bubbleObj=null)}updateBubbleDisplay(){if(this.bubbleObj&&(this.bubbleObj.destroy(),this.bubbleObj=null),!this.bubbleText)return;const t=this.scene.add.container(this.x,this.y-70),n=this.scene.add.text(0,0,this.bubbleText,{fontSize:"10px",fontFamily:"monospace",color:"#1a1a2e",backgroundColor:"#ffffff",padding:{x:4,y:2},resolution:2});n.setOrigin(.5,1);const r=this.scene.add.graphics(),i=n.width+8,o=n.height+4;r.fillStyle(16777215,.95),r.fillRoundedRect(-i/2,-o,i,o,4),r.lineStyle(1,6710886,.5),r.strokeRoundedRect(-i/2,-o,i,o,4),t.add([r,n]),t.setDepth(1e5),this.bubbleObj=t}update(t){this.setDepth(this.y),this.bubbleObj&&(this.bubbleObj.setPosition(this.x,this.y-70),this.bubbleTimer>0&&(this.bubbleTimer-=t,this.bubbleTimer<=0&&this.clearBubble())),this.stateTimer>0&&(this.stateTimer-=t,this.stateTimer<=0&&(this.stateTimer=0,this.agentState===it.CELEBRATE&&this.setAgentState(it.IDLE),this.agentState===it.COFFEE&&(this.setAgentState(it.IDLE),this.wanderTimer=Px(Rf,Af)),this.agentState===it.CHAT&&this.setAgentState(it.IDLE))),this.agentState===it.WALK&&this.currentPath.length>0&&this.followPath(t)}followPath(t){if(this.body.setVelocity(0,0),this.pathIndex>=this.currentPath.length){this.arriveAtDestination();return}const n=this.currentPath[this.pathIndex],r=n.x*T+T/2,i=n.y*T+T/2,o=r-this.x,a=i-this.y,c=Math.sqrt(o*o+a*a),m=this.getWalkSpeed()*t;if(c<=m+.5){this.x=r,this.y=i,this.pathIndex++,this.pathIndex>=this.currentPath.length&&this.arriveAtDestination();return}this.x+=o/c*m,this.y+=a/c*m,Math.abs(o)>Math.abs(a)?this.setDirection(o>0?Ga.RIGHT:Ga.LEFT):this.setDirection(a>0?Ga.DOWN:Ga.UP)}arriveAtDestination(){this.currentPath=[],this.pathIndex=0,this.body.setVelocity(0,0);const t=this.arrivalCallback;this.arrivalCallback=null,t?t():this.agentState===it.WALK&&this.setAgentState(it.IDLE)}destroy(t){this.clearBubble(),super.destroy(t)}}var vg,$k;function OM(){return $k||($k=1,vg=function(){this.pointsToAvoid={},this.startX,this.callback,this.startY,this.endX,this.endY,this.nodeHash={},this.openList}),vg}var bg,Hk;function LM(){return Hk||(Hk=1,bg=function(e,t,n,r,i){this.parent=e,this.x=t,this.y=n,this.costSoFar=r,this.simpleDistanceToTarget=i,this.bestGuessDistance=function(){return this.costSoFar+this.simpleDistanceToTarget}}),bg}var Mf={exports:{}},zM=Mf.exports,Fk;function PM(){return Fk||(Fk=1,(function(e,t){(function(){var n,r,i,o,a,c,d,m,h,p,g,x,v,k,S;i=Math.floor,p=Math.min,r=function(b,w){return b<w?-1:b>w?1:0},h=function(b,w,j,N,O){var R;if(j==null&&(j=0),O==null&&(O=r),j<0)throw new Error("lo must be non-negative");for(N==null&&(N=b.length);j<N;)R=i((j+N)/2),O(w,b[R])<0?N=R:j=R+1;return[].splice.apply(b,[j,j-j].concat(w)),w},c=function(b,w,j){return j==null&&(j=r),b.push(w),k(b,0,b.length-1,j)},a=function(b,w){var j,N;return w==null&&(w=r),j=b.pop(),b.length?(N=b[0],b[0]=j,S(b,0,w)):N=j,N},m=function(b,w,j){var N;return j==null&&(j=r),N=b[0],b[0]=w,S(b,0,j),N},d=function(b,w,j){var N;return j==null&&(j=r),b.length&&j(b[0],w)<0&&(N=[b[0],w],w=N[0],b[0]=N[1],S(b,0,j)),w},o=function(b,w){var j,N,O,R,L,I;for(w==null&&(w=r),R=(function(){I=[];for(var D=0,M=i(b.length/2);0<=M?D<M:D>M;0<=M?D++:D--)I.push(D);return I}).apply(this).reverse(),L=[],N=0,O=R.length;N<O;N++)j=R[N],L.push(S(b,j,w));return L},v=function(b,w,j){var N;if(j==null&&(j=r),N=b.indexOf(w),N!==-1)return k(b,0,N,j),S(b,N,j)},g=function(b,w,j){var N,O,R,L,I;if(j==null&&(j=r),O=b.slice(0,w),!O.length)return O;for(o(O,j),I=b.slice(w),R=0,L=I.length;R<L;R++)N=I[R],d(O,N,j);return O.sort(j).reverse()},x=function(b,w,j){var N,O,R,L,I,D,M,A,$;if(j==null&&(j=r),w*10<=b.length){if(R=b.slice(0,w).sort(j),!R.length)return R;for(O=R[R.length-1],M=b.slice(w),L=0,D=M.length;L<D;L++)N=M[L],j(N,O)<0&&(h(R,N,0,null,j),R.pop(),O=R[R.length-1]);return R}for(o(b,j),$=[],I=0,A=p(w,b.length);0<=A?I<A:I>A;0<=A?++I:--I)$.push(a(b,j));return $},k=function(b,w,j,N){var O,R,L;for(N==null&&(N=r),O=b[j];j>w;){if(L=j-1>>1,R=b[L],N(O,R)<0){b[j]=R,j=L;continue}break}return b[j]=O},S=function(b,w,j){var N,O,R,L,I;for(j==null&&(j=r),O=b.length,I=w,R=b[w],N=2*w+1;N<O;)L=N+1,L<O&&!(j(b[N],b[L])<0)&&(N=L),b[w]=b[N],w=N,N=2*w+1;return b[w]=R,k(b,I,w,j)},n=(function(){b.push=c,b.pop=a,b.replace=m,b.pushpop=d,b.heapify=o,b.updateItem=v,b.nlargest=g,b.nsmallest=x;function b(w){this.cmp=w??r,this.nodes=[]}return b.prototype.push=function(w){return c(this.nodes,w,this.cmp)},b.prototype.pop=function(){return a(this.nodes,this.cmp)},b.prototype.peek=function(){return this.nodes[0]},b.prototype.contains=function(w){return this.nodes.indexOf(w)!==-1},b.prototype.replace=function(w){return m(this.nodes,w,this.cmp)},b.prototype.pushpop=function(w){return d(this.nodes,w,this.cmp)},b.prototype.heapify=function(){return o(this.nodes,this.cmp)},b.prototype.updateItem=function(w){return v(this.nodes,w,this.cmp)},b.prototype.clear=function(){return this.nodes=[]},b.prototype.empty=function(){return this.nodes.length===0},b.prototype.size=function(){return this.nodes.length},b.prototype.clone=function(){var w;return w=new b,w.nodes=this.nodes.slice(0),w},b.prototype.toArray=function(){return this.nodes.slice(0)},b.prototype.insert=b.prototype.push,b.prototype.top=b.prototype.peek,b.prototype.front=b.prototype.peek,b.prototype.has=b.prototype.contains,b.prototype.copy=b.prototype.clone,b})(),(function(b,w){return e.exports=w()})(this,function(){return n})}).call(zM)})(Mf)),Mf.exports}var _g,Vk;function BM(){return Vk||(Vk=1,_g=PM()),_g}var kg,Uk;function $M(){if(Uk)return kg;Uk=1;var e={},t=OM(),n=LM(),r=BM();const i=0,o=1;kg=e;var a=1;return e.js=function(){var c=1,d=1.4,m=!1,h={},p,g={},x={},v={},k=!0,S,b={},w=[],j=Number.MAX_VALUE,N,O=!1;this.setAcceptableTiles=function($){$ instanceof Array?N=$:!isNaN(parseFloat($))&&isFinite($)&&(N=[$])},this.enableSync=function(){m=!0},this.disableSync=function(){m=!1},this.enableDiagonals=function(){O=!0},this.disableDiagonals=function(){O=!1},this.setGrid=function($){p=$;for(var W=0;W<p.length;W++)for(var B=0;B<p[0].length;B++)g[p[W][B]]||(g[p[W][B]]=1)},this.setTileCost=function($,W){g[$]=W},this.setAdditionalPointCost=function($,W,B){x[W]===void 0&&(x[W]={}),x[W][$]=B},this.removeAdditionalPointCost=function($,W){x[W]!==void 0&&delete x[W][$]},this.removeAllAdditionalPointCosts=function(){x={}},this.setDirectionalCondition=function($,W,B){v[W]===void 0&&(v[W]={}),v[W][$]=B},this.removeAllDirectionalConditions=function(){v={}},this.setIterationsPerCalculation=function($){j=$},this.avoidAdditionalPoint=function($,W){h[W]===void 0&&(h[W]={}),h[W][$]=1},this.stopAvoidingAdditionalPoint=function($,W){h[W]!==void 0&&delete h[W][$]},this.enableCornerCutting=function(){k=!0},this.disableCornerCutting=function(){k=!1},this.stopAvoidingAllAdditionalPoints=function(){h={}},this.findPath=function($,W,B,V,H){var U=function(P){m?H(P):setTimeout(function(){H(P)})};if(N===void 0)throw new Error("You can't set a path without first calling setAcceptableTiles() on EasyStar.");if(p===void 0)throw new Error("You can't set a path without first calling setGrid() on EasyStar.");if($<0||W<0||B<0||V<0||$>p[0].length-1||W>p.length-1||B>p[0].length-1||V>p.length-1)throw new Error("Your start or end point is outside the scope of your grid.");if($===B&&W===V){U([]);return}for(var Y=p[V][B],Q=!1,q=0;q<N.length;q++)if(Y===N[q]){Q=!0;break}if(Q===!1){U(null);return}var G=new t;G.openList=new r(function(P,K){return P.bestGuessDistance()-K.bestGuessDistance()}),G.isDoneCalculating=!1,G.nodeHash={},G.startX=$,G.startY=W,G.endX=B,G.endY=V,G.callback=U,G.openList.push(M(G,G.startX,G.startY,null,c));var J=a++;return b[J]=G,w.push(J),J},this.cancelPath=function($){return $ in b?(delete b[$],!0):!1},this.calculate=function(){if(!(w.length===0||p===void 0||N===void 0))for(S=0;S<j;S++){if(w.length===0)return;m&&(S=0);var $=w[0],W=b[$];if(typeof W>"u"){w.shift();continue}if(W.openList.size()===0){W.callback(null),delete b[$],w.shift();continue}var B=W.openList.pop();if(W.endX===B.x&&W.endY===B.y){var V=[];V.push({x:B.x,y:B.y});for(var H=B.parent;H!=null;)V.push({x:H.x,y:H.y}),H=H.parent;V.reverse();var U=V;W.callback(U),delete b[$],w.shift();continue}B.list=i,B.y>0&&R(W,B,0,-1,c*D(B.x,B.y-1)),B.x<p[0].length-1&&R(W,B,1,0,c*D(B.x+1,B.y)),B.y<p.length-1&&R(W,B,0,1,c*D(B.x,B.y+1)),B.x>0&&R(W,B,-1,0,c*D(B.x-1,B.y)),O&&(B.x>0&&B.y>0&&(k||L(p,N,B.x,B.y-1,B)&&L(p,N,B.x-1,B.y,B))&&R(W,B,-1,-1,d*D(B.x-1,B.y-1)),B.x<p[0].length-1&&B.y<p.length-1&&(k||L(p,N,B.x,B.y+1,B)&&L(p,N,B.x+1,B.y,B))&&R(W,B,1,1,d*D(B.x+1,B.y+1)),B.x<p[0].length-1&&B.y>0&&(k||L(p,N,B.x,B.y-1,B)&&L(p,N,B.x+1,B.y,B))&&R(W,B,1,-1,d*D(B.x+1,B.y-1)),B.x>0&&B.y<p.length-1&&(k||L(p,N,B.x,B.y+1,B)&&L(p,N,B.x-1,B.y,B))&&R(W,B,-1,1,d*D(B.x-1,B.y+1)))}};var R=function($,W,B,V,H){var U=W.x+B,Y=W.y+V;if((h[Y]===void 0||h[Y][U]===void 0)&&L(p,N,U,Y,W)){var Q=M($,U,Y,W,H);Q.list===void 0?(Q.list=o,$.openList.push(Q)):W.costSoFar+H<Q.costSoFar&&(Q.costSoFar=W.costSoFar+H,Q.parent=W,$.openList.updateItem(Q))}},L=function($,W,B,V,H){var U=v[V]&&v[V][B];if(U){var Y=I(H.x-B,H.y-V),Q=function(){for(var G=0;G<U.length;G++)if(U[G]===Y)return!0;return!1};if(!Q())return!1}for(var q=0;q<W.length;q++)if($[V][B]===W[q])return!0;return!1},I=function($,W){if($===0&&W===-1)return e.TOP;if($===1&&W===-1)return e.TOP_RIGHT;if($===1&&W===0)return e.RIGHT;if($===1&&W===1)return e.BOTTOM_RIGHT;if($===0&&W===1)return e.BOTTOM;if($===-1&&W===1)return e.BOTTOM_LEFT;if($===-1&&W===0)return e.LEFT;if($===-1&&W===-1)return e.TOP_LEFT;throw new Error("These differences are not valid: "+$+", "+W)},D=function($,W){return x[W]&&x[W][$]||g[p[W][$]]},M=function($,W,B,V,H){if($.nodeHash[B]!==void 0){if($.nodeHash[B][W]!==void 0)return $.nodeHash[B][W]}else $.nodeHash[B]={};var U=A(W,B,$.endX,$.endY);if(V!==null)var Y=V.costSoFar+H;else Y=0;var Q=new n(V,W,B,Y,U);return $.nodeHash[B][W]=Q,Q},A=function($,W,B,V){if(O){var H=Math.abs($-B),U=Math.abs(W-V);return H<U?d*H+U:d*U+H}else{var H=Math.abs($-B),U=Math.abs(W-V);return H+U}}},e.TOP="TOP",e.TOP_RIGHT="TOP_RIGHT",e.RIGHT="RIGHT",e.BOTTOM_RIGHT="BOTTOM_RIGHT",e.BOTTOM="BOTTOM",e.BOTTOM_LEFT="BOTTOM_LEFT",e.LEFT="LEFT",e.TOP_LEFT="TOP_LEFT",kg}var HM=$M();class qk{constructor(t){this.grid=t.map(n=>[...n]),this.gridRows=this.grid.length,this.gridCols=this.gridRows>0?this.grid[0].length:0,this.easystar=new HM.js,this.easystar.setGrid(this.grid),this.easystar.setAcceptableTiles([0]),this.easystar.setIterationsPerCalculation(800)}findPath(t,n){return new Promise(r=>{if(t.x<0||t.x>=this.gridCols||t.y<0||t.y>=this.gridRows||n.x<0||n.x>=this.gridCols||n.y<0||n.y>=this.gridRows){r([]);return}if(this.grid[n.y]?.[n.x]===1){const i=this.findNearestWalkable(n.x,n.y);if(!i){r([]);return}n=i}if(this.grid[t.y]?.[t.x]===1){const i=this.findNearestWalkable(t.x,t.y);if(!i){r([]);return}t=i}this.easystar.findPath(t.x,t.y,n.x,n.y,i=>{r(i??[])}),this.easystar.calculate()})}blockTile(t,n){n>=0&&n<this.grid.length&&t>=0&&t<this.grid[0].length&&(this.grid[n][t]=1,this.easystar.setGrid(this.grid))}unblockTile(t,n){n>=0&&n<this.grid.length&&t>=0&&t<this.grid[0].length&&(this.grid[n][t]=0,this.easystar.setGrid(this.grid))}isWalkable(t,n){return n<0||n>=this.grid.length||t<0||t<0||t>=this.grid[0].length?!1:this.grid[n][t]===0}getWalkableTiles(){const t=[];for(let n=0;n<this.grid.length;n++)for(let r=0;r<this.grid[n].length;r++)this.grid[n][r]===0&&t.push({x:r,y:n});return t}findNearestWalkable(t,n){for(let r=1;r<=5;r++)for(let i=-r;i<=r;i++)for(let o=-r;o<=r;o++){if(Math.abs(o)!==r&&Math.abs(i)!==r)continue;const a=t+o,c=n+i;if(this.isWalkable(a,c))return{x:a,y:c}}return null}}function FM(e,t,n,r){return{id:e,tileX:t,tileY:n,facing:r,assigned:!1,assignedTo:null}}function VM(e,t,n,r){return{id:e,tileX:t,tileY:n,type:r}}const Zj={meetingRoom:{name:"Meeting Room",localBounds:{x:7,y:3,w:6,h:5},interactables:[{id:"whiteboard",localX:9,localY:1,type:"whiteboard"}],doorways:[{id:"door-meeting",localX:9,localY:9}]},workspace:{name:"Workspace",localBounds:{x:1,y:10,w:11,h:7},interactables:[{id:"printer",localX:10,localY:10,type:"printer"}],doorways:[{id:"door-ws",localX:9,localY:10}]},breakRoom:{name:"Break Room",localBounds:{x:13,y:10,w:6,h:8},interactables:[{id:"coffee-machine",localX:18,localY:10,type:"coffee_machine"},{id:"fridge",localX:18,localY:11,type:"fridge"}],doorways:[{id:"door-break",localX:13,localY:10}]},leaderOffice:{name:"Leader Office",localBounds:{x:13,y:18,w:6,h:6},interactables:[],doorways:[{id:"door-leader",localX:16,localY:17}]},lobby:{name:"Lobby",localBounds:{x:1,y:19,w:12,h:5},interactables:[],doorways:[{id:"entrance",localX:10,localY:18}]}};function UM(e,t,n){switch(n){case"workspace":return"up";case"meetingRoom":return e<9.5?"right":"left";case"breakRoom":return e<15.5?"right":"left";case"leaderOffice":return"up";default:return"down"}}function qM(e,t){for(const[n,r]of Object.entries(Zj)){const{x:i,y:o,w:a,h:c}=r.localBounds;if(e>=i&&e<i+a&&t>=o&&t<o+c)return n}return"lobby"}function GM(e){const t=e.offsetCol,n={};for(const[i,o]of Object.entries(Zj)){const a=`${e.id}-${i}`;n[a]={name:`${o.name} (${e.name})`,bounds:{x:o.localBounds.x+t,y:o.localBounds.y,w:o.localBounds.w,h:o.localBounds.h},seats:[],interactables:o.interactables.map(c=>VM(`${e.id}-${c.id}`,c.localX+t,c.localY,c.type)),doorways:o.doorways.map(c=>({id:`${e.id}-${c.id}`,tileX:c.localX+t,tileY:c.localY}))}}const r={};for(const[i,o]of e.seats){const a=qM(i,o),c=`${e.id}-${a}`;if(!n[c])continue;r[c]=(r[c]??0)+1;const d=r[c],m=a==="workspace"?"desk":a==="meetingRoom"?"meeting":a==="breakRoom"?"break":a==="leaderOffice"?"leader":"lobby",h=UM(i,o,a);n[c].seats.push(FM(`${e.id}-${m}-${d}`,i+t,o,h))}return n}function Qj(e){const t=e??Zn(),n={};for(const r of t)Object.assign(n,GM(r));return n}let So=Qj();function WM(e){So=Qj(e)}function Jj(e){const t=So[`${e}-workspace`]?.seats??[],n=So[`${e}-leaderOffice`]?.seats??[];return[...t,...n]}function Gk(){return Object.values(So).flatMap(e=>e.seats)}function YM(e){const t=So[e];if(!t)return null;const{x:n,y:r,w:i,h:o}=t.bounds,a=e.split("-").slice(0,2).join("-"),d=Zn().find(g=>g.id===a);if(!d)return{x:n+1,y:r+1};const m=Xj(d.mapStr),h=d.offsetCol,p=[];for(let g=r;g<r+o;g++)for(let x=n;x<n+i;x++){const v=x-h;v>=0&&v<Kn&&g<ci&&m[g]?.[v]===0&&p.push({x,y:g})}return p.length===0?null:p[Math.floor(Math.random()*p.length)]}function Wk(e){const t=So[`${e}-lobby`];return t?t.doorways.map(n=>({x:n.tileX,y:n.tileY})):[]}function Zo(e,t){return e+Math.random()*(t-e)}function XM(e,t){return Math.floor(Zo(e,t+1))}function Qi(e,t){return e.length>t?e.slice(0,t)+"...":e}function Yk(e){if(!e)return"Tool";const t=e.toLowerCase().trim();return t==="shell"?"Shell":t==="write_file"||t==="write"?"Write":t==="edit_file"||t==="edit"?"Edit":t==="read_file"||t==="read"?"Read":t==="grep"||t==="search"?"Search":t==="web_search"||t==="websearch"?"WebSearch":t==="web_fetch"||t==="webfetch"?"Fetch":e.slice(0,12)}class KM{constructor(t){this.pendingDespawn=new Set,this.scene=t}applyEvent(t){const n=t.data??{},r=t.agent_id||"openopc-main";if(r==="user")return;const i=r.startsWith("subagent-"),o=i?typeof n.parent_agent_id=="string"?n.parent_agent_id:"openopc-main":null,a=i?`Sub ${r.slice(-4)}`:void 0,c=this.scene.ensureAgent(r,a,i,o);switch(c.lastEventAt=Date.now(),typeof n.task_preview=="string"&&(c.taskSummary=n.task_preview),typeof n.result_preview=="string"&&(c.taskSummary=n.result_preview),t.type){case"tool_start":this.onToolStart(c,n);break;case"tool_done":this.onToolDone(c,n);break;case"agent_active":this.onAgentActive(c);break;case"waiting":this.onWaiting(c);break;case"reflect_start":this.onReflectStart(c);break;case"reflect_done":this.onReflectDone(c);break;case"skill_synthesized":this.onSkillSynthesized(c,n);break;case"subagent_spawn":this.onSubagentSpawn(c,r,o);break;case"subagent_done":this.onSubagentDone(c,r);break;case"message_in":this.onMessageIn(c,n);break;case"message_out":this.onMessageOut(c,n);break;case"practice_start":this.onPracticeStart(c,n);break;case"practice_done":this.onPracticeDone(c);break;case"task_routed":this.onTaskRouted(c,n);break;case"task_delegated":this.onTaskDelegated(c,r,n);break;case"delegation_done":this.onDelegationDone(c,n);break;case"agent_spawned":this.onAgentSpawned(c,r,n);break;case"agent_removed":this.onAgentRemoved(c,r);break;case"collab_started":this.onCollabStarted(c);break;case"collab_ended":this.onCollabEnded(c);break;case"skill_published":this.onSkillPublished(c,n);break;case"skill_adopted":this.onSkillAdopted(c,n);break;case"mycelium_transport":this.onMyceliumTransport(c,r,n);break;case"mycelium_crystallize":this.onMyceliumCrystallize(c,r,n);break;case"mycelium_spore":this.onMyceliumSpore(c,r,n);break;case"mycelium_decompose":this.onMyceliumDecompose(c,r,n);break;case"mycelium_unit_created":this.onMyceliumUnitCreated(c,n);break;case"mycelium_germinate":this.onMyceliumGerminate(c,r,n);break;case"hyphal_strengthen":this.onHyphalStrengthen(r,n);break;case"hyphal_weaken":this.onHyphalWeaken(r,n);break}}onToolStart(t,n){const r=typeof n.tool_name=="string"?n.tool_name:"tool",i=Yk(r);t.urgency="urgent",t.currentTool=r,t.isActive=!0,t.showBubble(`${i}...`),this.sendToSeat(t)}onToolDone(t,n){const r=typeof n.tool_name=="string"?n.tool_name:t.currentTool,i=Yk(r);t.currentTool=null,t.setAgentState(it.CELEBRATE),t.stateTimer=qa,t.isActive=!1,t.showBubble(`${i} done`)}onAgentActive(t){t.urgency="urgent",t.isActive=!0,t.currentTool||this.sendToSeat(t)}onWaiting(t){t.urgency="relaxed",t.isActive=!1,t.currentTool=null,t.showBubble("Waiting");const n=this.moveToZone(t,"breakRoom",it.COFFEE);n||t.setAgentState(it.IDLE),n&&(t.stateTimer=Zo(_M,kM))}onReflectStart(t){t.urgency="normal",t.isActive=!1,t.currentTool="Reflect",this.moveToZone(t,"meetingRoom",it.REFLECT)||t.setAgentState(it.REFLECT),t.stateTimer=30,t.showBubble("Reflecting...")}onReflectDone(t){t.currentTool=null,t.setAgentState(it.CELEBRATE),t.stateTimer=qa,t.showBubble("Insight!")}onSkillSynthesized(t,n){const r=Qi(String(n.skill_name??"new"),20);t.setAgentState(it.PRESENT),t.showBubble(`New Skill: ${r}`)}onSubagentSpawn(t,n,r){this.placeAtDoorway(t),t.urgency="urgent",t.isActive=!0,t.showBubble("Spawned"),this.sendToSeat(t)}onSubagentDone(t,n){t.urgency="relaxed",t.currentTool=null,t.isActive=!1,t.showBubble("Finished"),this.moveToDoorway(t)?this.pendingDespawn.add(n):this.scene.removeAgent(n)}onMessageIn(t,n){t.urgency="urgent";const r=typeof n.content_preview=="string"?n.content_preview:"";r&&(t.taskSummary=r);const i=r?Qi(r,30):"New task";t.showBubble(i),t.isActive=!0,this.sendToSeat(t)}onMessageOut(t,n){const r=typeof n.content_preview=="string"?n.content_preview:"";r&&(t.taskSummary=r);const i=r?Qi(r,30):"Reply sent";t.showBubble(`Reply: ${i}`)}onPracticeStart(t,n){t.urgency="normal";const r=typeof n.target_domain=="string"?n.target_domain:"Practice";t.showBubble(`Practicing: ${Qi(r,20)}`),t.isActive=!1,t.currentTool="Practice",this.moveToZone(t,"meetingRoom",it.PRACTICE)||t.setAgentState(it.PRACTICE)}onPracticeDone(t){t.currentTool=null,t.setAgentState(it.CELEBRATE),t.stateTimer=qa,t.showBubble("Practice done!")}onTaskRouted(t,n){t.urgency="urgent";const r=typeof n.method=="string"?n.method:"auto";t.isActive=!0,this.sendToSeat(t),t.showBubble(`Assigned (${r})`)}onTaskDelegated(t,n,r){t.urgency="normal",t.stateTimer=Zo(Dk,Ok);const i=typeof r.target=="string"?r.target:"?";t.setAgentState(it.CHAT),t.showBubble(`Delegating to ${i}...`);const o=this.scene.getAgent(i);o&&(o.parentAgentId=n,o.showBubble("Receiving task..."))}onDelegationDone(t,n){const r=typeof n.target=="string"?n.target:"";if(t.setAgentState(it.IDLE),t.showBubble("Delegation complete"),r){const i=this.scene.getAgent(r);i&&(i.parentAgentId=null)}}onAgentSpawned(t,n,r){const i=typeof r.role_name=="string"?r.role_name:n;t.displayName=i,this.placeAtDoorway(t),this.sendToSeat(t),t.showBubble(`${i} joined`)}onAgentRemoved(t,n){t.showBubble("Leaving..."),this.moveToDoorway(t)?this.pendingDespawn.add(n):this.scene.removeAgent(n)}onCollabStarted(t){t.urgency="normal",t.isActive=!1,t.stateTimer=Zo(Dk,Ok),this.moveToZone(t,"meetingRoom",it.CHAT),t.showBubble("Collaborating...")}onCollabEnded(t){t.stateTimer=qa,t.setAgentState(it.CELEBRATE),t.showBubble("Collaboration done!")}onSkillPublished(t,n){const r=Qi(String(n.skill_name??"skill"),20);t.setAgentState(it.CELEBRATE),t.stateTimer=qa,t.showBubble(`Published: ${r}`)}onSkillAdopted(t,n){const r=Qi(String(n.skill_name??"skill"),20);t.showBubble(`Adopted: ${r}`)}onMyceliumTransport(t,n,r){const i=typeof r.source=="string"?r.source:n,o=typeof r.target=="string"?r.target:null,a=typeof r.domain=="string"?Qi(r.domain,15):"?",c=this.scene.ensureAgent(i);if(c.myceliumEffect="transport_send",c.myceliumEffectTimer=3,c.showBubble(`-> [${a}]`),o){const d=this.scene.ensureAgent(o);d.myceliumEffect="transport_recv",d.myceliumEffectTimer=2,d.showBubble("Receiving...");const m=d.getTilePos();c.walkTo(m.x,m.y+1)}}onMyceliumCrystallize(t,n,r){const i=Array.isArray(r.corroborating_agents)?r.corroborating_agents:[],o=Qi(String(r.content_preview??"Knowledge"),22),a=Array.from(new Set([n,...i])),c=`${t.officeId}-meetingRoom`,d=So[c]?.seats??[];for(let m=0;m<a.length;m++){const h=a[m],p=this.scene.ensureAgent(h);p.myceliumEffect="crystal",p.myceliumEffectTimer=15,p.isActive=!1;const g=m%d.length,x=d[g];p.walkTo(x.tileX,x.tileY,()=>{p.setDirection(x.facing),p.setAgentState(it.CHAT)}),p.showBubble(h===n?`Crystal: ${o}`:"Crystal!")}}onMyceliumSpore(t,n,r){const i=Qi(String(r.content_preview??"Breakthrough"),20);t.myceliumEffect="spore_send",t.myceliumEffectTimer=4,t.setAgentState(it.PRESENT),t.showBubble(`Breakthrough! ${i}`),this.moveToZone(t,"breakRoom")}onMyceliumDecompose(t,n,r){const i=Qi(String(r.humus_preview??"Lesson learned"),22);t.myceliumEffect="decompose",t.myceliumEffectTimer=4,t.setAgentState(it.REFLECT),t.showBubble(`Learning: ${i}`),this.moveToZone(t,"meetingRoom")}onMyceliumUnitCreated(t,n){const r=String(n.nutrient_type??"insight").slice(0,1).toUpperCase();t.showBubble(`[${r}]...`,2)}onMyceliumGerminate(t,n,r){const i=typeof r.target_agent=="string"?r.target_agent:n,o=this.scene.ensureAgent(i);o.myceliumEffect=null,o.setAgentState(it.CELEBRATE),o.stateTimer=qa,o.showBubble("Insight took root!")}onHyphalStrengthen(t,n){}onHyphalWeaken(t,n){}updateIdle(t){for(const n of this.scene.agents.values()){if(this.pendingDespawn.has(n.agentId)&&!n.isMoving){this.pendingDespawn.delete(n.agentId),this.scene.removeAgent(n.agentId);continue}if(n.myceliumEffectTimer>0&&(n.myceliumEffectTimer-=t,n.myceliumEffectTimer<=0&&(n.myceliumEffect=null,n.myceliumEffectTimer=0,n.myceliumSession=null)),n.agentState===it.TYPE&&!n.isActive){n.seatTimer>0?(n.seatTimer-=t,n.seatTimer<=0&&(n.seatTimer=0,n.setAgentState(it.IDLE),n.wanderCount=0,n.wanderLimit=XM(qj,Gj),n.wanderTimer=Zo(Rf,Af))):n.setAgentState(it.IDLE);continue}if(n.agentState===it.IDLE){if(n.isActive){if(n.urgency="urgent",!n.seatId){n.setAgentState(it.TYPE);continue}this.sendToSeat(n);continue}if(n.wanderTimer-=t,n.wanderTimer<=0){if(n.wanderCount>=n.wanderLimit&&n.seatId){n.urgency="relaxed",this.sendToSeat(n),n.wanderTimer=Zo(Rf,Af);continue}const r=this.scene.getWalkableTilesForOffice(n.officeId);if(r.length>0){n.urgency="relaxed";const i=r[Math.floor(Math.random()*r.length)];n.walkTo(i.x,i.y),n.wanderCount++}n.wanderTimer=Zo(Rf,Af)}}}}sendToSeat(t){if(!t.seatId)return;const n=this.scene.getSeatById(t.seatId);n&&t.walkTo(n.tileX,n.tileY,()=>{t.setAgentState(it.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Lk+Math.random()*zk)}).then(r=>{r||(t.setAgentState(it.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Lk+Math.random()*zk))})}moveToZone(t,n,r){const i=`${t.officeId}-${n}`,o=So[i];if(!o)return!1;if(o.seats.length>0){const c=new Set;for(const m of this.scene.agents.values()){if(m===t||m.isMoving)continue;const h=m.getTilePos();c.add(`${h.x},${h.y}`)}for(const m of this.scene.agents.values()){if(m===t||!m.isMoving)continue;const h=m.currentPath;if(h?.length){const p=h[h.length-1];c.add(`${p.x},${p.y}`)}}const d=o.seats.find(m=>!c.has(`${m.tileX},${m.tileY}`));if(d)return t.walkTo(d.tileX,d.tileY,()=>{t.setDirection(d.facing),r?t.setAgentState(r):t.setAgentState(it.IDLE)}),!0}const a=YM(i);return a?(t.walkTo(a.x,a.y,()=>{r?t.setAgentState(r):t.setAgentState(it.IDLE)}),!0):!1}moveToDoorway(t){const n=Wk(t.officeId);if(n.length===0)return!1;const r=n[Math.floor(Math.random()*n.length)];return t.walkTo(r.x,r.y),!0}placeAtDoorway(t){const n=Wk(t.officeId);if(n.length>0){const r=n[Math.floor(Math.random()*n.length)];t.setPosition(r.x*T+T/2,r.y*T+T/2)}}}class ZM extends Kr.Scene{constructor(){super("Office"),this.yachtLoopStarted=!1,this.outdoorIsDay=null,this.agents=new Map,this.seats=[],this.walkableTiles=[],this.walkableTilesByOffice=new Map,this.dragState={pointerId:null,lastX:0,lastY:0,moved:!1}}create(){this.bridge=this.registry.get("bridge");const t=iu();this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?Ak:Mk),this.mapBuilder=new qf,this.mapData=this.mapBuilder.buildMap(this,t),this.pathfinder=new qk(this.mapData.collisionGrid),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),this.seats=Gk().map(d=>({...d})),this.behavior=new KM(this);const n=gg*T,r=Lc*T,i=-ru,o=-il,a=n+ru*2,c=r+il+ll;this.physics.world.setBounds(i,o,a,c),this.cameras.main.setBounds(i,o,a,c),this.resetCameraView(!1),this.startWaterfrontLoop(),this.input.on("pointerdown",d=>{d.leftButtonDown()&&(this.dragState.pointerId=d.id,this.dragState.lastX=d.x,this.dragState.lastY=d.y,this.dragState.moved=!1)}),this.input.on("pointermove",d=>{if(!d.isDown||this.dragState.pointerId!==d.id)return;const m=d.x-this.dragState.lastX,h=d.y-this.dragState.lastY;if(!this.dragState.moved&&Math.abs(d.downX-d.x)+Math.abs(d.downY-d.y)<6)return;this.dragState.moved=!0;const p=this.cameras.main;p.stopFollow(),p.scrollX-=m/p.zoom,p.scrollY-=h/p.zoom,this.dragState.lastX=d.x,this.dragState.lastY=d.y}),this.input.on("wheel",(d,m,h,p)=>{const g=this.cameras.main,x=this.input.activePointer,v=g.getWorldPoint(x.x,x.y),k=this.getMinCameraZoom(g),S=Kr.Math.Clamp(g.zoom-p*.0015,k,3);g.setZoom(S);const b=g.getWorldPoint(x.x,x.y);g.scrollX+=v.x-b.x,g.scrollY+=v.y-b.y,g.scrollX=g.clampX(g.scrollX),g.scrollY=g.clampY(g.scrollY)}),this.scale.on("resize",()=>{const d=this.cameras.main,m=this.getMinCameraZoom(d);d.zoom<m&&d.setZoom(m),d.scrollX=d.clampX(d.scrollX),d.scrollY=d.clampY(d.scrollY)}),this.time.addEvent({delay:45e3,loop:!0,callback:this.checkOutdoorDayNight,callbackScope:this}),this.input.on("pointerup",d=>{if(this.dragState.pointerId!==d.id)return;const m=this.dragState.pointerId===d.id&&this.dragState.moved;if(this.dragState.pointerId=null,this.dragState.moved=!1,m)return;const h=this.cameras.main.getWorldPoint(d.x,d.y);let p=null,g=1/0;for(const x of this.agents.values()){const v=Kr.Math.Distance.Between(h.x,h.y,x.x,x.y);v<24&&v<g&&(p=x,g=v)}p&&(this.bridge.emit("agentSelected",p.agentId),this.cameras.main.startFollow(p,!0,.1,.1))}),this.bridge&&this.bridge.setScene(this),console.log("[OfficeScene] Ready — walkable tiles:",this.walkableTiles.length)}update(t,n){const r=n/1e3;for(const i of this.agents.values())i.update(r);this.behavior.updateIdle(r)}startWaterfrontLoop(){if(this.yachtLoopStarted)return;this.yachtLoopStarted=!0;const{dockCenterX:t,dockY:n,waterTopY:r,waterBottomY:i}=this.mapData.waterfront,o=3,a=Kr.Math.Clamp(n+T*5,r+T*3.8,i-T*4.6),c=t-T*20,d=t+T*1.65,m=t+T*19,h=this.add.ellipse(0,13,122,24,1520707,.28),p=this.add.ellipse(-78,8,24,7,15399167,.42),g=this.add.ellipse(-92,9,16,5,14151415,.3),x=this.add.ellipse(-106,10,10,4,12573931,.18),v=this.add.rectangle(-2,6,94,16,16185336,1),k=this.add.rectangle(-49,5,12,14,15067372,1),S=this.add.rectangle(44,4,12,12,16185336,1),b=this.add.triangle(56,4,0,-6,13,0,0,6,16185336,1),w=this.add.rectangle(-1,11,66,4,12174283,.95),j=this.add.rectangle(6,3,74,3,9289688,.95),N=this.add.rectangle(-6,-3,52,10,16777215,1),O=this.add.rectangle(-28,-2,18,8,15528178,1),R=this.add.rectangle(18,-5,18,8,16777215,1),L=this.add.rectangle(6,-13,40,8,16317179,1),I=this.add.rectangle(-18,-12,18,6,15791350,1),D=this.add.rectangle(19,-5,14,4,9950199,.92),M=this.add.rectangle(0,-3,42,3,13625847,.88),A=this.add.rectangle(4,-16,44,2,14279142,.96),$=this.add.rectangle(7,-25,2,9,15330801,.95),W=this.add.rectangle(11,-28,9,2,15330801,.95),B=this.add.triangle(17,-27,0,-3,7,0,0,3,10470876,.95),V=this.add.container(c,a,[h,x,g,p,k,v,S,b,j,w,O,N,R,I,L,D,M,A,$,W,B]),H=[-26,-10,8,26].map(Y=>this.add.circle(Y,5,2.1,14284031,.95));V.add(H),V.setDepth(-250),V.setAlpha(0),V.setRotation(-.04),V.setScale(o),this.tweens.add({targets:[p,g,x],scaleX:{from:.85,to:1.2},alpha:{from:.5,to:.2},duration:900,yoyo:!0,repeat:-1});const U=()=>{V.setPosition(c,a),V.setAlpha(0),V.setRotation(-.04),p.setAlpha(.55),g.setAlpha(.42),x.setAlpha(.24),this.tweens.add({targets:V,x:d,alpha:1,rotation:.015,duration:7200,ease:"Sine.InOut",onComplete:()=>{p.setAlpha(.22),g.setAlpha(.14),x.setAlpha(.08),this.tweens.add({targets:V,x:d+4,y:a+T*.12,duration:1400,yoyo:!0,repeat:2,ease:"Sine.InOut"}),this.time.delayedCall(3600,()=>{p.setAlpha(.48),g.setAlpha(.32),x.setAlpha(.18),this.tweens.add({targets:V,x:m,alpha:0,rotation:-.055,duration:7600,ease:"Sine.InOut",onComplete:()=>{this.time.delayedCall(2400,U)}})})}})};U()}buildWalkableTilesByOffice(){this.walkableTilesByOffice.clear();const t=Zn();for(const n of t){const r=[];for(const i of this.walkableTiles)i.x>=n.offsetCol&&i.x<n.offsetCol+Kn&&r.push(i);this.walkableTilesByOffice.set(n.id,r)}}getWalkableTilesForOffice(t){return this.walkableTilesByOffice.get(t)??[]}resetCameraView(t=!0){const n=this.cameras.main,{worldW:r,worldH:i}=this.getWorldSize(),o=this.getMinCameraZoom(n),a=Math.min(this.scale.width/r,this.scale.height/i),c=Math.max(1.22,o),d=Kr.Math.Clamp(Math.max(a*1.18,.62),o,c),m=gg*T/2,h=(Lc*T-il+ll)/2+T*2.6;if(n.stopFollow(),!t){n.setZoom(d),n.centerOn(m,h);return}this.tweens.add({targets:n,zoom:d,duration:260,ease:"Cubic.easeOut"}),n.pan(m,h,260,"Cubic.easeOut")}panToOffice(t){const r=Zn().find(m=>m.id===t);if(!r)return;const i=(r.offsetCol+Kn/2)*T,o=Lc/2*T,a=this.cameras.main,c=this.getMinCameraZoom(a),d=Kr.Math.Clamp(Math.min(this.scale.width/((Kn+4)*T),this.scale.height/((Lc-4)*T)),c,Math.max(1.5,c));a.stopFollow(),this.tweens.add({targets:a,zoom:d,duration:380,ease:"Cubic.easeOut"}),a.pan(i,o,380,"Cubic.easeOut")}resolveOfficeForAgent(t){const n=TM(t);if(n)return n.id;const r=Zn();let i=null,o=-1;for(const c of r){const d=Jj(c.id),m=c.assignedAgents.length,h=d.length-m;h>o&&(i=c,o=h)}const a=i?.id??r[0]?.id??"office-0";return yg(a,t),a}addAgent(t,n,r=!1,i=null,o,a,c){if(this.agents.has(t))return this.agents.get(t);const d=n??t,m=a??this.agents.size%6,h=o?(yg(o,t),o):this.resolveOfficeForAgent(t),p=c?this.seats.find(j=>j.id===c&&!j.assigned)??this.findFreeSeatInOffice(h):this.findFreeSeatInOffice(h),v=(Zn().find(j=>j.id===h)?.offsetCol??0)+5,k=20;let S=v,b=k;p&&(S=p.tileX,b=p.tileY,p.assigned=!0,p.assignedTo=t);const w=new DM(this,t,d,m,S,b);return w.officeId=h,w.setPathfinder(this.pathfinder),w.seatId=p?.id??null,w.isSubagent=r,w.parentAgentId=i,p&&(w.setAgentState(it.TYPE),w.setDirection(p.facing),w.seatTimer=10),this.agents.set(t,w),w}removeAgent(t){const n=this.agents.get(t);if(n){if(n.seatId){const r=this.seats.find(i=>i.id===n.seatId);r&&(r.assigned=!1,r.assignedTo=null)}n.destroy(),this.agents.delete(t);try{const{unassignAgent:r}=require("../map/OfficeStore");r(t)}catch{}}}getAgent(t){return this.agents.get(t)}ensureAgent(t,n,r=!1,i=null,o,a,c){const d=this.agents.get(t);return d?(o&&d.officeId!==o&&this.reassignAgent(t,o),c&&d.seatId!==c&&this.changeAgentSeat(t,c),d):this.addAgent(t,n,r,i,o,a,c)}findFreeSeatInOffice(t){const n=this.seats.filter(r=>r.id.startsWith(`${t}-desk-`)).find(r=>!r.assigned);return n||(this.seats.filter(r=>r.id.startsWith(`${t}-leader-`)).find(r=>!r.assigned)??null)}getSeatById(t){return this.seats.find(n=>n.id===t)}reassignAgent(t,n){const r=this.agents.get(t);if(!r)return;if(r.seatId){const m=this.seats.find(h=>h.id===r.seatId);m&&(m.assigned=!1,m.assignedTo=null)}r.stopMovement(),yg(n,t),r.officeId=n;const i=this.findFreeSeatInOffice(n),c=(Zn().find(m=>m.id===n)?.offsetCol??0)+5,d=20;i?(i.assigned=!0,i.assignedTo=t,r.seatId=i.id,r.setPosition(i.tileX*T+T/2,i.tileY*T+T/2),r.setAgentState(it.TYPE),r.setDirection(i.facing),r.seatTimer=10):(r.seatId=null,r.setPosition(c*T+T/2,d*T+T/2))}getCharacterCards(){const t=[];for(const n of this.agents.values())t.push({id:n.agentId,displayName:n.displayName,state:n.agentState,currentTool:n.currentTool,isSubagent:n.isSubagent,parentAgentId:n.parentAgentId,taskSummary:n.taskSummary,lastEventAt:n.lastEventAt,officeId:n.officeId,seatId:n.seatId});return t}changeAgentSeat(t,n){const r=this.agents.get(t);if(!r)return;if(r.seatId){const o=this.seats.find(a=>a.id===r.seatId);o&&(o.assigned=!1,o.assignedTo=null)}const i=this.seats.find(o=>o.id===n);!i||i.assigned&&i.assignedTo!==t||(i.assigned=!0,i.assignedTo=t,r.seatId=n,r.stopMovement(),r.setPosition(i.tileX*T+T/2,i.tileY*T+T/2),r.setAgentState(it.TYPE),r.setDirection(i.facing),r.seatTimer=10)}rebuildOfficeCollision(t,n,r){RM(t,n,r),this.mapData.wallBodies&&this.mapData.wallBodies.clear(!0,!0);const i=Zn(),o=Kj(i),a=qf.buildWallBodies(this,o);this.mapData={...this.mapData,wallBodies:a,collisionGrid:o},this.pathfinder=new qk(o),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),WM(i),this.seats=Gk().map(c=>({...c}));for(const c of this.agents.values())c.setPathfinder(this.pathfinder),c.stopMovement();console.log("[OfficeScene] Office collision rebuilt —",t,"walkable:",this.walkableTiles.length)}renameOffice(t,n){NM(t,n),this.mapBuilder.updateLabel(t,n)}checkOutdoorDayNight(){this.applyOutdoorLighting(iu())}syncOutdoorLighting(){this.applyOutdoorLighting(iu())}applyOutdoorLighting(t){t!==this.outdoorIsDay&&(this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?Ak:Mk),this.mapBuilder.refreshOutdoorDayNight(this,t))}getWorldSize(){const t=gg*T,n=Lc*T;return{worldW:t+ru*2,worldH:n+il+ll}}getMinCameraZoom(t){const{worldW:n,worldH:r}=this.getWorldSize();return Math.max(t.width/n,t.height/r)}}function QM({bridge:e,active:t=!0}){const n=C.useRef(null),r=C.useRef(null),i=C.useRef(null),o=C.useRef(t);return o.current=t,C.useEffect(()=>{const a=i.current;!a||!a.loop||(t?a.loop.started&&!a.loop.running&&(a.loop.wake(),a.scale.getParentBounds(),a.scale.refresh()):a.loop.running&&a.loop.sleep())},[t]),C.useEffect(()=>{if(!n.current||!r.current)return;const a=n.current,c=r.current,d=(h,p)=>{console.log("[PhaserGame] Creating Phaser game",h,"×",p);const g=wM(c,h,p);g.scene=[EM,ZM];const x=new Kr.Game(g);x.registry.set("bridge",e),x.events.once(Kr.Core.Events.READY,()=>{!o.current&&x.loop.running&&x.loop.sleep()}),i.current=x};if(typeof ResizeObserver>"u")return d(a.clientWidth||window.innerWidth-380,a.clientHeight||window.innerHeight-48),()=>{i.current?.destroy(!0),i.current=null};const m=new ResizeObserver(h=>{const p=h[h.length-1].contentRect,g=Math.floor(p.width),x=Math.floor(p.height);if(!(g<1||x<1))if(!i.current)d(g,x);else{const v=i.current.scale;v.getParentBounds(),v.refresh()}});return m.observe(a),()=>{m.disconnect(),i.current?.destroy(!0),i.current=null}},[e]),u.jsx("div",{ref:n,style:{width:"100%",height:"100%"},children:u.jsx("div",{ref:r,style:{width:"100%",height:"100%"}})})}class JM extends Kr.Events.EventEmitter{constructor(){super(),this.scene=null,this.eventQueue=[],this.snapshotQueue=[]}setScene(t){this.scene=t;for(const n of this.snapshotQueue)this.applySnapshot(n);this.snapshotQueue=[];for(const n of this.eventQueue)this.applyEvent(n);this.eventQueue=[]}getScene(){return this.scene}pushEvent(t){if(!this.scene){this.eventQueue.push(t),this.eventQueue.length>500&&this.eventQueue.shift();return}this.applyEvent(t)}pushSnapshot(t){const n=Object.keys(t.agents??{}).length;if(!this.scene){console.log(`[GameBridge] pushSnapshot queued (scene not ready) — ${n} agents`),this.snapshotQueue=[t],this.eventQueue=[];return}console.log(`[GameBridge] pushSnapshot applying now — ${n} agents`),this.applySnapshot(t)}sendToSeat(t){this.scene&&this.scene.behavior.sendToSeat(this.scene.ensureAgent(t))}setAgentActive(t,n){if(!this.scene)return;const r=this.scene.getAgent(t);r&&(r.isActive=n)}setAgentBubble(t,n){if(!this.scene)return;const r=this.scene.getAgent(t);r&&(n?r.showBubble(n):r.clearBubble())}ensureAgent(t,n,r,i,o){this.scene&&this.scene.ensureAgent(t,n,!1,null,r,i,o)}getCharacterCards(){return this.scene?this.scene.getCharacterCards():[]}getOffices(){return Zn()}renameOffice(t,n){this.scene&&(this.scene.renameOffice(t,n),this.emit("officeChanged"))}assignAgentToOffice(t,n){this.scene&&(this.scene.reassignAgent(t,n),this.emit("officeChanged"))}panToOffice(t){this.scene&&this.scene.panToOffice(t)}resetCamera(){this.scene&&this.scene.resetCameraView()}syncOutdoorLighting(){this.scene&&this.scene.syncOutdoorLighting()}rebuildOfficeCollision(t,n,r){this.scene&&this.scene.rebuildOfficeCollision(t,n,r)}getSeatsForOffice(t){return this.scene?this.scene.seats.filter(n=>n.id.startsWith(`${t}-desk-`)||n.id.startsWith(`${t}-leader-`)).map(n=>({id:n.id,assigned:n.assigned,assignedTo:n.assignedTo})):[]}changeAgentSeat(t,n){this.scene&&(this.scene.changeAgentSeat(t,n),this.emit("officeChanged"))}notifyChannelMessage(t,n){if(this.scene)for(const r of t){const i=this.scene.getAgent(r);i&&(i.showBubble(n.slice(0,30)),setTimeout(()=>i.clearBubble(),4e3))}}triggerCrossOfficeMeeting(t){if(this.scene)for(const n of t){const r=this.scene.getAgent(n);r&&this.scene.behavior.moveToZone(r,"meetingRoom")}}triggerCelebration(t){if(!this.scene)return;const n=this.scene.getAgent(t);n&&(n.showBubble("🎉 Done!"),setTimeout(()=>n.clearBubble(),3e3))}applyEvent(t){this.scene&&(this.scene.behavior.applyEvent(t),this.emit("eventApplied",t))}applySnapshot(t){if(!this.scene){console.warn("[GameBridge] applySnapshot called but scene is null");return}const n=Array.from(this.scene.agents.keys());console.log("[GameBridge] applySnapshot — clearing",n.length,"old agents:",n);for(const o of n)this.scene.removeAgent(o);const r=t.timeline??[];for(const o of r)this.scene.behavior.applyEvent(o);const i=Object.entries(t.agents??{});console.log("[GameBridge] applySnapshot — adding",i.length,"agents:",i.map(([o])=>o));for(const[o,a]of i){const c=a,d=c.name||c.role_name||o,m=c.office_id,h=c.appearance?.palette,p=c.appearance?.desk_id;try{const g=this.scene.ensureAgent(o,d,!1,null,m,h,p),x=c.runtime_status||c.status;x==="tool_active"?(g.currentTool=c.current_tool??null,g.isActive=!0,g.setAgentState(it.TYPE)):x==="reflecting"&&(g.currentTool=c.current_tool??"Reflect",g.isActive=!1,g.setAgentState(it.REFLECT)),console.log(`[GameBridge] ✓ ensured ${o} in ${m} palette=${h}`)}catch(g){console.error(`[GameBridge] ✗ ensureAgent failed for ${o}:`,g)}}r.length===0&&i.length===0&&(console.warn("[GameBridge] applySnapshot — empty snapshot, creating fallback agent"),this.scene.ensureAgent("openopc-main","OpenOPC")),console.log("[GameBridge] applySnapshot done — total agents:",this.scene.agents.size),this.emit("snapshotApplied",t)}}const e4="assets/office-bg.png";function t4({bridge:e}){const t=C.useRef(null),n=C.useRef(null),r=C.useRef(!1),[i,o]=C.useState(()=>Zn()),[a,c]=C.useState(()=>Zn()[0]?.id??"office-0"),d=i.find(te=>te.id===a)??i[0],[m,h]=C.useState(()=>xg(d?.mapStr??su,Kn,ci)),[p,g]=C.useState(()=>[...d?.seats??ou]),[x,v]=C.useState("wall"),[k,S]=C.useState(!1),[b,w]=C.useState(!1),[j,N]=C.useState(!1),[O,R]=C.useState(1),[L,I]=C.useState(!0),D=Kn,M=ci,A=te=>{const ie=Zn();o(ie),c(te);const se=ie.find(de=>de.id===te);se&&(h(xg(se.mapStr,Kn,ci)),g([...se.seats])),N(!1)};C.useEffect(()=>{const te=new Image;te.crossOrigin="anonymous",te.onload=()=>{n.current=te,S(!0)},te.onerror=()=>{n.current=null,S(!0)},te.src=e4},[]);const $=C.useCallback(()=>{const te=t.current;if(!te)return;const ie=te.getContext("2d");if(!ie)return;const se=D*T,de=M*T;te.width=se,te.height=de,ie.clearRect(0,0,se,de),n.current?ie.drawImage(n.current,0,0,se,de):(ie.fillStyle="#3d3d3d",ie.fillRect(0,0,se,de));for(let oe=0;oe<M;oe++)for(let Ne=0;Ne<D;Ne++){const Ee=Ne*T,Ie=oe*T,Be=m[oe]?.[Ne]===1;ie.fillStyle=Be?"rgba(255, 40, 40, 0.35)":"rgba(40, 255, 40, 0.2)",ie.fillRect(Ee,Ie,T,T)}for(const[oe,Ne]of p){const Ee=oe*T+T/2,Ie=Ne*T+T/2;ie.beginPath(),ie.arc(Ee,Ie,9,0,Math.PI*2),ie.fillStyle="rgba(255, 220, 0, 0.85)",ie.fill(),ie.strokeStyle="#000",ie.lineWidth=1.5,ie.stroke()}if(L){ie.strokeStyle="rgba(255, 255, 255, 0.15)",ie.lineWidth=.5;for(let oe=0;oe<=D;oe++)ie.beginPath(),ie.moveTo(oe*T,0),ie.lineTo(oe*T,de),ie.stroke();for(let oe=0;oe<=M;oe++)ie.beginPath(),ie.moveTo(0,oe*T),ie.lineTo(se,oe*T),ie.stroke();ie.font="10px monospace",ie.textBaseline="top";for(let oe=0;oe<D;oe++)ie.fillStyle="rgba(255,255,255,0.6)",ie.fillText(String(oe),oe*T+2,2);for(let oe=0;oe<M;oe++)ie.fillStyle="rgba(255,255,255,0.6)",ie.fillText(String(oe),2,oe*T+2)}},[m,p,D,M,L,k]);C.useEffect(()=>{$()},[$]);const W=te=>{const ie=t.current;if(!ie)return null;const se=ie.getBoundingClientRect(),de=ie.width/se.width,oe=ie.height/se.height,Ne=Math.floor((te.clientX-se.left)*de/T),Ee=Math.floor((te.clientY-se.top)*oe/T);return Ne<0||Ne>=D||Ee<0||Ee>=M?null:{c:Ne,r:Ee}},B=C.useCallback((te,ie)=>{if(N(!1),x==="seat")g(se=>{const de=se.findIndex(([oe,Ne])=>oe===te&&Ne===ie);return de>=0?se.filter((oe,Ne)=>Ne!==de):[...se,[te,ie]]}),h(se=>{if(se[ie]?.[te]===1){const de=se.map(oe=>[...oe]);return de[ie][te]=0,de}return se});else{const se=x==="wall"?1:0;h(de=>{if(de[ie]?.[te]===se)return de;const oe=de.map(Ne=>[...Ne]);return oe[ie][te]=se,oe}),x==="wall"&&g(de=>de.filter(([oe,Ne])=>!(oe===te&&Ne===ie)))}},[x]),V=te=>{if(te.button!==0)return;r.current=!0;const ie=W(te);ie&&B(ie.c,ie.r)},H=te=>{if(!r.current||x==="seat")return;const ie=W(te);ie&&B(ie.c,ie.r)},U=()=>{r.current=!1},Y=()=>{const te=Bk(m);e.rebuildOfficeCollision(a,te,p),N(!0),o(Zn()),setTimeout(()=>N(!1),2e3)},Q=()=>w(te=>!te),q=()=>{h(xg(su,Kn,ci)),g([...ou]),N(!1)},G=(()=>{const ie=Bk(m).map((de,oe)=>` '${de}', // ${oe}`).join(` -`),se=p.map(([de,oe])=>` [${de}, ${oe}],`).join(` -`);return`const MAP_STR: string[] = [ -${ie} -] - -const SEATS: [number, number][] = [ -${se} -]`})(),J=()=>R(te=>Math.min(te+.25,3)),P=()=>R(te=>Math.max(te-.25,.5)),K=m.flat().filter(te=>te===1).length,ee=m.flat().filter(te=>te===0).length;return u.jsxs("div",{className:"collision-editor",children:[u.jsxs("div",{className:"ce-toolbar",children:[u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("span",{className:"ce-title",children:"Map Editor"}),u.jsx("select",{className:"ce-office-select",value:a,onChange:te=>A(te.target.value),children:i.map(te=>u.jsx("option",{value:te.id,children:te.name},te.id))})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsxs("button",{className:`ce-mode-btn ${x==="wall"?"active wall":""}`,onClick:()=>v("wall"),children:[u.jsx("span",{className:"ce-mode-dot wall"})," Wall"]}),u.jsxs("button",{className:`ce-mode-btn ${x==="floor"?"active floor":""}`,onClick:()=>v("floor"),children:[u.jsx("span",{className:"ce-mode-dot floor"})," Floor"]}),u.jsxs("button",{className:`ce-mode-btn ${x==="seat"?"active seat":""}`,onClick:()=>v("seat"),children:[u.jsx("span",{className:"ce-mode-dot seat"})," Seat"]})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("button",{className:"ce-btn",onClick:P,children:"-"}),u.jsxs("span",{className:"ce-zoom-label",children:[Math.round(O*100),"%"]}),u.jsx("button",{className:"ce-btn",onClick:J,children:"+"}),u.jsx("button",{className:`ce-btn${L?" active":""}`,onClick:()=>I(te=>!te),children:"Grid"})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("button",{className:`ce-btn apply${j?" success":""}`,onClick:Y,children:j?"Applied":"Apply"}),u.jsx("button",{className:`ce-btn${b?" active":""}`,onClick:Q,children:"Export"}),u.jsx("button",{className:"ce-btn danger",onClick:q,children:"Reset"})]}),u.jsxs("div",{className:"ce-toolbar-group ce-stats",children:[u.jsxs("span",{children:["Walls: ",K]}),u.jsxs("span",{children:["Floor: ",ee]}),u.jsxs("span",{children:["Seats: ",p.length]})]})]}),u.jsxs("div",{className:"ce-body",children:[u.jsx("div",{className:"ce-canvas-wrap",style:{overflow:"auto"},children:u.jsx("canvas",{ref:t,style:{width:D*T*O,height:M*T*O,imageRendering:"pixelated",cursor:x==="seat"?"crosshair":"cell"},onMouseDown:V,onMouseMove:H,onMouseUp:U,onMouseLeave:U})}),b&&u.jsxs("div",{className:"ce-export-panel",children:[u.jsxs("div",{className:"ce-export-header",children:[u.jsx("span",{children:"Export — copy to source code"}),u.jsx("button",{className:"ce-btn",onClick:()=>navigator.clipboard.writeText(G),children:"Copy"})]}),u.jsx("textarea",{className:"ce-export-textarea",value:G,readOnly:!0,rows:20})]})]})]})}let n4=0;function xr(e,t,n={}){return{event_id:`test-${++n4}`,type:e,agent_id:t,data:n,timestamp:Date.now()/1e3}}function Bn(e){return new Promise(t=>setTimeout(t,e))}async function r4(e){const t=[],n=e.getScene();if(!n)return t.push({name:"scene-ready",pass:!1,detail:"OfficeScene not initialized"}),t;console.log("%c[EventTest] Starting full event test suite (multi-office)...","color: #6366f1; font-weight: bold");for(const A of[...n.agents.keys()])n.removeAgent(A);await Bn(100);const r=Zn();t.push({name:"offices-loaded",pass:r.length>=3,detail:`${r.length} offices loaded: ${r.map(A=>A.name).join(", ")}`});const i=["agent-A","agent-B","agent-C","agent-D","agent-E","agent-F"];for(const A of i)e.pushEvent(xr("agent_active",A));await Bn(300);const o=new Set;let a=!1;for(const A of i){const $=n.getAgent(A);$&&$.seatId&&(o.has($.seatId)&&(a=!0),o.add($.seatId))}t.push({name:"desk-assignment-unique",pass:!a&&o.size===i.length,detail:`Assigned ${o.size} unique seats to ${i.length} agents. IDs: [${[...o].join(", ")}]`});const c=i.every(A=>n.getAgent(A)?.officeId!=null);t.push({name:"agents-have-officeId",pass:c,detail:i.map(A=>`${A}=${n.getAgent(A)?.officeId}`).join(", ")}),e.pushEvent(xr("tool_start","agent-A",{tool_name:"shell"})),await Bn(200);const d=n.getAgent("agent-A");t.push({name:"tool_start-state",pass:d.isActive===!0&&d.currentTool==="shell",detail:`isActive=${d.isActive}, currentTool=${d.currentTool}`}),e.pushEvent(xr("tool_done","agent-A",{tool_name:"shell"})),await Bn(100),t.push({name:"tool_done-celebrate",pass:d.agentState==="celebrate",detail:`state=${d.agentState}`});for(let A=0;A<20&&d.agentState==="celebrate";A++)await Bn(500);t.push({name:"celebrate-to-idle",pass:d.agentState!=="celebrate",detail:`state=${d.agentState}`}),e.pushEvent(xr("waiting","agent-B")),await Bn(200);const m=n.getAgent("agent-B");t.push({name:"waiting-state",pass:m.isActive===!1&&(m.agentState==="walk"||m.agentState==="idle"||m.agentState==="coffee"),detail:`isActive=${m.isActive}, state=${m.agentState}`}),e.pushEvent(xr("reflect_start","agent-C")),await Bn(200);const h=n.getAgent("agent-C");t.push({name:"reflect_start-state",pass:h.currentTool==="Reflect"&&(h.agentState==="walk"||h.agentState==="reflect"),detail:`currentTool=${h.currentTool}, state=${h.agentState}`}),e.pushEvent(xr("reflect_done","agent-C")),await Bn(100),t.push({name:"reflect_done-celebrate",pass:h.agentState==="celebrate",detail:`state=${h.agentState}`});const p=["agent-A","agent-B","agent-C","agent-D"];for(const A of p)e.pushEvent(xr("collab_started",A));await Bn(4e3);const g=new Map;let x=!1;for(const A of p){const $=n.getAgent(A);if(!$)continue;const W=$.getTilePos(),B=`${W.x},${W.y}`;g.has(B)&&(x=!0),g.set(B,A)}t.push({name:"collab-no-overlap",pass:!x,detail:`${p.length} agents, ${g.size} unique positions`});for(const A of p)e.pushEvent(xr("collab_ended",A));await Bn(100);const v=p.every(A=>n.getAgent(A)?.agentState==="celebrate");t.push({name:"collab_ended-celebrate",pass:v,detail:p.map(A=>`${A}=${n.getAgent(A)?.agentState}`).join(", ")}),await Bn(3e3),e.pushEvent(xr("practice_start","agent-E",{target_domain:"TypeScript"})),await Bn(200);const k=n.getAgent("agent-E");t.push({name:"practice_start-state",pass:k.currentTool==="Practice"&&(k.agentState==="walk"||k.agentState==="practice"),detail:`currentTool=${k.currentTool}, state=${k.agentState}`}),e.pushEvent(xr("practice_done","agent-E")),await Bn(100),t.push({name:"practice_done-celebrate",pass:k.agentState==="celebrate",detail:`state=${k.agentState}`}),await Bn(3e3),e.pushEvent(xr("task_delegated","agent-A",{target:"agent-B"})),await Bn(100),t.push({name:"task_delegated-chat",pass:d.agentState==="chat",detail:`state=${d.agentState}`}),e.pushEvent(xr("delegation_done","agent-A",{target:"agent-B"})),await Bn(300),t.push({name:"delegation_done-return",pass:["idle","walk","type"].includes(d.agentState),detail:`state=${d.agentState}`});const S=n.getAgent("agent-F");e.pushEvent(xr("message_in","agent-F",{content_preview:"Hello test"})),await Bn(200),t.push({name:"message_in-active",pass:S.isActive===!0,detail:`isActive=${S.isActive}, state=${S.agentState}`}),e.pushEvent(xr("message_out","agent-F",{content_preview:"Reply test"})),await Bn(100),t.push({name:"message_out-bubble",pass:S.bubbleText?.includes("Reply")===!0,detail:`bubble="${S.bubbleText}"`}),e.pushEvent(xr("subagent_spawn","subagent-test-1",{parent_agent_id:"agent-A"})),await Bn(200);const b=n.getAgent("subagent-test-1");t.push({name:"subagent_spawn-created",pass:b!=null&&b.isSubagent===!0,detail:`created=${!!b}, isSubagent=${b?.isSubagent}`}),e.pushEvent(xr("subagent_done","subagent-test-1")),await Bn(5e3),t.push({name:"subagent_done-removed",pass:n.getAgent("subagent-test-1")==null,detail:`still exists=${!!n.getAgent("subagent-test-1")}`}),e.pushEvent(xr("task_routed","agent-E",{method:"auto"})),await Bn(200),t.push({name:"task_routed-active",pass:k.isActive===!0,detail:`isActive=${k.isActive}, state=${k.agentState}`}),e.pushEvent(xr("agent_removed","agent-F")),await Bn(5e3),t.push({name:"agent_removed-destroyed",pass:n.getAgent("agent-F")==null,detail:`still exists=${!!n.getAgent("agent-F")}`}),e.pushEvent(xr("mycelium_crystallize","agent-A",{corroborating_agents:["agent-B","agent-C"],content_preview:"Shared knowledge"})),await Bn(4e3);const w=new Map;let j=!1;for(const A of["agent-A","agent-B","agent-C"]){const $=n.getAgent(A);if(!$)continue;const W=$.getTilePos(),B=`${W.x},${W.y}`;w.has(B)&&(j=!0),w.set(B,A)}t.push({name:"crystal-no-overlap",pass:!j,detail:`3 agents, ${w.size} unique positions`});const N=new Map;let O=!1;for(const A of n.agents.values())A.seatId&&(N.has(A.seatId)&&(O=!0),N.set(A.seatId,A.agentId));t.push({name:"desk-seat-no-conflict",pass:!O,detail:`${N.size} desk seats assigned, conflict=${O}`});const R=n.getAgent("agent-D");if(R){const A=R.officeId,$=r.find(B=>B.id!==A)??r[1];e.assignAgentToOffice("agent-D",$.id),await Bn(300);const W=R.officeId;t.push({name:"reassign-office",pass:W===$.id&&W!==A,detail:`${A} → ${W} (expected ${$.id})`})}else t.push({name:"reassign-office",pass:!1,detail:"agent-D not found"});const L=new Map;let I=!1;for(const A of n.agents.values())A.seatId&&(L.has(A.seatId)&&(I=!0),L.set(A.seatId,A.agentId));t.push({name:"cross-office-seat-unique",pass:!I,detail:`${L.size} seats, conflict=${I}`});const D=t.filter(A=>A.pass).length,M=t.filter(A=>!A.pass).length;console.log(""),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold"),console.log(`%c[EventTest] Results: ${D} passed, ${M} failed, ${t.length} total`,`color: ${M>0?"#f87171":"#34d399"}; font-weight: bold`),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold");for(const A of t){const $=A.pass?"✅":"❌",W=A.pass?"color: #34d399":"color: #f87171; font-weight: bold";console.log(`%c ${$} ${A.name}: ${A.detail}`,W)}return t}function i4(e){window.__runEventTests=()=>r4(e),window.__bridge=e,console.log("%c[EventTest] Test runner ready. Run: window.__runEventTests()","color: #fbbf24; font-weight: bold")}const s4={queued:"todo",ready:"todo",ready_for_rework:"todo",waiting_dependencies:"todo",running:"in-progress",waiting_for_peer:"in-progress",waiting_for_children:"in-progress",paused:"in-progress",needs_attention:"in-progress",awaiting_manager_review:"in-review",awaiting_human:"in-review",approved:"done",failed:"done",cancelled:"done"};function o4(e){return e?s4[e]??"todo":"todo"}function a4(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function l4(e,t){switch(t.type){case"SET":return t.boards;case"UPDATE_NAME":return e.map(n=>n.id===t.boardId?{...n,name:t.name}:n);default:return e}}function c4(e,t){return t.type==="SET"?t.columns:e}function u4(e,t){const n=Date.now();switch(t.type){case"SET":return t.tasks;case"ADD":return e.some(r=>r.id===t.task.id)?e:[...e,t.task];case"UPDATE":return e.map(r=>r.id===t.id?{...r,...t.partial,updatedAt:n}:r);case"DELETE":return e.filter(r=>r.id!==t.id);case"MOVE":return e.map(r=>r.id===t.id?{...r,columnId:t.columnId,sortOrder:t.sortOrder,updatedAt:n}:r);case"ASSIGN":return e.map(r=>r.id===t.taskId?{...r,assigneeIds:t.agentIds,updatedAt:n}:r);case"REMOVE_ASSIGNEE":return e.map(r=>r.assigneeIds.includes(t.agentId)?{...r,assigneeIds:r.assigneeIds.filter(i=>i!==t.agentId),updatedAt:n}:r);default:return e}}function d4(){const[e,t]=C.useReducer(l4,[]),[n,r]=C.useReducer(c4,[]),[i,o]=C.useReducer(u4,[]),[a,c]=C.useState(null),[d,m]=C.useState("default"),h=C.useMemo(()=>e.find(L=>L.id===a)??null,[e,a]),p=C.useMemo(()=>n.filter(L=>L.boardId===a).sort((L,I)=>L.sortOrder-I.sortOrder),[n,a]),g=C.useMemo(()=>{const L=i.filter(D=>D.boardId===a),I={};for(const D of p)I[D.id]=[];for(const D of L){const M=D.phase?o4(D.phase):D.columnId;I[M]&&I[M].push(D)}for(const D of Object.keys(I))I[D].sort((M,A)=>M.sortOrder-A.sortOrder);return I},[i,a,p]),x=C.useCallback(L=>{const I=e.find($=>$.id===L.boardId),D=I?.nextTaskNum??1,M=I?.prefix??"T",A={id:L.taskId??`task-${a4()}`,displayId:L.displayId??`${M}-${String(D).padStart(3,"0")}`,boardId:L.boardId,columnId:L.columnId,title:L.title,description:L.description,priority:L.priority??null,assigneeIds:L.assigneeIds??[],tags:L.tags??[],sortOrder:D,createdAt:Date.now(),updatedAt:Date.now()};return o({type:"ADD",task:A}),A},[e]),v=C.useCallback((L,I)=>o({type:"UPDATE",id:L,partial:I}),[]),k=C.useCallback(L=>o({type:"DELETE",id:L}),[]),S=C.useCallback((L,I,D)=>o({type:"MOVE",id:L,columnId:I,sortOrder:D}),[]),b=C.useCallback((L,I)=>o({type:"ASSIGN",taskId:L,agentIds:I}),[]),w=C.useCallback(()=>{const L=new Set(n.filter(I=>I.isTerminal).map(I=>I.id));return i.filter(I=>!L.has(I.columnId)).length},[i,n]),j=C.useCallback(L=>{o({type:"REMOVE_ASSIGNEE",agentId:L})},[]),N=C.useCallback((L,I,D,M,A)=>{const $=L||"default",W=$!==d,B=!W&&!!A?.preserveTasksWhenIncomingEmpty&&M.length===0;m($),t({type:"SET",boards:I}),r({type:"SET",columns:D}),o({type:"SET",tasks:B?i:M}),c(V=>!W&&V&&I.some(H=>H.id===V)?V:null)},[d,i]),O=C.useCallback(L=>{c(L)},[]),R=C.useCallback((L,I)=>{t({type:"UPDATE_NAME",boardId:L,name:I})},[]);return C.useMemo(()=>({scopeProjectId:d,boards:e,columns:n,tasks:i,activeBoardId:a,activeBoard:h,activeBoardColumns:p,tasksByColumn:g,setActiveBoard:O,createTask:x,updateTask:v,deleteTask:k,moveTask:S,assignTask:b,dispatchTask:o,getOpenTaskCount:w,removeAssignee:j,initFromBackend:N,updateBoardName:R}),[d,e,n,i,a,h,p,g,O,x,v,k,S,b,o,w,j,N,R])}const Xk={done:"✓",failed:"✗",pending:"○",blocked:"■",cancelled:"—",running:"▶"},Kk={done:"var(--green, #27ae60)",failed:"var(--red, #e74c3c)",pending:"var(--text-secondary, #888)",blocked:"var(--yellow, #f39c12)",cancelled:"var(--text-dim, #555)",running:"var(--accent, #3498db)"};function f4({data:e,onResume:t,onCancel:n}){const[r,i]=C.useState(new Set);if(!e.interrupted.length&&!e.active_recoveries.length)return null;const o=e.interrupted.filter(a=>!r.has(a.parent_task_id));return!o.length&&!e.active_recoveries.length?null:u.jsx("div",{className:"wfr-panel",children:o.map(a=>{const c=e.active_recoveries.includes(a.parent_task_id),d=a.work_items.filter(h=>h.status==="done").length,m=a.work_items.filter(h=>h.interrupted||h.status==="failed").length;return u.jsxs("div",{className:"wfr-card",children:[u.jsxs("div",{className:"wfr-header",children:[u.jsx("span",{className:"wfr-icon",children:"⚠"}),u.jsxs("div",{className:"wfr-header-text",children:[u.jsxs("span",{className:"wfr-title",children:["Interrupted: ",a.title]}),u.jsxs("span",{className:"wfr-subtitle",children:[d,"/",a.work_items.length," work items done, ",m," interrupted",a.profile&&u.jsxs(u.Fragment,{children:[" · ",a.profile]})]})]})]}),u.jsx("div",{className:"wfr-work-items",children:a.work_items.map(h=>u.jsxs("div",{className:`wfr-work-item wfr-work-item--${h.status}`,children:[u.jsx("span",{className:"wfr-work-item-icon",style:{color:Kk[h.status]||Kk.pending},children:Xk[h.status]||Xk.pending}),u.jsx("span",{className:"wfr-work-item-title",children:h.title}),h.interrupted&&u.jsx("span",{className:"wfr-work-item-badge",children:"interrupted"})]},h.work_item_projection_id))}),u.jsx("div",{className:"wfr-actions",children:c?u.jsxs("span",{className:"wfr-recovering",children:[u.jsx("span",{className:"spinner-inline"})," Recovering..."]}):u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"wfr-btn wfr-btn--resume",onClick:()=>t(a.parent_task_id),children:"Resume"}),u.jsx("button",{className:"wfr-btn wfr-btn--cancel",onClick:()=>n(a.parent_task_id),children:"Cancel"}),u.jsx("button",{className:"wfr-btn wfr-btn--dismiss",onClick:()=>i(h=>new Set(h).add(a.parent_task_id)),children:"Dismiss"})]})})]},a.parent_task_id)})})}var Am=Vj();const m4=ca(Am);function Wa(e,t,n){let r=n.initialDeps??[],i,o=!0;function a(){var c,d,m;let h;n.key&&((c=n.debug)!=null&&c.call(n))&&(h=Date.now());const p=e();if(!(p.length!==r.length||p.some((v,k)=>r[k]!==v)))return i;r=p;let x;if(n.key&&((d=n.debug)!=null&&d.call(n))&&(x=Date.now()),i=t(...p),n.key&&((m=n.debug)!=null&&m.call(n))){const v=Math.round((Date.now()-h)*100)/100,k=Math.round((Date.now()-x)*100)/100,S=k/16,b=(w,j)=>{for(w=String(w);w.length<j;)w=" "+w;return w};console.info(`%c⏱ ${b(k,5)} /${b(v,5)} ms`,` - font-size: .6rem; - font-weight: bold; - color: hsl(${Math.max(0,Math.min(120-120*S,120))}deg 100% 31%);`,n?.key)}return n?.onChange&&!(o&&n.skipInitialOnChange)&&n.onChange(i),o=!1,i}return a.updateDeps=c=>{r=c},a}function Zk(e,t){if(e===void 0)throw new Error("Unexpected undefined");return e}const p4=(e,t)=>Math.abs(e-t)<1.01,h4=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},Qk=e=>{const{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},g4=e=>e,y4=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),r=[];for(let i=t;i<=n;i++)r.push(i);return r},x4=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;const i=a=>{const{width:c,height:d}=a;t({width:Math.round(c),height:Math.round(d)})};if(i(Qk(n)),!r.ResizeObserver)return()=>{};const o=new r.ResizeObserver(a=>{const c=()=>{const d=a[0];if(d?.borderBoxSize){const m=d.borderBoxSize[0];if(m){i({width:m.inlineSize,height:m.blockSize});return}}i(Qk(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(c):c()});return o.observe(n,{box:"border-box"}),()=>{o.unobserve(n)}},Jk={passive:!0},eS=typeof window>"u"?!0:"onscrollend"in window,v4=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;let i=0;const o=e.options.useScrollendEvent&&eS?()=>{}:h4(r,()=>{t(i,!1)},e.options.isScrollingResetDelay),a=h=>()=>{const{horizontal:p,isRtl:g}=e.options;i=p?n.scrollLeft*(g&&-1||1):n.scrollTop,o(),t(i,h)},c=a(!0),d=a(!1);n.addEventListener("scroll",c,Jk);const m=e.options.useScrollendEvent&&eS;return m&&n.addEventListener("scrollend",d,Jk),()=>{n.removeEventListener("scroll",c),m&&n.removeEventListener("scrollend",d)}},b4=(e,t,n)=>{if(t?.borderBoxSize){const r=t.borderBoxSize[0];if(r)return Math.round(r[n.options.horizontal?"inlineSize":"blockSize"])}return e[n.options.horizontal?"offsetWidth":"offsetHeight"]},_4=(e,{adjustments:t=0,behavior:n},r)=>{var i,o;const a=e+t;(o=(i=r.scrollElement)==null?void 0:i.scrollTo)==null||o.call(i,{[r.options.horizontal?"left":"top"]:a,behavior:n})};class k4{constructor(t){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var n,r,i;return((i=(r=(n=this.targetWindow)==null?void 0:n.performance)==null?void 0:r.now)==null?void 0:i.call(r))??Date.now()},this.observer=(()=>{let n=null;const r=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(i=>{i.forEach(o=>{const a=()=>{const c=o.target,d=this.indexFromElement(c);if(!c.isConnected){this.observer.unobserve(c);return}this.shouldMeasureDuringScroll(d)&&this.resizeItem(d,this.options.measureElement(c,o,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(a):a()})}));return{disconnect:()=>{var i;(i=r())==null||i.disconnect(),n=null},observe:i=>{var o;return(o=r())==null?void 0:o.observe(i,{box:"border-box"})},unobserve:i=>{var o;return(o=r())==null?void 0:o.unobserve(i)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([r,i])=>{typeof i>"u"&&delete n[r]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:g4,rangeExtractor:y4,onChange:()=>{},measureElement:b4,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...n}},this.notify=n=>{var r,i;(i=(r=this.options).onChange)==null||i.call(r,this,n)},this.maybeNotify=Wa(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const r=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==r){if(this.cleanup(),!r){this.maybeNotify();return}this.scrollElement=r,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this.elementsCache.forEach(i=>{this.observer.observe(i)}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,o)=>{this.scrollAdjustments=0,this.scrollDirection=o?this.getScrollOffset()<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=o,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,r)=>{const i=new Map,o=new Map;for(let a=r-1;a>=0;a--){const c=n[a];if(i.has(c.lane))continue;const d=o.get(c.lane);if(d==null||c.end>d.end?o.set(c.lane,c):c.end<d.end&&i.set(c.lane,!0),i.size===this.options.lanes)break}return o.size===this.options.lanes?Array.from(o.values()).sort((a,c)=>a.end===c.end?a.index-c.index:a.end-c.end)[0]:void 0},this.getMeasurementOptions=Wa(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(n,r,i,o,a,c)=>(this.prevLanes!==void 0&&this.prevLanes!==c&&(this.lanesChangedFlag=!0),this.prevLanes=c,this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a,lanes:c}),{key:!1}),this.getMeasurements=Wa(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a,lanes:c},d)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>n)for(const g of this.laneAssignments.keys())g>=n&&this.laneAssignments.delete(g);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(g=>{this.itemSizeCache.set(g.key,g.size)}));const m=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===n&&(this.lanesSettling=!1);const h=this.measurementsCache.slice(0,m),p=new Array(c).fill(void 0);for(let g=0;g<m;g++){const x=h[g];x&&(p[x.lane]=g)}for(let g=m;g<n;g++){const x=o(g),v=this.laneAssignments.get(g);let k,S;if(v!==void 0&&this.options.lanes>1){k=v;const N=p[k],O=N!==void 0?h[N]:void 0;S=O?O.end+this.options.gap:r+i}else{const N=this.options.lanes===1?h[g-1]:this.getFurthestMeasurement(h,g);S=N?N.end+this.options.gap:r+i,k=N?N.lane:g%this.options.lanes,this.options.lanes>1&&this.laneAssignments.set(g,k)}const b=d.get(x),w=typeof b=="number"?b:this.options.estimateSize(g),j=S+w;h[g]={index:g,start:S,size:w,end:j,key:x,lane:k},p[k]=g}return this.measurementsCache=h,h},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Wa(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(n,r,i,o)=>this.range=n.length>0&&r>0?S4({measurements:n,outerSize:r,scrollOffset:i,lanes:o}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=Wa(()=>{let n=null,r=null;const i=this.calculateRange();return i&&(n=i.startIndex,r=i.endIndex),this.maybeNotify.updateDeps([this.isScrolling,n,r]),[this.options.rangeExtractor,this.options.overscan,this.options.count,n,r]},(n,r,i,o,a)=>o===null||a===null?[]:n({startIndex:o,endIndex:a,overscan:r,count:i}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=n=>{const r=this.options.indexAttribute,i=n.getAttribute(r);return i?parseInt(i,10):(console.warn(`Missing attribute name '${r}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=n=>{var r;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const i=this.scrollState.index??((r=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:r.index);if(i!==void 0&&this.range){const o=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),a=Math.max(0,i-o),c=Math.min(this.options.count-1,i+o);return n>=a&&n<=c}return!0},this.measureElement=n=>{if(!n){this.elementsCache.forEach((a,c)=>{a.isConnected||(this.observer.unobserve(a),this.elementsCache.delete(c))});return}const r=this.indexFromElement(n),i=this.options.getItemKey(r),o=this.elementsCache.get(i);o!==n&&(o&&this.observer.unobserve(o),this.observer.observe(n),this.elementsCache.set(i,n)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(r)&&this.resizeItem(r,this.options.measureElement(n,void 0,this))},this.resizeItem=(n,r)=>{var i;const o=this.measurementsCache[n];if(!o)return;const a=this.itemSizeCache.get(o.key)??o.size,c=r-a;c!==0&&(((i=this.scrollState)==null?void 0:i.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(o,c,this):o.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=c,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(o.index),this.itemSizeCache=new Map(this.itemSizeCache.set(o.key,r)),this.notify(!1))},this.getVirtualItems=Wa(()=>[this.getVirtualIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let o=0,a=n.length;o<a;o++){const c=n[o],d=r[c];i.push(d)}return i},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return Zk(r[eE(0,r.length-1,i=>Zk(r[i]).start,n)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const n=this.scrollElement.document.documentElement;return this.options.horizontal?n.scrollWidth-this.scrollElement.innerWidth:n.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(n,r,i=0)=>{if(!this.scrollElement)return 0;const o=this.getSize(),a=this.getScrollOffset();r==="auto"&&(r=n>=a+o?"end":"start"),r==="center"?n+=(i-o)/2:r==="end"&&(n-=o);const c=this.getMaxScrollOffset();return Math.max(Math.min(c,n),0)},this.getOffsetForIndex=(n,r="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const i=this.getSize(),o=this.getScrollOffset(),a=this.measurementsCache[n];if(!a)return;if(r==="auto")if(a.end>=o+i-this.options.scrollPaddingEnd)r="end";else if(a.start<=o+this.options.scrollPaddingStart)r="start";else return[o,r];if(r==="end"&&n===this.options.count-1)return[this.getMaxScrollOffset(),r];const c=r==="end"?a.end+this.options.scrollPaddingEnd:a.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(c,r,a.size),r]},this.scrollToOffset=(n,{align:r="start",behavior:i="auto"}={})=>{const o=this.getOffsetForAlignment(n,r),a=this.now();this.scrollState={index:null,align:r,behavior:i,startedAt:a,lastTargetOffset:o,stableFrames:0},this._scrollToOffset(o,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollToIndex=(n,{align:r="auto",behavior:i="auto"}={})=>{n=Math.max(0,Math.min(n,this.options.count-1));const o=this.getOffsetForIndex(n,r);if(!o)return;const[a,c]=o,d=this.now();this.scrollState={index:n,align:c,behavior:i,startedAt:d,lastTargetOffset:a,stableFrames:0},this._scrollToOffset(a,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.scrollBy=(n,{behavior:r="auto"}={})=>{const i=this.getScrollOffset()+n,o=this.now();this.scrollState={index:null,align:"start",behavior:r,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:r}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var n;const r=this.getMeasurements();let i;if(r.length===0)i=this.options.paddingStart;else if(this.options.lanes===1)i=((n=r[r.length-1])==null?void 0:n.end)??0;else{const o=Array(this.options.lanes).fill(null);let a=r.length-1;for(;a>=0&&o.some(c=>c===null);){const c=r[a];o[c.lane]===null&&(o[c.lane]=c.end),a--}i=Math.max(...o.filter(c=>c!==null))}return Math.max(i-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(n,{adjustments:r,behavior:i})=>{this.options.scrollToFn(n,{behavior:i,adjustments:r},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(t)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const r=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,i=r?r[0]:this.scrollState.lastTargetOffset,o=1,a=i!==this.scrollState.lastTargetOffset;if(!a&&p4(i,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=o){this.scrollState=null;return}}else this.scrollState.stableFrames=0,a&&(this.scrollState.lastTargetOffset=i,this.scrollState.behavior="auto",this._scrollToOffset(i,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const eE=(e,t,n,r)=>{for(;e<=t;){const i=(e+t)/2|0,o=n(i);if(o<r)e=i+1;else if(o>r)t=i-1;else return i}return e>0?e-1:0};function S4({measurements:e,outerSize:t,scrollOffset:n,lanes:r}){const i=e.length-1,o=d=>e[d].start;if(e.length<=r)return{startIndex:0,endIndex:i};let a=eE(0,i,o,n),c=a;if(r===1)for(;c<i&&e[c].end<n+t;)c++;else if(r>1){const d=Array(r).fill(0);for(;c<i&&d.some(h=>h<n+t);){const h=e[c];d[h.lane]=h.end,c++}const m=Array(r).fill(n+t);for(;a>=0&&m.some(h=>h>=n);){const h=e[a];m[h.lane]=h.start,a--}a=Math.max(0,a-a%r),c=Math.min(i,c+(r-1-c%r))}return{startIndex:a,endIndex:c}}const tS=typeof document<"u"?C.useLayoutEffect:C.useEffect;function w4({useFlushSync:e=!0,...t}){const n=C.useReducer(()=>({}),{})[1],r={...t,onChange:(o,a)=>{var c;e&&a?Am.flushSync(n):n(),(c=t.onChange)==null||c.call(t,o,a)}},[i]=C.useState(()=>new k4(r));return i.setOptions(r),tS(()=>i._didMount(),[]),tS(()=>i._willUpdate()),i}function C4(e){return w4({observeElementRect:x4,observeElementOffset:v4,scrollToFn:_4,...e})}function j4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 2C9.5 2 7.5 3.5 7 5.5C5 5.5 3 7.5 3 10C3 12 4.5 13.5 6 14V20C6 21.1 6.9 22 8 22H16C17.1 22 18 21.1 18 20V14C19.5 13.5 21 12 21 10C21 7.5 19 5.5 17 5.5C16.5 3.5 14.5 2 12 2Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M12 2V8M8 6H16M12 14V18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Mm(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94L6.73 20.15a2.12 2.12 0 0 1-3-3l6.72-6.72a6 6 0 0 1 7.94-7.94L14.7 6.3z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function tE(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"4",y:"4",width:"16",height:"16",rx:"3",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"8",y:"8",width:"8",height:"8",rx:"1.5",fill:"currentColor"})]})}function E4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M5 12L3 3L21 12L3 21L5 12ZM5 12H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Dm(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Pl(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M20 6L9 17L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function N4(){return u.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M13 8H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M17 12H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function I4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66L9.41 17.41a2 2 0 0 1-2.83-2.83l8.49-8.49",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function ss({down:e}){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{transition:"transform 200ms",transform:e?"rotate(90deg)":"none"},children:u.jsx("path",{d:"M9 18L15 12L9 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function T4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M12 5V19M5 12H19",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}function Ov(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"11",cy:"11",r:"8",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M21 21L16.65 16.65",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function R4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M3 6H5H21",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6L18.13 20.11A2 2 0 0 1 16.14 22H7.86a2 2 0 0 1-2-1.89L5 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function A4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"})]})}function nE(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M22 12H18L15 21L9 3L6 12H2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function yu(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function gl(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.582a.5.5 0 0 1 0 .962L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function rE(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M5 12h14",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"m12 5 7 7-7 7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function M4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9 11L12 14L22 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M21 12V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function nS(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M13 2L3 14H12L11 22L21 10H12L13 2Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Om(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M4 18H10V14H4V18Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M8 14H14V10H8V14Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M12 10H18V6H12V10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M18 8L21 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function D4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M9 12L11 14L15 10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function O4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M15 9L9 15M9 9L15 15",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function zc(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M12 6V12L16 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Gf(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M7 17L2 12L7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M17 7L22 12L17 17",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M2 12H22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function yl(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 2V22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("circle",{cx:"12",cy:"6",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("circle",{cx:"12",cy:"12",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("circle",{cx:"12",cy:"18",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M14 6H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M14 12H18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M14 18H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Lm(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M18 6L6 18M6 6L18 18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function rS({size:e=12}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function L4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"12",cy:"8",r:"5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 21a8 8 0 0 0-16 0",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function z4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M10 6h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 10h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 14h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 18h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function P4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.582a.5.5 0 0 1 0 .962L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}const tl=new Set(["done","failed","cancelled"]),B4=new Set(["company","org","custom"]),$4=new Set(["idle","done","failed","cancelled"]);function zm(e){return tl.has(e.status)?"idle":e.agentStatus==="reflecting"||e.agentStatus==="tool_active"?e.agentStatus:e.runtimeControlState&&e.runtimeControlState!=="running"&&e.runtimeControlState!=="suspending"&&e.runtimeControlState!=="resuming"?"idle":e.status==="running"?"reflecting":"idle"}function os(e){return zm(e)!=="idle"}function H4(e){if(!e)return!1;const t=String(e.execMode??"").trim().toLowerCase(),n=t==="task";return B4.has(t)||!!e.isCompanyRuntime||!!e.parentSessionId||!!e.orgId||!!e.workItemProjectionId||!!e.roleWorkItems||!!e.executorRoleWorkItems||!!e.companyProfile&&!n}function F4(e,t){if(!H4(e))return{};const n=String(t??"").trim().toLowerCase();if(n==="running")return{runtimeControlState:"running",canStop:!0,canResume:!1};if($4.has(n)){const r=e?.runtimeControlState;return r==="suspending"||r==="suspended"?{}:{runtimeControlState:"idle",canStop:!1,canResume:!1}}return{}}function Sg(e){if(!(typeof e!="number"||!Number.isFinite(e)))return e}function iS(e){return Math.max(0,Math.min(Math.round(e),100))}function iE(e){const t=Sg(e?.contextTokens),n=Sg(e?.contextWindow),r=Sg(e?.contextRemainingPct),i=typeof t=="number"?Math.max(0,Math.round(t)):void 0,o=typeof n=="number"&&n>0?Math.max(1,Math.round(n)):void 0,a=typeof r=="number"?iS(r):void 0;if(typeof i=="number"&&typeof o=="number"){const c=Math.min(i,o),d=iS(c/o*100);return{usedPct:d,remainingPct:100-d,usedTokens:c,windowTokens:o}}if(typeof a=="number"&&typeof o=="number"){const c=100-a;return{usedPct:c,remainingPct:a,usedTokens:Math.round(c/100*o),windowTokens:o}}return typeof o=="number"?{usedPct:0,remainingPct:100,usedTokens:0,windowTokens:o}:typeof a=="number"?{remainingPct:a}:typeof i=="number"?{usedTokens:i}:{}}function Lv(e){const t=e.metadata??{},n=String(t.checkpoint_id??"").trim();if(n)return`checkpoint:${n}`;const r=String(t.ui_message_id??"").trim(),i=String(t.transcript_kind??t.kind??"").trim(),o=String(t.role??"").trim().toLowerCase(),a=e.sender==="user"||o==="user"||i==="runtime_v2_user_turn"||i==="top_level_user_turn";if(a&&r)return`ui:${r}`;const c=String(t.ui_timeline_id??"").trim();if(c)return c;const d=String(t.canonical_turn_id??t.turn_id??"").trim();return!a&&d&&i==="runtime_v2_assistant"?`turn:assistant:${d}`:`message:${e.id}`}const V4=/(\d[\d,]*)\s*\/\s*(\d[\d,]*)\s+tokens/i,U4=/(\d{1,3})%\s*used/i,q4=/(\d{1,3})%\s*remaining/i;function Wf(e,t){return t==="full"?!0:String(e.metadata?.detail_visibility??"summary").trim()!=="full"}function G4(e){return e.replace(/\s+/g," ").trim()}function W4(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const r=t.indexOf(": ");if(r<8||r>160)return t;const i=t.slice(0,r).replace(/\*/g,"").trim(),o=t.slice(r+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(i)||/^(https?|file)$/i.test(i)?t:o}function xu(e){const t=e.metadata??{};switch(String(t.transcript_kind??t.kind??"").trim()){case"child_task_result":return 80;case"child_task_result_retry":return 79;case"company_role_result":return 75;case"company_role_result_retry":return 74;case"child_result":return 70;case"runtime_v2_assistant":return 60;case"runtime_v2_company_assistant":return 20;case"top_level_reply":return 40}return String(t.kind??"").trim()==="worker_notification"?20:0}function sE(e){if(xu(e)<=0)return"";const t=G4(W4(e.content)).slice(0,2e3);return t?`result:${t}`:""}function rf(e){if(!e)return;const t=e.replace(/,/g,"").trim();if(!t)return;const n=Number(t);return Number.isFinite(n)?Math.max(0,Math.round(n)):void 0}function sS(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,Math.min(Math.round(e),100))}function xl(e){if(!e)return;const t=String(e.execMode??"").trim();if(!(t==="company"||t==="org"||t==="custom"||!!e.isCompanyRuntime||!!e.roleWorkItems||!!e.executorRoleWorkItems))return;const r=Object.values(e.executorRoleWorkItems??e.roleWorkItems??{});if(r.length===0)return;const i=r.map(o=>o.aggregatedStatus);if(i.some(o=>o==="active"))return"running";if(i.some(o=>o==="waiting")||i.some(o=>o==="pending"))return"pending";if(i.every(o=>o==="failed"))return"failed";if(i.every(o=>o==="done")||i.some(o=>o==="done"))return"done"}function Y4(e){const t={};for(const n of e??[]){const r=`${n.summary??""} ${n.detail??""}`.trim();if(!r)continue;const i=V4.exec(r);if(i){const c=rf(i[1]),d=rf(i[2]);typeof c=="number"&&(t.contextTokens=c),typeof d=="number"&&d>0&&(t.contextWindow=d)}const o=q4.exec(r);if(o){t.contextRemainingPct=sS(rf(o[1]));continue}const a=U4.exec(r);if(a){const c=sS(rf(a[1]));typeof c=="number"&&(t.contextRemainingPct=100-c)}}return t}function Yf(e){const t=Y4(e.progressLog),n=e.contextTokens??t.contextTokens,r=e.contextWindow??t.contextWindow,i=e.contextRemainingPct??t.contextRemainingPct;return n===e.contextTokens&&r===e.contextWindow&&i===e.contextRemainingPct?e:{...e,contextTokens:n,contextWindow:r,contextRemainingPct:i}}function oE(e){const t=new Set,n=[];for(const r of e)t.has(r.taskId)||(t.add(r.taskId),n.push(r));return n}function X4(e){return!!(String(e?.workItemRoleId??"").trim()||String(e?.workItemRoleName??"").trim())}function Df(e,t){if(!e||e.mode==="child")return[];const n=new Set;e.sessionId&&n.add(e.sessionId),n.add(e.taskId);const r=String(e.originTaskId??e.taskId??"").trim(),i=new Map;for(const c of e.workItemLog??[]){const d=c.executionTurnId||c.runtimeTaskId;d&&!i.has(d)&&i.set(d,i.size)}const o=new Set;return t.filter(c=>{if(c.taskId===e.taskId||o.has(c.taskId))return!1;const d=!!c.parentSessionId&&n.has(c.parentSessionId),m=i.has(c.taskId),h=!!r&&String(c.originTaskId??"").trim()===r;return!d&&!m&&!h?!1:(o.add(c.taskId),!0)}).sort((c,d)=>{const m=i.get(c.taskId),h=i.get(d.taskId);return m!=null&&h!=null&&m!==h?m-h:m!=null&&h==null?-1:m==null&&h!=null?1:d.updatedAt-c.updatedAt})}function oS(e,t){const n=Df(e,t);return!e||e.mode==="child"||!X4(e)?n:oE([e,...n])}function Xf(e,t){if(!e||e.mode==="child")return[];const n=String(e.sessionId??"").trim();if(!n)return[];const r=new Set;return t.filter(i=>i.taskId===e.taskId||r.has(i.taskId)||String(i.sessionId??"").trim()!==n?!1:(r.add(i.taskId),!0)).sort((i,o)=>o.updatedAt-i.updatedAt)}function K4(e){const t=String(e?.execMode??"").trim();return t==="company"||t==="org"||t==="custom"}function aS(e){const t=os(e)?1e9:0,n=String(e.draftAssistantText??"").trim()?1e10:0,r=Math.max(0,e.messageCount??0)*1e4,i=(e.progressLog?.length??0)*100;return n+t+r+i+e.updatedAt}function lS(e){const t=iE(e),n=os(e)?1e11:0,r=String(e.draftAssistantText??"").trim()?1e10:0,i=typeof t.usedPct=="number"||typeof t.usedTokens=="number"||typeof t.windowTokens=="number"?1e10:0,o=typeof e.inputTokens=="number"||typeof e.outputTokens=="number"||typeof e.totalTokens=="number"?1e9:0,a=Math.max(0,e.messageCount??0)*1e4,c=(e.progressLog?.length??0)*100;return n+r+i+o+a+c}function Kf(e,t){if(!e)return{timelineSessions:[],displaySession:null,runtimeSession:null,projectedFromChild:!1};const n=Yf(e);if(e.mode==="child"||t.length===0)return{timelineSessions:[n],displaySession:n,runtimeSession:n,projectedFromChild:!1};const r=t.map(Yf),i=r.filter(p=>p.status!=="cancelled"),o=i.length>0?i:r,a=oE([n,...o]),c=K4(e),d=[...a].sort((p,g)=>aS(g)-aS(p))[0]??n,m=c?n:d,h=[...a].sort((p,g)=>lS(g)-lS(p))[0]??m;return{timelineSessions:a,displaySession:m,runtimeSession:h,projectedFromChild:!c&&m.taskId!==e.taskId}}function cS(e,t,n){if(!e)return null;const r=Yf(e),i=t??r,o=xl(i)??xl(r),a=Zf(n.length>0?n:[r]);return{...r,status:o??(i.status||r.status),assigneeIds:i.assigneeIds.length>0?i.assigneeIds:r.assigneeIds,agentStatus:i.agentStatus??r.agentStatus,currentTool:i.currentTool??r.currentTool,displayTool:i.displayTool??i.currentTool??r.displayTool??r.currentTool,toolElapsedMs:i.toolElapsedMs??r.toolElapsedMs,lastToolSummary:i.lastToolSummary??r.lastToolSummary,contextTokens:i.contextTokens??r.contextTokens,contextWindow:i.contextWindow??r.contextWindow,contextRemainingPct:i.contextRemainingPct??r.contextRemainingPct,inputTokens:i.inputTokens??r.inputTokens,outputTokens:i.outputTokens??r.outputTokens,totalTokens:i.totalTokens??r.totalTokens,turnCostUsd:i.turnCostUsd??r.turnCostUsd,sessionCostUsd:i.sessionCostUsd??r.sessionCostUsd,pendingPermissionCount:i.pendingPermissionCount??r.pendingPermissionCount,drainMode:i.drainMode??r.drainMode,workItemProjectionId:i.workItemProjectionId??r.workItemProjectionId,workItemTurnType:i.workItemTurnType??r.workItemTurnType,companyProfile:r.companyProfile??i.companyProfile,workItemRoleId:r.workItemRoleId??i.workItemRoleId,workItemRoleName:r.workItemRoleName??i.workItemRoleName,workItemGate:r.workItemGate??i.workItemGate,employeeAssignment:r.employeeAssignment??i.employeeAssignment,selectedExecutionAgent:i.selectedExecutionAgent??r.selectedExecutionAgent,draftAssistantText:i.draftAssistantText??r.draftAssistantText,draftUpdatedAt:i.draftUpdatedAt??r.draftUpdatedAt,draftIteration:i.draftIteration??r.draftIteration,draftTurnId:i.draftTurnId??r.draftTurnId,runtimeControlState:i.runtimeControlState??r.runtimeControlState,canStop:i.canStop??r.canStop,canResume:i.canResume??r.canResume,resumeParentTaskId:i.resumeParentTaskId??r.resumeParentTaskId,resumeParentSessionId:i.resumeParentSessionId??r.resumeParentSessionId,pendingRuntimeCheckpointId:i.pendingRuntimeCheckpointId??r.pendingRuntimeCheckpointId,stopIntentId:i.stopIntentId??r.stopIntentId,updatedAt:Math.max(r.updatedAt,i.updatedAt),messageCount:Math.max(r.messageCount??0,i.messageCount??0,a),isCompanyRuntime:!!(r.isCompanyRuntime||i.isCompanyRuntime),workItemLog:(r.workItemLog?.length??0)>0?r.workItemLog:i.workItemLog,roleWorkItems:r.roleWorkItems??i.roleWorkItems,executorRoleWorkItems:r.executorRoleWorkItems??i.executorRoleWorkItems,activeSubagents:r.activeSubagents??i.activeSubagents,permissionRequests:r.permissionRequests??i.permissionRequests}}function Z4(e,t,n){if(!e)return null;const r=Yf(e),i=t??r,o=xl(i)??xl(r),a=Zf(n.length>0?n:[r]);return{...r,status:o??(i.status||r.status),agentStatus:i.agentStatus??r.agentStatus,currentTool:i.currentTool??r.currentTool,displayTool:i.displayTool??i.currentTool??r.displayTool??r.currentTool,toolElapsedMs:i.toolElapsedMs??r.toolElapsedMs,lastToolSummary:i.lastToolSummary??r.lastToolSummary,contextTokens:i.contextTokens??r.contextTokens,contextWindow:i.contextWindow??r.contextWindow,contextRemainingPct:i.contextRemainingPct??r.contextRemainingPct,inputTokens:i.inputTokens??r.inputTokens,outputTokens:i.outputTokens??r.outputTokens,totalTokens:i.totalTokens??r.totalTokens,turnCostUsd:i.turnCostUsd??r.turnCostUsd,sessionCostUsd:i.sessionCostUsd??r.sessionCostUsd,pendingPermissionCount:i.pendingPermissionCount??r.pendingPermissionCount,drainMode:i.drainMode??r.drainMode,selectedExecutionAgent:i.selectedExecutionAgent??r.selectedExecutionAgent,runtimeControlState:i.runtimeControlState??r.runtimeControlState,canStop:i.canStop??r.canStop,canResume:i.canResume??r.canResume,resumeParentTaskId:i.resumeParentTaskId??r.resumeParentTaskId,resumeParentSessionId:i.resumeParentSessionId??r.resumeParentSessionId,pendingRuntimeCheckpointId:i.pendingRuntimeCheckpointId??r.pendingRuntimeCheckpointId,stopIntentId:i.stopIntentId??r.stopIntentId,updatedAt:Math.max(r.updatedAt,i.updatedAt),messageCount:Math.max(r.messageCount??0,i.messageCount??0,a)}}function Bx(e){const t=new Set,n=new Map,r=new Map,i=[];for(const o of e)for(const a of o){const c=a.metadata??{},d=String(c.checkpoint_id??"").trim();if(d){const x=r.get(d);if(x!==void 0){const v=i[x],k=a.timestamp>=v.timestamp?a:v,S=a.timestamp<v.timestamp?a:v;i[x]={...v,...k,id:v.id,channelId:v.channelId,timestamp:S.timestamp,metadata:{...v.metadata??{},...k.metadata??{}}};continue}}const m=typeof c.ui_message_id=="string"?c.ui_message_id.trim():"",h=sE(a);if(h){const x=n.get(h);if(x!==void 0){const v=i[x],k=xu(a)>xu(v),S=k?a:v,b=k?v:a;i[x]={...b,...S,timestamp:Math.min(v.timestamp,a.timestamp),metadata:{...b.metadata??{},...S.metadata??{},ui_timeline_id:Lv(v)}};continue}n.set(h,i.length)}const p=d?`checkpoint:${d}`:"",g=h||p||m||`${a.sender}:${a.replyToId??""}:${a.timestamp}:${a.content.trim()}`;t.has(g)||(t.add(g),d&&r.set(d,i.length),i.push(a))}return i.sort((o,a)=>o.timestamp===a.timestamp?o.id.localeCompare(a.id):o.timestamp-a.timestamp)}function uS(e,t){const n=a=>{const c=a.metadata??{},d=String(c.transcript_kind??c.kind??"").trim();return d!=="runtime_v2_assistant"&&d!=="runtime_v2_company_assistant"?"":String(c.canonical_turn_id??c.turn_id??"").trim()},r=new Set(e.filter(a=>a.channelId===t&&Wf(a,"summary")).map(n).filter(Boolean)),i=new Map,o=[];for(const a of e){if(a.channelId===t){Wf(a,"summary")&&o.push(a);continue}const c=a.metadata??{},d=String(c.transcript_kind??c.kind??"").trim(),m=String(c.checkpoint_id??"").trim(),h=String(c.checkpoint_type??"").trim(),p=String(c.response_to_checkpoint_id??"").trim(),g=String(c.response_to_escalation_id??"").trim();if(m&&h||p||g){o.push(a);continue}if(["company_role_result","company_role_result_retry","child_task_result","child_task_result_retry","child_result","top_level_reply"].includes(d)){o.push(a);continue}if(!(String(c.detail_visibility??"").trim()==="summary"&&(d==="runtime_v2_assistant"||d==="runtime_v2_company_assistant")))continue;const v=n(a);if(!v){o.push(a);continue}if(r.has(v))continue;const k=i.get(v);if(!k){i.set(v,a);continue}const S=xu(k),b=xu(a);(b>S||b===S&&(a.timestamp>k.timestamp||a.timestamp===k.timestamp&&a.id.localeCompare(k.id)>0))&&i.set(v,a)}return o.push(...i.values()),Bx([o])}function dS(e){const t=new Set,n=[];for(const r of e)for(const i of r.progressLog??[]){const o=`${i.timestamp}:${i.type}:${i.summary}:${i.detail??""}`;t.has(o)||(t.add(o),n.push(i))}return n.sort((r,i)=>r.timestamp-i.timestamp)}function Zf(e){return e.reduce((t,n)=>t+Math.max(0,n.messageCount??0),0)}const Q4={idle:"status-idle",done:"status-done",pending:"status-pending",failed:"status-failed",cancelled:"status-cancelled",blocked:"status-blocked"};function J4(e){const t=xl(e)??e.status,n=zm({...e,status:t});return n==="tool_active"?"status-tool-active":n==="reflecting"?"status-reflecting":t==="running"?"status-running-idle":Q4[t]??"status-pending"}function e5(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m`:t<864e5?`${Math.floor(t/36e5)}h`:`${Math.floor(t/864e5)}d`}function t5(e){const t=new Date,n=new Date(e),r=new Date(t.getFullYear(),t.getMonth(),t.getDate()),i=new Date(r.getTime()-864e5);return n>=r?"Today":n>=i?"Yesterday":"Earlier"}function n5(e){const t=new Map,n=[];for(const r of e)if(r.mode==="child"&&r.parentSessionId){const i=t.get(r.parentSessionId)??[];i.push(r),t.set(r.parentSessionId,i)}else n.push(r);return n.map(r=>({session:r,children:Array.from(new Map([...r.sessionId?t.get(r.sessionId)??[]:[],...t.get(r.taskId)??[]].map(i=>[i.taskId,i])).values())}))}function sf({session:e,isActive:t,isChild:n,isLast:r,unreadCount:i,onSelect:o,onDelete:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(!1),p=e.assigneeIds.length>0?e.assigneeIds[0].replace(/^agent-/,""):null,g=xl(e)??e.status;return C.useEffect(()=>{if(!m)return;const x=setTimeout(()=>h(!1),3e3);return()=>clearTimeout(x)},[m]),u.jsxs("button",{className:`session-item${t?" active":""}${n?" session-item-child":""}`,onClick:o,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[n&&u.jsx("span",{className:`session-tree-line${r?" last":""}`}),u.jsx("span",{className:`session-dot ${J4(e)}`}),u.jsxs("div",{className:"session-item-content",children:[u.jsxs("span",{className:"session-item-title",children:[n&&p&&u.jsx("span",{className:"session-agent-tag",children:p}),!n&&e.isCompanyRuntime&&u.jsx("span",{className:"session-runtime-badge",title:"Company runtime",children:u.jsx(Om,{})}),e.title]}),u.jsxs("span",{className:"session-item-meta",children:[g," · ",e5(e.updatedAt)]})]}),!!i&&i>0&&u.jsx("span",{className:"session-unread-badge",children:i>99?"99+":i}),c&&!n&&!m&&u.jsx("button",{className:"session-delete-btn",onClick:x=>{x.stopPropagation(),h(!0)},title:"Delete",children:u.jsx(R4,{})}),m&&u.jsxs("span",{className:"session-confirm-delete",onClick:x=>x.stopPropagation(),children:[u.jsx("button",{className:"session-confirm-yes",onClick:()=>{h(!1),a()},children:"Delete"}),u.jsx("button",{className:"session-confirm-no",onClick:()=>h(!1),children:"Cancel"})]})]})}function r5({sessions:e,activeSessionId:t,activeChannel:n,secretaryChannelId:r,unreadCounts:i,onSelect:o,onCreateSession:a,onDeleteSession:c,onSelectSecretary:d}){const[m,h]=C.useState(""),[p,g]=C.useState(new Set),x=e.some(I=>I.isCompanyRuntime||I.mode==="child"||I.execMode==="company"||I.execMode==="org"||I.execMode==="custom"),v=C.useCallback(I=>{g(D=>{const M=new Set(D);return M.has(I)?M.delete(I):M.add(I),M})},[]),k=C.useMemo(()=>{if(!m.trim())return e;const I=m.toLowerCase();return e.filter(D=>D.title.toLowerCase().includes(I))},[e,m]),S=C.useMemo(()=>n5(k),[k]),b=C.useMemo(()=>{const I={Today:[],Yesterday:[],Earlier:[]};for(const D of S){const M=t5(D.session.createdAt);I[M]?.push(D)}return I},[S]),w=C.useMemo(()=>{const I=[];for(const D of["Today","Yesterday","Earlier"]){const M=b[D];if(!(!M||M.length===0)){I.push({kind:"group",group:D});for(const A of M){I.push({kind:"primary",node:A});const $=A.children.length>0,W=p.has(A.session.taskId);$&&W?I.push({kind:"child-count",node:A}):$&&A.children.forEach((B,V)=>{I.push({kind:"child",parentTaskId:A.session.taskId,child:B,childIndex:V,childCount:A.children.length})})}}}return I},[p,b]),j=w.length>120,N=C.useRef(null),O=C4({count:w.length,getScrollElement:()=>N.current,estimateSize:I=>{const D=w[I];return D?.kind==="group"?26:D?.kind==="child-count"?30:54},overscan:8}),R=C.useCallback(I=>{const D=I.children.length>0,M=p.has(I.session.taskId);return u.jsx("div",{className:"session-tree-node",children:u.jsxs("div",{className:"session-tree-primary",children:[D&&u.jsx("button",{className:`session-expand-btn${M?" collapsed":""}`,onClick:A=>{A.stopPropagation(),v(I.session.taskId)},"aria-label":M?"Expand":"Collapse"}),u.jsx(sf,{session:I.session,isActive:I.session.taskId===t,unreadCount:i?.[I.session.channelId],onSelect:()=>o(I.session.taskId),onDelete:()=>c(I.session.taskId)})]})})},[t,p,c,o,v,i]),L=C.useCallback(I=>I.kind==="group"?u.jsx("div",{className:"session-group-label",children:x?`${I.group} Runtime Sessions`:I.group}):I.kind==="primary"?R(I.node):I.kind==="child-count"?u.jsxs("button",{className:"session-child-count",onClick:()=>v(I.node.session.taskId),children:[I.node.children.length," sub-task",I.node.children.length>1?"s":""]}):u.jsx("div",{className:"session-children",children:u.jsx(sf,{session:I.child,isActive:I.child.taskId===t,isChild:!0,isLast:I.childIndex===I.childCount-1,unreadCount:i?.[I.child.channelId],onSelect:()=>o(I.child.taskId),onDelete:()=>c(I.child.taskId)})}),[t,x,c,o,R,v,i]);return u.jsxs("div",{className:"session-sidebar",children:[u.jsxs("button",{className:"session-new-btn",onClick:a,children:[u.jsx(T4,{}),u.jsx("span",{children:"New Chat"})]}),d&&u.jsxs("button",{className:`session-nav-btn${n===r?" active":""}`,onClick:d,children:[u.jsx(yu,{}),u.jsx("span",{children:"Secretary"}),!!(r&&i?.[r])&&i[r]>0&&u.jsx("span",{className:"session-unread-badge",children:i[r]>99?"99+":i[r]})]}),u.jsxs("div",{className:"session-search-wrap",children:[u.jsx(Ov,{}),u.jsx("input",{className:"session-search",placeholder:"Search...",value:m,onChange:I=>h(I.target.value)})]}),u.jsxs("div",{ref:N,className:`session-list${j?" session-list-virtualized":""}`,children:[j?u.jsx("div",{style:{height:O.getTotalSize(),width:"100%",position:"relative"},children:O.getVirtualItems().map(I=>u.jsx("div",{"data-index":I.index,ref:O.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${I.start}px)`},children:L(w[I.index])},I.key))}):["Today","Yesterday","Earlier"].map(I=>{const D=b[I];return!D||D.length===0?null:u.jsxs("div",{className:"session-group",children:[u.jsx("div",{className:"session-group-label",children:x?`${I} Runtime Sessions`:I}),D.map(M=>{const A=M.children.length>0,$=p.has(M.session.taskId);return u.jsxs("div",{className:"session-tree-node",children:[u.jsxs("div",{className:"session-tree-primary",children:[A&&u.jsx("button",{className:`session-expand-btn${$?" collapsed":""}`,onClick:W=>{W.stopPropagation(),v(M.session.taskId)},"aria-label":$?"Expand":"Collapse"}),u.jsx(sf,{session:M.session,isActive:M.session.taskId===t,unreadCount:i?.[M.session.channelId],onSelect:()=>o(M.session.taskId),onDelete:()=>c(M.session.taskId)})]}),A&&!$&&u.jsx("div",{className:"session-children",children:M.children.map((W,B)=>u.jsx(sf,{session:W,isActive:W.taskId===t,isChild:!0,isLast:B===M.children.length-1,unreadCount:i?.[W.channelId],onSelect:()=>o(W.taskId),onDelete:()=>c(W.taskId)},W.taskId))}),A&&$&&u.jsxs("button",{className:"session-child-count",onClick:()=>v(M.session.taskId),children:[M.children.length," sub-task",M.children.length>1?"s":""]})]},M.session.taskId)})]},I)}),k.length===0&&u.jsx("div",{className:"session-empty",children:"No sessions yet"})]}),u.jsxs("button",{className:`session-nav-btn session-activity-btn${t===null&&n!==r?" active":""}`,onClick:()=>o(null),children:[u.jsx(nE,{}),u.jsx("span",{children:"Activity"})]})]})}const i5=new Set(["company_work_item_gate","company_delivery_feedback","company_staffing_selection","company_recruitment_confirmation","company_reorg_pending","human_escalation","task_user_input"]),s5=new Set(["responded","resolved","timeout","timed_out","expired","stale","superseded","ignored","cancelled","canceled","invalid"]);function o5(e){return i5.has(String(e??"").trim())}function vl(e){return!(!o5(e?.checkpoint_type)||e?.self_evolution_completed||String(e?.kind??"").trim()==="company_self_evolution_result")}function a5(e){const t=String(e?.checkpoint_status??"").trim().toLowerCase();return s5.has(t)?!0:!!String(e?.checkpoint_response_message_id??"").trim()}function aE(e){const t=String(e?.checkpoint_id??"").trim();if(!t)return;const n=String(e?.checkpoint_type??"").trim(),r=String(e?.escalation_id??"").trim();return{response_to_checkpoint_id:t,response_to_checkpoint_type:n||void 0,response_to_escalation_id:r||void 0}}function lE(e){const t=String(e?.response_to_checkpoint_type??"").trim();if(!(t==="company_delivery_feedback"||t==="human_escalation"))return e}function zv(e){const t=new Set,n=new Set,r=new Set;let i;const o=new Map,a=new Map,c=new Set;for(let d=0;d<e.length;d++){const m=e[d];if(m.sender!=="user")continue;const h=m.metadata,p=String(h?.response_to_checkpoint_id??"").trim();p&&o.set(p,d);const g=String(h?.response_to_escalation_id??"").trim();g&&a.set(g,d)}for(let d=0;d<e.length;d++){const m=e[d],h=m.metadata;if(!vl(h))continue;const p=String(h?.checkpoint_id??"").trim(),g=String(h?.checkpoint_type??"").trim(),x=String(h?.escalation_id??"").trim();if(p&&c.has(p)){r.add(m.id);continue}p&&c.add(p);const v=!!p&&(o.get(p)??-1)>d,k=g==="human_escalation"&&!!x&&(a.get(x)??-1)>d;if(a5(h)||v||k){n.add(m.id);continue}t.add(m.id),i=aE(h)??i}return{pendingMessageIds:t,respondedMessageIds:n,duplicateMessageIds:r,latestPendingReplyMetadata:i}}function Hr(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var l5=typeof Symbol=="function"&&Symbol.observable||"@@observable",fS=l5,mS=()=>Math.random().toString(36).substring(7).split("").join("."),c5={INIT:`@@redux/INIT${mS()}`,REPLACE:`@@redux/REPLACE${mS()}`},pS=c5;function u5(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function cE(e,t,n){if(typeof e!="function")throw new Error(Hr(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Hr(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Hr(1));return n(cE)(e,t)}let r=e,i=t,o=new Map,a=o,c=0,d=!1;function m(){a===o&&(a=new Map,o.forEach((S,b)=>{a.set(b,S)}))}function h(){if(d)throw new Error(Hr(3));return i}function p(S){if(typeof S!="function")throw new Error(Hr(4));if(d)throw new Error(Hr(5));let b=!0;m();const w=c++;return a.set(w,S),function(){if(b){if(d)throw new Error(Hr(6));b=!1,m(),a.delete(w),o=null}}}function g(S){if(!u5(S))throw new Error(Hr(7));if(typeof S.type>"u")throw new Error(Hr(8));if(typeof S.type!="string")throw new Error(Hr(17));if(d)throw new Error(Hr(9));try{d=!0,i=r(i,S)}finally{d=!1}return(o=a).forEach(w=>{w()}),S}function x(S){if(typeof S!="function")throw new Error(Hr(10));r=S,g({type:pS.REPLACE})}function v(){const S=p;return{subscribe(b){if(typeof b!="object"||b===null)throw new Error(Hr(11));function w(){const N=b;N.next&&N.next(h())}return w(),{unsubscribe:S(w)}},[fS](){return this}}}return g({type:pS.INIT}),{dispatch:g,subscribe:p,getState:h,replaceReducer:x,[fS]:v}}function hS(e,t){return function(...n){return t(e.apply(this,n))}}function gS(e,t){if(typeof e=="function")return hS(e,t);if(typeof e!="object"||e===null)throw new Error(Hr(16));const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=hS(i,t))}return n}function uE(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function d5(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Hr(15))};const a={getState:i.getState,dispatch:(d,...m)=>o(d,...m)},c=e.map(d=>d(a));return o=uE(...c)(i.dispatch),{...i,dispatch:o}}}var wg={exports:{}},Cg={};var yS;function f5(){if(yS)return Cg;yS=1;var e=zl();function t(d,m){return d===m&&(d!==0||1/d===1/m)||d!==d&&m!==m}var n=typeof Object.is=="function"?Object.is:t,r=e.useSyncExternalStore,i=e.useRef,o=e.useEffect,a=e.useMemo,c=e.useDebugValue;return Cg.useSyncExternalStoreWithSelector=function(d,m,h,p,g){var x=i(null);if(x.current===null){var v={hasValue:!1,value:null};x.current=v}else v=x.current;x=a(function(){function S(O){if(!b){if(b=!0,w=O,O=p(O),g!==void 0&&v.hasValue){var R=v.value;if(g(R,O))return j=R}return j=O}if(R=j,n(w,O))return R;var L=p(O);return g!==void 0&&g(R,L)?(w=O,R):(w=O,j=L)}var b=!1,w,j,N=h===void 0?null:h;return[function(){return S(m())},N===null?void 0:function(){return S(N())}]},[m,h,p,g]);var k=r(d,x[0],x[1]);return o(function(){v.hasValue=!0,v.value=k},[k]),c(k),k},Cg}var xS;function m5(){return xS||(xS=1,wg.exports=f5()),wg.exports}m5();var p5=C.version.startsWith("19"),h5=Symbol.for(p5?"react.transitional.element":"react.element"),g5=Symbol.for("react.portal"),y5=Symbol.for("react.fragment"),x5=Symbol.for("react.strict_mode"),v5=Symbol.for("react.profiler"),b5=Symbol.for("react.consumer"),_5=Symbol.for("react.context"),dE=Symbol.for("react.forward_ref"),k5=Symbol.for("react.suspense"),S5=Symbol.for("react.suspense_list"),Pv=Symbol.for("react.memo"),w5=Symbol.for("react.lazy"),C5=dE,j5=Pv;function E5(e){if(typeof e=="object"&&e!==null){const{$$typeof:t}=e;switch(t){case h5:switch(e=e.type,e){case y5:case v5:case x5:case k5:case S5:return e;default:switch(e=e&&e.$$typeof,e){case _5:case dE:case w5:case Pv:return e;case b5:return e;default:return t}}case g5:return t}}}function N5(e){return E5(e)===Pv}function I5(e,t,n,r,{areStatesEqual:i,areOwnPropsEqual:o,areStatePropsEqual:a}){let c=!1,d,m,h,p,g;function x(w,j){return d=w,m=j,h=e(d,m),p=t(r,m),g=n(h,p,m),c=!0,g}function v(){return h=e(d,m),t.dependsOnOwnProps&&(p=t(r,m)),g=n(h,p,m),g}function k(){return e.dependsOnOwnProps&&(h=e(d,m)),t.dependsOnOwnProps&&(p=t(r,m)),g=n(h,p,m),g}function S(){const w=e(d,m),j=!a(w,h);return h=w,j&&(g=n(h,p,m)),g}function b(w,j){const N=!o(j,m),O=!i(w,d,j,m);return d=w,m=j,N&&O?v():N?k():O?S():g}return function(j,N){return c?b(j,N):x(j,N)}}function T5(e,{initMapStateToProps:t,initMapDispatchToProps:n,initMergeProps:r,...i}){const o=t(e,i),a=n(e,i),c=r(e,i);return I5(o,a,c,e,i)}function R5(e,t){const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=(...o)=>t(i(...o)))}return n}function $x(e){return function(n){const r=e(n);function i(){return r}return i.dependsOnOwnProps=!1,i}}function vS(e){return e.dependsOnOwnProps?!!e.dependsOnOwnProps:e.length!==1}function fE(e,t){return function(r,{displayName:i}){const o=function(c,d){return o.dependsOnOwnProps?o.mapToProps(c,d):o.mapToProps(c,void 0)};return o.dependsOnOwnProps=!0,o.mapToProps=function(c,d){o.mapToProps=e,o.dependsOnOwnProps=vS(e);let m=o(c,d);return typeof m=="function"&&(o.mapToProps=m,o.dependsOnOwnProps=vS(m),m=o(c,d)),m},o}}function Bv(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function A5(e){return e&&typeof e=="object"?$x(t=>R5(e,t)):e?typeof e=="function"?fE(e):Bv(e,"mapDispatchToProps"):$x(t=>({dispatch:t}))}function M5(e){return e?typeof e=="function"?fE(e):Bv(e,"mapStateToProps"):$x(()=>({}))}function D5(e,t,n){return{...n,...e,...t}}function O5(e){return function(n,{displayName:r,areMergedPropsEqual:i}){let o=!1,a;return function(d,m,h){const p=e(d,m,h);return o?i(p,a)||(a=p):(o=!0,a=p),a}}}function L5(e){return e?typeof e=="function"?O5(e):Bv(e,"mergeProps"):()=>D5}function z5(e){e()}function P5(){let e=null,t=null;return{clear(){e=null,t=null},notify(){z5(()=>{let n=e;for(;n;)n.callback(),n=n.next})},get(){const n=[];let r=e;for(;r;)n.push(r),r=r.next;return n},subscribe(n){let r=!0;const i=t={callback:n,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!r||e===null||(r=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var bS={notify(){},get:()=>[]};function mE(e,t){let n,r=bS,i=0,o=!1;function a(k){h();const S=r.subscribe(k);let b=!1;return()=>{b||(b=!0,S(),p())}}function c(){r.notify()}function d(){v.onStateChange&&v.onStateChange()}function m(){return o}function h(){i++,n||(n=t?t.addNestedSub(d):e.subscribe(d),r=P5())}function p(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=bS)}function g(){o||(o=!0,h())}function x(){o&&(o=!1,p())}const v={addNestedSub:a,notifyNestedSubs:c,handleChangeWrapper:d,isSubscribed:m,trySubscribe:g,tryUnsubscribe:x,getListeners:()=>r};return v}var B5=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",$5=B5(),H5=()=>typeof navigator<"u"&&navigator.product==="ReactNative",F5=H5(),V5=()=>$5||F5?C.useLayoutEffect:C.useEffect,Qf=V5();function _S(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function jg(e,t){if(_S(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(!Object.prototype.hasOwnProperty.call(t,n[i])||!_S(e[n[i]],t[n[i]]))return!1;return!0}var U5={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},q5={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},G5={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},pE={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},W5={[C5]:G5,[j5]:pE};function kS(e){return N5(e)?pE:W5[e.$$typeof]||U5}var Y5=Object.defineProperty,X5=Object.getOwnPropertyNames,SS=Object.getOwnPropertySymbols,K5=Object.getOwnPropertyDescriptor,Z5=Object.getPrototypeOf,wS=Object.prototype;function Hx(e,t){if(typeof t!="string"){if(wS){const o=Z5(t);o&&o!==wS&&Hx(e,o)}let n=X5(t);SS&&(n=n.concat(SS(t)));const r=kS(e),i=kS(t);for(let o=0;o<n.length;++o){const a=n[o];if(!q5[a]&&!(i&&i[a])&&!(r&&r[a])){const c=K5(t,a);try{Y5(e,a,c)}catch{}}}}return e}var Q5=Symbol.for("react-redux-context"),J5=typeof globalThis<"u"?globalThis:{};function eD(){if(!C.createContext)return{};const e=J5[Q5]??=new Map;let t=e.get(C.createContext);return t||(t=C.createContext(null),e.set(C.createContext,t)),t}var hE=eD(),tD=[null,null];function nD(e,t,n){Qf(()=>e(...t),n)}function rD(e,t,n,r,i,o){e.current=r,n.current=!1,i.current&&(i.current=null,o())}function iD(e,t,n,r,i,o,a,c,d,m,h){if(!e)return()=>{};let p=!1,g=null;const x=()=>{if(p||!c.current)return;const k=t.getState();let S,b;try{S=r(k,i.current)}catch(w){b=w,g=w}b||(g=null),S===o.current?a.current||m():(o.current=S,d.current=S,a.current=!0,h())};return n.onStateChange=x,n.trySubscribe(),x(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,g)throw g}}function sD(e,t){return e===t}function oD(e,t,n,{pure:r,areStatesEqual:i=sD,areOwnPropsEqual:o=jg,areStatePropsEqual:a=jg,areMergedPropsEqual:c=jg,forwardRef:d=!1,context:m=hE}={}){const h=m,p=M5(e),g=A5(t),x=L5(n),v=!!e;return S=>{const b=S.displayName||S.name||"Component",w=`Connect(${b})`,j={shouldHandleStateChanges:v,displayName:w,wrappedComponentName:b,WrappedComponent:S,initMapStateToProps:p,initMapDispatchToProps:g,initMergeProps:x,areStatesEqual:i,areStatePropsEqual:a,areOwnPropsEqual:o,areMergedPropsEqual:c};function N(L){const[I,D,M]=C.useMemo(()=>{const{reactReduxForwardedRef:Ee,...Ie}=L;return[L.context,Ee,Ie]},[L]),A=C.useMemo(()=>{let Ee=h;return I?.Consumer,Ee},[I,h]),$=C.useContext(A),W=!!L.store&&!!L.store.getState&&!!L.store.dispatch,B=!!$&&!!$.store,V=W?L.store:$.store,H=B?$.getServerState:V.getState,U=C.useMemo(()=>T5(V.dispatch,j),[V]),[Y,Q]=C.useMemo(()=>{if(!v)return tD;const Ee=mE(V,W?void 0:$.subscription),Ie=Ee.notifyNestedSubs.bind(Ee);return[Ee,Ie]},[V,W,$]),q=C.useMemo(()=>W?$:{...$,subscription:Y},[W,$,Y]),G=C.useRef(void 0),J=C.useRef(M),P=C.useRef(void 0),K=C.useRef(!1),ee=C.useRef(!1),te=C.useRef(void 0);Qf(()=>(ee.current=!0,()=>{ee.current=!1}),[]);const ie=C.useMemo(()=>()=>P.current&&M===J.current?P.current:U(V.getState(),M),[V,M]),se=C.useMemo(()=>Ie=>Y?iD(v,V,Y,U,J,G,K,ee,P,Q,Ie):()=>{},[Y]);nD(rD,[J,G,K,M,P,Q]);let de;try{de=C.useSyncExternalStore(se,ie,H?()=>U(H(),M):ie)}catch(Ee){throw te.current&&(Ee.message+=` -The error may be correlated with this previous error: -${te.current.stack} - -`),Ee}Qf(()=>{te.current=void 0,P.current=void 0,G.current=de});const oe=C.useMemo(()=>C.createElement(S,{...de,ref:D}),[D,S,de]);return C.useMemo(()=>v?C.createElement(A.Provider,{value:q},oe):oe,[A,oe,q])}const R=C.memo(N);if(R.WrappedComponent=S,R.displayName=N.displayName=w,d){const I=C.forwardRef(function(M,A){return C.createElement(R,{...M,reactReduxForwardedRef:A})});return I.displayName=w,I.WrappedComponent=S,Hx(I,S)}return Hx(R,S)}}var gE=oD;function aD(e){const{children:t,context:n,serverState:r,store:i}=e,o=C.useMemo(()=>{const d=mE(i);return{store:i,subscription:d,getServerState:r?()=>r:void 0}},[i,r]),a=C.useMemo(()=>i.getState(),[i]);Qf(()=>{const{subscription:d}=o;return d.onStateChange=d.notifyNestedSubs,d.trySubscribe(),a!==i.getState()&&d.notifyNestedSubs(),()=>{d.tryUnsubscribe(),d.onStateChange=void 0}},[o,a]);const c=n||hE;return C.createElement(c.Provider,{value:o},t)}var lD=aD,cD="Invariant failed";function uD(e,t){throw new Error(cD)}var $i=function(t){var n=t.top,r=t.right,i=t.bottom,o=t.left,a=r-o,c=i-n,d={top:n,right:r,bottom:i,left:o,width:a,height:c,x:o,y:n,center:{x:(r+o)/2,y:(i+n)/2}};return d},$v=function(t,n){return{top:t.top-n.top,left:t.left-n.left,bottom:t.bottom+n.bottom,right:t.right+n.right}},CS=function(t,n){return{top:t.top+n.top,left:t.left+n.left,bottom:t.bottom-n.bottom,right:t.right-n.right}},dD=function(t,n){return{top:t.top+n.y,left:t.left+n.x,bottom:t.bottom+n.y,right:t.right+n.x}},Eg={top:0,right:0,bottom:0,left:0},Hv=function(t){var n=t.borderBox,r=t.margin,i=r===void 0?Eg:r,o=t.border,a=o===void 0?Eg:o,c=t.padding,d=c===void 0?Eg:c,m=$i($v(n,i)),h=$i(CS(n,a)),p=$i(CS(h,d));return{marginBox:m,borderBox:$i(n),paddingBox:h,contentBox:p,margin:i,border:a,padding:d}},Ci=function(t){var n=t.slice(0,-2),r=t.slice(-2);if(r!=="px")return 0;var i=Number(n);return isNaN(i)&&uD(),i},fD=function(){return{x:window.pageXOffset,y:window.pageYOffset}},Jf=function(t,n){var r=t.borderBox,i=t.border,o=t.margin,a=t.padding,c=dD(r,n);return Hv({borderBox:c,border:i,margin:o,padding:a})},em=function(t,n){return n===void 0&&(n=fD()),Jf(t,n)},yE=function(t,n){var r={top:Ci(n.marginTop),right:Ci(n.marginRight),bottom:Ci(n.marginBottom),left:Ci(n.marginLeft)},i={top:Ci(n.paddingTop),right:Ci(n.paddingRight),bottom:Ci(n.paddingBottom),left:Ci(n.paddingLeft)},o={top:Ci(n.borderTopWidth),right:Ci(n.borderRightWidth),bottom:Ci(n.borderBottomWidth),left:Ci(n.borderLeftWidth)};return Hv({borderBox:t,margin:r,padding:i,border:o})},xE=function(t){var n=t.getBoundingClientRect(),r=window.getComputedStyle(t);return yE(n,r)},vu=function(t){var n=[],r=null,i=function(){for(var a=arguments.length,c=new Array(a),d=0;d<a;d++)c[d]=arguments[d];n=c,!r&&(r=requestAnimationFrame(function(){r=null,t.apply(void 0,n)}))};return i.cancel=function(){r&&(cancelAnimationFrame(r),r=null)},i};function tm(){return tm=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},tm.apply(null,arguments)}function vE(e,t){}vE.bind(null,"warn");vE.bind(null,"error");function bo(){}function mD(e,t){return{...e,...t}}function Ii(e,t,n){const r=t.map(i=>{const o=mD(n,i.options);return e.addEventListener(i.eventName,i.fn,o),function(){e.removeEventListener(i.eventName,i.fn,o)}});return function(){r.forEach(o=>{o()})}}const pD="Invariant failed";class nm extends Error{}nm.prototype.toString=function(){return this.message};function ze(e,t){throw new nm(pD)}let hD=class extends It.Component{constructor(...t){super(...t),this.callbacks=null,this.unbind=bo,this.onWindowError=n=>{const r=this.getCallbacks();r.isDragging()&&r.tryAbort(),n.error instanceof nm&&n.preventDefault()},this.getCallbacks=()=>{if(!this.callbacks)throw new Error("Unable to find AppCallbacks in <ErrorBoundary/>");return this.callbacks},this.setCallbacks=n=>{this.callbacks=n}}componentDidMount(){this.unbind=Ii(window,[{eventName:"error",fn:this.onWindowError}])}componentDidCatch(t){if(t instanceof nm){this.setState({});return}throw t}componentWillUnmount(){this.unbind()}render(){return this.props.children(this.setCallbacks)}};const gD=` - Press space bar to start a drag. - When dragging you can use the arrow keys to move the item around and escape to cancel. - Some screen readers may require you to be in focus mode or to use your pass through key -`,rm=e=>e+1,yD=e=>` - You have lifted an item in position ${rm(e.source.index)} -`,bE=(e,t)=>{const n=e.droppableId===t.droppableId,r=rm(e.index),i=rm(t.index);return n?` - You have moved the item from position ${r} - to position ${i} - `:` - You have moved the item from position ${r} - in list ${e.droppableId} - to list ${t.droppableId} - in position ${i} - `},_E=(e,t,n)=>t.droppableId===n.droppableId?` - The item ${e} - has been combined with ${n.draggableId}`:` - The item ${e} - in list ${t.droppableId} - has been combined with ${n.draggableId} - in list ${n.droppableId} - `,xD=e=>{const t=e.destination;if(t)return bE(e.source,t);const n=e.combine;return n?_E(e.draggableId,e.source,n):"You are over an area that cannot be dropped on"},jS=e=>` - The item has returned to its starting position - of ${rm(e.index)} -`,vD=e=>{if(e.reason==="CANCEL")return` - Movement cancelled. - ${jS(e.source)} - `;const t=e.destination,n=e.combine;return t?` - You have dropped the item. - ${bE(e.source,t)} - `:n?` - You have dropped the item. - ${_E(e.draggableId,e.source,n)} - `:` - The item has been dropped while not over a drop area. - ${jS(e.source)} - `},Of={dragHandleUsageInstructions:gD,onDragStart:yD,onDragUpdate:xD,onDragEnd:vD};function bD(e,t){return!!(e===t||Number.isNaN(e)&&Number.isNaN(t))}function kE(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!bD(e[n],t[n]))return!1;return!0}function tn(e,t){const n=C.useState(()=>({inputs:t,result:e()}))[0],r=C.useRef(!0),i=C.useRef(n),a=r.current||!!(t&&i.current.inputs&&kE(t,i.current.inputs))?i.current:{inputs:t,result:e()};return C.useEffect(()=>{r.current=!1,i.current=a},[a]),a.result}function rt(e,t){return tn(()=>e,t)}const Sr={x:0,y:0},Tr=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),ui=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),_o=(e,t)=>e.x===t.x&&e.y===t.y,Bl=e=>({x:e.x!==0?-e.x:0,y:e.y!==0?-e.y:0}),ra=(e,t,n=0)=>e==="x"?{x:t,y:n}:{x:n,y:t},bu=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2),ES=(e,t)=>Math.min(...t.map(n=>bu(e,n))),SE=e=>t=>({x:e(t.x),y:e(t.y)});var _D=(e,t)=>{const n=$i({top:Math.max(t.top,e.top),right:Math.min(t.right,e.right),bottom:Math.min(t.bottom,e.bottom),left:Math.max(t.left,e.left)});return n.width<=0||n.height<=0?null:n};const Bu=(e,t)=>({top:e.top+t.y,left:e.left+t.x,bottom:e.bottom+t.y,right:e.right+t.x}),NS=e=>[{x:e.left,y:e.top},{x:e.right,y:e.top},{x:e.left,y:e.bottom},{x:e.right,y:e.bottom}],kD={top:0,right:0,bottom:0,left:0},SD=(e,t)=>t?Bu(e,t.scroll.diff.displacement):e,wD=(e,t,n)=>n&&n.increasedBy?{...e,[t.end]:e[t.end]+n.increasedBy[t.line]}:e,CD=(e,t)=>t&&t.shouldClipSubject?_D(t.pageMarginBox,e):$i(e);var bl=({page:e,withPlaceholder:t,axis:n,frame:r})=>{const i=SD(e.marginBox,r),o=wD(i,n,t),a=CD(o,r);return{page:e,withPlaceholder:t,active:a}},Fv=(e,t)=>{e.frame||ze();const n=e.frame,r=ui(t,n.scroll.initial),i=Bl(r),o={...n,scroll:{initial:n.scroll.initial,current:t,diff:{value:r,displacement:i},max:n.scroll.max}},a=bl({page:e.subject.page,withPlaceholder:e.subject.withPlaceholder,axis:e.axis,frame:o});return{...e,frame:o,subject:a}};function kr(e,t=kE){let n=null;function r(...i){if(n&&n.lastThis===this&&t(i,n.lastArgs))return n.lastResult;const o=e.apply(this,i);return n={lastResult:o,lastArgs:i,lastThis:this},o}return r.clear=function(){n=null},r}const wE=kr(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),CE=kr(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),Pm=kr(e=>Object.values(e)),jD=kr(e=>Object.values(e));var $l=kr((e,t)=>jD(t).filter(r=>e===r.descriptor.droppableId).sort((r,i)=>r.descriptor.index-i.descriptor.index));function Vv(e){return e.at&&e.at.type==="REORDER"?e.at.destination:null}function Bm(e){return e.at&&e.at.type==="COMBINE"?e.at.combine:null}var $m=kr((e,t)=>t.filter(n=>n.descriptor.id!==e.descriptor.id)),ED=({isMovingForward:e,draggable:t,destination:n,insideDestination:r,previousImpact:i})=>{if(!n.isCombineEnabled||!Vv(i))return null;function a(x){const v={type:"COMBINE",combine:{draggableId:x,droppableId:n.descriptor.id}};return{...i,at:v}}const c=i.displaced.all,d=c.length?c[0]:null;if(e)return d?a(d):null;const m=$m(t,r);if(!d){if(!m.length)return null;const x=m[m.length-1];return a(x.descriptor.id)}const h=m.findIndex(x=>x.descriptor.id===d);h===-1&&ze();const p=h-1;if(p<0)return null;const g=m[p];return a(g.descriptor.id)},Hl=(e,t)=>e.descriptor.droppableId===t.descriptor.id;const jE={point:Sr,value:0},_u={invisible:{},visible:{},all:[]},ND={displaced:_u,displacedBy:jE,at:null};var Ti=(e,t)=>n=>e<=n&&n<=t,EE=e=>{const t=Ti(e.top,e.bottom),n=Ti(e.left,e.right);return r=>{if(t(r.top)&&t(r.bottom)&&n(r.left)&&n(r.right))return!0;const o=t(r.top)||t(r.bottom),a=n(r.left)||n(r.right);if(o&&a)return!0;const d=r.top<e.top&&r.bottom>e.bottom,m=r.left<e.left&&r.right>e.right;return d&&m?!0:d&&a||m&&o}},ID=e=>{const t=Ti(e.top,e.bottom),n=Ti(e.left,e.right);return r=>t(r.top)&&t(r.bottom)&&n(r.left)&&n(r.right)};const Uv={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},NE={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"};var TD=e=>t=>{const n=Ti(t.top,t.bottom),r=Ti(t.left,t.right);return i=>e===Uv?n(i.top)&&n(i.bottom):r(i.left)&&r(i.right)};const RD=(e,t)=>{const n=t.frame?t.frame.scroll.diff.displacement:Sr;return Bu(e,n)},AD=(e,t,n)=>t.subject.active?n(t.subject.active)(e):!1,MD=(e,t,n)=>n(t)(e),qv=({target:e,destination:t,viewport:n,withDroppableDisplacement:r,isVisibleThroughFrameFn:i})=>{const o=r?RD(e,t):e;return AD(o,t,i)&&MD(o,n,i)},DD=e=>qv({...e,isVisibleThroughFrameFn:EE}),IE=e=>qv({...e,isVisibleThroughFrameFn:ID}),OD=e=>qv({...e,isVisibleThroughFrameFn:TD(e.destination.axis)}),LD=(e,t,n)=>{if(typeof n=="boolean")return n;if(!t)return!0;const{invisible:r,visible:i}=t;if(r[e])return!1;const o=i[e];return o?o.shouldAnimate:!0};function zD(e,t){const n=e.page.marginBox,r={top:t.point.y,right:0,bottom:0,left:t.point.x};return $i($v(n,r))}function ku({afterDragging:e,destination:t,displacedBy:n,viewport:r,forceShouldAnimate:i,last:o}){return e.reduce(function(c,d){const m=zD(d,n),h=d.descriptor.id;if(c.all.push(h),!DD({target:m,destination:t,viewport:r,withDroppableDisplacement:!0}))return c.invisible[d.descriptor.id]=!0,c;const g=LD(h,o,i),x={draggableId:h,shouldAnimate:g};return c.visible[h]=x,c},{all:[],visible:{},invisible:{}})}function PD(e,t){if(!e.length)return 0;const n=e[e.length-1].descriptor.index;return t.inHomeList?n:n+1}function IS({insideDestination:e,inHomeList:t,displacedBy:n,destination:r}){const i=PD(e,{inHomeList:t});return{displaced:_u,displacedBy:n,at:{type:"REORDER",destination:{droppableId:r.descriptor.id,index:i}}}}function im({draggable:e,insideDestination:t,destination:n,viewport:r,displacedBy:i,last:o,index:a,forceShouldAnimate:c}){const d=Hl(e,n);if(a==null)return IS({insideDestination:t,inHomeList:d,displacedBy:i,destination:n});const m=t.find(v=>v.descriptor.index===a);if(!m)return IS({insideDestination:t,inHomeList:d,displacedBy:i,destination:n});const h=$m(e,t),p=t.indexOf(m),g=h.slice(p);return{displaced:ku({afterDragging:g,destination:n,displacedBy:i,last:o,viewport:r.frame,forceShouldAnimate:c}),displacedBy:i,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:a}}}}function wo(e,t){return!!t.effected[e]}var BD=({isMovingForward:e,destination:t,draggables:n,combine:r,afterCritical:i})=>{if(!t.isCombineEnabled)return null;const o=r.draggableId,c=n[o].descriptor.index;return wo(o,i)?e?c:c-1:e?c+1:c},$D=({isMovingForward:e,isInHomeList:t,insideDestination:n,location:r})=>{if(!n.length)return null;const i=r.index,o=e?i+1:i-1,a=n[0].descriptor.index,c=n[n.length-1].descriptor.index,d=t?c:c+1;return o<a||o>d?null:o},HD=({isMovingForward:e,isInHomeList:t,draggable:n,draggables:r,destination:i,insideDestination:o,previousImpact:a,viewport:c,afterCritical:d})=>{const m=a.at;if(m||ze(),m.type==="REORDER"){const p=$D({isMovingForward:e,isInHomeList:t,location:m.destination,insideDestination:o});return p==null?null:im({draggable:n,insideDestination:o,destination:i,viewport:c,last:a.displaced,displacedBy:a.displacedBy,index:p})}const h=BD({isMovingForward:e,destination:i,displaced:a.displaced,draggables:r,combine:m.combine,afterCritical:d});return h==null?null:im({draggable:n,insideDestination:o,destination:i,viewport:c,last:a.displaced,displacedBy:a.displacedBy,index:h})},FD=({displaced:e,afterCritical:t,combineWith:n,displacedBy:r})=>{const i=!!(e.visible[n]||e.invisible[n]);return wo(n,t)?i?Sr:Bl(r.point):i?r.point:Sr},VD=({afterCritical:e,impact:t,draggables:n})=>{const r=Bm(t);r||ze();const i=r.draggableId,o=n[i].page.borderBox.center,a=FD({displaced:t.displaced,afterCritical:e,combineWith:i,displacedBy:t.displacedBy});return Tr(o,a)};const TE=(e,t)=>t.margin[e.start]+t.borderBox[e.size]/2,UD=(e,t)=>t.margin[e.end]+t.borderBox[e.size]/2,Gv=(e,t,n)=>t[e.crossAxisStart]+n.margin[e.crossAxisStart]+n.borderBox[e.crossAxisSize]/2,TS=({axis:e,moveRelativeTo:t,isMoving:n})=>ra(e.line,t.marginBox[e.end]+TE(e,n),Gv(e,t.marginBox,n)),RS=({axis:e,moveRelativeTo:t,isMoving:n})=>ra(e.line,t.marginBox[e.start]-UD(e,n),Gv(e,t.marginBox,n)),qD=({axis:e,moveInto:t,isMoving:n})=>ra(e.line,t.contentBox[e.start]+TE(e,n),Gv(e,t.contentBox,n));var GD=({impact:e,draggable:t,draggables:n,droppable:r,afterCritical:i})=>{const o=$l(r.descriptor.id,n),a=t.page,c=r.axis;if(!o.length)return qD({axis:c,moveInto:r.page,isMoving:a});const{displaced:d,displacedBy:m}=e,h=d.all[0];if(h){const g=n[h];if(wo(h,i))return RS({axis:c,moveRelativeTo:g.page,isMoving:a});const x=Jf(g.page,m.point);return RS({axis:c,moveRelativeTo:x,isMoving:a})}const p=o[o.length-1];if(p.descriptor.id===t.descriptor.id)return a.borderBox.center;if(wo(p.descriptor.id,i)){const g=Jf(p.page,Bl(i.displacedBy.point));return TS({axis:c,moveRelativeTo:g,isMoving:a})}return TS({axis:c,moveRelativeTo:p.page,isMoving:a})},Fx=(e,t)=>{const n=e.frame;return n?Tr(t,n.scroll.diff.displacement):t};const WD=({impact:e,draggable:t,droppable:n,draggables:r,afterCritical:i})=>{const o=t.page.borderBox.center,a=e.at;return!n||!a?o:a.type==="REORDER"?GD({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:i}):VD({impact:e,draggables:r,afterCritical:i})};var Hm=e=>{const t=WD(e),n=e.droppable;return n?Fx(n,t):t},RE=(e,t)=>{const n=ui(t,e.scroll.initial),r=Bl(n);return{frame:$i({top:t.y,bottom:t.y+e.frame.height,left:t.x,right:t.x+e.frame.width}),scroll:{initial:e.scroll.initial,max:e.scroll.max,current:t,diff:{value:n,displacement:r}}}};function AS(e,t){return e.map(n=>t[n])}function YD(e,t){for(let n=0;n<t.length;n++){const r=t[n].visible[e];if(r)return r}return null}var XD=({impact:e,viewport:t,destination:n,draggables:r,maxScrollChange:i})=>{const o=RE(t,Tr(t.scroll.current,i)),a=n.frame?Fv(n,Tr(n.frame.scroll.current,i)):n,c=e.displaced,d=ku({afterDragging:AS(c.all,r),destination:n,displacedBy:e.displacedBy,viewport:o.frame,last:c,forceShouldAnimate:!1}),m=ku({afterDragging:AS(c.all,r),destination:a,displacedBy:e.displacedBy,viewport:t.frame,last:c,forceShouldAnimate:!1}),h={},p={},g=[c,d,m];return c.all.forEach(v=>{const k=YD(v,g);if(k){p[v]=k;return}h[v]=!0}),{...e,displaced:{all:c.all,invisible:h,visible:p}}},KD=(e,t)=>Tr(e.scroll.diff.displacement,t),Wv=({pageBorderBoxCenter:e,draggable:t,viewport:n})=>{const r=KD(n,e),i=ui(r,t.page.borderBox.center);return Tr(t.client.borderBox.center,i)},AE=({draggable:e,destination:t,newPageBorderBoxCenter:n,viewport:r,withDroppableDisplacement:i,onlyOnMainAxis:o=!1})=>{const a=ui(n,e.page.borderBox.center),d={target:Bu(e.page.borderBox,a),destination:t,withDroppableDisplacement:i,viewport:r};return o?OD(d):IE(d)},ZD=({isMovingForward:e,draggable:t,destination:n,draggables:r,previousImpact:i,viewport:o,previousPageBorderBoxCenter:a,previousClientSelection:c,afterCritical:d})=>{if(!n.isEnabled)return null;const m=$l(n.descriptor.id,r),h=Hl(t,n),p=ED({isMovingForward:e,draggable:t,destination:n,insideDestination:m,previousImpact:i})||HD({isMovingForward:e,isInHomeList:h,draggable:t,draggables:r,destination:n,insideDestination:m,previousImpact:i,viewport:o,afterCritical:d});if(!p)return null;const g=Hm({impact:p,draggable:t,droppable:n,draggables:r,afterCritical:d});if(AE({draggable:t,destination:n,newPageBorderBoxCenter:g,viewport:o.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0}))return{clientSelection:Wv({pageBorderBoxCenter:g,draggable:t,viewport:o}),impact:p,scrollJumpRequest:null};const v=ui(g,a),k=XD({impact:p,viewport:o,destination:n,draggables:r,maxScrollChange:v});return{clientSelection:c,impact:k,scrollJumpRequest:v}};const $r=e=>{const t=e.subject.active;return t||ze(),t};var QD=({isMovingForward:e,pageBorderBoxCenter:t,source:n,droppables:r,viewport:i})=>{const o=n.subject.active;if(!o)return null;const a=n.axis,c=Ti(o[a.start],o[a.end]),d=Pm(r).filter(h=>h!==n).filter(h=>h.isEnabled).filter(h=>!!h.subject.active).filter(h=>EE(i.frame)($r(h))).filter(h=>{const p=$r(h);return e?o[a.crossAxisEnd]<p[a.crossAxisEnd]:p[a.crossAxisStart]<o[a.crossAxisStart]}).filter(h=>{const p=$r(h),g=Ti(p[a.start],p[a.end]);return c(p[a.start])||c(p[a.end])||g(o[a.start])||g(o[a.end])}).sort((h,p)=>{const g=$r(h)[a.crossAxisStart],x=$r(p)[a.crossAxisStart];return e?g-x:x-g}).filter((h,p,g)=>$r(h)[a.crossAxisStart]===$r(g[0])[a.crossAxisStart]);if(!d.length)return null;if(d.length===1)return d[0];const m=d.filter(h=>Ti($r(h)[a.start],$r(h)[a.end])(t[a.line]));return m.length===1?m[0]:m.length>1?m.sort((h,p)=>$r(h)[a.start]-$r(p)[a.start])[0]:d.sort((h,p)=>{const g=ES(t,NS($r(h))),x=ES(t,NS($r(p)));return g!==x?g-x:$r(h)[a.start]-$r(p)[a.start]})[0]};const MS=(e,t)=>{const n=e.page.borderBox.center;return wo(e.descriptor.id,t)?ui(n,t.displacedBy.point):n},JD=(e,t)=>{const n=e.page.borderBox;return wo(e.descriptor.id,t)?Bu(n,Bl(t.displacedBy.point)):n};var eO=({pageBorderBoxCenter:e,viewport:t,destination:n,insideDestination:r,afterCritical:i})=>r.filter(a=>IE({target:JD(a,i),destination:n,viewport:t.frame,withDroppableDisplacement:!0})).sort((a,c)=>{const d=bu(e,Fx(n,MS(a,i))),m=bu(e,Fx(n,MS(c,i)));return d<m?-1:m<d?1:a.descriptor.index-c.descriptor.index})[0]||null,$u=kr(function(t,n){const r=n[t.line];return{value:r,point:ra(t.line,r)}});const tO=(e,t,n)=>{const r=e.axis;if(e.descriptor.mode==="virtual")return ra(r.line,t[r.line]);const i=e.subject.page.contentBox[r.size],d=$l(e.descriptor.id,n).reduce((m,h)=>m+h.client.marginBox[r.size],0)+t[r.line]-i;return d<=0?null:ra(r.line,d)},ME=(e,t)=>({...e,scroll:{...e.scroll,max:t}}),DE=(e,t,n)=>{const r=e.frame;Hl(t,e)&&ze(),e.subject.withPlaceholder&&ze();const i=$u(e.axis,t.displaceBy).point,o=tO(e,i,n),a={placeholderSize:i,increasedBy:o,oldFrameMaxScroll:e.frame?e.frame.scroll.max:null};if(!r){const h=bl({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:e.frame});return{...e,subject:h}}const c=o?Tr(r.scroll.max,o):r.scroll.max,d=ME(r,c),m=bl({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:d});return{...e,subject:m,frame:d}},nO=e=>{const t=e.subject.withPlaceholder;t||ze();const n=e.frame;if(!n){const a=bl({page:e.subject.page,axis:e.axis,frame:null,withPlaceholder:null});return{...e,subject:a}}const r=t.oldFrameMaxScroll;r||ze();const i=ME(n,r),o=bl({page:e.subject.page,axis:e.axis,frame:i,withPlaceholder:null});return{...e,subject:o,frame:i}};var rO=({previousPageBorderBoxCenter:e,moveRelativeTo:t,insideDestination:n,draggable:r,draggables:i,destination:o,viewport:a,afterCritical:c})=>{if(!t){if(n.length)return null;const p={displaced:_u,displacedBy:jE,at:{type:"REORDER",destination:{droppableId:o.descriptor.id,index:0}}},g=Hm({impact:p,draggable:r,droppable:o,draggables:i,afterCritical:c}),x=Hl(r,o)?o:DE(o,r,i);return AE({draggable:r,destination:x,newPageBorderBoxCenter:g,viewport:a.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})?p:null}const d=e[o.axis.line]<=t.page.borderBox.center[o.axis.line],m=(()=>{const p=t.descriptor.index;return t.descriptor.id===r.descriptor.id||d?p:p+1})(),h=$u(o.axis,r.displaceBy);return im({draggable:r,insideDestination:n,destination:o,viewport:a,displacedBy:h,last:_u,index:m})},iO=({isMovingForward:e,previousPageBorderBoxCenter:t,draggable:n,isOver:r,draggables:i,droppables:o,viewport:a,afterCritical:c})=>{const d=QD({isMovingForward:e,pageBorderBoxCenter:t,source:r,droppables:o,viewport:a});if(!d)return null;const m=$l(d.descriptor.id,i),h=eO({pageBorderBoxCenter:t,viewport:a,destination:d,insideDestination:m,afterCritical:c}),p=rO({previousPageBorderBoxCenter:t,destination:d,draggable:n,draggables:i,moveRelativeTo:h,insideDestination:m,viewport:a,afterCritical:c});if(!p)return null;const g=Hm({impact:p,draggable:n,droppable:d,draggables:i,afterCritical:c});return{clientSelection:Wv({pageBorderBoxCenter:g,draggable:n,viewport:a}),impact:p,scrollJumpRequest:null}},di=e=>{const t=e.at;return t?t.type==="REORDER"?t.destination.droppableId:t.combine.droppableId:null};const sO=(e,t)=>{const n=di(e);return n?t[n]:null};var oO=({state:e,type:t})=>{const n=sO(e.impact,e.dimensions.droppables),r=!!n,i=e.dimensions.droppables[e.critical.droppable.id],o=n||i,a=o.axis.direction,c=a==="vertical"&&(t==="MOVE_UP"||t==="MOVE_DOWN")||a==="horizontal"&&(t==="MOVE_LEFT"||t==="MOVE_RIGHT");if(c&&!r)return null;const d=t==="MOVE_DOWN"||t==="MOVE_RIGHT",m=e.dimensions.draggables[e.critical.draggable.id],h=e.current.page.borderBoxCenter,{draggables:p,droppables:g}=e.dimensions;return c?ZD({isMovingForward:d,previousPageBorderBoxCenter:h,draggable:m,destination:o,draggables:p,viewport:e.viewport,previousClientSelection:e.current.client.selection,previousImpact:e.impact,afterCritical:e.afterCritical}):iO({isMovingForward:d,previousPageBorderBoxCenter:h,draggable:m,isOver:o,draggables:p,droppables:g,viewport:e.viewport,afterCritical:e.afterCritical})};function Qo(e){return e.phase==="DRAGGING"||e.phase==="COLLECTING"}function OE(e){const t=Ti(e.top,e.bottom),n=Ti(e.left,e.right);return function(i){return t(i.y)&&n(i.x)}}function aO(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}function lO({pageBorderBox:e,draggable:t,candidates:n}){const r=t.page.borderBox.center,i=n.map(o=>{const a=o.axis,c=ra(o.axis.line,e.center[a.line],o.page.borderBox.center[a.crossAxisLine]);return{id:o.descriptor.id,distance:bu(r,c)}}).sort((o,a)=>a.distance-o.distance);return i[0]?i[0].id:null}function cO({pageBorderBox:e,draggable:t,droppables:n}){const r=Pm(n).filter(i=>{if(!i.isEnabled)return!1;const o=i.subject.active;if(!o||!aO(e,o))return!1;if(OE(o)(e.center))return!0;const a=i.axis,c=o.center[a.crossAxisLine],d=e[a.crossAxisStart],m=e[a.crossAxisEnd],h=Ti(o[a.crossAxisStart],o[a.crossAxisEnd]),p=h(d),g=h(m);return!p&&!g?!0:p?d<c:m>c});return r.length?r.length===1?r[0].descriptor.id:lO({pageBorderBox:e,draggable:t,candidates:r}):null}const LE=(e,t)=>$i(Bu(e,t));var uO=(e,t)=>{const n=e.frame;return n?LE(t,n.scroll.diff.value):t};function zE({displaced:e,id:t}){return!!(e.visible[t]||e.invisible[t])}function dO({draggable:e,closest:t,inHomeList:n}){return t?n&&t.descriptor.index>e.descriptor.index?t.descriptor.index-1:t.descriptor.index:null}var fO=({pageBorderBoxWithDroppableScroll:e,draggable:t,destination:n,insideDestination:r,last:i,viewport:o,afterCritical:a})=>{const c=n.axis,d=$u(n.axis,t.displaceBy),m=d.value,h=e[c.start],p=e[c.end],x=$m(t,r).find(k=>{const S=k.descriptor.id,b=k.page.borderBox.center[c.line],w=wo(S,a),j=zE({displaced:i,id:S});return w?j?p<=b:h<b-m:j?p<=b+m:h<b})||null,v=dO({draggable:t,closest:x,inHomeList:Hl(t,n)});return im({draggable:t,insideDestination:r,destination:n,viewport:o,last:i,displacedBy:d,index:v})};const mO=4;var pO=({draggable:e,pageBorderBoxWithDroppableScroll:t,previousImpact:n,destination:r,insideDestination:i,afterCritical:o})=>{if(!r.isCombineEnabled)return null;const a=r.axis,c=$u(r.axis,e.displaceBy),d=c.value,m=t[a.start],h=t[a.end],g=$m(e,i).find(v=>{const k=v.descriptor.id,S=v.page.borderBox,w=S[a.size]/mO,j=wo(k,o),N=zE({displaced:n.displaced,id:k});return j?N?h>S[a.start]+w&&h<S[a.end]-w:m>S[a.start]-d+w&&m<S[a.end]-d-w:N?h>S[a.start]+d+w&&h<S[a.end]+d-w:m>S[a.start]+w&&m<S[a.end]-w});return g?{displacedBy:c,displaced:n.displaced,at:{type:"COMBINE",combine:{draggableId:g.descriptor.id,droppableId:r.descriptor.id}}}:null},PE=({pageOffset:e,draggable:t,draggables:n,droppables:r,previousImpact:i,viewport:o,afterCritical:a})=>{const c=LE(t.page.borderBox,e),d=cO({pageBorderBox:c,draggable:t,droppables:r});if(!d)return ND;const m=r[d],h=$l(m.descriptor.id,n),p=uO(m,c);return pO({pageBorderBoxWithDroppableScroll:p,draggable:t,previousImpact:i,destination:m,insideDestination:h,afterCritical:a})||fO({pageBorderBoxWithDroppableScroll:p,draggable:t,destination:m,insideDestination:h,last:i.displaced,viewport:o,afterCritical:a})},Yv=(e,t)=>({...e,[t.descriptor.id]:t});const hO=({previousImpact:e,impact:t,droppables:n})=>{const r=di(e),i=di(t);if(!r||r===i)return n;const o=n[r];if(!o.subject.withPlaceholder)return n;const a=nO(o);return Yv(n,a)};var gO=({draggable:e,draggables:t,droppables:n,previousImpact:r,impact:i})=>{const o=hO({previousImpact:r,impact:i,droppables:n}),a=di(i);if(!a)return o;const c=n[a];if(Hl(e,c)||c.subject.withPlaceholder)return o;const d=DE(c,e,t);return Yv(o,d)},au=({state:e,clientSelection:t,dimensions:n,viewport:r,impact:i,scrollJumpRequest:o})=>{const a=r||e.viewport,c=n||e.dimensions,d=t||e.current.client.selection,m=ui(d,e.initial.client.selection),h={offset:m,selection:d,borderBoxCenter:Tr(e.initial.client.borderBoxCenter,m)},p={selection:Tr(h.selection,a.scroll.current),borderBoxCenter:Tr(h.borderBoxCenter,a.scroll.current),offset:Tr(h.offset,a.scroll.diff.value)},g={client:h,page:p};if(e.phase==="COLLECTING")return{...e,dimensions:c,viewport:a,current:g};const x=c.draggables[e.critical.draggable.id],v=i||PE({pageOffset:p.offset,draggable:x,draggables:c.draggables,droppables:c.droppables,previousImpact:e.impact,viewport:a,afterCritical:e.afterCritical}),k=gO({draggable:x,impact:v,previousImpact:e.impact,draggables:c.draggables,droppables:c.droppables});return{...e,current:g,dimensions:{draggables:c.draggables,droppables:k},impact:v,viewport:a,scrollJumpRequest:o||null,forceShouldAnimate:o?!1:null}};function yO(e,t){return e.map(n=>t[n])}var BE=({impact:e,viewport:t,draggables:n,destination:r,forceShouldAnimate:i})=>{const o=e.displaced,a=yO(o.all,n),c=ku({afterDragging:a,destination:r,displacedBy:e.displacedBy,viewport:t.frame,forceShouldAnimate:i,last:o});return{...e,displaced:c}},$E=({impact:e,draggable:t,droppable:n,draggables:r,viewport:i,afterCritical:o})=>{const a=Hm({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:o});return Wv({pageBorderBoxCenter:a,draggable:t,viewport:i})},HE=({state:e,dimensions:t,viewport:n})=>{e.movementMode!=="SNAP"&&ze();const r=e.impact,i=n||e.viewport,o=t||e.dimensions,{draggables:a,droppables:c}=o,d=a[e.critical.draggable.id],m=di(r);m||ze();const h=c[m],p=BE({impact:r,viewport:i,destination:h,draggables:a}),g=$E({impact:p,draggable:d,droppable:h,draggables:a,viewport:i,afterCritical:e.afterCritical});return au({impact:p,clientSelection:g,state:e,dimensions:o,viewport:i})},xO=e=>({index:e.index,droppableId:e.droppableId}),FE=({draggable:e,home:t,draggables:n,viewport:r})=>{const i=$u(t.axis,e.displaceBy),o=$l(t.descriptor.id,n),a=o.indexOf(e);a===-1&&ze();const c=o.slice(a+1),d=c.reduce((g,x)=>(g[x.descriptor.id]=!0,g),{}),m={inVirtualList:t.descriptor.mode==="virtual",displacedBy:i,effected:d};return{impact:{displaced:ku({afterDragging:c,destination:t,displacedBy:i,last:null,viewport:r.frame,forceShouldAnimate:!1}),displacedBy:i,at:{type:"REORDER",destination:xO(e.descriptor)}},afterCritical:m}},vO=(e,t)=>({draggables:e.draggables,droppables:Yv(e.droppables,t)}),bO=({draggable:e,offset:t,initialWindowScroll:n})=>{const r=Jf(e.client,t),i=em(r,n);return{...e,placeholder:{...e.placeholder,client:r},client:r,page:i}},_O=e=>{const t=e.frame;return t||ze(),t},kO=({additions:e,updatedDroppables:t,viewport:n})=>{const r=n.scroll.diff.value;return e.map(i=>{const o=i.descriptor.droppableId,a=t[o],d=_O(a).scroll.diff.value,m=Tr(r,d);return bO({draggable:i,offset:m,initialWindowScroll:n.scroll.initial})})},SO=({state:e,published:t})=>{const n=t.modified.map(b=>{const w=e.dimensions.droppables[b.droppableId];return Fv(w,b.scroll)}),r={...e.dimensions.droppables,...wE(n)},i=CE(kO({additions:t.additions,updatedDroppables:r,viewport:e.viewport})),o={...e.dimensions.draggables,...i};t.removals.forEach(b=>{delete o[b]});const a={droppables:r,draggables:o},c=di(e.impact),d=c?a.droppables[c]:null,m=a.draggables[e.critical.draggable.id],h=a.droppables[e.critical.droppable.id],{impact:p,afterCritical:g}=FE({draggable:m,home:h,draggables:o,viewport:e.viewport}),x=d&&d.isCombineEnabled?e.impact:p,v=PE({pageOffset:e.current.page.offset,draggable:a.draggables[e.critical.draggable.id],draggables:a.draggables,droppables:a.droppables,previousImpact:x,viewport:e.viewport,afterCritical:g}),k={...e,phase:"DRAGGING",impact:v,onLiftImpact:p,dimensions:a,afterCritical:g,forceShouldAnimate:!1};return e.phase==="COLLECTING"?k:{...k,phase:"DROP_PENDING",reason:e.reason,isWaiting:!1}};const Vx=e=>e.movementMode==="SNAP",Ng=(e,t,n)=>{const r=vO(e.dimensions,t);return!Vx(e)||n?au({state:e,dimensions:r}):HE({state:e,dimensions:r})};function Ig(e){return e.isDragging&&e.movementMode==="SNAP"?{...e,scrollJumpRequest:null}:e}const DS={phase:"IDLE",completed:null,shouldFlush:!1};var wO=(e=DS,t)=>{if(t.type==="FLUSH")return{...DS,shouldFlush:!0};if(t.type==="INITIAL_PUBLISH"){e.phase!=="IDLE"&&ze();const{critical:n,clientSelection:r,viewport:i,dimensions:o,movementMode:a}=t.payload,c=o.draggables[n.draggable.id],d=o.droppables[n.droppable.id],m={selection:r,borderBoxCenter:c.client.borderBox.center,offset:Sr},h={client:m,page:{selection:Tr(m.selection,i.scroll.initial),borderBoxCenter:Tr(m.selection,i.scroll.initial),offset:Tr(m.selection,i.scroll.diff.value)}},p=Pm(o.droppables).every(k=>!k.isFixedOnPage),{impact:g,afterCritical:x}=FE({draggable:c,home:d,draggables:o.draggables,viewport:i});return{phase:"DRAGGING",isDragging:!0,critical:n,movementMode:a,dimensions:o,initial:h,current:h,isWindowScrollAllowed:p,impact:g,afterCritical:x,onLiftImpact:g,viewport:i,scrollJumpRequest:null,forceShouldAnimate:null}}if(t.type==="COLLECTION_STARTING")return e.phase==="COLLECTING"||e.phase==="DROP_PENDING"?e:(e.phase!=="DRAGGING"&&ze(),{...e,phase:"COLLECTING"});if(t.type==="PUBLISH_WHILE_DRAGGING")return e.phase==="COLLECTING"||e.phase==="DROP_PENDING"||ze(),SO({state:e,published:t.payload});if(t.type==="MOVE"){if(e.phase==="DROP_PENDING")return e;Qo(e)||ze();const{client:n}=t.payload;return _o(n,e.current.client.selection)?e:au({state:e,clientSelection:n,impact:Vx(e)?e.impact:null})}if(t.type==="UPDATE_DROPPABLE_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="COLLECTING")return Ig(e);Qo(e)||ze();const{id:n,newScroll:r}=t.payload,i=e.dimensions.droppables[n];if(!i)return e;const o=Fv(i,r);return Ng(e,o,!1)}if(t.type==="UPDATE_DROPPABLE_IS_ENABLED"){if(e.phase==="DROP_PENDING")return e;Qo(e)||ze();const{id:n,isEnabled:r}=t.payload,i=e.dimensions.droppables[n];i||ze(),i.isEnabled===r&&ze();const o={...i,isEnabled:r};return Ng(e,o,!0)}if(t.type==="UPDATE_DROPPABLE_IS_COMBINE_ENABLED"){if(e.phase==="DROP_PENDING")return e;Qo(e)||ze();const{id:n,isCombineEnabled:r}=t.payload,i=e.dimensions.droppables[n];i||ze(),i.isCombineEnabled===r&&ze();const o={...i,isCombineEnabled:r};return Ng(e,o,!0)}if(t.type==="MOVE_BY_WINDOW_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="DROP_ANIMATING")return e;Qo(e)||ze(),e.isWindowScrollAllowed||ze();const n=t.payload.newScroll;if(_o(e.viewport.scroll.current,n))return Ig(e);const r=RE(e.viewport,n);return Vx(e)?HE({state:e,viewport:r}):au({state:e,viewport:r})}if(t.type==="UPDATE_VIEWPORT_MAX_SCROLL"){if(!Qo(e))return e;const n=t.payload.maxScroll;if(_o(n,e.viewport.scroll.max))return e;const r={...e.viewport,scroll:{...e.viewport.scroll,max:n}};return{...e,viewport:r}}if(t.type==="MOVE_UP"||t.type==="MOVE_DOWN"||t.type==="MOVE_LEFT"||t.type==="MOVE_RIGHT"){if(e.phase==="COLLECTING"||e.phase==="DROP_PENDING")return e;e.phase!=="DRAGGING"&&ze();const n=oO({state:e,type:t.type});return n?au({state:e,impact:n.impact,clientSelection:n.clientSelection,scrollJumpRequest:n.scrollJumpRequest}):e}if(t.type==="DROP_PENDING"){const n=t.payload.reason;return e.phase!=="COLLECTING"&&ze(),{...e,phase:"DROP_PENDING",isWaiting:!0,reason:n}}if(t.type==="DROP_ANIMATE"){const{completed:n,dropDuration:r,newHomeClientOffset:i}=t.payload;return e.phase==="DRAGGING"||e.phase==="DROP_PENDING"||ze(),{phase:"DROP_ANIMATING",completed:n,dropDuration:r,newHomeClientOffset:i,dimensions:e.dimensions}}if(t.type==="DROP_COMPLETE"){const{completed:n}=t.payload;return{phase:"IDLE",completed:n,shouldFlush:!1}}return e};function yn(e,t){return e instanceof Object&&"type"in e&&e.type===t}const CO=e=>({type:"BEFORE_INITIAL_CAPTURE",payload:e}),jO=e=>({type:"LIFT",payload:e}),EO=e=>({type:"INITIAL_PUBLISH",payload:e}),NO=e=>({type:"PUBLISH_WHILE_DRAGGING",payload:e}),IO=()=>({type:"COLLECTION_STARTING",payload:null}),TO=e=>({type:"UPDATE_DROPPABLE_SCROLL",payload:e}),RO=e=>({type:"UPDATE_DROPPABLE_IS_ENABLED",payload:e}),AO=e=>({type:"UPDATE_DROPPABLE_IS_COMBINE_ENABLED",payload:e}),VE=e=>({type:"MOVE",payload:e}),MO=e=>({type:"MOVE_BY_WINDOW_SCROLL",payload:e}),DO=e=>({type:"UPDATE_VIEWPORT_MAX_SCROLL",payload:e}),OO=()=>({type:"MOVE_UP",payload:null}),LO=()=>({type:"MOVE_DOWN",payload:null}),zO=()=>({type:"MOVE_RIGHT",payload:null}),PO=()=>({type:"MOVE_LEFT",payload:null}),Xv=()=>({type:"FLUSH",payload:null}),BO=e=>({type:"DROP_ANIMATE",payload:e}),Kv=e=>({type:"DROP_COMPLETE",payload:e}),UE=e=>({type:"DROP",payload:e}),$O=e=>({type:"DROP_PENDING",payload:e}),qE=()=>({type:"DROP_ANIMATION_FINISHED",payload:null});var HO=e=>({getState:t,dispatch:n})=>r=>i=>{if(!yn(i,"LIFT")){r(i);return}const{id:o,clientSelection:a,movementMode:c}=i.payload,d=t();d.phase==="DROP_ANIMATING"&&n(Kv({completed:d.completed})),t().phase!=="IDLE"&&ze(),n(Xv()),n(CO({draggableId:o,movementMode:c}));const h={draggableId:o,scrollOptions:{shouldPublishImmediately:c==="SNAP"}},{critical:p,dimensions:g,viewport:x}=e.startPublishing(h);n(EO({critical:p,dimensions:g,clientSelection:a,movementMode:c,viewport:x}))},FO=e=>()=>t=>n=>{yn(n,"INITIAL_PUBLISH")&&e.dragging(),yn(n,"DROP_ANIMATE")&&e.dropping(n.payload.completed.result.reason),(yn(n,"FLUSH")||yn(n,"DROP_COMPLETE"))&&e.resting(),t(n)};const Zv={outOfTheWay:"cubic-bezier(0.2, 0, 0, 1)",drop:"cubic-bezier(.2,1,.1,1)"},Su={opacity:{drop:0,combining:.7},scale:{drop:.75}},GE={outOfTheWay:.2,minDropTime:.33,maxDropTime:.55},Wo=`${GE.outOfTheWay}s ${Zv.outOfTheWay}`,lu={fluid:`opacity ${Wo}`,snap:`transform ${Wo}, opacity ${Wo}`,drop:e=>{const t=`${e}s ${Zv.drop}`;return`transform ${t}, opacity ${t}`},outOfTheWay:`transform ${Wo}`,placeholder:`height ${Wo}, width ${Wo}, margin ${Wo}`},OS=e=>_o(e,Sr)?void 0:`translate(${e.x}px, ${e.y}px)`,Ux={moveTo:OS,drop:(e,t)=>{const n=OS(e);if(n)return t?`${n} scale(${Su.scale.drop})`:n}},{minDropTime:qx,maxDropTime:WE}=GE,VO=WE-qx,LS=1500,UO=.6;var qO=({current:e,destination:t,reason:n})=>{const r=bu(e,t);if(r<=0)return qx;if(r>=LS)return WE;const i=r/LS,o=qx+VO*i,a=n==="CANCEL"?o*UO:o;return Number(a.toFixed(2))},GO=({impact:e,draggable:t,dimensions:n,viewport:r,afterCritical:i})=>{const{draggables:o,droppables:a}=n,c=di(e),d=c?a[c]:null,m=a[t.descriptor.droppableId],h=$E({impact:e,draggable:t,draggables:o,afterCritical:i,droppable:d||m,viewport:r});return ui(h,t.client.borderBox.center)},WO=({draggables:e,reason:t,lastImpact:n,home:r,viewport:i,onLiftImpact:o})=>!n.at||t!=="DROP"?{impact:BE({draggables:e,impact:o,destination:r,viewport:i,forceShouldAnimate:!0}),didDropInsideDroppable:!1}:n.at.type==="REORDER"?{impact:n,didDropInsideDroppable:!0}:{impact:{...n,displaced:_u},didDropInsideDroppable:!0};const YO=({getState:e,dispatch:t})=>n=>r=>{if(!yn(r,"DROP")){n(r);return}const i=e(),o=r.payload.reason;if(i.phase==="COLLECTING"){t($O({reason:o}));return}if(i.phase==="IDLE")return;i.phase==="DROP_PENDING"&&i.isWaiting&&ze(),i.phase==="DRAGGING"||i.phase==="DROP_PENDING"||ze();const c=i.critical,d=i.dimensions,m=d.draggables[i.critical.draggable.id],{impact:h,didDropInsideDroppable:p}=WO({reason:o,lastImpact:i.impact,afterCritical:i.afterCritical,onLiftImpact:i.onLiftImpact,home:i.dimensions.droppables[i.critical.droppable.id],viewport:i.viewport,draggables:i.dimensions.draggables}),g=p?Vv(h):null,x=p?Bm(h):null,v={index:c.draggable.index,droppableId:c.droppable.id},k={draggableId:m.descriptor.id,type:m.descriptor.type,source:v,reason:o,mode:i.movementMode,destination:g,combine:x},S=GO({impact:h,draggable:m,dimensions:d,viewport:i.viewport,afterCritical:i.afterCritical}),b={critical:i.critical,afterCritical:i.afterCritical,result:k,impact:h};if(!(!_o(i.current.client.offset,S)||!!k.combine)){t(Kv({completed:b}));return}const j=qO({current:i.current.client.offset,destination:S,reason:o});t(BO({newHomeClientOffset:S,dropDuration:j,completed:b}))};var YE=()=>({x:window.pageXOffset,y:window.pageYOffset});function XO(e){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:t=>{t.target!==window&&t.target!==window.document||e()}}}function KO({onWindowScroll:e}){function t(){e(YE())}const n=vu(t),r=XO(n);let i=bo;function o(){return i!==bo}function a(){o()&&ze(),i=Ii(window,[r])}function c(){o()||ze(),n.cancel(),i(),i=bo}return{start:a,stop:c,isActive:o}}const ZO=e=>yn(e,"DROP_COMPLETE")||yn(e,"DROP_ANIMATE")||yn(e,"FLUSH"),QO=e=>{const t=KO({onWindowScroll:n=>{e.dispatch(MO({newScroll:n}))}});return n=>r=>{!t.isActive()&&yn(r,"INITIAL_PUBLISH")&&t.start(),t.isActive()&&ZO(r)&&t.stop(),n(r)}};var JO=e=>{let t=!1,n=!1;const r=setTimeout(()=>{n=!0}),i=o=>{t||n||(t=!0,e(o),clearTimeout(r))};return i.wasCalled=()=>t,i},eL=()=>{const e=[],t=i=>{const o=e.findIndex(c=>c.timerId===i);o===-1&&ze();const[a]=e.splice(o,1);a.callback()};return{add:i=>{const o=setTimeout(()=>t(o)),a={timerId:o,callback:i};e.push(a)},flush:()=>{if(!e.length)return;const i=[...e];e.length=0,i.forEach(o=>{clearTimeout(o.timerId),o.callback()})}}};const tL=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.droppableId===t.droppableId&&e.index===t.index,nL=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.draggableId===t.draggableId&&e.droppableId===t.droppableId,rL=(e,t)=>{if(e===t)return!0;const n=e.draggable.id===t.draggable.id&&e.draggable.droppableId===t.draggable.droppableId&&e.draggable.type===t.draggable.type&&e.draggable.index===t.draggable.index,r=e.droppable.id===t.droppable.id&&e.droppable.type===t.droppable.type;return n&&r},Pc=(e,t)=>{t()},of=(e,t)=>({draggableId:e.draggable.id,type:e.droppable.type,source:{droppableId:e.droppable.id,index:e.draggable.index},mode:t});function Tg(e,t,n,r){if(!e){n(r(t));return}const i=JO(n);e(t,{announce:i}),i.wasCalled()||n(r(t))}var iL=(e,t)=>{const n=eL();let r=null;const i=(p,g)=>{r&&ze(),Pc("onBeforeCapture",()=>{const x=e().onBeforeCapture;x&&x({draggableId:p,mode:g})})},o=(p,g)=>{r&&ze(),Pc("onBeforeDragStart",()=>{const x=e().onBeforeDragStart;x&&x(of(p,g))})},a=(p,g)=>{r&&ze();const x=of(p,g);r={mode:g,lastCritical:p,lastLocation:x.source,lastCombine:null},n.add(()=>{Pc("onDragStart",()=>Tg(e().onDragStart,x,t,Of.onDragStart))})},c=(p,g)=>{const x=Vv(g),v=Bm(g);r||ze();const k=!rL(p,r.lastCritical);k&&(r.lastCritical=p);const S=!tL(r.lastLocation,x);S&&(r.lastLocation=x);const b=!nL(r.lastCombine,v);if(b&&(r.lastCombine=v),!k&&!S&&!b)return;const w={...of(p,r.mode),combine:v,destination:x};n.add(()=>{Pc("onDragUpdate",()=>Tg(e().onDragUpdate,w,t,Of.onDragUpdate))})},d=()=>{r||ze(),n.flush()},m=p=>{r||ze(),r=null,Pc("onDragEnd",()=>Tg(e().onDragEnd,p,t,Of.onDragEnd))};return{beforeCapture:i,beforeStart:o,start:a,update:c,flush:d,drop:m,abort:()=>{if(!r)return;const p={...of(r.lastCritical,r.mode),combine:null,destination:null,reason:"CANCEL"};m(p)}}},sL=(e,t)=>{const n=iL(e,t);return r=>i=>o=>{if(yn(o,"BEFORE_INITIAL_CAPTURE")){n.beforeCapture(o.payload.draggableId,o.payload.movementMode);return}if(yn(o,"INITIAL_PUBLISH")){const c=o.payload.critical;n.beforeStart(c,o.payload.movementMode),i(o),n.start(c,o.payload.movementMode);return}if(yn(o,"DROP_COMPLETE")){const c=o.payload.completed.result;n.flush(),i(o),n.drop(c);return}if(i(o),yn(o,"FLUSH")){n.abort();return}const a=r.getState();a.phase==="DRAGGING"&&n.update(a.critical,a.impact)}};const oL=e=>t=>n=>{if(!yn(n,"DROP_ANIMATION_FINISHED")){t(n);return}const r=e.getState();r.phase!=="DROP_ANIMATING"&&ze(),e.dispatch(Kv({completed:r.completed}))},aL=e=>{let t=null,n=null;function r(){n&&(cancelAnimationFrame(n),n=null),t&&(t(),t=null)}return i=>o=>{if((yn(o,"FLUSH")||yn(o,"DROP_COMPLETE")||yn(o,"DROP_ANIMATION_FINISHED"))&&r(),i(o),!yn(o,"DROP_ANIMATE"))return;const a={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){e.getState().phase==="DROP_ANIMATING"&&e.dispatch(qE())}};n=requestAnimationFrame(()=>{n=null,t=Ii(window,[a])})}};var lL=e=>()=>t=>n=>{(yn(n,"DROP_COMPLETE")||yn(n,"FLUSH")||yn(n,"DROP_ANIMATE"))&&e.stopPublishing(),t(n)},cL=e=>{let t=!1;return()=>n=>r=>{if(yn(r,"INITIAL_PUBLISH")){t=!0,e.tryRecordFocus(r.payload.critical.draggable.id),n(r),e.tryRestoreFocusRecorded();return}if(n(r),!!t){if(yn(r,"FLUSH")){t=!1,e.tryRestoreFocusRecorded();return}if(yn(r,"DROP_COMPLETE")){t=!1;const i=r.payload.completed.result;i.combine&&e.tryShiftRecord(i.draggableId,i.combine.draggableId),e.tryRestoreFocusRecorded()}}}};const uL=e=>yn(e,"DROP_COMPLETE")||yn(e,"DROP_ANIMATE")||yn(e,"FLUSH");var dL=e=>t=>n=>r=>{if(uL(r)){e.stop(),n(r);return}if(yn(r,"INITIAL_PUBLISH")){n(r);const i=t.getState();i.phase!=="DRAGGING"&&ze(),e.start(i);return}n(r),e.scroll(t.getState())};const fL=e=>t=>n=>{if(t(n),!yn(n,"PUBLISH_WHILE_DRAGGING"))return;const r=e.getState();r.phase==="DROP_PENDING"&&(r.isWaiting||e.dispatch(UE({reason:r.reason})))},mL=uE;var pL=({dimensionMarshal:e,focusMarshal:t,styleMarshal:n,getResponders:r,announce:i,autoScroller:o})=>cE(wO,mL(d5(FO(n),lL(e),HO(e),YO,oL,aL,fL,dL(o),QO,cL(t),sL(r,i))));const Rg=()=>({additions:{},removals:{},modified:{}});function hL({registry:e,callbacks:t}){let n=Rg(),r=null;const i=()=>{r||(t.collectionStarting(),r=requestAnimationFrame(()=>{r=null;const{additions:d,removals:m,modified:h}=n,p=Object.keys(d).map(v=>e.draggable.getById(v).getDimension(Sr)).sort((v,k)=>v.descriptor.index-k.descriptor.index),g=Object.keys(h).map(v=>{const S=e.droppable.getById(v).callbacks.getScrollWhileDragging();return{droppableId:v,scroll:S}}),x={additions:p,removals:Object.keys(m),modified:g};n=Rg(),t.publish(x)}))};return{add:d=>{const m=d.descriptor.id;n.additions[m]=d,n.modified[d.descriptor.droppableId]=!0,n.removals[m]&&delete n.removals[m],i()},remove:d=>{const m=d.descriptor;n.removals[m.id]=!0,n.modified[m.droppableId]=!0,n.additions[m.id]&&delete n.additions[m.id],i()},stop:()=>{r&&(cancelAnimationFrame(r),r=null,n=Rg())}}}var XE=({scrollHeight:e,scrollWidth:t,height:n,width:r})=>{const i=ui({x:t,y:e},{x:r,y:n});return{x:Math.max(0,i.x),y:Math.max(0,i.y)}},KE=()=>{const e=document.documentElement;return e||ze(),e},ZE=()=>{const e=KE();return XE({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,width:e.clientWidth,height:e.clientHeight})},gL=()=>{const e=YE(),t=ZE(),n=e.y,r=e.x,i=KE(),o=i.clientWidth,a=i.clientHeight,c=r+o,d=n+a;return{frame:$i({top:n,left:r,right:c,bottom:d}),scroll:{initial:e,current:e,max:t,diff:{value:Sr,displacement:Sr}}}},yL=({critical:e,scrollOptions:t,registry:n})=>{const r=gL(),i=r.scroll.current,o=e.droppable,a=n.droppable.getAllByType(o.type).map(h=>h.callbacks.getDimensionAndWatchScroll(i,t)),c=n.draggable.getAllByType(e.draggable.type).map(h=>h.getDimension(i));return{dimensions:{draggables:CE(c),droppables:wE(a)},critical:e,viewport:r}};function zS(e,t,n){return!(n.descriptor.id===t.id||n.descriptor.type!==t.type||e.droppable.getById(n.descriptor.droppableId).descriptor.mode!=="virtual")}var xL=(e,t)=>{let n=null;const r=hL({callbacks:{publish:t.publishWhileDragging,collectionStarting:t.collectionStarting},registry:e}),i=(g,x)=>{e.droppable.exists(g)||ze(),n&&t.updateDroppableIsEnabled({id:g,isEnabled:x})},o=(g,x)=>{n&&(e.droppable.exists(g)||ze(),t.updateDroppableIsCombineEnabled({id:g,isCombineEnabled:x}))},a=(g,x)=>{n&&(e.droppable.exists(g)||ze(),t.updateDroppableScroll({id:g,newScroll:x}))},c=(g,x)=>{n&&e.droppable.getById(g).callbacks.scroll(x)},d=()=>{if(!n)return;r.stop();const g=n.critical.droppable;e.droppable.getAllByType(g.type).forEach(x=>x.callbacks.dragStopped()),n.unsubscribe(),n=null},m=g=>{n||ze();const x=n.critical.draggable;g.type==="ADDITION"&&zS(e,x,g.value)&&r.add(g.value),g.type==="REMOVAL"&&zS(e,x,g.value)&&r.remove(g.value)};return{updateDroppableIsEnabled:i,updateDroppableIsCombineEnabled:o,scrollDroppable:c,updateDroppableScroll:a,startPublishing:g=>{n&&ze();const x=e.draggable.getById(g.draggableId),v=e.droppable.getById(x.descriptor.droppableId),k={draggable:x.descriptor,droppable:v.descriptor},S=e.subscribe(m);return n={critical:k,unsubscribe:S},yL({critical:k,registry:e,scrollOptions:g.scrollOptions})},stopPublishing:d}},QE=(e,t)=>e.phase==="IDLE"?!0:e.phase!=="DROP_ANIMATING"||e.completed.result.draggableId===t?!1:e.completed.result.reason==="DROP",vL=e=>{window.scrollBy(e.x,e.y)};const bL=kr(e=>Pm(e).filter(t=>!(!t.isEnabled||!t.frame))),_L=(e,t)=>bL(t).find(r=>(r.frame||ze(),OE(r.frame.pageMarginBox)(e)))||null;var kL=({center:e,destination:t,droppables:n})=>{if(t){const i=n[t];return i.frame?i:null}return _L(e,n)};const wu={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:e=>e**2,durationDampening:{stopDampeningAt:1200,accelerateAt:360},disabled:!1};var SL=(e,t,n=()=>wu)=>{const r=n(),i=e[t.size]*r.startFromPercentage,o=e[t.size]*r.maxScrollAtPercentage;return{startScrollingFrom:i,maxScrollValueAt:o}},JE=({startOfRange:e,endOfRange:t,current:n})=>{const r=t-e;return r===0?0:(n-e)/r},Qv=1,wL=(e,t,n=()=>wu)=>{const r=n();if(e>t.startScrollingFrom)return 0;if(e<=t.maxScrollValueAt)return r.maxPixelScroll;if(e===t.startScrollingFrom)return Qv;const o=1-JE({startOfRange:t.maxScrollValueAt,endOfRange:t.startScrollingFrom,current:e}),a=r.maxPixelScroll*r.ease(o);return Math.ceil(a)},CL=(e,t,n)=>{const r=n(),i=r.durationDampening.accelerateAt,o=r.durationDampening.stopDampeningAt,a=t,c=o,m=Date.now()-a;if(m>=o)return e;if(m<i)return Qv;const h=JE({startOfRange:i,endOfRange:c,current:m}),p=e*r.ease(h);return Math.ceil(p)},PS=({distanceToEdge:e,thresholds:t,dragStartTime:n,shouldUseTimeDampening:r,getAutoScrollerOptions:i})=>{const o=wL(e,t,i);return o===0?0:r?Math.max(CL(o,n,i),Qv):o},BS=({container:e,distanceToEdges:t,dragStartTime:n,axis:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=SL(e,r,o);return t[r.end]<t[r.start]?PS({distanceToEdge:t[r.end],thresholds:a,dragStartTime:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o}):-1*PS({distanceToEdge:t[r.start],thresholds:a,dragStartTime:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o})},jL=({container:e,subject:t,proposedScroll:n})=>{const r=t.height>e.height,i=t.width>e.width;return!i&&!r?n:i&&r?null:{x:i?0:n.x,y:r?0:n.y}};const EL=SE(e=>e===0?0:e);var eN=({dragStartTime:e,container:t,subject:n,center:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a={top:r.y-t.top,right:t.right-r.x,bottom:t.bottom-r.y,left:r.x-t.left},c=BS({container:t,distanceToEdges:a,dragStartTime:e,axis:Uv,shouldUseTimeDampening:i,getAutoScrollerOptions:o}),d=BS({container:t,distanceToEdges:a,dragStartTime:e,axis:NE,shouldUseTimeDampening:i,getAutoScrollerOptions:o}),m=EL({x:d,y:c});if(_o(m,Sr))return null;const h=jL({container:t,subject:n,proposedScroll:m});return h?_o(h,Sr)?null:h:null};const NL=SE(e=>e===0?0:e>0?1:-1),Jv=(()=>{const e=(t,n)=>t<0?t:t>n?t-n:0;return({current:t,max:n,change:r})=>{const i=Tr(t,r),o={x:e(i.x,n.x),y:e(i.y,n.y)};return _o(o,Sr)?null:o}})(),tN=({max:e,current:t,change:n})=>{const r={x:Math.max(t.x,e.x),y:Math.max(t.y,e.y)},i=NL(n),o=Jv({max:r,current:t,change:i});return!o||i.x!==0&&o.x===0||i.y!==0&&o.y===0},e0=(e,t)=>tN({current:e.scroll.current,max:e.scroll.max,change:t}),IL=(e,t)=>{if(!e0(e,t))return null;const n=e.scroll.max,r=e.scroll.current;return Jv({current:r,max:n,change:t})},t0=(e,t)=>{const n=e.frame;return n?tN({current:n.scroll.current,max:n.scroll.max,change:t}):!1},TL=(e,t)=>{const n=e.frame;return!n||!t0(e,t)?null:Jv({current:n.scroll.current,max:n.scroll.max,change:t})};var RL=({viewport:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=eN({dragStartTime:r,container:e.frame,subject:t,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o});return a&&e0(e,a)?a:null},AL=({droppable:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=e.frame;if(!a)return null;const c=eN({dragStartTime:r,container:a.pageMarginBox,subject:t,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o});return c&&t0(e,c)?c:null},$S=({state:e,dragStartTime:t,shouldUseTimeDampening:n,scrollWindow:r,scrollDroppable:i,getAutoScrollerOptions:o})=>{const a=e.current.page.borderBoxCenter,d=e.dimensions.draggables[e.critical.draggable.id].page.marginBox;if(e.isWindowScrollAllowed){const p=e.viewport,g=RL({dragStartTime:t,viewport:p,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});if(g){r(g);return}}const m=kL({center:a,destination:di(e.impact),droppables:e.dimensions.droppables});if(!m)return;const h=AL({dragStartTime:t,droppable:m,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});h&&i(m.descriptor.id,h)},ML=({scrollWindow:e,scrollDroppable:t,getAutoScrollerOptions:n=()=>wu})=>{const r=vu(e),i=vu(t);let o=null;const a=m=>{o||ze();const{shouldUseTimeDampening:h,dragStartTime:p}=o;$S({state:m,scrollWindow:r,scrollDroppable:i,dragStartTime:p,shouldUseTimeDampening:h,getAutoScrollerOptions:n})};return{start:m=>{o&&ze();const h=Date.now();let p=!1;const g=()=>{p=!0};$S({state:m,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:g,scrollDroppable:g,getAutoScrollerOptions:n}),o={dragStartTime:h,shouldUseTimeDampening:p},p&&a(m)},stop:()=>{o&&(r.cancel(),i.cancel(),o=null)},scroll:a}},DL=({move:e,scrollDroppable:t,scrollWindow:n})=>{const r=(c,d)=>{const m=Tr(c.current.client.selection,d);e({client:m})},i=(c,d)=>{if(!t0(c,d))return d;const m=TL(c,d);if(!m)return t(c.descriptor.id,d),null;const h=ui(d,m);return t(c.descriptor.id,h),ui(d,h)},o=(c,d,m)=>{if(!c||!e0(d,m))return m;const h=IL(d,m);if(!h)return n(m),null;const p=ui(m,h);return n(p),ui(m,p)};return c=>{const d=c.scrollJumpRequest;if(!d)return;const m=di(c.impact);m||ze();const h=i(c.dimensions.droppables[m],d);if(!h)return;const p=c.viewport,g=o(c.isWindowScrollAllowed,p,h);g&&r(c,g)}},OL=({scrollDroppable:e,scrollWindow:t,move:n,getAutoScrollerOptions:r})=>{const i=ML({scrollWindow:t,scrollDroppable:e,getAutoScrollerOptions:r}),o=DL({move:n,scrollWindow:t,scrollDroppable:e});return{scroll:d=>{if(!(r().disabled||d.phase!=="DRAGGING")){if(d.movementMode==="FLUID"){i.scroll(d);return}d.scrollJumpRequest&&o(d)}},start:i.start,stop:i.stop}};const _l="data-rfd",kl=(()=>{const e=`${_l}-drag-handle`;return{base:e,draggableId:`${e}-draggable-id`,contextId:`${e}-context-id`}})(),Gx=(()=>{const e=`${_l}-draggable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),LL=(()=>{const e=`${_l}-droppable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),HS={contextId:`${_l}-scroll-container-context-id`},zL=e=>t=>`[${t}="${e}"]`,Bc=(e,t)=>e.map(n=>{const r=n.styles[t];return r?`${n.selector} { ${r} }`:""}).join(" "),PL="pointer-events: none;";var BL=e=>{const t=zL(e),n=(()=>{const c=` - cursor: -webkit-grab; - cursor: grab; - `;return{selector:t(kl.contextId),styles:{always:` - -webkit-touch-callout: none; - -webkit-tap-highlight-color: rgba(0,0,0,0); - touch-action: manipulation; - `,resting:c,dragging:PL,dropAnimating:c}}})(),r=(()=>{const c=` - transition: ${lu.outOfTheWay}; - `;return{selector:t(Gx.contextId),styles:{dragging:c,dropAnimating:c,userCancel:c}}})(),i={selector:t(LL.contextId),styles:{always:"overflow-anchor: none;"}},a=[r,n,i,{selector:"body",styles:{dragging:` - cursor: grabbing; - cursor: -webkit-grabbing; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - overflow-anchor: none; - `}}];return{always:Bc(a,"always"),resting:Bc(a,"resting"),dragging:Bc(a,"dragging"),dropAnimating:Bc(a,"dropAnimating"),userCancel:Bc(a,"userCancel")}};const fi=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?C.useLayoutEffect:C.useEffect,Ag=()=>{const e=document.querySelector("head");return e||ze(),e},FS=e=>{const t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.type="text/css",t};function $L(e,t){const n=tn(()=>BL(e),[e]),r=C.useRef(null),i=C.useRef(null),o=rt(kr(p=>{const g=i.current;g||ze(),g.textContent=p}),[]),a=rt(p=>{const g=r.current;g||ze(),g.textContent=p},[]);fi(()=>{!r.current&&!i.current||ze();const p=FS(t),g=FS(t);return r.current=p,i.current=g,p.setAttribute(`${_l}-always`,e),g.setAttribute(`${_l}-dynamic`,e),Ag().appendChild(p),Ag().appendChild(g),a(n.always),o(n.resting),()=>{const x=v=>{const k=v.current;k||ze(),Ag().removeChild(k),v.current=null};x(r),x(i)}},[t,a,o,n.always,n.resting,e]);const c=rt(()=>o(n.dragging),[o,n.dragging]),d=rt(p=>{if(p==="DROP"){o(n.dropAnimating);return}o(n.userCancel)},[o,n.dropAnimating,n.userCancel]),m=rt(()=>{i.current&&o(n.resting)},[o,n.resting]);return tn(()=>({dragging:c,dropping:d,resting:m}),[c,d,m])}function nN(e,t){return Array.from(e.querySelectorAll(t))}var rN=e=>e&&e.ownerDocument&&e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;function Fm(e){return e instanceof rN(e).HTMLElement}function HL(e,t){const n=`[${kl.contextId}="${e}"]`,r=nN(document,n);if(!r.length)return null;const i=r.find(o=>o.getAttribute(kl.draggableId)===t);return!i||!Fm(i)?null:i}function FL(e){const t=C.useRef({}),n=C.useRef(null),r=C.useRef(null),i=C.useRef(!1),o=rt(function(g,x){const v={id:g,focus:x};return t.current[g]=v,function(){const S=t.current;S[g]!==v&&delete S[g]}},[]),a=rt(function(g){const x=HL(e,g);x&&x!==document.activeElement&&x.focus()},[e]),c=rt(function(g,x){n.current===g&&(n.current=x)},[]),d=rt(function(){r.current||i.current&&(r.current=requestAnimationFrame(()=>{r.current=null;const g=n.current;g&&a(g)}))},[a]),m=rt(function(g){n.current=null;const x=document.activeElement;x&&x.getAttribute(kl.draggableId)===g&&(n.current=g)},[]);return fi(()=>(i.current=!0,function(){i.current=!1;const g=r.current;g&&cancelAnimationFrame(g)}),[]),tn(()=>({register:o,tryRecordFocus:m,tryRestoreFocusRecorded:d,tryShiftRecord:c}),[o,m,d,c])}function VL(){const e={draggables:{},droppables:{}},t=[];function n(p){return t.push(p),function(){const x=t.indexOf(p);x!==-1&&t.splice(x,1)}}function r(p){t.length&&t.forEach(g=>g(p))}function i(p){return e.draggables[p]||null}function o(p){const g=i(p);return g||ze(),g}const a={register:p=>{e.draggables[p.descriptor.id]=p,r({type:"ADDITION",value:p})},update:(p,g)=>{const x=e.draggables[g.descriptor.id];x&&x.uniqueId===p.uniqueId&&(delete e.draggables[g.descriptor.id],e.draggables[p.descriptor.id]=p)},unregister:p=>{const g=p.descriptor.id,x=i(g);x&&p.uniqueId===x.uniqueId&&(delete e.draggables[g],e.droppables[p.descriptor.droppableId]&&r({type:"REMOVAL",value:p}))},getById:o,findById:i,exists:p=>!!i(p),getAllByType:p=>Object.values(e.draggables).filter(g=>g.descriptor.type===p)};function c(p){return e.droppables[p]||null}function d(p){const g=c(p);return g||ze(),g}const m={register:p=>{e.droppables[p.descriptor.id]=p},unregister:p=>{const g=c(p.descriptor.id);g&&p.uniqueId===g.uniqueId&&delete e.droppables[p.descriptor.id]},getById:d,findById:c,exists:p=>!!c(p),getAllByType:p=>Object.values(e.droppables).filter(g=>g.descriptor.type===p)};function h(){e.draggables={},e.droppables={},t.length=0}return{draggable:a,droppable:m,subscribe:n,clean:h}}function UL(){const e=tn(VL,[]);return C.useEffect(()=>function(){e.clean()},[e]),e}var n0=It.createContext(null),sm=()=>{const e=document.body;return e||ze(),e};const qL={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"},GL=e=>`rfd-announcement-${e}`;function WL(e){const t=tn(()=>GL(e),[e]),n=C.useRef(null);return C.useEffect(function(){const o=document.createElement("div");return n.current=o,o.id=t,o.setAttribute("aria-live","assertive"),o.setAttribute("aria-atomic","true"),tm(o.style,qL),sm().appendChild(o),function(){setTimeout(function(){const d=sm();d.contains(o)&&d.removeChild(o),o===n.current&&(n.current=null)})}},[t]),rt(i=>{const o=n.current;if(o){o.textContent=i;return}},[])}const YL={separator:"::"};function r0(e,t=YL){const n=It.useId();return tn(()=>`${e}${t.separator}${n}`,[t.separator,e,n])}function XL({contextId:e,uniqueId:t}){return`rfd-hidden-text-${e}-${t}`}function KL({contextId:e,text:t}){const n=r0("hidden-text",{separator:"-"}),r=tn(()=>XL({contextId:e,uniqueId:n}),[n,e]);return C.useEffect(function(){const o=document.createElement("div");return o.id=r,o.textContent=t,o.style.display="none",sm().appendChild(o),function(){const c=sm();c.contains(o)&&c.removeChild(o)}},[r,t]),r}var Vm=It.createContext(null);function iN(e){const t=C.useRef(e);return C.useEffect(()=>{t.current=e}),t}function ZL(){let e=null;function t(){return!!e}function n(a){return a===e}function r(a){e&&ze();const c={abandon:a};return e=c,c}function i(){e||ze(),e=null}function o(){e&&(e.abandon(),i())}return{isClaimed:t,isActive:n,claim:r,release:i,tryAbandon:o}}function Cu(e){return e.phase==="IDLE"||e.phase==="DROP_ANIMATING"?!1:e.isDragging}const QL=9,JL=13,i0=27,sN=32,e6=33,t6=34,n6=35,r6=36,i6=37,s6=38,o6=39,a6=40,l6={[JL]:!0,[QL]:!0};var oN=e=>{l6[e.keyCode]&&e.preventDefault()};const Um=(()=>{const e="visibilitychange";return typeof document>"u"?e:[e,`ms${e}`,`webkit${e}`,`moz${e}`,`o${e}`].find(r=>`on${r}`in document)||e})(),aN=0,VS=5;function c6(e,t){return Math.abs(t.x-e.x)>=VS||Math.abs(t.y-e.y)>=VS}const US={type:"IDLE"};function u6({cancel:e,completed:t,getPhase:n,setPhase:r}){return[{eventName:"mousemove",fn:i=>{const{button:o,clientX:a,clientY:c}=i;if(o!==aN)return;const d={x:a,y:c},m=n();if(m.type==="DRAGGING"){i.preventDefault(),m.actions.move(d);return}m.type!=="PENDING"&&ze();const h=m.point;if(!c6(h,d))return;i.preventDefault();const p=m.actions.fluidLift(d);r({type:"DRAGGING",actions:p})}},{eventName:"mouseup",fn:i=>{const o=n();if(o.type!=="DRAGGING"){e();return}i.preventDefault(),o.actions.drop({shouldBlockNextClick:!0}),t()}},{eventName:"mousedown",fn:i=>{n().type==="DRAGGING"&&i.preventDefault(),e()}},{eventName:"keydown",fn:i=>{if(n().type==="PENDING"){e();return}if(i.keyCode===i0){i.preventDefault(),e();return}oN(i)}},{eventName:"resize",fn:e},{eventName:"scroll",options:{passive:!0,capture:!1},fn:()=>{n().type==="PENDING"&&e()}},{eventName:"webkitmouseforcedown",fn:i=>{const o=n();if(o.type==="IDLE"&&ze(),o.actions.shouldRespectForcePress()){e();return}i.preventDefault()}},{eventName:Um,fn:e}]}function d6(e){const t=C.useRef(US),n=C.useRef(bo),r=tn(()=>({eventName:"mousedown",fn:function(p){if(p.defaultPrevented||p.button!==aN||p.ctrlKey||p.metaKey||p.shiftKey||p.altKey)return;const g=e.findClosestDraggableId(p);if(!g)return;const x=e.tryGetLock(g,a,{sourceEvent:p});if(!x)return;p.preventDefault();const v={x:p.clientX,y:p.clientY};n.current(),m(x,v)}}),[e]),i=tn(()=>({eventName:"webkitmouseforcewillbegin",fn:h=>{if(h.defaultPrevented)return;const p=e.findClosestDraggableId(h);if(!p)return;const g=e.findOptionsForDraggable(p);g&&(g.shouldRespectForcePress||e.canGetLock(p)&&h.preventDefault())}}),[e]),o=rt(function(){const p={passive:!1,capture:!0};n.current=Ii(window,[i,r],p)},[i,r]),a=rt(()=>{t.current.type!=="IDLE"&&(t.current=US,n.current(),o())},[o]),c=rt(()=>{const h=t.current;a(),h.type==="DRAGGING"&&h.actions.cancel({shouldBlockNextClick:!0}),h.type==="PENDING"&&h.actions.abort()},[a]),d=rt(function(){const p={capture:!0,passive:!1},g=u6({cancel:c,completed:a,getPhase:()=>t.current,setPhase:x=>{t.current=x}});n.current=Ii(window,g,p)},[c,a]),m=rt(function(p,g){t.current.type!=="IDLE"&&ze(),t.current={type:"PENDING",point:g,actions:p},d()},[d]);fi(function(){return o(),function(){n.current()}},[o])}function f6(){}const m6={[t6]:!0,[e6]:!0,[r6]:!0,[n6]:!0};function p6(e,t){function n(){t(),e.cancel()}function r(){t(),e.drop()}return[{eventName:"keydown",fn:i=>{if(i.keyCode===i0){i.preventDefault(),n();return}if(i.keyCode===sN){i.preventDefault(),r();return}if(i.keyCode===a6){i.preventDefault(),e.moveDown();return}if(i.keyCode===s6){i.preventDefault(),e.moveUp();return}if(i.keyCode===o6){i.preventDefault(),e.moveRight();return}if(i.keyCode===i6){i.preventDefault(),e.moveLeft();return}if(m6[i.keyCode]){i.preventDefault();return}oN(i)}},{eventName:"mousedown",fn:n},{eventName:"mouseup",fn:n},{eventName:"click",fn:n},{eventName:"touchstart",fn:n},{eventName:"resize",fn:n},{eventName:"wheel",fn:n,options:{passive:!0}},{eventName:Um,fn:n}]}function h6(e){const t=C.useRef(f6),n=tn(()=>({eventName:"keydown",fn:function(o){if(o.defaultPrevented||o.keyCode!==sN)return;const a=e.findClosestDraggableId(o);if(!a)return;const c=e.tryGetLock(a,h,{sourceEvent:o});if(!c)return;o.preventDefault();let d=!0;const m=c.snapLift();t.current();function h(){d||ze(),d=!1,t.current(),r()}t.current=Ii(window,p6(m,h),{capture:!0,passive:!1})}}),[e]),r=rt(function(){const o={passive:!1,capture:!0};t.current=Ii(window,[n],o)},[n]);fi(function(){return r(),function(){t.current()}},[r])}const Mg={type:"IDLE"},g6=120,y6=.15;function x6({cancel:e,getPhase:t}){return[{eventName:"orientationchange",fn:e},{eventName:"resize",fn:e},{eventName:"contextmenu",fn:n=>{n.preventDefault()}},{eventName:"keydown",fn:n=>{if(t().type!=="DRAGGING"){e();return}n.keyCode===i0&&n.preventDefault(),e()}},{eventName:Um,fn:e}]}function v6({cancel:e,completed:t,getPhase:n}){return[{eventName:"touchmove",options:{capture:!1},fn:r=>{const i=n();if(i.type!=="DRAGGING"){e();return}i.hasMoved=!0;const{clientX:o,clientY:a}=r.touches[0],c={x:o,y:a};r.preventDefault(),i.actions.move(c)}},{eventName:"touchend",fn:r=>{const i=n();if(i.type!=="DRAGGING"){e();return}r.preventDefault(),i.actions.drop({shouldBlockNextClick:!0}),t()}},{eventName:"touchcancel",fn:r=>{if(n().type!=="DRAGGING"){e();return}r.preventDefault(),e()}},{eventName:"touchforcechange",fn:r=>{const i=n();i.type==="IDLE"&&ze();const o=r.touches[0];if(!o||!(o.force>=y6))return;const c=i.actions.shouldRespectForcePress();if(i.type==="PENDING"){c&&e();return}if(c){if(i.hasMoved){r.preventDefault();return}e();return}r.preventDefault()}},{eventName:Um,fn:e}]}function b6(e){const t=C.useRef(Mg),n=C.useRef(bo),r=rt(function(){return t.current},[]),i=rt(function(x){t.current=x},[]),o=tn(()=>({eventName:"touchstart",fn:function(x){if(x.defaultPrevented)return;const v=e.findClosestDraggableId(x);if(!v)return;const k=e.tryGetLock(v,c,{sourceEvent:x});if(!k)return;const S=x.touches[0],{clientX:b,clientY:w}=S,j={x:b,y:w};n.current(),p(k,j)}}),[e]),a=rt(function(){const x={capture:!0,passive:!1};n.current=Ii(window,[o],x)},[o]),c=rt(()=>{const g=t.current;g.type!=="IDLE"&&(g.type==="PENDING"&&clearTimeout(g.longPressTimerId),i(Mg),n.current(),a())},[a,i]),d=rt(()=>{const g=t.current;c(),g.type==="DRAGGING"&&g.actions.cancel({shouldBlockNextClick:!0}),g.type==="PENDING"&&g.actions.abort()},[c]),m=rt(function(){const x={capture:!0,passive:!1},v={cancel:d,completed:c,getPhase:r},k=Ii(window,v6(v),x),S=Ii(window,x6(v),x);n.current=function(){k(),S()}},[d,r,c]),h=rt(function(){const x=r();x.type!=="PENDING"&&ze();const v=x.actions.fluidLift(x.point);i({type:"DRAGGING",actions:v,hasMoved:!1})},[r,i]),p=rt(function(x,v){r().type!=="IDLE"&&ze();const k=setTimeout(h,g6);i({type:"PENDING",point:v,actions:x,longPressTimerId:k}),m()},[m,r,i,h]);fi(function(){return a(),function(){n.current();const v=r();v.type==="PENDING"&&(clearTimeout(v.longPressTimerId),i(Mg))}},[r,a,i]),fi(function(){return Ii(window,[{eventName:"touchmove",fn:()=>{},options:{capture:!1,passive:!1}}])},[])}const _6=["input","button","textarea","select","option","optgroup","video","audio"];function lN(e,t){if(t==null)return!1;if(_6.includes(t.tagName.toLowerCase()))return!0;const r=t.getAttribute("contenteditable");return r==="true"||r===""?!0:t===e?!1:lN(e,t.parentElement)}function k6(e,t){const n=t.target;return Fm(n)?lN(e,n):!1}var S6=e=>$i(e.getBoundingClientRect()).center;function w6(e){return e instanceof rN(e).Element}const C6=(()=>{const e="matches";return typeof document>"u"?e:[e,"msMatchesSelector","webkitMatchesSelector"].find(r=>r in Element.prototype)||e})();function cN(e,t){return e==null?null:e[C6](t)?e:cN(e.parentElement,t)}function j6(e,t){return e.closest?e.closest(t):cN(e,t)}function E6(e){return`[${kl.contextId}="${e}"]`}function N6(e,t){const n=t.target;if(!w6(n))return null;const r=E6(e),i=j6(n,r);return!i||!Fm(i)?null:i}function I6(e,t){const n=N6(e,t);return n?n.getAttribute(kl.draggableId):null}function T6(e,t){const n=`[${Gx.contextId}="${e}"]`,i=nN(document,n).find(o=>o.getAttribute(Gx.id)===t);return!i||!Fm(i)?null:i}function R6(e){e.preventDefault()}function af({expected:e,phase:t,isLockActive:n,shouldWarn:r}){return!(!n()||e!==t)}function uN({lockAPI:e,store:t,registry:n,draggableId:r}){if(e.isClaimed())return!1;const i=n.draggable.findById(r);return!(!i||!i.options.isEnabled||!QE(t.getState(),r))}function A6({lockAPI:e,contextId:t,store:n,registry:r,draggableId:i,forceSensorStop:o,sourceEvent:a}){if(!uN({lockAPI:e,store:n,registry:r,draggableId:i}))return null;const d=r.draggable.getById(i),m=T6(t,d.descriptor.id);if(!m||a&&!d.options.canDragInteractiveElements&&k6(m,a))return null;const h=e.claim(o||bo);let p="PRE_DRAG";function g(){return d.options.shouldRespectForcePress}function x(){return e.isActive(h)}function v(O,R){af({expected:O,phase:p,isLockActive:x,shouldWarn:!0})&&n.dispatch(R())}const k=v.bind(null,"DRAGGING");function S(O){function R(){e.release(),p="COMPLETED"}p!=="PRE_DRAG"&&(R(),ze()),n.dispatch(jO(O.liftActionArgs)),p="DRAGGING";function L(I,D={shouldBlockNextClick:!1}){if(O.cleanup(),D.shouldBlockNextClick){const M=Ii(window,[{eventName:"click",fn:R6,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(M)}R(),n.dispatch(UE({reason:I}))}return{isActive:()=>af({expected:"DRAGGING",phase:p,isLockActive:x,shouldWarn:!1}),shouldRespectForcePress:g,drop:I=>L("DROP",I),cancel:I=>L("CANCEL",I),...O.actions}}function b(O){const R=vu(I=>{k(()=>VE({client:I}))});return{...S({liftActionArgs:{id:i,clientSelection:O,movementMode:"FLUID"},cleanup:()=>R.cancel(),actions:{move:R}}),move:R}}function w(){const O={moveUp:()=>k(OO),moveRight:()=>k(zO),moveDown:()=>k(LO),moveLeft:()=>k(PO)};return S({liftActionArgs:{id:i,clientSelection:S6(m),movementMode:"SNAP"},cleanup:bo,actions:O})}function j(){af({expected:"PRE_DRAG",phase:p,isLockActive:x,shouldWarn:!0})&&e.release()}return{isActive:()=>af({expected:"PRE_DRAG",phase:p,isLockActive:x,shouldWarn:!1}),shouldRespectForcePress:g,fluidLift:b,snapLift:w,abort:j}}const M6=[d6,h6,b6];function D6({contextId:e,store:t,registry:n,customSensors:r,enableDefaultSensors:i}){const o=[...i?M6:[],...r||[]],a=C.useState(()=>ZL())[0],c=rt(function(S,b){Cu(S)&&!Cu(b)&&a.tryAbandon()},[a]);fi(function(){let S=t.getState();return t.subscribe(()=>{const w=t.getState();c(S,w),S=w})},[a,t,c]),fi(()=>a.tryAbandon,[a.tryAbandon]);const d=rt(k=>uN({lockAPI:a,registry:n,store:t,draggableId:k}),[a,n,t]),m=rt((k,S,b)=>A6({lockAPI:a,registry:n,contextId:e,store:t,draggableId:k,forceSensorStop:S||null,sourceEvent:b&&b.sourceEvent?b.sourceEvent:null}),[e,a,n,t]),h=rt(k=>I6(e,k),[e]),p=rt(k=>{const S=n.draggable.findById(k);return S?S.options:null},[n.draggable]),g=rt(function(){a.isClaimed()&&(a.tryAbandon(),t.getState().phase!=="IDLE"&&t.dispatch(Xv()))},[a,t]),x=rt(()=>a.isClaimed(),[a]),v=tn(()=>({canGetLock:d,tryGetLock:m,findClosestDraggableId:h,findOptionsForDraggable:p,tryReleaseLock:g,isLockClaimed:x}),[d,m,h,p,g,x]);for(let k=0;k<o.length;k++)o[k](v)}const O6=e=>({onBeforeCapture:t=>{const n=()=>{e.onBeforeCapture&&e.onBeforeCapture(t)};Am.flushSync(n)},onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragEnd:e.onDragEnd,onDragUpdate:e.onDragUpdate}),L6=e=>({...wu,...e.autoScrollerOptions,durationDampening:{...wu.durationDampening,...e.autoScrollerOptions}});function $c(e){return e.current||ze(),e.current}function z6(e){const{contextId:t,setCallbacks:n,sensors:r,nonce:i,dragHandleUsageInstructions:o}=e,a=C.useRef(null),c=iN(e),d=rt(()=>O6(c.current),[c]),m=rt(()=>L6(c.current),[c]),h=WL(t),p=KL({contextId:t,text:o}),g=$L(t,i),x=rt(M=>{$c(a).dispatch(M)},[]),v=tn(()=>gS({publishWhileDragging:NO,updateDroppableScroll:TO,updateDroppableIsEnabled:RO,updateDroppableIsCombineEnabled:AO,collectionStarting:IO},x),[x]),k=UL(),S=tn(()=>xL(k,v),[k,v]),b=tn(()=>OL({scrollWindow:vL,scrollDroppable:S.scrollDroppable,getAutoScrollerOptions:m,...gS({move:VE},x)}),[S.scrollDroppable,x,m]),w=FL(t),j=tn(()=>pL({announce:h,autoScroller:b,dimensionMarshal:S,focusMarshal:w,getResponders:d,styleMarshal:g}),[h,b,S,w,d,g]);a.current=j;const N=rt(()=>{const M=$c(a);M.getState().phase!=="IDLE"&&M.dispatch(Xv())},[]),O=rt(()=>{const M=$c(a).getState();return M.phase==="DROP_ANIMATING"?!0:M.phase==="IDLE"?!1:M.isDragging},[]),R=tn(()=>({isDragging:O,tryAbort:N}),[O,N]);n(R);const L=rt(M=>QE($c(a).getState(),M),[]),I=rt(()=>Qo($c(a).getState()),[]),D=tn(()=>({marshal:S,focus:w,contextId:t,canLift:L,isMovementAllowed:I,dragHandleUsageInstructionsId:p,registry:k}),[t,S,p,w,L,I,k]);return D6({contextId:t,store:j,registry:k,customSensors:r||null,enableDefaultSensors:e.enableDefaultSensors!==!1}),C.useEffect(()=>N,[N]),It.createElement(Vm.Provider,{value:D},It.createElement(lD,{context:n0,store:j},e.children))}function P6(){return It.useId()}function B6(e){const t=P6(),n=e.dragHandleUsageInstructions||Of.dragHandleUsageInstructions;return It.createElement(hD,null,r=>It.createElement(z6,{nonce:e.nonce,contextId:t,setCallbacks:r,dragHandleUsageInstructions:n,enableDefaultSensors:e.enableDefaultSensors,sensors:e.sensors,onBeforeCapture:e.onBeforeCapture,onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragUpdate:e.onDragUpdate,onDragEnd:e.onDragEnd,autoScrollerOptions:e.autoScrollerOptions},e.children))}const qS={dragging:5e3,dropAnimating:4500},$6=(e,t)=>t?lu.drop(t.duration):e?lu.snap:lu.fluid,H6=(e,t)=>{if(e)return t?Su.opacity.drop:Su.opacity.combining},F6=e=>e.forceShouldAnimate!=null?e.forceShouldAnimate:e.mode==="SNAP";function V6(e){const n=e.dimension.client,{offset:r,combineWith:i,dropping:o}=e,a=!!i,c=F6(e),d=!!o,m=d?Ux.drop(r,a):Ux.moveTo(r);return{position:"fixed",top:n.marginBox.top,left:n.marginBox.left,boxSizing:"border-box",width:n.borderBox.width,height:n.borderBox.height,transition:$6(c,o),transform:m,opacity:H6(a,d),zIndex:d?qS.dropAnimating:qS.dragging,pointerEvents:"none"}}function U6(e){return{transform:Ux.moveTo(e.offset),transition:e.shouldAnimateDisplacement?void 0:"none"}}function q6(e){return e.type==="DRAGGING"?V6(e):U6(e)}function G6(e,t,n=Sr){const r=window.getComputedStyle(t),i=t.getBoundingClientRect(),o=yE(i,r),a=em(o,n),c={client:o,tagName:t.tagName.toLowerCase(),display:r.display},d={x:o.marginBox.width,y:o.marginBox.height};return{descriptor:e,placeholder:c,displaceBy:d,client:o,page:a}}function W6(e){const t=r0("draggable"),{descriptor:n,registry:r,getDraggableRef:i,canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:c}=e,d=tn(()=>({canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:c}),[o,c,a]),m=rt(x=>{const v=i();return v||ze(),G6(n,v,x)},[n,i]),h=tn(()=>({uniqueId:t,descriptor:n,options:d,getDimension:m}),[n,m,d,t]),p=C.useRef(h),g=C.useRef(!0);fi(()=>(r.draggable.register(p.current),()=>r.draggable.unregister(p.current)),[r.draggable]),fi(()=>{if(g.current){g.current=!1;return}const x=p.current;p.current=h,r.draggable.update(h,x)},[h,r.draggable])}var s0=It.createContext(null);function om(e){const t=C.useContext(e);return t||ze(),t}function Y6(e){e.preventDefault()}const X6=e=>{const t=C.useRef(null),n=rt((R=null)=>{t.current=R},[]),r=rt(()=>t.current,[]),{contextId:i,dragHandleUsageInstructionsId:o,registry:a}=om(Vm),{type:c,droppableId:d}=om(s0),m=tn(()=>({id:e.draggableId,index:e.index,type:c,droppableId:d}),[e.draggableId,e.index,c,d]),{children:h,draggableId:p,isEnabled:g,shouldRespectForcePress:x,canDragInteractiveElements:v,isClone:k,mapped:S,dropAnimationFinished:b}=e;if(!k){const R=tn(()=>({descriptor:m,registry:a,getDraggableRef:r,canDragInteractiveElements:v,shouldRespectForcePress:x,isEnabled:g}),[m,a,r,v,x,g]);W6(R)}const w=tn(()=>g?{tabIndex:0,role:"button","aria-describedby":o,"data-rfd-drag-handle-draggable-id":p,"data-rfd-drag-handle-context-id":i,draggable:!1,onDragStart:Y6}:null,[i,o,p,g]),j=rt(R=>{S.type==="DRAGGING"&&S.dropping&&R.propertyName==="transform"&&Am.flushSync(b)},[b,S]),N=tn(()=>{const R=q6(S),L=S.type==="DRAGGING"&&S.dropping?j:void 0;return{innerRef:n,draggableProps:{"data-rfd-draggable-context-id":i,"data-rfd-draggable-id":p,style:R,onTransitionEnd:L},dragHandleProps:w}},[i,w,p,S,j,n]),O=tn(()=>({draggableId:m.id,type:m.type,source:{index:m.index,droppableId:m.droppableId}}),[m.droppableId,m.id,m.index,m.type]);return It.createElement(It.Fragment,null,h(N,S.snapshot,O))};var dN=(e,t)=>e===t,fN=e=>{const{combine:t,destination:n}=e;return n?n.droppableId:t?t.droppableId:null};const K6=e=>e.combine?e.combine.draggableId:null,Z6=e=>e.at&&e.at.type==="COMBINE"?e.at.combine.draggableId:null;function Q6(){const e=kr((i,o)=>({x:i,y:o})),t=kr((i,o,a=null,c=null,d=null)=>({isDragging:!0,isClone:o,isDropAnimating:!!d,dropAnimation:d,mode:i,draggingOver:a,combineWith:c,combineTargetFor:null})),n=kr((i,o,a,c,d=null,m=null,h=null)=>({mapped:{type:"DRAGGING",dropping:null,draggingOver:d,combineWith:m,mode:o,offset:i,dimension:a,forceShouldAnimate:h,snapshot:t(o,c,d,m,null)}}));return(i,o)=>{if(Cu(i)){if(i.critical.draggable.id!==o.draggableId)return null;const a=i.current.client.offset,c=i.dimensions.draggables[o.draggableId],d=di(i.impact),m=Z6(i.impact),h=i.forceShouldAnimate;return n(e(a.x,a.y),i.movementMode,c,o.isClone,d,m,h)}if(i.phase==="DROP_ANIMATING"){const a=i.completed;if(a.result.draggableId!==o.draggableId)return null;const c=o.isClone,d=i.dimensions.draggables[o.draggableId],m=a.result,h=m.mode,p=fN(m),g=K6(m),v={duration:i.dropDuration,curve:Zv.drop,moveTo:i.newHomeClientOffset,opacity:g?Su.opacity.drop:null,scale:g?Su.scale.drop:null};return{mapped:{type:"DRAGGING",offset:i.newHomeClientOffset,dimension:d,dropping:v,draggingOver:p,combineWith:g,mode:h,forceShouldAnimate:null,snapshot:t(h,c,p,g,v)}}}return null}}function mN(e=null){return{isDragging:!1,isDropAnimating:!1,isClone:!1,dropAnimation:null,mode:null,draggingOver:null,combineTargetFor:e,combineWith:null}}const J6={mapped:{type:"SECONDARY",offset:Sr,combineTargetFor:null,shouldAnimateDisplacement:!0,snapshot:mN(null)}};function e8(){const e=kr((a,c)=>({x:a,y:c})),t=kr(mN),n=kr((a,c=null,d)=>({mapped:{type:"SECONDARY",offset:a,combineTargetFor:c,shouldAnimateDisplacement:d,snapshot:t(c)}})),r=a=>a?n(Sr,a,!0):null,i=(a,c,d,m)=>{const h=d.displaced.visible[a],p=!!(m.inVirtualList&&m.effected[a]),g=Bm(d),x=g&&g.draggableId===a?c:null;if(!h){if(!p)return r(x);if(d.displaced.invisible[a])return null;const S=Bl(m.displacedBy.point),b=e(S.x,S.y);return n(b,x,!0)}if(p)return r(x);const v=d.displacedBy.point,k=e(v.x,v.y);return n(k,x,h.shouldAnimate)};return(a,c)=>{if(Cu(a))return a.critical.draggable.id===c.draggableId?null:i(c.draggableId,a.critical.draggable.id,a.impact,a.afterCritical);if(a.phase==="DROP_ANIMATING"){const d=a.completed;return d.result.draggableId===c.draggableId?null:i(c.draggableId,d.result.draggableId,d.impact,d.afterCritical)}return null}}const t8=()=>{const e=Q6(),t=e8();return(r,i)=>e(r,i)||t(r,i)||J6},n8={dropAnimationFinished:qE},r8=gE(t8,n8,null,{context:n0,areStatePropsEqual:dN})(X6);function pN(e){return om(s0).isUsingCloneFor===e.draggableId&&!e.isClone?null:It.createElement(r8,e)}function i8(e){const t=typeof e.isDragDisabled=="boolean"?!e.isDragDisabled:!0,n=!!e.disableInteractiveElementBlocking,r=!!e.shouldRespectForcePress;return It.createElement(pN,tm({},e,{isClone:!1,isEnabled:t,canDragInteractiveElements:n,shouldRespectForcePress:r}))}const hN=e=>t=>e===t,s8=hN("scroll"),o8=hN("auto"),GS=(e,t)=>t(e.overflowX)||t(e.overflowY),a8=e=>{const t=window.getComputedStyle(e),n={overflowX:t.overflowX,overflowY:t.overflowY};return GS(n,s8)||GS(n,o8)},l8=()=>!1,gN=e=>e==null?null:e===document.body?l8()?e:null:e===document.documentElement?null:a8(e)?e:gN(e.parentElement);var Wx=e=>({x:e.scrollLeft,y:e.scrollTop});const yN=e=>e?window.getComputedStyle(e).position==="fixed"?!0:yN(e.parentElement):!1;var c8=e=>{const t=gN(e),n=yN(e);return{closestScrollable:t,isFixedOnPage:n}},u8=({descriptor:e,isEnabled:t,isCombineEnabled:n,isFixedOnPage:r,direction:i,client:o,page:a,closest:c})=>{const d=(()=>{if(!c)return null;const{scrollSize:g,client:x}=c,v=XE({scrollHeight:g.scrollHeight,scrollWidth:g.scrollWidth,height:x.paddingBox.height,width:x.paddingBox.width});return{pageMarginBox:c.page.marginBox,frameClient:x,scrollSize:g,shouldClipSubject:c.shouldClipSubject,scroll:{initial:c.scroll,current:c.scroll,max:v,diff:{value:Sr,displacement:Sr}}}})(),m=i==="vertical"?Uv:NE,h=bl({page:a,withPlaceholder:null,axis:m,frame:d});return{descriptor:e,isCombineEnabled:n,isFixedOnPage:r,axis:m,isEnabled:t,client:o,page:a,frame:d,subject:h}};const d8=(e,t)=>{const n=xE(e);if(!t||e!==t)return n;const r=n.paddingBox.top-t.scrollTop,i=n.paddingBox.left-t.scrollLeft,o=r+t.scrollHeight,a=i+t.scrollWidth,d=$v({top:r,right:a,bottom:o,left:i},n.border);return Hv({borderBox:d,margin:n.margin,border:n.border,padding:n.padding})};var f8=({ref:e,descriptor:t,env:n,windowScroll:r,direction:i,isDropDisabled:o,isCombineEnabled:a,shouldClipSubject:c})=>{const d=n.closestScrollable,m=d8(e,d),h=em(m,r),p=(()=>{if(!d)return null;const x=xE(d),v={scrollHeight:d.scrollHeight,scrollWidth:d.scrollWidth};return{client:x,page:em(x,r),scroll:Wx(d),scrollSize:v,shouldClipSubject:c}})();return u8({descriptor:t,isEnabled:!o,isCombineEnabled:a,isFixedOnPage:n.isFixedOnPage,direction:i,client:m,page:h,closest:p})};const m8={passive:!1},p8={passive:!0};var WS=e=>e.shouldPublishImmediately?m8:p8;const lf=e=>e&&e.env.closestScrollable||null;function h8(e){const t=C.useRef(null),n=om(Vm),r=r0("droppable"),{registry:i,marshal:o}=n,a=iN(e),c=tn(()=>({id:e.droppableId,type:e.type,mode:e.mode}),[e.droppableId,e.mode,e.type]),d=C.useRef(c),m=tn(()=>kr((N,O)=>{t.current||ze();const R={x:N,y:O};o.updateDroppableScroll(c.id,R)}),[c.id,o]),h=rt(()=>{const N=t.current;return!N||!N.env.closestScrollable?Sr:Wx(N.env.closestScrollable)},[]),p=rt(()=>{const N=h();m(N.x,N.y)},[h,m]),g=tn(()=>vu(p),[p]),x=rt(()=>{const N=t.current,O=lf(N);if(N&&O||ze(),N.scrollOptions.shouldPublishImmediately){p();return}g()},[g,p]),v=rt((N,O)=>{t.current&&ze();const R=a.current,L=R.getDroppableRef();L||ze();const I=c8(L),D={ref:L,descriptor:c,env:I,scrollOptions:O};t.current=D;const M=f8({ref:L,descriptor:c,env:I,windowScroll:N,direction:R.direction,isDropDisabled:R.isDropDisabled,isCombineEnabled:R.isCombineEnabled,shouldClipSubject:!R.ignoreContainerClipping}),A=I.closestScrollable;return A&&(A.setAttribute(HS.contextId,n.contextId),A.addEventListener("scroll",x,WS(D.scrollOptions))),M},[n.contextId,c,x,a]),k=rt(()=>{const N=t.current,O=lf(N);return N&&O||ze(),Wx(O)},[]),S=rt(()=>{const N=t.current;N||ze();const O=lf(N);t.current=null,O&&(g.cancel(),O.removeAttribute(HS.contextId),O.removeEventListener("scroll",x,WS(N.scrollOptions)))},[x,g]),b=rt(N=>{const O=t.current;O||ze();const R=lf(O);R||ze(),R.scrollTop+=N.y,R.scrollLeft+=N.x},[]),w=tn(()=>({getDimensionAndWatchScroll:v,getScrollWhileDragging:k,dragStopped:S,scroll:b}),[S,v,k,b]),j=tn(()=>({uniqueId:r,descriptor:c,callbacks:w}),[w,c,r]);fi(()=>(d.current=j.descriptor,i.droppable.register(j),()=>{t.current&&S(),i.droppable.unregister(j)}),[w,c,S,j,o,i.droppable]),fi(()=>{t.current&&o.updateDroppableIsEnabled(d.current.id,!e.isDropDisabled)},[e.isDropDisabled,o]),fi(()=>{t.current&&o.updateDroppableIsCombineEnabled(d.current.id,e.isCombineEnabled)},[e.isCombineEnabled,o])}function Dg(){}const YS={width:0,height:0,margin:kD},g8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>e||n==="close"?YS:{height:t.client.borderBox.height,width:t.client.borderBox.width,margin:t.client.margin},y8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>{const r=g8({isAnimatingOpenOnMount:e,placeholder:t,animate:n});return{display:t.display,boxSizing:"border-box",width:r.width,height:r.height,marginTop:r.margin.top,marginRight:r.margin.right,marginBottom:r.margin.bottom,marginLeft:r.margin.left,flexShrink:"0",flexGrow:"0",pointerEvents:"none",transition:n!=="none"?lu.placeholder:null}},x8=e=>{const t=C.useRef(null),n=rt(()=>{t.current&&(clearTimeout(t.current),t.current=null)},[]),{animate:r,onTransitionEnd:i,onClose:o,contextId:a}=e,[c,d]=C.useState(e.animate==="open");C.useEffect(()=>c?r!=="open"?(n(),d(!1),Dg):t.current?Dg:(t.current=setTimeout(()=>{t.current=null,d(!1)}),n):Dg,[r,c,n]);const m=rt(p=>{p.propertyName==="height"&&(i(),r==="close"&&o())},[r,o,i]),h=y8({isAnimatingOpenOnMount:c,animate:e.animate,placeholder:e.placeholder});return It.createElement(e.placeholder.tagName,{style:h,"data-rfd-placeholder-context-id":a,onTransitionEnd:m,ref:e.innerRef})};var v8=It.memo(x8);class b8 extends It.PureComponent{constructor(...t){super(...t),this.state={isVisible:!!this.props.on,data:this.props.on,animate:this.props.shouldAnimate&&this.props.on?"open":"none"},this.onClose=()=>{this.state.animate==="close"&&this.setState({isVisible:!1})}}static getDerivedStateFromProps(t,n){return t.shouldAnimate?t.on?{isVisible:!0,data:t.on,animate:"open"}:n.isVisible?{isVisible:!0,data:n.data,animate:"close"}:{isVisible:!1,animate:"close",data:null}:{isVisible:!!t.on,data:t.on,animate:"none"}}render(){if(!this.state.isVisible)return null;const t={onClose:this.onClose,data:this.state.data,animate:this.state.animate};return this.props.children(t)}}const _8=e=>{const t=C.useContext(Vm);t||ze();const{contextId:n,isMovementAllowed:r}=t,i=C.useRef(null),o=C.useRef(null),{children:a,droppableId:c,type:d,mode:m,direction:h,ignoreContainerClipping:p,isDropDisabled:g,isCombineEnabled:x,snapshot:v,useClone:k,updateViewportMaxScroll:S,getContainerForClone:b}=e,w=rt(()=>i.current,[]),j=rt((A=null)=>{i.current=A},[]);rt(()=>o.current,[]);const N=rt((A=null)=>{o.current=A},[]),O=rt(()=>{r()&&S({maxScroll:ZE()})},[r,S]);h8({droppableId:c,type:d,mode:m,direction:h,isDropDisabled:g,isCombineEnabled:x,ignoreContainerClipping:p,getDroppableRef:w});const R=tn(()=>It.createElement(b8,{on:e.placeholder,shouldAnimate:e.shouldAnimatePlaceholder},({onClose:A,data:$,animate:W})=>It.createElement(v8,{placeholder:$,onClose:A,innerRef:N,animate:W,contextId:n,onTransitionEnd:O})),[n,O,e.placeholder,e.shouldAnimatePlaceholder,N]),L=tn(()=>({innerRef:j,placeholder:R,droppableProps:{"data-rfd-droppable-id":c,"data-rfd-droppable-context-id":n}}),[n,c,R,j]),I=k?k.dragging.draggableId:null,D=tn(()=>({droppableId:c,type:d,isUsingCloneFor:I}),[c,I,d]);function M(){if(!k)return null;const{dragging:A,render:$}=k,W=It.createElement(pN,{draggableId:A.draggableId,index:A.source.index,isClone:!0,isEnabled:!0,shouldRespectForcePress:!1,canDragInteractiveElements:!0},(B,V)=>$(B,V,A));return m4.createPortal(W,b())}return It.createElement(s0.Provider,{value:D},a(L,v),M())};function k8(){return document.body||ze(),document.body}const XS={mode:"standard",type:"DEFAULT",direction:"vertical",isDropDisabled:!1,isCombineEnabled:!1,ignoreContainerClipping:!1,renderClone:null,getContainerForClone:k8},xN=e=>{let t={...e},n;for(n in XS)e[n]===void 0&&(t={...t,[n]:XS[n]});return t},Og=(e,t)=>e===t.droppable.type,KS=(e,t)=>t.draggables[e.draggable.id],S8=()=>{const e={placeholder:null,shouldAnimatePlaceholder:!0,snapshot:{isDraggingOver:!1,draggingOverWith:null,draggingFromThisWith:null,isUsingPlaceholder:!1},useClone:null},t={...e,shouldAnimatePlaceholder:!1},n=kr(o=>({draggableId:o.id,type:o.type,source:{index:o.index,droppableId:o.droppableId}})),r=kr((o,a,c,d,m,h)=>{const p=m.descriptor.id;if(m.descriptor.droppableId===o){const v=h?{render:h,dragging:n(m.descriptor)}:null,k={isDraggingOver:c,draggingOverWith:c?p:null,draggingFromThisWith:p,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!1,snapshot:k,useClone:v}}if(!a)return t;if(!d)return e;const x={isDraggingOver:c,draggingOverWith:p,draggingFromThisWith:null,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!0,snapshot:x,useClone:null}});return(o,a)=>{const c=xN(a),d=c.droppableId,m=c.type,h=!c.isDropDisabled,p=c.renderClone;if(Cu(o)){const g=o.critical;if(!Og(m,g))return t;const x=KS(g,o.dimensions),v=di(o.impact)===d;return r(d,h,v,v,x,p)}if(o.phase==="DROP_ANIMATING"){const g=o.completed;if(!Og(m,g.critical))return t;const x=KS(g.critical,o.dimensions);return r(d,h,fN(g.result)===d,di(g.impact)===d,x,p)}if(o.phase==="IDLE"&&o.completed&&!o.shouldFlush){const g=o.completed;if(!Og(m,g.critical))return t;const x=di(g.impact)===d,v=!!(g.impact.at&&g.impact.at.type==="COMBINE"),k=g.critical.droppable.id===d;return x?v?e:t:k?e:t}return t}},w8={updateViewportMaxScroll:DO},C8=gE(S8,w8,(e,t,n)=>({...xN(n),...e,...t}),{context:n0,areStatePropsEqual:dN})(_8),am={urgent:{label:"Urgent",color:"var(--red)",symbol:"▲▲"},high:{label:"High",color:"var(--yellow)",symbol:"▲"},medium:{label:"Medium",color:"var(--accent)",symbol:"■"},low:{label:"Low",color:"var(--text-secondary)",symbol:"▽"}},lm={idle:"Idle",reflecting:"Thinking...",tool_active:"Running tool"};function o0(e){const t=(e??"").trim();return t?t.replace(/[_-]+/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function Sl(e){const t=(e.workItemRoleName??"").trim();return t||o0(e.workItemRoleId)}function j8(e){return(e.employeeAssignment?.name??"").trim()}function Lg(e){const t=Sl(e),n=j8(e);return t&&n?`${t} · ${n}`:t||n}function cl(e){return typeof e=="string"?e.trim():""}function go(e){if(!e)return"";const t=e;return cl(t.executionTurnId)||cl(t.runtimeTaskId)||cl(t.taskId)}function qm(e){return cl(e?.workItemId)?cl(e?.executionTurnId)||cl(e?.runtimeTaskId):""}const E8={todo:{label:"To do",color:"#9ca3af"},in_progress:{label:"In progress",color:"#f59e0b"},in_review:{label:"In review",color:"#fbbf24"},done:{label:"Done",color:"#34d399"},running:{label:"Running",color:"#34d399"},idle:{label:"Idle",color:"#6366f1"},blocked:{label:"Blocked",color:"#f97316"},awaiting_peer:{label:"Awaiting",color:"#fbbf24"},awaiting_manager_review:{label:"Mgr Review",color:"#fbbf24"},awaiting_human:{label:"Human Review",color:"#fbbf24"},awaiting_review:{label:"In Review",color:"#fbbf24"},failed:{label:"Failed",color:"#ef4444"},cancelled:{label:"Cancelled",color:"#9ca3af"}};function N8({task:e,index:t,agents:n,officeMap:r,companyMode:i,isSelected:o,onClick:a,onStart:c}){const d=e.assigneeIds.map(R=>n.find(L=>L.agent_id===R)).filter(Boolean),m=e.priority?am[e.priority]:null,h=r&&d.length>1&&new Set(d.map(R=>r[R.agent_id]).filter(Boolean)).size>1,p=e.agentStatus&&e.agentStatus!=="idle",g=e.dependencies?.length??0,x=e.phase,v=!p&&x&&x!=="ready"?E8[x]??null:null,k=e.employeeAssignment,S=Sl(e),b=e.workItemGate,w=o0(e.managerRoleId),j=(e.blockedReason??"").trim(),N=(e.reworkFeedback??"").trim(),O=qm(e);return u.jsx(i8,{draggableId:e.id,index:t,isDragDisabled:!!i,children:(R,L)=>u.jsxs("div",{ref:R.innerRef,...R.draggableProps,...R.dragHandleProps,className:`kanban-card${L.isDragging?" is-dragging":""}${p?" is-active":""}${o?" is-selected":""}`,"data-task-id":e.id,onMouseUp:I=>{I.button===0&&!L.isDragging&&a(e)},children:[u.jsxs("div",{className:"kanban-card-top",children:[u.jsx("span",{className:"kanban-card-id",children:e.displayId}),v&&u.jsxs("span",{className:"kanban-status-badge",style:{color:v.color},children:[u.jsx("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:v.color,marginRight:3}}),v.label]}),g>0&&u.jsxs("span",{className:"kanban-dep-badge",title:`${g} upstream dep(s)`,children:[g," dep"]}),h&&u.jsx("span",{className:"kanban-cross-badge",title:"Cross-office",children:"⇄"}),c&&u.jsx("button",{className:"kanban-start-btn",title:i?"Start Work Item":"Start task",onClick:I=>{I.stopPropagation(),c(e.id)},children:"▶"})]}),u.jsx("p",{className:"kanban-card-title",children:e.title}),(S||k?.name||b?.type||e.originChannel||e.workItemProjectionId)&&u.jsxs("div",{className:"kanban-card-meta-row",children:[S&&u.jsx("span",{className:"kanban-meta-badge kanban-role-badge",title:`Role: ${S}`,children:S}),k?.name&&u.jsxs("span",{className:"kanban-meta-badge kanban-employee-badge",title:`Employee: ${k.name}${k.category?` (${k.category})`:""}`,children:[u.jsx("span",{className:"kanban-meta-icon",children:"👤"}),k.name]}),e.workItemProjectionId&&u.jsx("span",{className:"kanban-meta-badge kanban-projection-badge",title:`Projection: ${e.workItemProjectionId}`,children:e.workItemProjectionId}),b?.type&&u.jsxs("span",{className:`kanban-meta-badge kanban-gate-badge kanban-gate-${b.type}`,title:`Gate: ${b.type}${b.reviewerRole?` by ${b.reviewerRole}`:""}`,children:[b.type==="review"?"✉":b.type==="approval"?"✓":"✋",b.type]}),e.originChannel&&u.jsxs("span",{className:"kanban-meta-badge kanban-origin-badge",title:`Origin: ${e.originChannel}`,children:["#",e.originChannel]}),w&&u.jsx("span",{className:"kanban-meta-badge",title:`Manager: ${w}`,children:w})]}),(j||N||O)&&u.jsxs("div",{className:"kanban-card-tags",children:[j&&u.jsx("span",{className:"kanban-tag",children:j}),N&&u.jsx("span",{className:"kanban-tag",children:N}),O&&u.jsx("span",{className:"kanban-tag",title:`Execution Turn: ${O}`,children:"Runtime"})]}),p&&u.jsxs("div",{className:`kanban-card-runtime status-${e.agentStatus}`,children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{className:"kanban-runtime-label",children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:lm[e.agentStatus]??e.agentStatus})]}),e.tags.length>0&&u.jsx("div",{className:"kanban-card-tags",children:e.tags.slice(0,3).map(I=>u.jsx("span",{className:"kanban-tag",children:I},I))}),(m||d.length>0)&&u.jsxs("div",{className:"kanban-card-footer",children:[u.jsx("div",{className:"kanban-card-footer-left",children:m&&u.jsx("span",{className:"kanban-priority",style:{color:m.color},title:m.label,children:m.symbol})}),u.jsxs("div",{className:"kanban-assignee-group",children:[d.slice(0,3).map(I=>u.jsx("span",{className:"kanban-assignee-badge",title:I.name,children:I.name.charAt(0).toUpperCase()},I.agent_id)),d.length>3&&u.jsxs("span",{className:"kanban-assignee-badge kanban-assignee-more",children:["+",d.length-3]})]})]})]})})}function I8({column:e,tasks:t,agents:n,officeMap:r,companyMode:i,selectedTaskId:o,onCardClick:a,onStartTask:c,onQuickCreate:d}){const[m,h]=C.useState(!1),[p,g]=C.useState(""),x=C.useRef(!1),v=C.useCallback(()=>{if(x.current)return;x.current=!0;const k=p.trim();k&&d&&d(k),g(""),h(!1)},[p,d]);return u.jsxs("div",{className:"kanban-column",children:[u.jsxs("div",{className:"kanban-column-header",children:[u.jsx("span",{className:"kanban-col-dot",style:{background:e.color}}),u.jsx("span",{className:"kanban-col-label",children:e.name}),u.jsx("span",{className:"kanban-col-count",children:t.length}),d&&u.jsx("button",{className:"kanban-col-add",title:"Add task",onClick:()=>{x.current=!1,h(!0)},children:"+"})]}),m&&u.jsx("div",{className:"kanban-quick-add",children:u.jsx("input",{className:"kanban-quick-input",value:p,onChange:k=>g(k.target.value),onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),v()),k.key==="Escape"&&(x.current=!0,g(""),h(!1))},onBlur:v,placeholder:"Task title...",autoFocus:!0})}),u.jsx(C8,{droppableId:e.id,isDropDisabled:!!i,children:k=>u.jsxs("div",{ref:k.innerRef,...k.droppableProps,className:"kanban-col-body",children:[t.length===0&&!m&&u.jsx("div",{className:"kanban-empty",children:u.jsx("span",{className:"kanban-empty-icon",children:"·"})}),t.map((S,b)=>u.jsx(N8,{task:S,index:b,agents:n,officeMap:r,companyMode:i,isSelected:S.id===o,onClick:a,onStart:c},S.id)),k.placeholder]})})]})}function T8({columns:e,tasksByColumn:t,agents:n,officeMap:r,store:i,companyMode:o,selectedTaskId:a,onCardClick:c,onStartTask:d,onQuickCreate:m,onMoveTask:h}){const p=g=>{if(o||!g.destination)return;const x=g.source.droppableId,v=g.destination.droppableId;if(x!==v)return;const k=g.destination.index,S=g.draggableId,b=[...t[v]??[]].filter(j=>j.id!==S),w=(t[v]??[]).find(j=>j.id===S);w&&b.splice(k,0,w),b.forEach((j,N)=>{i.moveTask(j.id,v,N)})};return u.jsx(B6,{onDragEnd:p,children:u.jsx("div",{className:"kanban-board",children:e.map(g=>u.jsx(I8,{column:g,tasks:t[g.id]??[],agents:n,officeMap:r,companyMode:o,selectedTaskId:a,onCardClick:c,onStartTask:!o&&g.name==="Todo"?d:void 0,onQuickCreate:!o&&g.name==="Todo"?m:void 0},g.id))})})}function R8({agents:e,tasks:t}){const n=C.useMemo(()=>{const i=new Map(t.map(o=>[o.id,o]));return e.map(o=>{const a=t.find(d=>d.assigneeIds.includes(o.agent_id)&&d.agentStatus&&d.agentStatus!=="idle"),c=o.current_task_id?i.get(o.current_task_id):void 0;return{agent:o,status:a?.agentStatus??o.runtime_status??"idle",currentTool:a?.currentTool??o.current_tool,taskDisplayId:a?.displayId??c?.displayId}})},[e,t]);if(e.length===0)return null;const r=n.filter(i=>i.status!=="idle").length;return u.jsxs("div",{className:"agent-status-bar",children:[u.jsx("span",{className:"agent-status-summary",children:r>0?`${r}/${e.length} active`:`${e.length} agent${e.length!==1?"s":""}`}),u.jsx("div",{className:"agent-status-chips",children:n.map(({agent:i,status:o,currentTool:a,taskDisplayId:c})=>u.jsxs("div",{className:`agent-status-chip status-${o}`,title:`${i.name}: ${o==="tool_active"&&a?a:lm[o]}${c?` (${c})`:""}`,children:[u.jsx("span",{className:"agent-status-avatar",children:i.name.charAt(0).toUpperCase()}),u.jsx("span",{className:"agent-status-name",children:i.name}),o!=="idle"&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{className:"agent-status-detail",children:o==="tool_active"&&a?a:lm[o]})]}),c&&u.jsx("span",{className:"agent-status-task",children:c})]},i.agent_id))})]})}function A8({boards:e,activeBoardId:t,onSelect:n}){return u.jsx("div",{className:"board-selector",children:u.jsx("div",{className:"board-tabs",children:e.map(r=>u.jsxs("button",{className:`board-tab${r.id===t?" active":""}`,style:{"--board-color":r.color},onClick:()=>n(r.id),children:[u.jsx("span",{className:"board-tab-dot",style:{background:r.color}}),r.name]},r.id))})})}function Rr(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ds(e){return Array.isArray(e)?e.filter(Rr):[]}function wl(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function M8(e){return Rr(e)?{run_id:typeof e.run_id=="string"?e.run_id:void 0,status:typeof e.status=="string"?e.status:void 0,total_cells:typeof e.total_cells=="number"?e.total_cells:void 0,total_role_sessions:typeof e.total_role_sessions=="number"?e.total_role_sessions:void 0,total_work_items:typeof e.total_work_items=="number"?e.total_work_items:void 0,ready_count:typeof e.ready_count=="number"?e.ready_count:void 0,running_count:typeof e.running_count=="number"?e.running_count:void 0,blocked_count:typeof e.blocked_count=="number"?e.blocked_count:void 0,waiting_count:typeof e.waiting_count=="number"?e.waiting_count:void 0,done_count:typeof e.done_count=="number"?e.done_count:void 0,failed_count:typeof e.failed_count=="number"?e.failed_count:void 0}:{}}function D8(e){return{cell_id:String(e.cell_id??e.team_id??e.id??"").trim(),team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,team_id:typeof e.team_id=="string"?e.team_id:void 0,manager_role_id:String(e.manager_role_id??"").trim(),member_role_ids:wl(e.member_role_ids),seat_ids:wl(e.seat_ids),parent_team_id:typeof e.parent_team_id=="string"?e.parent_team_id:void 0,status:String(e.status??"idle"),is_final_decider_cell:typeof e.is_final_decider_cell=="boolean"?e.is_final_decider_cell:void 0}}function O8(e){return{role_session_id:String(e.role_session_id??e.id??"").trim(),role_id:String(e.role_id??"").trim(),employee_id:String(e.employee_id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,seat_id:typeof e.seat_id=="string"?e.seat_id:void 0,focused_work_item_id:typeof e.focused_work_item_id=="string"?e.focused_work_item_id:void 0,current_work_item_id:typeof e.current_work_item_id=="string"?e.current_work_item_id:void 0,background_work_item_ids:wl(e.background_work_item_ids),manager_role_ids:wl(e.manager_role_ids),manager_seat_id:typeof e.manager_seat_id=="string"?e.manager_seat_id:void 0,resident_status:typeof e.resident_status=="string"?e.resident_status:void 0,latest_notification:Rr(e.latest_notification)?e.latest_notification:void 0,manager_digest:Rr(e.manager_digest)?e.manager_digest:void 0,status:String(e.status??"cold")}}function L8(e){const t=Rr(e.metadata)?e.metadata:void 0,n=Rr(e.adaptive)?e.adaptive:t&&Rr(t.adaptive)?t.adaptive:void 0;return{work_item_id:String(e.work_item_id??e.id??"").trim(),role_id:String(e.role_id??"").trim(),cell_id:String(e.cell_id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,seat_id:typeof e.seat_id=="string"?e.seat_id:void 0,title:String(e.title??""),kind:String(e.kind??"execute"),phase:String(e.phase??"ready"),kanban_column:String(e.kanban_column??"todo"),batch_id:typeof e.batch_id=="string"?e.batch_id:void 0,batch_index:typeof e.batch_index=="number"?e.batch_index:void 0,deliverable_summary:typeof e.deliverable_summary=="string"?e.deliverable_summary:void 0,blocked_reason:typeof e.blocked_reason=="string"?e.blocked_reason:void 0,handoff_status:typeof e.handoff_status=="string"?e.handoff_status:void 0,parent_work_item_id:typeof e.parent_work_item_id=="string"?e.parent_work_item_id:void 0,work_item_projection_id:typeof e.work_item_projection_id=="string"?e.work_item_projection_id:void 0,metadata:t,adaptive:n}}function z8(e){if(Rr(e))return{run_id:typeof e.run_id=="string"?e.run_id:void 0,project_id:typeof e.project_id=="string"?e.project_id:void 0,session_id:typeof e.session_id=="string"?e.session_id:void 0,status:typeof e.status=="string"?e.status:void 0,lifecycle_status:typeof e.lifecycle_status=="string"?e.lifecycle_status:void 0,company_profile:typeof e.company_profile=="string"?e.company_profile:void 0,execution_model:typeof e.execution_model=="string"?e.execution_model:void 0,current_revision:typeof e.current_revision=="number"?e.current_revision:void 0,latest_deliverable_summary:typeof e.latest_deliverable_summary=="string"?e.latest_deliverable_summary:void 0,recovery_pointer:Rr(e.recovery_pointer)?e.recovery_pointer:void 0}}function P8(e){if(Rr(e))return{project_id:typeof e.project_id=="string"?e.project_id:void 0,run_id:typeof e.run_id=="string"?e.run_id:void 0,latest_deliverable_summary:typeof e.latest_deliverable_summary=="string"?e.latest_deliverable_summary:void 0,architecture_decisions:Ds(e.architecture_decisions),completed_work_items:Ds(e.completed_work_items),open_issues:wl(e.open_issues),verification_summary:typeof e.verification_summary=="string"?e.verification_summary:void 0,artifact_index:Ds(e.artifact_index),handoff_summaries:Ds(e.handoff_summaries),last_failure_summary:typeof e.last_failure_summary=="string"?e.last_failure_summary:void 0,project_memory_excerpt:typeof e.project_memory_excerpt=="string"?e.project_memory_excerpt:void 0,session_memory_excerpt:typeof e.session_memory_excerpt=="string"?e.session_memory_excerpt:void 0}}function B8(e){return{seat_id:String(e.seat_id??e.id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,role_id:typeof e.role_id=="string"?e.role_id:void 0,employee_id:typeof e.employee_id=="string"?e.employee_id:void 0,role_session_id:typeof e.role_session_id=="string"?e.role_session_id:void 0,resident_status:typeof e.resident_status=="string"?e.resident_status:void 0,current_work_item:Rr(e.current_work_item)?e.current_work_item:void 0,latest_notification:Rr(e.latest_notification)?e.latest_notification:void 0,manager_digest:Rr(e.manager_digest)?e.manager_digest:void 0}}function $8(e){return{link_id:typeof e.link_id=="string"?e.link_id:void 0,session_id:typeof e.session_id=="string"?e.session_id:void 0,linked_session_id:typeof e.linked_session_id=="string"?e.linked_session_id:void 0,link_type:typeof e.link_type=="string"?e.link_type:void 0,metadata:Rr(e.metadata)?e.metadata:void 0,created_at:typeof e.created_at=="string"?e.created_at:void 0}}function vN(e){const t=Rr(e)?e:{},n=Ds(t.runtime_teams).map(D8),r=Ds(t.runtime_seats).map(O8),i=Ds(t.work_items).map(L8);return{roles:Array.isArray(t.roles)?t.roles:[],employees:Array.isArray(t.employees)?t.employees:[],company_profile:typeof t.company_profile=="string"?t.company_profile:"",organization_id:typeof t.organization_id=="string"?t.organization_id:void 0,organization_name:typeof t.organization_name=="string"?t.organization_name:void 0,organization_config_file:typeof t.organization_config_file=="string"?t.organization_config_file:void 0,final_decider_role_id:typeof t.final_decider_role_id=="string"?t.final_decider_role_id:null,top_level_role_ids:wl(t.top_level_role_ids),runtime_teams:n,runtime_seats:r,work_items:i,frontier:M8(t.frontier),project_run:z8(t.project_run),project_dossier:P8(t.project_dossier),seat_digests:Ds(t.seat_digests).map(B8),revision_links:Ds(t.revision_links).map($8),project_recovery:Rr(t.project_recovery)?t.project_recovery:void 0,channels:Array.isArray(t.channels)?t.channels:[],connectors:Array.isArray(t.connectors)?t.connectors:[],org_version:typeof t.org_version=="number"?t.org_version:0,runtime_topology_version:typeof t.runtime_topology_version=="number"?t.runtime_topology_version:0,installed_packages:Array.isArray(t.installed_packages)?t.installed_packages:[],runtime_policy:Rr(t.runtime_policy)?t.runtime_policy:void 0}}function Gm(e){const t=vN(e);return{runtimeTeams:t.runtime_teams??[],runtimeSeats:t.runtime_seats??[],workItems:t.work_items??[],frontier:t.frontier??{},projectRun:t.project_run,projectDossier:t.project_dossier,seatDigests:t.seat_digests??[],revisionLinks:t.revision_links??[],projectRecovery:t.project_recovery}}function H8({state:e,message:t,onRefresh:n,onReadMessage:r,pollIntervalMs:i=3e4,embedded:o=!1}){const[a,c]=C.useState(null),d=C.useRef(n);d.current=n,C.useEffect(()=>{if(!i)return;d.current();const g=window.setInterval(()=>d.current(),i);return()=>window.clearInterval(g)},[i]);const m=C.useMemo(()=>e?.roles?e.roles.reduce((g,x)=>g+x.unread_count,0):0,[e?.roles]),h=g=>{c(g),r(g)},p=o?{fontSize:13,color:"var(--text)"}:{border:"1px solid var(--border, #333)",borderRadius:6,background:"var(--bg-primary, #1e1e1e)",fontSize:13};return u.jsxs("div",{className:"comms-panel",style:p,children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",borderBottom:"1px solid var(--border, #333)"},children:[u.jsx("span",{style:{fontWeight:600,fontSize:13,flex:1},children:"Agent Communications"}),m>0&&u.jsxs(ju,{color:"var(--accent, #3498db)",children:[m," unread"]}),u.jsx("button",{onClick:n,style:{background:"var(--surface, #2a2a2a)",border:"1px solid var(--border, #444)",color:"var(--text-secondary, #aaa)",fontSize:11,padding:"3px 10px",cursor:"pointer",borderRadius:4},children:"Refresh"})]}),e?e.available?e.empty?u.jsx(Lf,{children:"No communications yet. They will appear once agents start collaborating."}):u.jsx(F8,{state:e,selectedPath:a,onSelectMessage:h}):u.jsxs(Lf,{children:["Not available",e.reason?`: ${e.reason}`:""]}):u.jsx(Lf,{children:"Loading communications..."}),t&&u.jsx(q8,{message:t,onClose:()=>c(null)})]})}function F8({state:e,selectedPath:t,onSelectMessage:n}){const r=(e.roles?.length??0)>0,i=(e.meetings?.length??0)>0,o=(e.recent_failures?.length??0)>0;return u.jsxs("div",{style:{padding:"4px 0"},children:[o&&u.jsx(zg,{title:"Failures",children:(e.recent_failures||[]).map((a,c)=>u.jsxs("div",{style:{padding:"6px 12px",marginBottom:4,background:"color-mix(in srgb, var(--red, #e74c3c) 6%, transparent)",borderLeft:"3px solid var(--red, #e74c3c)"},children:[u.jsxs("div",{style:{fontWeight:600,fontSize:12},children:[a.operation," · ",a.from_role," → ",a.to_role]}),u.jsx("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:2},children:a.reason})]},`${a.recorded_at||"f"}-${c}`))}),r&&u.jsx(zg,{title:`Inboxes (${e.roles.length})`,children:e.roles.map(a=>u.jsx(V8,{role:a,selectedPath:t,onSelectMessage:n},a.role_id))}),i&&u.jsx(zg,{title:"Meetings",children:(e.meetings||[]).map(a=>u.jsxs("div",{style:{padding:"6px 12px",marginBottom:4,borderLeft:`3px solid ${a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)"}`},children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[u.jsx(ju,{color:a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)",children:a.status}),u.jsx("strong",{style:{fontSize:12,flex:1},children:a.topic}),u.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #888)"},children:[a.entry_count," entries"]})]}),u.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:3},children:["by ",a.organizer," · ",a.participants.join(", ")]}),a.decision&&u.jsxs("div",{style:{fontSize:11,marginTop:3,color:"var(--green, #27ae60)"},children:["Decision: ",a.decision]})]},a.meeting_id))}),!r&&!i&&!o&&u.jsx(Lf,{children:"No communication activity yet."})]})}function V8({role:e,selectedPath:t,onSelectMessage:n}){const[r,i]=C.useState(!0),o=e.unread_count>0||(e.recent_seen?.length??0)>0||(e.recent_outbox?.length??0)>0,[a,c]=C.useState(e.unread_count>0?"unread":"history"),d=C.useMemo(()=>{switch(a){case"unread":return e.recent_unread||[];case"history":return e.recent_seen||[];case"sent":return e.recent_outbox||[];default:return[]}},[a,e.recent_unread,e.recent_seen,e.recent_outbox]),m=e.role_id.replace(/_/g," ").replace(/\b\w/g,h=>h.toUpperCase());return u.jsxs("div",{style:{marginBottom:2},children:[u.jsxs("div",{onClick:()=>i(h=>!h),style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",cursor:"pointer",userSelect:"none",background:r?"var(--surface-hover, rgba(255,255,255,0.03))":"transparent",borderRadius:4},children:[u.jsx("span",{style:{fontSize:10,width:10},children:r?"▼":"▶"}),u.jsx("span",{style:{flex:1,fontWeight:600,fontSize:12},children:m}),e.has_blocking&&u.jsx(ju,{color:"var(--red, #e74c3c)",children:"BLOCKING"}),e.unread_count>0&&u.jsxs(ju,{color:"var(--accent, #3498db)",children:[e.unread_count," new"]}),u.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #666)"},children:[e.seen_count," read · ",e.outbox_count," sent"]})]}),r&&o&&u.jsxs("div",{style:{paddingLeft:12},children:[u.jsxs("div",{style:{display:"flex",gap:2,padding:"4px 0",borderBottom:"1px solid var(--border, #333)",marginBottom:4},children:[u.jsxs(Pg,{active:a==="unread",onClick:()=>c("unread"),children:["Unread (",e.unread_count,")"]}),u.jsxs(Pg,{active:a==="history",onClick:()=>c("history"),children:["Read (",e.recent_seen?.length??0,")"]}),u.jsxs(Pg,{active:a==="sent",onClick:()=>c("sent"),children:["Sent (",e.recent_outbox?.length??0,")"]})]}),d.length===0?u.jsx("div",{style:{padding:"8px 0",fontSize:11,color:"var(--text-dim, #666)"},children:"No messages."}):u.jsx("div",{style:{maxHeight:280,overflow:"auto"},children:d.map(h=>u.jsx(U8,{message:h,selected:h.path===t,onClick:()=>n(h.path)},h.message_id))})]})]})}function U8({message:e,selected:t,onClick:n}){const i=e.bucket==="sent"?`To: ${e.to||"?"}`:`From: ${e.from}`;return u.jsx("div",{onClick:n,style:{padding:"5px 8px",marginBottom:2,background:t?"var(--accent-soft, #2c4a6b)":"transparent",cursor:"pointer",borderRadius:4,borderLeft:e.blocking?"3px solid var(--red, #e74c3c)":"3px solid transparent",transition:"background 0.1s"},children:u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[u.jsxs("span",{style:{fontSize:11,color:"var(--text-secondary, #aaa)",minWidth:0,flex:1},children:[u.jsx("strong",{children:i})," ",u.jsx("span",{style:{color:"var(--text, #ddd)"},children:e.subject})]}),e.blocking&&u.jsx("span",{style:{fontSize:9,color:"var(--red, #e74c3c)",fontWeight:700},children:"BLK"}),u.jsx("span",{style:{fontSize:10,color:"var(--text-dim, #666)",flexShrink:0},children:e.sent_at?.slice(11,19)||""})]})})}function q8({message:e,onClose:t}){return u.jsxs("div",{style:{margin:"8px 12px 12px",padding:12,border:"1px solid var(--border, #444)",borderRadius:6,background:"var(--bg-secondary, #262626)",maxHeight:400,overflow:"auto"},children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[u.jsx("strong",{style:{flex:1,fontSize:13},children:e.header.subject||"(no subject)"}),u.jsx("button",{onClick:t,style:{background:"var(--surface, #333)",border:"1px solid var(--border, #444)",color:"var(--text-secondary, #aaa)",fontSize:11,padding:"2px 10px",cursor:"pointer",borderRadius:4},children:"Close"})]}),u.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginBottom:8,display:"flex",gap:8,flexWrap:"wrap"},children:[u.jsxs("span",{children:["From: ",u.jsx("strong",{children:e.header.from||"?"})]}),u.jsxs("span",{children:["To: ",u.jsx("strong",{children:e.header.to||"?"})]}),u.jsx("span",{children:e.header.sent_at||""}),e.header.blocking&&u.jsx(ju,{color:"var(--red, #e74c3c)",children:"BLOCKING"})]}),u.jsx("pre",{style:{margin:0,fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"var(--text, #ddd)",lineHeight:1.5},children:e.body})]})}function zg({title:e,children:t}){return u.jsxs("div",{style:{marginBottom:4},children:[u.jsx("div",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:.6,fontWeight:700,color:"var(--text-dim, #777)",padding:"8px 12px 4px"},children:e}),t]})}function ju({color:e,children:t}){return u.jsx("span",{style:{background:e,color:"white",borderRadius:10,padding:"1px 7px",fontSize:10,fontWeight:600,whiteSpace:"nowrap"},children:t})}function Pg({active:e,onClick:t,children:n}){return u.jsx("button",{onClick:t,style:{background:e?"var(--accent-soft, #2c4a6b)":"transparent",border:"none",color:e?"var(--text, #ddd)":"var(--text-secondary, #999)",fontSize:11,padding:"3px 10px",cursor:"pointer",borderRadius:4,fontWeight:e?600:400},children:n})}function Lf({children:e}){return u.jsx("div",{style:{padding:"20px 16px",fontSize:12,color:"var(--text-secondary, #888)",textAlign:"center"},children:e})}function Ya(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Xa(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object"&&!Array.isArray(t)):[]}function Ei(e,t="Pending"){return String(e??"").trim()||t}function Hc(e,t="Team"){const n=String(e??"").trim();return n?n.replace(/[_-]+/g," ").replace(/\b\w/g,r=>r.toUpperCase()):t}function ZS(e){return Ei(e,"idle").toLowerCase().replace(/[\s_]+/g,"-")}function G8({orgInfoData:e,recoveryStatus:t,commsState:n,onStopRun:r,embedded:i=!1}){const o=C.useMemo(()=>Gm(e??null),[e]),a=o.projectRun,c=o.seatDigests,d=c.reduce((b,w)=>{const j=Ya(w.manager_digest);return b+Xa(j.pending_decisions).length},0),m=c.reduce((b,w)=>b+Xa(Ya(w.manager_digest).actionable_chat).length,0),h=c.reduce((b,w)=>b+Xa(Ya(w.manager_digest).protocol_backlog).length,0),p=c.reduce((b,w)=>b+Xa(Ya(w.manager_digest).notification_backlog).length,0),g=m+h+p,x=Array.isArray(t?.interrupted)?t.interrupted.length:0,v=[{label:"Actionable",value:m},{label:"Protocol",value:h},{label:"Notifications",value:p},{label:"Meetings",value:n?.meetings?.length??0},{label:"Failures",value:n?.recent_failures?.length??0}],k=C.useMemo(()=>{const b=new Map;for(const N of c){const O=String(N.seat_id??"").trim();O&&b.set(O,Ya(N.manager_digest))}const w=o.runtimeTeams.map(N=>{const O=[String(N.cell_id??"").trim(),String(N.team_id??"").trim(),String(N.team_instance_id??"").trim()].filter(Boolean),R=o.runtimeSeats.filter(D=>O.includes(String(D.team_id??"").trim())||O.includes(String(D.team_instance_id??"").trim())),L=R.reduce((D,M)=>{const A=b.get(String(M.seat_id??"").trim())??{};return D+Xa(A.pending_decisions).length},0),I=R.map(D=>Ei(D.latest_notification?.subject??D.latest_notification?.summary,"")).find(Boolean);return{key:String(N.cell_id??N.team_id??N.team_instance_id??N.manager_role_id??"team"),label:Hc(N.team_id??N.cell_id,"Team"),managerLabel:Hc(N.manager_role_id,"Unassigned manager"),status:Ei(N.status,"idle"),seatCount:R.length||N.member_role_ids.length,pendingApprovals:L,latestAlert:I,seats:R.map(D=>({key:String(D.seat_id??D.role_session_id??D.role_id),roleLabel:Hc(D.role_id,"Seat"),seatLabel:Ei(D.seat_id??D.role_session_id,"Seat"),status:Ei(D.resident_status??D.status,"idle")}))}}),j=new Set(w.flatMap(N=>N.seats.map(O=>O.key)));for(const N of o.runtimeSeats){const O=String(N.seat_id??N.role_session_id??N.role_id).trim();if(!O||j.has(O))continue;const R=String(N.team_id??N.team_instance_id??"unassigned").trim()||"unassigned";let L=w.find(D=>D.key===R);L||(L={key:R,label:Hc(R,"Unassigned Team"),managerLabel:"Unassigned manager",status:Ei(N.status,"idle"),seatCount:0,pendingApprovals:0,seats:[]},w.push(L));const I=b.get(String(N.seat_id??"").trim())??{};L.pendingApprovals+=Xa(I.pending_decisions).length,L.latestAlert||(L.latestAlert=Ei(N.latest_notification?.subject??N.latest_notification?.summary,"")),L.seats.push({key:O,roleLabel:Hc(N.role_id,"Seat"),seatLabel:Ei(N.seat_id??N.role_session_id,"Seat"),status:Ei(N.resident_status??N.status,"idle")}),L.seatCount=L.seats.length}return w.sort((N,O)=>N.label.localeCompare(O.label))},[o.runtimeTeams,o.runtimeSeats,c]),S=k.map(b=>b.latestAlert).find(Boolean)||"No current alerts";return!a?.run_id&&k.length===0?null:u.jsxs("section",{className:`project-cockpit${i?" embedded":""}`,"aria-label":"Team",children:[u.jsxs("div",{className:"project-cockpit-overview",children:[u.jsxs("div",{className:"project-cockpit-title",children:[u.jsx("span",{className:"project-cockpit-label",children:"Team"}),u.jsx("strong",{children:Ei(a?.run_id,"Runtime Team Status")}),r&&u.jsx("button",{className:"project-cockpit-stop-btn",onClick:r,title:"Stop this run",children:"Stop"})]}),u.jsxs("div",{className:"project-cockpit-metrics",children:[u.jsx("span",{children:Ei(a?.lifecycle_status,"active")}),u.jsxs("span",{children:["Teams ",k.length]}),u.jsxs("span",{children:["Seats ",o.runtimeSeats.length]}),u.jsxs("span",{children:["Approvals ",d]}),u.jsxs("span",{children:["Unread ",g]}),u.jsxs("span",{children:["Recovery ",x>0?`${x} interrupted`:Ei(Ya(a?.recovery_pointer).status,"clean")]})]})]}),u.jsxs("div",{className:"project-cockpit-grid project-cockpit-grid--team",children:[u.jsxs("section",{className:"project-cockpit-panel",children:[u.jsxs("header",{children:[u.jsx("h3",{children:"Communication"}),u.jsx("span",{children:v.length})]}),u.jsxs("div",{className:"project-cockpit-summary",children:[v.map(b=>u.jsxs("span",{children:[b.label," ",b.value]},b.label)),u.jsx("div",{className:"project-cockpit-inline-text",children:S})]})]}),u.jsxs("section",{className:"project-cockpit-panel project-cockpit-panel--wide",children:[u.jsxs("header",{children:[u.jsx("h3",{children:"Teams"}),u.jsx("span",{children:k.length})]}),u.jsx("div",{className:"project-cockpit-team-grid",children:k.map(b=>u.jsxs("article",{className:"project-cockpit-team-card",children:[u.jsxs("div",{className:"project-cockpit-team-head",children:[u.jsxs("div",{className:"project-cockpit-team-title",children:[u.jsx("strong",{children:b.label}),u.jsx("span",{children:b.managerLabel})]}),u.jsx("span",{className:`project-cockpit-team-status status-${ZS(b.status)}`,children:b.status})]}),u.jsxs("div",{className:"project-cockpit-team-meta",children:[u.jsxs("span",{children:["Seats ",b.seatCount]}),u.jsxs("span",{children:["Approvals ",b.pendingApprovals]}),b.latestAlert&&u.jsx("span",{children:b.latestAlert})]}),u.jsx("div",{className:"project-cockpit-seat-list",children:b.seats.length>0?b.seats.map(w=>u.jsxs("div",{className:"project-cockpit-seat-row",children:[u.jsx("span",{className:"project-cockpit-seat-role",children:w.roleLabel}),u.jsx("span",{className:"project-cockpit-seat-id",children:w.seatLabel}),u.jsx("span",{className:`project-cockpit-seat-status status-${ZS(w.status)}`,children:w.status})]},w.key)):u.jsx("div",{className:"project-cockpit-inline-text",children:"No seats assigned yet"})})]},b.key))})]})]})]})}function W8(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:`${Math.floor(t/864e5)}d ago`}const QS={running:{color:"var(--green)",label:"Running"},idle:{color:"var(--accent)",label:"Idle"},done:{color:"var(--green)",label:"Done"},pending:{color:"var(--text-secondary)",label:"Pending"},failed:{color:"var(--red)",label:"Failed"},cancelled:{color:"var(--text-secondary)",label:"Cancelled"},blocked:{color:"var(--yellow)",label:"Blocked"},awaiting_human:{color:"var(--yellow)",label:"Waiting for review"},awaiting_manager_review:{color:"var(--yellow)",label:"Manager review"},awaiting_review:{color:"var(--yellow)",label:"Waiting for review"},awaiting_peer:{color:"var(--yellow)",label:"Waiting for peer"}},Y8=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]),JS={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function X8({session:e,agents:t,onTitleChange:n,onViewOnBoard:r,onStop:i,onComplete:o,onResume:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(e.title),p=C.useRef(null);C.useEffect(()=>{c||h(e.title)},[e.title,c]);const g=C.useCallback(()=>{const G=m.trim();G&&G!==e.title?n(e.taskId,G):h(e.title),d(!1)},[m,e.title,e.taskId,n]),x=C.useCallback(()=>{h(e.title),d(!0),setTimeout(()=>p.current?.select(),0)},[e.title]),v=e.assigneeIds.map(G=>t.find(J=>J.agent_id===G)).filter(Boolean),k=String(e.execMode??"").trim().toLowerCase(),S=k==="company"||k==="org"||k==="custom"||!!e.isCompanyRuntime||!!e.workItemProjectionId||!!e.workItemRoleId||!!e.workItemRoleName,b=v.length>0&&!S,w=e.runtimeControlState??(e.status==="running"?"running":"idle"),j=w==="suspending",N=w==="resuming",O=w==="suspended",R=e.status==="running"&&!j&&!O&&!N,L=Y8.has(e.status),I=(e.canStop??e.status==="running")&&!j&&!O&&!N,D=(e.canResume??(O||!L&&!R&&e.status!=="done"&&e.status!=="pending"))&&!j&&!N,M=QS[e.status]??QS.pending,A=j?"Stopping":O?"Suspended":N?"Resuming":M.label,$=Sl(e),W=zm(e),B=os(e),V=e.displayTool||e.currentTool,[H,U]=C.useState(V||void 0);C.useEffect(()=>{if(!R){U(void 0);return}V&&U(V)},[R,V]);const Y=typeof e.pendingPermissionCount=="number"&&e.pendingPermissionCount>0,Q=Y,q=j?"var(--yellow)":O?"var(--text-secondary)":W==="tool_active"?"var(--green)":W==="reflecting"?"var(--yellow)":M.color;return u.jsxs("div",{className:"task-header-shell",children:[u.jsxs("div",{className:"task-header-bar",children:[u.jsxs("div",{className:"task-header-left",children:[c?u.jsx("input",{ref:p,className:"task-title-input",value:m,onChange:G=>h(G.target.value),onBlur:g,onKeyDown:G=>{G.key==="Enter"&&g(),G.key==="Escape"&&(h(e.title),d(!1))}}):u.jsx("span",{className:"task-title",onClick:x,title:"Click to edit",children:e.title}),u.jsxs("span",{className:"task-status-pill","data-status":e.status,"data-working":B?"true":"false",children:[u.jsx("span",{className:"task-status-dot",style:{background:q}}),A]}),R&&H&&u.jsxs("span",{className:"task-tool-pill",children:[u.jsx(Mm,{}),u.jsx("code",{children:H}),e.currentTool&&typeof e.toolElapsedMs=="number"&&e.toolElapsedMs>0&&u.jsxs("span",{children:[e.toolElapsedMs,"ms"]})]}),e.lastToolSummary&&u.jsx("span",{className:"task-projection-pill",title:e.lastToolSummary,children:e.lastToolSummary.slice(0,48)}),$&&u.jsx("span",{className:"task-role-pill",title:`Role: ${$}`,children:$}),e.employeeAssignment?.name&&u.jsxs("span",{className:"task-employee-pill",title:`Employee: ${e.employeeAssignment.name}${e.employeeAssignment.category?` (${e.employeeAssignment.category})`:""}`,children:[u.jsx("span",{className:"task-employee-icon",children:"👤"}),e.employeeAssignment.name]}),e.selectedExecutionAgent&&u.jsxs("span",{className:"task-agent-pill",title:`Execution Agent: ${JS[e.selectedExecutionAgent]??e.selectedExecutionAgent}`,children:[u.jsx("span",{className:"task-agent-icon",children:"⚙"}),JS[e.selectedExecutionAgent]??e.selectedExecutionAgent]})]}),u.jsxs("div",{className:"task-header-right",children:[b&&u.jsx("div",{className:"task-header-avatars",children:v.slice(0,3).map(G=>u.jsx("span",{className:"task-header-avatar",title:G.name,children:G.name.charAt(0).toUpperCase()},G.agent_id))}),u.jsx("span",{className:"task-header-time",title:new Date(e.createdAt).toLocaleString(),children:W8(e.createdAt)}),(I||j)&&i&&u.jsxs("button",{className:"task-stop-btn",onClick:i,title:"Stop task",disabled:!I,children:[u.jsx(tE,{}),u.jsx("span",{children:j?"Stopping...":"Stop"})]}),D&&a&&e.status!=="done"&&u.jsx("button",{className:"task-resume-btn",onClick:a,title:"Resume prior runtime (re-awaken original team, no new plan)",children:u.jsx("span",{children:"Continue"})}),o&&u.jsxs("button",{className:"task-done-btn",onClick:o,title:"Mark task as done",children:[u.jsx(Pl,{}),u.jsx("span",{children:"Done"})]}),r&&u.jsx("button",{className:"task-board-btn",onClick:r,title:"View on Board",children:u.jsx(A4,{})})]})]}),Q&&u.jsx("div",{className:"task-header-metrics",children:Y&&u.jsxs("div",{className:"task-runtime-metric task-runtime-metric-approval",title:"Pending approvals",children:[u.jsx("span",{className:"task-runtime-metric-label",children:"Approvals"}),u.jsx("span",{className:"task-runtime-metric-value",children:e.pendingPermissionCount})]})})]})}function Ji(e){return String(e??"").trim().replace(/\s+/g," ").slice(0,96)}function bN(e){const t=e.itemId||e.streamId||e.toolCallId||e.permissionGroupKey;if(t)return`${e.type}:${Ji(e.turnId)}:${Ji(t)}`;if(e.type==="thinking"||e.type==="assistant")return`${e.type}:${Ji(e.turnId)||Ji(e.executionMode)||"stream"}:${Number.isFinite(e.timestamp)?e.timestamp:""}`;if(e.type==="tool_call")return`tool:${Ji(e.turnId)||"turnless"}:${Ji(e.summary)||"tool"}:${Number.isFinite(e.timestamp)?e.timestamp:""}`;if(e.turnId&&typeof e.seq=="number")return`${e.type}:${Ji(e.turnId)}:seq:${e.seq}`;const n=[e.type,Ji(e.turnId)];return typeof e.seq=="number"&&Number.isFinite(e.seq)&&n.push(`seq-${e.seq}`),n.push(Number.isFinite(e.timestamp)?e.timestamp:"",Ji(e.summary),Ji(e.detail)),n.join(":")}const K8=new Set(["done","failed","cancelled"]),ew=new Set(["thinking","tool_call","autonomy","needs_input","verification"]),cm={thinking:{icon:u.jsx(j4,{}),color:"var(--accent)",label:"Thinking"},assistant:{icon:u.jsx(gl,{}),color:"var(--accent)",label:"Reply"},tool_call:{icon:u.jsx(Mm,{}),color:"var(--green)",label:"Tool"},autonomy:{icon:u.jsx(yu,{}),color:"var(--yellow)",label:"Autonomy"},handoff:{icon:u.jsx(rE,{}),color:"var(--accent)",label:"Handoff"},gate_result:{icon:u.jsx(M4,{}),color:"var(--green)",label:"Gate"},status_change:{icon:u.jsx(nS,{}),color:"var(--text-secondary)",label:"Status"},work_item_started:{icon:u.jsx(Om,{}),color:"var(--accent)",label:"Work item"},gate_approved:{icon:u.jsx(D4,{}),color:"var(--green)",label:"Gate Passed"},gate_rejected:{icon:u.jsx(O4,{}),color:"var(--red)",label:"Rejected"},awaiting_manager_review:{icon:u.jsx(zc,{}),color:"var(--yellow)",label:"Awaiting Manager Review"},awaiting_human:{icon:u.jsx(zc,{}),color:"var(--yellow)",label:"Awaiting Human Review"},awaiting_review:{icon:u.jsx(zc,{}),color:"var(--yellow)",label:"Awaiting Review"},awaiting_peer:{icon:u.jsx(zc,{}),color:"var(--yellow)",label:"Awaiting Peer"},work_item_failed:{icon:u.jsx(nS,{}),color:"var(--red)",label:"Failed"},deadlock:{icon:u.jsx(Gf,{}),color:"var(--red)",label:"Deadlock"},needs_input:{icon:u.jsx(zc,{}),color:"var(--yellow)",label:"Needs Input"},verification:{icon:u.jsx(yu,{}),color:"var(--accent)",label:"Verification"}},Bg=5;function Fc(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"just now";if(t<60)return`${t}s ago`;const n=Math.floor(t/60);return n<60?`${n}m ago`:`${Math.floor(n/60)}h ago`}function zf(e){if(typeof e=="string"){const t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return zf(JSON.parse(t))}catch{return e}return e}return Array.isArray(e)?e.map(zf):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,zf(n)])):e}function Z8(e){const t=e.trim();if(!t||!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.stringify(zf(JSON.parse(t)),null,2)}catch{return e}}function Cl({entries:e,agentStatus:t,currentTool:n,toolElapsedMs:r,lastToolSummary:i,sessionStatus:o,expandedByDefault:a}){const[c,d]=C.useState(!!a),m=!!o&&K8.has(o),h=!m&&t==="reflecting",p=!m&&t==="tool_active",g=h||p,x=C.useMemo(()=>e,[e]),v=C.useMemo(()=>c||x.length<=Bg?x:x.slice(-Bg),[x,c]),k=x.length-v.length;return x.length===0&&!g&&!m?null:u.jsxs("div",{className:"ptl-block",children:[g&&u.jsxs("div",{className:`ptl-live ${p?"ptl-live-tool":"ptl-live-think"}`,children:[u.jsx("span",{className:"ptl-live-icon",children:p?u.jsx(Mm,{}):u.jsx(gl,{})}),u.jsx("span",{className:"ptl-live-text",children:p?"Running":"Thinking"}),p&&n&&u.jsx("code",{className:"ptl-live-tool-name",children:n}),p&&typeof r=="number"&&r>0&&u.jsx("span",{className:"ptl-live-elapsed",children:r<1e3?`${r}ms`:`${(r/1e3).toFixed(1)}s`}),u.jsx("span",{className:"ptl-live-shimmer"})]}),i&&!p&&u.jsxs("div",{className:"ptl-last-tool-summary",children:[u.jsx("span",{className:"ptl-last-tool-label",children:"Last tool result:"}),u.jsx("span",{className:"ptl-last-tool-text",children:i})]}),k>0&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[u.jsx(ss,{}),u.jsxs("span",{children:[k," earlier step",k>1?"s":""]})]}),v.length>0&&u.jsx("div",{className:"ptl-timeline",children:v.map((S,b)=>{const w=b===v.length-1,j=cm[S.type]||cm.status_change;return u.jsxs("div",{className:`ptl-entry${w?" ptl-entry-last":""}`,children:[u.jsxs("div",{className:"ptl-connector",children:[u.jsx("div",{className:"ptl-dot",style:{color:j.color},children:j.icon}),!w&&u.jsx("div",{className:"ptl-line"})]}),u.jsx("div",{className:"ptl-content",children:u.jsx(_N,{entry:S})})]},bN(S))})}),m&&!g&&u.jsxs("div",{className:`ptl-completion ptl-completion-${o}`,children:[u.jsx("span",{className:"ptl-completion-icon",children:o==="done"?"✓":o==="failed"?"✗":"—"}),u.jsx("span",{className:"ptl-completion-text",children:o==="done"?"Completed":o==="failed"?"Failed":"Cancelled"})]}),c&&x.length>Bg&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!1),children:[u.jsx(ss,{down:!0}),u.jsx("span",{children:"Show less"})]}),!c&&k>0&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[u.jsx(ss,{}),u.jsxs("span",{children:["Show more (",k," earlier step",k>1?"s":"",")"]})]})]})}const _N=It.memo(function({entry:t}){const[n,r]=C.useState(!1),i=cm[t.type]||cm.status_change,o=t.type==="tool_call"&&!!t.detail;if(t.type==="tool_call")return u.jsxs("div",{className:`ptl-tool-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${o?" clickable":""}`,onClick:()=>{o&&r(a=>!a)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),u.jsx("code",{className:"ptl-tool-badge",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Fc(t.timestamp)}),o&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("pre",{className:"ptl-tool-card-detail",children:Z8(t.detail)})]});if(t.type==="autonomy"){const a=!!t.detail;return u.jsxs("div",{className:`ptl-tool-card ptl-autonomy-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&r(c=>!c)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),u.jsx("code",{className:"ptl-tool-badge",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Fc(t.timestamp)}),a&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("div",{className:"ptl-tool-card-detail ptl-autonomy-detail",children:t.detail})]})}if(t.type==="thinking"||t.type==="assistant")return u.jsxs("div",{className:"ptl-tool-card",children:[u.jsxs("button",{className:"ptl-row ptl-tool-toggle clickable",onClick:()=>r(a=>!a),type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),u.jsx("span",{className:"ptl-summary",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Fc(t.timestamp)}),u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&u.jsx("div",{className:"ptl-tool-card-detail ptl-thinking-detail",children:t.detail||t.summary})]});if(t.type==="verification"){const a=!!t.detail;return u.jsxs("div",{className:`ptl-tool-card ptl-verification-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&r(c=>!c)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),u.jsx("span",{className:"ptl-summary",children:t.summary||"Verification"}),u.jsx("span",{className:"ptl-time",children:Fc(t.timestamp)}),a&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("div",{className:"ptl-tool-card-detail ptl-verification-detail",children:t.detail})]})}return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"ptl-row",children:[u.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),u.jsx("span",{className:"ptl-summary",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Fc(t.timestamp)})]}),t.detail&&u.jsx("div",{className:"ptl-detail",children:t.detail})]})});function Q8(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const J8=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ez=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,tz={};function tw(e,t){return(tz.jsx?ez:J8).test(e)}const nz=/[ \t\n\f\r]/g;function rz(e){return typeof e=="object"?e.type==="text"?nw(e.value):!1:nw(e)}function nw(e){return e.replace(nz,"")===""}class Hu{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}}Hu.prototype.normal={};Hu.prototype.property={};Hu.prototype.space=void 0;function kN(e,t){const n={},r={};for(const i of e)Object.assign(n,i.property),Object.assign(r,i.normal);return new Hu(n,r,t)}function Yx(e){return e.toLowerCase()}class Qr{constructor(t,n){this.attribute=n,this.property=t}}Qr.prototype.attribute="";Qr.prototype.booleanish=!1;Qr.prototype.boolean=!1;Qr.prototype.commaOrSpaceSeparated=!1;Qr.prototype.commaSeparated=!1;Qr.prototype.defined=!1;Qr.prototype.mustUseProperty=!1;Qr.prototype.number=!1;Qr.prototype.overloadedBoolean=!1;Qr.prototype.property="";Qr.prototype.spaceSeparated=!1;Qr.prototype.space=void 0;let iz=0;const Mt=ua(),lr=ua(),Xx=ua(),De=ua(),An=ua(),ul=ua(),ai=ua();function ua(){return 2**++iz}const Kx=Object.freeze(Object.defineProperty({__proto__:null,boolean:Mt,booleanish:lr,commaOrSpaceSeparated:ai,commaSeparated:ul,number:De,overloadedBoolean:Xx,spaceSeparated:An},Symbol.toStringTag,{value:"Module"})),$g=Object.keys(Kx);class a0 extends Qr{constructor(t,n,r,i){let o=-1;if(super(t,n),rw(this,"space",i),typeof r=="number")for(;++o<$g.length;){const a=$g[o];rw(this,$g[o],(r&Kx[a])===Kx[a])}}}a0.prototype.defined=!0;function rw(e,t,n){n&&(e[t]=n)}function Fl(e){const t={},n={};for(const[r,i]of Object.entries(e.properties)){const o=new a0(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(o.mustUseProperty=!0),t[r]=o,n[Yx(r)]=r,n[Yx(o.attribute)]=r}return new Hu(t,n,e.space)}const SN=Fl({properties:{ariaActiveDescendant:null,ariaAtomic:lr,ariaAutoComplete:null,ariaBusy:lr,ariaChecked:lr,ariaColCount:De,ariaColIndex:De,ariaColSpan:De,ariaControls:An,ariaCurrent:null,ariaDescribedBy:An,ariaDetails:null,ariaDisabled:lr,ariaDropEffect:An,ariaErrorMessage:null,ariaExpanded:lr,ariaFlowTo:An,ariaGrabbed:lr,ariaHasPopup:null,ariaHidden:lr,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:An,ariaLevel:De,ariaLive:null,ariaModal:lr,ariaMultiLine:lr,ariaMultiSelectable:lr,ariaOrientation:null,ariaOwns:An,ariaPlaceholder:null,ariaPosInSet:De,ariaPressed:lr,ariaReadOnly:lr,ariaRelevant:null,ariaRequired:lr,ariaRoleDescription:An,ariaRowCount:De,ariaRowIndex:De,ariaRowSpan:De,ariaSelected:lr,ariaSetSize:De,ariaSort:null,ariaValueMax:De,ariaValueMin:De,ariaValueNow:De,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function wN(e,t){return t in e?e[t]:t}function CN(e,t){return wN(e,t.toLowerCase())}const sz=Fl({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:ul,acceptCharset:An,accessKey:An,action:null,allow:null,allowFullScreen:Mt,allowPaymentRequest:Mt,allowUserMedia:Mt,alt:null,as:null,async:Mt,autoCapitalize:null,autoComplete:An,autoFocus:Mt,autoPlay:Mt,blocking:An,capture:null,charSet:null,checked:Mt,cite:null,className:An,cols:De,colSpan:null,content:null,contentEditable:lr,controls:Mt,controlsList:An,coords:De|ul,crossOrigin:null,data:null,dateTime:null,decoding:null,default:Mt,defer:Mt,dir:null,dirName:null,disabled:Mt,download:Xx,draggable:lr,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:Mt,formTarget:null,headers:An,height:De,hidden:Xx,high:De,href:null,hrefLang:null,htmlFor:An,httpEquiv:An,id:null,imageSizes:null,imageSrcSet:null,inert:Mt,inputMode:null,integrity:null,is:null,isMap:Mt,itemId:null,itemProp:An,itemRef:An,itemScope:Mt,itemType:An,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:Mt,low:De,manifest:null,max:null,maxLength:De,media:null,method:null,min:null,minLength:De,multiple:Mt,muted:Mt,name:null,nonce:null,noModule:Mt,noValidate:Mt,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:Mt,optimum:De,pattern:null,ping:An,placeholder:null,playsInline:Mt,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:Mt,referrerPolicy:null,rel:An,required:Mt,reversed:Mt,rows:De,rowSpan:De,sandbox:An,scope:null,scoped:Mt,seamless:Mt,selected:Mt,shadowRootClonable:Mt,shadowRootDelegatesFocus:Mt,shadowRootMode:null,shape:null,size:De,sizes:null,slot:null,span:De,spellCheck:lr,src:null,srcDoc:null,srcLang:null,srcSet:null,start:De,step:null,style:null,tabIndex:De,target:null,title:null,translate:null,type:null,typeMustMatch:Mt,useMap:null,value:lr,width:De,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:An,axis:null,background:null,bgColor:null,border:De,borderColor:null,bottomMargin:De,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:Mt,declare:Mt,event:null,face:null,frame:null,frameBorder:null,hSpace:De,leftMargin:De,link:null,longDesc:null,lowSrc:null,marginHeight:De,marginWidth:De,noResize:Mt,noHref:Mt,noShade:Mt,noWrap:Mt,object:null,profile:null,prompt:null,rev:null,rightMargin:De,rules:null,scheme:null,scrolling:lr,standby:null,summary:null,text:null,topMargin:De,valueType:null,version:null,vAlign:null,vLink:null,vSpace:De,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:Mt,disableRemotePlayback:Mt,prefix:null,property:null,results:De,security:null,unselectable:null},space:"html",transform:CN}),oz=Fl({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:ai,accentHeight:De,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:De,amplitude:De,arabicForm:null,ascent:De,attributeName:null,attributeType:null,azimuth:De,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:De,by:null,calcMode:null,capHeight:De,className:An,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:De,diffuseConstant:De,direction:null,display:null,dur:null,divisor:De,dominantBaseline:null,download:Mt,dx:null,dy:null,edgeMode:null,editable:null,elevation:De,enableBackground:null,end:null,event:null,exponent:De,externalResourcesRequired:null,fill:null,fillOpacity:De,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:ul,g2:ul,glyphName:ul,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:De,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:De,horizOriginX:De,horizOriginY:De,id:null,ideographic:De,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:De,k:De,k1:De,k2:De,k3:De,k4:De,kernelMatrix:ai,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:De,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:De,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:De,overlineThickness:De,paintOrder:null,panose1:null,path:null,pathLength:De,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:An,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:De,pointsAtY:De,pointsAtZ:De,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:ai,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:ai,rev:ai,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:ai,requiredFeatures:ai,requiredFonts:ai,requiredFormats:ai,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:De,specularExponent:De,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:De,strikethroughThickness:De,string:null,stroke:null,strokeDashArray:ai,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:De,strokeOpacity:De,strokeWidth:null,style:null,surfaceScale:De,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:ai,tabIndex:De,tableValues:null,target:null,targetX:De,targetY:De,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:ai,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:De,underlineThickness:De,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:De,values:null,vAlphabetic:De,vMathematical:De,vectorEffect:null,vHanging:De,vIdeographic:De,version:null,vertAdvY:De,vertOriginX:De,vertOriginY:De,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:De,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:wN}),jN=Fl({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),EN=Fl({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:CN}),NN=Fl({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),az={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},lz=/[A-Z]/g,iw=/-[a-z]/g,cz=/^data[-\w.:]+$/i;function uz(e,t){const n=Yx(t);let r=t,i=Qr;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)==="data"&&cz.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(iw,fz);r="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!iw.test(o)){let a=o.replace(lz,dz);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}i=a0}return new i(r,t)}function dz(e){return"-"+e.toLowerCase()}function fz(e){return e.charAt(1).toUpperCase()}const mz=kN([SN,sz,jN,EN,NN],"html"),l0=kN([SN,oz,jN,EN,NN],"svg");function pz(e){return e.join(" ").trim()}var Ka={},Hg,sw;function hz(){if(sw)return Hg;sw=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,n=/^\s*/,r=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,c=/^\s+|\s+$/g,d=` -`,m="/",h="*",p="",g="comment",x="declaration";function v(S,b){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];b=b||{};var w=1,j=1;function N(B){var V=B.match(t);V&&(w+=V.length);var H=B.lastIndexOf(d);j=~H?B.length-H:j+B.length}function O(){var B={line:w,column:j};return function(V){return V.position=new R(B),D(),V}}function R(B){this.start=B,this.end={line:w,column:j},this.source=b.source}R.prototype.content=S;function L(B){var V=new Error(b.source+":"+w+":"+j+": "+B);if(V.reason=B,V.filename=b.source,V.line=w,V.column=j,V.source=S,!b.silent)throw V}function I(B){var V=B.exec(S);if(V){var H=V[0];return N(H),S=S.slice(H.length),V}}function D(){I(n)}function M(B){var V;for(B=B||[];V=A();)V!==!1&&B.push(V);return B}function A(){var B=O();if(!(m!=S.charAt(0)||h!=S.charAt(1))){for(var V=2;p!=S.charAt(V)&&(h!=S.charAt(V)||m!=S.charAt(V+1));)++V;if(V+=2,p===S.charAt(V-1))return L("End of comment missing");var H=S.slice(2,V-2);return j+=2,N(H),S=S.slice(V),j+=2,B({type:g,comment:H})}}function $(){var B=O(),V=I(r);if(V){if(A(),!I(i))return L("property missing ':'");var H=I(o),U=B({type:x,property:k(V[0].replace(e,p)),value:H?k(H[0].replace(e,p)):p});return I(a),U}}function W(){var B=[];M(B);for(var V;V=$();)V!==!1&&(B.push(V),M(B));return B}return D(),W()}function k(S){return S?S.replace(c,p):p}return Hg=v,Hg}var ow;function gz(){if(ow)return Ka;ow=1;var e=Ka&&Ka.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(Ka,"__esModule",{value:!0}),Ka.default=n;const t=e(hz());function n(r,i){let o=null;if(!r||typeof r!="string")return o;const a=(0,t.default)(r),c=typeof i=="function";return a.forEach(d=>{if(d.type!=="declaration")return;const{property:m,value:h}=d;c?i(m,h,d):h&&(o=o||{},o[m]=h)}),o}return Ka}var Vc={},aw;function yz(){if(aw)return Vc;aw=1,Object.defineProperty(Vc,"__esModule",{value:!0}),Vc.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,n=/^[^-]+$/,r=/^-(webkit|moz|ms|o|khtml)-/,i=/^-(ms)-/,o=function(m){return!m||n.test(m)||e.test(m)},a=function(m,h){return h.toUpperCase()},c=function(m,h){return"".concat(h,"-")},d=function(m,h){return h===void 0&&(h={}),o(m)?m:(m=m.toLowerCase(),h.reactCompat?m=m.replace(i,c):m=m.replace(r,c),m.replace(t,a))};return Vc.camelCase=d,Vc}var Uc,lw;function xz(){if(lw)return Uc;lw=1;var e=Uc&&Uc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},t=e(gz()),n=yz();function r(i,o){var a={};return!i||typeof i!="string"||(0,t.default)(i,function(c,d){c&&d&&(a[(0,n.camelCase)(c,o)]=d)}),a}return r.default=r,Uc=r,Uc}var vz=xz();const bz=ca(vz),IN=TN("end"),c0=TN("start");function TN(e){return t;function t(n){const r=n&&n.position&&n.position[e]||{};if(typeof r.line=="number"&&r.line>0&&typeof r.column=="number"&&r.column>0)return{line:r.line,column:r.column,offset:typeof r.offset=="number"&&r.offset>-1?r.offset:void 0}}}function _z(e){const t=c0(e),n=IN(e);if(t&&n)return{start:t,end:n}}function cu(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?cw(e.position):"start"in e||"end"in e?cw(e):"line"in e||"column"in e?Zx(e):""}function Zx(e){return uw(e&&e.line)+":"+uw(e&&e.column)}function cw(e){return Zx(e&&e.start)+"-"+Zx(e&&e.end)}function uw(e){return e&&typeof e=="number"?e:1}class zr extends Error{constructor(t,n,r){super(),typeof n=="string"&&(r=n,n=void 0);let i="",o={},a=!1;if(n&&("line"in n&&"column"in n?o={place:n}:"start"in n&&"end"in n?o={place:n}:"type"in n?o={ancestors:[n],place:n.position}:o={...n}),typeof t=="string"?i=t:!o.cause&&t&&(a=!0,i=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof r=="string"){const d=r.indexOf(":");d===-1?o.ruleId=r:(o.source=r.slice(0,d),o.ruleId=r.slice(d+1))}if(!o.place&&o.ancestors&&o.ancestors){const d=o.ancestors[o.ancestors.length-1];d&&(o.place=d.position)}const c=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=c?c.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=c?c.line:void 0,this.name=cu(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=a&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}zr.prototype.file="";zr.prototype.name="";zr.prototype.reason="";zr.prototype.message="";zr.prototype.stack="";zr.prototype.column=void 0;zr.prototype.line=void 0;zr.prototype.ancestors=void 0;zr.prototype.cause=void 0;zr.prototype.fatal=void 0;zr.prototype.place=void 0;zr.prototype.ruleId=void 0;zr.prototype.source=void 0;const u0={}.hasOwnProperty,kz=new Map,Sz=/[A-Z]/g,wz=new Set(["table","tbody","thead","tfoot","tr"]),Cz=new Set(["td","th"]),RN="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function jz(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=Dz(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");r=Mz(n,t.jsx,t.jsxs)}const i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?l0:mz,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=AN(i,e,void 0);return o&&typeof o!="string"?o:i.create(e,i.Fragment,{children:o||void 0},void 0)}function AN(e,t,n){if(t.type==="element")return Ez(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return Nz(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return Tz(e,t,n);if(t.type==="mdxjsEsm")return Iz(e,t);if(t.type==="root")return Rz(e,t,n);if(t.type==="text")return Az(e,t)}function Ez(e,t,n){const r=e.schema;let i=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(i=l0,e.schema=i),e.ancestors.push(t);const o=DN(e,t.tagName,!1),a=Oz(e,t);let c=f0(e,t);return wz.has(t.tagName)&&(c=c.filter(function(d){return typeof d=="string"?!rz(d):!0})),MN(e,a,o,t),d0(a,c),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function Nz(e,t){if(t.data&&t.data.estree&&e.evaluater){const r=t.data.estree.body[0];return r.type,e.evaluater.evaluateExpression(r.expression)}Eu(e,t.position)}function Iz(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Eu(e,t.position)}function Tz(e,t,n){const r=e.schema;let i=r;t.name==="svg"&&r.space==="html"&&(i=l0,e.schema=i),e.ancestors.push(t);const o=t.name===null?e.Fragment:DN(e,t.name,!0),a=Lz(e,t),c=f0(e,t);return MN(e,a,o,t),d0(a,c),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function Rz(e,t,n){const r={};return d0(r,f0(e,t)),e.create(t,e.Fragment,r,n)}function Az(e,t){return t.value}function MN(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function d0(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function Mz(e,t,n){return r;function r(i,o,a,c){const m=Array.isArray(a.children)?n:t;return c?m(o,a,c):m(o,a)}}function Dz(e,t){return n;function n(r,i,o,a){const c=Array.isArray(o.children),d=c0(r);return t(i,o,a,c,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function Oz(e,t){const n={};let r,i;for(i in t.properties)if(i!=="children"&&u0.call(t.properties,i)){const o=zz(e,i,t.properties[i]);if(o){const[a,c]=o;e.tableCellAlignToStyle&&a==="align"&&typeof c=="string"&&Cz.has(t.tagName)?r=c:n[a]=c}}if(r){const o=n.style||(n.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function Lz(e,t){const n={};for(const r of t.attributes)if(r.type==="mdxJsxExpressionAttribute")if(r.data&&r.data.estree&&e.evaluater){const o=r.data.estree.body[0];o.type;const a=o.expression;a.type;const c=a.properties[0];c.type,Object.assign(n,e.evaluater.evaluateExpression(c.argument))}else Eu(e,t.position);else{const i=r.name;let o;if(r.value&&typeof r.value=="object")if(r.value.data&&r.value.data.estree&&e.evaluater){const c=r.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else Eu(e,t.position);else o=r.value===null?!0:r.value;n[i]=o}return n}function f0(e,t){const n=[];let r=-1;const i=e.passKeys?new Map:kz;for(;++r<t.children.length;){const o=t.children[r];let a;if(e.passKeys){const d=o.type==="element"?o.tagName:o.type==="mdxJsxFlowElement"||o.type==="mdxJsxTextElement"?o.name:void 0;if(d){const m=i.get(d)||0;a=d+"-"+m,i.set(d,m+1)}}const c=AN(e,o,a);c!==void 0&&n.push(c)}return n}function zz(e,t,n){const r=uz(e.schema,t);if(!(n==null||typeof n=="number"&&Number.isNaN(n))){if(Array.isArray(n)&&(n=r.commaSeparated?Q8(n):pz(n)),r.property==="style"){let i=typeof n=="object"?n:Pz(e,String(n));return e.stylePropertyNameCase==="css"&&(i=Bz(i)),["style",i]}return[e.elementAttributeNameCase==="react"&&r.space?az[r.property]||r.property:r.attribute,n]}}function Pz(e,t){try{return bz(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};const r=n,i=new zr("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:r,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw i.file=e.filePath||void 0,i.url=RN+"#cannot-parse-style-attribute",i}}function DN(e,t,n){let r;if(!n)r={type:"Literal",value:t};else if(t.includes(".")){const i=t.split(".");let o=-1,a;for(;++o<i.length;){const c=tw(i[o])?{type:"Identifier",name:i[o]}:{type:"Literal",value:i[o]};a=a?{type:"MemberExpression",object:a,property:c,computed:!!(o&&c.type==="Literal"),optional:!1}:c}r=a}else r=tw(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(r.type==="Literal"){const i=r.value;return u0.call(e.components,i)?e.components[i]:i}if(e.evaluater)return e.evaluater.evaluateExpression(r);Eu(e)}function Eu(e,t){const n=new zr("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=RN+"#cannot-handle-mdx-estrees-without-createevaluater",n}function Bz(e){const t={};let n;for(n in e)u0.call(e,n)&&(t[$z(n)]=e[n]);return t}function $z(e){let t=e.replace(Sz,Hz);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function Hz(e){return"-"+e.toLowerCase()}const Fg={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},Fz={};function m0(e,t){const n=Fz,r=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,i=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return ON(e,r,i)}function ON(e,t,n){if(Vz(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return dw(e.children,t,n)}return Array.isArray(e)?dw(e,t,n):""}function dw(e,t,n){const r=[];let i=-1;for(;++i<e.length;)r[i]=ON(e[i],t,n);return r.join("")}function Vz(e){return!!(e&&typeof e=="object")}const fw=document.createElement("i");function p0(e){const t="&"+e+";";fw.innerHTML=t;const n=fw.textContent;return n.charCodeAt(n.length-1)===59&&e!=="semi"||n===t?!1:n}function mi(e,t,n,r){const i=e.length;let o=0,a;if(t<0?t=-t>i?0:i+t:t=t>i?i:t,n=n>0?n:0,r.length<1e4)a=Array.from(r),a.unshift(t,n),e.splice(...a);else for(n&&e.splice(t,n);o<r.length;)a=r.slice(o,o+1e4),a.unshift(t,0),e.splice(...a),o+=1e4,t+=1e4}function Ni(e,t){return e.length>0?(mi(e,e.length,0,t),e):t}const mw={}.hasOwnProperty;function LN(e){const t={};let n=-1;for(;++n<e.length;)Uz(t,e[n]);return t}function Uz(e,t){let n;for(n in t){const i=(mw.call(e,n)?e[n]:void 0)||(e[n]={}),o=t[n];let a;if(o)for(a in o){mw.call(i,a)||(i[a]=[]);const c=o[a];qz(i[a],Array.isArray(c)?c:c?[c]:[])}}}function qz(e,t){let n=-1;const r=[];for(;++n<t.length;)(t[n].add==="after"?e:r).push(t[n]);mi(e,0,0,r)}function zN(e,t){const n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function Vi(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Fr=Eo(/[A-Za-z]/),Lr=Eo(/[\dA-Za-z]/),Gz=Eo(/[#-'*+\--9=?A-Z^-~]/);function um(e){return e!==null&&(e<32||e===127)}const Qx=Eo(/\d/),Wz=Eo(/[\dA-Fa-f]/),Yz=Eo(/[!-/:-@[-`{-~]/);function ft(e){return e!==null&&e<-2}function En(e){return e!==null&&(e<0||e===32)}function Ft(e){return e===-2||e===-1||e===32}const Wm=Eo(new RegExp("\\p{P}|\\p{S}","u")),ia=Eo(/\s/);function Eo(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Vl(e){const t=[];let n=-1,r=0,i=0;for(;++n<e.length;){const o=e.charCodeAt(n);let a="";if(o===37&&Lr(e.charCodeAt(n+1))&&Lr(e.charCodeAt(n+2)))i=2;else if(o<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(o))||(a=String.fromCharCode(o));else if(o>55295&&o<57344){const c=e.charCodeAt(n+1);o<56320&&c>56319&&c<57344?(a=String.fromCharCode(o,c),i=1):a="�"}else a=String.fromCharCode(o);a&&(t.push(e.slice(r,n),encodeURIComponent(a)),r=n+i+1,a=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function nn(e,t,n,r){const i=r?r-1:Number.POSITIVE_INFINITY;let o=0;return a;function a(d){return Ft(d)?(e.enter(n),c(d)):t(d)}function c(d){return Ft(d)&&o++<i?(e.consume(d),c):(e.exit(n),t(d))}}const Xz={tokenize:Kz};function Kz(e){const t=e.attempt(this.parser.constructs.contentInitial,r,i);let n;return t;function r(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),nn(e,t,"linePrefix")}function i(c){return e.enter("paragraph"),o(c)}function o(c){const d=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=d),n=d,a(c)}function a(c){if(c===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(c);return}return ft(c)?(e.consume(c),e.exit("chunkText"),o):(e.consume(c),a)}}const Zz={tokenize:Qz},pw={tokenize:Jz};function Qz(e){const t=this,n=[];let r=0,i,o,a;return c;function c(j){if(r<n.length){const N=n[r];return t.containerState=N[1],e.attempt(N[0].continuation,d,m)(j)}return m(j)}function d(j){if(r++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,i&&w();const N=t.events.length;let O=N,R;for(;O--;)if(t.events[O][0]==="exit"&&t.events[O][1].type==="chunkFlow"){R=t.events[O][1].end;break}b(r);let L=N;for(;L<t.events.length;)t.events[L][1].end={...R},L++;return mi(t.events,O+1,0,t.events.slice(N)),t.events.length=L,m(j)}return c(j)}function m(j){if(r===n.length){if(!i)return g(j);if(i.currentConstruct&&i.currentConstruct.concrete)return v(j);t.interrupt=!!(i.currentConstruct&&!i._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(pw,h,p)(j)}function h(j){return i&&w(),b(r),g(j)}function p(j){return t.parser.lazy[t.now().line]=r!==n.length,a=t.now().offset,v(j)}function g(j){return t.containerState={},e.attempt(pw,x,v)(j)}function x(j){return r++,n.push([t.currentConstruct,t.containerState]),g(j)}function v(j){if(j===null){i&&w(),b(0),e.consume(j);return}return i=i||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:i,contentType:"flow",previous:o}),k(j)}function k(j){if(j===null){S(e.exit("chunkFlow"),!0),b(0),e.consume(j);return}return ft(j)?(e.consume(j),S(e.exit("chunkFlow")),r=0,t.interrupt=void 0,c):(e.consume(j),k)}function S(j,N){const O=t.sliceStream(j);if(N&&O.push(null),j.previous=o,o&&(o.next=j),o=j,i.defineSkip(j.start),i.write(O),t.parser.lazy[j.start.line]){let R=i.events.length;for(;R--;)if(i.events[R][1].start.offset<a&&(!i.events[R][1].end||i.events[R][1].end.offset>a))return;const L=t.events.length;let I=L,D,M;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){if(D){M=t.events[I][1].end;break}D=!0}for(b(r),R=L;R<t.events.length;)t.events[R][1].end={...M},R++;mi(t.events,I+1,0,t.events.slice(L)),t.events.length=R}}function b(j){let N=n.length;for(;N-- >j;){const O=n[N];t.containerState=O[1],O[0].exit.call(t,e)}n.length=j}function w(){i.write([null]),o=void 0,i=void 0,t.containerState._closeFlow=void 0}}function Jz(e,t,n){return nn(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function jl(e){if(e===null||En(e)||ia(e))return 1;if(Wm(e))return 2}function Ym(e,t,n){const r=[];let i=-1;for(;++i<e.length;){const o=e[i].resolveAll;o&&!r.includes(o)&&(t=o(t,n),r.push(o))}return t}const Jx={name:"attention",resolveAll:eP,tokenize:tP};function eP(e,t){let n=-1,r,i,o,a,c,d,m,h;for(;++n<e.length;)if(e[n][0]==="enter"&&e[n][1].type==="attentionSequence"&&e[n][1]._close){for(r=n;r--;)if(e[r][0]==="exit"&&e[r][1].type==="attentionSequence"&&e[r][1]._open&&t.sliceSerialize(e[r][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[r][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[r][1].end.offset-e[r][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;d=e[r][1].end.offset-e[r][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const p={...e[r][1].end},g={...e[n][1].start};hw(p,-d),hw(g,d),a={type:d>1?"strongSequence":"emphasisSequence",start:p,end:{...e[r][1].end}},c={type:d>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:g},o={type:d>1?"strongText":"emphasisText",start:{...e[r][1].end},end:{...e[n][1].start}},i={type:d>1?"strong":"emphasis",start:{...a.start},end:{...c.end}},e[r][1].end={...a.start},e[n][1].start={...c.end},m=[],e[r][1].end.offset-e[r][1].start.offset&&(m=Ni(m,[["enter",e[r][1],t],["exit",e[r][1],t]])),m=Ni(m,[["enter",i,t],["enter",a,t],["exit",a,t],["enter",o,t]]),m=Ni(m,Ym(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),m=Ni(m,[["exit",o,t],["enter",c,t],["exit",c,t],["exit",i,t]]),e[n][1].end.offset-e[n][1].start.offset?(h=2,m=Ni(m,[["enter",e[n][1],t],["exit",e[n][1],t]])):h=0,mi(e,r-1,n-r+3,m),n=r+m.length-h-2;break}}for(n=-1;++n<e.length;)e[n][1].type==="attentionSequence"&&(e[n][1].type="data");return e}function tP(e,t){const n=this.parser.constructs.attentionMarkers.null,r=this.previous,i=jl(r);let o;return a;function a(d){return o=d,e.enter("attentionSequence"),c(d)}function c(d){if(d===o)return e.consume(d),c;const m=e.exit("attentionSequence"),h=jl(d),p=!h||h===2&&i||n.includes(d),g=!i||i===2&&h||n.includes(r);return m._open=!!(o===42?p:p&&(i||!g)),m._close=!!(o===42?g:g&&(h||!p)),t(d)}}function hw(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const nP={name:"autolink",tokenize:rP};function rP(e,t,n){let r=0;return i;function i(x){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),o}function o(x){return Fr(x)?(e.consume(x),a):x===64?n(x):m(x)}function a(x){return x===43||x===45||x===46||Lr(x)?(r=1,c(x)):m(x)}function c(x){return x===58?(e.consume(x),r=0,d):(x===43||x===45||x===46||Lr(x))&&r++<32?(e.consume(x),c):(r=0,m(x))}function d(x){return x===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.exit("autolink"),t):x===null||x===32||x===60||um(x)?n(x):(e.consume(x),d)}function m(x){return x===64?(e.consume(x),h):Gz(x)?(e.consume(x),m):n(x)}function h(x){return Lr(x)?p(x):n(x)}function p(x){return x===46?(e.consume(x),r=0,h):x===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.exit("autolink"),t):g(x)}function g(x){if((x===45||Lr(x))&&r++<63){const v=x===45?g:p;return e.consume(x),v}return n(x)}}const Fu={partial:!0,tokenize:iP};function iP(e,t,n){return r;function r(o){return Ft(o)?nn(e,i,"linePrefix")(o):i(o)}function i(o){return o===null||ft(o)?t(o):n(o)}}const PN={continuation:{tokenize:oP},exit:aP,name:"blockQuote",tokenize:sP};function sP(e,t,n){const r=this;return i;function i(a){if(a===62){const c=r.containerState;return c.open||(e.enter("blockQuote",{_container:!0}),c.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(a),e.exit("blockQuoteMarker"),o}return n(a)}function o(a){return Ft(a)?(e.enter("blockQuotePrefixWhitespace"),e.consume(a),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(a))}}function oP(e,t,n){const r=this;return i;function i(a){return Ft(a)?nn(e,o,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a):o(a)}function o(a){return e.attempt(PN,t,n)(a)}}function aP(e){e.exit("blockQuote")}const BN={name:"characterEscape",tokenize:lP};function lP(e,t,n){return r;function r(o){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(o),e.exit("escapeMarker"),i}function i(o){return Yz(o)?(e.enter("characterEscapeValue"),e.consume(o),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(o)}}const $N={name:"characterReference",tokenize:cP};function cP(e,t,n){const r=this;let i=0,o,a;return c;function c(p){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(p),e.exit("characterReferenceMarker"),d}function d(p){return p===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(p),e.exit("characterReferenceMarkerNumeric"),m):(e.enter("characterReferenceValue"),o=31,a=Lr,h(p))}function m(p){return p===88||p===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(p),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,a=Wz,h):(e.enter("characterReferenceValue"),o=7,a=Qx,h(p))}function h(p){if(p===59&&i){const g=e.exit("characterReferenceValue");return a===Lr&&!p0(r.sliceSerialize(g))?n(p):(e.enter("characterReferenceMarker"),e.consume(p),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return a(p)&&i++<o?(e.consume(p),h):n(p)}}const gw={partial:!0,tokenize:dP},yw={concrete:!0,name:"codeFenced",tokenize:uP};function uP(e,t,n){const r=this,i={partial:!0,tokenize:O};let o=0,a=0,c;return d;function d(R){return m(R)}function m(R){const L=r.events[r.events.length-1];return o=L&&L[1].type==="linePrefix"?L[2].sliceSerialize(L[1],!0).length:0,c=R,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),h(R)}function h(R){return R===c?(a++,e.consume(R),h):a<3?n(R):(e.exit("codeFencedFenceSequence"),Ft(R)?nn(e,p,"whitespace")(R):p(R))}function p(R){return R===null||ft(R)?(e.exit("codeFencedFence"),r.interrupt?t(R):e.check(gw,k,N)(R)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),g(R))}function g(R){return R===null||ft(R)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),p(R)):Ft(R)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),nn(e,x,"whitespace")(R)):R===96&&R===c?n(R):(e.consume(R),g)}function x(R){return R===null||ft(R)?p(R):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),v(R))}function v(R){return R===null||ft(R)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),p(R)):R===96&&R===c?n(R):(e.consume(R),v)}function k(R){return e.attempt(i,N,S)(R)}function S(R){return e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),b}function b(R){return o>0&&Ft(R)?nn(e,w,"linePrefix",o+1)(R):w(R)}function w(R){return R===null||ft(R)?e.check(gw,k,N)(R):(e.enter("codeFlowValue"),j(R))}function j(R){return R===null||ft(R)?(e.exit("codeFlowValue"),w(R)):(e.consume(R),j)}function N(R){return e.exit("codeFenced"),t(R)}function O(R,L,I){let D=0;return M;function M(V){return R.enter("lineEnding"),R.consume(V),R.exit("lineEnding"),A}function A(V){return R.enter("codeFencedFence"),Ft(V)?nn(R,$,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(V):$(V)}function $(V){return V===c?(R.enter("codeFencedFenceSequence"),W(V)):I(V)}function W(V){return V===c?(D++,R.consume(V),W):D>=a?(R.exit("codeFencedFenceSequence"),Ft(V)?nn(R,B,"whitespace")(V):B(V)):I(V)}function B(V){return V===null||ft(V)?(R.exit("codeFencedFence"),L(V)):I(V)}}}function dP(e,t,n){const r=this;return i;function i(a){return a===null?n(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}const Vg={name:"codeIndented",tokenize:mP},fP={partial:!0,tokenize:pP};function mP(e,t,n){const r=this;return i;function i(m){return e.enter("codeIndented"),nn(e,o,"linePrefix",5)(m)}function o(m){const h=r.events[r.events.length-1];return h&&h[1].type==="linePrefix"&&h[2].sliceSerialize(h[1],!0).length>=4?a(m):n(m)}function a(m){return m===null?d(m):ft(m)?e.attempt(fP,a,d)(m):(e.enter("codeFlowValue"),c(m))}function c(m){return m===null||ft(m)?(e.exit("codeFlowValue"),a(m)):(e.consume(m),c)}function d(m){return e.exit("codeIndented"),t(m)}}function pP(e,t,n){const r=this;return i;function i(a){return r.parser.lazy[r.now().line]?n(a):ft(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i):nn(e,o,"linePrefix",5)(a)}function o(a){const c=r.events[r.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?t(a):ft(a)?i(a):n(a)}}const hP={name:"codeText",previous:yP,resolve:gP,tokenize:xP};function gP(e){let t=e.length-4,n=3,r,i;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(r=n;++r<t;)if(e[r][1].type==="codeTextData"){e[n][1].type="codeTextPadding",e[t][1].type="codeTextPadding",n+=2,t-=2;break}}for(r=n-1,t++;++r<=t;)i===void 0?r!==t&&e[r][1].type!=="lineEnding"&&(i=r):(r===t||e[r][1].type==="lineEnding")&&(e[i][1].type="codeTextData",r!==i+2&&(e[i][1].end=e[r-1][1].end,e.splice(i+2,r-i-2),t-=r-i-2,r=i+2),i=void 0);return e}function yP(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function xP(e,t,n){let r=0,i,o;return a;function a(p){return e.enter("codeText"),e.enter("codeTextSequence"),c(p)}function c(p){return p===96?(e.consume(p),r++,c):(e.exit("codeTextSequence"),d(p))}function d(p){return p===null?n(p):p===32?(e.enter("space"),e.consume(p),e.exit("space"),d):p===96?(o=e.enter("codeTextSequence"),i=0,h(p)):ft(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("codeTextData"),m(p))}function m(p){return p===null||p===32||p===96||ft(p)?(e.exit("codeTextData"),d(p)):(e.consume(p),m)}function h(p){return p===96?(e.consume(p),i++,h):i===r?(e.exit("codeTextSequence"),e.exit("codeText"),t(p)):(o.type="codeTextData",m(p))}}class vP{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){const r=n??Number.POSITIVE_INFINITY;return r<this.left.length?this.left.slice(t,r):t>this.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){const i=n||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&qc(this.left,r),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),qc(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),qc(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const n=this.left.splice(t,Number.POSITIVE_INFINITY);qc(this.right,n.reverse())}else{const n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);qc(this.left,n.reverse())}}}function qc(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function HN(e){const t={};let n=-1,r,i,o,a,c,d,m;const h=new vP(e);for(;++n<h.length;){for(;n in t;)n=t[n];if(r=h.get(n),n&&r[1].type==="chunkFlow"&&h.get(n-1)[1].type==="listItemPrefix"&&(d=r[1]._tokenizer.events,o=0,o<d.length&&d[o][1].type==="lineEndingBlank"&&(o+=2),o<d.length&&d[o][1].type==="content"))for(;++o<d.length&&d[o][1].type!=="content";)d[o][1].type==="chunkText"&&(d[o][1]._isInFirstContentOfListItem=!0,o++);if(r[0]==="enter")r[1].contentType&&(Object.assign(t,bP(h,n)),n=t[n],m=!0);else if(r[1]._container){for(o=n,i=void 0;o--;)if(a=h.get(o),a[1].type==="lineEnding"||a[1].type==="lineEndingBlank")a[0]==="enter"&&(i&&(h.get(i)[1].type="lineEndingBlank"),a[1].type="lineEnding",i=o);else if(!(a[1].type==="linePrefix"||a[1].type==="listItemIndent"))break;i&&(r[1].end={...h.get(i)[1].start},c=h.slice(i,n),c.unshift(r),h.splice(i,n-i+1,c))}}return mi(e,0,Number.POSITIVE_INFINITY,h.slice(0)),!m}function bP(e,t){const n=e.get(t)[1],r=e.get(t)[2];let i=t-1;const o=[];let a=n._tokenizer;a||(a=r.parser[n.contentType](n.start),n._contentTypeTextTrailing&&(a._contentTypeTextTrailing=!0));const c=a.events,d=[],m={};let h,p,g=-1,x=n,v=0,k=0;const S=[k];for(;x;){for(;e.get(++i)[1]!==x;);o.push(i),x._tokenizer||(h=r.sliceStream(x),x.next||h.push(null),p&&a.defineSkip(x.start),x._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=!0),a.write(h),x._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=void 0)),p=x,x=x.next}for(x=n;++g<c.length;)c[g][0]==="exit"&&c[g-1][0]==="enter"&&c[g][1].type===c[g-1][1].type&&c[g][1].start.line!==c[g][1].end.line&&(k=g+1,S.push(k),x._tokenizer=void 0,x.previous=void 0,x=x.next);for(a.events=[],x?(x._tokenizer=void 0,x.previous=void 0):S.pop(),g=S.length;g--;){const b=c.slice(S[g],S[g+1]),w=o.pop();d.push([w,w+b.length-1]),e.splice(w,2,b)}for(d.reverse(),g=-1;++g<d.length;)m[v+d[g][0]]=v+d[g][1],v+=d[g][1]-d[g][0]-1;return m}const _P={resolve:SP,tokenize:wP},kP={partial:!0,tokenize:CP};function SP(e){return HN(e),e}function wP(e,t){let n;return r;function r(c){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),i(c)}function i(c){return c===null?o(c):ft(c)?e.check(kP,a,o)(c):(e.consume(c),i)}function o(c){return e.exit("chunkContent"),e.exit("content"),t(c)}function a(c){return e.consume(c),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,i}}function CP(e,t,n){const r=this;return i;function i(a){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),nn(e,o,"linePrefix")}function o(a){if(a===null||ft(a))return n(a);const c=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?t(a):e.interrupt(r.parser.constructs.flow,n,t)(a)}}function FN(e,t,n,r,i,o,a,c,d){const m=d||Number.POSITIVE_INFINITY;let h=0;return p;function p(b){return b===60?(e.enter(r),e.enter(i),e.enter(o),e.consume(b),e.exit(o),g):b===null||b===32||b===41||um(b)?n(b):(e.enter(r),e.enter(a),e.enter(c),e.enter("chunkString",{contentType:"string"}),k(b))}function g(b){return b===62?(e.enter(o),e.consume(b),e.exit(o),e.exit(i),e.exit(r),t):(e.enter(c),e.enter("chunkString",{contentType:"string"}),x(b))}function x(b){return b===62?(e.exit("chunkString"),e.exit(c),g(b)):b===null||b===60||ft(b)?n(b):(e.consume(b),b===92?v:x)}function v(b){return b===60||b===62||b===92?(e.consume(b),x):x(b)}function k(b){return!h&&(b===null||b===41||En(b))?(e.exit("chunkString"),e.exit(c),e.exit(a),e.exit(r),t(b)):h<m&&b===40?(e.consume(b),h++,k):b===41?(e.consume(b),h--,k):b===null||b===32||b===40||um(b)?n(b):(e.consume(b),b===92?S:k)}function S(b){return b===40||b===41||b===92?(e.consume(b),k):k(b)}}function VN(e,t,n,r,i,o){const a=this;let c=0,d;return m;function m(x){return e.enter(r),e.enter(i),e.consume(x),e.exit(i),e.enter(o),h}function h(x){return c>999||x===null||x===91||x===93&&!d||x===94&&!c&&"_hiddenFootnoteSupport"in a.parser.constructs?n(x):x===93?(e.exit(o),e.enter(i),e.consume(x),e.exit(i),e.exit(r),t):ft(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===null||x===91||x===93||ft(x)||c++>999?(e.exit("chunkString"),h(x)):(e.consume(x),d||(d=!Ft(x)),x===92?g:p)}function g(x){return x===91||x===92||x===93?(e.consume(x),c++,p):p(x)}}function UN(e,t,n,r,i,o){let a;return c;function c(g){return g===34||g===39||g===40?(e.enter(r),e.enter(i),e.consume(g),e.exit(i),a=g===40?41:g,d):n(g)}function d(g){return g===a?(e.enter(i),e.consume(g),e.exit(i),e.exit(r),t):(e.enter(o),m(g))}function m(g){return g===a?(e.exit(o),d(a)):g===null?n(g):ft(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),nn(e,m,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(g))}function h(g){return g===a||g===null||ft(g)?(e.exit("chunkString"),m(g)):(e.consume(g),g===92?p:h)}function p(g){return g===a||g===92?(e.consume(g),h):h(g)}}function uu(e,t){let n;return r;function r(i){return ft(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):Ft(i)?nn(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}const jP={name:"definition",tokenize:NP},EP={partial:!0,tokenize:IP};function NP(e,t,n){const r=this;let i;return o;function o(x){return e.enter("definition"),a(x)}function a(x){return VN.call(r,e,c,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(x)}function c(x){return i=Vi(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),d):n(x)}function d(x){return En(x)?uu(e,m)(x):m(x)}function m(x){return FN(e,h,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(x)}function h(x){return e.attempt(EP,p,p)(x)}function p(x){return Ft(x)?nn(e,g,"whitespace")(x):g(x)}function g(x){return x===null||ft(x)?(e.exit("definition"),r.parser.defined.push(i),t(x)):n(x)}}function IP(e,t,n){return r;function r(c){return En(c)?uu(e,i)(c):n(c)}function i(c){return UN(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return Ft(c)?nn(e,a,"whitespace")(c):a(c)}function a(c){return c===null||ft(c)?t(c):n(c)}}const TP={name:"hardBreakEscape",tokenize:RP};function RP(e,t,n){return r;function r(o){return e.enter("hardBreakEscape"),e.consume(o),i}function i(o){return ft(o)?(e.exit("hardBreakEscape"),t(o)):n(o)}}const AP={name:"headingAtx",resolve:MP,tokenize:DP};function MP(e,t){let n=e.length-2,r=3,i,o;return e[r][1].type==="whitespace"&&(r+=2),n-2>r&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(r===n-1||n-4>r&&e[n-2][1].type==="whitespace")&&(n-=r+1===n?2:4),n>r&&(i={type:"atxHeadingText",start:e[r][1].start,end:e[n][1].end},o={type:"chunkText",start:e[r][1].start,end:e[n][1].end,contentType:"text"},mi(e,r,n-r+1,[["enter",i,t],["enter",o,t],["exit",o,t],["exit",i,t]])),e}function DP(e,t,n){let r=0;return i;function i(h){return e.enter("atxHeading"),o(h)}function o(h){return e.enter("atxHeadingSequence"),a(h)}function a(h){return h===35&&r++<6?(e.consume(h),a):h===null||En(h)?(e.exit("atxHeadingSequence"),c(h)):n(h)}function c(h){return h===35?(e.enter("atxHeadingSequence"),d(h)):h===null||ft(h)?(e.exit("atxHeading"),t(h)):Ft(h)?nn(e,c,"whitespace")(h):(e.enter("atxHeadingText"),m(h))}function d(h){return h===35?(e.consume(h),d):(e.exit("atxHeadingSequence"),c(h))}function m(h){return h===null||h===35||En(h)?(e.exit("atxHeadingText"),c(h)):(e.consume(h),m)}}const OP=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],xw=["pre","script","style","textarea"],LP={concrete:!0,name:"htmlFlow",resolveTo:BP,tokenize:$P},zP={partial:!0,tokenize:FP},PP={partial:!0,tokenize:HP};function BP(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function $P(e,t,n){const r=this;let i,o,a,c,d;return m;function m(P){return h(P)}function h(P){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(P),p}function p(P){return P===33?(e.consume(P),g):P===47?(e.consume(P),o=!0,k):P===63?(e.consume(P),i=3,r.interrupt?t:q):Fr(P)?(e.consume(P),a=String.fromCharCode(P),S):n(P)}function g(P){return P===45?(e.consume(P),i=2,x):P===91?(e.consume(P),i=5,c=0,v):Fr(P)?(e.consume(P),i=4,r.interrupt?t:q):n(P)}function x(P){return P===45?(e.consume(P),r.interrupt?t:q):n(P)}function v(P){const K="CDATA[";return P===K.charCodeAt(c++)?(e.consume(P),c===K.length?r.interrupt?t:$:v):n(P)}function k(P){return Fr(P)?(e.consume(P),a=String.fromCharCode(P),S):n(P)}function S(P){if(P===null||P===47||P===62||En(P)){const K=P===47,ee=a.toLowerCase();return!K&&!o&&xw.includes(ee)?(i=1,r.interrupt?t(P):$(P)):OP.includes(a.toLowerCase())?(i=6,K?(e.consume(P),b):r.interrupt?t(P):$(P)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(P):o?w(P):j(P))}return P===45||Lr(P)?(e.consume(P),a+=String.fromCharCode(P),S):n(P)}function b(P){return P===62?(e.consume(P),r.interrupt?t:$):n(P)}function w(P){return Ft(P)?(e.consume(P),w):M(P)}function j(P){return P===47?(e.consume(P),M):P===58||P===95||Fr(P)?(e.consume(P),N):Ft(P)?(e.consume(P),j):M(P)}function N(P){return P===45||P===46||P===58||P===95||Lr(P)?(e.consume(P),N):O(P)}function O(P){return P===61?(e.consume(P),R):Ft(P)?(e.consume(P),O):j(P)}function R(P){return P===null||P===60||P===61||P===62||P===96?n(P):P===34||P===39?(e.consume(P),d=P,L):Ft(P)?(e.consume(P),R):I(P)}function L(P){return P===d?(e.consume(P),d=null,D):P===null||ft(P)?n(P):(e.consume(P),L)}function I(P){return P===null||P===34||P===39||P===47||P===60||P===61||P===62||P===96||En(P)?O(P):(e.consume(P),I)}function D(P){return P===47||P===62||Ft(P)?j(P):n(P)}function M(P){return P===62?(e.consume(P),A):n(P)}function A(P){return P===null||ft(P)?$(P):Ft(P)?(e.consume(P),A):n(P)}function $(P){return P===45&&i===2?(e.consume(P),H):P===60&&i===1?(e.consume(P),U):P===62&&i===4?(e.consume(P),G):P===63&&i===3?(e.consume(P),q):P===93&&i===5?(e.consume(P),Q):ft(P)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(zP,J,W)(P)):P===null||ft(P)?(e.exit("htmlFlowData"),W(P)):(e.consume(P),$)}function W(P){return e.check(PP,B,J)(P)}function B(P){return e.enter("lineEnding"),e.consume(P),e.exit("lineEnding"),V}function V(P){return P===null||ft(P)?W(P):(e.enter("htmlFlowData"),$(P))}function H(P){return P===45?(e.consume(P),q):$(P)}function U(P){return P===47?(e.consume(P),a="",Y):$(P)}function Y(P){if(P===62){const K=a.toLowerCase();return xw.includes(K)?(e.consume(P),G):$(P)}return Fr(P)&&a.length<8?(e.consume(P),a+=String.fromCharCode(P),Y):$(P)}function Q(P){return P===93?(e.consume(P),q):$(P)}function q(P){return P===62?(e.consume(P),G):P===45&&i===2?(e.consume(P),q):$(P)}function G(P){return P===null||ft(P)?(e.exit("htmlFlowData"),J(P)):(e.consume(P),G)}function J(P){return e.exit("htmlFlow"),t(P)}}function HP(e,t,n){const r=this;return i;function i(a){return ft(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o):n(a)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}function FP(e,t,n){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(Fu,t,n)}}const VP={name:"htmlText",tokenize:UP};function UP(e,t,n){const r=this;let i,o,a;return c;function c(q){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(q),d}function d(q){return q===33?(e.consume(q),m):q===47?(e.consume(q),O):q===63?(e.consume(q),j):Fr(q)?(e.consume(q),I):n(q)}function m(q){return q===45?(e.consume(q),h):q===91?(e.consume(q),o=0,v):Fr(q)?(e.consume(q),w):n(q)}function h(q){return q===45?(e.consume(q),x):n(q)}function p(q){return q===null?n(q):q===45?(e.consume(q),g):ft(q)?(a=p,U(q)):(e.consume(q),p)}function g(q){return q===45?(e.consume(q),x):p(q)}function x(q){return q===62?H(q):q===45?g(q):p(q)}function v(q){const G="CDATA[";return q===G.charCodeAt(o++)?(e.consume(q),o===G.length?k:v):n(q)}function k(q){return q===null?n(q):q===93?(e.consume(q),S):ft(q)?(a=k,U(q)):(e.consume(q),k)}function S(q){return q===93?(e.consume(q),b):k(q)}function b(q){return q===62?H(q):q===93?(e.consume(q),b):k(q)}function w(q){return q===null||q===62?H(q):ft(q)?(a=w,U(q)):(e.consume(q),w)}function j(q){return q===null?n(q):q===63?(e.consume(q),N):ft(q)?(a=j,U(q)):(e.consume(q),j)}function N(q){return q===62?H(q):j(q)}function O(q){return Fr(q)?(e.consume(q),R):n(q)}function R(q){return q===45||Lr(q)?(e.consume(q),R):L(q)}function L(q){return ft(q)?(a=L,U(q)):Ft(q)?(e.consume(q),L):H(q)}function I(q){return q===45||Lr(q)?(e.consume(q),I):q===47||q===62||En(q)?D(q):n(q)}function D(q){return q===47?(e.consume(q),H):q===58||q===95||Fr(q)?(e.consume(q),M):ft(q)?(a=D,U(q)):Ft(q)?(e.consume(q),D):H(q)}function M(q){return q===45||q===46||q===58||q===95||Lr(q)?(e.consume(q),M):A(q)}function A(q){return q===61?(e.consume(q),$):ft(q)?(a=A,U(q)):Ft(q)?(e.consume(q),A):D(q)}function $(q){return q===null||q===60||q===61||q===62||q===96?n(q):q===34||q===39?(e.consume(q),i=q,W):ft(q)?(a=$,U(q)):Ft(q)?(e.consume(q),$):(e.consume(q),B)}function W(q){return q===i?(e.consume(q),i=void 0,V):q===null?n(q):ft(q)?(a=W,U(q)):(e.consume(q),W)}function B(q){return q===null||q===34||q===39||q===60||q===61||q===96?n(q):q===47||q===62||En(q)?D(q):(e.consume(q),B)}function V(q){return q===47||q===62||En(q)?D(q):n(q)}function H(q){return q===62?(e.consume(q),e.exit("htmlTextData"),e.exit("htmlText"),t):n(q)}function U(q){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(q),e.exit("lineEnding"),Y}function Y(q){return Ft(q)?nn(e,Q,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(q):Q(q)}function Q(q){return e.enter("htmlTextData"),a(q)}}const h0={name:"labelEnd",resolveAll:YP,resolveTo:XP,tokenize:KP},qP={tokenize:ZP},GP={tokenize:QP},WP={tokenize:JP};function YP(e){let t=-1;const n=[];for(;++t<e.length;){const r=e[t][1];if(n.push(e[t]),r.type==="labelImage"||r.type==="labelLink"||r.type==="labelEnd"){const i=r.type==="labelImage"?4:2;r.type="data",t+=i}}return e.length!==n.length&&mi(e,0,e.length,n),e}function XP(e,t){let n=e.length,r=0,i,o,a,c;for(;n--;)if(i=e[n][1],o){if(i.type==="link"||i.type==="labelLink"&&i._inactive)break;e[n][0]==="enter"&&i.type==="labelLink"&&(i._inactive=!0)}else if(a){if(e[n][0]==="enter"&&(i.type==="labelImage"||i.type==="labelLink")&&!i._balanced&&(o=n,i.type!=="labelLink")){r=2;break}}else i.type==="labelEnd"&&(a=n);const d={type:e[o][1].type==="labelLink"?"link":"image",start:{...e[o][1].start},end:{...e[e.length-1][1].end}},m={type:"label",start:{...e[o][1].start},end:{...e[a][1].end}},h={type:"labelText",start:{...e[o+r+2][1].end},end:{...e[a-2][1].start}};return c=[["enter",d,t],["enter",m,t]],c=Ni(c,e.slice(o+1,o+r+3)),c=Ni(c,[["enter",h,t]]),c=Ni(c,Ym(t.parser.constructs.insideSpan.null,e.slice(o+r+4,a-3),t)),c=Ni(c,[["exit",h,t],e[a-2],e[a-1],["exit",m,t]]),c=Ni(c,e.slice(a+1)),c=Ni(c,[["exit",d,t]]),mi(e,o,e.length,c),e}function KP(e,t,n){const r=this;let i=r.events.length,o,a;for(;i--;)if((r.events[i][1].type==="labelImage"||r.events[i][1].type==="labelLink")&&!r.events[i][1]._balanced){o=r.events[i][1];break}return c;function c(g){return o?o._inactive?p(g):(a=r.parser.defined.includes(Vi(r.sliceSerialize({start:o.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(g),e.exit("labelMarker"),e.exit("labelEnd"),d):n(g)}function d(g){return g===40?e.attempt(qP,h,a?h:p)(g):g===91?e.attempt(GP,h,a?m:p)(g):a?h(g):p(g)}function m(g){return e.attempt(WP,h,p)(g)}function h(g){return t(g)}function p(g){return o._balanced=!0,n(g)}}function ZP(e,t,n){return r;function r(p){return e.enter("resource"),e.enter("resourceMarker"),e.consume(p),e.exit("resourceMarker"),i}function i(p){return En(p)?uu(e,o)(p):o(p)}function o(p){return p===41?h(p):FN(e,a,c,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(p)}function a(p){return En(p)?uu(e,d)(p):h(p)}function c(p){return n(p)}function d(p){return p===34||p===39||p===40?UN(e,m,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(p):h(p)}function m(p){return En(p)?uu(e,h)(p):h(p)}function h(p){return p===41?(e.enter("resourceMarker"),e.consume(p),e.exit("resourceMarker"),e.exit("resource"),t):n(p)}}function QP(e,t,n){const r=this;return i;function i(c){return VN.call(r,e,o,a,"reference","referenceMarker","referenceString")(c)}function o(c){return r.parser.defined.includes(Vi(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(c):n(c)}function a(c){return n(c)}}function JP(e,t,n){return r;function r(o){return e.enter("reference"),e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),i}function i(o){return o===93?(e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),e.exit("reference"),t):n(o)}}const eB={name:"labelStartImage",resolveAll:h0.resolveAll,tokenize:tB};function tB(e,t,n){const r=this;return i;function i(c){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(c),e.exit("labelImageMarker"),o}function o(c){return c===91?(e.enter("labelMarker"),e.consume(c),e.exit("labelMarker"),e.exit("labelImage"),a):n(c)}function a(c){return c===94&&"_hiddenFootnoteSupport"in r.parser.constructs?n(c):t(c)}}const nB={name:"labelStartLink",resolveAll:h0.resolveAll,tokenize:rB};function rB(e,t,n){const r=this;return i;function i(a){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(a),e.exit("labelMarker"),e.exit("labelLink"),o}function o(a){return a===94&&"_hiddenFootnoteSupport"in r.parser.constructs?n(a):t(a)}}const Ug={name:"lineEnding",tokenize:iB};function iB(e,t){return n;function n(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),nn(e,t,"linePrefix")}}const Pf={name:"thematicBreak",tokenize:sB};function sB(e,t,n){let r=0,i;return o;function o(m){return e.enter("thematicBreak"),a(m)}function a(m){return i=m,c(m)}function c(m){return m===i?(e.enter("thematicBreakSequence"),d(m)):r>=3&&(m===null||ft(m))?(e.exit("thematicBreak"),t(m)):n(m)}function d(m){return m===i?(e.consume(m),r++,d):(e.exit("thematicBreakSequence"),Ft(m)?nn(e,c,"whitespace")(m):c(m))}}const Xr={continuation:{tokenize:cB},exit:dB,name:"list",tokenize:lB},oB={partial:!0,tokenize:fB},aB={partial:!0,tokenize:uB};function lB(e,t,n){const r=this,i=r.events[r.events.length-1];let o=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,a=0;return c;function c(x){const v=r.containerState.type||(x===42||x===43||x===45?"listUnordered":"listOrdered");if(v==="listUnordered"?!r.containerState.marker||x===r.containerState.marker:Qx(x)){if(r.containerState.type||(r.containerState.type=v,e.enter(v,{_container:!0})),v==="listUnordered")return e.enter("listItemPrefix"),x===42||x===45?e.check(Pf,n,m)(x):m(x);if(!r.interrupt||x===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(x)}return n(x)}function d(x){return Qx(x)&&++a<10?(e.consume(x),d):(!r.interrupt||a<2)&&(r.containerState.marker?x===r.containerState.marker:x===41||x===46)?(e.exit("listItemValue"),m(x)):n(x)}function m(x){return e.enter("listItemMarker"),e.consume(x),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||x,e.check(Fu,r.interrupt?n:h,e.attempt(oB,g,p))}function h(x){return r.containerState.initialBlankLine=!0,o++,g(x)}function p(x){return Ft(x)?(e.enter("listItemPrefixWhitespace"),e.consume(x),e.exit("listItemPrefixWhitespace"),g):n(x)}function g(x){return r.containerState.size=o+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(x)}}function cB(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(Fu,i,o);function i(c){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,nn(e,t,"listItemIndent",r.containerState.size+1)(c)}function o(c){return r.containerState.furtherBlankLines||!Ft(c)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,a(c)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(aB,t,a)(c))}function a(c){return r.containerState._closeFlow=!0,r.interrupt=void 0,nn(e,e.attempt(Xr,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function uB(e,t,n){const r=this;return nn(e,i,"listItemIndent",r.containerState.size+1);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===r.containerState.size?t(o):n(o)}}function dB(e){e.exit(this.containerState.type)}function fB(e,t,n){const r=this;return nn(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(o){const a=r.events[r.events.length-1];return!Ft(o)&&a&&a[1].type==="listItemPrefixWhitespace"?t(o):n(o)}}const vw={name:"setextUnderline",resolveTo:mB,tokenize:pB};function mB(e,t){let n=e.length,r,i,o;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){r=n;break}e[n][1].type==="paragraph"&&(i=n)}else e[n][1].type==="content"&&e.splice(n,1),!o&&e[n][1].type==="definition"&&(o=n);const a={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",o?(e.splice(i,0,["enter",a,t]),e.splice(o+1,0,["exit",e[r][1],t]),e[r][1].end={...e[o][1].end}):e[r][1]=a,e.push(["exit",a,t]),e}function pB(e,t,n){const r=this;let i;return o;function o(m){let h=r.events.length,p;for(;h--;)if(r.events[h][1].type!=="lineEnding"&&r.events[h][1].type!=="linePrefix"&&r.events[h][1].type!=="content"){p=r.events[h][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||p)?(e.enter("setextHeadingLine"),i=m,a(m)):n(m)}function a(m){return e.enter("setextHeadingLineSequence"),c(m)}function c(m){return m===i?(e.consume(m),c):(e.exit("setextHeadingLineSequence"),Ft(m)?nn(e,d,"lineSuffix")(m):d(m))}function d(m){return m===null||ft(m)?(e.exit("setextHeadingLine"),t(m)):n(m)}}const hB={tokenize:gB};function gB(e){const t=this,n=e.attempt(Fu,r,e.attempt(this.parser.constructs.flowInitial,i,nn(e,e.attempt(this.parser.constructs.flow,i,e.attempt(_P,i)),"linePrefix")));return n;function r(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function i(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const yB={resolveAll:GN()},xB=qN("string"),vB=qN("text");function qN(e){return{resolveAll:GN(e==="text"?bB:void 0),tokenize:t};function t(n){const r=this,i=this.parser.constructs[e],o=n.attempt(i,a,c);return a;function a(h){return m(h)?o(h):c(h)}function c(h){if(h===null){n.consume(h);return}return n.enter("data"),n.consume(h),d}function d(h){return m(h)?(n.exit("data"),o(h)):(n.consume(h),d)}function m(h){if(h===null)return!0;const p=i[h];let g=-1;if(p)for(;++g<p.length;){const x=p[g];if(!x.previous||x.previous.call(r,r.previous))return!0}return!1}}}function GN(e){return t;function t(n,r){let i=-1,o;for(;++i<=n.length;)o===void 0?n[i]&&n[i][1].type==="data"&&(o=i,i++):(!n[i]||n[i][1].type!=="data")&&(i!==o+2&&(n[o][1].end=n[i-1][1].end,n.splice(o+2,i-o-2),i=o+2),o=void 0);return e?e(n,r):n}}function bB(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type==="lineEnding")&&e[n-1][1].type==="data"){const r=e[n-1][1],i=t.sliceStream(r);let o=i.length,a=-1,c=0,d;for(;o--;){const m=i[o];if(typeof m=="string"){for(a=m.length;m.charCodeAt(a-1)===32;)c++,a--;if(a)break;a=-1}else if(m===-2)d=!0,c++;else if(m!==-1){o++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(c=0),c){const m={type:n===e.length||d||c<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?a:r.start._bufferIndex+a,_index:r.start._index+o,line:r.end.line,column:r.end.column-c,offset:r.end.offset-c},end:{...r.end}};r.end={...m.start},r.start.offset===r.end.offset?Object.assign(r,m):(e.splice(n,0,["enter",m,t],["exit",m,t]),n+=2)}n++}return e}const _B={42:Xr,43:Xr,45:Xr,48:Xr,49:Xr,50:Xr,51:Xr,52:Xr,53:Xr,54:Xr,55:Xr,56:Xr,57:Xr,62:PN},kB={91:jP},SB={[-2]:Vg,[-1]:Vg,32:Vg},wB={35:AP,42:Pf,45:[vw,Pf],60:LP,61:vw,95:Pf,96:yw,126:yw},CB={38:$N,92:BN},jB={[-5]:Ug,[-4]:Ug,[-3]:Ug,33:eB,38:$N,42:Jx,60:[nP,VP],91:nB,92:[TP,BN],93:h0,95:Jx,96:hP},EB={null:[Jx,yB]},NB={null:[42,95]},IB={null:[]},TB=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:NB,contentInitial:kB,disable:IB,document:_B,flow:wB,flowInitial:SB,insideSpan:EB,string:CB,text:jB},Symbol.toStringTag,{value:"Module"}));function RB(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0};const i={},o=[];let a=[],c=[];const d={attempt:L(O),check:L(R),consume:w,enter:j,exit:N,interrupt:L(R,{interrupt:!0})},m={code:null,containerState:{},defineSkip:k,events:[],now:v,parser:e,previous:null,sliceSerialize:g,sliceStream:x,write:p};let h=t.tokenize.call(m,d);return t.resolveAll&&o.push(t),m;function p(A){return a=Ni(a,A),S(),a[a.length-1]!==null?[]:(I(t,0),m.events=Ym(o,m.events,m),m.events)}function g(A,$){return MB(x(A),$)}function x(A){return AB(a,A)}function v(){const{_bufferIndex:A,_index:$,line:W,column:B,offset:V}=r;return{_bufferIndex:A,_index:$,line:W,column:B,offset:V}}function k(A){i[A.line]=A.column,M()}function S(){let A;for(;r._index<a.length;){const $=a[r._index];if(typeof $=="string")for(A=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===A&&r._bufferIndex<$.length;)b($.charCodeAt(r._bufferIndex));else b($)}}function b(A){h=h(A)}function w(A){ft(A)?(r.line++,r.column=1,r.offset+=A===-3?2:1,M()):A!==-1&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===a[r._index].length&&(r._bufferIndex=-1,r._index++)),m.previous=A}function j(A,$){const W=$||{};return W.type=A,W.start=v(),m.events.push(["enter",W,m]),c.push(W),W}function N(A){const $=c.pop();return $.end=v(),m.events.push(["exit",$,m]),$}function O(A,$){I(A,$.from)}function R(A,$){$.restore()}function L(A,$){return W;function W(B,V,H){let U,Y,Q,q;return Array.isArray(B)?J(B):"tokenize"in B?J([B]):G(B);function G(te){return ie;function ie(se){const de=se!==null&&te[se],oe=se!==null&&te.null,Ne=[...Array.isArray(de)?de:de?[de]:[],...Array.isArray(oe)?oe:oe?[oe]:[]];return J(Ne)(se)}}function J(te){return U=te,Y=0,te.length===0?H:P(te[Y])}function P(te){return ie;function ie(se){return q=D(),Q=te,te.partial||(m.currentConstruct=te),te.name&&m.parser.constructs.disable.null.includes(te.name)?ee():te.tokenize.call($?Object.assign(Object.create(m),$):m,d,K,ee)(se)}}function K(te){return A(Q,q),V}function ee(te){return q.restore(),++Y<U.length?P(U[Y]):H}}}function I(A,$){A.resolveAll&&!o.includes(A)&&o.push(A),A.resolve&&mi(m.events,$,m.events.length-$,A.resolve(m.events.slice($),m)),A.resolveTo&&(m.events=A.resolveTo(m.events,m))}function D(){const A=v(),$=m.previous,W=m.currentConstruct,B=m.events.length,V=Array.from(c);return{from:B,restore:H};function H(){r=A,m.previous=$,m.currentConstruct=W,m.events.length=B,c=V,M()}}function M(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}function AB(e,t){const n=t.start._index,r=t.start._bufferIndex,i=t.end._index,o=t.end._bufferIndex;let a;if(n===i)a=[e[n].slice(r,o)];else{if(a=e.slice(n,i),r>-1){const c=a[0];typeof c=="string"?a[0]=c.slice(r):a.shift()}o>0&&a.push(e[i].slice(0,o))}return a}function MB(e,t){let n=-1;const r=[];let i;for(;++n<e.length;){const o=e[n];let a;if(typeof o=="string")a=o;else switch(o){case-5:{a="\r";break}case-4:{a=` -`;break}case-3:{a=`\r -`;break}case-2:{a=t?" ":" ";break}case-1:{if(!t&&i)continue;a=" ";break}default:a=String.fromCharCode(o)}i=o===-2,r.push(a)}return r.join("")}function DB(e){const r={constructs:LN([TB,...(e||{}).extensions||[]]),content:i(Xz),defined:[],document:i(Zz),flow:i(hB),lazy:{},string:i(xB),text:i(vB)};return r;function i(o){return a;function a(c){return RB(r,o,c)}}}function OB(e){for(;!HN(e););return e}const bw=/[\0\t\n\r]/g;function LB(){let e=1,t="",n=!0,r;return i;function i(o,a,c){const d=[];let m,h,p,g,x;for(o=t+(typeof o=="string"?o.toString():new TextDecoder(a||void 0).decode(o)),p=0,t="",n&&(o.charCodeAt(0)===65279&&p++,n=void 0);p<o.length;){if(bw.lastIndex=p,m=bw.exec(o),g=m&&m.index!==void 0?m.index:o.length,x=o.charCodeAt(g),!m){t=o.slice(p);break}if(x===10&&p===g&&r)d.push(-3),r=void 0;else switch(r&&(d.push(-5),r=void 0),p<g&&(d.push(o.slice(p,g)),e+=g-p),x){case 0:{d.push(65533),e++;break}case 9:{for(h=Math.ceil(e/4)*4,d.push(-2);e++<h;)d.push(-1);break}case 10:{d.push(-4),e=1;break}default:r=!0,e=1}p=g+1}return c&&(r&&d.push(-5),t&&d.push(t),d.push(null)),d}}const zB=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function PB(e){return e.replace(zB,BB)}function BB(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){const i=n.charCodeAt(1),o=i===120||i===88;return zN(n.slice(o?2:1),o?16:10)}return p0(n)||e}const WN={}.hasOwnProperty;function $B(e,t,n){return t&&typeof t=="object"&&(n=t,t=void 0),HB(n)(OB(DB(n).document().write(LB()(e,t,!0))))}function HB(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(wt),autolinkProtocol:D,autolinkEmail:D,atxHeading:o(Ge),blockQuote:o(oe),characterEscape:D,characterReference:D,codeFenced:o(Ne),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:o(Ne,a),codeText:o(Ee,a),codeTextData:D,data:D,codeFlowValue:D,definition:o(Ie),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:o(Be),hardBreakEscape:o(Ue),hardBreakTrailing:o(Ue),htmlFlow:o(at,a),htmlFlowData:D,htmlText:o(at,a),htmlTextData:D,image:o(Pt),label:a,link:o(wt),listItem:o(pe),listItemValue:g,listOrdered:o(Ct,p),listUnordered:o(Ct),paragraph:o($e),reference:P,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:o(Ge),strong:o(et),thematicBreak:o(pt)},exit:{atxHeading:d(),atxHeadingSequence:O,autolink:d(),autolinkEmail:de,autolinkProtocol:se,blockQuote:d(),characterEscapeValue:M,characterReferenceMarkerHexadecimal:ee,characterReferenceMarkerNumeric:ee,characterReferenceValue:te,characterReference:ie,codeFenced:d(S),codeFencedFence:k,codeFencedFenceInfo:x,codeFencedFenceMeta:v,codeFlowValue:M,codeIndented:d(b),codeText:d(V),codeTextData:M,data:M,definition:d(),definitionDestinationString:N,definitionLabelString:w,definitionTitleString:j,emphasis:d(),hardBreakEscape:d($),hardBreakTrailing:d($),htmlFlow:d(W),htmlFlowData:M,htmlText:d(B),htmlTextData:M,image:d(U),label:Q,labelText:Y,lineEnding:A,link:d(H),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:K,resourceDestinationString:q,resourceTitleString:G,resource:J,setextHeading:d(I),setextHeadingLineSequence:L,setextHeadingText:R,strong:d(),thematicBreak:d()}};YN(t,(e||{}).mdastExtensions||[]);const n={};return r;function r(me){let be={type:"root",children:[]};const Me={stack:[be],tokenStack:[],config:t,enter:c,exit:m,buffer:a,resume:h,data:n},Fe=[];let He=-1;for(;++He<me.length;)if(me[He][1].type==="listOrdered"||me[He][1].type==="listUnordered")if(me[He][0]==="enter")Fe.push(He);else{const jt=Fe.pop();He=i(me,jt,He)}for(He=-1;++He<me.length;){const jt=t[me[He][0]];WN.call(jt,me[He][1].type)&&jt[me[He][1].type].call(Object.assign({sliceSerialize:me[He][2].sliceSerialize},Me),me[He][1])}if(Me.tokenStack.length>0){const jt=Me.tokenStack[Me.tokenStack.length-1];(jt[1]||_w).call(Me,void 0,jt[0])}for(be.position={start:mo(me.length>0?me[0][1].start:{line:1,column:1,offset:0}),end:mo(me.length>0?me[me.length-2][1].end:{line:1,column:1,offset:0})},He=-1;++He<t.transforms.length;)be=t.transforms[He](be)||be;return be}function i(me,be,Me){let Fe=be-1,He=-1,jt=!1,an,ke,Oe,We;for(;++Fe<=Me;){const Ze=me[Fe];switch(Ze[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{Ze[0]==="enter"?He++:He--,We=void 0;break}case"lineEndingBlank":{Ze[0]==="enter"&&(an&&!We&&!He&&!Oe&&(Oe=Fe),We=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:We=void 0}if(!He&&Ze[0]==="enter"&&Ze[1].type==="listItemPrefix"||He===-1&&Ze[0]==="exit"&&(Ze[1].type==="listUnordered"||Ze[1].type==="listOrdered")){if(an){let qe=Fe;for(ke=void 0;qe--;){const ut=me[qe];if(ut[1].type==="lineEnding"||ut[1].type==="lineEndingBlank"){if(ut[0]==="exit")continue;ke&&(me[ke][1].type="lineEndingBlank",jt=!0),ut[1].type="lineEnding",ke=qe}else if(!(ut[1].type==="linePrefix"||ut[1].type==="blockQuotePrefix"||ut[1].type==="blockQuotePrefixWhitespace"||ut[1].type==="blockQuoteMarker"||ut[1].type==="listItemIndent"))break}Oe&&(!ke||Oe<ke)&&(an._spread=!0),an.end=Object.assign({},ke?me[ke][1].start:Ze[1].end),me.splice(ke||Fe,0,["exit",an,Ze[2]]),Fe++,Me++}if(Ze[1].type==="listItemPrefix"){const qe={type:"listItem",_spread:!1,start:Object.assign({},Ze[1].start),end:void 0};an=qe,me.splice(Fe,0,["enter",qe,Ze[2]]),Fe++,Me++,Oe=void 0,We=!0}}}return me[be][1]._spread=jt,Me}function o(me,be){return Me;function Me(Fe){c.call(this,me(Fe),Fe),be&&be.call(this,Fe)}}function a(){this.stack.push({type:"fragment",children:[]})}function c(me,be,Me){this.stack[this.stack.length-1].children.push(me),this.stack.push(me),this.tokenStack.push([be,Me||void 0]),me.position={start:mo(be.start),end:void 0}}function d(me){return be;function be(Me){me&&me.call(this,Me),m.call(this,Me)}}function m(me,be){const Me=this.stack.pop(),Fe=this.tokenStack.pop();if(Fe)Fe[0].type!==me.type&&(be?be.call(this,me,Fe[0]):(Fe[1]||_w).call(this,me,Fe[0]));else throw new Error("Cannot close `"+me.type+"` ("+cu({start:me.start,end:me.end})+"): it’s not open");Me.position.end=mo(me.end)}function h(){return m0(this.stack.pop())}function p(){this.data.expectingFirstListItemValue=!0}function g(me){if(this.data.expectingFirstListItemValue){const be=this.stack[this.stack.length-2];be.start=Number.parseInt(this.sliceSerialize(me),10),this.data.expectingFirstListItemValue=void 0}}function x(){const me=this.resume(),be=this.stack[this.stack.length-1];be.lang=me}function v(){const me=this.resume(),be=this.stack[this.stack.length-1];be.meta=me}function k(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function S(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function b(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me.replace(/(\r?\n|\r)$/g,"")}function w(me){const be=this.resume(),Me=this.stack[this.stack.length-1];Me.label=be,Me.identifier=Vi(this.sliceSerialize(me)).toLowerCase()}function j(){const me=this.resume(),be=this.stack[this.stack.length-1];be.title=me}function N(){const me=this.resume(),be=this.stack[this.stack.length-1];be.url=me}function O(me){const be=this.stack[this.stack.length-1];if(!be.depth){const Me=this.sliceSerialize(me).length;be.depth=Me}}function R(){this.data.setextHeadingSlurpLineEnding=!0}function L(me){const be=this.stack[this.stack.length-1];be.depth=this.sliceSerialize(me).codePointAt(0)===61?1:2}function I(){this.data.setextHeadingSlurpLineEnding=void 0}function D(me){const Me=this.stack[this.stack.length-1].children;let Fe=Me[Me.length-1];(!Fe||Fe.type!=="text")&&(Fe=tt(),Fe.position={start:mo(me.start),end:void 0},Me.push(Fe)),this.stack.push(Fe)}function M(me){const be=this.stack.pop();be.value+=this.sliceSerialize(me),be.position.end=mo(me.end)}function A(me){const be=this.stack[this.stack.length-1];if(this.data.atHardBreak){const Me=be.children[be.children.length-1];Me.position.end=mo(me.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(be.type)&&(D.call(this,me),M.call(this,me))}function $(){this.data.atHardBreak=!0}function W(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function B(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function V(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function H(){const me=this.stack[this.stack.length-1];if(this.data.inReference){const be=this.data.referenceType||"shortcut";me.type+="Reference",me.referenceType=be,delete me.url,delete me.title}else delete me.identifier,delete me.label;this.data.referenceType=void 0}function U(){const me=this.stack[this.stack.length-1];if(this.data.inReference){const be=this.data.referenceType||"shortcut";me.type+="Reference",me.referenceType=be,delete me.url,delete me.title}else delete me.identifier,delete me.label;this.data.referenceType=void 0}function Y(me){const be=this.sliceSerialize(me),Me=this.stack[this.stack.length-2];Me.label=PB(be),Me.identifier=Vi(be).toLowerCase()}function Q(){const me=this.stack[this.stack.length-1],be=this.resume(),Me=this.stack[this.stack.length-1];if(this.data.inReference=!0,Me.type==="link"){const Fe=me.children;Me.children=Fe}else Me.alt=be}function q(){const me=this.resume(),be=this.stack[this.stack.length-1];be.url=me}function G(){const me=this.resume(),be=this.stack[this.stack.length-1];be.title=me}function J(){this.data.inReference=void 0}function P(){this.data.referenceType="collapsed"}function K(me){const be=this.resume(),Me=this.stack[this.stack.length-1];Me.label=be,Me.identifier=Vi(this.sliceSerialize(me)).toLowerCase(),this.data.referenceType="full"}function ee(me){this.data.characterReferenceType=me.type}function te(me){const be=this.sliceSerialize(me),Me=this.data.characterReferenceType;let Fe;Me?(Fe=zN(be,Me==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):Fe=p0(be);const He=this.stack[this.stack.length-1];He.value+=Fe}function ie(me){const be=this.stack.pop();be.position.end=mo(me.end)}function se(me){M.call(this,me);const be=this.stack[this.stack.length-1];be.url=this.sliceSerialize(me)}function de(me){M.call(this,me);const be=this.stack[this.stack.length-1];be.url="mailto:"+this.sliceSerialize(me)}function oe(){return{type:"blockquote",children:[]}}function Ne(){return{type:"code",lang:null,meta:null,value:""}}function Ee(){return{type:"inlineCode",value:""}}function Ie(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function Be(){return{type:"emphasis",children:[]}}function Ge(){return{type:"heading",depth:0,children:[]}}function Ue(){return{type:"break"}}function at(){return{type:"html",value:""}}function Pt(){return{type:"image",title:null,url:"",alt:null}}function wt(){return{type:"link",title:null,url:"",children:[]}}function Ct(me){return{type:"list",ordered:me.type==="listOrdered",start:null,spread:me._spread,children:[]}}function pe(me){return{type:"listItem",spread:me._spread,checked:null,children:[]}}function $e(){return{type:"paragraph",children:[]}}function et(){return{type:"strong",children:[]}}function tt(){return{type:"text",value:""}}function pt(){return{type:"thematicBreak"}}}function mo(e){return{line:e.line,column:e.column,offset:e.offset}}function YN(e,t){let n=-1;for(;++n<t.length;){const r=t[n];Array.isArray(r)?YN(e,r):FB(e,r)}}function FB(e,t){let n;for(n in t)if(WN.call(t,n))switch(n){case"canContainEols":{const r=t[n];r&&e[n].push(...r);break}case"transforms":{const r=t[n];r&&e[n].push(...r);break}case"enter":case"exit":{const r=t[n];r&&Object.assign(e[n],r);break}}}function _w(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+cu({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+cu({start:t.start,end:t.end})+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+cu({start:t.start,end:t.end})+") is still open")}function VB(e){const t=this;t.parser=n;function n(r){return $B(r,{...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})}}function UB(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function qB(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:` -`}]}function GB(e,t){const n=t.value?t.value+` -`:"",r={},i=t.lang?t.lang.split(/\s+/):[];i.length>0&&(r.className=["language-"+i[0]]);let o={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function WB(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function YB(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function XB(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),i=Vl(r.toLowerCase()),o=e.footnoteOrder.indexOf(r);let a,c=e.footnoteCounts.get(r);c===void 0?(c=0,e.footnoteOrder.push(r),a=e.footnoteOrder.length):a=o+1,c+=1,e.footnoteCounts.set(r,c);const d={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+i,id:n+"fnref-"+i+(c>1?"-"+c:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(a)}]};e.patch(t,d);const m={type:"element",tagName:"sup",properties:{},children:[d]};return e.patch(t,m),e.applyData(t,m)}function KB(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function ZB(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function XN(e,t){const n=t.referenceType;let r="]";if(n==="collapsed"?r+="[]":n==="full"&&(r+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+r}];const i=e.all(t),o=i[0];o&&o.type==="text"?o.value="["+o.value:i.unshift({type:"text",value:"["});const a=i[i.length-1];return a&&a.type==="text"?a.value+=r:i.push({type:"text",value:r}),i}function QB(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return XN(e,t);const i={src:Vl(r.url||""),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,o),e.applyData(t,o)}function JB(e,t){const n={src:Vl(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function e9(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function t9(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return XN(e,t);const i={href:Vl(r.url||"")};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function n9(e,t){const n={href:Vl(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function r9(e,t,n){const r=e.all(t),i=n?i9(n):KN(t),o={},a=[];if(typeof t.checked=="boolean"){const h=r[0];let p;h&&h.type==="element"&&h.tagName==="p"?p=h:(p={type:"element",tagName:"p",properties:{},children:[]},r.unshift(p)),p.children.length>0&&p.children.unshift({type:"text",value:" "}),p.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let c=-1;for(;++c<r.length;){const h=r[c];(i||c!==0||h.type!=="element"||h.tagName!=="p")&&a.push({type:"text",value:` -`}),h.type==="element"&&h.tagName==="p"&&!i?a.push(...h.children):a.push(h)}const d=r[r.length-1];d&&(i||d.type!=="element"||d.tagName!=="p")&&a.push({type:"text",value:` -`});const m={type:"element",tagName:"li",properties:o,children:a};return e.patch(t,m),e.applyData(t,m)}function i9(e){let t=!1;if(e.type==="list"){t=e.spread||!1;const n=e.children;let r=-1;for(;!t&&++r<n.length;)t=KN(n[r])}return t}function KN(e){const t=e.spread;return t??e.children.length>1}function s9(e,t){const n={},r=e.all(t);let i=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++i<r.length;){const a=r[i];if(a.type==="element"&&a.tagName==="li"&&a.properties&&Array.isArray(a.properties.className)&&a.properties.className.includes("task-list-item")){n.className=["contains-task-list"];break}}const o={type:"element",tagName:t.ordered?"ol":"ul",properties:n,children:e.wrap(r,!0)};return e.patch(t,o),e.applyData(t,o)}function o9(e,t){const n={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function a9(e,t){const n={type:"root",children:e.wrap(e.all(t))};return e.patch(t,n),e.applyData(t,n)}function l9(e,t){const n={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function c9(e,t){const n=e.all(t),r=n.shift(),i=[];if(r){const a={type:"element",tagName:"thead",properties:{},children:e.wrap([r],!0)};e.patch(t.children[0],a),i.push(a)}if(n.length>0){const a={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},c=c0(t.children[1]),d=IN(t.children[t.children.length-1]);c&&d&&(a.position={start:c,end:d}),i.push(a)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,o),e.applyData(t,o)}function u9(e,t,n){const r=n?n.children:void 0,o=(r?r.indexOf(t):1)===0?"th":"td",a=n&&n.type==="table"?n.align:void 0,c=a?a.length:t.children.length;let d=-1;const m=[];for(;++d<c;){const p=t.children[d],g={},x=a?a[d]:void 0;x&&(g.align=x);let v={type:"element",tagName:o,properties:g,children:[]};p&&(v.children=e.all(p),e.patch(p,v),v=e.applyData(p,v)),m.push(v)}const h={type:"element",tagName:"tr",properties:{},children:e.wrap(m,!0)};return e.patch(t,h),e.applyData(t,h)}function d9(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}const kw=9,Sw=32;function f9(e){const t=String(e),n=/\r?\n|\r/g;let r=n.exec(t),i=0;const o=[];for(;r;)o.push(ww(t.slice(i,r.index),i>0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return o.push(ww(t.slice(i),i>0,!1)),o.join("")}function ww(e,t,n){let r=0,i=e.length;if(t){let o=e.codePointAt(r);for(;o===kw||o===Sw;)r++,o=e.codePointAt(r)}if(n){let o=e.codePointAt(i-1);for(;o===kw||o===Sw;)i--,o=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}function m9(e,t){const n={type:"text",value:f9(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function p9(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const h9={blockquote:UB,break:qB,code:GB,delete:WB,emphasis:YB,footnoteReference:XB,heading:KB,html:ZB,imageReference:QB,image:JB,inlineCode:e9,linkReference:t9,link:n9,listItem:r9,list:s9,paragraph:o9,root:a9,strong:l9,table:c9,tableCell:d9,tableRow:u9,text:m9,thematicBreak:p9,toml:cf,yaml:cf,definition:cf,footnoteDefinition:cf};function cf(){}const ZN=-1,Xm=0,du=1,dm=2,g0=3,y0=4,x0=5,v0=6,QN=7,JN=8,Cw=typeof self=="object"?self:globalThis,g9=(e,t)=>{const n=(i,o)=>(e.set(o,i),i),r=i=>{if(e.has(i))return e.get(i);const[o,a]=t[i];switch(o){case Xm:case ZN:return n(a,i);case du:{const c=n([],i);for(const d of a)c.push(r(d));return c}case dm:{const c=n({},i);for(const[d,m]of a)c[r(d)]=r(m);return c}case g0:return n(new Date(a),i);case y0:{const{source:c,flags:d}=a;return n(new RegExp(c,d),i)}case x0:{const c=n(new Map,i);for(const[d,m]of a)c.set(r(d),r(m));return c}case v0:{const c=n(new Set,i);for(const d of a)c.add(r(d));return c}case QN:{const{name:c,message:d}=a;return n(new Cw[c](d),i)}case JN:return n(BigInt(a),i);case"BigInt":return n(Object(BigInt(a)),i);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:c}=new Uint8Array(a);return n(new DataView(c),a)}}return n(new Cw[o](a),i)};return r},jw=e=>g9(new Map,e)(0),Za="",{toString:y9}={},{keys:x9}=Object,Gc=e=>{const t=typeof e;if(t!=="object"||!e)return[Xm,t];const n=y9.call(e).slice(8,-1);switch(n){case"Array":return[du,Za];case"Object":return[dm,Za];case"Date":return[g0,Za];case"RegExp":return[y0,Za];case"Map":return[x0,Za];case"Set":return[v0,Za];case"DataView":return[du,n]}return n.includes("Array")?[du,n]:n.includes("Error")?[QN,n]:[dm,n]},uf=([e,t])=>e===Xm&&(t==="function"||t==="symbol"),v9=(e,t,n,r)=>{const i=(a,c)=>{const d=r.push(a)-1;return n.set(c,d),d},o=a=>{if(n.has(a))return n.get(a);let[c,d]=Gc(a);switch(c){case Xm:{let h=a;switch(d){case"bigint":c=JN,h=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);h=null;break;case"undefined":return i([ZN],a)}return i([c,h],a)}case du:{if(d){let g=a;return d==="DataView"?g=new Uint8Array(a.buffer):d==="ArrayBuffer"&&(g=new Uint8Array(a)),i([d,[...g]],a)}const h=[],p=i([c,h],a);for(const g of a)h.push(o(g));return p}case dm:{if(d)switch(d){case"BigInt":return i([d,a.toString()],a);case"Boolean":case"Number":case"String":return i([d,a.valueOf()],a)}if(t&&"toJSON"in a)return o(a.toJSON());const h=[],p=i([c,h],a);for(const g of x9(a))(e||!uf(Gc(a[g])))&&h.push([o(g),o(a[g])]);return p}case g0:return i([c,a.toISOString()],a);case y0:{const{source:h,flags:p}=a;return i([c,{source:h,flags:p}],a)}case x0:{const h=[],p=i([c,h],a);for(const[g,x]of a)(e||!(uf(Gc(g))||uf(Gc(x))))&&h.push([o(g),o(x)]);return p}case v0:{const h=[],p=i([c,h],a);for(const g of a)(e||!uf(Gc(g)))&&h.push(o(g));return p}}const{message:m}=a;return i([c,{name:d,message:m}],a)};return o},Ew=(e,{json:t,lossy:n}={})=>{const r=[];return v9(!(t||n),!!t,new Map,r)(e),r},fm=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?jw(Ew(e,t)):structuredClone(e):(e,t)=>jw(Ew(e,t));function b9(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function _9(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function k9(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||b9,r=e.options.footnoteBackLabel||_9,i=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let d=-1;for(;++d<e.footnoteOrder.length;){const m=e.footnoteById.get(e.footnoteOrder[d]);if(!m)continue;const h=e.all(m),p=String(m.identifier).toUpperCase(),g=Vl(p.toLowerCase());let x=0;const v=[],k=e.footnoteCounts.get(p);for(;k!==void 0&&++x<=k;){v.length>0&&v.push({type:"text",value:" "});let w=typeof n=="string"?n:n(d,x);typeof w=="string"&&(w={type:"text",value:w}),v.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(x>1?"-"+x:""),dataFootnoteBackref:"",ariaLabel:typeof r=="string"?r:r(d,x),className:["data-footnote-backref"]},children:Array.isArray(w)?w:[w]})}const S=h[h.length-1];if(S&&S.type==="element"&&S.tagName==="p"){const w=S.children[S.children.length-1];w&&w.type==="text"?w.value+=" ":S.children.push({type:"text",value:" "}),S.children.push(...v)}else h.push(...v);const b={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(h,!0)};e.patch(m,b),c.push(b)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...fm(a),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:` -`}]}}const Km=(function(e){if(e==null)return j9;if(typeof e=="function")return Zm(e);if(typeof e=="object")return Array.isArray(e)?S9(e):w9(e);if(typeof e=="string")return C9(e);throw new Error("Expected function, string, or object as test")});function S9(e){const t=[];let n=-1;for(;++n<e.length;)t[n]=Km(e[n]);return Zm(r);function r(...i){let o=-1;for(;++o<t.length;)if(t[o].apply(this,i))return!0;return!1}}function w9(e){const t=e;return Zm(n);function n(r){const i=r;let o;for(o in e)if(i[o]!==t[o])return!1;return!0}}function C9(e){return Zm(t);function t(n){return n&&n.type===e}}function Zm(e){return t;function t(n,r,i){return!!(E9(n)&&e.call(this,n,typeof r=="number"?r:void 0,i||void 0))}}function j9(){return!0}function E9(e){return e!==null&&typeof e=="object"&&"type"in e}const eI=[],N9=!0,ev=!1,I9="skip";function tI(e,t,n,r){let i;typeof t=="function"&&typeof n!="function"?(r=n,n=t):i=t;const o=Km(i),a=r?-1:1;c(e,void 0,[])();function c(d,m,h){const p=d&&typeof d=="object"?d:{};if(typeof p.type=="string"){const x=typeof p.tagName=="string"?p.tagName:typeof p.name=="string"?p.name:void 0;Object.defineProperty(g,"name",{value:"node ("+(d.type+(x?"<"+x+">":""))+")"})}return g;function g(){let x=eI,v,k,S;if((!t||o(d,m,h[h.length-1]||void 0))&&(x=T9(n(d,h)),x[0]===ev))return x;if("children"in d&&d.children){const b=d;if(b.children&&x[0]!==I9)for(k=(r?b.children.length:-1)+a,S=h.concat(b);k>-1&&k<b.children.length;){const w=b.children[k];if(v=c(w,k,S)(),v[0]===ev)return v;k=typeof v[1]=="number"?v[1]:k+a}}return x}}}function T9(e){return Array.isArray(e)?e:typeof e=="number"?[N9,e]:e==null?eI:[e]}function b0(e,t,n,r){let i,o,a;typeof t=="function"&&typeof n!="function"?(o=void 0,a=t,i=n):(o=t,a=n,i=r),tI(e,o,c,i);function c(d,m){const h=m[m.length-1],p=h?h.children.indexOf(d):void 0;return a(d,p,h)}}const tv={}.hasOwnProperty,R9={};function A9(e,t){const n=t||R9,r=new Map,i=new Map,o=new Map,a={...h9,...n.handlers},c={all:m,applyData:D9,definitionById:r,footnoteById:i,footnoteCounts:o,footnoteOrder:[],handlers:a,one:d,options:n,patch:M9,wrap:L9};return b0(e,function(h){if(h.type==="definition"||h.type==="footnoteDefinition"){const p=h.type==="definition"?r:i,g=String(h.identifier).toUpperCase();p.has(g)||p.set(g,h)}}),c;function d(h,p){const g=h.type,x=c.handlers[g];if(tv.call(c.handlers,g)&&x)return x(c,h,p);if(c.options.passThrough&&c.options.passThrough.includes(g)){if("children"in h){const{children:k,...S}=h,b=fm(S);return b.children=c.all(h),b}return fm(h)}return(c.options.unknownHandler||O9)(c,h,p)}function m(h){const p=[];if("children"in h){const g=h.children;let x=-1;for(;++x<g.length;){const v=c.one(g[x],h);if(v){if(x&&g[x-1].type==="break"&&(!Array.isArray(v)&&v.type==="text"&&(v.value=Nw(v.value)),!Array.isArray(v)&&v.type==="element")){const k=v.children[0];k&&k.type==="text"&&(k.value=Nw(k.value))}Array.isArray(v)?p.push(...v):p.push(v)}}}return p}}function M9(e,t){e.position&&(t.position=_z(e))}function D9(e,t){let n=t;if(e&&e.data){const r=e.data.hName,i=e.data.hChildren,o=e.data.hProperties;if(typeof r=="string")if(n.type==="element")n.tagName=r;else{const a="children"in n?n.children:[n];n={type:"element",tagName:r,properties:{},children:a}}n.type==="element"&&o&&Object.assign(n.properties,fm(o)),"children"in n&&n.children&&i!==null&&i!==void 0&&(n.children=i)}return n}function O9(e,t){const n=t.data||{},r="value"in t&&!(tv.call(n,"hProperties")||tv.call(n,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function L9(e,t){const n=[];let r=-1;for(t&&n.push({type:"text",value:` -`});++r<e.length;)r&&n.push({type:"text",value:` -`}),n.push(e[r]);return t&&e.length>0&&n.push({type:"text",value:` -`}),n}function Nw(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Iw(e,t){const n=A9(e,t),r=n.one(e,void 0),i=k9(n),o=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return i&&o.children.push({type:"text",value:` -`},i),o}function z9(e,t){return e&&"run"in e?async function(n,r){const i=Iw(n,{file:r,...t});await e.run(i,r)}:function(n,r){return Iw(n,{file:r,...e||t})}}function Tw(e){if(e)throw e}var qg,Rw;function P9(){if(Rw)return qg;Rw=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=function(m){return typeof Array.isArray=="function"?Array.isArray(m):t.call(m)==="[object Array]"},o=function(m){if(!m||t.call(m)!=="[object Object]")return!1;var h=e.call(m,"constructor"),p=m.constructor&&m.constructor.prototype&&e.call(m.constructor.prototype,"isPrototypeOf");if(m.constructor&&!h&&!p)return!1;var g;for(g in m);return typeof g>"u"||e.call(m,g)},a=function(m,h){n&&h.name==="__proto__"?n(m,h.name,{enumerable:!0,configurable:!0,value:h.newValue,writable:!0}):m[h.name]=h.newValue},c=function(m,h){if(h==="__proto__")if(e.call(m,h)){if(r)return r(m,h).value}else return;return m[h]};return qg=function d(){var m,h,p,g,x,v,k=arguments[0],S=1,b=arguments.length,w=!1;for(typeof k=="boolean"&&(w=k,k=arguments[1]||{},S=2),(k==null||typeof k!="object"&&typeof k!="function")&&(k={});S<b;++S)if(m=arguments[S],m!=null)for(h in m)p=c(k,h),g=c(m,h),k!==g&&(w&&g&&(o(g)||(x=i(g)))?(x?(x=!1,v=p&&i(p)?p:[]):v=p&&o(p)?p:{},a(k,{name:h,newValue:d(w,v,g)})):typeof g<"u"&&a(k,{name:h,newValue:g}));return k},qg}var B9=P9();const Gg=ca(B9);function nv(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function $9(){const e=[],t={run:n,use:r};return t;function n(...i){let o=-1;const a=i.pop();if(typeof a!="function")throw new TypeError("Expected function as last argument, not "+a);c(null,...i);function c(d,...m){const h=e[++o];let p=-1;if(d){a(d);return}for(;++p<i.length;)(m[p]===null||m[p]===void 0)&&(m[p]=i[p]);i=m,h?H9(h,c)(...m):a(null,...m)}}function r(i){if(typeof i!="function")throw new TypeError("Expected `middelware` to be a function, not "+i);return e.push(i),t}}function H9(e,t){let n;return r;function r(...a){const c=e.length>a.length;let d;c&&a.push(i);try{d=e.apply(this,a)}catch(m){const h=m;if(c&&n)throw h;return i(h)}c||(d&&d.then&&typeof d.then=="function"?d.then(o,i):d instanceof Error?i(d):o(d))}function i(a,...c){n||(n=!0,t(a,...c))}function o(a){i(null,a)}}const es={basename:F9,dirname:V9,extname:U9,join:q9,sep:"/"};function F9(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Vu(e);let n=0,r=-1,i=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else r<0&&(o=!0,r=i+1);return r<0?"":e.slice(n,r)}if(t===e)return"";let a=-1,c=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else a<0&&(o=!0,a=i+1),c>-1&&(e.codePointAt(i)===t.codePointAt(c--)?c<0&&(r=i):(c=-1,r=a));return n===r?r=a:r<0&&(r=e.length),e.slice(n,r)}function V9(e){if(Vu(e),e.length===0)return".";let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||(r=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function U9(e){Vu(e);let t=e.length,n=-1,r=0,i=-1,o=0,a;for(;t--;){const c=e.codePointAt(t);if(c===47){if(a){r=t+1;break}continue}n<0&&(a=!0,n=t+1),c===46?i<0?i=t:o!==1&&(o=1):i>-1&&(o=-1)}return i<0||n<0||o===0||o===1&&i===n-1&&i===r+1?"":e.slice(i,n)}function q9(...e){let t=-1,n;for(;++t<e.length;)Vu(e[t]),e[t]&&(n=n===void 0?e[t]:n+"/"+e[t]);return n===void 0?".":G9(n)}function G9(e){Vu(e);const t=e.codePointAt(0)===47;let n=W9(e,!t);return n.length===0&&!t&&(n="."),n.length>0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function W9(e,t){let n="",r=0,i=-1,o=0,a=-1,c,d;for(;++a<=e.length;){if(a<e.length)c=e.codePointAt(a);else{if(c===47)break;c=47}if(c===47){if(!(i===a-1||o===1))if(i!==a-1&&o===2){if(n.length<2||r!==2||n.codePointAt(n.length-1)!==46||n.codePointAt(n.length-2)!==46){if(n.length>2){if(d=n.lastIndexOf("/"),d!==n.length-1){d<0?(n="",r=0):(n=n.slice(0,d),r=n.length-1-n.lastIndexOf("/")),i=a,o=0;continue}}else if(n.length>0){n="",r=0,i=a,o=0;continue}}t&&(n=n.length>0?n+"/..":"..",r=2)}else n.length>0?n+="/"+e.slice(i+1,a):n=e.slice(i+1,a),r=a-i-1;i=a,o=0}else c===46&&o>-1?o++:o=-1}return n}function Vu(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Y9={cwd:X9};function X9(){return"/"}function rv(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function K9(e){if(typeof e=="string")e=new URL(e);else if(!rv(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Z9(e)}function Z9(e){if(e.hostname!==""){const r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}const t=e.pathname;let n=-1;for(;++n<t.length;)if(t.codePointAt(n)===37&&t.codePointAt(n+1)===50){const r=t.codePointAt(n+2);if(r===70||r===102){const i=new TypeError("File URL path must not include encoded / characters");throw i.code="ERR_INVALID_FILE_URL_PATH",i}}return decodeURIComponent(t)}const Wg=["history","path","basename","stem","extname","dirname"];class nI{constructor(t){let n;t?rv(t)?n={path:t}:typeof t=="string"||Q9(t)?n={value:t}:n=t:n={},this.cwd="cwd"in n?"":Y9.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++r<Wg.length;){const o=Wg[r];o in n&&n[o]!==void 0&&n[o]!==null&&(this[o]=o==="history"?[...n[o]]:n[o])}let i;for(i in n)Wg.includes(i)||(this[i]=n[i])}get basename(){return typeof this.path=="string"?es.basename(this.path):void 0}set basename(t){Xg(t,"basename"),Yg(t,"basename"),this.path=es.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?es.dirname(this.path):void 0}set dirname(t){Aw(this.basename,"dirname"),this.path=es.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?es.extname(this.path):void 0}set extname(t){if(Yg(t,"extname"),Aw(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=es.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){rv(t)&&(t=K9(t)),Xg(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?es.basename(this.path,this.extname):void 0}set stem(t){Xg(t,"stem"),Yg(t,"stem"),this.path=es.join(this.dirname||"",t+(this.extname||""))}fail(t,n,r){const i=this.message(t,n,r);throw i.fatal=!0,i}info(t,n,r){const i=this.message(t,n,r);return i.fatal=void 0,i}message(t,n,r){const i=new zr(t,n,r);return this.path&&(i.name=this.path+":"+i.name,i.file=this.path),i.fatal=!1,this.messages.push(i),i}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}}function Yg(e,t){if(e&&e.includes(es.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+es.sep+"`")}function Xg(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function Aw(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function Q9(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const J9=(function(e){const r=this.constructor.prototype,i=r[e],o=function(){return i.apply(o,arguments)};return Object.setPrototypeOf(o,r),o}),e$={}.hasOwnProperty;class _0 extends J9{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=$9()}copy(){const t=new _0;let n=-1;for(;++n<this.attachers.length;){const r=this.attachers[n];t.use(...r)}return t.data(Gg(!0,{},this.namespace)),t}data(t,n){return typeof t=="string"?arguments.length===2?(Qg("data",this.frozen),this.namespace[t]=n,this):e$.call(this.namespace,t)&&this.namespace[t]||void 0:t?(Qg("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;const t=this;for(;++this.freezeIndex<this.attachers.length;){const[n,...r]=this.attachers[this.freezeIndex];if(r[0]===!1)continue;r[0]===!0&&(r[0]=void 0);const i=n.call(t,...r);typeof i=="function"&&this.transformers.use(i)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();const n=df(t),r=this.parser||this.Parser;return Kg("parse",r),r(String(n),n)}process(t,n){const r=this;return this.freeze(),Kg("process",this.parser||this.Parser),Zg("process",this.compiler||this.Compiler),n?i(void 0,n):new Promise(i);function i(o,a){const c=df(t),d=r.parse(c);r.run(d,c,function(h,p,g){if(h||!p||!g)return m(h);const x=p,v=r.stringify(x,g);r$(v)?g.value=v:g.result=v,m(h,g)});function m(h,p){h||!p?a(h):o?o(p):n(void 0,p)}}}processSync(t){let n=!1,r;return this.freeze(),Kg("processSync",this.parser||this.Parser),Zg("processSync",this.compiler||this.Compiler),this.process(t,i),Dw("processSync","process",n),r;function i(o,a){n=!0,Tw(o),r=a}}run(t,n,r){Mw(t),this.freeze();const i=this.transformers;return!r&&typeof n=="function"&&(r=n,n=void 0),r?o(void 0,r):new Promise(o);function o(a,c){const d=df(n);i.run(t,d,m);function m(h,p,g){const x=p||t;h?c(h):a?a(x):r(void 0,x,g)}}}runSync(t,n){let r=!1,i;return this.run(t,n,o),Dw("runSync","run",r),i;function o(a,c){Tw(a),i=c,r=!0}}stringify(t,n){this.freeze();const r=df(n),i=this.compiler||this.Compiler;return Zg("stringify",i),Mw(t),i(t,r)}use(t,...n){const r=this.attachers,i=this.namespace;if(Qg("use",this.frozen),t!=null)if(typeof t=="function")d(t,n);else if(typeof t=="object")Array.isArray(t)?c(t):a(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function o(m){if(typeof m=="function")d(m,[]);else if(typeof m=="object")if(Array.isArray(m)){const[h,...p]=m;d(h,p)}else a(m);else throw new TypeError("Expected usable value, not `"+m+"`")}function a(m){if(!("plugins"in m)&&!("settings"in m))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");c(m.plugins),m.settings&&(i.settings=Gg(!0,i.settings,m.settings))}function c(m){let h=-1;if(m!=null)if(Array.isArray(m))for(;++h<m.length;){const p=m[h];o(p)}else throw new TypeError("Expected a list of plugins, not `"+m+"`")}function d(m,h){let p=-1,g=-1;for(;++p<r.length;)if(r[p][0]===m){g=p;break}if(g===-1)r.push([m,...h]);else if(h.length>0){let[x,...v]=h;const k=r[g][1];nv(k)&&nv(x)&&(x=Gg(!0,k,x)),r[g]=[m,x,...v]}}}}const t$=new _0().freeze();function Kg(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Zg(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Qg(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Mw(e){if(!nv(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Dw(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function df(e){return n$(e)?e:new nI(e)}function n$(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function r$(e){return typeof e=="string"||i$(e)}function i$(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const s$="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Ow=[],Lw={allowDangerousHtml:!0},o$=/^(https?|ircs?|mailto|xmpp)$/i,a$=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function l$(e){const t=c$(e),n=u$(e);return d$(t.runSync(t.parse(n),n),e)}function c$(e){const t=e.rehypePlugins||Ow,n=e.remarkPlugins||Ow,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Lw}:Lw;return t$().use(VB).use(n).use(z9,r).use(t)}function u$(e){const t=e.children||"",n=new nI;return typeof t=="string"&&(n.value=t),n}function d$(e,t){const n=t.allowedElements,r=t.allowElement,i=t.components,o=t.disallowedElements,a=t.skipHtml,c=t.unwrapDisallowed,d=t.urlTransform||f$;for(const h of a$)Object.hasOwn(t,h.from)&&(""+h.from+(h.to?"use `"+h.to+"` instead":"remove it")+s$+h.id,void 0);return b0(e,m),jz(e,{Fragment:u.Fragment,components:i,ignoreInvalidStyle:!0,jsx:u.jsx,jsxs:u.jsxs,passKeys:!0,passNode:!0});function m(h,p,g){if(h.type==="raw"&&g&&typeof p=="number")return a?g.children.splice(p,1):g.children[p]={type:"text",value:h.value},p;if(h.type==="element"){let x;for(x in Fg)if(Object.hasOwn(Fg,x)&&Object.hasOwn(h.properties,x)){const v=h.properties[x],k=Fg[x];(k===null||k.includes(h.tagName))&&(h.properties[x]=d(String(v||""),x,h))}}if(h.type==="element"){let x=n?!n.includes(h.tagName):o?o.includes(h.tagName):!1;if(!x&&r&&typeof p=="number"&&(x=!r(h,p,g)),x&&g&&typeof p=="number")return c&&h.children?g.children.splice(p,1,...h.children):g.children.splice(p,1),p}}}function f$(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||o$.test(e.slice(0,t))?e:""}function zw(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}function m$(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function p$(e,t,n){const i=Km((n||{}).ignore||[]),o=h$(t);let a=-1;for(;++a<o.length;)tI(e,"text",c);function c(m,h){let p=-1,g;for(;++p<h.length;){const x=h[p],v=g?g.children:void 0;if(i(x,v?v.indexOf(x):void 0,g))return;g=x}if(g)return d(m,h)}function d(m,h){const p=h[h.length-1],g=o[a][0],x=o[a][1];let v=0;const S=p.children.indexOf(m);let b=!1,w=[];g.lastIndex=0;let j=g.exec(m.value);for(;j;){const N=j.index,O={index:j.index,input:j.input,stack:[...h,m]};let R=x(...j,O);if(typeof R=="string"&&(R=R.length>0?{type:"text",value:R}:void 0),R===!1?g.lastIndex=N+1:(v!==N&&w.push({type:"text",value:m.value.slice(v,N)}),Array.isArray(R)?w.push(...R):R&&w.push(R),v=N+j[0].length,b=!0),!g.global)break;j=g.exec(m.value)}return b?(v<m.value.length&&w.push({type:"text",value:m.value.slice(v)}),p.children.splice(S,1,...w)):w=[m],S+w.length}}function h$(e){const t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const n=!e[0]||Array.isArray(e[0])?e:[e];let r=-1;for(;++r<n.length;){const i=n[r];t.push([g$(i[0]),y$(i[1])])}return t}function g$(e){return typeof e=="string"?new RegExp(m$(e),"g"):e}function y$(e){return typeof e=="function"?e:function(){return e}}const Jg="phrasing",ey=["autolink","link","image","label"];function x$(){return{transforms:[C$],enter:{literalAutolink:b$,literalAutolinkEmail:ty,literalAutolinkHttp:ty,literalAutolinkWww:ty},exit:{literalAutolink:w$,literalAutolinkEmail:S$,literalAutolinkHttp:_$,literalAutolinkWww:k$}}}function v$(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Jg,notInConstruct:ey},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Jg,notInConstruct:ey},{character:":",before:"[ps]",after:"\\/",inConstruct:Jg,notInConstruct:ey}]}}function b$(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function ty(e){this.config.enter.autolinkProtocol.call(this,e)}function _$(e){this.config.exit.autolinkProtocol.call(this,e)}function k$(e){this.config.exit.data.call(this,e);const t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function S$(e){this.config.exit.autolinkEmail.call(this,e)}function w$(e){this.exit(e)}function C$(e){p$(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,j$],[new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)","gu"),E$]],{ignore:["link","linkReference"]})}function j$(e,t,n,r,i){let o="";if(!rI(i)||(/^w/i.test(t)&&(n=t+n,t="",o="http://"),!N$(n)))return!1;const a=I$(n+r);if(!a[0])return!1;const c={type:"link",title:null,url:o+t+a[0],children:[{type:"text",value:t+a[0]}]};return a[1]?[c,{type:"text",value:a[1]}]:c}function E$(e,t,n,r){return!rI(r,!0)||/[-\d_]$/.test(n)?!1:{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function N$(e){const t=e.split(".");return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function I$(e){const t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const i=zw(e,"(");let o=zw(e,")");for(;r!==-1&&i>o;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),o++;return[e,n]}function rI(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||ia(n)||Wm(n))&&(!t||n!==47)}iI.peek=P$;function T$(){this.buffer()}function R$(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function A$(){this.buffer()}function M$(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function D$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Vi(this.sliceSerialize(e)).toLowerCase(),n.label=t}function O$(e){this.exit(e)}function L$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Vi(this.sliceSerialize(e)).toLowerCase(),n.label=t}function z$(e){this.exit(e)}function P$(){return"["}function iI(e,t,n,r){const i=n.createTracker(r);let o=i.move("[^");const a=n.enter("footnoteReference"),c=n.enter("reference");return o+=i.move(n.safe(n.associationId(e),{after:"]",before:o})),c(),a(),o+=i.move("]"),o}function B$(){return{enter:{gfmFootnoteCallString:T$,gfmFootnoteCall:R$,gfmFootnoteDefinitionLabelString:A$,gfmFootnoteDefinition:M$},exit:{gfmFootnoteCallString:D$,gfmFootnoteCall:O$,gfmFootnoteDefinitionLabelString:L$,gfmFootnoteDefinition:z$}}}function $$(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:iI},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(r,i,o,a){const c=o.createTracker(a);let d=c.move("[^");const m=o.enter("footnoteDefinition"),h=o.enter("label");return d+=c.move(o.safe(o.associationId(r),{before:d,after:"]"})),h(),d+=c.move("]:"),r.children&&r.children.length>0&&(c.shift(4),d+=c.move((t?` -`:" ")+o.indentLines(o.containerFlow(r,c.current()),t?sI:H$))),m(),d}}function H$(e,t,n){return t===0?e:sI(e,t,n)}function sI(e,t,n){return(n?"":" ")+e}const F$=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];oI.peek=W$;function V$(){return{canContainEols:["delete"],enter:{strikethrough:q$},exit:{strikethrough:G$}}}function U$(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:F$}],handlers:{delete:oI}}}function q$(e){this.enter({type:"delete",children:[]},e)}function G$(e){this.exit(e)}function oI(e,t,n,r){const i=n.createTracker(r),o=n.enter("strikethrough");let a=i.move("~~");return a+=n.containerPhrasing(e,{...i.current(),before:a,after:"~"}),a+=i.move("~~"),o(),a}function W$(){return"~"}function Y$(e){return e.length}function X$(e,t){const n=t||{},r=(n.align||[]).concat(),i=n.stringLength||Y$,o=[],a=[],c=[],d=[];let m=0,h=-1;for(;++h<e.length;){const k=[],S=[];let b=-1;for(e[h].length>m&&(m=e[h].length);++b<e[h].length;){const w=K$(e[h][b]);if(n.alignDelimiters!==!1){const j=i(w);S[b]=j,(d[b]===void 0||j>d[b])&&(d[b]=j)}k.push(w)}a[h]=k,c[h]=S}let p=-1;if(typeof r=="object"&&"length"in r)for(;++p<m;)o[p]=Pw(r[p]);else{const k=Pw(r);for(;++p<m;)o[p]=k}p=-1;const g=[],x=[];for(;++p<m;){const k=o[p];let S="",b="";k===99?(S=":",b=":"):k===108?S=":":k===114&&(b=":");let w=n.alignDelimiters===!1?1:Math.max(1,d[p]-S.length-b.length);const j=S+"-".repeat(w)+b;n.alignDelimiters!==!1&&(w=S.length+w+b.length,w>d[p]&&(d[p]=w),x[p]=w),g[p]=j}a.splice(1,0,g),c.splice(1,0,x),h=-1;const v=[];for(;++h<a.length;){const k=a[h],S=c[h];p=-1;const b=[];for(;++p<m;){const w=k[p]||"";let j="",N="";if(n.alignDelimiters!==!1){const O=d[p]-(S[p]||0),R=o[p];R===114?j=" ".repeat(O):R===99?O%2?(j=" ".repeat(O/2+.5),N=" ".repeat(O/2-.5)):(j=" ".repeat(O/2),N=j):N=" ".repeat(O)}n.delimiterStart!==!1&&!p&&b.push("|"),n.padding!==!1&&!(n.alignDelimiters===!1&&w==="")&&(n.delimiterStart!==!1||p)&&b.push(" "),n.alignDelimiters!==!1&&b.push(j),b.push(w),n.alignDelimiters!==!1&&b.push(N),n.padding!==!1&&b.push(" "),(n.delimiterEnd!==!1||p!==m-1)&&b.push("|")}v.push(n.delimiterEnd===!1?b.join("").replace(/ +$/,""):b.join(""))}return v.join(` -`)}function K$(e){return e==null?"":String(e)}function Pw(e){const t=typeof e=="string"?e.codePointAt(0):0;return t===67||t===99?99:t===76||t===108?108:t===82||t===114?114:0}function Z$(e,t,n,r){const i=n.enter("blockquote"),o=n.createTracker(r);o.move("> "),o.shift(2);const a=n.indentLines(n.containerFlow(e,o.current()),Q$);return i(),a}function Q$(e,t,n){return">"+(n?"":" ")+e}function J$(e,t){return Bw(e,t.inConstruct,!0)&&!Bw(e,t.notInConstruct,!1)}function Bw(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++r<t.length;)if(e.includes(t[r]))return!0;return!1}function $w(e,t,n,r){let i=-1;for(;++i<n.unsafe.length;)if(n.unsafe[i].character===` -`&&J$(n.stack,n.unsafe[i]))return/[ \t]/.test(r.before)?"":" ";return`\\ -`}function e7(e,t){const n=String(e);let r=n.indexOf(t),i=r,o=0,a=0;if(typeof t!="string")throw new TypeError("Expected substring");for(;r!==-1;)r===i?++o>a&&(a=o):o=1,i=r+t.length,r=n.indexOf(t,i);return a}function t7(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function n7(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function r7(e,t,n,r){const i=n7(n),o=e.value||"",a=i==="`"?"GraveAccent":"Tilde";if(t7(e,n)){const p=n.enter("codeIndented"),g=n.indentLines(o,i7);return p(),g}const c=n.createTracker(r),d=i.repeat(Math.max(e7(o,i)+1,3)),m=n.enter("codeFenced");let h=c.move(d);if(e.lang){const p=n.enter(`codeFencedLang${a}`);h+=c.move(n.safe(e.lang,{before:h,after:" ",encode:["`"],...c.current()})),p()}if(e.lang&&e.meta){const p=n.enter(`codeFencedMeta${a}`);h+=c.move(" "),h+=c.move(n.safe(e.meta,{before:h,after:` -`,encode:["`"],...c.current()})),p()}return h+=c.move(` -`),o&&(h+=c.move(o+` -`)),h+=c.move(d),m(),h}function i7(e,t,n){return(n?"":" ")+e}function k0(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function s7(e,t,n,r){const i=k0(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("definition");let c=n.enter("label");const d=n.createTracker(r);let m=d.move("[");return m+=d.move(n.safe(n.associationId(e),{before:m,after:"]",...d.current()})),m+=d.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(c=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":` -`,...d.current()}))),c(),e.title&&(c=n.enter(`title${o}`),m+=d.move(" "+i),m+=d.move(n.safe(e.title,{before:m,after:i,...d.current()})),m+=d.move(i),c()),a(),m}function o7(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Nu(e){return"&#x"+e.toString(16).toUpperCase()+";"}function mm(e,t,n){const r=jl(e),i=jl(t);return r===void 0?i===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}aI.peek=a7;function aI(e,t,n,r){const i=o7(n),o=n.enter("emphasis"),a=n.createTracker(r),c=a.move(i);let d=a.move(n.containerPhrasing(e,{after:i,before:c,...a.current()}));const m=d.charCodeAt(0),h=mm(r.before.charCodeAt(r.before.length-1),m,i);h.inside&&(d=Nu(m)+d.slice(1));const p=d.charCodeAt(d.length-1),g=mm(r.after.charCodeAt(0),p,i);g.inside&&(d=d.slice(0,-1)+Nu(p));const x=a.move(i);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:h.outside},c+d+x}function a7(e,t,n){return n.options.emphasis||"*"}function l7(e,t){let n=!1;return b0(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return n=!0,ev}),!!((!e.depth||e.depth<3)&&m0(e)&&(t.options.setext||n))}function c7(e,t,n,r){const i=Math.max(Math.min(6,e.depth||1),1),o=n.createTracker(r);if(l7(e,n)){const h=n.enter("headingSetext"),p=n.enter("phrasing"),g=n.containerPhrasing(e,{...o.current(),before:` -`,after:` -`});return p(),h(),g+` -`+(i===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const a="#".repeat(i),c=n.enter("headingAtx"),d=n.enter("phrasing");o.move(a+" ");let m=n.containerPhrasing(e,{before:"# ",after:` -`,...o.current()});return/^[\t ]/.test(m)&&(m=Nu(m.charCodeAt(0))+m.slice(1)),m=m?a+" "+m:a,n.options.closeAtx&&(m+=" "+a),d(),c(),m}lI.peek=u7;function lI(e){return e.value||""}function u7(){return"<"}cI.peek=d7;function cI(e,t,n,r){const i=k0(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("image");let c=n.enter("label");const d=n.createTracker(r);let m=d.move("![");return m+=d.move(n.safe(e.alt,{before:m,after:"]",...d.current()})),m+=d.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(c=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":")",...d.current()}))),c(),e.title&&(c=n.enter(`title${o}`),m+=d.move(" "+i),m+=d.move(n.safe(e.title,{before:m,after:i,...d.current()})),m+=d.move(i),c()),m+=d.move(")"),a(),m}function d7(){return"!"}uI.peek=f7;function uI(e,t,n,r){const i=e.referenceType,o=n.enter("imageReference");let a=n.enter("label");const c=n.createTracker(r);let d=c.move("![");const m=n.safe(e.alt,{before:d,after:"]",...c.current()});d+=c.move(m+"]["),a();const h=n.stack;n.stack=[],a=n.enter("reference");const p=n.safe(n.associationId(e),{before:d,after:"]",...c.current()});return a(),n.stack=h,o(),i==="full"||!m||m!==p?d+=c.move(p+"]"):i==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function f7(){return"!"}dI.peek=m7;function dI(e,t,n){let r=e.value||"",i="`",o=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++o<n.unsafe.length;){const a=n.unsafe[o],c=n.compilePattern(a);let d;if(a.atBreak)for(;d=c.exec(r);){let m=d.index;r.charCodeAt(m)===10&&r.charCodeAt(m-1)===13&&m--,r=r.slice(0,m)+" "+r.slice(d.index+1)}}return i+r+i}function m7(){return"`"}function fI(e,t){const n=m0(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(n===e.url||"mailto:"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}mI.peek=p7;function mI(e,t,n,r){const i=k0(n),o=i==='"'?"Quote":"Apostrophe",a=n.createTracker(r);let c,d;if(fI(e,n)){const h=n.stack;n.stack=[],c=n.enter("autolink");let p=a.move("<");return p+=a.move(n.containerPhrasing(e,{before:p,after:">",...a.current()})),p+=a.move(">"),c(),n.stack=h,p}c=n.enter("link"),d=n.enter("label");let m=a.move("[");return m+=a.move(n.containerPhrasing(e,{before:m,after:"](",...a.current()})),m+=a.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=n.enter("destinationLiteral"),m+=a.move("<"),m+=a.move(n.safe(e.url,{before:m,after:">",...a.current()})),m+=a.move(">")):(d=n.enter("destinationRaw"),m+=a.move(n.safe(e.url,{before:m,after:e.title?" ":")",...a.current()}))),d(),e.title&&(d=n.enter(`title${o}`),m+=a.move(" "+i),m+=a.move(n.safe(e.title,{before:m,after:i,...a.current()})),m+=a.move(i),d()),m+=a.move(")"),c(),m}function p7(e,t,n){return fI(e,n)?"<":"["}pI.peek=h7;function pI(e,t,n,r){const i=e.referenceType,o=n.enter("linkReference");let a=n.enter("label");const c=n.createTracker(r);let d=c.move("[");const m=n.containerPhrasing(e,{before:d,after:"]",...c.current()});d+=c.move(m+"]["),a();const h=n.stack;n.stack=[],a=n.enter("reference");const p=n.safe(n.associationId(e),{before:d,after:"]",...c.current()});return a(),n.stack=h,o(),i==="full"||!m||m!==p?d+=c.move(p+"]"):i==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function h7(){return"["}function S0(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function g7(e){const t=S0(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function y7(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function hI(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function x7(e,t,n,r){const i=n.enter("list"),o=n.bulletCurrent;let a=e.ordered?y7(n):S0(n);const c=e.ordered?a==="."?")":".":g7(n);let d=t&&n.bulletLastUsed?a===n.bulletLastUsed:!1;if(!e.ordered){const h=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&h&&(!h.children||!h.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(d=!0),hI(n)===a&&h){let p=-1;for(;++p<e.children.length;){const g=e.children[p];if(g&&g.type==="listItem"&&g.children&&g.children[0]&&g.children[0].type==="thematicBreak"){d=!0;break}}}}d&&(a=c),n.bulletCurrent=a;const m=n.containerFlow(e,r);return n.bulletLastUsed=a,n.bulletCurrent=o,i(),m}function v7(e){const t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function b7(e,t,n,r){const i=v7(n);let o=n.bulletCurrent||S0(n);t&&t.type==="list"&&t.ordered&&(o=(typeof t.start=="number"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let a=o.length+1;(i==="tab"||i==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(a=Math.ceil(a/4)*4);const c=n.createTracker(r);c.move(o+" ".repeat(a-o.length)),c.shift(a);const d=n.enter("listItem"),m=n.indentLines(n.containerFlow(e,c.current()),h);return d(),m;function h(p,g,x){return g?(x?"":" ".repeat(a))+p:(x?o:o+" ".repeat(a-o.length))+p}}function _7(e,t,n,r){const i=n.enter("paragraph"),o=n.enter("phrasing"),a=n.containerPhrasing(e,r);return o(),i(),a}const k7=Km(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function S7(e,t,n,r){return(e.children.some(function(a){return k7(a)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function w7(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}gI.peek=C7;function gI(e,t,n,r){const i=w7(n),o=n.enter("strong"),a=n.createTracker(r),c=a.move(i+i);let d=a.move(n.containerPhrasing(e,{after:i,before:c,...a.current()}));const m=d.charCodeAt(0),h=mm(r.before.charCodeAt(r.before.length-1),m,i);h.inside&&(d=Nu(m)+d.slice(1));const p=d.charCodeAt(d.length-1),g=mm(r.after.charCodeAt(0),p,i);g.inside&&(d=d.slice(0,-1)+Nu(p));const x=a.move(i+i);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:h.outside},c+d+x}function C7(e,t,n){return n.options.strong||"*"}function j7(e,t,n,r){return n.safe(e.value,r)}function E7(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function N7(e,t,n){const r=(hI(n)+(n.options.ruleSpaces?" ":"")).repeat(E7(n));return n.options.ruleSpaces?r.slice(0,-1):r}const yI={blockquote:Z$,break:$w,code:r7,definition:s7,emphasis:aI,hardBreak:$w,heading:c7,html:lI,image:cI,imageReference:uI,inlineCode:dI,link:mI,linkReference:pI,list:x7,listItem:b7,paragraph:_7,root:S7,strong:gI,text:j7,thematicBreak:N7};function I7(){return{enter:{table:T7,tableData:Hw,tableHeader:Hw,tableRow:A7},exit:{codeText:M7,table:R7,tableData:ny,tableHeader:ny,tableRow:ny}}}function T7(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function R7(e){this.exit(e),this.data.inTable=void 0}function A7(e){this.enter({type:"tableRow",children:[]},e)}function ny(e){this.exit(e)}function Hw(e){this.enter({type:"tableCell",children:[]},e)}function M7(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,D7));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function D7(e,t){return t==="|"?t:e}function O7(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,o=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:a,tableCell:d,tableRow:c}};function a(x,v,k,S){return m(h(x,k,S),x.align)}function c(x,v,k,S){const b=p(x,k,S),w=m([b]);return w.slice(0,w.indexOf(` -`))}function d(x,v,k,S){const b=k.enter("tableCell"),w=k.enter("phrasing"),j=k.containerPhrasing(x,{...S,before:o,after:o});return w(),b(),j}function m(x,v){return X$(x,{align:v,alignDelimiters:r,padding:n,stringLength:i})}function h(x,v,k){const S=x.children;let b=-1;const w=[],j=v.enter("table");for(;++b<S.length;)w[b]=p(S[b],v,k);return j(),w}function p(x,v,k){const S=x.children;let b=-1;const w=[],j=v.enter("tableRow");for(;++b<S.length;)w[b]=d(S[b],x,v,k);return j(),w}function g(x,v,k){let S=yI.inlineCode(x,v,k);return k.stack.includes("tableCell")&&(S=S.replace(/\|/g,"\\$&")),S}}function L7(){return{exit:{taskListCheckValueChecked:Fw,taskListCheckValueUnchecked:Fw,paragraph:P7}}}function z7(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:B7}}}function Fw(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function P7(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const n=this.stack[this.stack.length-1];n.type;const r=n.children[0];if(r&&r.type==="text"){const i=t.children;let o=-1,a;for(;++o<i.length;){const c=i[o];if(c.type==="paragraph"){a=c;break}}a===n&&(r.value=r.value.slice(1),r.value.length===0?n.children.shift():n.position&&r.position&&typeof r.position.start.offset=="number"&&(r.position.start.column++,r.position.start.offset++,n.position.start=Object.assign({},r.position.start)))}}this.exit(e)}function B7(e,t,n,r){const i=e.children[0],o=typeof e.checked=="boolean"&&i&&i.type==="paragraph",a="["+(e.checked?"x":" ")+"] ",c=n.createTracker(r);o&&c.move(a);let d=yI.listItem(e,t,n,{...r,...c.current()});return o&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,m)),d;function m(h){return h+a}}function $7(){return[x$(),B$(),V$(),I7(),L7()]}function H7(e){return{extensions:[v$(),$$(e),U$(),O7(e),z7()]}}const F7={tokenize:Y7,partial:!0},xI={tokenize:X7,partial:!0},vI={tokenize:K7,partial:!0},bI={tokenize:Z7,partial:!0},V7={tokenize:Q7,partial:!0},_I={name:"wwwAutolink",tokenize:G7,previous:SI},kI={name:"protocolAutolink",tokenize:W7,previous:wI},Bs={name:"emailAutolink",tokenize:q7,previous:CI},cs={};function U7(){return{text:cs}}let Yo=48;for(;Yo<123;)cs[Yo]=Bs,Yo++,Yo===58?Yo=65:Yo===91&&(Yo=97);cs[43]=Bs;cs[45]=Bs;cs[46]=Bs;cs[95]=Bs;cs[72]=[Bs,kI];cs[104]=[Bs,kI];cs[87]=[Bs,_I];cs[119]=[Bs,_I];function q7(e,t,n){const r=this;let i,o;return a;function a(p){return!iv(p)||!CI.call(r,r.previous)||w0(r.events)?n(p):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),c(p))}function c(p){return iv(p)?(e.consume(p),c):p===64?(e.consume(p),d):n(p)}function d(p){return p===46?e.check(V7,h,m)(p):p===45||p===95||Lr(p)?(o=!0,e.consume(p),d):h(p)}function m(p){return e.consume(p),i=!0,d}function h(p){return o&&i&&Fr(r.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(p)):n(p)}}function G7(e,t,n){const r=this;return i;function i(a){return a!==87&&a!==119||!SI.call(r,r.previous)||w0(r.events)?n(a):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(F7,e.attempt(xI,e.attempt(vI,o),n),n)(a))}function o(a){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(a)}}function W7(e,t,n){const r=this;let i="",o=!1;return a;function a(p){return(p===72||p===104)&&wI.call(r,r.previous)&&!w0(r.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),i+=String.fromCodePoint(p),e.consume(p),c):n(p)}function c(p){if(Fr(p)&&i.length<5)return i+=String.fromCodePoint(p),e.consume(p),c;if(p===58){const g=i.toLowerCase();if(g==="http"||g==="https")return e.consume(p),d}return n(p)}function d(p){return p===47?(e.consume(p),o?m:(o=!0,d)):n(p)}function m(p){return p===null||um(p)||En(p)||ia(p)||Wm(p)?n(p):e.attempt(xI,e.attempt(vI,h),n)(p)}function h(p){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(p)}}function Y7(e,t,n){let r=0;return i;function i(a){return(a===87||a===119)&&r<3?(r++,e.consume(a),i):a===46&&r===3?(e.consume(a),o):n(a)}function o(a){return a===null?n(a):t(a)}}function X7(e,t,n){let r,i,o;return a;function a(m){return m===46||m===95?e.check(bI,d,c)(m):m===null||En(m)||ia(m)||m!==45&&Wm(m)?d(m):(o=!0,e.consume(m),a)}function c(m){return m===95?r=!0:(i=r,r=void 0),e.consume(m),a}function d(m){return i||r||!o?n(m):t(m)}}function K7(e,t){let n=0,r=0;return i;function i(a){return a===40?(n++,e.consume(a),i):a===41&&r<n?o(a):a===33||a===34||a===38||a===39||a===41||a===42||a===44||a===46||a===58||a===59||a===60||a===63||a===93||a===95||a===126?e.check(bI,t,o)(a):a===null||En(a)||ia(a)?t(a):(e.consume(a),i)}function o(a){return a===41&&r++,e.consume(a),i}}function Z7(e,t,n){return r;function r(c){return c===33||c===34||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===63||c===95||c===126?(e.consume(c),r):c===38?(e.consume(c),o):c===93?(e.consume(c),i):c===60||c===null||En(c)||ia(c)?t(c):n(c)}function i(c){return c===null||c===40||c===91||En(c)||ia(c)?t(c):r(c)}function o(c){return Fr(c)?a(c):n(c)}function a(c){return c===59?(e.consume(c),r):Fr(c)?(e.consume(c),a):n(c)}}function Q7(e,t,n){return r;function r(o){return e.consume(o),i}function i(o){return Lr(o)?n(o):t(o)}}function SI(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||En(e)}function wI(e){return!Fr(e)}function CI(e){return!(e===47||iv(e))}function iv(e){return e===43||e===45||e===46||e===95||Lr(e)}function w0(e){let t=e.length,n=!1;for(;t--;){const r=e[t][1];if((r.type==="labelLink"||r.type==="labelImage")&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const J7={tokenize:aH,partial:!0};function eH(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:iH,continuation:{tokenize:sH},exit:oH}},text:{91:{name:"gfmFootnoteCall",tokenize:rH},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:tH,resolveTo:nH}}}}function tH(e,t,n){const r=this;let i=r.events.length;const o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a;for(;i--;){const d=r.events[i][1];if(d.type==="labelImage"){a=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return c;function c(d){if(!a||!a._balanced)return n(d);const m=Vi(r.sliceSerialize({start:a.end,end:r.now()}));return m.codePointAt(0)!==94||!o.includes(m.slice(1))?n(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),t(d))}}function nH(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},c=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",o,t],["enter",a,t],["exit",a,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...c),e}function rH(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o=0,a;return c;function c(p){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),d}function d(p){return p!==94?n(p):(e.enter("gfmFootnoteCallMarker"),e.consume(p),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(p){if(o>999||p===93&&!a||p===null||p===91||En(p))return n(p);if(p===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return i.includes(Vi(r.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(p)}return En(p)||(a=!0),o++,e.consume(p),p===92?h:m}function h(p){return p===91||p===92||p===93?(e.consume(p),o++,m):m(p)}}function iH(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o,a=0,c;return d;function d(v){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),m}function m(v){return v===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):n(v)}function h(v){if(a>999||v===93&&!c||v===null||v===91||En(v))return n(v);if(v===93){e.exit("chunkString");const k=e.exit("gfmFootnoteDefinitionLabelString");return o=Vi(r.sliceSerialize(k)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return En(v)||(c=!0),a++,e.consume(v),v===92?p:h}function p(v){return v===91||v===92||v===93?(e.consume(v),a++,h):h(v)}function g(v){return v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),i.includes(o)||i.push(o),nn(e,x,"gfmFootnoteDefinitionWhitespace")):n(v)}function x(v){return t(v)}}function sH(e,t,n){return e.check(Fu,t,e.attempt(J7,t,n))}function oH(e){e.exit("gfmFootnoteDefinition")}function aH(e,t,n){const r=this;return nn(e,i,"gfmFootnoteDefinitionIndent",5);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(o):n(o)}}function lH(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:o,resolveAll:i};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function i(a,c){let d=-1;for(;++d<a.length;)if(a[d][0]==="enter"&&a[d][1].type==="strikethroughSequenceTemporary"&&a[d][1]._close){let m=d;for(;m--;)if(a[m][0]==="exit"&&a[m][1].type==="strikethroughSequenceTemporary"&&a[m][1]._open&&a[d][1].end.offset-a[d][1].start.offset===a[m][1].end.offset-a[m][1].start.offset){a[d][1].type="strikethroughSequence",a[m][1].type="strikethroughSequence";const h={type:"strikethrough",start:Object.assign({},a[m][1].start),end:Object.assign({},a[d][1].end)},p={type:"strikethroughText",start:Object.assign({},a[m][1].end),end:Object.assign({},a[d][1].start)},g=[["enter",h,c],["enter",a[m][1],c],["exit",a[m][1],c],["enter",p,c]],x=c.parser.constructs.insideSpan.null;x&&mi(g,g.length,0,Ym(x,a.slice(m+1,d),c)),mi(g,g.length,0,[["exit",p,c],["enter",a[d][1],c],["exit",a[d][1],c],["exit",h,c]]),mi(a,m-1,d-m+3,g),d=m+g.length-2;break}}for(d=-1;++d<a.length;)a[d][1].type==="strikethroughSequenceTemporary"&&(a[d][1].type="data");return a}function o(a,c,d){const m=this.previous,h=this.events;let p=0;return g;function g(v){return m===126&&h[h.length-1][1].type!=="characterEscape"?d(v):(a.enter("strikethroughSequenceTemporary"),x(v))}function x(v){const k=jl(m);if(v===126)return p>1?d(v):(a.consume(v),p++,x);if(p<2&&!n)return d(v);const S=a.exit("strikethroughSequenceTemporary"),b=jl(v);return S._open=!b||b===2&&!!k,S._close=!k||k===2&&!!b,c(v)}}}class cH{constructor(){this.map=[]}add(t,n,r){uH(this,t,n,r)}consume(t){if(this.map.sort(function(o,a){return o[0]-a[0]}),this.map.length===0)return;let n=this.map.length;const r=[];for(;n>0;)n-=1,r.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];r.push(t.slice()),t.length=0;let i=r.pop();for(;i;){for(const o of i)t.push(o);i=r.pop()}this.map.length=0}}function uH(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i<e.map.length;){if(e.map[i][0]===t){e.map[i][1]+=n,e.map[i][2].push(...r);return}i+=1}e.map.push([t,n,r])}}function dH(e,t){let n=!1;const r=[];for(;t<e.length;){const i=e[t];if(n){if(i[0]==="enter")i[1].type==="tableContent"&&r.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(i[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const o=r.length-1;r[o]=r[o]==="left"?"center":"right"}}else if(i[1].type==="tableDelimiterRow")break}else i[0]==="enter"&&i[1].type==="tableDelimiterRow"&&(n=!0);t+=1}return r}function fH(){return{flow:{null:{name:"table",tokenize:mH,resolveAll:pH}}}}function mH(e,t,n){const r=this;let i=0,o=0,a;return c;function c(M){let A=r.events.length-1;for(;A>-1;){const B=r.events[A][1].type;if(B==="lineEnding"||B==="linePrefix")A--;else break}const $=A>-1?r.events[A][1].type:null,W=$==="tableHead"||$==="tableRow"?R:d;return W===R&&r.parser.lazy[r.now().line]?n(M):W(M)}function d(M){return e.enter("tableHead"),e.enter("tableRow"),m(M)}function m(M){return M===124||(a=!0,o+=1),h(M)}function h(M){return M===null?n(M):ft(M)?o>1?(o=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),x):n(M):Ft(M)?nn(e,h,"whitespace")(M):(o+=1,a&&(a=!1,i+=1),M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),a=!0,h):(e.enter("data"),p(M)))}function p(M){return M===null||M===124||En(M)?(e.exit("data"),h(M)):(e.consume(M),M===92?g:p)}function g(M){return M===92||M===124?(e.consume(M),p):p(M)}function x(M){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(M):(e.enter("tableDelimiterRow"),a=!1,Ft(M)?nn(e,v,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(M):v(M))}function v(M){return M===45||M===58?S(M):M===124?(a=!0,e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),k):O(M)}function k(M){return Ft(M)?nn(e,S,"whitespace")(M):S(M)}function S(M){return M===58?(o+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),b):M===45?(o+=1,b(M)):M===null||ft(M)?N(M):O(M)}function b(M){return M===45?(e.enter("tableDelimiterFiller"),w(M)):O(M)}function w(M){return M===45?(e.consume(M),w):M===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),j):(e.exit("tableDelimiterFiller"),j(M))}function j(M){return Ft(M)?nn(e,N,"whitespace")(M):N(M)}function N(M){return M===124?v(M):M===null||ft(M)?!a||i!==o?O(M):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(M)):O(M)}function O(M){return n(M)}function R(M){return e.enter("tableRow"),L(M)}function L(M){return M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),L):M===null||ft(M)?(e.exit("tableRow"),t(M)):Ft(M)?nn(e,L,"whitespace")(M):(e.enter("data"),I(M))}function I(M){return M===null||M===124||En(M)?(e.exit("data"),L(M)):(e.consume(M),M===92?D:I)}function D(M){return M===92||M===124?(e.consume(M),I):I(M)}}function pH(e,t){let n=-1,r=!0,i=0,o=[0,0,0,0],a=[0,0,0,0],c=!1,d=0,m,h,p;const g=new cH;for(;++n<e.length;){const x=e[n],v=x[1];x[0]==="enter"?v.type==="tableHead"?(c=!1,d!==0&&(Vw(g,t,d,m,h),h=void 0,d=0),m={type:"table",start:Object.assign({},v.start),end:Object.assign({},v.end)},g.add(n,0,[["enter",m,t]])):v.type==="tableRow"||v.type==="tableDelimiterRow"?(r=!0,p=void 0,o=[0,0,0,0],a=[0,n+1,0,0],c&&(c=!1,h={type:"tableBody",start:Object.assign({},v.start),end:Object.assign({},v.end)},g.add(n,0,[["enter",h,t]])),i=v.type==="tableDelimiterRow"?2:h?3:1):i&&(v.type==="data"||v.type==="tableDelimiterMarker"||v.type==="tableDelimiterFiller")?(r=!1,a[2]===0&&(o[1]!==0&&(a[0]=a[1],p=ff(g,t,o,i,void 0,p),o=[0,0,0,0]),a[2]=n)):v.type==="tableCellDivider"&&(r?r=!1:(o[1]!==0&&(a[0]=a[1],p=ff(g,t,o,i,void 0,p)),o=a,a=[o[1],n,0,0])):v.type==="tableHead"?(c=!0,d=n):v.type==="tableRow"||v.type==="tableDelimiterRow"?(d=n,o[1]!==0?(a[0]=a[1],p=ff(g,t,o,i,n,p)):a[1]!==0&&(p=ff(g,t,a,i,n,p)),i=0):i&&(v.type==="data"||v.type==="tableDelimiterMarker"||v.type==="tableDelimiterFiller")&&(a[3]=n)}for(d!==0&&Vw(g,t,d,m,h),g.consume(t.events),n=-1;++n<t.events.length;){const x=t.events[n];x[0]==="enter"&&x[1].type==="table"&&(x[1]._align=dH(t.events,n))}return e}function ff(e,t,n,r,i,o){const a=r===1?"tableHeader":r===2?"tableDelimiter":"tableData",c="tableContent";n[0]!==0&&(o.end=Object.assign({},nl(t.events,n[0])),e.add(n[0],0,[["exit",o,t]]));const d=nl(t.events,n[1]);if(o={type:a,start:Object.assign({},d),end:Object.assign({},d)},e.add(n[1],0,[["enter",o,t]]),n[2]!==0){const m=nl(t.events,n[2]),h=nl(t.events,n[3]),p={type:c,start:Object.assign({},m),end:Object.assign({},h)};if(e.add(n[2],0,[["enter",p,t]]),r!==2){const g=t.events[n[2]],x=t.events[n[3]];if(g[1].end=Object.assign({},x[1].end),g[1].type="chunkText",g[1].contentType="text",n[3]>n[2]+1){const v=n[2]+1,k=n[3]-n[2]-1;e.add(v,k,[])}}e.add(n[3]+1,0,[["exit",p,t]])}return i!==void 0&&(o.end=Object.assign({},nl(t.events,i)),e.add(i,0,[["exit",o,t]]),o=void 0),o}function Vw(e,t,n,r,i){const o=[],a=nl(t.events,n);i&&(i.end=Object.assign({},a),o.push(["exit",i,t])),r.end=Object.assign({},a),o.push(["exit",r,t]),e.add(n+1,0,o)}function nl(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const hH={name:"tasklistCheck",tokenize:yH};function gH(){return{text:{91:hH}}}function yH(e,t,n){const r=this;return i;function i(d){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),o)}function o(d){return En(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),a):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),a):n(d)}function a(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):n(d)}function c(d){return ft(d)?t(d):Ft(d)?e.check({tokenize:xH},t,n)(d):n(d)}}function xH(e,t,n){return nn(e,r,"whitespace");function r(i){return i===null?n(i):t(i)}}function vH(e){return LN([U7(),eH(),lH(e),fH(),gH()])}const bH={};function _H(e){const t=this,n=e||bH,r=t.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),o=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),a=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(vH(n)),o.push($7()),a.push(H7(n))}const kH=30,ry=10;function SH({className:e,children:t}){const[n,r]=C.useState(!1),[i,o]=C.useState(!1),a=String(t).replace(/\n$/,""),c=e?.replace("language-","")||"",d=a.split(` -`),m=d.length>kH,h=m?d.length-ry*2:0,p=C.useCallback(()=>{navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),1500)},[a]);return u.jsxs("div",{className:"code-block-wrap",children:[u.jsxs("div",{className:"code-block-header",children:[u.jsxs("span",{className:"code-block-lang",children:[c||"code",m?` (${d.length} lines)`:""]}),u.jsx("button",{className:"code-block-copy",onClick:p,children:n?u.jsxs(u.Fragment,{children:[u.jsx(Pl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Dm,{})," ",u.jsx("span",{children:"Copy"})]})})]}),u.jsx("pre",{children:u.jsx("code",{className:e,children:m&&!i?u.jsxs(u.Fragment,{children:[d.slice(0,ry).join(` -`)+` -`,u.jsxs("span",{className:"code-block-omitted",onClick:()=>o(!0),children:["... +",h," lines (click to expand)"]}),` -`+d.slice(-ry).join(` -`)]}):a})}),m&&i&&u.jsxs("button",{className:"code-block-collapse-btn",onClick:()=>o(!1),children:["Collapse (",d.length," lines)"]})]})}const wH={code({className:e,children:t,...n}){return e?.startsWith("language-")?u.jsx(SH,{className:e,children:t}):u.jsx("code",{className:e,...n,children:t})}},CH=3e3,jH=60,iy=800;function Uw(e){if(e.length>CH)return!0;let t=0;for(let n=0;n<e.length;n++)if(e[n]===` -`&&++t>=jH)return!0;return!1}function EH(e){const t=e.lastIndexOf(` -`,iy);return e.slice(0,t>iy/2?t:iy)}const _r=It.memo(function({content:t,className:n="msg-content-agent",collapseMode:r="auto"}){const i=r!=="never"&&Uw(t),[o,a]=C.useState(i);C.useEffect(()=>{a(r!=="never"&&Uw(t))},[r,t]);const c=o?EH(t):t,d=t.split(` -`).length,m=t.length;return u.jsxs("div",{className:n,children:[u.jsx(l$,{remarkPlugins:[_H],components:wH,children:c}),i&&o&&u.jsxs("button",{className:"msg-collapse-toggle",onClick:()=>a(!1),children:["Show more (",d," lines, ",(m/1e3).toFixed(1),"k chars)"]}),i&&!o&&u.jsx("button",{className:"msg-collapse-toggle",onClick:()=>a(!0),children:"Show less"})]})}),qw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},Iu="codex",sy="native",NH=["codex","native","claude_code","cursor","opencode"],IH=["native","codex","claude_code","cursor","opencode"];function jI(e){if(!e)return{kind:"fallback"};if(e.kind==="employee"){const t=String(e.id??e.employee_id??"").trim();return t?{kind:"employee",id:t}:{kind:"fallback"}}if(e.kind==="template"){const t=String(e.id??e.template_id??"").trim();return t?{kind:"template",id:t}:{kind:"fallback"}}return{kind:"fallback"}}function EI(e){const t=jI(e);return t.kind==="fallback"?"fallback:":`${t.kind}:${t.id??""}`}function TH(e,t,n){const r=String(e.role_id??"").trim(),i=String(e.role_label??"").trim(),o=`${r} ${i} ${e.role_responsibility??""}`.toLowerCase(),a=new Set((e.same_role_employee_ids??[]).map(m=>String(m??"").trim()).filter(Boolean)),c=t.map(m=>{const h=String(m.employee_id??"").trim(),p=String(m.employee_name??h).trim()||h,g=String(m.role_id??"").trim(),x=String(m.category??"").trim(),v=[g,x].filter(Boolean).join(" · ")||h;return{kind:"employee",id:h,name:p,subtitle:v,category:x,searchText:`${h} ${p} ${g} ${x} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(h)||g===r?0:2}}).filter(m=>m.id).sort((m,h)=>m.rank-h.rank||m.name.localeCompare(h.name)),d=n.map(m=>{const h=String(m.template_id??"").trim(),p=String(m.template_name??h).trim()||h,g=String(m.category??"").trim(),x=[g,h].filter(Boolean).join(" · ")||h,v=`${h} ${p} ${g} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),k=o.split(/[^a-z0-9]+/).filter(S=>S.length>=3).reduce((S,b)=>S+(v.includes(b)?1:0),0);return{kind:"template",id:h,name:p,subtitle:x,category:g,searchText:v,rank:k}}).filter(m=>m.id).sort((m,h)=>h.rank-m.rank||m.name.localeCompare(h.name));return[...c,...d,{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}]}function RH(e,t){const n=EI(t);return e.find(r=>`${r.kind}:${r.id}`===n)??e[0]}function AH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(r=>e.searchText.includes(r))}function MH(e){return e.map(t=>{const n=String(t.role_id??"").trim(),r=String(t.existing_employee?.employee_id??"").trim(),i=String(t.candidate?.template_id??"").trim(),o=r?{kind:"employee",id:r}:i?{kind:"template",id:i}:{kind:"fallback"};return{role_id:n,role_label:t.role_labels?.[0]??n,role_responsibility:"",default_selection:o,same_role_employee_ids:t.existing_employee_ids??[],fallback_available:!0,default_agent:t.default_agent??Iu,selected_agent:t.selected_agent??t.default_agent??Iu,default_source:"recruitment"}}).filter(t=>t.role_id)}function DH(e,t){return t.kind==="template"&&e?.candidate?.template_id===t.id?e.candidate.proposed_name||e.candidate.template_name||t.name:t.kind==="employee"&&e?.existing_employee?.employee_id===t.id&&e.existing_employee.employee_name||t.name}function Gw(e,t){const n={},r=e.staffing_selections??{};for(const i of t){const o=String(i.role_id??"").trim();o&&(n[o]=jI(r[o]??i.default_selection))}return n}function Ww(e,t){const n=e.recruitment_role_agents??{},r={};for(const i of t){const o=String(i.role_id??"").trim();o&&(r[o]=n[o]??i.selected_agent??i.default_agent??Iu)}return r}function OH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.checkpoint_reply_kind??"").trim())}const LH=It.memo(function({meta:t,onReply:n,responded:r}){const i=t.proposals??[],o=C.useMemo(()=>{const D={};for(const M of i){const A=String(M.role_id??"").trim();A&&(D[A]=M)}return D},[i]),a=C.useMemo(()=>t.staffing_roles?.length?t.staffing_roles:MH(i),[t.staffing_roles,i]),c=t.staffing_pool?.employees??[],d=t.staffing_pool?.templates??[],m=t.recruitment_rationales??[],h=C.useMemo(()=>{const D={};for(const M of a){const A=String(M.role_id??"").trim();A&&(D[A]=TH(M,c,d))}return D},[c,a,d]),[p,g]=C.useState({}),[x,v]=C.useState(""),[k,S]=C.useState(()=>Gw(t,a)),[b,w]=C.useState(()=>Ww(t,a)),[j,N]=C.useState(t.recruitment_agent??sy),O=r;C.useEffect(()=>{!O||!OH(t)||(S(Gw(t,a)),w(Ww(t,a)),N(t.recruitment_agent??sy))},[O,t,a]),C.useEffect(()=>{N(t.recruitment_agent??sy)},[t.recruitment_agent]);const R=C.useCallback(D=>{const M=String(t.checkpoint_id??"").trim();if(!M)throw new Error("Recruitment checkpoint reply requires checkpoint_id metadata.");const A=String(t.checkpoint_type??"").trim();return{response_to_checkpoint_id:M,response_to_checkpoint_type:A||"company_recruitment_confirmation",checkpoint_reply_kind:D,staffing_selections:k,recruitment_agent:j,recruitment_role_agents:a.reduce(($,W)=>{const B=String(W.role_id??"").trim();return B&&($[B]=b[B]??W.selected_agent??W.default_agent??Iu),$},{})}},[t.checkpoint_id,t.checkpoint_type,j,b,a,k]),L=C.useCallback(()=>{O||n("approve",R("approve"))},[R,O,n]),I=C.useCallback(()=>{O||!x.trim()||(n(x.trim(),R("feedback")),v(""))},[R,O,x,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-recruitment",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-recruit",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"6",cy:"5",r:"3"}),u.jsx("path",{d:"M2 14c0-2.2 1.8-4 4-4s4 1.8 4 4"}),u.jsx("path",{d:"M12 5v4M10 7h4"})]})}),u.jsx("div",{className:"ckpt-title",children:"Recruitment Review"}),u.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),O&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),u.jsxs("div",{className:"ckpt-recruiter-agent",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruitment-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),u.jsx("select",{id:`recruitment-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:j,onChange:D=>N(D.target.value),disabled:O,children:IH.map(D=>u.jsx("option",{value:D,children:qw[D]},D))})]}),m.length>0&&u.jsx("div",{className:"ckpt-recruitment-reasons",children:m.map(D=>u.jsxs("div",{className:"ckpt-recruitment-reason",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:D.role_id}),D.role_label&&D.role_label!==D.role_id&&u.jsx("span",{className:"ckpt-field-tag",children:D.role_label}),D.selection_label&&u.jsx("span",{className:"ckpt-badge ckpt-badge-template",children:D.selection_label})]}),D.rationale&&u.jsx("div",{className:"ckpt-rationale",children:D.rationale})]},D.role_id))}),u.jsx("div",{className:"ckpt-staffing-grid",children:a.map(D=>{const M=String(D.role_id??"").trim(),A=h[M]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],$=RH(A,k[M]),W=o[M],B=p[M]??"",V=A.filter(H=>AH(H,B)).slice(0,8);return u.jsxs("div",{className:"ckpt-staffing-card",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:M}),u.jsx("span",{className:`ckpt-badge ckpt-badge-${$.kind}`,children:$.kind})]}),D.role_label&&D.role_label!==M&&u.jsx("div",{className:"ckpt-role-labels",children:u.jsx("span",{className:"ckpt-field-tag",children:D.role_label})}),u.jsxs("div",{className:"ckpt-staffing-selected",children:[u.jsx("div",{className:"ckpt-cand-name",children:DH(W,$)}),u.jsxs("div",{className:"ckpt-cand-meta",children:[u.jsx("span",{className:"ckpt-cand-category",children:$.category}),u.jsx("span",{className:"ckpt-domain-tag",children:$.subtitle})]})]}),u.jsx("input",{className:"ckpt-staffing-search",value:B,onChange:H=>g(U=>({...U,[M]:H.target.value})),placeholder:"Search employees or templates...",disabled:O}),u.jsx("div",{className:"ckpt-staffing-options",children:V.map(H=>{const U=`${H.kind}:${H.id}`===EI(k[M]);return u.jsxs("button",{className:`ckpt-staffing-option${U?" active":""}`,onClick:()=>S(Y=>({...Y,[M]:{kind:H.kind,id:H.id}})),disabled:O,title:H.subtitle,children:[u.jsx("span",{className:"ckpt-staffing-option-kind",children:H.kind}),u.jsx("span",{className:"ckpt-staffing-option-name",children:H.name})]},`${H.kind}:${H.id}`)})}),u.jsxs("div",{className:"ckpt-agent-picker",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruit-agent-${t.checkpoint_id}-${M}`,children:"Execution Agent"}),u.jsx("select",{id:`recruit-agent-${t.checkpoint_id}-${M}`,className:"ckpt-agent-select",value:b[M]??D.selected_agent??D.default_agent??Iu,onChange:H=>w(U=>({...U,[M]:H.target.value})),disabled:O,children:NH.map(H=>u.jsx("option",{value:H,children:qw[H]},H))})]})]},M)})}),!O&&u.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:L,children:"Approve"}),u.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback to refine recruitment...",value:x,onChange:D=>v(D.target.value),rows:2}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:I,disabled:!x.trim(),children:"Send Feedback"})]})]})}),Yw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},sv="codex",oy="native",zH=["codex","native","claude_code","cursor","opencode"],PH=["native","codex","claude_code","cursor","opencode"];function NI(e){if(!e)return{kind:"fallback"};if(e.kind==="employee"){const t=String(e.id??e.employee_id??"").trim();return t?{kind:"employee",id:t}:{kind:"fallback"}}if(e.kind==="template"){const t=String(e.id??e.template_id??"").trim();return t?{kind:"template",id:t}:{kind:"fallback"}}return{kind:"fallback"}}function II(e){const t=NI(e);return t.kind==="fallback"?"fallback:":`${t.kind}:${t.id??""}`}function BH(e,t,n){const r=String(e.role_id??"").trim(),i=String(e.role_label??"").trim(),o=`${r} ${i} ${e.role_responsibility??""}`.toLowerCase(),a=new Set((e.same_role_employee_ids??[]).map(h=>String(h??"").trim()).filter(Boolean)),c=h=>{const p=`${h.template_id??""} ${h.template_name??""} ${h.category??""} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),g=String(h.category??"").toLowerCase();let x=0;for(const v of o.split(/[^a-z0-9]+/).filter(k=>k.length>=3))(p.includes(v)||g&&v.includes(g))&&(x+=1);return(p.includes(r.replace(/_/g,"-"))||p.includes(r.replace(/_/g," ")))&&(x+=2),x},d=t.map(h=>{const p=String(h.employee_id??"").trim(),g=String(h.employee_name??p).trim()||p,x=String(h.role_id??"").trim(),v=String(h.category??"").trim(),k=[x,v].filter(Boolean).join(" · ")||p;return{kind:"employee",id:p,name:g,subtitle:k,category:v,searchText:`${p} ${g} ${x} ${v} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(p)||x===r?0:2}}).filter(h=>h.id).sort((h,p)=>h.rank-p.rank||h.name.localeCompare(p.name)),m=n.map(h=>{const p=String(h.template_id??"").trim(),g=String(h.template_name??p).trim()||p,x=String(h.category??"").trim(),v=[x,p].filter(Boolean).join(" · ")||p;return{kind:"template",id:p,name:g,subtitle:v,category:x,searchText:`${p} ${g} ${x} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),rank:c(h)}}).filter(h=>h.id).sort((h,p)=>p.rank-h.rank||h.name.localeCompare(p.name));return[...d,...m,{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}]}function $H(e,t){const n=II(t);return e.find(r=>`${r.kind}:${r.id}`===n)??e[0]}function HH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(r=>e.searchText.includes(r))}function Xw(e,t){const n={},r=e.staffing_selections??{};for(const i of t){const o=String(i.role_id??"").trim();o&&(n[o]=NI(r[o]??i.default_selection))}return n}function Kw(e,t){const n=e.recruitment_role_agents??{},r={};for(const i of t){const o=String(i.role_id??"").trim();o&&(r[o]=n[o]??i.selected_agent??i.default_agent??sv)}return r}function FH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.staffing_action??"").trim())}const VH=It.memo(function({meta:t,onReply:n,responded:r}){const i=C.useMemo(()=>t.staffing_roles??[],[t.staffing_roles]),o=t.staffing_pool?.employees??[],a=t.staffing_pool?.templates??[],c=C.useMemo(()=>{const O={};for(const R of i){const L=String(R.role_id??"").trim();L&&(O[L]=BH(R,o,a))}return O},[o,i,a]),[d,m]=C.useState({}),[h,p]=C.useState(()=>Xw(t,i)),[g,x]=C.useState(()=>Kw(t,i)),[v,k]=C.useState(t.recruitment_agent??oy),S=r,b=t.recommended_action==="auto_recruit"&&a.length>0;C.useEffect(()=>{!S||!FH(t)||(p(Xw(t,i)),x(Kw(t,i)),k(t.recruitment_agent??oy))},[S,t,i]),C.useEffect(()=>{k(t.recruitment_agent??oy)},[t.recruitment_agent]);const w=C.useCallback(O=>{const R=String(t.checkpoint_id??"").trim();if(!R)throw new Error("Staffing checkpoint reply requires checkpoint_id metadata.");return{response_to_checkpoint_id:R,response_to_checkpoint_type:"company_staffing_selection",staffing_action:O,staffing_selections:h,recruitment_agent:v,recruitment_role_agents:i.reduce((L,I)=>{const D=String(I.role_id??"").trim();return D&&(L[D]=g[D]??I.selected_agent??I.default_agent??sv),L},{})}},[t.checkpoint_id,v,g,i,h]),j=C.useCallback(()=>{S||n("approve",w("manual_approve"))},[w,S,n]),N=C.useCallback(()=>{S||n("auto recruit",w("auto_recruit"))},[w,S,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-staffing",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-staffing",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"}),u.jsx("path",{d:"M1.5 14c.6-2.5 2.2-4 4.5-4s3.9 1.5 4.5 4"}),u.jsx("path",{d:"M12.5 3.5v5M10 6h5"})]})}),u.jsx("div",{className:"ckpt-title",children:"Manual Staffing"}),u.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),b&&!S&&u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"Recruit recommended"}),S&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),u.jsxs("div",{className:"ckpt-recruiter-agent",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),u.jsx("select",{id:`staffing-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:v,onChange:O=>k(O.target.value),disabled:S,children:PH.map(O=>u.jsx("option",{value:O,children:Yw[O]},O))})]}),u.jsx("div",{className:"ckpt-staffing-grid",children:i.map(O=>{const R=String(O.role_id??"").trim(),L=c[R]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],I=$H(L,h[R]),D=d[R]??"",M=L.filter(A=>HH(A,D)).slice(0,8);return u.jsxs("div",{className:"ckpt-staffing-card",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:R}),u.jsx("span",{className:`ckpt-badge ckpt-badge-${I.kind}`,children:I.kind})]}),O.role_label&&O.role_label!==R&&u.jsx("div",{className:"ckpt-role-labels",children:u.jsx("span",{className:"ckpt-field-tag",children:O.role_label})}),u.jsxs("div",{className:"ckpt-staffing-selected",children:[u.jsx("div",{className:"ckpt-cand-name",children:I.name}),u.jsxs("div",{className:"ckpt-cand-meta",children:[u.jsx("span",{className:"ckpt-cand-category",children:I.category}),u.jsx("span",{className:"ckpt-domain-tag",children:I.subtitle})]})]}),u.jsx("input",{className:"ckpt-staffing-search",value:D,onChange:A=>m($=>({...$,[R]:A.target.value})),placeholder:"Search employees or templates...",disabled:S}),u.jsx("div",{className:"ckpt-staffing-options",children:M.map(A=>{const $=`${A.kind}:${A.id}`===II(h[R]);return u.jsxs("button",{className:`ckpt-staffing-option${$?" active":""}`,onClick:()=>p(W=>({...W,[R]:{kind:A.kind,id:A.id}})),disabled:S,title:A.subtitle,children:[u.jsx("span",{className:"ckpt-staffing-option-kind",children:A.kind}),u.jsx("span",{className:"ckpt-staffing-option-name",children:A.name})]},`${A.kind}:${A.id}`)})}),u.jsxs("div",{className:"ckpt-agent-picker",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-agent-${t.checkpoint_id}-${R}`,children:"Execution Agent"}),u.jsx("select",{id:`staffing-agent-${t.checkpoint_id}-${R}`,className:"ckpt-agent-select",value:g[R]??O.selected_agent??O.default_agent??sv,onChange:A=>x($=>({...$,[R]:A.target.value})),disabled:S,children:zH.map(A=>u.jsx("option",{value:A,children:Yw[A]},A))})]})]},R)})}),!S&&u.jsx("div",{className:"ckpt-actions",children:b?u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:N,children:"Auto Recruit"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:j,children:"Approve Selections"})]}):u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:j,children:"Approve Selections"}),a.length>0&&u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:N,children:"Auto Recruit"})]})})]})}),UH={task_adjustment:"Task Adjustment",runtime_replan:"Runtime Replan",org_mutation:"Org Mutation"},Zw={low:"var(--green)",medium:"var(--yellow)",high:"var(--red)"},qH=It.memo(function({meta:t,onReply:n,responded:r}){const i=r,o=C.useCallback(()=>{i||n("approve")},[i,n]),a=C.useCallback(()=>{i||n("deny")},[i,n]),c=t.role_changes??[],d=t.work_item_projection_changes??[],m=t.scope||"org_mutation",h=t.risk_level||"medium",p=t.impact_summary||{};return u.jsxs("div",{className:"ckpt-panel ckpt-reorg",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-reorg",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1"}),u.jsx("rect",{x:"10",y:"1",width:"5",height:"5",rx:"1"}),u.jsx("rect",{x:"5.5",y:"10",width:"5",height:"5",rx:"1"}),u.jsx("path",{d:"M3.5 6v2.5a1 1 0 001 1h7a1 1 0 001-1V6"}),u.jsx("path",{d:"M8 9.5V10"})]})}),u.jsx("div",{className:"ckpt-title",children:t.title||"Company Reorg"}),i&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),u.jsxs("div",{className:"ckpt-reorg-badges",children:[u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:UH[m]||m}),u.jsxs("span",{className:"ckpt-badge",style:{color:Zw[h]||"var(--text-secondary)",borderColor:Zw[h]||"var(--border)"},children:["Risk: ",h.charAt(0).toUpperCase()+h.slice(1)]})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),t.rationale&&u.jsx("div",{className:"ckpt-rationale",children:t.rationale}),c.length>0&&u.jsxs("div",{className:"ckpt-changes-section",children:[u.jsx("div",{className:"ckpt-changes-title",children:"Role Changes"}),c.map((g,x)=>u.jsxs("div",{className:"ckpt-change-row",children:[u.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),u.jsx("span",{className:"ckpt-change-id",children:g.role_id}),g.replacement_role_id&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"ckpt-change-arrow",children:"→"}),u.jsx("span",{className:"ckpt-change-id",children:g.replacement_role_id})]}),g.reason&&u.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},x))]}),d.length>0&&u.jsxs("div",{className:"ckpt-changes-section",children:[u.jsx("div",{className:"ckpt-changes-title",children:"Work Item Projection Changes"}),d.map((g,x)=>u.jsxs("div",{className:"ckpt-change-row",children:[u.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),u.jsx("span",{className:"ckpt-change-id",children:g.work_item_projection_id}),g.replacement_work_item_projection_id&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"ckpt-change-arrow",children:"→"}),u.jsx("span",{className:"ckpt-change-id",children:g.replacement_work_item_projection_id})]}),g.reason&&u.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},x))]}),Object.keys(p).length>0&&u.jsxs("div",{className:"ckpt-impact",children:[p.affected_tasks!=null&&u.jsxs("span",{children:["Tasks affected: ",p.affected_tasks]}),p.affected_roles!=null&&u.jsxs("span",{children:["Roles affected: ",p.affected_roles]}),p.migration_count!=null&&u.jsxs("span",{children:["Migrations: ",p.migration_count]})]}),!i&&u.jsxs("div",{className:"ckpt-actions",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:o,children:"Approve Reorg"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-deny",onClick:a,children:"Deny"})]})]})}),GH=3e4;function WH(e){return e.split(` -`).map(t=>t.trim()).find(Boolean)??e}function YH(e){switch(e){case"timeout":case"timed_out":case"expired":return"Expired";case"stale":case"invalid":return"Inactive";case"cancelled":case"canceled":return"Cancelled";case"resolved":return"Resolved";default:return"Responded"}}const Qw=It.memo(function({meta:t,onReply:n,responded:r}){const i=r,o=String(t.checkpoint_status??"").trim().toLowerCase(),a=YH(o),c=String(t.prompt??t.summary??""),d=C.useMemo(()=>c.split(` -`).map(O=>O.trim()).filter(Boolean),[c]),m=WH(c).replace(/^\[[^\]]+\]\s*/,"")||"Action Required",h=d.slice(1).join(` -`).trim(),p=String(t.summary??"").trim(),g=(t.options??[]).filter(O=>!!O?.id),x=C.useMemo(()=>(t.active_subagents??[]).filter(O=>!!O&&typeof O=="object"),[t.active_subagents]),v=C.useMemo(()=>(t.permission_requests??[]).filter(O=>!!O&&typeof O=="object"),[t.permission_requests]),k=String(t.worktree_path??"").trim(),S=x.length>0||v.length>0||!!k,[b,w]=C.useState(""),j=!!b&&!i;C.useEffect(()=>{if(!j)return;const O=window.setTimeout(()=>w(""),GH);return()=>window.clearTimeout(O)},[j,b]);const N=C.useCallback(O=>{i||j||(w(O.id),n(O.label||O.id))},[i,j,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-escalation",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-escalation",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M8 1.5L14.5 13H1.5L8 1.5Z"}),u.jsx("path",{d:"M8 5.5V9"}),u.jsx("circle",{cx:"8",cy:"11.5",r:"0.75",fill:"currentColor",stroke:"none"})]})}),u.jsx("div",{className:"ckpt-title",children:m}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.escalation_type??"decision_needed").replace(/_/g," ")}),i&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:a})]}),p&&p!==m&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(_r,{content:p,className:"ckpt-markdown"})]}),h&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Request"}),u.jsx(_r,{content:h,className:"ckpt-markdown"})]}),S&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[k&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:k})]}),x.length>0&&u.jsxs("div",{children:["Active subagents: ",x.length]}),v.length>0&&u.jsxs("div",{children:["Pending permission records: ",v.length]})]})]}),!i&&g.length>0&&u.jsx("div",{className:"ckpt-actions ckpt-escalation-actions",children:g.map(O=>u.jsx("button",{className:`ckpt-btn ${O.id.includes("deny")?"ckpt-btn-deny":"ckpt-btn-approve"}${j?" ckpt-btn-submitting":""}`,onClick:()=>N(O),disabled:j,children:j&&b===O.id?"Submitting…":O.label||O.id},O.id))}),j&&u.jsx("div",{className:"ckpt-escalation-hint",children:"Decision sent — waiting for server confirmation…"}),!i&&t.default_action&&u.jsxs("div",{className:"ckpt-escalation-hint",children:["Default on timeout: ",u.jsx("code",{children:t.default_action})]})]})});function XH(e){return e.split(` -`).map(t=>t.trim()).find(Boolean)??e}function KH(e){switch(e){case"ignored":return"Ignored";case"timeout":case"timed_out":case"expired":return"Expired";case"stale":case"invalid":return"Inactive";case"superseded":return"Superseded";case"cancelled":case"canceled":return"Cancelled";case"resolved":return"Resolved";default:return"Responded"}}const ZH=It.memo(function({meta:t,onReply:n,responded:r}){const i=r,[o,a]=C.useState(""),[c,d]=C.useState(null),m=String(t.checkpoint_status??"").trim().toLowerCase(),h=KH(m),p=String(t.prompt??t.summary??"").trim(),x=`${String(t.work_item_projection_title??XH(p)??"Human Review").trim()||"Human Review"} (for self-evolution)`,v=String(t.summary??"").trim(),k=C.useMemo(()=>(t.active_subagents??[]).filter(I=>!!I&&typeof I=="object"),[t.active_subagents]),S=C.useMemo(()=>(t.permission_requests??[]).filter(I=>!!I&&typeof I=="object"),[t.permission_requests]),b=String(t.worktree_path??"").trim(),w=k.length>0||S.length>0||!!b,j=i||c!==null,N=C.useCallback((I,D="")=>{const M=String(t.checkpoint_id??"").trim();if(!M)throw new Error("Delivery self-evolution reply requires checkpoint_id metadata.");const A={response_to_checkpoint_id:M,response_to_checkpoint_type:"company_delivery_feedback",checkpoint_reply_kind:I};return(I==="approve"||I==="feedback")&&(A.self_evolution_trigger=!0,A.human_feedback_text=D),A},[t.checkpoint_id]),O=C.useCallback(()=>{if(j)return;const I=N("approve");d("approve"),n("I fully agree with this delivery.",I)},[j,N,n]),R=C.useCallback(()=>{const I=o.trim();if(j||!I)return;const D=N("feedback",I);d("feedback"),n(I,D),a("")},[j,N,o,n]),L=C.useCallback(()=>{if(j)return;const I=N("ignore");d("ignore"),n("Ignore this self-evolution review.",I)},[j,N,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-delivery-feedback",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M8 1.5L14 5v4.5c0 2.25-1.8 4.25-6 5-4.2-.75-6-2.75-6-5V5L8 1.5Z"}),u.jsx("path",{d:"M5.5 8.25L7.25 10l3.25-4"})]})}),u.jsx("div",{className:"ckpt-title",children:x}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.feedback_scope??"final").replace(/_/g," ")}),i&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:h})]}),v&&v!==x&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(_r,{content:v,className:"ckpt-markdown"})]}),p&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Review Request"}),u.jsx(_r,{content:p,className:"ckpt-markdown"})]}),w&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[b&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:b})]}),k.length>0&&u.jsxs("div",{children:["Active subagents: ",k.length]}),S.length>0&&u.jsxs("div",{children:["Pending permission records: ",S.length]})]})]}),!i&&u.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:O,disabled:j,children:"Fully Agree"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-cancel",onClick:L,disabled:j,children:"Ignore"}),u.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback for self-evolution...",value:o,onChange:I=>a(I.target.value),disabled:j,rows:2}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:R,disabled:j||!o.trim(),children:"Send Feedback"})]})]})}),mf="__other__",QH=["A","B","C"];function ts(e){return String(e??"").trim()}function JH(e,t){const n=ts(e.question),r=ts(e.header);if(!n&&!r)return null;const i=(e.options??[]).slice(0,3).map((o,a)=>({id:ts(o.id)||String.fromCharCode(97+a),label:ts(o.label),description:ts(o.description)})).filter(o=>o.label);return{id:ts(e.id)||`question_${t+1}`,header:r,question:n||r,options:i,allow_freeform:e.allow_freeform!==!1,required:e.required!==!1}}const eF=It.memo(function({meta:t,onReply:n,responded:r}){const[i,o]=C.useState(""),[a,c]=C.useState({}),d=r,m=String(t.work_item_projection_title??t.work_item_projection_id??"Input Needed").trim()||"Input Needed",h=String(t.summary??"").trim(),p=String(t.prompt??"").trim(),g=String(t.context_note??"").trim(),x=String(t.resume_hint??"").trim(),v=C.useMemo(()=>(t.questions??[]).map(U=>String(U).trim()).filter(Boolean),[t.questions]),k=C.useMemo(()=>(t.input_questions??[]).map((U,Y)=>JH(U,Y)).filter(U=>U!==null),[t.input_questions]),S=k.some(U=>(U.options??[]).length>0),b=C.useMemo(()=>(t.required_fields??[]).map(U=>String(U).trim()).filter(Boolean),[t.required_fields]),w=C.useMemo(()=>(t.active_subagents??[]).filter(U=>!!U&&typeof U=="object"),[t.active_subagents]),j=C.useMemo(()=>(t.permission_requests??[]).filter(U=>!!U&&typeof U=="object"),[t.permission_requests]),N=String(t.worktree_path??"").trim(),O=String(t.requesting_role_id??"").trim(),R=String(t.requesting_task_id??"").trim(),L=String(t.requesting_work_item_id??"").trim(),I=String(t.seat_id??"").trim(),M=!!O||!!R||!!L||!!I||w.length>0||j.length>0||!!N,A=C.useCallback((U,Y)=>{c(Q=>({...Q,[U]:{freeformText:Q[U]?.freeformText??"",selectedOptionId:Y}}))},[]),$=C.useCallback((U,Y)=>{c(Q=>({...Q,[U]:{selectedOptionId:Q[U]?.selectedOptionId,freeformText:Y}}))},[]),W=C.useCallback(U=>{if(U.required===!1)return!0;const Y=a[U.id],Q=Y?.selectedOptionId;return!!(Q&&Q!==mf||U.allow_freeform!==!1&&ts(Y?.freeformText))},[a]),B=S&&k.every(W),V=C.useCallback(()=>{const U=i.trim();d||!U||n(U)},[d,n,i]),H=C.useCallback(()=>{if(d||!B)return;const U={},Y=[];k.forEach(Q=>{const q=a[Q.id]??{freeformText:""},G=(Q.options??[]).find(te=>te.id===q.selectedOptionId),J=ts(q.freeformText),K=[G?.label??"",J].filter(Boolean).join("; ");U[Q.id]={question_id:Q.id,question:Q.question,...G?{selected_option_id:G.id,selected_label:G.label}:{},...J?{freeform_text:J}:{},answer_text:K};const ee=ts(Q.header)||ts(Q.question)||Q.id;Y.push(`- ${ee}: ${K||"(no answer)"}`)}),n(Y.join(` -`),{user_input_answers:U})},[a,B,k,d,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-user-input",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M3 3.5h10v6H6.5L3 13V3.5Z"}),u.jsx("path",{d:"M5.5 6h5"}),u.jsx("path",{d:"M5.5 8h3.5"})]})}),u.jsx("div",{className:"ckpt-title",children:m}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"awaiting input"}),d&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),h&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(_r,{content:h,className:"ckpt-markdown"})]}),p&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Request"}),u.jsx(_r,{content:p,className:"ckpt-markdown"})]}),S?u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Questions"}),u.jsx("div",{className:"ckpt-choice-list",children:k.map(U=>{const Y=a[U.id]??{freeformText:""},Q=U.options??[],q=U.allow_freeform!==!1,G=q&&(Q.length===0||Y.selectedOptionId===mf);return u.jsxs("div",{className:"ckpt-choice-question",children:[U.header&&u.jsx("div",{className:"ckpt-question-header",children:U.header}),u.jsx(_r,{content:U.question,className:"ckpt-markdown"}),Q.length>0&&u.jsxs("div",{className:"ckpt-choice-grid",children:[Q.map((J,P)=>{const K=Y.selectedOptionId===J.id;return u.jsxs("button",{className:`ckpt-choice-option${K?" is-selected":""}`,onClick:()=>A(U.id,J.id),children:[u.jsx("span",{className:"ckpt-choice-letter",children:QH[P]??"?"}),u.jsxs("span",{className:"ckpt-choice-copy",children:[u.jsx("span",{className:"ckpt-choice-label",children:J.label}),J.description&&u.jsx("span",{className:"ckpt-choice-desc",children:J.description})]})]},J.id)}),q&&u.jsxs("button",{className:`ckpt-choice-option${Y.selectedOptionId===mf?" is-selected":""}`,onClick:()=>A(U.id,mf),children:[u.jsx("span",{className:"ckpt-choice-letter",children:"D"}),u.jsxs("span",{className:"ckpt-choice-copy",children:[u.jsx("span",{className:"ckpt-choice-label",children:"Other"}),u.jsx("span",{className:"ckpt-choice-desc",children:"Enter a custom answer"})]})]})]}),G&&u.jsx("textarea",{className:"ckpt-feedback-input ckpt-other-field",placeholder:"Type your answer...",value:Y.freeformText,onChange:J=>$(U.id,J.target.value),rows:3})]},U.id)})})]}):v.length>0&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Questions"}),u.jsx("ul",{className:"ckpt-task-list",children:v.map(U=>u.jsx("li",{children:U},U))})]}),b.length>0&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Required Fields"}),u.jsx("div",{className:"ckpt-task-tags",children:b.map(U=>u.jsx("span",{className:"ckpt-field-tag",children:U},U))})]}),g&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Context"}),u.jsx(_r,{content:g,className:"ckpt-markdown ckpt-markdown-muted"})]}),x&&u.jsx("div",{className:"ckpt-escalation-hint",children:x}),M&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[O&&u.jsxs("div",{children:["Requester: ",u.jsx("code",{children:O})]}),L&&u.jsxs("div",{children:["Work item: ",u.jsx("code",{children:L})]}),R&&u.jsxs("div",{children:["Task: ",u.jsx("code",{children:R})]}),I&&u.jsxs("div",{children:["Seat: ",u.jsx("code",{children:I})]}),N&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:N})]}),w.length>0&&u.jsxs("div",{children:["Active subagents: ",w.length]}),j.length>0&&u.jsxs("div",{children:["Pending permission records: ",j.length]})]})]}),!d&&u.jsxs("div",{className:"ckpt-feedback-area",children:[S?null:u.jsx("textarea",{className:"ckpt-feedback-input",placeholder:"Reply with the missing input to continue...",value:i,onChange:U=>o(U.target.value),rows:3}),u.jsx("div",{className:"ckpt-feedback-btns",children:u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:S?H:V,disabled:S?!B:!i.trim(),children:"Send Reply"})})]})]})}),ov={todo:"To do",in_progress:"In progress",in_review:"In review",done:"Done"};function ay(e,t){if(t&&t in ov)return t;switch(e){case"active":return"in_progress";case"waiting":return"in_review";case"done":return"done";case"failed":return"done";case"pending":return"todo";default:return"todo"}}function pf(e){return ov[e]??ov.todo}const Jw={active:0,waiting:1,failed:2,done:3,pending:4};function tF(e){if(e.length===0)return"pending";let t=e[0],n=Jw[t]??99;for(const r of e){const i=Jw[r]??99;i<n&&(t=r,n=i)}return t}const nF={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function eC(e){return e.length>12&&/^[0-9a-f-]+$/i.test(e.replace(/_/g,""))}function dl(e){return typeof e=="string"?e.trim():""}function ly(...e){for(const t of e){const n=dl(t);if(n)return n}return""}function rF(e){const t=dl(e);return t?nF[t]??o0(t):""}function iF(e){return e==="done"?u.jsx("span",{className:"wi-projection-icon",children:"✓"}):e==="active"?u.jsx("span",{className:"wi-projection-icon wi-projection-pulse",children:"●"}):e==="failed"?u.jsx("span",{className:"wi-projection-icon",children:"✗"}):e==="waiting"?u.jsx("span",{className:"wi-projection-icon",children:"●"}):null}const sF={active:"active",waiting:"waiting",pending:"pending",done:"done",failed:"failed"};function oF(e){return e?e==="in-progress"?"in_progress":e==="in-review"?"in_review":e:"todo"}function aF(e){switch(e){case"running":case"waiting_for_peer":case"waiting_for_children":case"paused":case"needs_attention":return"active";case"awaiting_manager_review":case"awaiting_human":case"queued":case"ready":case"ready_for_rework":case"waiting_dependencies":return"waiting";case"approved":return"done";case"failed":case"cancelled":return"failed";default:return"pending"}}function lF(e){const t=dl(e.status).toLowerCase();return t==="done"||t==="delivered"?"done":t==="failed"||t==="cancelled"?"failed":t==="awaiting_peer"||t==="awaiting_manager_review"||t==="awaiting_human"||t==="awaiting_review"||t==="blocked"||t==="paused"||t==="awaiting_owner"?"waiting":t==="running"||t==="deliverable"||t==="active"||t==="ready"?"active":"pending"}function TI({workItemLog:e,roleWorkItems:t,executorRoleWorkItems:n,childSessions:r,isCompanyRuntime:i=!1,onWorkItemClick:o}){const a=C.useMemo(()=>{const k=new Map;for(const S of r??[]){k.set(S.taskId,S);const b=go(S);b&&k.set(b,S)}return k},[r]),c=C.useMemo(()=>{const k=new Map,S=[];for(const b of e){const w=go(b),j=b.workItemProjectionId??w??"";if(!j)continue;if(!k.has(j)){S.push(j);const O=b.workItemProjectionTitle??j,R=b.roleName||(eC(O)?"Agent":O);k.set(j,{projectionId:j,title:R,roleName:b.roleName,status:"pending",executionTurnId:w})}const N=k.get(j);switch(b.roleName?(N.roleName=b.roleName,N.title=b.roleName):b.workItemProjectionTitle&&!eC(b.workItemProjectionTitle)&&(N.title=b.workItemProjectionTitle),w&&(N.executionTurnId=w),b.type){case"work_item_started":N.status="active";break;case"gate_approved":N.status="done";break;case"gate_rejected":N.status="active";break;case"awaiting_manager_review":case"awaiting_human":case"awaiting_review":case"awaiting_peer":N.status="waiting";break;case"work_item_failed":case"deadlock":N.status="failed";break}}for(const b of k.values()){if(!b.executionTurnId)continue;const w=a.get(b.executionTurnId);if(!w)continue;const j=Lg(w);j&&(b.title=j),w.workItemRoleName&&(b.roleName=w.workItemRoleName),w.status==="done"?b.status="done":w.status==="failed"&&(b.status="failed")}return S.map(b=>k.get(b))},[e,a]),d=C.useMemo(()=>{const k=new Map;for(const S of e){const b=go(S);b&&!k.has(b)&&k.set(b,k.size)}return k},[e]),m=n??t,h=C.useMemo(()=>{if(!m)return[];const k=[];for(const S of Object.values(m)){if(!S||!Array.isArray(S.workItems)||S.workItems.length===0)continue;const w=[...S.workItems].sort((L,I)=>L.createdAt-I.createdAt).map(L=>{const I=oF(L.kanbanColumn),D=aF(L.phase);return{executionTurnId:L.executionTurnId??"",title:dl(L.title)||dl(L.executorRoleName)||dl(L.executorRoleId)||"Work item",status:D,statusLabel:pf(I),columnId:I,updatedAt:L.updatedAt,workItemId:L.workItemId,progressLog:L.progressLog,activitySections:L.activitySections??[],isReviewTarget:L.isReviewTarget}}),j=sF[S.aggregatedStatus]??"pending",N=ay(j),O=w[w.length-1],R=[...w].reverse().find(L=>!!L.executionTurnId)?.executionTurnId??"";k.push({roleKey:S.roleKey,executionTurnId:O.executionTurnId||R,title:S.roleName||S.roleId,status:j,statusLabel:pf(N),roleName:S.roleName,updatedAt:w.reduce((L,I)=>Math.max(L,I.updatedAt),0),turns:w,runtimeStatus:S.runtimeStatus})}return k.sort((S,b)=>{const w=S.turns[0]?.updatedAt??Number.POSITIVE_INFINITY,j=b.turns[0]?.updatedAt??Number.POSITIVE_INFINITY;return w-j}),k},[m]),p=C.useMemo(()=>{const k=[...r??[]];if(k.length===0)return[];const S=new Map,b=[];for(const j of k){const N=ly(j.workItemRoleId,j.assigneeIds[0],j.taskId);S.has(N)||(S.set(N,[]),b.push(N)),S.get(N).push(j)}b.sort((j,N)=>{const O=S.get(j)??[],R=S.get(N)??[],L=Math.min(...O.map(A=>d.get(go(A)||A.taskId)??Number.POSITIVE_INFINITY)),I=Math.min(...R.map(A=>d.get(go(A)||A.taskId)??Number.POSITIVE_INFINITY));if(L!==I)return L-I;const D=Math.min(...O.map(A=>A.updatedAt)),M=Math.min(...R.map(A=>A.updatedAt));return D-M});const w=[];for(const j of b){const N=S.get(j)??[];if(N.length===0)continue;const O=N.slice().sort((A,$)=>A.updatedAt-$.updatedAt).map(A=>{const $=lF(A),W=go(A),B=ay($,String(A.columnId??"").trim()||void 0);return{executionTurnId:W||A.taskId,title:ly(Lg(A),A.title,A.workItemRoleName,A.workItemRoleId,"Turn"),status:$,statusLabel:pf(B),columnId:B,updatedAt:A.updatedAt}}),R=O[O.length-1],L=tF(O.map(A=>A.status)),I=ay(L),D=N[0],M=ly(D.workItemRoleName,D.workItemRoleId,D.assigneeIds[0],Lg(D),D.title,"Agent");w.push({roleKey:j,executionTurnId:R.executionTurnId,title:M,status:L,statusLabel:pf(I),executionAgent:rF(D.selectedExecutionAgent??D.preferredAgent),roleName:D.workItemRoleName,updatedAt:Math.max(...N.map(A=>A.updatedAt)),turns:O})}return w},[r,d]),g=C.useMemo(()=>h.length>0?h:i?[]:p,[i,h,p]),x=C.useMemo(()=>g.length>0?g.map(k=>({projectionId:k.roleKey,title:k.title,roleName:k.roleName,status:k.status,executionTurnId:k.executionTurnId})):i?[]:c,[i,g,c]),v=i&&g.length===0;return!i&&e.length===0&&x.length===0&&g.length===0?null:u.jsxs("div",{className:"wi-progress-card",children:[u.jsxs("div",{className:"wi-progress-header",children:[u.jsx(Om,{}),u.jsx("span",{children:"Execution Progress"})]}),x.length>0&&u.jsx("div",{className:"wi-progress-pipeline",children:x.map((k,S)=>u.jsxs("div",{className:"wi-projection-group",children:[u.jsxs("button",{type:"button",className:`wi-projection-chip wi-projection-${k.status}`,onClick:()=>o?.(k.executionTurnId||""),title:`Open Runtime Session${k.roleName?`: ${k.title} (${k.roleName})`:`: ${k.title}`}`,children:[u.jsx("span",{className:"wi-projection-label",children:k.title}),iF(k.status)]}),S<x.length-1&&u.jsx("span",{className:"wi-projection-connector",children:"→"})]},k.projectionId))}),v&&u.jsx("div",{className:"wi-progress-pipeline wi-progress-pipeline-empty",role:"status",children:"Preparing company roles…"})]})}function cF({refs:e,onImageClick:t}){if(!e||e.length===0)return null;const n=e.filter(c=>c.mime_type?.startsWith("image/")),r=e.filter(c=>c.mime_type?.startsWith("video/")),i=e.filter(c=>!c.mime_type?.startsWith("image/")&&!c.mime_type?.startsWith("video/")),o=n.length===1?"":(n.length<=3," cols-2"),a=r.length===1?"":(r.length<=3," cols-2");return u.jsxs("div",{className:"msg-attachments",children:[n.length>0&&u.jsx("div",{className:`msg-attachment-grid${o}`,children:n.map(c=>{const d=`/api/attachments/${c.attachment_id}/${c.filename}`;return u.jsx("img",{className:"msg-attachment-image",src:d,alt:c.filename,loading:"lazy",onClick:()=>t?.(d)},c.attachment_id)})}),r.length>0&&u.jsx("div",{className:`msg-attachment-grid${a}`,children:r.map(c=>{const d=`/api/attachments/${c.attachment_id}/${c.filename}`;return u.jsx("video",{className:"msg-attachment-video",src:d,controls:!0,preload:"metadata",playsInline:!0},c.attachment_id)})}),i.length>0&&u.jsx("div",{className:"msg-attachment-files",children:i.map(c=>u.jsxs("a",{className:"msg-attachment-file-chip",href:`/api/attachments/${c.attachment_id}/${c.filename}`,download:!0,title:c.filename,children:["📎 ",c.filename,u.jsx("span",{className:"msg-attachment-file-size",children:c.size_bytes<1024?`${c.size_bytes}B`:c.size_bytes<1048576?`${(c.size_bytes/1024).toFixed(0)}KB`:`${(c.size_bytes/1048576).toFixed(1)}MB`})]},c.attachment_id))})]})}const tC=new WeakMap;function cy(e){if(!e||typeof e!="object")return"";const t=tC.get(e);if(t!==void 0)return t;const n=JSON.stringify(e)??"";return tC.set(e,n),n}function uF(e){if(e.kind==="message"){const{msg:n}=e;return[e.kind,e.id,e.timestamp,n.sender,n.senderName,n.senderDeleted,n.content,n.replyToId,cy(n.mentions),cy(n.metadata)]}if(e.kind==="progress"){const{entry:n}=e;return[e.kind,e.id,e.timestamp,n.type,n.summary,n.detail,n.turnId,n.itemId,n.streamId,n.toolCallId,n.permissionGroupKey,n.seq,n.executionMode]}if(e.kind==="draft")return[e.kind,e.id,e.timestamp,e.text,e.iteration];const t=[e.kind,e.id,e.timestamp];for(const{msg:n,classification:r}of e.events)t.push(n.id,n.timestamp,n.content,cy(n.metadata),r.kind,r.label,r.summary,r.tone);return t}function dF(e,t){return!e||e.length!==t.length?!1:t.every((n,r)=>{const i=e[r];return i.length===n.length&&n.every((o,a)=>o===i[a])})}const nC=["#F59E0B","#10B981","#3B82F6","#8B5CF6","#EC4899","#06B6D4","#F97316","#6366F1"],rC=new Map;function RI(e){const t=rC.get(e);if(t)return t;let n=0;for(let i=0;i<e.length;i++)n=n*31+e.charCodeAt(i)|0;const r=nC[Math.abs(n)%nC.length];return rC.set(e,r),r}const fF=/^\[Company:([^\]]+)\]\s*(.*)$/;function mF(e){const t=fF.exec(e);if(!t)return null;const n=t[1],r=t[2].trim(),i=r.toLowerCase(),o=n.replace(/_/g," ").replace(/\b\w/g,d=>d.toUpperCase());let a="●",c="active";return i.includes("gate passed")||i.includes("approved")||i.includes("completed")?(a="✓",c="passed"):i.includes("rejected")||i.includes("reworking")?(a="↻",c="rejected"):i.includes("failed")||i.includes("timed out")?(a="✗",c="failed"):i.includes("awaiting")&&(a="⏳",c="waiting"),{projectionId:n,workItemName:o,action:r,icon:a,statusClass:c}}const pF={session:{icon:u.jsx(N4,{}),title:"New Conversation",hint:"Send a message to start working with your OPC system"},activity:{icon:u.jsx(nE,{}),title:"Activity Feed",hint:"Agent activity across all sessions will appear here."},secretary:{icon:u.jsx(yu,{}),title:"Secretary",hint:"Manage policies, rules, and preferences for your agents."}},hF=5*6e4,gF=200,uy=200,yF=2;function Xo(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=yF}function iC(e){return!String(e.id??"").startsWith("msg-")}function yo(e){return Lv(e)}function xF(e){const t=yo(e);return t.startsWith("turn:assistant:")?t.slice(15):""}function Co(e){return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1})}function zs(e){return new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}async function vF(e){if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(e),!0}catch{}if(typeof document>"u"||!document.body)return!1;const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="0",t.style.left="-9999px",t.style.opacity="0",document.body.appendChild(t);try{return t.focus(),t.select(),t.setSelectionRange(0,t.value.length),document.execCommand("copy")}catch{return!1}finally{document.body.removeChild(t)}}function bF(e){return String(e.metadata?.transcript_kind??"").trim()==="runtime_v2_user_turn"}function fu(e){return e.replace(/\s+/g," ").trim()}function _F(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const r=t.indexOf(": ");if(r<8||r>160)return t;const i=t.slice(0,r).replace(/\*/g,"").trim(),o=t.slice(r+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(i)||/^(https?|file)$/i.test(i)?t:o}function kF(e){const t=String(e.metadata?.transcript_kind??e.metadata?.kind??"").trim();return!!(["runtime_v2_assistant","runtime_v2_company_assistant","top_level_reply","company_role_result","company_role_result_retry","child_task_result","child_task_result_retry","child_result"].includes(t)||String(e.metadata?.kind??"").trim()==="worker_notification")}function sC(e){const t=String(e||"").trim();if(!t)return null;try{const n=JSON.parse(t);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}function SF(e){const t=String(e||"").trim();if(!t)return null;if(t.startsWith("{")&&t.endsWith("}")){const c=sC(t);return c?{obj:c}:null}const n=t.indexOf("{"),r=t.lastIndexOf("}");if(n<=0||r<=n)return null;const o=t.slice(0,n).trim().replace(/\*/g,"").replace(/:\s*$/,"").trim();if(!/\b(report|review)\b/i.test(o))return null;const a=sC(t.slice(n,r+1));return a?{obj:a,title:o||void 0}:null}function fl(e){return typeof e=="string"?e.trim():""}function oC(e,t=4){if(!Array.isArray(e))return[];const n=[];for(const r of e){const i=typeof r=="string"?r.trim():r&&typeof r=="object"&&"summary"in r?fl(r.summary):"";if(i&&n.push(i),n.length>=t)break}return n}function wF(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const r=n,i=fl(r.path),o=fl(r.name)||i.split("/").filter(Boolean).pop()||"Artifact";t.push({name:o,path:i,status:fl(r.status)||void 0})}return t}function CF(e){if(!Array.isArray(e))return;const t=e.filter(r=>r&&typeof r=="object").length;return t?`${e.filter(r=>r.met===!0).length}/${t} acceptance checks met`:void 0}function AI(e){const t=SF(e);if(!t)return null;const{obj:n,title:r}=t,i=fl(n.summary),o=fl(n.review_verdict),a=wF(n.deliverables),c=oC(n.risks),d=oC(n.next_actions),m=CF(n.acceptance_status);return!i&&!o&&a.length===0&&!m?null:{kind:o?"review":a.length>0||m?"report":"update",title:r,summary:i,verdict:o||void 0,deliverables:a,risks:c,nextActions:d,acceptanceSummary:m}}const jF=It.memo(function({entry:t,showDate:n,dateStr:r,compact:i=!1}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:`msg-row agent msg-row-inline-progress${i?" compact":""}`,children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(gl,{})}),u.jsx("div",{className:"msg-body msg-inline-progress-body",children:u.jsx("div",{className:"msg-inline-progress-shell",children:u.jsx(_N,{entry:t})})})]})]})}),EF=It.memo(function({msg:t,showDate:n,dateStr:r}){const i=mF(t.content);return i?u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:`work-item-divider work-item-divider-${i.statusClass}`,children:[u.jsx("div",{className:"work-item-divider-line"}),u.jsxs("span",{className:"work-item-divider-label",children:[u.jsx("span",{className:"work-item-divider-icon",children:i.icon}),i.workItemName,u.jsx("span",{className:"work-item-divider-action",children:i.action})]}),u.jsx("div",{className:"work-item-divider-line"})]})]}):null}),NF=It.memo(function({msg:t,showDate:n,dateStr:r}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsx("div",{className:"msg-system",children:u.jsx("span",{children:t.content})})]})}),IF=It.memo(function({msg:t,showDate:n,dateStr:r}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:"msg-row agent msg-row-context",children:[u.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-context",children:u.jsx(yu,{})}),u.jsx("div",{className:"msg-body",children:u.jsxs("div",{className:"msg-content-agent-card msg-context-card",children:[u.jsx("div",{className:"msg-context-label",children:"Execution Context"}),u.jsx(_r,{content:t.content})]})})]})]})}),TF=It.memo(function({text:t,timestamp:n,iteration:r,showDate:i,dateStr:o}){return u.jsxs("div",{children:[i&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:o})}),u.jsxs("div",{className:"msg-row agent msg-row-draft",children:[u.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-draft",children:u.jsx(gl,{})}),u.jsxs("div",{className:"msg-body",children:[u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:"msg-sender",children:"Live Reply"}),u.jsx("span",{className:"msg-time",title:zs(n),children:Co(n)})]}),u.jsxs("div",{className:"msg-content-agent-card msg-draft-card",children:[r?u.jsxs("div",{className:"msg-draft-label",children:["Turn ",r]}):null,u.jsx(_r,{content:t,collapseMode:"never"})]})]})]})]})}),RF=It.memo(function({msg:t,showDate:n,dateStr:r,isGrouped:i,isCopied:o,onCopy:a,onImageClick:c,renderUserMarkdown:d}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsx("div",{className:`msg-row user${i?" grouped":""}`,children:u.jsxs("div",{className:"msg-body msg-body-user",children:[u.jsx("div",{className:"msg-content-user",children:d?u.jsx(_r,{content:t.content,className:"msg-content-user-markdown"}):t.content}),u.jsx(cF,{refs:t.metadata?.attachment_refs,onImageClick:c}),u.jsxs("div",{className:"msg-meta-user",children:[u.jsx("span",{className:"msg-time",title:zs(t.timestamp),children:Co(t.timestamp)}),u.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy",children:o?u.jsx(Pl,{}):u.jsx(Dm,{})})]})]})})]})});function MI(e){const t=String(e||"").trim();if(!t)return null;const n=t.match(/^\[Delegating to ([^\]]+)\]/);if(n){const d=n[1].trim(),m=t.match(/task=([^|]+?)(?:\||$)/),h=m?m[1].trim():"";return{kind:"delegation",label:`Delegating to ${d}`,summary:h,tone:"info"}}if(/^\[External resume\]/i.test(t)){const d=t.match(/codex:[a-z0-9-]+:([a-f0-9-]+)/i);return{kind:"external_resume",label:"External resume",summary:d?`Restored session ${d[1].slice(0,8)}…`:"Resumed prior session",tone:"info"}}const r=t.match(/^\[External inbox\]\s*(.+)$/i);if(r)return{kind:"external_status",label:"External inbox",summary:fu(r[1]),tone:"info"};const i=t.match(/^\[External status\]\s*(.+)$/i);if(i)return{kind:"external_status",label:"External status",summary:i[1].split(/\(|;/)[0].trim()||i[1].trim(),tone:"info"};if(/^\[External error\]/i.test(t)||/^\[External failure\]/i.test(t))return{kind:"external_error",label:"External error",summary:t.replace(/^\[[^\]]+\]\s*/,"").split(` -`)[0].slice(0,140),tone:"danger"};const o=t.match(/^\[Company:([^\]]+)\]\s*(.+)$/);if(o){const d=o[1].split("::"),m=d[0]||"company",h=o[2].trim(),p=h.toLowerCase(),g=p.includes("completed")||p.includes("done")?"success":p.includes("blocked")||p.includes("failed")?"warning":"info";return{kind:"company_event",label:`${m.toUpperCase()} · ${d[1]??""}`.replace(/ · $/,""),summary:h,tone:g}}const a=t.match(/^(Review needed|Status digest|Blocked|Completion):\s*(.+)$/i);if(a){const d=a[1].replace(/\b\w/g,h=>h.toUpperCase()),m=fu(a[2]);return{kind:"company_event",label:d,summary:m,tone:/^Blocked$/i.test(a[1])?"warning":"info"}}const c=t.match(/^NO_DELEGATION_JUSTIFICATION:\s*(.+)$/i);return c?{kind:"company_event",label:"Delegation check",summary:fu(c[1]).slice(0,180),tone:"info"}:null}function AF(e,t){const{isCompanyRuntime:n,detailMode:r}=t;if(!n||r==="full"||vl(e.metadata))return null;const i=MI(e.content);if(!i)return null;const o=e.sender==="system"||e.metadata?.type==="system",a=i.kind==="company_event"||e.content.startsWith("[Company:");return!o&&!a?null:{msg:e,classification:i}}function MF(e,t={}){const{isCompanyRuntime:n=!1,detailMode:r="summary"}=t,i=[];let o=[],a=0;const c=new Set,d=new Set,m=()=>{if(o.length===0)return;const h=o[0].msg;i.push({kind:"ops-bundle",id:`ops:${yo(h)}`,timestamp:h.timestamp,events:o,sortOrder:a}),o=[]};return e.forEach((h,p)=>{const g=p*2+1,x=AF(h,{isCompanyRuntime:n,detailMode:r});if(x){o.length===0&&(a=g),o.push(x);return}const v=r==="summary"?AI(h.content):null;if(v){const k=[h.sender,Math.round(h.timestamp/1e3),v.kind,fu(v.summary||v.acceptanceSummary||"").slice(0,500),v.verdict??"",v.deliverables.map(S=>`${S.name}:${S.path}`).join("|").slice(0,800)].join("");if(c.has(k))return;c.add(k)}if(r==="summary"&&!vl(h.metadata)){const k=fu(_F(h.content)).slice(0,1200);if(k){const S=kF(h)?["result",k].join(""):[h.sender,Math.round(h.timestamp/1e3),k].join("");if(d.has(S))return;d.add(S)}}m(),i.push({kind:"message",id:yo(h),timestamp:h.timestamp,msg:h,sortOrder:g})}),m(),i}const DF=It.memo(function({msg:t,showDate:n,dateStr:r,classification:i}){const[o,a]=C.useState(!1),c=t.content.trim()!==`[${i.label}] ${i.summary}`.trim()&&t.content.trim().length>i.summary.length+4;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:`msg-ops-row msg-ops-tone-${i.tone}${o?" expanded":""}`,onClick:c?()=>a(d=>!d):void 0,role:c?"button":void 0,tabIndex:c?0:-1,children:[u.jsx("span",{className:"msg-ops-dot","aria-hidden":"true"}),u.jsx("span",{className:"msg-ops-label",children:i.label}),i.summary&&u.jsx("span",{className:"msg-ops-summary",title:i.summary,children:i.summary}),u.jsx("span",{className:"msg-ops-time",title:zs(t.timestamp),children:Co(t.timestamp)}),c&&u.jsx("span",{className:`msg-ops-chevron${o?" open":""}`,"aria-hidden":"true",children:u.jsx(ss,{down:o})})]}),c&&o&&u.jsx("div",{className:"msg-ops-details",children:u.jsx("pre",{className:"msg-ops-details-pre",children:t.content})})]})}),OF=It.memo(function({events:t,showDate:n,dateStr:r}){const[i,o]=C.useState(!1);if(t.length===0)return null;const a=t[0].msg,c=t[t.length-1].msg,d=t.reduce((p,g)=>{const x=g.classification.kind==="company_event"?"company":g.classification.kind.startsWith("external")?"runtime":"delegation";return p[x]=(p[x]??0)+1,p},{}),m=Object.entries(d).map(([p,g])=>`${g} ${p}`).join(" · "),h=`${t.length} technical event${t.length===1?"":"s"} hidden`;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("button",{type:"button",className:`msg-ops-bundle${i?" expanded":""}`,onClick:()=>o(p=>!p),title:`${zs(a.timestamp)} - ${zs(c.timestamp)}`,children:[u.jsx("span",{className:"msg-ops-bundle-dot"}),u.jsx("span",{className:"msg-ops-bundle-title",children:h}),u.jsx("span",{className:"msg-ops-bundle-summary",children:m}),u.jsx("span",{className:"msg-ops-bundle-time",children:Co(a.timestamp)}),u.jsx("span",{className:"msg-ops-bundle-chevron",children:u.jsx(ss,{down:i})})]}),i&&u.jsx("div",{className:"msg-ops-bundle-details",children:t.map(({msg:p,classification:g})=>u.jsxs("div",{className:`msg-ops-bundle-event msg-ops-tone-${g.tone}`,children:[u.jsx("span",{className:"msg-ops-dot"}),u.jsx("span",{className:"msg-ops-label",children:g.label}),u.jsx("span",{className:"msg-ops-summary",children:g.summary}),u.jsx("span",{className:"msg-ops-time",title:zs(p.timestamp),children:Co(p.timestamp)})]},p.id))})]})});function LF(e){return e.kind==="review"?`Review · ${e.verdict?e.verdict.replace(/_/g," "):"review"}`:e.kind==="report"?"Report":"Update"}const zF=It.memo(function({msg:t,payload:n,showDate:r,dateStr:i,isCopied:o,onCopy:a}){const c=RI(t.sender==="system"?t.senderName||"OPC":t.sender),d=t.senderDeleted?"[Deleted]":t.senderName,m=LF(n),h=n.summary||n.acceptanceSummary||m;return u.jsxs("div",{children:[r&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:"msg-row agent msg-row-project-update",children:[u.jsx("div",{className:"msg-avatar agent-avatar",style:{background:c},children:d.charAt(0).toUpperCase()}),u.jsxs("div",{className:"msg-body",children:[u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:"msg-sender",style:{color:c},children:d}),u.jsx("span",{className:"msg-time",title:zs(t.timestamp),children:Co(t.timestamp)})]}),u.jsxs("div",{className:`msg-project-update-card msg-project-update-${n.kind}`,children:[u.jsxs("div",{className:"msg-project-update-head",children:[u.jsx("span",{className:"msg-project-update-label",children:m}),n.acceptanceSummary&&u.jsx("span",{className:"msg-project-update-chip",children:n.acceptanceSummary})]}),n.title&&u.jsx("div",{className:"msg-project-update-title",children:n.title}),u.jsx(_r,{content:h,className:"msg-project-update-summary"}),n.deliverables.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Outputs"}),u.jsx("div",{className:"msg-project-update-artifacts",children:n.deliverables.slice(0,6).map((p,g)=>u.jsxs("div",{className:"msg-project-update-artifact",children:[u.jsx("span",{className:"msg-project-update-artifact-name",children:p.name}),p.status&&u.jsx("span",{className:"msg-project-update-artifact-status",children:p.status}),p.path&&u.jsx("code",{className:"msg-project-update-artifact-path",children:p.path})]},`${p.path||p.name}-${g}`))})]}),(n.risks.length>0||n.nextActions.length>0)&&u.jsxs("div",{className:"msg-project-update-grid",children:[n.risks.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Caveats"}),u.jsx("ul",{className:"msg-project-update-list",children:n.risks.map((p,g)=>u.jsx("li",{children:p},`risk-${g}`))})]}),n.nextActions.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Next"}),u.jsx("ul",{className:"msg-project-update-list",children:n.nextActions.map((p,g)=>u.jsx("li",{children:p},`next-${g}`))})]})]}),u.jsx("div",{className:"msg-card-actions",children:u.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy raw update",children:o?u.jsxs(u.Fragment,{children:[u.jsx(Pl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Dm,{})," ",u.jsx("span",{children:"Copy raw"})]})})})]})]})]})]})}),PF=It.memo(function({msg:t,showDate:n,dateStr:r,isGrouped:i,isCopied:o,isCheckpointResponded:a,suppressCheckpointPanel:c,keepExpanded:d,onCopy:m,onSend:h}){const p=!!t.senderDeleted,g=p?"[Deleted]":t.senderName,x=RI(t.sender==="system"?t.senderName||"OPC":t.sender),v=t.channelId.startsWith("session:")?t.channelId.slice(8):t.metadata?.taskId??t.metadata?.task_id,k=String(t.metadata?.checkpoint_type??"").trim(),S=aE(t.metadata),b=vl(t.metadata)&&!c;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:`msg-row agent${i?" grouped":""}${p?" deleted-sender":""}`,children:[i?u.jsx("div",{className:"msg-avatar-spacer"}):u.jsx("div",{className:"msg-avatar agent-avatar",style:{background:x},children:g.charAt(0).toUpperCase()}),u.jsxs("div",{className:"msg-body",children:[!i&&u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:`msg-sender${p?" deleted":""}`,style:{color:x},children:g}),u.jsx("span",{className:"msg-time",title:zs(t.timestamp),children:Co(t.timestamp)})]}),t.replyToId&&u.jsx("div",{className:"msg-reply-indicator",children:"Replying to previous message"}),b?u.jsxs(u.Fragment,{children:[k==="company_recruitment_confirmation"&&u.jsx(LH,{meta:t.metadata,onReply:(w,j)=>h?.(w,v,j),responded:a}),k==="company_staffing_selection"&&u.jsx(VH,{meta:t.metadata,onReply:(w,j)=>h?.(w,v,j),responded:a}),k==="company_work_item_gate"&&u.jsx(Qw,{meta:t.metadata,onReply:w=>h?.(w,v,S),responded:a}),k==="company_delivery_feedback"&&u.jsx(ZH,{meta:t.metadata,onReply:(w,j)=>h?.(w,v,j??S),responded:a}),k==="company_reorg_pending"&&u.jsx(qH,{meta:t.metadata,onReply:w=>h?.(w,v,S),responded:a}),k==="human_escalation"&&u.jsx(Qw,{meta:t.metadata,onReply:w=>h?.(w,v,S),responded:a}),k==="task_user_input"&&u.jsx(eF,{meta:t.metadata,onReply:(w,j)=>h?.(w,v,{...S,...j}),responded:a})]}):u.jsxs("div",{className:"msg-content-agent-card",style:{borderLeftColor:x},children:[u.jsx(_r,{content:t.content,collapseMode:d?"never":"auto"}),u.jsxs("div",{className:"msg-card-actions",children:[u.jsx("button",{className:"msg-action-btn",onClick:()=>m(t.id,t.content),title:"Copy message",children:o?u.jsxs(u.Fragment,{children:[u.jsx(Pl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Dm,{})," ",u.jsx("span",{children:"Copy"})]})}),i&&u.jsx("span",{className:"msg-time msg-time-inline",title:zs(t.timestamp),children:Co(t.timestamp)})]})]})]})]})]})}),rl=It.memo(function({messages:t,channelName:n,viewKind:r="session",detailMode:i="summary",agentStatus:o,currentTool:a,toolElapsedMs:c,lastToolSummary:d,progressLog:m,draftAssistantText:h,draftUpdatedAt:p,draftIteration:g,draftTurnId:x,isCompanyRuntime:v,workItemLog:k,childSessions:S,roleWorkItems:b,executorRoleWorkItems:w,onSend:j,onWorkItemClick:N,onMarkRead:O,hasOlderHistory:R=!1,totalMessageCount:L,onLoadOlderHistory:I,loadingOlderHistory:D=!1,scrollPolicy:M="follow",scrollScope:A,showWorkItemRuntimeCard:$=!0,showRuntimeProgress:W=!0,renderUserMarkdown:B=!1}){const V=A??`${r}:${i}:${n}`,H=C.useRef(null),U=C.useRef(null),[Y,Q]=C.useState(null),[q,G]=C.useState(null),J=M==="follow"?"following":"browsing",[P,K]=C.useState(J),[ee,te]=C.useState(0),[ie,se]=C.useState(!1),de=C.useRef(J),oe=C.useRef(M),Ne=C.useRef(M!=="manual"),Ee=C.useRef(!1),Ie=C.useRef(null),Be=C.useRef(0),Ge=C.useRef(!1),Ue=C.useRef("none"),at=C.useRef(null),Pt=C.useRef(0),wt=C.useRef(new Set),Ct=C.useRef(null),pe=C.useRef(null),$e=C.useRef(O),et=C.useRef(0),tt=C.useRef(0),pt=C.useRef(null),me=C.useRef({active:!1,revision:0}),be=C.useRef(!1),Me=C.useRef(null),Fe=C.useRef(!1),He=C.useRef(null),jt=C.useRef(null),an=C.useRef([]),ke=C.useRef({scope:V,assignments:new Map}),Oe=C.useRef({scope:V,owners:new Map}),We=C.useRef({scope:V,keys:new Set});$e.current=O;const qe=(k?.length??0)+(S?.length??0),ut=C.useMemo(()=>{const ae=t.filter(ve=>Wf(ve,i));return v?ae.filter(ve=>!(ve.metadata?.type==="system"&&ve.content.startsWith("[Company:")||!W&&ve.content.startsWith("[Company:"))):ae},[i,v,t,W]),Yt=C.useMemo(()=>zv(ut),[ut]),Nn=C.useMemo(()=>r==="session"&&j?ut.filter(ae=>Yt.pendingMessageIds.has(ae.id)):[],[Yt.pendingMessageIds,ut,j,r]),ln=ut,Ln=C.useMemo(()=>{const ae=new Set;for(const ve of m??[]){if(ve.type!=="thinking")continue;const Ae=String(ve.turnId??"").trim();Ae&&ae.add(Ae)}return ae},[m]),lt=C.useMemo(()=>{const ae=[];for(const ve of ln){const Ae=String(ve.metadata?.runtime_thinking??"").trim();if(!Ae)continue;const Le=String(ve.metadata?.canonical_turn_id??ve.metadata?.turn_id??"").trim();Le&&Ln.has(Le)||ae.push({type:"thinking",summary:"Thinking",detail:Ae,timestamp:Math.max(0,ve.timestamp-1),turnId:Le||void 0,itemId:Le?`${Le}:thinking`:`thinking:${ve.id}`,streamId:Le?`${Le}:thinking`:`thinking:${ve.id}`,executionMode:String(ve.metadata?.execution_mode??"").trim()||void 0})}return ae},[Ln,ln]),In=C.useMemo(()=>W?[...(m??[]).filter(ae=>ew.has(ae.type)),...lt].sort((ae,ve)=>ae.timestamp-ve.timestamp):[],[m,W,lt]),Et=C.useMemo(()=>W?(m??[]).filter(ae=>!ew.has(ae.type)):[],[m,W]),Dt=C.useMemo(()=>W?i==="full"?m??[]:In:[],[i,In,m,W]),Ye=Et,nt=C.useMemo(()=>{const ae=new Set;for(const ve of ln){const Ae=xF(ve);Ae&&ae.add(Ae)}return ae},[ln]),Qt=C.useMemo(()=>{const ae=String(h??"").trim(),ve=String(x??"").trim();return!ae||ve&&nt.has(ve)?null:{kind:"draft",id:ve?`turn:assistant:${ve}`:"draft:active",timestamp:p??ln[ln.length-1]?.timestamp??0,text:ae,iteration:g,sortOrder:Number.MAX_SAFE_INTEGER}},[nt,h,g,x,p,ln]);C.useLayoutEffect(()=>{We.current.scope!==V&&(We.current={scope:V,keys:new Set}),Qt&&We.current.keys.add(Qt.id)},[Qt,V]);const _n=!!o&&o!=="idle",Tt=Ye.length>0,er=W&&i!=="full"&&(_n||Tt),Tn=C.useMemo(()=>{const ae=[...MF(ln,{isCompanyRuntime:v,detailMode:i}),...Dt.map((dt,un)=>({kind:"progress",id:`progress:${bN(dt)}`,timestamp:dt.timestamp,entry:dt,sortOrder:un*2}))].sort((dt,un)=>dt.timestamp-un.timestamp||dt.sortOrder-un.sortOrder),ve=Oe.current.scope===V?Oe.current.owners:new Map,Ae=new Map;ae.forEach((dt,un)=>{if(dt.kind!=="message")return;const zn=sE(dt.msg);if(!zn)return;const qt=ve.get(zn)??dt.id;Ae.set(zn,qt),qt!==dt.id&&(ae[un]={...dt,id:qt})});const Le=new Map;ae.forEach((dt,un)=>{if(dt.kind!=="message")return;const zn=`${dt.msg.channelId}\0${dt.msg.id}`,qt=Le.get(dt.id)??[];qt.push({index:un,identity:zn}),Le.set(dt.id,qt)});const vt=ke.current.scope===V?ke.current.assignments:new Map,ct=new Map;for(const[dt,un]of Le){const zn=vt.get(dt),qt=new Map,Rt=new Set;for(const en of un){const sn=zn?.get(en.identity);!sn||Rt.has(sn)||(qt.set(en.identity,sn),Rt.add(sn))}for(const en of un){if(qt.has(en.identity))continue;const sn=Rt.has(dt)?`${dt}:message:${encodeURIComponent(en.identity)}`:dt;qt.set(en.identity,sn),Rt.add(sn)}ct.set(dt,qt);for(const en of un){const sn=qt.get(en.identity);if(!sn||sn===dt)continue;const Vr=ae[en.index];Vr.kind==="message"&&(ae[en.index]={...Vr,id:sn})}}return Qt&&ae.push(Qt),{items:ae,messageKeyAssignments:ct,resultKeyOwners:Ae}},[i,Qt,v,V,ln,Dt]),ht=Tn.items,tr=C.useMemo(()=>ht.map(uF),[ht]);C.useLayoutEffect(()=>{ke.current={scope:V,assignments:Tn.messageKeyAssignments},Oe.current={scope:V,owners:Tn.resultKeyOwners}},[V,Tn.messageKeyAssignments,Tn.resultKeyOwners]);const mn=C.useRef(ln);mn.current=ln,et.current=ln.reduce((ae,ve)=>Math.max(ae,ve.timestamp),0);const[cn,Fn]=C.useState({scope:V,startKey:null}),Jt=cn.scope===V?cn.startKey:null,Vt=Math.max(0,ht.length-gF),Vn=Jt?ht.findIndex(ae=>ae.id===Jt):-1;let Un=-1;if(Jt&&Vn<0){const ae=an.current,ve=ae.indexOf(Jt),Ae=new Map(ht.map((Le,vt)=>[Le.id,vt]));for(let Le=Math.max(0,ve);Le<ae.length;Le+=1){const vt=Ae.get(ae[Le]);if(vt!==void 0){Un=vt;break}}if(Un<0)for(let Le=ve-1;Le>=0;Le-=1){const vt=Ae.get(ae[Le]);if(vt!==void 0){Un=vt;break}}}const Re=Vn>=0?Vn:Un>=0?Un:Vt,bt=C.useMemo(()=>ht.slice(Re),[ht,Re]),Cn=Re,vr=C.useRef(ht);vr.current=ht,C.useLayoutEffect(()=>{const ae=ht[Re]?.id??null;cn.scope===V&&cn.startKey===ae||(cn.scope===V&&cn.startKey&&(Fe.current=!0),Fn({scope:V,startKey:ae}))},[V,ht,Re,cn.scope,cn.startKey]),C.useLayoutEffect(()=>{const ae=Me.current;if(!ae||ae.scope!==V)return;const ve=ht.findIndex(Le=>Le.id===ae.startKey);if(ve<=ae.beforeIndex)return;const Ae=Math.max(0,ve-uy);Me.current=null,Fe.current=!0,Fn({scope:V,startKey:ht[Ae]?.id??null})},[V,ht]),C.useLayoutEffect(()=>{an.current=ht.map(ae=>ae.id)},[ht]);const Mn=C.useMemo(()=>{let ae="";return bt.map((ve,Ae)=>{const Le=new Date(ve.timestamp).toLocaleDateString(),vt=Le!==ae;vt&&(ae=Le);const ct=Ae>0?bt[Ae-1]:null,dt=ve.kind==="message"&&ct?.kind==="message"&&!vt&&ct.msg.sender===ve.msg.sender&&ct.msg.senderName===ve.msg.senderName&&ve.msg.metadata?.type!=="system"&&ct.msg.metadata?.type!=="system"&&!ve.msg.metadata?.is_work_item_event&&!ct.msg.metadata?.is_work_item_event&&ve.msg.timestamp-ct.msg.timestamp<hF;return{item:ve,showDate:vt,dateStr:Le,isGrouped:dt}})},[bt]),_t=!!(i!=="full"&&$&&v&&qe>0),wr=ht.length>0||_t||er;be.current=wr;const fr=C.useCallback(ae=>{const ve=U.current?.querySelectorAll("[data-timeline-key]");if(!ve)return null;for(const Ae of ve)if(Ae.dataset.timelineKey===ae)return Ae;return null},[]),Xt=C.useCallback(ae=>{Ee.current=ae,se(ve=>ve===ae?ve:ae)},[]),Ut=C.useCallback(()=>{const ae=pe.current,ve=$e.current;!ae||!ve||Ct.current===ae||(Ct.current=ae,ve())},[]),hn=C.useCallback(()=>{const ae=H.current,ve=U.current;if(!ae||!ve)return;const Ae=ae.getBoundingClientRect(),Le=ve.querySelectorAll("[data-timeline-key]");for(const vt of Le){const ct=vt.getBoundingClientRect();if(!(ct.bottom<=Ae.top+.5)){Ie.current={key:vt.dataset.timelineKey??"",viewportOffset:ct.top-Ae.top};return}}Ie.current=null},[]),qn=C.useCallback(()=>{const ae=H.current,ve=Ie.current;if(!ae||!ve?.key)return;const Ae=fr(ve.key);if(!Ae){hn();return}const Le=Ae.getBoundingClientRect().top-ae.getBoundingClientRect().top-ve.viewportOffset;Math.abs(Le)>.5&&(ae.scrollTop+=Le),ve.viewportOffset=Ae.getBoundingClientRect().top-ae.getBoundingClientRect().top,Be.current=ae.scrollTop,Xt(Xo(ae))},[hn,fr,Xt]),gt=C.useCallback(ae=>{de.current=ae,K(ve=>ve===ae?ve:ae)},[]),Gn=C.useCallback(()=>{me.current.active=!1,de.current!=="browsing"&&(Pt.current=et.current,te(0),gt("browsing")),hn()},[hn,gt]),mr=C.useCallback(()=>{const ae=H.current;if(!ae)return;const ve=Math.max(0,ae.scrollHeight-ae.clientHeight);Math.abs(ae.scrollTop-ve)>.5&&(ae.scrollTop=ve),Be.current=ae.scrollTop,Xt(Xo(ae))},[Xt]),Rn=C.useCallback(()=>{oe.current==="follow"&&(gt("following"),te(0),Ie.current=null,mr(),Ut())},[Ut,gt,mr]),Je=C.useCallback(()=>{if(oe.current==="follow"){Rn();return}me.current.active=!1,mr(),hn(),te(0),Ut()},[hn,Ut,Rn,mr]),xn=C.useCallback(()=>{const ae=H.current;if(!ae||!be.current)return;if(Xt(Xo(ae)),Ne.current){Ne.current=!1,oe.current==="initial-bottom"&&(me.current={active:!0,revision:tt.current}),mr(),oe.current!=="follow"&>("browsing");return}const ve=me.current;if(oe.current==="initial-bottom"&&ve.active&&ve.revision===tt.current){mr();return}if(oe.current==="follow"&&de.current==="following"){mr();return}Fe.current&&(Fe.current=!1,qn())},[qn,gt,Xt,mr]);C.useLayoutEffect(()=>{oe.current=M;const ae=M==="follow"?"following":"browsing";de.current=ae,K(ae),Ne.current=M!=="manual",Xt(!1),Ie.current=null,Me.current=null,Fe.current=!1,He.current=null,jt.current=null,me.current={active:!1,revision:tt.current},wt.current=new Set(mn.current.filter(iC).map(yo)),Pt.current=et.current,Ct.current=null,te(0)},[M,V,Xt]),C.useLayoutEffect(()=>{const ae=pt.current;if(dF(ae,tr))return;pt.current=tr,tt.current+=1;const Ae=me.current;!Ae.active||Ae.revision===tt.current||(Ae.active=!1,hn())},[hn,tr]),C.useLayoutEffect(()=>{const ae=H.current,ve=U.current;if(!ae||!ve||(jt.current={width:ae.clientWidth,height:ae.clientHeight},xn(),typeof ResizeObserver>"u"))return;const Ae=new ResizeObserver(Le=>{if(Le.find(ct=>ct.target===ae)){const ct=jt.current,dt={width:ae.clientWidth,height:ae.clientHeight};ct&&(ct.width!==dt.width||ct.height!==dt.height)&&(Fe.current=de.current==="browsing"),jt.current=dt}xn()});return Ae.observe(ae),Ae.observe(ve),()=>Ae.disconnect()},[xn,M,V]),C.useEffect(()=>{const ae=H.current;if(!ae)return;Be.current=ae.scrollTop;const ve=Rt=>{Ue.current=Rt.deltaY<0?"up":Rt.deltaY>0?"down":"none",Rt.deltaY<0&&ae.scrollTop>0&&Gn(),Rt.deltaY>0&&Xo(ae)&&Rn()},Ae=()=>{Ge.current=!0},Le=()=>{Ge.current=!1,Ue.current="none",de.current==="browsing"&&hn()},vt=Rt=>{at.current=Rt.touches[0]?.clientY??null,Ge.current=!0},ct=Rt=>{const en=Rt.touches[0]?.clientY,sn=at.current;en===void 0||sn===null||(en>sn+1?(Ue.current="up",Gn()):en<sn-1&&(Ue.current="down"),at.current=en)},dt=()=>{at.current=null,Le()},un=Rt=>{const en=Rt.target;en&&en!==ae&&(en.isContentEditable||["INPUT","TEXTAREA","SELECT","BUTTON"].includes(en.tagName))||(["ArrowUp","PageUp","Home"].includes(Rt.key)||Rt.key===" "&&Rt.shiftKey?(Ue.current="up",Gn()):(["ArrowDown","PageDown","End"].includes(Rt.key)||Rt.key===" ")&&(Ue.current="down",Rt.key==="End"&&Je()))},zn=()=>{Ue.current="none"},qt=()=>{const Rt=Be.current,en=ae.scrollTop,sn=Xo(ae),Vr=Ee.current,Pr=Ge.current||Ue.current!=="none";en<Rt-.5&&!sn?Gn():Pr?(Ue.current==="up"?Gn():sn&&(en>Rt+.5||Ue.current==="down")&&Rn(),de.current==="browsing"&&hn(),Ge.current||(Ue.current="none")):en>Rt+.5&&sn?Rn():de.current==="browsing"&&Math.abs(en-Rt)>.5&&hn(),Be.current=en,Xt(sn),!Vr&&sn&&(Pr||en>Rt+.5)&&Ut()};return ae.addEventListener("wheel",ve,{passive:!0}),ae.addEventListener("pointerdown",Ae),window.addEventListener("pointerup",Le),window.addEventListener("pointercancel",Le),window.addEventListener("blur",Le),ae.addEventListener("touchstart",vt,{passive:!0}),ae.addEventListener("touchmove",ct,{passive:!0}),ae.addEventListener("touchend",dt,{passive:!0}),ae.addEventListener("touchcancel",dt,{passive:!0}),ae.addEventListener("keydown",un),ae.addEventListener("keyup",zn),ae.addEventListener("scroll",qt,{passive:!0}),()=>{ae.removeEventListener("wheel",ve),ae.removeEventListener("pointerdown",Ae),window.removeEventListener("pointerup",Le),window.removeEventListener("pointercancel",Le),window.removeEventListener("blur",Le),ae.removeEventListener("touchstart",vt),ae.removeEventListener("touchmove",ct),ae.removeEventListener("touchend",dt),ae.removeEventListener("touchcancel",dt),ae.removeEventListener("keydown",un),ae.removeEventListener("keyup",zn),ae.removeEventListener("scroll",qt)}},[hn,Gn,Ut,Je,Rn,Xt]);const Kt=C.useMemo(()=>ln.filter(iC),[ln]),kt=C.useMemo(()=>Kt.map(yo),[Kt]);C.useEffect(()=>{const ae=new Set(kt);if(wt.current.size===0){wt.current=ae;return}if(de.current==="browsing"){let ve=0;for(const Ae of Kt){const Le=yo(Ae);!wt.current.has(Le)&&Ae.timestamp>=Pt.current&&(ve+=1)}ve>0&&te(Ae=>Ae+ve)}else te(0);wt.current=ae},[Kt,kt]);const Wn=Kt.reduce((ae,ve)=>!ae||ve.timestamp>ae.timestamp?ve:ae,void 0),gn=Wn?`${yo(Wn)}:${Wn.timestamp}`:null;pe.current=gn,C.useEffect(()=>{if(!gn)return;const ae=H.current,ve=!!ae&&Xo(ae);Xt(ve),!(de.current!=="following"&&!ve)&&Ut()},[gn,Ut,Xt,P]);const nr=C.useCallback((ae,ve)=>{vF(ve).then(Ae=>{Ae&&(Q(ae),setTimeout(()=>Q(null),1500))})},[]),ds=C.useCallback(async()=>{if(hn(),Fe.current=!0,Re>0){const ae=Math.max(0,Re-uy);Fn({scope:V,startKey:ht[ae]?.id??null});return}!R||D||!I||(Me.current=Jt?{scope:V,startKey:Jt,beforeIndex:Re}:null,await I(ut[0]))},[hn,Jt,ut,R,D,I,V,ht,Re]),pr=Je,rr=C.useCallback(ae=>{const ve=H.current,Ae=fr(ae);if(!ve||!Ae)return!1;const Le=ve.getBoundingClientRect(),vt=Ae.getBoundingClientRect();return ve.scrollTop+=vt.top-Le.top-Math.max(0,(ve.clientHeight-vt.height)/2),Be.current=ve.scrollTop,Xt(Xo(ve)),hn(),!0},[hn,fr,Xt]);C.useLayoutEffect(()=>{const ae=He.current;!ae||!rr(ae)||(He.current=null)},[rr,bt]);const ue=C.useCallback(()=>{const ae=Nn[0];if(!ae)return;Gn(),Fe.current=!1;const ve=yo(ae);if(rr(ve))return;const Ae=ht.findIndex(vt=>vt.id===ve);if(Ae<0)return;He.current=ve;const Le=Math.max(0,Ae-2);Fn({scope:V,startKey:ht[Le]?.id??ve})},[rr,Gn,Nn,V,ht]),Se=C.useCallback(ae=>{const{item:ve,showDate:Ae,dateStr:Le,isGrouped:vt}=ae;if(ve.kind==="progress")return u.jsx(jF,{entry:ve.entry,showDate:Ae,dateStr:Le,compact:i!=="full"});if(ve.kind==="draft")return u.jsx(TF,{text:ve.text,timestamp:ve.timestamp,iteration:ve.iteration,showDate:Ae,dateStr:Le});if(ve.kind==="ops-bundle")return u.jsx(OF,{events:ve.events,showDate:Ae,dateStr:Le});const{msg:ct}=ve,dt=We.current.scope===V&&We.current.keys.has(ve.id),un=ct.metadata?.type==="system",zn=bF(ct),qt=!dt&&(!!ct.metadata?.is_work_item_event||ct.content.startsWith("[Company:")),Rt=vl(ct.metadata),en=ct.sender==="user",sn=!dt&&!en&&!Rt?AI(ct.content):null;if(qt&&!Rt)return u.jsx(EF,{msg:ct,showDate:Ae,dateStr:Le});if(sn)return u.jsx(zF,{msg:ct,payload:sn,showDate:Ae,dateStr:Le,isCopied:Y===ct.id,onCopy:nr});if(zn&&!Rt)return u.jsx(IF,{msg:ct,showDate:Ae,dateStr:Le});if(un&&!Rt)return u.jsx(NF,{msg:ct,showDate:Ae,dateStr:Le});if(en)return u.jsx(RF,{msg:ct,showDate:Ae,dateStr:Le,isGrouped:vt,isCopied:Y===ct.id,onCopy:nr,onImageClick:G,renderUserMarkdown:B});if(ct.sender==="system"&&!vl(ct.metadata)){const Vr=MI(ct.content);if(Vr)return u.jsx(DF,{msg:ct,showDate:Ae,dateStr:Le,isGrouped:vt,classification:Vr})}return u.jsx(PF,{msg:ct,showDate:Ae,dateStr:Le,isGrouped:vt,isCopied:Y===ct.id,isCheckpointResponded:Yt.respondedMessageIds.has(ct.id),suppressCheckpointPanel:Yt.duplicateMessageIds.has(ct.id),keepExpanded:dt,onCopy:nr,onSend:j})},[Yt,Y,nr,i,j,B,V]),Pe=pF[r];return u.jsxs("div",{className:`msg-list-shell msg-list-shell-${P}`,children:[u.jsx("div",{className:`msg-list msg-list-${P}`,ref:H,tabIndex:0,"data-scroll-policy":M,"data-viewport-mode":P,children:u.jsxs("div",{className:"msg-list-content",ref:U,children:[!wr&&u.jsxs("div",{className:"msg-welcome",children:[u.jsx("div",{className:"msg-welcome-icon",children:Pe.icon}),u.jsx("div",{className:"msg-welcome-title",children:n||Pe.title}),u.jsx("div",{className:"msg-welcome-hint",children:Pe.hint})]}),(Cn>0||R)&&u.jsxs("div",{className:"msg-history-hint",children:[u.jsx("button",{className:"msg-history-load-btn",onClick:()=>{ds()},disabled:D,children:D?"Loading older messages...":Cn>0?`Load ${Math.min(uy,Cn)} older messages`:"Load older messages"}),u.jsxs("span",{className:"msg-history-meta",children:["Showing ",bt.length," of ",L??ht.length]})]}),Mn.map(ae=>u.jsx("div",{className:"msg-timeline-row","data-timeline-key":ae.item.id,children:Se(ae)},ae.item.id)),_t&&u.jsxs("div",{className:"msg-row agent",children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(gl,{})}),u.jsx("div",{className:"msg-body",children:u.jsx(TI,{workItemLog:k??[],roleWorkItems:b,executorRoleWorkItems:w,childSessions:S,isCompanyRuntime:v,onWorkItemClick:N})})]}),er&&u.jsxs("div",{className:"msg-row agent agent-working-row",children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(gl,{})}),u.jsx("div",{className:"msg-body",children:u.jsx(Cl,{entries:Ye,agentStatus:o,currentTool:a,toolElapsedMs:c,lastToolSummary:d,expandedByDefault:!0})})]}),u.jsx("div",{className:"msg-end-anchor"})]})}),(Nn.length>0||P==="browsing"&&!ie)&&u.jsxs("div",{className:"msg-list-floating-actions",children:[Nn.length>0&&u.jsxs("button",{type:"button",className:"msg-list-float-btn msg-list-pending-btn",onClick:ue,children:["Pending actions · ",Nn.length]}),P==="browsing"&&!ie&&u.jsxs("button",{type:"button",className:"msg-list-float-btn msg-list-latest-btn",onClick:pr,children:[ee>0?`${ee} new · `:"","Back to latest"]})]}),q&&u.jsx("div",{className:"lightbox-overlay",onClick:()=>G(null),children:u.jsx("img",{className:"lightbox-img",src:q,alt:"Preview"})})]})}),BF=10*1024*1024,$F=20*1024*1024,HF="image/*,video/mp4,video/mpeg,video/quicktime,video/webm,.mp4,.mpeg,.mpg,.mov,.webm,.txt,.md,.pdf,.csv,.json,.yaml,.yml,.py,.js,.ts,.tsx,.jsx,.html,.css,.java,.c,.cpp,.go,.rs,.rb,.sh,.xml,.toml,.docx,.xlsx,.pptx",hf={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function FF(e,t){return new Promise((n,r)=>{const i=new FileReader;i.onprogress=o=>{o.lengthComputable&&t?.(Math.round(o.loaded/o.total*100))},i.onload=()=>{const o=i.result;t?.(100),n(o.split(",")[1]||"")},i.onerror=r,i.readAsDataURL(e)})}function aC(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(0)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}function DI(e,t){const n=t.includes(".")?t.split(".").pop()?.toUpperCase()??"":"";return e.startsWith("image/")?"IMG":e.startsWith("video/")?"VID":e==="application/pdf"?"PDF":e.includes("wordprocessingml")?"DOC":e.includes("spreadsheetml")||n==="CSV"?"XLS":e.includes("presentationml")?"PPT":e.includes("json")?"JSON":e.includes("yaml")||n==="YML"||n==="YAML"?"YAML":e.startsWith("text/")?"TXT":["PY","TS","TSX","JS","JSX","GO","RS","RB","JAVA","C","CPP","HTML","CSS","SH"].includes(n)?n:n||"FILE"}function VF(e,t){const n=DI(e,t);return n==="IMG"?"image":n==="VID"?"video":n==="PDF"?"pdf":n==="DOC"||n==="XLS"||n==="PPT"?"office":n==="JSON"||n==="YAML"?"data":n==="TXT"?"text":["PY","TS","TSX","JS","JSX","GO","RS","RB","JAVA","C","CPP","HTML","CSS","SH"].includes(n)?"code":"generic"}function UF({progress:e,state:t,error:n}){const i=2*Math.PI*11,o=n||t==="ready"?100:Math.max(0,Math.min(e,100)),a=i*(1-o/100);return u.jsxs("span",{className:`attachment-progress-ring${n?" error":t==="ready"?" ready":""}`,"aria-label":n?"Attachment preparation failed":t==="ready"?"Attachment ready to send":`Preparing attachment ${o}%`,role:"img",children:[u.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[u.jsx("circle",{className:"attachment-progress-track",cx:"14",cy:"14",r:11}),u.jsx("circle",{className:"attachment-progress-value",cx:"14",cy:"14",r:11,strokeDasharray:i,strokeDashoffset:a})]}),u.jsx("span",{className:"attachment-progress-center",children:n?"!":t==="ready"?u.jsx(Pl,{}):o})]})}function qF({usedPct:e,usedTokens:t,windowTokens:n}){const i=2*Math.PI*11,o=Math.max(0,Math.min(e,100)),a=i*(1-o/100),c=o>=80,d=o>=90,m=typeof t=="number"&&typeof n=="number"?`${o}% used (${t.toLocaleString()}/${n.toLocaleString()})`:`${o}% used`;return u.jsxs("span",{className:`composer-context-ring${c?" low":""}${d?" critical":""}`,title:`Context window: ${m}`,"aria-label":`Context window ${m}`,role:"img",children:[u.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[u.jsx("circle",{className:"composer-context-ring-track",cx:"14",cy:"14",r:11}),u.jsx("circle",{className:"composer-context-ring-value",cx:"14",cy:"14",r:11,strokeDasharray:i,strokeDashoffset:a})]}),u.jsx("span",{className:"composer-context-ring-label",children:o})]})}function dy(e){return e.organization_name?.trim()||e.name}function fy({disabled:e,placeholder:t,channelId:n,execMode:r,companyProfile:i,taskPreferredAgent:o="native",agentStatus:a,currentTool:c,displayTool:d,activeAgentCount:m,runtimeControlState:h,canStop:p,autoFocus:g=!0,contextTokens:x,contextWindow:v,contextRemainingPct:k,savedOrgs:S,activeSavedOrg:b,selectedOrgId:w,lockedMode:j=!1,onSend:N,onModeChange:O,onTaskAgentChange:R,onSavedOrgsRefresh:L,onSavedOrgLoad:I,onStop:D,onContinueInNewChat:M}){const[A,$]=C.useState(""),[W,B]=C.useState(!1),[V,H]=C.useState([]),[U,Y]=C.useState(null),Q=C.useRef(null),q=C.useRef(null),G=h==="suspending",J=h==="running"||h==="suspending"||h==="resuming",P=h==="suspended",K=h!=null,ee=J||!K&&a!=null&&a!=="idle",te=(p??!0)&&!G&&!P,ie=C.useMemo(()=>iE({contextTokens:x,contextWindow:v,contextRemainingPct:k}),[k,x,v]);C.useEffect(()=>{const ke=Q.current;ke&&(ke.style.height="auto",ke.style.height=`${Math.min(ke.scrollHeight,200)}px`)},[A]),C.useEffect(()=>{$(""),H(ke=>(ke.forEach(Oe=>{Oe.preview_url&&URL.revokeObjectURL(Oe.preview_url)}),[])),!e&&g&&setTimeout(()=>Q.current?.focus(),50)},[n,e,g]);const se=C.useCallback((ke,Oe)=>{H(We=>We.map(Ze=>Ze.id===ke?Oe(Ze):Ze))},[]),de=C.useCallback(async(ke,Oe)=>{try{const We=await FF(Oe,Ze=>{se(ke,qe=>({...qe,progress_percent:Ze,transfer_state:"reading"}))});se(ke,Ze=>({...Ze,base64_data:We,progress_percent:100,transfer_state:"ready"}))}catch{se(ke,We=>({...We,error:"Failed to prepare file",progress_percent:0,transfer_state:"error"}))}},[se]),oe=C.useCallback(ke=>{const Oe=Array.from(ke);let We=V.reduce((qe,ut)=>qe+ut.size_bytes,0);const Ze=Oe.map(qe=>{let ut;return qe.size>BF?ut=`Too large (${aC(qe.size)})`:We+qe.size>$F?ut="Total size exceeds 20MB":We+=qe.size,{id:crypto.randomUUID(),file:qe,filename:qe.name||"upload",mime_type:qe.type||"application/octet-stream",size_bytes:qe.size,preview_url:qe.type.startsWith("image/")?URL.createObjectURL(qe):"",progress_percent:0,transfer_state:ut?"error":"reading",error:ut}});H(qe=>[...qe,...Ze]),Ze.filter(qe=>!qe.error).forEach(qe=>{de(qe.id,qe.file)})},[V,de]),Ne=C.useCallback(ke=>{H(Oe=>{const We=Oe.find(Ze=>Ze.id===ke);return We?.preview_url&&URL.revokeObjectURL(We.preview_url),Oe.filter(Ze=>Ze.id!==ke)})},[]),Ee=C.useCallback(()=>{if(e||ee)return;const ke=A.trim(),Oe=V.filter(qe=>!qe.error&&qe.transfer_state==="reading"),We=V.filter(qe=>!qe.error&&!!qe.base64_data);if(Oe.length>0||!ke&&We.length===0)return;const Ze=We.map(qe=>({filename:qe.filename,data:qe.base64_data,mime_type:qe.mime_type}));N(ke||"Sent with attachments",Ze.length?Ze:void 0),$(""),V.forEach(qe=>{qe.preview_url&&URL.revokeObjectURL(qe.preview_url)}),H([])},[e,ee,A,V,N]),Ie=C.useCallback(ke=>{const Oe=ke.clipboardData?.files;Oe&&Oe.length>0&&(ke.preventDefault(),oe(Oe))},[oe]),Be=String(i??"").trim().toLowerCase(),Ge=r==="company"?"company":r==="org"||r==="custom"||Be==="custom"?"org":"task",Ue=C.useMemo(()=>(S??[]).filter(ke=>!!ke.name&&ke.name!=="corporate"),[S]),at=b?Ue.find(ke=>ke.name===b):void 0,Pt=w?Ue.find(ke=>ke.name===w):void 0,wt=at?dy(at):b||"",Ct=Pt?dy(Pt):w||wt,pe=Pt?.name||w||at?.name||"",$e=Ge==="task"?"task":"company",et=Ge==="org"?pe?`org:${pe}`:"":"corporate",tt=Ge==="org"?Ct?`Company / ${Ct}`:"Company / Saved org":"Company / Corporate",pt=$e==="task"?"Task":tt,me=!!r&&!!O,be=Ge==="task"&&!!R,Me=C.useMemo(()=>{const ke=Ge==="task"?"task":Ge==="org"?`org:${pe||"selected"}`:"company:corporate",Oe=pe||at?.name||"",We=Ct||wt||Oe,Ze=[{key:"task",mode:"task",label:"Task",description:"A single agent handles the request",icon:u.jsx(L4,{})},{key:"company:corporate",mode:"company",profile:"corporate",label:"Company / Corporate",description:"A team of roles collaborates",icon:u.jsx(z4,{})}];return Oe&&Ze.push({key:`org:${Oe}`,mode:"org",profile:"custom",orgId:Oe,label:`Company / ${We}`,description:"A saved company architecture collaborates",icon:u.jsx(P4,{})}),Ze.filter(qe=>qe.key!==ke)},[wt,at?.name,Ge,Ct,pe]),Fe=V.filter(ke=>!ke.error&&ke.transfer_state==="reading").length,He=V.filter(ke=>!ke.error&&ke.transfer_state==="ready").length,jt=d||c,an=ee?G?"Stopping...":m&&m>1?`${m} agents working`:jt?`Running ${jt}`:a==="reflecting"?"Thinking...":"Working...":null;return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:`msg-composer${W?" focused":""}${ee?" working":""}`,children:[ee&&an&&u.jsxs("div",{className:"composer-status",children:[u.jsx("div",{className:"composer-status-indicator"}),u.jsx("span",{className:"composer-status-text",children:an}),u.jsxs("button",{className:"composer-stop-btn",onClick:D,title:"Stop",disabled:!te||!D,children:[u.jsx(tE,{}),u.jsx("span",{children:G?"Stopping...":"Stop"})]})]}),V.length>0&&u.jsx("div",{className:"composer-attachments",children:V.map(ke=>u.jsxs("div",{className:`attachment-chip${ke.error?" error":""}`,children:[ke.preview_url?u.jsx("img",{className:"attachment-thumb",src:ke.preview_url,alt:ke.filename,onClick:()=>Y(ke.preview_url)}):u.jsx("span",{className:`attachment-file-icon tone-${VF(ke.mime_type,ke.filename)}`,children:DI(ke.mime_type,ke.filename)}),u.jsxs("span",{className:"attachment-chip-info",children:[u.jsx("span",{className:"attachment-chip-name",children:ke.filename}),u.jsx("span",{className:"attachment-chip-size",children:ke.error?ke.error:ke.transfer_state==="reading"?`Preparing ${ke.progress_percent}%`:`${aC(ke.size_bytes)} - Ready`})]}),u.jsx(UF,{progress:ke.progress_percent,state:ke.transfer_state,error:ke.error}),u.jsx("button",{className:"attachment-chip-remove",onClick:()=>Ne(ke.id),title:"Remove",children:u.jsx(Lm,{})})]},ke.id))}),u.jsxs("div",{className:"composer-input-area",children:[u.jsx("textarea",{ref:Q,value:A,onChange:ke=>$(ke.target.value),onFocus:()=>B(!0),onBlur:()=>B(!1),onPaste:Ie,onKeyDown:ke=>{ke.key==="Enter"&&!ke.shiftKey&&(ke.preventDefault(),Ee())},placeholder:t??"Message...",rows:1,disabled:e}),u.jsxs("div",{className:"composer-bottom",children:[u.jsx("button",{className:"composer-attach-btn",onClick:()=>q.current?.click(),title:"Attach files",disabled:e,children:u.jsx(I4,{})}),u.jsx("input",{ref:q,type:"file",multiple:!0,accept:HF,style:{display:"none"},onChange:ke=>{ke.target.files&&oe(ke.target.files),ke.target.value=""}}),(me||r)&&u.jsxs("div",{className:"composer-config-group","data-locked":j?"true":void 0,children:[me&&!j?u.jsxs("label",{className:"composer-mode-inline","data-kind":"mode",title:"Execution mode for this chat and new work started from it",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Mode"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsxs("select",{className:"composer-mode-select",value:$e,onChange:ke=>{if(ke.target.value==="task"){O?.("task");return}O?.("company","corporate")},onFocus:()=>L?.(),onPointerDown:()=>L?.(),disabled:e,"aria-label":"Execution mode",children:[u.jsx("option",{value:"task",children:"Task"}),u.jsx("option",{value:"company",children:"Company"})]})})]}):me&&j?u.jsxs("div",{className:"composer-mode-chip","data-kind":"mode",tabIndex:0,role:"group","aria-label":`Mode locked to ${pt}.${M?" Use the menu to start a new chat in a different mode.":" Start a new chat to use a different mode."}`,children:[u.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:u.jsx(rS,{})}),u.jsx("span",{className:"composer-mode-chip-label",children:pt}),u.jsxs("div",{className:"composer-mode-chip-popover",role:"dialog","aria-label":"Mode info",children:[u.jsx("div",{className:"composer-mode-chip-popover-title",children:"Mode is fixed for this chat"}),u.jsxs("div",{className:"composer-mode-chip-popover-body",children:["Once the first message is sent, this chat is committed to"," ",u.jsx("strong",{children:pt}),"."]}),M&&Me.length>0&&u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"composer-mode-chip-popover-divider","aria-hidden":"true"}),u.jsx("div",{className:"composer-mode-chip-popover-action-title",children:"Continue in a new chat"}),u.jsx("div",{className:"composer-mode-chip-popover-actions",children:Me.map(ke=>u.jsxs("button",{type:"button",className:"composer-mode-chip-popover-action",onClick:()=>M(ke.mode,ke.profile,ke.orgId),"aria-label":`Start a new chat in ${ke.label}`,children:[u.jsx("span",{className:"composer-mode-chip-popover-action-icon","aria-hidden":"true",children:ke.icon}),u.jsxs("span",{className:"composer-mode-chip-popover-action-text",children:[u.jsx("span",{className:"composer-mode-chip-popover-action-label",children:ke.label}),u.jsx("span",{className:"composer-mode-chip-popover-action-desc",children:ke.description})]}),u.jsx("span",{className:"composer-mode-chip-popover-action-arrow","aria-hidden":"true",children:u.jsx(rE,{})})]},ke.key))})]})]})]}):u.jsx("span",{className:"composer-mode","data-kind":"mode",children:pt}),$e==="company"&&me&&!j&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),u.jsxs("label",{className:"composer-mode-inline","data-kind":"org",title:"Company architecture for this chat",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Company"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsxs("select",{className:"composer-mode-select",value:et,onChange:ke=>{const Oe=ke.target.value;if(Oe==="corporate"){O?.("company","corporate");return}if(Oe.startsWith("org:")){const We=Oe.slice(4);We&&O?.("org","custom",We)}},onFocus:()=>L?.(),onPointerDown:()=>L?.(),disabled:e,"aria-label":"Company architecture",children:[u.jsx("option",{value:"corporate",children:"Corporate"}),!et&&u.jsx("option",{value:"",disabled:!0,children:"Select saved org"}),et&&et!=="corporate"&&!Ue.some(ke=>`org:${ke.name}`===et)&&u.jsx("option",{value:et,children:Ct||pe}),Ue.length===0?u.jsx("option",{value:"",disabled:!0,children:"No saved orgs"}):Ue.map(ke=>u.jsx("option",{value:`org:${ke.name}`,children:dy(ke)},ke.name))]})})]})]}),Ge==="task"&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),be&&!j?u.jsxs("label",{className:"composer-mode-inline","data-kind":"agent",title:"Execution agent for this task-mode chat",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Agent"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsx("select",{className:"composer-mode-select",value:o,onChange:ke=>R?.(ke.target.value),disabled:e,"aria-label":"Task mode agent",children:Object.entries(hf).map(([ke,Oe])=>u.jsx("option",{value:ke,children:Oe},ke))})})]}):be&&j?u.jsxs("span",{className:"composer-mode-chip","data-kind":"agent",tabIndex:0,role:"status","aria-label":`Agent locked to ${hf[o]}. Start a new chat to use a different agent.`,children:[u.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:u.jsx(rS,{})}),u.jsx("span",{className:"composer-mode-chip-label",children:hf[o]}),u.jsxs("span",{className:"composer-mode-chip-popover",role:"tooltip",children:[u.jsx("span",{className:"composer-mode-chip-popover-title",children:"Agent is fixed for this chat"}),u.jsx("span",{className:"composer-mode-chip-popover-body",children:"The execution agent is committed once the chat starts. Start a new chat to switch agents."})]})]}):u.jsx("span",{className:"composer-mode","data-kind":"agent",children:hf[o]})]})]}),u.jsx("span",{className:"composer-hint",children:Fe>0?`Preparing ${Fe} attachment${Fe>1?"s":""}`:He>0?`${He} attachment${He>1?"s":""} ready`:"Shift+Enter for new line"}),typeof ie.usedPct=="number"&&u.jsx(qF,{usedPct:ie.usedPct,usedTokens:ie.usedTokens,windowTokens:ie.windowTokens}),u.jsx("button",{className:"composer-send-btn",onClick:Ee,disabled:e||Fe>0||!A.trim()&&He===0||ee,children:u.jsx(E4,{})})]})]})]}),U&&u.jsx("div",{className:"lightbox-overlay",onClick:()=>Y(null),children:u.jsx("img",{className:"lightbox-img",src:U,alt:"Preview"})})]})}function C0(e){return zm(e)}function lC(e){const t=C0(e);return t==="tool_active"?0:t==="reflecting"?1:e.status==="running"?2:e.status==="pending"?3:e.status==="done"?5:e.status==="failed"?6:4}function j0(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"now";if(t<60)return`${t}s`;const n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h`}function GF(e){return e.length===0?"—":j0(e[e.length-1].timestamp)}function WF(e){if(e.status==="done")return"Completed";if(e.status==="failed")return"Failed";if(e.status==="cancelled")return"Cancelled";const t=C0(e);if(t==="tool_active"&&e.currentTool)return e.currentTool;if(t==="reflecting")return"Thinking…";if(e.status==="pending")return"Pending";const n=e.progressLog;if(n.length>0){const r=n[n.length-1];return r.type==="work_item_started"?`Work item: ${r.summary}`:r.type==="tool_call"?r.summary:r.detail?r.detail.replace(/\s+/g," ").trim():r.summary}return"Idle"}function cC(e){return e==="done"?"✓":e==="failed"?"✗":e==="cancelled"?"—":null}function uC(e){return e==="done"?"awp-terminal-done":e==="failed"?"awp-terminal-failed":e==="cancelled"?"awp-terminal-cancelled":""}const YF={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},my={done:{cls:"awp-result-done",text:"Work item completed successfully"},failed:{cls:"awp-result-failed",text:"Work item failed"},cancelled:{cls:"awp-result-cancelled",text:"Work item cancelled"}},av={active:"Working",waiting:"Waiting",pending:"Pending",done:"Completed",failed:"Failed"},dC={active:0,waiting:1,pending:2,done:3,failed:4};function XF(e){if(e.runtimeStatus==="tool_active")return"Running tool…";if(e.runtimeStatus==="reflecting")return"Thinking…";const t=av[e.aggregatedStatus]??"Pending";return e.aggregatedStatus==="done"?`${t} · ${e.workItems.length} work item${e.workItems.length===1?"":"s"}`:t}function KF(e){if(e.workItems.length===0)return"—";const t=e.workItems.reduce((n,r)=>Math.max(n,r.updatedAt),0);return t?j0(t):"—"}function ZF(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function QF({sections:e,fallbackEntries:t,sessionStatus:n}){const r=(e??[]).filter(i=>(i.entries?.length??0)>0||!!i.runtimeTaskId);return r.length>0?u.jsx("div",{className:"wf-role-turn-activity-sections",children:r.map((i,o)=>{const a=i.entries??[],c=`${i.runtimeTaskId||i.kind}:${o}`;return u.jsxs("section",{className:"wf-role-turn-activity-section",children:[u.jsxs("div",{className:"wf-role-turn-activity-section-head",children:[u.jsx("span",{className:"wf-role-turn-activity-section-title",children:i.title}),i.roleName&&u.jsx("span",{className:"wf-role-turn-activity-section-role",children:i.roleName}),a.length>0&&u.jsx("span",{className:"wf-role-turn-activity-section-count",children:a.length})]}),a.length>0?u.jsx(Cl,{entries:a,sessionStatus:n,expandedByDefault:!0}):u.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"})]},c)})}):!t||t.length===0?u.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"}):u.jsx(Cl,{entries:t,sessionStatus:n,expandedByDefault:!0})}function JF({roleWorkItems:e,onOpenChildDetail:t,onOpenExecutionPanel:n}){const[r,i]=C.useState(null),[o,a]=C.useState(null),[c,d]=C.useState("all"),[m,h]=C.useState(""),[p,g]=C.useState(!1),x=C.useMemo(()=>Object.values(e),[e]),v=C.useMemo(()=>{let w=x.slice();if(c==="active"?w=w.filter(j=>j.aggregatedStatus==="active"):c==="idle"?w=w.filter(j=>j.aggregatedStatus==="done"||j.aggregatedStatus==="failed"):c==="pending"&&(w=w.filter(j=>j.aggregatedStatus==="pending"||j.aggregatedStatus==="waiting")),m.trim()){const j=m.toLowerCase();w=w.filter(N=>N.roleName.toLowerCase().includes(j)||N.roleId.toLowerCase().includes(j)||N.workItems.some(O=>O.title.toLowerCase().includes(j)))}return w.sort((j,N)=>{const O=dC[j.aggregatedStatus]??99,R=dC[N.aggregatedStatus]??99;return O!==R?O-R:j.roleName.localeCompare(N.roleName)}),w},[x,c,m]);C.useEffect(()=>{r&&!x.some(w=>w.roleKey===r)&&(i(null),a(null))},[x,r]);const k=x.filter(w=>w.aggregatedStatus==="active").length,S=r?e[r]??null:null,b=S&&o?S.workItems.find(w=>w.workItemId===o)??null:null;return x.length===0?null:u.jsxs("div",{className:"awp",children:[u.jsxs("div",{className:"awp-header",children:[u.jsxs("span",{className:"awp-title",children:["Agents",u.jsx("span",{className:"awp-count",children:k>0?`${k}/${x.length} active`:`${x.length}`})]}),u.jsxs("div",{className:"awp-controls",children:[u.jsxs("select",{className:"awp-filter",value:c,onChange:w=>d(w.target.value),children:[u.jsx("option",{value:"all",children:"All"}),u.jsx("option",{value:"active",children:"Active"}),u.jsx("option",{value:"idle",children:"Idle / Done"}),u.jsx("option",{value:"pending",children:"Pending"})]}),u.jsx("button",{className:`awp-search-toggle${p?" active":""}`,onClick:()=>g(w=>!w),title:"Search agents",children:u.jsx(Ov,{})})]})]}),p&&u.jsx("div",{className:"awp-search-bar",children:u.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents or work items...",value:m,onChange:w=>h(w.target.value),autoFocus:!0})}),u.jsxs("div",{className:"awp-list",children:[v.map(w=>{const j=r===w.roleKey,N=w.aggregatedStatus==="active",O=w.runtimeStatus==="reflecting"||w.runtimeStatus==="tool_active",R=w.aggregatedStatus==="done"||w.aggregatedStatus==="failed";return u.jsxs("button",{className:`awp-row${j?" awp-row-selected":""}${N?" awp-row-active":""}${R?` awp-row-terminal awp-terminal-${w.aggregatedStatus}`:""}`,onClick:()=>{i(L=>L===w.roleKey?null:w.roleKey),a(null)},title:`${w.roleName} — ${av[w.aggregatedStatus]}`,children:[u.jsx("span",{className:`awp-dot${O?" awp-dot-active":""} awp-dot-${w.aggregatedStatus}`}),u.jsxs("div",{className:"awp-row-info",children:[u.jsx("span",{className:"awp-row-name",children:w.roleName}),u.jsxs("span",{className:"awp-row-projection",children:[w.workItems.length," work item",w.workItems.length===1?"":"s"]})]}),u.jsx("span",{className:"awp-row-activity",children:XF(w)}),u.jsx("span",{className:"awp-row-time",children:KF(w)})]},w.roleKey)}),v.length===0&&u.jsx("div",{className:"awp-empty",children:m?"No matching agents":"No agents in this filter"})]}),S&&u.jsxs("div",{className:"awp-detail",children:[u.jsxs("div",{className:"awp-detail-header",children:[u.jsxs("div",{className:"awp-detail-identity",children:[u.jsx("div",{className:"awp-detail-avatar",children:S.roleName.charAt(0).toUpperCase()}),u.jsxs("div",{className:"awp-detail-meta",children:[u.jsx("span",{className:"awp-detail-name",children:S.roleName}),u.jsx("span",{className:"awp-detail-role",children:av[S.aggregatedStatus]})]})]}),u.jsx("div",{className:"awp-detail-actions",children:u.jsx("button",{className:"awp-detail-close",onClick:()=>{i(null),a(null)},title:"Close detail",children:u.jsx(Lm,{})})})]}),u.jsxs("div",{className:"awp-detail-body",children:[u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(yl,{}),u.jsx("span",{children:"Work items"})]}),u.jsx("ul",{className:"wf-role-turns",children:S.workItems.map(w=>{const j=o===w.workItemId,N=w.kanbanColumn==="in-progress"?"in_progress":w.kanbanColumn==="in-review"?"in_review":w.kanbanColumn;return u.jsxs("li",{className:`wf-role-turn${j?" wf-role-turn-expanded":""}`,children:[u.jsxs("button",{type:"button",className:"wf-role-turn-button",onClick:()=>a(O=>O===w.workItemId?null:w.workItemId),children:[u.jsx("span",{className:`wf-role-turn-column wf-role-turn-column-${N}`,children:w.kanbanColumn.replace("-"," ").replace(/^./,O=>O.toUpperCase())}),u.jsxs("span",{className:"wf-role-turn-title",children:[w.isReviewTarget&&u.jsx("span",{className:"wf-role-turn-tag",children:"Review"}),w.title]}),u.jsx("span",{className:"wf-role-turn-time",children:j0(w.updatedAt)}),u.jsx("span",{className:"wf-role-turn-chevron",children:u.jsx(ss,{down:j})})]}),j&&u.jsxs("div",{className:"wf-role-turn-activity",children:[u.jsx(QF,{sections:w.activitySections,fallbackEntries:w.progressLog,sessionStatus:ZF(w)}),w.executionTurnId&&u.jsx("button",{type:"button",className:"wf-role-turn-open-session",onClick:O=>{O.stopPropagation(),w.executionTurnId&&(n??t)?.(w.executionTurnId)},children:"Open runtime session"})]})]},w.workItemId)})})]}),b===null&&S.workItems.length===0&&u.jsx("div",{className:"awp-detail-empty",children:"No work items yet"})]})]})]})}function eV({sessions:e,agents:t,onOpenChildDetail:n,onOpenExecutionPanel:r}){const[i,o]=C.useState(null),[a,c]=C.useState("all"),[d,m]=C.useState(""),[h,p]=C.useState(!1);C.useEffect(()=>{i&&!e.some(b=>b.taskId===i)&&o(null)},[e,i]);const g=C.useMemo(()=>{let b=[...e];if(a==="active"?b=b.filter(os):a==="idle"?b=b.filter(w=>tl.has(w.status)||C0(w)==="idle"&&w.status!=="pending"):a==="pending"&&(b=b.filter(w=>w.status==="pending")),d.trim()){const w=d.toLowerCase();b=b.filter(j=>(j.assigneeIds[0]??j.title).toLowerCase().includes(w)||j.title.toLowerCase().includes(w))}return b.sort((w,j)=>lC(w)-lC(j)),b},[e,a,d]),x=e.filter(os).length,v=C.useMemo(()=>i?e.find(b=>b.taskId===i)??null:null,[e,i]),k=C.useMemo(()=>{if(!v)return;const b=v.assigneeIds[0];return b?t.find(w=>w.agent_id===b):void 0},[v,t]),S=C.useCallback(b=>{o(w=>w===b?(n?.(b),w):b)},[n]);return e.length===0?null:u.jsxs("div",{className:"awp",children:[u.jsxs("div",{className:"awp-header",children:[u.jsxs("span",{className:"awp-title",children:["Agents",u.jsx("span",{className:"awp-count",children:x>0?`${x}/${e.length} active`:`${e.length}`})]}),u.jsxs("div",{className:"awp-controls",children:[u.jsxs("select",{className:"awp-filter",value:a,onChange:b=>c(b.target.value),children:[u.jsx("option",{value:"all",children:"All"}),u.jsx("option",{value:"active",children:"Active"}),u.jsx("option",{value:"idle",children:"Idle / Done"}),u.jsx("option",{value:"pending",children:"Pending"})]}),u.jsx("button",{className:`awp-search-toggle${h?" active":""}`,onClick:()=>p(b=>!b),title:"Search agents",children:u.jsx(Ov,{})})]})]}),h&&u.jsx("div",{className:"awp-search-bar",children:u.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents...",value:d,onChange:b=>m(b.target.value),autoFocus:!0})}),u.jsxs("div",{className:"awp-list",children:[g.map(b=>{const w=os(b),j=tl.has(b.status),N=i===b.taskId,O=b.assigneeIds[0]?.replace(/_/g," ").replace(/\b\w/g,D=>D.toUpperCase())??b.title,R=b.workItemProjectionId?.replace(/_/g," ")??"",L=cC(b.status),I=uC(b.status);return u.jsxs("button",{className:`awp-row${N?" awp-row-selected":""}${w?" awp-row-active":""}${j?` awp-row-terminal ${I}`:""}`,onClick:()=>S(b.taskId),onDoubleClick:()=>n?.(b.taskId),title:n?"Click to inspect, click again or double-click to open full context":void 0,children:[L?u.jsx("span",{className:`awp-terminal-icon ${I}`,children:L}):u.jsx("span",{className:`awp-dot${w?" awp-dot-active":""}`}),u.jsxs("div",{className:"awp-row-info",children:[u.jsx("span",{className:"awp-row-name",children:O}),R&&u.jsx("span",{className:"awp-row-projection",children:R})]}),u.jsx("span",{className:"awp-row-activity",children:WF(b)}),u.jsx("span",{className:"awp-row-time",children:GF(b.progressLog)})]},b.taskId)}),g.length===0&&u.jsx("div",{className:"awp-empty",children:d?"No matching agents":"No agents in this filter"})]}),v&&u.jsxs("div",{className:"awp-detail",children:[u.jsxs("div",{className:"awp-detail-header",children:[u.jsxs("div",{className:"awp-detail-identity",children:[u.jsx("div",{className:`awp-detail-avatar${tl.has(v.status)?` ${uC(v.status)}`:""}`,children:(k?.name??v.assigneeIds[0]??"?").charAt(0).toUpperCase()}),u.jsxs("div",{className:"awp-detail-meta",children:[u.jsx("span",{className:"awp-detail-name",children:k?.name??v.assigneeIds[0]??v.title}),Sl(v)&&u.jsx("span",{className:"awp-detail-role",children:Sl(v)}),v.employeeAssignment?.name&&u.jsx("span",{className:"awp-detail-employee",children:v.employeeAssignment.name}),v.selectedExecutionAgent&&u.jsxs("span",{className:"awp-detail-employee",children:["Agent: ",YF[v.selectedExecutionAgent]??v.selectedExecutionAgent]}),v.workItemProjectionId&&u.jsx("span",{className:"awp-detail-projection",children:v.workItemProjectionId.replace(/_/g," ")})]})]}),u.jsxs("div",{className:"awp-detail-actions",children:[n&&u.jsx("button",{className:"awp-detail-expand",onClick:()=>n(v.taskId),title:"Open full context",children:u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[u.jsx("path",{d:"M2.5 3.25h9a1 1 0 011 1v5.5a1 1 0 01-1 1h-4l-2.75 2v-2h-2.25a1 1 0 01-1-1v-5.5a1 1 0 011-1Z",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),u.jsx("path",{d:"M4.5 5.5h5M4.5 7.5h3.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})}),r&&u.jsx("button",{className:"awp-detail-expand",onClick:()=>r(v.taskId),title:"Open execution panel",children:u.jsx(yl,{})}),u.jsx("button",{className:"awp-detail-close",onClick:()=>o(null),title:"Close detail",children:u.jsx(Lm,{})})]})]}),u.jsxs("div",{className:"awp-detail-body",children:[v.handoffContext&&u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(Gf,{}),u.jsx("span",{children:"Handoff"})]}),u.jsx("div",{className:"msg-content-agent-card",children:u.jsx(_r,{content:v.handoffContext,className:"awp-detail-handoff awp-detail-handoff-markdown"})})]}),u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(yl,{}),u.jsx("span",{children:"Activity"})]}),u.jsx(Cl,{entries:v.progressLog,agentStatus:v.agentStatus,currentTool:v.currentTool,toolElapsedMs:v.toolElapsedMs,lastToolSummary:v.lastToolSummary,sessionStatus:v.status,expandedByDefault:!0}),v.progressLog.length===0&&!v.agentStatus&&!tl.has(v.status)&&u.jsx("div",{className:"awp-detail-empty",children:"No activity recorded yet"})]}),tl.has(v.status)&&my[v.status]&&u.jsxs("div",{className:`awp-result-banner ${my[v.status].cls}`,children:[u.jsx("span",{className:"awp-result-icon",children:cC(v.status)}),u.jsx("span",{children:my[v.status].text})]})]})]})]})}function tV({sessions:e,roleWorkItems:t,isCompanyRuntime:n=!1,agents:r,onOpenChildDetail:i,onOpenExecutionPanel:o}){return t&&Object.keys(t).length>0?u.jsx(JF,{roleWorkItems:t,onOpenChildDetail:i,onOpenExecutionPanel:o}):n?null:u.jsx(eV,{sessions:e,agents:r,onOpenChildDetail:i,onOpenExecutionPanel:o})}function OI(e){try{return JSON.stringify(e,null,2)}catch{return String(e??"")}}function py(e){return(e??[]).map(t=>t.trim()).filter(Boolean)}function fC(e){return e?Object.entries(e).filter(([,t])=>t!=null&&t!==""&&t!==!1).map(([t,n])=>Array.isArray(n)?[t,n.join(", ")]:typeof n=="object"?[t,OI(n)]:[t,String(n)]):[]}function nV({task:e,linkedSession:t,linkedSessionMessages:n,agents:r,onBack:i,onOpenLinkedSession:o,onOpenExecutionPanel:a}){const c=C.useMemo(()=>e.assigneeIds.map(R=>r.find(L=>L.agent_id===R)).filter(Boolean),[r,e.assigneeIds]),d=e.priority?am[e.priority]:null,m=e.residentAssignment??{},h=e.memberSessionState??{},p=e.ownershipContract??{},g=!!(e.agentStatus&&e.agentStatus!=="idle"),x=py(e.deliverables),v=py(e.acceptanceCriteria),k=py(e.dependencies),S=fC({role_id:m.role_id,employee_id:m.employee_id,manager_role_id:m.manager_role_id,team_id:m.team_id,seat_id:m.seat_id,work_item_turn_type:m.work_item_turn_type,resident_status:m.resident_status}),b=fC({status:h.status,current_turn_mode:h.current_turn_mode,manager_role_id:h.manager_role_id,actionable_inbox_count:h.actionable_inbox_count,protocol_backlog_count:h.protocol_backlog_count,notification_backlog_count:h.notification_backlog_count}),w=String(e.employeeAssignment?.promptContext??"").trim(),j=String(e.employeeAssignment?.deltaContext??"").trim(),N=qm(e),O=!!(e.workItemId||e.workItemProjectionId||N);return u.jsxs("div",{className:"ctx-child-detail",children:[u.jsxs("div",{className:"ctx-child-topbar",children:[u.jsxs("button",{className:"ctx-back-btn",onClick:i,children:["←"," Back to board"]}),N&&(o||a)&&u.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>{if(o){o(N);return}a?.(N)},children:"Open Runtime Session"})]}),u.jsxs("div",{className:"ctx-child-header",children:[u.jsx("div",{className:"ctx-child-avatar",children:(e.workItemRoleName??e.title).charAt(0).toUpperCase()}),u.jsxs("div",{className:"ctx-child-meta",children:[u.jsx("span",{className:"ctx-child-name",children:e.title}),u.jsx("span",{className:"ctx-child-work-item",children:[e.workItemRoleName,e.phase].filter(Boolean).join(" · ")})]})]}),g&&u.jsxs("div",{className:`task-detail-runtime status-${e.agentStatus}`,children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:lm[e.agentStatus]??e.agentStatus}),c.length>0&&u.jsx("span",{className:"task-detail-runtime-agent",children:c.map(R=>R.name).join(", ")})]}),u.jsxs("div",{className:"task-detail-body",children:[u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:O?"Work Item":"Task"}),u.jsxs("div",{className:"ctx-task-chip-row",children:[u.jsx("span",{className:"task-detail-dep-id",children:e.displayId}),d&&u.jsx("span",{className:"kanban-tag",children:d.label}),e.workItemRoleName&&u.jsx("span",{className:"kanban-tag",children:e.workItemRoleName}),e.managerRoleId&&u.jsxs("span",{className:"kanban-tag",children:["Manager: ",e.managerRoleId]}),e.scopeKey&&u.jsx("span",{className:"kanban-tag",children:e.scopeKey})]}),e.description&&u.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:u.jsx(_r,{content:e.description})})]}),e.originalMessage&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Session Goal"}),u.jsx("pre",{className:"task-detail-handoff",children:e.originalMessage})]}),e.planningContext&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Planning Context"}),u.jsx("pre",{className:"task-detail-handoff",children:e.planningContext})]}),x.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Deliverables"}),u.jsx("ul",{className:"task-detail-dep-list",children:x.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:R},R))})]}),v.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Acceptance Criteria"}),u.jsx("ul",{className:"task-detail-dep-list",children:v.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:R},R))})]}),(e.delegationRationale||e.nonOverlapGuard||e.coordinationNotes)&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Delegation Notes"}),e.delegationRationale&&u.jsx("pre",{className:"task-detail-handoff",children:e.delegationRationale}),e.nonOverlapGuard&&u.jsx("pre",{className:"task-detail-handoff",children:e.nonOverlapGuard}),e.coordinationNotes&&u.jsx("pre",{className:"task-detail-handoff",children:e.coordinationNotes})]}),k.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Dependencies"}),u.jsx("ul",{className:"task-detail-dep-list",children:k.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:u.jsx("span",{className:"task-detail-dep-id",children:R})},R))})]}),(S.length>0||b.length>0||t)&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Runtime Context"}),t&&u.jsxs("div",{className:"ctx-task-chip-row",children:[u.jsxs("span",{className:"kanban-tag",children:["Runtime Session: ",t.title]}),u.jsxs("span",{className:"kanban-tag",children:["Status: ",t.status]})]}),S.length>0&&u.jsx("div",{className:"ctx-task-kv-grid",children:S.map(([R,L])=>u.jsxs("div",{className:"ctx-task-kv-item",children:[u.jsx("span",{className:"ctx-task-kv-label",children:R}),u.jsx("span",{className:"ctx-task-kv-value",children:L})]},R))}),b.length>0&&u.jsx("div",{className:"ctx-task-kv-grid",children:b.map(([R,L])=>u.jsxs("div",{className:"ctx-task-kv-item",children:[u.jsx("span",{className:"ctx-task-kv-label",children:R}),u.jsx("span",{className:"ctx-task-kv-value",children:L})]},R))})]}),e.handoffContext&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Handoff Context"}),u.jsx("pre",{className:"task-detail-handoff",children:e.handoffContext})]}),w&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Prompt Context"}),u.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:u.jsx(_r,{content:w})})]}),j&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Delta Context"}),u.jsx("pre",{className:"task-detail-handoff",children:j})]}),Object.keys(p).length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Ownership Contract"}),u.jsx("pre",{className:"task-detail-handoff",children:OI(p)})]}),e.progressLog&&e.progressLog.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Activity"}),u.jsx("ul",{className:"task-detail-progress",children:e.progressLog.map((R,L)=>u.jsxs("li",{className:`progress-entry type-${R.type}`,children:[u.jsx("span",{className:"progress-time",children:new Date(R.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),u.jsx("span",{className:"progress-summary",children:R.summary})]},`${R.timestamp}-${L}`))})]}),u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Runtime Session Activity"}),t&&n&&n.length>0?u.jsx("div",{className:"task-detail-linked-messages",children:u.jsx(rl,{messages:n,channelName:t.title??"Runtime Session",detailMode:"summary",scrollScope:t.channelId},t.channelId)}):t?u.jsx("p",{className:"task-detail-empty-hint",children:"Runtime session has no visible messages yet."}):u.jsx("p",{className:"task-detail-empty-hint",children:"No Runtime Session linked yet."})]})]})]})}function rV(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m`:t<864e5?`${Math.floor(t/36e5)}h`:`${Math.floor(t/864e5)}d`}function iV(e,t){if(t>1)return`${t} agents working`;const n=e.displayTool||e.currentTool;return n?`Running ${n}`:e.agentStatus==="reflecting"?"Thinking...":e.status==="running"?"Running":null}function sV(e){if(!(!e||Object.keys(e).length===0))return Object.values(e).filter(t=>t.aggregatedStatus==="active").length}function oV(e){return new Set(e.filter(os).map(n=>String(n.workItemRoleId??n.assigneeIds[0]??n.taskId).trim()).filter(Boolean)).size}function mC(e,t){const n=sV(e);return n!==void 0?n||void 0:oV(t)||void 0}function aV(e){const t=lv(e);return t==="org"||t==="custom"?`company/${e.orgId??"org"}`:t==="company"?`company/${e.companyProfile??"corporate"}`:t}function LI(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function zI(e){return!!(e.isCompanyRuntime||e.parentSessionId||e.workItemProjectionId||e.roleWorkItems||e.executorRoleWorkItems)}function pC(e,t=0){if(!e)return!1;const n=String(e.execMode??"").trim().toLowerCase();return t>0||zI(e)||n==="company"||n==="org"||n==="custom"}function eu(e,t){const n=t==="full"?e.fullHasMore:e.summaryHasMore;if(n!==void 0)return n;if(e.summaryHasMore===void 0&&e.fullHasMore===void 0)return e.hasMore}function hy(e,t,n,r=!0){const i=e.map(o=>eu(o,n));return i.some(o=>o===!0)?!0:e.length!==1||i[0]===!1?!1:r&&e[0].messageCount>t}function lV(e){const t=String(e.execMode??"").trim().toLowerCase(),n=LI(e.execMode),r=String(e.companyProfile??"").trim().toLowerCase();return n==="company"?!1:n==="org"?!0:t?!1:r==="custom"||!!e.orgId}function gy(e,t=0){if(!e)return t>0;if(Math.max(e.messageCount??0,t)>0)return!0;const r=String(e.status??"").trim().toLowerCase();return!!(r&&r!=="pending"||e.parentSessionId||e.workItemProjectionId||e.workItemRoleId||e.workItemTurnType||e.pendingRuntimeCheckpointId||e.runtimeControlState&&e.runtimeControlState!=="idle"||(e.progressLog?.length??0)>0||(e.workItemLog?.length??0)>0||e.roleWorkItems&&Object.keys(e.roleWorkItems).length>0||e.executorRoleWorkItems&&Object.keys(e.executorRoleWorkItems).length>0)}function lv(e,t){const r=String(e.execMode??"").trim().toLowerCase().length>0,i=LI(e.execMode);return lV(e)?"org":!r&&i==="task"&&zI(e)?"company":e.execMode??t??"task"}function hC(e,t,n){return t&&e.selectedExecutionAgent&&e.selectedExecutionAgent!=="native"?e.selectedExecutionAgent:e.preferredAgent??e.selectedExecutionAgent??n}function Wc(e,t){return e?e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}const cV=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]);function gC(e){const t=String(e.status??"").trim(),n=e.runtimeControlState==="suspended"||!cV.has(t)&&t!=="running"&&t!=="done";return!!(e.canResume??n)}function uV({task:e,agents:t,roleLabel:n}){const[r,i]=C.useState(!1),o=e.priority,a=o&&e.priority in am?am[o]:null,c=e.assigneeIds.map(p=>t.find(g=>g.agent_id===p)?.name??p).filter(Boolean),d=new Date(e.createdAt),m=e.employeeAssignment?.name?`${e.employeeAssignment.name}${e.employeeAssignment.category?` · ${e.employeeAssignment.category}`:""}`:null,h=({label:p,value:g})=>u.jsxs("div",{className:"ctx-info-fact",children:[u.jsx("span",{className:"ctx-info-fact-label",children:p}),u.jsx("span",{className:"ctx-info-fact-value",children:g})]});return u.jsxs("div",{className:"ctx-info-v2",children:[u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"Status"}),u.jsxs("div",{className:"ctx-info-card",children:[u.jsxs("div",{className:"ctx-info-status-row",children:[u.jsxs("span",{className:`ctx-info-status-pill status-${e.status}`,children:[u.jsx("span",{className:"ctx-info-status-dot"}),e.status]}),a&&u.jsxs("span",{className:"ctx-info-priority-pill",style:{color:a.color},children:[u.jsx("span",{"aria-hidden":"true",children:a.symbol}),a.label]})]}),e.tags&&e.tags.length>0&&u.jsx("div",{className:"ctx-info-chips",children:e.tags.map(p=>u.jsx("span",{className:"ctx-info-chip",children:p},p))})]})]}),u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"People & agent"}),u.jsxs("div",{className:"ctx-info-card",children:[c.length>0&&u.jsx(h,{label:"Assignees",value:u.jsx("div",{className:"ctx-info-chips",children:c.map(p=>u.jsx("span",{className:"ctx-info-chip",children:p},p))})}),n&&u.jsx(h,{label:"Role",value:n}),m&&u.jsx(h,{label:"Employee",value:m}),e.selectedExecutionAgent&&u.jsx(h,{label:"Execution agent",value:u.jsx("span",{className:"ctx-info-mono",children:e.selectedExecutionAgent})})]})]}),u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"Timing"}),u.jsx("div",{className:"ctx-info-card",children:u.jsx(h,{label:"Created",value:u.jsx("span",{children:d.toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})})})]}),u.jsxs("section",{className:"ctx-info-section ctx-info-dev-section",children:[u.jsxs("button",{className:`ctx-info-dev-toggle${r?" expanded":""}`,type:"button",onClick:()=>i(p=>!p),"aria-expanded":r,children:[u.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",children:u.jsx("path",{d:r?"M3 6l5 5 5-5":"M6 3l5 5-5 5",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})}),u.jsx("span",{children:"Developer details"})]}),r&&u.jsxs("div",{className:"ctx-info-card ctx-info-dev-card",children:[e.workItemProjectionId&&u.jsx(h,{label:"Projection",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.workItemProjectionId})}),u.jsx(h,{label:"Task ID",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.taskId})}),u.jsx(h,{label:"Channel",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.channelId})}),e.sessionId&&u.jsx(h,{label:"Session",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.sessionId})})]})]})]})}function dV({panelState:e,width:t,onResizeMouseDown:n,isResizing:r,activeView:i,activeSession:o,activeTask:a,linkedTaskSession:c,linkedTaskSessionMessages:d,childDetailSession:m,messages:h,childDetailMessages:p,allSessions:g,openSessions:x,openSessionMessages:v,openSessionChildren:k,agents:S,childSessions:b,execMode:w,taskPreferredAgent:j,savedOrgsList:N,activeSavedOrg:O,onSavedOrgsList:R,onSavedOrgLoad:L,canShowAgentsTab:I=!1,channelId:D,channelName:M,secretaryChannelId:A,unreadCounts:$,multiSessionView:W=!1,panelTab:B,onPanelTabChange:V,commsState:H,commsMessage:U,onCommsRefresh:Y,onCommsReadMessage:Q,orgInfoData:q,recoveryStatus:G,canShowTeamTab:J=!1,onTeamStopRun:P,onTitleChange:K,onSessionConfigChange:ee,onSessionTaskAgentChange:te,onContinueInNewChat:ie,onStop:se,onComplete:de,onResume:oe,onResumeTask:Ne,onStopTask:Ee,onCompleteTask:Ie,onLocateOnBoard:Be,onBackToParent:Ge,onCloseTaskDetail:Ue,onOpenChildDetail:at,onOpenExecutionPanel:Pt,onSelectSessionTab:wt,onCloseSessionTab:Ct,onToggleMultiSessionView:pe,onCollapse:$e,onExpand:et,onMaximize:tt,onComposerSend:pt,onMessageSend:me,onSessionSend:be,onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:He,onSessionMarkRead:jt,onLoadSessionHistory:an,isSessionHistoryLoading:ke}){const Oe=i.kind==="secretary",We=i.kind==="activity",Ze=i.kind==="child-detail",qe=i.kind==="task-detail",ut=pC(o,b.length),Yt=i.kind==="session"&&o,Nn=Oe?!0:!!o,ln=!Ze&&x.length>0,Ln=x.length>1,lt=!!(W&&i.kind==="session"&&o&&Ln&&B==="chat"),In=C.useRef(null),Et=C.useMemo(()=>{const Re=Xf(o,g);return Kf(o,[...Re,...b])},[o,b,g]),Dt=Et.displaySession??o,Ye=Wc(Dt),nt=C.useMemo(()=>cS(o,Et.runtimeSession,Et.timelineSessions),[o,Et.runtimeSession,Et.timelineSessions]),Qt=C.useMemo(()=>Z4(o,Et.runtimeSession,Et.timelineSessions),[o,Et.runtimeSession,Et.timelineSessions]),_n=C.useMemo(()=>dS(Et.timelineSessions),[Et.timelineSessions]),Tt=C.useMemo(()=>nt?.workItemLog??o?.workItemLog??[],[nt?.workItemLog,o?.workItemLog]),er=C.useMemo(()=>oS(nt??o,g),[nt,o,g]),Tn=C.useMemo(()=>nt?.roleWorkItems??o?.roleWorkItems,[nt?.roleWorkItems,o?.roleWorkItems]),ht=C.useMemo(()=>nt?.executorRoleWorkItems??o?.executorRoleWorkItems,[nt?.executorRoleWorkItems,o?.executorRoleWorkItems]),tr=!!(Tn&&Object.keys(Tn).length>0||ht&&Object.keys(ht).length>0),mn=er.length>0?er:b,cn=C.useMemo(()=>Zf(Et.timelineSessions),[Et.timelineSessions]),Fn=C.useMemo(()=>Et.timelineSessions.some(Re=>ke?.(Re.taskId)??!1),[Et.timelineSessions,ke]),Jt=C.useCallback(Re=>{if(Re){const Cn=Et.timelineSessions.find(vr=>vr.channelId===Re.channelId);if(Cn&&eu(Cn,Ye)!==!1)return Cn}const bt=Et.timelineSessions.find(Cn=>eu(Cn,Ye)===!0);return bt||(Dt??o)},[Et.timelineSessions,Ye,Dt,o]),Vt=C.useMemo(()=>{if(!m)return;const Re=m.assigneeIds[0];return Re?S.find(bt=>bt.agent_id===Re):void 0},[m,S]),Vn=c??(()=>{const Re=qm(a);return Re?g.find(bt=>bt.taskId===Re||bt.runtimeTaskId===Re||bt.executionTurnId===Re)??null:null})();C.useEffect(()=>{!Ze||!m||In.current?.scrollTo({top:0,behavior:"auto"})},[Ze,m?.taskId]);const Un=o;return e==="collapsed"?u.jsx("div",{className:"ctx-collapse-strip",onClick:()=>et(),title:"Open panel",children:"◀"}):u.jsxs(u.Fragment,{children:[u.jsx("div",{className:`ctx-resize-handle${r?" active":""}`,onMouseDown:n}),u.jsx("div",{className:`ctx-panel${e==="maximized"?" maximized":""}`,style:e!=="maximized"?{width:t}:void 0,children:qe&&a?u.jsx(nV,{task:a,linkedSession:Vn,linkedSessionMessages:d,agents:S,onBack:Ue??$e,onOpenLinkedSession:wt,onOpenExecutionPanel:Pt}):Ze&&m?u.jsxs("div",{className:"ctx-child-detail",ref:In,children:[u.jsxs("div",{className:"ctx-child-topbar",children:[u.jsx("button",{className:"ctx-back-btn",onClick:Ge,children:"← Back to parent"}),(m.canStop??m.status==="running")&&m.runtimeControlState!=="suspending"&&Ee&&u.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>Ee(m.taskId),title:"Stop this agent",children:"Stop"}),m.runtimeControlState==="suspending"&&u.jsx("button",{className:"ctx-child-stop-btn",disabled:!0,title:"Stopping this agent",children:"Stopping..."}),gC(m)&&Ne&&u.jsx("button",{className:"ctx-child-resume-btn",onClick:()=>Ne(m.taskId),title:"Continue this agent's runtime",children:"Continue"})]}),u.jsxs("div",{className:"ctx-child-header",children:[Vt&&u.jsx("div",{className:"ctx-child-avatar",children:Vt.name.charAt(0).toUpperCase()}),u.jsxs("div",{className:"ctx-child-meta",children:[u.jsx("span",{className:"ctx-child-name",children:Vt?.name??m.title}),m.workItemRoleName&&u.jsx("span",{className:"ctx-child-work-item",children:m.workItemRoleName}),!m.workItemRoleName&&m.workItemProjectionId&&u.jsx("span",{className:"ctx-child-work-item",children:m.workItemProjectionId.replace(/_/g," ")})]})]}),m.handoffContext&&u.jsxs("div",{className:"exec-section ctx-child-markdown-section",children:[u.jsxs("div",{className:"exec-section-header",children:[u.jsx(Gf,{}),u.jsx("span",{children:"Received From"})]}),u.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:u.jsx(_r,{content:m.handoffContext})})]}),u.jsxs("div",{className:"ctx-child-transcript",children:[u.jsxs("div",{className:"ctx-child-transcript-header",children:[u.jsx(yl,{}),u.jsx("span",{children:"Transcript"})]}),u.jsx(rl,{messages:p,channelName:m.title,viewKind:"session",detailMode:"full",agentStatus:m.agentStatus,currentTool:m.currentTool,toolElapsedMs:m.toolElapsedMs,lastToolSummary:m.lastToolSummary,progressLog:m.progressLog,draftAssistantText:m.draftAssistantText,draftUpdatedAt:m.draftUpdatedAt,draftIteration:m.draftIteration,draftTurnId:m.draftTurnId,onMarkRead:He,hasOlderHistory:hy([m],p.length,"full",!os(m)),totalMessageCount:m.messageCount,onLoadOlderHistory:Re=>an?.(m.taskId,Re,"full"),loadingOlderHistory:ke?.(m.taskId)??!1,scrollPolicy:"initial-bottom",scrollScope:m.channelId,showRuntimeProgress:!0,renderUserMarkdown:!0},m.channelId)]}),m.artifacts&&m.artifacts.length>0&&u.jsxs("div",{className:"ctx-child-artifacts",children:[u.jsxs("div",{className:"ctx-child-section-header",children:[u.jsx(Mm,{}),u.jsx("span",{children:"Artifacts"})]}),u.jsx("ul",{className:"ctx-child-artifact-list",children:m.artifacts.map((Re,bt)=>u.jsx("li",{children:Re},bt))})]}),m.handoffTo&&u.jsxs("div",{className:"ctx-child-markdown-section ctx-child-passed-to",children:[u.jsxs("div",{className:"ctx-child-section-header",children:[u.jsx(Gf,{}),u.jsx("span",{children:"Passed To"})]}),u.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:u.jsx(_r,{content:m.handoffTo})})]})]}):u.jsxs(u.Fragment,{children:[ln&&u.jsxs("div",{className:"ctx-session-strip",children:[u.jsx("div",{className:"ctx-session-strip-scroll",children:x.map(Re=>{const bt=$?.[Re.channelId]??0,Cn=o?.taskId===Re.taskId;return u.jsxs("div",{className:`ctx-session-chip${Cn?" active":""}`,children:[u.jsxs("button",{className:"ctx-session-chip-main",onClick:()=>wt?.(Re.taskId),title:Re.title,children:[u.jsx("span",{className:`ctx-session-chip-status status-${Re.status}`}),u.jsx("span",{className:"ctx-session-chip-title",children:Re.title}),bt>0&&u.jsx("span",{className:"ctx-session-chip-unread",children:bt>99?"99+":bt})]}),u.jsx("button",{className:"ctx-session-chip-close",onClick:()=>Ct?.(Re.taskId),title:"Close tab",children:"×"})]},Re.taskId)})}),Ln&&u.jsx("button",{className:`ctx-session-view-btn${W?" active":""}`,onClick:pe,children:W?"Single View":"Multi View"})]}),u.jsxs("div",{className:"ctx-header",children:[lt?u.jsx("span",{className:"ctx-header-title",children:ut?"Open Runtime Sessions":"Open Sessions"}):Yt?u.jsxs("div",{className:"ctx-header-tabs",role:"tablist","aria-label":"Session view",children:[u.jsx("button",{role:"tab","aria-selected":B==="chat",className:`ctx-tab${B==="chat"?" active":""}`,onClick:()=>V("chat"),children:"Chat"}),I&&u.jsx("button",{role:"tab","aria-selected":B==="agents",className:`ctx-tab${B==="agents"?" active":""}`,onClick:()=>V("agents"),children:"Agents"}),u.jsx("button",{role:"tab","aria-selected":B==="info",className:`ctx-tab${B==="info"?" active":""}`,onClick:()=>V("info"),children:"Info"}),Y&&u.jsx("button",{role:"tab","aria-selected":B==="comms",className:`ctx-tab${B==="comms"?" active":""}`,onClick:()=>V("comms"),children:"Comms"}),J&&u.jsx("button",{role:"tab","aria-selected":B==="team",className:`ctx-tab${B==="team"?" active":""}`,onClick:()=>V("team"),children:"Team"})]}):Oe?u.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Secretary"}):u.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Activity"}),u.jsxs("div",{className:"ctx-header-actions",children:[e==="open"&&u.jsx("button",{onClick:tt,title:"Maximize",children:u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:u.jsx("rect",{x:"2",y:"2",width:"10",height:"10",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"})})}),e==="maximized"&&u.jsx("button",{onClick:et,title:"Restore",children:u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:[u.jsx("rect",{x:"1",y:"3",width:"8",height:"8",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("path",{d:"M5 3V1.5A.5.5 0 015.5 1H12.5a.5.5 0 01.5.5V8.5a.5.5 0 01-.5.5H11",stroke:"currentColor",strokeWidth:"1.3"})]})}),u.jsx("button",{onClick:$e,title:"Close panel",children:u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:u.jsx("path",{d:"M3 3l8 8M11 3l-8 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})})]})]}),u.jsxs("div",{className:"ctx-body",children:[!o&&!Oe&&!We&&u.jsxs("div",{className:"ctx-empty",children:[u.jsx("span",{className:"ctx-empty-icon",children:"📋"}),u.jsx("span",{children:ut?"Select a Work Item to see details":"Select a task to see details"})]}),lt&&u.jsx("div",{className:"ctx-multi-grid",children:x.map(Re=>{const bt=v[Re.taskId]??[],Cn=k[Re.taskId]??[],vr=Xf(Re,g),Mn=Kf(Re,[...vr,...Cn]),_t=cS(Re,Mn.runtimeSession,Mn.timelineSessions),wr=oS(_t??Re,g),fr=_t?.roleWorkItems??Re.roleWorkItems,Xt=mC(fr,Cn)??0,Ut=Re.assigneeIds.map(xn=>S.find(Kt=>Kt.agent_id===xn)?.name??xn).filter(Boolean),hn=iV(_t??Re,Xt),qn=pC(Re,Cn.length),gt=Mn.displaySession??Re,Gn=dS(Mn.timelineSessions),mr=Zf(Mn.timelineSessions),Rn=gy(_t??gt,Math.max(mr,bt.length)),Je=Mn.timelineSessions.some(xn=>ke?.(xn.taskId)??!1);return u.jsxs("section",{className:`ctx-multi-card${o?.taskId===Re.taskId?" focused":""}`,children:[u.jsxs("div",{className:"ctx-multi-card-header",children:[u.jsxs("button",{className:"ctx-multi-card-main",onClick:()=>wt?.(Re.taskId),title:"Focus session",children:[u.jsx("span",{className:`ctx-multi-card-status status-${Re.status}`}),u.jsx("span",{className:"ctx-multi-card-title",children:Re.title})]}),u.jsxs("div",{className:"ctx-multi-card-actions",children:[((_t??Re).canStop??(_t??Re).status==="running")&&(_t??Re).runtimeControlState!=="suspending"&&Ee&&u.jsx("button",{onClick:()=>Ee(Mn.runtimeSession?.taskId??Re.taskId),children:"Stop"}),(_t??Re).runtimeControlState==="suspending"&&u.jsx("button",{disabled:!0,children:"Stopping..."}),gC(_t??Re)&&Ne&&u.jsx("button",{onClick:()=>Ne(Re.taskId),children:"Continue"}),(_t??Re).status!=="done"&&(_t??Re).status!=="cancelled"&&Ie&&u.jsx("button",{onClick:()=>Ie(Re.taskId),children:"Done"}),u.jsx("button",{onClick:()=>wt?.(Re.taskId),children:"Focus"}),u.jsx("button",{onClick:()=>Ct?.(Re.taskId),title:"Close tab",children:"×"})]})]}),u.jsxs("div",{className:"ctx-multi-card-meta",children:[u.jsx("span",{children:aV(Re)}),u.jsx("span",{children:Re.status}),hn&&u.jsx("span",{children:hn}),Ut.length>0&&u.jsx("span",{children:Ut.join(", ")}),u.jsx("span",{children:rV(Re.updatedAt)})]}),u.jsx("div",{className:"ctx-multi-card-body",children:u.jsx(rl,{messages:bt,channelName:gt?.title??Re.title,viewKind:"session",detailMode:Wc(gt),agentStatus:qn?void 0:_t?.agentStatus??gt?.agentStatus,currentTool:qn?void 0:_t?.currentTool??gt?.currentTool,toolElapsedMs:qn?void 0:_t?.toolElapsedMs??gt?.toolElapsedMs,lastToolSummary:qn?void 0:_t?.lastToolSummary??gt?.lastToolSummary,progressLog:qn?void 0:Gn,draftAssistantText:qn?void 0:_t?.draftAssistantText??gt?.draftAssistantText,draftUpdatedAt:qn?void 0:_t?.draftUpdatedAt??gt?.draftUpdatedAt,draftIteration:qn?void 0:_t?.draftIteration??gt?.draftIteration,draftTurnId:qn?void 0:_t?.draftTurnId??gt?.draftTurnId,isCompanyRuntime:qn,workItemLog:_t?.workItemLog??Re.workItemLog,childSessions:wr,showWorkItemRuntimeCard:!qn,onSend:(xn,Kt,kt)=>be?.(Re.taskId,xn,void 0,kt),onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:()=>jt?.(Re.taskId),scrollScope:Re.channelId,hasOlderHistory:hy(Mn.timelineSessions,bt.length,Wc(gt??Re),!Mn.timelineSessions.some(os)),totalMessageCount:mr,onLoadOlderHistory:xn=>{const Kt=Wc(gt??Re),kt=Mn.timelineSessions.find(gn=>gn.channelId===xn?.channelId),Wn=(kt&&eu(kt,Kt)!==!1?kt:void 0)??Mn.timelineSessions.find(gn=>eu(gn,Kt)===!0)??gt??Re;return an?.(Wn.taskId,xn,Kt)},loadingOlderHistory:Je,showRuntimeProgress:Wc(gt)==="full"},gt?.channelId??Re.channelId)}),u.jsx(fy,{disabled:!1,channelId:_t?.channelId??Re.channelId,execMode:lv(Re,w),companyProfile:Re.companyProfile,taskPreferredAgent:hC(Re,Rn,j),agentStatus:_t?.agentStatus??gt?.agentStatus,currentTool:_t?.currentTool??gt?.currentTool,displayTool:_t?.displayTool??gt?.displayTool,activeAgentCount:Xt||void 0,runtimeControlState:(_t??gt)?.runtimeControlState,canStop:(_t??gt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:Re.orgId??O??null,lockedMode:Rn,autoFocus:!1,contextTokens:_t?.contextTokens??gt?.contextTokens,contextWindow:_t?.contextWindow??gt?.contextWindow,contextRemainingPct:_t?.contextRemainingPct??gt?.contextRemainingPct??100,onSend:(xn,Kt)=>be?.(Re.taskId,xn,Kt,lE(zv(bt).latestPendingReplyMetadata)),onModeChange:(xn,Kt,kt)=>ee?.(Re.taskId,xn,Kt,kt),onTaskAgentChange:xn=>te?.(Re.taskId,xn),onContinueInNewChat:ie,onSavedOrgsRefresh:R,onSavedOrgLoad:L,onStop:()=>Ee?.(Mn.runtimeSession?.taskId??Re.taskId)})]},Re.taskId)})}),We&&u.jsxs(u.Fragment,{children:[u.jsx("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-secondary)",borderBottom:"1px solid var(--border)"},children:"Recent activity across all sessions"}),u.jsx(rl,{messages:h,channelName:"Activity",viewKind:"activity",detailMode:"summary",onSend:me,onMarkRead:He,scrollScope:D},D)]}),Oe&&u.jsxs(u.Fragment,{children:[u.jsx(rl,{messages:h,channelName:"Secretary",viewKind:"secretary",detailMode:"summary",onSend:me,onMarkRead:He,scrollScope:A},A),u.jsx(fy,{disabled:!1,channelId:A,placeholder:"Talk to Secretary about policies, rules, preferences...",onSend:pt})]}),o&&!Oe&&!We&&!lt&&B==="chat"&&u.jsxs(u.Fragment,{children:[u.jsx(X8,{session:Qt??o,agents:S,onTitleChange:K,onViewOnBoard:Be?()=>Be(o.taskId):void 0,onStop:se,onComplete:(Qt??o).status!=="done"&&(Qt??o).status!=="cancelled"?de:void 0,onResume:oe}),ut&&u.jsx("div",{className:"ctx-work-item-progress",children:u.jsx(TI,{workItemLog:Tt,roleWorkItems:Tn,executorRoleWorkItems:ht,childSessions:er,isCompanyRuntime:ut,onWorkItemClick:Me})}),u.jsx(rl,{messages:h,channelName:M,viewKind:"session",detailMode:Ye,agentStatus:ut?void 0:nt?.agentStatus??Dt?.agentStatus,currentTool:ut?void 0:nt?.currentTool??Dt?.currentTool,toolElapsedMs:ut?void 0:nt?.toolElapsedMs??Dt?.toolElapsedMs,lastToolSummary:ut?void 0:nt?.lastToolSummary??Dt?.lastToolSummary,progressLog:ut?void 0:_n,draftAssistantText:ut?void 0:nt?.draftAssistantText??Dt?.draftAssistantText,draftUpdatedAt:ut?void 0:nt?.draftUpdatedAt??Dt?.draftUpdatedAt,draftIteration:ut?void 0:nt?.draftIteration??Dt?.draftIteration,draftTurnId:ut?void 0:nt?.draftTurnId??Dt?.draftTurnId,isCompanyRuntime:ut,workItemLog:Tt,roleWorkItems:Tn,executorRoleWorkItems:ht,childSessions:er,onSend:me,onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:He,scrollScope:D,hasOlderHistory:hy(Et.timelineSessions,h.length,Ye,!Et.timelineSessions.some(os)),totalMessageCount:cn,onLoadOlderHistory:Re=>{const bt=Jt(Re);if(bt)return an?.(bt.taskId,Re,Ye)},loadingOlderHistory:Fn,showWorkItemRuntimeCard:!1,showRuntimeProgress:Ye==="full"},D),u.jsx(fy,{disabled:!Nn,channelId:nt?.channelId??D,execMode:lv(o,w),companyProfile:o.companyProfile,taskPreferredAgent:hC(o,gy(nt??Dt??o,Math.max(cn,h.length)),j),agentStatus:nt?.agentStatus??Dt?.agentStatus,currentTool:nt?.currentTool??Dt?.currentTool,displayTool:nt?.displayTool??Dt?.displayTool,runtimeControlState:(nt??Dt)?.runtimeControlState,canStop:(nt??Dt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:o.orgId??O??null,lockedMode:gy(nt??Dt??o,Math.max(cn,h.length)),activeAgentCount:mC(Tn,mn),contextTokens:nt?.contextTokens??Dt?.contextTokens,contextWindow:nt?.contextWindow??Dt?.contextWindow,contextRemainingPct:nt?.contextRemainingPct??Dt?.contextRemainingPct??100,onSend:pt,onModeChange:(Re,bt,Cn)=>ee?.(o.taskId,Re,bt,Cn),onTaskAgentChange:Re=>te?.(o.taskId,Re),onContinueInNewChat:ie,onSavedOrgsRefresh:R,onSavedOrgLoad:L,onStop:se})]}),o&&!Oe&&!lt&&B==="agents"&&I&&(mn.length>0||tr?u.jsx(tV,{sessions:mn,roleWorkItems:Tn,isCompanyRuntime:ut,agents:S,onOpenChildDetail:at,onOpenExecutionPanel:Pt}):u.jsxs("div",{className:"ctx-empty",children:[u.jsx("span",{className:"ctx-empty-icon",children:"🧠"}),u.jsx("span",{children:"No child agents have started for this session yet"})]})),o&&!Oe&&!lt&&B==="info"&&Un&&u.jsx(uV,{task:Un,agents:S,roleLabel:Sl(Un)}),B==="comms"&&Y&&Q&&u.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:u.jsx(H8,{state:H??null,message:U??null,onRefresh:Y,onReadMessage:Q,embedded:!0})}),B==="team"&&J&&u.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:u.jsx(G8,{orgInfoData:q??null,recoveryStatus:G??null,commsState:H??null,onStopRun:P,embedded:!0})})]})]})})]})}function fV({initialWidth:e,minWidth:t,maxWidth:n,onCollapse:r}){const[i,o]=C.useState(e),[a,c]=C.useState(!1),d=C.useRef(0),m=C.useRef(0),h=C.useRef(e);h.current=i;const p=C.useCallback(g=>{g.preventDefault(),d.current=g.clientX,m.current=h.current,c(!0)},[]);return C.useEffect(()=>{if(!a)return;const g=v=>{const k=d.current-v.clientX,S=m.current+k;if(S<t-50){r?.(),c(!1);return}o(Math.min(n,Math.max(t,S)))},x=()=>{c(!1)};return document.body.style.userSelect="none",document.body.style.cursor="col-resize",document.addEventListener("mousemove",g),document.addEventListener("mouseup",x),()=>{document.body.style.userSelect="",document.body.style.cursor="",document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",x)}},[a,t,n,r]),{width:i,isResizing:a,handleMouseDown:p}}const mV=200;function yC(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?`ui-${e.randomUUID()}`:`ui-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function pV(e,t,n){if(e!=="org"&&e!=="custom"||!t)return!0;const{roles:r,employees:i}=t,o=Gm(t),a=t.top_level_role_ids??[],c=t.final_decider_role_id??"";if(r.length===0)return confirm(`Your org has no roles defined. - -Set up at least one role before running a task. - -Go to Org tab now?`)&&n?.(),!1;if(a.length>1&&!c)return confirm(`Your organization has multiple top-level roles but no final decider selected. - -Choose one final decider in the Org tab before running a task. - -Go to Org tab now?`)&&n?.(),!1;const d=[],m=new Set(r.map(x=>x.role_id));o.runtimeTeams.filter(x=>x.member_role_ids.some(v=>m.has(v))||x.manager_role_id&&m.has(x.manager_role_id)).length===0&&d.push("No runtime teams defined — the system will auto-generate from your roles");const p=new Set(i.map(x=>x.role_id)),g=r.filter(x=>!p.has(x.role_id));if(g.length>0){const x=g.map(v=>v.name).join(", ");d.push(`${g.length} role(s) have no employees: ${x}`)}return d.length>0?confirm(`Before running this task: - -`+d.map(x=>"• "+x).join(` -`)+` - -Run anyway?`):!0}function hV(e){if(!e)return!1;const t=Gm(e);return!!(t.projectRun?.run_id||t.runtimeTeams.length>0||t.runtimeSeats.length>0)}function gV(e,t){return e?e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}function yy(e,t=0){if(!e)return!1;const n=String(e.execMode??"").trim().toLowerCase();return t>0||!!e.isCompanyRuntime||!!e.roleWorkItems||!!e.executorRoleWorkItems||n==="company"||n==="org"||n==="custom"}function xC(e){return String(e?.originTaskId??e?.taskId??"").trim()||null}function yV({boardColor:e,title:t,onCommit:n}){const[r,i]=C.useState(!1),[o,a]=C.useState(t),c=C.useRef(null);C.useEffect(()=>{r||a(t)},[t,r]);const d=C.useCallback(()=>{const h=o.trim();h&&h!==t?n(h):a(t),i(!1)},[o,t,n]),m=C.useCallback(()=>{a(t),i(!0),setTimeout(()=>c.current?.select(),0)},[t]);return u.jsx("div",{className:"board-selector",children:u.jsx("div",{className:"board-tabs",children:u.jsxs("span",{className:"board-tab active board-tab-editable",style:{"--board-color":e},children:[u.jsx("span",{className:"board-tab-dot",style:{background:e}}),r?u.jsx("input",{ref:c,className:"board-tab-title-input",value:o,onChange:h=>a(h.target.value),onBlur:d,onKeyDown:h=>{h.key==="Enter"&&d(),h.key==="Escape"&&(a(t),i(!1))}}):u.jsx("span",{className:"board-tab-title",onClick:m,title:"Click to edit session title",children:t})]})})})}function xV({boardStore:e,agents:t,officeMap:n,execMode:r,companyProfile:i,taskPreferredAgent:o,chatStore:a,sessionStore:c,projectId:d,onRunTask:m,onCreateTask:h,onMoveTask:p,onCreateSession:g,onSessionSend:x,onSecretarySend:v,onDeleteSession:k,onTitleChange:S,onSessionConfigChange:b,onSessionTaskAgentChange:w,onContinueInNewChat:j,onSessionStop:N,onSessionResume:O,onSessionComplete:R,onLoadSessionDetail:L,onOpenExecutionPanel:I,onCollabSync:D,orgInfoData:M,onNavigateToOrg:A,recoveryStatus:$,onRecoveryResume:W,onRecoveryCancel:B,commsState:V,commsMessage:H,onCommsRefresh:U,onCommsReadMessage:Y,savedOrgsList:Q,activeSavedOrg:q,onSavedOrgsList:G,onSavedOrgLoad:J}){const{sessions:P,activeSessionId:K,activeSession:ee}=c,{markRead:te}=a,[ie,se]=C.useState("collapsed"),{width:de,isResizing:oe,handleMouseDown:Ne}=fV({initialWidth:380,minWidth:300,maxWidth:600,onCollapse:()=>se("collapsed")}),[Ee,Ie]=C.useState("chat"),[Be,Ge]=C.useState(null),[Ue,at]=C.useState({kind:"activity"}),[Pt,wt]=C.useState([]),[Ct,pe]=C.useState(!1),[$e,et]=C.useState({}),tt=C.useRef(L),pt=C.useRef(P),me=C.useRef(a.getChannelMessages),be=C.useRef({scope:null,active:new Set,child:null}),Me=C.useRef(new Set),Fe=C.useRef(0);pt.current=P,me.current=a.getChannelMessages;const He=r==="company"||r==="org"||r==="custom",jt=`secretary:${d}`,an=`activity:${d}`,ke=C.useMemo(()=>Be?P.find(ue=>ue.taskId===Be)??null:null,[P,Be]),Oe=C.useMemo(()=>Ue.kind!=="task-detail"?null:e.tasks.find(ue=>ue.id===Ue.taskId)??null,[Ue,e.tasks]),We=C.useMemo(()=>{const ue=qm(Oe);return ue?P.find(Se=>Se.taskId===ue||Se.runtimeTaskId===ue||Se.executionTurnId===ue)??null:null},[P,Oe]),Ze=C.useMemo(()=>We?a.getChannelMessages(We.channelId):[],[a.messages,a.getChannelMessages,We]),qe=C.useMemo(()=>Df(ee,P),[P,ee]),ut=C.useMemo(()=>Xf(ee,P),[P,ee]),Yt=C.useMemo(()=>Kf(ee,[...ut,...qe]),[ee,qe,ut]);C.useEffect(()=>{tt.current=L},[L]);const Nn=C.useCallback((ue,Se,Pe="summary")=>{const ae=tt.current;if(!ae||!ue)return;const ve=Fe.current,Le=pt.current.find(un=>un.taskId===ue)?.channelId,vt=Se&&Le&&Se.channelId!==Le?me.current(Le).find(un=>Wf(un,Pe)):Se,ct=[ve,ue,Pe,vt?.timestamp??"latest",vt?.id??""].join("|");if(Me.current.has(ct))return;Me.current.add(ct),et(un=>un[ue]?un:{...un,[ue]:!0});let dt;try{dt=ae(ue,{limit:mV,beforeCreatedAt:vt?.timestamp,beforeMessageId:vt?.id,detailLevel:Pe})}catch{Me.current.delete(ct),Fe.current===ve&&(et(zn=>zn[ue]?{...zn,[ue]:!1}:zn),be.current.active.delete(`${ue}:${Pe}`),be.current.child===ue&&(be.current.child=null));return}return Promise.resolve(dt).catch(()=>{Fe.current===ve&&(be.current.active.delete(`${ue}:${Pe}`),be.current.child===ue&&(be.current.child=null))}).finally(()=>{if(Me.current.delete(ct),Fe.current!==ve)return;const un=`${ve}|${ue}|`;[...Me.current.keys()].some(qt=>qt.startsWith(un))||et(qt=>qt[ue]?{...qt,[ue]:!1}:qt)})},[]),ln=C.useCallback(ue=>!!$e[ue],[$e]);C.useLayoutEffect(()=>{Fe.current+=1,Me.current.clear(),be.current={scope:null,active:new Set,child:null},et({})},[d]),C.useEffect(()=>()=>{Fe.current+=1,Me.current.clear()},[]),C.useEffect(()=>{Be&&!ke&&Ge(null)},[Be,ke]),C.useEffect(()=>{Ue.kind==="task-detail"&&!Oe&&at({kind:"activity"})},[Ue,Oe]);const Ln=C.useRef(null);C.useEffect(()=>{if(!We){Ln.current=null;return}Ln.current!==We.taskId&&(Ln.current=We.taskId,Nn(We.taskId,void 0,"full"))},[We,Nn]),C.useEffect(()=>{if(!Be){be.current.child=null;return}be.current.child!==Be&&(be.current.child=Be,Nn(Be,void 0,"full"))},[Be,Nn]),C.useEffect(()=>{if(!K){be.current.scope=null,be.current.active.clear();return}be.current.scope!==K&&(be.current.scope=K,be.current.active.clear());const ue=Yt.timelineSessions.length>0?Yt.timelineSessions:P.find(Se=>Se.taskId===K)?[P.find(Se=>Se.taskId===K)]:[];if(ue.length===0){be.current.active.clear();return}for(const Se of ue){const Pe=yy(ee,qe.length)?"summary":gV(Se),ae=`${Se.taskId}:${Pe}`;be.current.active.has(ae)||(be.current.active.add(ae),Nn(Se.taskId,void 0,Pe))}},[Yt.timelineSessions,ee,K,qe.length,Nn,P]);const lt=C.useMemo(()=>Be?{kind:"child-detail"}:Ue.kind==="task-detail"||Ue.kind==="secretary"?Ue:K?{kind:"session",taskId:K}:{kind:"activity"},[Ue,K,Be]),In=C.useMemo(()=>lt.kind==="secretary"?jt:lt.kind==="child-detail"&&ke?ke.channelId:lt.kind==="session"&&Yt.displaySession?Yt.displaySession.channelId:lt.kind==="session"&&ee?ee.channelId:an,[lt,Yt.displaySession,ee,ke,jt,an]),Et=C.useMemo(()=>{if(lt.kind==="activity")return[an];if(lt.kind==="secretary")return[jt];if(lt.kind==="child-detail"&&ke)return[ke.channelId];if(lt.kind==="session"){const ue=Yt.timelineSessions.map(Se=>Se.channelId).filter((Se,Pe,ae)=>!!Se&&ae.indexOf(Se)===Pe);if(ue.length>0)return ue}return In?[In]:[]},[lt.kind,Yt.timelineSessions,ke,an,jt,In]),Dt=C.useMemo(()=>{const ue=new Set;for(const Se of P)Se.status!=="cancelled"&&ue.add(Se.channelId);return ue.add(an),ue.add(jt),ue},[P,an,jt]),Ye=C.useMemo(()=>{if(lt.kind==="activity")return a.messages.filter(ue=>ue.sender!=="user"&&Dt.has(ue.channelId)).sort((ue,Se)=>Se.timestamp-ue.timestamp).slice(0,50).reverse();if(lt.kind==="session"&&Et.length>1){const ue=Et.map(Se=>a.getChannelMessages(Se));return yy(ee,qe.length)&&ee?uS(ue.flat(),ee.channelId):Bx(ue)}return a.getChannelMessages(In)},[a.messages,a.getChannelMessages,In,lt.kind,Dt,ee,qe.length,Et]),nt=C.useMemo(()=>ke?a.getChannelMessages(ke.channelId):[],[a.messages,a.getChannelMessages,ke]),Qt=C.useMemo(()=>{if(lt.kind==="session")return lE(zv(Ye).latestPendingReplyMetadata)},[Ye,lt.kind]),_n=C.useMemo(()=>[...He?P.filter(Se=>Se.mode!=="child"):P].sort((Se,Pe)=>Pe.updatedAt-Se.updatedAt),[P,He]),Tt=C.useMemo(()=>{if(!He)return null;const ue=new Set;for(const Se of P)Se.mode==="child"&&ue.add(Se.taskId);return ue.size>0?ue:null},[P,He]),er=C.useMemo(()=>{if(!Tt)return e.tasksByColumn;const ue={};for(const[Se,Pe]of Object.entries(e.tasksByColumn))ue[Se]=Pe.filter(ae=>!Tt.has(ae.id));return ue},[e.tasksByColumn,Tt]),Tn=!!(ee&&(ee.isCompanyRuntime||qe.length>0)),ht=!!(ee&&(He||Tn)),tr=!!(ee&&He&&hV(M));C.useEffect(()=>{Ee==="agents"&&!ht&&Ie("chat"),Ee==="comms"&&!U&&Ie("chat"),Ee==="team"&&!tr&&Ie("chat")},[Ee,ht,tr,U]);const mn=C.useMemo(()=>{const ue={};for(const Se of P)ue[Se.channelId]=a.getUnreadCount(Se.channelId);return ue[jt]=a.getUnreadCount(jt),ue},[P,a.getUnreadCount,jt]),cn=C.useMemo(()=>Pt.map(ue=>P.find(Se=>Se.taskId===ue)).filter(ue=>!!ue&&ue.mode!=="child"),[Pt,P]),Fn=C.useMemo(()=>{const ue={};for(const Se of cn){const Pe=Df(Se,P),ae=Xf(Se,P),Ae=Kf(Se,[...ae,...Pe]).timelineSessions.map(Le=>a.getChannelMessages(Le.channelId));ue[Se.taskId]=yy(Se,Pe.length)?uS(Ae.flat(),Se.channelId):Bx(Ae)}return ue},[cn,P,a.getChannelMessages]),Jt=C.useMemo(()=>{const ue={};for(const Se of cn)ue[Se.taskId]=Df(Se,P);return ue},[cn,P]),Vt=C.useCallback(ue=>{wt(Se=>Se.includes(ue)?Se:[...Se,ue])},[]),Vn=C.useRef(null);C.useEffect(()=>{K&&!Vn.current&&ie==="collapsed"&&(se("open"),Ie("chat")),Vn.current=K},[K,ie]),C.useEffect(()=>{K&&Vt(K)},[K,Vt]),C.useEffect(()=>{const ue=new Set(P.map(Se=>Se.taskId));wt(Se=>Se.filter(Pe=>ue.has(Pe))),et(Se=>Object.fromEntries(Object.entries(Se).filter(([Pe])=>ue.has(Pe))))},[P]),C.useEffect(()=>{Ct&&cn.length<2&&pe(!1)},[Ct,cn.length]),C.useEffect(()=>{const ue=Se=>{if(Se.key==="Escape"&&ie!=="collapsed"){const Pe=Se.target?.tagName;if(Pe==="INPUT"||Pe==="TEXTAREA"||Pe==="SELECT")return;se("collapsed")}};return document.addEventListener("keydown",ue),()=>document.removeEventListener("keydown",ue)},[ie]);const Un=C.useCallback(()=>{for(const ue of Et)te(ue)},[Et,te]),Re=C.useCallback(ue=>{const Se=P.find(Pe=>Pe.taskId===ue);Se&&te(Se.channelId)},[P,te]),bt=C.useCallback(ue=>{P.find(Pe=>Pe.taskId===ue)&&(Vt(ue),c.setActiveSession(ue),at({kind:"session",taskId:ue}),se("open"),Ie("chat"),Ge(null))},[P,Vt,c]),Cn=C.useCallback(ue=>{const Se=Pt.filter(ae=>ae!==ue);if(wt(Se),Be===ue&&Ge(null),K!==ue)return;const Pe=Se[Se.length-1]??null;if(c.setActiveSession(Pe),Pe){at({kind:"session",taskId:Pe}),Ie("chat");return}at({kind:"activity"})},[Pt,Be,K,c]),vr=C.useCallback(ue=>{if(!ue){at({kind:"activity"}),c.setActiveSession(null),Ge(null);return}const Se=P.find(Pe=>Pe.taskId===ue);if(He&&Se?.mode==="child"){Ge(ue),se("open");return}bt(ue)},[P,c,He,bt]),Mn=C.useCallback(()=>{at({kind:"secretary"}),c.setActiveSession(null),Ge(null),se("open")},[c]),_t=C.useCallback(ue=>{const Se=e.tasks.find(ae=>ae.id===ue.id);if(He&&Se){Ge(null),at({kind:"task-detail",taskId:Se.id}),se("open"),Ie("info");return}P.find(ae=>ae.taskId===ue.id)?bt(ue.id):Se&&Se.phase!=="cancelled"&&(c.createSession({projectId:d,taskId:Se.id,channelId:`session:${Se.id}`,sessionId:Se.sessionId,title:Se.title,status:"pending",columnId:Se.columnId,execMode:r,companyProfile:i,assigneeIds:Se.assigneeIds,priority:Se.priority,tags:Se.tags,selectedExecutionAgent:Se.selectedExecutionAgent,createdAt:Se.createdAt,updatedAt:Se.updatedAt,messageCount:0,progressLog:[]}),Vt(ue.id),c.setActiveSession(ue.id),at({kind:"session",taskId:ue.id}),se("open"),Ie("chat"),D?.())},[P,e.tasks,c,bt,Vt,D,He]),wr=C.useCallback(ue=>{if(!e.activeBoardId)return;const Se=e.activeBoardColumns.find(ae=>ae.name==="Todo");if(!Se)return;const Pe=e.createTask({boardId:e.activeBoardId,columnId:Se.id,title:ue});h(ue,e.activeBoardId,Se.id,Pe.id)},[e,h]),fr=C.useCallback(ue=>{e.setActiveBoard(ue);const Se=P.find(Pe=>Pe.mode!=="child"&&xC(Pe)===ue);if(Se){bt(Se.taskId);return}Ge(null),at({kind:"activity"}),c.setActiveSession(null)},[e,P,bt,c]),Xt=C.useMemo(()=>new Set(e.boards.map(ue=>ue.id)),[e.boards]);C.useEffect(()=>{if(He){const ue=Oe?.boardId??xC(ee)??null;if(!ue||!Xt.has(ue)){e.activeBoardId!==null&&e.setActiveBoard(null);return}e.activeBoardId!==ue&&e.setActiveBoard(ue);return}e.boards.length>0&&!e.activeBoardId&&e.setActiveBoard(e.boards[0].id)},[He,Oe?.boardId,ee,Xt,e.activeBoardId,e.boards,e.setActiveBoard]);const Ut=C.useCallback(ue=>{const Se=e.tasks.find(vt=>vt.id===ue);if(!Se)return;const Pe=P.find(vt=>vt.taskId===ue),ae=Pe?.execMode??r,ve=Pe?.companyProfile??i,Ae=ae==="org"||ae==="custom"?"custom":ae==="company"?ve:void 0;if(!pV(ae,M,A))return;m(ue,Se.title,Se.description??"",ae,Ae);const Le=e.activeBoardColumns.find(vt=>vt.name==="In Progress");Le&&e.moveTask(ue,Le.id,0)},[e,m,P,r,i,M,A]),hn=C.useCallback((ue,Se,Pe,ae)=>{b?.(ue,Se,Pe,ae)},[b]),qn=C.useCallback(ue=>{ie==="maximized"&&se("open"),setTimeout(()=>{document.querySelector(`[data-task-id="${ue}"]`)?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},100)},[ie]),gt=C.useCallback(()=>{const Se=(Yt.runtimeSession??Yt.displaySession??ee)?.taskId??K;Se&&N?.(Se)},[Yt.runtimeSession,Yt.displaySession,ee,K,N]),Gn=C.useCallback(()=>{Be||K&&R?.(K)},[K,Be,R]),mr=C.useCallback(ue=>{N?.(ue)},[N]),Rn=C.useCallback(()=>{const ue=Yt.runtimeSession??Yt.displaySession??ee,Se=ue?.resumeParentTaskId??ue?.taskId??K;Se&&O?.(Se)},[Yt.runtimeSession,Yt.displaySession,ee,K,O]),Je=C.useCallback(ue=>{const Se=P.find(Pe=>Pe.taskId===ue);O?.(Se?.resumeParentTaskId??ue)},[P,O]),xn=C.useCallback(ue=>{R?.(ue)},[R]),Kt=C.useCallback(()=>{if(!Ct&<.kind!=="session"){const ue=K??cn[cn.length-1]?.taskId??null;ue&&bt(ue)}pe(ue=>!ue)},[Ct,lt.kind,K,cn,bt]),kt=C.useCallback((ue,Se,Pe,ae)=>{const ve=ae?.ui_message_id?ae:{...ae??{},ui_message_id:yC()};x(ue,Se,Pe,ve)},[x]),Wn=C.useCallback((ue,Se)=>{if(lt.kind==="secretary"){v?.(ue);return}const Pe=K;if(!Pe)return;const ae=String(Qt?.response_to_checkpoint_id??"").trim();let ve=Qt;if(!ae){const Ae=yC();ve={...Qt??{},ui_message_id:Ae};const Le=Yt.displaySession??ee;a.sendMessage({channelId:Le?.channelId??`session:${Pe}`,sender:"user",senderName:"You",content:ue,metadata:{ui_message_id:Ae}})}kt(Pe,ue,Se,ve)},[lt.kind,K,Yt.displaySession,ee,Qt,a,kt,v]),gn=C.useCallback((ue,Se,Pe)=>{const ae=Se??K;ae&&kt(ae,ue,void 0,Pe)},[K,kt]),nr=C.useCallback(ue=>{const Se=P.find(Pe=>Pe.taskId===ue||Pe.runtimeTaskId===ue||Pe.executionTurnId===ue);Se&&(Ge(Se.taskId),se("open"),Ie("chat"))},[P]),ds=C.useCallback(ue=>{if(I){I(ue);return}nr(ue)},[nr,I]),pr=lt.kind==="secretary",rr=pr?"Secretary":ee?ee.title:"Activity";return u.jsxs("div",{className:`workspace-page${ie==="maximized"?" panel-maximized":""}`,children:[u.jsx(r5,{sessions:_n,activeSessionId:pr?null:K,activeChannel:pr?jt:null,secretaryChannelId:jt,unreadCounts:mn,onSelect:vr,onCreateSession:g,onDeleteSession:k,onSelectSecretary:v?Mn:void 0}),ie!=="maximized"&&u.jsxs("div",{className:"workspace-board",children:[$&&W&&B&&u.jsx(f4,{data:$,onResume:W,onCancel:B}),t.length>0&&u.jsx(R8,{agents:t,tasks:e.tasks}),He?e.activeBoard&&ee&&u.jsx(yV,{boardColor:e.activeBoard.color,title:e.activeBoard.name,onCommit:ue=>S(ee.taskId,ue)},ee.taskId):e.boards.length>1&&u.jsx(A8,{boards:e.boards,activeBoardId:e.activeBoardId,onSelect:fr}),He&&!e.activeBoard?u.jsx("div",{className:"kanban-empty-state",children:u.jsx("p",{children:"Select a Runtime Session on the left to view its Work Item board."})}):u.jsxs(u.Fragment,{children:[u.jsx(T8,{columns:e.activeBoardColumns,tasksByColumn:er,agents:t,officeMap:n,store:e,companyMode:He,selectedTaskId:lt.kind==="task-detail"?lt.taskId:K,onCardClick:_t,onStartTask:Ut,onQuickCreate:wr,onMoveTask:p}),He&&e.activeBoard&&e.tasks.filter(ue=>ue.boardId===e.activeBoardId).length===0&&u.jsx("div",{className:"kanban-empty-state kanban-empty-state-inline",children:u.jsx("p",{children:"No work items yet — start delegation to populate this board."})})]})]}),u.jsx(dV,{panelState:ie,width:de,onResizeMouseDown:Ne,isResizing:oe,activeView:lt,activeSession:ee,activeTask:Oe,linkedTaskSession:We,linkedTaskSessionMessages:Ze,childDetailSession:ke,messages:Ye,childDetailMessages:nt,allSessions:P,openSessions:cn,openSessionMessages:Fn,openSessionChildren:Jt,agents:t,childSessions:qe,execMode:r,taskPreferredAgent:o,savedOrgsList:Q??null,activeSavedOrg:q??null,onSavedOrgsList:G,onSavedOrgLoad:J,canShowAgentsTab:ht,channelId:In,channelName:rr,secretaryChannelId:jt,unreadCounts:mn,multiSessionView:Ct,panelTab:Ee,onPanelTabChange:Ie,commsState:V??null,commsMessage:H??null,onCommsRefresh:U?()=>U({session_id:ee?.sessionId||void 0,project_id:d||void 0}):void 0,onCommsReadMessage:Y,orgInfoData:M??null,recoveryStatus:$??null,canShowTeamTab:tr,onTeamStopRun:K?()=>N?.(K):void 0,onTitleChange:S,onSessionConfigChange:hn,onSessionTaskAgentChange:w,onContinueInNewChat:j,onStop:gt,onComplete:Gn,onResume:Rn,onResumeTask:Je,onStopTask:mr,onCompleteTask:xn,onLocateOnBoard:qn,onBackToParent:()=>Ge(null),onCloseTaskDetail:()=>at({kind:"activity"}),onOpenChildDetail:nr,onOpenExecutionPanel:I,onSelectSessionTab:bt,onCloseSessionTab:Cn,onToggleMultiSessionView:Kt,onCollapse:()=>se("collapsed"),onExpand:()=>se("open"),onMaximize:()=>se(ue=>ue==="maximized"?"open":"maximized"),onComposerSend:Wn,onMessageSend:gn,onSessionSend:kt,onWorkItemClick:ds,onWorkItemOpenSession:nr,onMarkRead:Un,onSessionMarkRead:Re,onLoadSessionHistory:Nn,isSessionHistoryLoading:ln})]})}function vV(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}const E0=2e3,vC={child_task_result:80,child_task_result_retry:79,company_role_result:75,company_role_result_retry:74,child_result:70,runtime_v2_assistant:60,runtime_v2_company_assistant:20,top_level_reply:40,worker_notification:10};function Pi(e){return e.metadata??{}}function pm(e){const t=String(e??"").replace(/\r\n/g,` -`).replace(/\r/g,` -`).split(` -`).map(i=>i.trimEnd()).join(` -`).replace(/\n{3,}/g,` - -`).trim(),n=bV(t),r=n.split(/\n{2,}/).map(i=>i.trim()).filter(Boolean);return r.length>1&&/^Verification:\s/i.test(r[r.length-1])?r.slice(0,-1).join(` - -`).trim():n}function bV(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const r=t.indexOf(": ");if(r<8||r>160)return t;const i=t.slice(0,r).replace(/\*/g,"").trim(),o=t.slice(r+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(i)||/^(https?|file)$/i.test(i)?t:o}function El(e){const t=Pi(e),n=new Set,r=typeof t.checkpoint_type=="string"?t.checkpoint_type.trim():"",i=typeof t.checkpoint_id=="string"?t.checkpoint_id.trim():"";for(const o of[e.id,typeof t.ui_message_id=="string"?t.ui_message_id:"",r&&i?`checkpoint:${r}:${i}`:""]){const a=String(o??"").trim();a&&n.add(a)}return n}function sl(e){return new Set([...El(e)].map(t=>`${e.channelId}\0${t}`))}function _V(e){return e.startsWith("checkpoint:")}function cr(e){return typeof e.timestamp=="number"?e.timestamp:0}function cv(e){return String(e.id??"").startsWith("msg-")}function PI(e){return!cv(e)}function bC(e){const t={};for(const n of e){if(!PI(n))continue;const r=cr(n);r>(t[n.channelId]??0)&&(t[n.channelId]=r)}return t}function kV(e,t,n){return n<=(e[t]??0)?e:{...e,[t]:n}}function SV(e,t){const n={};for(const r of e){if(!PI(r)||r.sender==="user")continue;const i=t[r.channelId]??0;cr(r)<=i||(n[r.channelId]=(n[r.channelId]??0)+1)}return n}function _C(e){const t=String(e.sender??"").trim().toLowerCase(),n=Pi(e),r=typeof n.role=="string"?n.role.trim().toLowerCase():"";return t==="user"||r==="user"?"user":"assistant"}function kC(e){const t=Pi(e),n=String(e.sender??"").trim().toLowerCase();let r=0;const i=BI(e);return i&&(r+=1e3+i),t.source==="engine"&&(r+=100),n&&n!=="system"&&(r+=20),n&&!["assistant","system","user"].includes(n)&&(r+=5),e.replyToId&&(r+=2),r+=Math.min(Object.keys(t).length,10),r}function SC(e){return String(Pi(e).source??"").trim().toLowerCase()==="engine"}function BI(e){const t=Pi(e),n=String(t.transcript_kind??"").trim();if(n)return vC[n]??0;const r=String(t.kind??"").trim();return vC[r]??0}function Nl(e){return BI(e)>0}function $I(e,t){if(e.channelId!==t.channelId)return!1;const n=El(e),r=El(t);for(const i of n)if(r.has(i))return!0;return!1}function hm(e,t){if($I(e,t))return!0;if(e.channelId!==t.channelId||_C(e)!==_C(t)||pm(e.content)!==pm(t.content))return!1;const n=Nl(e)&&Nl(t);if(!n&&String(e.replyToId??"")!==String(t.replyToId??"")||!(SC(e)||SC(t)))return!1;const r=cr(e),i=cr(t);return!(!n&&r&&i&&Math.abs(r-i)>E0)}function gm(e,t,n=!1){let r=e,i=t;const o=cv(e),a=cv(t);o!==a?(r=o?t:e,i=o?e:t):(n||kC(t)>kC(e))&&(r=t,i=e);const c=[];for(const j of[i.mentions,r.mentions])for(const N of j??[])c.includes(N)||c.push(N);const d=El(e),m=El(t);let h="";for(const j of d)if(m.has(j)&&!_V(j)){h=j;break}const p=pm(r.content),g=p&&p===pm(i.content)?p:r.content,x=String(Pi(e).checkpoint_id??"").trim(),v=String(Pi(t).checkpoint_id??"").trim(),k=!!x&&x===v,S=Nl(e)&&Nl(t),b=S?String(Pi(e).ui_timeline_id??Pi(t).ui_timeline_id??Lv(e)).trim():"",w={...Pi(i),...Pi(r)};return b&&(w.ui_timeline_id=b),{...i,...r,...h?{id:h}:{},content:g,metadata:w,mentions:c,timestamp:k||S?cr(e)||cr(t):cr(r)||cr(i)}}function wC(e){const t=[],n=new Map;for(const r of[...e].sort((i,o)=>cr(i)-cr(o))){const i=sl(r);let o=-1,a=!1;for(const d of i){const m=n.get(d);if(m!==void 0){o=m,a=t[m].id===r.id;break}}if(o===-1){const d=cr(r),m=Nl(r);for(let h=t.length-1;h>=0;h--){const p=cr(t[h]);if(!m&&d>0&&p>0&&d-p>E0)break;if(hm(t[h],r)){o=h;break}}}const c=o===-1?t.length:o;o===-1?t.push(r):t[o]=gm(t[o],r,a);for(const d of sl(t[c]))n.has(d)||n.set(d,c)}return t}function wV(e,t){const n=[...e],r=new Map;n.forEach((i,o)=>{for(const a of sl(i))r.set(a,o)});for(const i of[...t].sort((o,a)=>cr(o)-cr(a))){let o=-1;for(const a of sl(i)){const c=r.get(a);if(c!==void 0){o=c;break}}if(o<0){for(let a=n.length-1;a>=0;a-=1)if(hm(n[a],i)){o=a;break}}if(o<0)o=n.length,n.push(i);else{const a=n[o];n[o]=gm(a,i,a.id===i.id)}for(const a of sl(i))r.set(a,o);for(const a of sl(n[o]))r.set(a,o)}return n.sort((i,o)=>cr(i)===cr(o)?i.id.localeCompare(o.id):cr(i)-cr(o))}function CV(e,t){switch(t.type){case"SET":return t.channels;case"CLEAR":return[];case"ADD":return e.some(n=>n.id===t.channel.id)?e:[...e,t.channel];case"REMOVE":return e.filter(n=>n.id!==t.channelId);case"REMOVE_PARTICIPANT":return e.map(n=>({...n,participants:n.participants.filter(r=>r!==t.agentId)}));default:return e}}function jV(e,t){switch(t.type){case"SET":{const n=wC(t.messages);if(e.length===0)return n;const r=e.filter(i=>typeof i.id=="string"&&i.id.startsWith("msg-")&&!n.some(o=>hm(i,o)));return r.length===0?n:wC([...n,...r])}case"CLEAR":return[];case"ADD":{const n=cr(t.message);El(t.message);let r=!1;for(let i=e.length-1;i>=0;i--){const o=cr(e[i]);if(!r&&n>0&&o>0&&n-o>E0&&(r=!0),$I(e[i],t.message)){const a=[...e];return a[i]=gm(e[i],t.message,e[i].id===t.message.id),a}if((Nl(t.message)||!r)&&hm(e[i],t.message)){const a=[...e];return a[i]=gm(e[i],t.message),a}}return[...e,t.message]}case"MERGE":return t.messages.length===0?e:wV(e,t.messages);case"MARK_SENDER_DELETED":return e.map(n=>n.sender===t.senderId?{...n,senderDeleted:!0,senderName:"[已删除的 Agent]"}:n);case"REMOVE_BY_CHANNEL":return e.filter(n=>n.channelId!==t.channelId);case"REMOVE_BY_TASK_ID":return e.filter(n=>n.channelId!==`session:${t.taskId}`&&n.metadata?.task_id!==t.taskId);default:return e}}function EV(){const[e,t]=C.useReducer(CV,[]),[n,r]=C.useReducer(jV,[]),[i,o]=C.useState({}),[a,c]=C.useState("default"),d=C.useRef(null),m=C.useMemo(()=>bC(n),[n]),h=C.useRef(m);h.current=m;const p=C.useMemo(()=>{const D={};for(const M of n)D[M.channelId]||(D[M.channelId]=[]),D[M.channelId].push(M);return D},[n]),g=C.useMemo(()=>SV(n,i),[n,i]),x=C.useCallback(D=>{const M={id:`msg-${vV()}`,channelId:D.channelId,sender:D.sender,senderName:D.senderName,content:D.content,timestamp:Date.now(),replyToId:D.replyToId,mentions:[],metadata:D.metadata};return r({type:"ADD",message:M}),M},[]),v=C.useCallback(D=>p[D]??[],[p]),k=C.useCallback(D=>g[D]??0,[g]),S=C.useCallback(D=>{const M=h.current[D]??0;M<=0||o(A=>kV(A,D,M))},[]),b=C.useCallback(D=>{r({type:"MARK_SENDER_DELETED",senderId:D})},[]),w=C.useCallback(D=>{t({type:"REMOVE_PARTICIPANT",agentId:D})},[]),j=C.useCallback(D=>{t({type:"REMOVE",channelId:`session:${D}`}),r({type:"REMOVE_BY_TASK_ID",taskId:D})},[]),N=C.useCallback(()=>{t({type:"CLEAR"}),r({type:"CLEAR"}),d.current=null,o({})},[]),O=C.useCallback((D,M,A)=>{const $=D||"default",W=$!==a,B=d.current!==$;d.current=$,c($),t({type:"SET",channels:M}),r(W?{type:"SET",messages:A}:{type:"MERGE",messages:A}),B&&o(bC(A))},[a]),R=C.useCallback(D=>{r({type:"ADD",message:D})},[]),L=C.useCallback(D=>{r({type:"MERGE",messages:D})},[]),I=C.useCallback(D=>{t({type:"ADD",channel:D})},[]);return C.useMemo(()=>({scopeProjectId:a,channels:e,messages:n,sendMessage:x,getChannelMessages:v,getUnreadCount:k,markRead:S,markSenderDeleted:b,removeParticipant:w,removeSessionData:j,clear:N,initFromBackend:O,addMessageFromBackend:R,mergeMessagesFromBackend:L,addChannelFromBackend:I}),[a,e,n,x,v,k,S,b,w,j,N,O,R,L,I])}const Qm=4e3;function ml(e,t){return e.length>t?e.slice(-t):e}function uv(e,t,n){if(!e)return t;if(!t||e===t)return e;if(t.startsWith(e))return t;if(e.startsWith(t)||e.endsWith(t))return e;if(t.endsWith(e))return t;const r=Math.min(e.length,t.length);for(let i=r;i>0;i-=1)if(e.slice(-i)===t.slice(0,i))return`${e}${t.slice(i)}`;return n==="tool_call"&&/[}\]"]$/.test(e)&&!/^\s/.test(t)?`${e} -${t}`:`${e}${t}`}function NV(e,t){const n=e.trim().replace(/\s+/g," ");return n?n.length>120?`${n.slice(0,120).trimEnd()}...`:n:t||"Thinking"}function IV(e){return{timestamp:Number.isFinite(e.timestamp)?e.timestamp:Date.now(),type:e.type,summary:typeof e.summary=="string"?e.summary:"",detail:typeof e.detail=="string"&&e.detail?e.detail:void 0,turnId:typeof e.turnId=="string"&&e.turnId?e.turnId:void 0,itemId:typeof e.itemId=="string"&&e.itemId?e.itemId:void 0,streamId:typeof e.streamId=="string"&&e.streamId?e.streamId:void 0,toolCallId:typeof e.toolCallId=="string"&&e.toolCallId?e.toolCallId:void 0,permissionGroupKey:typeof e.permissionGroupKey=="string"&&e.permissionGroupKey?e.permissionGroupKey:void 0,seq:typeof e.seq=="number"&&Number.isFinite(e.seq)?e.seq:void 0,executionMode:typeof e.executionMode=="string"&&e.executionMode?e.executionMode:void 0}}function ym(e){const t=e.itemId||e.streamId;return t?`${e.type}:${e.turnId??""}:${t}`:e.toolCallId&&(e.type==="tool_call"||e.type==="autonomy")?`${e.type}:${e.turnId??""}:${e.toolCallId}`:e.permissionGroupKey&&e.type==="autonomy"?`${e.type}:${e.turnId??""}:${e.permissionGroupKey}`:""}function TV(e,t){const n=ym(e),r=ym(t);return n&&r?n===r:t.timestamp-e.timestamp>Qm||e.type!==t.type?!1:e.type==="thinking"||e.type==="assistant"?!0:e.type==="tool_call"?e.summary===t.summary:!1}function RV(e,t){return t.timestamp-e.timestamp<=Qm&&e.type===t.type&&e.summary===t.summary&&(e.detail??"")===(t.detail??"")}function AV(e,t){if(e.type==="thinking"||e.type==="assistant"){const n=uv(e.detail??"",t.detail??"","thinking");return{timestamp:e.timestamp,type:e.type,summary:NV(n,t.summary||e.summary),detail:n||void 0,turnId:t.turnId??e.turnId,itemId:t.itemId??e.itemId,streamId:t.streamId??e.streamId,toolCallId:t.toolCallId??e.toolCallId,permissionGroupKey:t.permissionGroupKey??e.permissionGroupKey,seq:t.seq??e.seq,executionMode:t.executionMode??e.executionMode}}if(e.type==="tool_call"){const n=uv(e.detail??"",t.detail??"","tool_call");return{timestamp:e.timestamp,type:"tool_call",summary:t.summary||e.summary,detail:n||void 0,turnId:t.turnId??e.turnId,itemId:t.itemId??e.itemId,streamId:t.streamId??e.streamId,toolCallId:t.toolCallId??e.toolCallId,permissionGroupKey:t.permissionGroupKey??e.permissionGroupKey,seq:t.seq??e.seq,executionMode:t.executionMode??e.executionMode}}return t}function HI(e,t,n=100){const r=IV(t),i=ym(r),o=i?[...e].reverse().findIndex(d=>ym(d)===i):-1,a=o>=0?e.length-1-o:e.length-1,c=e[a];return c?i&&o>=0&&typeof c.seq=="number"&&typeof r.seq=="number"&&r.seq<=c.seq?e:RV(c,r)?ml([...e.slice(0,a),c,...e.slice(a+1)],n):TV(c,r)?ml([...e.slice(0,a),AV(c,r),...e.slice(a+1)],n):ml([...e,r],n):[r]}function FI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,r)=>HI(n,r,t),[])}function MV(e){return{timestamp:Number.isFinite(e.timestamp)?e.timestamp:Date.now(),type:e.type,workItemProjectionId:typeof e.workItemProjectionId=="string"&&e.workItemProjectionId?e.workItemProjectionId:void 0,workItemTurnType:typeof e.workItemTurnType=="string"&&e.workItemTurnType?e.workItemTurnType:void 0,workItemProjectionTitle:typeof e.workItemProjectionTitle=="string"&&e.workItemProjectionTitle?e.workItemProjectionTitle:void 0,runtimeTaskId:typeof e.runtimeTaskId=="string"&&e.runtimeTaskId?e.runtimeTaskId:void 0,executionTurnId:typeof e.executionTurnId=="string"&&e.executionTurnId?e.executionTurnId:void 0,roleName:typeof e.roleName=="string"&&e.roleName?e.roleName:void 0,detail:typeof e.detail=="string"&&e.detail?e.detail:void 0}}function VI(e,t){return e.type===t.type&&(e.workItemProjectionId??"")===(t.workItemProjectionId??"")&&(e.workItemTurnType??"")===(t.workItemTurnType??"")&&(e.workItemProjectionTitle??"")===(t.workItemProjectionTitle??"")&&(e.executionTurnId??e.runtimeTaskId??"")===(t.executionTurnId??t.runtimeTaskId??"")&&(e.roleName??"")===(t.roleName??"")}function DV(e,t){return t.timestamp-e.timestamp<=Qm&&VI(e,t)&&(e.type==="thinking"||e.type==="tool_call")}function OV(e,t){return VI(e,t)&&(e.detail??"")===(t.detail??"")&&t.timestamp-e.timestamp<=Qm}function LV(e,t){const n=t.type==="tool_call"?"tool_call":"thinking";return{...e,...t,timestamp:t.timestamp,detail:uv(e.detail??"",t.detail??"",n)||void 0}}function UI(e,t,n=100){const r=MV(t),i=e[e.length-1];return i?OV(i,r)?ml([...e.slice(0,-1),{...i,timestamp:r.timestamp}],n):DV(i,r)?ml([...e.slice(0,-1),LV(i,r)],n):ml([...e,r],n):[r]}function qI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,r)=>UI(n,r,t),[])}function dv(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function zV(e){return String(e??"").trim().toLowerCase()==="custom"?"custom":"corporate"}function GI(e){const t=String(e.execMode??"").trim().toLowerCase(),n=String(e.companyProfile??"").trim().toLowerCase(),r=String(e.orgId??"").trim(),o=t.length>0?dv(t):n==="custom"||r?"org":dv(t);return o==="org"?{...e,execMode:"org",companyProfile:"custom",orgId:r||void 0}:o==="company"?{...e,execMode:"company",companyProfile:"corporate",orgId:void 0}:{...e,execMode:"task",companyProfile:void 0,orgId:void 0}}const gf=100,PV=new Set(["done","failed","cancelled"]);function BV(e,t,n){const r=n,i=new Map(t.filter(c=>c.projectId===r).map(c=>[c.taskId,c])),o=new Set,a=[];for(const c of e){if(c.projectId!==r)continue;const d=i.get(c.taskId);d?(a.push(d),o.add(c.taskId)):a.push(c)}for(const c of t)c.projectId!==r||o.has(c.taskId)||(a.push(c),o.add(c.taskId));return a}function $V(e,t){const n=g=>GI({...g,progressLog:FI(g.progressLog??[],gf),workItemLog:qI(g.workItemLog??[],gf)}),r=g=>{const x=String(g.execMode??"").trim().toLowerCase();return x==="company"||x==="org"||x==="custom"||!!g.isCompanyRuntime||!!g.parentSessionId||!!g.workItemProjectionId||!!g.roleWorkItems||!!g.executorRoleWorkItems||!!g.orgId},i=g=>{const x=String(g.execMode??"").trim().toLowerCase(),v=String(g.companyProfile??"").trim().toLowerCase(),k=String(g.orgId??"").trim();return x==="task"&&(!v||v==="corporate")&&!k&&!g.isCompanyRuntime&&!g.parentSessionId&&!g.workItemProjectionId&&!g.workItemRoleId&&!g.roleWorkItems&&!g.executorRoleWorkItems},o=(g,x)=>{const v=g.execMode,k=x.execMode;return!v||v==="task"&&k&&k!=="task"&&!i(g)&&(r(g)||r(x))?k:v},a=(g,x,v)=>{const k=g[v],S=x[v];return!k||k==="native"&&S&&S!=="native"?S:k},c=(g,x)=>Object.prototype.hasOwnProperty.call(g,x),d=(g,x,v)=>c(g,v)?g[v]:x[v],m=(g,x)=>{const v=typeof g.updatedAt=="number"&&Number.isFinite(g.updatedAt)?g.updatedAt:void 0,k=typeof x.updatedAt=="number"&&Number.isFinite(x.updatedAt)?x.updatedAt:void 0;return v===void 0?k??Date.now():k===void 0?v:Math.max(k,v)},h=(g,x)=>g.runtimeControlState==="suspending"&&x.runtimeControlState==="running"?{...x,runtimeControlState:"suspending",canStop:!1,canResume:g.canResume??!1,pendingRuntimeCheckpointId:g.pendingRuntimeCheckpointId??x.pendingRuntimeCheckpointId,stopIntentId:g.stopIntentId??x.stopIntentId}:x,p=(g,x,v)=>{const k=g[v];if(k!=null)return k;if(!(PV.has(g.status)||g.status!=="running"&&g.runtimeControlState!=="running"&&g.runtimeControlState!=="suspending"&&g.runtimeControlState!=="resuming"))return x[v]};switch(t.type){case"SET":{if(t.reset)return t.sessions.map(n);const x=new Map(e.map(v=>[v.taskId,v]));return t.sessions.map(v=>{const k=x.get(v.taskId);if(!k)return n(v);const S=h(k,v);return n({...v,updatedAt:m(v,k),execMode:o(v,k),preferredAgent:a(v,k,"preferredAgent"),draftAssistantText:k.draftAssistantText??v.draftAssistantText,draftUpdatedAt:k.draftUpdatedAt??v.draftUpdatedAt,draftIteration:k.draftIteration??v.draftIteration,draftTurnId:k.draftTurnId??v.draftTurnId,agentStatus:p(v,k,"agentStatus"),currentTool:p(v,k,"currentTool"),displayTool:p(v,k,"displayTool"),toolElapsedMs:p(v,k,"toolElapsedMs"),lastToolSummary:p(v,k,"lastToolSummary"),contextTokens:k.contextTokens??v.contextTokens,contextWindow:k.contextWindow??v.contextWindow,contextRemainingPct:k.contextRemainingPct??v.contextRemainingPct,inputTokens:k.inputTokens??v.inputTokens,outputTokens:k.outputTokens??v.outputTokens,totalTokens:k.totalTokens??v.totalTokens,turnCostUsd:k.turnCostUsd??v.turnCostUsd,sessionCostUsd:k.sessionCostUsd??v.sessionCostUsd,pendingPermissionCount:k.pendingPermissionCount??v.pendingPermissionCount,drainMode:k.drainMode??v.drainMode,workItemProjectionId:v.workItemProjectionId??k.workItemProjectionId,workItemTurnType:v.workItemTurnType??k.workItemTurnType,companyProfile:d(v,k,"companyProfile"),orgId:d(v,k,"orgId"),workItemRoleId:v.workItemRoleId??k.workItemRoleId,workItemRoleName:v.workItemRoleName??k.workItemRoleName,workItemGate:v.workItemGate??k.workItemGate,roleWorkItems:v.roleWorkItems??k.roleWorkItems,executorRoleWorkItems:v.executorRoleWorkItems??k.executorRoleWorkItems,employeeAssignment:v.employeeAssignment??k.employeeAssignment,selectedExecutionAgent:a(v,k,"selectedExecutionAgent"),runtimeControlState:S.runtimeControlState??k.runtimeControlState,canStop:S.canStop??k.canStop,canResume:S.canResume??k.canResume,resumeParentTaskId:v.resumeParentTaskId??k.resumeParentTaskId,resumeParentSessionId:v.resumeParentSessionId??k.resumeParentSessionId,pendingRuntimeCheckpointId:S.pendingRuntimeCheckpointId??k.pendingRuntimeCheckpointId,stopIntentId:S.stopIntentId??k.stopIntentId,residentStatus:k.residentStatus??v.residentStatus,actionableInboxCount:k.actionableInboxCount??v.actionableInboxCount,protocolBacklogCount:k.protocolBacklogCount??v.protocolBacklogCount,notificationBacklogCount:k.notificationBacklogCount??v.notificationBacklogCount,latestNotification:k.latestNotification??v.latestNotification,latestPreview:v.latestPreview??k.latestPreview,latestSender:v.latestSender??k.latestSender,latestMessageId:v.latestMessageId??k.latestMessageId,indexLoaded:v.indexLoaded??k.indexLoaded,detailLoaded:k.detailLoaded??v.detailLoaded,fullLoaded:k.fullLoaded??v.fullLoaded,hasMore:v.hasMore??k.hasMore,summaryHasMore:v.summaryHasMore??k.summaryHasMore,fullHasMore:v.fullHasMore??k.fullHasMore,detailLoading:v.detailLoading??k.detailLoading,detailError:v.detailError??k.detailError,viewGeneration:v.viewGeneration??k.viewGeneration,progressLog:k.progressLog&&k.progressLog.length>0?k.progressLog:v.progressLog,workItemLog:k.workItemLog&&k.workItemLog.length>0?k.workItemLog:v.workItemLog,lastRuntimeEventType:k.lastRuntimeEventType??v.lastRuntimeEventType,activeSubagents:k.activeSubagents??v.activeSubagents,permissionRequests:k.permissionRequests??v.permissionRequests,handoffContext:v.handoffContext??k.handoffContext,handoffTo:v.handoffTo??k.handoffTo})})}case"ADD":const g=n(t.session);return e.some(x=>x.taskId===t.session.taskId)?e.map(x=>x.taskId===t.session.taskId?n({...x,...g,progressLog:g.progressLog.length>0?g.progressLog:x.progressLog,workItemLog:(g.workItemLog??[]).length>0?g.workItemLog:x.workItemLog,messageCount:Math.max(x.messageCount??0,g.messageCount??0),updatedAt:Math.max(x.updatedAt??0,g.updatedAt??0),execMode:o(g,x),preferredAgent:a(g,x,"preferredAgent"),workItemProjectionId:g.workItemProjectionId??x.workItemProjectionId,workItemTurnType:g.workItemTurnType??x.workItemTurnType,companyProfile:d(g,x,"companyProfile"),orgId:d(g,x,"orgId"),workItemRoleId:g.workItemRoleId??x.workItemRoleId,workItemRoleName:g.workItemRoleName??x.workItemRoleName,workItemGate:g.workItemGate??x.workItemGate,roleWorkItems:g.roleWorkItems??x.roleWorkItems,executorRoleWorkItems:g.executorRoleWorkItems??x.executorRoleWorkItems,employeeAssignment:g.employeeAssignment??x.employeeAssignment,selectedExecutionAgent:a(g,x,"selectedExecutionAgent"),handoffContext:g.handoffContext??x.handoffContext,handoffTo:g.handoffTo??x.handoffTo,latestPreview:g.latestPreview??x.latestPreview,latestSender:g.latestSender??x.latestSender,latestMessageId:g.latestMessageId??x.latestMessageId,indexLoaded:g.indexLoaded??x.indexLoaded,detailLoaded:g.detailLoaded??x.detailLoaded,fullLoaded:g.fullLoaded??x.fullLoaded,hasMore:g.hasMore??x.hasMore,summaryHasMore:g.summaryHasMore??x.summaryHasMore,fullHasMore:g.fullHasMore??x.fullHasMore,detailLoading:g.detailLoading??x.detailLoading,detailError:g.detailError??x.detailError,viewGeneration:g.viewGeneration??x.viewGeneration}):x):[g,...e];case"UPDATE":return e.map(x=>x.taskId===t.taskId?(()=>{const v=h(x,t.partial);return n({...x,...v,updatedAt:m(v,x),runtimeControlState:v.runtimeControlState??x.runtimeControlState,canStop:v.canStop??x.canStop,canResume:v.canResume??x.canResume,resumeParentTaskId:v.resumeParentTaskId??x.resumeParentTaskId,resumeParentSessionId:v.resumeParentSessionId??x.resumeParentSessionId,pendingRuntimeCheckpointId:v.pendingRuntimeCheckpointId??x.pendingRuntimeCheckpointId,stopIntentId:v.stopIntentId??x.stopIntentId,roleWorkItems:v.roleWorkItems??x.roleWorkItems,executorRoleWorkItems:v.executorRoleWorkItems??x.executorRoleWorkItems,execMode:d(v,x,"execMode"),companyProfile:d(v,x,"companyProfile"),orgId:d(v,x,"orgId"),isCompanyRuntime:v.isCompanyRuntime??x.isCompanyRuntime,workItemProjectionId:v.workItemProjectionId??x.workItemProjectionId,workItemTurnType:v.workItemTurnType??x.workItemTurnType,workItemRoleId:v.workItemRoleId??x.workItemRoleId,workItemRoleName:v.workItemRoleName??x.workItemRoleName,workItemGate:v.workItemGate??x.workItemGate,employeeAssignment:v.employeeAssignment??x.employeeAssignment,selectedExecutionAgent:v.selectedExecutionAgent??x.selectedExecutionAgent,activeSubagents:v.activeSubagents??x.activeSubagents,permissionRequests:v.permissionRequests??x.permissionRequests,contextTokens:v.contextTokens??x.contextTokens,contextWindow:v.contextWindow??x.contextWindow,contextRemainingPct:v.contextRemainingPct??x.contextRemainingPct,inputTokens:v.inputTokens??x.inputTokens,outputTokens:v.outputTokens??x.outputTokens,totalTokens:v.totalTokens??x.totalTokens,turnCostUsd:v.turnCostUsd??x.turnCostUsd,sessionCostUsd:v.sessionCostUsd??x.sessionCostUsd,...t.partial.progressLog?{progressLog:t.partial.progressLog}:{},...t.partial.workItemLog?{workItemLog:t.partial.workItemLog}:{}})})():x);case"DELETE":return e.filter(x=>x.taskId!==t.taskId);case"APPEND_PROGRESS":return e.map(x=>x.taskId!==t.taskId?x:{...x,progressLog:HI(x.progressLog,t.entry,gf),updatedAt:Math.max(x.updatedAt,t.entry.timestamp)});case"APPEND_DRAFT":return e.map(x=>{if(x.taskId!==t.taskId)return x;const v=t.turnId??x.draftTurnId,k=!!t.turnId&&!!x.draftTurnId&&t.turnId!==x.draftTurnId;return{...x,draftAssistantText:`${k?"":x.draftAssistantText??""}${t.text}`,draftUpdatedAt:t.timestamp,draftIteration:t.iteration??x.draftIteration,draftTurnId:v,updatedAt:Math.max(x.updatedAt,t.timestamp)}});case"CLEAR_DRAFT":return e.map(x=>x.taskId===t.taskId?{...x,draftAssistantText:void 0,draftUpdatedAt:void 0,draftIteration:void 0,draftTurnId:void 0}:x);case"CLEAR_PROGRESS":return e.map(x=>x.taskId===t.taskId?{...x,progressLog:[]}:x);case"APPEND_WORK_ITEM_PROGRESS":return e.map(x=>x.taskId!==t.taskId?x:{...x,workItemLog:UI(x.workItemLog??[],t.entry,gf)});case"SET_COMPANY_RUNTIME":return e.map(x=>x.taskId===t.taskId?{...x,isCompanyRuntime:t.isCompanyRuntime}:x);default:return e}}function HV(){const[e,t]=C.useReducer($V,[]),[n,r]=C.useState(null),[i,o]=C.useState("default"),a=C.useMemo(()=>e.find(w=>w.taskId===n)??null,[e,n]),c=C.useCallback(w=>{w.projectId===i&&t({type:"ADD",session:w})},[i]),d=C.useCallback(w=>{t({type:"DELETE",taskId:w})},[]),m=C.useCallback(w=>{r(w)},[]),h=C.useCallback((w,j)=>{t({type:"UPDATE",taskId:w,partial:j})},[]),p=C.useCallback((w,j)=>{t({type:"APPEND_PROGRESS",taskId:w,entry:j})},[]),g=C.useCallback((w,j,N,O)=>{t({type:"APPEND_DRAFT",taskId:w,text:j,iteration:N,turnId:O,timestamp:Date.now()})},[]),x=C.useCallback(w=>{t({type:"CLEAR_DRAFT",taskId:w})},[]),v=C.useCallback(w=>{t({type:"CLEAR_PROGRESS",taskId:w})},[]),k=C.useCallback((w,j)=>{t({type:"APPEND_WORK_ITEM_PROGRESS",taskId:w,entry:j})},[]),S=C.useCallback((w,j)=>{t({type:"SET_COMPANY_RUNTIME",taskId:w,isCompanyRuntime:j})},[]),b=C.useCallback((w,j,N)=>{const O=w||"default",R=O!==i,L=N?.preserveExistingWhenIncomingPartial&&!R?BV(e,j,O):j.filter(I=>I.projectId===O);o(O),t({type:"SET",sessions:L,reset:R}),r(I=>!R&&I&&(L.some(D=>D.taskId===I)||N?.preserveActiveWhenMissing)?I:null)},[i,e]);return C.useMemo(()=>({scopeProjectId:i,sessions:e,activeSessionId:n,activeSession:a,createSession:c,deleteSession:d,setActiveSession:m,updateSession:h,appendProgress:p,appendDraft:g,clearDraft:x,clearProgress:v,appendWorkItemProgress:k,setCompanyRuntime:S,initFromBackend:b}),[i,e,n,a,c,d,m,h,p,g,x,v,k,S,b])}function CC(e){return e.trim()||"default"}function FV(e,t){switch(t.type){case"SET":return{projects:t.projects,activeProjectId:CC(t.activeId)};case"ADD":return e.projects.some(n=>n.id===t.project.id)?e:{...e,projects:[...e.projects,t.project]};case"REMOVE":{const n=e.projects.filter(i=>i.id!==t.id),r=e.activeProjectId===t.id?"default":e.activeProjectId;return{projects:n,activeProjectId:r}}case"SET_ACTIVE":return{...e,activeProjectId:CC(t.id)};default:return e}}function VV(){const[e,t]=C.useReducer(FV,{projects:[{id:"default",name:"default"}],activeProjectId:"default"}),n=C.useCallback((a,c)=>{t({type:"SET",projects:a,activeId:c})},[]),r=C.useCallback(a=>{t({type:"ADD",project:a})},[]),i=C.useCallback(a=>{t({type:"REMOVE",id:a})},[]),o=C.useCallback(a=>{t({type:"SET_ACTIVE",id:a})},[]);return C.useMemo(()=>({projects:e.projects,activeProjectId:e.activeProjectId,initFromBackend:n,addProject:r,removeProject:i,setActiveProject:o}),[e,n,r,i,o])}const jC={active:{label:"Working",cls:"exec-badge-running"},waiting:{label:"Waiting",cls:"exec-badge-idle"},pending:{label:"Pending",cls:"exec-badge-pending"},done:{label:"Done",cls:"exec-badge-done"},failed:{label:"Failed",cls:"exec-badge-failed"}},yf={todo:{label:"To do",cls:"exec-badge-pending"},"in-progress":{label:"In progress",cls:"exec-badge-running"},"in-review":{label:"In review",cls:"exec-badge-idle"},done:{label:"Done",cls:"exec-badge-done"},failed:{label:"Failed",cls:"exec-badge-failed"},cancelled:{label:"Cancelled",cls:"exec-badge-cancelled"}};function UV(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"now";if(t<60)return`${t}s ago`;const n=Math.floor(t/60);if(n<60)return`${n}m ago`;const r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function xy(e){const t=String(e??"").trim();return t?t.replace(/[_-]/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function qV(e){return e.phase==="failed"?yf.failed:e.phase==="cancelled"?yf.cancelled:yf[e.kanbanColumn]??yf.todo}function GV(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function WV(e){const t=e.activitySections??[];return t.length>0?t.reduce((n,r)=>n+(r.entries?.length??0),0):e.progressLog.length}function YV({sections:e,fallbackEntries:t,sessionStatus:n}){const r=(e??[]).filter(i=>(i.entries?.length??0)>0||!!i.runtimeTaskId);return r.length>0?u.jsx("div",{className:"exec-activity-sections",children:r.map((i,o)=>{const a=i.entries??[],c=`${i.runtimeTaskId||i.kind}:${o}`;return u.jsxs("section",{className:"exec-activity-section",children:[u.jsxs("div",{className:"exec-activity-section-head",children:[u.jsx("span",{className:"exec-activity-section-title",children:i.title}),i.roleName&&u.jsx("span",{className:"exec-activity-section-role",children:i.roleName}),a.length>0&&u.jsx("span",{className:"exec-section-count",children:a.length})]}),a.length>0?u.jsx(Cl,{entries:a,sessionStatus:n,expandedByDefault:!0}):u.jsx("div",{className:"exec-section-empty",children:"No runtime activity yet"})]},c)})}):!t||t.length===0?u.jsx("div",{className:"exec-section-empty",children:"No activity recorded yet"}):u.jsx(Cl,{entries:t,sessionStatus:n,expandedByDefault:!0})}function EC({role:e,focusedWorkItemId:t,focusedExecutionTurnId:n,agents:r,onClose:i}){const o=C.useMemo(()=>e.workItems.slice().sort((w,j)=>w.createdAt-j.createdAt),[e.workItems]),c=C.useMemo(()=>o.find(w=>!!t&&w.workItemId===t||!!n&&w.executionTurnId===n)??o[o.length-1]??null,[n,t,o])?.workItemId,[d,m]=C.useState(()=>{const w=new Set;return c&&w.add(c),w}),h=C.useRef(new Set);C.useEffect(()=>{!c||h.current.has(c)||(h.current.add(c),m(w=>{if(w.has(c))return w;const j=new Set(w);return j.add(c),j}))},[c]);const p=C.useCallback(w=>{m(j=>{const N=new Set(j);return N.has(w)?N.delete(w):N.add(w),N})},[]),g=C.useRef(null),x=C.useRef(null);C.useEffect(()=>{!c||x.current===c||(x.current=c,g.current?.scrollIntoView({behavior:"smooth",block:"nearest"}))},[c]);const v=C.useCallback(w=>{w.key==="Escape"&&i()},[i]);C.useEffect(()=>(document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)),[v]);const k=r.find(w=>w.agent_id===e.roleId),S=e.roleName||k?.name||xy(e.roleId)||"Role",b=jC[e.aggregatedStatus]??jC.pending;return u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"exec-panel-backdrop",onClick:i}),u.jsxs("div",{className:"exec-panel",children:[u.jsxs("div",{className:"exec-panel-header",children:[u.jsxs("div",{className:"exec-panel-title-row",children:[u.jsx(yl,{}),u.jsx("h3",{className:"exec-panel-title",children:S}),u.jsx("span",{className:`exec-badge ${b.cls}`,children:b.label}),u.jsxs("span",{className:"exec-panel-task-count",children:[o.length," Work Item",o.length===1?"":"s"]})]}),u.jsx("button",{className:"exec-panel-close",onClick:i,title:"Close (Esc)",children:u.jsx(Lm,{})})]}),u.jsxs("div",{className:"exec-panel-identity",children:[u.jsx("div",{className:"exec-panel-avatar",children:S.charAt(0).toUpperCase()}),u.jsxs("div",{className:"exec-panel-agent-info",children:[u.jsx("span",{className:"exec-panel-agent-name",children:S}),u.jsx("span",{className:"exec-panel-agent-role",children:xy(e.roleId)}),e.roleSessionId&&u.jsx("span",{className:"exec-panel-employee",children:e.roleSessionId})]})]}),u.jsxs("div",{className:"exec-panel-body",children:[o.length===0&&u.jsx("div",{className:"exec-section-empty",children:"No work items yet"}),o.map((w,j)=>{const N=w.workItemId===c,O=d.has(w.workItemId),R=qV(w),L=WV(w);return u.jsxs("div",{ref:N?g:null,className:`exec-task-card${N?" exec-task-card-focused":""}`,children:[u.jsxs("button",{type:"button",className:"exec-task-card-header",onClick:()=>p(w.workItemId),title:O?"Collapse":"Expand",children:[u.jsxs("span",{className:"exec-task-card-index",children:["Work item #",j+1]}),u.jsx("span",{className:"exec-task-card-title",children:w.title||w.workItemId}),u.jsx("span",{className:`exec-badge ${R.cls}`,children:R.label}),u.jsx("span",{className:"exec-task-card-time",children:UV(w.updatedAt)}),u.jsx("span",{className:`exec-task-card-chevron${O?" open":""}`,"aria-hidden":"true",children:"▸"})]}),O&&u.jsxs("div",{className:"exec-task-card-body",children:[u.jsxs("div",{className:"exec-task-card-projection",children:[u.jsx(Om,{}),u.jsx("span",{children:xy(w.kind)||"Work item"}),w.workItemProjectionId&&u.jsx("code",{children:w.workItemProjectionId}),w.executionTurnId&&u.jsx("span",{className:"exec-inline-tag",children:"Execution Turn"}),w.isReviewTarget&&u.jsx("span",{className:"exec-inline-tag",children:"Review target"}),w.executorRoleName&&u.jsx("span",{children:w.executorRoleName})]}),u.jsxs("div",{className:"exec-section",children:[u.jsxs("div",{className:"exec-section-header",children:[u.jsx(yl,{}),u.jsx("span",{children:"Activity"}),u.jsx("span",{className:"exec-section-count",children:L})]}),u.jsx("div",{className:"exec-section-content exec-activity-scroll",children:u.jsx(YV,{sections:w.activitySections,fallbackEntries:w.progressLog,sessionStatus:GV(w)})})]})]})]},w.workItemId)})]})]})]})}function XV({projects:e,activeId:t,onSelect:n,onCreate:r,onDelete:i}){const[o,a]=C.useState(!1),[c,d]=C.useState(""),[m,h]=C.useState(null),p=C.useCallback(()=>{const x=c.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-|-$/g,"");x&&(r(x),d(""),a(!1))},[c,r]),g=C.useCallback(()=>{!m||!i||(i(m),h(null))},[m,i]);return u.jsxs("div",{className:"project-selector",style:{display:"flex",alignItems:"center",gap:6},children:[u.jsx("select",{className:"theme-select",value:t,onChange:x=>n(x.target.value),title:"Switch project",children:e.map(x=>u.jsx("option",{value:x.id,children:x.name},x.id))}),o?u.jsxs("form",{onSubmit:x=>{x.preventDefault(),p()},style:{display:"flex",gap:4},children:[u.jsx("input",{autoFocus:!0,className:"theme-select",value:c,placeholder:"project-name",onChange:x=>d(x.target.value),onKeyDown:x=>{x.key==="Escape"&&a(!1)},style:{width:120}}),u.jsx("button",{type:"submit",className:"pill-btn",style:{fontSize:11,padding:"2px 8px"},children:"+"})]}):u.jsx("button",{className:"pill-btn",onClick:()=>a(!0),title:"New project",style:{fontSize:11,padding:"2px 8px"},children:"+"}),i&&t!=="default"&&!m&&u.jsx("button",{className:"pill-btn",onClick:()=>h(t),title:"Delete project",style:{fontSize:11,padding:"2px 8px",color:"#ef4444"},children:"Del"}),m&&u.jsx("div",{className:"project-delete-confirm",style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.5)"},children:u.jsxs("div",{style:{background:"var(--bg-surface, #1e1e2e)",borderRadius:12,padding:"24px 32px",maxWidth:400,boxShadow:"0 8px 32px rgba(0,0,0,0.4)",textAlign:"center"},children:[u.jsxs("p",{style:{margin:"0 0 8px",fontWeight:600,fontSize:15},children:['Delete project "',m,'"?']}),u.jsx("p",{style:{margin:"0 0 20px",fontSize:13,opacity:.7},children:"All sessions, messages, tasks, and agent data in this project will be permanently deleted. This action cannot be undone."}),u.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"center"},children:[u.jsx("button",{className:"pill-btn",onClick:()=>h(null),style:{padding:"6px 18px",fontSize:13},children:"Cancel"}),u.jsx("button",{className:"pill-btn",onClick:g,style:{padding:"6px 18px",fontSize:13,background:"#ef4444",color:"#fff"},children:"Delete"})]})]})})]})}const KV=80;function ZV(e){const t=Date.now()/1e3,n=Math.max(0,t-e);if(n<60)return"just now";if(n<3600)return`${Math.floor(n/60)}m ago`;if(n<86400)return`${Math.floor(n/3600)}h ago`;if(n<604800)return`${Math.floor(n/86400)}d ago`;try{return new Date(e*1e3).toLocaleDateString()}catch{return""}}function NC(e){return(e.organization_name||e.name).trim()||e.name}function QV(e){const t=e.trim();return t.length>0&&t.length<=KV&&!/[\\/]/.test(t)&&!/[\u0000-\u001f]/.test(t)}function JV(e){return e.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]+/g,"_").replace(/_+/g,"_").replace(/^[_-]+|[_-]+$/g,"").slice(0,64)||"org"}function eU({className:e}){return u.jsxs("svg",{className:e,width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0,children:[u.jsx("path",{d:"M8 1.5L1.5 4.5L8 7.5L14.5 4.5L8 1.5Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"}),u.jsx("path",{d:"M2 8L8 10.8L14 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.6"}),u.jsx("path",{d:"M2 11.5L8 14.2L14 11.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.35"})]})}function tU({className:e}){return u.jsx("svg",{className:e,width:"10",height:"10",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:u.jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}function nU({className:e}){return u.jsxs("svg",{className:e,width:"11",height:"11",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:[u.jsx("circle",{cx:"5",cy:"5",r:"3.2",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("path",{d:"M7.5 7.5L10 10",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]})}function rU({savedOrgs:e,activeName:t,isDirty:n,onRefresh:r,onSaveAs:i,onLoad:o,onDelete:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(""),[p,g]=C.useState(0),[x,v]=C.useState(!1),[k,S]=C.useState(""),[b,w]=C.useState(null),[j,N]=C.useState(null),O=C.useRef(null),R=C.useRef(null);C.useEffect(()=>{N(null)},[t,e]);const L=(e??[]).filter(Y=>!m.trim()||Y.name.toLowerCase().includes(m.trim().toLowerCase())),I=C.useRef(!1);C.useEffect(()=>{c&&!I.current&&(I.current=!0,r())},[c,r]),C.useEffect(()=>{x&&R.current?.focus()},[x]),C.useEffect(()=>{g(Y=>Math.min(Y,Math.max(0,L.length-1)))},[L.length]),C.useEffect(()=>{if(!c)return;const Y=Q=>{O.current&&!O.current.contains(Q.target)&&D()};return document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[c]);const D=C.useCallback(()=>{d(!1),h(""),g(0),v(!1),S(""),w(null)},[]),M=C.useCallback(Y=>{if(Y===t){D();return}N(Y),o(Y),D()},[o,D,t]),A=C.useCallback(Y=>{a(Y),w(null)},[a]),$=k.trim(),W=QV($),B=JV($),V=(e??[]).some(Y=>Y.name===B||NC(Y).toLowerCase()===$.toLowerCase()),H=C.useCallback(()=>{W&&(i($,V),v(!1),S(""),D())},[W,$,V,i,D]),U=Y=>{if(Y.key==="Escape"){Y.preventDefault(),D();return}if(x){Y.key==="Enter"&&(Y.preventDefault(),H());return}if(Y.key==="ArrowDown")Y.preventDefault(),g(Q=>Math.min(Q+1,Math.max(0,L.length-1)));else if(Y.key==="ArrowUp")Y.preventDefault(),g(Q=>Math.max(0,Q-1));else if(Y.key==="Enter"){const Q=L[p];Q&&M(Q.name)}else if((Y.key==="Backspace"||Y.key==="Delete")&&(Y.metaKey||Y.ctrlKey)){const Q=L[p];Q&&(Y.preventDefault(),w(Q.name))}};return u.jsxs("div",{className:"sos-wrap",ref:O,children:[u.jsxs("button",{type:"button",className:"sos-pill","data-open":c?"true":"false",onClick:()=>d(Y=>!Y),"aria-haspopup":"listbox","aria-expanded":c,title:t?`Active saved architecture: ${t}`:"No saved architecture loaded",children:[u.jsx(eU,{className:"sos-pill-glyph"}),t?u.jsx("span",{className:"sos-pill-name",children:t}):u.jsx("span",{className:"sos-pill-name sos-pill-name--placeholder",children:"draft"}),n&&u.jsx("span",{className:"sos-pill-dirty","aria-label":"Modified since opened"}),u.jsx(tU,{className:"sos-pill-caret"})]}),c&&u.jsxs("div",{className:"sos-popover",role:"listbox",onKeyDown:U,tabIndex:-1,children:[u.jsxs("div",{className:"sos-search-row",children:[u.jsx(nU,{className:"sos-search-glyph"}),u.jsx("input",{type:"text",className:"sos-search-input",placeholder:"Search architectures…",value:m,onChange:Y=>{h(Y.target.value),g(0)},autoFocus:!0,onKeyDown:U}),u.jsx("kbd",{className:"sos-search-hint",children:"↑↓ ↵"})]}),u.jsx("div",{className:"sos-list",children:e===null?u.jsx("div",{className:"sos-empty",children:"Loading…"}):L.length===0?u.jsx("div",{className:"sos-empty",children:(e??[]).length===0?"No saved architectures.":"No matches."}):L.map((Y,Q)=>{const q=t===Y.name,G=p===Q,J=NC(Y);return u.jsxs("div",{className:`sos-row${q?" sos-row--active":""}`,"data-highlighted":G?"true":"false",onMouseEnter:()=>g(Q),onClick:()=>M(Y.name),role:"option","aria-selected":q,children:[u.jsxs("div",{className:"sos-row-meta",children:[u.jsx("span",{className:"sos-row-name",children:J}),u.jsxs("span",{className:"sos-row-stats",children:[J!==Y.name&&`${Y.name} · `,Y.roles_count," ",Y.roles_count===1?"role":"roles"," · ",Y.employees_count," ",Y.employees_count===1?"employee":"employees"," · ",ZV(Y.saved_at)]})]}),j===Y.name?u.jsx("span",{className:"sos-row-loading",children:"loading…"}):q?u.jsx("span",{className:"sos-row-active-chip",children:"active"}):b===Y.name?u.jsx("button",{type:"button",className:"sos-row-delete sos-row-delete--confirm",onClick:P=>{P.stopPropagation(),A(Y.name)},children:"confirm"}):u.jsx("button",{type:"button",className:"sos-row-delete",onClick:P=>{P.stopPropagation(),w(Y.name)},title:"Delete",children:"delete"})]},Y.name)})}),u.jsxs("div",{className:"sos-save-as",children:[x?u.jsxs("div",{className:"sos-save-as-form",children:[u.jsx("input",{ref:R,type:"text",className:"sos-save-as-input",placeholder:"Organization name",value:k,onChange:Y=>S(Y.target.value),onKeyDown:U}),u.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:H,disabled:!W,children:V?"Overwrite copy":"Save as copy"}),u.jsx("button",{type:"button",className:"btn btn-ghost btn-sm",onClick:()=>{v(!1),S("")},children:"Cancel"})]}):u.jsx("button",{type:"button",className:"sos-save-as-trigger",onClick:()=>v(!0),children:"+ Save as copy..."}),x&&k&&!W&&u.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Use up to 80 characters. Slashes are not allowed."}),x&&W&&V&&u.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Name exists - this will overwrite that copy."})]})]})]})}const iU=["leader","strategy","target","code","terminal","database","settings","bug","design","pen","layout","marketing","analytics","writing","clipboard","security","support","idea","person","team","camera","calendar","group","ai","generic"],mu={leader:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M5 16L3 5l5.5 5L12 4l3.5 6L21 5l-2 11H5zm0 2h14v2H5v-2z'/%3E%3C/svg%3E",strategy:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 22H5v-2h14v2zM17.16 8.26C18.22 9.63 19 10.85 19 12c0 2.21-3.13 4-7 4s-7-1.79-7-4c0-1.15.78-2.37 1.84-3.74C7.83 7.03 9 5.67 9 4.5a2.5 2.5 0 0 1 5 0c0 1.17 1.17 2.53 2.16 3.76zM12 6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z'/%3E%3C/svg%3E",target:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-14c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E",code:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0L19.2 12l-4.6-4.6L16 6l6 6-6 6-1.4-1.4z'/%3E%3C/svg%3E",terminal:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V8h16v10zM13 14h4v2h-4zm-3.41-.82l-2.59 2.59L8.41 17 12 13.41 8.41 9.82 7 11.24l2.59 2.59z'/%3E%3C/svg%3E",database:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4zm0 18c-4.42 0-8-1.34-8-3v-2.5c1.74 1.5 4.71 2.5 8 2.5s6.26-1 8-2.5V17c0 1.66-3.58 3-8 3zm0-5c-4.42 0-8-1.34-8-3v-2.5c1.74 1.5 4.71 2.5 8 2.5s6.26-1 8-2.5V12c0 1.66-3.58 3-8 3zm0-5c-4.42 0-8-1.34-8-3s3.58-3 8-3 8 1.34 8 3-3.58 3-8 3z'/%3E%3C/svg%3E",settings:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19.43 12.98c.04-.32.07-.64.07-.98 0-.34-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98 0 .33.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z'/%3E%3C/svg%3E",bug:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z'/%3E%3C/svg%3E",design:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9zm5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9zm-5 0C8.67 9 8 8.33 8 7.5S8.67 6 9.5 6s1.5.67 1.5 1.5S10.33 9 9.5 9zm-3 4c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z'/%3E%3C/svg%3E",pen:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E",layout:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",marketing:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M18 11v2h4v-2h-4zm-2 6.61c.96.71 2.21 1.65 3.2 2.39.4-.53.8-1.07 1.2-1.6-.99-.74-2.24-1.68-3.2-2.4-.4.54-.8 1.08-1.2 1.61zM20.4 5.6c-.4-.53-.8-1.07-1.2-1.6-.99.74-2.24 1.68-3.2 2.4.4.53.8 1.07 1.2 1.6.96-.72 2.21-1.65 3.2-2.4zM4 9c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1v4h2v-4h1l5 3V6L8 9H4zm11.5 3c0-1.33-.58-2.53-1.5-3.35v6.69c.92-.81 1.5-2.01 1.5-3.34z'/%3E%3C/svg%3E",analytics:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99l1.5 1.5z'/%3E%3C/svg%3E",writing:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E",clipboard:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3E%3C/svg%3E",security:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11V11.99z'/%3E%3C/svg%3E",support:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z'/%3E%3C/svg%3E",idea:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7z'/%3E%3C/svg%3E",person:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",camera:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 15.2c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2 3.2 1.43 3.2 3.2-1.43 3.2-3.2 3.2zM9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3C/svg%3E",calendar:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z'/%3E%3C/svg%3E",group:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12.75c1.63 0 3.07.39 4.24.9 1.08.48 1.76 1.56 1.76 2.73L18 18H6l.01-1.62c0-1.17.68-2.25 1.76-2.73 1.17-.51 2.6-.9 4.23-.9zM4 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm1.13 1.1c-.37-.06-.74-.1-1.13-.1-.99 0-1.93.21-2.78.58C.48 14.9 0 15.62 0 16.43V18h4.5v-1.61c0-.83.23-1.61.63-2.29zM20 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4 3.43c0-.81-.48-1.53-1.22-1.85-.85-.37-1.79-.58-2.78-.58-.39 0-.76.04-1.13.1.4.68.63 1.46.63 2.29V18H24v-1.57zM12 6c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3z'/%3E%3C/svg%3E",ai:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z'/%3E%3C/svg%3E",generic:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function Uu(e){return e?e.startsWith("data:")?e:mu[e]??mu.generic:mu.generic}const Yc=["file_read","file_write","file_edit","file_search","list_dir","shell_exec","web_search","web_fetch","todo_read","todo_write","browser_navigate","browser_navigate_back","browser_snapshot","browser_wait_for","browser_scroll","browser_click","browser_type","browser_select_option","browser_take_screenshot","browser_evaluate","browser_close"],sU=[{label:"Files",prefix:"file_",tools:Yc.filter(e=>e.startsWith("file_"))},{label:"Shell",prefix:"shell_",tools:Yc.filter(e=>e==="shell_exec")},{label:"Web",prefix:"web_",tools:Yc.filter(e=>e.startsWith("web_"))},{label:"TODOs",prefix:"todo_",tools:Yc.filter(e=>e.startsWith("todo_"))},{label:"Browser",prefix:"browser_",tools:Yc.filter(e=>e.startsWith("browser_"))}],oU=["codex","cursor","claude_code","opencode"],aU=[{value:"auto",label:"Auto",hint:"System picks native or external based on role config"},{value:"native",label:"Native",hint:"Run directly in-process via LLM"},{value:"external",label:"External",hint:"Delegate to an external agent (codex, cursor, etc.)"}];function lU({role:e,allRoles:t,employees:n,readOnly:r,onUpdateRole:i,onDeleteRole:o,onClose:a}){const[c,d]=C.useState(e.name),[m,h]=C.useState(e.responsibility),[p,g]=C.useState(e.reports_to),[x,v]=C.useState(e.icon??null),[k,S]=C.useState(()=>new Set(e.can_spawn)),[b,w]=C.useState(()=>new Set(e.tools)),[j,N]=C.useState(e.runtime_policy?.execution_strategy??"auto"),[O,R]=C.useState(e.preferred_external_agent??null),[L,I]=C.useState((e.prompt_refs??[]).join(` -`)),[D,M]=C.useState(!1),A=C.useRef(e.role_id);C.useEffect(()=>{A.current!==e.role_id&&(A.current=e.role_id,d(e.name),h(e.responsibility),g(e.reports_to),v(e.icon??null),S(new Set(e.can_spawn)),w(new Set(e.tools)),N(e.runtime_policy?.execution_strategy??"auto"),R(e.preferred_external_agent??null),I((e.prompt_refs??[]).join(` -`)),M(!1))},[e]);const $=C.useRef({}),W=C.useRef(null),B=C.useRef(e.role_id);C.useEffect(()=>{B.current=e.role_id},[e.role_id]);const V=C.useCallback(()=>{W.current&&(clearTimeout(W.current),W.current=null);const oe=$.current;$.current={},Object.keys(oe).length!==0&&i(B.current,oe)},[i]),H=C.useCallback(oe=>{r||($.current={...$.current,...oe},W.current&&clearTimeout(W.current),W.current=setTimeout(V,500))},[V,r]);C.useEffect(()=>()=>{W.current&&(clearTimeout(W.current),W.current=null);const oe=$.current;Object.keys(oe).length>0&&($.current={},i(B.current,oe))},[i]);const U=oe=>{d(oe),H({name:oe})},Y=oe=>{h(oe),H({responsibility:oe})},Q=oe=>{g(oe),H({reports_to:oe})},q=oe=>{v(oe),H({icon:oe})},G=oe=>{N(oe),H({execution_strategy:oe})},J=oe=>{R(oe),H({preferred_external_agent:oe})},P=oe=>{I(oe);const Ne=oe.split(` -`).map(Ee=>Ee.trim()).filter(Boolean);H({prompt_refs:Ne})},K=oe=>{const Ne=new Set(k);Ne.has(oe)?Ne.delete(oe):Ne.add(oe),S(Ne),H({can_spawn:Array.from(Ne)})},ee=oe=>{const Ne=new Set(b);Ne.has(oe)?Ne.delete(oe):Ne.add(oe),w(Ne),H({tools:Array.from(Ne)})},te=C.useMemo(()=>t.filter(oe=>oe.role_id!==e.role_id),[t,e.role_id]),ie=C.useMemo(()=>n.filter(oe=>(oe.role_ids?.length?oe.role_ids:[oe.role_id]).includes(e.role_id)).length,[n,e.role_id]),se=C.useMemo(()=>L.split(` -`).filter(oe=>oe.trim()).length,[L]),de=()=>{if(!D){M(!0);return}V(),o(e.role_id)};return u.jsxs("aside",{className:"ri-panel","aria-label":`Inspector for role ${e.name}`,children:[u.jsxs("header",{className:"ri-panel-header",children:[u.jsx("img",{src:Uu(x),alt:"",className:"ri-panel-icon"}),u.jsxs("div",{className:"ri-panel-title-wrap",children:[u.jsx("h3",{className:"ri-panel-title",children:c||"(unnamed)"}),u.jsx("code",{className:"ri-panel-id",children:e.role_id})]}),u.jsx("button",{className:"btn btn-ghost btn-sm ri-panel-close",onClick:a,title:"Close (Esc)",children:"✕"})]}),u.jsxs("div",{className:"ri-panel-body",children:[u.jsxs(Qa,{title:"Identity",defaultExpanded:!0,children:[u.jsx(ji,{label:"Name",children:u.jsx("input",{className:"ri-text-input",value:c,onChange:oe=>U(oe.target.value),disabled:r})}),u.jsx(ji,{label:"Responsibility",children:u.jsx("textarea",{className:"ri-textarea",rows:3,value:m,onChange:oe=>Y(oe.target.value),disabled:r})}),u.jsx(ji,{label:"Icon",children:u.jsx(cU,{value:x,onChange:q,readOnly:r})})]}),u.jsxs(Qa,{title:"Hierarchy",defaultExpanded:!0,children:[u.jsx(ji,{label:"Reports to",children:u.jsxs("select",{className:"ri-select",value:p,onChange:oe=>Q(oe.target.value),disabled:r,children:[u.jsx("option",{value:"owner",children:"You (Owner)"}),te.map(oe=>u.jsx("option",{value:oe.role_id,children:oe.name},oe.role_id))]})}),u.jsx(ji,{label:"Can delegate to",children:u.jsx(uU,{allIds:te.map(oe=>oe.role_id),labelFor:oe=>te.find(Ne=>Ne.role_id===oe)?.name??oe,selected:k,onToggle:K,readOnly:r})}),u.jsx(ji,{label:"Employees assigned",children:u.jsx("span",{className:"ri-meta-value",children:ie})})]}),u.jsx(Qa,{title:`Tools (${b.size})`,children:u.jsx(dU,{tools:b,onToggle:ee,readOnly:r})}),u.jsx(Qa,{title:`Prompts (${se})`,children:u.jsx(ji,{label:"Prompt refs / inline",children:u.jsx("textarea",{className:"ri-textarea ri-textarea-mono",rows:5,placeholder:"One prompt ref or inline instruction per line",value:L,onChange:oe=>P(oe.target.value),disabled:r})})}),u.jsxs(Qa,{title:"Runtime policy",children:[u.jsx(ji,{label:"Execution strategy",children:u.jsx("div",{className:"ri-radio-group",children:aU.map(oe=>u.jsxs("label",{className:"ri-radio",title:oe.hint,children:[u.jsx("input",{type:"radio",name:`exec-strategy-${e.role_id}`,value:oe.value,checked:j===oe.value,onChange:()=>G(oe.value),disabled:r}),oe.label]},oe.value))})}),j==="external"&&u.jsx(ji,{label:"Preferred external agent",children:u.jsxs("select",{className:"ri-select",value:O??"",onChange:oe=>J(oe.target.value||null),disabled:r,children:[u.jsx("option",{value:"",children:"(any)"}),oU.map(oe=>u.jsx("option",{value:oe,children:oe},oe))]})})]}),u.jsxs(Qa,{title:"Advanced",children:[u.jsx(ji,{label:"Role type",children:u.jsx("span",{className:"ri-meta-value",children:e.role_type??"worker"})}),u.jsx(ji,{label:"Skills",children:u.jsx("span",{className:"ri-meta-value",children:e.skill_refs&&e.skill_refs.length>0?e.skill_refs.join(", "):"(none)"})}),u.jsx(ji,{label:"Artifact contract",children:u.jsx("span",{className:"ri-meta-value",children:e.artifact_contract_ref??"(none)"})})]})]}),!r&&u.jsx("footer",{className:"ri-panel-footer",children:u.jsx("button",{className:`btn btn-sm ${D?"btn-danger":"btn-ghost"}`,onClick:de,onBlur:()=>M(!1),children:D?"Confirm delete?":"Delete role"})})]})}function Qa({title:e,defaultExpanded:t=!1,children:n}){const[r,i]=C.useState(t);return u.jsxs("section",{className:`ri-group${r?" is-expanded":""}`,children:[u.jsxs("button",{className:"ri-group-header",onClick:()=>i(o=>!o),children:[u.jsx("span",{className:"ri-group-caret",children:r?"▾":"▸"}),u.jsx("span",{className:"ri-group-title",children:e})]}),r&&u.jsx("div",{className:"ri-group-body",children:n})]})}function ji({label:e,children:t}){return u.jsxs("div",{className:"ri-field",children:[u.jsx("label",{className:"ri-field-label",children:e}),u.jsx("div",{className:"ri-field-control",children:t})]})}function cU({value:e,onChange:t,readOnly:n}){const[r,i]=C.useState(!1);return u.jsxs("div",{className:"ri-icon-picker",children:[u.jsxs("button",{className:"ri-icon-picker-trigger",onClick:()=>!n&&i(o=>!o),disabled:n,children:[u.jsx("img",{src:Uu(e),alt:"",className:"ri-icon-picker-current"}),u.jsx("span",{className:"ri-icon-picker-label",children:e??"generic"})]}),r&&u.jsxs("div",{className:"ri-icon-picker-popover",children:[u.jsx("button",{className:`ri-icon-option${e===null?" is-active":""}`,onClick:()=>{t(null),i(!1)},title:"Default icon",children:u.jsx("img",{src:mu.generic,alt:""})}),iU.filter(o=>o!=="generic").map(o=>u.jsx("button",{className:`ri-icon-option${e===o?" is-active":""}`,onClick:()=>{t(o),i(!1)},title:o,children:u.jsx("img",{src:mu[o],alt:o})},o))]})]})}function uU({allIds:e,labelFor:t,selected:n,onToggle:r,readOnly:i}){const[o,a]=C.useState(!1),c=e.filter(d=>!n.has(d));return u.jsxs("div",{className:"ri-multiselect",children:[u.jsxs("div",{className:"ri-chips",children:[Array.from(n).map(d=>u.jsxs("span",{className:"ri-chip",children:[t(d),!i&&u.jsx("button",{className:"ri-chip-x",onClick:()=>r(d),title:"Remove",children:"×"})]},d)),!i&&c.length>0&&u.jsx("button",{className:"ri-chip-add",onClick:()=>a(d=>!d),children:"+ Add"}),n.size===0&&i&&u.jsx("span",{className:"ri-meta-value",children:"(none)"})]}),o&&!i&&u.jsx("div",{className:"ri-multiselect-popover",children:c.map(d=>u.jsx("button",{className:"ri-multiselect-option",onClick:()=>{r(d),a(!1)},children:t(d)},d))})]})}function dU({tools:e,onToggle:t,readOnly:n}){return u.jsx("div",{className:"ri-toolcheck",children:sU.map(r=>u.jsxs("fieldset",{className:"ri-toolcheck-group",children:[u.jsx("legend",{className:"ri-toolcheck-legend",children:r.label}),u.jsx("div",{className:"ri-toolcheck-items",children:r.tools.map(i=>u.jsxs("label",{className:"ri-toolcheck-item",children:[u.jsx("input",{type:"checkbox",checked:e.has(i),onChange:()=>t(i),disabled:n}),u.jsx("span",{className:"ri-toolcheck-name",children:i.replace(r.prefix,"")||i})]},i))})]},r.prefix))})}function vo(e,t){return typeof e=="function"?e(t):e}function pi(e,t){return n=>{t.setState(r=>({...r,[e]:vo(n,r[e])}))}}function Jm(e){return e instanceof Function}function fU(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function mU(e,t){const n=[],r=i=>{i.forEach(o=>{n.push(o);const a=t(o);a!=null&&a.length&&r(a)})};return r(e),n}function yt(e,t,n){let r=[],i;return o=>{let a;n.key&&n.debug&&(a=Date.now());const c=e(o);if(!(c.length!==r.length||c.some((h,p)=>r[p]!==h)))return i;r=c;let m;if(n.key&&n.debug&&(m=Date.now()),i=t(...c),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){const h=Math.round((Date.now()-a)*100)/100,p=Math.round((Date.now()-m)*100)/100,g=p/16,x=(v,k)=>{for(v=String(v);v.length<k;)v=" "+v;return v};console.info(`%c⏱ ${x(p,5)} /${x(h,5)} ms`,` - font-size: .6rem; - font-weight: bold; - color: hsl(${Math.max(0,Math.min(120-120*g,120))}deg 100% 31%);`,n?.key)}return i}}function xt(e,t,n,r){return{debug:()=>{var i;return(i=e?.debugAll)!=null?i:e[t]},key:!1,onChange:r}}function pU(e,t,n,r){const i=()=>{var a;return(a=o.getValue())!=null?a:e.options.renderFallbackValue},o={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:i,getContext:yt(()=>[e,n,t,o],(a,c,d,m)=>({table:a,column:c,row:d,cell:m,getValue:m.getValue,renderValue:m.renderValue}),xt(e.options,"debugCells"))};return e._features.forEach(a=>{a.createCell==null||a.createCell(o,n,t,e)},{}),o}function hU(e,t,n,r){var i,o;const c={...e._getDefaultColumnDef(),...t},d=c.accessorKey;let m=(i=(o=c.id)!=null?o:d?typeof String.prototype.replaceAll=="function"?d.replaceAll(".","_"):d.replace(/\./g,"_"):void 0)!=null?i:typeof c.header=="string"?c.header:void 0,h;if(c.accessorFn?h=c.accessorFn:d&&(d.includes(".")?h=g=>{let x=g;for(const k of d.split(".")){var v;x=(v=x)==null?void 0:v[k]}return x}:h=g=>g[c.accessorKey]),!m)throw new Error;let p={id:`${String(m)}`,accessorFn:h,parent:r,depth:n,columnDef:c,columns:[],getFlatColumns:yt(()=>[!0],()=>{var g;return[p,...(g=p.columns)==null?void 0:g.flatMap(x=>x.getFlatColumns())]},xt(e.options,"debugColumns")),getLeafColumns:yt(()=>[e._getOrderColumnsFn()],g=>{var x;if((x=p.columns)!=null&&x.length){let v=p.columns.flatMap(k=>k.getLeafColumns());return g(v)}return[p]},xt(e.options,"debugColumns"))};for(const g of e._features)g.createColumn==null||g.createColumn(p,e);return p}const Or="debugHeaders";function IC(e,t,n){var r;let o={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const a=[],c=d=>{d.subHeaders&&d.subHeaders.length&&d.subHeaders.map(c),a.push(d)};return c(o),a},getContext:()=>({table:e,header:o,column:t})};return e._features.forEach(a=>{a.createHeader==null||a.createHeader(o,e)}),o}const gU={createTable:e=>{e.getHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{var o,a;const c=(o=r?.map(p=>n.find(g=>g.id===p)).filter(Boolean))!=null?o:[],d=(a=i?.map(p=>n.find(g=>g.id===p)).filter(Boolean))!=null?a:[],m=n.filter(p=>!(r!=null&&r.includes(p.id))&&!(i!=null&&i.includes(p.id)));return xf(t,[...c,...m,...d],e)},xt(e.options,Or)),e.getCenterHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>(n=n.filter(o=>!(r!=null&&r.includes(o.id))&&!(i!=null&&i.includes(o.id))),xf(t,n,e,"center")),xt(e.options,Or)),e.getLeftHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var i;const o=(i=r?.map(a=>n.find(c=>c.id===a)).filter(Boolean))!=null?i:[];return xf(t,o,e,"left")},xt(e.options,Or)),e.getRightHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var i;const o=(i=r?.map(a=>n.find(c=>c.id===a)).filter(Boolean))!=null?i:[];return xf(t,o,e,"right")},xt(e.options,Or)),e.getFooterGroups=yt(()=>[e.getHeaderGroups()],t=>[...t].reverse(),xt(e.options,Or)),e.getLeftFooterGroups=yt(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),xt(e.options,Or)),e.getCenterFooterGroups=yt(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),xt(e.options,Or)),e.getRightFooterGroups=yt(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),xt(e.options,Or)),e.getFlatHeaders=yt(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Or)),e.getLeftFlatHeaders=yt(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Or)),e.getCenterFlatHeaders=yt(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Or)),e.getRightFlatHeaders=yt(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Or)),e.getCenterLeafHeaders=yt(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Or)),e.getLeftLeafHeaders=yt(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Or)),e.getRightLeafHeaders=yt(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Or)),e.getLeafHeaders=yt(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var i,o,a,c,d,m;return[...(i=(o=t[0])==null?void 0:o.headers)!=null?i:[],...(a=(c=n[0])==null?void 0:c.headers)!=null?a:[],...(d=(m=r[0])==null?void 0:m.headers)!=null?d:[]].map(h=>h.getLeafHeaders()).flat()},xt(e.options,Or))}};function xf(e,t,n,r){var i,o;let a=0;const c=function(g,x){x===void 0&&(x=1),a=Math.max(a,x),g.filter(v=>v.getIsVisible()).forEach(v=>{var k;(k=v.columns)!=null&&k.length&&c(v.columns,x+1)},0)};c(e);let d=[];const m=(g,x)=>{const v={depth:x,id:[r,`${x}`].filter(Boolean).join("_"),headers:[]},k=[];g.forEach(S=>{const b=[...k].reverse()[0],w=S.column.depth===v.depth;let j,N=!1;if(w&&S.column.parent?j=S.column.parent:(j=S.column,N=!0),b&&b?.column===j)b.subHeaders.push(S);else{const O=IC(n,j,{id:[r,x,j.id,S?.id].filter(Boolean).join("_"),isPlaceholder:N,placeholderId:N?`${k.filter(R=>R.column===j).length}`:void 0,depth:x,index:k.length});O.subHeaders.push(S),k.push(O)}v.headers.push(S),S.headerGroup=v}),d.push(v),x>0&&m(k,x-1)},h=t.map((g,x)=>IC(n,g,{depth:a,index:x}));m(h,a-1),d.reverse();const p=g=>g.filter(v=>v.column.getIsVisible()).map(v=>{let k=0,S=0,b=[0];v.subHeaders&&v.subHeaders.length?(b=[],p(v.subHeaders).forEach(j=>{let{colSpan:N,rowSpan:O}=j;k+=N,b.push(O)})):k=1;const w=Math.min(...b);return S=S+w,v.colSpan=k,v.rowSpan=S,{colSpan:k,rowSpan:S}});return p((i=(o=d[0])==null?void 0:o.headers)!=null?i:[]),d}const yU=(e,t,n,r,i,o,a)=>{let c={id:t,index:r,original:n,depth:i,parentId:a,_valuesCache:{},_uniqueValuesCache:{},getValue:d=>{if(c._valuesCache.hasOwnProperty(d))return c._valuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return c._valuesCache[d]=m.accessorFn(c.original,r),c._valuesCache[d]},getUniqueValues:d=>{if(c._uniqueValuesCache.hasOwnProperty(d))return c._uniqueValuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return m.columnDef.getUniqueValues?(c._uniqueValuesCache[d]=m.columnDef.getUniqueValues(c.original,r),c._uniqueValuesCache[d]):(c._uniqueValuesCache[d]=[c.getValue(d)],c._uniqueValuesCache[d])},renderValue:d=>{var m;return(m=c.getValue(d))!=null?m:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>mU(c.subRows,d=>d.subRows),getParentRow:()=>c.parentId?e.getRow(c.parentId,!0):void 0,getParentRows:()=>{let d=[],m=c;for(;;){const h=m.getParentRow();if(!h)break;d.push(h),m=h}return d.reverse()},getAllCells:yt(()=>[e.getAllLeafColumns()],d=>d.map(m=>pU(e,c,m,m.id)),xt(e.options,"debugRows")),_getAllCellsByColumnId:yt(()=>[c.getAllCells()],d=>d.reduce((m,h)=>(m[h.column.id]=h,m),{}),xt(e.options,"debugRows"))};for(let d=0;d<e._features.length;d++){const m=e._features[d];m==null||m.createRow==null||m.createRow(c,e)}return c},xU={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},WI=(e,t,n)=>{var r,i;const o=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((i=e.getValue(t))==null||(i=i.toString())==null||(i=i.toLowerCase())==null)&&i.includes(o))};WI.autoRemove=e=>Ui(e);const YI=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};YI.autoRemove=e=>Ui(e);const XI=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};XI.autoRemove=e=>Ui(e);const KI=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};KI.autoRemove=e=>Ui(e);const ZI=(e,t,n)=>!n.some(r=>{var i;return!((i=e.getValue(t))!=null&&i.includes(r))});ZI.autoRemove=e=>Ui(e)||!(e!=null&&e.length);const QI=(e,t,n)=>n.some(r=>{var i;return(i=e.getValue(t))==null?void 0:i.includes(r)});QI.autoRemove=e=>Ui(e)||!(e!=null&&e.length);const JI=(e,t,n)=>e.getValue(t)===n;JI.autoRemove=e=>Ui(e);const eT=(e,t,n)=>e.getValue(t)==n;eT.autoRemove=e=>Ui(e);const N0=(e,t,n)=>{let[r,i]=n;const o=e.getValue(t);return o>=r&&o<=i};N0.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,i=typeof n!="number"?parseFloat(n):n,o=t===null||Number.isNaN(r)?-1/0:r,a=n===null||Number.isNaN(i)?1/0:i;if(o>a){const c=o;o=a,a=c}return[o,a]};N0.autoRemove=e=>Ui(e)||Ui(e[0])&&Ui(e[1]);const Ms={includesString:WI,includesStringSensitive:YI,equalsString:XI,arrIncludes:KI,arrIncludesAll:ZI,arrIncludesSome:QI,equals:JI,weakEquals:eT,inNumberRange:N0};function Ui(e){return e==null||e===""}const vU={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:pi("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n?.getValue(e.id);return typeof r=="string"?Ms.includesString:typeof r=="number"?Ms.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?Ms.equals:Array.isArray(r)?Ms.arrIncludes:Ms.weakEquals},e.getFilterFn=()=>{var n,r;return Jm(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:Ms[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,i;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(i=>i.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const i=e.getFilterFn(),o=r?.find(h=>h.id===e.id),a=vo(n,o?o.value:void 0);if(TC(i,a,e)){var c;return(c=r?.filter(h=>h.id!==e.id))!=null?c:[]}const d={id:e.id,value:a};if(o){var m;return(m=r?.map(h=>h.id===e.id?d:h))!=null?m:[]}return r!=null&&r.length?[...r,d]:[d]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=i=>{var o;return(o=vo(t,i))==null?void 0:o.filter(a=>{const c=n.find(d=>d.id===a.id);if(c){const d=c.getFilterFn();if(TC(d,a.value,c))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function TC(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const bU=(e,t,n)=>n.reduce((r,i)=>{const o=i.getValue(e);return r+(typeof o=="number"?o:0)},0),_U=(e,t,n)=>{let r;return n.forEach(i=>{const o=i.getValue(e);o!=null&&(r>o||r===void 0&&o>=o)&&(r=o)}),r},kU=(e,t,n)=>{let r;return n.forEach(i=>{const o=i.getValue(e);o!=null&&(r<o||r===void 0&&o>=o)&&(r=o)}),r},SU=(e,t,n)=>{let r,i;return n.forEach(o=>{const a=o.getValue(e);a!=null&&(r===void 0?a>=a&&(r=i=a):(r>a&&(r=a),i<a&&(i=a)))}),[r,i]},wU=(e,t)=>{let n=0,r=0;if(t.forEach(i=>{let o=i.getValue(e);o!=null&&(o=+o)>=o&&(++n,r+=o)}),n)return r/n},CU=(e,t)=>{if(!t.length)return;const n=t.map(o=>o.getValue(e));if(!fU(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),i=n.sort((o,a)=>o-a);return n.length%2!==0?i[r]:(i[r-1]+i[r])/2},jU=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),EU=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,NU=(e,t)=>t.length,vy={sum:bU,min:_U,max:kU,extent:SU,mean:wU,median:CU,unique:jU,uniqueCount:EU,count:NU},IU={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:pi("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n?.getValue(e.id);if(typeof r=="number")return vy.sum;if(Object.prototype.toString.call(r)==="[object Date]")return vy.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return Jm(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:vy[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var i;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((i=n.subRows)!=null&&i.length)}}};function TU(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(o=>!t.includes(o.id));return n==="remove"?r:[...t.map(o=>e.find(a=>a.id===o)).filter(Boolean),...r]}const RU={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:pi("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=yt(n=>[pu(t,n)],n=>n.findIndex(r=>r.id===e.id),xt(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=pu(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const i=pu(t,n);return((r=i[i.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=yt(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>i=>{let o=[];if(!(t!=null&&t.length))o=i;else{const a=[...t],c=[...i];for(;c.length&&a.length;){const d=a.shift(),m=c.findIndex(h=>h.id===d);m>-1&&o.push(c.splice(m,1)[0])}o=[...o,...c]}return TU(o,n,r)},xt(e.options,"debugTable"))}},by=()=>({left:[],right:[]}),AU={getInitialState:e=>({columnPinning:by(),...e}),getDefaultOptions:e=>({onColumnPinningChange:pi("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(i=>i.id).filter(Boolean);t.setColumnPinning(i=>{var o,a;if(n==="right"){var c,d;return{left:((c=i?.left)!=null?c:[]).filter(p=>!(r!=null&&r.includes(p))),right:[...((d=i?.right)!=null?d:[]).filter(p=>!(r!=null&&r.includes(p))),...r]}}if(n==="left"){var m,h;return{left:[...((m=i?.left)!=null?m:[]).filter(p=>!(r!=null&&r.includes(p))),...r],right:((h=i?.right)!=null?h:[]).filter(p=>!(r!=null&&r.includes(p)))}}return{left:((o=i?.left)!=null?o:[]).filter(p=>!(r!=null&&r.includes(p))),right:((a=i?.right)!=null?a:[]).filter(p=>!(r!=null&&r.includes(p)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var i,o,a;return((i=r.columnDef.enablePinning)!=null?i:!0)&&((o=(a=t.options.enableColumnPinning)!=null?a:t.options.enablePinning)!=null?o:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(c=>c.id),{left:r,right:i}=t.getState().columnPinning,o=n.some(c=>r?.includes(c)),a=n.some(c=>i?.includes(c));return o?"left":a?"right":!1},e.getPinnedIndex=()=>{var n,r;const i=e.getIsPinned();return i?(n=(r=t.getState().columnPinning)==null||(r=r[i])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,i)=>{const o=[...r??[],...i??[]];return n.filter(a=>!o.includes(a.column.id))},xt(t.options,"debugRows")),e.getLeftVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"left"})),xt(t.options,"debugRows")),e.getRightVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"right"})),xt(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?by():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:by())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var i,o;return!!((i=r.left)!=null&&i.length||(o=r.right)!=null&&o.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(i=>i.id===r)).filter(Boolean),xt(e.options,"debugColumns")),e.getRightLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(i=>i.id===r)).filter(Boolean),xt(e.options,"debugColumns")),e.getCenterLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const i=[...n??[],...r??[]];return t.filter(o=>!i.includes(o.id))},xt(e.options,"debugColumns"))}};function MU(e){return e||(typeof document<"u"?document:null)}const vf={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},_y=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),DU={getDefaultColumnDef:()=>vf,getInitialState:e=>({columnSizing:{},columnSizingInfo:_y(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:pi("columnSizing",e),onColumnSizingInfoChange:pi("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,i;const o=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:vf.minSize,(r=o??e.columnDef.size)!=null?r:vf.size),(i=e.columnDef.maxSize)!=null?i:vf.maxSize)},e.getStart=yt(n=>[n,pu(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((i,o)=>i+o.getSize(),0),xt(t.options,"debugColumns")),e.getAfter=yt(n=>[n,pu(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((i,o)=>i+o.getSize(),0),xt(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...i}=n;return i})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=i=>{if(i.subHeaders.length)i.subHeaders.forEach(r);else{var o;n+=(o=i.column.getSize())!=null?o:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),i=r?.getCanResize();return o=>{if(!r||!i||(o.persist==null||o.persist(),ky(o)&&o.touches&&o.touches.length>1))return;const a=e.getSize(),c=e?e.getLeafHeaders().map(b=>[b.column.id,b.column.getSize()]):[[r.id,r.getSize()]],d=ky(o)?Math.round(o.touches[0].clientX):o.clientX,m={},h=(b,w)=>{typeof w=="number"&&(t.setColumnSizingInfo(j=>{var N,O;const R=t.options.columnResizeDirection==="rtl"?-1:1,L=(w-((N=j?.startOffset)!=null?N:0))*R,I=Math.max(L/((O=j?.startSize)!=null?O:0),-.999999);return j.columnSizingStart.forEach(D=>{let[M,A]=D;m[M]=Math.round(Math.max(A+A*I,0)*100)/100}),{...j,deltaOffset:L,deltaPercentage:I}}),(t.options.columnResizeMode==="onChange"||b==="end")&&t.setColumnSizing(j=>({...j,...m})))},p=b=>h("move",b),g=b=>{h("end",b),t.setColumnSizingInfo(w=>({...w,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},x=MU(n),v={moveHandler:b=>p(b.clientX),upHandler:b=>{x?.removeEventListener("mousemove",v.moveHandler),x?.removeEventListener("mouseup",v.upHandler),g(b.clientX)}},k={moveHandler:b=>(b.cancelable&&(b.preventDefault(),b.stopPropagation()),p(b.touches[0].clientX),!1),upHandler:b=>{var w;x?.removeEventListener("touchmove",k.moveHandler),x?.removeEventListener("touchend",k.upHandler),b.cancelable&&(b.preventDefault(),b.stopPropagation()),g((w=b.touches[0])==null?void 0:w.clientX)}},S=OU()?{passive:!1}:!1;ky(o)?(x?.addEventListener("touchmove",k.moveHandler,S),x?.addEventListener("touchend",k.upHandler,S)):(x?.addEventListener("mousemove",v.moveHandler,S),x?.addEventListener("mouseup",v.upHandler,S)),t.setColumnSizingInfo(b=>({...b,startOffset:d,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:c,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?_y():(n=e.initialState.columnSizingInfo)!=null?n:_y())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,i)=>r+i.getSize(),0))!=null?t:0}}};let bf=null;function OU(){if(typeof bf=="boolean")return bf;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return bf=e,bf}function ky(e){return e.type==="touchstart"}const LU={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:pi("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const i=e.columns;return(n=i.length?i.some(o=>o.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=yt(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),xt(t.options,"debugRows")),e.getVisibleCells=yt(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,i)=>[...n,...r,...i],xt(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>yt(()=>[r(),r().filter(i=>i.getIsVisible()).map(i=>i.id).join("_")],i=>i.filter(o=>o.getIsVisible==null?void 0:o.getIsVisible()),xt(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((i,o)=>({...i,[o.id]:n||!(o.getCanHide!=null&&o.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function pu(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const zU={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},PU={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:pi("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,i,o;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((i=t.options.enableFilters)!=null?i:!0)&&((o=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?o:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>Ms.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return Jm(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:Ms[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},BU={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:pi("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,i;if(!t){e._queue(()=>{t=!0});return}if((r=(i=e.options.autoResetAll)!=null?i:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var i,o;e.setExpanded(r?{}:(i=(o=e.initialState)==null?void 0:o.expanded)!=null?i:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(i=>!i.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(o=>{const a=o.split(".");r=Math.max(r,a.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var i;const o=r===!0?!0:!!(r!=null&&r[e.id]);let a={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(c=>{a[c]=!0}):a=r,n=(i=n)!=null?i:!o,!o&&n)return{...a,[e.id]:!0};if(o&&!n){const{[e.id]:c,...d}=a;return d}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r?.[e.id])},e.getCanExpand=()=>{var n,r,i;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((i=e.subRows)!=null&&i.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},fv=0,mv=10,Sy=()=>({pageIndex:fv,pageSize:mv}),$U={getInitialState:e=>({...e,pagination:{...Sy(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:pi("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,i;if(!t){e._queue(()=>{t=!0});return}if((r=(i=e.options.autoResetAll)!=null?i:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const i=o=>vo(r,o);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(i)},e.resetPagination=r=>{var i;e.setPagination(r?Sy():(i=e.initialState.pagination)!=null?i:Sy())},e.setPageIndex=r=>{e.setPagination(i=>{let o=vo(r,i.pageIndex);const a=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return o=Math.max(0,Math.min(o,a)),{...i,pageIndex:o}})},e.resetPageIndex=r=>{var i,o;e.setPageIndex(r?fv:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageIndex)!=null?i:fv)},e.resetPageSize=r=>{var i,o;e.setPageSize(r?mv:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageSize)!=null?i:mv)},e.setPageSize=r=>{e.setPagination(i=>{const o=Math.max(1,vo(r,i.pageSize)),a=i.pageSize*i.pageIndex,c=Math.floor(a/o);return{...i,pageIndex:c,pageSize:o}})},e.setPageCount=r=>e.setPagination(i=>{var o;let a=vo(r,(o=e.options.pageCount)!=null?o:-1);return typeof a=="number"&&(a=Math.max(-1,a)),{...i,pageCount:a}}),e.getPageOptions=yt(()=>[e.getPageCount()],r=>{let i=[];return r&&r>0&&(i=[...new Array(r)].fill(null).map((o,a)=>a)),i},xt(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,i=e.getPageCount();return i===-1?!0:i===0?!1:r<i-1},e.previousPage=()=>e.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},wy=()=>({top:[],bottom:[]}),HU={getInitialState:e=>({rowPinning:wy(),...e}),getDefaultOptions:e=>({onRowPinningChange:pi("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,i)=>{const o=r?e.getLeafRows().map(d=>{let{id:m}=d;return m}):[],a=i?e.getParentRows().map(d=>{let{id:m}=d;return m}):[],c=new Set([...a,e.id,...o]);t.setRowPinning(d=>{var m,h;if(n==="bottom"){var p,g;return{top:((p=d?.top)!=null?p:[]).filter(k=>!(c!=null&&c.has(k))),bottom:[...((g=d?.bottom)!=null?g:[]).filter(k=>!(c!=null&&c.has(k))),...Array.from(c)]}}if(n==="top"){var x,v;return{top:[...((x=d?.top)!=null?x:[]).filter(k=>!(c!=null&&c.has(k))),...Array.from(c)],bottom:((v=d?.bottom)!=null?v:[]).filter(k=>!(c!=null&&c.has(k)))}}return{top:((m=d?.top)!=null?m:[]).filter(k=>!(c!=null&&c.has(k))),bottom:((h=d?.bottom)!=null?h:[]).filter(k=>!(c!=null&&c.has(k)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:i}=t.options;return typeof r=="function"?r(e):(n=r??i)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:i}=t.getState().rowPinning,o=n.some(c=>r?.includes(c)),a=n.some(c=>i?.includes(c));return o?"top":a?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const i=e.getIsPinned();if(!i)return-1;const o=(n=i==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(a=>{let{id:c}=a;return c});return(r=o?.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?wy():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:wy())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var i,o;return!!((i=r.top)!=null&&i.length||(o=r.bottom)!=null&&o.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var i;return((i=e.options.keepPinnedRows)==null||i?(n??[]).map(a=>{const c=e.getRow(a,!0);return c.getIsAllParentsExpanded()?c:null}):(n??[]).map(a=>t.find(c=>c.id===a))).filter(Boolean).map(a=>({...a,position:r}))},e.getTopRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),xt(e.options,"debugRows")),e.getBottomRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),xt(e.options,"debugRows")),e.getCenterRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const i=new Set([...n??[],...r??[]]);return t.filter(o=>!i.has(o.id))},xt(e.options,"debugRows"))}},FU={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:pi("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},i=e.getPreGroupedRowModel().flatRows;return t?i.forEach(o=>{o.getCanSelect()&&(r[o.id]=!0)}):i.forEach(o=>{delete r[o.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),i={...n};return e.getRowModel().rows.forEach(o=>{pv(i,o.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?Cy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getFilteredSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?Cy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getGroupedSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?Cy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(i=>i.getCanSelect()&&!n[i.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(i=>i.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(i=>!n[i.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const i=e.getIsSelected();t.setRowSelection(o=>{var a;if(n=typeof n<"u"?n:!i,e.getCanSelect()&&i===n)return o;const c={...o};return pv(c,e.id,n,(a=r?.selectChildren)!=null?a:!0,t),c})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return I0(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return hv(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return hv(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var i;n&&e.toggleSelected((i=r.target)==null?void 0:i.checked)}}}},pv=(e,t,n,r,i)=>{var o;const a=i.getRow(t,!0);n?(a.getCanMultiSelect()||Object.keys(e).forEach(c=>delete e[c]),a.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(o=a.subRows)!=null&&o.length&&a.getCanSelectSubRows()&&a.subRows.forEach(c=>pv(e,c.id,n,r,i))};function Cy(e,t){const n=e.getState().rowSelection,r=[],i={},o=function(a,c){return a.map(d=>{var m;const h=I0(d,n);if(h&&(r.push(d),i[d.id]=d),(m=d.subRows)!=null&&m.length&&(d={...d,subRows:o(d.subRows)}),h)return d}).filter(Boolean)};return{rows:o(t.rows),flatRows:r,rowsById:i}}function I0(e,t){var n;return(n=t[e.id])!=null?n:!1}function hv(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let i=!0,o=!1;return e.subRows.forEach(a=>{if(!(o&&!i)&&(a.getCanSelect()&&(I0(a,t)?o=!0:i=!1),a.subRows&&a.subRows.length)){const c=hv(a,t);c==="all"?o=!0:(c==="some"&&(o=!0),i=!1)}}),i?"all":o?"some":!1}const gv=/([0-9]+)/gm,VU=(e,t,n)=>tT(jo(e.getValue(n)).toLowerCase(),jo(t.getValue(n)).toLowerCase()),UU=(e,t,n)=>tT(jo(e.getValue(n)),jo(t.getValue(n))),qU=(e,t,n)=>T0(jo(e.getValue(n)).toLowerCase(),jo(t.getValue(n)).toLowerCase()),GU=(e,t,n)=>T0(jo(e.getValue(n)),jo(t.getValue(n))),WU=(e,t,n)=>{const r=e.getValue(n),i=t.getValue(n);return r>i?1:r<i?-1:0},YU=(e,t,n)=>T0(e.getValue(n),t.getValue(n));function T0(e,t){return e===t?0:e>t?1:-1}function jo(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function tT(e,t){const n=e.split(gv).filter(Boolean),r=t.split(gv).filter(Boolean);for(;n.length&&r.length;){const i=n.shift(),o=r.shift(),a=parseInt(i,10),c=parseInt(o,10),d=[a,c].sort();if(isNaN(d[0])){if(i>o)return 1;if(o>i)return-1;continue}if(isNaN(d[1]))return isNaN(a)?-1:1;if(a>c)return 1;if(c>a)return-1}return n.length-r.length}const Xc={alphanumeric:VU,alphanumericCaseSensitive:UU,text:qU,textCaseSensitive:GU,datetime:WU,basic:YU},XU={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:pi("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const i of n){const o=i?.getValue(e.id);if(Object.prototype.toString.call(o)==="[object Date]")return Xc.datetime;if(typeof o=="string"&&(r=!0,o.split(gv).length>1))return Xc.alphanumeric}return r?Xc.text:Xc.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof n?.getValue(e.id)=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return Jm(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:Xc[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const i=e.getNextSortingOrder(),o=typeof n<"u"&&n!==null;t.setSorting(a=>{const c=a?.find(x=>x.id===e.id),d=a?.findIndex(x=>x.id===e.id);let m=[],h,p=o?n:i==="desc";if(a!=null&&a.length&&e.getCanMultiSort()&&r?c?h="toggle":h="add":a!=null&&a.length&&d!==a.length-1?h="replace":c?h="toggle":h="replace",h==="toggle"&&(o||i||(h="remove")),h==="add"){var g;m=[...a,{id:e.id,desc:p}],m.splice(0,m.length-((g=t.options.maxMultiSortColCount)!=null?g:Number.MAX_SAFE_INTEGER))}else h==="toggle"?m=a.map(x=>x.id===e.id?{...x,desc:p}:x):h==="remove"?m=a.filter(x=>x.id!==e.id):m=[{id:e.id,desc:p}];return m})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,i;const o=e.getFirstSortDir(),a=e.getIsSorted();return a?a!==o&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(i=t.options.enableMultiRemove)!=null)||i)?!1:a==="desc"?"asc":"desc":o},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(i=>i.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(i=>i.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},KU=[gU,LU,RU,AU,xU,vU,zU,PU,XU,IU,BU,$U,HU,FU,DU];function ZU(e){var t,n;const r=[...KU,...(t=e._features)!=null?t:[]];let i={_features:r};const o=i._features.reduce((g,x)=>Object.assign(g,x.getDefaultOptions==null?void 0:x.getDefaultOptions(i)),{}),a=g=>i.options.mergeOptions?i.options.mergeOptions(o,g):{...o,...g};let d={...{},...(n=e.initialState)!=null?n:{}};i._features.forEach(g=>{var x;d=(x=g.getInitialState==null?void 0:g.getInitialState(d))!=null?x:d});const m=[];let h=!1;const p={_features:r,options:{...o,...e},initialState:d,_queue:g=>{m.push(g),h||(h=!0,Promise.resolve().then(()=>{for(;m.length;)m.shift()();h=!1}).catch(x=>setTimeout(()=>{throw x})))},reset:()=>{i.setState(i.initialState)},setOptions:g=>{const x=vo(g,i.options);i.options=a(x)},getState:()=>i.options.state,setState:g=>{i.options.onStateChange==null||i.options.onStateChange(g)},_getRowId:(g,x,v)=>{var k;return(k=i.options.getRowId==null?void 0:i.options.getRowId(g,x,v))!=null?k:`${v?[v.id,x].join("."):x}`},getCoreRowModel:()=>(i._getCoreRowModel||(i._getCoreRowModel=i.options.getCoreRowModel(i)),i._getCoreRowModel()),getRowModel:()=>i.getPaginationRowModel(),getRow:(g,x)=>{let v=(x?i.getPrePaginationRowModel():i.getRowModel()).rowsById[g];if(!v&&(v=i.getCoreRowModel().rowsById[g],!v))throw new Error;return v},_getDefaultColumnDef:yt(()=>[i.options.defaultColumn],g=>{var x;return g=(x=g)!=null?x:{},{header:v=>{const k=v.header.column.columnDef;return k.accessorKey?k.accessorKey:k.accessorFn?k.id:null},cell:v=>{var k,S;return(k=(S=v.renderValue())==null||S.toString==null?void 0:S.toString())!=null?k:null},...i._features.reduce((v,k)=>Object.assign(v,k.getDefaultColumnDef==null?void 0:k.getDefaultColumnDef()),{}),...g}},xt(e,"debugColumns")),_getColumnDefs:()=>i.options.columns,getAllColumns:yt(()=>[i._getColumnDefs()],g=>{const x=function(v,k,S){return S===void 0&&(S=0),v.map(b=>{const w=hU(i,b,S,k),j=b;return w.columns=j.columns?x(j.columns,w,S+1):[],w})};return x(g)},xt(e,"debugColumns")),getAllFlatColumns:yt(()=>[i.getAllColumns()],g=>g.flatMap(x=>x.getFlatColumns()),xt(e,"debugColumns")),_getAllFlatColumnsById:yt(()=>[i.getAllFlatColumns()],g=>g.reduce((x,v)=>(x[v.id]=v,x),{}),xt(e,"debugColumns")),getAllLeafColumns:yt(()=>[i.getAllColumns(),i._getOrderColumnsFn()],(g,x)=>{let v=g.flatMap(k=>k.getLeafColumns());return x(v)},xt(e,"debugColumns")),getColumn:g=>i._getAllFlatColumnsById()[g]};Object.assign(i,p);for(let g=0;g<i._features.length;g++){const x=i._features[g];x==null||x.createTable==null||x.createTable(i)}return i}function QU(){return e=>yt(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(i,o,a){o===void 0&&(o=0);const c=[];for(let m=0;m<i.length;m++){const h=yU(e,e._getRowId(i[m],m,a),i[m],m,o,void 0,a?.id);if(n.flatRows.push(h),n.rowsById[h.id]=h,c.push(h),e.options.getSubRows){var d;h.originalSubRows=e.options.getSubRows(i[m],m),(d=h.originalSubRows)!=null&&d.length&&(h.subRows=r(h.originalSubRows,o+1,h))}}return c};return n.rows=r(t),n},xt(e.options,"debugTable","getRowModel",()=>e._autoResetPageIndex()))}function JU(){return e=>yt(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;const r=e.getState().sorting,i=[],o=r.filter(d=>{var m;return(m=e.getColumn(d.id))==null?void 0:m.getCanSort()}),a={};o.forEach(d=>{const m=e.getColumn(d.id);m&&(a[d.id]={sortUndefined:m.columnDef.sortUndefined,invertSorting:m.columnDef.invertSorting,sortingFn:m.getSortingFn()})});const c=d=>{const m=d.map(h=>({...h}));return m.sort((h,p)=>{for(let x=0;x<o.length;x+=1){var g;const v=o[x],k=a[v.id],S=k.sortUndefined,b=(g=v?.desc)!=null?g:!1;let w=0;if(S){const j=h.getValue(v.id),N=p.getValue(v.id),O=j===void 0,R=N===void 0;if(O||R){if(S==="first")return O?-1:1;if(S==="last")return O?1:-1;w=O&&R?0:O?S:-S}}if(w===0&&(w=k.sortingFn(h,p,v.id)),w!==0)return b&&(w*=-1),k.invertSorting&&(w*=-1),w}return h.index-p.index}),m.forEach(h=>{var p;i.push(h),(p=h.subRows)!=null&&p.length&&(h.subRows=c(h.subRows))}),m};return{rows:c(n.rows),flatRows:i,rowsById:n.rowsById}},xt(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}function RC(e,t){return e?eq(e)?C.createElement(e,t):e:null}function eq(e){return tq(e)||typeof e=="function"||nq(e)}function tq(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function nq(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function rq(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=C.useState(()=>({current:ZU(t)})),[r,i]=C.useState(()=>n.current.initialState);return n.current.setOptions(o=>({...o,...e,state:{...r,...e.state},onStateChange:a=>{i(a),e.onStateChange==null||e.onStateChange(a)}})),n.current}const AC=["codex","cursor","claude_code","opencode"];function iq({roles:e,employees:t,selectedIds:n,onSelectRow:r,onUpdateRole:i,onDeleteRole:o,readOnly:a}){const[c,d]=C.useState([]),[m,h]=C.useState({}),[p,g]=C.useState(null),[x,v]=C.useState(""),k=C.useMemo(()=>{const I=new Map;for(const D of t){const M=D.role_ids?.length?D.role_ids:[D.role_id];for(const A of M)A&&I.set(A,(I.get(A)??0)+1)}return e.map(D=>({role_id:D.role_id,name:D.name,icon:D.icon??null,reports_to:D.reports_to,toolCount:D.tools?.length??0,agent:D.preferred_external_agent??null,employeeCount:I.get(D.role_id)??0}))},[e,t]),S=C.useMemo(()=>[{id:"owner",name:"Owner"},...e.map(I=>({id:I.role_id,name:I.name}))],[e]),b=I=>{const D=x.trim();D&&D!==e.find(M=>M.role_id===I)?.name&&i(I,{name:D}),g(null),v("")},w=C.useMemo(()=>[{id:"select",header:({table:I})=>u.jsx("input",{type:"checkbox",checked:I.getIsAllRowsSelected(),ref:D=>{D&&(D.indeterminate=I.getIsSomeRowsSelected()&&!I.getIsAllRowsSelected())},onChange:I.getToggleAllRowsSelectedHandler(),disabled:a,"aria-label":"Select all"}),cell:({row:I})=>u.jsx("input",{type:"checkbox",checked:I.getIsSelected(),onChange:I.getToggleSelectedHandler(),disabled:a,"aria-label":`Select ${I.original.role_id}`,onClick:D=>D.stopPropagation()}),size:32,enableSorting:!1},{id:"icon",header:"",cell:({row:I})=>u.jsx("img",{src:Uu(I.original.icon),alt:"",className:"rt-cell-icon"}),size:32,enableSorting:!1},{id:"name",header:"Name",accessorKey:"name",cell:({row:I})=>{const D=I.original;return p?.rowId===D.role_id&&p.col==="name"?u.jsx("input",{autoFocus:!0,className:"rt-inline-input",value:x,onChange:A=>v(A.target.value),onBlur:()=>b(D.role_id),onKeyDown:A=>{A.key==="Enter"?b(D.role_id):A.key==="Escape"&&(g(null),v(""))},onClick:A=>A.stopPropagation()}):u.jsx("span",{className:"rt-cell-name",onDoubleClick:A=>{a||(A.stopPropagation(),v(D.name),g({rowId:D.role_id,col:"name"}))},title:"Double-click to edit",children:D.name})}},{id:"role_id",header:"ID",accessorKey:"role_id",cell:({row:I})=>u.jsx("code",{className:"rt-cell-id",children:I.original.role_id})},{id:"reports_to",header:"Reports to",accessorKey:"reports_to",cell:({row:I})=>{const D=I.original;return u.jsx("select",{className:"rt-cell-select",value:D.reports_to,onChange:M=>i(D.role_id,{reports_to:M.target.value}),disabled:a,onClick:M=>M.stopPropagation(),children:S.filter(M=>M.id!==D.role_id).map(M=>u.jsx("option",{value:M.id,children:M.name},M.id))})}},{id:"toolCount",header:"Tools",accessorKey:"toolCount",cell:({row:I})=>u.jsx("span",{className:"rt-cell-count",children:I.original.toolCount}),size:64},{id:"agent",header:"Agent",accessorKey:"agent",cell:({row:I})=>{const D=I.original;return u.jsxs("select",{className:"rt-cell-select",value:D.agent??"",onChange:M=>i(D.role_id,{preferred_external_agent:M.target.value||null}),disabled:a,onClick:M=>M.stopPropagation(),children:[u.jsx("option",{value:"",children:"(auto)"}),AC.map(M=>u.jsx("option",{value:M,children:M},M))]})}},{id:"employeeCount",header:"People",accessorKey:"employeeCount",cell:({row:I})=>u.jsx("span",{className:"rt-cell-count",children:I.original.employeeCount}),size:64},{id:"actions",header:"",cell:({row:I})=>u.jsx("button",{className:"rt-cell-action",onClick:D=>{D.stopPropagation(),!a&&confirm(`Delete role "${I.original.name}"?`)&&o(I.original.role_id)},disabled:a,title:"Delete",children:"✕"}),size:40,enableSorting:!1}],[p,x,a,S,i,o]),j=rq({data:k,columns:w,state:{sorting:c,rowSelection:m},onSortingChange:d,onRowSelectionChange:h,enableRowSelection:!0,getRowId:I=>I.role_id,getCoreRowModel:QU(),getSortedRowModel:JU()}),N=Object.values(m).filter(Boolean).length,O=Object.keys(m).filter(I=>m[I]),R=I=>{a||(O.forEach(D=>i(D,{preferred_external_agent:I})),h({}))},L=()=>{a||confirm(`Delete ${N} roles? This cannot be undone.`)&&(O.forEach(I=>o(I)),h({}))};return u.jsxs("div",{className:"rt-container",children:[N>0&&!a&&u.jsxs("div",{className:"rt-bulk-bar",children:[u.jsxs("span",{className:"rt-bulk-count",children:[N," selected"]}),u.jsxs("select",{className:"rt-bulk-select",defaultValue:"",onChange:I=>{const D=I.target.value;D&&R(D==="__auto__"?null:D)},children:[u.jsx("option",{value:"",disabled:!0,children:"Change agent…"}),u.jsx("option",{value:"__auto__",children:"(auto)"}),AC.map(I=>u.jsx("option",{value:I,children:I},I))]}),u.jsx("button",{className:"btn btn-danger btn-sm",onClick:L,children:"Delete selected"}),u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>h({}),children:"Clear"})]}),u.jsx("div",{className:"rt-table-wrap",children:u.jsxs("table",{className:"rt-table",children:[u.jsx("thead",{children:j.getHeaderGroups().map(I=>u.jsx("tr",{children:I.headers.map(D=>u.jsxs("th",{style:{width:D.getSize()},className:D.column.getCanSort()?"rt-th-sortable":"",onClick:D.column.getToggleSortingHandler(),children:[RC(D.column.columnDef.header,D.getContext()),D.column.getIsSorted()==="asc"&&u.jsx("span",{className:"rt-sort-caret",children:" ▲"}),D.column.getIsSorted()==="desc"&&u.jsx("span",{className:"rt-sort-caret",children:" ▼"})]},D.id))},I.id))}),u.jsxs("tbody",{children:[j.getRowModel().rows.length===0&&u.jsx("tr",{children:u.jsx("td",{colSpan:9,className:"rt-empty",children:'No roles. Add one via the "+ Add role" button.'})}),j.getRowModel().rows.map(I=>{const D=n.includes(I.original.role_id);return u.jsx("tr",{className:`rt-row${I.getIsSelected()?" rt-row-checked":""}${D?" rt-row-active":""}`,onClick:()=>r(I.original.role_id),children:I.getVisibleCells().map(M=>u.jsx("td",{style:{width:M.column.getSize()},children:RC(M.column.columnDef.cell,M.getContext())},M.id))},I.id)})]})]})})]})}function dr(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n<e.length;n++)(r=dr(e[n]))!==""&&(t+=(t&&" ")+r);else for(let n in e)e[n]&&(t+=(t&&" ")+n);return t}var sq={value:()=>{}};function ep(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+"")||r in n||/[\s.]/.test(r))throw new Error("illegal type: "+r);n[r]=[]}return new Bf(n)}function Bf(e){this._=e}function oq(e,t){return e.trim().split(/^|\s+/).map(function(n){var r="",i=n.indexOf(".");if(i>=0&&(r=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}Bf.prototype=ep.prototype={constructor:Bf,on:function(e,t){var n=this._,r=oq(e+"",n),i,o=-1,a=r.length;if(arguments.length<2){for(;++o<a;)if((i=(e=r[o]).type)&&(i=aq(n[i],e.name)))return i;return}if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++o<a;)if(i=(e=r[o]).type)n[i]=MC(n[i],e.name,t);else if(t==null)for(i in n)n[i]=MC(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Bf(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=new Array(i),r=0,i,o;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(o=this._[e],r=0,i=o.length;r<i;++r)o[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var r=this._[e],i=0,o=r.length;i<o;++i)r[i].value.apply(t,n)}};function aq(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function MC(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=sq,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var yv="http://www.w3.org/1999/xhtml";const DC={svg:"http://www.w3.org/2000/svg",xhtml:yv,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function tp(e){var t=e+="",n=t.indexOf(":");return n>=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),DC.hasOwnProperty(t)?{space:DC[t],local:e}:e}function lq(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===yv&&t.documentElement.namespaceURI===yv?t.createElement(e):t.createElementNS(n,e)}}function cq(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function nT(e){var t=tp(e);return(t.local?cq:lq)(t)}function uq(){}function R0(e){return e==null?uq:function(){return this.querySelector(e)}}function dq(e){typeof e!="function"&&(e=R0(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var o=t[i],a=o.length,c=r[i]=new Array(a),d,m,h=0;h<a;++h)(d=o[h])&&(m=e.call(d,d.__data__,h,o))&&("__data__"in d&&(m.__data__=d.__data__),c[h]=m);return new hi(r,this._parents)}function fq(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function mq(){return[]}function rT(e){return e==null?mq:function(){return this.querySelectorAll(e)}}function pq(e){return function(){return fq(e.apply(this,arguments))}}function hq(e){typeof e=="function"?e=pq(e):e=rT(e);for(var t=this._groups,n=t.length,r=[],i=[],o=0;o<n;++o)for(var a=t[o],c=a.length,d,m=0;m<c;++m)(d=a[m])&&(r.push(e.call(d,d.__data__,m,a)),i.push(d));return new hi(r,i)}function iT(e){return function(){return this.matches(e)}}function sT(e){return function(t){return t.matches(e)}}var gq=Array.prototype.find;function yq(e){return function(){return gq.call(this.children,e)}}function xq(){return this.firstElementChild}function vq(e){return this.select(e==null?xq:yq(typeof e=="function"?e:sT(e)))}var bq=Array.prototype.filter;function _q(){return Array.from(this.children)}function kq(e){return function(){return bq.call(this.children,e)}}function Sq(e){return this.selectAll(e==null?_q:kq(typeof e=="function"?e:sT(e)))}function wq(e){typeof e!="function"&&(e=iT(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var o=t[i],a=o.length,c=r[i]=[],d,m=0;m<a;++m)(d=o[m])&&e.call(d,d.__data__,m,o)&&c.push(d);return new hi(r,this._parents)}function oT(e){return new Array(e.length)}function Cq(){return new hi(this._enter||this._groups.map(oT),this._parents)}function xm(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}xm.prototype={constructor:xm,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function jq(e){return function(){return e}}function Eq(e,t,n,r,i,o){for(var a=0,c,d=t.length,m=o.length;a<m;++a)(c=t[a])?(c.__data__=o[a],r[a]=c):n[a]=new xm(e,o[a]);for(;a<d;++a)(c=t[a])&&(i[a]=c)}function Nq(e,t,n,r,i,o,a){var c,d,m=new Map,h=t.length,p=o.length,g=new Array(h),x;for(c=0;c<h;++c)(d=t[c])&&(g[c]=x=a.call(d,d.__data__,c,t)+"",m.has(x)?i[c]=d:m.set(x,d));for(c=0;c<p;++c)x=a.call(e,o[c],c,o)+"",(d=m.get(x))?(r[c]=d,d.__data__=o[c],m.delete(x)):n[c]=new xm(e,o[c]);for(c=0;c<h;++c)(d=t[c])&&m.get(g[c])===d&&(i[c]=d)}function Iq(e){return e.__data__}function Tq(e,t){if(!arguments.length)return Array.from(this,Iq);var n=t?Nq:Eq,r=this._parents,i=this._groups;typeof e!="function"&&(e=jq(e));for(var o=i.length,a=new Array(o),c=new Array(o),d=new Array(o),m=0;m<o;++m){var h=r[m],p=i[m],g=p.length,x=Rq(e.call(h,h&&h.__data__,m,r)),v=x.length,k=c[m]=new Array(v),S=a[m]=new Array(v),b=d[m]=new Array(g);n(h,p,k,S,b,x,t);for(var w=0,j=0,N,O;w<v;++w)if(N=k[w]){for(w>=j&&(j=w+1);!(O=S[j])&&++j<v;);N._next=O||null}}return a=new hi(a,r),a._enter=c,a._exit=d,a}function Rq(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Aq(){return new hi(this._exit||this._groups.map(oT),this._parents)}function Mq(e,t,n){var r=this.enter(),i=this,o=this.exit();return typeof e=="function"?(r=e(r),r&&(r=r.selection())):r=r.append(e+""),t!=null&&(i=t(i),i&&(i=i.selection())),n==null?o.remove():n(o),r&&i?r.merge(i).order():i}function Dq(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,o=r.length,a=Math.min(i,o),c=new Array(i),d=0;d<a;++d)for(var m=n[d],h=r[d],p=m.length,g=c[d]=new Array(p),x,v=0;v<p;++v)(x=m[v]||h[v])&&(g[v]=x);for(;d<i;++d)c[d]=n[d];return new hi(c,this._parents)}function Oq(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,o=r[i],a;--i>=0;)(a=r[i])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function Lq(e){e||(e=zq);function t(p,g){return p&&g?e(p.__data__,g.__data__):!p-!g}for(var n=this._groups,r=n.length,i=new Array(r),o=0;o<r;++o){for(var a=n[o],c=a.length,d=i[o]=new Array(c),m,h=0;h<c;++h)(m=a[h])&&(d[h]=m);d.sort(t)}return new hi(i,this._parents).order()}function zq(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function Pq(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Bq(){return Array.from(this)}function $q(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,o=r.length;i<o;++i){var a=r[i];if(a)return a}return null}function Hq(){let e=0;for(const t of this)++e;return e}function Fq(){return!this.node()}function Vq(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],o=0,a=i.length,c;o<a;++o)(c=i[o])&&e.call(c,c.__data__,o,i);return this}function Uq(e){return function(){this.removeAttribute(e)}}function qq(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Gq(e,t){return function(){this.setAttribute(e,t)}}function Wq(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Yq(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function Xq(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function Kq(e,t){var n=tp(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?qq:Uq:typeof t=="function"?n.local?Xq:Yq:n.local?Wq:Gq)(n,t))}function aT(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Zq(e){return function(){this.style.removeProperty(e)}}function Qq(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Jq(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function eG(e,t,n){return arguments.length>1?this.each((t==null?Zq:typeof t=="function"?Jq:Qq)(e,t,n??"")):Il(this.node(),e)}function Il(e,t){return e.style.getPropertyValue(t)||aT(e).getComputedStyle(e,null).getPropertyValue(t)}function tG(e){return function(){delete this[e]}}function nG(e,t){return function(){this[e]=t}}function rG(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function iG(e,t){return arguments.length>1?this.each((t==null?tG:typeof t=="function"?rG:nG)(e,t)):this.node()[e]}function lT(e){return e.trim().split(/^|\s+/)}function A0(e){return e.classList||new cT(e)}function cT(e){this._node=e,this._names=lT(e.getAttribute("class")||"")}cT.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function uT(e,t){for(var n=A0(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function dT(e,t){for(var n=A0(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function sG(e){return function(){uT(this,e)}}function oG(e){return function(){dT(this,e)}}function aG(e,t){return function(){(t.apply(this,arguments)?uT:dT)(this,e)}}function lG(e,t){var n=lT(e+"");if(arguments.length<2){for(var r=A0(this.node()),i=-1,o=n.length;++i<o;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t=="function"?aG:t?sG:oG)(n,t))}function cG(){this.textContent=""}function uG(e){return function(){this.textContent=e}}function dG(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function fG(e){return arguments.length?this.each(e==null?cG:(typeof e=="function"?dG:uG)(e)):this.node().textContent}function mG(){this.innerHTML=""}function pG(e){return function(){this.innerHTML=e}}function hG(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function gG(e){return arguments.length?this.each(e==null?mG:(typeof e=="function"?hG:pG)(e)):this.node().innerHTML}function yG(){this.nextSibling&&this.parentNode.appendChild(this)}function xG(){return this.each(yG)}function vG(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function bG(){return this.each(vG)}function _G(e){var t=typeof e=="function"?e:nT(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function kG(){return null}function SG(e,t){var n=typeof e=="function"?e:nT(e),r=t==null?kG:typeof t=="function"?t:R0(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function wG(){var e=this.parentNode;e&&e.removeChild(this)}function CG(){return this.each(wG)}function jG(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function EG(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function NG(e){return this.select(e?EG:jG)}function IG(e){return arguments.length?this.property("__data__",e):this.node().__data__}function TG(e){return function(t){e.call(this,t,this.__data__)}}function RG(e){return e.trim().split(/^|\s+/).map(function(t){var n="",r=t.indexOf(".");return r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function AG(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n<i;++n)o=t[n],(!e.type||o.type===e.type)&&o.name===e.name?this.removeEventListener(o.type,o.listener,o.options):t[++r]=o;++r?t.length=r:delete this.__on}}}function MG(e,t,n){return function(){var r=this.__on,i,o=TG(t);if(r){for(var a=0,c=r.length;a<c;++a)if((i=r[a]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=o,i.options=n),i.value=t;return}}this.addEventListener(e.type,o,n),i={type:e.type,name:e.name,value:t,listener:o,options:n},r?r.push(i):this.__on=[i]}}function DG(e,t,n){var r=RG(e+""),i,o=r.length,a;if(arguments.length<2){var c=this.node().__on;if(c){for(var d=0,m=c.length,h;d<m;++d)for(i=0,h=c[d];i<o;++i)if((a=r[i]).type===h.type&&a.name===h.name)return h.value}return}for(c=t?MG:AG,i=0;i<o;++i)this.each(c(r[i],t,n));return this}function fT(e,t,n){var r=aT(e),i=r.CustomEvent;typeof i=="function"?i=new i(t,n):(i=r.document.createEvent("Event"),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function OG(e,t){return function(){return fT(this,e,t)}}function LG(e,t){return function(){return fT(this,e,t.apply(this,arguments))}}function zG(e,t){return this.each((typeof t=="function"?LG:OG)(e,t))}function*PG(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,o=r.length,a;i<o;++i)(a=r[i])&&(yield a)}var mT=[null];function hi(e,t){this._groups=e,this._parents=t}function qu(){return new hi([[document.documentElement]],mT)}function BG(){return this}hi.prototype=qu.prototype={constructor:hi,select:dq,selectAll:hq,selectChild:vq,selectChildren:Sq,filter:wq,data:Tq,enter:Cq,exit:Aq,join:Mq,merge:Dq,selection:BG,order:Oq,sort:Lq,call:Pq,nodes:Bq,node:$q,size:Hq,empty:Fq,each:Vq,attr:Kq,style:eG,property:iG,classed:lG,text:fG,html:gG,raise:xG,lower:bG,append:_G,insert:SG,remove:CG,clone:NG,datum:IG,on:DG,dispatch:zG,[Symbol.iterator]:PG};function li(e){return typeof e=="string"?new hi([[document.querySelector(e)]],[document.documentElement]):new hi([[e]],mT)}function $G(e){let t;for(;t=e.sourceEvent;)e=t;return e}function zi(e,t){if(e=$G(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}const HG={passive:!1},Tu={capture:!0,passive:!1};function jy(e){e.stopImmediatePropagation()}function pl(e){e.preventDefault(),e.stopImmediatePropagation()}function pT(e){var t=e.document.documentElement,n=li(e).on("dragstart.drag",pl,Tu);"onselectstart"in t?n.on("selectstart.drag",pl,Tu):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")}function hT(e,t){var n=e.document.documentElement,r=li(e).on("dragstart.drag",null);t&&(r.on("click.drag",pl,Tu),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}const _f=e=>()=>e;function xv(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:a,y:c,dx:d,dy:m,dispatch:h}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:c,enumerable:!0,configurable:!0},dx:{value:d,enumerable:!0,configurable:!0},dy:{value:m,enumerable:!0,configurable:!0},_:{value:h}})}xv.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function FG(e){return!e.ctrlKey&&!e.button}function VG(){return this.parentNode}function UG(e,t){return t??{x:e.x,y:e.y}}function qG(){return navigator.maxTouchPoints||"ontouchstart"in this}function gT(){var e=FG,t=VG,n=UG,r=qG,i={},o=ep("start","drag","end"),a=0,c,d,m,h,p=0;function g(N){N.on("mousedown.drag",x).filter(r).on("touchstart.drag",S).on("touchmove.drag",b,HG).on("touchend.drag touchcancel.drag",w).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function x(N,O){if(!(h||!e.call(this,N,O))){var R=j(this,t.call(this,N,O),N,O,"mouse");R&&(li(N.view).on("mousemove.drag",v,Tu).on("mouseup.drag",k,Tu),pT(N.view),jy(N),m=!1,c=N.clientX,d=N.clientY,R("start",N))}}function v(N){if(pl(N),!m){var O=N.clientX-c,R=N.clientY-d;m=O*O+R*R>p}i.mouse("drag",N)}function k(N){li(N.view).on("mousemove.drag mouseup.drag",null),hT(N.view,m),pl(N),i.mouse("end",N)}function S(N,O){if(e.call(this,N,O)){var R=N.changedTouches,L=t.call(this,N,O),I=R.length,D,M;for(D=0;D<I;++D)(M=j(this,L,N,O,R[D].identifier,R[D]))&&(jy(N),M("start",N,R[D]))}}function b(N){var O=N.changedTouches,R=O.length,L,I;for(L=0;L<R;++L)(I=i[O[L].identifier])&&(pl(N),I("drag",N,O[L]))}function w(N){var O=N.changedTouches,R=O.length,L,I;for(h&&clearTimeout(h),h=setTimeout(function(){h=null},500),L=0;L<R;++L)(I=i[O[L].identifier])&&(jy(N),I("end",N,O[L]))}function j(N,O,R,L,I,D){var M=o.copy(),A=zi(D||R,O),$,W,B;if((B=n.call(N,new xv("beforestart",{sourceEvent:R,target:g,identifier:I,active:a,x:A[0],y:A[1],dx:0,dy:0,dispatch:M}),L))!=null)return $=B.x-A[0]||0,W=B.y-A[1]||0,function V(H,U,Y){var Q=A,q;switch(H){case"start":i[I]=V,q=a++;break;case"end":delete i[I],--a;case"drag":A=zi(Y||U,O),q=a;break}M.call(H,N,new xv(H,{sourceEvent:U,subject:B,target:g,identifier:I,active:q,x:A[0]+$,y:A[1]+W,dx:A[0]-Q[0],dy:A[1]-Q[1],dispatch:M}),L)}}return g.filter=function(N){return arguments.length?(e=typeof N=="function"?N:_f(!!N),g):e},g.container=function(N){return arguments.length?(t=typeof N=="function"?N:_f(N),g):t},g.subject=function(N){return arguments.length?(n=typeof N=="function"?N:_f(N),g):n},g.touchable=function(N){return arguments.length?(r=typeof N=="function"?N:_f(!!N),g):r},g.on=function(){var N=o.on.apply(o,arguments);return N===o?g:N},g.clickDistance=function(N){return arguments.length?(p=(N=+N)*N,g):Math.sqrt(p)},g}function M0(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function yT(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Gu(){}var Ru=.7,vm=1/Ru,hl="\\s*([+-]?\\d+)\\s*",Au="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",as="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",GG=/^#([0-9a-f]{3,8})$/,WG=new RegExp(`^rgb\\(${hl},${hl},${hl}\\)$`),YG=new RegExp(`^rgb\\(${as},${as},${as}\\)$`),XG=new RegExp(`^rgba\\(${hl},${hl},${hl},${Au}\\)$`),KG=new RegExp(`^rgba\\(${as},${as},${as},${Au}\\)$`),ZG=new RegExp(`^hsl\\(${Au},${as},${as}\\)$`),QG=new RegExp(`^hsla\\(${Au},${as},${as},${Au}\\)$`),OC={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};M0(Gu,sa,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:LC,formatHex:LC,formatHex8:JG,formatHsl:eW,formatRgb:zC,toString:zC});function LC(){return this.rgb().formatHex()}function JG(){return this.rgb().formatHex8()}function eW(){return xT(this).formatHsl()}function zC(){return this.rgb().formatRgb()}function sa(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=GG.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?PC(t):n===3?new Zr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?kf(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?kf(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=WG.exec(e))?new Zr(t[1],t[2],t[3],1):(t=YG.exec(e))?new Zr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=XG.exec(e))?kf(t[1],t[2],t[3],t[4]):(t=KG.exec(e))?kf(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=ZG.exec(e))?HC(t[1],t[2]/100,t[3]/100,1):(t=QG.exec(e))?HC(t[1],t[2]/100,t[3]/100,t[4]):OC.hasOwnProperty(e)?PC(OC[e]):e==="transparent"?new Zr(NaN,NaN,NaN,0):null}function PC(e){return new Zr(e>>16&255,e>>8&255,e&255,1)}function kf(e,t,n,r){return r<=0&&(e=t=n=NaN),new Zr(e,t,n,r)}function tW(e){return e instanceof Gu||(e=sa(e)),e?(e=e.rgb(),new Zr(e.r,e.g,e.b,e.opacity)):new Zr}function vv(e,t,n,r){return arguments.length===1?tW(e):new Zr(e,t,n,r??1)}function Zr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}M0(Zr,vv,yT(Gu,{brighter(e){return e=e==null?vm:Math.pow(vm,e),new Zr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Ru:Math.pow(Ru,e),new Zr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Zr(ta(this.r),ta(this.g),ta(this.b),bm(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:BC,formatHex:BC,formatHex8:nW,formatRgb:$C,toString:$C}));function BC(){return`#${ea(this.r)}${ea(this.g)}${ea(this.b)}`}function nW(){return`#${ea(this.r)}${ea(this.g)}${ea(this.b)}${ea((isNaN(this.opacity)?1:this.opacity)*255)}`}function $C(){const e=bm(this.opacity);return`${e===1?"rgb(":"rgba("}${ta(this.r)}, ${ta(this.g)}, ${ta(this.b)}${e===1?")":`, ${e})`}`}function bm(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ta(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function ea(e){return e=ta(e),(e<16?"0":"")+e.toString(16)}function HC(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Bi(e,t,n,r)}function xT(e){if(e instanceof Bi)return new Bi(e.h,e.s,e.l,e.opacity);if(e instanceof Gu||(e=sa(e)),!e)return new Bi;if(e instanceof Bi)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),o=Math.max(t,n,r),a=NaN,c=o-i,d=(o+i)/2;return c?(t===o?a=(n-r)/c+(n<r)*6:n===o?a=(r-t)/c+2:a=(t-n)/c+4,c/=d<.5?o+i:2-o-i,a*=60):c=d>0&&d<1?0:a,new Bi(a,c,d,e.opacity)}function rW(e,t,n,r){return arguments.length===1?xT(e):new Bi(e,t,n,r??1)}function Bi(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}M0(Bi,rW,yT(Gu,{brighter(e){return e=e==null?vm:Math.pow(vm,e),new Bi(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Ru:Math.pow(Ru,e),new Bi(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Zr(Ey(e>=240?e-240:e+120,i,r),Ey(e,i,r),Ey(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Bi(FC(this.h),Sf(this.s),Sf(this.l),bm(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=bm(this.opacity);return`${e===1?"hsl(":"hsla("}${FC(this.h)}, ${Sf(this.s)*100}%, ${Sf(this.l)*100}%${e===1?")":`, ${e})`}`}}));function FC(e){return e=(e||0)%360,e<0?e+360:e}function Sf(e){return Math.max(0,Math.min(1,e||0))}function Ey(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const D0=e=>()=>e;function iW(e,t){return function(n){return e+n*t}}function sW(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function oW(e){return(e=+e)==1?vT:function(t,n){return n-t?sW(t,n,e):D0(isNaN(t)?n:t)}}function vT(e,t){var n=t-e;return n?iW(e,n):D0(isNaN(e)?t:e)}const _m=(function e(t){var n=oW(t);function r(i,o){var a=n((i=vv(i)).r,(o=vv(o)).r),c=n(i.g,o.g),d=n(i.b,o.b),m=vT(i.opacity,o.opacity);return function(h){return i.r=a(h),i.g=c(h),i.b=d(h),i.opacity=m(h),i+""}}return r.gamma=e,r})(1);function aW(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(o){for(i=0;i<n;++i)r[i]=e[i]*(1-o)+t[i]*o;return r}}function lW(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function cW(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=new Array(r),o=new Array(n),a;for(a=0;a<r;++a)i[a]=hu(e[a],t[a]);for(;a<n;++a)o[a]=t[a];return function(c){for(a=0;a<r;++a)o[a]=i[a](c);return o}}function uW(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function ns(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function dW(e,t){var n={},r={},i;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(i in t)i in e?n[i]=hu(e[i],t[i]):r[i]=t[i];return function(o){for(i in n)r[i]=n[i](o);return r}}var bv=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ny=new RegExp(bv.source,"g");function fW(e){return function(){return e}}function mW(e){return function(t){return e(t)+""}}function bT(e,t){var n=bv.lastIndex=Ny.lastIndex=0,r,i,o,a=-1,c=[],d=[];for(e=e+"",t=t+"";(r=bv.exec(e))&&(i=Ny.exec(t));)(o=i.index)>n&&(o=t.slice(n,o),c[a]?c[a]+=o:c[++a]=o),(r=r[0])===(i=i[0])?c[a]?c[a]+=i:c[++a]=i:(c[++a]=null,d.push({i:a,x:ns(r,i)})),n=Ny.lastIndex;return n<t.length&&(o=t.slice(n),c[a]?c[a]+=o:c[++a]=o),c.length<2?d[0]?mW(d[0].x):fW(t):(t=d.length,function(m){for(var h=0,p;h<t;++h)c[(p=d[h]).i]=p.x(m);return c.join("")})}function hu(e,t){var n=typeof t,r;return t==null||n==="boolean"?D0(t):(n==="number"?ns:n==="string"?(r=sa(t))?(t=r,_m):bT:t instanceof sa?_m:t instanceof Date?uW:lW(t)?aW:Array.isArray(t)?cW:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?dW:ns)(e,t)}var VC=180/Math.PI,_v={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function _T(e,t,n,r,i,o){var a,c,d;return(a=Math.sqrt(e*e+t*t))&&(e/=a,t/=a),(d=e*n+t*r)&&(n-=e*d,r-=t*d),(c=Math.sqrt(n*n+r*r))&&(n/=c,r/=c,d/=c),e*r<t*n&&(e=-e,t=-t,d=-d,a=-a),{translateX:i,translateY:o,rotate:Math.atan2(t,e)*VC,skewX:Math.atan(d)*VC,scaleX:a,scaleY:c}}var wf;function pW(e){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?_v:_T(t.a,t.b,t.c,t.d,t.e,t.f)}function hW(e){return e==null||(wf||(wf=document.createElementNS("http://www.w3.org/2000/svg","g")),wf.setAttribute("transform",e),!(e=wf.transform.baseVal.consolidate()))?_v:(e=e.matrix,_T(e.a,e.b,e.c,e.d,e.e,e.f))}function kT(e,t,n,r){function i(m){return m.length?m.pop()+" ":""}function o(m,h,p,g,x,v){if(m!==p||h!==g){var k=x.push("translate(",null,t,null,n);v.push({i:k-4,x:ns(m,p)},{i:k-2,x:ns(h,g)})}else(p||g)&&x.push("translate("+p+t+g+n)}function a(m,h,p,g){m!==h?(m-h>180?h+=360:h-m>180&&(m+=360),g.push({i:p.push(i(p)+"rotate(",null,r)-2,x:ns(m,h)})):h&&p.push(i(p)+"rotate("+h+r)}function c(m,h,p,g){m!==h?g.push({i:p.push(i(p)+"skewX(",null,r)-2,x:ns(m,h)}):h&&p.push(i(p)+"skewX("+h+r)}function d(m,h,p,g,x,v){if(m!==p||h!==g){var k=x.push(i(x)+"scale(",null,",",null,")");v.push({i:k-4,x:ns(m,p)},{i:k-2,x:ns(h,g)})}else(p!==1||g!==1)&&x.push(i(x)+"scale("+p+","+g+")")}return function(m,h){var p=[],g=[];return m=e(m),h=e(h),o(m.translateX,m.translateY,h.translateX,h.translateY,p,g),a(m.rotate,h.rotate,p,g),c(m.skewX,h.skewX,p,g),d(m.scaleX,m.scaleY,h.scaleX,h.scaleY,p,g),m=h=null,function(x){for(var v=-1,k=g.length,S;++v<k;)p[(S=g[v]).i]=S.x(x);return p.join("")}}}var gW=kT(pW,"px, ","px)","deg)"),yW=kT(hW,", ",")",")"),xW=1e-12;function UC(e){return((e=Math.exp(e))+1/e)/2}function vW(e){return((e=Math.exp(e))-1/e)/2}function bW(e){return((e=Math.exp(2*e))-1)/(e+1)}const $f=(function e(t,n,r){function i(o,a){var c=o[0],d=o[1],m=o[2],h=a[0],p=a[1],g=a[2],x=h-c,v=p-d,k=x*x+v*v,S,b;if(k<xW)b=Math.log(g/m)/t,S=function(L){return[c+L*x,d+L*v,m*Math.exp(t*L*b)]};else{var w=Math.sqrt(k),j=(g*g-m*m+r*k)/(2*m*n*w),N=(g*g-m*m-r*k)/(2*g*n*w),O=Math.log(Math.sqrt(j*j+1)-j),R=Math.log(Math.sqrt(N*N+1)-N);b=(R-O)/t,S=function(L){var I=L*b,D=UC(O),M=m/(n*w)*(D*bW(t*I+O)-vW(O));return[c+M*x,d+M*v,m*D/UC(t*I+O)]}}return S.duration=b*1e3*t/Math.SQRT2,S}return i.rho=function(o){var a=Math.max(.001,+o),c=a*a,d=c*c;return e(a,c,d)},i})(Math.SQRT2,2,4);var Tl=0,tu=0,Kc=0,ST=1e3,km,nu,Sm=0,oa=0,np=0,Mu=typeof performance=="object"&&performance.now?performance:Date,wT=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function O0(){return oa||(wT(_W),oa=Mu.now()+np)}function _W(){oa=0}function wm(){this._call=this._time=this._next=null}wm.prototype=CT.prototype={constructor:wm,restart:function(e,t,n){if(typeof e!="function")throw new TypeError("callback is not a function");n=(n==null?O0():+n)+(t==null?0:+t),!this._next&&nu!==this&&(nu?nu._next=this:km=this,nu=this),this._call=e,this._time=n,kv()},stop:function(){this._call&&(this._call=null,this._time=1/0,kv())}};function CT(e,t,n){var r=new wm;return r.restart(e,t,n),r}function kW(){O0(),++Tl;for(var e=km,t;e;)(t=oa-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Tl}function qC(){oa=(Sm=Mu.now())+np,Tl=tu=0;try{kW()}finally{Tl=0,wW(),oa=0}}function SW(){var e=Mu.now(),t=e-Sm;t>ST&&(np-=t,Sm=e)}function wW(){for(var e,t=km,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:km=n);nu=e,kv(r)}function kv(e){if(!Tl){tu&&(tu=clearTimeout(tu));var t=e-oa;t>24?(e<1/0&&(tu=setTimeout(qC,e-Mu.now()-np)),Kc&&(Kc=clearInterval(Kc))):(Kc||(Sm=Mu.now(),Kc=setInterval(SW,ST)),Tl=1,wT(qC))}}function GC(e,t,n){var r=new wm;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var CW=ep("start","end","cancel","interrupt"),jW=[],jT=0,WC=1,Sv=2,Hf=3,YC=4,wv=5,Ff=6;function rp(e,t,n,r,i,o){var a=e.__transition;if(!a)e.__transition={};else if(n in a)return;EW(e,n,{name:t,index:r,group:i,on:CW,tween:jW,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:jT})}function L0(e,t){var n=Gi(e,t);if(n.state>jT)throw new Error("too late; already scheduled");return n}function us(e,t){var n=Gi(e,t);if(n.state>Hf)throw new Error("too late; already running");return n}function Gi(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function EW(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=CT(o,0,n.time);function o(m){n.state=WC,n.timer.restart(a,n.delay,n.time),n.delay<=m&&a(m-n.delay)}function a(m){var h,p,g,x;if(n.state!==WC)return d();for(h in r)if(x=r[h],x.name===n.name){if(x.state===Hf)return GC(a);x.state===YC?(x.state=Ff,x.timer.stop(),x.on.call("interrupt",e,e.__data__,x.index,x.group),delete r[h]):+h<t&&(x.state=Ff,x.timer.stop(),x.on.call("cancel",e,e.__data__,x.index,x.group),delete r[h])}if(GC(function(){n.state===Hf&&(n.state=YC,n.timer.restart(c,n.delay,n.time),c(m))}),n.state=Sv,n.on.call("start",e,e.__data__,n.index,n.group),n.state===Sv){for(n.state=Hf,i=new Array(g=n.tween.length),h=0,p=-1;h<g;++h)(x=n.tween[h].value.call(e,e.__data__,n.index,n.group))&&(i[++p]=x);i.length=p+1}}function c(m){for(var h=m<n.duration?n.ease.call(null,m/n.duration):(n.timer.restart(d),n.state=wv,1),p=-1,g=i.length;++p<g;)i[p].call(e,h);n.state===wv&&(n.on.call("end",e,e.__data__,n.index,n.group),d())}function d(){n.state=Ff,n.timer.stop(),delete r[t];for(var m in r)return;delete e.__transition}}function Vf(e,t){var n=e.__transition,r,i,o=!0,a;if(n){t=t==null?null:t+"";for(a in n){if((r=n[a]).name!==t){o=!1;continue}i=r.state>Sv&&r.state<wv,r.state=Ff,r.timer.stop(),r.on.call(i?"interrupt":"cancel",e,e.__data__,r.index,r.group),delete n[a]}o&&delete e.__transition}}function NW(e){return this.each(function(){Vf(this,e)})}function IW(e,t){var n,r;return function(){var i=us(this,e),o=i.tween;if(o!==n){r=n=o;for(var a=0,c=r.length;a<c;++a)if(r[a].name===t){r=r.slice(),r.splice(a,1);break}}i.tween=r}}function TW(e,t,n){var r,i;if(typeof n!="function")throw new Error;return function(){var o=us(this,e),a=o.tween;if(a!==r){i=(r=a).slice();for(var c={name:t,value:n},d=0,m=i.length;d<m;++d)if(i[d].name===t){i[d]=c;break}d===m&&i.push(c)}o.tween=i}}function RW(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r=Gi(this.node(),n).tween,i=0,o=r.length,a;i<o;++i)if((a=r[i]).name===e)return a.value;return null}return this.each((t==null?IW:TW)(n,e,t))}function z0(e,t,n){var r=e._id;return e.each(function(){var i=us(this,r);(i.value||(i.value={}))[t]=n.apply(this,arguments)}),function(i){return Gi(i,r).value[t]}}function ET(e,t){var n;return(typeof t=="number"?ns:t instanceof sa?_m:(n=sa(t))?(t=n,_m):bT)(e,t)}function AW(e){return function(){this.removeAttribute(e)}}function MW(e){return function(){this.removeAttributeNS(e.space,e.local)}}function DW(e,t,n){var r,i=n+"",o;return function(){var a=this.getAttribute(e);return a===i?null:a===r?o:o=t(r=a,n)}}function OW(e,t,n){var r,i=n+"",o;return function(){var a=this.getAttributeNS(e.space,e.local);return a===i?null:a===r?o:o=t(r=a,n)}}function LW(e,t,n){var r,i,o;return function(){var a,c=n(this),d;return c==null?void this.removeAttribute(e):(a=this.getAttribute(e),d=c+"",a===d?null:a===r&&d===i?o:(i=d,o=t(r=a,c)))}}function zW(e,t,n){var r,i,o;return function(){var a,c=n(this),d;return c==null?void this.removeAttributeNS(e.space,e.local):(a=this.getAttributeNS(e.space,e.local),d=c+"",a===d?null:a===r&&d===i?o:(i=d,o=t(r=a,c)))}}function PW(e,t){var n=tp(e),r=n==="transform"?yW:ET;return this.attrTween(e,typeof t=="function"?(n.local?zW:LW)(n,r,z0(this,"attr."+e,t)):t==null?(n.local?MW:AW)(n):(n.local?OW:DW)(n,r,t))}function BW(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function $W(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function HW(e,t){var n,r;function i(){var o=t.apply(this,arguments);return o!==r&&(n=(r=o)&&$W(e,o)),n}return i._value=t,i}function FW(e,t){var n,r;function i(){var o=t.apply(this,arguments);return o!==r&&(n=(r=o)&&BW(e,o)),n}return i._value=t,i}function VW(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!="function")throw new Error;var r=tp(e);return this.tween(n,(r.local?HW:FW)(r,t))}function UW(e,t){return function(){L0(this,e).delay=+t.apply(this,arguments)}}function qW(e,t){return t=+t,function(){L0(this,e).delay=t}}function GW(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?UW:qW)(t,e)):Gi(this.node(),t).delay}function WW(e,t){return function(){us(this,e).duration=+t.apply(this,arguments)}}function YW(e,t){return t=+t,function(){us(this,e).duration=t}}function XW(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?WW:YW)(t,e)):Gi(this.node(),t).duration}function KW(e,t){if(typeof t!="function")throw new Error;return function(){us(this,e).ease=t}}function ZW(e){var t=this._id;return arguments.length?this.each(KW(t,e)):Gi(this.node(),t).ease}function QW(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!="function")throw new Error;us(this,e).ease=n}}function JW(e){if(typeof e!="function")throw new Error;return this.each(QW(this._id,e))}function eY(e){typeof e!="function"&&(e=iT(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i<n;++i)for(var o=t[i],a=o.length,c=r[i]=[],d,m=0;m<a;++m)(d=o[m])&&e.call(d,d.__data__,m,o)&&c.push(d);return new Ps(r,this._parents,this._name,this._id)}function tY(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,r=t.length,i=n.length,o=Math.min(r,i),a=new Array(r),c=0;c<o;++c)for(var d=t[c],m=n[c],h=d.length,p=a[c]=new Array(h),g,x=0;x<h;++x)(g=d[x]||m[x])&&(p[x]=g);for(;c<r;++c)a[c]=t[c];return new Ps(a,this._parents,this._name,this._id)}function nY(e){return(e+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||t==="start"})}function rY(e,t,n){var r,i,o=nY(t)?L0:us;return function(){var a=o(this,e),c=a.on;c!==r&&(i=(r=c).copy()).on(t,n),a.on=i}}function iY(e,t){var n=this._id;return arguments.length<2?Gi(this.node(),n).on.on(e):this.each(rY(n,e,t))}function sY(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function oY(){return this.on("end.remove",sY(this._id))}function aY(e){var t=this._name,n=this._id;typeof e!="function"&&(e=R0(e));for(var r=this._groups,i=r.length,o=new Array(i),a=0;a<i;++a)for(var c=r[a],d=c.length,m=o[a]=new Array(d),h,p,g=0;g<d;++g)(h=c[g])&&(p=e.call(h,h.__data__,g,c))&&("__data__"in h&&(p.__data__=h.__data__),m[g]=p,rp(m[g],t,n,g,m,Gi(h,n)));return new Ps(o,this._parents,t,n)}function lY(e){var t=this._name,n=this._id;typeof e!="function"&&(e=rT(e));for(var r=this._groups,i=r.length,o=[],a=[],c=0;c<i;++c)for(var d=r[c],m=d.length,h,p=0;p<m;++p)if(h=d[p]){for(var g=e.call(h,h.__data__,p,d),x,v=Gi(h,n),k=0,S=g.length;k<S;++k)(x=g[k])&&rp(x,t,n,k,g,v);o.push(g),a.push(h)}return new Ps(o,a,t,n)}var cY=qu.prototype.constructor;function uY(){return new cY(this._groups,this._parents)}function dY(e,t){var n,r,i;return function(){var o=Il(this,e),a=(this.style.removeProperty(e),Il(this,e));return o===a?null:o===n&&a===r?i:i=t(n=o,r=a)}}function NT(e){return function(){this.style.removeProperty(e)}}function fY(e,t,n){var r,i=n+"",o;return function(){var a=Il(this,e);return a===i?null:a===r?o:o=t(r=a,n)}}function mY(e,t,n){var r,i,o;return function(){var a=Il(this,e),c=n(this),d=c+"";return c==null&&(d=c=(this.style.removeProperty(e),Il(this,e))),a===d?null:a===r&&d===i?o:(i=d,o=t(r=a,c))}}function pY(e,t){var n,r,i,o="style."+t,a="end."+o,c;return function(){var d=us(this,e),m=d.on,h=d.value[o]==null?c||(c=NT(t)):void 0;(m!==n||i!==h)&&(r=(n=m).copy()).on(a,i=h),d.on=r}}function hY(e,t,n){var r=(e+="")=="transform"?gW:ET;return t==null?this.styleTween(e,dY(e,r)).on("end.style."+e,NT(e)):typeof t=="function"?this.styleTween(e,mY(e,r,z0(this,"style."+e,t))).each(pY(this._id,e)):this.styleTween(e,fY(e,r,t),n).on("end.style."+e,null)}function gY(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function yY(e,t,n){var r,i;function o(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&gY(e,a,n)),r}return o._value=t,o}function xY(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!="function")throw new Error;return this.tween(r,yY(e,t,n??""))}function vY(e){return function(){this.textContent=e}}function bY(e){return function(){var t=e(this);this.textContent=t??""}}function _Y(e){return this.tween("text",typeof e=="function"?bY(z0(this,"text",e)):vY(e==null?"":e+""))}function kY(e){return function(t){this.textContent=e.call(this,t)}}function SY(e){var t,n;function r(){var i=e.apply(this,arguments);return i!==n&&(t=(n=i)&&kY(i)),t}return r._value=e,r}function wY(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,SY(e))}function CY(){for(var e=this._name,t=this._id,n=IT(),r=this._groups,i=r.length,o=0;o<i;++o)for(var a=r[o],c=a.length,d,m=0;m<c;++m)if(d=a[m]){var h=Gi(d,t);rp(d,e,n,m,a,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ps(r,this._parents,e,n)}function jY(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(o,a){var c={value:a},d={value:function(){--i===0&&o()}};n.each(function(){var m=us(this,r),h=m.on;h!==e&&(t=(e=h).copy(),t._.cancel.push(c),t._.interrupt.push(c),t._.end.push(d)),m.on=t}),i===0&&o()})}var EY=0;function Ps(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function IT(){return++EY}var Rs=qu.prototype;Ps.prototype={constructor:Ps,select:aY,selectAll:lY,selectChild:Rs.selectChild,selectChildren:Rs.selectChildren,filter:eY,merge:tY,selection:uY,transition:CY,call:Rs.call,nodes:Rs.nodes,node:Rs.node,size:Rs.size,empty:Rs.empty,each:Rs.each,on:iY,attr:PW,attrTween:VW,style:hY,styleTween:xY,text:_Y,textTween:wY,remove:oY,tween:RW,delay:GW,duration:XW,ease:ZW,easeVarying:JW,end:jY,[Symbol.iterator]:Rs[Symbol.iterator]};function NY(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var IY={time:null,delay:0,duration:250,ease:NY};function TY(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return n}function RY(e){var t,n;e instanceof Ps?(t=e._id,e=e._name):(t=IT(),(n=IY).time=O0(),e=e==null?null:e+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var a=r[o],c=a.length,d,m=0;m<c;++m)(d=a[m])&&rp(d,e,t,m,a,n||TY(d,t));return new Ps(r,this._parents,e,t)}qu.prototype.interrupt=NW;qu.prototype.transition=RY;const Cf=e=>()=>e;function AY(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function Ls(e,t,n){this.k=e,this.x=t,this.y=n}Ls.prototype={constructor:Ls,scale:function(e){return e===1?this:new Ls(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Ls(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var ip=new Ls(1,0,0);TT.prototype=Ls.prototype;function TT(e){for(;!e.__zoom;)if(!(e=e.parentNode))return ip;return e.__zoom}function Iy(e){e.stopImmediatePropagation()}function Zc(e){e.preventDefault(),e.stopImmediatePropagation()}function MY(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function DY(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function XC(){return this.__zoom||ip}function OY(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function LY(){return navigator.maxTouchPoints||"ontouchstart"in this}function zY(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],a=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function RT(){var e=MY,t=DY,n=zY,r=OY,i=LY,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],c=250,d=$f,m=ep("start","zoom","end"),h,p,g,x=500,v=150,k=0,S=10;function b(B){B.property("__zoom",XC).on("wheel.zoom",I,{passive:!1}).on("mousedown.zoom",D).on("dblclick.zoom",M).filter(i).on("touchstart.zoom",A).on("touchmove.zoom",$).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}b.transform=function(B,V,H,U){var Y=B.selection?B.selection():B;Y.property("__zoom",XC),B!==Y?O(B,V,H,U):Y.interrupt().each(function(){R(this,arguments).event(U).start().zoom(null,typeof V=="function"?V.apply(this,arguments):V).end()})},b.scaleBy=function(B,V,H,U){b.scaleTo(B,function(){var Y=this.__zoom.k,Q=typeof V=="function"?V.apply(this,arguments):V;return Y*Q},H,U)},b.scaleTo=function(B,V,H,U){b.transform(B,function(){var Y=t.apply(this,arguments),Q=this.__zoom,q=H==null?N(Y):typeof H=="function"?H.apply(this,arguments):H,G=Q.invert(q),J=typeof V=="function"?V.apply(this,arguments):V;return n(j(w(Q,J),q,G),Y,a)},H,U)},b.translateBy=function(B,V,H,U){b.transform(B,function(){return n(this.__zoom.translate(typeof V=="function"?V.apply(this,arguments):V,typeof H=="function"?H.apply(this,arguments):H),t.apply(this,arguments),a)},null,U)},b.translateTo=function(B,V,H,U,Y){b.transform(B,function(){var Q=t.apply(this,arguments),q=this.__zoom,G=U==null?N(Q):typeof U=="function"?U.apply(this,arguments):U;return n(ip.translate(G[0],G[1]).scale(q.k).translate(typeof V=="function"?-V.apply(this,arguments):-V,typeof H=="function"?-H.apply(this,arguments):-H),Q,a)},U,Y)};function w(B,V){return V=Math.max(o[0],Math.min(o[1],V)),V===B.k?B:new Ls(V,B.x,B.y)}function j(B,V,H){var U=V[0]-H[0]*B.k,Y=V[1]-H[1]*B.k;return U===B.x&&Y===B.y?B:new Ls(B.k,U,Y)}function N(B){return[(+B[0][0]+ +B[1][0])/2,(+B[0][1]+ +B[1][1])/2]}function O(B,V,H,U){B.on("start.zoom",function(){R(this,arguments).event(U).start()}).on("interrupt.zoom end.zoom",function(){R(this,arguments).event(U).end()}).tween("zoom",function(){var Y=this,Q=arguments,q=R(Y,Q).event(U),G=t.apply(Y,Q),J=H==null?N(G):typeof H=="function"?H.apply(Y,Q):H,P=Math.max(G[1][0]-G[0][0],G[1][1]-G[0][1]),K=Y.__zoom,ee=typeof V=="function"?V.apply(Y,Q):V,te=d(K.invert(J).concat(P/K.k),ee.invert(J).concat(P/ee.k));return function(ie){if(ie===1)ie=ee;else{var se=te(ie),de=P/se[2];ie=new Ls(de,J[0]-se[0]*de,J[1]-se[1]*de)}q.zoom(null,ie)}})}function R(B,V,H){return!H&&B.__zooming||new L(B,V)}function L(B,V){this.that=B,this.args=V,this.active=0,this.sourceEvent=null,this.extent=t.apply(B,V),this.taps=0}L.prototype={event:function(B){return B&&(this.sourceEvent=B),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(B,V){return this.mouse&&B!=="mouse"&&(this.mouse[1]=V.invert(this.mouse[0])),this.touch0&&B!=="touch"&&(this.touch0[1]=V.invert(this.touch0[0])),this.touch1&&B!=="touch"&&(this.touch1[1]=V.invert(this.touch1[0])),this.that.__zoom=V,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(B){var V=li(this.that).datum();m.call(B,this.that,new AY(B,{sourceEvent:this.sourceEvent,target:b,transform:this.that.__zoom,dispatch:m}),V)}};function I(B,...V){if(!e.apply(this,arguments))return;var H=R(this,V).event(B),U=this.__zoom,Y=Math.max(o[0],Math.min(o[1],U.k*Math.pow(2,r.apply(this,arguments)))),Q=zi(B);if(H.wheel)(H.mouse[0][0]!==Q[0]||H.mouse[0][1]!==Q[1])&&(H.mouse[1]=U.invert(H.mouse[0]=Q)),clearTimeout(H.wheel);else{if(U.k===Y)return;H.mouse=[Q,U.invert(Q)],Vf(this),H.start()}Zc(B),H.wheel=setTimeout(q,v),H.zoom("mouse",n(j(w(U,Y),H.mouse[0],H.mouse[1]),H.extent,a));function q(){H.wheel=null,H.end()}}function D(B,...V){if(g||!e.apply(this,arguments))return;var H=B.currentTarget,U=R(this,V,!0).event(B),Y=li(B.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",P,!0),Q=zi(B,H),q=B.clientX,G=B.clientY;pT(B.view),Iy(B),U.mouse=[Q,this.__zoom.invert(Q)],Vf(this),U.start();function J(K){if(Zc(K),!U.moved){var ee=K.clientX-q,te=K.clientY-G;U.moved=ee*ee+te*te>k}U.event(K).zoom("mouse",n(j(U.that.__zoom,U.mouse[0]=zi(K,H),U.mouse[1]),U.extent,a))}function P(K){Y.on("mousemove.zoom mouseup.zoom",null),hT(K.view,U.moved),Zc(K),U.event(K).end()}}function M(B,...V){if(e.apply(this,arguments)){var H=this.__zoom,U=zi(B.changedTouches?B.changedTouches[0]:B,this),Y=H.invert(U),Q=H.k*(B.shiftKey?.5:2),q=n(j(w(H,Q),U,Y),t.apply(this,V),a);Zc(B),c>0?li(this).transition().duration(c).call(O,q,U,B):li(this).call(b.transform,q,U,B)}}function A(B,...V){if(e.apply(this,arguments)){var H=B.touches,U=H.length,Y=R(this,V,B.changedTouches.length===U).event(B),Q,q,G,J;for(Iy(B),q=0;q<U;++q)G=H[q],J=zi(G,this),J=[J,this.__zoom.invert(J),G.identifier],Y.touch0?!Y.touch1&&Y.touch0[2]!==J[2]&&(Y.touch1=J,Y.taps=0):(Y.touch0=J,Q=!0,Y.taps=1+!!h);h&&(h=clearTimeout(h)),Q&&(Y.taps<2&&(p=J[0],h=setTimeout(function(){h=null},x)),Vf(this),Y.start())}}function $(B,...V){if(this.__zooming){var H=R(this,V).event(B),U=B.changedTouches,Y=U.length,Q,q,G,J;for(Zc(B),Q=0;Q<Y;++Q)q=U[Q],G=zi(q,this),H.touch0&&H.touch0[2]===q.identifier?H.touch0[0]=G:H.touch1&&H.touch1[2]===q.identifier&&(H.touch1[0]=G);if(q=H.that.__zoom,H.touch1){var P=H.touch0[0],K=H.touch0[1],ee=H.touch1[0],te=H.touch1[1],ie=(ie=ee[0]-P[0])*ie+(ie=ee[1]-P[1])*ie,se=(se=te[0]-K[0])*se+(se=te[1]-K[1])*se;q=w(q,Math.sqrt(ie/se)),G=[(P[0]+ee[0])/2,(P[1]+ee[1])/2],J=[(K[0]+te[0])/2,(K[1]+te[1])/2]}else if(H.touch0)G=H.touch0[0],J=H.touch0[1];else return;H.zoom("touch",n(j(q,G,J),H.extent,a))}}function W(B,...V){if(this.__zooming){var H=R(this,V).event(B),U=B.changedTouches,Y=U.length,Q,q;for(Iy(B),g&&clearTimeout(g),g=setTimeout(function(){g=null},x),Q=0;Q<Y;++Q)q=U[Q],H.touch0&&H.touch0[2]===q.identifier?delete H.touch0:H.touch1&&H.touch1[2]===q.identifier&&delete H.touch1;if(H.touch1&&!H.touch0&&(H.touch0=H.touch1,delete H.touch1),H.touch0)H.touch0[1]=this.__zoom.invert(H.touch0[0]);else if(H.end(),H.taps===2&&(q=zi(q,this),Math.hypot(p[0]-q[0],p[1]-q[1])<S)){var G=li(this).on("dblclick.zoom");G&&G.apply(this,arguments)}}}return b.wheelDelta=function(B){return arguments.length?(r=typeof B=="function"?B:Cf(+B),b):r},b.filter=function(B){return arguments.length?(e=typeof B=="function"?B:Cf(!!B),b):e},b.touchable=function(B){return arguments.length?(i=typeof B=="function"?B:Cf(!!B),b):i},b.extent=function(B){return arguments.length?(t=typeof B=="function"?B:Cf([[+B[0][0],+B[0][1]],[+B[1][0],+B[1][1]]]),b):t},b.scaleExtent=function(B){return arguments.length?(o[0]=+B[0],o[1]=+B[1],b):[o[0],o[1]]},b.translateExtent=function(B){return arguments.length?(a[0][0]=+B[0][0],a[1][0]=+B[1][0],a[0][1]=+B[0][1],a[1][1]=+B[1][1],b):[[a[0][0],a[0][1]],[a[1][0],a[1][1]]]},b.constrain=function(B){return arguments.length?(n=B,b):n},b.duration=function(B){return arguments.length?(c=+B,b):c},b.interpolate=function(B){return arguments.length?(d=B,b):d},b.on=function(){var B=m.on.apply(m,arguments);return B===m?b:B},b.clickDistance=function(B){return arguments.length?(k=(B=+B)*B,b):Math.sqrt(k)},b.tapDistance=function(B){return arguments.length?(S=+B,b):S},b}const ls={error001:()=>"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:t,sourceHandle:n,targetHandle:r})=>`Couldn't create edge for ${e} handle id: "${e==="source"?n:r}", edge id: ${t}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs."},Du=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],AT=["Enter"," ","Escape"],MT={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:e,x:t,y:n})=>`Moved selected node ${e}. New position, x: ${t}, y: ${n}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var Rl;(function(e){e.Strict="strict",e.Loose="loose"})(Rl||(Rl={}));var na;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(na||(na={}));var Ou;(function(e){e.Partial="partial",e.Full="full"})(Ou||(Ou={}));const DT={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var xo;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(xo||(xo={}));var Cm;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Cm||(Cm={}));var st;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(st||(st={}));const KC={[st.Left]:st.Right,[st.Right]:st.Left,[st.Top]:st.Bottom,[st.Bottom]:st.Top};function OT(e){return e===null?null:e?"valid":"invalid"}const LT=e=>"id"in e&&"source"in e&&"target"in e,PY=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),P0=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),Wu=(e,t=[0,0])=>{const{width:n,height:r}=$s(e),i=e.origin??t,o=n*i[0],a=r*i[1];return{x:e.position.x-o,y:e.position.y-a}},BY=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((r,i)=>{const o=typeof i=="string";let a=!t.nodeLookup&&!o?i:void 0;t.nodeLookup&&(a=o?t.nodeLookup.get(i):P0(i)?i:t.nodeLookup.get(i.id));const c=a?jm(a,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return sp(r,c)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return op(n)},Yu=(e,t={})=>{let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0},r=!1;return e.forEach(i=>{(t.filter===void 0||t.filter(i))&&(n=sp(n,jm(i)),r=!0)}),r?op(n):{x:0,y:0,width:0,height:0}},B0=(e,t,[n,r,i]=[0,0,1],o=!1,a=!1)=>{const c={...Ku(t,[n,r,i]),width:t.width/i,height:t.height/i},d=[];for(const m of e.values()){const{measured:h,selectable:p=!0,hidden:g=!1}=m;if(a&&!p||g)continue;const x=h.width??m.width??m.initialWidth??null,v=h.height??m.height??m.initialHeight??null,k=Lu(c,Ml(m)),S=(x??0)*(v??0),b=o&&k>0;(!m.internals.handleBounds||b||k>=S||m.dragging)&&d.push(m)}return d},$Y=(e,t)=>{const n=new Set;return e.forEach(r=>{n.add(r.id)}),t.filter(r=>n.has(r.source)||n.has(r.target))};function HY(e,t){const n=new Map,r=t?.nodes?new Set(t.nodes.map(i=>i.id)):null;return e.forEach(i=>{i.measured.width&&i.measured.height&&(t?.includeHiddenNodes||!i.hidden)&&(!r||r.has(i.id))&&n.set(i.id,i)}),n}async function FY({nodes:e,width:t,height:n,panZoom:r,minZoom:i,maxZoom:o},a){if(e.size===0)return Promise.resolve(!0);const c=HY(e,a),d=Yu(c),m=$0(d,t,n,a?.minZoom??i,a?.maxZoom??o,a?.padding??.1);return await r.setViewport(m,{duration:a?.duration,ease:a?.ease,interpolate:a?.interpolate}),Promise.resolve(!0)}function zT({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:r=[0,0],nodeExtent:i,onError:o}){const a=n.get(e),c=a.parentId?n.get(a.parentId):void 0,{x:d,y:m}=c?c.internals.positionAbsolute:{x:0,y:0},h=a.origin??r;let p=a.extent||i;if(a.extent==="parent"&&!a.expandParent)if(!c)o?.("005",ls.error005());else{const x=c.measured.width,v=c.measured.height;x&&v&&(p=[[d,m],[d+x,m+v]])}else c&&Dl(a.extent)&&(p=[[a.extent[0][0]+d,a.extent[0][1]+m],[a.extent[1][0]+d,a.extent[1][1]+m]]);const g=Dl(p)?aa(t,p,a.measured):t;return(a.measured.width===void 0||a.measured.height===void 0)&&o?.("015",ls.error015()),{position:{x:g.x-d+(a.measured.width??0)*h[0],y:g.y-m+(a.measured.height??0)*h[1]},positionAbsolute:g}}async function VY({nodesToRemove:e=[],edgesToRemove:t=[],nodes:n,edges:r,onBeforeDelete:i}){const o=new Set(e.map(g=>g.id)),a=[];for(const g of n){if(g.deletable===!1)continue;const x=o.has(g.id),v=!x&&g.parentId&&a.find(k=>k.id===g.parentId);(x||v)&&a.push(g)}const c=new Set(t.map(g=>g.id)),d=r.filter(g=>g.deletable!==!1),h=$Y(a,d);for(const g of d)c.has(g.id)&&!h.find(v=>v.id===g.id)&&h.push(g);if(!i)return{edges:h,nodes:a};const p=await i({nodes:a,edges:h});return typeof p=="boolean"?p?{edges:h,nodes:a}:{edges:[],nodes:[]}:p}const Al=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),aa=(e={x:0,y:0},t,n)=>({x:Al(e.x,t[0][0],t[1][0]-(n?.width??0)),y:Al(e.y,t[0][1],t[1][1]-(n?.height??0))});function PT(e,t,n){const{width:r,height:i}=$s(n),{x:o,y:a}=n.internals.positionAbsolute;return aa(e,[[o,a],[o+r,a+i]],t)}const ZC=(e,t,n)=>e<t?Al(Math.abs(e-t),1,t)/t:e>n?-Al(Math.abs(e-n),1,t)/t:0,BT=(e,t,n=15,r=40)=>{const i=ZC(e.x,r,t.width-r)*n,o=ZC(e.y,r,t.height-r)*n;return[i,o]},sp=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Cv=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),op=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),Ml=(e,t=[0,0])=>{const{x:n,y:r}=P0(e)?e.internals.positionAbsolute:Wu(e,t);return{x:n,y:r,width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}},jm=(e,t=[0,0])=>{const{x:n,y:r}=P0(e)?e.internals.positionAbsolute:Wu(e,t);return{x:n,y:r,x2:n+(e.measured?.width??e.width??e.initialWidth??0),y2:r+(e.measured?.height??e.height??e.initialHeight??0)}},$T=(e,t)=>op(sp(Cv(e),Cv(t))),Lu=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*r)},QC=e=>Hi(e.width)&&Hi(e.height)&&Hi(e.x)&&Hi(e.y),Hi=e=>!isNaN(e)&&isFinite(e),UY=(e,t)=>{},Xu=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),Ku=({x:e,y:t},[n,r,i],o=!1,a=[1,1])=>{const c={x:(e-n)/i,y:(t-r)/i};return o?Xu(c,a):c},Em=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r});function Ja(e,t){if(typeof e=="number")return Math.floor((t-t/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(n)}if(typeof e=="string"&&e.endsWith("%")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(t*n*.01)}return console.error(`[React Flow] The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function qY(e,t,n){if(typeof e=="string"||typeof e=="number"){const r=Ja(e,n),i=Ja(e,t);return{top:r,right:i,bottom:r,left:i,x:i*2,y:r*2}}if(typeof e=="object"){const r=Ja(e.top??e.y??0,n),i=Ja(e.bottom??e.y??0,n),o=Ja(e.left??e.x??0,t),a=Ja(e.right??e.x??0,t);return{top:r,right:a,bottom:i,left:o,x:o+a,y:r+i}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function GY(e,t,n,r,i,o){const{x:a,y:c}=Em(e,[t,n,r]),{x:d,y:m}=Em({x:e.x+e.width,y:e.y+e.height},[t,n,r]),h=i-d,p=o-m;return{left:Math.floor(a),top:Math.floor(c),right:Math.floor(h),bottom:Math.floor(p)}}const $0=(e,t,n,r,i,o)=>{const a=qY(o,t,n),c=(t-a.x)/e.width,d=(n-a.y)/e.height,m=Math.min(c,d),h=Al(m,r,i),p=e.x+e.width/2,g=e.y+e.height/2,x=t/2-p*h,v=n/2-g*h,k=GY(e,x,v,h,t,n),S={left:Math.min(k.left-a.left,0),top:Math.min(k.top-a.top,0),right:Math.min(k.right-a.right,0),bottom:Math.min(k.bottom-a.bottom,0)};return{x:x-S.left+S.right,y:v-S.top+S.bottom,zoom:h}},zu=()=>typeof navigator<"u"&&navigator?.userAgent?.indexOf("Mac")>=0;function Dl(e){return e!=null&&e!=="parent"}function $s(e){return{width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}}function HT(e){return(e.measured?.width??e.width??e.initialWidth)!==void 0&&(e.measured?.height??e.height??e.initialHeight)!==void 0}function FT(e,t={width:0,height:0},n,r,i){const o={...e},a=r.get(n);if(a){const c=a.origin||i;o.x+=a.internals.positionAbsolute.x-(t.width??0)*c[0],o.y+=a.internals.positionAbsolute.y-(t.height??0)*c[1]}return o}function JC(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function WY(){let e,t;return{promise:new Promise((r,i)=>{e=r,t=i}),resolve:e,reject:t}}function YY(e){return{...MT,...e||{}}}function gu(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:r,containerBounds:i}){const{x:o,y:a}=Fi(e),c=Ku({x:o-(i?.left??0),y:a-(i?.top??0)},r),{x:d,y:m}=n?Xu(c,t):c;return{xSnapped:d,ySnapped:m,...c}}const H0=e=>({width:e.offsetWidth,height:e.offsetHeight}),VT=e=>e?.getRootNode?.()||window?.document,XY=["INPUT","SELECT","TEXTAREA"];function UT(e){const t=e.composedPath?.()?.[0]||e.target;return t?.nodeType!==1?!1:XY.includes(t.nodeName)||t.hasAttribute("contenteditable")||!!t.closest(".nokey")}const qT=e=>"clientX"in e,Fi=(e,t)=>{const n=qT(e),r=n?e.clientX:e.touches?.[0].clientX,i=n?e.clientY:e.touches?.[0].clientY;return{x:r-(t?.left??0),y:i-(t?.top??0)}},e2=(e,t,n,r,i)=>{const o=t.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(a=>{const c=a.getBoundingClientRect();return{id:a.getAttribute("data-handleid"),type:e,nodeId:i,position:a.getAttribute("data-handlepos"),x:(c.left-n.left)/r,y:(c.top-n.top)/r,...H0(a)}})};function GT({sourceX:e,sourceY:t,targetX:n,targetY:r,sourceControlX:i,sourceControlY:o,targetControlX:a,targetControlY:c}){const d=e*.125+i*.375+a*.375+n*.125,m=t*.125+o*.375+c*.375+r*.125,h=Math.abs(d-e),p=Math.abs(m-t);return[d,m,h,p]}function jf(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function t2({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case st.Left:return[t-jf(t-r,o),n];case st.Right:return[t+jf(r-t,o),n];case st.Top:return[t,n-jf(n-i,o)];case st.Bottom:return[t,n+jf(i-n,o)]}}function WT({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:r,targetY:i,targetPosition:o=st.Top,curvature:a=.25}){const[c,d]=t2({pos:n,x1:e,y1:t,x2:r,y2:i,c:a}),[m,h]=t2({pos:o,x1:r,y1:i,x2:e,y2:t,c:a}),[p,g,x,v]=GT({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:c,sourceControlY:d,targetControlX:m,targetControlY:h});return[`M${e},${t} C${c},${d} ${m},${h} ${r},${i}`,p,g,x,v]}function YT({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n<e?n+i:n-i,a=Math.abs(r-t)/2,c=r<t?r+a:r-a;return[o,c,i,a]}function KY({sourceNode:e,targetNode:t,selected:n=!1,zIndex:r=0,elevateOnSelect:i=!1,zIndexMode:o="basic"}){if(o==="manual")return r;const a=i&&n?r+1e3:r,c=Math.max(e.parentId||i&&e.selected?e.internals.z:0,t.parentId||i&&t.selected?t.internals.z:0);return a+c}function ZY({sourceNode:e,targetNode:t,width:n,height:r,transform:i}){const o=sp(jm(e),jm(t));o.x===o.x2&&(o.x2+=1),o.y===o.y2&&(o.y2+=1);const a={x:-i[0]/i[2],y:-i[1]/i[2],width:n/i[2],height:r/i[2]};return Lu(a,op(o))>0}const QY=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`xy-edge__${e}${t||""}-${n}${r||""}`,JY=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),eX=(e,t,n={})=>{if(!e.source||!e.target)return t;const r=n.getEdgeId||QY;let i;return LT(e)?i={...e}:i={...e,id:r(e)},JY(i,t)?t:(i.sourceHandle===null&&delete i.sourceHandle,i.targetHandle===null&&delete i.targetHandle,t.concat(i))};function XT({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,a,c]=YT({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,a,c]}const n2={[st.Left]:{x:-1,y:0},[st.Right]:{x:1,y:0},[st.Top]:{x:0,y:-1},[st.Bottom]:{x:0,y:1}},tX=({source:e,sourcePosition:t=st.Bottom,target:n})=>t===st.Left||t===st.Right?e.x<n.x?{x:1,y:0}:{x:-1,y:0}:e.y<n.y?{x:0,y:1}:{x:0,y:-1},r2=(e,t)=>Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function nX({source:e,sourcePosition:t=st.Bottom,target:n,targetPosition:r=st.Top,center:i,offset:o,stepPosition:a}){const c=n2[t],d=n2[r],m={x:e.x+c.x*o,y:e.y+c.y*o},h={x:n.x+d.x*o,y:n.y+d.y*o},p=tX({source:m,sourcePosition:t,target:h}),g=p.x!==0?"x":"y",x=p[g];let v=[],k,S;const b={x:0,y:0},w={x:0,y:0},[,,j,N]=YT({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(c[g]*d[g]===-1){g==="x"?(k=i.x??m.x+(h.x-m.x)*a,S=i.y??(m.y+h.y)/2):(k=i.x??(m.x+h.x)/2,S=i.y??m.y+(h.y-m.y)*a);const I=[{x:k,y:m.y},{x:k,y:h.y}],D=[{x:m.x,y:S},{x:h.x,y:S}];c[g]===x?v=g==="x"?I:D:v=g==="x"?D:I}else{const I=[{x:m.x,y:h.y}],D=[{x:h.x,y:m.y}];if(g==="x"?v=c.x===x?D:I:v=c.y===x?I:D,t===r){const B=Math.abs(e[g]-n[g]);if(B<=o){const V=Math.min(o-1,o-B);c[g]===x?b[g]=(m[g]>e[g]?-1:1)*V:w[g]=(h[g]>n[g]?-1:1)*V}}if(t!==r){const B=g==="x"?"y":"x",V=c[g]===d[B],H=m[B]>h[B],U=m[B]<h[B];(c[g]===1&&(!V&&H||V&&U)||c[g]!==1&&(!V&&U||V&&H))&&(v=g==="x"?I:D)}const M={x:m.x+b.x,y:m.y+b.y},A={x:h.x+w.x,y:h.y+w.y},$=Math.max(Math.abs(M.x-v[0].x),Math.abs(A.x-v[0].x)),W=Math.max(Math.abs(M.y-v[0].y),Math.abs(A.y-v[0].y));$>=W?(k=(M.x+A.x)/2,S=v[0].y):(k=v[0].x,S=(M.y+A.y)/2)}const O={x:m.x+b.x,y:m.y+b.y},R={x:h.x+w.x,y:h.y+w.y};return[[e,...O.x!==v[0].x||O.y!==v[0].y?[O]:[],...v,...R.x!==v[v.length-1].x||R.y!==v[v.length-1].y?[R]:[],n],k,S,j,N]}function rX(e,t,n,r){const i=Math.min(r2(e,t)/2,r2(t,n)/2,r),{x:o,y:a}=t;if(e.x===o&&o===n.x||e.y===a&&a===n.y)return`L${o} ${a}`;if(e.y===a){const m=e.x<n.x?-1:1,h=e.y<n.y?1:-1;return`L ${o+i*m},${a}Q ${o},${a} ${o},${a+i*h}`}const c=e.x<n.x?1:-1,d=e.y<n.y?-1:1;return`L ${o},${a+i*d}Q ${o},${a} ${o+i*c},${a}`}function jv({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:r,targetY:i,targetPosition:o=st.Top,borderRadius:a=5,centerX:c,centerY:d,offset:m=20,stepPosition:h=.5}){const[p,g,x,v,k]=nX({source:{x:e,y:t},sourcePosition:n,target:{x:r,y:i},targetPosition:o,center:{x:c,y:d},offset:m,stepPosition:h});let S=`M${p[0].x} ${p[0].y}`;for(let b=1;b<p.length-1;b++)S+=rX(p[b-1],p[b],p[b+1],a);return S+=`L${p[p.length-1].x} ${p[p.length-1].y}`,[S,g,x,v,k]}function i2(e){return e&&!!(e.internals.handleBounds||e.handles?.length)&&!!(e.measured.width||e.width||e.initialWidth)}function iX(e){const{sourceNode:t,targetNode:n}=e;if(!i2(t)||!i2(n))return null;const r=t.internals.handleBounds||s2(t.handles),i=n.internals.handleBounds||s2(n.handles),o=o2(r?.source??[],e.sourceHandle),a=o2(e.connectionMode===Rl.Strict?i?.target??[]:(i?.target??[]).concat(i?.source??[]),e.targetHandle);if(!o||!a)return e.onError?.("008",ls.error008(o?"target":"source",{id:e.id,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle})),null;const c=o?.position||st.Bottom,d=a?.position||st.Top,m=la(t,o,c),h=la(n,a,d);return{sourceX:m.x,sourceY:m.y,targetX:h.x,targetY:h.y,sourcePosition:c,targetPosition:d}}function s2(e){if(!e)return null;const t=[],n=[];for(const r of e)r.width=r.width??1,r.height=r.height??1,r.type==="source"?t.push(r):r.type==="target"&&n.push(r);return{source:t,target:n}}function la(e,t,n=st.Left,r=!1){const i=(t?.x??0)+e.internals.positionAbsolute.x,o=(t?.y??0)+e.internals.positionAbsolute.y,{width:a,height:c}=t??$s(e);if(r)return{x:i+a/2,y:o+c/2};switch(t?.position??n){case st.Top:return{x:i+a/2,y:o};case st.Right:return{x:i+a,y:o+c/2};case st.Bottom:return{x:i+a/2,y:o+c};case st.Left:return{x:i,y:o+c/2}}}function o2(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function Ev(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`:""}function sX(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:i}){const o=new Set;return e.reduce((a,c)=>([c.markerStart||r,c.markerEnd||i].forEach(d=>{if(d&&typeof d=="object"){const m=Ev(d,t);o.has(m)||(a.push({id:m,color:d.color||n,...d}),o.add(m))}}),a),[]).sort((a,c)=>a.id.localeCompare(c.id))}const KT=1e3,oX=10,F0={nodeOrigin:[0,0],nodeExtent:Du,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},aX={...F0,checkEquality:!0};function V0(e,t){const n={...e};for(const r in t)t[r]!==void 0&&(n[r]=t[r]);return n}function lX(e,t,n){const r=V0(F0,n);for(const i of e.values())if(i.parentId)q0(i,e,t,r);else{const o=Wu(i,r.nodeOrigin),a=Dl(i.extent)?i.extent:r.nodeExtent,c=aa(o,a,$s(i));i.internals.positionAbsolute=c}}function cX(e,t){if(!e.handles)return e.measured?t?.internals.handleBounds:void 0;const n=[],r=[];for(const i of e.handles){const o={id:i.id,width:i.width??1,height:i.height??1,nodeId:e.id,x:i.x,y:i.y,position:i.position,type:i.type};i.type==="source"?n.push(o):i.type==="target"&&r.push(o)}return{source:n,target:r}}function U0(e){return e==="manual"}function Nv(e,t,n,r={}){const i=V0(aX,r),o={i:0},a=new Map(t),c=i?.elevateNodesOnSelect&&!U0(i.zIndexMode)?KT:0;let d=e.length>0,m=!1;t.clear(),n.clear();for(const h of e){let p=a.get(h.id);if(i.checkEquality&&h===p?.internals.userNode)t.set(h.id,p);else{const g=Wu(h,i.nodeOrigin),x=Dl(h.extent)?h.extent:i.nodeExtent,v=aa(g,x,$s(h));p={...i.defaults,...h,measured:{width:h.measured?.width,height:h.measured?.height},internals:{positionAbsolute:v,handleBounds:cX(h,p),z:ZT(h,c,i.zIndexMode),userNode:h}},t.set(h.id,p)}(p.measured===void 0||p.measured.width===void 0||p.measured.height===void 0)&&!p.hidden&&(d=!1),h.parentId&&q0(p,t,n,r,o),m||=h.selected??!1}return{nodesInitialized:d,hasSelectedNodes:m}}function uX(e,t){if(!e.parentId)return;const n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function q0(e,t,n,r,i){const{elevateNodesOnSelect:o,nodeOrigin:a,nodeExtent:c,zIndexMode:d}=V0(F0,r),m=e.parentId,h=t.get(m);if(!h){console.warn(`Parent node ${m} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}uX(e,n),i&&!h.parentId&&h.internals.rootParentIndex===void 0&&d==="auto"&&(h.internals.rootParentIndex=++i.i,h.internals.z=h.internals.z+i.i*oX),i&&h.internals.rootParentIndex!==void 0&&(i.i=h.internals.rootParentIndex);const p=o&&!U0(d)?KT:0,{x:g,y:x,z:v}=dX(e,h,a,c,p,d),{positionAbsolute:k}=e.internals,S=g!==k.x||x!==k.y;(S||v!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x:g,y:x}:k,z:v}})}function ZT(e,t,n){const r=Hi(e.zIndex)?e.zIndex:0;return U0(n)?r:r+(e.selected?t:0)}function dX(e,t,n,r,i,o){const{x:a,y:c}=t.internals.positionAbsolute,d=$s(e),m=Wu(e,n),h=Dl(e.extent)?aa(m,e.extent,d):m;let p=aa({x:a+h.x,y:c+h.y},r,d);e.extent==="parent"&&(p=PT(p,d,t));const g=ZT(e,i,o),x=t.internals.z??0;return{x:p.x,y:p.y,z:x>=g?x+1:g}}function G0(e,t,n,r=[0,0]){const i=[],o=new Map;for(const a of e){const c=t.get(a.parentId);if(!c)continue;const d=o.get(a.parentId)?.expandedRect??Ml(c),m=$T(d,a.rect);o.set(a.parentId,{expandedRect:m,parent:c})}return o.size>0&&o.forEach(({expandedRect:a,parent:c},d)=>{const m=c.internals.positionAbsolute,h=$s(c),p=c.origin??r,g=a.x<m.x?Math.round(Math.abs(m.x-a.x)):0,x=a.y<m.y?Math.round(Math.abs(m.y-a.y)):0,v=Math.max(h.width,Math.round(a.width)),k=Math.max(h.height,Math.round(a.height)),S=(v-h.width)*p[0],b=(k-h.height)*p[1];(g>0||x>0||S||b)&&(i.push({id:d,type:"position",position:{x:c.position.x-g+S,y:c.position.y-x+b}}),n.get(d)?.forEach(w=>{e.some(j=>j.id===w.id)||i.push({id:w.id,type:"position",position:{x:w.position.x+g,y:w.position.y+x}})})),(h.width<a.width||h.height<a.height||g||x)&&i.push({id:d,type:"dimensions",setAttributes:!0,dimensions:{width:v+(g?p[0]*g-S:0),height:k+(x?p[1]*x-b:0)}})}),i}function fX(e,t,n,r,i,o,a){const c=r?.querySelector(".xyflow__viewport");let d=!1;if(!c)return{changes:[],updatedInternals:d};const m=[],h=window.getComputedStyle(c),{m22:p}=new window.DOMMatrixReadOnly(h.transform),g=[];for(const x of e.values()){const v=t.get(x.id);if(!v)continue;if(v.hidden){t.set(v.id,{...v,internals:{...v.internals,handleBounds:void 0}}),d=!0;continue}const k=H0(x.nodeElement),S=v.measured.width!==k.width||v.measured.height!==k.height;if(!!(k.width&&k.height&&(S||!v.internals.handleBounds||x.force))){const w=x.nodeElement.getBoundingClientRect(),j=Dl(v.extent)?v.extent:o;let{positionAbsolute:N}=v.internals;v.parentId&&v.extent==="parent"?N=PT(N,k,t.get(v.parentId)):j&&(N=aa(N,j,k));const O={...v,measured:k,internals:{...v.internals,positionAbsolute:N,handleBounds:{source:e2("source",x.nodeElement,w,p,v.id),target:e2("target",x.nodeElement,w,p,v.id)}}};t.set(v.id,O),v.parentId&&q0(O,t,n,{nodeOrigin:i,zIndexMode:a}),d=!0,S&&(m.push({id:v.id,type:"dimensions",dimensions:k}),v.expandParent&&v.parentId&&g.push({id:v.id,parentId:v.parentId,rect:Ml(O,i)}))}}if(g.length>0){const x=G0(g,t,n,i);m.push(...x)}return{changes:m,updatedInternals:d}}async function mX({delta:e,panZoom:t,transform:n,translateExtent:r,width:i,height:o}){if(!t||!e.x&&!e.y)return Promise.resolve(!1);const a=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[i,o]],r),c=!!a&&(a.x!==n[0]||a.y!==n[1]||a.k!==n[2]);return Promise.resolve(c)}function a2(e,t,n,r,i,o){let a=i;const c=r.get(a)||new Map;r.set(a,c.set(n,t)),a=`${i}-${e}`;const d=r.get(a)||new Map;if(r.set(a,d.set(n,t)),o){a=`${i}-${e}-${o}`;const m=r.get(a)||new Map;r.set(a,m.set(n,t))}}function QT(e,t,n){e.clear(),t.clear();for(const r of n){const{source:i,target:o,sourceHandle:a=null,targetHandle:c=null}=r,d={edgeId:r.id,source:i,target:o,sourceHandle:a,targetHandle:c},m=`${i}-${a}--${o}-${c}`,h=`${o}-${c}--${i}-${a}`;a2("source",d,h,e,i,a),a2("target",d,m,e,o,c),t.set(r.id,r)}}function JT(e,t){if(!e.parentId)return!1;const n=t.get(e.parentId);return n?n.selected?!0:JT(n,t):!1}function l2(e,t,n){let r=e;do{if(r?.matches?.(t))return!0;if(r===n)return!1;r=r?.parentElement}while(r);return!1}function pX(e,t,n,r){const i=new Map;for(const[o,a]of e)if((a.selected||a.id===r)&&(!a.parentId||!JT(a,e))&&(a.draggable||t&&typeof a.draggable>"u")){const c=e.get(o);c&&i.set(o,{id:o,position:c.position||{x:0,y:0},distance:{x:n.x-c.internals.positionAbsolute.x,y:n.y-c.internals.positionAbsolute.y},extent:c.extent,parentId:c.parentId,origin:c.origin,expandParent:c.expandParent,internals:{positionAbsolute:c.internals.positionAbsolute||{x:0,y:0}},measured:{width:c.measured.width??0,height:c.measured.height??0}})}return i}function Ty({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){const i=[];for(const[a,c]of t){const d=n.get(a)?.internals.userNode;d&&i.push({...d,position:c.position,dragging:r})}if(!e)return[i[0],i];const o=n.get(e)?.internals.userNode;return[o?{...o,position:t.get(e)?.position||o.position,dragging:r}:i[0],i]}function hX({dragItems:e,snapGrid:t,x:n,y:r}){const i=e.values().next().value;if(!i)return null;const o={x:n-i.distance.x,y:r-i.distance.y},a=Xu(o,t);return{x:a.x-o.x,y:a.y-o.y}}function gX({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:i}){let o={x:null,y:null},a=0,c=new Map,d=!1,m={x:0,y:0},h=null,p=!1,g=null,x=!1,v=!1,k=null;function S({noDragClassName:w,handleSelector:j,domNode:N,isSelectable:O,nodeId:R,nodeClickDistance:L=0}){g=li(N);function I({x:$,y:W}){const{nodeLookup:B,nodeExtent:V,snapGrid:H,snapToGrid:U,nodeOrigin:Y,onNodeDrag:Q,onSelectionDrag:q,onError:G,updateNodePositions:J}=t();o={x:$,y:W};let P=!1;const K=c.size>1,ee=K&&V?Cv(Yu(c)):null,te=K&&U?hX({dragItems:c,snapGrid:H,x:$,y:W}):null;for(const[ie,se]of c){if(!B.has(ie))continue;let de={x:$-se.distance.x,y:W-se.distance.y};U&&(de=te?{x:Math.round(de.x+te.x),y:Math.round(de.y+te.y)}:Xu(de,H));let oe=null;if(K&&V&&!se.extent&&ee){const{positionAbsolute:Ie}=se.internals,Be=Ie.x-ee.x+V[0][0],Ge=Ie.x+se.measured.width-ee.x2+V[1][0],Ue=Ie.y-ee.y+V[0][1],at=Ie.y+se.measured.height-ee.y2+V[1][1];oe=[[Be,Ue],[Ge,at]]}const{position:Ne,positionAbsolute:Ee}=zT({nodeId:ie,nextPosition:de,nodeLookup:B,nodeExtent:oe||V,nodeOrigin:Y,onError:G});P=P||se.position.x!==Ne.x||se.position.y!==Ne.y,se.position=Ne,se.internals.positionAbsolute=Ee}if(v=v||P,!!P&&(J(c,!0),k&&(r||Q||!R&&q))){const[ie,se]=Ty({nodeId:R,dragItems:c,nodeLookup:B});r?.(k,c,ie,se),Q?.(k,ie,se),R||q?.(k,se)}}async function D(){if(!h)return;const{transform:$,panBy:W,autoPanSpeed:B,autoPanOnNodeDrag:V}=t();if(!V){d=!1,cancelAnimationFrame(a);return}const[H,U]=BT(m,h,B);(H!==0||U!==0)&&(o.x=(o.x??0)-H/$[2],o.y=(o.y??0)-U/$[2],await W({x:H,y:U})&&I(o)),a=requestAnimationFrame(D)}function M($){const{nodeLookup:W,multiSelectionActive:B,nodesDraggable:V,transform:H,snapGrid:U,snapToGrid:Y,selectNodesOnDrag:Q,onNodeDragStart:q,onSelectionDragStart:G,unselectNodesAndEdges:J}=t();p=!0,(!Q||!O)&&!B&&R&&(W.get(R)?.selected||J()),O&&Q&&R&&e?.(R);const P=gu($.sourceEvent,{transform:H,snapGrid:U,snapToGrid:Y,containerBounds:h});if(o=P,c=pX(W,V,P,R),c.size>0&&(n||q||!R&&G)){const[K,ee]=Ty({nodeId:R,dragItems:c,nodeLookup:W});n?.($.sourceEvent,c,K,ee),q?.($.sourceEvent,K,ee),R||G?.($.sourceEvent,ee)}}const A=gT().clickDistance(L).on("start",$=>{const{domNode:W,nodeDragThreshold:B,transform:V,snapGrid:H,snapToGrid:U}=t();h=W?.getBoundingClientRect()||null,x=!1,v=!1,k=$.sourceEvent,B===0&&M($),o=gu($.sourceEvent,{transform:V,snapGrid:H,snapToGrid:U,containerBounds:h}),m=Fi($.sourceEvent,h)}).on("drag",$=>{const{autoPanOnNodeDrag:W,transform:B,snapGrid:V,snapToGrid:H,nodeDragThreshold:U,nodeLookup:Y}=t(),Q=gu($.sourceEvent,{transform:B,snapGrid:V,snapToGrid:H,containerBounds:h});if(k=$.sourceEvent,($.sourceEvent.type==="touchmove"&&$.sourceEvent.touches.length>1||R&&!Y.has(R))&&(x=!0),!x){if(!d&&W&&p&&(d=!0,D()),!p){const q=Fi($.sourceEvent,h),G=q.x-m.x,J=q.y-m.y;Math.sqrt(G*G+J*J)>U&&M($)}(o.x!==Q.xSnapped||o.y!==Q.ySnapped)&&c&&p&&(m=Fi($.sourceEvent,h),I(Q))}}).on("end",$=>{if(!(!p||x)&&(d=!1,p=!1,cancelAnimationFrame(a),c.size>0)){const{nodeLookup:W,updateNodePositions:B,onNodeDragStop:V,onSelectionDragStop:H}=t();if(v&&(B(c,!1),v=!1),i||V||!R&&H){const[U,Y]=Ty({nodeId:R,dragItems:c,nodeLookup:W,dragging:!1});i?.($.sourceEvent,c,U,Y),V?.($.sourceEvent,U,Y),R||H?.($.sourceEvent,Y)}}}).filter($=>{const W=$.target;return!$.button&&(!w||!l2(W,`.${w}`,N))&&(!j||l2(W,j,N))});g.call(A)}function b(){g?.on(".drag",null)}return{update:S,destroy:b}}function yX(e,t,n){const r=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const o of t.values())Lu(i,Ml(o))>0&&r.push(o);return r}const xX=250;function vX(e,t,n,r){let i=[],o=1/0;const a=yX(e,n,t+xX);for(const c of a){const d=[...c.internals.handleBounds?.source??[],...c.internals.handleBounds?.target??[]];for(const m of d){if(r.nodeId===m.nodeId&&r.type===m.type&&r.id===m.id)continue;const{x:h,y:p}=la(c,m,m.position,!0),g=Math.sqrt(Math.pow(h-e.x,2)+Math.pow(p-e.y,2));g>t||(g<o?(i=[{...m,x:h,y:p}],o=g):g===o&&i.push({...m,x:h,y:p}))}}if(!i.length)return null;if(i.length>1){const c=r.type==="source"?"target":"source";return i.find(d=>d.type===c)??i[0]}return i[0]}function eR(e,t,n,r,i,o=!1){const a=r.get(e);if(!a)return null;const c=i==="strict"?a.internals.handleBounds?.[t]:[...a.internals.handleBounds?.source??[],...a.internals.handleBounds?.target??[]],d=(n?c?.find(m=>m.id===n):c?.[0])??null;return d&&o?{...d,...la(a,d,d.position,!0)}:d}function tR(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function bX(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}const nR=()=>!0;function _X(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:i,edgeUpdaterType:o,isTarget:a,domNode:c,nodeLookup:d,lib:m,autoPanOnConnect:h,flowId:p,panBy:g,cancelConnection:x,onConnectStart:v,onConnect:k,onConnectEnd:S,isValidConnection:b=nR,onReconnectEnd:w,updateConnection:j,getTransform:N,getFromHandle:O,autoPanSpeed:R,dragThreshold:L=1,handleDomNode:I}){const D=VT(e.target);let M=0,A;const{x:$,y:W}=Fi(e),B=tR(o,I),V=c?.getBoundingClientRect();let H=!1;if(!V||!B)return;const U=eR(i,B,r,d,t);if(!U)return;let Y=Fi(e,V),Q=!1,q=null,G=!1,J=null;function P(){if(!h||!V)return;const[Ne,Ee]=BT(Y,V,R);g({x:Ne,y:Ee}),M=requestAnimationFrame(P)}const K={...U,nodeId:i,type:B,position:U.position},ee=d.get(i);let ie={inProgress:!0,isValid:null,from:la(ee,K,st.Left,!0),fromHandle:K,fromPosition:K.position,fromNode:ee,to:Y,toHandle:null,toPosition:KC[K.position],toNode:null,pointer:Y};function se(){H=!0,j(ie),v?.(e,{nodeId:i,handleId:r,handleType:B})}L===0&&se();function de(Ne){if(!H){const{x:at,y:Pt}=Fi(Ne),wt=at-$,Ct=Pt-W;if(!(wt*wt+Ct*Ct>L*L))return;se()}if(!O()||!K){oe(Ne);return}const Ee=N();Y=Fi(Ne,V),A=vX(Ku(Y,Ee,!1,[1,1]),n,d,K),Q||(P(),Q=!0);const Ie=rR(Ne,{handle:A,connectionMode:t,fromNodeId:i,fromHandleId:r,fromType:a?"target":"source",isValidConnection:b,doc:D,lib:m,flowId:p,nodeLookup:d});J=Ie.handleDomNode,q=Ie.connection,G=bX(!!A,Ie.isValid);const Be=d.get(i),Ge=Be?la(Be,K,st.Left,!0):ie.from,Ue={...ie,from:Ge,isValid:G,to:Ie.toHandle&&G?Em({x:Ie.toHandle.x,y:Ie.toHandle.y},Ee):Y,toHandle:Ie.toHandle,toPosition:G&&Ie.toHandle?Ie.toHandle.position:KC[K.position],toNode:Ie.toHandle?d.get(Ie.toHandle.nodeId):null,pointer:Y};j(Ue),ie=Ue}function oe(Ne){if(!("touches"in Ne&&Ne.touches.length>0)){if(H){(A||J)&&q&&G&&k?.(q);const{inProgress:Ee,...Ie}=ie,Be={...Ie,toPosition:ie.toHandle?ie.toPosition:null};S?.(Ne,Be),o&&w?.(Ne,Be)}x(),cancelAnimationFrame(M),Q=!1,G=!1,q=null,J=null,D.removeEventListener("mousemove",de),D.removeEventListener("mouseup",oe),D.removeEventListener("touchmove",de),D.removeEventListener("touchend",oe)}}D.addEventListener("mousemove",de),D.addEventListener("mouseup",oe),D.addEventListener("touchmove",de),D.addEventListener("touchend",oe)}function rR(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:i,fromType:o,doc:a,lib:c,flowId:d,isValidConnection:m=nR,nodeLookup:h}){const p=o==="target",g=t?a.querySelector(`.${c}-flow__handle[data-id="${d}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x,y:v}=Fi(e),k=a.elementFromPoint(x,v),S=k?.classList.contains(`${c}-flow__handle`)?k:g,b={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const w=tR(void 0,S),j=S.getAttribute("data-nodeid"),N=S.getAttribute("data-handleid"),O=S.classList.contains("connectable"),R=S.classList.contains("connectableend");if(!j||!w)return b;const L={source:p?j:r,sourceHandle:p?N:i,target:p?r:j,targetHandle:p?i:N};b.connection=L;const D=O&&R&&(n===Rl.Strict?p&&w==="source"||!p&&w==="target":j!==r||N!==i);b.isValid=D&&m(L),b.toHandle=eR(j,w,N,h,n,!0)}return b}const Iv={onPointerDown:_X,isValid:rR};function kX({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){const i=li(e);function o({translateExtent:c,width:d,height:m,zoomStep:h=1,pannable:p=!0,zoomable:g=!0,inversePan:x=!1}){const v=j=>{if(j.sourceEvent.type!=="wheel"||!t)return;const N=n(),O=j.sourceEvent.ctrlKey&&zu()?10:1,R=-j.sourceEvent.deltaY*(j.sourceEvent.deltaMode===1?.05:j.sourceEvent.deltaMode?1:.002)*h,L=N[2]*Math.pow(2,R*O);t.scaleTo(L)};let k=[0,0];const S=j=>{(j.sourceEvent.type==="mousedown"||j.sourceEvent.type==="touchstart")&&(k=[j.sourceEvent.clientX??j.sourceEvent.touches[0].clientX,j.sourceEvent.clientY??j.sourceEvent.touches[0].clientY])},b=j=>{const N=n();if(j.sourceEvent.type!=="mousemove"&&j.sourceEvent.type!=="touchmove"||!t)return;const O=[j.sourceEvent.clientX??j.sourceEvent.touches[0].clientX,j.sourceEvent.clientY??j.sourceEvent.touches[0].clientY],R=[O[0]-k[0],O[1]-k[1]];k=O;const L=r()*Math.max(N[2],Math.log(N[2]))*(x?-1:1),I={x:N[0]-R[0]*L,y:N[1]-R[1]*L},D=[[0,0],[d,m]];t.setViewportConstrained({x:I.x,y:I.y,zoom:N[2]},D,c)},w=RT().on("start",S).on("zoom",p?b:null).on("zoom.wheel",g?v:null);i.call(w,{})}function a(){i.on("zoom",null)}return{update:o,destroy:a,pointer:zi}}const ap=e=>({x:e.x,y:e.y,zoom:e.k}),Ry=({x:e,y:t,zoom:n})=>ip.translate(e,t).scale(n),ol=(e,t)=>e.target.closest(`.${t}`),iR=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),SX=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Ay=(e,t=0,n=SX,r=()=>{})=>{const i=typeof t=="number"&&t>0;return i||r(),i?e.transition().duration(t).ease(n).on("end",r):e},sR=e=>{const t=e.ctrlKey&&zu()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function wX({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:i,panOnScrollSpeed:o,zoomOnPinch:a,onPanZoomStart:c,onPanZoom:d,onPanZoomEnd:m}){return h=>{if(ol(h,t))return h.ctrlKey&&h.preventDefault(),!1;h.preventDefault(),h.stopImmediatePropagation();const p=n.property("__zoom").k||1;if(h.ctrlKey&&a){const S=zi(h),b=sR(h),w=p*Math.pow(2,b);r.scaleTo(n,w,S,h);return}const g=h.deltaMode===1?20:1;let x=i===na.Vertical?0:h.deltaX*g,v=i===na.Horizontal?0:h.deltaY*g;!zu()&&h.shiftKey&&i!==na.Vertical&&(x=h.deltaY*g,v=0),r.translateBy(n,-(x/p)*o,-(v/p)*o,{internal:!0});const k=ap(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(d?.(h,k),e.panScrollTimeout=setTimeout(()=>{m?.(h,k),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,c?.(h,k))}}function CX({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,i){const o=r.type==="wheel",a=!t&&o&&!r.ctrlKey,c=ol(r,e);if(r.ctrlKey&&o&&c&&r.preventDefault(),a||c)return null;r.preventDefault(),n.call(this,r,i)}}function jX({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{if(r.sourceEvent?.internal)return;const i=ap(r.transform);e.mouseButton=r.sourceEvent?.button||0,e.isZoomingOrPanning=!0,e.prevViewport=i,r.sourceEvent?.type==="mousedown"&&t(!0),n&&n?.(r.sourceEvent,i)}}function EX({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:i}){return o=>{e.usedRightMouseButton=!!(n&&iR(t,e.mouseButton??0)),o.sourceEvent?.sync||r([o.transform.x,o.transform.y,o.transform.k]),i&&!o.sourceEvent?.internal&&i?.(o.sourceEvent,ap(o.transform))}}function NX({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:i,onPaneContextMenu:o}){return a=>{if(!a.sourceEvent?.internal&&(e.isZoomingOrPanning=!1,o&&iR(t,e.mouseButton??0)&&!e.usedRightMouseButton&&a.sourceEvent&&o(a.sourceEvent),e.usedRightMouseButton=!1,r(!1),i)){const c=ap(a.transform);e.prevViewport=c,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{i?.(a.sourceEvent,c)},n?150:0)}}}function IX({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:n,panOnDrag:r,panOnScroll:i,zoomOnDoubleClick:o,userSelectionActive:a,noWheelClassName:c,noPanClassName:d,lib:m,connectionInProgress:h}){return p=>{const g=e||t,x=n&&p.ctrlKey,v=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(ol(p,`${m}-flow__node`)||ol(p,`${m}-flow__edge`)))return!0;if(!r&&!g&&!i&&!o&&!n||a||h&&!v||ol(p,c)&&v||ol(p,d)&&(!v||i&&v&&!e)||!n&&p.ctrlKey&&v)return!1;if(!n&&p.type==="touchstart"&&p.touches?.length>1)return p.preventDefault(),!1;if(!g&&!i&&!x&&v||!r&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(r)&&!r.includes(p.button)&&p.type==="mousedown")return!1;const k=Array.isArray(r)&&r.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||v)&&k}}function TX({domNode:e,minZoom:t,maxZoom:n,translateExtent:r,viewport:i,onPanZoom:o,onPanZoomStart:a,onPanZoomEnd:c,onDraggingChange:d}){const m={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},h=e.getBoundingClientRect(),p=RT().scaleExtent([t,n]).translateExtent(r),g=li(e).call(p);w({x:i.x,y:i.y,zoom:Al(i.zoom,t,n)},[[0,0],[h.width,h.height]],r);const x=g.on("wheel.zoom"),v=g.on("dblclick.zoom");p.wheelDelta(sR);function k(A,$){return g?new Promise(W=>{p?.interpolate($?.interpolate==="linear"?hu:$f).transform(Ay(g,$?.duration,$?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function S({noWheelClassName:A,noPanClassName:$,onPaneContextMenu:W,userSelectionActive:B,panOnScroll:V,panOnDrag:H,panOnScrollMode:U,panOnScrollSpeed:Y,preventScrolling:Q,zoomOnPinch:q,zoomOnScroll:G,zoomOnDoubleClick:J,zoomActivationKeyPressed:P,lib:K,onTransformChange:ee,connectionInProgress:te,paneClickDistance:ie,selectionOnDrag:se}){B&&!m.isZoomingOrPanning&&b();const de=V&&!P&&!B;p.clickDistance(se?1/0:!Hi(ie)||ie<0?0:ie);const oe=de?wX({zoomPanValues:m,noWheelClassName:A,d3Selection:g,d3Zoom:p,panOnScrollMode:U,panOnScrollSpeed:Y,zoomOnPinch:q,onPanZoomStart:a,onPanZoom:o,onPanZoomEnd:c}):CX({noWheelClassName:A,preventScrolling:Q,d3ZoomHandler:x});if(g.on("wheel.zoom",oe,{passive:!1}),!B){const Ee=jX({zoomPanValues:m,onDraggingChange:d,onPanZoomStart:a});p.on("start",Ee);const Ie=EX({zoomPanValues:m,panOnDrag:H,onPaneContextMenu:!!W,onPanZoom:o,onTransformChange:ee});p.on("zoom",Ie);const Be=NX({zoomPanValues:m,panOnDrag:H,panOnScroll:V,onPaneContextMenu:W,onPanZoomEnd:c,onDraggingChange:d});p.on("end",Be)}const Ne=IX({zoomActivationKeyPressed:P,panOnDrag:H,zoomOnScroll:G,panOnScroll:V,zoomOnDoubleClick:J,zoomOnPinch:q,userSelectionActive:B,noPanClassName:$,noWheelClassName:A,lib:K,connectionInProgress:te});p.filter(Ne),J?g.on("dblclick.zoom",v):g.on("dblclick.zoom",null)}function b(){p.on("zoom",null)}async function w(A,$,W){const B=Ry(A),V=p?.constrain()(B,$,W);return V&&await k(V),new Promise(H=>H(V))}async function j(A,$){const W=Ry(A);return await k(W,$),new Promise(B=>B(W))}function N(A){if(g){const $=Ry(A),W=g.property("__zoom");(W.k!==A.zoom||W.x!==A.x||W.y!==A.y)&&p?.transform(g,$,null,{sync:!0})}}function O(){const A=g?TT(g.node()):{x:0,y:0,k:1};return{x:A.x,y:A.y,zoom:A.k}}function R(A,$){return g?new Promise(W=>{p?.interpolate($?.interpolate==="linear"?hu:$f).scaleTo(Ay(g,$?.duration,$?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function L(A,$){return g?new Promise(W=>{p?.interpolate($?.interpolate==="linear"?hu:$f).scaleBy(Ay(g,$?.duration,$?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function I(A){p?.scaleExtent(A)}function D(A){p?.translateExtent(A)}function M(A){const $=!Hi(A)||A<0?0:A;p?.clickDistance($)}return{update:S,destroy:b,setViewport:j,setViewportConstrained:w,getViewport:O,scaleTo:R,scaleBy:L,setScaleExtent:I,setTranslateExtent:D,syncViewport:N,setClickDistance:M}}var Ol;(function(e){e.Line="line",e.Handle="handle"})(Ol||(Ol={}));function RX({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:i,affectsY:o}){const a=e-t,c=n-r,d=[a>0?1:a<0?-1:0,c>0?1:c<0?-1:0];return a&&i&&(d[0]=d[0]*-1),c&&o&&(d[1]=d[1]*-1),d}function c2(e){const t=e.includes("right")||e.includes("left"),n=e.includes("bottom")||e.includes("top"),r=e.includes("left"),i=e.includes("top");return{isHorizontal:t,isVertical:n,affectsX:r,affectsY:i}}function po(e,t){return Math.max(0,t-e)}function ho(e,t){return Math.max(0,e-t)}function Ef(e,t,n){return Math.max(0,t-e,e-n)}function u2(e,t){return e?!t:t}function AX(e,t,n,r,i,o,a,c){let{affectsX:d,affectsY:m}=t;const{isHorizontal:h,isVertical:p}=t,g=h&&p,{xSnapped:x,ySnapped:v}=n,{minWidth:k,maxWidth:S,minHeight:b,maxHeight:w}=r,{x:j,y:N,width:O,height:R,aspectRatio:L}=e;let I=Math.floor(h?x-e.pointerX:0),D=Math.floor(p?v-e.pointerY:0);const M=O+(d?-I:I),A=R+(m?-D:D),$=-o[0]*O,W=-o[1]*R;let B=Ef(M,k,S),V=Ef(A,b,w);if(a){let Y=0,Q=0;d&&I<0?Y=po(j+I+$,a[0][0]):!d&&I>0&&(Y=ho(j+M+$,a[1][0])),m&&D<0?Q=po(N+D+W,a[0][1]):!m&&D>0&&(Q=ho(N+A+W,a[1][1])),B=Math.max(B,Y),V=Math.max(V,Q)}if(c){let Y=0,Q=0;d&&I>0?Y=ho(j+I,c[0][0]):!d&&I<0&&(Y=po(j+M,c[1][0])),m&&D>0?Q=ho(N+D,c[0][1]):!m&&D<0&&(Q=po(N+A,c[1][1])),B=Math.max(B,Y),V=Math.max(V,Q)}if(i){if(h){const Y=Ef(M/L,b,w)*L;if(B=Math.max(B,Y),a){let Q=0;!d&&!m||d&&!m&&g?Q=ho(N+W+M/L,a[1][1])*L:Q=po(N+W+(d?I:-I)/L,a[0][1])*L,B=Math.max(B,Q)}if(c){let Q=0;!d&&!m||d&&!m&&g?Q=po(N+M/L,c[1][1])*L:Q=ho(N+(d?I:-I)/L,c[0][1])*L,B=Math.max(B,Q)}}if(p){const Y=Ef(A*L,k,S)/L;if(V=Math.max(V,Y),a){let Q=0;!d&&!m||m&&!d&&g?Q=ho(j+A*L+$,a[1][0])/L:Q=po(j+(m?D:-D)*L+$,a[0][0])/L,V=Math.max(V,Q)}if(c){let Q=0;!d&&!m||m&&!d&&g?Q=po(j+A*L,c[1][0])/L:Q=ho(j+(m?D:-D)*L,c[0][0])/L,V=Math.max(V,Q)}}}D=D+(D<0?V:-V),I=I+(I<0?B:-B),i&&(g?M>A*L?D=(u2(d,m)?-I:I)/L:I=(u2(d,m)?-D:D)*L:h?(D=I/L,m=d):(I=D*L,d=m));const H=d?j+I:j,U=m?N+D:N;return{width:O+(d?-I:I),height:R+(m?-D:D),x:o[0]*I*(d?-1:1)+H,y:o[1]*D*(m?-1:1)+U}}const oR={width:0,height:0,x:0,y:0},MX={...oR,pointerX:0,pointerY:0,aspectRatio:1};function DX(e){return[[0,0],[e.measured.width,e.measured.height]]}function OX(e,t,n){const r=t.position.x+e.position.x,i=t.position.y+e.position.y,o=e.measured.width??0,a=e.measured.height??0,c=n[0]*o,d=n[1]*a;return[[r-c,i-d],[r+o-c,i+a-d]]}function LX({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:i}){const o=li(e);let a={controlDirection:c2("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function c({controlPosition:m,boundaries:h,keepAspectRatio:p,resizeDirection:g,onResizeStart:x,onResize:v,onResizeEnd:k,shouldResize:S}){let b={...oR},w={...MX};a={boundaries:h,resizeDirection:g,keepAspectRatio:p,controlDirection:c2(m)};let j,N=null,O=[],R,L,I,D=!1;const M=gT().on("start",A=>{const{nodeLookup:$,transform:W,snapGrid:B,snapToGrid:V,nodeOrigin:H,paneDomNode:U}=n();if(j=$.get(t),!j)return;N=U?.getBoundingClientRect()??null;const{xSnapped:Y,ySnapped:Q}=gu(A.sourceEvent,{transform:W,snapGrid:B,snapToGrid:V,containerBounds:N});b={width:j.measured.width??0,height:j.measured.height??0,x:j.position.x??0,y:j.position.y??0},w={...b,pointerX:Y,pointerY:Q,aspectRatio:b.width/b.height},R=void 0,j.parentId&&(j.extent==="parent"||j.expandParent)&&(R=$.get(j.parentId),L=R&&j.extent==="parent"?DX(R):void 0),O=[],I=void 0;for(const[q,G]of $)if(G.parentId===t&&(O.push({id:q,position:{...G.position},extent:G.extent}),G.extent==="parent"||G.expandParent)){const J=OX(G,j,G.origin??H);I?I=[[Math.min(J[0][0],I[0][0]),Math.min(J[0][1],I[0][1])],[Math.max(J[1][0],I[1][0]),Math.max(J[1][1],I[1][1])]]:I=J}x?.(A,{...b})}).on("drag",A=>{const{transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:V}=n(),H=gu(A.sourceEvent,{transform:$,snapGrid:W,snapToGrid:B,containerBounds:N}),U=[];if(!j)return;const{x:Y,y:Q,width:q,height:G}=b,J={},P=j.origin??V,{width:K,height:ee,x:te,y:ie}=AX(w,a.controlDirection,H,a.boundaries,a.keepAspectRatio,P,L,I),se=K!==q,de=ee!==G,oe=te!==Y&&se,Ne=ie!==Q&&de;if(!oe&&!Ne&&!se&&!de)return;if((oe||Ne||P[0]===1||P[1]===1)&&(J.x=oe?te:b.x,J.y=Ne?ie:b.y,b.x=J.x,b.y=J.y,O.length>0)){const Ge=te-Y,Ue=ie-Q;for(const at of O)at.position={x:at.position.x-Ge+P[0]*(K-q),y:at.position.y-Ue+P[1]*(ee-G)},U.push(at)}if((se||de)&&(J.width=se&&(!a.resizeDirection||a.resizeDirection==="horizontal")?K:b.width,J.height=de&&(!a.resizeDirection||a.resizeDirection==="vertical")?ee:b.height,b.width=J.width,b.height=J.height),R&&j.expandParent){const Ge=P[0]*(J.width??0);J.x&&J.x<Ge&&(b.x=Ge,w.x=w.x-(J.x-Ge));const Ue=P[1]*(J.height??0);J.y&&J.y<Ue&&(b.y=Ue,w.y=w.y-(J.y-Ue))}const Ee=RX({width:b.width,prevWidth:q,height:b.height,prevHeight:G,affectsX:a.controlDirection.affectsX,affectsY:a.controlDirection.affectsY}),Ie={...b,direction:Ee};S?.(A,Ie)!==!1&&(D=!0,v?.(A,Ie),r(J,U))}).on("end",A=>{D&&(k?.(A,{...b}),i?.({...b}),D=!1)});o.call(M)}function d(){o.on(".drag",null)}return{update:c,destroy:d}}var My={exports:{}},Dy={},Oy={exports:{}},Ly={};var d2;function zX(){if(d2)return Ly;d2=1;var e=zl();function t(p,g){return p===g&&(p!==0||1/p===1/g)||p!==p&&g!==g}var n=typeof Object.is=="function"?Object.is:t,r=e.useState,i=e.useEffect,o=e.useLayoutEffect,a=e.useDebugValue;function c(p,g){var x=g(),v=r({inst:{value:x,getSnapshot:g}}),k=v[0].inst,S=v[1];return o(function(){k.value=x,k.getSnapshot=g,d(k)&&S({inst:k})},[p,x,g]),i(function(){return d(k)&&S({inst:k}),p(function(){d(k)&&S({inst:k})})},[p]),a(x),x}function d(p){var g=p.getSnapshot;p=p.value;try{var x=g();return!n(p,x)}catch{return!0}}function m(p,g){return g()}var h=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?m:c;return Ly.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:h,Ly}var f2;function PX(){return f2||(f2=1,Oy.exports=zX()),Oy.exports}var m2;function BX(){if(m2)return Dy;m2=1;var e=zl(),t=PX();function n(m,h){return m===h&&(m!==0||1/m===1/h)||m!==m&&h!==h}var r=typeof Object.is=="function"?Object.is:n,i=t.useSyncExternalStore,o=e.useRef,a=e.useEffect,c=e.useMemo,d=e.useDebugValue;return Dy.useSyncExternalStoreWithSelector=function(m,h,p,g,x){var v=o(null);if(v.current===null){var k={hasValue:!1,value:null};v.current=k}else k=v.current;v=c(function(){function b(R){if(!w){if(w=!0,j=R,R=g(R),x!==void 0&&k.hasValue){var L=k.value;if(x(L,R))return N=L}return N=R}if(L=N,r(j,R))return L;var I=g(R);return x!==void 0&&x(L,I)?(j=R,L):(j=R,N=I)}var w=!1,j,N,O=p===void 0?null:p;return[function(){return b(h())},O===null?void 0:function(){return b(O())}]},[h,p,g,x]);var S=i(m,v[0],v[1]);return a(function(){k.hasValue=!0,k.value=S},[S]),d(S),S},Dy}var p2;function $X(){return p2||(p2=1,My.exports=BX()),My.exports}var HX=$X();const FX=ca(HX),VX={},h2=e=>{let t;const n=new Set,r=(h,p)=>{const g=typeof h=="function"?h(t):h;if(!Object.is(g,t)){const x=t;t=p??(typeof g!="object"||g===null)?g:Object.assign({},t,g),n.forEach(v=>v(t,x))}},i=()=>t,d={setState:r,getState:i,getInitialState:()=>m,subscribe:h=>(n.add(h),()=>n.delete(h)),destroy:()=>{(VX?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},m=t=e(r,i,d);return d},UX=e=>e?h2(e):h2,{useDebugValue:qX}=It,{useSyncExternalStoreWithSelector:GX}=FX,WX=e=>e;function aR(e,t=WX,n){const r=GX(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return qX(r),r}const g2=(e,t)=>{const n=UX(e),r=(i,o=t)=>aR(n,i,o);return Object.assign(r,n),r},YX=(e,t)=>e?g2(e,t):g2;function $n(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,i]of e)if(!Object.is(i,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}const lp=C.createContext(null),XX=lp.Provider,lR=ls.error001();function rn(e,t){const n=C.useContext(lp);if(n===null)throw new Error(lR);return aR(n,e,t)}function Hn(){const e=C.useContext(lp);if(e===null)throw new Error(lR);return C.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const y2={display:"none"},KX={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},cR="react-flow__node-desc",uR="react-flow__edge-desc",ZX="react-flow__aria-live",QX=e=>e.ariaLiveMessage,JX=e=>e.ariaLabelConfig;function eK({rfId:e}){const t=rn(QX);return u.jsx("div",{id:`${ZX}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:KX,children:t})}function tK({rfId:e,disableKeyboardA11y:t}){const n=rn(JX);return u.jsxs(u.Fragment,{children:[u.jsx("div",{id:`${cR}-${e}`,style:y2,children:t?n["node.a11yDescription.default"]:n["node.a11yDescription.keyboardDisabled"]}),u.jsx("div",{id:`${uR}-${e}`,style:y2,children:n["edge.a11yDescription.default"]}),!t&&u.jsx(eK,{rfId:e})]})}const cp=C.forwardRef(({position:e="top-left",children:t,className:n,style:r,...i},o)=>{const a=`${e}`.split("-");return u.jsx("div",{className:dr(["react-flow__panel",n,...a]),style:r,ref:o,...i,children:t})});cp.displayName="Panel";function nK({proOptions:e,position:t="bottom-right"}){return e?.hideAttribution?null:u.jsx(cp,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:u.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const rK=e=>{const t=[],n=[];for(const[,r]of e.nodeLookup)r.selected&&t.push(r.internals.userNode);for(const[,r]of e.edgeLookup)r.selected&&n.push(r);return{selectedNodes:t,selectedEdges:n}},Nf=e=>e.id;function iK(e,t){return $n(e.selectedNodes.map(Nf),t.selectedNodes.map(Nf))&&$n(e.selectedEdges.map(Nf),t.selectedEdges.map(Nf))}function sK({onSelectionChange:e}){const t=Hn(),{selectedNodes:n,selectedEdges:r}=rn(rK,iK);return C.useEffect(()=>{const i={nodes:n,edges:r};e?.(i),t.getState().onSelectionChangeHandlers.forEach(o=>o(i))},[n,r,e]),null}const oK=e=>!!e.onSelectionChangeHandlers;function aK({onSelectionChange:e}){const t=rn(oK);return e||t?u.jsx(sK,{onSelectionChange:e}):null}const Tv=typeof window<"u"?C.useLayoutEffect:C.useEffect,dR=[0,0],lK={x:0,y:0,zoom:1},cK=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],x2=[...cK,"rfId"],uK=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),v2={translateExtent:Du,nodeOrigin:dR,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function dK(e){const{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:i,setTranslateExtent:o,setNodeExtent:a,reset:c,setDefaultNodesAndEdges:d}=rn(uK,$n),m=Hn();Tv(()=>(d(e.defaultNodes,e.defaultEdges),()=>{h.current=v2,c()}),[]);const h=C.useRef(v2);return Tv(()=>{for(const p of x2){const g=e[p],x=h.current[p];g!==x&&(typeof e[p]>"u"||(p==="nodes"?t(g):p==="edges"?n(g):p==="minZoom"?r(g):p==="maxZoom"?i(g):p==="translateExtent"?o(g):p==="nodeExtent"?a(g):p==="ariaLabelConfig"?m.setState({ariaLabelConfig:YY(g)}):p==="fitView"?m.setState({fitViewQueued:g}):p==="fitViewOptions"?m.setState({fitViewOptions:g}):m.setState({[p]:g})))}h.current=e},x2.map(p=>e[p])),null}function b2(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function fK(e){const[t,n]=C.useState(e==="system"?null:e);return C.useEffect(()=>{if(e!=="system"){n(e);return}const r=b2(),i=()=>n(r?.matches?"dark":"light");return i(),r?.addEventListener("change",i),()=>{r?.removeEventListener("change",i)}},[e]),t!==null?t:b2()?.matches?"dark":"light"}const _2=typeof document<"u"?document:null;function Pu(e=null,t={target:_2,actInsideInputWithModifier:!0}){const[n,r]=C.useState(!1),i=C.useRef(!1),o=C.useRef(new Set([])),[a,c]=C.useMemo(()=>{if(e!==null){const m=(Array.isArray(e)?e:[e]).filter(p=>typeof p=="string").map(p=>p.replace("+",` -`).replace(` - -`,` -+`).split(` -`)),h=m.reduce((p,g)=>p.concat(...g),[]);return[m,h]}return[[],[]]},[e]);return C.useEffect(()=>{const d=t?.target??_2,m=t?.actInsideInputWithModifier??!0;if(e!==null){const h=x=>{if(i.current=x.ctrlKey||x.metaKey||x.shiftKey||x.altKey,(!i.current||i.current&&!m)&&UT(x))return!1;const k=S2(x.code,c);if(o.current.add(x[k]),k2(a,o.current,!1)){const S=x.composedPath?.()?.[0]||x.target,b=S?.nodeName==="BUTTON"||S?.nodeName==="A";t.preventDefault!==!1&&(i.current||!b)&&x.preventDefault(),r(!0)}},p=x=>{const v=S2(x.code,c);k2(a,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(x[v]),x.key==="Meta"&&o.current.clear(),i.current=!1},g=()=>{o.current.clear(),r(!1)};return d?.addEventListener("keydown",h),d?.addEventListener("keyup",p),window.addEventListener("blur",g),window.addEventListener("contextmenu",g),()=>{d?.removeEventListener("keydown",h),d?.removeEventListener("keyup",p),window.removeEventListener("blur",g),window.removeEventListener("contextmenu",g)}}},[e,r]),n}function k2(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function S2(e,t){return t.includes(e)?"code":"key"}const mK=()=>{const e=Hn();return C.useMemo(()=>({zoomIn:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,t):Promise.resolve(!1)},zoomOut:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,t):Promise.resolve(!1)},zoomTo:(t,n)=>{const{panZoom:r}=e.getState();return r?r.scaleTo(t,n):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{const{transform:[r,i,o],panZoom:a}=e.getState();return a?(await a.setViewport({x:t.x??r,y:t.y??i,zoom:t.zoom??o},n),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},setCenter:async(t,n,r)=>e.getState().setCenter(t,n,r),fitBounds:async(t,n)=>{const{width:r,height:i,minZoom:o,maxZoom:a,panZoom:c}=e.getState(),d=$0(t,r,i,o,a,n?.padding??.1);return c?(await c.setViewport(d,{duration:n?.duration,ease:n?.ease,interpolate:n?.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(t,n={})=>{const{transform:r,snapGrid:i,snapToGrid:o,domNode:a}=e.getState();if(!a)return t;const{x:c,y:d}=a.getBoundingClientRect(),m={x:t.x-c,y:t.y-d},h=n.snapGrid??i,p=n.snapToGrid??o;return Ku(m,r,p,h)},flowToScreenPosition:t=>{const{transform:n,domNode:r}=e.getState();if(!r)return t;const{x:i,y:o}=r.getBoundingClientRect(),a=Em(t,n);return{x:a.x+i,y:a.y+o}}}),[])};function fR(e,t){const n=[],r=new Map,i=[];for(const o of e)if(o.type==="add"){i.push(o);continue}else if(o.type==="remove"||o.type==="replace")r.set(o.id,[o]);else{const a=r.get(o.id);a?a.push(o):r.set(o.id,[o])}for(const o of t){const a=r.get(o.id);if(!a){n.push(o);continue}if(a[0].type==="remove")continue;if(a[0].type==="replace"){n.push({...a[0].item});continue}const c={...o};for(const d of a)pK(d,c);n.push(c)}return i.length&&i.forEach(o=>{o.index!==void 0?n.splice(o.index,0,{...o.item}):n.push({...o.item})}),n}function pK(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function mR(e,t){return fR(e,t)}function hK(e,t){return fR(e,t)}function Jo(e,t){return{id:e,type:"select",selected:t}}function al(e,t=new Set,n=!1){const r=[];for(const[i,o]of e){const a=t.has(i);!(o.selected===void 0&&!a)&&o.selected!==a&&(n&&(o.selected=a),r.push(Jo(o.id,a)))}return r}function w2({items:e=[],lookup:t}){const n=[],r=new Map(e.map(i=>[i.id,i]));for(const[i,o]of e.entries()){const a=t.get(o.id),c=a?.internals?.userNode??a;c!==void 0&&c!==o&&n.push({id:o.id,item:o,type:"replace"}),c===void 0&&n.push({item:o,type:"add",index:i})}for(const[i]of t)r.get(i)===void 0&&n.push({id:i,type:"remove"});return n}function C2(e){return{id:e.id,type:"remove"}}const j2=e=>PY(e),gK=e=>LT(e);function pR(e){return C.forwardRef(e)}function E2(e){const[t,n]=C.useState(BigInt(0)),[r]=C.useState(()=>yK(()=>n(i=>i+BigInt(1))));return Tv(()=>{const i=r.get();i.length&&(e(i),r.reset())},[t]),r}function yK(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const hR=C.createContext(null);function xK({children:e}){const t=Hn(),n=C.useCallback(c=>{const{nodes:d=[],setNodes:m,hasDefaultNodes:h,onNodesChange:p,nodeLookup:g,fitViewQueued:x,onNodesChangeMiddlewareMap:v}=t.getState();let k=d;for(const b of c)k=typeof b=="function"?b(k):b;let S=w2({items:k,lookup:g});for(const b of v.values())S=b(S);h&&m(k),S.length>0?p?.(S):x&&window.requestAnimationFrame(()=>{const{fitViewQueued:b,nodes:w,setNodes:j}=t.getState();b&&j(w)})},[]),r=E2(n),i=C.useCallback(c=>{const{edges:d=[],setEdges:m,hasDefaultEdges:h,onEdgesChange:p,edgeLookup:g}=t.getState();let x=d;for(const v of c)x=typeof v=="function"?v(x):v;h?m(x):p&&p(w2({items:x,lookup:g}))},[]),o=E2(i),a=C.useMemo(()=>({nodeQueue:r,edgeQueue:o}),[]);return u.jsx(hR.Provider,{value:a,children:e})}function vK(){const e=C.useContext(hR);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const bK=e=>!!e.panZoom;function W0(){const e=mK(),t=Hn(),n=vK(),r=rn(bK),i=C.useMemo(()=>{const o=p=>t.getState().nodeLookup.get(p),a=p=>{n.nodeQueue.push(p)},c=p=>{n.edgeQueue.push(p)},d=p=>{const{nodeLookup:g,nodeOrigin:x}=t.getState(),v=j2(p)?p:g.get(p.id),k=v.parentId?FT(v.position,v.measured,v.parentId,g,x):v.position,S={...v,position:k,width:v.measured?.width??v.width,height:v.measured?.height??v.height};return Ml(S)},m=(p,g,x={replace:!1})=>{a(v=>v.map(k=>{if(k.id===p){const S=typeof g=="function"?g(k):g;return x.replace&&j2(S)?S:{...k,...S}}return k}))},h=(p,g,x={replace:!1})=>{c(v=>v.map(k=>{if(k.id===p){const S=typeof g=="function"?g(k):g;return x.replace&&gK(S)?S:{...k,...S}}return k}))};return{getNodes:()=>t.getState().nodes.map(p=>({...p})),getNode:p=>o(p)?.internals.userNode,getInternalNode:o,getEdges:()=>{const{edges:p=[]}=t.getState();return p.map(g=>({...g}))},getEdge:p=>t.getState().edgeLookup.get(p),setNodes:a,setEdges:c,addNodes:p=>{const g=Array.isArray(p)?p:[p];n.nodeQueue.push(x=>[...x,...g])},addEdges:p=>{const g=Array.isArray(p)?p:[p];n.edgeQueue.push(x=>[...x,...g])},toObject:()=>{const{nodes:p=[],edges:g=[],transform:x}=t.getState(),[v,k,S]=x;return{nodes:p.map(b=>({...b})),edges:g.map(b=>({...b})),viewport:{x:v,y:k,zoom:S}}},deleteElements:async({nodes:p=[],edges:g=[]})=>{const{nodes:x,edges:v,onNodesDelete:k,onEdgesDelete:S,triggerNodeChanges:b,triggerEdgeChanges:w,onDelete:j,onBeforeDelete:N}=t.getState(),{nodes:O,edges:R}=await VY({nodesToRemove:p,edgesToRemove:g,nodes:x,edges:v,onBeforeDelete:N}),L=R.length>0,I=O.length>0;if(L){const D=R.map(C2);S?.(R),w(D)}if(I){const D=O.map(C2);k?.(O),b(D)}return(I||L)&&j?.({nodes:O,edges:R}),{deletedNodes:O,deletedEdges:R}},getIntersectingNodes:(p,g=!0,x)=>{const v=QC(p),k=v?p:d(p),S=x!==void 0;return k?(x||t.getState().nodes).filter(b=>{const w=t.getState().nodeLookup.get(b.id);if(w&&!v&&(b.id===p.id||!w.internals.positionAbsolute))return!1;const j=Ml(S?b:w),N=Lu(j,k);return g&&N>0||N>=j.width*j.height||N>=k.width*k.height}):[]},isNodeIntersecting:(p,g,x=!0)=>{const k=QC(p)?p:d(p);if(!k)return!1;const S=Lu(k,g);return x&&S>0||S>=g.width*g.height||S>=k.width*k.height},updateNode:m,updateNodeData:(p,g,x={replace:!1})=>{m(p,v=>{const k=typeof g=="function"?g(v):g;return x.replace?{...v,data:k}:{...v,data:{...v.data,...k}}},x)},updateEdge:h,updateEdgeData:(p,g,x={replace:!1})=>{h(p,v=>{const k=typeof g=="function"?g(v):g;return x.replace?{...v,data:k}:{...v,data:{...v.data,...k}}},x)},getNodesBounds:p=>{const{nodeLookup:g,nodeOrigin:x}=t.getState();return BY(p,{nodeLookup:g,nodeOrigin:x})},getHandleConnections:({type:p,id:g,nodeId:x})=>Array.from(t.getState().connectionLookup.get(`${x}-${p}${g?`-${g}`:""}`)?.values()??[]),getNodeConnections:({type:p,handleId:g,nodeId:x})=>Array.from(t.getState().connectionLookup.get(`${x}${p?g?`-${p}-${g}`:`-${p}`:""}`)?.values()??[]),fitView:async p=>{const g=t.getState().fitViewResolver??WY();return t.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:g}),n.nodeQueue.push(x=>[...x]),g.promise}}},[]);return C.useMemo(()=>({...i,...e,viewportInitialized:r}),[r])}const N2=e=>e.selected,_K=typeof window<"u"?window:void 0;function kK({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=Hn(),{deleteElements:r}=W0(),i=Pu(e,{actInsideInputWithModifier:!1}),o=Pu(t,{target:_K});C.useEffect(()=>{if(i){const{edges:a,nodes:c}=n.getState();r({nodes:c.filter(N2),edges:a.filter(N2)}),n.setState({nodesSelectionActive:!1})}},[i]),C.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])}function SK(e){const t=Hn();C.useEffect(()=>{const n=()=>{if(!e.current||!(e.current.checkVisibility?.()??!0))return!1;const r=H0(e.current);(r.height===0||r.width===0)&&t.getState().onError?.("004",ls.error004()),t.setState({width:r.width||500,height:r.height||500})};if(e.current){n(),window.addEventListener("resize",n);const r=new ResizeObserver(()=>n());return r.observe(e.current),()=>{window.removeEventListener("resize",n),r&&e.current&&r.unobserve(e.current)}}},[])}const up={position:"absolute",width:"100%",height:"100%",top:0,left:0},wK=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function CK({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panOnScrollSpeed:i=.5,panOnScrollMode:o=na.Free,zoomOnDoubleClick:a=!0,panOnDrag:c=!0,defaultViewport:d,translateExtent:m,minZoom:h,maxZoom:p,zoomActivationKeyCode:g,preventScrolling:x=!0,children:v,noWheelClassName:k,noPanClassName:S,onViewportChange:b,isControlledViewport:w,paneClickDistance:j,selectionOnDrag:N}){const O=Hn(),R=C.useRef(null),{userSelectionActive:L,lib:I,connectionInProgress:D}=rn(wK,$n),M=Pu(g),A=C.useRef();SK(R);const $=C.useCallback(W=>{b?.({x:W[0],y:W[1],zoom:W[2]}),w||O.setState({transform:W})},[b,w]);return C.useEffect(()=>{if(R.current){A.current=TX({domNode:R.current,minZoom:h,maxZoom:p,translateExtent:m,viewport:d,onDraggingChange:H=>O.setState(U=>U.paneDragging===H?U:{paneDragging:H}),onPanZoomStart:(H,U)=>{const{onViewportChangeStart:Y,onMoveStart:Q}=O.getState();Q?.(H,U),Y?.(U)},onPanZoom:(H,U)=>{const{onViewportChange:Y,onMove:Q}=O.getState();Q?.(H,U),Y?.(U)},onPanZoomEnd:(H,U)=>{const{onViewportChangeEnd:Y,onMoveEnd:Q}=O.getState();Q?.(H,U),Y?.(U)}});const{x:W,y:B,zoom:V}=A.current.getViewport();return O.setState({panZoom:A.current,transform:[W,B,V],domNode:R.current.closest(".react-flow")}),()=>{A.current?.destroy()}}},[]),C.useEffect(()=>{A.current?.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panOnScrollSpeed:i,panOnScrollMode:o,zoomOnDoubleClick:a,panOnDrag:c,zoomActivationKeyPressed:M,preventScrolling:x,noPanClassName:S,userSelectionActive:L,noWheelClassName:k,lib:I,onTransformChange:$,connectionInProgress:D,selectionOnDrag:N,paneClickDistance:j})},[e,t,n,r,i,o,a,c,M,x,S,L,k,I,$,D,N,j]),u.jsx("div",{className:"react-flow__renderer",ref:R,style:up,children:v})}const jK=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function EK(){const{userSelectionActive:e,userSelectionRect:t}=rn(jK,$n);return e&&t?u.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const zy=(e,t)=>n=>{n.target===t.current&&e?.(n)},NK=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function IK({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Ou.Full,panOnDrag:r,paneClickDistance:i,selectionOnDrag:o,onSelectionStart:a,onSelectionEnd:c,onPaneClick:d,onPaneContextMenu:m,onPaneScroll:h,onPaneMouseEnter:p,onPaneMouseMove:g,onPaneMouseLeave:x,children:v}){const k=Hn(),{userSelectionActive:S,elementsSelectable:b,dragging:w,connectionInProgress:j}=rn(NK,$n),N=b&&(e||S),O=C.useRef(null),R=C.useRef(),L=C.useRef(new Set),I=C.useRef(new Set),D=C.useRef(!1),M=Y=>{if(D.current||j){D.current=!1;return}d?.(Y),k.getState().resetSelectedElements(),k.setState({nodesSelectionActive:!1})},A=Y=>{if(Array.isArray(r)&&r?.includes(2)){Y.preventDefault();return}m?.(Y)},$=h?Y=>h(Y):void 0,W=Y=>{D.current&&(Y.stopPropagation(),D.current=!1)},B=Y=>{const{domNode:Q}=k.getState();if(R.current=Q?.getBoundingClientRect(),!R.current)return;const q=Y.target===O.current;if(!q&&!!Y.target.closest(".nokey")||!e||!(o&&q||t)||Y.button!==0||!Y.isPrimary)return;Y.target?.setPointerCapture?.(Y.pointerId),D.current=!1;const{x:P,y:K}=Fi(Y.nativeEvent,R.current);k.setState({userSelectionRect:{width:0,height:0,startX:P,startY:K,x:P,y:K}}),q||(Y.stopPropagation(),Y.preventDefault())},V=Y=>{const{userSelectionRect:Q,transform:q,nodeLookup:G,edgeLookup:J,connectionLookup:P,triggerNodeChanges:K,triggerEdgeChanges:ee,defaultEdgeOptions:te,resetSelectedElements:ie}=k.getState();if(!R.current||!Q)return;const{x:se,y:de}=Fi(Y.nativeEvent,R.current),{startX:oe,startY:Ne}=Q;if(!D.current){const Ue=t?0:i;if(Math.hypot(se-oe,de-Ne)<=Ue)return;ie(),a?.(Y)}D.current=!0;const Ee={startX:oe,startY:Ne,x:se<oe?se:oe,y:de<Ne?de:Ne,width:Math.abs(se-oe),height:Math.abs(de-Ne)},Ie=L.current,Be=I.current;L.current=new Set(B0(G,Ee,q,n===Ou.Partial,!0).map(Ue=>Ue.id)),I.current=new Set;const Ge=te?.selectable??!0;for(const Ue of L.current){const at=P.get(Ue);if(at)for(const{edgeId:Pt}of at.values()){const wt=J.get(Pt);wt&&(wt.selectable??Ge)&&I.current.add(Pt)}}if(!JC(Ie,L.current)){const Ue=al(G,L.current,!0);K(Ue)}if(!JC(Be,I.current)){const Ue=al(J,I.current);ee(Ue)}k.setState({userSelectionRect:Ee,userSelectionActive:!0,nodesSelectionActive:!1})},H=Y=>{Y.button===0&&(Y.target?.releasePointerCapture?.(Y.pointerId),!S&&Y.target===O.current&&k.getState().userSelectionRect&&M?.(Y),k.setState({userSelectionActive:!1,userSelectionRect:null}),D.current&&(c?.(Y),k.setState({nodesSelectionActive:L.current.size>0})))},U=r===!0||Array.isArray(r)&&r.includes(0);return u.jsxs("div",{className:dr(["react-flow__pane",{draggable:U,dragging:w,selection:e}]),onClick:N?void 0:zy(M,O),onContextMenu:zy(A,O),onWheel:zy($,O),onPointerEnter:N?void 0:p,onPointerMove:N?V:g,onPointerUp:N?H:void 0,onPointerDownCapture:N?B:void 0,onClickCapture:N?W:void 0,onPointerLeave:x,ref:O,style:up,children:[v,u.jsx(EK,{})]})}function Rv({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:a,nodeLookup:c,onError:d}=t.getState(),m=c.get(e);if(!m){d?.("012",ls.error012(e));return}t.setState({nodesSelectionActive:!1}),m.selected?(n||m.selected&&a)&&(o({nodes:[m],edges:[]}),requestAnimationFrame(()=>r?.current?.blur())):i([e])}function gR({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,nodeClickDistance:a}){const c=Hn(),[d,m]=C.useState(!1),h=C.useRef();return C.useEffect(()=>{h.current=gX({getStoreItems:()=>c.getState(),onNodeMouseDown:p=>{Rv({id:p,store:c,nodeRef:e})},onDragStart:()=>{m(!0)},onDragStop:()=>{m(!1)}})},[]),C.useEffect(()=>{if(!(t||!e.current||!h.current))return h.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:o,nodeId:i,nodeClickDistance:a}),()=>{h.current?.destroy()}},[n,r,t,o,e,i,a]),d}const TK=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function yR(){const e=Hn();return C.useCallback(n=>{const{nodeExtent:r,snapToGrid:i,snapGrid:o,nodesDraggable:a,onError:c,updateNodePositions:d,nodeLookup:m,nodeOrigin:h}=e.getState(),p=new Map,g=TK(a),x=i?o[0]:5,v=i?o[1]:5,k=n.direction.x*x*n.factor,S=n.direction.y*v*n.factor;for(const[,b]of m){if(!g(b))continue;let w={x:b.internals.positionAbsolute.x+k,y:b.internals.positionAbsolute.y+S};i&&(w=Xu(w,o));const{position:j,positionAbsolute:N}=zT({nodeId:b.id,nextPosition:w,nodeLookup:m,nodeExtent:r,nodeOrigin:h,onError:c});b.position=j,b.internals.positionAbsolute=N,p.set(b.id,b)}d(p)},[])}const Y0=C.createContext(null),RK=Y0.Provider;Y0.Consumer;const xR=()=>C.useContext(Y0),AK=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),MK=(e,t,n)=>r=>{const{connectionClickStartHandle:i,connectionMode:o,connection:a}=r,{fromHandle:c,toHandle:d,isValid:m}=a,h=d?.nodeId===e&&d?.id===t&&d?.type===n;return{connectingFrom:c?.nodeId===e&&c?.id===t&&c?.type===n,connectingTo:h,clickConnecting:i?.nodeId===e&&i?.id===t&&i?.type===n,isPossibleEndHandle:o===Rl.Strict?c?.type!==n:e!==c?.nodeId||t!==c?.id,connectionInProcess:!!c,clickConnectionInProcess:!!i,valid:h&&m}};function DK({type:e="source",position:t=st.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:a,onConnect:c,children:d,className:m,onMouseDown:h,onTouchStart:p,...g},x){const v=a||null,k=e==="target",S=Hn(),b=xR(),{connectOnClick:w,noPanClassName:j,rfId:N}=rn(AK,$n),{connectingFrom:O,connectingTo:R,clickConnecting:L,isPossibleEndHandle:I,connectionInProcess:D,clickConnectionInProcess:M,valid:A}=rn(MK(b,v,e),$n);b||S.getState().onError?.("010",ls.error010());const $=V=>{const{defaultEdgeOptions:H,onConnect:U,hasDefaultEdges:Y}=S.getState(),Q={...H,...V};if(Y){const{edges:q,setEdges:G}=S.getState();G(eX(Q,q))}U?.(Q),c?.(Q)},W=V=>{if(!b)return;const H=qT(V.nativeEvent);if(i&&(H&&V.button===0||!H)){const U=S.getState();Iv.onPointerDown(V.nativeEvent,{handleDomNode:V.currentTarget,autoPanOnConnect:U.autoPanOnConnect,connectionMode:U.connectionMode,connectionRadius:U.connectionRadius,domNode:U.domNode,nodeLookup:U.nodeLookup,lib:U.lib,isTarget:k,handleId:v,nodeId:b,flowId:U.rfId,panBy:U.panBy,cancelConnection:U.cancelConnection,onConnectStart:U.onConnectStart,onConnectEnd:(...Y)=>S.getState().onConnectEnd?.(...Y),updateConnection:U.updateConnection,onConnect:$,isValidConnection:n||((...Y)=>S.getState().isValidConnection?.(...Y)??!0),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:U.autoPanSpeed,dragThreshold:U.connectionDragThreshold})}H?h?.(V):p?.(V)},B=V=>{const{onClickConnectStart:H,onClickConnectEnd:U,connectionClickStartHandle:Y,connectionMode:Q,isValidConnection:q,lib:G,rfId:J,nodeLookup:P,connection:K}=S.getState();if(!b||!Y&&!i)return;if(!Y){H?.(V.nativeEvent,{nodeId:b,handleId:v,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:b,type:e,id:v}});return}const ee=VT(V.target),te=n||q,{connection:ie,isValid:se}=Iv.isValid(V.nativeEvent,{handle:{nodeId:b,id:v,type:e},connectionMode:Q,fromNodeId:Y.nodeId,fromHandleId:Y.id||null,fromType:Y.type,isValidConnection:te,flowId:J,doc:ee,lib:G,nodeLookup:P});se&&ie&&$(ie);const de=structuredClone(K);delete de.inProgress,de.toPosition=de.toHandle?de.toHandle.position:null,U?.(V,de),S.setState({connectionClickStartHandle:null})};return u.jsx("div",{"data-handleid":v,"data-nodeid":b,"data-handlepos":t,"data-id":`${N}-${b}-${v}-${e}`,className:dr(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",j,m,{source:!k,target:k,connectable:r,connectablestart:i,connectableend:o,clickconnecting:L,connectingfrom:O,connectingto:R,valid:A,connectionindicator:r&&(!D||I)&&(D||M?o:i)}]),onMouseDown:W,onTouchStart:W,onClick:w?B:void 0,ref:x,...g,children:d})}const Ll=C.memo(pR(DK));function OK({data:e,isConnectable:t,sourcePosition:n=st.Bottom}){return u.jsxs(u.Fragment,{children:[e?.label,u.jsx(Ll,{type:"source",position:n,isConnectable:t})]})}function LK({data:e,isConnectable:t,targetPosition:n=st.Top,sourcePosition:r=st.Bottom}){return u.jsxs(u.Fragment,{children:[u.jsx(Ll,{type:"target",position:n,isConnectable:t}),e?.label,u.jsx(Ll,{type:"source",position:r,isConnectable:t})]})}function zK(){return null}function PK({data:e,isConnectable:t,targetPosition:n=st.Top}){return u.jsxs(u.Fragment,{children:[u.jsx(Ll,{type:"target",position:n,isConnectable:t}),e?.label]})}const Nm={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},I2={input:OK,default:LK,output:PK,group:zK};function BK(e){return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??e.style?.width,height:e.height??e.initialHeight??e.style?.height}:{width:e.width??e.style?.width,height:e.height??e.style?.height}}const $K=e=>{const{width:t,height:n,x:r,y:i}=Yu(e.nodeLookup,{filter:o=>!!o.selected});return{width:Hi(t)?t:null,height:Hi(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${i}px)`}};function HK({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Hn(),{width:i,height:o,transformString:a,userSelectionActive:c}=rn($K,$n),d=yR(),m=C.useRef(null);C.useEffect(()=>{n||m.current?.focus({preventScroll:!0})},[n]);const h=!c&&i!==null&&o!==null;if(gR({nodeRef:m,disabled:!h}),!h)return null;const p=e?x=>{const v=r.getState().nodes.filter(k=>k.selected);e(x,v)}:void 0,g=x=>{Object.prototype.hasOwnProperty.call(Nm,x.key)&&(x.preventDefault(),d({direction:Nm[x.key],factor:x.shiftKey?4:1}))};return u.jsx("div",{className:dr(["react-flow__nodesselection","react-flow__container",t]),style:{transform:a},children:u.jsx("div",{ref:m,className:"react-flow__nodesselection-rect",onContextMenu:p,tabIndex:n?void 0:-1,onKeyDown:n?void 0:g,style:{width:i,height:o}})})}const T2=typeof window<"u"?window:void 0,FK=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function vR({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:a,paneClickDistance:c,deleteKeyCode:d,selectionKeyCode:m,selectionOnDrag:h,selectionMode:p,onSelectionStart:g,onSelectionEnd:x,multiSelectionKeyCode:v,panActivationKeyCode:k,zoomActivationKeyCode:S,elementsSelectable:b,zoomOnScroll:w,zoomOnPinch:j,panOnScroll:N,panOnScrollSpeed:O,panOnScrollMode:R,zoomOnDoubleClick:L,panOnDrag:I,defaultViewport:D,translateExtent:M,minZoom:A,maxZoom:$,preventScrolling:W,onSelectionContextMenu:B,noWheelClassName:V,noPanClassName:H,disableKeyboardA11y:U,onViewportChange:Y,isControlledViewport:Q}){const{nodesSelectionActive:q,userSelectionActive:G}=rn(FK,$n),J=Pu(m,{target:T2}),P=Pu(k,{target:T2}),K=P||I,ee=P||N,te=h&&K!==!0,ie=J||G||te;return kK({deleteKeyCode:d,multiSelectionKeyCode:v}),u.jsx(CK,{onPaneContextMenu:o,elementsSelectable:b,zoomOnScroll:w,zoomOnPinch:j,panOnScroll:ee,panOnScrollSpeed:O,panOnScrollMode:R,zoomOnDoubleClick:L,panOnDrag:!J&&K,defaultViewport:D,translateExtent:M,minZoom:A,maxZoom:$,zoomActivationKeyCode:S,preventScrolling:W,noWheelClassName:V,noPanClassName:H,onViewportChange:Y,isControlledViewport:Q,paneClickDistance:c,selectionOnDrag:te,children:u.jsxs(IK,{onSelectionStart:g,onSelectionEnd:x,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:a,panOnDrag:K,isSelecting:!!ie,selectionMode:p,selectionKeyPressed:J,paneClickDistance:c,selectionOnDrag:te,children:[e,q&&u.jsx(HK,{onSelectionContextMenu:B,noPanClassName:H,disableKeyboardA11y:U})]})})}vR.displayName="FlowRenderer";const VK=C.memo(vR),UK=e=>t=>e?B0(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(n=>n.id):Array.from(t.nodeLookup.keys());function qK(e){return rn(C.useCallback(UK(e),[e]),$n)}const GK=e=>e.updateNodeInternals;function WK(){const e=rn(GK),[t]=C.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const r=new Map;n.forEach(i=>{const o=i.target.getAttribute("data-id");r.set(o,{id:o,nodeElement:i.target,force:!0})}),e(r)}));return C.useEffect(()=>()=>{t?.disconnect()},[t]),t}function YK({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){const i=Hn(),o=C.useRef(null),a=C.useRef(null),c=C.useRef(e.sourcePosition),d=C.useRef(e.targetPosition),m=C.useRef(t),h=n&&!!e.internals.handleBounds;return C.useEffect(()=>{o.current&&!e.hidden&&(!h||a.current!==o.current)&&(a.current&&r?.unobserve(a.current),r?.observe(o.current),a.current=o.current)},[h,e.hidden]),C.useEffect(()=>()=>{a.current&&(r?.unobserve(a.current),a.current=null)},[]),C.useEffect(()=>{if(o.current){const p=m.current!==t,g=c.current!==e.sourcePosition,x=d.current!==e.targetPosition;(p||g||x)&&(m.current=t,c.current=e.sourcePosition,d.current=e.targetPosition,i.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function XK({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:i,onContextMenu:o,onDoubleClick:a,nodesDraggable:c,elementsSelectable:d,nodesConnectable:m,nodesFocusable:h,resizeObserver:p,noDragClassName:g,noPanClassName:x,disableKeyboardA11y:v,rfId:k,nodeTypes:S,nodeClickDistance:b,onError:w}){const{node:j,internals:N,isParent:O}=rn(se=>{const de=se.nodeLookup.get(e),oe=se.parentLookup.has(e);return{node:de,internals:de.internals,isParent:oe}},$n);let R=j.type||"default",L=S?.[R]||I2[R];L===void 0&&(w?.("003",ls.error003(R)),R="default",L=S?.default||I2.default);const I=!!(j.draggable||c&&typeof j.draggable>"u"),D=!!(j.selectable||d&&typeof j.selectable>"u"),M=!!(j.connectable||m&&typeof j.connectable>"u"),A=!!(j.focusable||h&&typeof j.focusable>"u"),$=Hn(),W=HT(j),B=YK({node:j,nodeType:R,hasDimensions:W,resizeObserver:p}),V=gR({nodeRef:B,disabled:j.hidden||!I,noDragClassName:g,handleSelector:j.dragHandle,nodeId:e,isSelectable:D,nodeClickDistance:b}),H=yR();if(j.hidden)return null;const U=$s(j),Y=BK(j),Q=D||I||t||n||r||i,q=n?se=>n(se,{...N.userNode}):void 0,G=r?se=>r(se,{...N.userNode}):void 0,J=i?se=>i(se,{...N.userNode}):void 0,P=o?se=>o(se,{...N.userNode}):void 0,K=a?se=>a(se,{...N.userNode}):void 0,ee=se=>{const{selectNodesOnDrag:de,nodeDragThreshold:oe}=$.getState();D&&(!de||!I||oe>0)&&Rv({id:e,store:$,nodeRef:B}),t&&t(se,{...N.userNode})},te=se=>{if(!(UT(se.nativeEvent)||v)){if(AT.includes(se.key)&&D){const de=se.key==="Escape";Rv({id:e,store:$,unselect:de,nodeRef:B})}else if(I&&j.selected&&Object.prototype.hasOwnProperty.call(Nm,se.key)){se.preventDefault();const{ariaLabelConfig:de}=$.getState();$.setState({ariaLiveMessage:de["node.a11yDescription.ariaLiveMessage"]({direction:se.key.replace("Arrow","").toLowerCase(),x:~~N.positionAbsolute.x,y:~~N.positionAbsolute.y})}),H({direction:Nm[se.key],factor:se.shiftKey?4:1})}}},ie=()=>{if(v||!B.current?.matches(":focus-visible"))return;const{transform:se,width:de,height:oe,autoPanOnNodeFocus:Ne,setCenter:Ee}=$.getState();if(!Ne)return;B0(new Map([[e,j]]),{x:0,y:0,width:de,height:oe},se,!0).length>0||Ee(j.position.x+U.width/2,j.position.y+U.height/2,{zoom:se[2]})};return u.jsx("div",{className:dr(["react-flow__node",`react-flow__node-${R}`,{[x]:I},j.className,{selected:j.selected,selectable:D,parent:O,draggable:I,dragging:V}]),ref:B,style:{zIndex:N.z,transform:`translate(${N.positionAbsolute.x}px,${N.positionAbsolute.y}px)`,pointerEvents:Q?"all":"none",visibility:W?"visible":"hidden",...j.style,...Y},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:q,onMouseMove:G,onMouseLeave:J,onContextMenu:P,onClick:ee,onDoubleClick:K,onKeyDown:A?te:void 0,tabIndex:A?0:void 0,onFocus:A?ie:void 0,role:j.ariaRole??(A?"group":void 0),"aria-roledescription":"node","aria-describedby":v?void 0:`${cR}-${k}`,"aria-label":j.ariaLabel,...j.domAttributes,children:u.jsx(RK,{value:e,children:u.jsx(L,{id:e,data:j.data,type:R,positionAbsoluteX:N.positionAbsolute.x,positionAbsoluteY:N.positionAbsolute.y,selected:j.selected??!1,selectable:D,draggable:I,deletable:j.deletable??!0,isConnectable:M,sourcePosition:j.sourcePosition,targetPosition:j.targetPosition,dragging:V,dragHandle:j.dragHandle,zIndex:N.z,parentId:j.parentId,...U})})})}var KK=C.memo(XK);const ZK=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function bR(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,onError:o}=rn(ZK,$n),a=qK(e.onlyRenderVisibleElements),c=WK();return u.jsx("div",{className:"react-flow__nodes",style:up,children:a.map(d=>u.jsx(KK,{id:d,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:c,nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,nodeClickDistance:e.nodeClickDistance,onError:o},d))})}bR.displayName="NodeRenderer";const QK=C.memo(bR);function JK(e){return rn(C.useCallback(n=>{if(!e)return n.edges.map(i=>i.id);const r=[];if(n.width&&n.height)for(const i of n.edges){const o=n.nodeLookup.get(i.source),a=n.nodeLookup.get(i.target);o&&a&&ZY({sourceNode:o,targetNode:a,width:n.width,height:n.height,transform:n.transform})&&r.push(i.id)}return r},[e]),$n)}const eZ=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e}};return u.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},tZ=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e,fill:e}};return u.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},R2={[Cm.Arrow]:eZ,[Cm.ArrowClosed]:tZ};function nZ(e){const t=Hn();return C.useMemo(()=>Object.prototype.hasOwnProperty.call(R2,e)?R2[e]:(t.getState().onError?.("009",ls.error009(e)),null),[e])}const rZ=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:a,orient:c="auto-start-reverse"})=>{const d=nZ(t);return d?u.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:c,refX:"0",refY:"0",children:u.jsx(d,{color:n,strokeWidth:a})}):null},_R=({defaultColor:e,rfId:t})=>{const n=rn(o=>o.edges),r=rn(o=>o.defaultEdgeOptions),i=C.useMemo(()=>sX(n,{id:t,defaultColor:e,defaultMarkerStart:r?.markerStart,defaultMarkerEnd:r?.markerEnd}),[n,r,t,e]);return i.length?u.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:u.jsx("defs",{children:i.map(o=>u.jsx(rZ,{id:o.id,type:o.type,color:o.color,width:o.width,height:o.height,markerUnits:o.markerUnits,strokeWidth:o.strokeWidth,orient:o.orient},o.id))})}):null};_R.displayName="MarkerDefinitions";var iZ=C.memo(_R);function kR({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:o,labelBgPadding:a=[2,4],labelBgBorderRadius:c=2,children:d,className:m,...h}){const[p,g]=C.useState({x:1,y:0,width:0,height:0}),x=dr(["react-flow__edge-textwrapper",m]),v=C.useRef(null);return C.useEffect(()=>{if(v.current){const k=v.current.getBBox();g({x:k.x,y:k.y,width:k.width,height:k.height})}},[n]),n?u.jsxs("g",{transform:`translate(${e-p.width/2} ${t-p.height/2})`,className:x,visibility:p.width?"visible":"hidden",...h,children:[i&&u.jsx("rect",{width:p.width+2*a[0],x:-a[0],y:-a[1],height:p.height+2*a[1],className:"react-flow__edge-textbg",style:o,rx:c,ry:c}),u.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:v,style:r,children:n}),d]}):null}kR.displayName="EdgeText";const sZ=C.memo(kR);function dp({path:e,labelX:t,labelY:n,label:r,labelStyle:i,labelShowBg:o,labelBgStyle:a,labelBgPadding:c,labelBgBorderRadius:d,interactionWidth:m=20,...h}){return u.jsxs(u.Fragment,{children:[u.jsx("path",{...h,d:e,fill:"none",className:dr(["react-flow__edge-path",h.className])}),m?u.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:m,className:"react-flow__edge-interaction"}):null,r&&Hi(t)&&Hi(n)?u.jsx(sZ,{x:t,y:n,label:r,labelStyle:i,labelShowBg:o,labelBgStyle:a,labelBgPadding:c,labelBgBorderRadius:d}):null]})}function A2({pos:e,x1:t,y1:n,x2:r,y2:i}){return e===st.Left||e===st.Right?[.5*(t+r),n]:[t,.5*(n+i)]}function SR({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:r,targetY:i,targetPosition:o=st.Top}){const[a,c]=A2({pos:n,x1:e,y1:t,x2:r,y2:i}),[d,m]=A2({pos:o,x1:r,y1:i,x2:e,y2:t}),[h,p,g,x]=GT({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:c,targetControlX:d,targetControlY:m});return[`M${e},${t} C${a},${c} ${d},${m} ${r},${i}`,h,p,g,x]}function wR(e){return C.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:a,targetPosition:c,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:k,markerStart:S,interactionWidth:b})=>{const[w,j,N]=SR({sourceX:n,sourceY:r,sourcePosition:a,targetX:i,targetY:o,targetPosition:c}),O=e.isInternal?void 0:t;return u.jsx(dp,{id:O,path:w,labelX:j,labelY:N,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:k,markerStart:S,interactionWidth:b})})}const oZ=wR({isInternal:!1}),CR=wR({isInternal:!0});oZ.displayName="SimpleBezierEdge";CR.displayName="SimpleBezierEdgeInternal";function jR(e){return C.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,sourcePosition:x=st.Bottom,targetPosition:v=st.Top,markerEnd:k,markerStart:S,pathOptions:b,interactionWidth:w})=>{const[j,N,O]=jv({sourceX:n,sourceY:r,sourcePosition:x,targetX:i,targetY:o,targetPosition:v,borderRadius:b?.borderRadius,offset:b?.offset,stepPosition:b?.stepPosition}),R=e.isInternal?void 0:t;return u.jsx(dp,{id:R,path:j,labelX:N,labelY:O,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:k,markerStart:S,interactionWidth:w})})}const ER=jR({isInternal:!1}),NR=jR({isInternal:!0});ER.displayName="SmoothStepEdge";NR.displayName="SmoothStepEdgeInternal";function IR(e){return C.memo(({id:t,...n})=>{const r=e.isInternal?void 0:t;return u.jsx(ER,{...n,id:r,pathOptions:C.useMemo(()=>({borderRadius:0,offset:n.pathOptions?.offset}),[n.pathOptions?.offset])})})}const aZ=IR({isInternal:!1}),TR=IR({isInternal:!0});aZ.displayName="StepEdge";TR.displayName="StepEdgeInternal";function RR(e){return C.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:x,markerStart:v,interactionWidth:k})=>{const[S,b,w]=XT({sourceX:n,sourceY:r,targetX:i,targetY:o}),j=e.isInternal?void 0:t;return u.jsx(dp,{id:j,path:S,labelX:b,labelY:w,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:x,markerStart:v,interactionWidth:k})})}const lZ=RR({isInternal:!1}),AR=RR({isInternal:!0});lZ.displayName="StraightEdge";AR.displayName="StraightEdgeInternal";function MR(e){return C.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:a=st.Bottom,targetPosition:c=st.Top,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:k,markerStart:S,pathOptions:b,interactionWidth:w})=>{const[j,N,O]=WT({sourceX:n,sourceY:r,sourcePosition:a,targetX:i,targetY:o,targetPosition:c,curvature:b?.curvature}),R=e.isInternal?void 0:t;return u.jsx(dp,{id:R,path:j,labelX:N,labelY:O,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:k,markerStart:S,interactionWidth:w})})}const cZ=MR({isInternal:!1}),DR=MR({isInternal:!0});cZ.displayName="BezierEdge";DR.displayName="BezierEdgeInternal";const M2={default:DR,straight:AR,step:TR,smoothstep:NR,simplebezier:CR},D2={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},uZ=(e,t,n)=>n===st.Left?e-t:n===st.Right?e+t:e,dZ=(e,t,n)=>n===st.Top?e-t:n===st.Bottom?e+t:e,O2="react-flow__edgeupdater";function L2({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:a,type:c}){return u.jsx("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:a,className:dr([O2,`${O2}-${c}`]),cx:uZ(t,r,e),cy:dZ(n,r,e),r,stroke:"transparent",fill:"transparent"})}function fZ({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:i,targetX:o,targetY:a,sourcePosition:c,targetPosition:d,onReconnect:m,onReconnectStart:h,onReconnectEnd:p,setReconnecting:g,setUpdateHover:x}){const v=Hn(),k=(N,O)=>{if(N.button!==0)return;const{autoPanOnConnect:R,domNode:L,connectionMode:I,connectionRadius:D,lib:M,onConnectStart:A,cancelConnection:$,nodeLookup:W,rfId:B,panBy:V,updateConnection:H}=v.getState(),U=O.type==="target",Y=(G,J)=>{g(!1),p?.(G,n,O.type,J)},Q=G=>m?.(n,G),q=(G,J)=>{g(!0),h?.(N,n,O.type),A?.(G,J)};Iv.onPointerDown(N.nativeEvent,{autoPanOnConnect:R,connectionMode:I,connectionRadius:D,domNode:L,handleId:O.id,nodeId:O.nodeId,nodeLookup:W,isTarget:U,edgeUpdaterType:O.type,lib:M,flowId:B,cancelConnection:$,panBy:V,isValidConnection:(...G)=>v.getState().isValidConnection?.(...G)??!0,onConnect:Q,onConnectStart:q,onConnectEnd:(...G)=>v.getState().onConnectEnd?.(...G),onReconnectEnd:Y,updateConnection:H,getTransform:()=>v.getState().transform,getFromHandle:()=>v.getState().connection.fromHandle,dragThreshold:v.getState().connectionDragThreshold,handleDomNode:N.currentTarget})},S=N=>k(N,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),b=N=>k(N,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),w=()=>x(!0),j=()=>x(!1);return u.jsxs(u.Fragment,{children:[(e===!0||e==="source")&&u.jsx(L2,{position:c,centerX:r,centerY:i,radius:t,onMouseDown:S,onMouseEnter:w,onMouseOut:j,type:"source"}),(e===!0||e==="target")&&u.jsx(L2,{position:d,centerX:o,centerY:a,radius:t,onMouseDown:b,onMouseEnter:w,onMouseOut:j,type:"target"})]})}function mZ({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:i,onDoubleClick:o,onContextMenu:a,onMouseEnter:c,onMouseMove:d,onMouseLeave:m,reconnectRadius:h,onReconnect:p,onReconnectStart:g,onReconnectEnd:x,rfId:v,edgeTypes:k,noPanClassName:S,onError:b,disableKeyboardA11y:w}){let j=rn(Ee=>Ee.edgeLookup.get(e));const N=rn(Ee=>Ee.defaultEdgeOptions);j=N?{...N,...j}:j;let O=j.type||"default",R=k?.[O]||M2[O];R===void 0&&(b?.("011",ls.error011(O)),O="default",R=k?.default||M2.default);const L=!!(j.focusable||t&&typeof j.focusable>"u"),I=typeof p<"u"&&(j.reconnectable||n&&typeof j.reconnectable>"u"),D=!!(j.selectable||r&&typeof j.selectable>"u"),M=C.useRef(null),[A,$]=C.useState(!1),[W,B]=C.useState(!1),V=Hn(),{zIndex:H,sourceX:U,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J}=rn(C.useCallback(Ee=>{const Ie=Ee.nodeLookup.get(j.source),Be=Ee.nodeLookup.get(j.target);if(!Ie||!Be)return{zIndex:j.zIndex,...D2};const Ge=iX({id:e,sourceNode:Ie,targetNode:Be,sourceHandle:j.sourceHandle||null,targetHandle:j.targetHandle||null,connectionMode:Ee.connectionMode,onError:b});return{zIndex:KY({selected:j.selected,zIndex:j.zIndex,sourceNode:Ie,targetNode:Be,elevateOnSelect:Ee.elevateEdgesOnSelect,zIndexMode:Ee.zIndexMode}),...Ge||D2}},[j.source,j.target,j.sourceHandle,j.targetHandle,j.selected,j.zIndex]),$n),P=C.useMemo(()=>j.markerStart?`url('#${Ev(j.markerStart,v)}')`:void 0,[j.markerStart,v]),K=C.useMemo(()=>j.markerEnd?`url('#${Ev(j.markerEnd,v)}')`:void 0,[j.markerEnd,v]);if(j.hidden||U===null||Y===null||Q===null||q===null)return null;const ee=Ee=>{const{addSelectedEdges:Ie,unselectNodesAndEdges:Be,multiSelectionActive:Ge}=V.getState();D&&(V.setState({nodesSelectionActive:!1}),j.selected&&Ge?(Be({nodes:[],edges:[j]}),M.current?.blur()):Ie([e])),i&&i(Ee,j)},te=o?Ee=>{o(Ee,{...j})}:void 0,ie=a?Ee=>{a(Ee,{...j})}:void 0,se=c?Ee=>{c(Ee,{...j})}:void 0,de=d?Ee=>{d(Ee,{...j})}:void 0,oe=m?Ee=>{m(Ee,{...j})}:void 0,Ne=Ee=>{if(!w&&AT.includes(Ee.key)&&D){const{unselectNodesAndEdges:Ie,addSelectedEdges:Be}=V.getState();Ee.key==="Escape"?(M.current?.blur(),Ie({edges:[j]})):Be([e])}};return u.jsx("svg",{style:{zIndex:H},children:u.jsxs("g",{className:dr(["react-flow__edge",`react-flow__edge-${O}`,j.className,S,{selected:j.selected,animated:j.animated,inactive:!D&&!i,updating:A,selectable:D}]),onClick:ee,onDoubleClick:te,onContextMenu:ie,onMouseEnter:se,onMouseMove:de,onMouseLeave:oe,onKeyDown:L?Ne:void 0,tabIndex:L?0:void 0,role:j.ariaRole??(L?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":j.ariaLabel===null?void 0:j.ariaLabel||`Edge from ${j.source} to ${j.target}`,"aria-describedby":L?`${uR}-${v}`:void 0,ref:M,...j.domAttributes,children:[!W&&u.jsx(R,{id:e,source:j.source,target:j.target,type:j.type,selected:j.selected,animated:j.animated,selectable:D,deletable:j.deletable??!0,label:j.label,labelStyle:j.labelStyle,labelShowBg:j.labelShowBg,labelBgStyle:j.labelBgStyle,labelBgPadding:j.labelBgPadding,labelBgBorderRadius:j.labelBgBorderRadius,sourceX:U,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J,data:j.data,style:j.style,sourceHandleId:j.sourceHandle,targetHandleId:j.targetHandle,markerStart:P,markerEnd:K,pathOptions:"pathOptions"in j?j.pathOptions:void 0,interactionWidth:j.interactionWidth}),I&&u.jsx(fZ,{edge:j,isReconnectable:I,reconnectRadius:h,onReconnect:p,onReconnectStart:g,onReconnectEnd:x,sourceX:U,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J,setUpdateHover:$,setReconnecting:B})]})})}var pZ=C.memo(mZ);const hZ=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function OR({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:i,onReconnect:o,onEdgeContextMenu:a,onEdgeMouseEnter:c,onEdgeMouseMove:d,onEdgeMouseLeave:m,onEdgeClick:h,reconnectRadius:p,onEdgeDoubleClick:g,onReconnectStart:x,onReconnectEnd:v,disableKeyboardA11y:k}){const{edgesFocusable:S,edgesReconnectable:b,elementsSelectable:w,onError:j}=rn(hZ,$n),N=JK(t);return u.jsxs("div",{className:"react-flow__edges",children:[u.jsx(iZ,{defaultColor:e,rfId:n}),N.map(O=>u.jsx(pZ,{id:O,edgesFocusable:S,edgesReconnectable:b,elementsSelectable:w,noPanClassName:i,onReconnect:o,onContextMenu:a,onMouseEnter:c,onMouseMove:d,onMouseLeave:m,onClick:h,reconnectRadius:p,onDoubleClick:g,onReconnectStart:x,onReconnectEnd:v,rfId:n,onError:j,edgeTypes:r,disableKeyboardA11y:k},O))]})}OR.displayName="EdgeRenderer";const gZ=C.memo(OR),yZ=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function xZ({children:e}){const t=rn(yZ);return u.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function vZ(e){const t=W0(),n=C.useRef(!1);C.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const bZ=e=>e.panZoom?.syncViewport;function _Z(e){const t=rn(bZ),n=Hn();return C.useEffect(()=>{e&&(t?.(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function kZ(e){return e.connection.inProgress?{...e.connection,to:Ku(e.connection.to,e.transform)}:{...e.connection}}function SZ(e){return kZ}function wZ(e){const t=SZ();return rn(t,$n)}const CZ=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function jZ({containerStyle:e,style:t,type:n,component:r}){const{nodesConnectable:i,width:o,height:a,isValid:c,inProgress:d}=rn(CZ,$n);return!(o&&i&&d)?null:u.jsx("svg",{style:e,width:o,height:a,className:"react-flow__connectionline react-flow__container",children:u.jsx("g",{className:dr(["react-flow__connection",OT(c)]),children:u.jsx(LR,{style:t,type:n,CustomComponent:r,isValid:c})})})}const LR=({style:e,type:t=xo.Bezier,CustomComponent:n,isValid:r})=>{const{inProgress:i,from:o,fromNode:a,fromHandle:c,fromPosition:d,to:m,toNode:h,toHandle:p,toPosition:g,pointer:x}=wZ();if(!i)return;if(n)return u.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:a,fromHandle:c,fromX:o.x,fromY:o.y,toX:m.x,toY:m.y,fromPosition:d,toPosition:g,connectionStatus:OT(r),toNode:h,toHandle:p,pointer:x});let v="";const k={sourceX:o.x,sourceY:o.y,sourcePosition:d,targetX:m.x,targetY:m.y,targetPosition:g};switch(t){case xo.Bezier:[v]=WT(k);break;case xo.SimpleBezier:[v]=SR(k);break;case xo.Step:[v]=jv({...k,borderRadius:0});break;case xo.SmoothStep:[v]=jv(k);break;default:[v]=XT(k)}return u.jsx("path",{d:v,fill:"none",className:"react-flow__connection-path",style:e})};LR.displayName="ConnectionLine";const EZ={};function z2(e=EZ){C.useRef(e),Hn(),C.useEffect(()=>{},[e])}function NZ(){Hn(),C.useRef(!1),C.useEffect(()=>{},[])}function zR({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:o,onEdgeDoubleClick:a,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:g,onSelectionEnd:x,connectionLineType:v,connectionLineStyle:k,connectionLineComponent:S,connectionLineContainerStyle:b,selectionKeyCode:w,selectionOnDrag:j,selectionMode:N,multiSelectionKeyCode:O,panActivationKeyCode:R,zoomActivationKeyCode:L,deleteKeyCode:I,onlyRenderVisibleElements:D,elementsSelectable:M,defaultViewport:A,translateExtent:$,minZoom:W,maxZoom:B,preventScrolling:V,defaultMarkerColor:H,zoomOnScroll:U,zoomOnPinch:Y,panOnScroll:Q,panOnScrollSpeed:q,panOnScrollMode:G,zoomOnDoubleClick:J,panOnDrag:P,onPaneClick:K,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:ie,onPaneScroll:se,onPaneContextMenu:de,paneClickDistance:oe,nodeClickDistance:Ne,onEdgeContextMenu:Ee,onEdgeMouseEnter:Ie,onEdgeMouseMove:Be,onEdgeMouseLeave:Ge,reconnectRadius:Ue,onReconnect:at,onReconnectStart:Pt,onReconnectEnd:wt,noDragClassName:Ct,noWheelClassName:pe,noPanClassName:$e,disableKeyboardA11y:et,nodeExtent:tt,rfId:pt,viewport:me,onViewportChange:be}){return z2(e),z2(t),NZ(),vZ(n),_Z(me),u.jsx(VK,{onPaneClick:K,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:ie,onPaneContextMenu:de,onPaneScroll:se,paneClickDistance:oe,deleteKeyCode:I,selectionKeyCode:w,selectionOnDrag:j,selectionMode:N,onSelectionStart:g,onSelectionEnd:x,multiSelectionKeyCode:O,panActivationKeyCode:R,zoomActivationKeyCode:L,elementsSelectable:M,zoomOnScroll:U,zoomOnPinch:Y,zoomOnDoubleClick:J,panOnScroll:Q,panOnScrollSpeed:q,panOnScrollMode:G,panOnDrag:P,defaultViewport:A,translateExtent:$,minZoom:W,maxZoom:B,onSelectionContextMenu:p,preventScrolling:V,noDragClassName:Ct,noWheelClassName:pe,noPanClassName:$e,disableKeyboardA11y:et,onViewportChange:be,isControlledViewport:!!me,children:u.jsxs(xZ,{children:[u.jsx(gZ,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:a,onReconnect:at,onReconnectStart:Pt,onReconnectEnd:wt,onlyRenderVisibleElements:D,onEdgeContextMenu:Ee,onEdgeMouseEnter:Ie,onEdgeMouseMove:Be,onEdgeMouseLeave:Ge,reconnectRadius:Ue,defaultMarkerColor:H,noPanClassName:$e,disableKeyboardA11y:et,rfId:pt}),u.jsx(jZ,{style:k,type:v,component:S,containerStyle:b}),u.jsx("div",{className:"react-flow__edgelabel-renderer"}),u.jsx(QK,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:o,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:h,nodeClickDistance:Ne,onlyRenderVisibleElements:D,noPanClassName:$e,noDragClassName:Ct,disableKeyboardA11y:et,nodeExtent:tt,rfId:pt}),u.jsx("div",{className:"react-flow__viewport-portal"})]})})}zR.displayName="GraphView";const IZ=C.memo(zR),P2=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:a,fitViewOptions:c,minZoom:d=.5,maxZoom:m=2,nodeOrigin:h,nodeExtent:p,zIndexMode:g="basic"}={})=>{const x=new Map,v=new Map,k=new Map,S=new Map,b=r??t??[],w=n??e??[],j=h??[0,0],N=p??Du;QT(k,S,b);const{nodesInitialized:O}=Nv(w,x,v,{nodeOrigin:j,nodeExtent:N,zIndexMode:g});let R=[0,0,1];if(a&&i&&o){const L=Yu(x,{filter:A=>!!((A.width||A.initialWidth)&&(A.height||A.initialHeight))}),{x:I,y:D,zoom:M}=$0(L,i,o,d,m,c?.padding??.1);R=[I,D,M]}return{rfId:"1",width:i??0,height:o??0,transform:R,nodes:w,nodesInitialized:O,nodeLookup:x,parentLookup:v,edges:b,edgeLookup:S,connectionLookup:k,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:d,maxZoom:m,translateExtent:Du,nodeExtent:N,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Rl.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:j,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:a??!1,fitViewOptions:c,fitViewResolver:null,connection:{...DT},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:UY,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:MT,zIndexMode:g,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},TZ=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:a,fitViewOptions:c,minZoom:d,maxZoom:m,nodeOrigin:h,nodeExtent:p,zIndexMode:g})=>YX((x,v)=>{async function k(){const{nodeLookup:S,panZoom:b,fitViewOptions:w,fitViewResolver:j,width:N,height:O,minZoom:R,maxZoom:L}=v();b&&(await FY({nodes:S,width:N,height:O,panZoom:b,minZoom:R,maxZoom:L},w),j?.resolve(!0),x({fitViewResolver:null}))}return{...P2({nodes:e,edges:t,width:i,height:o,fitView:a,fitViewOptions:c,minZoom:d,maxZoom:m,nodeOrigin:h,nodeExtent:p,defaultNodes:n,defaultEdges:r,zIndexMode:g}),setNodes:S=>{const{nodeLookup:b,parentLookup:w,nodeOrigin:j,elevateNodesOnSelect:N,fitViewQueued:O,zIndexMode:R,nodesSelectionActive:L}=v(),{nodesInitialized:I,hasSelectedNodes:D}=Nv(S,b,w,{nodeOrigin:j,nodeExtent:p,elevateNodesOnSelect:N,checkEquality:!0,zIndexMode:R}),M=L&&D;O&&I?(k(),x({nodes:S,nodesInitialized:I,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:M})):x({nodes:S,nodesInitialized:I,nodesSelectionActive:M})},setEdges:S=>{const{connectionLookup:b,edgeLookup:w}=v();QT(b,w,S),x({edges:S})},setDefaultNodesAndEdges:(S,b)=>{if(S){const{setNodes:w}=v();w(S),x({hasDefaultNodes:!0})}if(b){const{setEdges:w}=v();w(b),x({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:b,nodeLookup:w,parentLookup:j,domNode:N,nodeOrigin:O,nodeExtent:R,debug:L,fitViewQueued:I,zIndexMode:D}=v(),{changes:M,updatedInternals:A}=fX(S,w,j,N,O,R,D);A&&(lX(w,j,{nodeOrigin:O,nodeExtent:R,zIndexMode:D}),I?(k(),x({fitViewQueued:!1,fitViewOptions:void 0})):x({}),M?.length>0&&(L&&console.log("React Flow: trigger node changes",M),b?.(M)))},updateNodePositions:(S,b=!1)=>{const w=[];let j=[];const{nodeLookup:N,triggerNodeChanges:O,connection:R,updateConnection:L,onNodesChangeMiddlewareMap:I}=v();for(const[D,M]of S){const A=N.get(D),$=!!(A?.expandParent&&A?.parentId&&M?.position),W={id:D,type:"position",position:$?{x:Math.max(0,M.position.x),y:Math.max(0,M.position.y)}:M.position,dragging:b};if(A&&R.inProgress&&R.fromNode.id===A.id){const B=la(A,R.fromHandle,st.Left,!0);L({...R,from:B})}$&&A.parentId&&w.push({id:D,parentId:A.parentId,rect:{...M.internals.positionAbsolute,width:M.measured.width??0,height:M.measured.height??0}}),j.push(W)}if(w.length>0){const{parentLookup:D,nodeOrigin:M}=v(),A=G0(w,N,D,M);j.push(...A)}for(const D of I.values())j=D(j);O(j)},triggerNodeChanges:S=>{const{onNodesChange:b,setNodes:w,nodes:j,hasDefaultNodes:N,debug:O}=v();if(S?.length){if(N){const R=mR(S,j);w(R)}O&&console.log("React Flow: trigger node changes",S),b?.(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:b,setEdges:w,edges:j,hasDefaultEdges:N,debug:O}=v();if(S?.length){if(N){const R=hK(S,j);w(R)}O&&console.log("React Flow: trigger edge changes",S),b?.(S)}},addSelectedNodes:S=>{const{multiSelectionActive:b,edgeLookup:w,nodeLookup:j,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(b){const R=S.map(L=>Jo(L,!0));N(R);return}N(al(j,new Set([...S]),!0)),O(al(w))},addSelectedEdges:S=>{const{multiSelectionActive:b,edgeLookup:w,nodeLookup:j,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(b){const R=S.map(L=>Jo(L,!0));O(R);return}O(al(w,new Set([...S]))),N(al(j,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:b}={})=>{const{edges:w,nodes:j,nodeLookup:N,triggerNodeChanges:O,triggerEdgeChanges:R}=v(),L=S||j,I=b||w,D=[];for(const A of L){if(!A.selected)continue;const $=N.get(A.id);$&&($.selected=!1),D.push(Jo(A.id,!1))}const M=[];for(const A of I)A.selected&&M.push(Jo(A.id,!1));O(D),R(M)},setMinZoom:S=>{const{panZoom:b,maxZoom:w}=v();b?.setScaleExtent([S,w]),x({minZoom:S})},setMaxZoom:S=>{const{panZoom:b,minZoom:w}=v();b?.setScaleExtent([w,S]),x({maxZoom:S})},setTranslateExtent:S=>{v().panZoom?.setTranslateExtent(S),x({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:b,triggerNodeChanges:w,triggerEdgeChanges:j,elementsSelectable:N}=v();if(!N)return;const O=b.reduce((L,I)=>I.selected?[...L,Jo(I.id,!1)]:L,[]),R=S.reduce((L,I)=>I.selected?[...L,Jo(I.id,!1)]:L,[]);w(O),j(R)},setNodeExtent:S=>{const{nodes:b,nodeLookup:w,parentLookup:j,nodeOrigin:N,elevateNodesOnSelect:O,nodeExtent:R,zIndexMode:L}=v();S[0][0]===R[0][0]&&S[0][1]===R[0][1]&&S[1][0]===R[1][0]&&S[1][1]===R[1][1]||(Nv(b,w,j,{nodeOrigin:N,nodeExtent:S,elevateNodesOnSelect:O,checkEquality:!1,zIndexMode:L}),x({nodeExtent:S}))},panBy:S=>{const{transform:b,width:w,height:j,panZoom:N,translateExtent:O}=v();return mX({delta:S,panZoom:N,transform:b,translateExtent:O,width:w,height:j})},setCenter:async(S,b,w)=>{const{width:j,height:N,maxZoom:O,panZoom:R}=v();if(!R)return Promise.resolve(!1);const L=typeof w?.zoom<"u"?w.zoom:O;return await R.setViewport({x:j/2-S*L,y:N/2-b*L,zoom:L},{duration:w?.duration,ease:w?.ease,interpolate:w?.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{x({connection:{...DT}})},updateConnection:S=>{x({connection:S})},reset:()=>x({...P2()})}},Object.is);function PR({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:i,initialHeight:o,initialMinZoom:a,initialMaxZoom:c,initialFitViewOptions:d,fitView:m,nodeOrigin:h,nodeExtent:p,zIndexMode:g,children:x}){const[v]=C.useState(()=>TZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:m,minZoom:a,maxZoom:c,fitViewOptions:d,nodeOrigin:h,nodeExtent:p,zIndexMode:g}));return u.jsx(XX,{value:v,children:u.jsx(xK,{children:x})})}function RZ({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:i,width:o,height:a,fitView:c,fitViewOptions:d,minZoom:m,maxZoom:h,nodeOrigin:p,nodeExtent:g,zIndexMode:x}){return C.useContext(lp)?u.jsx(u.Fragment,{children:e}):u.jsx(PR,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:i,initialWidth:o,initialHeight:a,fitView:c,initialFitViewOptions:d,initialMinZoom:m,initialMaxZoom:h,nodeOrigin:p,nodeExtent:g,zIndexMode:x,children:e})}const AZ={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function MZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o,edgeTypes:a,onNodeClick:c,onEdgeClick:d,onInit:m,onMove:h,onMoveStart:p,onMoveEnd:g,onConnect:x,onConnectStart:v,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:b,onNodeMouseEnter:w,onNodeMouseMove:j,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:R,onNodeDragStart:L,onNodeDrag:I,onNodeDragStop:D,onNodesDelete:M,onEdgesDelete:A,onDelete:$,onSelectionChange:W,onSelectionDragStart:B,onSelectionDrag:V,onSelectionDragStop:H,onSelectionContextMenu:U,onSelectionStart:Y,onSelectionEnd:Q,onBeforeDelete:q,connectionMode:G,connectionLineType:J=xo.Bezier,connectionLineStyle:P,connectionLineComponent:K,connectionLineContainerStyle:ee,deleteKeyCode:te="Backspace",selectionKeyCode:ie="Shift",selectionOnDrag:se=!1,selectionMode:de=Ou.Full,panActivationKeyCode:oe="Space",multiSelectionKeyCode:Ne=zu()?"Meta":"Control",zoomActivationKeyCode:Ee=zu()?"Meta":"Control",snapToGrid:Ie,snapGrid:Be,onlyRenderVisibleElements:Ge=!1,selectNodesOnDrag:Ue,nodesDraggable:at,autoPanOnNodeFocus:Pt,nodesConnectable:wt,nodesFocusable:Ct,nodeOrigin:pe=dR,edgesFocusable:$e,edgesReconnectable:et,elementsSelectable:tt=!0,defaultViewport:pt=lK,minZoom:me=.5,maxZoom:be=2,translateExtent:Me=Du,preventScrolling:Fe=!0,nodeExtent:He,defaultMarkerColor:jt="#b1b1b7",zoomOnScroll:an=!0,zoomOnPinch:ke=!0,panOnScroll:Oe=!1,panOnScrollSpeed:We=.5,panOnScrollMode:Ze=na.Free,zoomOnDoubleClick:qe=!0,panOnDrag:ut=!0,onPaneClick:Yt,onPaneMouseEnter:Nn,onPaneMouseMove:ln,onPaneMouseLeave:Ln,onPaneScroll:lt,onPaneContextMenu:In,paneClickDistance:Et=1,nodeClickDistance:Dt=0,children:Ye,onReconnect:nt,onReconnectStart:Qt,onReconnectEnd:_n,onEdgeContextMenu:Tt,onEdgeDoubleClick:er,onEdgeMouseEnter:Tn,onEdgeMouseMove:ht,onEdgeMouseLeave:tr,reconnectRadius:mn=10,onNodesChange:cn,onEdgesChange:Fn,noDragClassName:Jt="nodrag",noWheelClassName:Vt="nowheel",noPanClassName:Vn="nopan",fitView:Un,fitViewOptions:Re,connectOnClick:bt,attributionPosition:Cn,proOptions:vr,defaultEdgeOptions:Mn,elevateNodesOnSelect:_t=!0,elevateEdgesOnSelect:wr=!1,disableKeyboardA11y:fr=!1,autoPanOnConnect:Xt,autoPanOnNodeDrag:Ut,autoPanSpeed:hn,connectionRadius:qn,isValidConnection:gt,onError:Gn,style:mr,id:Rn,nodeDragThreshold:Je,connectionDragThreshold:xn,viewport:Kt,onViewportChange:kt,width:Wn,height:gn,colorMode:nr="light",debug:ds,onScroll:pr,ariaLabelConfig:rr,zIndexMode:ue="basic",...Se},Pe){const ae=Rn||"1",ve=fK(nr),Ae=C.useCallback(Le=>{Le.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),pr?.(Le)},[pr]);return u.jsx("div",{"data-testid":"rf__wrapper",...Se,onScroll:Ae,style:{...mr,...AZ},ref:Pe,className:dr(["react-flow",i,ve]),id:Rn,role:"application",children:u.jsxs(RZ,{nodes:e,edges:t,width:Wn,height:gn,fitView:Un,fitViewOptions:Re,minZoom:me,maxZoom:be,nodeOrigin:pe,nodeExtent:He,zIndexMode:ue,children:[u.jsx(dK,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:x,onConnectStart:v,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:b,nodesDraggable:at,autoPanOnNodeFocus:Pt,nodesConnectable:wt,nodesFocusable:Ct,edgesFocusable:$e,edgesReconnectable:et,elementsSelectable:tt,elevateNodesOnSelect:_t,elevateEdgesOnSelect:wr,minZoom:me,maxZoom:be,nodeExtent:He,onNodesChange:cn,onEdgesChange:Fn,snapToGrid:Ie,snapGrid:Be,connectionMode:G,translateExtent:Me,connectOnClick:bt,defaultEdgeOptions:Mn,fitView:Un,fitViewOptions:Re,onNodesDelete:M,onEdgesDelete:A,onDelete:$,onNodeDragStart:L,onNodeDrag:I,onNodeDragStop:D,onSelectionDrag:V,onSelectionDragStart:B,onSelectionDragStop:H,onMove:h,onMoveStart:p,onMoveEnd:g,noPanClassName:Vn,nodeOrigin:pe,rfId:ae,autoPanOnConnect:Xt,autoPanOnNodeDrag:Ut,autoPanSpeed:hn,onError:Gn,connectionRadius:qn,isValidConnection:gt,selectNodesOnDrag:Ue,nodeDragThreshold:Je,connectionDragThreshold:xn,onBeforeDelete:q,debug:ds,ariaLabelConfig:rr,zIndexMode:ue}),u.jsx(IZ,{onInit:m,onNodeClick:c,onEdgeClick:d,onNodeMouseEnter:w,onNodeMouseMove:j,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:R,nodeTypes:o,edgeTypes:a,connectionLineType:J,connectionLineStyle:P,connectionLineComponent:K,connectionLineContainerStyle:ee,selectionKeyCode:ie,selectionOnDrag:se,selectionMode:de,deleteKeyCode:te,multiSelectionKeyCode:Ne,panActivationKeyCode:oe,zoomActivationKeyCode:Ee,onlyRenderVisibleElements:Ge,defaultViewport:pt,translateExtent:Me,minZoom:me,maxZoom:be,preventScrolling:Fe,zoomOnScroll:an,zoomOnPinch:ke,zoomOnDoubleClick:qe,panOnScroll:Oe,panOnScrollSpeed:We,panOnScrollMode:Ze,panOnDrag:ut,onPaneClick:Yt,onPaneMouseEnter:Nn,onPaneMouseMove:ln,onPaneMouseLeave:Ln,onPaneScroll:lt,onPaneContextMenu:In,paneClickDistance:Et,nodeClickDistance:Dt,onSelectionContextMenu:U,onSelectionStart:Y,onSelectionEnd:Q,onReconnect:nt,onReconnectStart:Qt,onReconnectEnd:_n,onEdgeContextMenu:Tt,onEdgeDoubleClick:er,onEdgeMouseEnter:Tn,onEdgeMouseMove:ht,onEdgeMouseLeave:tr,reconnectRadius:mn,defaultMarkerColor:jt,noDragClassName:Jt,noWheelClassName:Vt,noPanClassName:Vn,rfId:ae,disableKeyboardA11y:fr,nodeExtent:He,viewport:Kt,onViewportChange:kt}),u.jsx(aK,{onSelectionChange:W}),Ye,u.jsx(nK,{proOptions:vr,position:Cn}),u.jsx(tK,{rfId:ae,disableKeyboardA11y:fr})]})})}var DZ=pR(MZ);function OZ({dimensions:e,lineWidth:t,variant:n,className:r}){return u.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:dr(["react-flow__background-pattern",n,r])})}function LZ({radius:e,className:t}){return u.jsx("circle",{cx:e,cy:e,r:e,className:dr(["react-flow__background-pattern","dots",t])})}var ko;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ko||(ko={}));const zZ={[ko.Dots]:1,[ko.Lines]:1,[ko.Cross]:6},PZ=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function BR({id:e,variant:t=ko.Dots,gap:n=20,size:r,lineWidth:i=1,offset:o=0,color:a,bgColor:c,style:d,className:m,patternClassName:h}){const p=C.useRef(null),{transform:g,patternId:x}=rn(PZ,$n),v=r||zZ[t],k=t===ko.Dots,S=t===ko.Cross,b=Array.isArray(n)?n:[n,n],w=[b[0]*g[2]||1,b[1]*g[2]||1],j=v*g[2],N=Array.isArray(o)?o:[o,o],O=S?[j,j]:w,R=[N[0]*g[2]||1+O[0]/2,N[1]*g[2]||1+O[1]/2],L=`${x}${e||""}`;return u.jsxs("svg",{className:dr(["react-flow__background",m]),style:{...d,...up,"--xy-background-color-props":c,"--xy-background-pattern-color-props":a},ref:p,"data-testid":"rf__background",children:[u.jsx("pattern",{id:L,x:g[0]%w[0],y:g[1]%w[1],width:w[0],height:w[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${R[0]},-${R[1]})`,children:k?u.jsx(LZ,{radius:j/2,className:h}):u.jsx(OZ,{dimensions:O,lineWidth:i,variant:t,className:h})}),u.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${L})`})]})}BR.displayName="Background";const BZ=C.memo(BR);function $Z(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:u.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function HZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:u.jsx("path",{d:"M0 0h32v4.2H0z"})})}function FZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:u.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function VZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:u.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function UZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:u.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function If({children:e,className:t,...n}){return u.jsx("button",{type:"button",className:dr(["react-flow__controls-button",t]),...n,children:e})}const qZ=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function $R({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:o,onZoomOut:a,onFitView:c,onInteractiveChange:d,className:m,children:h,position:p="bottom-left",orientation:g="vertical","aria-label":x}){const v=Hn(),{isInteractive:k,minZoomReached:S,maxZoomReached:b,ariaLabelConfig:w}=rn(qZ,$n),{zoomIn:j,zoomOut:N,fitView:O}=W0(),R=()=>{j(),o?.()},L=()=>{N(),a?.()},I=()=>{O(i),c?.()},D=()=>{v.setState({nodesDraggable:!k,nodesConnectable:!k,elementsSelectable:!k}),d?.(!k)},M=g==="horizontal"?"horizontal":"vertical";return u.jsxs(cp,{className:dr(["react-flow__controls",M,m]),position:p,style:e,"data-testid":"rf__controls","aria-label":x??w["controls.ariaLabel"],children:[t&&u.jsxs(u.Fragment,{children:[u.jsx(If,{onClick:R,className:"react-flow__controls-zoomin",title:w["controls.zoomIn.ariaLabel"],"aria-label":w["controls.zoomIn.ariaLabel"],disabled:b,children:u.jsx($Z,{})}),u.jsx(If,{onClick:L,className:"react-flow__controls-zoomout",title:w["controls.zoomOut.ariaLabel"],"aria-label":w["controls.zoomOut.ariaLabel"],disabled:S,children:u.jsx(HZ,{})})]}),n&&u.jsx(If,{className:"react-flow__controls-fitview",onClick:I,title:w["controls.fitView.ariaLabel"],"aria-label":w["controls.fitView.ariaLabel"],children:u.jsx(FZ,{})}),r&&u.jsx(If,{className:"react-flow__controls-interactive",onClick:D,title:w["controls.interactive.ariaLabel"],"aria-label":w["controls.interactive.ariaLabel"],children:k?u.jsx(UZ,{}):u.jsx(VZ,{})}),h]})}$R.displayName="Controls";const GZ=C.memo($R);function WZ({id:e,x:t,y:n,width:r,height:i,style:o,color:a,strokeColor:c,strokeWidth:d,className:m,borderRadius:h,shapeRendering:p,selected:g,onClick:x}){const{background:v,backgroundColor:k}=o||{},S=a||v||k;return u.jsx("rect",{className:dr(["react-flow__minimap-node",{selected:g},m]),x:t,y:n,rx:h,ry:h,width:r,height:i,style:{fill:S,stroke:c,strokeWidth:d},shapeRendering:p,onClick:x?b=>x(b,e):void 0})}const YZ=C.memo(WZ),XZ=e=>e.nodes.map(t=>t.id),Py=e=>e instanceof Function?e:()=>e;function KZ({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:o=YZ,onClick:a}){const c=rn(XZ,$n),d=Py(t),m=Py(e),h=Py(n),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return u.jsx(u.Fragment,{children:c.map(g=>u.jsx(QZ,{id:g,nodeColorFunc:d,nodeStrokeColorFunc:m,nodeClassNameFunc:h,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:o,onClick:a,shapeRendering:p},g))})}function ZZ({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:o,shapeRendering:a,NodeComponent:c,onClick:d}){const{node:m,x:h,y:p,width:g,height:x}=rn(v=>{const k=v.nodeLookup.get(e);if(!k)return{node:void 0,x:0,y:0,width:0,height:0};const S=k.internals.userNode,{x:b,y:w}=k.internals.positionAbsolute,{width:j,height:N}=$s(S);return{node:S,x:b,y:w,width:j,height:N}},$n);return!m||m.hidden||!HT(m)?null:u.jsx(c,{x:h,y:p,width:g,height:x,style:m.style,selected:!!m.selected,className:r(m),color:t(m),borderRadius:i,strokeColor:n(m),strokeWidth:o,shapeRendering:a,onClick:d,id:m.id})}const QZ=C.memo(ZZ);var JZ=C.memo(KZ);const eQ=200,tQ=150,nQ=e=>!e.hidden,rQ=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?$T(Yu(e.nodeLookup,{filter:nQ}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},iQ="react-flow__minimap-desc";function HR({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:i="",nodeBorderRadius:o=5,nodeStrokeWidth:a,nodeComponent:c,bgColor:d,maskColor:m,maskStrokeColor:h,maskStrokeWidth:p,position:g="bottom-right",onClick:x,onNodeClick:v,pannable:k=!1,zoomable:S=!1,ariaLabel:b,inversePan:w,zoomStep:j=1,offsetScale:N=5}){const O=Hn(),R=C.useRef(null),{boundingRect:L,viewBB:I,rfId:D,panZoom:M,translateExtent:A,flowWidth:$,flowHeight:W,ariaLabelConfig:B}=rn(rQ,$n),V=e?.width??eQ,H=e?.height??tQ,U=L.width/V,Y=L.height/H,Q=Math.max(U,Y),q=Q*V,G=Q*H,J=N*Q,P=L.x-(q-L.width)/2-J,K=L.y-(G-L.height)/2-J,ee=q+J*2,te=G+J*2,ie=`${iQ}-${D}`,se=C.useRef(0),de=C.useRef();se.current=Q,C.useEffect(()=>{if(R.current&&M)return de.current=kX({domNode:R.current,panZoom:M,getTransform:()=>O.getState().transform,getViewScale:()=>se.current}),()=>{de.current?.destroy()}},[M]),C.useEffect(()=>{de.current?.update({translateExtent:A,width:$,height:W,inversePan:w,pannable:k,zoomStep:j,zoomable:S})},[k,S,w,j,A,$,W]);const oe=x?Ie=>{const[Be,Ge]=de.current?.pointer(Ie)||[0,0];x(Ie,{x:Be,y:Ge})}:void 0,Ne=v?C.useCallback((Ie,Be)=>{const Ge=O.getState().nodeLookup.get(Be).internals.userNode;v(Ie,Ge)},[]):void 0,Ee=b??B["minimap.ariaLabel"];return u.jsx(cp,{position:g,style:{...e,"--xy-minimap-background-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-background-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-stroke-width-props":typeof p=="number"?p*Q:void 0,"--xy-minimap-node-background-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof a=="number"?a:void 0},className:dr(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:u.jsxs("svg",{width:V,height:H,viewBox:`${P} ${K} ${ee} ${te}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ie,ref:R,onClick:oe,children:[Ee&&u.jsx("title",{id:ie,children:Ee}),u.jsx(JZ,{onClick:Ne,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:i,nodeStrokeWidth:a,nodeComponent:c}),u.jsx("path",{className:"react-flow__minimap-mask",d:`M${P-J},${K-J}h${ee+J*2}v${te+J*2}h${-ee-J*2}z - M${I.x},${I.y}h${I.width}v${I.height}h${-I.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}HR.displayName="MiniMap";const sQ=C.memo(HR),oQ=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,aQ={[Ol.Line]:"right",[Ol.Handle]:"bottom-right"};function lQ({nodeId:e,position:t,variant:n=Ol.Handle,className:r,style:i=void 0,children:o,color:a,minWidth:c=10,minHeight:d=10,maxWidth:m=Number.MAX_VALUE,maxHeight:h=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:g,autoScale:x=!0,shouldResize:v,onResizeStart:k,onResize:S,onResizeEnd:b}){const w=xR(),j=typeof e=="string"?e:w,N=Hn(),O=C.useRef(null),R=n===Ol.Handle,L=rn(C.useCallback(oQ(R&&x),[R,x]),$n),I=C.useRef(null),D=t??aQ[n];C.useEffect(()=>{if(!(!O.current||!j))return I.current||(I.current=LX({domNode:O.current,nodeId:j,getStoreItems:()=>{const{nodeLookup:A,transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:V,domNode:H}=N.getState();return{nodeLookup:A,transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:V,paneDomNode:H}},onChange:(A,$)=>{const{triggerNodeChanges:W,nodeLookup:B,parentLookup:V,nodeOrigin:H}=N.getState(),U=[],Y={x:A.x,y:A.y},Q=B.get(j);if(Q&&Q.expandParent&&Q.parentId){const q=Q.origin??H,G=A.width??Q.measured.width??0,J=A.height??Q.measured.height??0,P={id:Q.id,parentId:Q.parentId,rect:{width:G,height:J,...FT({x:A.x??Q.position.x,y:A.y??Q.position.y},{width:G,height:J},Q.parentId,B,q)}},K=G0([P],B,V,H);U.push(...K),Y.x=A.x?Math.max(q[0]*G,A.x):void 0,Y.y=A.y?Math.max(q[1]*J,A.y):void 0}if(Y.x!==void 0&&Y.y!==void 0){const q={id:j,type:"position",position:{...Y}};U.push(q)}if(A.width!==void 0&&A.height!==void 0){const G={id:j,type:"dimensions",resizing:!0,setAttributes:g?g==="horizontal"?"width":"height":!0,dimensions:{width:A.width,height:A.height}};U.push(G)}for(const q of $){const G={...q,type:"position"};U.push(G)}W(U)},onEnd:({width:A,height:$})=>{const W={id:j,type:"dimensions",resizing:!1,dimensions:{width:A,height:$}};N.getState().triggerNodeChanges([W])}})),I.current.update({controlPosition:D,boundaries:{minWidth:c,minHeight:d,maxWidth:m,maxHeight:h},keepAspectRatio:p,resizeDirection:g,onResizeStart:k,onResize:S,onResizeEnd:b,shouldResize:v}),()=>{I.current?.destroy()}},[D,c,d,m,h,p,k,S,b,v]);const M=D.split("-");return u.jsx("div",{className:dr(["react-flow__resize-control","nodrag",...M,n,r]),ref:O,style:{...i,scale:L,...a&&{[R?"backgroundColor":"borderColor"]:a}},children:o})}C.memo(lQ);const cQ=C.memo(function({data:t}){const n=["oc-canvas-node",t.isOwner&&"is-owner",t.isSelected&&"is-selected",t.isDropTarget&&"is-drop-target"].filter(Boolean).join(" "),r=Uu(t.icon);return u.jsxs("div",{className:n,children:[u.jsx(Ll,{type:"target",position:st.Top,className:"oc-canvas-handle"}),u.jsxs("div",{className:"oc-canvas-node-row",children:[u.jsx("div",{className:"oc-canvas-node-chip",children:u.jsx("span",{className:"oc-canvas-node-chip-icon",style:{WebkitMaskImage:`url("${r}")`,maskImage:`url("${r}")`},"aria-hidden":!0})}),u.jsxs("div",{className:"oc-canvas-node-text",children:[u.jsx("span",{className:"oc-canvas-node-name",children:t.name}),u.jsxs("div",{className:"oc-canvas-node-meta",children:[t.employeeNames.length>0?u.jsxs("span",{className:"oc-canvas-node-person",title:t.employeeNames.join(", "),children:[t.employeeNames[0],t.employeeNames.length>1?` +${t.employeeNames.length-1}`:""]}):u.jsx("span",{className:"oc-canvas-node-id",children:t.roleId}),t.employeeCount>0&&u.jsx("span",{className:"oc-canvas-node-badge",children:t.employeeCount})]})]})]}),u.jsx(Ll,{type:"source",position:st.Bottom,className:"oc-canvas-handle"})]})});var By,B2;function X0(){if(B2)return By;B2=1;var e="\0",t="\0",n="";class r{_isDirected=!0;_isMultigraph=!1;_isCompound=!1;_label;_defaultNodeLabelFn=()=>{};_defaultEdgeLabelFn=()=>{};_nodes={};_in={};_preds={};_out={};_sucs={};_edgeObjs={};_edgeLabels={};_nodeCount=0;_edgeCount=0;_parent;_children;constructor(h){h&&(this._isDirected=Object.hasOwn(h,"directed")?h.directed:!0,this._isMultigraph=Object.hasOwn(h,"multigraph")?h.multigraph:!1,this._isCompound=Object.hasOwn(h,"compound")?h.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[t]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(h){return this._label=h,this}graph(){return this._label}setDefaultNodeLabel(h){return this._defaultNodeLabelFn=h,typeof h!="function"&&(this._defaultNodeLabelFn=()=>h),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var h=this;return this.nodes().filter(p=>Object.keys(h._in[p]).length===0)}sinks(){var h=this;return this.nodes().filter(p=>Object.keys(h._out[p]).length===0)}setNodes(h,p){var g=arguments,x=this;return h.forEach(function(v){g.length>1?x.setNode(v,p):x.setNode(v)}),this}setNode(h,p){return Object.hasOwn(this._nodes,h)?(arguments.length>1&&(this._nodes[h]=p),this):(this._nodes[h]=arguments.length>1?p:this._defaultNodeLabelFn(h),this._isCompound&&(this._parent[h]=t,this._children[h]={},this._children[t][h]=!0),this._in[h]={},this._preds[h]={},this._out[h]={},this._sucs[h]={},++this._nodeCount,this)}node(h){return this._nodes[h]}hasNode(h){return Object.hasOwn(this._nodes,h)}removeNode(h){var p=this;if(Object.hasOwn(this._nodes,h)){var g=x=>p.removeEdge(p._edgeObjs[x]);delete this._nodes[h],this._isCompound&&(this._removeFromParentsChildList(h),delete this._parent[h],this.children(h).forEach(function(x){p.setParent(x)}),delete this._children[h]),Object.keys(this._in[h]).forEach(g),delete this._in[h],delete this._preds[h],Object.keys(this._out[h]).forEach(g),delete this._out[h],delete this._sucs[h],--this._nodeCount}return this}setParent(h,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(p===void 0)p=t;else{p+="";for(var g=p;g!==void 0;g=this.parent(g))if(g===h)throw new Error("Setting "+p+" as parent of "+h+" would create a cycle");this.setNode(p)}return this.setNode(h),this._removeFromParentsChildList(h),this._parent[h]=p,this._children[p][h]=!0,this}_removeFromParentsChildList(h){delete this._children[this._parent[h]][h]}parent(h){if(this._isCompound){var p=this._parent[h];if(p!==t)return p}}children(h=t){if(this._isCompound){var p=this._children[h];if(p)return Object.keys(p)}else{if(h===t)return this.nodes();if(this.hasNode(h))return[]}}predecessors(h){var p=this._preds[h];if(p)return Object.keys(p)}successors(h){var p=this._sucs[h];if(p)return Object.keys(p)}neighbors(h){var p=this.predecessors(h);if(p){const x=new Set(p);for(var g of this.successors(h))x.add(g);return Array.from(x.values())}}isLeaf(h){var p;return this.isDirected()?p=this.successors(h):p=this.neighbors(h),p.length===0}filterNodes(h){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var g=this;Object.entries(this._nodes).forEach(function([k,S]){h(k)&&p.setNode(k,S)}),Object.values(this._edgeObjs).forEach(function(k){p.hasNode(k.v)&&p.hasNode(k.w)&&p.setEdge(k,g.edge(k))});var x={};function v(k){var S=g.parent(k);return S===void 0||p.hasNode(S)?(x[k]=S,S):S in x?x[S]:v(S)}return this._isCompound&&p.nodes().forEach(k=>p.setParent(k,v(k))),p}setDefaultEdgeLabel(h){return this._defaultEdgeLabelFn=h,typeof h!="function"&&(this._defaultEdgeLabelFn=()=>h),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(h,p){var g=this,x=arguments;return h.reduce(function(v,k){return x.length>1?g.setEdge(v,k,p):g.setEdge(v,k),k}),this}setEdge(){var h,p,g,x,v=!1,k=arguments[0];typeof k=="object"&&k!==null&&"v"in k?(h=k.v,p=k.w,g=k.name,arguments.length===2&&(x=arguments[1],v=!0)):(h=k,p=arguments[1],g=arguments[3],arguments.length>2&&(x=arguments[2],v=!0)),h=""+h,p=""+p,g!==void 0&&(g=""+g);var S=a(this._isDirected,h,p,g);if(Object.hasOwn(this._edgeLabels,S))return v&&(this._edgeLabels[S]=x),this;if(g!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(h),this.setNode(p),this._edgeLabels[S]=v?x:this._defaultEdgeLabelFn(h,p,g);var b=c(this._isDirected,h,p,g);return h=b.v,p=b.w,Object.freeze(b),this._edgeObjs[S]=b,i(this._preds[p],h),i(this._sucs[h],p),this._in[p][S]=b,this._out[h][S]=b,this._edgeCount++,this}edge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g);return this._edgeLabels[x]}edgeAsObj(){const h=this.edge(...arguments);return typeof h!="object"?{label:h}:h}hasEdge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g);return Object.hasOwn(this._edgeLabels,x)}removeEdge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g),v=this._edgeObjs[x];return v&&(h=v.v,p=v.w,delete this._edgeLabels[x],delete this._edgeObjs[x],o(this._preds[p],h),o(this._sucs[h],p),delete this._in[p][x],delete this._out[h][x],this._edgeCount--),this}inEdges(h,p){var g=this._in[h];if(g){var x=Object.values(g);return p?x.filter(v=>v.v===p):x}}outEdges(h,p){var g=this._out[h];if(g){var x=Object.values(g);return p?x.filter(v=>v.w===p):x}}nodeEdges(h,p){var g=this.inEdges(h,p);if(g)return g.concat(this.outEdges(h,p))}}function i(m,h){m[h]?m[h]++:m[h]=1}function o(m,h){--m[h]||delete m[h]}function a(m,h,p,g){var x=""+h,v=""+p;if(!m&&x>v){var k=x;x=v,v=k}return x+n+v+n+(g===void 0?e:g)}function c(m,h,p,g){var x=""+h,v=""+p;if(!m&&x>v){var k=x;x=v,v=k}var S={v:x,w:v};return g&&(S.name=g),S}function d(m,h){return a(m,h.v,h.w,h.name)}return By=r,By}var $y,$2;function uQ(){return $2||($2=1,$y="2.2.4"),$y}var Hy,H2;function dQ(){return H2||(H2=1,Hy={Graph:X0(),version:uQ()}),Hy}var Fy,F2;function fQ(){if(F2)return Fy;F2=1;var e=X0();Fy={write:t,read:i};function t(o){var a={options:{directed:o.isDirected(),multigraph:o.isMultigraph(),compound:o.isCompound()},nodes:n(o),edges:r(o)};return o.graph()!==void 0&&(a.value=structuredClone(o.graph())),a}function n(o){return o.nodes().map(function(a){var c=o.node(a),d=o.parent(a),m={v:a};return c!==void 0&&(m.value=c),d!==void 0&&(m.parent=d),m})}function r(o){return o.edges().map(function(a){var c=o.edge(a),d={v:a.v,w:a.w};return a.name!==void 0&&(d.name=a.name),c!==void 0&&(d.value=c),d})}function i(o){var a=new e(o.options).setGraph(o.value);return o.nodes.forEach(function(c){a.setNode(c.v,c.value),c.parent&&a.setParent(c.v,c.parent)}),o.edges.forEach(function(c){a.setEdge({v:c.v,w:c.w,name:c.name},c.value)}),a}return Fy}var Vy,V2;function mQ(){if(V2)return Vy;V2=1,Vy=e;function e(t){var n={},r=[],i;function o(a){Object.hasOwn(n,a)||(n[a]=!0,i.push(a),t.successors(a).forEach(o),t.predecessors(a).forEach(o))}return t.nodes().forEach(function(a){i=[],o(a),i.length&&r.push(i)}),r}return Vy}var Uy,U2;function FR(){if(U2)return Uy;U2=1;class e{_arr=[];_keyIndices={};size(){return this._arr.length}keys(){return this._arr.map(function(n){return n.key})}has(n){return Object.hasOwn(this._keyIndices,n)}priority(n){var r=this._keyIndices[n];if(r!==void 0)return this._arr[r].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(n,r){var i=this._keyIndices;if(n=String(n),!Object.hasOwn(i,n)){var o=this._arr,a=o.length;return i[n]=a,o.push({key:n,priority:r}),this._decrease(a),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var n=this._arr.pop();return delete this._keyIndices[n.key],this._heapify(0),n.key}decrease(n,r){var i=this._keyIndices[n];if(r>this._arr[i].priority)throw new Error("New priority is greater than current priority. Key: "+n+" Old: "+this._arr[i].priority+" New: "+r);this._arr[i].priority=r,this._decrease(i)}_heapify(n){var r=this._arr,i=2*n,o=i+1,a=n;i<r.length&&(a=r[i].priority<r[a].priority?i:a,o<r.length&&(a=r[o].priority<r[a].priority?o:a),a!==n&&(this._swap(n,a),this._heapify(a)))}_decrease(n){for(var r=this._arr,i=r[n].priority,o;n!==0&&(o=n>>1,!(r[o].priority<i));)this._swap(n,o),n=o}_swap(n,r){var i=this._arr,o=this._keyIndices,a=i[n],c=i[r];i[n]=c,i[r]=a,o[c.key]=n,o[a.key]=r}}return Uy=e,Uy}var qy,q2;function VR(){if(q2)return qy;q2=1;var e=FR();qy=n;var t=()=>1;function n(i,o,a,c){return r(i,String(o),a||t,c||function(d){return i.outEdges(d)})}function r(i,o,a,c){var d={},m=new e,h,p,g=function(x){var v=x.v!==h?x.v:x.w,k=d[v],S=a(x),b=p.distance+S;if(S<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+x+" Weight: "+S);b<k.distance&&(k.distance=b,k.predecessor=h,m.decrease(v,b))};for(i.nodes().forEach(function(x){var v=x===o?0:Number.POSITIVE_INFINITY;d[x]={distance:v},m.add(x,v)});m.size()>0&&(h=m.removeMin(),p=d[h],p.distance!==Number.POSITIVE_INFINITY);)c(h).forEach(g);return d}return qy}var Gy,G2;function pQ(){if(G2)return Gy;G2=1;var e=VR();Gy=t;function t(n,r,i){return n.nodes().reduce(function(o,a){return o[a]=e(n,a,r,i),o},{})}return Gy}var Wy,W2;function UR(){if(W2)return Wy;W2=1,Wy=e;function e(t){var n=0,r=[],i={},o=[];function a(c){var d=i[c]={onStack:!0,lowlink:n,index:n++};if(r.push(c),t.successors(c).forEach(function(p){Object.hasOwn(i,p)?i[p].onStack&&(d.lowlink=Math.min(d.lowlink,i[p].index)):(a(p),d.lowlink=Math.min(d.lowlink,i[p].lowlink))}),d.lowlink===d.index){var m=[],h;do h=r.pop(),i[h].onStack=!1,m.push(h);while(c!==h);o.push(m)}}return t.nodes().forEach(function(c){Object.hasOwn(i,c)||a(c)}),o}return Wy}var Yy,Y2;function hQ(){if(Y2)return Yy;Y2=1;var e=UR();Yy=t;function t(n){return e(n).filter(function(r){return r.length>1||r.length===1&&n.hasEdge(r[0],r[0])})}return Yy}var Xy,X2;function gQ(){if(X2)return Xy;X2=1,Xy=t;var e=()=>1;function t(r,i,o){return n(r,i||e,o||function(a){return r.outEdges(a)})}function n(r,i,o){var a={},c=r.nodes();return c.forEach(function(d){a[d]={},a[d][d]={distance:0},c.forEach(function(m){d!==m&&(a[d][m]={distance:Number.POSITIVE_INFINITY})}),o(d).forEach(function(m){var h=m.v===d?m.w:m.v,p=i(m);a[d][h]={distance:p,predecessor:d}})}),c.forEach(function(d){var m=a[d];c.forEach(function(h){var p=a[h];c.forEach(function(g){var x=p[d],v=m[g],k=p[g],S=x.distance+v.distance;S<k.distance&&(k.distance=S,k.predecessor=v.predecessor)})})}),a}return Xy}var Ky,K2;function qR(){if(K2)return Ky;K2=1;function e(n){var r={},i={},o=[];function a(c){if(Object.hasOwn(i,c))throw new t;Object.hasOwn(r,c)||(i[c]=!0,r[c]=!0,n.predecessors(c).forEach(a),delete i[c],o.push(c))}if(n.sinks().forEach(a),Object.keys(r).length!==n.nodeCount())throw new t;return o}class t extends Error{constructor(){super(...arguments)}}return Ky=e,e.CycleException=t,Ky}var Zy,Z2;function yQ(){if(Z2)return Zy;Z2=1;var e=qR();Zy=t;function t(n){try{e(n)}catch(r){if(r instanceof e.CycleException)return!1;throw r}return!0}return Zy}var Qy,Q2;function GR(){if(Q2)return Qy;Q2=1,Qy=e;function e(i,o,a){Array.isArray(o)||(o=[o]);var c=i.isDirected()?p=>i.successors(p):p=>i.neighbors(p),d=a==="post"?t:n,m=[],h={};return o.forEach(p=>{if(!i.hasNode(p))throw new Error("Graph does not have node: "+p);d(p,c,h,m)}),m}function t(i,o,a,c){for(var d=[[i,!1]];d.length>0;){var m=d.pop();m[1]?c.push(m[0]):Object.hasOwn(a,m[0])||(a[m[0]]=!0,d.push([m[0],!0]),r(o(m[0]),h=>d.push([h,!1])))}}function n(i,o,a,c){for(var d=[i];d.length>0;){var m=d.pop();Object.hasOwn(a,m)||(a[m]=!0,c.push(m),r(o(m),h=>d.push(h)))}}function r(i,o){for(var a=i.length;a--;)o(i[a],a,i);return i}return Qy}var Jy,J2;function xQ(){if(J2)return Jy;J2=1;var e=GR();Jy=t;function t(n,r){return e(n,r,"post")}return Jy}var ex,ej;function vQ(){if(ej)return ex;ej=1;var e=GR();ex=t;function t(n,r){return e(n,r,"pre")}return ex}var tx,tj;function bQ(){if(tj)return tx;tj=1;var e=X0(),t=FR();tx=n;function n(r,i){var o=new e,a={},c=new t,d;function m(p){var g=p.v===d?p.w:p.v,x=c.priority(g);if(x!==void 0){var v=i(p);v<x&&(a[g]=d,c.decrease(g,v))}}if(r.nodeCount()===0)return o;r.nodes().forEach(function(p){c.add(p,Number.POSITIVE_INFINITY),o.setNode(p)}),c.decrease(r.nodes()[0],0);for(var h=!1;c.size()>0;){if(d=c.removeMin(),Object.hasOwn(a,d))o.setEdge(d,a[d]);else{if(h)throw new Error("Input graph is not connected: "+r);h=!0}r.nodeEdges(d).forEach(m)}return o}return tx}var nx,nj;function _Q(){return nj||(nj=1,nx={components:mQ(),dijkstra:VR(),dijkstraAll:pQ(),findCycles:hQ(),floydWarshall:gQ(),isAcyclic:yQ(),postorder:xQ(),preorder:vQ(),prim:bQ(),tarjan:UR(),topsort:qR()}),nx}var rx,rj;function qi(){if(rj)return rx;rj=1;var e=dQ();return rx={Graph:e.Graph,json:fQ(),alg:_Q(),version:e.version},rx}var ix,ij;function kQ(){if(ij)return ix;ij=1;class e{constructor(){let i={};i._next=i._prev=i,this._sentinel=i}dequeue(){let i=this._sentinel,o=i._prev;if(o!==i)return t(o),o}enqueue(i){let o=this._sentinel;i._prev&&i._next&&t(i),i._next=o._next,o._next._prev=i,o._next=i,i._prev=o}toString(){let i=[],o=this._sentinel,a=o._prev;for(;a!==o;)i.push(JSON.stringify(a,n)),a=a._prev;return"["+i.join(", ")+"]"}}function t(r){r._prev._next=r._next,r._next._prev=r._prev,delete r._next,delete r._prev}function n(r,i){if(r!=="_next"&&r!=="_prev")return i}return ix=e,ix}var sx,sj;function SQ(){if(sj)return sx;sj=1;let e=qi().Graph,t=kQ();sx=r;let n=()=>1;function r(m,h){if(m.nodeCount()<=1)return[];let p=a(m,h||n);return i(p.graph,p.buckets,p.zeroIdx).flatMap(x=>m.outEdges(x.v,x.w))}function i(m,h,p){let g=[],x=h[h.length-1],v=h[0],k;for(;m.nodeCount();){for(;k=v.dequeue();)o(m,h,p,k);for(;k=x.dequeue();)o(m,h,p,k);if(m.nodeCount()){for(let S=h.length-2;S>0;--S)if(k=h[S].dequeue(),k){g=g.concat(o(m,h,p,k,!0));break}}}return g}function o(m,h,p,g,x){let v=x?[]:void 0;return m.inEdges(g.v).forEach(k=>{let S=m.edge(k),b=m.node(k.v);x&&v.push({v:k.v,w:k.w}),b.out-=S,c(h,p,b)}),m.outEdges(g.v).forEach(k=>{let S=m.edge(k),b=k.w,w=m.node(b);w.in-=S,c(h,p,w)}),m.removeNode(g.v),v}function a(m,h){let p=new e,g=0,x=0;m.nodes().forEach(S=>{p.setNode(S,{v:S,in:0,out:0})}),m.edges().forEach(S=>{let b=p.edge(S.v,S.w)||0,w=h(S),j=b+w;p.setEdge(S.v,S.w,j),x=Math.max(x,p.node(S.v).out+=w),g=Math.max(g,p.node(S.w).in+=w)});let v=d(x+g+3).map(()=>new t),k=g+1;return p.nodes().forEach(S=>{c(v,k,p.node(S))}),{graph:p,buckets:v,zeroIdx:k}}function c(m,h,p){p.out?p.in?m[p.out-p.in+h].enqueue(p):m[m.length-1].enqueue(p):m[0].enqueue(p)}function d(m){const h=[];for(let p=0;p<m;p++)h.push(p);return h}return sx}var ox,oj;function ur(){if(oj)return ox;oj=1;let e=qi().Graph;ox={addBorderNode:h,addDummyNode:t,applyWithChunking:x,asNonCompoundGraph:r,buildLayerMatrix:c,intersectRect:a,mapValues:R,maxRank:v,normalizeRanks:d,notime:b,partition:k,pick:O,predecessorWeights:o,range:N,removeEmptyRanks:m,simplify:n,successorWeights:i,time:S,uniqueId:j,zipObject:L};function t(I,D,M,A){for(var $=A;I.hasNode($);)$=j(A);return M.dummy=D,I.setNode($,M),$}function n(I){let D=new e().setGraph(I.graph());return I.nodes().forEach(M=>D.setNode(M,I.node(M))),I.edges().forEach(M=>{let A=D.edge(M.v,M.w)||{weight:0,minlen:1},$=I.edge(M);D.setEdge(M.v,M.w,{weight:A.weight+$.weight,minlen:Math.max(A.minlen,$.minlen)})}),D}function r(I){let D=new e({multigraph:I.isMultigraph()}).setGraph(I.graph());return I.nodes().forEach(M=>{I.children(M).length||D.setNode(M,I.node(M))}),I.edges().forEach(M=>{D.setEdge(M,I.edge(M))}),D}function i(I){let D=I.nodes().map(M=>{let A={};return I.outEdges(M).forEach($=>{A[$.w]=(A[$.w]||0)+I.edge($).weight}),A});return L(I.nodes(),D)}function o(I){let D=I.nodes().map(M=>{let A={};return I.inEdges(M).forEach($=>{A[$.v]=(A[$.v]||0)+I.edge($).weight}),A});return L(I.nodes(),D)}function a(I,D){let M=I.x,A=I.y,$=D.x-M,W=D.y-A,B=I.width/2,V=I.height/2;if(!$&&!W)throw new Error("Not possible to find intersection inside of the rectangle");let H,U;return Math.abs(W)*B>Math.abs($)*V?(W<0&&(V=-V),H=V*$/W,U=V):($<0&&(B=-B),H=B,U=B*W/$),{x:M+H,y:A+U}}function c(I){let D=N(v(I)+1).map(()=>[]);return I.nodes().forEach(M=>{let A=I.node(M),$=A.rank;$!==void 0&&(D[$][A.order]=M)}),D}function d(I){let D=I.nodes().map(A=>{let $=I.node(A).rank;return $===void 0?Number.MAX_VALUE:$}),M=x(Math.min,D);I.nodes().forEach(A=>{let $=I.node(A);Object.hasOwn($,"rank")&&($.rank-=M)})}function m(I){let D=I.nodes().map(B=>I.node(B).rank),M=x(Math.min,D),A=[];I.nodes().forEach(B=>{let V=I.node(B).rank-M;A[V]||(A[V]=[]),A[V].push(B)});let $=0,W=I.graph().nodeRankFactor;Array.from(A).forEach((B,V)=>{B===void 0&&V%W!==0?--$:B!==void 0&&$&&B.forEach(H=>I.node(H).rank+=$)})}function h(I,D,M,A){let $={width:0,height:0};return arguments.length>=4&&($.rank=M,$.order=A),t(I,"border",$,D)}function p(I,D=g){const M=[];for(let A=0;A<I.length;A+=D){const $=I.slice(A,A+D);M.push($)}return M}const g=65535;function x(I,D){if(D.length>g){const M=p(D);return I.apply(null,M.map(A=>I.apply(null,A)))}else return I.apply(null,D)}function v(I){const M=I.nodes().map(A=>{let $=I.node(A).rank;return $===void 0?Number.MIN_VALUE:$});return x(Math.max,M)}function k(I,D){let M={lhs:[],rhs:[]};return I.forEach(A=>{D(A)?M.lhs.push(A):M.rhs.push(A)}),M}function S(I,D){let M=Date.now();try{return D()}finally{console.log(I+" time: "+(Date.now()-M)+"ms")}}function b(I,D){return D()}let w=0;function j(I){var D=++w;return I+(""+D)}function N(I,D,M=1){D==null&&(D=I,I=0);let A=W=>W<D;M<0&&(A=W=>D<W);const $=[];for(let W=I;A(W);W+=M)$.push(W);return $}function O(I,D){const M={};for(const A of D)I[A]!==void 0&&(M[A]=I[A]);return M}function R(I,D){let M=D;return typeof D=="string"&&(M=A=>A[D]),Object.entries(I).reduce((A,[$,W])=>(A[$]=M(W,$),A),{})}function L(I,D){return I.reduce((M,A,$)=>(M[A]=D[$],M),{})}return ox}var ax,aj;function wQ(){if(aj)return ax;aj=1;let e=SQ(),t=ur().uniqueId;ax={run:n,undo:i};function n(o){(o.graph().acyclicer==="greedy"?e(o,c(o)):r(o)).forEach(d=>{let m=o.edge(d);o.removeEdge(d),m.forwardName=d.name,m.reversed=!0,o.setEdge(d.w,d.v,m,t("rev"))});function c(d){return m=>d.edge(m).weight}}function r(o){let a=[],c={},d={};function m(h){Object.hasOwn(d,h)||(d[h]=!0,c[h]=!0,o.outEdges(h).forEach(p=>{Object.hasOwn(c,p.w)?a.push(p):m(p.w)}),delete c[h])}return o.nodes().forEach(m),a}function i(o){o.edges().forEach(a=>{let c=o.edge(a);if(c.reversed){o.removeEdge(a);let d=c.forwardName;delete c.reversed,delete c.forwardName,o.setEdge(a.w,a.v,c,d)}})}return ax}var lx,lj;function CQ(){if(lj)return lx;lj=1;let e=ur();lx={run:t,undo:r};function t(i){i.graph().dummyChains=[],i.edges().forEach(o=>n(i,o))}function n(i,o){let a=o.v,c=i.node(a).rank,d=o.w,m=i.node(d).rank,h=o.name,p=i.edge(o),g=p.labelRank;if(m===c+1)return;i.removeEdge(o);let x,v,k;for(k=0,++c;c<m;++k,++c)p.points=[],v={width:0,height:0,edgeLabel:p,edgeObj:o,rank:c},x=e.addDummyNode(i,"edge",v,"_d"),c===g&&(v.width=p.width,v.height=p.height,v.dummy="edge-label",v.labelpos=p.labelpos),i.setEdge(a,x,{weight:p.weight},h),k===0&&i.graph().dummyChains.push(x),a=x;i.setEdge(a,d,{weight:p.weight},h)}function r(i){i.graph().dummyChains.forEach(o=>{let a=i.node(o),c=a.edgeLabel,d;for(i.setEdge(a.edgeObj,c);a.dummy;)d=i.successors(o)[0],i.removeNode(o),c.points.push({x:a.x,y:a.y}),a.dummy==="edge-label"&&(c.x=a.x,c.y=a.y,c.width=a.width,c.height=a.height),o=d,a=i.node(o)})}return lx}var cx,cj;function Im(){if(cj)return cx;cj=1;const{applyWithChunking:e}=ur();cx={longestPath:t,slack:n};function t(r){var i={};function o(a){var c=r.node(a);if(Object.hasOwn(i,a))return c.rank;i[a]=!0;let d=r.outEdges(a).map(h=>h==null?Number.POSITIVE_INFINITY:o(h.w)-r.edge(h).minlen);var m=e(Math.min,d);return m===Number.POSITIVE_INFINITY&&(m=0),c.rank=m}r.sources().forEach(o)}function n(r,i){return r.node(i.w).rank-r.node(i.v).rank-r.edge(i).minlen}return cx}var ux,uj;function WR(){if(uj)return ux;uj=1;var e=qi().Graph,t=Im().slack;ux=n;function n(a){var c=new e({directed:!1}),d=a.nodes()[0],m=a.nodeCount();c.setNode(d,{});for(var h,p;r(c,a)<m;)h=i(c,a),p=c.hasNode(h.v)?t(a,h):-t(a,h),o(c,a,p);return c}function r(a,c){function d(m){c.nodeEdges(m).forEach(h=>{var p=h.v,g=m===p?h.w:p;!a.hasNode(g)&&!t(c,h)&&(a.setNode(g,{}),a.setEdge(m,g,{}),d(g))})}return a.nodes().forEach(d),a.nodeCount()}function i(a,c){return c.edges().reduce((m,h)=>{let p=Number.POSITIVE_INFINITY;return a.hasNode(h.v)!==a.hasNode(h.w)&&(p=t(c,h)),p<m[0]?[p,h]:m},[Number.POSITIVE_INFINITY,null])[1]}function o(a,c,d){a.nodes().forEach(m=>c.node(m).rank+=d)}return ux}var dx,dj;function jQ(){if(dj)return dx;dj=1;var e=WR(),t=Im().slack,n=Im().longestPath,r=qi().alg.preorder,i=qi().alg.postorder,o=ur().simplify;dx=a,a.initLowLimValues=h,a.initCutValues=c,a.calcCutValue=m,a.leaveEdge=g,a.enterEdge=x,a.exchangeEdges=v;function a(w){w=o(w),n(w);var j=e(w);h(j),c(j,w);for(var N,O;N=g(j);)O=x(j,w,N),v(j,w,N,O)}function c(w,j){var N=i(w,w.nodes());N=N.slice(0,N.length-1),N.forEach(O=>d(w,j,O))}function d(w,j,N){var O=w.node(N),R=O.parent;w.edge(N,R).cutvalue=m(w,j,N)}function m(w,j,N){var O=w.node(N),R=O.parent,L=!0,I=j.edge(N,R),D=0;return I||(L=!1,I=j.edge(R,N)),D=I.weight,j.nodeEdges(N).forEach(M=>{var A=M.v===N,$=A?M.w:M.v;if($!==R){var W=A===L,B=j.edge(M).weight;if(D+=W?B:-B,S(w,N,$)){var V=w.edge(N,$).cutvalue;D+=W?-V:V}}}),D}function h(w,j){arguments.length<2&&(j=w.nodes()[0]),p(w,{},1,j)}function p(w,j,N,O,R){var L=N,I=w.node(O);return j[O]=!0,w.neighbors(O).forEach(D=>{Object.hasOwn(j,D)||(N=p(w,j,N,D,O))}),I.low=L,I.lim=N++,R?I.parent=R:delete I.parent,N}function g(w){return w.edges().find(j=>w.edge(j).cutvalue<0)}function x(w,j,N){var O=N.v,R=N.w;j.hasEdge(O,R)||(O=N.w,R=N.v);var L=w.node(O),I=w.node(R),D=L,M=!1;L.lim>I.lim&&(D=I,M=!0);var A=j.edges().filter($=>M===b(w,w.node($.v),D)&&M!==b(w,w.node($.w),D));return A.reduce(($,W)=>t(j,W)<t(j,$)?W:$)}function v(w,j,N,O){var R=N.v,L=N.w;w.removeEdge(R,L),w.setEdge(O.v,O.w,{}),h(w),c(w,j),k(w,j)}function k(w,j){var N=w.nodes().find(R=>!j.node(R).parent),O=r(w,N);O=O.slice(1),O.forEach(R=>{var L=w.node(R).parent,I=j.edge(R,L),D=!1;I||(I=j.edge(L,R),D=!0),j.node(R).rank=j.node(L).rank+(D?I.minlen:-I.minlen)})}function S(w,j,N){return w.hasEdge(j,N)}function b(w,j,N){return N.low<=j.lim&&j.lim<=N.lim}return dx}var fx,fj;function EQ(){if(fj)return fx;fj=1;var e=Im(),t=e.longestPath,n=WR(),r=jQ();fx=i;function i(d){var m=d.graph().ranker;if(m instanceof Function)return m(d);switch(d.graph().ranker){case"network-simplex":c(d);break;case"tight-tree":a(d);break;case"longest-path":o(d);break;case"none":break;default:c(d)}}var o=t;function a(d){t(d),n(d)}function c(d){r(d)}return fx}var mx,mj;function NQ(){if(mj)return mx;mj=1,mx=e;function e(r){let i=n(r);r.graph().dummyChains.forEach(o=>{let a=r.node(o),c=a.edgeObj,d=t(r,i,c.v,c.w),m=d.path,h=d.lca,p=0,g=m[p],x=!0;for(;o!==c.w;){if(a=r.node(o),x){for(;(g=m[p])!==h&&r.node(g).maxRank<a.rank;)p++;g===h&&(x=!1)}if(!x){for(;p<m.length-1&&r.node(g=m[p+1]).minRank<=a.rank;)p++;g=m[p]}r.setParent(o,g),o=r.successors(o)[0]}})}function t(r,i,o,a){let c=[],d=[],m=Math.min(i[o].low,i[a].low),h=Math.max(i[o].lim,i[a].lim),p,g;p=o;do p=r.parent(p),c.push(p);while(p&&(i[p].low>m||h>i[p].lim));for(g=p,p=a;(p=r.parent(p))!==g;)d.push(p);return{path:c.concat(d.reverse()),lca:g}}function n(r){let i={},o=0;function a(c){let d=o;r.children(c).forEach(a),i[c]={low:d,lim:o++}}return r.children().forEach(a),i}return mx}var px,pj;function IQ(){if(pj)return px;pj=1;let e=ur();px={run:t,cleanup:o};function t(a){let c=e.addDummyNode(a,"root",{},"_root"),d=r(a),m=Object.values(d),h=e.applyWithChunking(Math.max,m)-1,p=2*h+1;a.graph().nestingRoot=c,a.edges().forEach(x=>a.edge(x).minlen*=p);let g=i(a)+1;a.children().forEach(x=>n(a,c,p,g,h,d,x)),a.graph().nodeRankFactor=p}function n(a,c,d,m,h,p,g){let x=a.children(g);if(!x.length){g!==c&&a.setEdge(c,g,{weight:0,minlen:d});return}let v=e.addBorderNode(a,"_bt"),k=e.addBorderNode(a,"_bb"),S=a.node(g);a.setParent(v,g),S.borderTop=v,a.setParent(k,g),S.borderBottom=k,x.forEach(b=>{n(a,c,d,m,h,p,b);let w=a.node(b),j=w.borderTop?w.borderTop:b,N=w.borderBottom?w.borderBottom:b,O=w.borderTop?m:2*m,R=j!==N?1:h-p[g]+1;a.setEdge(v,j,{weight:O,minlen:R,nestingEdge:!0}),a.setEdge(N,k,{weight:O,minlen:R,nestingEdge:!0})}),a.parent(g)||a.setEdge(c,v,{weight:0,minlen:h+p[g]})}function r(a){var c={};function d(m,h){var p=a.children(m);p&&p.length&&p.forEach(g=>d(g,h+1)),c[m]=h}return a.children().forEach(m=>d(m,1)),c}function i(a){return a.edges().reduce((c,d)=>c+a.edge(d).weight,0)}function o(a){var c=a.graph();a.removeNode(c.nestingRoot),delete c.nestingRoot,a.edges().forEach(d=>{var m=a.edge(d);m.nestingEdge&&a.removeEdge(d)})}return px}var hx,hj;function TQ(){if(hj)return hx;hj=1;let e=ur();hx=t;function t(r){function i(o){let a=r.children(o),c=r.node(o);if(a.length&&a.forEach(i),Object.hasOwn(c,"minRank")){c.borderLeft=[],c.borderRight=[];for(let d=c.minRank,m=c.maxRank+1;d<m;++d)n(r,"borderLeft","_bl",o,c,d),n(r,"borderRight","_br",o,c,d)}}r.children().forEach(i)}function n(r,i,o,a,c,d){let m={width:0,height:0,rank:d,borderType:i},h=c[i][d-1],p=e.addDummyNode(r,"border",m,o);c[i][d]=p,r.setParent(p,a),h&&r.setEdge(h,p,{weight:1})}return hx}var gx,gj;function RQ(){if(gj)return gx;gj=1,gx={adjust:e,undo:t};function e(d){let m=d.graph().rankdir.toLowerCase();(m==="lr"||m==="rl")&&n(d)}function t(d){let m=d.graph().rankdir.toLowerCase();(m==="bt"||m==="rl")&&i(d),(m==="lr"||m==="rl")&&(a(d),n(d))}function n(d){d.nodes().forEach(m=>r(d.node(m))),d.edges().forEach(m=>r(d.edge(m)))}function r(d){let m=d.width;d.width=d.height,d.height=m}function i(d){d.nodes().forEach(m=>o(d.node(m))),d.edges().forEach(m=>{let h=d.edge(m);h.points.forEach(o),Object.hasOwn(h,"y")&&o(h)})}function o(d){d.y=-d.y}function a(d){d.nodes().forEach(m=>c(d.node(m))),d.edges().forEach(m=>{let h=d.edge(m);h.points.forEach(c),Object.hasOwn(h,"x")&&c(h)})}function c(d){let m=d.x;d.x=d.y,d.y=m}return gx}var yx,yj;function AQ(){if(yj)return yx;yj=1;let e=ur();yx=t;function t(n){let r={},i=n.nodes().filter(h=>!n.children(h).length),o=i.map(h=>n.node(h).rank),a=e.applyWithChunking(Math.max,o),c=e.range(a+1).map(()=>[]);function d(h){if(r[h])return;r[h]=!0;let p=n.node(h);c[p.rank].push(h),n.successors(h).forEach(d)}return i.sort((h,p)=>n.node(h).rank-n.node(p).rank).forEach(d),c}return yx}var xx,xj;function MQ(){if(xj)return xx;xj=1;let e=ur().zipObject;xx=t;function t(r,i){let o=0;for(let a=1;a<i.length;++a)o+=n(r,i[a-1],i[a]);return o}function n(r,i,o){let a=e(o,o.map((g,x)=>x)),c=i.flatMap(g=>r.outEdges(g).map(x=>({pos:a[x.w],weight:r.edge(x).weight})).sort((x,v)=>x.pos-v.pos)),d=1;for(;d<o.length;)d<<=1;let m=2*d-1;d-=1;let h=new Array(m).fill(0),p=0;return c.forEach(g=>{let x=g.pos+d;h[x]+=g.weight;let v=0;for(;x>0;)x%2&&(v+=h[x+1]),x=x-1>>1,h[x]+=g.weight;p+=g.weight*v}),p}return xx}var vx,vj;function DQ(){if(vj)return vx;vj=1,vx=e;function e(t,n=[]){return n.map(r=>{let i=t.inEdges(r);if(i.length){let o=i.reduce((a,c)=>{let d=t.edge(c),m=t.node(c.v);return{sum:a.sum+d.weight*m.order,weight:a.weight+d.weight}},{sum:0,weight:0});return{v:r,barycenter:o.sum/o.weight,weight:o.weight}}else return{v:r}})}return vx}var bx,bj;function OQ(){if(bj)return bx;bj=1;let e=ur();bx=t;function t(i,o){let a={};i.forEach((d,m)=>{let h=a[d.v]={indegree:0,in:[],out:[],vs:[d.v],i:m};d.barycenter!==void 0&&(h.barycenter=d.barycenter,h.weight=d.weight)}),o.edges().forEach(d=>{let m=a[d.v],h=a[d.w];m!==void 0&&h!==void 0&&(h.indegree++,m.out.push(a[d.w]))});let c=Object.values(a).filter(d=>!d.indegree);return n(c)}function n(i){let o=[];function a(d){return m=>{m.merged||(m.barycenter===void 0||d.barycenter===void 0||m.barycenter>=d.barycenter)&&r(d,m)}}function c(d){return m=>{m.in.push(d),--m.indegree===0&&i.push(m)}}for(;i.length;){let d=i.pop();o.push(d),d.in.reverse().forEach(a(d)),d.out.forEach(c(d))}return o.filter(d=>!d.merged).map(d=>e.pick(d,["vs","i","barycenter","weight"]))}function r(i,o){let a=0,c=0;i.weight&&(a+=i.barycenter*i.weight,c+=i.weight),o.weight&&(a+=o.barycenter*o.weight,c+=o.weight),i.vs=o.vs.concat(i.vs),i.barycenter=a/c,i.weight=c,i.i=Math.min(o.i,i.i),o.merged=!0}return bx}var _x,_j;function LQ(){if(_j)return _x;_j=1;let e=ur();_x=t;function t(i,o){let a=e.partition(i,v=>Object.hasOwn(v,"barycenter")),c=a.lhs,d=a.rhs.sort((v,k)=>k.i-v.i),m=[],h=0,p=0,g=0;c.sort(r(!!o)),g=n(m,d,g),c.forEach(v=>{g+=v.vs.length,m.push(v.vs),h+=v.barycenter*v.weight,p+=v.weight,g=n(m,d,g)});let x={vs:m.flat(!0)};return p&&(x.barycenter=h/p,x.weight=p),x}function n(i,o,a){let c;for(;o.length&&(c=o[o.length-1]).i<=a;)o.pop(),i.push(c.vs),a++;return a}function r(i){return(o,a)=>o.barycenter<a.barycenter?-1:o.barycenter>a.barycenter?1:i?a.i-o.i:o.i-a.i}return _x}var kx,kj;function zQ(){if(kj)return kx;kj=1;let e=DQ(),t=OQ(),n=LQ();kx=r;function r(a,c,d,m){let h=a.children(c),p=a.node(c),g=p?p.borderLeft:void 0,x=p?p.borderRight:void 0,v={};g&&(h=h.filter(w=>w!==g&&w!==x));let k=e(a,h);k.forEach(w=>{if(a.children(w.v).length){let j=r(a,w.v,d,m);v[w.v]=j,Object.hasOwn(j,"barycenter")&&o(w,j)}});let S=t(k,d);i(S,v);let b=n(S,m);if(g&&(b.vs=[g,b.vs,x].flat(!0),a.predecessors(g).length)){let w=a.node(a.predecessors(g)[0]),j=a.node(a.predecessors(x)[0]);Object.hasOwn(b,"barycenter")||(b.barycenter=0,b.weight=0),b.barycenter=(b.barycenter*b.weight+w.order+j.order)/(b.weight+2),b.weight+=2}return b}function i(a,c){a.forEach(d=>{d.vs=d.vs.flatMap(m=>c[m]?c[m].vs:m)})}function o(a,c){a.barycenter!==void 0?(a.barycenter=(a.barycenter*a.weight+c.barycenter*c.weight)/(a.weight+c.weight),a.weight+=c.weight):(a.barycenter=c.barycenter,a.weight=c.weight)}return kx}var Sx,Sj;function PQ(){if(Sj)return Sx;Sj=1;let e=qi().Graph,t=ur();Sx=n;function n(i,o,a,c){c||(c=i.nodes());let d=r(i),m=new e({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(h=>i.node(h));return c.forEach(h=>{let p=i.node(h),g=i.parent(h);(p.rank===o||p.minRank<=o&&o<=p.maxRank)&&(m.setNode(h),m.setParent(h,g||d),i[a](h).forEach(x=>{let v=x.v===h?x.w:x.v,k=m.edge(v,h),S=k!==void 0?k.weight:0;m.setEdge(v,h,{weight:i.edge(x).weight+S})}),Object.hasOwn(p,"minRank")&&m.setNode(h,{borderLeft:p.borderLeft[o],borderRight:p.borderRight[o]}))}),m}function r(i){for(var o;i.hasNode(o=t.uniqueId("_root")););return o}return Sx}var wx,wj;function BQ(){if(wj)return wx;wj=1,wx=e;function e(t,n,r){let i={},o;r.forEach(a=>{let c=t.parent(a),d,m;for(;c;){if(d=t.parent(c),d?(m=i[d],i[d]=c):(m=o,o=c),m&&m!==c){n.setEdge(m,c);return}c=d}})}return wx}var Cx,Cj;function $Q(){if(Cj)return Cx;Cj=1;let e=AQ(),t=MQ(),n=zQ(),r=PQ(),i=BQ(),o=qi().Graph,a=ur();Cx=c;function c(p,g){if(g&&typeof g.customOrder=="function"){g.customOrder(p,c);return}let x=a.maxRank(p),v=d(p,a.range(1,x+1),"inEdges"),k=d(p,a.range(x-1,-1,-1),"outEdges"),S=e(p);if(h(p,S),g&&g.disableOptimalOrderHeuristic)return;let b=Number.POSITIVE_INFINITY,w;for(let j=0,N=0;N<4;++j,++N){m(j%2?v:k,j%4>=2),S=a.buildLayerMatrix(p);let O=t(p,S);O<b&&(N=0,w=Object.assign({},S),b=O)}h(p,w)}function d(p,g,x){const v=new Map,k=(S,b)=>{v.has(S)||v.set(S,[]),v.get(S).push(b)};for(const S of p.nodes()){const b=p.node(S);if(typeof b.rank=="number"&&k(b.rank,S),typeof b.minRank=="number"&&typeof b.maxRank=="number")for(let w=b.minRank;w<=b.maxRank;w++)w!==b.rank&&k(w,S)}return g.map(function(S){return r(p,S,x,v.get(S)||[])})}function m(p,g){let x=new o;p.forEach(function(v){let k=v.graph().root,S=n(v,k,x,g);S.vs.forEach((b,w)=>v.node(b).order=w),i(v,x,S.vs)})}function h(p,g){Object.values(g).forEach(x=>x.forEach((v,k)=>p.node(v).order=k))}return Cx}var jx,jj;function HQ(){if(jj)return jx;jj=1;let e=qi().Graph,t=ur();jx={positionX:x,findType1Conflicts:n,findType2Conflicts:r,addConflict:o,hasConflict:a,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:h,balance:g};function n(S,b){let w={};function j(N,O){let R=0,L=0,I=N.length,D=O[O.length-1];return O.forEach((M,A)=>{let $=i(S,M),W=$?S.node($).order:I;($||M===D)&&(O.slice(L,A+1).forEach(B=>{S.predecessors(B).forEach(V=>{let H=S.node(V),U=H.order;(U<R||W<U)&&!(H.dummy&&S.node(B).dummy)&&o(w,V,B)})}),L=A+1,R=W)}),O}return b.length&&b.reduce(j),w}function r(S,b){let w={};function j(O,R,L,I,D){let M;t.range(R,L).forEach(A=>{M=O[A],S.node(M).dummy&&S.predecessors(M).forEach($=>{let W=S.node($);W.dummy&&(W.order<I||W.order>D)&&o(w,$,M)})})}function N(O,R){let L=-1,I,D=0;return R.forEach((M,A)=>{if(S.node(M).dummy==="border"){let $=S.predecessors(M);$.length&&(I=S.node($[0]).order,j(R,D,A,L,I),D=A,L=I)}j(R,D,R.length,I,O.length)}),R}return b.length&&b.reduce(N),w}function i(S,b){if(S.node(b).dummy)return S.predecessors(b).find(w=>S.node(w).dummy)}function o(S,b,w){if(b>w){let N=b;b=w,w=N}let j=S[b];j||(S[b]=j={}),j[w]=!0}function a(S,b,w){if(b>w){let j=b;b=w,w=j}return!!S[b]&&Object.hasOwn(S[b],w)}function c(S,b,w,j){let N={},O={},R={};return b.forEach(L=>{L.forEach((I,D)=>{N[I]=I,O[I]=I,R[I]=D})}),b.forEach(L=>{let I=-1;L.forEach(D=>{let M=j(D);if(M.length){M=M.sort(($,W)=>R[$]-R[W]);let A=(M.length-1)/2;for(let $=Math.floor(A),W=Math.ceil(A);$<=W;++$){let B=M[$];O[D]===D&&I<R[B]&&!a(w,D,B)&&(O[B]=D,O[D]=N[D]=N[B],I=R[B])}}})}),{root:N,align:O}}function d(S,b,w,j,N){let O={},R=m(S,b,w,N),L=N?"borderLeft":"borderRight";function I(A,$){let W=R.nodes(),B=W.pop(),V={};for(;B;)V[B]?A(B):(V[B]=!0,W.push(B),W=W.concat($(B))),B=W.pop()}function D(A){O[A]=R.inEdges(A).reduce(($,W)=>Math.max($,O[W.v]+R.edge(W)),0)}function M(A){let $=R.outEdges(A).reduce((B,V)=>Math.min(B,O[V.w]-R.edge(V)),Number.POSITIVE_INFINITY),W=S.node(A);$!==Number.POSITIVE_INFINITY&&W.borderType!==L&&(O[A]=Math.max(O[A],$))}return I(D,R.predecessors.bind(R)),I(M,R.successors.bind(R)),Object.keys(j).forEach(A=>O[A]=O[w[A]]),O}function m(S,b,w,j){let N=new e,O=S.graph(),R=v(O.nodesep,O.edgesep,j);return b.forEach(L=>{let I;L.forEach(D=>{let M=w[D];if(N.setNode(M),I){var A=w[I],$=N.edge(A,M);N.setEdge(A,M,Math.max(R(S,D,I),$||0))}I=D})}),N}function h(S,b){return Object.values(b).reduce((w,j)=>{let N=Number.NEGATIVE_INFINITY,O=Number.POSITIVE_INFINITY;Object.entries(j).forEach(([L,I])=>{let D=k(S,L)/2;N=Math.max(I+D,N),O=Math.min(I-D,O)});const R=N-O;return R<w[0]&&(w=[R,j]),w},[Number.POSITIVE_INFINITY,null])[1]}function p(S,b){let w=Object.values(b),j=t.applyWithChunking(Math.min,w),N=t.applyWithChunking(Math.max,w);["u","d"].forEach(O=>{["l","r"].forEach(R=>{let L=O+R,I=S[L];if(I===b)return;let D=Object.values(I),M=j-t.applyWithChunking(Math.min,D);R!=="l"&&(M=N-t.applyWithChunking(Math.max,D)),M&&(S[L]=t.mapValues(I,A=>A+M))})})}function g(S,b){return t.mapValues(S.ul,(w,j)=>{if(b)return S[b.toLowerCase()][j];{let N=Object.values(S).map(O=>O[j]).sort((O,R)=>O-R);return(N[1]+N[2])/2}})}function x(S){let b=t.buildLayerMatrix(S),w=Object.assign(n(S,b),r(S,b)),j={},N;["u","d"].forEach(R=>{N=R==="u"?b:Object.values(b).reverse(),["l","r"].forEach(L=>{L==="r"&&(N=N.map(A=>Object.values(A).reverse()));let I=(R==="u"?S.predecessors:S.successors).bind(S),D=c(S,N,w,I),M=d(S,N,D.root,D.align,L==="r");L==="r"&&(M=t.mapValues(M,A=>-A)),j[R+L]=M})});let O=h(S,j);return p(j,O),g(j,S.graph().align)}function v(S,b,w){return(j,N,O)=>{let R=j.node(N),L=j.node(O),I=0,D;if(I+=R.width/2,Object.hasOwn(R,"labelpos"))switch(R.labelpos.toLowerCase()){case"l":D=-R.width/2;break;case"r":D=R.width/2;break}if(D&&(I+=w?D:-D),D=0,I+=(R.dummy?b:S)/2,I+=(L.dummy?b:S)/2,I+=L.width/2,Object.hasOwn(L,"labelpos"))switch(L.labelpos.toLowerCase()){case"l":D=L.width/2;break;case"r":D=-L.width/2;break}return D&&(I+=w?D:-D),D=0,I}}function k(S,b){return S.node(b).width}return jx}var Ex,Ej;function FQ(){if(Ej)return Ex;Ej=1;let e=ur(),t=HQ().positionX;Ex=n;function n(i){i=e.asNonCompoundGraph(i),r(i),Object.entries(t(i)).forEach(([o,a])=>i.node(o).x=a)}function r(i){let o=e.buildLayerMatrix(i),a=i.graph().ranksep,c=0;o.forEach(d=>{const m=d.reduce((h,p)=>{const g=i.node(p).height;return h>g?h:g},0);d.forEach(h=>i.node(h).y=c+m/2),c+=m+a})}return Ex}var Nx,Nj;function VQ(){if(Nj)return Nx;Nj=1;let e=wQ(),t=CQ(),n=EQ(),r=ur().normalizeRanks,i=NQ(),o=ur().removeEmptyRanks,a=IQ(),c=TQ(),d=RQ(),m=$Q(),h=FQ(),p=ur(),g=qi().Graph;Nx=x;function x(P,K){let ee=K&&K.debugTiming?p.time:p.notime;ee("layout",()=>{let te=ee(" buildLayoutGraph",()=>I(P));ee(" runLayout",()=>v(te,ee,K)),ee(" updateInputGraph",()=>k(P,te))})}function v(P,K,ee){K(" makeSpaceForEdgeLabels",()=>D(P)),K(" removeSelfEdges",()=>Y(P)),K(" acyclic",()=>e.run(P)),K(" nestingGraph.run",()=>a.run(P)),K(" rank",()=>n(p.asNonCompoundGraph(P))),K(" injectEdgeLabelProxies",()=>M(P)),K(" removeEmptyRanks",()=>o(P)),K(" nestingGraph.cleanup",()=>a.cleanup(P)),K(" normalizeRanks",()=>r(P)),K(" assignRankMinMax",()=>A(P)),K(" removeEdgeLabelProxies",()=>$(P)),K(" normalize.run",()=>t.run(P)),K(" parentDummyChains",()=>i(P)),K(" addBorderSegments",()=>c(P)),K(" order",()=>m(P,ee)),K(" insertSelfEdges",()=>Q(P)),K(" adjustCoordinateSystem",()=>d.adjust(P)),K(" position",()=>h(P)),K(" positionSelfEdges",()=>q(P)),K(" removeBorderNodes",()=>U(P)),K(" normalize.undo",()=>t.undo(P)),K(" fixupEdgeLabelCoords",()=>V(P)),K(" undoCoordinateSystem",()=>d.undo(P)),K(" translateGraph",()=>W(P)),K(" assignNodeIntersects",()=>B(P)),K(" reversePoints",()=>H(P)),K(" acyclic.undo",()=>e.undo(P))}function k(P,K){P.nodes().forEach(ee=>{let te=P.node(ee),ie=K.node(ee);te&&(te.x=ie.x,te.y=ie.y,te.rank=ie.rank,K.children(ee).length&&(te.width=ie.width,te.height=ie.height))}),P.edges().forEach(ee=>{let te=P.edge(ee),ie=K.edge(ee);te.points=ie.points,Object.hasOwn(ie,"x")&&(te.x=ie.x,te.y=ie.y)}),P.graph().width=K.graph().width,P.graph().height=K.graph().height}let S=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},w=["acyclicer","ranker","rankdir","align"],j=["width","height","rank"],N={width:0,height:0},O=["minlen","weight","width","height","labeloffset"],R={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},L=["labelpos"];function I(P){let K=new g({multigraph:!0,compound:!0}),ee=J(P.graph());return K.setGraph(Object.assign({},b,G(ee,S),p.pick(ee,w))),P.nodes().forEach(te=>{let ie=J(P.node(te));const se=G(ie,j);Object.keys(N).forEach(de=>{se[de]===void 0&&(se[de]=N[de])}),K.setNode(te,se),K.setParent(te,P.parent(te))}),P.edges().forEach(te=>{let ie=J(P.edge(te));K.setEdge(te,Object.assign({},R,G(ie,O),p.pick(ie,L)))}),K}function D(P){let K=P.graph();K.ranksep/=2,P.edges().forEach(ee=>{let te=P.edge(ee);te.minlen*=2,te.labelpos.toLowerCase()!=="c"&&(K.rankdir==="TB"||K.rankdir==="BT"?te.width+=te.labeloffset:te.height+=te.labeloffset)})}function M(P){P.edges().forEach(K=>{let ee=P.edge(K);if(ee.width&&ee.height){let te=P.node(K.v),se={rank:(P.node(K.w).rank-te.rank)/2+te.rank,e:K};p.addDummyNode(P,"edge-proxy",se,"_ep")}})}function A(P){let K=0;P.nodes().forEach(ee=>{let te=P.node(ee);te.borderTop&&(te.minRank=P.node(te.borderTop).rank,te.maxRank=P.node(te.borderBottom).rank,K=Math.max(K,te.maxRank))}),P.graph().maxRank=K}function $(P){P.nodes().forEach(K=>{let ee=P.node(K);ee.dummy==="edge-proxy"&&(P.edge(ee.e).labelRank=ee.rank,P.removeNode(K))})}function W(P){let K=Number.POSITIVE_INFINITY,ee=0,te=Number.POSITIVE_INFINITY,ie=0,se=P.graph(),de=se.marginx||0,oe=se.marginy||0;function Ne(Ee){let Ie=Ee.x,Be=Ee.y,Ge=Ee.width,Ue=Ee.height;K=Math.min(K,Ie-Ge/2),ee=Math.max(ee,Ie+Ge/2),te=Math.min(te,Be-Ue/2),ie=Math.max(ie,Be+Ue/2)}P.nodes().forEach(Ee=>Ne(P.node(Ee))),P.edges().forEach(Ee=>{let Ie=P.edge(Ee);Object.hasOwn(Ie,"x")&&Ne(Ie)}),K-=de,te-=oe,P.nodes().forEach(Ee=>{let Ie=P.node(Ee);Ie.x-=K,Ie.y-=te}),P.edges().forEach(Ee=>{let Ie=P.edge(Ee);Ie.points.forEach(Be=>{Be.x-=K,Be.y-=te}),Object.hasOwn(Ie,"x")&&(Ie.x-=K),Object.hasOwn(Ie,"y")&&(Ie.y-=te)}),se.width=ee-K+de,se.height=ie-te+oe}function B(P){P.edges().forEach(K=>{let ee=P.edge(K),te=P.node(K.v),ie=P.node(K.w),se,de;ee.points?(se=ee.points[0],de=ee.points[ee.points.length-1]):(ee.points=[],se=ie,de=te),ee.points.unshift(p.intersectRect(te,se)),ee.points.push(p.intersectRect(ie,de))})}function V(P){P.edges().forEach(K=>{let ee=P.edge(K);if(Object.hasOwn(ee,"x"))switch((ee.labelpos==="l"||ee.labelpos==="r")&&(ee.width-=ee.labeloffset),ee.labelpos){case"l":ee.x-=ee.width/2+ee.labeloffset;break;case"r":ee.x+=ee.width/2+ee.labeloffset;break}})}function H(P){P.edges().forEach(K=>{let ee=P.edge(K);ee.reversed&&ee.points.reverse()})}function U(P){P.nodes().forEach(K=>{if(P.children(K).length){let ee=P.node(K),te=P.node(ee.borderTop),ie=P.node(ee.borderBottom),se=P.node(ee.borderLeft[ee.borderLeft.length-1]),de=P.node(ee.borderRight[ee.borderRight.length-1]);ee.width=Math.abs(de.x-se.x),ee.height=Math.abs(ie.y-te.y),ee.x=se.x+ee.width/2,ee.y=te.y+ee.height/2}}),P.nodes().forEach(K=>{P.node(K).dummy==="border"&&P.removeNode(K)})}function Y(P){P.edges().forEach(K=>{if(K.v===K.w){var ee=P.node(K.v);ee.selfEdges||(ee.selfEdges=[]),ee.selfEdges.push({e:K,label:P.edge(K)}),P.removeEdge(K)}})}function Q(P){var K=p.buildLayerMatrix(P);K.forEach(ee=>{var te=0;ee.forEach((ie,se)=>{var de=P.node(ie);de.order=se+te,(de.selfEdges||[]).forEach(oe=>{p.addDummyNode(P,"selfedge",{width:oe.label.width,height:oe.label.height,rank:de.rank,order:se+ ++te,e:oe.e,label:oe.label},"_se")}),delete de.selfEdges})})}function q(P){P.nodes().forEach(K=>{var ee=P.node(K);if(ee.dummy==="selfedge"){var te=P.node(ee.e.v),ie=te.x+te.width/2,se=te.y,de=ee.x-ie,oe=te.height/2;P.setEdge(ee.e,ee.label),P.removeNode(K),ee.label.points=[{x:ie+2*de/3,y:se-oe},{x:ie+5*de/6,y:se-oe},{x:ie+de,y:se},{x:ie+5*de/6,y:se+oe},{x:ie+2*de/3,y:se+oe}],ee.label.x=ee.x,ee.label.y=ee.y}})}function G(P,K){return p.mapValues(p.pick(P,K),Number)}function J(P){var K={};return P&&Object.entries(P).forEach(([ee,te])=>{typeof ee=="string"&&(ee=ee.toLowerCase()),K[ee]=te}),K}return Nx}var Ix,Ij;function UQ(){if(Ij)return Ix;Ij=1;let e=ur(),t=qi().Graph;Ix={debugOrdering:n};function n(r){let i=e.buildLayerMatrix(r),o=new t({compound:!0,multigraph:!0}).setGraph({});return r.nodes().forEach(a=>{o.setNode(a,{label:a}),o.setParent(a,"layer"+r.node(a).rank)}),r.edges().forEach(a=>o.setEdge(a.v,a.w,{},a.name)),i.forEach((a,c)=>{let d="layer"+c;o.setNode(d,{rank:"same"}),a.reduce((m,h)=>(o.setEdge(m,h,{style:"invis"}),h))}),o}return Ix}var Tx,Tj;function qQ(){return Tj||(Tj=1,Tx="1.1.8"),Tx}var Rx,Rj;function GQ(){return Rj||(Rj=1,Rx={graphlib:qi(),layout:VQ(),debug:UQ(),util:{time:ur().time,notime:ur().notime},version:qQ()}),Rx}var WQ=GQ();const Aj=ca(WQ);function YQ(e,t,n={}){const r=new Aj.graphlib.Graph;r.setDefaultEdgeLabel(()=>({})),r.setGraph({rankdir:"TB",ranksep:60,nodesep:36,marginx:24,marginy:24});const i=n.nodeWidth??220,o=n.nodeHeight??80;return e.forEach(a=>r.setNode(a.id,{width:i,height:o})),t.forEach(a=>r.setEdge(a.source,a.target)),Aj.layout(r),e.map(a=>{const{x:c,y:d}=r.node(a.id);return{...a,position:{x:c-i/2,y:d-o/2}}})}const XQ={roleNode:cQ},KQ=C.forwardRef(function(t,n){return u.jsx(PR,{children:u.jsx(ZQ,{...t,forwardedRef:n})})});function ZQ({roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:r,onSelectRole:i,onReparent:o,readOnly:a,forwardedRef:c}){const d=C.useMemo(()=>{const M=new Map;for(const A of t){const $=A.role_ids?.length?A.role_ids:[A.role_id];for(const W of $){if(!W)continue;const B=M.get(W)??[];B.push(A),M.set(W,B)}}return M},[t]),m=C.useCallback(M=>n?n[M]??[]:(d.get(M)??[]).filter(A=>!A.is_default_employee).map(A=>A.name).filter(Boolean),[d,n]),[h,p]=C.useState(0),g=C.useMemo(()=>e.map(M=>M.role_id).sort().join("|"),[e]),x=C.useRef(g);C.useEffect(()=>{x.current!==g&&(x.current=g,p(M=>M+1))},[g]),C.useImperativeHandle(c,()=>({autoLayout:()=>p(M=>M+1)}),[]);const[v,k]=C.useState(null),[S,b]=C.useState({});C.useEffect(()=>{b({})},[h]);const w=C.useMemo(()=>{const M={id:"owner",type:"roleNode",position:{x:0,y:0},draggable:!1,data:{roleId:"owner",name:"You (Owner)",responsibility:"",icon:null,employeeCount:0,employeeNames:[],isOwner:!0,isSelected:!1,isDropTarget:!1}},A=e.map(V=>({id:V.role_id,type:"roleNode",position:{x:0,y:0},draggable:!0,data:{roleId:V.role_id,name:V.name,responsibility:V.responsibility,icon:V.icon??null,employeeCount:m(V.role_id).length,employeeNames:m(V.role_id),isOwner:!1,isSelected:!1,isDropTarget:!1}})),$=[M,...A],W=e.map(V=>({id:`e-${V.reports_to}-${V.role_id}`,source:V.reports_to,target:V.role_id,type:"smoothstep"}));return{nodes:YQ($,W),edges:W}},[h,a]),j=C.useMemo(()=>w.nodes.map(M=>{if(M.id==="owner")return M;const A=e.find(W=>W.role_id===M.id);if(!A)return M;const $=S[M.id];return{...M,position:$??M.position,draggable:!0,data:{...M.data,name:A.name,responsibility:A.responsibility,icon:A.icon??null,employeeCount:m(A.role_id).length,employeeNames:m(A.role_id),isSelected:A.role_id===r,isDropTarget:A.role_id===v}}}),[w.nodes,e,d,m,r,v,a,S]),[N,O]=C.useState(j);C.useEffect(()=>{O(j)},[j]);const R=C.useCallback(M=>{O(A=>mR(M,A))},[]),L=C.useCallback((M,A)=>{if(a)return;const $=220,W=80,B={x:A.position.x+$/2,y:A.position.y+W/2},V=N.find(H=>H.id===A.id?!1:B.x>=H.position.x&&B.x<=H.position.x+$&&B.y>=H.position.y&&B.y<=H.position.y+W);k(V?.id??null)},[N,a]),I=C.useCallback((M,A)=>{const $=v;k(null);const W=()=>b(B=>({...B,[A.id]:{x:A.position.x,y:A.position.y}}));if(a||!$||$===A.id||YR(e,A.id,$)){W();return}o(A.id,$),p(B=>B+1)},[v,e,a,o]),D=C.useCallback((M,A)=>{i(A.id==="owner"?null:A.id)},[i]);return u.jsx("div",{style:{width:"100%",height:"100%"},children:u.jsxs(DZ,{nodes:N,edges:w.edges,nodeTypes:XQ,onNodesChange:R,onNodeDrag:L,onNodeDragStop:I,onNodeClick:D,fitView:!0,fitViewOptions:{padding:.32,minZoom:.45,maxZoom:1.2},nodesConnectable:!1,edgesFocusable:!1,style:{width:"100%",height:"100%"},children:[u.jsx(BZ,{gap:28,size:1,color:"rgba(240, 237, 232, 0.10)"}),u.jsx(GZ,{showInteractive:!1}),u.jsx(sQ,{pannable:!0,nodeStrokeWidth:0,maskColor:"rgba(12, 17, 27, 0.6)"})]})})}function YR(e,t,n){const r=e.filter(i=>i.reports_to===t).map(i=>i.role_id);for(const i of r)if(i===n||YR(e,i,n))return!0;return!1}function QQ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onUpdateRole:o,onDeleteRole:a,savedOrgsList:c,activeSavedOrg:d,currentOrgVersion:m,versionAtLoad:h,onSavedOrgsList:p,onSavedOrgSaveAs:g,onSavedOrgLoad:x,onSavedOrgDelete:v}){const[k,S]=C.useState("canvas"),[b,w]=C.useState(null),j=C.useRef(null),N=C.useMemo(()=>e.find(M=>M.role_id===b)??null,[e,b]),O=C.useCallback((M,A)=>{r&&o(M,{reports_to:A})},[o,r]),R=C.useCallback(()=>{j.current?.autoLayout()},[]),L=C.useCallback(()=>{if(!r)return;const M=new Set(e.map(W=>W.role_id));let A="new_role",$=1;for(;M.has(A);)$+=1,A=`new_role_${$}`;i(A,"New Role","","owner",null),w(A)},[e,i,r]),I=C.useCallback(()=>{if(!r||!N)return;const M=new Set(e.map(W=>W.role_id));let A=`${N.role_id}_copy`,$=1;for(;M.has(A);)$+=1,A=`${N.role_id}_copy_${$}`;i(A,`${N.name} (copy)`,N.responsibility,N.reports_to,N.icon),w(A)},[e,i,N,r]),D=C.useRef(null);return C.useEffect(()=>{const M=A=>{const $=A.target;if(!($&&($.tagName==="INPUT"||$.tagName==="TEXTAREA"||$.tagName==="SELECT"||$.isContentEditable))&&!(D.current&&!D.current.contains($))){if(A.key==="Escape"&&b){w(null),A.preventDefault();return}if(A.key==="Delete"&&b&&r){a(b),w(null),A.preventDefault();return}if((A.metaKey||A.ctrlKey)&&A.key.toLowerCase()==="d"&&b&&r){I(),A.preventDefault();return}if(A.key.toLowerCase()==="f"&&k==="canvas"){R(),A.preventDefault();return}}};return window.addEventListener("keydown",M),()=>window.removeEventListener("keydown",M)},[b,r,k,a,R,I]),u.jsxs("div",{className:"se-container",ref:D,children:[u.jsxs("div",{className:"se-toolbar",children:[u.jsxs("div",{className:"se-view-switcher",role:"tablist","aria-label":"Editor view",children:[u.jsx("button",{role:"tab","aria-selected":k==="canvas",className:`se-view-btn${k==="canvas"?" is-active":""}`,onClick:()=>S("canvas"),children:"Canvas"}),u.jsx("button",{role:"tab","aria-selected":k==="table",className:`se-view-btn${k==="table"?" is-active":""}`,onClick:()=>S("table"),children:"Table"})]}),u.jsxs("div",{className:`se-toolbar-actions${r?"":" se-toolbar-actions--readonly"}`,children:[r?u.jsxs("div",{className:"se-saved-org-control",children:[u.jsx("span",{className:"se-toolbar-label",children:"Saved org"}),u.jsx(rU,{savedOrgs:c??null,activeName:d??null,isDirty:h!=null&&(m??0)!==h,onRefresh:p??(()=>{}),onSaveAs:g??(()=>{}),onLoad:x??(()=>{}),onDelete:v??(()=>{})})]}):u.jsx("span",{className:"se-readonly-pill",children:"Read-only corporate"}),u.jsx("div",{className:"se-toolbar-divider","aria-hidden":!0}),k==="canvas"&&u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:R,children:"Auto-layout"}),r&&u.jsx("button",{className:"btn btn-primary btn-sm",onClick:L,children:"+ Add role"})]})]}),u.jsxs("div",{className:"se-body",children:[k==="canvas"?u.jsx(KQ,{ref:j,roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:b,onSelectRole:w,onReparent:O,readOnly:!r}):u.jsx(iq,{roles:e,employees:t,selectedIds:b?[b]:[],onSelectRow:M=>w(M),onUpdateRole:o,onDeleteRole:a,readOnly:!r}),N&&u.jsx(lU,{role:N,allRoles:e,employees:t,readOnly:!r,onUpdateRole:o,onDeleteRole:M=>{a(M),w(null)},onClose:()=>w(null)})]})]})}const is={rocket:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M13.13 22.19L11.5 18.36c3.07-1.39 5.51-3.94 6.69-7.07L22 13l-8.87 9.19zM5.64 12.5L2 10.87l9.19-8.87 1.63 3.81c-3.13 1.18-5.68 3.62-7.07 6.69zM14.54 9.46c-.78-.78-.78-2.05 0-2.83s2.05-.78 2.83 0 .78 2.05 0 2.83c-.79.78-2.05.78-2.83 0zM8 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z'/%3E%3C/svg%3E",people:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",check:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",addPerson:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",trash:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E",team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",deploy:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z'/%3E%3C/svg%3E",person:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function JQ({onComplete:e,onSwitchToTab:t}){const[n,r]=C.useState(1),[i,o]=C.useState([{name:"",resp:"",parent:"owner"}]),a=()=>o([...i,{name:"",resp:"",parent:"owner"}]),c=(g,x,v)=>{const k=[...i];k[g][x]=v,o(k)},d=g=>{i.length<=1||o(i.filter((x,v)=>v!==g))},m=i.filter(g=>g.name.trim()),h=m.map(g=>g.name.trim()).filter(Boolean),p=()=>{e(m.map(g=>({name:g.name.trim(),responsibility:g.resp.trim(),reportsTo:g.parent})))};return u.jsxs("div",{className:"qs-wizard",children:[u.jsxs("div",{className:"qs-header",children:[u.jsx("img",{src:is.rocket,alt:"",className:"qs-header-icon"}),u.jsxs("div",{children:[u.jsx("h3",{className:"qs-header-title",children:"Build Your Team"}),u.jsxs("p",{className:"qs-header-sub",children:["Create an org team in a few steps, or ",u.jsx("button",{className:"qs-link-btn",onClick:()=>t("architecture"),children:"use a template"})]})]})]}),u.jsx("div",{className:"qs-progress",children:[{n:1,icon:is.people,label:"Team Members"},{n:2,icon:is.check,label:"Preview"}].map(g=>u.jsxs("div",{className:`qs-step${n===g.n?" qs-step-active":n>g.n?" qs-step-done":""}`,children:[u.jsx("img",{src:g.icon,alt:"",className:"qs-step-icon"}),u.jsx("span",{children:g.label})]},g.n))}),n===1&&u.jsxs("div",{className:"qs-panel",children:[u.jsx("h4",{children:"Who's on your team?"}),u.jsx("p",{className:"qs-hint",children:"Add each team member with their name and what they do."}),u.jsx("div",{className:"qs-members",children:i.map((g,x)=>u.jsxs("div",{className:"qs-member-row",children:[u.jsx("input",{className:"qs-member-name",value:g.name,placeholder:"Role name (e.g. Engineer)",onChange:v=>c(x,"name",v.target.value)}),u.jsx("input",{className:"qs-member-resp",value:g.resp,placeholder:"What do they do?",onChange:v=>c(x,"resp",v.target.value)}),u.jsxs("select",{className:"qs-member-parent",value:g.parent,onChange:v=>c(x,"parent",v.target.value),children:[u.jsx("option",{value:"owner",children:"Reports to you"}),h.filter(v=>v!==g.name.trim()).map(v=>u.jsx("option",{value:v,children:`Managed by ${v}`},v))]}),i.length>1&&u.jsx("button",{className:"qs-remove-btn",onClick:()=>d(x),title:"Remove",children:u.jsx("img",{src:is.trash,alt:"",className:"qs-remove-icon"})})]},x))}),u.jsxs("button",{className:"qs-add-member",onClick:a,children:[u.jsx("img",{src:is.addPerson,alt:"",className:"qs-add-icon"})," Add another member"]}),u.jsxs("div",{className:"qs-nav",children:[u.jsx("span",{}),u.jsx("button",{className:"oc-btn-primary",onClick:()=>r(2),disabled:m.length===0,children:"Next: Preview →"})]})]}),n===2&&u.jsxs("div",{className:"qs-panel",children:[u.jsx("h4",{children:"Your team at a glance"}),u.jsxs("div",{className:"qs-preview",children:[u.jsxs("div",{className:"qs-preview-section",children:[u.jsxs("h5",{children:["Team (",m.length," members)"]}),m.map((g,x)=>u.jsxs("div",{className:"qs-preview-member",children:[u.jsx("strong",{children:g.name}),g.resp&&u.jsxs("span",{className:"qs-preview-resp",children:[" — ",g.resp]}),u.jsx("span",{className:"qs-preview-parent",children:g.parent==="owner"?" (reports to you)":` (managed by ${g.parent})`})]},x))]}),u.jsxs("div",{className:"qs-preview-section",children:[u.jsx("h5",{children:"Actor Runtime"}),u.jsx("p",{children:"Seat routing and delegation will be derived from your reporting structure and any team seats you configure later."})]})]}),u.jsxs("div",{className:"qs-nav",children:[u.jsx("button",{className:"oc-btn-ghost",onClick:()=>r(1),children:"← Back"}),u.jsx("button",{className:"oc-btn-primary qs-create-btn",onClick:p,children:"Create Team"})]})]})]})}function eJ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onBulkAddRoles:o,onUpdateRole:a,onDeleteRole:c,onExport:d,onImportEmployee:m,onResetArchitecture:h,onSwitchToTab:p,savedOrgsList:g,activeSavedOrg:x,currentOrgVersion:v,versionAtLoad:k,onSavedOrgsList:S,onSavedOrgSaveAs:b,onSavedOrgLoad:w,onSavedOrgDelete:j}){const[N,O]=C.useState(!1),[R,L]=C.useState(!1),[I,D]=C.useState(""),[M,A]=C.useState(""),[$,W]=C.useState(""),[B,V]=C.useState("1.0.0"),H=C.useMemo(()=>{const K=new Map;for(const ee of t){const te=ee.role_ids?.length?ee.role_ids:[ee.role_id];for(const ie of te){if(!ie)continue;const se=K.get(ie)||[];se.push(ee),K.set(ie,se)}}return K},[t]),U=()=>{!I.trim()||!M.trim()||(d({package_id:I.trim(),name:M.trim(),description:$,version:B}),L(!1),D(""),A(""),W(""),V("1.0.0"))},Y=C.useRef(null);C.useEffect(()=>{N&&e.length>0&&(O(!1),Y.current&&(clearTimeout(Y.current),Y.current=null))},[e.length,N]),C.useEffect(()=>{if(N)return Y.current=setTimeout(()=>O(!1),1e4),()=>{Y.current&&clearTimeout(Y.current)}},[N]);const Q=K=>{const ee=new Map,te=new Set,ie=[];for(const se of K){let de=se.name.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/^-+|-+$/g,"");if(!de)continue;let oe=de,Ne=2;for(;te.has(oe);)oe=`${de}-${Ne++}`;te.add(oe),ee.set(se.name,oe);const Ee=se.reportsTo==="owner"?"owner":ee.get(se.reportsTo)||"owner";ie.push({role_id:oe,name:se.name,responsibility:se.responsibility,reports_to:Ee})}if(ie.length!==0)if(o)O(!0),o(ie);else{for(const se of ie)i(se.role_id,se.name,se.responsibility,se.reports_to);O(!0)}},q=()=>{confirm("This will remove all org roles, employees, and work-item templates. Continue?")&&h?.()},G=C.useMemo(()=>{let K=0;for(const ee of e)(H.get(ee.role_id)??[]).length>0&&(K+=1);return K},[e,H]),J=C.useMemo(()=>t.filter(K=>K.linked_agent_id).length,[t]),P=Math.max(0,e.length-G);return r&&e.length===0?u.jsx("div",{className:"team-view",children:N?u.jsx("div",{className:"qs-wizard",children:u.jsxs("div",{className:"qs-loading",children:[u.jsx("span",{className:"spinner-inline"})," Setting up your team..."]})}):u.jsx(JQ,{onComplete:Q,onSwitchToTab:p})}):u.jsxs("div",{className:"team-view",children:[u.jsxs("div",{className:`team-command-bar${r?" team-command-bar--editable":" team-command-bar--readonly"}`,children:[u.jsxs("div",{className:"team-command-copy",children:[u.jsx("span",{className:"team-command-eyebrow",children:r?"Saved org workspace":"Corporate baseline"}),u.jsx("span",{className:"team-command-title",children:r?"Editable company architecture":"Built-in company architecture"})]}),u.jsxs("div",{className:"team-command-metrics",children:[u.jsxs("span",{children:[u.jsx("b",{children:G})," staffed roles"]}),u.jsxs("span",{children:[u.jsx("b",{children:P})," vacant"]}),u.jsxs("span",{children:[u.jsx("b",{children:J})," in office"]})]}),r&&u.jsxs("div",{className:"team-command-actions",children:[u.jsxs("button",{className:"myorg-inline-btn",onClick:()=>p("employees"),children:[u.jsx("img",{src:is.addPerson,alt:"",className:"myorg-inline-icon"})," Hire Talent"]}),u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>L(!0),children:"Export Package"}),h&&u.jsxs("button",{className:"myorg-reset-btn",onClick:q,children:[u.jsx("img",{src:is.trash,alt:"",className:"myorg-reset-icon"})," Reset"]})]})]}),!r&&u.jsx("div",{className:"team-readonly-strip",children:"Corporate is fixed and read-only; saved company architectures are edited separately."}),u.jsx(QQ,{roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onUpdateRole:a,onDeleteRole:c,savedOrgsList:g??null,activeSavedOrg:x??null,currentOrgVersion:v??0,versionAtLoad:k??null,onSavedOrgsList:S,onSavedOrgSaveAs:b,onSavedOrgLoad:w,onSavedOrgDelete:j}),R&&u.jsxs("div",{className:"myorg-form",children:[u.jsx("h4",{className:"myorg-form-title",children:"Export as .opcpkg"}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Package ID"}),u.jsx("input",{value:I,onChange:K=>D(K.target.value),placeholder:"my-architecture"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Name"}),u.jsx("input",{value:M,onChange:K=>A(K.target.value),placeholder:"My Architecture"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Description"}),u.jsx("input",{value:$,onChange:K=>W(K.target.value),placeholder:"An org team structure"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Version"}),u.jsx("input",{value:B,onChange:K=>V(K.target.value)})]}),u.jsxs("div",{className:"oc-form-actions",children:[u.jsx("button",{className:"oc-btn-primary",onClick:U,disabled:!I.trim()||!M.trim(),children:"Export"}),u.jsx("button",{className:"oc-btn-ghost",onClick:()=>L(!1),children:"Cancel"})]})]}),u.jsxs("div",{className:"myorg-section",children:[u.jsxs("div",{className:"myorg-section-header",children:[u.jsx("img",{src:is.team,alt:"",className:"myorg-section-icon"}),u.jsx("h3",{className:"myorg-section-title",children:"Team Roster"}),u.jsxs("span",{className:"myorg-section-count",children:[t.length," members"]}),u.jsx("span",{className:"myorg-section-spacer"}),u.jsxs("span",{className:"myorg-section-note",children:[G,"/",e.length," staffed"]})]}),u.jsx("div",{className:"team-roster-grid",children:e.map(K=>{const ee=H.get(K.role_id)||[];return u.jsxs("div",{className:"team-roster-card",children:[u.jsxs("div",{className:"team-roster-card-header",children:[u.jsx("img",{src:Uu(K.icon),alt:"",className:"team-roster-card-icon"}),u.jsx("span",{className:"team-roster-role-name",children:K.name}),u.jsx("span",{className:"team-roster-count",children:ee.length||"vacant"})]}),ee.length>0?ee.map(te=>u.jsxs("div",{className:"team-roster-emp",children:[u.jsx("img",{src:is.person,alt:"",className:"team-roster-emp-avatar"}),u.jsxs("div",{className:"team-roster-emp-info",children:[u.jsx("span",{className:"team-roster-emp-name",children:te.name}),u.jsx("span",{className:`team-roster-seniority team-roster-seniority--${te.seniority}`,children:te.seniority})]}),te.linked_agent_id?u.jsx("span",{className:"team-roster-badge team-roster-badge--active",children:"In Office"}):m&&te.role_id?u.jsxs("button",{className:"team-roster-deploy-btn",onClick:()=>m(te.employee_id),title:"Add this employee to the office workspace",children:[u.jsx("img",{src:is.deploy,alt:"",className:"team-roster-deploy-icon"})," Deploy"]}):null]},te.employee_id)):u.jsxs("div",{className:"team-roster-vacant",children:[u.jsx("span",{className:"team-roster-vacant-text",children:"No members yet"}),r&&u.jsx("button",{className:"team-roster-hire-btn",onClick:()=>p("employees"),children:"Hire"})]})]},K.role_id)})})]})]})}function fp(e){if(e.adaptive&&typeof e.adaptive=="object")return e.adaptive;const t=e.metadata;if(t&&typeof t=="object"&&t.adaptive&&typeof t.adaptive=="object")return t.adaptive}function tJ(e){const t=fp(e);return(Array.isArray(t?.signals)?t.signals:[]).filter(r=>r&&typeof r=="object").filter(r=>!!(r.required??!0)&&!r.satisfied).map(r=>String(r.name??"").trim()).filter(Boolean)}function nJ(e){const n=fp(e)?.work_item_profile;return n&&typeof n=="object"?String(n.gate_owner_role_id??"").trim():""}function rJ(e){const t=fp(e),n=typeof t?.confidence=="number"?t.confidence:void 0;return typeof n=="number"?`${Math.round(n*100)}%`:""}function iJ({roles:e,runtimeTeams:t,runtimeSeats:n,workItems:r,frontier:i,companyProfile:o,runtimePolicy:a,finalDeciderRoleId:c,topLevelRoleIds:d,readOnly:m=!1,onUpdateOrgStrategy:h,onUpdateRuntimePolicy:p}){const g=e.filter(S=>(d??[]).includes(S.role_id)),x=c||(g.length===1?g[0]?.role_id:""),v=g.length>1&&!x,k=new Map(e.map(S=>[S.role_id,S.name]));return u.jsxs("div",{className:"wfe-container",children:[u.jsxs("div",{className:"wfe-header",children:[u.jsx("h3",{className:"wfe-title",children:"Actor Runtime"}),u.jsx("span",{className:"wfe-profile-badge",children:o})]}),u.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:u.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Final decider"}),u.jsxs("select",{value:x,disabled:m,onChange:S=>{m||h?.({final_decider_role_id:S.target.value||null})},children:[u.jsx("option",{value:"",children:g.length>1?"Select top-level role":"Auto-select only top-level role"}),g.map(S=>u.jsx("option",{value:S.role_id,children:S.name},S.role_id))]})]}),u.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Runtime wakeups, delegation, approvals, and recovery are seat-scoped."}),v&&u.jsx("div",{className:"org-toast org-toast--warn",style:{margin:"0 0 8px"},children:"Multiple top-level roles exist. Select one final decider before company execution can start."})]})}),t.length||n.length||r.length?u.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:u.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Runtime"}),u.jsxs("div",{children:[i.status||"running",i.run_id?` (${i.run_id.slice(0,8)})`:""]})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Frontier"}),u.jsxs("div",{children:[i.running_count??0," running, ",i.ready_count??0," ready, ",i.blocked_count??0," blocked, ",i.waiting_count??0," waiting"]})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Teams"}),u.jsx("div",{children:t.length})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Seats"}),u.jsx("div",{children:n.length})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Work items"}),u.jsx("div",{children:r.length})]}),r.length>0&&u.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:r.slice(0,6).map(S=>{const b=fp(S),w=typeof b?.normalized_state=="string"?b.normalized_state:"",j=typeof b?.blocked_reason=="string"?b.blocked_reason:S.blocked_reason??"",N=nJ(S),O=tJ(S),R=rJ(S),L=[j?`waiting ${j}`:"",N?`gate ${k.get(N)??N}`:"",O.length?`signals ${O.join(", ")}`:"",R?`confidence ${R}`:"",w==="invalidated"?"invalidated":""].filter(Boolean);return u.jsxs("div",{style:{marginBottom:6},children:[u.jsxs("div",{children:[k.get(S.role_id)??S.role_id,": ",S.title," [",S.phase,"]",S.kanban_column&&u.jsxs("span",{style:{opacity:.5},children:[" · ",S.kanban_column]}),S.batch_id&&u.jsxs("span",{style:{opacity:.5},children:[" batch:",S.batch_id]}),w&&w!==S.phase&&u.jsxs("span",{style:{opacity:.7},children:[" state:",w]})]}),L.length>0&&u.jsx("div",{style:{marginLeft:12,opacity:.85},children:L.join(" • ")})]},S.work_item_id)})})]})}):null]})}function sJ({pkg:e,onUninstall:t,uninstallingId:n}){const r=n===e.package_id;return u.jsxs("div",{className:"pkg-card",children:[u.jsxs("div",{className:"pkg-card-header",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z'/%3E%3C/svg%3E",alt:"package",className:"pkg-card-icon"}),u.jsxs("div",{className:"pkg-card-title-wrap",children:[u.jsx("span",{className:"pkg-card-name",children:e.name||e.package_id}),u.jsxs("span",{className:"pkg-card-version",children:["v",e.version]})]})]}),u.jsxs("div",{className:"pkg-card-stats",children:[u.jsxs("span",{className:"pkg-card-stat",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",alt:"roles",className:"pkg-stat-icon"}),e.role_ids.length," roles"]}),u.jsxs("span",{className:"pkg-card-stat",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3E%3C/svg%3E",alt:"templates",className:"pkg-stat-icon"}),e.template_ids.length," templates"]})]}),e.installed_at&&u.jsxs("div",{className:"pkg-card-date",children:["Installed ",new Date(e.installed_at).toLocaleDateString()]}),t&&u.jsx("div",{className:"pkg-card-actions",children:u.jsx("button",{className:"pkg-btn pkg-btn-danger",disabled:r,onClick:i=>{i.stopPropagation(),t(e.package_id)},children:r?"Removing...":"Uninstall"})})]})}function Ax({icon:e,title:t,count:n,extra:r,children:i,defaultExpanded:o=!1}){const[a,c]=C.useState(o);return u.jsxs("div",{className:"myorg-collapsible",children:[u.jsxs("button",{className:"myorg-collapsible-toggle",onClick:()=>c(!a),children:[u.jsx("span",{className:"myorg-toggle-icon",children:a?"▾":"▸"}),u.jsx("img",{src:e,alt:"",className:"myorg-section-icon"}),u.jsx("span",{className:"myorg-collapsible-title",children:t}),u.jsx("span",{className:"myorg-collapsible-count",children:n}),r&&u.jsx("span",{className:"myorg-collapsible-extra",onClick:d=>d.stopPropagation(),children:r})]}),a&&u.jsx("div",{className:"myorg-collapsible-body",children:i})]})}const rs={search:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14z'/%3E%3C/svg%3E",arch:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",packages:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z'/%3E%3C/svg%3E",channels:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E",reorg:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z'/%3E%3C/svg%3E",importPkg:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z'/%3E%3C/svg%3E",arrow:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E",gateReview:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23f59e0b' d='M12 2L4 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-3zm-2 16l-4-4 1.41-1.41L10 15.17l6.59-6.59L18 10l-8 8z'/%3E%3C/svg%3E",gateApproval:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",gateHold:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ef4444' d='M6 19h4V5H6v14zm8-14v14h4V5h-4z'/%3E%3C/svg%3E"},Av={pipeline:"Pipeline",hub_spoke:"Hub & Spoke",review_loop:"Review Loop",hierarchical:"Hierarchical",flat:"Flat Team"};function oJ({presets:e,installedIds:t,previewData:n,applyingPresetId:r,readOnly:i,onPreview:o,onApplyPreset:a,onClearPreview:c,installedPackages:d,channels:m,reorgProposals:h,isCustomMode:p,onReorgDecide:g,onMarketInstall:x,onMarketUninstall:v}){const[k,S]=C.useState(""),[b,w]=C.useState(null),[j,N]=C.useState(null),[O,R]=C.useState(!1),[L,I]=C.useState(""),[D,M]=C.useState(null),A=C.useMemo(()=>{const H=new Set;for(const U of e)U.category&&H.add(U.category);return Array.from(H).sort()},[e]),$=C.useMemo(()=>{const H=new Set;for(const U of e)U.collaboration_pattern&&H.add(U.collaboration_pattern);return Array.from(H).sort()},[e]),W=C.useMemo(()=>{let H=e;if(b&&(H=H.filter(U=>U.category===b)),j&&(H=H.filter(U=>U.collaboration_pattern===j)),k.trim()){const U=k.trim().toLowerCase();H=H.filter(Y=>Y.name.toLowerCase().includes(U)||Y.description.toLowerCase().includes(U)||Y.tags.some(Q=>Q.toLowerCase().includes(U))||(Av[Y.collaboration_pattern]||"").toLowerCase().includes(U))}return H},[e,b,j,k]),B=()=>{L.trim()&&(x(L.trim(),"namespace"),R(!1),I(""))},V=H=>{confirm("Uninstall this package? Roles and work-item templates from this package will be removed.")&&(M(H),v(H),setTimeout(()=>M(null),3e3))};return u.jsxs("div",{className:"mkt-container","data-testid":"architecture-marketplace",children:[u.jsxs("div",{className:"mkt-toolbar",children:[u.jsxs("div",{className:"mkt-search-wrap",children:[u.jsx("img",{src:rs.search,alt:"",className:"mkt-search-icon"}),u.jsx("input",{className:"mkt-search",placeholder:"Search architectures...",value:k,onChange:H=>S(H.target.value)})]}),u.jsxs("span",{className:"mkt-count",children:[W.length," architectures"]})]}),u.jsxs("div",{className:"mkt-filters",children:[A.length>0&&u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill${b?"":" active"}`,onClick:()=>w(null),children:"All"}),A.map(H=>u.jsx("button",{className:`mkt-pill${b===H?" active":""}`,onClick:()=>w(b===H?null:H),children:H},H))]}),$.length>0&&u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill mkt-pill-pattern${j?"":" active"}`,onClick:()=>N(null),children:"All Patterns"}),$.map(H=>u.jsx("button",{className:`mkt-pill mkt-pill-pattern${j===H?" active":""}`,onClick:()=>N(j===H?null:H),children:Av[H]||H},H))]})]}),W.length>0?u.jsxs("div",{className:"mkt-section",children:[u.jsxs("div",{className:"mkt-section-header",children:[u.jsx("img",{src:rs.arch,alt:"",className:"mkt-section-icon"}),u.jsx("h3",{className:"mkt-section-title",children:"Architecture Blueprints"}),u.jsx("span",{className:"mkt-section-count",children:W.length})]}),u.jsx("div",{className:"mkt-arch-grid",children:W.map(H=>u.jsx(aJ,{preset:H,isInstalled:t.has(H.id),isApplying:r===H.id,readOnly:i,onPreview:()=>o(H.id),onApply:()=>a(H.id,"namespace")},H.id))})]}):u.jsx("div",{className:"mkt-empty",children:u.jsx("p",{children:"No architectures match your search."})}),u.jsxs(Ax,{icon:rs.packages,title:"Installed Packages",count:d.length,extra:p?u.jsxs("button",{className:"myorg-inline-btn",onClick:()=>R(!O),children:[u.jsx("img",{src:rs.importPkg,alt:"",className:"myorg-inline-icon"})," Import"]}):void 0,children:[p&&O&&u.jsxs("div",{className:"myorg-form",children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Path"}),u.jsx("input",{value:L,onChange:H=>I(H.target.value),placeholder:"/path/to/package.opcpkg"})]}),u.jsxs("div",{className:"oc-form-actions",children:[u.jsx("button",{className:"oc-btn-primary",onClick:B,disabled:!L.trim(),children:"Install"}),u.jsx("button",{className:"oc-btn-ghost",onClick:()=>R(!1),children:"Cancel"})]})]}),d.length>0?u.jsx("div",{className:"pkg-grid",children:d.map(H=>u.jsx(sJ,{pkg:H,onUninstall:p?V:void 0,uninstallingId:D},H.package_id))}):u.jsx("div",{className:"myorg-empty-hint",children:"No packages installed."})]}),u.jsx(Ax,{icon:rs.channels,title:"Channels & Connectors",count:m.length,children:m.length>0?u.jsx("div",{className:"org-channels-grid",children:m.map(H=>u.jsxs("div",{className:`org-channel-card${H.running?" org-ch-running":""}${H.enabled?"":" org-ch-disabled"}`,children:[u.jsxs("div",{className:"org-ch-header",children:[u.jsx("span",{className:`org-ch-dot${H.running?" running":H.ready?" ready":H.configured?" configured":""}`}),u.jsx("span",{className:"org-ch-name",children:H.name})]}),u.jsxs("div",{className:"org-ch-status-row",children:[H.enabled&&u.jsx("span",{className:"org-ch-badge org-ch-enabled",children:"enabled"}),H.running&&u.jsx("span",{className:"org-ch-badge org-ch-running-badge",children:"running"}),!H.enabled&&u.jsx("span",{className:"org-ch-badge org-ch-off",children:"disabled"})]})]},H.name))}):u.jsx("div",{className:"myorg-empty-hint",children:"No channels configured."})}),h.length>0&&u.jsx(Ax,{icon:rs.reorg,title:"Reorg Proposals",count:h.length,children:u.jsx("div",{className:"org-reorg-list",children:h.map(H=>{const U=H.status==="proposed";return u.jsxs("div",{className:`org-reorg-card org-reorg-${H.status}`,children:[u.jsxs("div",{className:"org-reorg-header",children:[u.jsx("span",{className:"org-reorg-title",children:H.title||H.summary||"Untitled"}),u.jsx("span",{className:"org-reorg-status",children:H.status})]}),H.summary&&u.jsx("div",{className:"org-reorg-summary",children:H.summary}),U&&p&&u.jsxs("div",{className:"org-reorg-actions",children:[u.jsx("button",{className:"org-reorg-approve",onClick:()=>g(H.proposal_id,!0),children:"Approve"}),u.jsx("button",{className:"org-reorg-deny",onClick:()=>g(H.proposal_id,!1),children:"Deny"})]})]},H.proposal_id)})})}),n&&u.jsx(lJ,{data:n,isInstalled:t.has(n.id),isApplying:r===n.id,onApply:()=>a(n.id,"namespace"),onClose:c})]})}function aJ({preset:e,isInstalled:t,isApplying:n,readOnly:r,onPreview:i,onApply:o}){const a=Av[e.collaboration_pattern]||e.collaboration_pattern;return u.jsxs("div",{className:"mkt-arch-card",style:{borderLeftColor:e.color||"var(--accent)"},onClick:i,children:[u.jsxs("div",{className:"mkt-arch-header",children:[u.jsx("span",{className:"mkt-arch-emoji",children:e.emoji}),u.jsxs("div",{className:"mkt-arch-title-wrap",children:[u.jsx("span",{className:"mkt-arch-name",children:e.name}),u.jsxs("div",{className:"mkt-arch-badges",children:[u.jsx("span",{className:"mkt-arch-category",children:e.category}),e.collaboration_pattern&&u.jsx("span",{className:"mkt-arch-pattern",children:a})]})]})]}),e.dag_summary&&u.jsx("div",{className:"mkt-arch-dag-summary",children:e.dag_summary}),u.jsx("div",{className:"mkt-arch-desc",children:e.description}),u.jsxs("div",{className:"mkt-arch-stats",children:[u.jsxs("span",{className:"mkt-arch-stat",children:[e.roles_count," roles"]}),u.jsxs("span",{className:"mkt-arch-stat",children:[e.work_item_templates_count," templates"]}),e.gates_count>0&&u.jsxs("span",{className:"mkt-arch-stat",children:[e.gates_count," checkpoints"]}),e.team_size&&u.jsxs("span",{className:"mkt-arch-stat",children:[e.team_size," people"]})]}),e.tags.length>0&&u.jsx("div",{className:"mkt-arch-tags",children:e.tags.slice(0,4).map(c=>u.jsx("span",{className:"mkt-tag",children:c},c))}),u.jsxs("div",{className:"mkt-arch-actions",children:[t?u.jsx("span",{className:"mkt-installed-badge",children:"Installed"}):r?null:u.jsx("button",{className:"mkt-btn mkt-btn-primary mkt-btn-sm",disabled:n,onClick:c=>{c.stopPropagation(),o()},children:n?"Applying...":"Use This"}),u.jsx("button",{className:"mkt-btn mkt-btn-ghost mkt-btn-sm",onClick:c=>{c.stopPropagation(),i()},children:"Preview"})]})]})}function lJ({data:e,isInstalled:t,isApplying:n,onApply:r,onClose:i}){return u.jsx("div",{className:"mkt-modal-overlay",onClick:i,children:u.jsxs("div",{className:"mkt-modal",onClick:o=>o.stopPropagation(),children:[u.jsxs("div",{className:"mkt-modal-header",style:{borderBottomColor:e.color||"var(--border)"},children:[u.jsx("span",{className:"mkt-modal-emoji",children:e.emoji}),u.jsxs("div",{children:[u.jsx("h2",{className:"mkt-modal-name",children:e.name}),u.jsx("span",{className:"mkt-modal-category",children:e.category})]}),u.jsx("button",{className:"mkt-modal-close",onClick:i,children:"×"})]}),u.jsxs("div",{className:"mkt-modal-body",children:[u.jsx("p",{className:"mkt-modal-desc",children:e.description}),e.tags.length>0&&u.jsxs("div",{className:"mkt-modal-section",children:[u.jsx("div",{className:"mkt-modal-label",children:"Tags"}),u.jsx("div",{className:"mkt-modal-tags",children:e.tags.map(o=>u.jsx("span",{className:"mkt-tag",children:o},o))})]}),u.jsxs("div",{className:"mkt-modal-section",children:[u.jsxs("div",{className:"mkt-modal-label",children:["Roles (",e.roles.length,")"]}),u.jsx("div",{className:"mkt-role-list",children:e.roles.map(o=>u.jsxs("div",{className:"mkt-role-item",children:[u.jsxs("div",{className:"mkt-role-name",children:[o.name," ",u.jsx("code",{children:o.id})]}),u.jsx("div",{className:"mkt-role-resp",children:o.responsibility}),u.jsxs("div",{className:"mkt-role-meta",children:["reports to: ",u.jsx("code",{children:o.reports_to}),o.can_spawn&&o.can_spawn.length>0&&u.jsxs(u.Fragment,{children:[" · spawns: ",o.can_spawn.map(a=>u.jsx("code",{children:a},a))]})]})]},o.id))})]}),u.jsxs("div",{className:"mkt-modal-section",children:[u.jsxs("div",{className:"mkt-modal-label",children:["Work item templates (",e.work_item_templates.length," templates)"]}),u.jsx("div",{className:"mkt-dag-wrap",children:u.jsx(cJ,{templates:e.work_item_templates})})]})]}),u.jsx("div",{className:"mkt-modal-footer",children:t?u.jsx("span",{className:"mkt-installed-badge",children:"Already Installed"}):u.jsx("button",{className:"mkt-btn mkt-btn-primary",disabled:n,onClick:r,children:n?"Applying...":"Use This Architecture"})})]})})}function cJ({templates:e}){const t=[];let n="__init__",r=[];for(const i of e)i.parallel_group!==n?(r.length>0&&t.push({group:n,templates:r}),n=i.parallel_group,r=[i]):r.push(i);return r.length>0&&t.push({group:n,templates:r}),u.jsx("div",{className:"org-dag",children:t.map((i,o)=>u.jsxs("div",{className:"org-dag-group-wrap",children:[o>0&&u.jsx("div",{className:"org-dag-arrow",children:u.jsx("img",{src:rs.arrow,alt:"→",className:"org-dag-arrow-icon"})}),u.jsxs("div",{className:`org-dag-group${i.templates.length>1?" org-dag-parallel":""}`,children:[i.templates.length>1&&u.jsx("div",{className:"org-dag-parallel-label",children:"parallel"}),i.templates.map(a=>u.jsxs("div",{className:"org-dag-node",children:[u.jsxs("div",{className:"org-dag-node-header",children:[u.jsx("span",{className:"org-dag-node-title",children:a.title}),u.jsx("span",{className:"org-dag-node-role",children:a.role_id})]}),u.jsx("div",{className:"org-dag-node-id",children:a.id}),a.gate&&u.jsxs("div",{className:`org-dag-gate org-gate-${a.gate.type}`,children:[u.jsx("img",{src:a.gate.type==="review"?rs.gateReview:a.gate.type==="approval"?rs.gateApproval:rs.gateHold,alt:"",className:"org-gate-icon"}),u.jsx("span",{children:a.gate.type}),a.gate.reviewer_role&&u.jsxs("span",{className:"org-gate-reviewer",children:["by ",a.gate.reviewer_role]})]})]},a.id))]})]},o))})}function uJ(e){const t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?"?":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function dJ({template:e,hiringId:t,onHire:n,onClick:r}){const i=t===e.template_id,o=e.color?{background:`color-mix(in srgb, ${e.color} 18%, transparent)`,color:e.color,boxShadow:`inset 0 0 0 1px color-mix(in srgb, ${e.color} 28%, transparent)`}:void 0,a=[],c=new Set;for(const h of[...e.tags,...e.domains])c.has(h)||(c.add(h),a.push(h));const d=a.slice(0,3),m=a.length-d.length;return u.jsxs("div",{className:"tm-card",onClick:()=>r(e),children:[u.jsxs("div",{className:"tm-card-head",children:[u.jsx("div",{className:"tm-card-avatar",style:o,"aria-hidden":!0,children:e.emoji?u.jsx("span",{className:"tm-card-avatar-emoji",children:e.emoji}):u.jsx("span",{className:"tm-card-avatar-mono",children:uJ(e.name)})}),u.jsxs("div",{className:"tm-card-head-text",children:[u.jsxs("div",{className:"tm-card-name-row",children:[u.jsx("span",{className:"tm-card-name",title:e.name,children:e.name}),e.preferred_external_agent&&u.jsx("span",{className:"tm-card-agent-badge",title:`Agent: ${e.preferred_external_agent}`,children:e.preferred_external_agent})]}),e.category&&u.jsx("span",{className:"tm-card-category",children:e.category})]})]}),u.jsxs("div",{className:"tm-card-body",children:[e.vibe&&u.jsxs("div",{className:"tm-card-vibe",children:['"',e.vibe,'"']}),e.description&&u.jsx("div",{className:"tm-card-desc",children:e.description})]}),d.length>0&&u.jsxs("div",{className:"tm-card-chips",children:[d.map(h=>u.jsx("span",{className:"tm-card-chip",children:h},h)),m>0&&u.jsxs("span",{className:"tm-card-chip tm-card-chip-more",children:["+",m]})]}),u.jsx("div",{className:"tm-card-footer",children:u.jsx("button",{className:"tm-card-hire-btn",disabled:i,onClick:h=>{h.stopPropagation(),n(e.template_id)},children:i?u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"spinner-inline"})," Hiring"]}):"Hire →"})})]})}const XR=e=>e,KR=e=>e;function fJ({template:e,vacantRoles:t,hiringId:n,readOnly:r,onHire:i,onClose:o}){const[a,c]=C.useState(""),d=n===e.template_id,m=t.length===0,h=!r&&!d&&!m&&a!=="";C.useEffect(()=>{c("")},[e.template_id]);const p=()=>{h&&i(KR(e.template_id),XR(a))};return u.jsx("div",{className:"tm-detail-overlay",onClick:o,children:u.jsxs("div",{className:"tm-detail-modal",onClick:g=>g.stopPropagation(),children:[u.jsxs("div",{className:"tm-detail-header",style:{borderBottomColor:e.color||"var(--border)"},children:[e.emoji&&u.jsx("span",{className:"tm-detail-emoji",children:e.emoji}),u.jsxs("div",{children:[u.jsx("h2",{className:"tm-detail-name",children:e.name}),u.jsx("span",{className:"tm-detail-category",children:e.category})]}),u.jsx("button",{className:"tm-detail-close",onClick:o,children:"×"})]}),u.jsxs("div",{className:"tm-detail-body",children:[e.vibe&&u.jsxs("blockquote",{className:"tm-detail-vibe",children:['"',e.vibe,'"']}),e.description&&u.jsx("p",{className:"tm-detail-desc",children:e.description}),e.domains.length>0&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Domains"}),u.jsx("div",{className:"tm-detail-tags",children:e.domains.map(g=>u.jsx("span",{className:"org-domain-tag",children:g},g))})]}),e.tags.length>0&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Tags"}),u.jsx("div",{className:"tm-detail-tags",children:e.tags.map(g=>u.jsx("span",{className:"org-tool-tag",children:g},g))})]}),e.preferred_external_agent&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Recommended Agent"}),u.jsx("span",{className:"tm-card-agent-badge",children:e.preferred_external_agent})]}),!r&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Hire into role"}),m?u.jsx("p",{className:"tm-detail-vacancy-empty",children:"No vacant roles. Create a role in the Team tab first."}):u.jsx("div",{className:"tm-detail-role-list",role:"listbox","aria-label":"Vacant roles",children:t.map(g=>{const x=g.role_id===a;return u.jsxs("button",{type:"button",role:"option","aria-selected":x,className:`tm-detail-role-row${x?" is-selected":""}`,onClick:()=>c(g.role_id),children:[u.jsx("span",{className:"tm-detail-role-name",children:g.name}),g.responsibility&&u.jsx("span",{className:"tm-detail-role-resp",children:g.responsibility})]},g.role_id)})})]})]}),!r&&u.jsx("div",{className:"tm-detail-footer",children:u.jsx("button",{className:"tm-detail-hire-btn",disabled:!h,onClick:p,children:d?u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"spinner-inline"})," Hiring..."]}):"Hire to selected role"})})]})})}function mJ({open:e,template:t,vacantRoles:n,onConfirm:r,onClose:i}){const[o,a]=C.useState("");if(C.useEffect(()=>{e&&a("")},[e,t?.template_id]),C.useEffect(()=>{if(!e)return;const h=p=>{p.key==="Escape"&&i()};return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[e,i]),!e||!t)return null;const c=n.length===0,d=!c&&o!=="",m=()=>{d&&r(KR(t.template_id),XR(o))};return u.jsx("div",{className:"htr-overlay",role:"dialog","aria-modal":"true",onMouseDown:i,children:u.jsxs("div",{className:"htr-modal",onMouseDown:h=>h.stopPropagation(),children:[u.jsxs("header",{className:"htr-header",children:[u.jsxs("div",{children:[u.jsxs("h3",{className:"htr-title",children:["Hire ",t.name]}),u.jsx("p",{className:"htr-subtitle",children:"Pick the role to fill with this employee."})]}),u.jsx("button",{className:"htr-close",type:"button",onClick:i,"aria-label":"Close",children:"x"})]}),u.jsx("div",{className:"htr-body",children:c?u.jsxs("div",{className:"htr-empty",children:[u.jsx("p",{className:"htr-empty-title",children:"No vacant roles."}),u.jsx("p",{className:"htr-empty-hint",children:"Add a role in the Team tab first, then come back to hire."})]}):u.jsx("div",{className:"htr-role-list",role:"listbox","aria-label":"Vacant roles",children:n.map(h=>{const p=h.role_id===o;return u.jsxs("button",{type:"button",role:"option","aria-selected":p,className:`htr-role-row${p?" is-selected":""}`,onClick:()=>a(h.role_id),children:[u.jsx("span",{className:"htr-role-name",children:h.name}),h.responsibility&&u.jsx("span",{className:"htr-role-resp",children:h.responsibility})]},h.role_id)})})}),u.jsxs("footer",{className:"htr-footer",children:[u.jsx("button",{type:"button",className:"btn btn-ghost",onClick:i,children:c?"Close":"Cancel"}),!c&&u.jsx("button",{type:"button",className:"btn btn-primary",onClick:m,disabled:!d,children:"Hire to selected role"})]})]})})}const Mj={search:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14z'/%3E%3C/svg%3E",talent:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function pJ({templates:e,vacantRoles:t,hiringTemplateId:n,readOnly:r,onHireTalent:i}){const[o,a]=C.useState(""),[c,d]=C.useState(null),[m,h]=C.useState(null),[p,g]=C.useState(null),x=C.useMemo(()=>{const S=new Set;for(const b of e)b.category&&S.add(b.category);return Array.from(S).sort()},[e]),v=C.useMemo(()=>{let S=e;if(c&&(S=S.filter(b=>b.category===c)),o.trim()){const b=o.trim().toLowerCase();S=S.filter(w=>w.name.toLowerCase().includes(b)||w.description.toLowerCase().includes(b)||w.domains.some(j=>j.toLowerCase().includes(b))||w.tags.some(j=>j.toLowerCase().includes(b))||(w.vibe??"").toLowerCase().includes(b))}return S},[e,c,o]),k=S=>{if(r)return;const b=e.find(w=>w.template_id===S);b&&g(b)};return u.jsxs("div",{className:"mkt-container","data-testid":"employees-marketplace",children:[u.jsxs("div",{className:"mkt-toolbar",children:[u.jsxs("div",{className:"mkt-search-wrap",children:[u.jsx("img",{src:Mj.search,alt:"",className:"mkt-search-icon"}),u.jsx("input",{className:"mkt-search",placeholder:"Search talent templates...",value:o,onChange:S=>a(S.target.value)})]}),u.jsxs("span",{className:"mkt-count",children:[v.length," employees",t.length>0&&u.jsxs(u.Fragment,{children:[" · ",t.length," vacant role",t.length===1?"":"s"]})]})]}),x.length>0&&u.jsx("div",{className:"mkt-filters",children:u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill${c?"":" active"}`,onClick:()=>d(null),children:"All"}),x.map(S=>u.jsx("button",{className:`mkt-pill${c===S?" active":""}`,onClick:()=>d(c===S?null:S),children:S},S))]})}),v.length>0?u.jsxs("div",{className:"mkt-section",children:[u.jsxs("div",{className:"mkt-section-header",children:[u.jsx("img",{src:Mj.talent,alt:"",className:"mkt-section-icon"}),u.jsx("h3",{className:"mkt-section-title",children:"Talent Templates"}),u.jsx("span",{className:"mkt-section-count",children:v.length})]}),u.jsx("div",{className:"tm-grid",children:v.map(S=>u.jsx(dJ,{template:S,hiringId:n,onHire:k,onClick:h},S.template_id))})]}):u.jsx("div",{className:"mkt-empty",children:u.jsx("p",{children:e.length===0?"No talent templates available.":"No employees match your search."})}),m&&u.jsx(fJ,{template:m,vacantRoles:t,hiringId:n,readOnly:r,onHire:(S,b)=>{r||(i(S,b),h(null))},onClose:()=>h(null)}),u.jsx(mJ,{open:p!==null,template:p,vacantRoles:t,onConfirm:(S,b)=>{i(S,b),g(null)},onClose:()=>g(null)})]})}const Qc={download:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z'/%3E%3C/svg%3E",upload:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z'/%3E%3C/svg%3E",check:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",warn:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ef4444' d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E"};function hJ({onExport:e,onImport:t,configExportYaml:n,importPreview:r,importError:i}){const[o,a]=C.useState(""),[c,d]=C.useState(null),[m,h]=C.useState(!1),p=C.useRef(!1),g=C.useRef(null);C.useEffect(()=>{if(!p.current||!n||n===g.current)return;g.current=n,p.current=!1;const w=new Blob([n],{type:"application/x-yaml"}),j=URL.createObjectURL(w),N=document.createElement("a");N.href=j;const O=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19);N.download=`org_config_${O}.yaml`,document.body.appendChild(N),N.click(),document.body.removeChild(N),URL.revokeObjectURL(j)},[n]),C.useEffect(()=>{h(!1)},[o]),C.useEffect(()=>{r&&!i&&h(!0)},[r,i]);const x=()=>{p.current=!0,e()},v=w=>{const j=w.target.files?.[0];if(!j)return;d(j.name);const N=new FileReader;N.onload=()=>{const O=N.result;typeof O=="string"&&a(O)},N.readAsText(j),w.target.value=""},k=()=>{o.trim()&&t(o,!0)},S=()=>{!m||!o.trim()||confirm("Apply this config? The current company architecture will be overwritten.")&&(t(o,!1),h(!1),a(""),d(null))},b=()=>{a(""),d(null),h(!1)};return u.jsxs("div",{className:"cfg-io-panel","data-testid":"config-import-export-panel",children:[u.jsxs("div",{className:"cfg-io-header",children:[u.jsx("h3",{className:"cfg-io-title",children:"Config Import / Export"}),u.jsx("p",{className:"cfg-io-subtitle",children:"Download the current company architecture as YAML, or upload one to replace it."})]}),u.jsxs("div",{className:"cfg-io-section",children:[u.jsxs("div",{className:"cfg-io-section-header",children:[u.jsx("img",{src:Qc.download,alt:"",className:"cfg-io-section-icon"}),u.jsx("span",{className:"cfg-io-section-title",children:"Download current config"})]}),u.jsxs("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:x,children:[u.jsx("img",{src:Qc.download,alt:"",className:"cfg-io-btn-icon"})," Download YAML"]})]}),u.jsxs("div",{className:"cfg-io-section",children:[u.jsxs("div",{className:"cfg-io-section-header",children:[u.jsx("img",{src:Qc.upload,alt:"",className:"cfg-io-section-icon"}),u.jsx("span",{className:"cfg-io-section-title",children:"Upload config"})]}),u.jsx("div",{className:"cfg-io-upload-row",children:u.jsxs("label",{className:"cfg-io-file-label",children:[u.jsx("input",{type:"file",accept:".yaml,.yml",onChange:v,className:"cfg-io-file-input"}),u.jsx("span",{className:"cfg-io-file-btn",children:"Choose file…"}),u.jsx("span",{className:"cfg-io-file-name",children:c??"no file selected"})]})}),u.jsx("textarea",{className:"cfg-io-textarea",placeholder:"…or paste YAML here",value:o,onChange:w=>a(w.target.value),spellCheck:!1,rows:10}),u.jsxs("div",{className:"cfg-io-actions",children:[u.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:k,disabled:!o.trim(),children:"Dry run"}),u.jsx("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:S,disabled:!m||!o.trim(),children:"Apply"}),o&&u.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:b,children:"Clear"})]}),r&&!i&&u.jsxs("div",{className:"cfg-io-preview",children:[u.jsx("img",{src:Qc.check,alt:"",className:"cfg-io-preview-icon"}),u.jsxs("div",{className:"cfg-io-preview-body",children:[u.jsx("div",{className:"cfg-io-preview-title",children:"Dry run OK — ready to apply"}),u.jsxs("div",{className:"cfg-io-preview-stats",children:[u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Roles added"}),u.jsx("span",{className:"cfg-io-stat-value",children:r.roles_added})]}),u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Roles removed"}),u.jsx("span",{className:"cfg-io-stat-value",children:r.roles_removed})]}),u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Employees changed"}),u.jsx("span",{className:"cfg-io-stat-value",children:r.employees_changed})]})]})]})]}),i&&u.jsxs("div",{className:"cfg-io-error",children:[u.jsx("img",{src:Qc.warn,alt:"",className:"cfg-io-error-icon"}),u.jsxs("div",{className:"cfg-io-error-body",children:[u.jsx("div",{className:"cfg-io-error-title",children:"Validation failed"}),u.jsx("pre",{className:"cfg-io-error-text",children:i})]})]})]})]})}const Dj=[{name:"",responsibility:"",prompt:"",reportsToIndex:null},{name:"",responsibility:"",prompt:"",reportsToIndex:0}];function Mx(e){return e.trim()||"Member"}function gJ({open:e,pending:t,result:n,onClose:r,onCreate:i}){const[o,a]=C.useState(1),[c,d]=C.useState(""),[m,h]=C.useState(Dj),[p,g]=C.useState("");C.useEffect(()=>{e&&(a(1),d(""),h(Dj),g(""))},[e]),C.useEffect(()=>{if(!(!e||!n)){if(n.ok){r();return}g(n.error||"Failed to create organization")}},[e,n,r]);const x=c.trim().length>0,v=C.useMemo(()=>m.map((L,I)=>({member:L,index:I})).filter(L=>L.member.name.trim()),[m]),k=C.useMemo(()=>new Map(v.map((L,I)=>[L.index,I])),[v]),S=v.length>=2,b=x&&S&&!t,w=C.useMemo(()=>v.map(({member:L,index:I},D)=>{const M=L.reportsToIndex==null?null:k.get(L.reportsToIndex);return{...L,roleName:Mx(L.name),managerName:M!=null&&M<D?Mx(v[M]?.member.name||""):"Owner",index:I}}),[k,v]);if(!e)return null;const j=(L,I)=>{h(D=>D.map((M,A)=>A===L?{...M,...I}:M))},N=()=>{h(L=>[...L,{name:"",responsibility:"",prompt:"",reportsToIndex:0}])},O=L=>{h(I=>I.filter((M,A)=>A!==L).map((M,A)=>({...M,reportsToIndex:M.reportsToIndex==null?null:M.reportsToIndex>=L?Math.max(0,M.reportsToIndex-1):M.reportsToIndex})).map((M,A)=>A===0?{...M,reportsToIndex:null}:M))},R=()=>{b&&(g(""),i(c.trim(),v.map(({member:L},I)=>{const D=L.reportsToIndex==null?null:k.get(L.reportsToIndex);return{name:L.name.trim(),responsibility:L.responsibility.trim(),prompt:L.prompt.trim(),reports_to_index:D!=null&&D<I?D:I===0?null:0}})))};return u.jsx("div",{className:"org-create-backdrop",role:"presentation",onMouseDown:r,children:u.jsxs("div",{className:"org-create-modal",role:"dialog","aria-modal":"true","aria-labelledby":"org-create-title",onMouseDown:L=>L.stopPropagation(),children:[u.jsxs("div",{className:"org-create-header",children:[u.jsxs("div",{children:[u.jsx("span",{className:"org-create-eyebrow",children:"New organization"}),u.jsx("h3",{id:"org-create-title",className:"org-create-title",children:"Create a saved org"})]}),u.jsx("button",{type:"button",className:"org-create-close",onClick:r,"aria-label":"Close",children:"x"})]}),u.jsx("div",{className:"org-create-steps","aria-label":"Create organization steps",children:[["1","Name"],["2","Members"],["3","Review"]].map(([L,I])=>u.jsxs("span",{className:`org-create-step${o===Number(L)?" org-create-step--active":o>Number(L)?" org-create-step--done":""}`,children:[u.jsx("span",{children:L}),I]},L))}),o===1&&u.jsx("div",{className:"org-create-panel",children:u.jsxs("label",{className:"org-create-field",children:[u.jsx("span",{children:"Organization name"}),u.jsx("input",{value:c,onChange:L=>d(L.target.value),placeholder:"HKU Research Lab",autoFocus:!0})]})}),o===2&&u.jsxs("div",{className:"org-create-panel",children:[u.jsx("div",{className:"org-create-member-list",children:m.map((L,I)=>u.jsxs("div",{className:"org-create-member-row",children:[u.jsx("input",{value:L.name,onChange:D=>j(I,{name:D.target.value}),placeholder:I===0?"Lead role":"Member role"}),u.jsx("input",{value:L.responsibility,onChange:D=>j(I,{responsibility:D.target.value}),placeholder:"Responsibility"}),u.jsxs("select",{value:L.reportsToIndex==null?"owner":String(L.reportsToIndex),onChange:D=>j(I,{reportsToIndex:D.target.value==="owner"?null:Number(D.target.value)}),disabled:I===0,"aria-label":"Reports to",children:[u.jsx("option",{value:"owner",children:"Owner"}),m.slice(0,I).map((D,M)=>u.jsx("option",{value:M,children:Mx(D.name)},M))]}),u.jsx("button",{type:"button",className:"org-create-icon-btn",onClick:()=>O(I),disabled:m.length<=2,title:"Remove member","aria-label":"Remove member",children:"-"}),u.jsx("textarea",{value:L.prompt,onChange:D=>j(I,{prompt:D.target.value}),placeholder:"Prompt optional","aria-label":`${I===0?"Lead role":"Member role"} prompt optional`})]},I))}),u.jsx("button",{type:"button",className:"org-create-add",onClick:N,children:"+ Add member"})]}),o===3&&u.jsx("div",{className:"org-create-panel",children:u.jsxs("div",{className:"org-create-review",children:[u.jsxs("div",{className:"org-create-review-head",children:[u.jsx("span",{children:c.trim()}),u.jsxs("b",{children:[v.length," members"]})]}),w.map(L=>u.jsxs("div",{className:"org-create-review-row",children:[u.jsx("strong",{children:L.roleName}),u.jsxs("span",{children:[L.managerName,L.prompt.trim()?u.jsx("em",{children:"Prompt"}):null]})]},L.index))]})}),p&&u.jsx("div",{className:"org-create-error",children:p}),u.jsxs("div",{className:"org-create-actions",children:[u.jsx("button",{type:"button",className:"btn btn-ghost",onClick:o===1?r:()=>a(o-1),children:o===1?"Cancel":"Back"}),o<3?u.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>a(o+1),disabled:o===1?!x:!S,children:"Next"}):u.jsx("button",{type:"button",className:"btn btn-primary",onClick:R,disabled:!b,children:t?"Creating...":"Create organization"})]})]})})}const el={team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",runtime:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M13 2.05v2.02c3.95.49 7 3.85 7 7.93 0 3.21-1.81 6-4.72 7.72L13 17v5h5l-1.22-1.22C19.91 19.07 22 15.76 22 12c0-5.18-3.95-9.45-9-9.95zM11 2.05C5.95 2.55 2 6.82 2 12c0 3.76 2.09 7.07 5.22 8.78L6 22h5V2.05z'/%3E%3C/svg%3E",architecture:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",employees:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"},Oj={agents:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3z'/%3E%3C/svg%3E",active:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z'/%3E%3C/svg%3E"};function yJ(e){const t=String(e??"").trim();return t?t.replace(/^org[_-]/i,"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,n=>n.toUpperCase()):""}function xJ({data:e,sessionRecruitmentByRole:t,talents:n,employeeDetail:r,reorgProposals:i,isCustomMode:o,onRequestData:a,onRequestTalents:c,onRequestEmployeeDetail:d,onHireTalent:m,hiringTemplateId:h,onImportEmployee:p,onRequestReorgList:g,onReorgDecide:x,onMarketExport:v,onMarketInstall:k,onMarketUninstall:S,marketPresets:b,marketPreviewData:w,onMarketBrowse:j,onMarketPreview:N,onMarketApplyPreset:O,onMarketClearPreview:R,onAddRole:L,onBulkAddRoles:I,onUpdateRole:D,onDeleteRole:M,onUpdateOrgStrategy:A,onUpdateRuntimePolicy:$,onResetArchitecture:W,onConfigExport:B,onConfigImport:V,configExportYaml:H,configImportPreview:U,configImportError:Y,onSavedOrgsList:Q,onSavedOrgSaveAs:q,onSavedOrgCreate:G,onSavedOrgLoad:J,onSavedOrgDelete:P,savedOrgsList:K,activeSavedOrg:ee,activeSavedOrgVersionAtLoad:te,orgCreatePending:ie,orgCreateResult:se,onSelectCorporate:de}){const[oe,Ne]=C.useState("team"),[Ee,Ie]=C.useState(!1),Be=C.useCallback(Ye=>{Ne(Ye)},[]),[Ge,Ue]=C.useState(null),at=C.useRef(-1),[Pt,wt]=C.useState(null),Ct=C.useRef(null),pe=C.useCallback((Ye,nt="info")=>{wt({msg:Ye,type:nt}),Ct.current&&clearTimeout(Ct.current),Ct.current=setTimeout(()=>wt(null),3e3)},[]);C.useEffect(()=>()=>{Ct.current&&clearTimeout(Ct.current)},[]);const $e=C.useRef(a),et=C.useRef(c),tt=C.useRef(g),pt=C.useRef(j),me=C.useRef(Q);$e.current=a,et.current=c,tt.current=g,pt.current=j,me.current=Q,C.useEffect(()=>{$e.current(),et.current(),tt.current(),pt.current?.(),me.current?.()},[]),C.useEffect(()=>{!se||!se.ok||(Ie(!1),Ne("team"),pe(`Created ${se.organization_name||se.name} and saved automatically`))},[se,pe]);const be=e?.roles??[],Me=C.useMemo(()=>o?be.filter(Ye=>!Ye.is_builtin):be,[be,o]),Fe=C.useMemo(()=>e?.employees??[],[e?.employees]),He=C.useMemo(()=>Gm(e),[e]),jt=C.useMemo(()=>Fe.filter(Ye=>Ye.linked_agent_id),[Fe]),ke=e?.organization_name?.trim()||yJ(ee)||(o?"Custom org":"Corporate company"),Oe=(o?e?.organization_id||ee:"corporate")||"",We=o?"Saved org":"Corporate",Ze=o?ee?"Editable saved architecture":"Editable draft architecture":"Built-in read-only architecture",qe=He.frontier.status||He.projectRun?.status||He.projectRun?.lifecycle_status||"ready",ut=C.useMemo(()=>{const Ye=new Set;for(const nt of Fe){if(nt.is_default_employee)continue;const Qt=nt.role_ids?.length?nt.role_ids:[nt.role_id];for(const _n of Qt)_n&&Ye.add(_n)}return Ye},[Fe]),Yt=C.useMemo(()=>Me.filter(Ye=>!ut.has(Ye.role_id)),[Me,ut]),Nn=C.useMemo(()=>new Set((e?.installed_packages??[]).map(Ye=>Ye.package_id)),[e?.installed_packages]),ln=e?.org_version??0;C.useEffect(()=>{Ge&&at.current>=0&&ln!==at.current&&(Ue(null),at.current=-1,Ne("team"),pe("Architecture applied successfully"))},[ln,Ge,pe]);const Ln=(Ye,nt)=>{at.current=ln,Ue(Ye),O?.(Ye,nt)},lt=Ye=>{if(Ye==="corporate"){de?.();return}if(Ye.startsWith("org:")){const nt=Ye.slice(4);nt&&J?.(nt)}};if(!e)return u.jsx("div",{className:"org-tab",children:u.jsx("div",{className:"org-loading",children:"Loading organization data..."})});const In=e.installed_packages??[],Et=K??[],Dt=o&&ee?`org:${ee}`:"corporate";return u.jsxs("div",{className:"org-tab",children:[u.jsxs("div",{className:`org-header${o?" org-header--custom":" org-header--corporate"}`,children:[u.jsxs("div",{className:"org-header-main",children:[u.jsxs("div",{className:"org-eyebrow",children:[u.jsx("span",{children:"Company"}),u.jsx("span",{className:"org-eyebrow-separator",children:"/"}),u.jsx("span",{children:We})]}),u.jsxs("div",{className:"org-title-row",children:[u.jsx("h2",{className:"org-title",children:ke}),u.jsxs("span",{className:"org-version-badge",children:["v",e.org_version]}),u.jsx("span",{className:`org-state-badge${o?" org-state-badge--editable":" org-state-badge--readonly"}`,children:Ze})]}),u.jsxs("div",{className:"org-header-meta",children:[u.jsx("span",{className:"org-meta-pill",children:e.company_profile||(o?"custom":"corporate")}),Oe&&u.jsx("code",{className:"org-meta-code",children:Oe}),u.jsx("span",{className:"org-meta-pill org-meta-pill--runtime",children:qe}),u.jsx("span",{className:"org-meta-pill org-meta-pill--saved",children:"Auto-saved"})]})]}),u.jsxs("div",{className:"org-control-panel",children:[u.jsxs("label",{className:"org-switcher",children:[u.jsx("span",{className:"org-switcher-label",children:"Organization"}),u.jsx("span",{className:"org-switcher-select-wrap",children:u.jsxs("select",{className:"org-switcher-select",value:Dt,onChange:Ye=>lt(Ye.target.value),onFocus:()=>Q?.(),onPointerDown:()=>Q?.(),"aria-label":"Organization",children:[u.jsx("option",{value:"corporate",children:"Corporate"}),Et.map(Ye=>u.jsx("option",{value:`org:${Ye.name}`,children:(Ye.organization_name||Ye.name).trim()||Ye.name},Ye.name))]})})]}),u.jsxs("button",{type:"button",className:"org-create-trigger",onClick:()=>Ie(!0),children:[u.jsx("span",{className:"org-create-trigger-icon","aria-hidden":!0,children:"+"}),"New organization"]})]}),u.jsxs("div",{className:"org-stats-strip",children:[u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:Oj.agents,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:Me.length})," roles"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:el.employees,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:Fe.length})," employees"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:el.runtime,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:He.runtimeTeams.length})," runtime teams"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:Oj.active,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:jt.length})," active"]})]})]}),u.jsx("div",{className:"org-subtabs",children:[{id:"team",icon:el.team,label:"Team",count:Me.length},{id:"runtime",icon:el.runtime,label:"Runtime",count:He.runtimeTeams.length},{id:"architecture",icon:el.architecture,label:"Architecture",count:b?.length??0},{id:"employees",icon:el.employees,label:"Employees",count:n.length}].map(Ye=>u.jsxs("button",{className:`org-subtab${oe===Ye.id?" org-subtab--active":""}`,onClick:()=>Be(Ye.id),children:[u.jsx("img",{src:Ye.icon,alt:"",className:"org-subtab-icon"}),u.jsx("span",{className:"org-subtab-label",children:Ye.label}),u.jsx("span",{className:"org-subtab-count",children:Ye.count})]},Ye.id))}),Pt&&u.jsx("div",{className:`org-toast org-toast--${Pt.type}`,onClick:()=>wt(null),children:Pt.msg}),u.jsxs("div",{className:"org-tab-content",children:[oe==="team"&&u.jsx(eJ,{roles:Me,employees:Fe,sessionRecruitmentByRole:t,isCustomMode:o,onAddRole:L??(()=>{}),onBulkAddRoles:I,onUpdateRole:D??(()=>{}),onDeleteRole:M??(()=>{}),onExport:v??(()=>{}),onImportEmployee:p,onResetArchitecture:W,onSwitchToTab:Ye=>Ne(Ye),savedOrgsList:K,activeSavedOrg:ee??null,currentOrgVersion:e?.org_version??0,versionAtLoad:te??null,onSavedOrgsList:Q,onSavedOrgSaveAs:q,onSavedOrgLoad:J,onSavedOrgDelete:P}),oe==="runtime"&&u.jsx(iJ,{roles:Me,runtimeTeams:He.runtimeTeams,runtimeSeats:He.runtimeSeats,workItems:He.workItems,frontier:He.frontier,companyProfile:e.company_profile,runtimePolicy:e.runtime_policy,finalDeciderRoleId:e.final_decider_role_id,topLevelRoleIds:e.top_level_role_ids,readOnly:!o,onUpdateOrgStrategy:A,onUpdateRuntimePolicy:$}),oe==="architecture"&&u.jsxs(u.Fragment,{children:[u.jsx(oJ,{presets:b??[],installedIds:Nn,previewData:w??null,applyingPresetId:Ge,readOnly:!o,onPreview:N??(()=>{}),onApplyPreset:Ln,onClearPreview:R??(()=>{}),installedPackages:In,channels:e.channels,reorgProposals:i,isCustomMode:!!o,onReorgDecide:x,onMarketInstall:(Ye,nt)=>k?.(Ye,nt),onMarketUninstall:Ye=>S?.(Ye)}),o&&u.jsx(hJ,{onExport:B??(()=>{}),onImport:V??(()=>{}),configExportYaml:H??null,importPreview:U??null,importError:Y??null})]}),oe==="employees"&&u.jsx(pJ,{templates:n,vacantRoles:Yt,hiringTemplateId:h??null,readOnly:!o,onHireTalent:m})]}),u.jsx(gJ,{open:Ee,pending:ie,result:se??null,onClose:()=>Ie(!1),onCreate:(Ye,nt)=>G?.(Ye,nt)})]})}function vJ(e,t,n,r){const i=n.join(", "),o=`session:${t.id}`,a=e.channels.find(c=>c.id===o)??e.channels.find(c=>c.type==="activity");a&&e.sendMessage({channelId:a.id,sender:"system",senderName:"System",content:`Task **${t.displayId}** assigned to ${i}`,metadata:{type:"task_assigned",taskId:t.id,boardId:t.boardId}})}const bJ=1e12,_J=/^\[Company:([^\]]+)\]\s*(.*)$/,kJ=/^\[Company\]\s*(.*)$/;function SJ(e,t,n){return!n&&e===!1?!1:t}function ZR(e,t){return t==="idle"||t==="reflecting"||t==="tool_active"?t:e==="running"?"reflecting":void 0}function Tm(e){const t=typeof e=="string"?Number(e):e;return typeof t!="number"||!Number.isFinite(t)?Date.now():t<bJ?t*1e3:t}function mp(e){return Array.isArray(e)?FI(e.filter(t=>!!t&&typeof t=="object").map(t=>({timestamp:Tm(t.timestamp),type:t.type??"status_change",summary:typeof t.summary=="string"?t.summary:"",detail:typeof t.detail=="string"?t.detail:void 0,turnId:typeof t.turn_id=="string"?t.turn_id:typeof t.turnId=="string"?t.turnId:void 0,itemId:typeof t.item_id=="string"?t.item_id:typeof t.itemId=="string"?t.itemId:void 0,streamId:typeof t.stream_id=="string"?t.stream_id:typeof t.streamId=="string"?t.streamId:void 0,toolCallId:typeof t.tool_call_id=="string"?t.tool_call_id:typeof t.toolCallId=="string"?t.toolCallId:void 0,permissionGroupKey:typeof t.permission_group_key=="string"?t.permission_group_key:typeof t.permissionGroupKey=="string"?t.permissionGroupKey:void 0,seq:typeof t.seq=="number"&&Number.isFinite(t.seq)?t.seq:void 0,executionMode:typeof t.execution_mode=="string"?t.execution_mode:typeof t.executionMode=="string"?t.executionMode:void 0}))):[]}function wJ(e){return Array.isArray(e)?qI(e.filter(t=>!!t&&typeof t=="object").map(t=>{const n=typeof t.runtime_task_id=="string"?t.runtime_task_id:typeof t.runtimeTaskId=="string"?t.runtimeTaskId:typeof t.execution_turn_id=="string"?t.execution_turn_id:typeof t.executionTurnId=="string"?t.executionTurnId:void 0,r=typeof t.execution_turn_id=="string"?t.execution_turn_id:typeof t.executionTurnId=="string"?t.executionTurnId:n;return{timestamp:Tm(t.timestamp),type:t.type??"gate_result",workItemProjectionId:typeof t.work_item_projection_id=="string"?t.work_item_projection_id:typeof t.workItemProjectionId=="string"?t.workItemProjectionId:void 0,workItemTurnType:typeof t.work_item_turn_type=="string"?t.work_item_turn_type:typeof t.workItemTurnType=="string"?t.workItemTurnType:void 0,workItemProjectionTitle:typeof t.work_item_projection_title=="string"?t.work_item_projection_title:typeof t.workItemProjectionTitle=="string"?t.workItemProjectionTitle:void 0,runtimeTaskId:n,executionTurnId:r,roleName:typeof t.role_name=="string"?t.role_name:typeof t.roleName=="string"?t.roleName:void 0,detail:typeof t.detail=="string"?t.detail:void 0}})):[]}function CJ(e){return e.replace(/[_-]/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function Lj(e){const t=e.toLowerCase();return t.includes("starting")||t.includes("started")?"work_item_started":t.includes("gate passed")||t.includes("approved")||t.includes("completed")?"gate_approved":t.includes("rejected")||t.includes("reworking")?"gate_rejected":t.includes("awaiting peer")?"awaiting_peer":t.includes("awaiting manager review")?"awaiting_manager_review":t.includes("awaiting user")||t.includes("awaiting human review")||t.includes("awaiting review")||t.includes("awaiting confirmation")||t.includes("awaiting feedback")?"awaiting_human":t.includes("failed")?"work_item_failed":t.includes("deadlock")?"deadlock":"gate_result"}function jJ(e){const t=e.content.trim(),n=e.metadata??{},r=e.sender!=="system"&&e.sender!=="assistant"?e.senderName:void 0,i=typeof n.forwarded_from=="string"?n.forwarded_from:typeof n.task_id=="string"?n.task_id:typeof n.taskId=="string"?n.taskId:void 0,o=_J.exec(t);if(o){const[,c,d]=o,m=d.trim();return{timestamp:e.timestamp,type:Lj(m),workItemProjectionId:c,workItemProjectionTitle:CJ(c),roleName:r,detail:m||void 0,runtimeTaskId:i,executionTurnId:i}}const a=kJ.exec(t);if(a){const c=a[1].trim();return{timestamp:e.timestamp,type:Lj(c),workItemProjectionId:"company_runtime",workItemProjectionTitle:"Company Runtime",roleName:r,detail:c||void 0,runtimeTaskId:i,executionTurnId:i}}return null}function EJ(e){return e.map(jJ).filter(t=>t!=null).sort((t,n)=>t.timestamp-n.timestamp)}function NJ(e,t){if(e.length===0||t.length===0)return e;const n=new Map;for(const r of t){const i=n.get(r.channelId);i?i.push(r):n.set(r.channelId,[r])}return e.map(r=>{const i=EJ(n.get(r.channelId)??[]),o=r.workItemLog&&r.workItemLog.length>0?r.workItemLog:i,a=[...o].reverse().find(m=>{const h=m.workItemProjectionId;return h&&h!=="company_runtime"}),c=r.mode==="primary"?a?.workItemProjectionId??r.workItemProjectionId:r.workItemProjectionId??a?.workItemProjectionId,d=r.isCompanyRuntime||r.mode==="primary"&&o.length>0;return o.length===0&&c===r.workItemProjectionId&&d===r.isCompanyRuntime?r:{...r,isCompanyRuntime:d,workItemProjectionId:c,...o.length>0?{workItemLog:o}:{}}})}function IJ(e,t){if(e.length===0||t.length===0)return e;const n=new Map(t.map(r=>[r.taskId,r]));return e.map(r=>{const i=n.get(r.id);if(!i)return r;const o=i.workItemProjectionId??r.workItemProjectionId,a=i.companyProfile??r.companyProfile,c=i.workItemRoleId??r.workItemRoleId,d=i.workItemRoleName??r.workItemRoleName;return o===r.workItemProjectionId&&a===r.companyProfile&&c===r.workItemRoleId&&d===r.workItemRoleName?r:{...r,workItemProjectionId:o,companyProfile:a,workItemRoleId:c,workItemRoleName:d}})}function QR(e){return{id:e.channel_id??e.id??"",type:e.channel_type??e.type??"session",name:e.name??"",officeId:e.office_id??e.officeId,participants:e.participants??[],pinned:!!e.pinned,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now()}}function Uf(e){const t=e.sender_name??e.senderName??"",n=String(t).trim().toLowerCase()==="task generalist"?"OPC":t;return{id:e.message_id??e.id??"",channelId:e.channel_id??e.channelId??"",sender:e.sender??"",senderName:n,content:e.content??"",timestamp:typeof e.created_at=="number"?e.created_at*1e3:e.timestamp??Date.now(),replyToId:e.reply_to_id??e.replyToId,mentions:e.mentions??[],metadata:e.metadata,senderDeleted:!!(e.sender_deleted??e.senderDeleted)}}function JR(e){return{id:e.board_id??e.id??"",name:e.name??"",description:e.description,color:e.color??"#3b82f6",officeId:e.office_id??e.officeId,prefix:e.prefix??"T",nextTaskNum:e.next_task_num??e.nextTaskNum??1,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now()}}function eA(e){return{id:e.column_id??e.id??"",boardId:e.board_id??e.boardId??"",name:e.name??"",color:e.color??"#888",sortOrder:e.sort_order??e.sortOrder??0,isTerminal:!!(e.is_terminal??e.isTerminal),roleLabel:e.role_label??e.roleLabel,gateType:e.gate_type??e.gateType,isParallel:e.is_parallel??e.isParallel}}function tA(e){const t=ZR(e.status,e.agent_status??e.agentStatus),n=e.kanban_column??e.column_id??e.columnId??"",r=e.work_item_id??e.workItemId??e.task_id??e.id??"",i=e.runtime_task_id??e.runtimeTaskId??e.execution_turn_id??e.executionTurnId??(e.work_item_id??e.workItemId?void 0:e.task_id??e.id),o=e.execution_turn_id??e.executionTurnId??i,a=e.execution_mode??e.executionMode,c=e.work_item_projection_id??e.workItemProjectionId,d=a==="task_mode"||c==="task_mode_execution";return{id:r,displayId:e.display_id??e.displayId??"",boardId:e.board_id??e.boardId??"",columnId:n,title:e.title??"",description:e.description,priority:e.priority??null,assigneeIds:e.assignee_ids??e.assigneeIds??[],tags:e.tags??[],sortOrder:e.sort_order??e.sortOrder??0,sessionId:e.session_id??e.sessionId,workItemId:e.work_item_id??e.workItemId,runtimeTaskId:i,executionTurnId:o,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now(),agentStatus:t,currentTool:e.current_tool??e.currentTool,displayTool:e.display_tool??e.displayTool??e.current_tool??e.currentTool,toolElapsedMs:e.tool_elapsed_ms??e.toolElapsedMs,lastToolSummary:e.last_tool_summary??e.lastToolSummary,contextTokens:e.context_tokens??e.contextTokens,contextWindow:e.context_window??e.contextWindow,contextRemainingPct:e.context_remaining_pct??e.contextRemainingPct,inputTokens:e.input_tokens??e.inputTokens,outputTokens:e.output_tokens??e.outputTokens,totalTokens:e.total_tokens??e.totalTokens,turnCostUsd:e.turn_cost_usd??e.turnCostUsd,sessionCostUsd:e.session_cost_usd??e.sessionCostUsd,pendingPermissionCount:e.pending_permission_count??e.pendingPermissionCount,drainMode:e.drain_mode??e.drainMode,residentStatus:e.resident_status??e.residentStatus,actionableInboxCount:e.actionable_inbox_count??e.actionableInboxCount,protocolBacklogCount:e.protocol_backlog_count??e.protocolBacklogCount,notificationBacklogCount:e.notification_backlog_count??e.notificationBacklogCount,latestNotification:e.latest_notification??e.latestNotification,workItemProjectionId:d?void 0:c,workItemTurnType:d?void 0:e.work_item_turn_type??e.workItemTurnType,companyProfile:d?void 0:e.company_profile??e.companyProfile,orgId:d?void 0:e.org_id??e.organization_id??e.orgId??e.organizationId,workItemRoleId:d?void 0:e.work_item_role_id??e.workItemRoleId,workItemRoleName:d?void 0:e.work_item_role_name??e.workItemRoleName,workItemGate:d?void 0:rA(e.work_item_gate??e.workItemGate),employeeAssignment:nA(e.employee_assignment??e.employeeAssignment),selectedExecutionAgent:e.selected_execution_agent??e.selectedExecutionAgent,originChannel:e.origin_channel??e.originChannel,dependencies:e.dependencies,progressLog:mp(e.progress_log??e.progressLog),handoffContext:e.handoff_context??e.handoffContext,phase:e.phase,runtimeSessionId:e.runtime_session_id??e.runtimeSessionId,resumeCursor:e.resume_cursor??e.resumeCursor,worktreePath:e.worktree_path??e.worktreePath,blockedReason:e.blocked_reason??e.blockedReason,reviewVerdict:e.review_verdict??e.reviewVerdict,reviewSummary:e.review_summary??e.reviewSummary,reviewOwnerRoleId:e.review_owner_role_id??e.reviewOwnerRoleId,reviewOwnerSeatId:e.review_owner_seat_id??e.reviewOwnerSeatId,managerRoleId:e.manager_role_id??e.managerRoleId,managerSeatId:e.manager_seat_id??e.managerSeatId,scopeKey:e.scope_key??e.scopeKey,completionReport:e.completion_report??e.completionReport,reworkFeedback:e.rework_feedback??e.reworkFeedback,planningContext:e.planning_context??e.planningContext,deliverables:e.deliverables,acceptanceCriteria:e.acceptance_criteria??e.acceptanceCriteria,delegationRationale:e.delegation_rationale??e.delegationRationale,nonOverlapGuard:e.non_overlap_guard??e.nonOverlapGuard,coordinationNotes:e.coordination_notes??e.coordinationNotes,originalMessage:e.original_message??e.originalMessage,residentAssignment:e.resident_assignment??e.residentAssignment,memberSessionState:e.member_session_state??e.memberSessionState,ownershipContract:e.ownership_contract??e.ownershipContract}}function nA(e){if(!(!e||typeof e!="object"))return{name:e.name,employeeId:e.employee_id??e.employeeId,category:e.category,experienceScore:e.experience_score??e.experienceScore,domains:e.domains,preferredExternalAgent:e.preferred_external_agent??e.preferredExternalAgent,promptContext:e.prompt_context??e.promptContext,deltaContext:e.delta_context??e.deltaContext,skillRefs:e.skill_refs??e.skillRefs}}function rA(e){if(!(!e||typeof e!="object"))return{type:e.type??e.gate_type??e.gateType,reviewerRole:e.reviewer_role??e.reviewerRole,autoApprove:e.auto_approve??e.autoApprove,criteria:e.criteria}}const TJ=new Set(["queued","ready","ready_for_rework","waiting_dependencies","running","waiting_for_peer","waiting_for_children","paused","needs_attention","awaiting_manager_review","awaiting_human","approved","failed","cancelled"]),RJ=new Set(["active","waiting","pending","done","failed"]);function AJ(e){return typeof e=="string"&&TJ.has(e)?e:"queued"}function MJ(e){return typeof e=="string"&&RJ.has(e)?e:"pending"}function DJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function OJ(e){const t=typeof e.kind=="string"&&e.kind.trim()?e.kind:"activity",n=typeof e.title=="string"&&e.title.trim()?e.title:t.replace(/_/g," ");return{kind:t,title:n,roleName:typeof e.role_name=="string"?e.role_name:typeof e.roleName=="string"?e.roleName:void 0,runtimeTaskId:typeof e.runtime_task_id=="string"?e.runtime_task_id:typeof e.runtimeTaskId=="string"?e.runtimeTaskId:void 0,entries:mp(e.entries)}}function LJ(e){const t=Array.isArray(e.activity_sections)?e.activity_sections:Array.isArray(e.activitySections)?e.activitySections:[];return{workItemId:typeof e.work_item_id=="string"?e.work_item_id:e.workItemId??"",workItemProjectionId:typeof e.work_item_projection_id=="string"?e.work_item_projection_id:e.workItemProjectionId??void 0,phase:AJ(e.phase),kanbanColumn:typeof e.kanban_column=="string"?e.kanban_column:e.kanbanColumn??"todo",title:typeof e.title=="string"?e.title:"",kind:typeof e.kind=="string"?e.kind:e.kind??void 0,isReviewTarget:!!(e.is_review_target??e.isReviewTarget),executorRoleId:e.executor_role_id??e.executorRoleId??void 0,executorRoleName:e.executor_role_name??e.executorRoleName??void 0,reviewerRoleId:e.reviewer_role_id??e.reviewerRoleId??void 0,createdAt:Tm(e.created_at??e.createdAt),updatedAt:Tm(e.updated_at??e.updatedAt),executionTurnId:e.execution_turn_id??e.executionTurnId??void 0,activitySections:t.filter(n=>!!n&&typeof n=="object").map(OJ),progressLog:mp(e.progress_log??e.progressLog)}}function zj(e){if(!e||typeof e!="object")return;const t={};for(const[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;const i=r,a=(Array.isArray(i.work_items)?i.work_items:Array.isArray(i.workItems)?i.workItems:[]).map(LJ).sort((d,m)=>d.createdAt-m.createdAt),c=typeof i.role_key=="string"?i.role_key:typeof i.roleKey=="string"?i.roleKey:n;t[n]={roleKey:c,roleId:typeof i.role_id=="string"?i.role_id:typeof i.roleId=="string"?i.roleId:n,roleName:typeof i.role_name=="string"?i.role_name:typeof i.roleName=="string"?i.roleName:n,roleSessionId:typeof i.role_session_id=="string"?i.role_session_id:typeof i.roleSessionId=="string"?i.roleSessionId:void 0,teamInstanceId:typeof i.team_instance_id=="string"?i.team_instance_id:typeof i.teamInstanceId=="string"?i.teamInstanceId:void 0,runtimeStatus:DJ(i.runtime_status??i.runtimeStatus),aggregatedStatus:MJ(i.aggregated_status??i.aggregatedStatus),workItems:a}}return Object.keys(t).length>0?t:void 0}function iA(e){const t=ZR(e.status,e.agent_status??e.agentStatus),n=e.task_id??e.taskId??"",r=e.runtime_task_id??e.runtimeTaskId??e.execution_turn_id??e.executionTurnId??n,i=e.execution_turn_id??e.executionTurnId??r,o=e.execution_mode??e.executionMode,a=String(e.exec_mode??e.execMode??"").trim().toLowerCase(),c=e.work_item_projection_id??e.workItemProjectionId,d=a==="task"||a==="project"||a==="single"||o==="task_mode"||c==="task_mode_execution",m=d?void 0:e.parent_session_id??e.parentSessionId,h={projectId:e.project_id??e.projectId??"",taskId:n,runtimeTaskId:r,executionTurnId:i,channelId:e.channel_id??e.channelId??"",sessionId:e.session_id??e.sessionId,parentSessionId:m,mode:d?"primary":e.mode??(m?"child":"primary"),title:e.title??"Untitled",status:e.status??"pending",columnId:e.column_id??e.columnId??"todo",assigneeIds:e.assignee_ids??e.assigneeIds??[],priority:e.priority??null,tags:e.tags??[],agentStatus:t,currentTool:e.current_tool??e.currentTool,displayTool:e.display_tool??e.displayTool??e.current_tool??e.currentTool,toolElapsedMs:e.tool_elapsed_ms??e.toolElapsedMs,lastToolSummary:e.last_tool_summary??e.lastToolSummary,contextTokens:e.context_tokens??e.contextTokens,contextWindow:e.context_window??e.contextWindow,contextRemainingPct:e.context_remaining_pct??e.contextRemainingPct,inputTokens:e.input_tokens??e.inputTokens,outputTokens:e.output_tokens??e.outputTokens,totalTokens:e.total_tokens??e.totalTokens,turnCostUsd:e.turn_cost_usd??e.turnCostUsd,sessionCostUsd:e.session_cost_usd??e.sessionCostUsd,pendingPermissionCount:e.pending_permission_count??e.pendingPermissionCount,drainMode:e.drain_mode??e.drainMode,progressLog:mp(e.progress_log??e.progressLog),createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now(),messageCount:e.message_count??e.messageCount??0,latestPreview:e.latest_preview??e.latestPreview,latestSender:e.latest_sender??e.latestSender,latestMessageId:e.latest_message_id??e.latestMessageId,indexLoaded:e.index_loaded??e.indexLoaded,detailLoaded:e.detail_loaded??e.detailLoaded,fullLoaded:e.full_loaded??e.fullLoaded,hasMore:e.has_more??e.hasMore,summaryHasMore:e.summary_has_more??e.summaryHasMore,fullHasMore:e.full_has_more??e.fullHasMore,detailLoading:e.detail_loading??e.detailLoading,detailError:e.detail_error??e.detailError,viewGeneration:e.view_generation??e.viewGeneration,execMode:e.exec_mode??e.execMode,companyProfile:d?void 0:e.company_profile??e.companyProfile,orgId:d?void 0:e.org_id??e.organization_id??e.orgId??e.organizationId,preferredAgent:e.preferred_agent??e.preferredAgent,workItemProjectionId:d?void 0:c,workItemTurnType:d?void 0:e.work_item_turn_type??e.workItemTurnType,workItemRoleId:d?void 0:e.work_item_role_id??e.workItemRoleId,workItemRoleName:d?void 0:e.work_item_role_name??e.workItemRoleName,workItemGate:d?void 0:rA(e.work_item_gate??e.workItemGate),employeeAssignment:nA(e.employee_assignment??e.employeeAssignment),selectedExecutionAgent:e.selected_execution_agent??e.selectedExecutionAgent,originChannel:e.origin_channel??e.originChannel,originTaskId:e.origin_task_id??e.originTaskId??e.task_id??e.taskId,runtimeControlState:e.runtime_control_state??e.runtimeControlState,canStop:e.can_stop??e.canStop,canResume:e.can_resume??e.canResume,resumeParentTaskId:e.resume_parent_task_id??e.resumeParentTaskId,resumeParentSessionId:e.resume_parent_session_id??e.resumeParentSessionId,pendingRuntimeCheckpointId:e.pending_runtime_checkpoint_id??e.pendingRuntimeCheckpointId,stopIntentId:e.stop_intent_id??e.stopIntentId,handoffContext:e.handoff_context??e.handoffContext,handoffTo:e.handoff_to??e.handoffTo,artifacts:e.artifacts,isCompanyRuntime:d?!1:e.is_company_runtime??e.isCompanyRuntime,workItemLog:d?[]:wJ(e.work_item_log??e.workItemLog),roleWorkItems:d?void 0:zj(e.role_work_items??e.roleWorkItems),executorRoleWorkItems:d?void 0:zj(e.executor_role_work_items??e.executorRoleWorkItems),draftTurnId:e.draft_turn_id??e.draftTurnId,runtimeSessionId:e.runtime_session_id??e.runtimeSessionId,resumeCursor:e.resume_cursor??e.resumeCursor,activeSubagents:e.active_subagents??e.activeSubagents,permissionRequests:e.permission_requests??e.permissionRequests,worktreePath:e.worktree_path??e.worktreePath,residentStatus:e.resident_status??e.residentStatus,actionableInboxCount:e.actionable_inbox_count??e.actionableInboxCount,protocolBacklogCount:e.protocol_backlog_count??e.protocolBacklogCount,notificationBacklogCount:e.notification_backlog_count??e.notificationBacklogCount,latestNotification:e.latest_notification??e.latestNotification};return GI(h)}function Pj(e){const t=(e.channels??[]).map(QR),n=(e.messages??[]).map(Uf),r=(e.boards??[]).map(JR),i=(e.columns??[]).map(eA),o=NJ((e.sessions??[]).map(iA),n),a=IJ((e.tasks??[]).map(tA),o);return{channels:t,messages:n,boards:r,columns:i,tasks:a,sessions:o}}function zJ(e){return`session:${e}`}const PJ=new Set(["company_recruitment_confirmation","company_staffing_selection"]);function BJ(e){let t=null;for(const o of e){const a=o.metadata?.checkpoint_type;!a||!PJ.has(a)||(!t||(o.timestamp??0)>=(t.timestamp??0))&&(t=o)}if(!t?.metadata)return null;const n=t.metadata,r={},i=(o,a)=>{const c=String(o??"").trim(),d=String(a??"").trim();if(!c||!d)return;const m=r[c]??(r[c]=[]);m.includes(d)||m.push(d)};for(const o of n.recruitment_rationales??[])o?.selection_label&&i(o.role_id,o.selection_label);if(Object.keys(r).length===0)for(const o of n.proposals??[]){const a=o?.existing_employee?.employee_name||o?.candidate?.proposed_name||o?.candidate?.template_name||"";i(o?.role_id,a)}return Object.keys(r).length?r:null}function $J(){try{const e=localStorage.getItem("opc_outdoor_override");if(e==="day"||e==="night")return e;if(localStorage.getItem("opc_outdoor_day")==="1")return"day";if(localStorage.getItem("opc_outdoor_night")==="1")return"night"}catch{}return"auto"}const Bj=80,HJ=new Set(["message_start","message_stop","tool_call_delta","status_snapshot","context_usage","cost_update","task_ledger_updated","prompt_prefix_state","prompt_prefix_cache_fingerprint","prefetch_started","prefetch_completed","prefetch_consumed","durable_memory_extracted","durable_memory_extraction_failed","session_memory_updated","session_memory_update_failed","tool_batch_started","tool_batch_completed","permission_predicted","turn_started","turn_completed"]),FJ=new Set(["member_inbox_updated"]);function VJ(){return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.hostname}:${window.location.port||"8765"}/ws`}function UJ(e){return e==="connected"?"ok":e==="connecting"?"warn":e==="error"?"error":"off"}function Jc(e){return zV(e)}function As(e){return dv(e)}function Dx(e,t){if(e!=="task")return e==="org"?"custom":"corporate"}function Ko(e,t){return e!=="org"?void 0:String(t??"").trim()||void 0}function Os(e){const t=String(e??"").trim().toLowerCase().replace("-","_");return t==="codex"||t==="claude_code"||t==="cursor"||t==="opencode"?t:"native"}function qJ(e,t=120){const n=JSON.stringify(e)??"";return n.length<=t?n:n.slice(0,t)+"…"}function GJ(e,t){const n=typeof e.runtime_status=="string"?e.runtime_status:typeof e.status=="string"?e.status:t?.runtime_status??t?.status??"idle",r=e.appearance&&typeof e.appearance=="object"?e.appearance:t?.appearance??{palette:0,hue_shift:0,seat_zone:"work_area"},i=Array.isArray(e.specialties)?e.specialties.filter(a=>typeof a=="string"):t?.specialties??[],o=typeof e.agent_id=="string"?e.agent_id:t?.agent_id??"";return{agent_id:o,name:typeof e.name=="string"&&e.name?e.name:typeof e.role_name=="string"&&e.role_name?e.role_name:t?.name??o,description:typeof e.description=="string"?e.description:t?.description??"",specialties:i,status:n,office_id:typeof e.office_id=="string"?e.office_id:t?.office_id,appearance:r,employee_id:typeof e.employee_id=="string"?e.employee_id:t?.employee_id,opc_role_id:typeof e.opc_role_id=="string"?e.opc_role_id:t?.opc_role_id,runtime_status:n,current_tool:typeof e.current_tool=="string"?e.current_tool:e.current_tool==null?void 0:t?.current_tool,current_task_id:typeof e.current_task_id=="string"?e.current_task_id:e.current_task_id==null?void 0:t?.current_task_id}}function $j(e,t=[]){const n=new Map(t.map(r=>[r.agent_id,r]));return e.filter(r=>!!r&&typeof r=="object").map(r=>{const i=typeof r.agent_id=="string"?r.agent_id:"";return GJ(r,n.get(i))}).filter(r=>!!r.agent_id)}function Hj(e){if(!e||typeof e!="object")return;const t=e;return{name:typeof t.name=="string"?t.name:void 0,employeeId:typeof t.employee_id=="string"?t.employee_id:typeof t.employeeId=="string"?t.employeeId:void 0,category:typeof t.category=="string"?t.category:void 0,experienceScore:typeof t.experience_score=="number"?t.experience_score:typeof t.experienceScore=="number"?t.experienceScore:void 0}}function Tf(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function WJ(e){const t=String(e??"").trim().toLowerCase();return t==="idle"||t==="done"||t==="failed"||t==="cancelled"}function Ox(e){const t={};if((typeof e.execution_mode=="string"?e.execution_mode:"")==="task_mode"||e.work_item_projection_id==="task_mode_execution"){const o=Hj(e.employee_assignment??e.employeeAssignment);return o&&(t.employeeAssignment=o),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Os(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Os(e.selectedExecutionAgent)),t}typeof e.work_item_projection_id=="string"?t.workItemProjectionId=e.work_item_projection_id:typeof e.workItemProjectionId=="string"&&(t.workItemProjectionId=e.workItemProjectionId),typeof e.work_item_turn_type=="string"?t.workItemTurnType=e.work_item_turn_type:typeof e.workItemTurnType=="string"&&(t.workItemTurnType=e.workItemTurnType),typeof e.work_item_role_id=="string"?t.workItemRoleId=e.work_item_role_id:typeof e.workItemRoleId=="string"&&(t.workItemRoleId=e.workItemRoleId),typeof e.work_item_role_name=="string"?t.workItemRoleName=e.work_item_role_name:typeof e.workItemRoleName=="string"&&(t.workItemRoleName=e.workItemRoleName);const i=Hj(e.employee_assignment??e.employeeAssignment);return i&&(t.employeeAssignment=i),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Os(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Os(e.selectedExecutionAgent)),t}function Lx(e){const t={};return e.latest_notification&&typeof e.latest_notification=="object"&&(t.latestNotification=e.latest_notification),typeof e.runtime_session_id=="string"&&(t.runtimeSessionId=e.runtime_session_id),typeof e.resume_cursor=="number"&&(t.resumeCursor=e.resume_cursor),Array.isArray(e.active_subagents)&&(t.activeSubagents=e.active_subagents),Array.isArray(e.permission_requests)&&(t.permissionRequests=e.permission_requests),typeof e.worktree_path=="string"&&(t.worktreePath=e.worktree_path),typeof e.current_tool=="string"&&(t.currentTool=e.current_tool),typeof e.display_tool=="string"&&e.display_tool.trim()&&(t.displayTool=e.display_tool),typeof e.tool_elapsed_ms=="number"&&(t.toolElapsedMs=e.tool_elapsed_ms),typeof e.last_tool_summary=="string"&&(t.lastToolSummary=e.last_tool_summary),typeof e.context_tokens=="number"&&(t.contextTokens=e.context_tokens),typeof e.context_window=="number"&&e.context_window>0&&(t.contextWindow=e.context_window),typeof e.context_remaining_pct=="number"&&(t.contextRemainingPct=e.context_remaining_pct),typeof e.input_tokens=="number"?t.inputTokens=e.input_tokens:typeof e.input_tokens_total=="number"?t.inputTokens=e.input_tokens_total:typeof e.tokens_in=="number"&&(t.inputTokens=e.tokens_in),typeof e.output_tokens=="number"?t.outputTokens=e.output_tokens:typeof e.output_tokens_total=="number"?t.outputTokens=e.output_tokens_total:typeof e.tokens_out=="number"&&(t.outputTokens=e.tokens_out),typeof e.total_tokens=="number"?t.totalTokens=e.total_tokens:typeof e.tokens_total=="number"&&(t.totalTokens=e.tokens_total),typeof e.turn_cost_usd=="number"&&(t.turnCostUsd=e.turn_cost_usd),typeof e.session_cost_usd=="number"&&(t.sessionCostUsd=e.session_cost_usd),typeof e.pending_permission_count=="number"&&(t.pendingPermissionCount=e.pending_permission_count),typeof e.drain_mode=="string"&&(t.drainMode=e.drain_mode),typeof e.resident_status=="string"&&(t.residentStatus=e.resident_status),typeof e.actionable_inbox_count=="number"&&(t.actionableInboxCount=e.actionable_inbox_count),typeof e.protocol_backlog_count=="number"&&(t.protocolBacklogCount=e.protocol_backlog_count),typeof e.notification_backlog_count=="number"&&(t.notificationBacklogCount=e.notification_backlog_count),t}function zx(e){const t={};return e.latest_notification&&typeof e.latest_notification=="object"&&(t.latestNotification=e.latest_notification),typeof e.current_tool=="string"&&(t.currentTool=e.current_tool),typeof e.display_tool=="string"&&e.display_tool.trim()&&(t.displayTool=e.display_tool),typeof e.tool_elapsed_ms=="number"&&(t.toolElapsedMs=e.tool_elapsed_ms),typeof e.last_tool_summary=="string"&&(t.lastToolSummary=e.last_tool_summary),typeof e.context_tokens=="number"&&(t.contextTokens=e.context_tokens),typeof e.context_window=="number"&&e.context_window>0&&(t.contextWindow=e.context_window),typeof e.context_remaining_pct=="number"&&(t.contextRemainingPct=e.context_remaining_pct),typeof e.input_tokens=="number"?t.inputTokens=e.input_tokens:typeof e.input_tokens_total=="number"?t.inputTokens=e.input_tokens_total:typeof e.tokens_in=="number"&&(t.inputTokens=e.tokens_in),typeof e.output_tokens=="number"?t.outputTokens=e.output_tokens:typeof e.output_tokens_total=="number"?t.outputTokens=e.output_tokens_total:typeof e.tokens_out=="number"&&(t.outputTokens=e.tokens_out),typeof e.total_tokens=="number"?t.totalTokens=e.total_tokens:typeof e.tokens_total=="number"&&(t.totalTokens=e.tokens_total),typeof e.turn_cost_usd=="number"&&(t.turnCostUsd=e.turn_cost_usd),typeof e.session_cost_usd=="number"&&(t.sessionCostUsd=e.session_cost_usd),typeof e.pending_permission_count=="number"&&(t.pendingPermissionCount=e.pending_permission_count),typeof e.drain_mode=="string"&&(t.drainMode=e.drain_mode),typeof e.resident_status=="string"&&(t.residentStatus=e.resident_status),typeof e.actionable_inbox_count=="number"&&(t.actionableInboxCount=e.actionable_inbox_count),typeof e.protocol_backlog_count=="number"&&(t.protocolBacklogCount=e.protocol_backlog_count),typeof e.notification_backlog_count=="number"&&(t.notificationBacklogCount=e.notification_backlog_count),t}function Fj(e,t){if(!t||!e)return!1;if(t.activeSessionId===e)return!0;const n=t.activeSession;if(!n)return!1;if(n.taskId===e||n.parentSessionId===e||n.sessionId===e)return!0;const r=t.sessions.find(c=>c.taskId===e);if(!r)return!1;const i=new Set([String(n.taskId??"").trim(),String(n.sessionId??"").trim()].filter(Boolean)),o=String(r.parentSessionId??"").trim();if(o&&i.has(o))return!0;const a=String(n.parentSessionId??"").trim();return a?String(r.taskId??"").trim()===a||String(r.sessionId??"").trim()===a:!1}function YJ(e){return e==="done"||e==="delivered"?"approved":e==="failed"?"failed":e==="cancelled"?"cancelled":e==="pending"?"queued":e==="awaiting_manager_review"||e==="awaiting_review"?"awaiting_manager_review":e==="awaiting_human"?"awaiting_human":"running"}function XJ(e){return e==="approved"||e==="failed"||e==="cancelled"?"done":e==="awaiting_manager_review"||e==="awaiting_human"?"in-review":e==="queued"||e==="ready"||e==="ready_for_rework"||e==="waiting_dependencies"?"todo":"in-progress"}function KJ(e){return e==="done"||e==="delivered"?"done":e==="failed"||e==="cancelled"?"failed":e==="pending"?"pending":e==="awaiting_manager_review"||e==="awaiting_review"||e==="awaiting_human"?"waiting":"active"}function ZJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function QJ(e){const t=go(e)||e.taskId,n=e.workItemRoleId||e.assigneeIds[0]||e.taskId,r=e.workItemRoleName||n.replace(/[_-]/g," ").replace(/\b\w/g,o=>o.toUpperCase()),i=YJ(e.status);return{roleKey:n,roleId:n,roleName:r,runtimeStatus:ZJ(e.agentStatus),aggregatedStatus:KJ(e.status),workItems:[{workItemId:e.workItemProjectionId||t,workItemProjectionId:e.workItemProjectionId,phase:i,kanbanColumn:XJ(i),title:e.title||r,kind:e.workItemTurnType,executorRoleId:n,executorRoleName:r,createdAt:e.createdAt,updatedAt:e.updatedAt,executionTurnId:t,progressLog:e.progressLog,activitySections:e.progressLog.length>0?[{kind:"activity",title:"Runtime activity",roleName:r,runtimeTaskId:t,entries:e.progressLog}]:[]}]}}function JJ({taskId:e,sessions:t,agents:n,onClose:r}){if(!e)return null;for(const a of t){const c=a.roleWorkItems;if(c)for(const d of Object.values(c)){const m=d.workItems.find(h=>h.executionTurnId===e);if(m)return u.jsx(EC,{role:d,focusedWorkItemId:m.workItemId,focusedExecutionTurnId:m.executionTurnId,agents:n,onClose:r})}}const i=t.find(a=>a.taskId===e||go(a)===e);if(!i)return null;const o=QJ(i);return u.jsx(EC,{role:o,focusedExecutionTurnId:e,agents:n,onClose:r})}function eee(){const e=C.useRef(new JM);C.useMemo(()=>i4(e.current),[]);const t=C.useRef(null),n=VJ(),[r,i]=C.useState(n),[o,a]=C.useState(n),[c,d]=C.useState("disconnected"),[m,h]=C.useState(""),[p,g]=C.useState(null),[x,v]=C.useState([]),[k,S]=C.useState(0),[b,w]=C.useState(null),[j,N]=C.useState("openopc"),[O,R]=C.useState(!0),[L,I]=C.useState(()=>{try{return localStorage.getItem("opc_office_sidebar_collapsed")==="1"}catch{return!1}}),D=()=>I(Z=>{const z=!Z;try{localStorage.setItem("opc_office_sidebar_collapsed",z?"1":"0")}catch{}return z}),[M,A]=C.useState("all"),[$,W]=C.useState("workspace"),[B,V]=C.useState([]),[H,U]=C.useState(!1),[Y,Q]=C.useState(null),[q,G]=C.useState("task"),[J,P]=C.useState("corporate"),[K,ee]=C.useState("native"),[te,ie]=C.useState(null),[se,de]=C.useState(null),[oe,Ne]=C.useState(null),[Ee,Ie]=C.useState(null),[Be,Ge]=C.useState([]),[Ue,at]=C.useState(""),[Pt,wt]=C.useState(null),[Ct,pe]=C.useState([]),[$e,et]=C.useState([]),[tt,pt]=C.useState(null),[me,be]=C.useState(null),[Me,Fe]=C.useState(null),[He,jt]=C.useState(null),[an,ke]=C.useState(null),[Oe,We]=C.useState(null),[Ze,qe]=C.useState(null),[ut,Yt]=C.useState(!1),[Nn,ln]=C.useState(null),[Ln,lt]=C.useState(null),In=C.useRef(new Set),Et=C.useRef(new Set),Dt=C.useRef([]),Ye=C.useRef("task"),nt=C.useRef(null),Qt=C.useRef(null),_n=C.useRef(null),Tt=C.useRef(null),er=C.useRef(null),Tn=C.useRef("default"),ht=C.useRef(null),tr=C.useRef(""),mn=C.useRef(0),cn=C.useRef(!1),Fn=C.useRef(!1),Jt=C.useRef(0),Vt=C.useRef(!1),Vn=C.useRef(null),Un=C.useRef(null),Re=C.useRef(new Map),[bt,Cn]=C.useState(null),[vr,Mn]=C.useState(null),[_t,wr]=C.useState("success"),[fr,Xt]=C.useState(null),[Ut,hn]=C.useState(null),[qn,gt]=C.useState(null),[Gn,mr]=C.useState(()=>$J()),Rn=C.useCallback(Z=>(typeof Z=="string"?Z.trim():"")||"default",[]),Je=C.useCallback(()=>Rn(Tn.current),[Rn]),xn=C.useCallback(()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`,[]),Kt=C.useCallback(Z=>{if(!Z||typeof Z!="object")return"";for(const ne of["project_id","projectId","active_project_id","activeProjectId"]){const le=Z[ne];if(typeof le=="string"&&le.trim())return le.trim()}const z=Z.data;if(z&&typeof z=="object")for(const ne of["project_id","projectId"]){const le=z[ne];if(typeof le=="string"&&le.trim())return le.trim()}return""},[]),kt=C.useCallback((Z,z=!1)=>{const ne=Kt(Z);return ne?ne===Je():z},[Je,Kt]),Wn=C.useCallback(Z=>{if(!Z||typeof Z!="object")return"";const z=Z.switch_seq??Z.switchSeq;return typeof z=="string"?z.trim():""},[]),gn=C.useCallback(Z=>{if(!Z||typeof Z!="object")return null;const z=Z.view_generation??Z.viewGeneration;if(typeof z=="number")return z;if(typeof z=="string"&&z.trim()){const ne=Number(z);return Number.isFinite(ne)?ne:null}return null},[]),nr=C.useCallback(Z=>{const z=Kt(Z);if(!z)return!1;const ne=ht.current;if(z!==Je()&&z!==ne)return!1;const le=gn(Z);if(le!==null&&le!==mn.current)return!1;const he=Wn(Z);return!he||!tr.current||he===tr.current},[Je,Wn,gn,Kt]),ds=C.useCallback(Z=>{if(!Z||Z.error!=="task_not_found")return!1;if(!kt(Z,!1))return!0;if((typeof Z.action=="string"?Z.action:"")!=="session_detail")return!1;const ne=gn(Z);if(ne!==null&&ne!==mn.current)return!0;const le=typeof Z.task_id=="string"?Z.task_id:"";return le?!(Tt.current?.sessions??[]).some(Ce=>Ce.taskId===le):!0},[kt,gn]),pr=C.useCallback(()=>{for(const Z of Re.current.values())clearTimeout(Z);Re.current.clear()},[]),rr=C.useCallback((Z,z="full",ne=!1,le)=>{if(!Z)return;const he=le||Je(),Ce=mn.current;if(!ne&&!Fj(Z,Tt.current))return;const Xe=`${he}:${Ce}:${Z}`,Ve=Re.current.get(Xe);Ve&&(clearTimeout(Ve),Re.current.delete(Xe));const Lt=setTimeout(()=>{if(Re.current.delete(Xe),he!==Je()||Ce!==mn.current||!ne&&!Fj(Z,Tt.current))return;const on=t.current;if(Tt.current?.updateSession(Z,{detailLoading:!0,detailError:void 0,viewGeneration:Ce}),!on){Tt.current?.updateSession(Z,{detailLoading:!1,detailError:"connection_unavailable"});return}on.sessionDetail(he,Z,{limit:200,detailLevel:z,include:z==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:Ce}).then(zt=>{zt.ok===!1&&he===Je()&&Ce===mn.current&&Tt.current?.updateSession(Z,{detailLoading:!1,detailError:String(zt.error??"request_failed")})})},180);Re.current.set(Xe,Lt)},[Je]),ue=C.useCallback((Z,z="success")=>{Mn(Z),wr(z),setTimeout(()=>Mn(null),3e3)},[]),Se=C.useCallback(()=>{Un.current&&(clearTimeout(Un.current),Un.current=null),Vt.current=!1,Vn.current=null},[]),Pe=C.useCallback(Z=>{Se(),Vt.current=!0,Vn.current=Z,Un.current=setTimeout(()=>{!Vt.current||Vn.current!==Z||(Se(),h("create_session_timeout"),ue("Session creation timed out. Please try again.","error"))},3e4)},[Se,ue]),ae=d4(),ve=EV(),Ae=HV(),Le=VV(),vt=Ae.activeSessionId,ct=C.useMemo(()=>vt?BJ(ve.getChannelMessages(zJ(vt))):null,[vt,ve]);C.useCallback(Z=>{const z=Rn(Z);Tn.current=z,pr(),ve.initFromBackend(z,[],[]),ae.initFromBackend(z,[],[],[]),Ae.initFromBackend(z,[]),Se(),gt(null),Ne(null),Ie(null)},[ae,ve,Se,pr,Rn,Ae]);const dt=C.useCallback(Z=>{const z=Rn(Z),ne=xn();return cn.current=!0,tr.current=ne,mn.current+=1,ht.current=z,pr(),h(`Switching to ${z}...`),ne},[pr,xn,Rn]),un=C.useRef(!1);C.useLayoutEffect(()=>{Qt.current=ve,_n.current=ae,Tt.current=Ae,er.current=Le,nt.current=Z=>{if(!ae.activeBoardId||ae.activeBoardColumns.length===0)return;const ne=ae.activeBoardColumns.find(le=>le.name==="Todo")?.id??ae.activeBoardColumns[0].id;ae.createTask({boardId:ae.activeBoardId,columnId:ne,title:Z.title,priority:Z.priority,assigneeIds:Z.assignee_id?[Z.assignee_id]:[]})},un.current=!0}),C.useEffect(()=>{Dt.current=B},[B]),C.useEffect(()=>{Ye.current=q},[q]),C.useEffect(()=>{const Z=e.current,z=ne=>{w(ne),S(le=>le+1)};return Z.on("agentSelected",z),()=>{Z.off("agentSelected",z)}},[]);const zn=C.useRef(new Map),qt=C.useRef(null),Rt=C.useCallback(Z=>{const z=zn.current;if(z.size===0)return;const ne=Z?[Z]:Array.from(z.keys());for(const le of ne){const he=z.get(le);if(!he)continue;z.delete(le);const Ce=Tt.current;he.draftText&&Ce?.appendDraft(le,he.draftText,he.draftIteration,he.draftTurnId),Ce?.updateSession(le,he.sessionPatch),Object.keys(he.kanbanPatch).length>0&&_n.current?.updateTask(le,he.kanbanPatch)}z.size===0&&qt.current!==null&&(window.clearTimeout(qt.current),qt.current=null)},[]),en=C.useCallback(()=>{qt.current===null&&(qt.current=window.setTimeout(()=>{qt.current=null,Rt()},80))},[Rt]),sn=C.useRef(null),Vr=C.useCallback(()=>{sn.current===null&&(sn.current=window.setTimeout(()=>{sn.current=null,S(Z=>Z+1)},300))},[]);C.useEffect(()=>{const Z=new sM(r,{onSnapshot:z=>{if(!nr(z))return;g(z);const ne=z.timeline.slice(-Bj);v(ne);const le=new Set;for(const Ce of ne)le.add(Ce.event_id);Et.current=le,e.current.pushSnapshot(z);const he=Object.entries(z.agents??{});if(he.length>0){const Ce=$j(he.map(([Xe,Ve])=>({...Ve&&typeof Ve=="object"?Ve:{},agent_id:Xe})),Dt.current);Dt.current=Ce,V(Ce)}z.exec_mode&&G(As(z.exec_mode)),z.company_profile&&P(Jc(z.company_profile)),z.task_preferred_agent&&ee(Os(z.task_preferred_agent)),S(Ce=>Ce+1)},onEvent:z=>{try{if(!kt(z,!1))return;if(Et.current.has(z.event_id)){Et.current.delete(z.event_id);return}if(v(ne=>[...ne.slice(-Bj+1),z]),e.current.pushEvent(z),z.type==="task_routed"&&z.agent_id){if(Ye.current==="company"||Ye.current==="org")return;const ne=z.data?.task_id;if(ne&&!_n.current?.tasks.find(le=>le.id===ne)){const le=typeof z.data?.content_preview=="string"?z.data.content_preview.slice(0,80):"Task";nt.current?.({title:le,priority:null,assignee_id:z.agent_id})}}if(z.type==="task_done"&&z.agent_id&&Q(z.agent_id),["turn_started","assistant_delta","thinking_delta","status_snapshot","tool_started","tool_progress","tool_completed","permission_requested","permission_resolved","cost_update","context_usage","context_warning","subagent_started","subagent_updated","subagent_completed","member_inbox_updated","compaction_applied","checkpoint_saved","turn_completed","turn_failed"].includes(z.type)){const ne=z.data,le=typeof ne.task_id=="string"?ne.task_id:"";if(le){const he=z.type==="assistant_delta"||z.type==="thinking_delta";he||Rt(le);const Ce=Tt.current,Xe=_n.current,Ve=Ce?.sessions.find(Mi=>Mi.taskId===le),Lt=typeof ne.work_item_projection_id=="string"?ne.work_item_projection_id:"",zt=(typeof ne.execution_mode=="string"?ne.execution_mode:"")==="task_mode"||Lt==="task_mode_execution",Ot=typeof ne.turn_id=="string"&&ne.turn_id?ne.turn_id:typeof ne.canonical_turn_id=="string"&&ne.canonical_turn_id?ne.canonical_turn_id:typeof ne.execution_turn_id=="string"&&ne.execution_turn_id?ne.execution_turn_id:void 0,Bt=!!Lt&&Lt!=="task_mode_execution"&&!zt;Bt&&!he&&Ve?.isCompanyRuntime!==!0&&Ce?.setCompanyRuntime(le,!0);const Jr={lastRuntimeEventType:z.type,...z.type==="member_inbox_updated"?{}:{updatedAt:Date.now()},...Lx(ne)},Ar=typeof ne.tool_name=="string"?ne.tool_name:void 0,Ro={...zx(ne),...Ar!==void 0?{currentTool:Ar||void 0}:{},...Ar?{displayTool:Ar}:{}};if(he){const Mi=zn.current;let gr=Mi.get(le);const ha=z.type==="assistant_delta"&&typeof ne.text=="string"?ne.text:"";gr&&ha&&gr.draftText&&gr.draftTurnId!==void 0&&Ot!==void 0&&gr.draftTurnId!==Ot&&(Rt(le),gr=void 0),gr||(gr={draftText:"",sessionPatch:{},kanbanPatch:{}},Mi.set(le,gr)),ha&&(gr.draftText+=ha,gr.draftIteration=typeof ne.iteration=="number"?ne.iteration:gr.draftIteration??Ve?.draftIteration,Ot!==void 0&&(gr.draftTurnId=Ot)),gr.sessionPatch={...gr.sessionPatch,...Jr,...Bt?{isCompanyRuntime:!0}:{}},gr.kanbanPatch={...gr.kanbanPatch,...Ro},en()}else(z.type==="turn_started"||z.type==="turn_completed"||z.type==="turn_failed"||z.type==="checkpoint_saved")&&Ce?.clearDraft(le),Ce?.updateSession(le,Jr),Xe?.updateTask(le,Ro);const Vs=zt&&HJ.has(z.type)||FJ.has(z.type);z.type!=="assistant_delta"&&!Vs&&rr(le)}}if(z.type==="agent_removed"&&z.agent_id){const ne=z.agent_id;IM(ne);const le=Qt.current;le&&(le.markSenderDeleted(ne),le.removeParticipant(ne))}Vr()}catch(ne){console.error("[onEvent] Error:",ne,z)}},onAck:z=>{try{if(z.ok===!1){if(z.action==="create_session"&&Se(),ds(z))return;z.action==="session_detail"&&typeof z.task_id=="string"&&Tt.current?.updateSession(z.task_id,{detailLoading:!1,detailError:String(z.error??"request_failed")}),h(String(z.error??"request_failed")),hn(null),Xt(null),ue(String(z.error??"Request failed"),"error")}if(z.ok&&z.action==="employee_imported"&&ue("Employee deployed to office!"),z.ok&&z.action==="talent_imported"&&ue(`Imported ${z.count??0} templates!`),z.ok&&z.action==="talent_hired"&&(Cn(null),ue(`${z.name??"Agent"} hired and added to office!`)),z.ok&&z.action==="architecture_reset"&&(We(null),qe(null)),z.ok&&z.action==="session_detail"){if(!kt(z,!1))return;const ne=gn(z);if(ne!==null&&ne!==mn.current)return;const le=typeof z.task_id=="string"?z.task_id:"",he=Array.isArray(z.messages)?z.messages.map(Uf):[],Ce=typeof z.message_count=="number"?z.message_count:he.length,Xe=z.detail_level==="full"?"full":"summary",Ve=Qt.current;Ve&&he.length>0&&Ve.mergeMessagesFromBackend(he);const Lt=Tt.current;if(Lt&&le){const on=Lt.sessions.find(Vs=>Vs.taskId===le),zt=Xe==="full"?on?.fullHasMore:on?.summaryHasMore,Ot=SJ(zt,z.has_more===!0,z.client_history_page===!0),Bt=String(on?.draftTurnId??"").trim();Bt&&he.some(Vs=>{if(Vs.sender==="user")return!1;const Mi=Vs.metadata??{};return String(Mi.transcript_kind??Mi.kind??"").trim()!=="runtime_v2_assistant"?!1:String(Mi.canonical_turn_id??Mi.turn_id??"").trim()===Bt})&&Lt.clearDraft(le);const Ar=z.session_state,Ro=Ar&&typeof Ar=="object"?iA(Ar):null;Lt.updateSession(le,{...Ro??{},...typeof z.handoff_context=="string"?{handoffContext:z.handoff_context}:{},...typeof z.handoff_to=="string"?{handoffTo:z.handoff_to}:{},messageCount:Ce,detailLoaded:!0,...Xe==="full"?{fullLoaded:!Ot}:{},hasMore:Ot,...Xe==="full"?{fullHasMore:Ot}:{summaryHasMore:Ot},detailLoading:!1,detailError:void 0,viewGeneration:ne??mn.current})}}if(Array.isArray(z.agents)){const ne=$j(z.agents,Dt.current);Dt.current=ne,V(ne);for(const le of ne)e.current.ensureAgent(le.agent_id,le.name,le.office_id,le.appearance?.palette,le.appearance?.desk_id);S(le=>le+1)}if(z.ok&&(z.agent_id||z.deleted)&&(z.deleted&&(hn(null),Xt(null),ue("Agent removed")),z.agent_id&&!z.deleted&&ue("Agent created!"),t.current?.listAgents()),z.ok&&Array.isArray(z.projects)){const ne=er.current;if(ne){const le=Je(),he=!Fn.current,Ce=!Fn.current&&!cn.current,Xe=typeof z.active_project_id=="string"?z.active_project_id.trim():"",Ve=z.action==="create_project"&&typeof z.project_id=="string"?z.project_id.trim():"",Lt=Ce?Rn(Ve||Xe||Tn.current):Ve?Rn(Ve):Je();if(Ve&&(cn.current=!0),Fn.current=!0,Tn.current=Lt,ne.initFromBackend(z.projects,Lt),Lt!==le||he){const on=xn();tr.current=on,ht.current=Lt,mn.current+=1,h(`Switching to ${Lt}...`),t.current?.switchProject(Lt,on)}}}if(z.ok&&Array.isArray(z.channels)){if(!nr(z))return;const ne=Pj(z),le=Kt(z);if(!le)return;const he=ht.current===le||Je()!==le;Tn.current=le,ht.current=null,er.current?.setActiveProject(le),he&&(pr(),gt(null),Ne(null),Ie(null)),h("");const Ce=Qt.current;Ce&&Ce.initFromBackend(le,ne.channels,ne.messages);const Xe=_n.current;Xe&&Xe.initFromBackend(le,ne.boards,ne.columns,ne.tasks);const Ve=Tt.current;if(Ve){Ve.initFromBackend(le,ne.sessions);const Lt=Ve.activeSessionId;Lt&&rr(Lt,"full",!0)}}}catch(ne){console.error("[onAck] Error:",ne)}},onStatus:(z,ne)=>{if(d(z),h(ne??""),z==="connected"){const le=Je();Z.listProjects(),Z.orgInfo(),Z.orgSavedList(),Z.collabSync(le,void 0,mn.current)}},onCollabMessage:(z,ne)=>{try{if(z==="project_index_push"){if(!nr(ne))return}else if(!kt(ne,!1))return;const le=Qt.current;if(z==="chat_new_message")le&&le.addMessageFromBackend(Uf(ne));else if(z==="chat_channel_created")le&&le.addChannelFromBackend(QR(ne));else if(z==="session_runtime_control"){const he=Tt.current;if(he){const Ce=Array.isArray(ne.task_ids)?ne.task_ids.map(String).filter(Boolean):[],Xe={runtimeControlState:String(ne.runtime_control_state??ne.runtimeControlState??"idle"),canStop:!!(ne.can_stop??ne.canStop),canResume:!!(ne.can_resume??ne.canResume),resumeParentTaskId:String(ne.resume_parent_task_id??ne.resumeParentTaskId??""),resumeParentSessionId:String(ne.resume_parent_session_id??ne.resumeParentSessionId??""),pendingRuntimeCheckpointId:String(ne.pending_runtime_checkpoint_id??ne.pendingRuntimeCheckpointId??""),stopIntentId:String(ne.stop_intent_id??ne.stopIntentId??"")};for(const Ve of Ce)he.updateSession(Ve,Xe)}}else if(z==="board_task_status_changed"){const he=String(ne.task_id??""),Ce=String(ne.column_id??""),Xe=String(ne.status??""),Ve=["done","failed","cancelled"].includes(Xe);if(he&&Ce){const Lt=_n.current;if(Lt){const zt=Lt.tasks.find(Ot=>Ot.id===he);if(zt){const Ot={};zt.columnId!==Ce&&Lt.moveTask(he,Ce,0),Xe==="running"?(!zt.agentStatus||zt.agentStatus==="idle")&&(Ot.agentStatus="reflecting"):(zt.agentStatus||zt.currentTool||zt.displayTool)&&(Ot.agentStatus=void 0,Ot.currentTool=void 0,Ot.displayTool=void 0),Object.keys(Ot).length>0&&Lt.updateTask(he,Ot)}}const on=Tt.current;if(on){const zt=on.sessions.find(Bt=>Bt.taskId===he),Ot={columnId:Ce,status:Xe||Ce};Xe==="running"?(!zt?.agentStatus||zt.agentStatus==="idle")&&(Ot.agentStatus="reflecting"):(zt?.agentStatus||zt?.currentTool||zt?.displayTool||Ve)&&(Ot.agentStatus=void 0,Ot.currentTool=void 0,Ot.displayTool=void 0),Object.assign(Ot,F4(zt,Xe)),on.updateSession(he,{...Ot})}}}else if(z==="execution_mode_resolved"){const he=String(ne.mode??""),Ce=String(ne.profile??"");if(he){const Xe=As(he);G(Xe),P(Xe==="org"?"custom":Xe==="company"?Jc(Ce):"corporate")}else Ce&&P(Jc(Ce))}else if(z==="project_run_updated"||z==="seat_digest_updated"||z==="work_item_batch_updated")t.current?.collabSync(Je(),void 0,mn.current);else if(z==="collab_sync_push"||z==="project_index_push"){const he=String(ne.sync_scope??ne.syncScope??"").toLowerCase(),Ce=z==="project_index_push"||he==="index";if(!nr(ne))return;const Xe=Pj(ne),Ve=Kt(ne);if(!Ve)return;const Lt=ht.current===Ve||Je()!==Ve;if(Tn.current=Ve,ht.current=null,er.current?.setActiveProject(Ve),Lt&&(pr(),gt(null),Ne(null),Ie(null)),h(""),Ce){const Bt=Tt.current;Bt&&Bt.initFromBackend(Ve,Xe.sessions,{preserveExistingWhenIncomingPartial:!0,preserveActiveWhenMissing:!0}),t.current?.collabSync(Ve,void 0,mn.current);return}const on=Qt.current;on&&on.initFromBackend(Ve,Xe.channels,Xe.messages);const zt=_n.current;zt&&zt.initFromBackend(Ve,Xe.boards,Xe.columns,Xe.tasks);const Ot=Tt.current;if(Ot){Ot.initFromBackend(Ve,Xe.sessions);const Bt=Ot.activeSessionId;Bt&&rr(Bt,"full",!0)}}}catch(le){console.error("[onCollabMessage] Error:",le)}},onAgentRuntimeUpdate:z=>{if(!kt(z,!1))return;z.agent_id&&V(le=>{const he=le.map(Ce=>Ce.agent_id===z.agent_id?{...Ce,status:z.status,runtime_status:z.status,current_tool:z.current_tool??void 0,current_task_id:z.task_id??void 0}:Ce);return Dt.current=he,he});const ne=_n.current;if(ne&&z.task_id){const le=z,he=zx(le),Ce=Lx(le);if(Tf(le,"current_tool")){const Ve=typeof le.current_tool=="string"&&le.current_tool.trim()?le.current_tool:void 0;he.currentTool=Ve,Ce.currentTool=Ve,Ve&&(he.displayTool=Ve,Ce.displayTool=Ve)}if(Tf(le,"display_tool")){const Ve=typeof le.display_tool=="string"&&le.display_tool.trim()?le.display_tool:void 0;Ve&&(he.displayTool=Ve,Ce.displayTool=Ve)}if(WJ(z.status)&&(he.displayTool=void 0,Ce.displayTool=void 0),Tf(le,"tool_elapsed_ms")){const Ve=typeof le.tool_elapsed_ms=="number"?le.tool_elapsed_ms:void 0;he.toolElapsedMs=Ve,Ce.toolElapsedMs=Ve}if(Tf(le,"last_tool_summary")){const Ve=typeof le.last_tool_summary=="string"?le.last_tool_summary:void 0;he.lastToolSummary=Ve,Ce.lastToolSummary=Ve}typeof z.iteration=="number"&&(he.iterationCount=z.iteration),ne.updateTask(z.task_id,{agentStatus:z.status,...he});const Xe=Tt.current;Xe&&Xe.updateSession(z.task_id,{agentStatus:z.status,...Ce,updatedAt:Date.now()}),rr(z.task_id)}},onWorkerNotification:z=>{if(!kt(z,!1))return;const ne=z,le=typeof z.task_id=="string"?z.task_id:"";if(!le)return;const he=ne;Tt.current?.updateSession(le,{...Lx(ne),latestNotification:he,updatedAt:Date.now()}),_n.current?.updateTask(le,{...zx(ne),latestNotification:he}),rr(le)},onKanbanViewData:z=>{if(!kt(z,!1))return;const ne=_n.current;ne&&ne.initFromBackend(Kt(z)||Je(),(z.boards??[]).map(JR),(z.columns??[]).map(eA),(z.tasks??[]).map(tA))},onSessionProgress:z=>{if(!kt(z,!1))return;const ne=Tt.current;if(!(!ne||!z.task_id||!z.entry)){if(ne.appendProgress(z.task_id,{type:z.entry.type,summary:z.entry.summary,detail:z.entry.detail,timestamp:z.entry.timestamp*1e3,turnId:typeof z.entry.turn_id=="string"?z.entry.turn_id:typeof z.entry.turnId=="string"?z.entry.turnId:void 0,itemId:typeof z.entry.item_id=="string"?z.entry.item_id:typeof z.entry.itemId=="string"?z.entry.itemId:void 0,streamId:typeof z.entry.stream_id=="string"?z.entry.stream_id:typeof z.entry.streamId=="string"?z.entry.streamId:void 0,toolCallId:typeof z.entry.tool_call_id=="string"?z.entry.tool_call_id:typeof z.entry.toolCallId=="string"?z.entry.toolCallId:void 0,permissionGroupKey:typeof z.entry.permission_group_key=="string"?z.entry.permission_group_key:typeof z.entry.permissionGroupKey=="string"?z.entry.permissionGroupKey:void 0,seq:typeof z.entry.seq=="number"?z.entry.seq:void 0,executionMode:typeof z.entry.execution_mode=="string"?z.entry.execution_mode:typeof z.entry.executionMode=="string"?z.entry.executionMode:void 0}),z.entry.type==="tool_call"){const le=String(z.entry.summary??"").trim();ne.updateSession(z.task_id,{...le?{currentTool:le,displayTool:le}:{},updatedAt:z.entry.timestamp*1e3})}z.entry.type!=="thinking"&&z.entry.type!=="verification"&&rr(z.task_id)}},onBoardEvent:z=>{if(!kt(z,!1))return;const ne=_n.current;if(!ne)return;const le=String(z.task_id??"");if(!le)return;const he=Tt.current;if(he&&he.sessions.find(Jr=>Jr.taskId===le)?.mode==="child")return;const Ce=Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):[],Xe=Ox(z);if(ne.tasks.find(Bt=>Bt.id===le)){const Bt={};z.title&&(Bt.title=String(z.title)),z.display_id&&(Bt.displayId=String(z.display_id)),Ce.length>0&&(Bt.assigneeIds=Ce),Object.assign(Bt,Xe),Object.keys(Bt).length>0&&ne.updateTask(le,Bt);return}const Lt=String(z.board_id??ne.activeBoardId??"default"),on=ne.columns.filter(Bt=>Bt.boardId===Lt),Ot=on.find(Bt=>Bt.name==="Todo")?.id??on[0]?.id??"";Ot&&(ne.createTask({boardId:Lt,columnId:Ot,title:String(z.title??"Untitled"),taskId:le,displayId:z.display_id?String(z.display_id):void 0,assigneeIds:Ce}),Object.keys(Xe).length>0&&ne.updateTask(le,Xe))},onSessionCreated:z=>{try{if(!kt(z,!1))return;const ne=Tt.current;if(!ne)return;const le=String(z.task_id??"");if(!le)return;const he=Kt(z);if(!he)return;const Ce=le?ne.sessions.find(Bt=>Bt.taskId===le):void 0,Xe=Ox(z),Ve=As(z.exec_mode??Ce?.execMode),Lt=Dx(Ve,z.company_profile??Ce?.companyProfile),on=Ko(Ve,z.org_id??z.organization_id??Ce?.orgId);Ve==="org"&&on&&We(on),ne.createSession({projectId:he,taskId:le,channelId:z.channel_id,sessionId:z.session_id,parentSessionId:z.parent_session_id,originTaskId:z.origin_task_id??Ce?.originTaskId??le,mode:z.parent_session_id?"child":"primary",execMode:Ve,companyProfile:Lt,orgId:on,preferredAgent:Os(z.preferred_agent??Ce?.preferredAgent),title:z.title,status:z.status,columnId:Ce?.columnId??"todo",assigneeIds:Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):Ce?.assigneeIds??[],priority:Ce?.priority??null,tags:Ce?.tags??[],progressLog:Ce?.progressLog??[],createdAt:typeof z.created_at=="number"?z.created_at*1e3:Ce?.createdAt??Date.now(),updatedAt:Date.now(),messageCount:0,...Xe});const zt=_n.current;if(zt&&Ve==="task"&&!z.parent_session_id&&le&&!zt.tasks.find(Bt=>Bt.id===le)&&zt.activeBoardId){const Jr=zt.columns.filter(Ar=>Ar.boardId===zt.activeBoardId).find(Ar=>Ar.name==="Todo");Jr&&zt.createTask({boardId:zt.activeBoardId,columnId:Jr.id,title:z.title,taskId:le,assigneeIds:Ce?.assigneeIds??[]})}if(Vt.current){if(Vn.current!==he)return;Se(),ne.setActiveSession(z.task_id),rr(z.task_id,"full",!0)}}catch(ne){console.error("[onSessionCreated] Error:",ne)}},onSessionUpdated:z=>{try{if(!kt(z,!1))return;const ne=Tt.current;if(!ne||!z.task_id)return;const le=As(z.exec_mode??ne.sessions.find(he=>he.taskId===z.task_id)?.execMode);ne.updateSession(z.task_id,{...z.exec_mode?{execMode:le}:{},...z.exec_mode||z.company_profile?{companyProfile:Dx(le,z.company_profile)}:{},..."org_id"in z||"organization_id"in z?{orgId:Ko(le,z.org_id??z.organization_id)}:{},...z.preferred_agent?{preferredAgent:Os(z.preferred_agent)}:{},...z.selected_execution_agent?{selectedExecutionAgent:Os(z.selected_execution_agent)}:{}}),(z.exec_mode==="org"||z.exec_mode==="custom")&&(z.org_id||z.organization_id)&&We(String(z.org_id??z.organization_id))}catch(ne){console.error("[onSessionUpdated] Error:",ne)}},onSessionMessage:z=>{try{if(!kt(z,!1))return;const ne=Qt.current;if(!ne)return;const le=Uf(z);console.debug("[onSessionMessage]",le.sender,le.channelId,le.content?.slice(0,60)),ne.addMessageFromBackend(le);const he=le.channelId.startsWith("session:")?le.channelId.slice(8):"";he&&le.sender!=="user"&&(Tt.current?.clearDraft(he),rr(he,"full",!0))}catch(ne){console.error("[onSessionMessage] Error:",ne)}},onSessionTitleUpdated:z=>{try{if(!kt(z,!1))return;const ne=Tt.current;ne&&ne.updateSession(z.task_id,{title:z.title});const le=_n.current;if(le){const Ce=ne?.sessions.find(Ve=>Ve.taskId===z.task_id)?.originTaskId??z.task_id,Xe=le.boards.find(Ve=>Ve.id===Ce);Xe&&Xe.name!==z.title&&le.updateBoardName(Ce,z.title)}}catch(ne){console.error("[onSessionTitleUpdated] Error:",ne)}},onSessionDeleted:z=>{try{if(!kt(z,!1))return;const ne=Tt.current;if(!ne)return;ne.activeSessionId===z.task_id&&ne.setActiveSession(null),ne.deleteSession(z.task_id);const le=_n.current;le&&le.deleteTask(z.task_id);const he=Qt.current;he&&he.removeSessionData(z.task_id)}catch(ne){console.error("[onSessionDeleted] Error:",ne)}},onProjectSwitched:z=>{if(!nr(z))return;const ne=typeof z.project_id=="string"?z.project_id.trim():"";ne&&(ht.current=ne,h(`Switching to ${ne}...`))},onProjectDeleted:z=>{const ne=er.current;ne&&ne.removeProject(z.project_id)},onOrgInfo:z=>{const ne=vN(z);ie(ne),qe(le=>le===null?ne?.org_version??0:le),(z?.project_run?.execution_model==="multi_team_org"||Array.isArray(z?.work_items)&&z.work_items.length>0)&&t.current?.collabSync(Je(),void 0,mn.current)},onRecoveryStatus:z=>{kt(z,!1)&&de(z)},onCommsState:z=>{kt(z,!1)&&Ne(z)},onCommsMessage:z=>{kt(z,!0)&&Ie(z)},onRecoveryResult:z=>{kt(z,!1)&&(z?.status==="completed"||z?.status==="cancelled")&&t.current?.recoveryAction(Je(),"scan")},onTalentList:z=>{Ge(z.templates??[]),z.talent_dir&&at(z.talent_dir)},onEmployeeDetail:z=>{wt(z)},onReorgList:z=>{pe(z.proposals??[])},onOrgConfigExport:z=>{be(z.yaml??"")},onOrgConfigImport:z=>{z.ok?(Fe(z.preview??null),jt(null),z.dry_run||(We(null),qe(null))):(jt(z.error??"Import failed"),Fe(null))},onOrgSavedList:z=>{ke(z.orgs??[]),"active_name"in z&&We(z.active_name??null)},onOrgSavedSaveAs:z=>{z.ok?(t.current?.orgSavedList(),We(z.name),qe(null),lt({kind:"ok",text:`Saved "${z.name}"`})):lt({kind:"error",text:`Save failed: ${z.error??"unknown"}`})},onOrgSavedCreate:z=>{if(Yt(!1),ln({...z,nonce:Date.now()}),z.ok){const ne=z.organization_id||z.name;We(ne),G("org"),P("custom"),t.current?.orgSavedList(),t.current?.orgInfo(),qe(null),lt({kind:"ok",text:`Created "${z.organization_name||ne}"`})}else lt({kind:"error",text:`Create failed: ${z.error??"unknown"}`})},onOrgSavedLoad:z=>{z.ok?(We(z.name),G("org"),P("custom"),t.current?.orgSavedList(),qe(null),lt({kind:"ok",text:`Loaded "${z.name}"`})):lt({kind:"error",text:`Load failed: ${z.error??"unknown"}`})},onOrgSavedDelete:z=>{z.ok?(t.current?.orgSavedList(),We(ne=>ne===z.name?(qe(null),null):ne),lt({kind:"ok",text:`Deleted "${z.name}"`})):lt({kind:"error",text:`Delete failed: ${z.error??"unknown"}`})},onMarketBrowse:z=>{et(z.presets??[])},onMarketPreview:z=>{pt(z)},onChildSessionCreated:z=>{if(!kt(z,!1))return;const ne=Tt.current;if(!ne)return;const le=Ox(z),he=Kt(z);if(he&&(ne.createSession({projectId:he,taskId:z.task_id,channelId:z.channel_id??`session:${z.task_id}`,sessionId:z.session_id,parentSessionId:z.parent_session_id,originTaskId:z.origin_task_id??z.task_id,mode:"child",orgId:String(z.org_id??z.organization_id??"").trim()||void 0,title:z.title,status:"pending",columnId:"todo",assigneeIds:z.agent_id?[z.agent_id]:[],priority:null,tags:[],createdAt:Date.now(),updatedAt:Date.now(),messageCount:0,progressLog:[],...le}),z.parent_session_id)){const Ce=ne.sessions.find(Xe=>Xe.sessionId===z.parent_session_id||Xe.taskId===z.parent_session_id);Ce&&!Ce.isCompanyRuntime&&ne.setCompanyRuntime(Ce.taskId,!0)}},onWorkItemProgress:z=>{if(!kt(z,!1))return;const ne=Tt.current;if(!ne||!z.task_id||!z.entry)return;const le=typeof z.entry.work_item_projection_id=="string"?z.entry.work_item_projection_id:"",he=le&&le!=="company_runtime"?le:void 0,Ce=typeof z.entry.runtime_task_id=="string"&&z.entry.runtime_task_id?z.entry.runtime_task_id:typeof z.runtime_task_id=="string"&&z.runtime_task_id?z.runtime_task_id:typeof z.entry.execution_turn_id=="string"&&z.entry.execution_turn_id?z.entry.execution_turn_id:typeof z.execution_turn_id=="string"&&z.execution_turn_id?z.execution_turn_id:void 0,Xe=typeof z.entry.execution_turn_id=="string"&&z.entry.execution_turn_id?z.entry.execution_turn_id:typeof z.execution_turn_id=="string"&&z.execution_turn_id?z.execution_turn_id:Ce;ne.updateSession(z.task_id,{isCompanyRuntime:!0,...he?{workItemProjectionId:he}:{}});const Ve=_n.current;Ve&&he&&Ve.updateTask(z.task_id,{workItemProjectionId:he}),ne.appendWorkItemProgress(z.task_id,{timestamp:z.entry.timestamp*1e3,type:z.entry.type,workItemProjectionId:he,workItemTurnType:typeof z.entry.work_item_turn_type=="string"?z.entry.work_item_turn_type:void 0,workItemProjectionTitle:typeof z.entry.work_item_projection_title=="string"?z.entry.work_item_projection_title:void 0,runtimeTaskId:Ce,executionTurnId:Xe,roleName:z.entry.role_name,detail:z.entry.detail})}});return t.current=Z,Z.connect(),()=>{Z.disconnect();for(const z of In.current)clearTimeout(z);In.current.clear();for(const z of Re.current.values())clearTimeout(z);Re.current.clear(),qt.current!==null&&(window.clearTimeout(qt.current),qt.current=null),zn.current.clear(),sn.current!==null&&(window.clearTimeout(sn.current),sn.current=null)}},[r]),C.useEffect(()=>{const Z=()=>{if(typeof document<"u"&&document.visibilityState==="hidden")return;const ne=Date.now();ne-Jt.current<1500||(Jt.current=ne,t.current?.collabSync(Je(),void 0,mn.current))},z=()=>{document.visibilityState==="visible"&&Z()};return window.addEventListener("focus",Z),document.addEventListener("visibilitychange",z),()=>{window.removeEventListener("focus",Z),document.removeEventListener("visibilitychange",z)}},[Je]),C.useEffect(()=>{if(!Ln)return;const Z=setTimeout(()=>lt(null),3e3);return()=>clearTimeout(Z)},[Ln]);const Pr=C.useCallback(()=>{t.current?.orgSavedList()},[]),Ul=C.useCallback((Z,z)=>{t.current?.orgSavedSaveAs(Z,z)},[]),ql=C.useCallback((Z,z)=>{Yt(!0),ln(null),t.current?.orgSavedCreate(Z,z)},[]),fs=C.useCallback(Z=>{t.current?.orgSavedLoad(Z)},[]),Hs=C.useCallback(Z=>{t.current?.orgSavedDelete(Z)},[]),Zu=C.useCallback(()=>{G("company"),P("corporate"),qe(null),t.current?.setExecutionMode("company","corporate",K),t.current?.orgInfo()},[K]);C.useEffect(()=>{if(!Y)return;const Z=Y;e.current.setAgentBubble(Z,"Done!");const z=setTimeout(()=>{In.current.delete(z),e.current.setAgentBubble(Z,null)},3e3);In.current.add(z),Q(null)},[Y]),C.useCallback((Z,z,ne)=>{const le=ae.tasks.find(he=>he.id===Z);for(const he of z)e.current.sendToSeat(he),e.current.setAgentActive(he,!0),e.current.setAgentBubble(he,`Task: ${ne.slice(0,22)}`),t.current?.assignTaskToAgent(Je(),Z,he,ne);if(le){const he=z.map(Ce=>B.find(Xe=>Xe.agent_id===Ce)?.name??Ce);vJ(ve,le,he)}S(he=>he+1)},[ae.tasks,ve,B,Je]);const da=C.useMemo(()=>{const Z=p?Object.keys(p.agents).length:0,z=p?.skills.total??0;return{totalAgents:Z,totalSkills:z}},[p]),Ri=C.useMemo(()=>{const Z=e.current.getCharacterCards();return(O?Z:Z.filter(ne=>!ne.isSubagent)).slice().sort((ne,le)=>ne.displayName.localeCompare(le.displayName))},[O,k]),Wi=C.useMemo(()=>Zn(),[k]),Ai=C.useMemo(()=>{const Z={};for(const z of Ri)z.officeId&&(Z[z.id]=z.officeId);return Z},[Ri]),[Gl,ms]=C.useState(null),[gi,fa]=C.useState(""),No=Z=>{gi.trim()&&(e.current.renameOffice(Z,gi.trim()),S(z=>z+1)),ms(null)},Wl=(Z,z)=>{e.current.assignAgentToOffice(z,Z),t.current?.moveAgent(z,Z),S(ne=>ne+1)},ma=(Z,z)=>{e.current.changeAgentSeat(Z,z),S(ne=>ne+1)},hr=Ri.find(Z=>Z.id===b)??null,Qu=C.useMemo(()=>hr?e.current.getSeatsForOffice(hr.officeId):[],[hr?.officeId,k]),Cr=C.useMemo(()=>{const Z=x.slice(-40);return{trace:Z.some(z=>z.type==="tool_start"||z.type==="tool_done"),reflect:Z.some(z=>z.type==="reflect_start"||z.type==="reflect_done"),synthesize:Z.some(z=>z.type==="skill_synthesized")}},[x]),ps=C.useMemo(()=>["all",...Array.from(new Set(x.map(z=>z.type)))],[x]),pa=C.useMemo(()=>(M==="all"?x:x.filter(z=>z.type===M)).slice().reverse(),[M,x]),Io=()=>{const Z=o.trim();!Z||Z===r||i(Z)},Yl=C.useCallback(Z=>{w(Z),S(z=>z+1)},[]),Xl=C.useCallback((Z,z,ne,le)=>{const he=Ae.sessions.find(Ar=>Ar.taskId===Z),Ce=As(z),Xe=Jc(he?.companyProfile??J),Ve=Ce==="org"?"custom":"corporate",Lt=String(he?.orgId??Oe??"").trim(),on=Ko(Ce,le??he?.orgId??Oe),zt=As(he?.execMode),Ot=Jc(J);if(zt===Ce&&Xe===Ve&&Lt===String(on??"").trim()&&q===Ce&&Ot===Ve)return;Ae.updateSession(Z,{execMode:Ce,companyProfile:Ve,orgId:on,preferredAgent:he?.preferredAgent??K}),G(Ce),P(Ve),Ce==="org"&&on&&We(on);const Bt=he?.preferredAgent??K,Jr=Ce==="task"?void 0:Ve;t.current?.sessionUpdateConfig(Je(),Z,Ce,Jr,Bt,on),t.current?.setExecutionMode(Ce,Jr,Bt,on)},[Ae,q,J,K,Oe,Je]),Kl=C.useCallback((Z,z)=>{const ne=Ae.sessions.find(Lt=>Lt.taskId===Z),le=Os(z),he=As(ne?.execMode),Ce=he==="org"?"custom":"corporate";Ae.updateSession(Z,{preferredAgent:le,selectedExecutionAgent:le}),ee(le);const Xe=he==="task"?void 0:Ce,Ve=Ko(he,ne?.orgId??Oe);t.current?.sessionUpdateConfig(Je(),Z,he,Xe,le,Ve),t.current?.setExecutionMode(he,Xe,le,Ve)},[Ae,J,Oe,Je]),To=C.useCallback((Z,z,ne)=>{if(ht.current||Vt.current)return;const le=Je();Pe(le);const he=As(Z),Ce=he==="org"?"custom":he==="company"?"corporate":void 0;t.current?.createSession(le,void 0,he,Ce,K,Ko(he,ne??Oe)),W("workspace")},[Je,Pe,K,Oe]),hs=C.useCallback((Z,z)=>{const ne=Ae.sessions.find(Ce=>Ce.taskId===Z),le=ne?.resumeParentSessionId??ne?.parentSessionId??ne?.sessionId,he=ne?.resumeParentTaskId??(le?Ae.sessions.find(Ce=>Ce.sessionId===le&&!Ce.parentSessionId)?.taskId:void 0)??Z;for(const Ce of Ae.sessions)(Ce.taskId===Z||Ce.taskId===he||le&&(Ce.parentSessionId===le||Ce.sessionId===le))&&Ae.updateSession(Ce.taskId,{...z,resumeParentTaskId:he,resumeParentSessionId:le})},[Ae]),Ju=C.useCallback(Z=>{const z=Ae.sessions.find(le=>le.taskId===Z);(z?.execMode==="company"||z?.execMode==="org"||z?.execMode==="custom"||z?.isCompanyRuntime||z?.parentSessionId||z?.companyProfile)&&hs(Z,{runtimeControlState:"suspending",canStop:!1,canResume:!1}),t.current?.sessionStop(Je(),Z)},[Ae.sessions,hs,Je]),pp=C.useCallback(Z=>{const z=Ae.sessions.find(le=>le.taskId===Z);(z?.execMode==="company"||z?.execMode==="org"||z?.execMode==="custom"||z?.isCompanyRuntime||z?.parentSessionId||z?.companyProfile)&&hs(Z,{runtimeControlState:"resuming",canStop:!1,canResume:!1}),t.current?.sessionResume(Je(),Z)},[Ae.sessions,hs,Je]);C.useCallback((Z,z,ne)=>{const le=As(Z),he=le==="org"?"custom":"corporate",Ce=Ko(le,ne??Oe);G(le),P(he),Ce&&We(Ce),t.current?.setExecutionMode(le,le==="task"?void 0:he,K,Ce)},[J,K,Oe]);const Fs=q==="org",hp=q==="task"?"task":q==="org"?`company/${Oe??"org"}`:`company/${J}`;return u.jsxs("div",{className:`app-shell theme-${j}`,children:[Ln&&u.jsx("div",{className:`org-toast org-toast--${Ln.kind}`,role:"status","aria-live":"polite",children:Ln.text}),u.jsxs("header",{className:"topbar",children:[u.jsxs("div",{className:"topbar-left",children:[u.jsxs("span",{className:"logo-text",children:["Open",u.jsx("span",{className:"logo-accent",children:"OPC"})]}),u.jsx("div",{className:`conn-dot ${UJ(c)}`,title:`${c}${m?` — ${m}`:""} -${r}`}),u.jsx(XV,{projects:Le.projects,activeId:Le.activeProjectId,onSelect:Z=>{const z=dt(Z);t.current?.switchProject(Z,z)},onCreate:Z=>{t.current?.createProject(Z)},onDelete:Z=>t.current?.deleteProject(Z)})]}),u.jsxs("div",{className:"topbar-center",children:[u.jsxs("div",{className:"page-nav",children:[u.jsxs("button",{className:`page-nav-btn${$==="workspace"?" active":""}`,onClick:()=>W("workspace"),children:["Workspace",(()=>{const Z=ve.channels.reduce((z,ne)=>z+ve.getUnreadCount(ne.id),0);return Z>0?u.jsx("span",{className:"nav-unread-badge",children:Z>99?"99+":Z}):null})()]}),u.jsx("button",{className:`page-nav-btn${$==="office"?" active":""}`,onClick:()=>W("office"),children:"Office"}),u.jsx("button",{className:`page-nav-btn${$==="org"?" active":""}`,onClick:()=>W("org"),children:"Org"})]}),u.jsxs("div",{className:"stat-chips",children:[u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:da.totalAgents})," agents"]}),u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:da.totalSkills})," skills"]}),u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:ae.getOpenTaskCount()})," tasks"]})]})]}),u.jsxs("div",{className:"topbar-right",children:[u.jsxs("select",{className:"theme-select",value:Gn,title:"Outdoor lighting override",onChange:Z=>{const z=Z.target.value;mr(z);try{z==="auto"?(localStorage.removeItem("opc_outdoor_override"),localStorage.removeItem("opc_outdoor_day"),localStorage.removeItem("opc_outdoor_night")):(localStorage.setItem("opc_outdoor_override",z),localStorage.removeItem("opc_outdoor_day"),localStorage.removeItem("opc_outdoor_night"))}catch{}e.current.syncOutdoorLighting()},children:[u.jsx("option",{value:"auto",children:"Outdoor auto"}),u.jsx("option",{value:"day",children:"Outdoor day"}),u.jsx("option",{value:"night",children:"Outdoor night"})]}),u.jsxs("select",{className:"theme-select",value:j,onChange:Z=>N(Z.target.value),children:[u.jsx("option",{value:"midnight",children:"Midnight"}),u.jsx("option",{value:"neon",children:"Neon"}),u.jsx("option",{value:"paper",children:"Paper"}),u.jsx("option",{value:"retro",children:"Retro"}),u.jsx("option",{value:"terminal",children:"Terminal"}),u.jsx("option",{value:"cozy",children:"Cozy"}),u.jsx("option",{value:"openopc",children:"OpenOPC"})]}),u.jsx("button",{className:`icon-btn ${H?"active":""}`,onClick:()=>U(Z=>!Z),title:"Developer Tools",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[u.jsx("path",{d:"M5.5 2L2 5.5 5.5 9",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M10.5 7L14 10.5 10.5 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]})]}),$==="workspace"&&u.jsx(xV,{boardStore:ae,chatStore:ve,sessionStore:Ae,agents:B,officeMap:Ai,execMode:q,companyProfile:J,taskPreferredAgent:K,projectId:Le.activeProjectId,orgInfoData:te,onNavigateToOrg:()=>W("org"),savedOrgsList:an,activeSavedOrg:Oe,onSavedOrgsList:Pr,onSavedOrgLoad:fs,recoveryStatus:se,onRecoveryResume:Z=>t.current?.recoveryAction(Je(),"resume",Z),onRecoveryCancel:Z=>t.current?.recoveryAction(Je(),"cancel",Z),commsState:oe,commsMessage:Ee,onCommsRefresh:Z=>{const{project_id:z,...ne}=Z??{};t.current?.commsState(Je(),ne)},onCommsReadMessage:Z=>t.current?.commsReadMessage(Je(),Z),onRunTask:(Z,z,ne,le,he)=>{t.current?.send({type:"run_task",project_id:Je(),task_id:Z,title:z,description:ne,mode:le,profile:he})},onCreateTask:(Z,z,ne,le)=>{t.current?.send({type:"kanban_create_task",project_id:Je(),title:Z,board_id:z,column_id:ne,task_id:le})},onMoveTask:(Z,z)=>{t.current?.send({type:"kanban_move_task",project_id:Je(),task_id:Z,column_id:z})},onCreateSession:()=>{if(ht.current||Vt.current)return;const Z=Je();Pe(Z),t.current?.createSession(Z,void 0,q,Dx(q),K,Ko(q,Oe))},onSessionSend:(Z,z,ne,le)=>t.current?.sessionSend(Je(),Z,z,ne,le),onSecretarySend:Z=>t.current?.secretarySend(Je(),Z),onDeleteSession:Z=>t.current?.deleteSession(Je(),Z),onTitleChange:(Z,z)=>t.current?.sessionUpdateTitle(Je(),Z,z),onSessionConfigChange:Xl,onSessionTaskAgentChange:Kl,onContinueInNewChat:To,onSessionStop:Ju,onSessionResume:pp,onSessionComplete:Z=>t.current?.sessionComplete(Je(),Z),onLoadSessionDetail:(Z,z)=>{const ne=t.current;if(ne)return ne.sessionDetail(Je(),Z,{...z,include:z?.detailLevel==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:mn.current}).then(le=>{if(le.ok===!1)throw new Error(String(le.error??"session_detail failed"))})},onOpenExecutionPanel:Z=>gt(Z),onCollabSync:()=>t.current?.collabSync(Je(),void 0,mn.current)}),$==="org"&&u.jsx("div",{className:"org-page",children:u.jsx(xJ,{data:te,sessionRecruitmentByRole:ct,talents:Be,employeeDetail:Pt,reorgProposals:Ct,isCustomMode:Fs,onRequestData:()=>t.current?.orgInfo(),onRequestTalents:()=>t.current?.talentList(),onRequestEmployeeDetail:Z=>t.current?.employeeDetail(Z),onHireTalent:(Z,z)=>{Cn(Z),t.current?.talentHire(Z,z,void 0,te?.organization_id||Oe||void 0)},hiringTemplateId:bt,onImportEmployee:Z=>t.current?.importEmployeeAsAgent(Z),onRequestReorgList:()=>t.current?.reorgList(),onReorgDecide:(Z,z,ne)=>t.current?.reorgDecide(Z,z,ne),onMarketExport:Z=>t.current?.marketExport(Z),onMarketInstall:(Z,z)=>t.current?.marketInstall(Z,z),onMarketUninstall:Z=>t.current?.marketUninstall(Z),marketPresets:$e,marketPreviewData:tt,onMarketBrowse:()=>t.current?.marketBrowse(),onMarketPreview:Z=>t.current?.marketPreview(Z),onMarketApplyPreset:(Z,z)=>t.current?.marketApplyPreset(Z,z),onMarketClearPreview:()=>pt(null),onAddRole:(Z,z,ne,le,he)=>t.current?.addRole(Z,z,ne,le,he),onBulkAddRoles:Z=>t.current?.bulkAddRoles(Z),onUpdateRole:(Z,z)=>t.current?.updateRole(Z,z),onDeleteRole:Z=>t.current?.deleteRole(Z),onUpdateOrgStrategy:Z=>t.current?.updateOrgStrategy(Z),onUpdateRuntimePolicy:Z=>t.current?.updateRuntimePolicy(Z),onResetArchitecture:()=>t.current?.resetArchitecture(),onConfigExport:()=>t.current?.orgConfigExport(),onConfigImport:(Z,z)=>t.current?.orgConfigImport(Z,z),configExportYaml:me,configImportPreview:Me,configImportError:He,onSavedOrgsList:Pr,onSavedOrgSaveAs:Ul,onSavedOrgCreate:ql,onSavedOrgLoad:fs,onSavedOrgDelete:Hs,savedOrgsList:an,activeSavedOrg:Oe,activeSavedOrgVersionAtLoad:Ze,orgCreatePending:ut,orgCreateResult:Nn,onSelectCorporate:Zu})}),$==="mapEditor"&&u.jsx("div",{className:"editor-page",children:u.jsx(t4,{bridge:e.current})}),u.jsxs("main",{className:`main-grid${$!=="office"?" hidden":""}${L?" sidebar-collapsed":""}`,children:[u.jsxs("section",{className:"canvas-wrap",children:[u.jsx(QM,{bridge:e.current,active:$==="office"}),u.jsx("button",{className:"canvas-float-btn",onClick:()=>R(Z=>!Z),title:O?"Hide sub-agents":"Show sub-agents",children:O?"👥":"👤"}),u.jsx("button",{className:"sidebar-collapse-btn",onClick:D,title:L?"Show side panel":"Hide side panel","aria-label":L?"Show side panel":"Hide side panel",children:u.jsx("span",{className:"collapse-glyph",children:L?"❮":"❯"})})]}),u.jsx("aside",{className:"sidebar",children:u.jsx("div",{className:"sidebar-body",children:u.jsxs("div",{className:"team-panel",children:[u.jsxs("div",{className:"mode-info-bar",children:[u.jsx("span",{className:"mode-badge",children:q==="company"?`${q}/${J}`:hp}),Fs?u.jsxs("span",{className:"mode-hint",children:["Manage your team in the ",u.jsx("b",{children:"Org"})," tab"]}):u.jsxs("span",{className:"mode-hint",children:["Switch to ",u.jsx("b",{children:"Org"})," mode to create or manage agents"]})]}),u.jsxs("div",{className:"section-label",children:["Offices ",u.jsx("span",{className:"count-badge",children:Wi.length})]}),u.jsx("div",{className:"office-cards",children:Wi.map(Z=>{const z=Jj(Z.id).length,ne=Ri.filter(he=>he.officeId===Z.id),le=Ri.filter(he=>he.officeId!==Z.id&&!he.isSubagent);return u.jsxs("div",{className:"office-card",onClick:()=>e.current.panToOffice(Z.id),children:[u.jsxs("div",{className:"office-card-header",children:[Gl===Z.id?u.jsx("input",{className:"office-name-input",value:gi,onChange:he=>fa(he.target.value),onBlur:()=>No(Z.id),onKeyDown:he=>{he.key==="Enter"&&No(Z.id),he.key==="Escape"&&ms(null)},autoFocus:!0,onClick:he=>he.stopPropagation()}):u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"office-name",children:Z.name}),u.jsx("button",{className:"office-edit-btn",title:"Rename",onClick:he=>{he.stopPropagation(),ms(Z.id),fa(Z.name)},children:"✎"})]}),u.jsxs("span",{className:"office-capacity",children:[ne.length,"/",z]})]}),u.jsxs("div",{className:"office-agents",children:[ne.map(he=>u.jsx("span",{className:"office-agent-chip",title:`${he.displayName} — ${he.seatId??"no seat"}`,onClick:Ce=>{Ce.stopPropagation(),Yl(he.id)},children:he.displayName.slice(0,8)},he.id)),Fs&&ne.length<z&&le.length>0&&u.jsxs("select",{className:"assign-dropdown",value:"",onClick:he=>he.stopPropagation(),onChange:he=>{he.target.value&&Wl(Z.id,he.target.value)},children:[u.jsx("option",{value:"",children:"+ Move here"}),le.map(he=>u.jsxs("option",{value:he.id,children:[he.displayName," (",Wi.find(Ce=>Ce.id===Ri.find(Xe=>Xe.id===he.id)?.officeId)?.name??"?",")"]},he.id))]})]})]},Z.id)})}),u.jsxs("div",{className:"section-label",children:["Active Agents ",u.jsx("span",{className:"count-badge",children:B.length})]}),u.jsxs("div",{className:"agent-list",children:[B.map(Z=>u.jsxs("div",{className:`agent-row ${b===Z.agent_id?"selected":""}`,children:[u.jsxs("button",{className:"agent-row-main",onClick:()=>Yl(Z.agent_id),children:[u.jsx("span",{className:`dot ${Z.status}`}),u.jsxs("div",{className:"agent-info",children:[u.jsx("span",{className:"agent-name",children:Z.name}),u.jsx("span",{className:"agent-spec",children:Z.specialties.slice(0,2).join(" · ")||"general"})]})]}),Fs&&(Ut===Z.agent_id?u.jsx("span",{className:"agent-del",style:{pointerEvents:"none"},children:u.jsx("span",{className:"spinner-inline"})}):fr===Z.agent_id?u.jsxs("span",{className:"del-confirm",children:[u.jsx("span",{className:"del-confirm-label",children:"Delete?"}),u.jsx("button",{className:"del-confirm-yes",onClick:()=>{hn(Z.agent_id),Xt(null),t.current?.deleteAgent(Z.agent_id)},children:"Yes"}),u.jsx("button",{className:"del-confirm-no",onClick:()=>Xt(null),children:"No"})]}):u.jsx("button",{className:"agent-del",title:`Remove ${Z.name}`,onClick:()=>Xt(Z.agent_id),children:"×"}))]},Z.agent_id)),B.length===0&&u.jsx("div",{className:"empty-state",children:"No agents yet — click a template above to spawn one."})]}),hr&&u.jsxs("div",{className:"agent-detail",children:[u.jsx("div",{className:"agent-detail-name",children:hr.displayName}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"State"}),u.jsx("span",{className:"detail-value",children:hr.state})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Tool"}),u.jsx("span",{className:"detail-value",children:hr.currentTool??"—"})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Task"}),u.jsx("span",{className:"detail-value",children:hr.taskSummary??"—"})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Office"}),u.jsx("select",{className:"detail-select",value:hr.officeId,onChange:Z=>{Wl(Z.target.value,hr.id)},disabled:!Fs,children:Wi.map(Z=>u.jsx("option",{value:Z.id,children:Z.name},Z.id))})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Seat"}),u.jsxs("select",{className:"detail-select",value:hr.seatId??"",onChange:Z=>{Z.target.value&&ma(hr.id,Z.target.value)},disabled:!Fs,children:[u.jsx("option",{value:"",children:"—"}),Qu.map(Z=>{const z=Z.id.replace(/^office-\d+-/,"").replace("-"," ").replace(/\b\w/g,le=>le.toUpperCase()),ne=Z.assigned&&Z.assignedTo!==hr.id;return u.jsxs("option",{value:Z.id,disabled:ne,children:[z,ne?` (${Z.assignedTo})`:Z.assignedTo===hr.id?" ✓":""]},Z.id)})]})]})]}),Ri.length>B.length&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"section-label",children:["Characters",u.jsx("button",{className:"inline-btn",onClick:()=>R(Z=>!Z),children:O?"hide sub":"show sub"})]}),u.jsx("div",{className:"agent-list",children:Ri.filter(Z=>!B.some(z=>z.agent_id===Z.id)).map(Z=>u.jsxs("button",{className:`agent-row-simple ${b===Z.id?"selected":""}`,onClick:()=>Yl(Z.id),children:[Z.isSubagent&&u.jsx("span",{className:"sub-badge",children:"SUB"}),u.jsx("span",{className:"agent-name",children:Z.displayName}),u.jsxs("span",{className:"agent-spec",children:[Z.state,Z.currentTool?` · ${Z.currentTool}`:""]})]},Z.id))})]})]})})})]}),H&&u.jsxs("div",{className:"dev-overlay",children:[u.jsxs("div",{className:"dev-header",children:[u.jsx("span",{className:"dev-title",children:"Developer Tools"}),u.jsx("button",{className:"icon-btn",onClick:()=>U(!1),children:"✕"})]}),u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Connection"}),u.jsxs("div",{className:"input-row",children:[u.jsx("input",{value:o,onChange:Z=>a(Z.target.value),placeholder:"ws://..."}),u.jsx("button",{className:"send-btn",onClick:Io,children:"↩"})]})]}),u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Evolution Pipeline"}),u.jsx("div",{className:"evo-pipeline",children:["Trace","Reflect","Synthesize","Practice","Lifecycle"].map((Z,z)=>{const ne=Z.toLowerCase(),le=ne in Cr?Cr[ne]:!1;return u.jsxs("div",{className:"evo-phase-group",children:[z>0&&u.jsx("div",{className:"evo-connector"}),u.jsxs("div",{className:`evo-node ${le?"active":""}`,children:[u.jsx("div",{className:"evo-dot"}),u.jsx("span",{className:"evo-label",children:Z})]})]},Z)})}),u.jsx("div",{className:"list",children:(p?.skills.recent??[]).slice(-6).reverse().map((Z,z)=>u.jsxs("div",{className:"list-row",children:[u.jsx("span",{children:Z.skill_name}),u.jsx("span",{className:"muted mono",children:Z.version})]},`${Z.skill_name}-${Z.timestamp}-${z}`))})]}),u.jsxs("div",{className:"dev-group",children:[u.jsxs("div",{className:"dev-label",children:["Events",u.jsx("select",{className:"inline-select",value:M,onChange:Z=>A(Z.target.value),children:ps.map(Z=>u.jsx("option",{value:Z,children:Z},Z))})]}),u.jsx("div",{className:"event-log",children:pa.slice(0,30).map(Z=>u.jsxs("div",{className:"log-row",children:[u.jsx("span",{className:"log-time",children:new Date(Z.timestamp*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),u.jsx("span",{className:"log-type",children:Z.type}),u.jsx("span",{className:"log-agent",children:Z.agent_id}),u.jsx("span",{className:"log-data",children:qJ(Z.data)})]},Z.event_id))})]}),Object.keys(p?.channels??{}).length>0&&u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Channels"}),Object.entries(p?.channels??{}).map(([Z,z])=>u.jsxs("div",{className:"list-row",children:[u.jsx("span",{children:Z}),u.jsx("span",{className:"muted",children:String(z.last_type??"idle")})]},Z))]})]}),vr&&u.jsx("div",{className:_t==="error"?"toast-error":"toast-success",children:vr}),u.jsx(JJ,{taskId:qn,sessions:Ae.sessions,agents:B,onClose:()=>gt(null)})]})}class tee extends It.Component{constructor(){super(...arguments),this.state={error:null,info:""}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] React crashed:",t,n),this.setState({info:n.componentStack??""})}render(){return this.state.error?u.jsxs("div",{style:{padding:32,color:"#ff6b6b",background:"#1a1a2e",minHeight:"100vh",fontFamily:"monospace"},children:[u.jsx("h2",{children:"UI Error — React crashed"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap",fontSize:13},children:this.state.error.message}),u.jsxs("details",{open:!0,style:{marginTop:12,fontSize:12,color:"#ccc"},children:[u.jsx("summary",{children:"Stack trace"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.error.stack})]}),this.state.info&&u.jsxs("details",{style:{marginTop:12,fontSize:12,color:"#888"},children:[u.jsx("summary",{children:"Component stack"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.info})]}),u.jsx("button",{onClick:()=>{this.setState({error:null,info:""})},style:{marginTop:16,padding:"8px 16px",background:"#6366f1",color:"#fff",border:"none",borderRadius:6,cursor:"pointer"},children:"Try to recover"})]}):this.props.children}}window.addEventListener("error",e=>{console.error("[Global] Uncaught error:",e.error??e.message)});window.addEventListener("unhandledrejection",e=>{console.error("[Global] Unhandled promise rejection:",e.reason)});const Mv=document.getElementById("root");if(!Mv)throw document.body.innerHTML='<h1 style="color:red">Root element not found</h1>',new Error("Root element #root not found");try{K3.createRoot(Mv).render(u.jsx(tee,{children:u.jsx(eee,{})}))}catch(e){console.error("React render error:",e),Mv.innerHTML=`<h1 style="color:red">React Error: ${e}</h1>`} diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-Cson66Y4.js b/opc/plugins/office_ui/frontend_dist/assets/index-Cson66Y4.js new file mode 100644 index 0000000..548b9cf --- /dev/null +++ b/opc/plugins/office_ui/frontend_dist/assets/index-Cson66Y4.js @@ -0,0 +1,155 @@ +import{g as da,r as B3}from"./phaser-DFK5Ua9d.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&i(a)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function i(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();var lg={exports:{}},Mc={};var vk;function $3(){if(vk)return Mc;vk=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(i,r,o){var a=null;if(o!==void 0&&(a=""+o),r.key!==void 0&&(a=""+r.key),"key"in r){o={};for(var c in r)c!=="key"&&(o[c]=r[c])}else o=r;return r=o.ref,{$$typeof:e,type:i,key:a,ref:r!==void 0?r:null,props:o}}return Mc.Fragment=t,Mc.jsx=n,Mc.jsxs=n,Mc}var bk;function H3(){return bk||(bk=1,lg.exports=$3()),lg.exports}var u=H3(),cg={exports:{}},St={};var _k;function F3(){if(_k)return St;_k=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),a=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),p=Symbol.for("react.activity"),g=Symbol.iterator;function x(U){return U===null||typeof U!="object"?null:(U=g&&U[g]||U["@@iterator"],typeof U=="function"?U:null)}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,k={};function w(U,Z,F){this.props=U,this.context=Z,this.refs=k,this.updater=F||v}w.prototype.isReactComponent={},w.prototype.setState=function(U,Z){if(typeof U!="object"&&typeof U!="function"&&U!=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,U,Z,"setState")},w.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};function S(){}S.prototype=w.prototype;function j(U,Z,F){this.props=U,this.context=Z,this.refs=k,this.updater=F||v}var N=j.prototype=new S;N.constructor=j,b(N,w.prototype),N.isPureReactComponent=!0;var O=Array.isArray;function R(){}var D={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function L(U,Z,F){var K=F.ref;return{$$typeof:e,type:U,key:Z,ref:K!==void 0?K:null,props:F}}function M(U,Z){return L(U.type,Z,U.props)}function A(U){return typeof U=="object"&&U!==null&&U.$$typeof===e}function B(U){var Z={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(F){return Z[F]})}var W=/\/+/g;function P(U,Z){return typeof U=="object"&&U!==null&&U.key!=null?B(""+U.key):Z.toString(36)}function G(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status=="string"?U.then(R,R):(U.status="pending",U.then(function(Z){U.status==="pending"&&(U.status="fulfilled",U.value=Z)},function(Z){U.status==="pending"&&(U.status="rejected",U.reason=Z)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function $(U,Z,F,K,ee){var te=typeof U;(te==="undefined"||te==="boolean")&&(U=null);var se=!1;if(U===null)se=!0;else switch(te){case"bigint":case"string":case"number":se=!0;break;case"object":switch(U.$$typeof){case e:case t:se=!0;break;case h:return se=U._init,$(se(U._payload),Z,F,K,ee)}}if(se)return ee=ee(U),se=K===""?"."+P(U,0):K,O(ee)?(F="",se!=null&&(F=se.replace(W,"$&/")+"/"),$(ee,Z,F,"",function(ie){return ie})):ee!=null&&(A(ee)&&(ee=M(ee,F+(ee.key==null||U&&U.key===ee.key?"":(""+ee.key).replace(W,"$&/")+"/")+se)),Z.push(ee)),1;se=0;var ae=K===""?".":K+":";if(O(U))for(var ue=0;ue<U.length;ue++)K=U[ue],te=ae+P(K,ue),se+=$(K,Z,F,te,ee);else if(ue=x(U),typeof ue=="function")for(U=ue.call(U),ue=0;!(K=U.next()).done;)K=K.value,te=ae+P(K,ue++),se+=$(K,Z,F,te,ee);else if(te==="object"){if(typeof U.then=="function")return $(G(U),Z,F,K,ee);throw Z=String(U),Error("Objects are not valid as a React child (found: "+(Z==="[object Object]"?"object with keys {"+Object.keys(U).join(", ")+"}":Z)+"). If you meant to render a collection of children, use an array instead.")}return se}function q(U,Z,F){if(U==null)return U;var K=[],ee=0;return $(U,K,"","",function(te){return Z.call(F,te,ee++)}),K}function Y(U){if(U._status===-1){var Z=U._result;Z=Z(),Z.then(function(F){(U._status===0||U._status===-1)&&(U._status=1,U._result=F)},function(F){(U._status===0||U._status===-1)&&(U._status=2,U._result=F)}),U._status===-1&&(U._status=0,U._result=Z)}if(U._status===1)return U._result.default;throw U._result}var Q=typeof reportError=="function"?reportError:function(U){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var Z=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof U=="object"&&U!==null&&typeof U.message=="string"?String(U.message):String(U),error:U});if(!window.dispatchEvent(Z))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",U);return}console.error(U)},V={map:q,forEach:function(U,Z,F){q(U,function(){Z.apply(this,arguments)},F)},count:function(U){var Z=0;return q(U,function(){Z++}),Z},toArray:function(U){return q(U,function(Z){return Z})||[]},only:function(U){if(!A(U))throw Error("React.Children.only expected to receive a single React element child.");return U}};return St.Activity=p,St.Children=V,St.Component=w,St.Fragment=n,St.Profiler=r,St.PureComponent=j,St.StrictMode=i,St.Suspense=d,St.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=D,St.__COMPILER_RUNTIME={__proto__:null,c:function(U){return D.H.useMemoCache(U)}},St.cache=function(U){return function(){return U.apply(null,arguments)}},St.cacheSignal=function(){return null},St.cloneElement=function(U,Z,F){if(U==null)throw Error("The argument must be a React element, but you passed "+U+".");var K=b({},U.props),ee=U.key;if(Z!=null)for(te in Z.key!==void 0&&(ee=""+Z.key),Z)!I.call(Z,te)||te==="key"||te==="__self"||te==="__source"||te==="ref"&&Z.ref===void 0||(K[te]=Z[te]);var te=arguments.length-2;if(te===1)K.children=F;else if(1<te){for(var se=Array(te),ae=0;ae<te;ae++)se[ae]=arguments[ae+2];K.children=se}return L(U.type,ee,K)},St.createContext=function(U){return U={$$typeof:a,_currentValue:U,_currentValue2:U,_threadCount:0,Provider:null,Consumer:null},U.Provider=U,U.Consumer={$$typeof:o,_context:U},U},St.createElement=function(U,Z,F){var K,ee={},te=null;if(Z!=null)for(K in Z.key!==void 0&&(te=""+Z.key),Z)I.call(Z,K)&&K!=="key"&&K!=="__self"&&K!=="__source"&&(ee[K]=Z[K]);var se=arguments.length-2;if(se===1)ee.children=F;else if(1<se){for(var ae=Array(se),ue=0;ue<se;ue++)ae[ue]=arguments[ue+2];ee.children=ae}if(U&&U.defaultProps)for(K in se=U.defaultProps,se)ee[K]===void 0&&(ee[K]=se[K]);return L(U,te,ee)},St.createRef=function(){return{current:null}},St.forwardRef=function(U){return{$$typeof:c,render:U}},St.isValidElement=A,St.lazy=function(U){return{$$typeof:h,_payload:{_status:-1,_result:U},_init:Y}},St.memo=function(U,Z){return{$$typeof:m,type:U,compare:Z===void 0?null:Z}},St.startTransition=function(U){var Z=D.T,F={};D.T=F;try{var K=U(),ee=D.S;ee!==null&&ee(F,K),typeof K=="object"&&K!==null&&typeof K.then=="function"&&K.then(R,Q)}catch(te){Q(te)}finally{Z!==null&&F.types!==null&&(Z.types=F.types),D.T=Z}},St.unstable_useCacheRefresh=function(){return D.H.useCacheRefresh()},St.use=function(U){return D.H.use(U)},St.useActionState=function(U,Z,F){return D.H.useActionState(U,Z,F)},St.useCallback=function(U,Z){return D.H.useCallback(U,Z)},St.useContext=function(U){return D.H.useContext(U)},St.useDebugValue=function(){},St.useDeferredValue=function(U,Z){return D.H.useDeferredValue(U,Z)},St.useEffect=function(U,Z){return D.H.useEffect(U,Z)},St.useEffectEvent=function(U){return D.H.useEffectEvent(U)},St.useId=function(){return D.H.useId()},St.useImperativeHandle=function(U,Z,F){return D.H.useImperativeHandle(U,Z,F)},St.useInsertionEffect=function(U,Z){return D.H.useInsertionEffect(U,Z)},St.useLayoutEffect=function(U,Z){return D.H.useLayoutEffect(U,Z)},St.useMemo=function(U,Z){return D.H.useMemo(U,Z)},St.useOptimistic=function(U,Z){return D.H.useOptimistic(U,Z)},St.useReducer=function(U,Z,F){return D.H.useReducer(U,Z,F)},St.useRef=function(U){return D.H.useRef(U)},St.useState=function(U){return D.H.useState(U)},St.useSyncExternalStore=function(U,Z,F){return D.H.useSyncExternalStore(U,Z,F)},St.useTransition=function(){return D.H.useTransition()},St.version="19.2.4",St}var kk;function Hl(){return kk||(kk=1,cg.exports=F3()),cg.exports}var C=Hl();const Nt=da(C);var ug={exports:{}},Dc={},dg={exports:{}},fg={};var Sk;function V3(){return Sk||(Sk=1,(function(e){function t($,q){var Y=$.length;$.push(q);e:for(;0<Y;){var Q=Y-1>>>1,V=$[Q];if(0<r(V,q))$[Q]=q,$[Y]=V,Y=Q;else break e}}function n($){return $.length===0?null:$[0]}function i($){if($.length===0)return null;var q=$[0],Y=$.pop();if(Y!==q){$[0]=Y;e:for(var Q=0,V=$.length,U=V>>>1;Q<U;){var Z=2*(Q+1)-1,F=$[Z],K=Z+1,ee=$[K];if(0>r(F,Y))K<V&&0>r(ee,F)?($[Q]=ee,$[K]=Y,Q=K):($[Q]=F,$[Z]=Y,Q=Z);else if(K<V&&0>r(ee,Y))$[Q]=ee,$[K]=Y,Q=K;else break e}}return q}function r($,q){var Y=$.sortIndex-q.sortIndex;return Y!==0?Y:$.id-q.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,c=a.now();e.unstable_now=function(){return a.now()-c}}var d=[],m=[],h=1,p=null,g=3,x=!1,v=!1,b=!1,k=!1,w=typeof setTimeout=="function"?setTimeout:null,S=typeof clearTimeout=="function"?clearTimeout:null,j=typeof setImmediate<"u"?setImmediate:null;function N($){for(var q=n(m);q!==null;){if(q.callback===null)i(m);else if(q.startTime<=$)i(m),q.sortIndex=q.expirationTime,t(d,q);else break;q=n(m)}}function O($){if(b=!1,N($),!v)if(n(d)!==null)v=!0,R||(R=!0,B());else{var q=n(m);q!==null&&G(O,q.startTime-$)}}var R=!1,D=-1,I=5,L=-1;function M(){return k?!0:!(e.unstable_now()-L<I)}function A(){if(k=!1,R){var $=e.unstable_now();L=$;var q=!0;try{e:{v=!1,b&&(b=!1,S(D),D=-1),x=!0;var Y=g;try{t:{for(N($),p=n(d);p!==null&&!(p.expirationTime>$&&M());){var Q=p.callback;if(typeof Q=="function"){p.callback=null,g=p.priorityLevel;var V=Q(p.expirationTime<=$);if($=e.unstable_now(),typeof V=="function"){p.callback=V,N($),q=!0;break t}p===n(d)&&i(d),N($)}else i(d);p=n(d)}if(p!==null)q=!0;else{var U=n(m);U!==null&&G(O,U.startTime-$),q=!1}}break e}finally{p=null,g=Y,x=!1}q=void 0}}finally{q?B():R=!1}}}var B;if(typeof j=="function")B=function(){j(A)};else if(typeof MessageChannel<"u"){var W=new MessageChannel,P=W.port2;W.port1.onmessage=A,B=function(){P.postMessage(null)}}else B=function(){w(A,0)};function G($,q){D=w(function(){$(e.unstable_now())},q)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function($){$.callback=null},e.unstable_forceFrameRate=function($){0>$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):I=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return g},e.unstable_next=function($){switch(g){case 1:case 2:case 3:var q=3;break;default:q=g}var Y=g;g=q;try{return $()}finally{g=Y}},e.unstable_requestPaint=function(){k=!0},e.unstable_runWithPriority=function($,q){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var Y=g;g=$;try{return q()}finally{g=Y}},e.unstable_scheduleCallback=function($,q,Y){var Q=e.unstable_now();switch(typeof Y=="object"&&Y!==null?(Y=Y.delay,Y=typeof Y=="number"&&0<Y?Q+Y:Q):Y=Q,$){case 1:var V=-1;break;case 2:V=250;break;case 5:V=1073741823;break;case 4:V=1e4;break;default:V=5e3}return V=Y+V,$={id:h++,callback:q,priorityLevel:$,startTime:Y,expirationTime:V,sortIndex:-1},Y>Q?($.sortIndex=Y,t(m,$),n(d)===null&&$===n(m)&&(b?(S(D),D=-1):b=!0,G(O,Y-Q))):($.sortIndex=V,t(d,$),v||x||(v=!0,R||(R=!0,B()))),$},e.unstable_shouldYield=M,e.unstable_wrapCallback=function($){var q=g;return function(){var Y=g;g=q;try{return $.apply(this,arguments)}finally{g=Y}}}})(fg)),fg}var wk;function U3(){return wk||(wk=1,dg.exports=V3()),dg.exports}var mg={exports:{}},Di={};var Ck;function G3(){if(Ck)return Di;Ck=1;var e=Hl();function t(d){var m="https://react.dev/errors/"+d;if(1<arguments.length){m+="?args[]="+encodeURIComponent(arguments[1]);for(var h=2;h<arguments.length;h++)m+="&args[]="+encodeURIComponent(arguments[h])}return"Minified React error #"+d+"; visit "+m+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function n(){}var i={d:{f:n,r:function(){throw Error(t(522))},D:n,C:n,L:n,m:n,X:n,S:n,M:n},p:0,findDOMNode:null},r=Symbol.for("react.portal");function o(d,m,h){var p=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:p==null?null:""+p,children:d,containerInfo:m,implementation:h}}var a=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(d,m){if(d==="font")return"";if(typeof m=="string")return m==="use-credentials"?m:""}return Di.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,Di.createPortal=function(d,m){var h=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!m||m.nodeType!==1&&m.nodeType!==9&&m.nodeType!==11)throw Error(t(299));return o(d,m,null,h)},Di.flushSync=function(d){var m=a.T,h=i.p;try{if(a.T=null,i.p=2,d)return d()}finally{a.T=m,i.p=h,i.d.f()}},Di.preconnect=function(d,m){typeof d=="string"&&(m?(m=m.crossOrigin,m=typeof m=="string"?m==="use-credentials"?m:"":void 0):m=null,i.d.C(d,m))},Di.prefetchDNS=function(d){typeof d=="string"&&i.d.D(d)},Di.preinit=function(d,m){if(typeof d=="string"&&m&&typeof m.as=="string"){var h=m.as,p=c(h,m.crossOrigin),g=typeof m.integrity=="string"?m.integrity:void 0,x=typeof m.fetchPriority=="string"?m.fetchPriority:void 0;h==="style"?i.d.S(d,typeof m.precedence=="string"?m.precedence:void 0,{crossOrigin:p,integrity:g,fetchPriority:x}):h==="script"&&i.d.X(d,{crossOrigin:p,integrity:g,fetchPriority:x,nonce:typeof m.nonce=="string"?m.nonce:void 0})}},Di.preinitModule=function(d,m){if(typeof d=="string")if(typeof m=="object"&&m!==null){if(m.as==null||m.as==="script"){var h=c(m.as,m.crossOrigin);i.d.M(d,{crossOrigin:h,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0})}}else m==null&&i.d.M(d)},Di.preload=function(d,m){if(typeof d=="string"&&typeof m=="object"&&m!==null&&typeof m.as=="string"){var h=m.as,p=c(h,m.crossOrigin);i.d.L(d,h,{crossOrigin:p,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0,type:typeof m.type=="string"?m.type:void 0,fetchPriority:typeof m.fetchPriority=="string"?m.fetchPriority:void 0,referrerPolicy:typeof m.referrerPolicy=="string"?m.referrerPolicy:void 0,imageSrcSet:typeof m.imageSrcSet=="string"?m.imageSrcSet:void 0,imageSizes:typeof m.imageSizes=="string"?m.imageSizes:void 0,media:typeof m.media=="string"?m.media:void 0})}},Di.preloadModule=function(d,m){if(typeof d=="string")if(m){var h=c(m.as,m.crossOrigin);i.d.m(d,{as:typeof m.as=="string"&&m.as!=="script"?m.as:void 0,crossOrigin:h,integrity:typeof m.integrity=="string"?m.integrity:void 0})}else i.d.m(d)},Di.requestFormReset=function(d){i.d.r(d)},Di.unstable_batchedUpdates=function(d,m){return d(m)},Di.useFormState=function(d,m,h){return a.H.useFormState(d,m,h)},Di.useFormStatus=function(){return a.H.useHostTransitionStatus()},Di.version="19.2.4",Di}var jk;function Bj(){if(jk)return mg.exports;jk=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),mg.exports=G3(),mg.exports}var Ek;function q3(){if(Ek)return Dc;Ek=1;var e=U3(),t=Hl(),n=Bj();function i(s){var l="https://react.dev/errors/"+s;if(1<arguments.length){l+="?args[]="+encodeURIComponent(arguments[1]);for(var f=2;f<arguments.length;f++)l+="&args[]="+encodeURIComponent(arguments[f])}return"Minified React error #"+s+"; visit "+l+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(s){return!(!s||s.nodeType!==1&&s.nodeType!==9&&s.nodeType!==11)}function o(s){var l=s,f=s;if(s.alternate)for(;l.return;)l=l.return;else{s=l;do l=s,(l.flags&4098)!==0&&(f=l.return),s=l.return;while(s)}return l.tag===3?f:null}function a(s){if(s.tag===13){var l=s.memoizedState;if(l===null&&(s=s.alternate,s!==null&&(l=s.memoizedState)),l!==null)return l.dehydrated}return null}function c(s){if(s.tag===31){var l=s.memoizedState;if(l===null&&(s=s.alternate,s!==null&&(l=s.memoizedState)),l!==null)return l.dehydrated}return null}function d(s){if(o(s)!==s)throw Error(i(188))}function m(s){var l=s.alternate;if(!l){if(l=o(s),l===null)throw Error(i(188));return l!==s?null:s}for(var f=s,y=l;;){var _=f.return;if(_===null)break;var E=_.alternate;if(E===null){if(y=_.return,y!==null){f=y;continue}break}if(_.child===E.child){for(E=_.child;E;){if(E===f)return d(_),s;if(E===y)return d(_),l;E=E.sibling}throw Error(i(188))}if(f.return!==y.return)f=_,y=E;else{for(var H=!1,X=_.child;X;){if(X===f){H=!0,f=_,y=E;break}if(X===y){H=!0,y=_,f=E;break}X=X.sibling}if(!H){for(X=E.child;X;){if(X===f){H=!0,f=E,y=_;break}if(X===y){H=!0,y=E,f=_;break}X=X.sibling}if(!H)throw Error(i(189))}}if(f.alternate!==y)throw Error(i(190))}if(f.tag!==3)throw Error(i(188));return f.stateNode.current===f?s:l}function h(s){var l=s.tag;if(l===5||l===26||l===27||l===6)return s;for(s=s.child;s!==null;){if(l=h(s),l!==null)return l;s=s.sibling}return null}var p=Object.assign,g=Symbol.for("react.element"),x=Symbol.for("react.transitional.element"),v=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),k=Symbol.for("react.strict_mode"),w=Symbol.for("react.profiler"),S=Symbol.for("react.consumer"),j=Symbol.for("react.context"),N=Symbol.for("react.forward_ref"),O=Symbol.for("react.suspense"),R=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),I=Symbol.for("react.lazy"),L=Symbol.for("react.activity"),M=Symbol.for("react.memo_cache_sentinel"),A=Symbol.iterator;function B(s){return s===null||typeof s!="object"?null:(s=A&&s[A]||s["@@iterator"],typeof s=="function"?s:null)}var W=Symbol.for("react.client.reference");function P(s){if(s==null)return null;if(typeof s=="function")return s.$$typeof===W?null:s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case b:return"Fragment";case w:return"Profiler";case k:return"StrictMode";case O:return"Suspense";case R:return"SuspenseList";case L:return"Activity"}if(typeof s=="object")switch(s.$$typeof){case v:return"Portal";case j:return s.displayName||"Context";case S:return(s._context.displayName||"Context")+".Consumer";case N:var l=s.render;return s=s.displayName,s||(s=l.displayName||l.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case D:return l=s.displayName||null,l!==null?l:P(s.type)||"Memo";case I:l=s._payload,s=s._init;try{return P(s(l))}catch{}}return null}var G=Array.isArray,$=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,q=n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Y={pending:!1,data:null,method:null,action:null},Q=[],V=-1;function U(s){return{current:s}}function Z(s){0>V||(s.current=Q[V],Q[V]=null,V--)}function F(s,l){V++,Q[V]=s.current,s.current=l}var K=U(null),ee=U(null),te=U(null),se=U(null);function ae(s,l){switch(F(te,l),F(ee,s),F(K,null),l.nodeType){case 9:case 11:s=(s=l.documentElement)&&(s=s.namespaceURI)?F_(s):0;break;default:if(s=l.tagName,l=l.namespaceURI)l=F_(l),s=V_(l,s);else switch(s){case"svg":s=1;break;case"math":s=2;break;default:s=0}}Z(K),F(K,s)}function ue(){Z(K),Z(ee),Z(te)}function ie(s){s.memoizedState!==null&&F(se,s);var l=K.current,f=V_(l,s.type);l!==f&&(F(ee,s),F(K,f))}function we(s){ee.current===s&&(Z(K),Z(ee)),se.current===s&&(Z(se),Ic._currentValue=Y)}var je,Te;function Ge(s){if(je===void 0)try{throw Error()}catch(f){var l=f.stack.trim().match(/\n( *(at )?)/);je=l&&l[1]||"",Te=-1<f.stack.indexOf(` + at`)?" (<anonymous>)":-1<f.stack.indexOf("@")?"@unknown:0:0":""}return` +`+je+s+Te}var Ze=!1;function Ye(s,l){if(!s||Ze)return"";Ze=!0;var f=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var y={DetermineComponentFrameRoot:function(){try{if(l){var Ne=function(){throw Error()};if(Object.defineProperty(Ne.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Ne,[])}catch(_e){var xe=_e}Reflect.construct(s,[],Ne)}else{try{Ne.call()}catch(_e){xe=_e}s.call(Ne.prototype)}}else{try{throw Error()}catch(_e){xe=_e}(Ne=s())&&typeof Ne.catch=="function"&&Ne.catch(function(){})}}catch(_e){if(_e&&xe&&typeof _e.stack=="string")return[_e.stack,xe.stack]}return[null,null]}};y.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var _=Object.getOwnPropertyDescriptor(y.DetermineComponentFrameRoot,"name");_&&_.configurable&&Object.defineProperty(y.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var E=y.DetermineComponentFrameRoot(),H=E[0],X=E[1];if(H&&X){var re=H.split(` +`),ye=X.split(` +`);for(_=y=0;y<re.length&&!re[y].includes("DetermineComponentFrameRoot");)y++;for(;_<ye.length&&!ye[_].includes("DetermineComponentFrameRoot");)_++;if(y===re.length||_===ye.length)for(y=re.length-1,_=ye.length-1;1<=y&&0<=_&&re[y]!==ye[_];)_--;for(;1<=y&&0<=_;y--,_--)if(re[y]!==ye[_]){if(y!==1||_!==1)do if(y--,_--,0>_||re[y]!==ye[_]){var Ce=` +`+re[y].replace(" at new "," at ");return s.displayName&&Ce.includes("<anonymous>")&&(Ce=Ce.replace("<anonymous>",s.displayName)),Ce}while(1<=y&&0<=_);break}}}finally{Ze=!1,Error.prepareStackTrace=f}return(f=s?s.displayName||s.name:"")?Ge(f):""}function mt(s,l){switch(s.tag){case 26:case 27:case 5:return Ge(s.type);case 16:return Ge("Lazy");case 13:return s.child!==l&&l!==null?Ge("Suspense Fallback"):Ge("Suspense");case 19:return Ge("SuspenseList");case 0:case 15:return Ye(s.type,!1);case 11:return Ye(s.type.render,!1);case 1:return Ye(s.type,!0);case 31:return Ge("Activity");default:return""}}function Ft(s){try{var l="",f=null;do l+=mt(s,f),f=s,s=s.return;while(s);return l}catch(y){return` +Error generating stack: `+y.message+` +`+y.stack}}var Mt=Object.prototype.hasOwnProperty,jt=e.unstable_scheduleCallback,he=e.unstable_cancelCallback,ze=e.unstable_shouldYield,ot=e.unstable_requestPaint,Ve=e.unstable_now,lt=e.unstable_getCurrentPriorityLevel,me=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Ae=e.unstable_NormalPriority,Be=e.unstable_LowPriority,We=e.unstable_IdlePriority,Lt=e.log,pt=e.unstable_setDisableYieldValue,ke=null,qe=null;function Qe(s){if(typeof Lt=="function"&&pt(s),qe&&typeof qe.setStrictMode=="function")try{qe.setStrictMode(ke,s)}catch{}}var $e=Math.clz32?Math.clz32:ei,He=Math.log,Vt=Math.LN2;function ei(s){return s>>>=0,s===0?32:31-(He(s)/Vt|0)|0}var vt=256,bt=262144,vn=4194304;function On(s){var l=s&42;if(l!==0)return l;switch(s&-s){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 s&261888;case 262144:case 524288:case 1048576:case 2097152:return s&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return s&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return s}}function wt(s,l,f){var y=s.pendingLanes;if(y===0)return 0;var _=0,E=s.suspendedLanes,H=s.pingedLanes;s=s.warmLanes;var X=y&134217727;return X!==0?(y=X&~E,y!==0?_=On(y):(H&=X,H!==0?_=On(H):f||(f=X&~s,f!==0&&(_=On(f))))):(X=y&~E,X!==0?_=On(X):H!==0?_=On(H):f||(f=y&~s,f!==0&&(_=On(f)))),_===0?0:l!==0&&l!==_&&(l&E)===0&&(E=_&-_,f=l&-l,E>=f||E===32&&(f&4194048)!==0)?l:_}function zt(s,l){return(s.pendingLanes&~(s.suspendedLanes&~s.pingedLanes)&l)===0}function Hn(s,l){switch(s){case 1:case 2:case 4:case 8:case 64:return l+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 l+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 Me(){var s=vn;return vn<<=1,(vn&62914560)===0&&(vn=4194304),s}function ht(s){for(var l=[],f=0;31>f;f++)l.push(s);return l}function gt(s,l){s.pendingLanes|=l,l!==268435456&&(s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0)}function fi(s,l,f,y,_,E){var H=s.pendingLanes;s.pendingLanes=f,s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0,s.expiredLanes&=f,s.entangledLanes&=f,s.errorRecoveryDisabledLanes&=f,s.shellSuspendCounter=0;var X=s.entanglements,re=s.expirationTimes,ye=s.hiddenUpdates;for(f=H&~f;0<f;){var Ce=31-$e(f),Ne=1<<Ce;X[Ce]=0,re[Ce]=-1;var xe=ye[Ce];if(xe!==null)for(ye[Ce]=null,Ce=0;Ce<xe.length;Ce++){var _e=xe[Ce];_e!==null&&(_e.lane&=-536870913)}f&=~Ne}y!==0&&Vn(s,y,0),E!==0&&_===0&&s.tag!==0&&(s.suspendedLanes|=E&~(H&~l))}function Vn(s,l,f){s.pendingLanes|=l,s.suspendedLanes&=~l;var y=31-$e(l);s.entangledLanes|=l,s.entanglements[y]=s.entanglements[y]|1073741824|f&261930}function pn(s,l){var f=s.entangledLanes|=l;for(s=s.entanglements;f;){var y=31-$e(f),_=1<<y;_&l|s[y]&l&&(s[y]|=l),f&=~_}}function Fn(s,l){var f=l&-l;return f=(f&42)!==0?1:tt(f),(f&(s.suspendedLanes|l))!==0?0:f}function tt(s){switch(s){case 2:s=1;break;case 8:s=4;break;case 32:s=16;break;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:case 4194304:case 8388608:case 16777216:case 33554432:s=128;break;case 268435456:s=134217728;break;default:s=0}return s}function mi(s){return s&=-s,2<s?8<s?(s&134217727)!==0?32:268435456:8:2}function Si(){var s=q.p;return s!==0?s:(s=window.event,s===void 0?32:fk(s.type))}function Rn(s,l){var f=q.p;try{return q.p=s,l()}finally{q.p=f}}var wn=Math.random().toString(36).slice(2),$t="__reactFiber$"+wn,Cn="__reactProps$"+wn,Xt="__reactContainer$"+wn,Re="__reactEvents$"+wn,kt="__reactListeners$"+wn,bn="__reactHandles$"+wn,wi="__reactResources$"+wn,In="__reactMarker$"+wn;function It(s){delete s[$t],delete s[Cn],delete s[Re],delete s[kt],delete s[bn]}function yi(s){var l=s[$t];if(l)return l;for(var f=s.parentNode;f;){if(l=f[Xt]||f[$t]){if(f=l.alternate,l.child!==null||f!==null&&f.child!==null)for(s=K_(s);s!==null;){if(f=s[$t])return f;s=K_(s)}return l}s=f,f=s.parentNode}return null}function Zn(s){if(s=s[$t]||s[Xt]){var l=s.tag;if(l===5||l===6||l===13||l===31||l===26||l===27||l===3)return s}return null}function ti(s){var l=s.tag;if(l===5||l===26||l===27||l===6)return s.stateNode;throw Error(i(33))}function ln(s){var l=s[wi];return l||(l=s[wi]={hoistableStyles:new Map,hoistableScripts:new Map}),l}function Kt(s){s[In]=!0}var Tt=new Set,Zt={};function Un(s,l){dn(s,l),dn(s+"Capture",l)}function dn(s,l){for(Zt[s]=l,s=0;s<l.length;s++)Tt.add(l[s])}var Je=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),ni={},Dt={};function Ot(s){return Mt.call(Dt,s)?!0:Mt.call(ni,s)?!1:Je.test(s)?Dt[s]=!0:(ni[s]=!0,!1)}function An(s,l,f){if(Ot(l))if(f===null)s.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":s.removeAttribute(l);return;case"boolean":var y=l.toLowerCase().slice(0,5);if(y!=="data-"&&y!=="aria-"){s.removeAttribute(l);return}}s.setAttribute(l,""+f)}}function Gn(s,l,f){if(f===null)s.removeAttribute(l);else{switch(typeof f){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(l);return}s.setAttribute(l,""+f)}}function jn(s,l,f,y){if(y===null)s.removeAttribute(f);else{switch(typeof y){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(f);return}s.setAttributeNS(l,f,""+y)}}function Ln(s){switch(typeof s){case"bigint":case"boolean":case"number":case"string":case"undefined":return s;case"object":return s;default:return""}}function xi(s){var l=s.type;return(s=s.nodeName)&&s.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function de(s,l,f){var y=Object.getOwnPropertyDescriptor(s.constructor.prototype,l);if(!s.hasOwnProperty(l)&&typeof y<"u"&&typeof y.get=="function"&&typeof y.set=="function"){var _=y.get,E=y.set;return Object.defineProperty(s,l,{configurable:!0,get:function(){return _.call(this)},set:function(H){f=""+H,E.call(this,H)}}),Object.defineProperty(s,l,{enumerable:y.enumerable}),{getValue:function(){return f},setValue:function(H){f=""+H},stopTracking:function(){s._valueTracker=null,delete s[l]}}}}function ve(s){if(!s._valueTracker){var l=xi(s)?"checked":"value";s._valueTracker=de(s,l,""+s[l])}}function Pe(s){if(!s)return!1;var l=s._valueTracker;if(!l)return!0;var f=l.getValue(),y="";return s&&(y=xi(s)?s.checked?"true":"false":s.value),s=y,s!==f?(l.setValue(s),!0):!1}function ut(s){if(s=s||(typeof document<"u"?document:void 0),typeof s>"u")return null;try{return s.activeElement||s.body}catch{return s.body}}var on=/[\n"\\]/g;function Pt(s){return s.replace(on,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function ce(s,l,f,y,_,E,H,X){s.name="",H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"?s.type=H:s.removeAttribute("type"),l!=null?H==="number"?(l===0&&s.value===""||s.value!=l)&&(s.value=""+Ln(l)):s.value!==""+Ln(l)&&(s.value=""+Ln(l)):H!=="submit"&&H!=="reset"||s.removeAttribute("value"),l!=null?Le(s,H,Ln(l)):f!=null?Le(s,H,Ln(f)):y!=null&&s.removeAttribute("value"),_==null&&E!=null&&(s.defaultChecked=!!E),_!=null&&(s.checked=_&&typeof _!="function"&&typeof _!="symbol"),X!=null&&typeof X!="function"&&typeof X!="symbol"&&typeof X!="boolean"?s.name=""+Ln(X):s.removeAttribute("name")}function Se(s,l,f,y,_,E,H,X){if(E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"&&(s.type=E),l!=null||f!=null){if(!(E!=="submit"&&E!=="reset"||l!=null)){ve(s);return}f=f!=null?""+Ln(f):"",l=l!=null?""+Ln(l):f,X||l===s.value||(s.value=l),s.defaultValue=l}y=y??_,y=typeof y!="function"&&typeof y!="symbol"&&!!y,s.checked=X?s.checked:!!y,s.defaultChecked=!!y,H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"&&(s.name=H),ve(s)}function Le(s,l,f){l==="number"&&ut(s.ownerDocument)===s||s.defaultValue===""+f||(s.defaultValue=""+f)}function Ue(s,l,f,y){if(s=s.options,l){l={};for(var _=0;_<f.length;_++)l["$"+f[_]]=!0;for(f=0;f<s.length;f++)_=l.hasOwnProperty("$"+s[f].value),s[f].selected!==_&&(s[f].selected=_),_&&y&&(s[f].defaultSelected=!0)}else{for(f=""+Ln(f),l=null,_=0;_<s.length;_++){if(s[_].value===f){s[_].selected=!0,y&&(s[_].defaultSelected=!0);return}l!==null||s[_].disabled||(l=s[_])}l!==null&&(l.selected=!0)}}function _t(s,l,f){if(l!=null&&(l=""+Ln(l),l!==s.value&&(s.value=l),f==null)){s.defaultValue!==l&&(s.defaultValue=l);return}s.defaultValue=f!=null?""+Ln(f):""}function ct(s,l,f,y){if(l==null){if(y!=null){if(f!=null)throw Error(i(92));if(G(y)){if(1<y.length)throw Error(i(93));y=y[0]}f=y}f==null&&(f=""),l=f}f=Ln(l),s.defaultValue=f,y=s.textContent,y===f&&y!==""&&y!==null&&(s.value=y),ve(s)}function nt(s,l){if(l){var f=s.firstChild;if(f&&f===s.lastChild&&f.nodeType===3){f.nodeValue=l;return}}s.textContent=l}var hn=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function ii(s,l,f){var y=l.indexOf("--")===0;f==null||typeof f=="boolean"||f===""?y?s.setProperty(l,""):l==="float"?s.cssFloat="":s[l]="":y?s.setProperty(l,f):typeof f!="number"||f===0||hn.has(l)?l==="float"?s.cssFloat=f:s[l]=(""+f).trim():s[l]=f+"px"}function qn(s,l,f){if(l!=null&&typeof l!="object")throw Error(i(62));if(s=s.style,f!=null){for(var y in f)!f.hasOwnProperty(y)||l!=null&&l.hasOwnProperty(y)||(y.indexOf("--")===0?s.setProperty(y,""):y==="float"?s.cssFloat="":s[y]="");for(var _ in l)y=l[_],l.hasOwnProperty(_)&&f[_]!==y&&ii(s,_,y)}else for(var E in l)l.hasOwnProperty(E)&&ii(s,E,l[E])}function Ct(s){if(s.indexOf("-")===-1)return!1;switch(s){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var tn=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),gn=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Ui(s){return gn.test(""+s)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":s}function Gi(){}var ma=null;function Yl(s){return s=s.target||s.srcElement||window,s.correspondingUseElement&&(s=s.correspondingUseElement),s.nodeType===3?s.parentNode:s}var Bs=null,ds=null;function Mr(s){var l=Zn(s);if(l&&(s=l.stateNode)){var f=s[Cn]||null;e:switch(s=l.stateNode,l.type){case"input":if(ce(s,f.value,f.defaultValue,f.defaultValue,f.checked,f.defaultChecked,f.type,f.name),l=f.name,f.type==="radio"&&l!=null){for(f=s;f.parentNode;)f=f.parentNode;for(f=f.querySelectorAll('input[name="'+Pt(""+l)+'"][type="radio"]'),l=0;l<f.length;l++){var y=f[l];if(y!==s&&y.form===s.form){var _=y[Cn]||null;if(!_)throw Error(i(90));ce(y,_.value,_.defaultValue,_.defaultValue,_.checked,_.defaultChecked,_.type,_.name)}}for(l=0;l<f.length;l++)y=f[l],y.form===s.form&&Pe(y)}break e;case"textarea":_t(s,f.value,f.defaultValue);break e;case"select":l=f.value,l!=null&&Ue(s,!!f.multiple,l,!1)}}}var $s=!1;function Ku(s,l,f){if($s)return s(l,f);$s=!0;try{var y=s(l);return y}finally{if($s=!1,(Bs!==null||ds!==null)&&(Md(),Bs&&(l=Bs,s=ds,ds=Bs=null,Mr(l),s)))for(l=0;l<s.length;l++)Mr(s[l])}}function Io(s,l){var f=s.stateNode;if(f===null)return null;var y=f[Cn]||null;if(y===null)return null;f=y[l];e:switch(l){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(y=!y.disabled)||(s=s.type,y=!(s==="button"||s==="input"||s==="select"||s==="textarea")),s=!y;break e;default:s=!1}if(s)return null;if(f&&typeof f!="function")throw Error(i(231,l,typeof f));return f}var tr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),To=!1;if(tr)try{var Hs={};Object.defineProperty(Hs,"passive",{get:function(){To=!0}}),window.addEventListener("test",Hs,Hs),window.removeEventListener("test",Hs,Hs)}catch{To=!1}var Dr=null,pa=null,ha=null;function Ci(){if(ha)return ha;var s,l=pa,f=l.length,y,_="value"in Dr?Dr.value:Dr.textContent,E=_.length;for(s=0;s<f&&l[s]===_[s];s++);var H=f-s;for(y=1;y<=H&&l[f-y]===_[E-y];y++);return ha=_.slice(s,1<y?1-y:void 0)}function ga(s){var l=s.keyCode;return"charCode"in s?(s=s.charCode,s===0&&l===13&&(s=13)):s=l,s===10&&(s=13),32<=s||s===13?s:0}function Ro(){return!0}function Zu(){return!1}function Ai(s){function l(f,y,_,E,H){this._reactName=f,this._targetInst=_,this.type=y,this.nativeEvent=E,this.target=H,this.currentTarget=null;for(var X in s)s.hasOwnProperty(X)&&(f=s[X],this[X]=f?f(E):E[X]);return this.isDefaultPrevented=(E.defaultPrevented!=null?E.defaultPrevented:E.returnValue===!1)?Ro:Zu,this.isPropagationStopped=Zu,this}return p(l.prototype,{preventDefault:function(){this.defaultPrevented=!0;var f=this.nativeEvent;f&&(f.preventDefault?f.preventDefault():typeof f.returnValue!="unknown"&&(f.returnValue=!1),this.isDefaultPrevented=Ro)},stopPropagation:function(){var f=this.nativeEvent;f&&(f.stopPropagation?f.stopPropagation():typeof f.cancelBubble!="unknown"&&(f.cancelBubble=!0),this.isPropagationStopped=Ro)},persist:function(){},isPersistent:Ro}),l}var fs={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(s){return s.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Fs=Ai(fs),Ao=p({},fs,{view:0,detail:0}),fp=Ai(Ao),Xl,Vs,Mo,ya=p({},Ao,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Bi,button:0,buttons:0,relatedTarget:function(s){return s.relatedTarget===void 0?s.fromElement===s.srcElement?s.toElement:s.fromElement:s.relatedTarget},movementX:function(s){return"movementX"in s?s.movementX:(s!==Mo&&(Mo&&s.type==="mousemove"?(Xl=s.screenX-Mo.screenX,Vs=s.screenY-Mo.screenY):Vs=Xl=0,Mo=s),Xl)},movementY:function(s){return"movementY"in s?s.movementY:Vs}}),ms=Ai(ya),mp=p({},ya,{dataTransfer:0}),J=Ai(mp),z=p({},Ao,{relatedTarget:0}),ne=Ai(z),oe=p({},fs,{animationName:0,elapsedTime:0,pseudoElement:0}),pe=Ai(oe),Ie=p({},fs,{clipboardData:function(s){return"clipboardData"in s?s.clipboardData:window.clipboardData}}),Xe=Ai(Ie),Fe=p({},fs,{data:0}),Bt=Ai(Fe),an={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Ht={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Ut={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Gt(s){var l=this.nativeEvent;return l.getModifierState?l.getModifierState(s):(s=Ut[s])?!!l[s]:!1}function Bi(){return Gt}var Mi=p({},Ao,{key:function(s){if(s.key){var l=an[s.key]||s.key;if(l!=="Unidentified")return l}return s.type==="keypress"?(s=ga(s),s===13?"Enter":String.fromCharCode(s)):s.type==="keydown"||s.type==="keyup"?Ht[s.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Bi,charCode:function(s){return s.type==="keypress"?ga(s):0},keyCode:function(s){return s.type==="keydown"||s.type==="keyup"?s.keyCode:0},which:function(s){return s.type==="keypress"?ga(s):s.type==="keydown"||s.type==="keyup"?s.keyCode:0}}),xa=Ai(Mi),Us=p({},ya,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),xr=Ai(Us),pi=p({},Ao,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Bi}),va=Ai(pi),tA=p({},fs,{propertyName:0,elapsedTime:0,pseudoElement:0}),nA=Ai(tA),iA=p({},ya,{deltaX:function(s){return"deltaX"in s?s.deltaX:"wheelDeltaX"in s?-s.wheelDeltaX:0},deltaY:function(s){return"deltaY"in s?s.deltaY:"wheelDeltaY"in s?-s.wheelDeltaY:"wheelDelta"in s?-s.wheelDelta:0},deltaZ:0,deltaMode:0}),rA=Ai(iA),sA=p({},fs,{newState:0,oldState:0}),oA=Ai(sA),aA=[9,13,27,32],pp=tr&&"CompositionEvent"in window,Kl=null;tr&&"documentMode"in document&&(Kl=document.documentMode);var lA=tr&&"TextEvent"in window&&!Kl,Y0=tr&&(!pp||Kl&&8<Kl&&11>=Kl),X0=" ",K0=!1;function Z0(s,l){switch(s){case"keyup":return aA.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Q0(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var ba=!1;function cA(s,l){switch(s){case"compositionend":return Q0(l);case"keypress":return l.which!==32?null:(K0=!0,X0);case"textInput":return s=l.data,s===X0&&K0?null:s;default:return null}}function uA(s,l){if(ba)return s==="compositionend"||!pp&&Z0(s,l)?(s=Ci(),ha=pa=Dr=null,ba=!1,s):null;switch(s){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1<l.char.length)return l.char;if(l.which)return String.fromCharCode(l.which)}return null;case"compositionend":return Y0&&l.locale!=="ko"?null:l.data;default:return null}}var dA={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function J0(s){var l=s&&s.nodeName&&s.nodeName.toLowerCase();return l==="input"?!!dA[s.type]:l==="textarea"}function eb(s,l,f,y){Bs?ds?ds.push(y):ds=[y]:Bs=y,l=$d(l,"onChange"),0<l.length&&(f=new Fs("onChange","change",null,f,y),s.push({event:f,listeners:l}))}var Zl=null,Ql=null;function fA(s){L_(s,0)}function Qu(s){var l=ti(s);if(Pe(l))return s}function tb(s,l){if(s==="change")return l}var nb=!1;if(tr){var hp;if(tr){var gp="oninput"in document;if(!gp){var ib=document.createElement("div");ib.setAttribute("oninput","return;"),gp=typeof ib.oninput=="function"}hp=gp}else hp=!1;nb=hp&&(!document.documentMode||9<document.documentMode)}function rb(){Zl&&(Zl.detachEvent("onpropertychange",sb),Ql=Zl=null)}function sb(s){if(s.propertyName==="value"&&Qu(Ql)){var l=[];eb(l,Ql,s,Yl(s)),Ku(fA,l)}}function mA(s,l,f){s==="focusin"?(rb(),Zl=l,Ql=f,Zl.attachEvent("onpropertychange",sb)):s==="focusout"&&rb()}function pA(s){if(s==="selectionchange"||s==="keyup"||s==="keydown")return Qu(Ql)}function hA(s,l){if(s==="click")return Qu(l)}function gA(s,l){if(s==="input"||s==="change")return Qu(l)}function yA(s,l){return s===l&&(s!==0||1/s===1/l)||s!==s&&l!==l}var nr=typeof Object.is=="function"?Object.is:yA;function Jl(s,l){if(nr(s,l))return!0;if(typeof s!="object"||s===null||typeof l!="object"||l===null)return!1;var f=Object.keys(s),y=Object.keys(l);if(f.length!==y.length)return!1;for(y=0;y<f.length;y++){var _=f[y];if(!Mt.call(l,_)||!nr(s[_],l[_]))return!1}return!0}function ob(s){for(;s&&s.firstChild;)s=s.firstChild;return s}function ab(s,l){var f=ob(s);s=0;for(var y;f;){if(f.nodeType===3){if(y=s+f.textContent.length,s<=l&&y>=l)return{node:f,offset:l-s};s=y}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=ob(f)}}function lb(s,l){return s&&l?s===l?!0:s&&s.nodeType===3?!1:l&&l.nodeType===3?lb(s,l.parentNode):"contains"in s?s.contains(l):s.compareDocumentPosition?!!(s.compareDocumentPosition(l)&16):!1:!1}function cb(s){s=s!=null&&s.ownerDocument!=null&&s.ownerDocument.defaultView!=null?s.ownerDocument.defaultView:window;for(var l=ut(s.document);l instanceof s.HTMLIFrameElement;){try{var f=typeof l.contentWindow.location.href=="string"}catch{f=!1}if(f)s=l.contentWindow;else break;l=ut(s.document)}return l}function yp(s){var l=s&&s.nodeName&&s.nodeName.toLowerCase();return l&&(l==="input"&&(s.type==="text"||s.type==="search"||s.type==="tel"||s.type==="url"||s.type==="password")||l==="textarea"||s.contentEditable==="true")}var xA=tr&&"documentMode"in document&&11>=document.documentMode,_a=null,xp=null,ec=null,vp=!1;function ub(s,l,f){var y=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;vp||_a==null||_a!==ut(y)||(y=_a,"selectionStart"in y&&yp(y)?y={start:y.selectionStart,end:y.selectionEnd}:(y=(y.ownerDocument&&y.ownerDocument.defaultView||window).getSelection(),y={anchorNode:y.anchorNode,anchorOffset:y.anchorOffset,focusNode:y.focusNode,focusOffset:y.focusOffset}),ec&&Jl(ec,y)||(ec=y,y=$d(xp,"onSelect"),0<y.length&&(l=new Fs("onSelect","select",null,l,f),s.push({event:l,listeners:y}),l.target=_a)))}function Do(s,l){var f={};return f[s.toLowerCase()]=l.toLowerCase(),f["Webkit"+s]="webkit"+l,f["Moz"+s]="moz"+l,f}var ka={animationend:Do("Animation","AnimationEnd"),animationiteration:Do("Animation","AnimationIteration"),animationstart:Do("Animation","AnimationStart"),transitionrun:Do("Transition","TransitionRun"),transitionstart:Do("Transition","TransitionStart"),transitioncancel:Do("Transition","TransitionCancel"),transitionend:Do("Transition","TransitionEnd")},bp={},db={};tr&&(db=document.createElement("div").style,"AnimationEvent"in window||(delete ka.animationend.animation,delete ka.animationiteration.animation,delete ka.animationstart.animation),"TransitionEvent"in window||delete ka.transitionend.transition);function Oo(s){if(bp[s])return bp[s];if(!ka[s])return s;var l=ka[s],f;for(f in l)if(l.hasOwnProperty(f)&&f in db)return bp[s]=l[f];return s}var fb=Oo("animationend"),mb=Oo("animationiteration"),pb=Oo("animationstart"),vA=Oo("transitionrun"),bA=Oo("transitionstart"),_A=Oo("transitioncancel"),hb=Oo("transitionend"),gb=new Map,_p="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");_p.push("scrollEnd");function Or(s,l){gb.set(s,l),Un(l,[s])}var Ju=typeof reportError=="function"?reportError:function(s){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var l=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof s=="object"&&s!==null&&typeof s.message=="string"?String(s.message):String(s),error:s});if(!window.dispatchEvent(l))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",s);return}console.error(s)},vr=[],Sa=0,kp=0;function ed(){for(var s=Sa,l=kp=Sa=0;l<s;){var f=vr[l];vr[l++]=null;var y=vr[l];vr[l++]=null;var _=vr[l];vr[l++]=null;var E=vr[l];if(vr[l++]=null,y!==null&&_!==null){var H=y.pending;H===null?_.next=_:(_.next=H.next,H.next=_),y.pending=_}E!==0&&yb(f,_,E)}}function td(s,l,f,y){vr[Sa++]=s,vr[Sa++]=l,vr[Sa++]=f,vr[Sa++]=y,kp|=y,s.lanes|=y,s=s.alternate,s!==null&&(s.lanes|=y)}function Sp(s,l,f,y){return td(s,l,f,y),nd(s)}function Lo(s,l){return td(s,null,null,l),nd(s)}function yb(s,l,f){s.lanes|=f;var y=s.alternate;y!==null&&(y.lanes|=f);for(var _=!1,E=s.return;E!==null;)E.childLanes|=f,y=E.alternate,y!==null&&(y.childLanes|=f),E.tag===22&&(s=E.stateNode,s===null||s._visibility&1||(_=!0)),s=E,E=E.return;return s.tag===3?(E=s.stateNode,_&&l!==null&&(_=31-$e(f),s=E.hiddenUpdates,y=s[_],y===null?s[_]=[l]:y.push(l),l.lane=f|536870912),E):null}function nd(s){if(50<kc)throw kc=0,Ah=null,Error(i(185));for(var l=s.return;l!==null;)s=l,l=s.return;return s.tag===3?s.stateNode:null}var wa={};function kA(s,l,f,y){this.tag=s,this.key=f,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=l,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=y,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ir(s,l,f,y){return new kA(s,l,f,y)}function wp(s){return s=s.prototype,!(!s||!s.isReactComponent)}function ps(s,l){var f=s.alternate;return f===null?(f=ir(s.tag,l,s.key,s.mode),f.elementType=s.elementType,f.type=s.type,f.stateNode=s.stateNode,f.alternate=s,s.alternate=f):(f.pendingProps=l,f.type=s.type,f.flags=0,f.subtreeFlags=0,f.deletions=null),f.flags=s.flags&65011712,f.childLanes=s.childLanes,f.lanes=s.lanes,f.child=s.child,f.memoizedProps=s.memoizedProps,f.memoizedState=s.memoizedState,f.updateQueue=s.updateQueue,l=s.dependencies,f.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext},f.sibling=s.sibling,f.index=s.index,f.ref=s.ref,f.refCleanup=s.refCleanup,f}function xb(s,l){s.flags&=65011714;var f=s.alternate;return f===null?(s.childLanes=0,s.lanes=l,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=f.childLanes,s.lanes=f.lanes,s.child=f.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=f.memoizedProps,s.memoizedState=f.memoizedState,s.updateQueue=f.updateQueue,s.type=f.type,l=f.dependencies,s.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext}),s}function id(s,l,f,y,_,E){var H=0;if(y=s,typeof s=="function")wp(s)&&(H=1);else if(typeof s=="string")H=E3(s,f,K.current)?26:s==="html"||s==="head"||s==="body"?27:5;else e:switch(s){case L:return s=ir(31,f,l,_),s.elementType=L,s.lanes=E,s;case b:return zo(f.children,_,E,l);case k:H=8,_|=24;break;case w:return s=ir(12,f,l,_|2),s.elementType=w,s.lanes=E,s;case O:return s=ir(13,f,l,_),s.elementType=O,s.lanes=E,s;case R:return s=ir(19,f,l,_),s.elementType=R,s.lanes=E,s;default:if(typeof s=="object"&&s!==null)switch(s.$$typeof){case j:H=10;break e;case S:H=9;break e;case N:H=11;break e;case D:H=14;break e;case I:H=16,y=null;break e}H=29,f=Error(i(130,s===null?"null":typeof s,"")),y=null}return l=ir(H,f,l,_),l.elementType=s,l.type=y,l.lanes=E,l}function zo(s,l,f,y){return s=ir(7,s,y,l),s.lanes=f,s}function Cp(s,l,f){return s=ir(6,s,null,l),s.lanes=f,s}function vb(s){var l=ir(18,null,null,0);return l.stateNode=s,l}function jp(s,l,f){return l=ir(4,s.children!==null?s.children:[],s.key,l),l.lanes=f,l.stateNode={containerInfo:s.containerInfo,pendingChildren:null,implementation:s.implementation},l}var bb=new WeakMap;function br(s,l){if(typeof s=="object"&&s!==null){var f=bb.get(s);return f!==void 0?f:(l={value:s,source:l,stack:Ft(l)},bb.set(s,l),l)}return{value:s,source:l,stack:Ft(l)}}var Ca=[],ja=0,rd=null,tc=0,_r=[],kr=0,Gs=null,Yr=1,Xr="";function hs(s,l){Ca[ja++]=tc,Ca[ja++]=rd,rd=s,tc=l}function _b(s,l,f){_r[kr++]=Yr,_r[kr++]=Xr,_r[kr++]=Gs,Gs=s;var y=Yr;s=Xr;var _=32-$e(y)-1;y&=~(1<<_),f+=1;var E=32-$e(l)+_;if(30<E){var H=_-_%5;E=(y&(1<<H)-1).toString(32),y>>=H,_-=H,Yr=1<<32-$e(l)+_|f<<_|y,Xr=E+s}else Yr=1<<E|f<<_|y,Xr=s}function Ep(s){s.return!==null&&(hs(s,1),_b(s,1,0))}function Np(s){for(;s===rd;)rd=Ca[--ja],Ca[ja]=null,tc=Ca[--ja],Ca[ja]=null;for(;s===Gs;)Gs=_r[--kr],_r[kr]=null,Xr=_r[--kr],_r[kr]=null,Yr=_r[--kr],_r[kr]=null}function kb(s,l){_r[kr++]=Yr,_r[kr++]=Xr,_r[kr++]=Gs,Yr=l.id,Xr=l.overflow,Gs=s}var ji=null,Mn=null,en=!1,qs=null,Sr=!1,Ip=Error(i(519));function Ws(s){var l=Error(i(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw nc(br(l,s)),Ip}function Sb(s){var l=s.stateNode,f=s.type,y=s.memoizedProps;switch(l[$t]=s,l[Cn]=y,f){case"dialog":Wt("cancel",l),Wt("close",l);break;case"iframe":case"object":case"embed":Wt("load",l);break;case"video":case"audio":for(f=0;f<wc.length;f++)Wt(wc[f],l);break;case"source":Wt("error",l);break;case"img":case"image":case"link":Wt("error",l),Wt("load",l);break;case"details":Wt("toggle",l);break;case"input":Wt("invalid",l),Se(l,y.value,y.defaultValue,y.checked,y.defaultChecked,y.type,y.name,!0);break;case"select":Wt("invalid",l);break;case"textarea":Wt("invalid",l),ct(l,y.value,y.defaultValue,y.children)}f=y.children,typeof f!="string"&&typeof f!="number"&&typeof f!="bigint"||l.textContent===""+f||y.suppressHydrationWarning===!0||$_(l.textContent,f)?(y.popover!=null&&(Wt("beforetoggle",l),Wt("toggle",l)),y.onScroll!=null&&Wt("scroll",l),y.onScrollEnd!=null&&Wt("scrollend",l),y.onClick!=null&&(l.onclick=Gi),l=!0):l=!1,l||Ws(s,!0)}function wb(s){for(ji=s.return;ji;)switch(ji.tag){case 5:case 31:case 13:Sr=!1;return;case 27:case 3:Sr=!0;return;default:ji=ji.return}}function Ea(s){if(s!==ji)return!1;if(!en)return wb(s),en=!0,!1;var l=s.tag,f;if((f=l!==3&&l!==27)&&((f=l===5)&&(f=s.type,f=!(f!=="form"&&f!=="button")||Wh(s.type,s.memoizedProps)),f=!f),f&&Mn&&Ws(s),wb(s),l===13){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(317));Mn=X_(s)}else if(l===31){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(317));Mn=X_(s)}else l===27?(l=Mn,ao(s.type)?(s=Qh,Qh=null,Mn=s):Mn=l):Mn=ji?Cr(s.stateNode.nextSibling):null;return!0}function Po(){Mn=ji=null,en=!1}function Tp(){var s=qs;return s!==null&&(Xi===null?Xi=s:Xi.push.apply(Xi,s),qs=null),s}function nc(s){qs===null?qs=[s]:qs.push(s)}var Rp=U(null),Bo=null,gs=null;function Ys(s,l,f){F(Rp,l._currentValue),l._currentValue=f}function ys(s){s._currentValue=Rp.current,Z(Rp)}function Ap(s,l,f){for(;s!==null;){var y=s.alternate;if((s.childLanes&l)!==l?(s.childLanes|=l,y!==null&&(y.childLanes|=l)):y!==null&&(y.childLanes&l)!==l&&(y.childLanes|=l),s===f)break;s=s.return}}function Mp(s,l,f,y){var _=s.child;for(_!==null&&(_.return=s);_!==null;){var E=_.dependencies;if(E!==null){var H=_.child;E=E.firstContext;e:for(;E!==null;){var X=E;E=_;for(var re=0;re<l.length;re++)if(X.context===l[re]){E.lanes|=f,X=E.alternate,X!==null&&(X.lanes|=f),Ap(E.return,f,s),y||(H=null);break e}E=X.next}}else if(_.tag===18){if(H=_.return,H===null)throw Error(i(341));H.lanes|=f,E=H.alternate,E!==null&&(E.lanes|=f),Ap(H,f,s),H=null}else H=_.child;if(H!==null)H.return=_;else for(H=_;H!==null;){if(H===s){H=null;break}if(_=H.sibling,_!==null){_.return=H.return,H=_;break}H=H.return}_=H}}function Na(s,l,f,y){s=null;for(var _=l,E=!1;_!==null;){if(!E){if((_.flags&524288)!==0)E=!0;else if((_.flags&262144)!==0)break}if(_.tag===10){var H=_.alternate;if(H===null)throw Error(i(387));if(H=H.memoizedProps,H!==null){var X=_.type;nr(_.pendingProps.value,H.value)||(s!==null?s.push(X):s=[X])}}else if(_===se.current){if(H=_.alternate,H===null)throw Error(i(387));H.memoizedState.memoizedState!==_.memoizedState.memoizedState&&(s!==null?s.push(Ic):s=[Ic])}_=_.return}s!==null&&Mp(l,s,f,y),l.flags|=262144}function sd(s){for(s=s.firstContext;s!==null;){if(!nr(s.context._currentValue,s.memoizedValue))return!0;s=s.next}return!1}function $o(s){Bo=s,gs=null,s=s.dependencies,s!==null&&(s.firstContext=null)}function Ei(s){return Cb(Bo,s)}function od(s,l){return Bo===null&&$o(s),Cb(s,l)}function Cb(s,l){var f=l._currentValue;if(l={context:l,memoizedValue:f,next:null},gs===null){if(s===null)throw Error(i(308));gs=l,s.dependencies={lanes:0,firstContext:l},s.flags|=524288}else gs=gs.next=l;return f}var SA=typeof AbortController<"u"?AbortController:function(){var s=[],l=this.signal={aborted:!1,addEventListener:function(f,y){s.push(y)}};this.abort=function(){l.aborted=!0,s.forEach(function(f){return f()})}},wA=e.unstable_scheduleCallback,CA=e.unstable_NormalPriority,ri={$$typeof:j,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Dp(){return{controller:new SA,data:new Map,refCount:0}}function ic(s){s.refCount--,s.refCount===0&&wA(CA,function(){s.controller.abort()})}var rc=null,Op=0,Ia=0,Ta=null;function jA(s,l){if(rc===null){var f=rc=[];Op=0,Ia=Ph(),Ta={status:"pending",value:void 0,then:function(y){f.push(y)}}}return Op++,l.then(jb,jb),l}function jb(){if(--Op===0&&rc!==null){Ta!==null&&(Ta.status="fulfilled");var s=rc;rc=null,Ia=0,Ta=null;for(var l=0;l<s.length;l++)(0,s[l])()}}function EA(s,l){var f=[],y={status:"pending",value:null,reason:null,then:function(_){f.push(_)}};return s.then(function(){y.status="fulfilled",y.value=l;for(var _=0;_<f.length;_++)(0,f[_])(l)},function(_){for(y.status="rejected",y.reason=_,_=0;_<f.length;_++)(0,f[_])(void 0)}),y}var Eb=$.S;$.S=function(s,l){u_=Ve(),typeof l=="object"&&l!==null&&typeof l.then=="function"&&jA(s,l),Eb!==null&&Eb(s,l)};var Ho=U(null);function Lp(){var s=Ho.current;return s!==null?s:En.pooledCache}function ad(s,l){l===null?F(Ho,Ho.current):F(Ho,l.pool)}function Nb(){var s=Lp();return s===null?null:{parent:ri._currentValue,pool:s}}var Ra=Error(i(460)),zp=Error(i(474)),ld=Error(i(542)),cd={then:function(){}};function Ib(s){return s=s.status,s==="fulfilled"||s==="rejected"}function Tb(s,l,f){switch(f=s[f],f===void 0?s.push(l):f!==l&&(l.then(Gi,Gi),l=f),l.status){case"fulfilled":return l.value;case"rejected":throw s=l.reason,Ab(s),s;default:if(typeof l.status=="string")l.then(Gi,Gi);else{if(s=En,s!==null&&100<s.shellSuspendCounter)throw Error(i(482));s=l,s.status="pending",s.then(function(y){if(l.status==="pending"){var _=l;_.status="fulfilled",_.value=y}},function(y){if(l.status==="pending"){var _=l;_.status="rejected",_.reason=y}})}switch(l.status){case"fulfilled":return l.value;case"rejected":throw s=l.reason,Ab(s),s}throw Vo=l,Ra}}function Fo(s){try{var l=s._init;return l(s._payload)}catch(f){throw f!==null&&typeof f=="object"&&typeof f.then=="function"?(Vo=f,Ra):f}}var Vo=null;function Rb(){if(Vo===null)throw Error(i(459));var s=Vo;return Vo=null,s}function Ab(s){if(s===Ra||s===ld)throw Error(i(483))}var Aa=null,sc=0;function ud(s){var l=sc;return sc+=1,Aa===null&&(Aa=[]),Tb(Aa,s,l)}function oc(s,l){l=l.props.ref,s.ref=l!==void 0?l:null}function dd(s,l){throw l.$$typeof===g?Error(i(525)):(s=Object.prototype.toString.call(l),Error(i(31,s==="[object Object]"?"object with keys {"+Object.keys(l).join(", ")+"}":s)))}function Mb(s){function l(fe,le){if(s){var ge=fe.deletions;ge===null?(fe.deletions=[le],fe.flags|=16):ge.push(le)}}function f(fe,le){if(!s)return null;for(;le!==null;)l(fe,le),le=le.sibling;return null}function y(fe){for(var le=new Map;fe!==null;)fe.key!==null?le.set(fe.key,fe):le.set(fe.index,fe),fe=fe.sibling;return le}function _(fe,le){return fe=ps(fe,le),fe.index=0,fe.sibling=null,fe}function E(fe,le,ge){return fe.index=ge,s?(ge=fe.alternate,ge!==null?(ge=ge.index,ge<le?(fe.flags|=67108866,le):ge):(fe.flags|=67108866,le)):(fe.flags|=1048576,le)}function H(fe){return s&&fe.alternate===null&&(fe.flags|=67108866),fe}function X(fe,le,ge,Ee){return le===null||le.tag!==6?(le=Cp(ge,fe.mode,Ee),le.return=fe,le):(le=_(le,ge),le.return=fe,le)}function re(fe,le,ge,Ee){var at=ge.type;return at===b?Ce(fe,le,ge.props.children,Ee,ge.key):le!==null&&(le.elementType===at||typeof at=="object"&&at!==null&&at.$$typeof===I&&Fo(at)===le.type)?(le=_(le,ge.props),oc(le,ge),le.return=fe,le):(le=id(ge.type,ge.key,ge.props,null,fe.mode,Ee),oc(le,ge),le.return=fe,le)}function ye(fe,le,ge,Ee){return le===null||le.tag!==4||le.stateNode.containerInfo!==ge.containerInfo||le.stateNode.implementation!==ge.implementation?(le=jp(ge,fe.mode,Ee),le.return=fe,le):(le=_(le,ge.children||[]),le.return=fe,le)}function Ce(fe,le,ge,Ee,at){return le===null||le.tag!==7?(le=zo(ge,fe.mode,Ee,at),le.return=fe,le):(le=_(le,ge),le.return=fe,le)}function Ne(fe,le,ge){if(typeof le=="string"&&le!==""||typeof le=="number"||typeof le=="bigint")return le=Cp(""+le,fe.mode,ge),le.return=fe,le;if(typeof le=="object"&&le!==null){switch(le.$$typeof){case x:return ge=id(le.type,le.key,le.props,null,fe.mode,ge),oc(ge,le),ge.return=fe,ge;case v:return le=jp(le,fe.mode,ge),le.return=fe,le;case I:return le=Fo(le),Ne(fe,le,ge)}if(G(le)||B(le))return le=zo(le,fe.mode,ge,null),le.return=fe,le;if(typeof le.then=="function")return Ne(fe,ud(le),ge);if(le.$$typeof===j)return Ne(fe,od(fe,le),ge);dd(fe,le)}return null}function xe(fe,le,ge,Ee){var at=le!==null?le.key:null;if(typeof ge=="string"&&ge!==""||typeof ge=="number"||typeof ge=="bigint")return at!==null?null:X(fe,le,""+ge,Ee);if(typeof ge=="object"&&ge!==null){switch(ge.$$typeof){case x:return ge.key===at?re(fe,le,ge,Ee):null;case v:return ge.key===at?ye(fe,le,ge,Ee):null;case I:return ge=Fo(ge),xe(fe,le,ge,Ee)}if(G(ge)||B(ge))return at!==null?null:Ce(fe,le,ge,Ee,null);if(typeof ge.then=="function")return xe(fe,le,ud(ge),Ee);if(ge.$$typeof===j)return xe(fe,le,od(fe,ge),Ee);dd(fe,ge)}return null}function _e(fe,le,ge,Ee,at){if(typeof Ee=="string"&&Ee!==""||typeof Ee=="number"||typeof Ee=="bigint")return fe=fe.get(ge)||null,X(le,fe,""+Ee,at);if(typeof Ee=="object"&&Ee!==null){switch(Ee.$$typeof){case x:return fe=fe.get(Ee.key===null?ge:Ee.key)||null,re(le,fe,Ee,at);case v:return fe=fe.get(Ee.key===null?ge:Ee.key)||null,ye(le,fe,Ee,at);case I:return Ee=Fo(Ee),_e(fe,le,ge,Ee,at)}if(G(Ee)||B(Ee))return fe=fe.get(ge)||null,Ce(le,fe,Ee,at,null);if(typeof Ee.then=="function")return _e(fe,le,ge,ud(Ee),at);if(Ee.$$typeof===j)return _e(fe,le,ge,od(le,Ee),at);dd(le,Ee)}return null}function Ke(fe,le,ge,Ee){for(var at=null,cn=null,et=le,Rt=le=0,Jt=null;et!==null&&Rt<ge.length;Rt++){et.index>Rt?(Jt=et,et=null):Jt=et.sibling;var un=xe(fe,et,ge[Rt],Ee);if(un===null){et===null&&(et=Jt);break}s&&et&&un.alternate===null&&l(fe,et),le=E(un,le,Rt),cn===null?at=un:cn.sibling=un,cn=un,et=Jt}if(Rt===ge.length)return f(fe,et),en&&hs(fe,Rt),at;if(et===null){for(;Rt<ge.length;Rt++)et=Ne(fe,ge[Rt],Ee),et!==null&&(le=E(et,le,Rt),cn===null?at=et:cn.sibling=et,cn=et);return en&&hs(fe,Rt),at}for(et=y(et);Rt<ge.length;Rt++)Jt=_e(et,fe,Rt,ge[Rt],Ee),Jt!==null&&(s&&Jt.alternate!==null&&et.delete(Jt.key===null?Rt:Jt.key),le=E(Jt,le,Rt),cn===null?at=Jt:cn.sibling=Jt,cn=Jt);return s&&et.forEach(function(mo){return l(fe,mo)}),en&&hs(fe,Rt),at}function ft(fe,le,ge,Ee){if(ge==null)throw Error(i(151));for(var at=null,cn=null,et=le,Rt=le=0,Jt=null,un=ge.next();et!==null&&!un.done;Rt++,un=ge.next()){et.index>Rt?(Jt=et,et=null):Jt=et.sibling;var mo=xe(fe,et,un.value,Ee);if(mo===null){et===null&&(et=Jt);break}s&&et&&mo.alternate===null&&l(fe,et),le=E(mo,le,Rt),cn===null?at=mo:cn.sibling=mo,cn=mo,et=Jt}if(un.done)return f(fe,et),en&&hs(fe,Rt),at;if(et===null){for(;!un.done;Rt++,un=ge.next())un=Ne(fe,un.value,Ee),un!==null&&(le=E(un,le,Rt),cn===null?at=un:cn.sibling=un,cn=un);return en&&hs(fe,Rt),at}for(et=y(et);!un.done;Rt++,un=ge.next())un=_e(et,fe,Rt,un.value,Ee),un!==null&&(s&&un.alternate!==null&&et.delete(un.key===null?Rt:un.key),le=E(un,le,Rt),cn===null?at=un:cn.sibling=un,cn=un);return s&&et.forEach(function(P3){return l(fe,P3)}),en&&hs(fe,Rt),at}function Sn(fe,le,ge,Ee){if(typeof ge=="object"&&ge!==null&&ge.type===b&&ge.key===null&&(ge=ge.props.children),typeof ge=="object"&&ge!==null){switch(ge.$$typeof){case x:e:{for(var at=ge.key;le!==null;){if(le.key===at){if(at=ge.type,at===b){if(le.tag===7){f(fe,le.sibling),Ee=_(le,ge.props.children),Ee.return=fe,fe=Ee;break e}}else if(le.elementType===at||typeof at=="object"&&at!==null&&at.$$typeof===I&&Fo(at)===le.type){f(fe,le.sibling),Ee=_(le,ge.props),oc(Ee,ge),Ee.return=fe,fe=Ee;break e}f(fe,le);break}else l(fe,le);le=le.sibling}ge.type===b?(Ee=zo(ge.props.children,fe.mode,Ee,ge.key),Ee.return=fe,fe=Ee):(Ee=id(ge.type,ge.key,ge.props,null,fe.mode,Ee),oc(Ee,ge),Ee.return=fe,fe=Ee)}return H(fe);case v:e:{for(at=ge.key;le!==null;){if(le.key===at)if(le.tag===4&&le.stateNode.containerInfo===ge.containerInfo&&le.stateNode.implementation===ge.implementation){f(fe,le.sibling),Ee=_(le,ge.children||[]),Ee.return=fe,fe=Ee;break e}else{f(fe,le);break}else l(fe,le);le=le.sibling}Ee=jp(ge,fe.mode,Ee),Ee.return=fe,fe=Ee}return H(fe);case I:return ge=Fo(ge),Sn(fe,le,ge,Ee)}if(G(ge))return Ke(fe,le,ge,Ee);if(B(ge)){if(at=B(ge),typeof at!="function")throw Error(i(150));return ge=at.call(ge),ft(fe,le,ge,Ee)}if(typeof ge.then=="function")return Sn(fe,le,ud(ge),Ee);if(ge.$$typeof===j)return Sn(fe,le,od(fe,ge),Ee);dd(fe,ge)}return typeof ge=="string"&&ge!==""||typeof ge=="number"||typeof ge=="bigint"?(ge=""+ge,le!==null&&le.tag===6?(f(fe,le.sibling),Ee=_(le,ge),Ee.return=fe,fe=Ee):(f(fe,le),Ee=Cp(ge,fe.mode,Ee),Ee.return=fe,fe=Ee),H(fe)):f(fe,le)}return function(fe,le,ge,Ee){try{sc=0;var at=Sn(fe,le,ge,Ee);return Aa=null,at}catch(et){if(et===Ra||et===ld)throw et;var cn=ir(29,et,null,fe.mode);return cn.lanes=Ee,cn.return=fe,cn}}}var Uo=Mb(!0),Db=Mb(!1),Xs=!1;function Pp(s){s.updateQueue={baseState:s.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Bp(s,l){s=s.updateQueue,l.updateQueue===s&&(l.updateQueue={baseState:s.baseState,firstBaseUpdate:s.firstBaseUpdate,lastBaseUpdate:s.lastBaseUpdate,shared:s.shared,callbacks:null})}function Ks(s){return{lane:s,tag:0,payload:null,callback:null,next:null}}function Zs(s,l,f){var y=s.updateQueue;if(y===null)return null;if(y=y.shared,(fn&2)!==0){var _=y.pending;return _===null?l.next=l:(l.next=_.next,_.next=l),y.pending=l,l=nd(s),yb(s,null,f),l}return td(s,y,l,f),nd(s)}function ac(s,l,f){if(l=l.updateQueue,l!==null&&(l=l.shared,(f&4194048)!==0)){var y=l.lanes;y&=s.pendingLanes,f|=y,l.lanes=f,pn(s,f)}}function $p(s,l){var f=s.updateQueue,y=s.alternate;if(y!==null&&(y=y.updateQueue,f===y)){var _=null,E=null;if(f=f.firstBaseUpdate,f!==null){do{var H={lane:f.lane,tag:f.tag,payload:f.payload,callback:null,next:null};E===null?_=E=H:E=E.next=H,f=f.next}while(f!==null);E===null?_=E=l:E=E.next=l}else _=E=l;f={baseState:y.baseState,firstBaseUpdate:_,lastBaseUpdate:E,shared:y.shared,callbacks:y.callbacks},s.updateQueue=f;return}s=f.lastBaseUpdate,s===null?f.firstBaseUpdate=l:s.next=l,f.lastBaseUpdate=l}var Hp=!1;function lc(){if(Hp){var s=Ta;if(s!==null)throw s}}function cc(s,l,f,y){Hp=!1;var _=s.updateQueue;Xs=!1;var E=_.firstBaseUpdate,H=_.lastBaseUpdate,X=_.shared.pending;if(X!==null){_.shared.pending=null;var re=X,ye=re.next;re.next=null,H===null?E=ye:H.next=ye,H=re;var Ce=s.alternate;Ce!==null&&(Ce=Ce.updateQueue,X=Ce.lastBaseUpdate,X!==H&&(X===null?Ce.firstBaseUpdate=ye:X.next=ye,Ce.lastBaseUpdate=re))}if(E!==null){var Ne=_.baseState;H=0,Ce=ye=re=null,X=E;do{var xe=X.lane&-536870913,_e=xe!==X.lane;if(_e?(Qt&xe)===xe:(y&xe)===xe){xe!==0&&xe===Ia&&(Hp=!0),Ce!==null&&(Ce=Ce.next={lane:0,tag:X.tag,payload:X.payload,callback:null,next:null});e:{var Ke=s,ft=X;xe=l;var Sn=f;switch(ft.tag){case 1:if(Ke=ft.payload,typeof Ke=="function"){Ne=Ke.call(Sn,Ne,xe);break e}Ne=Ke;break e;case 3:Ke.flags=Ke.flags&-65537|128;case 0:if(Ke=ft.payload,xe=typeof Ke=="function"?Ke.call(Sn,Ne,xe):Ke,xe==null)break e;Ne=p({},Ne,xe);break e;case 2:Xs=!0}}xe=X.callback,xe!==null&&(s.flags|=64,_e&&(s.flags|=8192),_e=_.callbacks,_e===null?_.callbacks=[xe]:_e.push(xe))}else _e={lane:xe,tag:X.tag,payload:X.payload,callback:X.callback,next:null},Ce===null?(ye=Ce=_e,re=Ne):Ce=Ce.next=_e,H|=xe;if(X=X.next,X===null){if(X=_.shared.pending,X===null)break;_e=X,X=_e.next,_e.next=null,_.lastBaseUpdate=_e,_.shared.pending=null}}while(!0);Ce===null&&(re=Ne),_.baseState=re,_.firstBaseUpdate=ye,_.lastBaseUpdate=Ce,E===null&&(_.shared.lanes=0),no|=H,s.lanes=H,s.memoizedState=Ne}}function Ob(s,l){if(typeof s!="function")throw Error(i(191,s));s.call(l)}function Lb(s,l){var f=s.callbacks;if(f!==null)for(s.callbacks=null,s=0;s<f.length;s++)Ob(f[s],l)}var Ma=U(null),fd=U(0);function zb(s,l){s=js,F(fd,s),F(Ma,l),js=s|l.baseLanes}function Fp(){F(fd,js),F(Ma,Ma.current)}function Vp(){js=fd.current,Z(Ma),Z(fd)}var rr=U(null),wr=null;function Qs(s){var l=s.alternate;F(Qn,Qn.current&1),F(rr,s),wr===null&&(l===null||Ma.current!==null||l.memoizedState!==null)&&(wr=s)}function Up(s){F(Qn,Qn.current),F(rr,s),wr===null&&(wr=s)}function Pb(s){s.tag===22?(F(Qn,Qn.current),F(rr,s),wr===null&&(wr=s)):Js()}function Js(){F(Qn,Qn.current),F(rr,rr.current)}function sr(s){Z(rr),wr===s&&(wr=null),Z(Qn)}var Qn=U(0);function md(s){for(var l=s;l!==null;){if(l.tag===13){var f=l.memoizedState;if(f!==null&&(f=f.dehydrated,f===null||Kh(f)||Zh(f)))return l}else if(l.tag===19&&(l.memoizedProps.revealOrder==="forwards"||l.memoizedProps.revealOrder==="backwards"||l.memoizedProps.revealOrder==="unstable_legacy-backwards"||l.memoizedProps.revealOrder==="together")){if((l.flags&128)!==0)return l}else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===s)break;for(;l.sibling===null;){if(l.return===null||l.return===s)return null;l=l.return}l.sibling.return=l.return,l=l.sibling}return null}var xs=0,Et=null,_n=null,si=null,pd=!1,Da=!1,Go=!1,hd=0,uc=0,Oa=null,NA=0;function Wn(){throw Error(i(321))}function Gp(s,l){if(l===null)return!1;for(var f=0;f<l.length&&f<s.length;f++)if(!nr(s[f],l[f]))return!1;return!0}function qp(s,l,f,y,_,E){return xs=E,Et=l,l.memoizedState=null,l.updateQueue=null,l.lanes=0,$.H=s===null||s.memoizedState===null?_1:ah,Go=!1,E=f(y,_),Go=!1,Da&&(E=$b(l,f,y,_)),Bb(s),E}function Bb(s){$.H=mc;var l=_n!==null&&_n.next!==null;if(xs=0,si=_n=Et=null,pd=!1,uc=0,Oa=null,l)throw Error(i(300));s===null||oi||(s=s.dependencies,s!==null&&sd(s)&&(oi=!0))}function $b(s,l,f,y){Et=s;var _=0;do{if(Da&&(Oa=null),uc=0,Da=!1,25<=_)throw Error(i(301));if(_+=1,si=_n=null,s.updateQueue!=null){var E=s.updateQueue;E.lastEffect=null,E.events=null,E.stores=null,E.memoCache!=null&&(E.memoCache.index=0)}$.H=k1,E=l(f,y)}while(Da);return E}function IA(){var s=$.H,l=s.useState()[0];return l=typeof l.then=="function"?dc(l):l,s=s.useState()[0],(_n!==null?_n.memoizedState:null)!==s&&(Et.flags|=1024),l}function Wp(){var s=hd!==0;return hd=0,s}function Yp(s,l,f){l.updateQueue=s.updateQueue,l.flags&=-2053,s.lanes&=~f}function Xp(s){if(pd){for(s=s.memoizedState;s!==null;){var l=s.queue;l!==null&&(l.pending=null),s=s.next}pd=!1}xs=0,si=_n=Et=null,Da=!1,uc=hd=0,Oa=null}function $i(){var s={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return si===null?Et.memoizedState=si=s:si=si.next=s,si}function Jn(){if(_n===null){var s=Et.alternate;s=s!==null?s.memoizedState:null}else s=_n.next;var l=si===null?Et.memoizedState:si.next;if(l!==null)si=l,_n=s;else{if(s===null)throw Et.alternate===null?Error(i(467)):Error(i(310));_n=s,s={memoizedState:_n.memoizedState,baseState:_n.baseState,baseQueue:_n.baseQueue,queue:_n.queue,next:null},si===null?Et.memoizedState=si=s:si=si.next=s}return si}function gd(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function dc(s){var l=uc;return uc+=1,Oa===null&&(Oa=[]),s=Tb(Oa,s,l),l=Et,(si===null?l.memoizedState:si.next)===null&&(l=l.alternate,$.H=l===null||l.memoizedState===null?_1:ah),s}function yd(s){if(s!==null&&typeof s=="object"){if(typeof s.then=="function")return dc(s);if(s.$$typeof===j)return Ei(s)}throw Error(i(438,String(s)))}function Kp(s){var l=null,f=Et.updateQueue;if(f!==null&&(l=f.memoCache),l==null){var y=Et.alternate;y!==null&&(y=y.updateQueue,y!==null&&(y=y.memoCache,y!=null&&(l={data:y.data.map(function(_){return _.slice()}),index:0})))}if(l==null&&(l={data:[],index:0}),f===null&&(f=gd(),Et.updateQueue=f),f.memoCache=l,f=l.data[l.index],f===void 0)for(f=l.data[l.index]=Array(s),y=0;y<s;y++)f[y]=M;return l.index++,f}function vs(s,l){return typeof l=="function"?l(s):l}function xd(s){var l=Jn();return Zp(l,_n,s)}function Zp(s,l,f){var y=s.queue;if(y===null)throw Error(i(311));y.lastRenderedReducer=f;var _=s.baseQueue,E=y.pending;if(E!==null){if(_!==null){var H=_.next;_.next=E.next,E.next=H}l.baseQueue=_=E,y.pending=null}if(E=s.baseState,_===null)s.memoizedState=E;else{l=_.next;var X=H=null,re=null,ye=l,Ce=!1;do{var Ne=ye.lane&-536870913;if(Ne!==ye.lane?(Qt&Ne)===Ne:(xs&Ne)===Ne){var xe=ye.revertLane;if(xe===0)re!==null&&(re=re.next={lane:0,revertLane:0,gesture:null,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null}),Ne===Ia&&(Ce=!0);else if((xs&xe)===xe){ye=ye.next,xe===Ia&&(Ce=!0);continue}else Ne={lane:0,revertLane:ye.revertLane,gesture:null,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null},re===null?(X=re=Ne,H=E):re=re.next=Ne,Et.lanes|=xe,no|=xe;Ne=ye.action,Go&&f(E,Ne),E=ye.hasEagerState?ye.eagerState:f(E,Ne)}else xe={lane:Ne,revertLane:ye.revertLane,gesture:ye.gesture,action:ye.action,hasEagerState:ye.hasEagerState,eagerState:ye.eagerState,next:null},re===null?(X=re=xe,H=E):re=re.next=xe,Et.lanes|=Ne,no|=Ne;ye=ye.next}while(ye!==null&&ye!==l);if(re===null?H=E:re.next=X,!nr(E,s.memoizedState)&&(oi=!0,Ce&&(f=Ta,f!==null)))throw f;s.memoizedState=E,s.baseState=H,s.baseQueue=re,y.lastRenderedState=E}return _===null&&(y.lanes=0),[s.memoizedState,y.dispatch]}function Qp(s){var l=Jn(),f=l.queue;if(f===null)throw Error(i(311));f.lastRenderedReducer=s;var y=f.dispatch,_=f.pending,E=l.memoizedState;if(_!==null){f.pending=null;var H=_=_.next;do E=s(E,H.action),H=H.next;while(H!==_);nr(E,l.memoizedState)||(oi=!0),l.memoizedState=E,l.baseQueue===null&&(l.baseState=E),f.lastRenderedState=E}return[E,y]}function Hb(s,l,f){var y=Et,_=Jn(),E=en;if(E){if(f===void 0)throw Error(i(407));f=f()}else f=l();var H=!nr((_n||_).memoizedState,f);if(H&&(_.memoizedState=f,oi=!0),_=_.queue,th(Ub.bind(null,y,_,s),[s]),_.getSnapshot!==l||H||si!==null&&si.memoizedState.tag&1){if(y.flags|=2048,La(9,{destroy:void 0},Vb.bind(null,y,_,f,l),null),En===null)throw Error(i(349));E||(xs&127)!==0||Fb(y,l,f)}return f}function Fb(s,l,f){s.flags|=16384,s={getSnapshot:l,value:f},l=Et.updateQueue,l===null?(l=gd(),Et.updateQueue=l,l.stores=[s]):(f=l.stores,f===null?l.stores=[s]:f.push(s))}function Vb(s,l,f,y){l.value=f,l.getSnapshot=y,Gb(l)&&qb(s)}function Ub(s,l,f){return f(function(){Gb(l)&&qb(s)})}function Gb(s){var l=s.getSnapshot;s=s.value;try{var f=l();return!nr(s,f)}catch{return!0}}function qb(s){var l=Lo(s,2);l!==null&&Ki(l,s,2)}function Jp(s){var l=$i();if(typeof s=="function"){var f=s;if(s=f(),Go){Qe(!0);try{f()}finally{Qe(!1)}}}return l.memoizedState=l.baseState=s,l.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:vs,lastRenderedState:s},l}function Wb(s,l,f,y){return s.baseState=f,Zp(s,_n,typeof y=="function"?y:vs)}function TA(s,l,f,y,_){if(_d(s))throw Error(i(485));if(s=l.action,s!==null){var E={payload:_,action:s,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(H){E.listeners.push(H)}};$.T!==null?f(!0):E.isTransition=!1,y(E),f=l.pending,f===null?(E.next=l.pending=E,Yb(l,E)):(E.next=f.next,l.pending=f.next=E)}}function Yb(s,l){var f=l.action,y=l.payload,_=s.state;if(l.isTransition){var E=$.T,H={};$.T=H;try{var X=f(_,y),re=$.S;re!==null&&re(H,X),Xb(s,l,X)}catch(ye){eh(s,l,ye)}finally{E!==null&&H.types!==null&&(E.types=H.types),$.T=E}}else try{E=f(_,y),Xb(s,l,E)}catch(ye){eh(s,l,ye)}}function Xb(s,l,f){f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(function(y){Kb(s,l,y)},function(y){return eh(s,l,y)}):Kb(s,l,f)}function Kb(s,l,f){l.status="fulfilled",l.value=f,Zb(l),s.state=f,l=s.pending,l!==null&&(f=l.next,f===l?s.pending=null:(f=f.next,l.next=f,Yb(s,f)))}function eh(s,l,f){var y=s.pending;if(s.pending=null,y!==null){y=y.next;do l.status="rejected",l.reason=f,Zb(l),l=l.next;while(l!==y)}s.action=null}function Zb(s){s=s.listeners;for(var l=0;l<s.length;l++)(0,s[l])()}function Qb(s,l){return l}function Jb(s,l){if(en){var f=En.formState;if(f!==null){e:{var y=Et;if(en){if(Mn){t:{for(var _=Mn,E=Sr;_.nodeType!==8;){if(!E){_=null;break t}if(_=Cr(_.nextSibling),_===null){_=null;break t}}E=_.data,_=E==="F!"||E==="F"?_:null}if(_){Mn=Cr(_.nextSibling),y=_.data==="F!";break e}}Ws(y)}y=!1}y&&(l=f[0])}}return f=$i(),f.memoizedState=f.baseState=l,y={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Qb,lastRenderedState:l},f.queue=y,f=x1.bind(null,Et,y),y.dispatch=f,y=Jp(!1),E=oh.bind(null,Et,!1,y.queue),y=$i(),_={state:l,dispatch:null,action:s,pending:null},y.queue=_,f=TA.bind(null,Et,_,E,f),_.dispatch=f,y.memoizedState=s,[l,f,!1]}function e1(s){var l=Jn();return t1(l,_n,s)}function t1(s,l,f){if(l=Zp(s,l,Qb)[0],s=xd(vs)[0],typeof l=="object"&&l!==null&&typeof l.then=="function")try{var y=dc(l)}catch(H){throw H===Ra?ld:H}else y=l;l=Jn();var _=l.queue,E=_.dispatch;return f!==l.memoizedState&&(Et.flags|=2048,La(9,{destroy:void 0},RA.bind(null,_,f),null)),[y,E,s]}function RA(s,l){s.action=l}function n1(s){var l=Jn(),f=_n;if(f!==null)return t1(l,f,s);Jn(),l=l.memoizedState,f=Jn();var y=f.queue.dispatch;return f.memoizedState=s,[l,y,!1]}function La(s,l,f,y){return s={tag:s,create:f,deps:y,inst:l,next:null},l=Et.updateQueue,l===null&&(l=gd(),Et.updateQueue=l),f=l.lastEffect,f===null?l.lastEffect=s.next=s:(y=f.next,f.next=s,s.next=y,l.lastEffect=s),s}function i1(){return Jn().memoizedState}function vd(s,l,f,y){var _=$i();Et.flags|=s,_.memoizedState=La(1|l,{destroy:void 0},f,y===void 0?null:y)}function bd(s,l,f,y){var _=Jn();y=y===void 0?null:y;var E=_.memoizedState.inst;_n!==null&&y!==null&&Gp(y,_n.memoizedState.deps)?_.memoizedState=La(l,E,f,y):(Et.flags|=s,_.memoizedState=La(1|l,E,f,y))}function r1(s,l){vd(8390656,8,s,l)}function th(s,l){bd(2048,8,s,l)}function AA(s){Et.flags|=4;var l=Et.updateQueue;if(l===null)l=gd(),Et.updateQueue=l,l.events=[s];else{var f=l.events;f===null?l.events=[s]:f.push(s)}}function s1(s){var l=Jn().memoizedState;return AA({ref:l,nextImpl:s}),function(){if((fn&2)!==0)throw Error(i(440));return l.impl.apply(void 0,arguments)}}function o1(s,l){return bd(4,2,s,l)}function a1(s,l){return bd(4,4,s,l)}function l1(s,l){if(typeof l=="function"){s=s();var f=l(s);return function(){typeof f=="function"?f():l(null)}}if(l!=null)return s=s(),l.current=s,function(){l.current=null}}function c1(s,l,f){f=f!=null?f.concat([s]):null,bd(4,4,l1.bind(null,l,s),f)}function nh(){}function u1(s,l){var f=Jn();l=l===void 0?null:l;var y=f.memoizedState;return l!==null&&Gp(l,y[1])?y[0]:(f.memoizedState=[s,l],s)}function d1(s,l){var f=Jn();l=l===void 0?null:l;var y=f.memoizedState;if(l!==null&&Gp(l,y[1]))return y[0];if(y=s(),Go){Qe(!0);try{s()}finally{Qe(!1)}}return f.memoizedState=[y,l],y}function ih(s,l,f){return f===void 0||(xs&1073741824)!==0&&(Qt&261930)===0?s.memoizedState=l:(s.memoizedState=f,s=f_(),Et.lanes|=s,no|=s,f)}function f1(s,l,f,y){return nr(f,l)?f:Ma.current!==null?(s=ih(s,f,y),nr(s,l)||(oi=!0),s):(xs&42)===0||(xs&1073741824)!==0&&(Qt&261930)===0?(oi=!0,s.memoizedState=f):(s=f_(),Et.lanes|=s,no|=s,l)}function m1(s,l,f,y,_){var E=q.p;q.p=E!==0&&8>E?E:8;var H=$.T,X={};$.T=X,oh(s,!1,l,f);try{var re=_(),ye=$.S;if(ye!==null&&ye(X,re),re!==null&&typeof re=="object"&&typeof re.then=="function"){var Ce=EA(re,y);fc(s,l,Ce,lr(s))}else fc(s,l,y,lr(s))}catch(Ne){fc(s,l,{then:function(){},status:"rejected",reason:Ne},lr())}finally{q.p=E,H!==null&&X.types!==null&&(H.types=X.types),$.T=H}}function MA(){}function rh(s,l,f,y){if(s.tag!==5)throw Error(i(476));var _=p1(s).queue;m1(s,_,l,Y,f===null?MA:function(){return h1(s),f(y)})}function p1(s){var l=s.memoizedState;if(l!==null)return l;l={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:vs,lastRenderedState:Y},next:null};var f={};return l.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:vs,lastRenderedState:f},next:null},s.memoizedState=l,s=s.alternate,s!==null&&(s.memoizedState=l),l}function h1(s){var l=p1(s);l.next===null&&(l=s.alternate.memoizedState),fc(s,l.next.queue,{},lr())}function sh(){return Ei(Ic)}function g1(){return Jn().memoizedState}function y1(){return Jn().memoizedState}function DA(s){for(var l=s.return;l!==null;){switch(l.tag){case 24:case 3:var f=lr();s=Ks(f);var y=Zs(l,s,f);y!==null&&(Ki(y,l,f),ac(y,l,f)),l={cache:Dp()},s.payload=l;return}l=l.return}}function OA(s,l,f){var y=lr();f={lane:y,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null},_d(s)?v1(l,f):(f=Sp(s,l,f,y),f!==null&&(Ki(f,s,y),b1(f,l,y)))}function x1(s,l,f){var y=lr();fc(s,l,f,y)}function fc(s,l,f,y){var _={lane:y,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null};if(_d(s))v1(l,_);else{var E=s.alternate;if(s.lanes===0&&(E===null||E.lanes===0)&&(E=l.lastRenderedReducer,E!==null))try{var H=l.lastRenderedState,X=E(H,f);if(_.hasEagerState=!0,_.eagerState=X,nr(X,H))return td(s,l,_,0),En===null&&ed(),!1}catch{}if(f=Sp(s,l,_,y),f!==null)return Ki(f,s,y),b1(f,l,y),!0}return!1}function oh(s,l,f,y){if(y={lane:2,revertLane:Ph(),gesture:null,action:y,hasEagerState:!1,eagerState:null,next:null},_d(s)){if(l)throw Error(i(479))}else l=Sp(s,f,y,2),l!==null&&Ki(l,s,2)}function _d(s){var l=s.alternate;return s===Et||l!==null&&l===Et}function v1(s,l){Da=pd=!0;var f=s.pending;f===null?l.next=l:(l.next=f.next,f.next=l),s.pending=l}function b1(s,l,f){if((f&4194048)!==0){var y=l.lanes;y&=s.pendingLanes,f|=y,l.lanes=f,pn(s,f)}}var mc={readContext:Ei,use:yd,useCallback:Wn,useContext:Wn,useEffect:Wn,useImperativeHandle:Wn,useLayoutEffect:Wn,useInsertionEffect:Wn,useMemo:Wn,useReducer:Wn,useRef:Wn,useState:Wn,useDebugValue:Wn,useDeferredValue:Wn,useTransition:Wn,useSyncExternalStore:Wn,useId:Wn,useHostTransitionStatus:Wn,useFormState:Wn,useActionState:Wn,useOptimistic:Wn,useMemoCache:Wn,useCacheRefresh:Wn};mc.useEffectEvent=Wn;var _1={readContext:Ei,use:yd,useCallback:function(s,l){return $i().memoizedState=[s,l===void 0?null:l],s},useContext:Ei,useEffect:r1,useImperativeHandle:function(s,l,f){f=f!=null?f.concat([s]):null,vd(4194308,4,l1.bind(null,l,s),f)},useLayoutEffect:function(s,l){return vd(4194308,4,s,l)},useInsertionEffect:function(s,l){vd(4,2,s,l)},useMemo:function(s,l){var f=$i();l=l===void 0?null:l;var y=s();if(Go){Qe(!0);try{s()}finally{Qe(!1)}}return f.memoizedState=[y,l],y},useReducer:function(s,l,f){var y=$i();if(f!==void 0){var _=f(l);if(Go){Qe(!0);try{f(l)}finally{Qe(!1)}}}else _=l;return y.memoizedState=y.baseState=_,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:_},y.queue=s,s=s.dispatch=OA.bind(null,Et,s),[y.memoizedState,s]},useRef:function(s){var l=$i();return s={current:s},l.memoizedState=s},useState:function(s){s=Jp(s);var l=s.queue,f=x1.bind(null,Et,l);return l.dispatch=f,[s.memoizedState,f]},useDebugValue:nh,useDeferredValue:function(s,l){var f=$i();return ih(f,s,l)},useTransition:function(){var s=Jp(!1);return s=m1.bind(null,Et,s.queue,!0,!1),$i().memoizedState=s,[!1,s]},useSyncExternalStore:function(s,l,f){var y=Et,_=$i();if(en){if(f===void 0)throw Error(i(407));f=f()}else{if(f=l(),En===null)throw Error(i(349));(Qt&127)!==0||Fb(y,l,f)}_.memoizedState=f;var E={value:f,getSnapshot:l};return _.queue=E,r1(Ub.bind(null,y,E,s),[s]),y.flags|=2048,La(9,{destroy:void 0},Vb.bind(null,y,E,f,l),null),f},useId:function(){var s=$i(),l=En.identifierPrefix;if(en){var f=Xr,y=Yr;f=(y&~(1<<32-$e(y)-1)).toString(32)+f,l="_"+l+"R_"+f,f=hd++,0<f&&(l+="H"+f.toString(32)),l+="_"}else f=NA++,l="_"+l+"r_"+f.toString(32)+"_";return s.memoizedState=l},useHostTransitionStatus:sh,useFormState:Jb,useActionState:Jb,useOptimistic:function(s){var l=$i();l.memoizedState=l.baseState=s;var f={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return l.queue=f,l=oh.bind(null,Et,!0,f),f.dispatch=l,[s,l]},useMemoCache:Kp,useCacheRefresh:function(){return $i().memoizedState=DA.bind(null,Et)},useEffectEvent:function(s){var l=$i(),f={impl:s};return l.memoizedState=f,function(){if((fn&2)!==0)throw Error(i(440));return f.impl.apply(void 0,arguments)}}},ah={readContext:Ei,use:yd,useCallback:u1,useContext:Ei,useEffect:th,useImperativeHandle:c1,useInsertionEffect:o1,useLayoutEffect:a1,useMemo:d1,useReducer:xd,useRef:i1,useState:function(){return xd(vs)},useDebugValue:nh,useDeferredValue:function(s,l){var f=Jn();return f1(f,_n.memoizedState,s,l)},useTransition:function(){var s=xd(vs)[0],l=Jn().memoizedState;return[typeof s=="boolean"?s:dc(s),l]},useSyncExternalStore:Hb,useId:g1,useHostTransitionStatus:sh,useFormState:e1,useActionState:e1,useOptimistic:function(s,l){var f=Jn();return Wb(f,_n,s,l)},useMemoCache:Kp,useCacheRefresh:y1};ah.useEffectEvent=s1;var k1={readContext:Ei,use:yd,useCallback:u1,useContext:Ei,useEffect:th,useImperativeHandle:c1,useInsertionEffect:o1,useLayoutEffect:a1,useMemo:d1,useReducer:Qp,useRef:i1,useState:function(){return Qp(vs)},useDebugValue:nh,useDeferredValue:function(s,l){var f=Jn();return _n===null?ih(f,s,l):f1(f,_n.memoizedState,s,l)},useTransition:function(){var s=Qp(vs)[0],l=Jn().memoizedState;return[typeof s=="boolean"?s:dc(s),l]},useSyncExternalStore:Hb,useId:g1,useHostTransitionStatus:sh,useFormState:n1,useActionState:n1,useOptimistic:function(s,l){var f=Jn();return _n!==null?Wb(f,_n,s,l):(f.baseState=s,[s,f.queue.dispatch])},useMemoCache:Kp,useCacheRefresh:y1};k1.useEffectEvent=s1;function lh(s,l,f,y){l=s.memoizedState,f=f(y,l),f=f==null?l:p({},l,f),s.memoizedState=f,s.lanes===0&&(s.updateQueue.baseState=f)}var ch={enqueueSetState:function(s,l,f){s=s._reactInternals;var y=lr(),_=Ks(y);_.payload=l,f!=null&&(_.callback=f),l=Zs(s,_,y),l!==null&&(Ki(l,s,y),ac(l,s,y))},enqueueReplaceState:function(s,l,f){s=s._reactInternals;var y=lr(),_=Ks(y);_.tag=1,_.payload=l,f!=null&&(_.callback=f),l=Zs(s,_,y),l!==null&&(Ki(l,s,y),ac(l,s,y))},enqueueForceUpdate:function(s,l){s=s._reactInternals;var f=lr(),y=Ks(f);y.tag=2,l!=null&&(y.callback=l),l=Zs(s,y,f),l!==null&&(Ki(l,s,f),ac(l,s,f))}};function S1(s,l,f,y,_,E,H){return s=s.stateNode,typeof s.shouldComponentUpdate=="function"?s.shouldComponentUpdate(y,E,H):l.prototype&&l.prototype.isPureReactComponent?!Jl(f,y)||!Jl(_,E):!0}function w1(s,l,f,y){s=l.state,typeof l.componentWillReceiveProps=="function"&&l.componentWillReceiveProps(f,y),typeof l.UNSAFE_componentWillReceiveProps=="function"&&l.UNSAFE_componentWillReceiveProps(f,y),l.state!==s&&ch.enqueueReplaceState(l,l.state,null)}function qo(s,l){var f=l;if("ref"in l){f={};for(var y in l)y!=="ref"&&(f[y]=l[y])}if(s=s.defaultProps){f===l&&(f=p({},f));for(var _ in s)f[_]===void 0&&(f[_]=s[_])}return f}function C1(s){Ju(s)}function j1(s){console.error(s)}function E1(s){Ju(s)}function kd(s,l){try{var f=s.onUncaughtError;f(l.value,{componentStack:l.stack})}catch(y){setTimeout(function(){throw y})}}function N1(s,l,f){try{var y=s.onCaughtError;y(f.value,{componentStack:f.stack,errorBoundary:l.tag===1?l.stateNode:null})}catch(_){setTimeout(function(){throw _})}}function uh(s,l,f){return f=Ks(f),f.tag=3,f.payload={element:null},f.callback=function(){kd(s,l)},f}function I1(s){return s=Ks(s),s.tag=3,s}function T1(s,l,f,y){var _=f.type.getDerivedStateFromError;if(typeof _=="function"){var E=y.value;s.payload=function(){return _(E)},s.callback=function(){N1(l,f,y)}}var H=f.stateNode;H!==null&&typeof H.componentDidCatch=="function"&&(s.callback=function(){N1(l,f,y),typeof _!="function"&&(io===null?io=new Set([this]):io.add(this));var X=y.stack;this.componentDidCatch(y.value,{componentStack:X!==null?X:""})})}function LA(s,l,f,y,_){if(f.flags|=32768,y!==null&&typeof y=="object"&&typeof y.then=="function"){if(l=f.alternate,l!==null&&Na(l,f,_,!0),f=rr.current,f!==null){switch(f.tag){case 31:case 13:return wr===null?Dd():f.alternate===null&&Yn===0&&(Yn=3),f.flags&=-257,f.flags|=65536,f.lanes=_,y===cd?f.flags|=16384:(l=f.updateQueue,l===null?f.updateQueue=new Set([y]):l.add(y),Oh(s,y,_)),!1;case 22:return f.flags|=65536,y===cd?f.flags|=16384:(l=f.updateQueue,l===null?(l={transitions:null,markerInstances:null,retryQueue:new Set([y])},f.updateQueue=l):(f=l.retryQueue,f===null?l.retryQueue=new Set([y]):f.add(y)),Oh(s,y,_)),!1}throw Error(i(435,f.tag))}return Oh(s,y,_),Dd(),!1}if(en)return l=rr.current,l!==null?((l.flags&65536)===0&&(l.flags|=256),l.flags|=65536,l.lanes=_,y!==Ip&&(s=Error(i(422),{cause:y}),nc(br(s,f)))):(y!==Ip&&(l=Error(i(423),{cause:y}),nc(br(l,f))),s=s.current.alternate,s.flags|=65536,_&=-_,s.lanes|=_,y=br(y,f),_=uh(s.stateNode,y,_),$p(s,_),Yn!==4&&(Yn=2)),!1;var E=Error(i(520),{cause:y});if(E=br(E,f),_c===null?_c=[E]:_c.push(E),Yn!==4&&(Yn=2),l===null)return!0;y=br(y,f),f=l;do{switch(f.tag){case 3:return f.flags|=65536,s=_&-_,f.lanes|=s,s=uh(f.stateNode,y,s),$p(f,s),!1;case 1:if(l=f.type,E=f.stateNode,(f.flags&128)===0&&(typeof l.getDerivedStateFromError=="function"||E!==null&&typeof E.componentDidCatch=="function"&&(io===null||!io.has(E))))return f.flags|=65536,_&=-_,f.lanes|=_,_=I1(_),T1(_,s,f,y),$p(f,_),!1}f=f.return}while(f!==null);return!1}var dh=Error(i(461)),oi=!1;function Ni(s,l,f,y){l.child=s===null?Db(l,null,f,y):Uo(l,s.child,f,y)}function R1(s,l,f,y,_){f=f.render;var E=l.ref;if("ref"in y){var H={};for(var X in y)X!=="ref"&&(H[X]=y[X])}else H=y;return $o(l),y=qp(s,l,f,H,E,_),X=Wp(),s!==null&&!oi?(Yp(s,l,_),bs(s,l,_)):(en&&X&&Ep(l),l.flags|=1,Ni(s,l,y,_),l.child)}function A1(s,l,f,y,_){if(s===null){var E=f.type;return typeof E=="function"&&!wp(E)&&E.defaultProps===void 0&&f.compare===null?(l.tag=15,l.type=E,M1(s,l,E,y,_)):(s=id(f.type,null,y,l,l.mode,_),s.ref=l.ref,s.return=l,l.child=s)}if(E=s.child,!vh(s,_)){var H=E.memoizedProps;if(f=f.compare,f=f!==null?f:Jl,f(H,y)&&s.ref===l.ref)return bs(s,l,_)}return l.flags|=1,s=ps(E,y),s.ref=l.ref,s.return=l,l.child=s}function M1(s,l,f,y,_){if(s!==null){var E=s.memoizedProps;if(Jl(E,y)&&s.ref===l.ref)if(oi=!1,l.pendingProps=y=E,vh(s,_))(s.flags&131072)!==0&&(oi=!0);else return l.lanes=s.lanes,bs(s,l,_)}return fh(s,l,f,y,_)}function D1(s,l,f,y){var _=y.children,E=s!==null?s.memoizedState:null;if(s===null&&l.stateNode===null&&(l.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),y.mode==="hidden"){if((l.flags&128)!==0){if(E=E!==null?E.baseLanes|f:f,s!==null){for(y=l.child=s.child,_=0;y!==null;)_=_|y.lanes|y.childLanes,y=y.sibling;y=_&~E}else y=0,l.child=null;return O1(s,l,E,f,y)}if((f&536870912)!==0)l.memoizedState={baseLanes:0,cachePool:null},s!==null&&ad(l,E!==null?E.cachePool:null),E!==null?zb(l,E):Fp(),Pb(l);else return y=l.lanes=536870912,O1(s,l,E!==null?E.baseLanes|f:f,f,y)}else E!==null?(ad(l,E.cachePool),zb(l,E),Js(),l.memoizedState=null):(s!==null&&ad(l,null),Fp(),Js());return Ni(s,l,_,f),l.child}function pc(s,l){return s!==null&&s.tag===22||l.stateNode!==null||(l.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),l.sibling}function O1(s,l,f,y,_){var E=Lp();return E=E===null?null:{parent:ri._currentValue,pool:E},l.memoizedState={baseLanes:f,cachePool:E},s!==null&&ad(l,null),Fp(),Pb(l),s!==null&&Na(s,l,y,!0),l.childLanes=_,null}function Sd(s,l){return l=Cd({mode:l.mode,children:l.children},s.mode),l.ref=s.ref,s.child=l,l.return=s,l}function L1(s,l,f){return Uo(l,s.child,null,f),s=Sd(l,l.pendingProps),s.flags|=2,sr(l),l.memoizedState=null,s}function zA(s,l,f){var y=l.pendingProps,_=(l.flags&128)!==0;if(l.flags&=-129,s===null){if(en){if(y.mode==="hidden")return s=Sd(l,y),l.lanes=536870912,pc(null,s);if(Up(l),(s=Mn)?(s=Y_(s,Sr),s=s!==null&&s.data==="&"?s:null,s!==null&&(l.memoizedState={dehydrated:s,treeContext:Gs!==null?{id:Yr,overflow:Xr}:null,retryLane:536870912,hydrationErrors:null},f=vb(s),f.return=l,l.child=f,ji=l,Mn=null)):s=null,s===null)throw Ws(l);return l.lanes=536870912,null}return Sd(l,y)}var E=s.memoizedState;if(E!==null){var H=E.dehydrated;if(Up(l),_)if(l.flags&256)l.flags&=-257,l=L1(s,l,f);else if(l.memoizedState!==null)l.child=s.child,l.flags|=128,l=null;else throw Error(i(558));else if(oi||Na(s,l,f,!1),_=(f&s.childLanes)!==0,oi||_){if(y=En,y!==null&&(H=Fn(y,f),H!==0&&H!==E.retryLane))throw E.retryLane=H,Lo(s,H),Ki(y,s,H),dh;Dd(),l=L1(s,l,f)}else s=E.treeContext,Mn=Cr(H.nextSibling),ji=l,en=!0,qs=null,Sr=!1,s!==null&&kb(l,s),l=Sd(l,y),l.flags|=4096;return l}return s=ps(s.child,{mode:y.mode,children:y.children}),s.ref=l.ref,l.child=s,s.return=l,s}function wd(s,l){var f=l.ref;if(f===null)s!==null&&s.ref!==null&&(l.flags|=4194816);else{if(typeof f!="function"&&typeof f!="object")throw Error(i(284));(s===null||s.ref!==f)&&(l.flags|=4194816)}}function fh(s,l,f,y,_){return $o(l),f=qp(s,l,f,y,void 0,_),y=Wp(),s!==null&&!oi?(Yp(s,l,_),bs(s,l,_)):(en&&y&&Ep(l),l.flags|=1,Ni(s,l,f,_),l.child)}function z1(s,l,f,y,_,E){return $o(l),l.updateQueue=null,f=$b(l,y,f,_),Bb(s),y=Wp(),s!==null&&!oi?(Yp(s,l,E),bs(s,l,E)):(en&&y&&Ep(l),l.flags|=1,Ni(s,l,f,E),l.child)}function P1(s,l,f,y,_){if($o(l),l.stateNode===null){var E=wa,H=f.contextType;typeof H=="object"&&H!==null&&(E=Ei(H)),E=new f(y,E),l.memoizedState=E.state!==null&&E.state!==void 0?E.state:null,E.updater=ch,l.stateNode=E,E._reactInternals=l,E=l.stateNode,E.props=y,E.state=l.memoizedState,E.refs={},Pp(l),H=f.contextType,E.context=typeof H=="object"&&H!==null?Ei(H):wa,E.state=l.memoizedState,H=f.getDerivedStateFromProps,typeof H=="function"&&(lh(l,f,H,y),E.state=l.memoizedState),typeof f.getDerivedStateFromProps=="function"||typeof E.getSnapshotBeforeUpdate=="function"||typeof E.UNSAFE_componentWillMount!="function"&&typeof E.componentWillMount!="function"||(H=E.state,typeof E.componentWillMount=="function"&&E.componentWillMount(),typeof E.UNSAFE_componentWillMount=="function"&&E.UNSAFE_componentWillMount(),H!==E.state&&ch.enqueueReplaceState(E,E.state,null),cc(l,y,E,_),lc(),E.state=l.memoizedState),typeof E.componentDidMount=="function"&&(l.flags|=4194308),y=!0}else if(s===null){E=l.stateNode;var X=l.memoizedProps,re=qo(f,X);E.props=re;var ye=E.context,Ce=f.contextType;H=wa,typeof Ce=="object"&&Ce!==null&&(H=Ei(Ce));var Ne=f.getDerivedStateFromProps;Ce=typeof Ne=="function"||typeof E.getSnapshotBeforeUpdate=="function",X=l.pendingProps!==X,Ce||typeof E.UNSAFE_componentWillReceiveProps!="function"&&typeof E.componentWillReceiveProps!="function"||(X||ye!==H)&&w1(l,E,y,H),Xs=!1;var xe=l.memoizedState;E.state=xe,cc(l,y,E,_),lc(),ye=l.memoizedState,X||xe!==ye||Xs?(typeof Ne=="function"&&(lh(l,f,Ne,y),ye=l.memoizedState),(re=Xs||S1(l,f,re,y,xe,ye,H))?(Ce||typeof E.UNSAFE_componentWillMount!="function"&&typeof E.componentWillMount!="function"||(typeof E.componentWillMount=="function"&&E.componentWillMount(),typeof E.UNSAFE_componentWillMount=="function"&&E.UNSAFE_componentWillMount()),typeof E.componentDidMount=="function"&&(l.flags|=4194308)):(typeof E.componentDidMount=="function"&&(l.flags|=4194308),l.memoizedProps=y,l.memoizedState=ye),E.props=y,E.state=ye,E.context=H,y=re):(typeof E.componentDidMount=="function"&&(l.flags|=4194308),y=!1)}else{E=l.stateNode,Bp(s,l),H=l.memoizedProps,Ce=qo(f,H),E.props=Ce,Ne=l.pendingProps,xe=E.context,ye=f.contextType,re=wa,typeof ye=="object"&&ye!==null&&(re=Ei(ye)),X=f.getDerivedStateFromProps,(ye=typeof X=="function"||typeof E.getSnapshotBeforeUpdate=="function")||typeof E.UNSAFE_componentWillReceiveProps!="function"&&typeof E.componentWillReceiveProps!="function"||(H!==Ne||xe!==re)&&w1(l,E,y,re),Xs=!1,xe=l.memoizedState,E.state=xe,cc(l,y,E,_),lc();var _e=l.memoizedState;H!==Ne||xe!==_e||Xs||s!==null&&s.dependencies!==null&&sd(s.dependencies)?(typeof X=="function"&&(lh(l,f,X,y),_e=l.memoizedState),(Ce=Xs||S1(l,f,Ce,y,xe,_e,re)||s!==null&&s.dependencies!==null&&sd(s.dependencies))?(ye||typeof E.UNSAFE_componentWillUpdate!="function"&&typeof E.componentWillUpdate!="function"||(typeof E.componentWillUpdate=="function"&&E.componentWillUpdate(y,_e,re),typeof E.UNSAFE_componentWillUpdate=="function"&&E.UNSAFE_componentWillUpdate(y,_e,re)),typeof E.componentDidUpdate=="function"&&(l.flags|=4),typeof E.getSnapshotBeforeUpdate=="function"&&(l.flags|=1024)):(typeof E.componentDidUpdate!="function"||H===s.memoizedProps&&xe===s.memoizedState||(l.flags|=4),typeof E.getSnapshotBeforeUpdate!="function"||H===s.memoizedProps&&xe===s.memoizedState||(l.flags|=1024),l.memoizedProps=y,l.memoizedState=_e),E.props=y,E.state=_e,E.context=re,y=Ce):(typeof E.componentDidUpdate!="function"||H===s.memoizedProps&&xe===s.memoizedState||(l.flags|=4),typeof E.getSnapshotBeforeUpdate!="function"||H===s.memoizedProps&&xe===s.memoizedState||(l.flags|=1024),y=!1)}return E=y,wd(s,l),y=(l.flags&128)!==0,E||y?(E=l.stateNode,f=y&&typeof f.getDerivedStateFromError!="function"?null:E.render(),l.flags|=1,s!==null&&y?(l.child=Uo(l,s.child,null,_),l.child=Uo(l,null,f,_)):Ni(s,l,f,_),l.memoizedState=E.state,s=l.child):s=bs(s,l,_),s}function B1(s,l,f,y){return Po(),l.flags|=256,Ni(s,l,f,y),l.child}var mh={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function ph(s){return{baseLanes:s,cachePool:Nb()}}function hh(s,l,f){return s=s!==null?s.childLanes&~f:0,l&&(s|=ar),s}function $1(s,l,f){var y=l.pendingProps,_=!1,E=(l.flags&128)!==0,H;if((H=E)||(H=s!==null&&s.memoizedState===null?!1:(Qn.current&2)!==0),H&&(_=!0,l.flags&=-129),H=(l.flags&32)!==0,l.flags&=-33,s===null){if(en){if(_?Qs(l):Js(),(s=Mn)?(s=Y_(s,Sr),s=s!==null&&s.data!=="&"?s:null,s!==null&&(l.memoizedState={dehydrated:s,treeContext:Gs!==null?{id:Yr,overflow:Xr}:null,retryLane:536870912,hydrationErrors:null},f=vb(s),f.return=l,l.child=f,ji=l,Mn=null)):s=null,s===null)throw Ws(l);return Zh(s)?l.lanes=32:l.lanes=536870912,null}var X=y.children;return y=y.fallback,_?(Js(),_=l.mode,X=Cd({mode:"hidden",children:X},_),y=zo(y,_,f,null),X.return=l,y.return=l,X.sibling=y,l.child=X,y=l.child,y.memoizedState=ph(f),y.childLanes=hh(s,H,f),l.memoizedState=mh,pc(null,y)):(Qs(l),gh(l,X))}var re=s.memoizedState;if(re!==null&&(X=re.dehydrated,X!==null)){if(E)l.flags&256?(Qs(l),l.flags&=-257,l=yh(s,l,f)):l.memoizedState!==null?(Js(),l.child=s.child,l.flags|=128,l=null):(Js(),X=y.fallback,_=l.mode,y=Cd({mode:"visible",children:y.children},_),X=zo(X,_,f,null),X.flags|=2,y.return=l,X.return=l,y.sibling=X,l.child=y,Uo(l,s.child,null,f),y=l.child,y.memoizedState=ph(f),y.childLanes=hh(s,H,f),l.memoizedState=mh,l=pc(null,y));else if(Qs(l),Zh(X)){if(H=X.nextSibling&&X.nextSibling.dataset,H)var ye=H.dgst;H=ye,y=Error(i(419)),y.stack="",y.digest=H,nc({value:y,source:null,stack:null}),l=yh(s,l,f)}else if(oi||Na(s,l,f,!1),H=(f&s.childLanes)!==0,oi||H){if(H=En,H!==null&&(y=Fn(H,f),y!==0&&y!==re.retryLane))throw re.retryLane=y,Lo(s,y),Ki(H,s,y),dh;Kh(X)||Dd(),l=yh(s,l,f)}else Kh(X)?(l.flags|=192,l.child=s.child,l=null):(s=re.treeContext,Mn=Cr(X.nextSibling),ji=l,en=!0,qs=null,Sr=!1,s!==null&&kb(l,s),l=gh(l,y.children),l.flags|=4096);return l}return _?(Js(),X=y.fallback,_=l.mode,re=s.child,ye=re.sibling,y=ps(re,{mode:"hidden",children:y.children}),y.subtreeFlags=re.subtreeFlags&65011712,ye!==null?X=ps(ye,X):(X=zo(X,_,f,null),X.flags|=2),X.return=l,y.return=l,y.sibling=X,l.child=y,pc(null,y),y=l.child,X=s.child.memoizedState,X===null?X=ph(f):(_=X.cachePool,_!==null?(re=ri._currentValue,_=_.parent!==re?{parent:re,pool:re}:_):_=Nb(),X={baseLanes:X.baseLanes|f,cachePool:_}),y.memoizedState=X,y.childLanes=hh(s,H,f),l.memoizedState=mh,pc(s.child,y)):(Qs(l),f=s.child,s=f.sibling,f=ps(f,{mode:"visible",children:y.children}),f.return=l,f.sibling=null,s!==null&&(H=l.deletions,H===null?(l.deletions=[s],l.flags|=16):H.push(s)),l.child=f,l.memoizedState=null,f)}function gh(s,l){return l=Cd({mode:"visible",children:l},s.mode),l.return=s,s.child=l}function Cd(s,l){return s=ir(22,s,null,l),s.lanes=0,s}function yh(s,l,f){return Uo(l,s.child,null,f),s=gh(l,l.pendingProps.children),s.flags|=2,l.memoizedState=null,s}function H1(s,l,f){s.lanes|=l;var y=s.alternate;y!==null&&(y.lanes|=l),Ap(s.return,l,f)}function xh(s,l,f,y,_,E){var H=s.memoizedState;H===null?s.memoizedState={isBackwards:l,rendering:null,renderingStartTime:0,last:y,tail:f,tailMode:_,treeForkCount:E}:(H.isBackwards=l,H.rendering=null,H.renderingStartTime=0,H.last=y,H.tail=f,H.tailMode=_,H.treeForkCount=E)}function F1(s,l,f){var y=l.pendingProps,_=y.revealOrder,E=y.tail;y=y.children;var H=Qn.current,X=(H&2)!==0;if(X?(H=H&1|2,l.flags|=128):H&=1,F(Qn,H),Ni(s,l,y,f),y=en?tc:0,!X&&s!==null&&(s.flags&128)!==0)e:for(s=l.child;s!==null;){if(s.tag===13)s.memoizedState!==null&&H1(s,f,l);else if(s.tag===19)H1(s,f,l);else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===l)break e;for(;s.sibling===null;){if(s.return===null||s.return===l)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}switch(_){case"forwards":for(f=l.child,_=null;f!==null;)s=f.alternate,s!==null&&md(s)===null&&(_=f),f=f.sibling;f=_,f===null?(_=l.child,l.child=null):(_=f.sibling,f.sibling=null),xh(l,!1,_,f,E,y);break;case"backwards":case"unstable_legacy-backwards":for(f=null,_=l.child,l.child=null;_!==null;){if(s=_.alternate,s!==null&&md(s)===null){l.child=_;break}s=_.sibling,_.sibling=f,f=_,_=s}xh(l,!0,f,null,E,y);break;case"together":xh(l,!1,null,null,void 0,y);break;default:l.memoizedState=null}return l.child}function bs(s,l,f){if(s!==null&&(l.dependencies=s.dependencies),no|=l.lanes,(f&l.childLanes)===0)if(s!==null){if(Na(s,l,f,!1),(f&l.childLanes)===0)return null}else return null;if(s!==null&&l.child!==s.child)throw Error(i(153));if(l.child!==null){for(s=l.child,f=ps(s,s.pendingProps),l.child=f,f.return=l;s.sibling!==null;)s=s.sibling,f=f.sibling=ps(s,s.pendingProps),f.return=l;f.sibling=null}return l.child}function vh(s,l){return(s.lanes&l)!==0?!0:(s=s.dependencies,!!(s!==null&&sd(s)))}function PA(s,l,f){switch(l.tag){case 3:ae(l,l.stateNode.containerInfo),Ys(l,ri,s.memoizedState.cache),Po();break;case 27:case 5:ie(l);break;case 4:ae(l,l.stateNode.containerInfo);break;case 10:Ys(l,l.type,l.memoizedProps.value);break;case 31:if(l.memoizedState!==null)return l.flags|=128,Up(l),null;break;case 13:var y=l.memoizedState;if(y!==null)return y.dehydrated!==null?(Qs(l),l.flags|=128,null):(f&l.child.childLanes)!==0?$1(s,l,f):(Qs(l),s=bs(s,l,f),s!==null?s.sibling:null);Qs(l);break;case 19:var _=(s.flags&128)!==0;if(y=(f&l.childLanes)!==0,y||(Na(s,l,f,!1),y=(f&l.childLanes)!==0),_){if(y)return F1(s,l,f);l.flags|=128}if(_=l.memoizedState,_!==null&&(_.rendering=null,_.tail=null,_.lastEffect=null),F(Qn,Qn.current),y)break;return null;case 22:return l.lanes=0,D1(s,l,f,l.pendingProps);case 24:Ys(l,ri,s.memoizedState.cache)}return bs(s,l,f)}function V1(s,l,f){if(s!==null)if(s.memoizedProps!==l.pendingProps)oi=!0;else{if(!vh(s,f)&&(l.flags&128)===0)return oi=!1,PA(s,l,f);oi=(s.flags&131072)!==0}else oi=!1,en&&(l.flags&1048576)!==0&&_b(l,tc,l.index);switch(l.lanes=0,l.tag){case 16:e:{var y=l.pendingProps;if(s=Fo(l.elementType),l.type=s,typeof s=="function")wp(s)?(y=qo(s,y),l.tag=1,l=P1(null,l,s,y,f)):(l.tag=0,l=fh(null,l,s,y,f));else{if(s!=null){var _=s.$$typeof;if(_===N){l.tag=11,l=R1(null,l,s,y,f);break e}else if(_===D){l.tag=14,l=A1(null,l,s,y,f);break e}}throw l=P(s)||s,Error(i(306,l,""))}}return l;case 0:return fh(s,l,l.type,l.pendingProps,f);case 1:return y=l.type,_=qo(y,l.pendingProps),P1(s,l,y,_,f);case 3:e:{if(ae(l,l.stateNode.containerInfo),s===null)throw Error(i(387));y=l.pendingProps;var E=l.memoizedState;_=E.element,Bp(s,l),cc(l,y,null,f);var H=l.memoizedState;if(y=H.cache,Ys(l,ri,y),y!==E.cache&&Mp(l,[ri],f,!0),lc(),y=H.element,E.isDehydrated)if(E={element:y,isDehydrated:!1,cache:H.cache},l.updateQueue.baseState=E,l.memoizedState=E,l.flags&256){l=B1(s,l,y,f);break e}else if(y!==_){_=br(Error(i(424)),l),nc(_),l=B1(s,l,y,f);break e}else for(s=l.stateNode.containerInfo,s.nodeType===9?s=s.body:s=s.nodeName==="HTML"?s.ownerDocument.body:s,Mn=Cr(s.firstChild),ji=l,en=!0,qs=null,Sr=!0,f=Db(l,null,y,f),l.child=f;f;)f.flags=f.flags&-3|4096,f=f.sibling;else{if(Po(),y===_){l=bs(s,l,f);break e}Ni(s,l,y,f)}l=l.child}return l;case 26:return wd(s,l),s===null?(f=ek(l.type,null,l.pendingProps,null))?l.memoizedState=f:en||(f=l.type,s=l.pendingProps,y=Hd(te.current).createElement(f),y[$t]=l,y[Cn]=s,Ii(y,f,s),Kt(y),l.stateNode=y):l.memoizedState=ek(l.type,s.memoizedProps,l.pendingProps,s.memoizedState),null;case 27:return ie(l),s===null&&en&&(y=l.stateNode=Z_(l.type,l.pendingProps,te.current),ji=l,Sr=!0,_=Mn,ao(l.type)?(Qh=_,Mn=Cr(y.firstChild)):Mn=_),Ni(s,l,l.pendingProps.children,f),wd(s,l),s===null&&(l.flags|=4194304),l.child;case 5:return s===null&&en&&((_=y=Mn)&&(y=p3(y,l.type,l.pendingProps,Sr),y!==null?(l.stateNode=y,ji=l,Mn=Cr(y.firstChild),Sr=!1,_=!0):_=!1),_||Ws(l)),ie(l),_=l.type,E=l.pendingProps,H=s!==null?s.memoizedProps:null,y=E.children,Wh(_,E)?y=null:H!==null&&Wh(_,H)&&(l.flags|=32),l.memoizedState!==null&&(_=qp(s,l,IA,null,null,f),Ic._currentValue=_),wd(s,l),Ni(s,l,y,f),l.child;case 6:return s===null&&en&&((s=f=Mn)&&(f=h3(f,l.pendingProps,Sr),f!==null?(l.stateNode=f,ji=l,Mn=null,s=!0):s=!1),s||Ws(l)),null;case 13:return $1(s,l,f);case 4:return ae(l,l.stateNode.containerInfo),y=l.pendingProps,s===null?l.child=Uo(l,null,y,f):Ni(s,l,y,f),l.child;case 11:return R1(s,l,l.type,l.pendingProps,f);case 7:return Ni(s,l,l.pendingProps,f),l.child;case 8:return Ni(s,l,l.pendingProps.children,f),l.child;case 12:return Ni(s,l,l.pendingProps.children,f),l.child;case 10:return y=l.pendingProps,Ys(l,l.type,y.value),Ni(s,l,y.children,f),l.child;case 9:return _=l.type._context,y=l.pendingProps.children,$o(l),_=Ei(_),y=y(_),l.flags|=1,Ni(s,l,y,f),l.child;case 14:return A1(s,l,l.type,l.pendingProps,f);case 15:return M1(s,l,l.type,l.pendingProps,f);case 19:return F1(s,l,f);case 31:return zA(s,l,f);case 22:return D1(s,l,f,l.pendingProps);case 24:return $o(l),y=Ei(ri),s===null?(_=Lp(),_===null&&(_=En,E=Dp(),_.pooledCache=E,E.refCount++,E!==null&&(_.pooledCacheLanes|=f),_=E),l.memoizedState={parent:y,cache:_},Pp(l),Ys(l,ri,_)):((s.lanes&f)!==0&&(Bp(s,l),cc(l,null,null,f),lc()),_=s.memoizedState,E=l.memoizedState,_.parent!==y?(_={parent:y,cache:y},l.memoizedState=_,l.lanes===0&&(l.memoizedState=l.updateQueue.baseState=_),Ys(l,ri,y)):(y=E.cache,Ys(l,ri,y),y!==_.cache&&Mp(l,[ri],f,!0))),Ni(s,l,l.pendingProps.children,f),l.child;case 29:throw l.pendingProps}throw Error(i(156,l.tag))}function _s(s){s.flags|=4}function bh(s,l,f,y,_){if((l=(s.mode&32)!==0)&&(l=!1),l){if(s.flags|=16777216,(_&335544128)===_)if(s.stateNode.complete)s.flags|=8192;else if(g_())s.flags|=8192;else throw Vo=cd,zp}else s.flags&=-16777217}function U1(s,l){if(l.type!=="stylesheet"||(l.state.loading&4)!==0)s.flags&=-16777217;else if(s.flags|=16777216,!sk(l))if(g_())s.flags|=8192;else throw Vo=cd,zp}function jd(s,l){l!==null&&(s.flags|=4),s.flags&16384&&(l=s.tag!==22?Me():536870912,s.lanes|=l,$a|=l)}function hc(s,l){if(!en)switch(s.tailMode){case"hidden":l=s.tail;for(var f=null;l!==null;)l.alternate!==null&&(f=l),l=l.sibling;f===null?s.tail=null:f.sibling=null;break;case"collapsed":f=s.tail;for(var y=null;f!==null;)f.alternate!==null&&(y=f),f=f.sibling;y===null?l||s.tail===null?s.tail=null:s.tail.sibling=null:y.sibling=null}}function Dn(s){var l=s.alternate!==null&&s.alternate.child===s.child,f=0,y=0;if(l)for(var _=s.child;_!==null;)f|=_.lanes|_.childLanes,y|=_.subtreeFlags&65011712,y|=_.flags&65011712,_.return=s,_=_.sibling;else for(_=s.child;_!==null;)f|=_.lanes|_.childLanes,y|=_.subtreeFlags,y|=_.flags,_.return=s,_=_.sibling;return s.subtreeFlags|=y,s.childLanes=f,l}function BA(s,l,f){var y=l.pendingProps;switch(Np(l),l.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Dn(l),null;case 1:return Dn(l),null;case 3:return f=l.stateNode,y=null,s!==null&&(y=s.memoizedState.cache),l.memoizedState.cache!==y&&(l.flags|=2048),ys(ri),ue(),f.pendingContext&&(f.context=f.pendingContext,f.pendingContext=null),(s===null||s.child===null)&&(Ea(l)?_s(l):s===null||s.memoizedState.isDehydrated&&(l.flags&256)===0||(l.flags|=1024,Tp())),Dn(l),null;case 26:var _=l.type,E=l.memoizedState;return s===null?(_s(l),E!==null?(Dn(l),U1(l,E)):(Dn(l),bh(l,_,null,y,f))):E?E!==s.memoizedState?(_s(l),Dn(l),U1(l,E)):(Dn(l),l.flags&=-16777217):(s=s.memoizedProps,s!==y&&_s(l),Dn(l),bh(l,_,s,y,f)),null;case 27:if(we(l),f=te.current,_=l.type,s!==null&&l.stateNode!=null)s.memoizedProps!==y&&_s(l);else{if(!y){if(l.stateNode===null)throw Error(i(166));return Dn(l),null}s=K.current,Ea(l)?Sb(l):(s=Z_(_,y,f),l.stateNode=s,_s(l))}return Dn(l),null;case 5:if(we(l),_=l.type,s!==null&&l.stateNode!=null)s.memoizedProps!==y&&_s(l);else{if(!y){if(l.stateNode===null)throw Error(i(166));return Dn(l),null}if(E=K.current,Ea(l))Sb(l);else{var H=Hd(te.current);switch(E){case 1:E=H.createElementNS("http://www.w3.org/2000/svg",_);break;case 2:E=H.createElementNS("http://www.w3.org/1998/Math/MathML",_);break;default:switch(_){case"svg":E=H.createElementNS("http://www.w3.org/2000/svg",_);break;case"math":E=H.createElementNS("http://www.w3.org/1998/Math/MathML",_);break;case"script":E=H.createElement("div"),E.innerHTML="<script><\/script>",E=E.removeChild(E.firstChild);break;case"select":E=typeof y.is=="string"?H.createElement("select",{is:y.is}):H.createElement("select"),y.multiple?E.multiple=!0:y.size&&(E.size=y.size);break;default:E=typeof y.is=="string"?H.createElement(_,{is:y.is}):H.createElement(_)}}E[$t]=l,E[Cn]=y;e:for(H=l.child;H!==null;){if(H.tag===5||H.tag===6)E.appendChild(H.stateNode);else if(H.tag!==4&&H.tag!==27&&H.child!==null){H.child.return=H,H=H.child;continue}if(H===l)break e;for(;H.sibling===null;){if(H.return===null||H.return===l)break e;H=H.return}H.sibling.return=H.return,H=H.sibling}l.stateNode=E;e:switch(Ii(E,_,y),_){case"button":case"input":case"select":case"textarea":y=!!y.autoFocus;break e;case"img":y=!0;break e;default:y=!1}y&&_s(l)}}return Dn(l),bh(l,l.type,s===null?null:s.memoizedProps,l.pendingProps,f),null;case 6:if(s&&l.stateNode!=null)s.memoizedProps!==y&&_s(l);else{if(typeof y!="string"&&l.stateNode===null)throw Error(i(166));if(s=te.current,Ea(l)){if(s=l.stateNode,f=l.memoizedProps,y=null,_=ji,_!==null)switch(_.tag){case 27:case 5:y=_.memoizedProps}s[$t]=l,s=!!(s.nodeValue===f||y!==null&&y.suppressHydrationWarning===!0||$_(s.nodeValue,f)),s||Ws(l,!0)}else s=Hd(s).createTextNode(y),s[$t]=l,l.stateNode=s}return Dn(l),null;case 31:if(f=l.memoizedState,s===null||s.memoizedState!==null){if(y=Ea(l),f!==null){if(s===null){if(!y)throw Error(i(318));if(s=l.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(557));s[$t]=l}else Po(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Dn(l),s=!1}else f=Tp(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=f),s=!0;if(!s)return l.flags&256?(sr(l),l):(sr(l),null);if((l.flags&128)!==0)throw Error(i(558))}return Dn(l),null;case 13:if(y=l.memoizedState,s===null||s.memoizedState!==null&&s.memoizedState.dehydrated!==null){if(_=Ea(l),y!==null&&y.dehydrated!==null){if(s===null){if(!_)throw Error(i(318));if(_=l.memoizedState,_=_!==null?_.dehydrated:null,!_)throw Error(i(317));_[$t]=l}else Po(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Dn(l),_=!1}else _=Tp(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=_),_=!0;if(!_)return l.flags&256?(sr(l),l):(sr(l),null)}return sr(l),(l.flags&128)!==0?(l.lanes=f,l):(f=y!==null,s=s!==null&&s.memoizedState!==null,f&&(y=l.child,_=null,y.alternate!==null&&y.alternate.memoizedState!==null&&y.alternate.memoizedState.cachePool!==null&&(_=y.alternate.memoizedState.cachePool.pool),E=null,y.memoizedState!==null&&y.memoizedState.cachePool!==null&&(E=y.memoizedState.cachePool.pool),E!==_&&(y.flags|=2048)),f!==s&&f&&(l.child.flags|=8192),jd(l,l.updateQueue),Dn(l),null);case 4:return ue(),s===null&&Fh(l.stateNode.containerInfo),Dn(l),null;case 10:return ys(l.type),Dn(l),null;case 19:if(Z(Qn),y=l.memoizedState,y===null)return Dn(l),null;if(_=(l.flags&128)!==0,E=y.rendering,E===null)if(_)hc(y,!1);else{if(Yn!==0||s!==null&&(s.flags&128)!==0)for(s=l.child;s!==null;){if(E=md(s),E!==null){for(l.flags|=128,hc(y,!1),s=E.updateQueue,l.updateQueue=s,jd(l,s),l.subtreeFlags=0,s=f,f=l.child;f!==null;)xb(f,s),f=f.sibling;return F(Qn,Qn.current&1|2),en&&hs(l,y.treeForkCount),l.child}s=s.sibling}y.tail!==null&&Ve()>Rd&&(l.flags|=128,_=!0,hc(y,!1),l.lanes=4194304)}else{if(!_)if(s=md(E),s!==null){if(l.flags|=128,_=!0,s=s.updateQueue,l.updateQueue=s,jd(l,s),hc(y,!0),y.tail===null&&y.tailMode==="hidden"&&!E.alternate&&!en)return Dn(l),null}else 2*Ve()-y.renderingStartTime>Rd&&f!==536870912&&(l.flags|=128,_=!0,hc(y,!1),l.lanes=4194304);y.isBackwards?(E.sibling=l.child,l.child=E):(s=y.last,s!==null?s.sibling=E:l.child=E,y.last=E)}return y.tail!==null?(s=y.tail,y.rendering=s,y.tail=s.sibling,y.renderingStartTime=Ve(),s.sibling=null,f=Qn.current,F(Qn,_?f&1|2:f&1),en&&hs(l,y.treeForkCount),s):(Dn(l),null);case 22:case 23:return sr(l),Vp(),y=l.memoizedState!==null,s!==null?s.memoizedState!==null!==y&&(l.flags|=8192):y&&(l.flags|=8192),y?(f&536870912)!==0&&(l.flags&128)===0&&(Dn(l),l.subtreeFlags&6&&(l.flags|=8192)):Dn(l),f=l.updateQueue,f!==null&&jd(l,f.retryQueue),f=null,s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(f=s.memoizedState.cachePool.pool),y=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(y=l.memoizedState.cachePool.pool),y!==f&&(l.flags|=2048),s!==null&&Z(Ho),null;case 24:return f=null,s!==null&&(f=s.memoizedState.cache),l.memoizedState.cache!==f&&(l.flags|=2048),ys(ri),Dn(l),null;case 25:return null;case 30:return null}throw Error(i(156,l.tag))}function $A(s,l){switch(Np(l),l.tag){case 1:return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 3:return ys(ri),ue(),s=l.flags,(s&65536)!==0&&(s&128)===0?(l.flags=s&-65537|128,l):null;case 26:case 27:case 5:return we(l),null;case 31:if(l.memoizedState!==null){if(sr(l),l.alternate===null)throw Error(i(340));Po()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 13:if(sr(l),s=l.memoizedState,s!==null&&s.dehydrated!==null){if(l.alternate===null)throw Error(i(340));Po()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 19:return Z(Qn),null;case 4:return ue(),null;case 10:return ys(l.type),null;case 22:case 23:return sr(l),Vp(),s!==null&&Z(Ho),s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 24:return ys(ri),null;case 25:return null;default:return null}}function G1(s,l){switch(Np(l),l.tag){case 3:ys(ri),ue();break;case 26:case 27:case 5:we(l);break;case 4:ue();break;case 31:l.memoizedState!==null&&sr(l);break;case 13:sr(l);break;case 19:Z(Qn);break;case 10:ys(l.type);break;case 22:case 23:sr(l),Vp(),s!==null&&Z(Ho);break;case 24:ys(ri)}}function gc(s,l){try{var f=l.updateQueue,y=f!==null?f.lastEffect:null;if(y!==null){var _=y.next;f=_;do{if((f.tag&s)===s){y=void 0;var E=f.create,H=f.inst;y=E(),H.destroy=y}f=f.next}while(f!==_)}}catch(X){xn(l,l.return,X)}}function eo(s,l,f){try{var y=l.updateQueue,_=y!==null?y.lastEffect:null;if(_!==null){var E=_.next;y=E;do{if((y.tag&s)===s){var H=y.inst,X=H.destroy;if(X!==void 0){H.destroy=void 0,_=l;var re=f,ye=X;try{ye()}catch(Ce){xn(_,re,Ce)}}}y=y.next}while(y!==E)}}catch(Ce){xn(l,l.return,Ce)}}function q1(s){var l=s.updateQueue;if(l!==null){var f=s.stateNode;try{Lb(l,f)}catch(y){xn(s,s.return,y)}}}function W1(s,l,f){f.props=qo(s.type,s.memoizedProps),f.state=s.memoizedState;try{f.componentWillUnmount()}catch(y){xn(s,l,y)}}function yc(s,l){try{var f=s.ref;if(f!==null){switch(s.tag){case 26:case 27:case 5:var y=s.stateNode;break;case 30:y=s.stateNode;break;default:y=s.stateNode}typeof f=="function"?s.refCleanup=f(y):f.current=y}}catch(_){xn(s,l,_)}}function Kr(s,l){var f=s.ref,y=s.refCleanup;if(f!==null)if(typeof y=="function")try{y()}catch(_){xn(s,l,_)}finally{s.refCleanup=null,s=s.alternate,s!=null&&(s.refCleanup=null)}else if(typeof f=="function")try{f(null)}catch(_){xn(s,l,_)}else f.current=null}function Y1(s){var l=s.type,f=s.memoizedProps,y=s.stateNode;try{e:switch(l){case"button":case"input":case"select":case"textarea":f.autoFocus&&y.focus();break e;case"img":f.src?y.src=f.src:f.srcSet&&(y.srcset=f.srcSet)}}catch(_){xn(s,s.return,_)}}function _h(s,l,f){try{var y=s.stateNode;l3(y,s.type,f,l),y[Cn]=l}catch(_){xn(s,s.return,_)}}function X1(s){return s.tag===5||s.tag===3||s.tag===26||s.tag===27&&ao(s.type)||s.tag===4}function kh(s){e:for(;;){for(;s.sibling===null;){if(s.return===null||X1(s.return))return null;s=s.return}for(s.sibling.return=s.return,s=s.sibling;s.tag!==5&&s.tag!==6&&s.tag!==18;){if(s.tag===27&&ao(s.type)||s.flags&2||s.child===null||s.tag===4)continue e;s.child.return=s,s=s.child}if(!(s.flags&2))return s.stateNode}}function Sh(s,l,f){var y=s.tag;if(y===5||y===6)s=s.stateNode,l?(f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f).insertBefore(s,l):(l=f.nodeType===9?f.body:f.nodeName==="HTML"?f.ownerDocument.body:f,l.appendChild(s),f=f._reactRootContainer,f!=null||l.onclick!==null||(l.onclick=Gi));else if(y!==4&&(y===27&&ao(s.type)&&(f=s.stateNode,l=null),s=s.child,s!==null))for(Sh(s,l,f),s=s.sibling;s!==null;)Sh(s,l,f),s=s.sibling}function Ed(s,l,f){var y=s.tag;if(y===5||y===6)s=s.stateNode,l?f.insertBefore(s,l):f.appendChild(s);else if(y!==4&&(y===27&&ao(s.type)&&(f=s.stateNode),s=s.child,s!==null))for(Ed(s,l,f),s=s.sibling;s!==null;)Ed(s,l,f),s=s.sibling}function K1(s){var l=s.stateNode,f=s.memoizedProps;try{for(var y=s.type,_=l.attributes;_.length;)l.removeAttributeNode(_[0]);Ii(l,y,f),l[$t]=s,l[Cn]=f}catch(E){xn(s,s.return,E)}}var ks=!1,ai=!1,wh=!1,Z1=typeof WeakSet=="function"?WeakSet:Set,vi=null;function HA(s,l){if(s=s.containerInfo,Gh=Yd,s=cb(s),yp(s)){if("selectionStart"in s)var f={start:s.selectionStart,end:s.selectionEnd};else e:{f=(f=s.ownerDocument)&&f.defaultView||window;var y=f.getSelection&&f.getSelection();if(y&&y.rangeCount!==0){f=y.anchorNode;var _=y.anchorOffset,E=y.focusNode;y=y.focusOffset;try{f.nodeType,E.nodeType}catch{f=null;break e}var H=0,X=-1,re=-1,ye=0,Ce=0,Ne=s,xe=null;t:for(;;){for(var _e;Ne!==f||_!==0&&Ne.nodeType!==3||(X=H+_),Ne!==E||y!==0&&Ne.nodeType!==3||(re=H+y),Ne.nodeType===3&&(H+=Ne.nodeValue.length),(_e=Ne.firstChild)!==null;)xe=Ne,Ne=_e;for(;;){if(Ne===s)break t;if(xe===f&&++ye===_&&(X=H),xe===E&&++Ce===y&&(re=H),(_e=Ne.nextSibling)!==null)break;Ne=xe,xe=Ne.parentNode}Ne=_e}f=X===-1||re===-1?null:{start:X,end:re}}else f=null}f=f||{start:0,end:0}}else f=null;for(qh={focusedElem:s,selectionRange:f},Yd=!1,vi=l;vi!==null;)if(l=vi,s=l.child,(l.subtreeFlags&1028)!==0&&s!==null)s.return=l,vi=s;else for(;vi!==null;){switch(l=vi,E=l.alternate,s=l.flags,l.tag){case 0:if((s&4)!==0&&(s=l.updateQueue,s=s!==null?s.events:null,s!==null))for(f=0;f<s.length;f++)_=s[f],_.ref.impl=_.nextImpl;break;case 11:case 15:break;case 1:if((s&1024)!==0&&E!==null){s=void 0,f=l,_=E.memoizedProps,E=E.memoizedState,y=f.stateNode;try{var Ke=qo(f.type,_);s=y.getSnapshotBeforeUpdate(Ke,E),y.__reactInternalSnapshotBeforeUpdate=s}catch(ft){xn(f,f.return,ft)}}break;case 3:if((s&1024)!==0){if(s=l.stateNode.containerInfo,f=s.nodeType,f===9)Xh(s);else if(f===1)switch(s.nodeName){case"HEAD":case"HTML":case"BODY":Xh(s);break;default:s.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((s&1024)!==0)throw Error(i(163))}if(s=l.sibling,s!==null){s.return=l.return,vi=s;break}vi=l.return}}function Q1(s,l,f){var y=f.flags;switch(f.tag){case 0:case 11:case 15:ws(s,f),y&4&&gc(5,f);break;case 1:if(ws(s,f),y&4)if(s=f.stateNode,l===null)try{s.componentDidMount()}catch(H){xn(f,f.return,H)}else{var _=qo(f.type,l.memoizedProps);l=l.memoizedState;try{s.componentDidUpdate(_,l,s.__reactInternalSnapshotBeforeUpdate)}catch(H){xn(f,f.return,H)}}y&64&&q1(f),y&512&&yc(f,f.return);break;case 3:if(ws(s,f),y&64&&(s=f.updateQueue,s!==null)){if(l=null,f.child!==null)switch(f.child.tag){case 27:case 5:l=f.child.stateNode;break;case 1:l=f.child.stateNode}try{Lb(s,l)}catch(H){xn(f,f.return,H)}}break;case 27:l===null&&y&4&&K1(f);case 26:case 5:ws(s,f),l===null&&y&4&&Y1(f),y&512&&yc(f,f.return);break;case 12:ws(s,f);break;case 31:ws(s,f),y&4&&t_(s,f);break;case 13:ws(s,f),y&4&&n_(s,f),y&64&&(s=f.memoizedState,s!==null&&(s=s.dehydrated,s!==null&&(f=KA.bind(null,f),g3(s,f))));break;case 22:if(y=f.memoizedState!==null||ks,!y){l=l!==null&&l.memoizedState!==null||ai,_=ks;var E=ai;ks=y,(ai=l)&&!E?Cs(s,f,(f.subtreeFlags&8772)!==0):ws(s,f),ks=_,ai=E}break;case 30:break;default:ws(s,f)}}function J1(s){var l=s.alternate;l!==null&&(s.alternate=null,J1(l)),s.child=null,s.deletions=null,s.sibling=null,s.tag===5&&(l=s.stateNode,l!==null&&It(l)),s.stateNode=null,s.return=null,s.dependencies=null,s.memoizedProps=null,s.memoizedState=null,s.pendingProps=null,s.stateNode=null,s.updateQueue=null}var zn=null,qi=!1;function Ss(s,l,f){for(f=f.child;f!==null;)e_(s,l,f),f=f.sibling}function e_(s,l,f){if(qe&&typeof qe.onCommitFiberUnmount=="function")try{qe.onCommitFiberUnmount(ke,f)}catch{}switch(f.tag){case 26:ai||Kr(f,l),Ss(s,l,f),f.memoizedState?f.memoizedState.count--:f.stateNode&&(f=f.stateNode,f.parentNode.removeChild(f));break;case 27:ai||Kr(f,l);var y=zn,_=qi;ao(f.type)&&(zn=f.stateNode,qi=!1),Ss(s,l,f),jc(f.stateNode),zn=y,qi=_;break;case 5:ai||Kr(f,l);case 6:if(y=zn,_=qi,zn=null,Ss(s,l,f),zn=y,qi=_,zn!==null)if(qi)try{(zn.nodeType===9?zn.body:zn.nodeName==="HTML"?zn.ownerDocument.body:zn).removeChild(f.stateNode)}catch(E){xn(f,l,E)}else try{zn.removeChild(f.stateNode)}catch(E){xn(f,l,E)}break;case 18:zn!==null&&(qi?(s=zn,q_(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,f.stateNode),Ya(s)):q_(zn,f.stateNode));break;case 4:y=zn,_=qi,zn=f.stateNode.containerInfo,qi=!0,Ss(s,l,f),zn=y,qi=_;break;case 0:case 11:case 14:case 15:eo(2,f,l),ai||eo(4,f,l),Ss(s,l,f);break;case 1:ai||(Kr(f,l),y=f.stateNode,typeof y.componentWillUnmount=="function"&&W1(f,l,y)),Ss(s,l,f);break;case 21:Ss(s,l,f);break;case 22:ai=(y=ai)||f.memoizedState!==null,Ss(s,l,f),ai=y;break;default:Ss(s,l,f)}}function t_(s,l){if(l.memoizedState===null&&(s=l.alternate,s!==null&&(s=s.memoizedState,s!==null))){s=s.dehydrated;try{Ya(s)}catch(f){xn(l,l.return,f)}}}function n_(s,l){if(l.memoizedState===null&&(s=l.alternate,s!==null&&(s=s.memoizedState,s!==null&&(s=s.dehydrated,s!==null))))try{Ya(s)}catch(f){xn(l,l.return,f)}}function FA(s){switch(s.tag){case 31:case 13:case 19:var l=s.stateNode;return l===null&&(l=s.stateNode=new Z1),l;case 22:return s=s.stateNode,l=s._retryCache,l===null&&(l=s._retryCache=new Z1),l;default:throw Error(i(435,s.tag))}}function Nd(s,l){var f=FA(s);l.forEach(function(y){if(!f.has(y)){f.add(y);var _=ZA.bind(null,s,y);y.then(_,_)}})}function Wi(s,l){var f=l.deletions;if(f!==null)for(var y=0;y<f.length;y++){var _=f[y],E=s,H=l,X=H;e:for(;X!==null;){switch(X.tag){case 27:if(ao(X.type)){zn=X.stateNode,qi=!1;break e}break;case 5:zn=X.stateNode,qi=!1;break e;case 3:case 4:zn=X.stateNode.containerInfo,qi=!0;break e}X=X.return}if(zn===null)throw Error(i(160));e_(E,H,_),zn=null,qi=!1,E=_.alternate,E!==null&&(E.return=null),_.return=null}if(l.subtreeFlags&13886)for(l=l.child;l!==null;)i_(l,s),l=l.sibling}var Lr=null;function i_(s,l){var f=s.alternate,y=s.flags;switch(s.tag){case 0:case 11:case 14:case 15:Wi(l,s),Yi(s),y&4&&(eo(3,s,s.return),gc(3,s),eo(5,s,s.return));break;case 1:Wi(l,s),Yi(s),y&512&&(ai||f===null||Kr(f,f.return)),y&64&&ks&&(s=s.updateQueue,s!==null&&(y=s.callbacks,y!==null&&(f=s.shared.hiddenCallbacks,s.shared.hiddenCallbacks=f===null?y:f.concat(y))));break;case 26:var _=Lr;if(Wi(l,s),Yi(s),y&512&&(ai||f===null||Kr(f,f.return)),y&4){var E=f!==null?f.memoizedState:null;if(y=s.memoizedState,f===null)if(y===null)if(s.stateNode===null){e:{y=s.type,f=s.memoizedProps,_=_.ownerDocument||_;t:switch(y){case"title":E=_.getElementsByTagName("title")[0],(!E||E[In]||E[$t]||E.namespaceURI==="http://www.w3.org/2000/svg"||E.hasAttribute("itemprop"))&&(E=_.createElement(y),_.head.insertBefore(E,_.querySelector("head > title"))),Ii(E,y,f),E[$t]=s,Kt(E),y=E;break e;case"link":var H=ik("link","href",_).get(y+(f.href||""));if(H){for(var X=0;X<H.length;X++)if(E=H[X],E.getAttribute("href")===(f.href==null||f.href===""?null:f.href)&&E.getAttribute("rel")===(f.rel==null?null:f.rel)&&E.getAttribute("title")===(f.title==null?null:f.title)&&E.getAttribute("crossorigin")===(f.crossOrigin==null?null:f.crossOrigin)){H.splice(X,1);break t}}E=_.createElement(y),Ii(E,y,f),_.head.appendChild(E);break;case"meta":if(H=ik("meta","content",_).get(y+(f.content||""))){for(X=0;X<H.length;X++)if(E=H[X],E.getAttribute("content")===(f.content==null?null:""+f.content)&&E.getAttribute("name")===(f.name==null?null:f.name)&&E.getAttribute("property")===(f.property==null?null:f.property)&&E.getAttribute("http-equiv")===(f.httpEquiv==null?null:f.httpEquiv)&&E.getAttribute("charset")===(f.charSet==null?null:f.charSet)){H.splice(X,1);break t}}E=_.createElement(y),Ii(E,y,f),_.head.appendChild(E);break;default:throw Error(i(468,y))}E[$t]=s,Kt(E),y=E}s.stateNode=y}else rk(_,s.type,s.stateNode);else s.stateNode=nk(_,y,s.memoizedProps);else E!==y?(E===null?f.stateNode!==null&&(f=f.stateNode,f.parentNode.removeChild(f)):E.count--,y===null?rk(_,s.type,s.stateNode):nk(_,y,s.memoizedProps)):y===null&&s.stateNode!==null&&_h(s,s.memoizedProps,f.memoizedProps)}break;case 27:Wi(l,s),Yi(s),y&512&&(ai||f===null||Kr(f,f.return)),f!==null&&y&4&&_h(s,s.memoizedProps,f.memoizedProps);break;case 5:if(Wi(l,s),Yi(s),y&512&&(ai||f===null||Kr(f,f.return)),s.flags&32){_=s.stateNode;try{nt(_,"")}catch(Ke){xn(s,s.return,Ke)}}y&4&&s.stateNode!=null&&(_=s.memoizedProps,_h(s,_,f!==null?f.memoizedProps:_)),y&1024&&(wh=!0);break;case 6:if(Wi(l,s),Yi(s),y&4){if(s.stateNode===null)throw Error(i(162));y=s.memoizedProps,f=s.stateNode;try{f.nodeValue=y}catch(Ke){xn(s,s.return,Ke)}}break;case 3:if(Ud=null,_=Lr,Lr=Fd(l.containerInfo),Wi(l,s),Lr=_,Yi(s),y&4&&f!==null&&f.memoizedState.isDehydrated)try{Ya(l.containerInfo)}catch(Ke){xn(s,s.return,Ke)}wh&&(wh=!1,r_(s));break;case 4:y=Lr,Lr=Fd(s.stateNode.containerInfo),Wi(l,s),Yi(s),Lr=y;break;case 12:Wi(l,s),Yi(s);break;case 31:Wi(l,s),Yi(s),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Nd(s,y)));break;case 13:Wi(l,s),Yi(s),s.child.flags&8192&&s.memoizedState!==null!=(f!==null&&f.memoizedState!==null)&&(Td=Ve()),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Nd(s,y)));break;case 22:_=s.memoizedState!==null;var re=f!==null&&f.memoizedState!==null,ye=ks,Ce=ai;if(ks=ye||_,ai=Ce||re,Wi(l,s),ai=Ce,ks=ye,Yi(s),y&8192)e:for(l=s.stateNode,l._visibility=_?l._visibility&-2:l._visibility|1,_&&(f===null||re||ks||ai||Wo(s)),f=null,l=s;;){if(l.tag===5||l.tag===26){if(f===null){re=f=l;try{if(E=re.stateNode,_)H=E.style,typeof H.setProperty=="function"?H.setProperty("display","none","important"):H.display="none";else{X=re.stateNode;var Ne=re.memoizedProps.style,xe=Ne!=null&&Ne.hasOwnProperty("display")?Ne.display:null;X.style.display=xe==null||typeof xe=="boolean"?"":(""+xe).trim()}}catch(Ke){xn(re,re.return,Ke)}}}else if(l.tag===6){if(f===null){re=l;try{re.stateNode.nodeValue=_?"":re.memoizedProps}catch(Ke){xn(re,re.return,Ke)}}}else if(l.tag===18){if(f===null){re=l;try{var _e=re.stateNode;_?W_(_e,!0):W_(re.stateNode,!1)}catch(Ke){xn(re,re.return,Ke)}}}else if((l.tag!==22&&l.tag!==23||l.memoizedState===null||l===s)&&l.child!==null){l.child.return=l,l=l.child;continue}if(l===s)break e;for(;l.sibling===null;){if(l.return===null||l.return===s)break e;f===l&&(f=null),l=l.return}f===l&&(f=null),l.sibling.return=l.return,l=l.sibling}y&4&&(y=s.updateQueue,y!==null&&(f=y.retryQueue,f!==null&&(y.retryQueue=null,Nd(s,f))));break;case 19:Wi(l,s),Yi(s),y&4&&(y=s.updateQueue,y!==null&&(s.updateQueue=null,Nd(s,y)));break;case 30:break;case 21:break;default:Wi(l,s),Yi(s)}}function Yi(s){var l=s.flags;if(l&2){try{for(var f,y=s.return;y!==null;){if(X1(y)){f=y;break}y=y.return}if(f==null)throw Error(i(160));switch(f.tag){case 27:var _=f.stateNode,E=kh(s);Ed(s,E,_);break;case 5:var H=f.stateNode;f.flags&32&&(nt(H,""),f.flags&=-33);var X=kh(s);Ed(s,X,H);break;case 3:case 4:var re=f.stateNode.containerInfo,ye=kh(s);Sh(s,ye,re);break;default:throw Error(i(161))}}catch(Ce){xn(s,s.return,Ce)}s.flags&=-3}l&4096&&(s.flags&=-4097)}function r_(s){if(s.subtreeFlags&1024)for(s=s.child;s!==null;){var l=s;r_(l),l.tag===5&&l.flags&1024&&l.stateNode.reset(),s=s.sibling}}function ws(s,l){if(l.subtreeFlags&8772)for(l=l.child;l!==null;)Q1(s,l.alternate,l),l=l.sibling}function Wo(s){for(s=s.child;s!==null;){var l=s;switch(l.tag){case 0:case 11:case 14:case 15:eo(4,l,l.return),Wo(l);break;case 1:Kr(l,l.return);var f=l.stateNode;typeof f.componentWillUnmount=="function"&&W1(l,l.return,f),Wo(l);break;case 27:jc(l.stateNode);case 26:case 5:Kr(l,l.return),Wo(l);break;case 22:l.memoizedState===null&&Wo(l);break;case 30:Wo(l);break;default:Wo(l)}s=s.sibling}}function Cs(s,l,f){for(f=f&&(l.subtreeFlags&8772)!==0,l=l.child;l!==null;){var y=l.alternate,_=s,E=l,H=E.flags;switch(E.tag){case 0:case 11:case 15:Cs(_,E,f),gc(4,E);break;case 1:if(Cs(_,E,f),y=E,_=y.stateNode,typeof _.componentDidMount=="function")try{_.componentDidMount()}catch(ye){xn(y,y.return,ye)}if(y=E,_=y.updateQueue,_!==null){var X=y.stateNode;try{var re=_.shared.hiddenCallbacks;if(re!==null)for(_.shared.hiddenCallbacks=null,_=0;_<re.length;_++)Ob(re[_],X)}catch(ye){xn(y,y.return,ye)}}f&&H&64&&q1(E),yc(E,E.return);break;case 27:K1(E);case 26:case 5:Cs(_,E,f),f&&y===null&&H&4&&Y1(E),yc(E,E.return);break;case 12:Cs(_,E,f);break;case 31:Cs(_,E,f),f&&H&4&&t_(_,E);break;case 13:Cs(_,E,f),f&&H&4&&n_(_,E);break;case 22:E.memoizedState===null&&Cs(_,E,f),yc(E,E.return);break;case 30:break;default:Cs(_,E,f)}l=l.sibling}}function Ch(s,l){var f=null;s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(f=s.memoizedState.cachePool.pool),s=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(s=l.memoizedState.cachePool.pool),s!==f&&(s!=null&&s.refCount++,f!=null&&ic(f))}function jh(s,l){s=null,l.alternate!==null&&(s=l.alternate.memoizedState.cache),l=l.memoizedState.cache,l!==s&&(l.refCount++,s!=null&&ic(s))}function zr(s,l,f,y){if(l.subtreeFlags&10256)for(l=l.child;l!==null;)s_(s,l,f,y),l=l.sibling}function s_(s,l,f,y){var _=l.flags;switch(l.tag){case 0:case 11:case 15:zr(s,l,f,y),_&2048&&gc(9,l);break;case 1:zr(s,l,f,y);break;case 3:zr(s,l,f,y),_&2048&&(s=null,l.alternate!==null&&(s=l.alternate.memoizedState.cache),l=l.memoizedState.cache,l!==s&&(l.refCount++,s!=null&&ic(s)));break;case 12:if(_&2048){zr(s,l,f,y),s=l.stateNode;try{var E=l.memoizedProps,H=E.id,X=E.onPostCommit;typeof X=="function"&&X(H,l.alternate===null?"mount":"update",s.passiveEffectDuration,-0)}catch(re){xn(l,l.return,re)}}else zr(s,l,f,y);break;case 31:zr(s,l,f,y);break;case 13:zr(s,l,f,y);break;case 23:break;case 22:E=l.stateNode,H=l.alternate,l.memoizedState!==null?E._visibility&2?zr(s,l,f,y):xc(s,l):E._visibility&2?zr(s,l,f,y):(E._visibility|=2,za(s,l,f,y,(l.subtreeFlags&10256)!==0||!1)),_&2048&&Ch(H,l);break;case 24:zr(s,l,f,y),_&2048&&jh(l.alternate,l);break;default:zr(s,l,f,y)}}function za(s,l,f,y,_){for(_=_&&((l.subtreeFlags&10256)!==0||!1),l=l.child;l!==null;){var E=s,H=l,X=f,re=y,ye=H.flags;switch(H.tag){case 0:case 11:case 15:za(E,H,X,re,_),gc(8,H);break;case 23:break;case 22:var Ce=H.stateNode;H.memoizedState!==null?Ce._visibility&2?za(E,H,X,re,_):xc(E,H):(Ce._visibility|=2,za(E,H,X,re,_)),_&&ye&2048&&Ch(H.alternate,H);break;case 24:za(E,H,X,re,_),_&&ye&2048&&jh(H.alternate,H);break;default:za(E,H,X,re,_)}l=l.sibling}}function xc(s,l){if(l.subtreeFlags&10256)for(l=l.child;l!==null;){var f=s,y=l,_=y.flags;switch(y.tag){case 22:xc(f,y),_&2048&&Ch(y.alternate,y);break;case 24:xc(f,y),_&2048&&jh(y.alternate,y);break;default:xc(f,y)}l=l.sibling}}var vc=8192;function Pa(s,l,f){if(s.subtreeFlags&vc)for(s=s.child;s!==null;)o_(s,l,f),s=s.sibling}function o_(s,l,f){switch(s.tag){case 26:Pa(s,l,f),s.flags&vc&&s.memoizedState!==null&&N3(f,Lr,s.memoizedState,s.memoizedProps);break;case 5:Pa(s,l,f);break;case 3:case 4:var y=Lr;Lr=Fd(s.stateNode.containerInfo),Pa(s,l,f),Lr=y;break;case 22:s.memoizedState===null&&(y=s.alternate,y!==null&&y.memoizedState!==null?(y=vc,vc=16777216,Pa(s,l,f),vc=y):Pa(s,l,f));break;default:Pa(s,l,f)}}function a_(s){var l=s.alternate;if(l!==null&&(s=l.child,s!==null)){l.child=null;do l=s.sibling,s.sibling=null,s=l;while(s!==null)}}function bc(s){var l=s.deletions;if((s.flags&16)!==0){if(l!==null)for(var f=0;f<l.length;f++){var y=l[f];vi=y,c_(y,s)}a_(s)}if(s.subtreeFlags&10256)for(s=s.child;s!==null;)l_(s),s=s.sibling}function l_(s){switch(s.tag){case 0:case 11:case 15:bc(s),s.flags&2048&&eo(9,s,s.return);break;case 3:bc(s);break;case 12:bc(s);break;case 22:var l=s.stateNode;s.memoizedState!==null&&l._visibility&2&&(s.return===null||s.return.tag!==13)?(l._visibility&=-3,Id(s)):bc(s);break;default:bc(s)}}function Id(s){var l=s.deletions;if((s.flags&16)!==0){if(l!==null)for(var f=0;f<l.length;f++){var y=l[f];vi=y,c_(y,s)}a_(s)}for(s=s.child;s!==null;){switch(l=s,l.tag){case 0:case 11:case 15:eo(8,l,l.return),Id(l);break;case 22:f=l.stateNode,f._visibility&2&&(f._visibility&=-3,Id(l));break;default:Id(l)}s=s.sibling}}function c_(s,l){for(;vi!==null;){var f=vi;switch(f.tag){case 0:case 11:case 15:eo(8,f,l);break;case 23:case 22:if(f.memoizedState!==null&&f.memoizedState.cachePool!==null){var y=f.memoizedState.cachePool.pool;y!=null&&y.refCount++}break;case 24:ic(f.memoizedState.cache)}if(y=f.child,y!==null)y.return=f,vi=y;else e:for(f=s;vi!==null;){y=vi;var _=y.sibling,E=y.return;if(J1(y),y===f){vi=null;break e}if(_!==null){_.return=E,vi=_;break e}vi=E}}}var VA={getCacheForType:function(s){var l=Ei(ri),f=l.data.get(s);return f===void 0&&(f=s(),l.data.set(s,f)),f},cacheSignal:function(){return Ei(ri).controller.signal}},UA=typeof WeakMap=="function"?WeakMap:Map,fn=0,En=null,qt=null,Qt=0,yn=0,or=null,to=!1,Ba=!1,Eh=!1,js=0,Yn=0,no=0,Yo=0,Nh=0,ar=0,$a=0,_c=null,Xi=null,Ih=!1,Td=0,u_=0,Rd=1/0,Ad=null,io=null,hi=0,ro=null,Ha=null,Es=0,Th=0,Rh=null,d_=null,kc=0,Ah=null;function lr(){return(fn&2)!==0&&Qt!==0?Qt&-Qt:$.T!==null?Ph():Si()}function f_(){if(ar===0)if((Qt&536870912)===0||en){var s=bt;bt<<=1,(bt&3932160)===0&&(bt=262144),ar=s}else ar=536870912;return s=rr.current,s!==null&&(s.flags|=32),ar}function Ki(s,l,f){(s===En&&(yn===2||yn===9)||s.cancelPendingCommit!==null)&&(Fa(s,0),so(s,Qt,ar,!1)),gt(s,f),((fn&2)===0||s!==En)&&(s===En&&((fn&2)===0&&(Yo|=f),Yn===4&&so(s,Qt,ar,!1)),Zr(s))}function m_(s,l,f){if((fn&6)!==0)throw Error(i(327));var y=!f&&(l&127)===0&&(l&s.expiredLanes)===0||zt(s,l),_=y?WA(s,l):Dh(s,l,!0),E=y;do{if(_===0){Ba&&!y&&so(s,l,0,!1);break}else{if(f=s.current.alternate,E&&!GA(f)){_=Dh(s,l,!1),E=!1;continue}if(_===2){if(E=l,s.errorRecoveryDisabledLanes&E)var H=0;else H=s.pendingLanes&-536870913,H=H!==0?H:H&536870912?536870912:0;if(H!==0){l=H;e:{var X=s;_=_c;var re=X.current.memoizedState.isDehydrated;if(re&&(Fa(X,H).flags|=256),H=Dh(X,H,!1),H!==2){if(Eh&&!re){X.errorRecoveryDisabledLanes|=E,Yo|=E,_=4;break e}E=Xi,Xi=_,E!==null&&(Xi===null?Xi=E:Xi.push.apply(Xi,E))}_=H}if(E=!1,_!==2)continue}}if(_===1){Fa(s,0),so(s,l,0,!0);break}e:{switch(y=s,E=_,E){case 0:case 1:throw Error(i(345));case 4:if((l&4194048)!==l)break;case 6:so(y,l,ar,!to);break e;case 2:Xi=null;break;case 3:case 5:break;default:throw Error(i(329))}if((l&62914560)===l&&(_=Td+300-Ve(),10<_)){if(so(y,l,ar,!to),wt(y,0,!0)!==0)break e;Es=l,y.timeoutHandle=U_(p_.bind(null,y,f,Xi,Ad,Ih,l,ar,Yo,$a,to,E,"Throttled",-0,0),_);break e}p_(y,f,Xi,Ad,Ih,l,ar,Yo,$a,to,E,null,-0,0)}}break}while(!0);Zr(s)}function p_(s,l,f,y,_,E,H,X,re,ye,Ce,Ne,xe,_e){if(s.timeoutHandle=-1,Ne=l.subtreeFlags,Ne&8192||(Ne&16785408)===16785408){Ne={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Gi},o_(l,E,Ne);var Ke=(E&62914560)===E?Td-Ve():(E&4194048)===E?u_-Ve():0;if(Ke=I3(Ne,Ke),Ke!==null){Es=E,s.cancelPendingCommit=Ke(k_.bind(null,s,l,E,f,y,_,H,X,re,Ce,Ne,null,xe,_e)),so(s,E,H,!ye);return}}k_(s,l,E,f,y,_,H,X,re)}function GA(s){for(var l=s;;){var f=l.tag;if((f===0||f===11||f===15)&&l.flags&16384&&(f=l.updateQueue,f!==null&&(f=f.stores,f!==null)))for(var y=0;y<f.length;y++){var _=f[y],E=_.getSnapshot;_=_.value;try{if(!nr(E(),_))return!1}catch{return!1}}if(f=l.child,l.subtreeFlags&16384&&f!==null)f.return=l,l=f;else{if(l===s)break;for(;l.sibling===null;){if(l.return===null||l.return===s)return!0;l=l.return}l.sibling.return=l.return,l=l.sibling}}return!0}function so(s,l,f,y){l&=~Nh,l&=~Yo,s.suspendedLanes|=l,s.pingedLanes&=~l,y&&(s.warmLanes|=l),y=s.expirationTimes;for(var _=l;0<_;){var E=31-$e(_),H=1<<E;y[E]=-1,_&=~H}f!==0&&Vn(s,f,l)}function Md(){return(fn&6)===0?(Sc(0),!1):!0}function Mh(){if(qt!==null){if(yn===0)var s=qt.return;else s=qt,gs=Bo=null,Xp(s),Aa=null,sc=0,s=qt;for(;s!==null;)G1(s.alternate,s),s=s.return;qt=null}}function Fa(s,l){var f=s.timeoutHandle;f!==-1&&(s.timeoutHandle=-1,d3(f)),f=s.cancelPendingCommit,f!==null&&(s.cancelPendingCommit=null,f()),Es=0,Mh(),En=s,qt=f=ps(s.current,null),Qt=l,yn=0,or=null,to=!1,Ba=zt(s,l),Eh=!1,$a=ar=Nh=Yo=no=Yn=0,Xi=_c=null,Ih=!1,(l&8)!==0&&(l|=l&32);var y=s.entangledLanes;if(y!==0)for(s=s.entanglements,y&=l;0<y;){var _=31-$e(y),E=1<<_;l|=s[_],y&=~E}return js=l,ed(),f}function h_(s,l){Et=null,$.H=mc,l===Ra||l===ld?(l=Rb(),yn=3):l===zp?(l=Rb(),yn=4):yn=l===dh?8:l!==null&&typeof l=="object"&&typeof l.then=="function"?6:1,or=l,qt===null&&(Yn=1,kd(s,br(l,s.current)))}function g_(){var s=rr.current;return s===null?!0:(Qt&4194048)===Qt?wr===null:(Qt&62914560)===Qt||(Qt&536870912)!==0?s===wr:!1}function y_(){var s=$.H;return $.H=mc,s===null?mc:s}function x_(){var s=$.A;return $.A=VA,s}function Dd(){Yn=4,to||(Qt&4194048)!==Qt&&rr.current!==null||(Ba=!0),(no&134217727)===0&&(Yo&134217727)===0||En===null||so(En,Qt,ar,!1)}function Dh(s,l,f){var y=fn;fn|=2;var _=y_(),E=x_();(En!==s||Qt!==l)&&(Ad=null,Fa(s,l)),l=!1;var H=Yn;e:do try{if(yn!==0&&qt!==null){var X=qt,re=or;switch(yn){case 8:Mh(),H=6;break e;case 3:case 2:case 9:case 6:rr.current===null&&(l=!0);var ye=yn;if(yn=0,or=null,Va(s,X,re,ye),f&&Ba){H=0;break e}break;default:ye=yn,yn=0,or=null,Va(s,X,re,ye)}}qA(),H=Yn;break}catch(Ce){h_(s,Ce)}while(!0);return l&&s.shellSuspendCounter++,gs=Bo=null,fn=y,$.H=_,$.A=E,qt===null&&(En=null,Qt=0,ed()),H}function qA(){for(;qt!==null;)v_(qt)}function WA(s,l){var f=fn;fn|=2;var y=y_(),_=x_();En!==s||Qt!==l?(Ad=null,Rd=Ve()+500,Fa(s,l)):Ba=zt(s,l);e:do try{if(yn!==0&&qt!==null){l=qt;var E=or;t:switch(yn){case 1:yn=0,or=null,Va(s,l,E,1);break;case 2:case 9:if(Ib(E)){yn=0,or=null,b_(l);break}l=function(){yn!==2&&yn!==9||En!==s||(yn=7),Zr(s)},E.then(l,l);break e;case 3:yn=7;break e;case 4:yn=5;break e;case 7:Ib(E)?(yn=0,or=null,b_(l)):(yn=0,or=null,Va(s,l,E,7));break;case 5:var H=null;switch(qt.tag){case 26:H=qt.memoizedState;case 5:case 27:var X=qt;if(H?sk(H):X.stateNode.complete){yn=0,or=null;var re=X.sibling;if(re!==null)qt=re;else{var ye=X.return;ye!==null?(qt=ye,Od(ye)):qt=null}break t}}yn=0,or=null,Va(s,l,E,5);break;case 6:yn=0,or=null,Va(s,l,E,6);break;case 8:Mh(),Yn=6;break e;default:throw Error(i(462))}}YA();break}catch(Ce){h_(s,Ce)}while(!0);return gs=Bo=null,$.H=y,$.A=_,fn=f,qt!==null?0:(En=null,Qt=0,ed(),Yn)}function YA(){for(;qt!==null&&!ze();)v_(qt)}function v_(s){var l=V1(s.alternate,s,js);s.memoizedProps=s.pendingProps,l===null?Od(s):qt=l}function b_(s){var l=s,f=l.alternate;switch(l.tag){case 15:case 0:l=z1(f,l,l.pendingProps,l.type,void 0,Qt);break;case 11:l=z1(f,l,l.pendingProps,l.type.render,l.ref,Qt);break;case 5:Xp(l);default:G1(f,l),l=qt=xb(l,js),l=V1(f,l,js)}s.memoizedProps=s.pendingProps,l===null?Od(s):qt=l}function Va(s,l,f,y){gs=Bo=null,Xp(l),Aa=null,sc=0;var _=l.return;try{if(LA(s,_,l,f,Qt)){Yn=1,kd(s,br(f,s.current)),qt=null;return}}catch(E){if(_!==null)throw qt=_,E;Yn=1,kd(s,br(f,s.current)),qt=null;return}l.flags&32768?(en||y===1?s=!0:Ba||(Qt&536870912)!==0?s=!1:(to=s=!0,(y===2||y===9||y===3||y===6)&&(y=rr.current,y!==null&&y.tag===13&&(y.flags|=16384))),__(l,s)):Od(l)}function Od(s){var l=s;do{if((l.flags&32768)!==0){__(l,to);return}s=l.return;var f=BA(l.alternate,l,js);if(f!==null){qt=f;return}if(l=l.sibling,l!==null){qt=l;return}qt=l=s}while(l!==null);Yn===0&&(Yn=5)}function __(s,l){do{var f=$A(s.alternate,s);if(f!==null){f.flags&=32767,qt=f;return}if(f=s.return,f!==null&&(f.flags|=32768,f.subtreeFlags=0,f.deletions=null),!l&&(s=s.sibling,s!==null)){qt=s;return}qt=s=f}while(s!==null);Yn=6,qt=null}function k_(s,l,f,y,_,E,H,X,re){s.cancelPendingCommit=null;do Ld();while(hi!==0);if((fn&6)!==0)throw Error(i(327));if(l!==null){if(l===s.current)throw Error(i(177));if(E=l.lanes|l.childLanes,E|=kp,fi(s,f,E,H,X,re),s===En&&(qt=En=null,Qt=0),Ha=l,ro=s,Es=f,Th=E,Rh=_,d_=y,(l.subtreeFlags&10256)!==0||(l.flags&10256)!==0?(s.callbackNode=null,s.callbackPriority=0,QA(Ae,function(){return E_(),null})):(s.callbackNode=null,s.callbackPriority=0),y=(l.flags&13878)!==0,(l.subtreeFlags&13878)!==0||y){y=$.T,$.T=null,_=q.p,q.p=2,H=fn,fn|=4;try{HA(s,l,f)}finally{fn=H,q.p=_,$.T=y}}hi=1,S_(),w_(),C_()}}function S_(){if(hi===1){hi=0;var s=ro,l=Ha,f=(l.flags&13878)!==0;if((l.subtreeFlags&13878)!==0||f){f=$.T,$.T=null;var y=q.p;q.p=2;var _=fn;fn|=4;try{i_(l,s);var E=qh,H=cb(s.containerInfo),X=E.focusedElem,re=E.selectionRange;if(H!==X&&X&&X.ownerDocument&&lb(X.ownerDocument.documentElement,X)){if(re!==null&&yp(X)){var ye=re.start,Ce=re.end;if(Ce===void 0&&(Ce=ye),"selectionStart"in X)X.selectionStart=ye,X.selectionEnd=Math.min(Ce,X.value.length);else{var Ne=X.ownerDocument||document,xe=Ne&&Ne.defaultView||window;if(xe.getSelection){var _e=xe.getSelection(),Ke=X.textContent.length,ft=Math.min(re.start,Ke),Sn=re.end===void 0?ft:Math.min(re.end,Ke);!_e.extend&&ft>Sn&&(H=Sn,Sn=ft,ft=H);var fe=ab(X,ft),le=ab(X,Sn);if(fe&&le&&(_e.rangeCount!==1||_e.anchorNode!==fe.node||_e.anchorOffset!==fe.offset||_e.focusNode!==le.node||_e.focusOffset!==le.offset)){var ge=Ne.createRange();ge.setStart(fe.node,fe.offset),_e.removeAllRanges(),ft>Sn?(_e.addRange(ge),_e.extend(le.node,le.offset)):(ge.setEnd(le.node,le.offset),_e.addRange(ge))}}}}for(Ne=[],_e=X;_e=_e.parentNode;)_e.nodeType===1&&Ne.push({element:_e,left:_e.scrollLeft,top:_e.scrollTop});for(typeof X.focus=="function"&&X.focus(),X=0;X<Ne.length;X++){var Ee=Ne[X];Ee.element.scrollLeft=Ee.left,Ee.element.scrollTop=Ee.top}}Yd=!!Gh,qh=Gh=null}finally{fn=_,q.p=y,$.T=f}}s.current=l,hi=2}}function w_(){if(hi===2){hi=0;var s=ro,l=Ha,f=(l.flags&8772)!==0;if((l.subtreeFlags&8772)!==0||f){f=$.T,$.T=null;var y=q.p;q.p=2;var _=fn;fn|=4;try{Q1(s,l.alternate,l)}finally{fn=_,q.p=y,$.T=f}}hi=3}}function C_(){if(hi===4||hi===3){hi=0,ot();var s=ro,l=Ha,f=Es,y=d_;(l.subtreeFlags&10256)!==0||(l.flags&10256)!==0?hi=5:(hi=0,Ha=ro=null,j_(s,s.pendingLanes));var _=s.pendingLanes;if(_===0&&(io=null),mi(f),l=l.stateNode,qe&&typeof qe.onCommitFiberRoot=="function")try{qe.onCommitFiberRoot(ke,l,void 0,(l.current.flags&128)===128)}catch{}if(y!==null){l=$.T,_=q.p,q.p=2,$.T=null;try{for(var E=s.onRecoverableError,H=0;H<y.length;H++){var X=y[H];E(X.value,{componentStack:X.stack})}}finally{$.T=l,q.p=_}}(Es&3)!==0&&Ld(),Zr(s),_=s.pendingLanes,(f&261930)!==0&&(_&42)!==0?s===Ah?kc++:(kc=0,Ah=s):kc=0,Sc(0)}}function j_(s,l){(s.pooledCacheLanes&=l)===0&&(l=s.pooledCache,l!=null&&(s.pooledCache=null,ic(l)))}function Ld(){return S_(),w_(),C_(),E_()}function E_(){if(hi!==5)return!1;var s=ro,l=Th;Th=0;var f=mi(Es),y=$.T,_=q.p;try{q.p=32>f?32:f,$.T=null,f=Rh,Rh=null;var E=ro,H=Es;if(hi=0,Ha=ro=null,Es=0,(fn&6)!==0)throw Error(i(331));var X=fn;if(fn|=4,l_(E.current),s_(E,E.current,H,f),fn=X,Sc(0,!1),qe&&typeof qe.onPostCommitFiberRoot=="function")try{qe.onPostCommitFiberRoot(ke,E)}catch{}return!0}finally{q.p=_,$.T=y,j_(s,l)}}function N_(s,l,f){l=br(f,l),l=uh(s.stateNode,l,2),s=Zs(s,l,2),s!==null&&(gt(s,2),Zr(s))}function xn(s,l,f){if(s.tag===3)N_(s,s,f);else for(;l!==null;){if(l.tag===3){N_(l,s,f);break}else if(l.tag===1){var y=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof y.componentDidCatch=="function"&&(io===null||!io.has(y))){s=br(f,s),f=I1(2),y=Zs(l,f,2),y!==null&&(T1(f,y,l,s),gt(y,2),Zr(y));break}}l=l.return}}function Oh(s,l,f){var y=s.pingCache;if(y===null){y=s.pingCache=new UA;var _=new Set;y.set(l,_)}else _=y.get(l),_===void 0&&(_=new Set,y.set(l,_));_.has(f)||(Eh=!0,_.add(f),s=XA.bind(null,s,l,f),l.then(s,s))}function XA(s,l,f){var y=s.pingCache;y!==null&&y.delete(l),s.pingedLanes|=s.suspendedLanes&f,s.warmLanes&=~f,En===s&&(Qt&f)===f&&(Yn===4||Yn===3&&(Qt&62914560)===Qt&&300>Ve()-Td?(fn&2)===0&&Fa(s,0):Nh|=f,$a===Qt&&($a=0)),Zr(s)}function I_(s,l){l===0&&(l=Me()),s=Lo(s,l),s!==null&&(gt(s,l),Zr(s))}function KA(s){var l=s.memoizedState,f=0;l!==null&&(f=l.retryLane),I_(s,f)}function ZA(s,l){var f=0;switch(s.tag){case 31:case 13:var y=s.stateNode,_=s.memoizedState;_!==null&&(f=_.retryLane);break;case 19:y=s.stateNode;break;case 22:y=s.stateNode._retryCache;break;default:throw Error(i(314))}y!==null&&y.delete(l),I_(s,f)}function QA(s,l){return jt(s,l)}var zd=null,Ua=null,Lh=!1,Pd=!1,zh=!1,oo=0;function Zr(s){s!==Ua&&s.next===null&&(Ua===null?zd=Ua=s:Ua=Ua.next=s),Pd=!0,Lh||(Lh=!0,e3())}function Sc(s,l){if(!zh&&Pd){zh=!0;do for(var f=!1,y=zd;y!==null;){if(s!==0){var _=y.pendingLanes;if(_===0)var E=0;else{var H=y.suspendedLanes,X=y.pingedLanes;E=(1<<31-$e(42|s)+1)-1,E&=_&~(H&~X),E=E&201326741?E&201326741|1:E?E|2:0}E!==0&&(f=!0,M_(y,E))}else E=Qt,E=wt(y,y===En?E:0,y.cancelPendingCommit!==null||y.timeoutHandle!==-1),(E&3)===0||zt(y,E)||(f=!0,M_(y,E));y=y.next}while(f);zh=!1}}function JA(){T_()}function T_(){Pd=Lh=!1;var s=0;oo!==0&&u3()&&(s=oo);for(var l=Ve(),f=null,y=zd;y!==null;){var _=y.next,E=R_(y,l);E===0?(y.next=null,f===null?zd=_:f.next=_,_===null&&(Ua=f)):(f=y,(s!==0||(E&3)!==0)&&(Pd=!0)),y=_}hi!==0&&hi!==5||Sc(s),oo!==0&&(oo=0)}function R_(s,l){for(var f=s.suspendedLanes,y=s.pingedLanes,_=s.expirationTimes,E=s.pendingLanes&-62914561;0<E;){var H=31-$e(E),X=1<<H,re=_[H];re===-1?((X&f)===0||(X&y)!==0)&&(_[H]=Hn(X,l)):re<=l&&(s.expiredLanes|=X),E&=~X}if(l=En,f=Qt,f=wt(s,s===l?f:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),y=s.callbackNode,f===0||s===l&&(yn===2||yn===9)||s.cancelPendingCommit!==null)return y!==null&&y!==null&&he(y),s.callbackNode=null,s.callbackPriority=0;if((f&3)===0||zt(s,f)){if(l=f&-f,l===s.callbackPriority)return l;switch(y!==null&&he(y),mi(f)){case 2:case 8:f=be;break;case 32:f=Ae;break;case 268435456:f=We;break;default:f=Ae}return y=A_.bind(null,s),f=jt(f,y),s.callbackPriority=l,s.callbackNode=f,l}return y!==null&&y!==null&&he(y),s.callbackPriority=2,s.callbackNode=null,2}function A_(s,l){if(hi!==0&&hi!==5)return s.callbackNode=null,s.callbackPriority=0,null;var f=s.callbackNode;if(Ld()&&s.callbackNode!==f)return null;var y=Qt;return y=wt(s,s===En?y:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),y===0?null:(m_(s,y,l),R_(s,Ve()),s.callbackNode!=null&&s.callbackNode===f?A_.bind(null,s):null)}function M_(s,l){if(Ld())return null;m_(s,l,!0)}function e3(){f3(function(){(fn&6)!==0?jt(me,JA):T_()})}function Ph(){if(oo===0){var s=Ia;s===0&&(s=vt,vt<<=1,(vt&261888)===0&&(vt=256)),oo=s}return oo}function D_(s){return s==null||typeof s=="symbol"||typeof s=="boolean"?null:typeof s=="function"?s:Ui(""+s)}function O_(s,l){var f=l.ownerDocument.createElement("input");return f.name=l.name,f.value=l.value,s.id&&f.setAttribute("form",s.id),l.parentNode.insertBefore(f,l),s=new FormData(s),f.parentNode.removeChild(f),s}function t3(s,l,f,y,_){if(l==="submit"&&f&&f.stateNode===_){var E=D_((_[Cn]||null).action),H=y.submitter;H&&(l=(l=H[Cn]||null)?D_(l.formAction):H.getAttribute("formAction"),l!==null&&(E=l,H=null));var X=new Fs("action","action",null,y,_);s.push({event:X,listeners:[{instance:null,listener:function(){if(y.defaultPrevented){if(oo!==0){var re=H?O_(_,H):new FormData(_);rh(f,{pending:!0,data:re,method:_.method,action:E},null,re)}}else typeof E=="function"&&(X.preventDefault(),re=H?O_(_,H):new FormData(_),rh(f,{pending:!0,data:re,method:_.method,action:E},E,re))},currentTarget:_}]})}}for(var Bh=0;Bh<_p.length;Bh++){var $h=_p[Bh],n3=$h.toLowerCase(),i3=$h[0].toUpperCase()+$h.slice(1);Or(n3,"on"+i3)}Or(fb,"onAnimationEnd"),Or(mb,"onAnimationIteration"),Or(pb,"onAnimationStart"),Or("dblclick","onDoubleClick"),Or("focusin","onFocus"),Or("focusout","onBlur"),Or(vA,"onTransitionRun"),Or(bA,"onTransitionStart"),Or(_A,"onTransitionCancel"),Or(hb,"onTransitionEnd"),dn("onMouseEnter",["mouseout","mouseover"]),dn("onMouseLeave",["mouseout","mouseover"]),dn("onPointerEnter",["pointerout","pointerover"]),dn("onPointerLeave",["pointerout","pointerover"]),Un("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Un("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Un("onBeforeInput",["compositionend","keypress","textInput","paste"]),Un("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Un("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Un("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var wc="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),r3=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(wc));function L_(s,l){l=(l&4)!==0;for(var f=0;f<s.length;f++){var y=s[f],_=y.event;y=y.listeners;e:{var E=void 0;if(l)for(var H=y.length-1;0<=H;H--){var X=y[H],re=X.instance,ye=X.currentTarget;if(X=X.listener,re!==E&&_.isPropagationStopped())break e;E=X,_.currentTarget=ye;try{E(_)}catch(Ce){Ju(Ce)}_.currentTarget=null,E=re}else for(H=0;H<y.length;H++){if(X=y[H],re=X.instance,ye=X.currentTarget,X=X.listener,re!==E&&_.isPropagationStopped())break e;E=X,_.currentTarget=ye;try{E(_)}catch(Ce){Ju(Ce)}_.currentTarget=null,E=re}}}}function Wt(s,l){var f=l[Re];f===void 0&&(f=l[Re]=new Set);var y=s+"__bubble";f.has(y)||(z_(l,s,2,!1),f.add(y))}function Hh(s,l,f){var y=0;l&&(y|=4),z_(f,s,y,l)}var Bd="_reactListening"+Math.random().toString(36).slice(2);function Fh(s){if(!s[Bd]){s[Bd]=!0,Tt.forEach(function(f){f!=="selectionchange"&&(r3.has(f)||Hh(f,!1,s),Hh(f,!0,s))});var l=s.nodeType===9?s:s.ownerDocument;l===null||l[Bd]||(l[Bd]=!0,Hh("selectionchange",!1,l))}}function z_(s,l,f,y){switch(fk(l)){case 2:var _=A3;break;case 8:_=M3;break;default:_=ig}f=_.bind(null,l,f,s),_=void 0,!To||l!=="touchstart"&&l!=="touchmove"&&l!=="wheel"||(_=!0),y?_!==void 0?s.addEventListener(l,f,{capture:!0,passive:_}):s.addEventListener(l,f,!0):_!==void 0?s.addEventListener(l,f,{passive:_}):s.addEventListener(l,f,!1)}function Vh(s,l,f,y,_){var E=y;if((l&1)===0&&(l&2)===0&&y!==null)e:for(;;){if(y===null)return;var H=y.tag;if(H===3||H===4){var X=y.stateNode.containerInfo;if(X===_)break;if(H===4)for(H=y.return;H!==null;){var re=H.tag;if((re===3||re===4)&&H.stateNode.containerInfo===_)return;H=H.return}for(;X!==null;){if(H=yi(X),H===null)return;if(re=H.tag,re===5||re===6||re===26||re===27){y=E=H;continue e}X=X.parentNode}}y=y.return}Ku(function(){var ye=E,Ce=Yl(f),Ne=[];e:{var xe=gb.get(s);if(xe!==void 0){var _e=Fs,Ke=s;switch(s){case"keypress":if(ga(f)===0)break e;case"keydown":case"keyup":_e=xa;break;case"focusin":Ke="focus",_e=ne;break;case"focusout":Ke="blur",_e=ne;break;case"beforeblur":case"afterblur":_e=ne;break;case"click":if(f.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":_e=ms;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":_e=J;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":_e=va;break;case fb:case mb:case pb:_e=pe;break;case hb:_e=nA;break;case"scroll":case"scrollend":_e=fp;break;case"wheel":_e=rA;break;case"copy":case"cut":case"paste":_e=Xe;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":_e=xr;break;case"toggle":case"beforetoggle":_e=oA}var ft=(l&4)!==0,Sn=!ft&&(s==="scroll"||s==="scrollend"),fe=ft?xe!==null?xe+"Capture":null:xe;ft=[];for(var le=ye,ge;le!==null;){var Ee=le;if(ge=Ee.stateNode,Ee=Ee.tag,Ee!==5&&Ee!==26&&Ee!==27||ge===null||fe===null||(Ee=Io(le,fe),Ee!=null&&ft.push(Cc(le,Ee,ge))),Sn)break;le=le.return}0<ft.length&&(xe=new _e(xe,Ke,null,f,Ce),Ne.push({event:xe,listeners:ft}))}}if((l&7)===0){e:{if(xe=s==="mouseover"||s==="pointerover",_e=s==="mouseout"||s==="pointerout",xe&&f!==ma&&(Ke=f.relatedTarget||f.fromElement)&&(yi(Ke)||Ke[Xt]))break e;if((_e||xe)&&(xe=Ce.window===Ce?Ce:(xe=Ce.ownerDocument)?xe.defaultView||xe.parentWindow:window,_e?(Ke=f.relatedTarget||f.toElement,_e=ye,Ke=Ke?yi(Ke):null,Ke!==null&&(Sn=o(Ke),ft=Ke.tag,Ke!==Sn||ft!==5&&ft!==27&&ft!==6)&&(Ke=null)):(_e=null,Ke=ye),_e!==Ke)){if(ft=ms,Ee="onMouseLeave",fe="onMouseEnter",le="mouse",(s==="pointerout"||s==="pointerover")&&(ft=xr,Ee="onPointerLeave",fe="onPointerEnter",le="pointer"),Sn=_e==null?xe:ti(_e),ge=Ke==null?xe:ti(Ke),xe=new ft(Ee,le+"leave",_e,f,Ce),xe.target=Sn,xe.relatedTarget=ge,Ee=null,yi(Ce)===ye&&(ft=new ft(fe,le+"enter",Ke,f,Ce),ft.target=ge,ft.relatedTarget=Sn,Ee=ft),Sn=Ee,_e&&Ke)t:{for(ft=s3,fe=_e,le=Ke,ge=0,Ee=fe;Ee;Ee=ft(Ee))ge++;Ee=0;for(var at=le;at;at=ft(at))Ee++;for(;0<ge-Ee;)fe=ft(fe),ge--;for(;0<Ee-ge;)le=ft(le),Ee--;for(;ge--;){if(fe===le||le!==null&&fe===le.alternate){ft=fe;break t}fe=ft(fe),le=ft(le)}ft=null}else ft=null;_e!==null&&P_(Ne,xe,_e,ft,!1),Ke!==null&&Sn!==null&&P_(Ne,Sn,Ke,ft,!0)}}e:{if(xe=ye?ti(ye):window,_e=xe.nodeName&&xe.nodeName.toLowerCase(),_e==="select"||_e==="input"&&xe.type==="file")var cn=tb;else if(J0(xe))if(nb)cn=gA;else{cn=pA;var et=mA}else _e=xe.nodeName,!_e||_e.toLowerCase()!=="input"||xe.type!=="checkbox"&&xe.type!=="radio"?ye&&Ct(ye.elementType)&&(cn=tb):cn=hA;if(cn&&(cn=cn(s,ye))){eb(Ne,cn,f,Ce);break e}et&&et(s,xe,ye),s==="focusout"&&ye&&xe.type==="number"&&ye.memoizedProps.value!=null&&Le(xe,"number",xe.value)}switch(et=ye?ti(ye):window,s){case"focusin":(J0(et)||et.contentEditable==="true")&&(_a=et,xp=ye,ec=null);break;case"focusout":ec=xp=_a=null;break;case"mousedown":vp=!0;break;case"contextmenu":case"mouseup":case"dragend":vp=!1,ub(Ne,f,Ce);break;case"selectionchange":if(xA)break;case"keydown":case"keyup":ub(Ne,f,Ce)}var Rt;if(pp)e:{switch(s){case"compositionstart":var Jt="onCompositionStart";break e;case"compositionend":Jt="onCompositionEnd";break e;case"compositionupdate":Jt="onCompositionUpdate";break e}Jt=void 0}else ba?Z0(s,f)&&(Jt="onCompositionEnd"):s==="keydown"&&f.keyCode===229&&(Jt="onCompositionStart");Jt&&(Y0&&f.locale!=="ko"&&(ba||Jt!=="onCompositionStart"?Jt==="onCompositionEnd"&&ba&&(Rt=Ci()):(Dr=Ce,pa="value"in Dr?Dr.value:Dr.textContent,ba=!0)),et=$d(ye,Jt),0<et.length&&(Jt=new Bt(Jt,s,null,f,Ce),Ne.push({event:Jt,listeners:et}),Rt?Jt.data=Rt:(Rt=Q0(f),Rt!==null&&(Jt.data=Rt)))),(Rt=lA?cA(s,f):uA(s,f))&&(Jt=$d(ye,"onBeforeInput"),0<Jt.length&&(et=new Bt("onBeforeInput","beforeinput",null,f,Ce),Ne.push({event:et,listeners:Jt}),et.data=Rt)),t3(Ne,s,ye,f,Ce)}L_(Ne,l)})}function Cc(s,l,f){return{instance:s,listener:l,currentTarget:f}}function $d(s,l){for(var f=l+"Capture",y=[];s!==null;){var _=s,E=_.stateNode;if(_=_.tag,_!==5&&_!==26&&_!==27||E===null||(_=Io(s,f),_!=null&&y.unshift(Cc(s,_,E)),_=Io(s,l),_!=null&&y.push(Cc(s,_,E))),s.tag===3)return y;s=s.return}return[]}function s3(s){if(s===null)return null;do s=s.return;while(s&&s.tag!==5&&s.tag!==27);return s||null}function P_(s,l,f,y,_){for(var E=l._reactName,H=[];f!==null&&f!==y;){var X=f,re=X.alternate,ye=X.stateNode;if(X=X.tag,re!==null&&re===y)break;X!==5&&X!==26&&X!==27||ye===null||(re=ye,_?(ye=Io(f,E),ye!=null&&H.unshift(Cc(f,ye,re))):_||(ye=Io(f,E),ye!=null&&H.push(Cc(f,ye,re)))),f=f.return}H.length!==0&&s.push({event:l,listeners:H})}var o3=/\r\n?/g,a3=/\u0000|\uFFFD/g;function B_(s){return(typeof s=="string"?s:""+s).replace(o3,` +`).replace(a3,"")}function $_(s,l){return l=B_(l),B_(s)===l}function kn(s,l,f,y,_,E){switch(f){case"children":typeof y=="string"?l==="body"||l==="textarea"&&y===""||nt(s,y):(typeof y=="number"||typeof y=="bigint")&&l!=="body"&&nt(s,""+y);break;case"className":Gn(s,"class",y);break;case"tabIndex":Gn(s,"tabindex",y);break;case"dir":case"role":case"viewBox":case"width":case"height":Gn(s,f,y);break;case"style":qn(s,y,E);break;case"data":if(l!=="object"){Gn(s,"data",y);break}case"src":case"href":if(y===""&&(l!=="a"||f!=="href")){s.removeAttribute(f);break}if(y==null||typeof y=="function"||typeof y=="symbol"||typeof y=="boolean"){s.removeAttribute(f);break}y=Ui(""+y),s.setAttribute(f,y);break;case"action":case"formAction":if(typeof y=="function"){s.setAttribute(f,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof E=="function"&&(f==="formAction"?(l!=="input"&&kn(s,l,"name",_.name,_,null),kn(s,l,"formEncType",_.formEncType,_,null),kn(s,l,"formMethod",_.formMethod,_,null),kn(s,l,"formTarget",_.formTarget,_,null)):(kn(s,l,"encType",_.encType,_,null),kn(s,l,"method",_.method,_,null),kn(s,l,"target",_.target,_,null)));if(y==null||typeof y=="symbol"||typeof y=="boolean"){s.removeAttribute(f);break}y=Ui(""+y),s.setAttribute(f,y);break;case"onClick":y!=null&&(s.onclick=Gi);break;case"onScroll":y!=null&&Wt("scroll",s);break;case"onScrollEnd":y!=null&&Wt("scrollend",s);break;case"dangerouslySetInnerHTML":if(y!=null){if(typeof y!="object"||!("__html"in y))throw Error(i(61));if(f=y.__html,f!=null){if(_.children!=null)throw Error(i(60));s.innerHTML=f}}break;case"multiple":s.multiple=y&&typeof y!="function"&&typeof y!="symbol";break;case"muted":s.muted=y&&typeof y!="function"&&typeof y!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(y==null||typeof y=="function"||typeof y=="boolean"||typeof y=="symbol"){s.removeAttribute("xlink:href");break}f=Ui(""+y),s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",f);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":y!=null&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,""+y):s.removeAttribute(f);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":y&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,""):s.removeAttribute(f);break;case"capture":case"download":y===!0?s.setAttribute(f,""):y!==!1&&y!=null&&typeof y!="function"&&typeof y!="symbol"?s.setAttribute(f,y):s.removeAttribute(f);break;case"cols":case"rows":case"size":case"span":y!=null&&typeof y!="function"&&typeof y!="symbol"&&!isNaN(y)&&1<=y?s.setAttribute(f,y):s.removeAttribute(f);break;case"rowSpan":case"start":y==null||typeof y=="function"||typeof y=="symbol"||isNaN(y)?s.removeAttribute(f):s.setAttribute(f,y);break;case"popover":Wt("beforetoggle",s),Wt("toggle",s),An(s,"popover",y);break;case"xlinkActuate":jn(s,"http://www.w3.org/1999/xlink","xlink:actuate",y);break;case"xlinkArcrole":jn(s,"http://www.w3.org/1999/xlink","xlink:arcrole",y);break;case"xlinkRole":jn(s,"http://www.w3.org/1999/xlink","xlink:role",y);break;case"xlinkShow":jn(s,"http://www.w3.org/1999/xlink","xlink:show",y);break;case"xlinkTitle":jn(s,"http://www.w3.org/1999/xlink","xlink:title",y);break;case"xlinkType":jn(s,"http://www.w3.org/1999/xlink","xlink:type",y);break;case"xmlBase":jn(s,"http://www.w3.org/XML/1998/namespace","xml:base",y);break;case"xmlLang":jn(s,"http://www.w3.org/XML/1998/namespace","xml:lang",y);break;case"xmlSpace":jn(s,"http://www.w3.org/XML/1998/namespace","xml:space",y);break;case"is":An(s,"is",y);break;case"innerText":case"textContent":break;default:(!(2<f.length)||f[0]!=="o"&&f[0]!=="O"||f[1]!=="n"&&f[1]!=="N")&&(f=tn.get(f)||f,An(s,f,y))}}function Uh(s,l,f,y,_,E){switch(f){case"style":qn(s,y,E);break;case"dangerouslySetInnerHTML":if(y!=null){if(typeof y!="object"||!("__html"in y))throw Error(i(61));if(f=y.__html,f!=null){if(_.children!=null)throw Error(i(60));s.innerHTML=f}}break;case"children":typeof y=="string"?nt(s,y):(typeof y=="number"||typeof y=="bigint")&&nt(s,""+y);break;case"onScroll":y!=null&&Wt("scroll",s);break;case"onScrollEnd":y!=null&&Wt("scrollend",s);break;case"onClick":y!=null&&(s.onclick=Gi);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!Zt.hasOwnProperty(f))e:{if(f[0]==="o"&&f[1]==="n"&&(_=f.endsWith("Capture"),l=f.slice(2,_?f.length-7:void 0),E=s[Cn]||null,E=E!=null?E[f]:null,typeof E=="function"&&s.removeEventListener(l,E,_),typeof y=="function")){typeof E!="function"&&E!==null&&(f in s?s[f]=null:s.hasAttribute(f)&&s.removeAttribute(f)),s.addEventListener(l,y,_);break e}f in s?s[f]=y:y===!0?s.setAttribute(f,""):An(s,f,y)}}}function Ii(s,l,f){switch(l){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Wt("error",s),Wt("load",s);var y=!1,_=!1,E;for(E in f)if(f.hasOwnProperty(E)){var H=f[E];if(H!=null)switch(E){case"src":y=!0;break;case"srcSet":_=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,l));default:kn(s,l,E,H,f,null)}}_&&kn(s,l,"srcSet",f.srcSet,f,null),y&&kn(s,l,"src",f.src,f,null);return;case"input":Wt("invalid",s);var X=E=H=_=null,re=null,ye=null;for(y in f)if(f.hasOwnProperty(y)){var Ce=f[y];if(Ce!=null)switch(y){case"name":_=Ce;break;case"type":H=Ce;break;case"checked":re=Ce;break;case"defaultChecked":ye=Ce;break;case"value":E=Ce;break;case"defaultValue":X=Ce;break;case"children":case"dangerouslySetInnerHTML":if(Ce!=null)throw Error(i(137,l));break;default:kn(s,l,y,Ce,f,null)}}Se(s,E,X,re,ye,H,_,!1);return;case"select":Wt("invalid",s),y=H=E=null;for(_ in f)if(f.hasOwnProperty(_)&&(X=f[_],X!=null))switch(_){case"value":E=X;break;case"defaultValue":H=X;break;case"multiple":y=X;default:kn(s,l,_,X,f,null)}l=E,f=H,s.multiple=!!y,l!=null?Ue(s,!!y,l,!1):f!=null&&Ue(s,!!y,f,!0);return;case"textarea":Wt("invalid",s),E=_=y=null;for(H in f)if(f.hasOwnProperty(H)&&(X=f[H],X!=null))switch(H){case"value":y=X;break;case"defaultValue":_=X;break;case"children":E=X;break;case"dangerouslySetInnerHTML":if(X!=null)throw Error(i(91));break;default:kn(s,l,H,X,f,null)}ct(s,y,_,E);return;case"option":for(re in f)f.hasOwnProperty(re)&&(y=f[re],y!=null)&&(re==="selected"?s.selected=y&&typeof y!="function"&&typeof y!="symbol":kn(s,l,re,y,f,null));return;case"dialog":Wt("beforetoggle",s),Wt("toggle",s),Wt("cancel",s),Wt("close",s);break;case"iframe":case"object":Wt("load",s);break;case"video":case"audio":for(y=0;y<wc.length;y++)Wt(wc[y],s);break;case"image":Wt("error",s),Wt("load",s);break;case"details":Wt("toggle",s);break;case"embed":case"source":case"link":Wt("error",s),Wt("load",s);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(ye in f)if(f.hasOwnProperty(ye)&&(y=f[ye],y!=null))switch(ye){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,l));default:kn(s,l,ye,y,f,null)}return;default:if(Ct(l)){for(Ce in f)f.hasOwnProperty(Ce)&&(y=f[Ce],y!==void 0&&Uh(s,l,Ce,y,f,void 0));return}}for(X in f)f.hasOwnProperty(X)&&(y=f[X],y!=null&&kn(s,l,X,y,f,null))}function l3(s,l,f,y){switch(l){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var _=null,E=null,H=null,X=null,re=null,ye=null,Ce=null;for(_e in f){var Ne=f[_e];if(f.hasOwnProperty(_e)&&Ne!=null)switch(_e){case"checked":break;case"value":break;case"defaultValue":re=Ne;default:y.hasOwnProperty(_e)||kn(s,l,_e,null,y,Ne)}}for(var xe in y){var _e=y[xe];if(Ne=f[xe],y.hasOwnProperty(xe)&&(_e!=null||Ne!=null))switch(xe){case"type":E=_e;break;case"name":_=_e;break;case"checked":ye=_e;break;case"defaultChecked":Ce=_e;break;case"value":H=_e;break;case"defaultValue":X=_e;break;case"children":case"dangerouslySetInnerHTML":if(_e!=null)throw Error(i(137,l));break;default:_e!==Ne&&kn(s,l,xe,_e,y,Ne)}}ce(s,H,X,re,ye,Ce,E,_);return;case"select":_e=H=X=xe=null;for(E in f)if(re=f[E],f.hasOwnProperty(E)&&re!=null)switch(E){case"value":break;case"multiple":_e=re;default:y.hasOwnProperty(E)||kn(s,l,E,null,y,re)}for(_ in y)if(E=y[_],re=f[_],y.hasOwnProperty(_)&&(E!=null||re!=null))switch(_){case"value":xe=E;break;case"defaultValue":X=E;break;case"multiple":H=E;default:E!==re&&kn(s,l,_,E,y,re)}l=X,f=H,y=_e,xe!=null?Ue(s,!!f,xe,!1):!!y!=!!f&&(l!=null?Ue(s,!!f,l,!0):Ue(s,!!f,f?[]:"",!1));return;case"textarea":_e=xe=null;for(X in f)if(_=f[X],f.hasOwnProperty(X)&&_!=null&&!y.hasOwnProperty(X))switch(X){case"value":break;case"children":break;default:kn(s,l,X,null,y,_)}for(H in y)if(_=y[H],E=f[H],y.hasOwnProperty(H)&&(_!=null||E!=null))switch(H){case"value":xe=_;break;case"defaultValue":_e=_;break;case"children":break;case"dangerouslySetInnerHTML":if(_!=null)throw Error(i(91));break;default:_!==E&&kn(s,l,H,_,y,E)}_t(s,xe,_e);return;case"option":for(var Ke in f)xe=f[Ke],f.hasOwnProperty(Ke)&&xe!=null&&!y.hasOwnProperty(Ke)&&(Ke==="selected"?s.selected=!1:kn(s,l,Ke,null,y,xe));for(re in y)xe=y[re],_e=f[re],y.hasOwnProperty(re)&&xe!==_e&&(xe!=null||_e!=null)&&(re==="selected"?s.selected=xe&&typeof xe!="function"&&typeof xe!="symbol":kn(s,l,re,xe,y,_e));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var ft in f)xe=f[ft],f.hasOwnProperty(ft)&&xe!=null&&!y.hasOwnProperty(ft)&&kn(s,l,ft,null,y,xe);for(ye in y)if(xe=y[ye],_e=f[ye],y.hasOwnProperty(ye)&&xe!==_e&&(xe!=null||_e!=null))switch(ye){case"children":case"dangerouslySetInnerHTML":if(xe!=null)throw Error(i(137,l));break;default:kn(s,l,ye,xe,y,_e)}return;default:if(Ct(l)){for(var Sn in f)xe=f[Sn],f.hasOwnProperty(Sn)&&xe!==void 0&&!y.hasOwnProperty(Sn)&&Uh(s,l,Sn,void 0,y,xe);for(Ce in y)xe=y[Ce],_e=f[Ce],!y.hasOwnProperty(Ce)||xe===_e||xe===void 0&&_e===void 0||Uh(s,l,Ce,xe,y,_e);return}}for(var fe in f)xe=f[fe],f.hasOwnProperty(fe)&&xe!=null&&!y.hasOwnProperty(fe)&&kn(s,l,fe,null,y,xe);for(Ne in y)xe=y[Ne],_e=f[Ne],!y.hasOwnProperty(Ne)||xe===_e||xe==null&&_e==null||kn(s,l,Ne,xe,y,_e)}function H_(s){switch(s){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function c3(){if(typeof performance.getEntriesByType=="function"){for(var s=0,l=0,f=performance.getEntriesByType("resource"),y=0;y<f.length;y++){var _=f[y],E=_.transferSize,H=_.initiatorType,X=_.duration;if(E&&X&&H_(H)){for(H=0,X=_.responseEnd,y+=1;y<f.length;y++){var re=f[y],ye=re.startTime;if(ye>X)break;var Ce=re.transferSize,Ne=re.initiatorType;Ce&&H_(Ne)&&(re=re.responseEnd,H+=Ce*(re<X?1:(X-ye)/(re-ye)))}if(--y,l+=8*(E+H)/(_.duration/1e3),s++,10<s)break}}if(0<s)return l/s/1e6}return navigator.connection&&(s=navigator.connection.downlink,typeof s=="number")?s:5}var Gh=null,qh=null;function Hd(s){return s.nodeType===9?s:s.ownerDocument}function F_(s){switch(s){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function V_(s,l){if(s===0)switch(l){case"svg":return 1;case"math":return 2;default:return 0}return s===1&&l==="foreignObject"?0:s}function Wh(s,l){return s==="textarea"||s==="noscript"||typeof l.children=="string"||typeof l.children=="number"||typeof l.children=="bigint"||typeof l.dangerouslySetInnerHTML=="object"&&l.dangerouslySetInnerHTML!==null&&l.dangerouslySetInnerHTML.__html!=null}var Yh=null;function u3(){var s=window.event;return s&&s.type==="popstate"?s===Yh?!1:(Yh=s,!0):(Yh=null,!1)}var U_=typeof setTimeout=="function"?setTimeout:void 0,d3=typeof clearTimeout=="function"?clearTimeout:void 0,G_=typeof Promise=="function"?Promise:void 0,f3=typeof queueMicrotask=="function"?queueMicrotask:typeof G_<"u"?function(s){return G_.resolve(null).then(s).catch(m3)}:U_;function m3(s){setTimeout(function(){throw s})}function ao(s){return s==="head"}function q_(s,l){var f=l,y=0;do{var _=f.nextSibling;if(s.removeChild(f),_&&_.nodeType===8)if(f=_.data,f==="/$"||f==="/&"){if(y===0){s.removeChild(_),Ya(l);return}y--}else if(f==="$"||f==="$?"||f==="$~"||f==="$!"||f==="&")y++;else if(f==="html")jc(s.ownerDocument.documentElement);else if(f==="head"){f=s.ownerDocument.head,jc(f);for(var E=f.firstChild;E;){var H=E.nextSibling,X=E.nodeName;E[In]||X==="SCRIPT"||X==="STYLE"||X==="LINK"&&E.rel.toLowerCase()==="stylesheet"||f.removeChild(E),E=H}}else f==="body"&&jc(s.ownerDocument.body);f=_}while(f);Ya(l)}function W_(s,l){var f=s;s=0;do{var y=f.nextSibling;if(f.nodeType===1?l?(f._stashedDisplay=f.style.display,f.style.display="none"):(f.style.display=f._stashedDisplay||"",f.getAttribute("style")===""&&f.removeAttribute("style")):f.nodeType===3&&(l?(f._stashedText=f.nodeValue,f.nodeValue=""):f.nodeValue=f._stashedText||""),y&&y.nodeType===8)if(f=y.data,f==="/$"){if(s===0)break;s--}else f!=="$"&&f!=="$?"&&f!=="$~"&&f!=="$!"||s++;f=y}while(f)}function Xh(s){var l=s.firstChild;for(l&&l.nodeType===10&&(l=l.nextSibling);l;){var f=l;switch(l=l.nextSibling,f.nodeName){case"HTML":case"HEAD":case"BODY":Xh(f),It(f);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(f.rel.toLowerCase()==="stylesheet")continue}s.removeChild(f)}}function p3(s,l,f,y){for(;s.nodeType===1;){var _=f;if(s.nodeName.toLowerCase()!==l.toLowerCase()){if(!y&&(s.nodeName!=="INPUT"||s.type!=="hidden"))break}else if(y){if(!s[In])switch(l){case"meta":if(!s.hasAttribute("itemprop"))break;return s;case"link":if(E=s.getAttribute("rel"),E==="stylesheet"&&s.hasAttribute("data-precedence"))break;if(E!==_.rel||s.getAttribute("href")!==(_.href==null||_.href===""?null:_.href)||s.getAttribute("crossorigin")!==(_.crossOrigin==null?null:_.crossOrigin)||s.getAttribute("title")!==(_.title==null?null:_.title))break;return s;case"style":if(s.hasAttribute("data-precedence"))break;return s;case"script":if(E=s.getAttribute("src"),(E!==(_.src==null?null:_.src)||s.getAttribute("type")!==(_.type==null?null:_.type)||s.getAttribute("crossorigin")!==(_.crossOrigin==null?null:_.crossOrigin))&&E&&s.hasAttribute("async")&&!s.hasAttribute("itemprop"))break;return s;default:return s}}else if(l==="input"&&s.type==="hidden"){var E=_.name==null?null:""+_.name;if(_.type==="hidden"&&s.getAttribute("name")===E)return s}else return s;if(s=Cr(s.nextSibling),s===null)break}return null}function h3(s,l,f){if(l==="")return null;for(;s.nodeType!==3;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!f||(s=Cr(s.nextSibling),s===null))return null;return s}function Y_(s,l){for(;s.nodeType!==8;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!l||(s=Cr(s.nextSibling),s===null))return null;return s}function Kh(s){return s.data==="$?"||s.data==="$~"}function Zh(s){return s.data==="$!"||s.data==="$?"&&s.ownerDocument.readyState!=="loading"}function g3(s,l){var f=s.ownerDocument;if(s.data==="$~")s._reactRetry=l;else if(s.data!=="$?"||f.readyState!=="loading")l();else{var y=function(){l(),f.removeEventListener("DOMContentLoaded",y)};f.addEventListener("DOMContentLoaded",y),s._reactRetry=y}}function Cr(s){for(;s!=null;s=s.nextSibling){var l=s.nodeType;if(l===1||l===3)break;if(l===8){if(l=s.data,l==="$"||l==="$!"||l==="$?"||l==="$~"||l==="&"||l==="F!"||l==="F")break;if(l==="/$"||l==="/&")return null}}return s}var Qh=null;function X_(s){s=s.nextSibling;for(var l=0;s;){if(s.nodeType===8){var f=s.data;if(f==="/$"||f==="/&"){if(l===0)return Cr(s.nextSibling);l--}else f!=="$"&&f!=="$!"&&f!=="$?"&&f!=="$~"&&f!=="&"||l++}s=s.nextSibling}return null}function K_(s){s=s.previousSibling;for(var l=0;s;){if(s.nodeType===8){var f=s.data;if(f==="$"||f==="$!"||f==="$?"||f==="$~"||f==="&"){if(l===0)return s;l--}else f!=="/$"&&f!=="/&"||l++}s=s.previousSibling}return null}function Z_(s,l,f){switch(l=Hd(f),s){case"html":if(s=l.documentElement,!s)throw Error(i(452));return s;case"head":if(s=l.head,!s)throw Error(i(453));return s;case"body":if(s=l.body,!s)throw Error(i(454));return s;default:throw Error(i(451))}}function jc(s){for(var l=s.attributes;l.length;)s.removeAttributeNode(l[0]);It(s)}var jr=new Map,Q_=new Set;function Fd(s){return typeof s.getRootNode=="function"?s.getRootNode():s.nodeType===9?s:s.ownerDocument}var Ns=q.d;q.d={f:y3,r:x3,D:v3,C:b3,L:_3,m:k3,X:w3,S:S3,M:C3};function y3(){var s=Ns.f(),l=Md();return s||l}function x3(s){var l=Zn(s);l!==null&&l.tag===5&&l.type==="form"?h1(l):Ns.r(s)}var Ga=typeof document>"u"?null:document;function J_(s,l,f){var y=Ga;if(y&&typeof l=="string"&&l){var _=Pt(l);_='link[rel="'+s+'"][href="'+_+'"]',typeof f=="string"&&(_+='[crossorigin="'+f+'"]'),Q_.has(_)||(Q_.add(_),s={rel:s,crossOrigin:f,href:l},y.querySelector(_)===null&&(l=y.createElement("link"),Ii(l,"link",s),Kt(l),y.head.appendChild(l)))}}function v3(s){Ns.D(s),J_("dns-prefetch",s,null)}function b3(s,l){Ns.C(s,l),J_("preconnect",s,l)}function _3(s,l,f){Ns.L(s,l,f);var y=Ga;if(y&&s&&l){var _='link[rel="preload"][as="'+Pt(l)+'"]';l==="image"&&f&&f.imageSrcSet?(_+='[imagesrcset="'+Pt(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(_+='[imagesizes="'+Pt(f.imageSizes)+'"]')):_+='[href="'+Pt(s)+'"]';var E=_;switch(l){case"style":E=qa(s);break;case"script":E=Wa(s)}jr.has(E)||(s=p({rel:"preload",href:l==="image"&&f&&f.imageSrcSet?void 0:s,as:l},f),jr.set(E,s),y.querySelector(_)!==null||l==="style"&&y.querySelector(Ec(E))||l==="script"&&y.querySelector(Nc(E))||(l=y.createElement("link"),Ii(l,"link",s),Kt(l),y.head.appendChild(l)))}}function k3(s,l){Ns.m(s,l);var f=Ga;if(f&&s){var y=l&&typeof l.as=="string"?l.as:"script",_='link[rel="modulepreload"][as="'+Pt(y)+'"][href="'+Pt(s)+'"]',E=_;switch(y){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":E=Wa(s)}if(!jr.has(E)&&(s=p({rel:"modulepreload",href:s},l),jr.set(E,s),f.querySelector(_)===null)){switch(y){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector(Nc(E)))return}y=f.createElement("link"),Ii(y,"link",s),Kt(y),f.head.appendChild(y)}}}function S3(s,l,f){Ns.S(s,l,f);var y=Ga;if(y&&s){var _=ln(y).hoistableStyles,E=qa(s);l=l||"default";var H=_.get(E);if(!H){var X={loading:0,preload:null};if(H=y.querySelector(Ec(E)))X.loading=5;else{s=p({rel:"stylesheet",href:s,"data-precedence":l},f),(f=jr.get(E))&&Jh(s,f);var re=H=y.createElement("link");Kt(re),Ii(re,"link",s),re._p=new Promise(function(ye,Ce){re.onload=ye,re.onerror=Ce}),re.addEventListener("load",function(){X.loading|=1}),re.addEventListener("error",function(){X.loading|=2}),X.loading|=4,Vd(H,l,y)}H={type:"stylesheet",instance:H,count:1,state:X},_.set(E,H)}}}function w3(s,l){Ns.X(s,l);var f=Ga;if(f&&s){var y=ln(f).hoistableScripts,_=Wa(s),E=y.get(_);E||(E=f.querySelector(Nc(_)),E||(s=p({src:s,async:!0},l),(l=jr.get(_))&&eg(s,l),E=f.createElement("script"),Kt(E),Ii(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},y.set(_,E))}}function C3(s,l){Ns.M(s,l);var f=Ga;if(f&&s){var y=ln(f).hoistableScripts,_=Wa(s),E=y.get(_);E||(E=f.querySelector(Nc(_)),E||(s=p({src:s,async:!0,type:"module"},l),(l=jr.get(_))&&eg(s,l),E=f.createElement("script"),Kt(E),Ii(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},y.set(_,E))}}function ek(s,l,f,y){var _=(_=te.current)?Fd(_):null;if(!_)throw Error(i(446));switch(s){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(l=qa(f.href),f=ln(_).hoistableStyles,y=f.get(l),y||(y={type:"style",instance:null,count:0,state:null},f.set(l,y)),y):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){s=qa(f.href);var E=ln(_).hoistableStyles,H=E.get(s);if(H||(_=_.ownerDocument||_,H={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},E.set(s,H),(E=_.querySelector(Ec(s)))&&!E._p&&(H.instance=E,H.state.loading=5),jr.has(s)||(f={rel:"preload",as:"style",href:f.href,crossOrigin:f.crossOrigin,integrity:f.integrity,media:f.media,hrefLang:f.hrefLang,referrerPolicy:f.referrerPolicy},jr.set(s,f),E||j3(_,s,f,H.state))),l&&y===null)throw Error(i(528,""));return H}if(l&&y!==null)throw Error(i(529,""));return null;case"script":return l=f.async,f=f.src,typeof f=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=Wa(f),f=ln(_).hoistableScripts,y=f.get(l),y||(y={type:"script",instance:null,count:0,state:null},f.set(l,y)),y):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,s))}}function qa(s){return'href="'+Pt(s)+'"'}function Ec(s){return'link[rel="stylesheet"]['+s+"]"}function tk(s){return p({},s,{"data-precedence":s.precedence,precedence:null})}function j3(s,l,f,y){s.querySelector('link[rel="preload"][as="style"]['+l+"]")?y.loading=1:(l=s.createElement("link"),y.preload=l,l.addEventListener("load",function(){return y.loading|=1}),l.addEventListener("error",function(){return y.loading|=2}),Ii(l,"link",f),Kt(l),s.head.appendChild(l))}function Wa(s){return'[src="'+Pt(s)+'"]'}function Nc(s){return"script[async]"+s}function nk(s,l,f){if(l.count++,l.instance===null)switch(l.type){case"style":var y=s.querySelector('style[data-href~="'+Pt(f.href)+'"]');if(y)return l.instance=y,Kt(y),y;var _=p({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return y=(s.ownerDocument||s).createElement("style"),Kt(y),Ii(y,"style",_),Vd(y,f.precedence,s),l.instance=y;case"stylesheet":_=qa(f.href);var E=s.querySelector(Ec(_));if(E)return l.state.loading|=4,l.instance=E,Kt(E),E;y=tk(f),(_=jr.get(_))&&Jh(y,_),E=(s.ownerDocument||s).createElement("link"),Kt(E);var H=E;return H._p=new Promise(function(X,re){H.onload=X,H.onerror=re}),Ii(E,"link",y),l.state.loading|=4,Vd(E,f.precedence,s),l.instance=E;case"script":return E=Wa(f.src),(_=s.querySelector(Nc(E)))?(l.instance=_,Kt(_),_):(y=f,(_=jr.get(E))&&(y=p({},f),eg(y,_)),s=s.ownerDocument||s,_=s.createElement("script"),Kt(_),Ii(_,"link",y),s.head.appendChild(_),l.instance=_);case"void":return null;default:throw Error(i(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(y=l.instance,l.state.loading|=4,Vd(y,f.precedence,s));return l.instance}function Vd(s,l,f){for(var y=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),_=y.length?y[y.length-1]:null,E=_,H=0;H<y.length;H++){var X=y[H];if(X.dataset.precedence===l)E=X;else if(E!==_)break}E?E.parentNode.insertBefore(s,E.nextSibling):(l=f.nodeType===9?f.head:f,l.insertBefore(s,l.firstChild))}function Jh(s,l){s.crossOrigin==null&&(s.crossOrigin=l.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=l.referrerPolicy),s.title==null&&(s.title=l.title)}function eg(s,l){s.crossOrigin==null&&(s.crossOrigin=l.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=l.referrerPolicy),s.integrity==null&&(s.integrity=l.integrity)}var Ud=null;function ik(s,l,f){if(Ud===null){var y=new Map,_=Ud=new Map;_.set(f,y)}else _=Ud,y=_.get(f),y||(y=new Map,_.set(f,y));if(y.has(s))return y;for(y.set(s,null),f=f.getElementsByTagName(s),_=0;_<f.length;_++){var E=f[_];if(!(E[In]||E[$t]||s==="link"&&E.getAttribute("rel")==="stylesheet")&&E.namespaceURI!=="http://www.w3.org/2000/svg"){var H=E.getAttribute(l)||"";H=s+H;var X=y.get(H);X?X.push(E):y.set(H,[E])}}return y}function rk(s,l,f){s=s.ownerDocument||s,s.head.insertBefore(f,l==="title"?s.querySelector("head > title"):null)}function E3(s,l,f){if(f===1||l.itemProp!=null)return!1;switch(s){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;return l.rel==="stylesheet"?(s=l.disabled,typeof l.precedence=="string"&&s==null):!0;case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function sk(s){return!(s.type==="stylesheet"&&(s.state.loading&3)===0)}function N3(s,l,f,y){if(f.type==="stylesheet"&&(typeof y.media!="string"||matchMedia(y.media).matches!==!1)&&(f.state.loading&4)===0){if(f.instance===null){var _=qa(y.href),E=l.querySelector(Ec(_));if(E){l=E._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(s.count++,s=Gd.bind(s),l.then(s,s)),f.state.loading|=4,f.instance=E,Kt(E);return}E=l.ownerDocument||l,y=tk(y),(_=jr.get(_))&&Jh(y,_),E=E.createElement("link"),Kt(E);var H=E;H._p=new Promise(function(X,re){H.onload=X,H.onerror=re}),Ii(E,"link",y),f.instance=E}s.stylesheets===null&&(s.stylesheets=new Map),s.stylesheets.set(f,l),(l=f.state.preload)&&(f.state.loading&3)===0&&(s.count++,f=Gd.bind(s),l.addEventListener("load",f),l.addEventListener("error",f))}}var tg=0;function I3(s,l){return s.stylesheets&&s.count===0&&Wd(s,s.stylesheets),0<s.count||0<s.imgCount?function(f){var y=setTimeout(function(){if(s.stylesheets&&Wd(s,s.stylesheets),s.unsuspend){var E=s.unsuspend;s.unsuspend=null,E()}},6e4+l);0<s.imgBytes&&tg===0&&(tg=62500*c3());var _=setTimeout(function(){if(s.waitingForImages=!1,s.count===0&&(s.stylesheets&&Wd(s,s.stylesheets),s.unsuspend)){var E=s.unsuspend;s.unsuspend=null,E()}},(s.imgBytes>tg?50:800)+l);return s.unsuspend=f,function(){s.unsuspend=null,clearTimeout(y),clearTimeout(_)}}:null}function Gd(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wd(this,this.stylesheets);else if(this.unsuspend){var s=this.unsuspend;this.unsuspend=null,s()}}}var qd=null;function Wd(s,l){s.stylesheets=null,s.unsuspend!==null&&(s.count++,qd=new Map,l.forEach(T3,s),qd=null,Gd.call(s))}function T3(s,l){if(!(l.state.loading&4)){var f=qd.get(s);if(f)var y=f.get(null);else{f=new Map,qd.set(s,f);for(var _=s.querySelectorAll("link[data-precedence],style[data-precedence]"),E=0;E<_.length;E++){var H=_[E];(H.nodeName==="LINK"||H.getAttribute("media")!=="not all")&&(f.set(H.dataset.precedence,H),y=H)}y&&f.set(null,y)}_=l.instance,H=_.getAttribute("data-precedence"),E=f.get(H)||y,E===y&&f.set(null,_),f.set(H,_),this.count++,y=Gd.bind(this),_.addEventListener("load",y),_.addEventListener("error",y),E?E.parentNode.insertBefore(_,E.nextSibling):(s=s.nodeType===9?s.head:s,s.insertBefore(_,s.firstChild)),l.state.loading|=4}}var Ic={$$typeof:j,Provider:null,Consumer:null,_currentValue:Y,_currentValue2:Y,_threadCount:0};function R3(s,l,f,y,_,E,H,X,re){this.tag=1,this.containerInfo=s,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=ht(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ht(0),this.hiddenUpdates=ht(null),this.identifierPrefix=y,this.onUncaughtError=_,this.onCaughtError=E,this.onRecoverableError=H,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=re,this.incompleteTransitions=new Map}function ok(s,l,f,y,_,E,H,X,re,ye,Ce,Ne){return s=new R3(s,l,f,H,re,ye,Ce,Ne,X),l=1,E===!0&&(l|=24),E=ir(3,null,null,l),s.current=E,E.stateNode=s,l=Dp(),l.refCount++,s.pooledCache=l,l.refCount++,E.memoizedState={element:y,isDehydrated:f,cache:l},Pp(E),s}function ak(s){return s?(s=wa,s):wa}function lk(s,l,f,y,_,E){_=ak(_),y.context===null?y.context=_:y.pendingContext=_,y=Ks(l),y.payload={element:f},E=E===void 0?null:E,E!==null&&(y.callback=E),f=Zs(s,y,l),f!==null&&(Ki(f,s,l),ac(f,s,l))}function ck(s,l){if(s=s.memoizedState,s!==null&&s.dehydrated!==null){var f=s.retryLane;s.retryLane=f!==0&&f<l?f:l}}function ng(s,l){ck(s,l),(s=s.alternate)&&ck(s,l)}function uk(s){if(s.tag===13||s.tag===31){var l=Lo(s,67108864);l!==null&&Ki(l,s,67108864),ng(s,67108864)}}function dk(s){if(s.tag===13||s.tag===31){var l=lr();l=tt(l);var f=Lo(s,l);f!==null&&Ki(f,s,l),ng(s,l)}}var Yd=!0;function A3(s,l,f,y){var _=$.T;$.T=null;var E=q.p;try{q.p=2,ig(s,l,f,y)}finally{q.p=E,$.T=_}}function M3(s,l,f,y){var _=$.T;$.T=null;var E=q.p;try{q.p=8,ig(s,l,f,y)}finally{q.p=E,$.T=_}}function ig(s,l,f,y){if(Yd){var _=rg(y);if(_===null)Vh(s,l,y,Xd,f),mk(s,y);else if(O3(_,s,l,f,y))y.stopPropagation();else if(mk(s,y),l&4&&-1<D3.indexOf(s)){for(;_!==null;){var E=Zn(_);if(E!==null)switch(E.tag){case 3:if(E=E.stateNode,E.current.memoizedState.isDehydrated){var H=On(E.pendingLanes);if(H!==0){var X=E;for(X.pendingLanes|=2,X.entangledLanes|=2;H;){var re=1<<31-$e(H);X.entanglements[1]|=re,H&=~re}Zr(E),(fn&6)===0&&(Rd=Ve()+500,Sc(0))}}break;case 31:case 13:X=Lo(E,2),X!==null&&Ki(X,E,2),Md(),ng(E,2)}if(E=rg(y),E===null&&Vh(s,l,y,Xd,f),E===_)break;_=E}_!==null&&y.stopPropagation()}else Vh(s,l,y,null,f)}}function rg(s){return s=Yl(s),sg(s)}var Xd=null;function sg(s){if(Xd=null,s=yi(s),s!==null){var l=o(s);if(l===null)s=null;else{var f=l.tag;if(f===13){if(s=a(l),s!==null)return s;s=null}else if(f===31){if(s=c(l),s!==null)return s;s=null}else if(f===3){if(l.stateNode.current.memoizedState.isDehydrated)return l.tag===3?l.stateNode.containerInfo:null;s=null}else l!==s&&(s=null)}}return Xd=s,null}function fk(s){switch(s){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(lt()){case me:return 2;case be:return 8;case Ae:case Be:return 32;case We:return 268435456;default:return 32}default:return 32}}var og=!1,lo=null,co=null,uo=null,Tc=new Map,Rc=new Map,fo=[],D3="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function mk(s,l){switch(s){case"focusin":case"focusout":lo=null;break;case"dragenter":case"dragleave":co=null;break;case"mouseover":case"mouseout":uo=null;break;case"pointerover":case"pointerout":Tc.delete(l.pointerId);break;case"gotpointercapture":case"lostpointercapture":Rc.delete(l.pointerId)}}function Ac(s,l,f,y,_,E){return s===null||s.nativeEvent!==E?(s={blockedOn:l,domEventName:f,eventSystemFlags:y,nativeEvent:E,targetContainers:[_]},l!==null&&(l=Zn(l),l!==null&&uk(l)),s):(s.eventSystemFlags|=y,l=s.targetContainers,_!==null&&l.indexOf(_)===-1&&l.push(_),s)}function O3(s,l,f,y,_){switch(l){case"focusin":return lo=Ac(lo,s,l,f,y,_),!0;case"dragenter":return co=Ac(co,s,l,f,y,_),!0;case"mouseover":return uo=Ac(uo,s,l,f,y,_),!0;case"pointerover":var E=_.pointerId;return Tc.set(E,Ac(Tc.get(E)||null,s,l,f,y,_)),!0;case"gotpointercapture":return E=_.pointerId,Rc.set(E,Ac(Rc.get(E)||null,s,l,f,y,_)),!0}return!1}function pk(s){var l=yi(s.target);if(l!==null){var f=o(l);if(f!==null){if(l=f.tag,l===13){if(l=a(f),l!==null){s.blockedOn=l,Rn(s.priority,function(){dk(f)});return}}else if(l===31){if(l=c(f),l!==null){s.blockedOn=l,Rn(s.priority,function(){dk(f)});return}}else if(l===3&&f.stateNode.current.memoizedState.isDehydrated){s.blockedOn=f.tag===3?f.stateNode.containerInfo:null;return}}}s.blockedOn=null}function Kd(s){if(s.blockedOn!==null)return!1;for(var l=s.targetContainers;0<l.length;){var f=rg(s.nativeEvent);if(f===null){f=s.nativeEvent;var y=new f.constructor(f.type,f);ma=y,f.target.dispatchEvent(y),ma=null}else return l=Zn(f),l!==null&&uk(l),s.blockedOn=f,!1;l.shift()}return!0}function hk(s,l,f){Kd(s)&&f.delete(l)}function L3(){og=!1,lo!==null&&Kd(lo)&&(lo=null),co!==null&&Kd(co)&&(co=null),uo!==null&&Kd(uo)&&(uo=null),Tc.forEach(hk),Rc.forEach(hk)}function Zd(s,l){s.blockedOn===l&&(s.blockedOn=null,og||(og=!0,e.unstable_scheduleCallback(e.unstable_NormalPriority,L3)))}var Qd=null;function gk(s){Qd!==s&&(Qd=s,e.unstable_scheduleCallback(e.unstable_NormalPriority,function(){Qd===s&&(Qd=null);for(var l=0;l<s.length;l+=3){var f=s[l],y=s[l+1],_=s[l+2];if(typeof y!="function"){if(sg(y||f)===null)continue;break}var E=Zn(f);E!==null&&(s.splice(l,3),l-=3,rh(E,{pending:!0,data:_,method:f.method,action:y},y,_))}}))}function Ya(s){function l(re){return Zd(re,s)}lo!==null&&Zd(lo,s),co!==null&&Zd(co,s),uo!==null&&Zd(uo,s),Tc.forEach(l),Rc.forEach(l);for(var f=0;f<fo.length;f++){var y=fo[f];y.blockedOn===s&&(y.blockedOn=null)}for(;0<fo.length&&(f=fo[0],f.blockedOn===null);)pk(f),f.blockedOn===null&&fo.shift();if(f=(s.ownerDocument||s).$$reactFormReplay,f!=null)for(y=0;y<f.length;y+=3){var _=f[y],E=f[y+1],H=_[Cn]||null;if(typeof E=="function")H||gk(f);else if(H){var X=null;if(E&&E.hasAttribute("formAction")){if(_=E,H=E[Cn]||null)X=H.formAction;else if(sg(_)!==null)continue}else X=H.action;typeof X=="function"?f[y+1]=X:(f.splice(y,3),y-=3),gk(f)}}}function yk(){function s(E){E.canIntercept&&E.info==="react-transition"&&E.intercept({handler:function(){return new Promise(function(H){return _=H})},focusReset:"manual",scroll:"manual"})}function l(){_!==null&&(_(),_=null),y||setTimeout(f,20)}function f(){if(!y&&!navigation.transition){var E=navigation.currentEntry;E&&E.url!=null&&navigation.navigate(E.url,{state:E.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var y=!1,_=null;return navigation.addEventListener("navigate",s),navigation.addEventListener("navigatesuccess",l),navigation.addEventListener("navigateerror",l),setTimeout(f,100),function(){y=!0,navigation.removeEventListener("navigate",s),navigation.removeEventListener("navigatesuccess",l),navigation.removeEventListener("navigateerror",l),_!==null&&(_(),_=null)}}}function ag(s){this._internalRoot=s}Jd.prototype.render=ag.prototype.render=function(s){var l=this._internalRoot;if(l===null)throw Error(i(409));var f=l.current,y=lr();lk(f,y,s,l,null,null)},Jd.prototype.unmount=ag.prototype.unmount=function(){var s=this._internalRoot;if(s!==null){this._internalRoot=null;var l=s.containerInfo;lk(s.current,2,null,s,null,null),Md(),l[Xt]=null}};function Jd(s){this._internalRoot=s}Jd.prototype.unstable_scheduleHydration=function(s){if(s){var l=Si();s={blockedOn:null,target:s,priority:l};for(var f=0;f<fo.length&&l!==0&&l<fo[f].priority;f++);fo.splice(f,0,s),f===0&&pk(s)}};var xk=t.version;if(xk!=="19.2.4")throw Error(i(527,xk,"19.2.4"));q.findDOMNode=function(s){var l=s._reactInternals;if(l===void 0)throw typeof s.render=="function"?Error(i(188)):(s=Object.keys(s).join(","),Error(i(268,s)));return s=m(l),s=s!==null?h(s):null,s=s===null?null:s.stateNode,s};var z3={bundleType:0,version:"19.2.4",rendererPackageName:"react-dom",currentDispatcherRef:$,reconcilerVersion:"19.2.4"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var ef=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ef.isDisabled&&ef.supportsFiber)try{ke=ef.inject(z3),qe=ef}catch{}}return Dc.createRoot=function(s,l){if(!r(s))throw Error(i(299));var f=!1,y="",_=C1,E=j1,H=E1;return l!=null&&(l.unstable_strictMode===!0&&(f=!0),l.identifierPrefix!==void 0&&(y=l.identifierPrefix),l.onUncaughtError!==void 0&&(_=l.onUncaughtError),l.onCaughtError!==void 0&&(E=l.onCaughtError),l.onRecoverableError!==void 0&&(H=l.onRecoverableError)),l=ok(s,1,!1,null,null,f,y,null,_,E,H,yk),s[Xt]=l.current,Fh(s),new ag(l)},Dc.hydrateRoot=function(s,l,f){if(!r(s))throw Error(i(299));var y=!1,_="",E=C1,H=j1,X=E1,re=null;return f!=null&&(f.unstable_strictMode===!0&&(y=!0),f.identifierPrefix!==void 0&&(_=f.identifierPrefix),f.onUncaughtError!==void 0&&(E=f.onUncaughtError),f.onCaughtError!==void 0&&(H=f.onCaughtError),f.onRecoverableError!==void 0&&(X=f.onRecoverableError),f.formState!==void 0&&(re=f.formState)),l=ok(s,1,!0,l,f??null,y,_,re,E,H,X,yk),l.context=ak(null),f=l.current,y=lr(),y=tt(y),_=Ks(y),_.callback=null,Zs(f,_,y),f=y,l.current.lanes=f,gt(l,f),Zr(l),s[Xt]=l.current,Fh(s),new Jd(l)},Dc.version="19.2.4",Dc}var Nk;function W3(){if(Nk)return ug.exports;Nk=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),ug.exports=q3(),ug.exports}var Y3=W3();const X3=2e3,K3=3e4,Z3=20,Q3=100,J3=3e4,eM=1e4,tM=new Set(["collab_sync","kanban_create_board","kanban_create_task","kanban_update_task","kanban_move_task","kanban_delete_board","kanban_delete_task","kanban_assign","kanban_status","kanban_switch_view","run_task","create_session","session_send","session_update_config","session_delete","session_detail","session_stop","session_resume","session_complete","session_update_title","secretary_send","project_index","comms_state","comms_read_message"]),nM=3e4;class iM{constructor(t,n){this.url=t,this.handlers=n,this.ws=null,this.reconnectTimer=null,this.closedByUser=!1,this.reconnectAttempt=0,this.pendingQueue=[],this.heartbeatTimer=null,this.pongTimer=null,this.pendingSessionDetailRequests=[]}updateUrl(t){this.url=t}connect(){this.closedByUser=!1,this.handlers.onStatus?.("connecting"),this.ws=new WebSocket(this.url),this.ws.onopen=()=>{this.reconnectAttempt=0,this.handlers.onStatus?.("connected"),this.flushPendingQueue(),this.startHeartbeat()},this.ws.onmessage=t=>{this.handleMessage(t.data)},this.ws.onerror=()=>{this.handlers.onStatus?.("error","WebSocket error")},this.ws.onclose=()=>{this.stopHeartbeat(),this.failPendingSessionDetailRequests("connection_closed"),this.handlers.onStatus?.("disconnected"),this.ws=null,this.closedByUser||this.scheduleReconnect()}}disconnect(){this.closedByUser=!0,this.stopHeartbeat(),this.failPendingSessionDetailRequests("disconnected"),this.reconnectTimer!==null&&(window.clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws?.close(),this.ws=null}send(t){if(!this.ensureProjectScope(t))return"send-failed";const n=JSON.stringify(t);if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return this.pendingQueue.length<Q3?(this.pendingQueue.push(n),"queued"):"queue-full";try{return this.ws.send(n),"sent"}catch{return"send-failed"}}createAgent(t){this.send({type:"create_agent",role:t})}deleteAgent(t){this.send({type:"delete_agent",agent_id:t})}moveAgent(t,n,i){this.send({type:"move_agent",agent_id:t,office_id:n,seat_zone:i})}listAgents(){this.send({type:"list_agents"})}createFromTemplate(t,n){this.send({type:"create_agent",role:{id:t,template:t,name:n??t}})}setExecutionMode(t,n,i,r){this.send({type:"set_execution_mode",mode:t,profile:n??"corporate",preferred_agent:i,org_id:r})}assignTaskToAgent(t,n,i,r){const o=this.requireProjectId(t,"kanban_assign");this.send({type:"kanban_assign",task_id:n,agent_id:i,task_title:r,project_id:o})}updateTaskStatus(t,n,i){const r=this.requireProjectId(t,"kanban_status");this.send({type:"kanban_status",task_id:n,status:i,project_id:r})}kanbanCreateTask(t){const n=this.requireProjectId(t.project_id,"kanban_create_task");this.send({type:"kanban_create_task",...t,project_id:n})}kanbanUpdateTask(t,n,i){const r=this.requireProjectId(t,"kanban_update_task");this.send({type:"kanban_update_task",task_id:n,updates:i,project_id:r})}kanbanMoveTask(t,n,i,r=0){const o=this.requireProjectId(t,"kanban_move_task");this.send({type:"kanban_move_task",task_id:n,column_id:i,sort_order:r,project_id:o})}kanbanDeleteBoard(t,n){const i=this.requireProjectId(t,"kanban_delete_board");this.send({type:"kanban_delete_board",project_id:i,board_id:n})}kanbanDeleteTask(t,n){const i=this.requireProjectId(t,"kanban_delete_task");this.send({type:"kanban_delete_task",task_id:n,project_id:i})}kanbanSwitchView(t,n,i){const r=this.requireProjectId(t,"kanban_switch_view");this.send({type:"kanban_switch_view",level:n,target_id:i,project_id:r})}getAgentDetail(t){this.send({type:"get_agent_detail",agent_id:t})}collabSync(t,n,i){const r=this.requireProjectId(t,"collab_sync");this.send({type:"collab_sync",project_id:r,switch_seq:n,view_generation:i})}projectIndex(t,n,i){const r=this.requireProjectId(t,"project_index");this.send({type:"project_index",project_id:r,switch_seq:n,view_generation:i})}createSession(t,n,i,r,o,a){const c=this.requireProjectId(t,"create_session");this.send({type:"create_session",project_id:c,title:n??"New Chat",exec_mode:i,company_profile:r,preferred_agent:o,org_id:a})}sessionSend(t,n,i,r,o){const a=this.requireProjectId(t,"session_send");this.send({type:"session_send",project_id:a,task_id:n,content:i,attachments:r??[],metadata:o})}deleteSession(t,n){const i=this.requireProjectId(t,"session_delete");this.send({type:"session_delete",project_id:i,task_id:n})}sessionUpdateTitle(t,n,i){const r=this.requireProjectId(t,"session_update_title");this.send({type:"session_update_title",project_id:r,task_id:n,title:i})}sessionUpdateConfig(t,n,i,r,o,a){const c=this.requireProjectId(t,"session_update_config");this.send({type:"session_update_config",project_id:c,task_id:n,exec_mode:i,company_profile:r,preferred_agent:o,org_id:a})}sessionStop(t,n){const i=this.requireProjectId(t,"session_stop");this.send({type:"session_stop",project_id:i,task_id:n})}sessionResume(t,n,i,r,o){const a=this.requireProjectId(t,"session_resume");this.send({type:"session_resume",project_id:a,task_id:n,runtime_session_id:i,checkpoint_id:r,content:o})}sessionComplete(t,n){const i=this.requireProjectId(t,"session_complete");this.send({type:"session_complete",project_id:i,task_id:n})}sessionDetail(t,n,i){const r=this.requireProjectId(t,"session_detail"),o=i?.detailLevel??"summary";return new Promise(a=>{const c={type:"session_detail",project_id:r,task_id:n,limit:i?.limit,before_created_at:i?.beforeCreatedAt,before_message_id:i?.beforeMessageId,detail_level:o,include:i?.include,view_generation:i?.viewGeneration},d=JSON.stringify(c),m={projectId:r,taskId:n,detailLevel:o,viewGeneration:i?.viewGeneration,historyPage:i?.beforeCreatedAt!==void 0||!!i?.beforeMessageId,wireData:d,queued:!1,settled:!1,timeout:null,resolve:a};m.timeout=setTimeout(()=>{const p=this.pendingSessionDetailRequests.indexOf(m);p>=0&&this.timeoutSessionDetailRequest(p)},nM),this.pendingSessionDetailRequests.push(m);const h=this.send(c);if(m.queued=h==="queued",h==="queue-full"||h==="send-failed"){const p=this.pendingSessionDetailRequests.indexOf(m);p>=0&&this.failSessionDetailRequest(p,h==="queue-full"?"send_queue_full":"send_failed")}})}secretarySend(t,n){const i=this.requireProjectId(t,"secretary_send");this.send({type:"secretary_send",project_id:i,content:n})}listProjects(){this.send({type:"list_projects"})}createProject(t){this.send({type:"create_project",project_id:this.normalizeProjectId(t)})}deleteProject(t){this.send({type:"delete_project",project_id:this.normalizeProjectId(t)})}switchProject(t,n){this.send({type:"switch_project",project_id:this.normalizeProjectId(t),switch_seq:n})}orgInfo(){this.send({type:"org_info"})}talentImport(t){this.send({type:"talent_import",repo_path:t})}talentList(){this.send({type:"talent_list"})}talentScanLocal(){this.send({type:"talent_scan_local"})}talentImportSelected(t){this.send({type:"talent_import_selected",template_ids:t})}talentHire(t,n,i,r){this.send({type:"talent_hire",template_id:t,role_id:n,employee_name:i,org_id:r})}employeeDetail(t){this.send({type:"employee_detail",employee_id:t})}reorgList(){this.send({type:"reorg_list"})}reorgDecide(t,n,i){this.send({type:"reorg_decide",proposal_id:t,approved:n,notes:i})}importEmployeeAsAgent(t,n){this.send({type:"import_employee_as_agent",employee_id:t,office_id:n})}marketBrowse(){this.send({type:"market_browse"})}marketPreview(t){this.send({type:"market_preview",preset_id:t})}marketApplyPreset(t,n="namespace"){this.send({type:"market_apply_preset",preset_id:t,strategy:n})}marketListInstalled(){this.send({type:"market_list_installed"})}marketExport(t){this.send({type:"market_export",...t})}marketInstall(t,n="namespace"){this.send({type:"market_install",path:t,strategy:n})}marketUninstall(t){this.send({type:"market_uninstall",package_id:t})}addRole(t,n,i,r="owner",o){this.send({type:"add_role",role_id:t,name:n,responsibility:i,reports_to:r,icon:o||null})}bulkAddRoles(t){this.send({type:"bulk_add_roles",roles:t})}updateRole(t,n){this.send({type:"update_role",role_id:t,...n})}deleteRole(t){this.send({type:"delete_role",role_id:t})}updateRuntimePolicy(t){this.send({type:"update_runtime_policy",policy:t})}updateOrgStrategy(t){this.send({type:"update_org_strategy",...t})}resetArchitecture(){this.send({type:"reset_architecture"})}orgConfigExport(){this.send({type:"org_config_export"})}orgConfigImport(t,n){this.send({type:"org_config_import",yaml:t,dry_run:n})}orgSavedList(){this.send({type:"org_saved_list"})}orgSavedSaveAs(t,n){this.send({type:"org_saved_save_as",name:t,overwrite:n})}orgSavedCreate(t,n){this.send({type:"org_saved_create",organization_name:t,members:n})}orgSavedLoad(t){this.send({type:"org_saved_load",name:t})}orgSavedDelete(t){this.send({type:"org_saved_delete",name:t})}commsState(t,n){const i=this.requireProjectId(t,"comms_state");this.send({type:"comms_state",project_id:i,...n||{}})}commsReadMessage(t,n){const i=this.requireProjectId(t,"comms_read_message");this.send({type:"comms_read_message",project_id:i,path:n})}normalizeProjectId(t){return typeof t=="string"?t.trim():""}requireProjectId(t,n){const i=this.normalizeProjectId(t);if(!i)throw new Error(`${n} requires non-empty project_id`);return i}ensureProjectScope(t){const n=typeof t.type=="string"?t.type:"";if(!tM.has(n))return!0;const i=this.normalizeProjectId(t.project_id??t.projectId);if(!i){const r=`${n} requires non-empty project_id`;return console.error(`[wsClient] ${r}`,t),this.handlers.onAck?.({ok:!1,error:r,action:n}),!1}return t.project_id=i,!0}handleMessage(t){if(typeof t!="string")return;let n=null;try{n=JSON.parse(t)}catch{return}if(!(!n||typeof n!="object"||!("type"in n)))try{switch(n.type){case"snapshot":this.handlers.onSnapshot?.(n.payload);break;case"event":this.handlers.onEvent?.(n.payload);break;case"ack":{const i=this.settleSessionDetailRequest(n.payload);this.handlers.onAck?.(i);break}case"channel_created":this.handlers.onChannelCreated?.(n.payload);break;case"board_task_created":case"board_task_moved":this.handlers.onBoardEvent?.(n.payload);break;case"board_task_status_changed":case"execution_mode_resolved":case"project_run_updated":case"seat_digest_updated":case"work_item_batch_updated":case"session_runtime_control":this.handlers.onCollabMessage?.(n.type,n.payload);break;case"cross_office_collab":this.handlers.onCrossOfficeCollab?.(n.payload);break;case"chat_new_message":case"chat_channel_created":case"kanban_updated":case"kanban_board_created":case"collab_sync_push":case"project_index_push":this.handlers.onCollabMessage?.(n.type,n.payload);break;case"agent_runtime_update":this.handlers.onAgentRuntimeUpdate?.(n.payload);break;case"worker_notification":this.handlers.onWorkerNotification?.(n.payload);break;case"session_progress":this.handlers.onSessionProgress?.(n.payload);break;case"work_item_progress":this.handlers.onWorkItemProgress?.(n.payload);break;case"kanban_view_data":this.handlers.onKanbanViewData?.(n.payload);break;case"session_created":this.handlers.onSessionCreated?.(n.payload);break;case"session_updated":this.handlers.onSessionUpdated?.(n.payload);break;case"session_message":this.handlers.onSessionMessage?.(n.payload);break;case"session_title_updated":this.handlers.onSessionTitleUpdated?.(n.payload);break;case"session_deleted":this.handlers.onSessionDeleted?.(n.payload);break;case"child_session_created":this.handlers.onChildSessionCreated?.(n.payload);break;case"project_switched":this.handlers.onProjectSwitched?.(n.payload);break;case"project_deleted":this.handlers.onProjectDeleted?.(n.payload);break;case"org_info":this.handlers.onOrgInfo?.(n.payload);break;case"comms_state":this.handlers.onCommsState?.(n.payload);break;case"comms_message":this.handlers.onCommsMessage?.(n.payload);break;case"comms_state_dirty":try{const i=typeof n.payload?.project_id=="string"?n.payload.project_id:"";i&&this.commsState(i)}catch{}break;case"talent_list":this.handlers.onTalentList?.(n.payload);break;case"talent_scan_local":this.handlers.onTalentScanLocal?.(n.payload);break;case"employee_detail":this.handlers.onEmployeeDetail?.(n.payload);break;case"reorg_list":this.handlers.onReorgList?.(n.payload);break;case"market_list_installed":this.handlers.onMarketListInstalled?.(n.payload);break;case"market_browse":this.handlers.onMarketBrowse?.(n.payload);break;case"market_preview":this.handlers.onMarketPreview?.(n.payload);break;case"org_config_export":this.handlers.onOrgConfigExport?.(n.payload);break;case"org_config_import":this.handlers.onOrgConfigImport?.(n.payload);break;case"org_saved_list":this.handlers.onOrgSavedList?.(n.payload);break;case"org_saved_save_as":this.handlers.onOrgSavedSaveAs?.(n.payload);break;case"org_saved_create":this.handlers.onOrgSavedCreate?.(n.payload);break;case"org_saved_load":this.handlers.onOrgSavedLoad?.(n.payload);break;case"org_saved_delete":this.handlers.onOrgSavedDelete?.(n.payload);break;case"pong":this.handlePong();break;default:break}}catch(i){console.error("[wsClient] Error handling message:",n.type,i)}}settleSessionDetailRequest(t){const n=typeof t.action=="string"?t.action.trim():"";if(!(n==="session_detail"||!n&&t.error==="store_not_ready"))return t;const r=this.normalizeProjectId(t.project_id??t.projectId),o=typeof t.task_id=="string"?t.task_id:"",a=t.detail_level==="full"?"full":t.detail_level==="summary"?"summary":"",c=typeof t.view_generation=="number"?t.view_generation:void 0,d=this.pendingSessionDetailRequests.findIndex(p=>(!r||p.projectId===r)&&(!o||p.taskId===o)&&(!a||p.detailLevel===a)&&(c===void 0||p.viewGeneration===c));if(d<0)return t;const[m]=this.pendingSessionDetailRequests.splice(d,1);m.timeout!==null&&clearTimeout(m.timeout);const h={...t,action:"session_detail",project_id:r||m.projectId,task_id:o||m.taskId,detail_level:a||m.detailLevel,client_history_page:m.historyPage};return m.settled||(m.settled=!0,m.resolve(h)),h}timeoutSessionDetailRequest(t){const n=this.pendingSessionDetailRequests[t];if(n){if(n.queued){this.failSessionDetailRequest(t,"request_timeout");return}n.timeout!==null&&clearTimeout(n.timeout),n.timeout=null,n.settled||(n.settled=!0,n.resolve(this.sessionDetailFailurePayload(n,"request_timeout")))}}failSessionDetailRequest(t,n){const[i]=this.pendingSessionDetailRequests.splice(t,1);if(i){if(i.timeout!==null&&clearTimeout(i.timeout),i.queued){const r=this.pendingQueue.indexOf(i.wireData);r>=0&&this.pendingQueue.splice(r,1)}i.settled||i.resolve(this.sessionDetailFailurePayload(i,n))}}sessionDetailFailurePayload(t,n){return{ok:!1,action:"session_detail",error:n,project_id:t.projectId,task_id:t.taskId,detail_level:t.detailLevel,client_history_page:t.historyPage}}failPendingSessionDetailRequests(t){for(;this.pendingSessionDetailRequests.length>0;)this.failSessionDetailRequest(0,t)}flushPendingQueue(){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;const t=this.pendingQueue.splice(0);for(const n of t){const i=this.pendingSessionDetailRequests.findIndex(r=>r.queued&&r.wireData===n);try{this.ws.send(n),i>=0&&(this.pendingSessionDetailRequests[i].queued=!1)}catch{i>=0&&this.failSessionDetailRequest(i,"send_failed")}}}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=window.setInterval(()=>{!this.ws||this.ws.readyState!==WebSocket.OPEN||(this.ws.send(JSON.stringify({type:"ping"})),this.pongTimer=window.setTimeout(()=>{this.pongTimer=null,this.ws?.close()},eM))},J3)}stopHeartbeat(){this.heartbeatTimer!==null&&(window.clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pongTimer!==null&&(window.clearTimeout(this.pongTimer),this.pongTimer=null)}handlePong(){this.pongTimer!==null&&(window.clearTimeout(this.pongTimer),this.pongTimer=null)}scheduleReconnect(){if(this.reconnectTimer!==null)return;if(this.reconnectAttempt>=Z3){this.handlers.onStatus?.("error","max reconnect attempts reached");return}const t=Math.min(X3*Math.pow(2,this.reconnectAttempt),K3);this.reconnectAttempt++,this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}}var rM=B3();const Qi=da(rM),T=32,Xn=20,dr=25,Av=2,Ik=3,sM=Xn*Ik+Av*(Ik-1),oM=dr,pg=sM,Oc=oM,nu=T*8,ll=T*4,fl=T*20,$j=1.8,aM=$j,lM=$j,cM=30,uM=8,dM=-2,fM=.22,mM=5,pM=23;function hM(){if(typeof window>"u")return null;const e=o=>{const a=new URLSearchParams(o);return a.get("day")==="1"||a.get("daytime")==="1"?"day":a.get("night")==="1"?"night":null};let t=e(window.location.search||"");if(t)return t;const n=window.location.hash;if(!n)return null;const i=n.indexOf("?");if(i>=0&&(t=e(n.slice(i+1)),t))return t;const r=n.replace(/^#/,"");return r.includes("=")&&(t=e(r),t)?t:null}function iu(e=new Date){if(typeof window<"u")try{const n=hM();if(n==="day")return!0;if(n==="night")return!1;const i=window.localStorage?.getItem("opc_outdoor_override");if(i==="day")return!0;if(i==="night")return!1;if(window.localStorage?.getItem("opc_outdoor_day")==="1")return!0;if(window.localStorage?.getItem("opc_outdoor_night")==="1")return!1}catch{}const t=e.getHours();return t>=mM&&t<=pM}const Tk=11064556,Rk=3228986,gM=200,yM=100,xM=60,If=2,Tf=20,Hj=3,Fj=6,Xa=2.5,vM=8,bM=15,Ak=5,Mk=10,_M=5,Dk=3,Ok=2;function kM(e,t,n){const i=t||e.clientWidth||window.innerWidth-380,r=n||e.clientHeight||window.innerHeight-48,o=iu()?"#a8d4ec":"#31453a";return{type:Qi.CANVAS,parent:e,width:i,height:r,pixelArt:!0,backgroundColor:o,physics:{default:"arcade",arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:Qi.Scale.RESIZE,autoCenter:Qi.Scale.NONE,parent:e},render:{antialias:!1,pixelArt:!0}}}const SM=16,wM=32,Lk=6;class CM extends Qi.Scene{constructor(){super("Boot")}preload(){this.load.image("office-bg","assets/office-bg.png"),this.load.spritesheet("office-tileset-32","assets/office-tileset-32.png",{frameWidth:32,frameHeight:32});for(let n=0;n<Lk;n++)this.load.spritesheet(`char_${n}`,`assets/characters/char_${n}.png`,{frameWidth:SM,frameHeight:wM});const t=this.add.graphics();this.load.on("progress",n=>{t.clear(),t.fillStyle(4886745,1),t.fillRect(this.scale.width/2-100,this.scale.height/2-8,200*n,16)}),this.load.on("complete",()=>t.destroy())}create(){this.createCharacterAnimations(),console.log("[BootScene] All assets loaded"),this.scene.start("Office")}createCharacterAnimations(){const n=[{name:"down",row:0},{name:"up",row:1},{name:"right",row:2},{name:"left",row:2}];for(let i=0;i<Lk;i++){const r=`char_${i}`;for(const o of n){const a=o.row*7;this.anims.create({key:`${r}_walk_${o.name}`,frames:[{key:r,frame:a},{key:r,frame:a+1},{key:r,frame:a+2},{key:r,frame:a+1}],frameRate:8,repeat:-1}),this.anims.create({key:`${r}_idle_${o.name}`,frames:[{key:r,frame:a+1}],frameRate:1}),this.anims.create({key:`${r}_type_${o.name}`,frames:[{key:r,frame:a+3},{key:r,frame:a+4}],frameRate:3,repeat:-1}),this.anims.create({key:`${r}_read_${o.name}`,frames:[{key:r,frame:a+5},{key:r,frame:a+6}],frameRate:2,repeat:-1}),this.anims.create({key:`${r}_coffee_${o.name}`,frames:[{key:r,frame:a+1},{key:r,frame:a}],frameRate:2,repeat:-1}),this.anims.create({key:`${r}_celebrate_${o.name}`,frames:[{key:r,frame:a},{key:r,frame:a+1},{key:r,frame:a+2},{key:r,frame:a+1}],frameRate:6,repeat:-1})}}}}const ru=["####################","####################","####################","#######......#######","#######..##..#######","#######..##..#######","#######..##..#######","#######......#######","#########.##########","#########.##########","#.............#....#","#..................#","#.#########....##..#","#...........#......#","#...........#..##..#","#.#########.#......#","#...........#......#","#...........####.###","##########..####.###","##########..#......#","#...........#..#...#","#...####....#.###..#","#...........#......#","#.##....#####....###","####################"],su=[[8,4],[8,5],[8,6],[11,4],[11,5],[11,6],[3,13],[6,13],[9,13],[3,16],[6,16],[9,16],[14,12],[17,12],[14,14],[17,14],[15,22]],Vj="office-multi-config";function Uj(){const e=Xn+Av;return[{id:"office-0",name:"Office A",offsetCol:0,mapStr:[...ru],seats:[...su],assignedAgents:[]},{id:"office-1",name:"Office B",offsetCol:e,mapStr:[...ru],seats:[...su],assignedAgents:[]},{id:"office-2",name:"Office C",offsetCol:e*2,mapStr:[...ru],seats:[...su],assignedAgents:[]}]}Uj();function Kn(){try{const e=localStorage.getItem(Vj);if(e){const t=JSON.parse(e);if(Array.isArray(t)&&t.length>0)return t}}catch{}return Uj()}function Im(e){localStorage.setItem(Vj,JSON.stringify(e))}function jM(e,t){const n=Kn(),i=n.find(r=>r.id===e);i&&(i.name=t,Im(n))}function hg(e,t){const n=Kn();for(const r of n)r.assignedAgents=r.assignedAgents.filter(o=>o!==t);const i=n.find(r=>r.id===e);i&&i.assignedAgents.push(t),Im(n)}function EM(e){const t=Kn();for(const n of t)n.assignedAgents=n.assignedAgents.filter(i=>i!==e);Im(t)}function NM(e){return Kn().find(t=>t.assignedAgents.includes(e))}function IM(e,t,n){const i=Kn(),r=i.find(o=>o.id===e);r&&(r.mapStr=t,r.seats=n,Im(i))}function Gj(e){const t=[];for(let n=0;n<dr;n++){const i=[],r=n<e.length?e[n]:"#".repeat(Xn);for(let o=0;o<Xn;o++)i.push(o<r.length&&r[o]==="."?0:1);t.push(i)}return t}function qj(e){const t=e.length>0?e[e.length-1].offsetCol+Xn:Xn,n=[];for(let i=0;i<dr;i++)n.push(new Array(t).fill(1));for(const i of e){const r=Gj(i.mapStr);for(let o=0;o<dr;o++)for(let a=0;a<Xn;a++)n[o][i.offsetCol+a]=r[o][a]}return n}function gg(e,t=Xn,n=dr){const i=[];for(let r=0;r<n;r++){const o=[],a=r<e.length?e[r]:"#".repeat(t);for(let c=0;c<t;c++)o.push(c<a.length&&a[c]==="."?0:1);i.push(o)}return i}function zk(e){return e.map(t=>t.map(n=>n===0?".":"#").join(""))}function Oi(e,t,n,i,r=t+i){return{x:Math.round(e*T),y:Math.round(t*T),w:Math.round(n*T),h:Math.round(i*T),depthY:Math.round(r*T)}}const TM=[Oi(8,4,4.3,3.35,7.15),Oi(2.3,8.65,5.35,1.95,10.55),Oi(11.1,8.55,3.1,1.7,10.45),Oi(14.15,8.55,4.95,2,10.95),Oi(2.1,11.45,3.05,1.8,12.95),Oi(5.25,11.45,3.05,1.8,12.95),Oi(8.45,11.45,3.05,1.8,12.95),Oi(2.1,14.55,3.05,1.85,16.1),Oi(5.25,14.55,3.05,1.85,16.1),Oi(8.45,14.55,3.05,1.85,16.1),Oi(14,12.15,4.85,3,15.3),Oi(1,19.55,3.05,1.15,20.7),Oi(4.45,20.45,3.35,1.35,21.8),Oi(14.1,20.5,3.15,1.85,22.3),Oi(8.05,23.1,4.2,1,24.1),Oi(17,23.1,2.1,1,24.1)];class Vf{constructor(){this.bgSprites=[],this.foregroundSprites=[],this.nameLabels=[],this.decor=[],this.outdoorBackdrop=null,this.outdoorParking=null,this.tilesetFrames={shelfA:61,shelfB:62,waterCooler:105,waterCoolerAlt:106,fridge:108,vending:110,plantA:148,plantB:150,boxA:153,boxB:154,boxC:158}}clearSceneDecor(){for(const t of this.bgSprites)t.destroy();for(const t of this.foregroundSprites)t.destroy();for(const t of this.nameLabels)t.destroy();for(const t of this.decor)t.destroy();this.bgSprites=[],this.foregroundSprites=[],this.nameLabels=[],this.decor=[],this.outdoorBackdrop=null,this.outdoorParking=null}addForegroundOccluders(t,n){const i=n.offsetCol*T;for(const r of TM){const o=t.add.image(i,0,"office-bg");o.setOrigin(0,0),o.setCrop(r.x,r.y,r.w,r.h),o.setDepth(r.depthY),this.foregroundSprites.push(o)}}addPixelLabel(t,n,i,r,o,a="#f5efe3",c="10px"){const d=t.add.text(n,i,r,{fontSize:c,fontFamily:"monospace",color:a,backgroundColor:o,padding:{left:4,right:4,top:2,bottom:2},resolution:2,align:"center"});return d.setOrigin(.5,.5),d.setDepth(-94),this.decor.push(d),d}addTilesetSprite(t,n,i,r,o=1){const a=t.add.image(n,i,"office-tileset-32",r);return a.setOrigin(0,0),a.setScale(o),a.setDepth(-92),this.decor.push(a),a}getOutdoorMetrics(t,n){const i=n+T*10.1,r=T*4.1,o=i+r+T*.15,a=o+T*1.1;return{gateCenterX:t/2,roadY:i,roadHeight:r,waterTopY:o,dockY:a,bottomY:n+fl}}paintStylizedParkingCar(t,n,i,r,o,a){const c=o?{outline:1314840,body:14240338,bodyMid:13057092,bodyDark:9316914,cabin:14706798,cabinHi:15894668,cabinLo:11546684,glass:6062264,glassDeep:3824776,glassHi:12116220,tire:1842724,tireOuter:1184794,bonnetHi:15233140}:{outline:1053728,body:4095176,bodyMid:3105960,bodyDark:2377848,cabin:6068444,cabinHi:8303856,cabinLo:3434664,glass:4878240,glassDeep:3164264,glassHi:11065599,tire:1842724,tireOuter:1184794,bonnetHi:7121128},d=(x,v,b,k,w,S=1)=>{t.fillStyle(w,S);const j=r?-x-b:x;t.fillRect(Math.round(n+j),Math.round(i+v),b,k)};t.fillStyle(988175,.28),t.fillEllipse(n,i+36,36,9),d(-16,-38,32,76,c.outline),d(-15,-37,30,74,c.body),d(-14,2,28,35,c.bodyDark),d(-14,-4,28,10,c.bodyMid),d(-13,8,26,22,c.body),d(-13,8,26,7,c.bonnetHi,.92),d(-13,-35,26,32,c.cabin),d(-13,-35,26,4,c.cabinHi),d(-13,-8,26,5,c.cabinLo),d(-11,-7,22,11,c.glassDeep),d(-11,-7,22,5,c.glass),d(-10,-6,8,3,c.glassHi),d(-1,-6,6,2,c.glassHi,.75),d(-16,-2,3,8,c.bodyDark),d(13,-2,3,8,c.bodyDark);const m=22,h=-30,p=7,g=9;for(const x of[m,h])d(-22,x,p,g,c.tire),d(15,x,p,g,c.tire),d(-22,x,1,g,c.tireOuter),d(15+p-1,x,1,g,c.tireOuter);for(const x of[m,h])d(-18,x+1,4,g-2,c.bodyDark),d(14,x+1,4,g-2,c.bodyDark);a&&(d(-12,33,5,4,16052970),d(7,33,5,4,16052970),d(-11,34,2,2,16775368),d(8,34,2,2,16775368),d(-13,-38,4,3,16733488),d(9,-38,4,3,13121568),d(-18,4,3,4,16763976),d(15,4,3,4,16752688)),d(-15,-37,30,1,c.cabinHi,.45),d(-14,28,28,1,0,.12)}buildOutdoorBackdrop(t,n,i,r,o,a){const c=t.add.graphics();c.setDepth(-320);const d=-nu,m=-ll,h=n+nu*2,p=i+ll+fl,g=d+h,x=i+fl,v=m+T*6.2,b=i+T*.35,k=i+T*4.25,w=i+T*5.9,{gateCenterX:S,roadY:j,roadHeight:N,waterTopY:O,dockY:R}=this.getOutdoorMetrics(n,i),D=o?{skyTop:7259376,skyBand:11066104,towerFar:8953780,towerNear:10268868,towerRoof:11847900,winColor:16777215,winAlpha:.22,facadeColor:14214384,facadeAlpha:.36,bridgeColor:12636384,bridgeAlpha:.92,grassBase:3831876,grassLawn:6076520,treeTrunk:3562560,treeMid:5023848,treeHi:7526532,grove0:3168312,grove1:5150816,grove2:6865016,fence:10127992,road:3948616,roadDash:14207120,curb:3551792,water:3508408,ripple:6073556,rippleHi:10017008,edgeGreen:5810280,edgeGreenHi:8310928,logoDirt:12105880,logoDirtHi:13684920}:{skyTop:2503493,skyBand:3494250,towerFar:1253426,towerNear:1911614,towerRoof:2373195,winColor:15979916,winAlpha:.42,facadeColor:3163484,facadeAlpha:.45,bridgeColor:2306631,bridgeAlpha:.95,grassBase:3232315,grassLawn:5210447,treeTrunk:2835501,treeMid:4156223,treeHi:5539412,grove0:2637864,grove1:4222784,grove2:6130776,fence:8153685,road:3159098,roadDash:13676922,curb:3025447,water:2181730,ripple:3967139,rippleHi:7913424,edgeGreen:7310175,edgeGreenHi:9417850,logoDirt:10265207,logoDirtHi:12301197};if(c.fillStyle(D.skyTop,1),c.fillRect(d,m,h,T*8.2),c.fillStyle(D.skyBand,1),c.fillRect(d,m+T*6.15,h,T*2.05),o){c.fillStyle(16775400,.45);for(let he=0;he<5;he++){const ze=d+h*(.12+he*.19)+he*17%40,ot=m+T*(1.4+he%3*.35);c.fillEllipse(ze,ot,T*2.2,T*.95)}c.fillStyle(16773808,.92),c.fillCircle(g-T*2.4,m+T*1.25,T*.85),c.fillStyle(16776432,.35),c.fillCircle(g-T*2.4,m+T*1.25,T*1.45)}c.fillStyle(D.towerFar,1);for(let he=d-T;he<g+T;he+=T*3.4){const ze=Math.floor((he-d+T)/(T*3.4)),ot=[2.3,1.7,2.9,2.1,3.2,1.9],Ve=[6.8,8.7,7.2,10.4,8.1,9.6],lt=T*ot[ze%ot.length],me=T*Ve[ze%Ve.length],be=v-me-T*.9;c.fillRect(he,be,lt,me),ze%3===0?c.fillRect(he+lt*.22,be-T*.7,lt*.56,T*.7):ze%3===1?c.fillRect(he+lt*.4,be-T*1,4,T):c.fillRect(he+lt*.18,be-T*.45,lt*.64,T*.45)}c.fillStyle(D.towerNear,1);for(let he=d;he<g;he+=T*2.65){const ze=Math.floor((he-d)/(T*2.65)),ot=[1.8,2.4,1.55,2.8,2.1,1.7,2.5],Ve=[5.4,7.1,6,8.6,6.7,7.8,5.8],lt=T*ot[ze%ot.length],me=T*Ve[ze%Ve.length],be=v-me;c.fillRect(he,be,lt,me),ze%4===0?(c.fillStyle(D.towerRoof,1),c.fillRect(he+lt*.24,be-T*.42,lt*.52,T*.42),c.fillStyle(D.towerNear,1)):ze%4===1?(c.fillStyle(D.towerRoof,1),c.fillRect(he+lt*.48,be-T*.8,4,T*.8),c.fillStyle(D.towerNear,1)):ze%4===2&&(c.fillStyle(D.towerRoof,1),c.fillRect(he+lt*.18,be-T*.35,lt*.64,T*.35),c.fillStyle(D.towerNear,1)),c.fillStyle(D.winColor,D.winAlpha);for(let Ae=be+T*.7;Ae<be+me-T*.5;Ae+=T*1.05)o&&(ze+Math.floor(Ae))%2!==0||((Math.floor(Ae)+ze)%3===0&&c.fillRect(he+5,Ae,3,3),(Math.floor(Ae)+ze)%2===0&<>T*1.9&&c.fillRect(he+lt-8,Ae+4,3,3));c.fillStyle(D.facadeColor,D.facadeAlpha),c.fillRect(he+lt*.5,be+T*.4,2,me-T*.8),c.fillStyle(D.towerNear,1)}c.fillStyle(D.bridgeColor,D.bridgeAlpha);for(let he=d+T*6;he<g-T*6;he+=T*11){const ze=v-T*(2.8+he/T%2);c.fillRect(he,ze,T*2.2,T*.35)}c.fillStyle(D.grassBase,1),c.fillRect(d,v,h,p-(v-m)),c.fillStyle(D.grassLawn,1),c.fillRect(d,b,h,j-b);const I=[];for(let he=d+T*.1;he<g;he+=T*3.9)I.push(he);for(const he of I){const ze=T*(2.25+Math.abs(Math.floor(he/T))%3*.32);c.fillStyle(D.treeTrunk,1),c.fillRect(he+T*1.05,v+T*1.2,8,T*1.65),c.fillStyle(D.treeMid,1),c.fillRect(he,v-T*1,ze,T*2.15),c.fillStyle(D.treeHi,1),c.fillRect(he+5,v-T*1.3,ze-10,T*.95)}for(const he of[d+T*1.2,g-T*6.5])for(let ze=0;ze<4;ze++){const ot=he+ze*T*1.8,Ve=i-T*(4.5+ze%2*.9);c.fillStyle(D.grove0,1),c.fillRect(ot+10,Ve+T*1.5,8,T*1.45),c.fillStyle(D.grove1,1),c.fillRect(ot,Ve,T*2.35,T*1.9),c.fillStyle(D.grove2,1),c.fillRect(ot+4,Ve-6,T*1.75,T*.82)}const L=r.map(he=>(he.offsetCol+2.95)*T),M=T*.9,A=n-T*1.8,B=6,W=T*1.7,P=i+T*.08,G=T*2.05,$=P+G,q=T*9.4,Y=S-q/2,Q=$-2,V=T*3.1,U=Q+V,Z=T*2.3;c.fillStyle(12428667,1),c.fillRect(S-T*4.25,U,T*8.5,j-U),c.fillStyle(14141089,.95);for(let he=U+T*.35;he<j-6;he+=T*.8)c.fillRect(S-T*3.35,he,T*6.7,3);const F=U+T*1.65;c.fillStyle(13284491,1),c.fillRect(S-T*3.6,F,T*7.2,T*2.15),c.fillStyle(14799277,.95),c.fillRect(S-T*2.8,F+T*.42,T*5.6,T*.18),c.fillStyle(7694937,1),c.fillRect(d,j-T*.35,h,3),c.fillRect(d,b+T*.18,h,3);for(const he of[F+T*.35,F+T*1.45])c.fillStyle(D.edgeGreen,1),c.fillRect(S-T*5,he,T*1.25,T*.4),c.fillRect(S+T*3.75,he,T*1.25,T*.4),c.fillStyle(D.edgeGreenHi,1),c.fillRect(S-T*4.78,he-2,T*.82,3),c.fillRect(S+T*3.96,he-2,T*.82,3);c.fillStyle(12572630,1),c.fillRect(M,P,A,G),c.fillStyle(13624033,1);for(let he=M+T*.2;he<M+A-T*.2;he+=T)c.fillRect(he,P+T*.42,2,G-T*.62);for(let he=P+T*.35;he<$-T*.25;he+=T*.72)c.fillRect(M+T*.2,he,A-T*.4,2);c.fillStyle(15920612,1);let K=M;for(const he of L){const ze=he-W/2;ze>K&&c.fillRect(K,P,ze-K,B),c.fillStyle(8415310,1),c.fillRect(ze-4,P,4,T*.62),c.fillRect(ze+W,P,4,T*.62),c.fillStyle(11045217,1),c.fillRect(ze,P,W,4),c.fillStyle(15920612,1),K=ze+W}K<M+A&&c.fillRect(K,P,M+A-K,B),c.fillRect(M,P,B,G),c.fillRect(M+A-B,P,B,G),c.fillRect(M,$-B,Y-M,B),c.fillRect(Y+q,$-B,M+A-(Y+q),B);for(const he of L){const ze=he-W/2;c.fillStyle(10257246,1),c.fillRect(ze,P+T*.02,W,T*.16),c.fillStyle(14272413,1),c.fillRect(ze+T*.12,P+T*.24,W-T*.24,3),c.fillStyle(6968898,.55),c.fillRect(ze+T*.1,P+T*.34,W-T*.2,T*.26)}c.fillStyle(13032920,1),c.fillRect(Y,Q,q,V),c.fillStyle(14149603,1);for(let he=Y+T*.3;he<Y+q-T*.2;he+=T)c.fillRect(he,Q+T*.4,2,V-T*.6);for(let he=Q+T*.35;he<U-T*.2;he+=T*.72)c.fillRect(Y+T*.24,he,q-T*.48,2);c.fillStyle(15920612,1),c.fillRect(Y,Q,B,V),c.fillRect(Y+q-B,Q,B,V),c.fillRect(Y,U-B,(q-Z)/2,B),c.fillRect(S+Z/2,U-B,(q-Z)/2,B),c.fillRect(Y,Q,T*1.1,B),c.fillRect(Y+q-T*1.1,Q,T*1.1,B),c.fillStyle(10454374,1),c.fillRect(Y+T*.2,Q+T*.18,T*.7,3),c.fillRect(Y+q-T*.9,Q+T*.18,T*.7,3),c.fillStyle(15266031,.7),c.fillRect(Y+T*1.15,Q+T*.38,T*1.15,T*.9),c.fillRect(Y+q-T*2.3,Q+T*.38,T*1.15,T*.9),c.fillStyle(8167589,.65);for(let he=Q+T*.44;he<Q+T*1.16;he+=8)c.fillRect(Y+T*1.38,he,T*.68,2),c.fillRect(Y+q-T*2.06,he,T*.68,2);c.fillStyle(4608855,.9),c.fillRect(Y+T*1.1,Q+T*.34,2,T*.98),c.fillRect(Y+T*2.26,Q+T*.34,2,T*.98),c.fillRect(Y+q-T*2.3,Q+T*.34,2,T*.98),c.fillRect(Y+q-T*1.14,Q+T*.34,2,T*.98),c.fillStyle(7311251,.95),c.fillRect(S-T*1.65,Q+T*.65,T*3.3,T*1.1),c.fillStyle(8890283,1),c.fillRect(S-T*1.2,Q+T*.92,T*2.4,T*.18),c.fillStyle(12114129,.38),c.fillRect(S-T*2.45,Q+T*.08,T*4.9,T*1.25),c.fillStyle(15266799,.7),c.fillRect(S-T*1.7,Q+T*.18,T*3.4,T*.18),c.fillRect(Y+T*.55,Q+T*.22,T*.9,T*.12),c.fillRect(Y+q-T*1.45,Q+T*.22,T*.9,T*.12),c.fillStyle(5139304,1),c.fillRect(S-T*1.95,Q+T*.18,T*3.9,T*.42),c.fillStyle(14675688,1),c.fillRect(S-T*1.2,Q+T*.3,T*2.4,T*.12),c.fillStyle(5664630,.35),c.fillRect(S-T*1.65,Q+T*2.05,T*3.3,T*.32),c.fillRect(S-T*1.1,Q+T*2.38,T*2.2,T*.18),c.fillStyle(9342875,1),c.fillRect(S-T*1.28,Q+T*1.45,T*2.56,T*.72),c.fillStyle(15199984,1),c.fillRect(S-T*1,Q+T*1.6,T*2,T*.18),c.fillStyle(6251634,1),c.fillRect(S-T*.22,Q+T*1.42,T*.44,T*.18),c.fillStyle(16185330,.78),c.fillRect(S-T*.9,Q+T*1.72,T*1.8,T*.12),c.fillStyle(12559998,1),c.fillRect(Y+T*.7,Q+T*1.55,T*1.2,T*.52),c.fillStyle(15790314,1),c.fillRect(Y+T*.95,Q+T*1.7,T*.7,T*.18),c.fillStyle(10133418,1),c.fillRect(Y+T*.72,Q+T*2.2,T*1.6,T*.42),c.fillRect(Y+q-T*2.32,Q+T*2.2,T*1.6,T*.42),c.fillStyle(13160918,1),c.fillRect(Y+T*.88,Q+T*2.08,T*1.28,T*.16),c.fillRect(Y+q-T*2.16,Q+T*2.08,T*1.28,T*.16),c.fillStyle(6979413,1),c.fillRect(Y+T*.38,Q+T*2,T*.34,T*.62),c.fillRect(Y+q-T*.72,Q+T*2,T*.34,T*.62),c.fillStyle(9350004,1),c.fillRect(Y+T*.22,Q+T*1.78,T*.66,T*.34),c.fillRect(Y+q-T*.88,Q+T*1.78,T*.66,T*.34),c.fillStyle(15326400,.88),c.fillRect(S-T*1.78,Q+T*2.46,T*3.56,2),c.fillRect(S-T*.06,Q+T*1.98,2,T*1.18),c.fillStyle(10258534,.92),c.strokeRect(S-T*1.82,Q+T*2.3,T*3.64,T*.66),c.fillStyle(12033650,1),c.fillRect(Y+T*2.42,Q+T*2.03,T*.24,T*.78),c.fillRect(Y+q-T*2.66,Q+T*2.03,T*.24,T*.78),c.fillStyle(15261638,1),c.fillRect(Y+T*2.16,Q+T*1.9,T*.76,T*.16),c.fillRect(Y+q-T*2.92,Q+T*1.9,T*.76,T*.16),c.fillStyle(6257513,1),c.fillRect(Y+T*2.16,Q+T*2.18,T*.76,T*.56),c.fillRect(Y+q-T*2.92,Q+T*2.18,T*.76,T*.56),c.fillStyle(9401687,1),c.fillRect(S-Z/2,U-B,Z,B),c.fillStyle(14141342,1),c.fillRect(S-T*.72,U+2,T*1.44,3);const ee=T*4.7,te=T*1.2,se=U-1;c.fillStyle(12702927,.98),c.fillRect(S-ee/2,se,ee,te),c.fillStyle(15920612,1),c.fillRect(S-ee/2,se,B,te),c.fillRect(S+ee/2-B,se,B,te),c.fillStyle(14149603,1),c.fillRect(S-T*1.35,se+T*.34,T*2.7,2),c.fillStyle(9742243,.8),c.fillRect(S-ee/2+T*.35,se+T*.18,T*.55,2),c.fillRect(S+ee/2-T*.9,se+T*.18,T*.55,2);const ae=$+T*1.7,ue=S+T*11.2;c.fillStyle(D.logoDirt,.95),c.fillRect(ue-T*4.3,ae-T*1.2,T*8.6,T*2.35),c.fillStyle(D.logoDirtHi,.9),c.fillRect(ue-T*3.5,ae-T*.8,T*7,T*1.55);for(const he of[ue-T*4.9,ue-T*3.9,ue+T*3.9,ue+T*4.9])c.fillStyle(5929545,1),c.fillRect(he,ae-T*.42,T*.72,T*.42),c.fillStyle(8299882,1),c.fillRect(he+2,ae-T*.54,T*.48,T*.22);c.fillStyle(D.fence,1);for(let he=d+T*.8;he<g;he+=T*1.25)he>S-T*5.4&&he<S+T*5.4||c.fillRect(he,k,3,T*.8);c.fillRect(d+T*.8,k+T*.6,S-T*5.45-(d+T*.8),3),c.fillRect(S+T*5.45,k+T*.6,g-T*.8-(S+T*5.45),3),c.fillStyle(D.road,1),c.fillRect(d,j,h,N),c.fillStyle(D.roadDash,1);for(let he=d+T;he<g;he+=T*2.6)c.fillRect(he,j+T*2,T*1.6,4);for(let he=d+T*2;he<g;he+=T*4.8)c.fillStyle(D.curb,1),c.fillRect(he,j-T*1.45,4,T*1.45),c.fillStyle(15058544,.95),c.fillRect(he-4,j-T*1.5,12,4);for(const he of[S-T*4.8,S-T*2.4,S+T*2.4,S+T*4.8,ue-T*5.7,ue+T*5.7]){const ze=he===ue-T*5.7||he===ue+T*5.7?ae+T*.75:F+T*.85;c.fillStyle(5063736,1),c.fillRect(he,ze,3,T*.72),o||(c.fillStyle(15716218,.95),c.fillRect(he-4,ze-4,11,4),c.fillStyle(15916442,.2),c.fillRect(he-T*.38,ze+T*.42,T*.76,T*.24))}c.fillStyle(D.water,1),c.fillRect(d,O,h,x-O);const ie=[O+T*.9,O+T*2,O+T*3.25];for(let he=0;he<ie.length;he++){const ze=ie[he],ot=he%2===0?T*1.1:T*2.4;c.fillStyle(D.ripple,o?.38:.42);for(let Ve=d+ot;Ve<g-T;Ve+=T*5.2)c.fillRect(Ve,ze,T*1.8,2),c.fillRect(Ve+T*2.35,ze+3,T*.9,2)}c.fillStyle(D.rippleHi,o?.38:.34);for(const he of[O+T*1.05,O+T*1.8])c.fillRect(S-T*4.8,he,T*2,2),c.fillRect(S+T*2.8,he,T*2,2);const we=T*12.5,je=j+N-2;c.fillStyle(7296059,1),c.fillRect(S-we/2,R,we,T*1.75),c.fillRect(S-T*.55,je,T*1.1,R-je),c.fillStyle(9267785,1);for(let he=S-we/2+6;he<S+we/2-6;he+=T*.7)c.fillRect(he,R+T*.35,3,T*1.2);if(c.fillStyle(5991010,1),c.fillRect(d,O-4,h,4),c.fillStyle(7307639,1),c.fillRect(d,O-8,h,3),this.outdoorParking){const he=this.decor.indexOf(this.outdoorParking);he>=0&&this.decor.splice(he,1),this.outdoorParking.destroy(),this.outdoorParking=null}const Te=t.add.graphics();Te.setDepth(-300);const Ge=4080460,Ze=15262424,Ye=[{x:d+T*2.2,count:5},{x:g-T*11.4,count:5}];Te.lineStyle(0,0,0),Te.fillStyle(Ge,1);for(const he of Ye)Te.fillRect(he.x,w,T*12.8,T*3.8);Te.lineStyle(1,Ze,.95);for(const he of Ye)for(let ze=0;ze<he.count;ze++){const ot=he.x+T*.45+ze*T*1.5;Te.strokeRect(ot,w+T*.5,T*1.55,T*2.55)}Te.lineStyle(0,0,0);const mt=T*1.55,Ft=T*2.55,Mt=T*.5,jt=!o;for(const he of Ye){const ze=he.x>S-T;for(let ot=0;ot<he.count-1;ot+=2){const lt=he.x+T*.45+ot*T*1.5+mt/2,me=w+Mt+Ft/2,be=ot%4===0;this.paintStylizedParkingCar(Te,lt,me,ze,be,jt)}}if(!a?.skipLabels){this.addPixelLabel(t,S,Q+T*.6,"OPENOPC","#4e6b68","#eef4ec","10px");const he=ae-T*.24,ze=T*.88,ot=T*.28,Ve="OPENOPC",lt=Ve.length*ze+(Ve.length-1)*ot;let me=ue-lt/2;for(const be of Ve){const Ae=t.add.text(me+T*.12,he+T*.14,be,{fontSize:"26px",fontFamily:"monospace",color:"#4e6b46",resolution:2});Ae.setOrigin(0,.5),Ae.setDepth(-95),this.decor.push(Ae);const Be=t.add.text(me,he,be,{fontSize:"26px",fontFamily:"monospace",color:"#f6f6ee",stroke:"#8f8c7a",strokeThickness:1,resolution:2});Be.setOrigin(0,.5),Be.setDepth(-94),this.decor.push(Be),me+=ze+ot}this.addPixelLabel(t,S,R+T*.95,"LAKE DOCK","#1d3d4f","#d7eef1","9px")}this.decor.push(c,Te),this.outdoorBackdrop=c,this.outdoorParking=Te}refreshOutdoorDayNight(t,n){const i=Kn(),r=((i[i.length-1]?.offsetCol??0)+Xn)*T,o=dr*T;if(this.outdoorParking){const a=this.decor.indexOf(this.outdoorParking);a>=0&&this.decor.splice(a,1),this.outdoorParking.destroy(),this.outdoorParking=null}if(this.outdoorBackdrop){const a=this.decor.indexOf(this.outdoorBackdrop);a>=0&&this.decor.splice(a,1),this.outdoorBackdrop.destroy(),this.outdoorBackdrop=null}this.buildOutdoorBackdrop(t,r,o,i,n,{skipLabels:!0})}buildBoundaryDecor(t,n,i){const r=t.add.graphics();r.setDepth(-140);const o=t.add.graphics();o.setDepth(-95);const a=((n[n.length-1]?.offsetCol??0)+Xn)*T,c=dr*T,d=Xn*T,m=T*2,h=T*20;this.buildOutdoorBackdrop(t,a,c,n,i),r.fillStyle(2498844,1),r.fillRect(-T,0,a+T*2,c),r.fillStyle(3221794,1),r.fillRect(0,0,a,c),r.fillStyle(6048831,1),r.fillRect(0,0,a,8),r.fillRect(0,c-8,a,8),r.fillRect(0,0,8,c),r.fillRect(a-8,0,8,c),r.fillStyle(2367001,1),r.fillRect(8,8,a-16,3),r.fillRect(8,c-11,a-16,3),r.fillStyle(1709844,1),r.fillRect(0,0,a,m),r.fillStyle(4931637,1),r.fillRect(0,m-5,a,5),r.fillStyle(4208173,1),r.fillRect(0,m,a,c-m),r.fillStyle(4865588,1),r.fillRect(0,T*8,a,T*4),r.fillStyle(3813416,1),r.fillRect(0,h,a,c-h),r.lineStyle(1,5917503,.32);for(let p=0;p<=a;p+=T)r.beginPath(),r.moveTo(p,m),r.lineTo(p,c),r.strokePath();for(let p=m;p<=c;p+=T)r.beginPath(),r.moveTo(0,p),r.lineTo(a,p),r.strokePath();for(let p=T*3;p<a;p+=T*6)r.fillStyle(14727791,.85),r.fillRect(p,T*.7,T*1.5,4),r.fillStyle(9334594,1),r.fillRect(p+T*.2,T*.55,T*1.1,2);this.addPixelLabel(t,a/2,T*.95,"MAIN HALL","#2a221b","#f3dcc0","11px");for(const p of n){const g=p.offsetCol*T,x=n.findIndex(A=>A.id===p.id);r.fillStyle(5785659,1),r.fillRect(g-10,0,d+20,c),r.fillStyle(2301208,1),r.fillRect(g-4,0,d+8,c),r.lineStyle(2,8087640,.9),r.strokeRect(g-10,0,d+20,c),r.lineStyle(2,10982014,.34),r.strokeRect(g-4,0,d+8,c),r.fillStyle(1578259,1),r.fillRect(g-4,0,d+8,T),r.fillStyle(7166796,1),r.fillRect(g+T*5.5,T*.55,T*9,5),r.fillStyle(9074018,1),r.fillRect(g-10,0,8,8),r.fillRect(g+d+2,0,8,8),r.fillRect(g-10,c-8,8,8),r.fillRect(g+d+2,c-8,8,8),r.fillStyle(3221536,1),r.fillRect(g-4,h,d+8,6);const v=g+T*.7,b=g+T*14.65,k=T*1.05,w=T*4.45,S=T*6.4,j=k+S+T*.35,N=T*.55,O=x%2===0?6115909:5069382,R=x%2===0?4609113:5984070,D=x%2===0?5205640:7297908,I=x%2===0?5666919:9073231,L=x%2===0?7045045:10119803,M=x%2===0?6196089:10979160;r.fillStyle(2827295,1),r.fillRect(g+T*.58,j,d-T*1.16,T*.44),r.fillStyle(7692879,1),r.fillRect(g+T*.92,j+2,d-T*1.84,2),r.fillRect(g+T*4.3,j-T*.2,4,T*.84),r.fillRect(g+d-T*4.3,j-T*.2,4,T*.84),o.fillStyle(1906966,1),o.fillRect(v,k,w,S),o.fillRect(b,k,w,S),o.fillStyle(3090722,1),o.fillRect(v+4,k+4,w-8,S-8),o.fillRect(b+4,k+4,w-8,S-8),o.fillStyle(O,1),o.fillRect(v+4,k+4,w-8,T*.7),o.fillStyle(R,1),o.fillRect(b+4,k+4,w-8,T*.7),o.fillStyle(D,.95),o.fillRect(v+4,k+T*1.15,w-8,S-T*1.45),o.fillStyle(I,.95),o.fillRect(b+4,k+T*1.15,w-8,S-T*1.45),o.fillStyle(15127204,.16),o.fillRect(v+10,k+10,w-20,2),o.fillRect(b+10,k+10,w-20,2),o.lineStyle(1,6181444,.28);for(let A=v+12;A<v+w-4;A+=T)o.beginPath(),o.moveTo(A,k+T*1.15),o.lineTo(A,k+S-4),o.strokePath();for(let A=b+12;A<b+w-4;A+=T)o.beginPath(),o.moveTo(A,k+T*1.15),o.lineTo(A,k+S-4),o.strokePath();for(let A=k+T*1.45;A<k+S-4;A+=T*.82)o.beginPath(),o.moveTo(v+4,A),o.lineTo(v+w-4,A),o.strokePath(),o.beginPath(),o.moveTo(b+4,A),o.lineTo(b+w-4,A),o.strokePath();o.fillStyle(L,.94),o.fillRect(v+T*.45,k+T*3.95,T*2.7,T*1.25),o.fillStyle(15261127,.34),o.strokeRect(v+T*.45,k+T*3.95,T*2.7,T*1.25),o.fillRect(v+T*.75,k+T*4.35,T*2.1,3),o.fillStyle(M,.94),o.fillRect(b+T*.45,k+T*3.95,T*2.7,T*1.25),o.fillStyle(15261127,.34),o.strokeRect(b+T*.45,k+T*3.95,T*2.7,T*1.25),o.fillRect(b+T*.75,k+T*4.35,T*2.1,3),o.fillStyle(15190399,.85),o.fillRect(v+T*1.45,k+12,T*1.55,4),o.fillRect(b+T*1.45,k+12,T*1.55,4),o.fillStyle(6180159,.5),o.fillRect(v+4,k+S-10,w-8,4),o.fillRect(b+4,k+S-10,w-8,4),o.fillStyle(8021585,1),o.fillRect(v+T*.22,k+S-T*.7,w-T*.44,3),o.fillRect(b+T*.22,k+S-T*.7,w-T*.44,3),this.addPixelLabel(t,v+w/2,k+T*.42,x%2===0?"ARCHIVE":"UTILITY","#4a4035","#f1dfc2","8px"),this.addPixelLabel(t,b+w/2,k+T*.42,x%2===0?"PANTRY":"SUPPLY","#4a4035","#f1dfc2","8px"),x%2===0?(this.addTilesetSprite(t,v+12,k+14+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,v+44,k+14+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,v+12,k+48+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,v+14,k+50+N,this.tilesetFrames.boxC),this.addTilesetSprite(t,v+26,k+82+N,this.tilesetFrames.boxA),this.addTilesetSprite(t,v+58,k+82+N,this.tilesetFrames.boxB),this.addTilesetSprite(t,v+60,k+48+N,this.tilesetFrames.plantA),this.addTilesetSprite(t,b+22,k+18+N,this.tilesetFrames.waterCooler),this.addTilesetSprite(t,b+56,k+18+N,this.tilesetFrames.plantA),this.addTilesetSprite(t,b+20,k+50+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,b+18,k+82+N,this.tilesetFrames.fridge),this.addTilesetSprite(t,b+54,k+82+N,this.tilesetFrames.boxA)):(this.addTilesetSprite(t,v+16,k+18+N,this.tilesetFrames.waterCoolerAlt),this.addTilesetSprite(t,v+52,k+18+N,this.tilesetFrames.plantB),this.addTilesetSprite(t,v+16,k+52+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,v+24,k+84+N,this.tilesetFrames.boxC),this.addTilesetSprite(t,v+58,k+84+N,this.tilesetFrames.boxA),this.addTilesetSprite(t,b+10,k+14+N,this.tilesetFrames.shelfB),this.addTilesetSprite(t,b+42,k+14+N,this.tilesetFrames.shelfA),this.addTilesetSprite(t,b+10,k+50+N,this.tilesetFrames.waterCooler),this.addTilesetSprite(t,b+26,k+82+N,this.tilesetFrames.vending),this.addTilesetSprite(t,b+58,k+82+N,this.tilesetFrames.plantB))}for(let p=0;p<n.length-1;p++){const g=(n[p].offsetCol+Xn)*T,x=Av*T,v=g+x/2,b=p===0,k=b?6258019:6975375,w=b?"SHARE":"MEET";r.fillStyle(2104087,1),r.fillRect(g,0,x,c),r.fillStyle(3813416,1),r.fillRect(g+5,m,x-10,c-m),r.fillStyle(5194552,1);for(let S=m+6;S<c-6;S+=14)r.fillRect(g+8,S,x-16,2);r.fillStyle(2564380,1),r.fillRect(v-T*.52,T*2.4,T*1.04,c-T*4.8),r.fillStyle(6641740,1),r.fillRect(v-2,T*2.7,4,c-T*5.4),r.fillStyle(9074790,.88),r.fillRect(v-T*.68,T*3.15,T*.3,T*1.25),r.fillRect(v+T*.38,T*3.15,T*.3,T*1.25),r.fillRect(v-T*.68,T*15.6,T*.3,T*1.25),r.fillRect(v+T*.38,T*15.6,T*.3,T*1.25),r.lineStyle(2,8219222,.8),r.beginPath(),r.moveTo(v,m+8),r.lineTo(v,c-8),r.strokePath(),r.fillStyle(k,.95),r.fillRect(g+7,T*11.5,x-14,T*2.2),r.lineStyle(1,14209463,.18),r.strokeRect(g+7,T*11.5,x-14,T*2.2),b?(o.fillStyle(8675151,1),o.fillRect(v-12,T*11.95,24,7),o.fillStyle(14205586,1),o.fillRect(v-5,T*12.2,10,4),o.fillStyle(10267511,1),o.fillRect(v-15,T*13.1,5,6),o.fillStyle(10713943,1),o.fillRect(v+8,T*13,7,7),o.fillStyle(15128763,.85),o.fillRect(v+10,T*13.25,3,3)):(o.fillStyle(9401943,1),o.fillRect(v-8,T*12.1,16,9),o.fillStyle(5003638,1),o.fillRect(v-13,T*12.55,4,4),o.fillRect(v+9,T*12.55,4,4),o.fillRect(v-2,T*11.7,4,4),o.fillRect(v-2,T*13.95,4,4),o.fillStyle(14214122,.85),o.fillRect(v-14,T*11.65,6,3)),r.fillStyle(14727791,.9),r.fillRect(v-5,T*4.5,10,3),r.fillRect(v-5,T*18.5,10,3),this.addPixelLabel(t,v,T*8.75,w,"#2f2822","#f1dcc0","8px")}r.fillStyle(1644052,1),r.fillRect(0,c-6,a,6),r.fillRect(0,0,6,c),r.fillRect(a-6,0,6,c),this.addPixelLabel(t,T*7,T*1,"< WEST","#2d241c","#e8d5b6","8px"),this.addPixelLabel(t,a-T*7,T*1,"EAST >","#2d241c","#e8d5b6","8px"),this.decor.push(r,o)}buildMap(t,n=iu()){this.clearSceneDecor();const i=Kn(),r=((i[i.length-1]?.offsetCol??0)+Xn)*T,o=dr*T,a=this.getOutdoorMetrics(r,o);this.buildBoundaryDecor(t,i,n);for(const m of i){const h=(m.offsetCol+Xn/2)*T,p=t.add.image(m.offsetCol*T,0,"office-bg");p.setOrigin(0,0),p.setDepth(-100),this.bgSprites.push(p),this.addForegroundOccluders(t,m);const g=t.add.text(h,6,m.name,{fontSize:"14px",fontFamily:"monospace",color:"#ffffff",stroke:"#000000",strokeThickness:3,align:"center"});g.setOrigin(.5,0),g.setDepth(99999),g.setData("officeId",m.id),this.nameLabels.push(g)}const c=qj(i),d=Vf.buildWallBodies(t,c);return console.log("[OfficeMapBuilder] Composite map ready —",i.length,"offices"),{wallBodies:d,collisionGrid:c,waterfront:{dockCenterX:a.gateCenterX,dockY:a.dockY,waterTopY:a.waterTopY,waterBottomY:a.bottomY}}}getBackgroundSprites(){return this.bgSprites}getNameLabels(){return this.nameLabels}updateLabel(t,n){const i=this.nameLabels.find(r=>r.getData("officeId")===t);i&&i.setText(n)}static buildWallBodies(t,n){const i=n.length,r=i>0?n[0].length:0,o=t.physics.add.staticGroup();for(let a=0;a<i;a++){let c=-1;for(let d=0;d<=r;d++){const m=d<r&&n[a][d]===1;if(m&&c<0)c=d;else if(!m&&c>=0){const h=d-c,p=t.add.rectangle(c*T+h*T/2,a*T+T/2,h*T,T);p.setVisible(!1),o.add(p),c=-1}}}return o}static buildWallBodiesForRegion(t,n,i,r){const o=n.length,a=o>0?n[0].length:0;for(let c=0;c<o;c++){let d=-1;for(let m=0;m<=a;m++){const h=m<a&&n[c][m]===1;if(h&&d<0)d=m;else if(!h&&d>=0){const p=m-d,g=t.add.rectangle((r+d)*T+p*T/2,c*T+T/2,p*T,T);g.setVisible(!1),i.add(g),d=-1}}}}}const rt={IDLE:"idle",WALK:"walk",TYPE:"type",THINK:"think",CELEBRATE:"celebrate",COFFEE:"coffee",CHAT:"chat",PRACTICE:"practice",REFLECT:"reflect",SLEEP:"sleep",PRESENT:"present"},Ka={DOWN:"down",LEFT:"left",RIGHT:"right",UP:"up"};function Lx(e,t){return e+Math.random()*(t-e)}function RM(e,t){return Math.floor(Lx(e,t+1))}class AM extends Qi.GameObjects.Container{constructor(t,n,i,r,o,a){const c=o*T+T/2,d=a*T+T/2;super(t,c,d),this.officeId="office-0",this.agentState=rt.IDLE,this.dir=Ka.DOWN,this.isActive=!1,this.currentTool=null,this.seatId=null,this.urgency="relaxed",this.isSubagent=!1,this.parentAgentId=null,this.lastEventAt=0,this.stateTimer=0,this.seatTimer=0,this.wanderCount=0,this.hueShift=0,this.bubbleText=null,this.bubbleTimer=0,this.myceliumEffect=null,this.myceliumEffectTimer=0,this.myceliumSession=null,this.bubbleObj=null,this.currentPath=[],this.pathIndex=0,this.pathfinder=null,this.arrivalCallback=null,this.agentId=n,this.displayName=i,this.palette=r%6,this.wanderTimer=Lx(.5,2.5),this.wanderLimit=RM(Hj,Fj);const m=`char_${this.palette}`;this.shadow=t.add.ellipse(0,dM,cM,uM,1382432,fM),this.shadow.setOrigin(.5,.5),this.add(this.shadow),this.sprite=t.add.sprite(0,0,m),this.sprite.setScale(aM,lM),this.sprite.setOrigin(.5,1),this.add(this.sprite),t.add.existing(this),t.physics.world.enable(this);const h=Math.min(12,T-4),p=Math.min(6,T/2);this.body.setSize(h,p),this.body.setOffset(-h/2,-p),this.body.setCollideWorldBounds(!0),this.setDepth(d),this.playAnimForState()}setPathfinder(t){this.pathfinder=t}getState(){return this.agentState}getTilePos(){return{x:Math.floor(this.x/T),y:Math.floor(this.y/T)}}setAgentState(t){this.agentState!==t&&(this.agentState=t,this.playAnimForState())}setDirection(t){this.dir!==t&&(this.dir=t,this.playAnimForState())}playAnimForState(){if(!this.sprite?.anims)return;const t=`char_${this.palette}`,n=this.dir,i=n===Ka.LEFT;this.sprite.setFlipX(i);const r=i?"right":n;switch(this.agentState){case rt.WALK:this.sprite.play(`${t}_walk_${r}`,!0);break;case rt.CELEBRATE:this.sprite.play(`${t}_celebrate_${r}`,!0);break;case rt.TYPE:case rt.PRESENT:case rt.PRACTICE:this.sprite.play(`${t}_type_${r}`,!0);break;case rt.THINK:case rt.REFLECT:this.sprite.play(`${t}_read_${r}`,!0);break;case rt.COFFEE:case rt.CHAT:this.sprite.play(`${t}_coffee_${r}`,!0);break;case rt.SLEEP:case rt.IDLE:default:this.sprite.play(`${t}_idle_${r}`,!0);break}}async walkTo(t,n,i){if(!this.pathfinder||!this.sprite?.anims)return!1;const r=this.getTilePos(),o=await this.pathfinder.findPath(r,{x:t,y:n});return o.length===0?!1:(this.currentPath=o,this.pathIndex=0,this.arrivalCallback=i??null,this.setAgentState(rt.WALK),!0)}stopMovement(){this.currentPath=[],this.pathIndex=0,this.arrivalCallback=null,this.body?.setVelocity(0,0)}get isMoving(){return this.agentState===rt.WALK&&this.currentPath.length>0}getWalkSpeed(){switch(this.urgency){case"urgent":return gM;case"normal":return yM;default:return xM}}showBubble(t,n=_M){this.bubbleText=t,this.bubbleTimer=n,this.updateBubbleDisplay()}clearBubble(){this.bubbleText=null,this.bubbleTimer=0,this.bubbleObj&&(this.bubbleObj.destroy(),this.bubbleObj=null)}updateBubbleDisplay(){if(this.bubbleObj&&(this.bubbleObj.destroy(),this.bubbleObj=null),!this.bubbleText)return;const t=this.scene.add.container(this.x,this.y-70),n=this.scene.add.text(0,0,this.bubbleText,{fontSize:"10px",fontFamily:"monospace",color:"#1a1a2e",backgroundColor:"#ffffff",padding:{x:4,y:2},resolution:2});n.setOrigin(.5,1);const i=this.scene.add.graphics(),r=n.width+8,o=n.height+4;i.fillStyle(16777215,.95),i.fillRoundedRect(-r/2,-o,r,o,4),i.lineStyle(1,6710886,.5),i.strokeRoundedRect(-r/2,-o,r,o,4),t.add([i,n]),t.setDepth(1e5),this.bubbleObj=t}update(t){this.setDepth(this.y),this.bubbleObj&&(this.bubbleObj.setPosition(this.x,this.y-70),this.bubbleTimer>0&&(this.bubbleTimer-=t,this.bubbleTimer<=0&&this.clearBubble())),this.stateTimer>0&&(this.stateTimer-=t,this.stateTimer<=0&&(this.stateTimer=0,this.agentState===rt.CELEBRATE&&this.setAgentState(rt.IDLE),this.agentState===rt.COFFEE&&(this.setAgentState(rt.IDLE),this.wanderTimer=Lx(If,Tf)),this.agentState===rt.CHAT&&this.setAgentState(rt.IDLE))),this.agentState===rt.WALK&&this.currentPath.length>0&&this.followPath(t)}followPath(t){if(this.body.setVelocity(0,0),this.pathIndex>=this.currentPath.length){this.arriveAtDestination();return}const n=this.currentPath[this.pathIndex],i=n.x*T+T/2,r=n.y*T+T/2,o=i-this.x,a=r-this.y,c=Math.sqrt(o*o+a*a),m=this.getWalkSpeed()*t;if(c<=m+.5){this.x=i,this.y=r,this.pathIndex++,this.pathIndex>=this.currentPath.length&&this.arriveAtDestination();return}this.x+=o/c*m,this.y+=a/c*m,Math.abs(o)>Math.abs(a)?this.setDirection(o>0?Ka.RIGHT:Ka.LEFT):this.setDirection(a>0?Ka.DOWN:Ka.UP)}arriveAtDestination(){this.currentPath=[],this.pathIndex=0,this.body.setVelocity(0,0);const t=this.arrivalCallback;this.arrivalCallback=null,t?t():this.agentState===rt.WALK&&this.setAgentState(rt.IDLE)}destroy(t){this.clearBubble(),super.destroy(t)}}var yg,Pk;function MM(){return Pk||(Pk=1,yg=function(){this.pointsToAvoid={},this.startX,this.callback,this.startY,this.endX,this.endY,this.nodeHash={},this.openList}),yg}var xg,Bk;function DM(){return Bk||(Bk=1,xg=function(e,t,n,i,r){this.parent=e,this.x=t,this.y=n,this.costSoFar=i,this.simpleDistanceToTarget=r,this.bestGuessDistance=function(){return this.costSoFar+this.simpleDistanceToTarget}}),xg}var Rf={exports:{}},OM=Rf.exports,$k;function LM(){return $k||($k=1,(function(e,t){(function(){var n,i,r,o,a,c,d,m,h,p,g,x,v,b,k;r=Math.floor,p=Math.min,i=function(w,S){return w<S?-1:w>S?1:0},h=function(w,S,j,N,O){var R;if(j==null&&(j=0),O==null&&(O=i),j<0)throw new Error("lo must be non-negative");for(N==null&&(N=w.length);j<N;)R=r((j+N)/2),O(S,w[R])<0?N=R:j=R+1;return[].splice.apply(w,[j,j-j].concat(S)),S},c=function(w,S,j){return j==null&&(j=i),w.push(S),b(w,0,w.length-1,j)},a=function(w,S){var j,N;return S==null&&(S=i),j=w.pop(),w.length?(N=w[0],w[0]=j,k(w,0,S)):N=j,N},m=function(w,S,j){var N;return j==null&&(j=i),N=w[0],w[0]=S,k(w,0,j),N},d=function(w,S,j){var N;return j==null&&(j=i),w.length&&j(w[0],S)<0&&(N=[w[0],S],S=N[0],w[0]=N[1],k(w,0,j)),S},o=function(w,S){var j,N,O,R,D,I;for(S==null&&(S=i),R=(function(){I=[];for(var L=0,M=r(w.length/2);0<=M?L<M:L>M;0<=M?L++:L--)I.push(L);return I}).apply(this).reverse(),D=[],N=0,O=R.length;N<O;N++)j=R[N],D.push(k(w,j,S));return D},v=function(w,S,j){var N;if(j==null&&(j=i),N=w.indexOf(S),N!==-1)return b(w,0,N,j),k(w,N,j)},g=function(w,S,j){var N,O,R,D,I;if(j==null&&(j=i),O=w.slice(0,S),!O.length)return O;for(o(O,j),I=w.slice(S),R=0,D=I.length;R<D;R++)N=I[R],d(O,N,j);return O.sort(j).reverse()},x=function(w,S,j){var N,O,R,D,I,L,M,A,B;if(j==null&&(j=i),S*10<=w.length){if(R=w.slice(0,S).sort(j),!R.length)return R;for(O=R[R.length-1],M=w.slice(S),D=0,L=M.length;D<L;D++)N=M[D],j(N,O)<0&&(h(R,N,0,null,j),R.pop(),O=R[R.length-1]);return R}for(o(w,j),B=[],I=0,A=p(S,w.length);0<=A?I<A:I>A;0<=A?++I:--I)B.push(a(w,j));return B},b=function(w,S,j,N){var O,R,D;for(N==null&&(N=i),O=w[j];j>S;){if(D=j-1>>1,R=w[D],N(O,R)<0){w[j]=R,j=D;continue}break}return w[j]=O},k=function(w,S,j){var N,O,R,D,I;for(j==null&&(j=i),O=w.length,I=S,R=w[S],N=2*S+1;N<O;)D=N+1,D<O&&!(j(w[N],w[D])<0)&&(N=D),w[S]=w[N],S=N,N=2*S+1;return w[S]=R,b(w,I,S,j)},n=(function(){w.push=c,w.pop=a,w.replace=m,w.pushpop=d,w.heapify=o,w.updateItem=v,w.nlargest=g,w.nsmallest=x;function w(S){this.cmp=S??i,this.nodes=[]}return w.prototype.push=function(S){return c(this.nodes,S,this.cmp)},w.prototype.pop=function(){return a(this.nodes,this.cmp)},w.prototype.peek=function(){return this.nodes[0]},w.prototype.contains=function(S){return this.nodes.indexOf(S)!==-1},w.prototype.replace=function(S){return m(this.nodes,S,this.cmp)},w.prototype.pushpop=function(S){return d(this.nodes,S,this.cmp)},w.prototype.heapify=function(){return o(this.nodes,this.cmp)},w.prototype.updateItem=function(S){return v(this.nodes,S,this.cmp)},w.prototype.clear=function(){return this.nodes=[]},w.prototype.empty=function(){return this.nodes.length===0},w.prototype.size=function(){return this.nodes.length},w.prototype.clone=function(){var S;return S=new w,S.nodes=this.nodes.slice(0),S},w.prototype.toArray=function(){return this.nodes.slice(0)},w.prototype.insert=w.prototype.push,w.prototype.top=w.prototype.peek,w.prototype.front=w.prototype.peek,w.prototype.has=w.prototype.contains,w.prototype.copy=w.prototype.clone,w})(),(function(w,S){return e.exports=S()})(this,function(){return n})}).call(OM)})(Rf)),Rf.exports}var vg,Hk;function zM(){return Hk||(Hk=1,vg=LM()),vg}var bg,Fk;function PM(){if(Fk)return bg;Fk=1;var e={},t=MM(),n=DM(),i=zM();const r=0,o=1;bg=e;var a=1;return e.js=function(){var c=1,d=1.4,m=!1,h={},p,g={},x={},v={},b=!0,k,w={},S=[],j=Number.MAX_VALUE,N,O=!1;this.setAcceptableTiles=function(B){B instanceof Array?N=B:!isNaN(parseFloat(B))&&isFinite(B)&&(N=[B])},this.enableSync=function(){m=!0},this.disableSync=function(){m=!1},this.enableDiagonals=function(){O=!0},this.disableDiagonals=function(){O=!1},this.setGrid=function(B){p=B;for(var W=0;W<p.length;W++)for(var P=0;P<p[0].length;P++)g[p[W][P]]||(g[p[W][P]]=1)},this.setTileCost=function(B,W){g[B]=W},this.setAdditionalPointCost=function(B,W,P){x[W]===void 0&&(x[W]={}),x[W][B]=P},this.removeAdditionalPointCost=function(B,W){x[W]!==void 0&&delete x[W][B]},this.removeAllAdditionalPointCosts=function(){x={}},this.setDirectionalCondition=function(B,W,P){v[W]===void 0&&(v[W]={}),v[W][B]=P},this.removeAllDirectionalConditions=function(){v={}},this.setIterationsPerCalculation=function(B){j=B},this.avoidAdditionalPoint=function(B,W){h[W]===void 0&&(h[W]={}),h[W][B]=1},this.stopAvoidingAdditionalPoint=function(B,W){h[W]!==void 0&&delete h[W][B]},this.enableCornerCutting=function(){b=!0},this.disableCornerCutting=function(){b=!1},this.stopAvoidingAllAdditionalPoints=function(){h={}},this.findPath=function(B,W,P,G,$){var q=function(F){m?$(F):setTimeout(function(){$(F)})};if(N===void 0)throw new Error("You can't set a path without first calling setAcceptableTiles() on EasyStar.");if(p===void 0)throw new Error("You can't set a path without first calling setGrid() on EasyStar.");if(B<0||W<0||P<0||G<0||B>p[0].length-1||W>p.length-1||P>p[0].length-1||G>p.length-1)throw new Error("Your start or end point is outside the scope of your grid.");if(B===P&&W===G){q([]);return}for(var Y=p[G][P],Q=!1,V=0;V<N.length;V++)if(Y===N[V]){Q=!0;break}if(Q===!1){q(null);return}var U=new t;U.openList=new i(function(F,K){return F.bestGuessDistance()-K.bestGuessDistance()}),U.isDoneCalculating=!1,U.nodeHash={},U.startX=B,U.startY=W,U.endX=P,U.endY=G,U.callback=q,U.openList.push(M(U,U.startX,U.startY,null,c));var Z=a++;return w[Z]=U,S.push(Z),Z},this.cancelPath=function(B){return B in w?(delete w[B],!0):!1},this.calculate=function(){if(!(S.length===0||p===void 0||N===void 0))for(k=0;k<j;k++){if(S.length===0)return;m&&(k=0);var B=S[0],W=w[B];if(typeof W>"u"){S.shift();continue}if(W.openList.size()===0){W.callback(null),delete w[B],S.shift();continue}var P=W.openList.pop();if(W.endX===P.x&&W.endY===P.y){var G=[];G.push({x:P.x,y:P.y});for(var $=P.parent;$!=null;)G.push({x:$.x,y:$.y}),$=$.parent;G.reverse();var q=G;W.callback(q),delete w[B],S.shift();continue}P.list=r,P.y>0&&R(W,P,0,-1,c*L(P.x,P.y-1)),P.x<p[0].length-1&&R(W,P,1,0,c*L(P.x+1,P.y)),P.y<p.length-1&&R(W,P,0,1,c*L(P.x,P.y+1)),P.x>0&&R(W,P,-1,0,c*L(P.x-1,P.y)),O&&(P.x>0&&P.y>0&&(b||D(p,N,P.x,P.y-1,P)&&D(p,N,P.x-1,P.y,P))&&R(W,P,-1,-1,d*L(P.x-1,P.y-1)),P.x<p[0].length-1&&P.y<p.length-1&&(b||D(p,N,P.x,P.y+1,P)&&D(p,N,P.x+1,P.y,P))&&R(W,P,1,1,d*L(P.x+1,P.y+1)),P.x<p[0].length-1&&P.y>0&&(b||D(p,N,P.x,P.y-1,P)&&D(p,N,P.x+1,P.y,P))&&R(W,P,1,-1,d*L(P.x+1,P.y-1)),P.x>0&&P.y<p.length-1&&(b||D(p,N,P.x,P.y+1,P)&&D(p,N,P.x-1,P.y,P))&&R(W,P,-1,1,d*L(P.x-1,P.y+1)))}};var R=function(B,W,P,G,$){var q=W.x+P,Y=W.y+G;if((h[Y]===void 0||h[Y][q]===void 0)&&D(p,N,q,Y,W)){var Q=M(B,q,Y,W,$);Q.list===void 0?(Q.list=o,B.openList.push(Q)):W.costSoFar+$<Q.costSoFar&&(Q.costSoFar=W.costSoFar+$,Q.parent=W,B.openList.updateItem(Q))}},D=function(B,W,P,G,$){var q=v[G]&&v[G][P];if(q){var Y=I($.x-P,$.y-G),Q=function(){for(var U=0;U<q.length;U++)if(q[U]===Y)return!0;return!1};if(!Q())return!1}for(var V=0;V<W.length;V++)if(B[G][P]===W[V])return!0;return!1},I=function(B,W){if(B===0&&W===-1)return e.TOP;if(B===1&&W===-1)return e.TOP_RIGHT;if(B===1&&W===0)return e.RIGHT;if(B===1&&W===1)return e.BOTTOM_RIGHT;if(B===0&&W===1)return e.BOTTOM;if(B===-1&&W===1)return e.BOTTOM_LEFT;if(B===-1&&W===0)return e.LEFT;if(B===-1&&W===-1)return e.TOP_LEFT;throw new Error("These differences are not valid: "+B+", "+W)},L=function(B,W){return x[W]&&x[W][B]||g[p[W][B]]},M=function(B,W,P,G,$){if(B.nodeHash[P]!==void 0){if(B.nodeHash[P][W]!==void 0)return B.nodeHash[P][W]}else B.nodeHash[P]={};var q=A(W,P,B.endX,B.endY);if(G!==null)var Y=G.costSoFar+$;else Y=0;var Q=new n(G,W,P,Y,q);return B.nodeHash[P][W]=Q,Q},A=function(B,W,P,G){if(O){var $=Math.abs(B-P),q=Math.abs(W-G);return $<q?d*$+q:d*q+$}else{var $=Math.abs(B-P),q=Math.abs(W-G);return $+q}}},e.TOP="TOP",e.TOP_RIGHT="TOP_RIGHT",e.RIGHT="RIGHT",e.BOTTOM_RIGHT="BOTTOM_RIGHT",e.BOTTOM="BOTTOM",e.BOTTOM_LEFT="BOTTOM_LEFT",e.LEFT="LEFT",e.TOP_LEFT="TOP_LEFT",bg}var BM=PM();class Vk{constructor(t){this.grid=t.map(n=>[...n]),this.gridRows=this.grid.length,this.gridCols=this.gridRows>0?this.grid[0].length:0,this.easystar=new BM.js,this.easystar.setGrid(this.grid),this.easystar.setAcceptableTiles([0]),this.easystar.setIterationsPerCalculation(800)}findPath(t,n){return new Promise(i=>{if(t.x<0||t.x>=this.gridCols||t.y<0||t.y>=this.gridRows||n.x<0||n.x>=this.gridCols||n.y<0||n.y>=this.gridRows){i([]);return}if(this.grid[n.y]?.[n.x]===1){const r=this.findNearestWalkable(n.x,n.y);if(!r){i([]);return}n=r}if(this.grid[t.y]?.[t.x]===1){const r=this.findNearestWalkable(t.x,t.y);if(!r){i([]);return}t=r}this.easystar.findPath(t.x,t.y,n.x,n.y,r=>{i(r??[])}),this.easystar.calculate()})}blockTile(t,n){n>=0&&n<this.grid.length&&t>=0&&t<this.grid[0].length&&(this.grid[n][t]=1,this.easystar.setGrid(this.grid))}unblockTile(t,n){n>=0&&n<this.grid.length&&t>=0&&t<this.grid[0].length&&(this.grid[n][t]=0,this.easystar.setGrid(this.grid))}isWalkable(t,n){return n<0||n>=this.grid.length||t<0||t<0||t>=this.grid[0].length?!1:this.grid[n][t]===0}getWalkableTiles(){const t=[];for(let n=0;n<this.grid.length;n++)for(let i=0;i<this.grid[n].length;i++)this.grid[n][i]===0&&t.push({x:i,y:n});return t}findNearestWalkable(t,n){for(let i=1;i<=5;i++)for(let r=-i;r<=i;r++)for(let o=-i;o<=i;o++){if(Math.abs(o)!==i&&Math.abs(r)!==i)continue;const a=t+o,c=n+r;if(this.isWalkable(a,c))return{x:a,y:c}}return null}}function $M(e,t,n,i){return{id:e,tileX:t,tileY:n,facing:i,assigned:!1,assignedTo:null}}function HM(e,t,n,i){return{id:e,tileX:t,tileY:n,type:i}}const Wj={meetingRoom:{name:"Meeting Room",localBounds:{x:7,y:3,w:6,h:5},interactables:[{id:"whiteboard",localX:9,localY:1,type:"whiteboard"}],doorways:[{id:"door-meeting",localX:9,localY:9}]},workspace:{name:"Workspace",localBounds:{x:1,y:10,w:11,h:7},interactables:[{id:"printer",localX:10,localY:10,type:"printer"}],doorways:[{id:"door-ws",localX:9,localY:10}]},breakRoom:{name:"Break Room",localBounds:{x:13,y:10,w:6,h:8},interactables:[{id:"coffee-machine",localX:18,localY:10,type:"coffee_machine"},{id:"fridge",localX:18,localY:11,type:"fridge"}],doorways:[{id:"door-break",localX:13,localY:10}]},leaderOffice:{name:"Leader Office",localBounds:{x:13,y:18,w:6,h:6},interactables:[],doorways:[{id:"door-leader",localX:16,localY:17}]},lobby:{name:"Lobby",localBounds:{x:1,y:19,w:12,h:5},interactables:[],doorways:[{id:"entrance",localX:10,localY:18}]}};function FM(e,t,n){switch(n){case"workspace":return"up";case"meetingRoom":return e<9.5?"right":"left";case"breakRoom":return e<15.5?"right":"left";case"leaderOffice":return"up";default:return"down"}}function VM(e,t){for(const[n,i]of Object.entries(Wj)){const{x:r,y:o,w:a,h:c}=i.localBounds;if(e>=r&&e<r+a&&t>=o&&t<o+c)return n}return"lobby"}function UM(e){const t=e.offsetCol,n={};for(const[r,o]of Object.entries(Wj)){const a=`${e.id}-${r}`;n[a]={name:`${o.name} (${e.name})`,bounds:{x:o.localBounds.x+t,y:o.localBounds.y,w:o.localBounds.w,h:o.localBounds.h},seats:[],interactables:o.interactables.map(c=>HM(`${e.id}-${c.id}`,c.localX+t,c.localY,c.type)),doorways:o.doorways.map(c=>({id:`${e.id}-${c.id}`,tileX:c.localX+t,tileY:c.localY}))}}const i={};for(const[r,o]of e.seats){const a=VM(r,o),c=`${e.id}-${a}`;if(!n[c])continue;i[c]=(i[c]??0)+1;const d=i[c],m=a==="workspace"?"desk":a==="meetingRoom"?"meeting":a==="breakRoom"?"break":a==="leaderOffice"?"leader":"lobby",h=FM(r,o,a);n[c].seats.push($M(`${e.id}-${m}-${d}`,r+t,o,h))}return n}function Yj(e){const t=e??Kn(),n={};for(const i of t)Object.assign(n,UM(i));return n}let wo=Yj();function GM(e){wo=Yj(e)}function Xj(e){const t=wo[`${e}-workspace`]?.seats??[],n=wo[`${e}-leaderOffice`]?.seats??[];return[...t,...n]}function Uk(){return Object.values(wo).flatMap(e=>e.seats)}function qM(e){const t=wo[e];if(!t)return null;const{x:n,y:i,w:r,h:o}=t.bounds,a=e.split("-").slice(0,2).join("-"),d=Kn().find(g=>g.id===a);if(!d)return{x:n+1,y:i+1};const m=Gj(d.mapStr),h=d.offsetCol,p=[];for(let g=i;g<i+o;g++)for(let x=n;x<n+r;x++){const v=x-h;v>=0&&v<Xn&&g<dr&&m[g]?.[v]===0&&p.push({x,y:g})}return p.length===0?null:p[Math.floor(Math.random()*p.length)]}function Gk(e){const t=wo[`${e}-lobby`];return t?t.doorways.map(n=>({x:n.tileX,y:n.tileY})):[]}function Jo(e,t){return e+Math.random()*(t-e)}function WM(e,t){return Math.floor(Jo(e,t+1))}function Qr(e,t){return e.length>t?e.slice(0,t)+"...":e}function qk(e){if(!e)return"Tool";const t=e.toLowerCase().trim();return t==="shell"?"Shell":t==="write_file"||t==="write"?"Write":t==="edit_file"||t==="edit"?"Edit":t==="read_file"||t==="read"?"Read":t==="grep"||t==="search"?"Search":t==="web_search"||t==="websearch"?"WebSearch":t==="web_fetch"||t==="webfetch"?"Fetch":e.slice(0,12)}class YM{constructor(t){this.pendingDespawn=new Set,this.scene=t}applyEvent(t){const n=t.data??{},i=t.agent_id||"openopc-main";if(i==="user")return;const r=i.startsWith("subagent-"),o=r?typeof n.parent_agent_id=="string"?n.parent_agent_id:"openopc-main":null,a=r?`Sub ${i.slice(-4)}`:void 0,c=this.scene.ensureAgent(i,a,r,o);switch(c.lastEventAt=Date.now(),typeof n.task_preview=="string"&&(c.taskSummary=n.task_preview),typeof n.result_preview=="string"&&(c.taskSummary=n.result_preview),t.type){case"tool_start":this.onToolStart(c,n);break;case"tool_done":this.onToolDone(c,n);break;case"agent_active":this.onAgentActive(c);break;case"waiting":this.onWaiting(c);break;case"reflect_start":this.onReflectStart(c);break;case"reflect_done":this.onReflectDone(c);break;case"skill_synthesized":this.onSkillSynthesized(c,n);break;case"subagent_spawn":this.onSubagentSpawn(c,i,o);break;case"subagent_done":this.onSubagentDone(c,i);break;case"message_in":this.onMessageIn(c,n);break;case"message_out":this.onMessageOut(c,n);break;case"practice_start":this.onPracticeStart(c,n);break;case"practice_done":this.onPracticeDone(c);break;case"task_routed":this.onTaskRouted(c,n);break;case"task_delegated":this.onTaskDelegated(c,i,n);break;case"delegation_done":this.onDelegationDone(c,n);break;case"agent_spawned":this.onAgentSpawned(c,i,n);break;case"agent_removed":this.onAgentRemoved(c,i);break;case"collab_started":this.onCollabStarted(c);break;case"collab_ended":this.onCollabEnded(c);break;case"skill_published":this.onSkillPublished(c,n);break;case"skill_adopted":this.onSkillAdopted(c,n);break;case"mycelium_transport":this.onMyceliumTransport(c,i,n);break;case"mycelium_crystallize":this.onMyceliumCrystallize(c,i,n);break;case"mycelium_spore":this.onMyceliumSpore(c,i,n);break;case"mycelium_decompose":this.onMyceliumDecompose(c,i,n);break;case"mycelium_unit_created":this.onMyceliumUnitCreated(c,n);break;case"mycelium_germinate":this.onMyceliumGerminate(c,i,n);break;case"hyphal_strengthen":this.onHyphalStrengthen(i,n);break;case"hyphal_weaken":this.onHyphalWeaken(i,n);break}}onToolStart(t,n){const i=typeof n.tool_name=="string"?n.tool_name:"tool",r=qk(i);t.urgency="urgent",t.currentTool=i,t.isActive=!0,t.showBubble(`${r}...`),this.sendToSeat(t)}onToolDone(t,n){const i=typeof n.tool_name=="string"?n.tool_name:t.currentTool,r=qk(i);t.currentTool=null,t.setAgentState(rt.CELEBRATE),t.stateTimer=Xa,t.isActive=!1,t.showBubble(`${r} done`)}onAgentActive(t){t.urgency="urgent",t.isActive=!0,t.currentTool||this.sendToSeat(t)}onWaiting(t){t.urgency="relaxed",t.isActive=!1,t.currentTool=null,t.showBubble("Waiting");const n=this.moveToZone(t,"breakRoom",rt.COFFEE);n||t.setAgentState(rt.IDLE),n&&(t.stateTimer=Jo(vM,bM))}onReflectStart(t){t.urgency="normal",t.isActive=!1,t.currentTool="Reflect",this.moveToZone(t,"meetingRoom",rt.REFLECT)||t.setAgentState(rt.REFLECT),t.stateTimer=30,t.showBubble("Reflecting...")}onReflectDone(t){t.currentTool=null,t.setAgentState(rt.CELEBRATE),t.stateTimer=Xa,t.showBubble("Insight!")}onSkillSynthesized(t,n){const i=Qr(String(n.skill_name??"new"),20);t.setAgentState(rt.PRESENT),t.showBubble(`New Skill: ${i}`)}onSubagentSpawn(t,n,i){this.placeAtDoorway(t),t.urgency="urgent",t.isActive=!0,t.showBubble("Spawned"),this.sendToSeat(t)}onSubagentDone(t,n){t.urgency="relaxed",t.currentTool=null,t.isActive=!1,t.showBubble("Finished"),this.moveToDoorway(t)?this.pendingDespawn.add(n):this.scene.removeAgent(n)}onMessageIn(t,n){t.urgency="urgent";const i=typeof n.content_preview=="string"?n.content_preview:"";i&&(t.taskSummary=i);const r=i?Qr(i,30):"New task";t.showBubble(r),t.isActive=!0,this.sendToSeat(t)}onMessageOut(t,n){const i=typeof n.content_preview=="string"?n.content_preview:"";i&&(t.taskSummary=i);const r=i?Qr(i,30):"Reply sent";t.showBubble(`Reply: ${r}`)}onPracticeStart(t,n){t.urgency="normal";const i=typeof n.target_domain=="string"?n.target_domain:"Practice";t.showBubble(`Practicing: ${Qr(i,20)}`),t.isActive=!1,t.currentTool="Practice",this.moveToZone(t,"meetingRoom",rt.PRACTICE)||t.setAgentState(rt.PRACTICE)}onPracticeDone(t){t.currentTool=null,t.setAgentState(rt.CELEBRATE),t.stateTimer=Xa,t.showBubble("Practice done!")}onTaskRouted(t,n){t.urgency="urgent";const i=typeof n.method=="string"?n.method:"auto";t.isActive=!0,this.sendToSeat(t),t.showBubble(`Assigned (${i})`)}onTaskDelegated(t,n,i){t.urgency="normal",t.stateTimer=Jo(Ak,Mk);const r=typeof i.target=="string"?i.target:"?";t.setAgentState(rt.CHAT),t.showBubble(`Delegating to ${r}...`);const o=this.scene.getAgent(r);o&&(o.parentAgentId=n,o.showBubble("Receiving task..."))}onDelegationDone(t,n){const i=typeof n.target=="string"?n.target:"";if(t.setAgentState(rt.IDLE),t.showBubble("Delegation complete"),i){const r=this.scene.getAgent(i);r&&(r.parentAgentId=null)}}onAgentSpawned(t,n,i){const r=typeof i.role_name=="string"?i.role_name:n;t.displayName=r,this.placeAtDoorway(t),this.sendToSeat(t),t.showBubble(`${r} joined`)}onAgentRemoved(t,n){t.showBubble("Leaving..."),this.moveToDoorway(t)?this.pendingDespawn.add(n):this.scene.removeAgent(n)}onCollabStarted(t){t.urgency="normal",t.isActive=!1,t.stateTimer=Jo(Ak,Mk),this.moveToZone(t,"meetingRoom",rt.CHAT),t.showBubble("Collaborating...")}onCollabEnded(t){t.stateTimer=Xa,t.setAgentState(rt.CELEBRATE),t.showBubble("Collaboration done!")}onSkillPublished(t,n){const i=Qr(String(n.skill_name??"skill"),20);t.setAgentState(rt.CELEBRATE),t.stateTimer=Xa,t.showBubble(`Published: ${i}`)}onSkillAdopted(t,n){const i=Qr(String(n.skill_name??"skill"),20);t.showBubble(`Adopted: ${i}`)}onMyceliumTransport(t,n,i){const r=typeof i.source=="string"?i.source:n,o=typeof i.target=="string"?i.target:null,a=typeof i.domain=="string"?Qr(i.domain,15):"?",c=this.scene.ensureAgent(r);if(c.myceliumEffect="transport_send",c.myceliumEffectTimer=3,c.showBubble(`-> [${a}]`),o){const d=this.scene.ensureAgent(o);d.myceliumEffect="transport_recv",d.myceliumEffectTimer=2,d.showBubble("Receiving...");const m=d.getTilePos();c.walkTo(m.x,m.y+1)}}onMyceliumCrystallize(t,n,i){const r=Array.isArray(i.corroborating_agents)?i.corroborating_agents:[],o=Qr(String(i.content_preview??"Knowledge"),22),a=Array.from(new Set([n,...r])),c=`${t.officeId}-meetingRoom`,d=wo[c]?.seats??[];for(let m=0;m<a.length;m++){const h=a[m],p=this.scene.ensureAgent(h);p.myceliumEffect="crystal",p.myceliumEffectTimer=15,p.isActive=!1;const g=m%d.length,x=d[g];p.walkTo(x.tileX,x.tileY,()=>{p.setDirection(x.facing),p.setAgentState(rt.CHAT)}),p.showBubble(h===n?`Crystal: ${o}`:"Crystal!")}}onMyceliumSpore(t,n,i){const r=Qr(String(i.content_preview??"Breakthrough"),20);t.myceliumEffect="spore_send",t.myceliumEffectTimer=4,t.setAgentState(rt.PRESENT),t.showBubble(`Breakthrough! ${r}`),this.moveToZone(t,"breakRoom")}onMyceliumDecompose(t,n,i){const r=Qr(String(i.humus_preview??"Lesson learned"),22);t.myceliumEffect="decompose",t.myceliumEffectTimer=4,t.setAgentState(rt.REFLECT),t.showBubble(`Learning: ${r}`),this.moveToZone(t,"meetingRoom")}onMyceliumUnitCreated(t,n){const i=String(n.nutrient_type??"insight").slice(0,1).toUpperCase();t.showBubble(`[${i}]...`,2)}onMyceliumGerminate(t,n,i){const r=typeof i.target_agent=="string"?i.target_agent:n,o=this.scene.ensureAgent(r);o.myceliumEffect=null,o.setAgentState(rt.CELEBRATE),o.stateTimer=Xa,o.showBubble("Insight took root!")}onHyphalStrengthen(t,n){}onHyphalWeaken(t,n){}updateIdle(t){for(const n of this.scene.agents.values()){if(this.pendingDespawn.has(n.agentId)&&!n.isMoving){this.pendingDespawn.delete(n.agentId),this.scene.removeAgent(n.agentId);continue}if(n.myceliumEffectTimer>0&&(n.myceliumEffectTimer-=t,n.myceliumEffectTimer<=0&&(n.myceliumEffect=null,n.myceliumEffectTimer=0,n.myceliumSession=null)),n.agentState===rt.TYPE&&!n.isActive){n.seatTimer>0?(n.seatTimer-=t,n.seatTimer<=0&&(n.seatTimer=0,n.setAgentState(rt.IDLE),n.wanderCount=0,n.wanderLimit=WM(Hj,Fj),n.wanderTimer=Jo(If,Tf))):n.setAgentState(rt.IDLE);continue}if(n.agentState===rt.IDLE){if(n.isActive){if(n.urgency="urgent",!n.seatId){n.setAgentState(rt.TYPE);continue}this.sendToSeat(n);continue}if(n.wanderTimer-=t,n.wanderTimer<=0){if(n.wanderCount>=n.wanderLimit&&n.seatId){n.urgency="relaxed",this.sendToSeat(n),n.wanderTimer=Jo(If,Tf);continue}const i=this.scene.getWalkableTilesForOffice(n.officeId);if(i.length>0){n.urgency="relaxed";const r=i[Math.floor(Math.random()*i.length)];n.walkTo(r.x,r.y),n.wanderCount++}n.wanderTimer=Jo(If,Tf)}}}}sendToSeat(t){if(!t.seatId)return;const n=this.scene.getSeatById(t.seatId);n&&t.walkTo(n.tileX,n.tileY,()=>{t.setAgentState(rt.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Dk+Math.random()*Ok)}).then(i=>{i||(t.setAgentState(rt.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Dk+Math.random()*Ok))})}moveToZone(t,n,i){const r=`${t.officeId}-${n}`,o=wo[r];if(!o)return!1;if(o.seats.length>0){const c=new Set;for(const m of this.scene.agents.values()){if(m===t||m.isMoving)continue;const h=m.getTilePos();c.add(`${h.x},${h.y}`)}for(const m of this.scene.agents.values()){if(m===t||!m.isMoving)continue;const h=m.currentPath;if(h?.length){const p=h[h.length-1];c.add(`${p.x},${p.y}`)}}const d=o.seats.find(m=>!c.has(`${m.tileX},${m.tileY}`));if(d)return t.walkTo(d.tileX,d.tileY,()=>{t.setDirection(d.facing),i?t.setAgentState(i):t.setAgentState(rt.IDLE)}),!0}const a=qM(r);return a?(t.walkTo(a.x,a.y,()=>{i?t.setAgentState(i):t.setAgentState(rt.IDLE)}),!0):!1}moveToDoorway(t){const n=Gk(t.officeId);if(n.length===0)return!1;const i=n[Math.floor(Math.random()*n.length)];return t.walkTo(i.x,i.y),!0}placeAtDoorway(t){const n=Gk(t.officeId);if(n.length>0){const i=n[Math.floor(Math.random()*n.length)];t.setPosition(i.x*T+T/2,i.y*T+T/2)}}}class XM extends Qi.Scene{constructor(){super("Office"),this.yachtLoopStarted=!1,this.outdoorIsDay=null,this.agents=new Map,this.seats=[],this.walkableTiles=[],this.walkableTilesByOffice=new Map,this.dragState={pointerId:null,lastX:0,lastY:0,moved:!1}}create(){this.bridge=this.registry.get("bridge");const t=iu();this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?Tk:Rk),this.mapBuilder=new Vf,this.mapData=this.mapBuilder.buildMap(this,t),this.pathfinder=new Vk(this.mapData.collisionGrid),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),this.seats=Uk().map(d=>({...d})),this.behavior=new YM(this);const n=pg*T,i=Oc*T,r=-nu,o=-ll,a=n+nu*2,c=i+ll+fl;this.physics.world.setBounds(r,o,a,c),this.cameras.main.setBounds(r,o,a,c),this.resetCameraView(!1),this.startWaterfrontLoop(),this.input.on("pointerdown",d=>{d.leftButtonDown()&&(this.dragState.pointerId=d.id,this.dragState.lastX=d.x,this.dragState.lastY=d.y,this.dragState.moved=!1)}),this.input.on("pointermove",d=>{if(!d.isDown||this.dragState.pointerId!==d.id)return;const m=d.x-this.dragState.lastX,h=d.y-this.dragState.lastY;if(!this.dragState.moved&&Math.abs(d.downX-d.x)+Math.abs(d.downY-d.y)<6)return;this.dragState.moved=!0;const p=this.cameras.main;p.stopFollow(),p.scrollX-=m/p.zoom,p.scrollY-=h/p.zoom,this.dragState.lastX=d.x,this.dragState.lastY=d.y}),this.input.on("wheel",(d,m,h,p)=>{const g=this.cameras.main,x=this.input.activePointer,v=g.getWorldPoint(x.x,x.y),b=this.getMinCameraZoom(g),k=Qi.Math.Clamp(g.zoom-p*.0015,b,3);g.setZoom(k);const w=g.getWorldPoint(x.x,x.y);g.scrollX+=v.x-w.x,g.scrollY+=v.y-w.y,g.scrollX=g.clampX(g.scrollX),g.scrollY=g.clampY(g.scrollY)}),this.scale.on("resize",()=>{const d=this.cameras.main,m=this.getMinCameraZoom(d);d.zoom<m&&d.setZoom(m),d.scrollX=d.clampX(d.scrollX),d.scrollY=d.clampY(d.scrollY)}),this.time.addEvent({delay:45e3,loop:!0,callback:this.checkOutdoorDayNight,callbackScope:this}),this.input.on("pointerup",d=>{if(this.dragState.pointerId!==d.id)return;const m=this.dragState.pointerId===d.id&&this.dragState.moved;if(this.dragState.pointerId=null,this.dragState.moved=!1,m)return;const h=this.cameras.main.getWorldPoint(d.x,d.y);let p=null,g=1/0;for(const x of this.agents.values()){const v=Qi.Math.Distance.Between(h.x,h.y,x.x,x.y);v<24&&v<g&&(p=x,g=v)}p&&(this.bridge.emit("agentSelected",p.agentId),this.cameras.main.startFollow(p,!0,.1,.1))}),this.bridge&&this.bridge.setScene(this),console.log("[OfficeScene] Ready — walkable tiles:",this.walkableTiles.length)}update(t,n){const i=n/1e3;for(const r of this.agents.values())r.update(i);this.behavior.updateIdle(i)}startWaterfrontLoop(){if(this.yachtLoopStarted)return;this.yachtLoopStarted=!0;const{dockCenterX:t,dockY:n,waterTopY:i,waterBottomY:r}=this.mapData.waterfront,o=3,a=Qi.Math.Clamp(n+T*5,i+T*3.8,r-T*4.6),c=t-T*20,d=t+T*1.65,m=t+T*19,h=this.add.ellipse(0,13,122,24,1520707,.28),p=this.add.ellipse(-78,8,24,7,15399167,.42),g=this.add.ellipse(-92,9,16,5,14151415,.3),x=this.add.ellipse(-106,10,10,4,12573931,.18),v=this.add.rectangle(-2,6,94,16,16185336,1),b=this.add.rectangle(-49,5,12,14,15067372,1),k=this.add.rectangle(44,4,12,12,16185336,1),w=this.add.triangle(56,4,0,-6,13,0,0,6,16185336,1),S=this.add.rectangle(-1,11,66,4,12174283,.95),j=this.add.rectangle(6,3,74,3,9289688,.95),N=this.add.rectangle(-6,-3,52,10,16777215,1),O=this.add.rectangle(-28,-2,18,8,15528178,1),R=this.add.rectangle(18,-5,18,8,16777215,1),D=this.add.rectangle(6,-13,40,8,16317179,1),I=this.add.rectangle(-18,-12,18,6,15791350,1),L=this.add.rectangle(19,-5,14,4,9950199,.92),M=this.add.rectangle(0,-3,42,3,13625847,.88),A=this.add.rectangle(4,-16,44,2,14279142,.96),B=this.add.rectangle(7,-25,2,9,15330801,.95),W=this.add.rectangle(11,-28,9,2,15330801,.95),P=this.add.triangle(17,-27,0,-3,7,0,0,3,10470876,.95),G=this.add.container(c,a,[h,x,g,p,b,v,k,w,j,S,O,N,R,I,D,L,M,A,B,W,P]),$=[-26,-10,8,26].map(Y=>this.add.circle(Y,5,2.1,14284031,.95));G.add($),G.setDepth(-250),G.setAlpha(0),G.setRotation(-.04),G.setScale(o),this.tweens.add({targets:[p,g,x],scaleX:{from:.85,to:1.2},alpha:{from:.5,to:.2},duration:900,yoyo:!0,repeat:-1});const q=()=>{G.setPosition(c,a),G.setAlpha(0),G.setRotation(-.04),p.setAlpha(.55),g.setAlpha(.42),x.setAlpha(.24),this.tweens.add({targets:G,x:d,alpha:1,rotation:.015,duration:7200,ease:"Sine.InOut",onComplete:()=>{p.setAlpha(.22),g.setAlpha(.14),x.setAlpha(.08),this.tweens.add({targets:G,x:d+4,y:a+T*.12,duration:1400,yoyo:!0,repeat:2,ease:"Sine.InOut"}),this.time.delayedCall(3600,()=>{p.setAlpha(.48),g.setAlpha(.32),x.setAlpha(.18),this.tweens.add({targets:G,x:m,alpha:0,rotation:-.055,duration:7600,ease:"Sine.InOut",onComplete:()=>{this.time.delayedCall(2400,q)}})})}})};q()}buildWalkableTilesByOffice(){this.walkableTilesByOffice.clear();const t=Kn();for(const n of t){const i=[];for(const r of this.walkableTiles)r.x>=n.offsetCol&&r.x<n.offsetCol+Xn&&i.push(r);this.walkableTilesByOffice.set(n.id,i)}}getWalkableTilesForOffice(t){return this.walkableTilesByOffice.get(t)??[]}resetCameraView(t=!0){const n=this.cameras.main,{worldW:i,worldH:r}=this.getWorldSize(),o=this.getMinCameraZoom(n),a=Math.min(this.scale.width/i,this.scale.height/r),c=Math.max(1.22,o),d=Qi.Math.Clamp(Math.max(a*1.18,.62),o,c),m=pg*T/2,h=(Oc*T-ll+fl)/2+T*2.6;if(n.stopFollow(),!t){n.setZoom(d),n.centerOn(m,h);return}this.tweens.add({targets:n,zoom:d,duration:260,ease:"Cubic.easeOut"}),n.pan(m,h,260,"Cubic.easeOut")}panToOffice(t){const i=Kn().find(m=>m.id===t);if(!i)return;const r=(i.offsetCol+Xn/2)*T,o=Oc/2*T,a=this.cameras.main,c=this.getMinCameraZoom(a),d=Qi.Math.Clamp(Math.min(this.scale.width/((Xn+4)*T),this.scale.height/((Oc-4)*T)),c,Math.max(1.5,c));a.stopFollow(),this.tweens.add({targets:a,zoom:d,duration:380,ease:"Cubic.easeOut"}),a.pan(r,o,380,"Cubic.easeOut")}resolveOfficeForAgent(t){const n=NM(t);if(n)return n.id;const i=Kn();let r=null,o=-1;for(const c of i){const d=Xj(c.id),m=c.assignedAgents.length,h=d.length-m;h>o&&(r=c,o=h)}const a=r?.id??i[0]?.id??"office-0";return hg(a,t),a}addAgent(t,n,i=!1,r=null,o,a,c){if(this.agents.has(t))return this.agents.get(t);const d=n??t,m=a??this.agents.size%6,h=o?(hg(o,t),o):this.resolveOfficeForAgent(t),p=c?this.seats.find(j=>j.id===c&&!j.assigned)??this.findFreeSeatInOffice(h):this.findFreeSeatInOffice(h),v=(Kn().find(j=>j.id===h)?.offsetCol??0)+5,b=20;let k=v,w=b;p&&(k=p.tileX,w=p.tileY,p.assigned=!0,p.assignedTo=t);const S=new AM(this,t,d,m,k,w);return S.officeId=h,S.setPathfinder(this.pathfinder),S.seatId=p?.id??null,S.isSubagent=i,S.parentAgentId=r,p&&(S.setAgentState(rt.TYPE),S.setDirection(p.facing),S.seatTimer=10),this.agents.set(t,S),S}removeAgent(t){const n=this.agents.get(t);if(n){if(n.seatId){const i=this.seats.find(r=>r.id===n.seatId);i&&(i.assigned=!1,i.assignedTo=null)}n.destroy(),this.agents.delete(t);try{const{unassignAgent:i}=require("../map/OfficeStore");i(t)}catch{}}}getAgent(t){return this.agents.get(t)}ensureAgent(t,n,i=!1,r=null,o,a,c){const d=this.agents.get(t);return d?(o&&d.officeId!==o&&this.reassignAgent(t,o),c&&d.seatId!==c&&this.changeAgentSeat(t,c),d):this.addAgent(t,n,i,r,o,a,c)}findFreeSeatInOffice(t){const n=this.seats.filter(i=>i.id.startsWith(`${t}-desk-`)).find(i=>!i.assigned);return n||(this.seats.filter(i=>i.id.startsWith(`${t}-leader-`)).find(i=>!i.assigned)??null)}getSeatById(t){return this.seats.find(n=>n.id===t)}reassignAgent(t,n){const i=this.agents.get(t);if(!i)return;if(i.seatId){const m=this.seats.find(h=>h.id===i.seatId);m&&(m.assigned=!1,m.assignedTo=null)}i.stopMovement(),hg(n,t),i.officeId=n;const r=this.findFreeSeatInOffice(n),c=(Kn().find(m=>m.id===n)?.offsetCol??0)+5,d=20;r?(r.assigned=!0,r.assignedTo=t,i.seatId=r.id,i.setPosition(r.tileX*T+T/2,r.tileY*T+T/2),i.setAgentState(rt.TYPE),i.setDirection(r.facing),i.seatTimer=10):(i.seatId=null,i.setPosition(c*T+T/2,d*T+T/2))}getCharacterCards(){const t=[];for(const n of this.agents.values())t.push({id:n.agentId,displayName:n.displayName,state:n.agentState,currentTool:n.currentTool,isSubagent:n.isSubagent,parentAgentId:n.parentAgentId,taskSummary:n.taskSummary,lastEventAt:n.lastEventAt,officeId:n.officeId,seatId:n.seatId});return t}changeAgentSeat(t,n){const i=this.agents.get(t);if(!i)return;if(i.seatId){const o=this.seats.find(a=>a.id===i.seatId);o&&(o.assigned=!1,o.assignedTo=null)}const r=this.seats.find(o=>o.id===n);!r||r.assigned&&r.assignedTo!==t||(r.assigned=!0,r.assignedTo=t,i.seatId=n,i.stopMovement(),i.setPosition(r.tileX*T+T/2,r.tileY*T+T/2),i.setAgentState(rt.TYPE),i.setDirection(r.facing),i.seatTimer=10)}rebuildOfficeCollision(t,n,i){IM(t,n,i),this.mapData.wallBodies&&this.mapData.wallBodies.clear(!0,!0);const r=Kn(),o=qj(r),a=Vf.buildWallBodies(this,o);this.mapData={...this.mapData,wallBodies:a,collisionGrid:o},this.pathfinder=new Vk(o),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),GM(r),this.seats=Uk().map(c=>({...c}));for(const c of this.agents.values())c.setPathfinder(this.pathfinder),c.stopMovement();console.log("[OfficeScene] Office collision rebuilt —",t,"walkable:",this.walkableTiles.length)}renameOffice(t,n){jM(t,n),this.mapBuilder.updateLabel(t,n)}checkOutdoorDayNight(){this.applyOutdoorLighting(iu())}syncOutdoorLighting(){this.applyOutdoorLighting(iu())}applyOutdoorLighting(t){t!==this.outdoorIsDay&&(this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?Tk:Rk),this.mapBuilder.refreshOutdoorDayNight(this,t))}getWorldSize(){const t=pg*T,n=Oc*T;return{worldW:t+nu*2,worldH:n+ll+fl}}getMinCameraZoom(t){const{worldW:n,worldH:i}=this.getWorldSize();return Math.max(t.width/n,t.height/i)}}function KM({bridge:e,active:t=!0}){const n=C.useRef(null),i=C.useRef(null),r=C.useRef(null),o=C.useRef(t);return o.current=t,C.useEffect(()=>{const a=r.current;!a||!a.loop||(t?a.loop.started&&!a.loop.running&&(a.loop.wake(),a.scale.getParentBounds(),a.scale.refresh()):a.loop.running&&a.loop.sleep())},[t]),C.useEffect(()=>{if(!n.current||!i.current)return;const a=n.current,c=i.current,d=(h,p)=>{console.log("[PhaserGame] Creating Phaser game",h,"×",p);const g=kM(c,h,p);g.scene=[CM,XM];const x=new Qi.Game(g);x.registry.set("bridge",e),x.events.once(Qi.Core.Events.READY,()=>{!o.current&&x.loop.running&&x.loop.sleep()}),r.current=x};if(typeof ResizeObserver>"u")return d(a.clientWidth||window.innerWidth-380,a.clientHeight||window.innerHeight-48),()=>{r.current?.destroy(!0),r.current=null};const m=new ResizeObserver(h=>{const p=h[h.length-1].contentRect,g=Math.floor(p.width),x=Math.floor(p.height);if(!(g<1||x<1))if(!r.current)d(g,x);else{const v=r.current.scale;v.getParentBounds(),v.refresh()}});return m.observe(a),()=>{m.disconnect(),r.current?.destroy(!0),r.current=null}},[e]),u.jsx("div",{ref:n,style:{width:"100%",height:"100%"},children:u.jsx("div",{ref:i,style:{width:"100%",height:"100%"}})})}class ZM extends Qi.Events.EventEmitter{constructor(){super(),this.scene=null,this.eventQueue=[],this.snapshotQueue=[]}setScene(t){this.scene=t;for(const n of this.snapshotQueue)this.applySnapshot(n);this.snapshotQueue=[];for(const n of this.eventQueue)this.applyEvent(n);this.eventQueue=[]}getScene(){return this.scene}pushEvent(t){if(!this.scene){this.eventQueue.push(t),this.eventQueue.length>500&&this.eventQueue.shift();return}this.applyEvent(t)}pushSnapshot(t){const n=Object.keys(t.agents??{}).length;if(!this.scene){console.log(`[GameBridge] pushSnapshot queued (scene not ready) — ${n} agents`),this.snapshotQueue=[t],this.eventQueue=[];return}console.log(`[GameBridge] pushSnapshot applying now — ${n} agents`),this.applySnapshot(t)}sendToSeat(t){this.scene&&this.scene.behavior.sendToSeat(this.scene.ensureAgent(t))}setAgentActive(t,n){if(!this.scene)return;const i=this.scene.getAgent(t);i&&(i.isActive=n)}setAgentBubble(t,n){if(!this.scene)return;const i=this.scene.getAgent(t);i&&(n?i.showBubble(n):i.clearBubble())}ensureAgent(t,n,i,r,o){this.scene&&this.scene.ensureAgent(t,n,!1,null,i,r,o)}getCharacterCards(){return this.scene?this.scene.getCharacterCards():[]}getOffices(){return Kn()}renameOffice(t,n){this.scene&&(this.scene.renameOffice(t,n),this.emit("officeChanged"))}assignAgentToOffice(t,n){this.scene&&(this.scene.reassignAgent(t,n),this.emit("officeChanged"))}panToOffice(t){this.scene&&this.scene.panToOffice(t)}resetCamera(){this.scene&&this.scene.resetCameraView()}syncOutdoorLighting(){this.scene&&this.scene.syncOutdoorLighting()}rebuildOfficeCollision(t,n,i){this.scene&&this.scene.rebuildOfficeCollision(t,n,i)}getSeatsForOffice(t){return this.scene?this.scene.seats.filter(n=>n.id.startsWith(`${t}-desk-`)||n.id.startsWith(`${t}-leader-`)).map(n=>({id:n.id,assigned:n.assigned,assignedTo:n.assignedTo})):[]}changeAgentSeat(t,n){this.scene&&(this.scene.changeAgentSeat(t,n),this.emit("officeChanged"))}notifyChannelMessage(t,n){if(this.scene)for(const i of t){const r=this.scene.getAgent(i);r&&(r.showBubble(n.slice(0,30)),setTimeout(()=>r.clearBubble(),4e3))}}triggerCrossOfficeMeeting(t){if(this.scene)for(const n of t){const i=this.scene.getAgent(n);i&&this.scene.behavior.moveToZone(i,"meetingRoom")}}triggerCelebration(t){if(!this.scene)return;const n=this.scene.getAgent(t);n&&(n.showBubble("🎉 Done!"),setTimeout(()=>n.clearBubble(),3e3))}applyEvent(t){this.scene&&(this.scene.behavior.applyEvent(t),this.emit("eventApplied",t))}applySnapshot(t){if(!this.scene){console.warn("[GameBridge] applySnapshot called but scene is null");return}const n=Array.from(this.scene.agents.keys());console.log("[GameBridge] applySnapshot — clearing",n.length,"old agents:",n);for(const o of n)this.scene.removeAgent(o);const i=t.timeline??[];for(const o of i)this.scene.behavior.applyEvent(o);const r=Object.entries(t.agents??{});console.log("[GameBridge] applySnapshot — adding",r.length,"agents:",r.map(([o])=>o));for(const[o,a]of r){const c=a,d=c.name||c.role_name||o,m=c.office_id,h=c.appearance?.palette,p=c.appearance?.desk_id;try{const g=this.scene.ensureAgent(o,d,!1,null,m,h,p),x=c.runtime_status||c.status;x==="tool_active"?(g.currentTool=c.current_tool??null,g.isActive=!0,g.setAgentState(rt.TYPE)):x==="reflecting"&&(g.currentTool=c.current_tool??"Reflect",g.isActive=!1,g.setAgentState(rt.REFLECT)),console.log(`[GameBridge] ✓ ensured ${o} in ${m} palette=${h}`)}catch(g){console.error(`[GameBridge] ✗ ensureAgent failed for ${o}:`,g)}}i.length===0&&r.length===0&&(console.warn("[GameBridge] applySnapshot — empty snapshot, creating fallback agent"),this.scene.ensureAgent("openopc-main","OpenOPC")),console.log("[GameBridge] applySnapshot done — total agents:",this.scene.agents.size),this.emit("snapshotApplied",t)}}const QM="assets/office-bg.png";function JM({bridge:e}){const t=C.useRef(null),n=C.useRef(null),i=C.useRef(!1),[r,o]=C.useState(()=>Kn()),[a,c]=C.useState(()=>Kn()[0]?.id??"office-0"),d=r.find(te=>te.id===a)??r[0],[m,h]=C.useState(()=>gg(d?.mapStr??ru,Xn,dr)),[p,g]=C.useState(()=>[...d?.seats??su]),[x,v]=C.useState("wall"),[b,k]=C.useState(!1),[w,S]=C.useState(!1),[j,N]=C.useState(!1),[O,R]=C.useState(1),[D,I]=C.useState(!0),L=Xn,M=dr,A=te=>{const se=Kn();o(se),c(te);const ae=se.find(ue=>ue.id===te);ae&&(h(gg(ae.mapStr,Xn,dr)),g([...ae.seats])),N(!1)};C.useEffect(()=>{const te=new Image;te.crossOrigin="anonymous",te.onload=()=>{n.current=te,k(!0)},te.onerror=()=>{n.current=null,k(!0)},te.src=QM},[]);const B=C.useCallback(()=>{const te=t.current;if(!te)return;const se=te.getContext("2d");if(!se)return;const ae=L*T,ue=M*T;te.width=ae,te.height=ue,se.clearRect(0,0,ae,ue),n.current?se.drawImage(n.current,0,0,ae,ue):(se.fillStyle="#3d3d3d",se.fillRect(0,0,ae,ue));for(let ie=0;ie<M;ie++)for(let we=0;we<L;we++){const je=we*T,Te=ie*T,Ge=m[ie]?.[we]===1;se.fillStyle=Ge?"rgba(255, 40, 40, 0.35)":"rgba(40, 255, 40, 0.2)",se.fillRect(je,Te,T,T)}for(const[ie,we]of p){const je=ie*T+T/2,Te=we*T+T/2;se.beginPath(),se.arc(je,Te,9,0,Math.PI*2),se.fillStyle="rgba(255, 220, 0, 0.85)",se.fill(),se.strokeStyle="#000",se.lineWidth=1.5,se.stroke()}if(D){se.strokeStyle="rgba(255, 255, 255, 0.15)",se.lineWidth=.5;for(let ie=0;ie<=L;ie++)se.beginPath(),se.moveTo(ie*T,0),se.lineTo(ie*T,ue),se.stroke();for(let ie=0;ie<=M;ie++)se.beginPath(),se.moveTo(0,ie*T),se.lineTo(ae,ie*T),se.stroke();se.font="10px monospace",se.textBaseline="top";for(let ie=0;ie<L;ie++)se.fillStyle="rgba(255,255,255,0.6)",se.fillText(String(ie),ie*T+2,2);for(let ie=0;ie<M;ie++)se.fillStyle="rgba(255,255,255,0.6)",se.fillText(String(ie),2,ie*T+2)}},[m,p,L,M,D,b]);C.useEffect(()=>{B()},[B]);const W=te=>{const se=t.current;if(!se)return null;const ae=se.getBoundingClientRect(),ue=se.width/ae.width,ie=se.height/ae.height,we=Math.floor((te.clientX-ae.left)*ue/T),je=Math.floor((te.clientY-ae.top)*ie/T);return we<0||we>=L||je<0||je>=M?null:{c:we,r:je}},P=C.useCallback((te,se)=>{if(N(!1),x==="seat")g(ae=>{const ue=ae.findIndex(([ie,we])=>ie===te&&we===se);return ue>=0?ae.filter((ie,we)=>we!==ue):[...ae,[te,se]]}),h(ae=>{if(ae[se]?.[te]===1){const ue=ae.map(ie=>[...ie]);return ue[se][te]=0,ue}return ae});else{const ae=x==="wall"?1:0;h(ue=>{if(ue[se]?.[te]===ae)return ue;const ie=ue.map(we=>[...we]);return ie[se][te]=ae,ie}),x==="wall"&&g(ue=>ue.filter(([ie,we])=>!(ie===te&&we===se)))}},[x]),G=te=>{if(te.button!==0)return;i.current=!0;const se=W(te);se&&P(se.c,se.r)},$=te=>{if(!i.current||x==="seat")return;const se=W(te);se&&P(se.c,se.r)},q=()=>{i.current=!1},Y=()=>{const te=zk(m);e.rebuildOfficeCollision(a,te,p),N(!0),o(Kn()),setTimeout(()=>N(!1),2e3)},Q=()=>S(te=>!te),V=()=>{h(gg(ru,Xn,dr)),g([...su]),N(!1)},U=(()=>{const se=zk(m).map((ue,ie)=>` '${ue}', // ${ie}`).join(` +`),ae=p.map(([ue,ie])=>` [${ue}, ${ie}],`).join(` +`);return`const MAP_STR: string[] = [ +${se} +] + +const SEATS: [number, number][] = [ +${ae} +]`})(),Z=()=>R(te=>Math.min(te+.25,3)),F=()=>R(te=>Math.max(te-.25,.5)),K=m.flat().filter(te=>te===1).length,ee=m.flat().filter(te=>te===0).length;return u.jsxs("div",{className:"collision-editor",children:[u.jsxs("div",{className:"ce-toolbar",children:[u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("span",{className:"ce-title",children:"Map Editor"}),u.jsx("select",{className:"ce-office-select",value:a,onChange:te=>A(te.target.value),children:r.map(te=>u.jsx("option",{value:te.id,children:te.name},te.id))})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsxs("button",{className:`ce-mode-btn ${x==="wall"?"active wall":""}`,onClick:()=>v("wall"),children:[u.jsx("span",{className:"ce-mode-dot wall"})," Wall"]}),u.jsxs("button",{className:`ce-mode-btn ${x==="floor"?"active floor":""}`,onClick:()=>v("floor"),children:[u.jsx("span",{className:"ce-mode-dot floor"})," Floor"]}),u.jsxs("button",{className:`ce-mode-btn ${x==="seat"?"active seat":""}`,onClick:()=>v("seat"),children:[u.jsx("span",{className:"ce-mode-dot seat"})," Seat"]})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("button",{className:"ce-btn",onClick:F,children:"-"}),u.jsxs("span",{className:"ce-zoom-label",children:[Math.round(O*100),"%"]}),u.jsx("button",{className:"ce-btn",onClick:Z,children:"+"}),u.jsx("button",{className:`ce-btn${D?" active":""}`,onClick:()=>I(te=>!te),children:"Grid"})]}),u.jsxs("div",{className:"ce-toolbar-group",children:[u.jsx("button",{className:`ce-btn apply${j?" success":""}`,onClick:Y,children:j?"Applied":"Apply"}),u.jsx("button",{className:`ce-btn${w?" active":""}`,onClick:Q,children:"Export"}),u.jsx("button",{className:"ce-btn danger",onClick:V,children:"Reset"})]}),u.jsxs("div",{className:"ce-toolbar-group ce-stats",children:[u.jsxs("span",{children:["Walls: ",K]}),u.jsxs("span",{children:["Floor: ",ee]}),u.jsxs("span",{children:["Seats: ",p.length]})]})]}),u.jsxs("div",{className:"ce-body",children:[u.jsx("div",{className:"ce-canvas-wrap",style:{overflow:"auto"},children:u.jsx("canvas",{ref:t,style:{width:L*T*O,height:M*T*O,imageRendering:"pixelated",cursor:x==="seat"?"crosshair":"cell"},onMouseDown:G,onMouseMove:$,onMouseUp:q,onMouseLeave:q})}),w&&u.jsxs("div",{className:"ce-export-panel",children:[u.jsxs("div",{className:"ce-export-header",children:[u.jsx("span",{children:"Export — copy to source code"}),u.jsx("button",{className:"ce-btn",onClick:()=>navigator.clipboard.writeText(U),children:"Copy"})]}),u.jsx("textarea",{className:"ce-export-textarea",value:U,readOnly:!0,rows:20})]})]})]})}let e4=0;function gi(e,t,n={}){return{event_id:`test-${++e4}`,type:e,agent_id:t,data:n,timestamp:Date.now()/1e3}}function Pn(e){return new Promise(t=>setTimeout(t,e))}async function t4(e){const t=[],n=e.getScene();if(!n)return t.push({name:"scene-ready",pass:!1,detail:"OfficeScene not initialized"}),t;console.log("%c[EventTest] Starting full event test suite (multi-office)...","color: #6366f1; font-weight: bold");for(const A of[...n.agents.keys()])n.removeAgent(A);await Pn(100);const i=Kn();t.push({name:"offices-loaded",pass:i.length>=3,detail:`${i.length} offices loaded: ${i.map(A=>A.name).join(", ")}`});const r=["agent-A","agent-B","agent-C","agent-D","agent-E","agent-F"];for(const A of r)e.pushEvent(gi("agent_active",A));await Pn(300);const o=new Set;let a=!1;for(const A of r){const B=n.getAgent(A);B&&B.seatId&&(o.has(B.seatId)&&(a=!0),o.add(B.seatId))}t.push({name:"desk-assignment-unique",pass:!a&&o.size===r.length,detail:`Assigned ${o.size} unique seats to ${r.length} agents. IDs: [${[...o].join(", ")}]`});const c=r.every(A=>n.getAgent(A)?.officeId!=null);t.push({name:"agents-have-officeId",pass:c,detail:r.map(A=>`${A}=${n.getAgent(A)?.officeId}`).join(", ")}),e.pushEvent(gi("tool_start","agent-A",{tool_name:"shell"})),await Pn(200);const d=n.getAgent("agent-A");t.push({name:"tool_start-state",pass:d.isActive===!0&&d.currentTool==="shell",detail:`isActive=${d.isActive}, currentTool=${d.currentTool}`}),e.pushEvent(gi("tool_done","agent-A",{tool_name:"shell"})),await Pn(100),t.push({name:"tool_done-celebrate",pass:d.agentState==="celebrate",detail:`state=${d.agentState}`});for(let A=0;A<20&&d.agentState==="celebrate";A++)await Pn(500);t.push({name:"celebrate-to-idle",pass:d.agentState!=="celebrate",detail:`state=${d.agentState}`}),e.pushEvent(gi("waiting","agent-B")),await Pn(200);const m=n.getAgent("agent-B");t.push({name:"waiting-state",pass:m.isActive===!1&&(m.agentState==="walk"||m.agentState==="idle"||m.agentState==="coffee"),detail:`isActive=${m.isActive}, state=${m.agentState}`}),e.pushEvent(gi("reflect_start","agent-C")),await Pn(200);const h=n.getAgent("agent-C");t.push({name:"reflect_start-state",pass:h.currentTool==="Reflect"&&(h.agentState==="walk"||h.agentState==="reflect"),detail:`currentTool=${h.currentTool}, state=${h.agentState}`}),e.pushEvent(gi("reflect_done","agent-C")),await Pn(100),t.push({name:"reflect_done-celebrate",pass:h.agentState==="celebrate",detail:`state=${h.agentState}`});const p=["agent-A","agent-B","agent-C","agent-D"];for(const A of p)e.pushEvent(gi("collab_started",A));await Pn(4e3);const g=new Map;let x=!1;for(const A of p){const B=n.getAgent(A);if(!B)continue;const W=B.getTilePos(),P=`${W.x},${W.y}`;g.has(P)&&(x=!0),g.set(P,A)}t.push({name:"collab-no-overlap",pass:!x,detail:`${p.length} agents, ${g.size} unique positions`});for(const A of p)e.pushEvent(gi("collab_ended",A));await Pn(100);const v=p.every(A=>n.getAgent(A)?.agentState==="celebrate");t.push({name:"collab_ended-celebrate",pass:v,detail:p.map(A=>`${A}=${n.getAgent(A)?.agentState}`).join(", ")}),await Pn(3e3),e.pushEvent(gi("practice_start","agent-E",{target_domain:"TypeScript"})),await Pn(200);const b=n.getAgent("agent-E");t.push({name:"practice_start-state",pass:b.currentTool==="Practice"&&(b.agentState==="walk"||b.agentState==="practice"),detail:`currentTool=${b.currentTool}, state=${b.agentState}`}),e.pushEvent(gi("practice_done","agent-E")),await Pn(100),t.push({name:"practice_done-celebrate",pass:b.agentState==="celebrate",detail:`state=${b.agentState}`}),await Pn(3e3),e.pushEvent(gi("task_delegated","agent-A",{target:"agent-B"})),await Pn(100),t.push({name:"task_delegated-chat",pass:d.agentState==="chat",detail:`state=${d.agentState}`}),e.pushEvent(gi("delegation_done","agent-A",{target:"agent-B"})),await Pn(300),t.push({name:"delegation_done-return",pass:["idle","walk","type"].includes(d.agentState),detail:`state=${d.agentState}`});const k=n.getAgent("agent-F");e.pushEvent(gi("message_in","agent-F",{content_preview:"Hello test"})),await Pn(200),t.push({name:"message_in-active",pass:k.isActive===!0,detail:`isActive=${k.isActive}, state=${k.agentState}`}),e.pushEvent(gi("message_out","agent-F",{content_preview:"Reply test"})),await Pn(100),t.push({name:"message_out-bubble",pass:k.bubbleText?.includes("Reply")===!0,detail:`bubble="${k.bubbleText}"`}),e.pushEvent(gi("subagent_spawn","subagent-test-1",{parent_agent_id:"agent-A"})),await Pn(200);const w=n.getAgent("subagent-test-1");t.push({name:"subagent_spawn-created",pass:w!=null&&w.isSubagent===!0,detail:`created=${!!w}, isSubagent=${w?.isSubagent}`}),e.pushEvent(gi("subagent_done","subagent-test-1")),await Pn(5e3),t.push({name:"subagent_done-removed",pass:n.getAgent("subagent-test-1")==null,detail:`still exists=${!!n.getAgent("subagent-test-1")}`}),e.pushEvent(gi("task_routed","agent-E",{method:"auto"})),await Pn(200),t.push({name:"task_routed-active",pass:b.isActive===!0,detail:`isActive=${b.isActive}, state=${b.agentState}`}),e.pushEvent(gi("agent_removed","agent-F")),await Pn(5e3),t.push({name:"agent_removed-destroyed",pass:n.getAgent("agent-F")==null,detail:`still exists=${!!n.getAgent("agent-F")}`}),e.pushEvent(gi("mycelium_crystallize","agent-A",{corroborating_agents:["agent-B","agent-C"],content_preview:"Shared knowledge"})),await Pn(4e3);const S=new Map;let j=!1;for(const A of["agent-A","agent-B","agent-C"]){const B=n.getAgent(A);if(!B)continue;const W=B.getTilePos(),P=`${W.x},${W.y}`;S.has(P)&&(j=!0),S.set(P,A)}t.push({name:"crystal-no-overlap",pass:!j,detail:`3 agents, ${S.size} unique positions`});const N=new Map;let O=!1;for(const A of n.agents.values())A.seatId&&(N.has(A.seatId)&&(O=!0),N.set(A.seatId,A.agentId));t.push({name:"desk-seat-no-conflict",pass:!O,detail:`${N.size} desk seats assigned, conflict=${O}`});const R=n.getAgent("agent-D");if(R){const A=R.officeId,B=i.find(P=>P.id!==A)??i[1];e.assignAgentToOffice("agent-D",B.id),await Pn(300);const W=R.officeId;t.push({name:"reassign-office",pass:W===B.id&&W!==A,detail:`${A} → ${W} (expected ${B.id})`})}else t.push({name:"reassign-office",pass:!1,detail:"agent-D not found"});const D=new Map;let I=!1;for(const A of n.agents.values())A.seatId&&(D.has(A.seatId)&&(I=!0),D.set(A.seatId,A.agentId));t.push({name:"cross-office-seat-unique",pass:!I,detail:`${D.size} seats, conflict=${I}`});const L=t.filter(A=>A.pass).length,M=t.filter(A=>!A.pass).length;console.log(""),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold"),console.log(`%c[EventTest] Results: ${L} passed, ${M} failed, ${t.length} total`,`color: ${M>0?"#f87171":"#34d399"}; font-weight: bold`),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold");for(const A of t){const B=A.pass?"✅":"❌",W=A.pass?"color: #34d399":"color: #f87171; font-weight: bold";console.log(`%c ${B} ${A.name}: ${A.detail}`,W)}return t}function n4(e){window.__runEventTests=()=>t4(e),window.__bridge=e,console.log("%c[EventTest] Test runner ready. Run: window.__runEventTests()","color: #fbbf24; font-weight: bold")}const i4={queued:"todo",ready:"todo",ready_for_rework:"todo",waiting_dependencies:"todo",running:"in-progress",waiting_for_peer:"in-progress",waiting_for_children:"in-progress",paused:"in-progress",needs_attention:"in-progress",awaiting_manager_review:"in-review",awaiting_human:"in-review",approved:"done",failed:"done",cancelled:"done"};function r4(e){return e?i4[e]??"todo":"todo"}function s4(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function o4(e,t){switch(t.type){case"SET":return t.boards;case"UPDATE_NAME":return e.map(n=>n.id===t.boardId?{...n,name:t.name}:n);default:return e}}function a4(e,t){return t.type==="SET"?t.columns:e}function l4(e,t){const n=Date.now();switch(t.type){case"SET":return t.tasks;case"ADD":return e.some(i=>i.id===t.task.id)?e:[...e,t.task];case"UPDATE":return e.map(i=>i.id===t.id?{...i,...t.partial,updatedAt:n}:i);case"DELETE":return e.filter(i=>i.id!==t.id);case"MOVE":return e.map(i=>i.id===t.id?{...i,columnId:t.columnId,sortOrder:t.sortOrder,updatedAt:n}:i);case"ASSIGN":return e.map(i=>i.id===t.taskId?{...i,assigneeIds:t.agentIds,updatedAt:n}:i);case"REMOVE_ASSIGNEE":return e.map(i=>i.assigneeIds.includes(t.agentId)?{...i,assigneeIds:i.assigneeIds.filter(r=>r!==t.agentId),updatedAt:n}:i);default:return e}}function c4(){const[e,t]=C.useReducer(o4,[]),[n,i]=C.useReducer(a4,[]),[r,o]=C.useReducer(l4,[]),[a,c]=C.useState(null),[d,m]=C.useState("default"),h=C.useMemo(()=>e.find(D=>D.id===a)??null,[e,a]),p=C.useMemo(()=>n.filter(D=>D.boardId===a).sort((D,I)=>D.sortOrder-I.sortOrder),[n,a]),g=C.useMemo(()=>{const D=r.filter(L=>L.boardId===a),I={};for(const L of p)I[L.id]=[];for(const L of D){const M=L.phase?r4(L.phase):L.columnId;I[M]&&I[M].push(L)}for(const L of Object.keys(I))I[L].sort((M,A)=>M.sortOrder-A.sortOrder);return I},[r,a,p]),x=C.useCallback(D=>{const I=e.find(B=>B.id===D.boardId),L=I?.nextTaskNum??1,M=I?.prefix??"T",A={id:D.taskId??`task-${s4()}`,displayId:D.displayId??`${M}-${String(L).padStart(3,"0")}`,boardId:D.boardId,columnId:D.columnId,title:D.title,description:D.description,priority:D.priority??null,assigneeIds:D.assigneeIds??[],tags:D.tags??[],sortOrder:L,createdAt:Date.now(),updatedAt:Date.now()};return o({type:"ADD",task:A}),A},[e]),v=C.useCallback((D,I)=>o({type:"UPDATE",id:D,partial:I}),[]),b=C.useCallback(D=>o({type:"DELETE",id:D}),[]),k=C.useCallback((D,I,L)=>o({type:"MOVE",id:D,columnId:I,sortOrder:L}),[]),w=C.useCallback((D,I)=>o({type:"ASSIGN",taskId:D,agentIds:I}),[]),S=C.useCallback(()=>{const D=new Set(n.filter(I=>I.isTerminal).map(I=>I.id));return r.filter(I=>!D.has(I.columnId)).length},[r,n]),j=C.useCallback(D=>{o({type:"REMOVE_ASSIGNEE",agentId:D})},[]),N=C.useCallback((D,I,L,M,A)=>{const B=D||"default",W=B!==d,P=!W&&!!A?.preserveTasksWhenIncomingEmpty&&M.length===0;m(B),t({type:"SET",boards:I}),i({type:"SET",columns:L}),o({type:"SET",tasks:P?r:M}),c(G=>!W&&G&&I.some($=>$.id===G)?G:null)},[d,r]),O=C.useCallback(D=>{c(D)},[]),R=C.useCallback((D,I)=>{t({type:"UPDATE_NAME",boardId:D,name:I})},[]);return C.useMemo(()=>({scopeProjectId:d,boards:e,columns:n,tasks:r,activeBoardId:a,activeBoard:h,activeBoardColumns:p,tasksByColumn:g,setActiveBoard:O,createTask:x,updateTask:v,deleteTask:b,moveTask:k,assignTask:w,dispatchTask:o,getOpenTaskCount:S,removeAssignee:j,initFromBackend:N,updateBoardName:R}),[d,e,n,r,a,h,p,g,O,x,v,b,k,w,o,S,j,N,R])}var Tm=Bj();const u4=da(Tm);function Za(e,t,n){let i=n.initialDeps??[],r,o=!0;function a(){var c,d,m;let h;n.key&&((c=n.debug)!=null&&c.call(n))&&(h=Date.now());const p=e();if(!(p.length!==i.length||p.some((v,b)=>i[b]!==v)))return r;i=p;let x;if(n.key&&((d=n.debug)!=null&&d.call(n))&&(x=Date.now()),r=t(...p),n.key&&((m=n.debug)!=null&&m.call(n))){const v=Math.round((Date.now()-h)*100)/100,b=Math.round((Date.now()-x)*100)/100,k=b/16,w=(S,j)=>{for(S=String(S);S.length<j;)S=" "+S;return S};console.info(`%c⏱ ${w(b,5)} /${w(v,5)} ms`,` + font-size: .6rem; + font-weight: bold; + color: hsl(${Math.max(0,Math.min(120-120*k,120))}deg 100% 31%);`,n?.key)}return n?.onChange&&!(o&&n.skipInitialOnChange)&&n.onChange(r),o=!1,r}return a.updateDeps=c=>{i=c},a}function Wk(e,t){if(e===void 0)throw new Error("Unexpected undefined");return e}const d4=(e,t)=>Math.abs(e-t)<1.01,f4=(e,t,n)=>{let i;return function(...r){e.clearTimeout(i),i=e.setTimeout(()=>t.apply(this,r),n)}},Yk=e=>{const{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},m4=e=>e,p4=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),i=[];for(let r=t;r<=n;r++)i.push(r);return i},h4=(e,t)=>{const n=e.scrollElement;if(!n)return;const i=e.targetWindow;if(!i)return;const r=a=>{const{width:c,height:d}=a;t({width:Math.round(c),height:Math.round(d)})};if(r(Yk(n)),!i.ResizeObserver)return()=>{};const o=new i.ResizeObserver(a=>{const c=()=>{const d=a[0];if(d?.borderBoxSize){const m=d.borderBoxSize[0];if(m){r({width:m.inlineSize,height:m.blockSize});return}}r(Yk(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(c):c()});return o.observe(n,{box:"border-box"}),()=>{o.unobserve(n)}},Xk={passive:!0},Kk=typeof window>"u"?!0:"onscrollend"in window,g4=(e,t)=>{const n=e.scrollElement;if(!n)return;const i=e.targetWindow;if(!i)return;let r=0;const o=e.options.useScrollendEvent&&Kk?()=>{}:f4(i,()=>{t(r,!1)},e.options.isScrollingResetDelay),a=h=>()=>{const{horizontal:p,isRtl:g}=e.options;r=p?n.scrollLeft*(g&&-1||1):n.scrollTop,o(),t(r,h)},c=a(!0),d=a(!1);n.addEventListener("scroll",c,Xk);const m=e.options.useScrollendEvent&&Kk;return m&&n.addEventListener("scrollend",d,Xk),()=>{n.removeEventListener("scroll",c),m&&n.removeEventListener("scrollend",d)}},y4=(e,t,n)=>{if(t?.borderBoxSize){const i=t.borderBoxSize[0];if(i)return Math.round(i[n.options.horizontal?"inlineSize":"blockSize"])}return e[n.options.horizontal?"offsetWidth":"offsetHeight"]},x4=(e,{adjustments:t=0,behavior:n},i)=>{var r,o;const a=e+t;(o=(r=i.scrollElement)==null?void 0:r.scrollTo)==null||o.call(r,{[i.options.horizontal?"left":"top"]:a,behavior:n})};class v4{constructor(t){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var n,i,r;return((r=(i=(n=this.targetWindow)==null?void 0:n.performance)==null?void 0:i.now)==null?void 0:r.call(i))??Date.now()},this.observer=(()=>{let n=null;const i=()=>n||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:n=new this.targetWindow.ResizeObserver(r=>{r.forEach(o=>{const a=()=>{const c=o.target,d=this.indexFromElement(c);if(!c.isConnected){this.observer.unobserve(c);return}this.shouldMeasureDuringScroll(d)&&this.resizeItem(d,this.options.measureElement(c,o,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(a):a()})}));return{disconnect:()=>{var r;(r=i())==null||r.disconnect(),n=null},observe:r=>{var o;return(o=i())==null?void 0:o.observe(r,{box:"border-box"})},unobserve:r=>{var o;return(o=i())==null?void 0:o.unobserve(r)}}})(),this.range=null,this.setOptions=n=>{Object.entries(n).forEach(([i,r])=>{typeof r>"u"&&delete n[i]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:m4,rangeExtractor:p4,onChange:()=>{},measureElement:y4,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...n}},this.notify=n=>{var i,r;(r=(i=this.options).onChange)==null||r.call(i,this,n)},this.maybeNotify=Za(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),n=>{this.notify(n)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(n=>n()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var n;const i=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==i){if(this.cleanup(),!i){this.maybeNotify();return}this.scrollElement=i,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((n=this.scrollElement)==null?void 0:n.window)??null,this.elementsCache.forEach(r=>{this.observer.observe(r)}),this.unsubs.push(this.options.observeElementRect(this,r=>{this.scrollRect=r,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(r,o)=>{this.scrollAdjustments=0,this.scrollDirection=o?this.getScrollOffset()<r?"forward":"backward":null,this.scrollOffset=r,this.isScrolling=o,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(n,i)=>{const r=new Map,o=new Map;for(let a=i-1;a>=0;a--){const c=n[a];if(r.has(c.lane))continue;const d=o.get(c.lane);if(d==null||c.end>d.end?o.set(c.lane,c):c.end<d.end&&r.set(c.lane,!0),r.size===this.options.lanes)break}return o.size===this.options.lanes?Array.from(o.values()).sort((a,c)=>a.end===c.end?a.index-c.index:a.end-c.end)[0]:void 0},this.getMeasurementOptions=Za(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(n,i,r,o,a,c)=>(this.prevLanes!==void 0&&this.prevLanes!==c&&(this.lanesChangedFlag=!0),this.prevLanes=c,this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:i,scrollMargin:r,getItemKey:o,enabled:a,lanes:c}),{key:!1}),this.getMeasurements=Za(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:i,scrollMargin:r,getItemKey:o,enabled:a,lanes:c},d)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>n)for(const g of this.laneAssignments.keys())g>=n&&this.laneAssignments.delete(g);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(g=>{this.itemSizeCache.set(g.key,g.size)}));const m=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===n&&(this.lanesSettling=!1);const h=this.measurementsCache.slice(0,m),p=new Array(c).fill(void 0);for(let g=0;g<m;g++){const x=h[g];x&&(p[x.lane]=g)}for(let g=m;g<n;g++){const x=o(g),v=this.laneAssignments.get(g);let b,k;if(v!==void 0&&this.options.lanes>1){b=v;const N=p[b],O=N!==void 0?h[N]:void 0;k=O?O.end+this.options.gap:i+r}else{const N=this.options.lanes===1?h[g-1]:this.getFurthestMeasurement(h,g);k=N?N.end+this.options.gap:i+r,b=N?N.lane:g%this.options.lanes,this.options.lanes>1&&this.laneAssignments.set(g,b)}const w=d.get(x),S=typeof w=="number"?w:this.options.estimateSize(g),j=k+S;h[g]={index:g,start:k,size:S,end:j,key:x,lane:b},p[b]=g}return this.measurementsCache=h,h},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Za(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(n,i,r,o)=>this.range=n.length>0&&i>0?b4({measurements:n,outerSize:i,scrollOffset:r,lanes:o}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=Za(()=>{let n=null,i=null;const r=this.calculateRange();return r&&(n=r.startIndex,i=r.endIndex),this.maybeNotify.updateDeps([this.isScrolling,n,i]),[this.options.rangeExtractor,this.options.overscan,this.options.count,n,i]},(n,i,r,o,a)=>o===null||a===null?[]:n({startIndex:o,endIndex:a,overscan:i,count:r}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=n=>{const i=this.options.indexAttribute,r=n.getAttribute(i);return r?parseInt(r,10):(console.warn(`Missing attribute name '${i}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=n=>{var i;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const r=this.scrollState.index??((i=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:i.index);if(r!==void 0&&this.range){const o=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),a=Math.max(0,r-o),c=Math.min(this.options.count-1,r+o);return n>=a&&n<=c}return!0},this.measureElement=n=>{if(!n){this.elementsCache.forEach((a,c)=>{a.isConnected||(this.observer.unobserve(a),this.elementsCache.delete(c))});return}const i=this.indexFromElement(n),r=this.options.getItemKey(i),o=this.elementsCache.get(r);o!==n&&(o&&this.observer.unobserve(o),this.observer.observe(n),this.elementsCache.set(r,n)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(i)&&this.resizeItem(i,this.options.measureElement(n,void 0,this))},this.resizeItem=(n,i)=>{var r;const o=this.measurementsCache[n];if(!o)return;const a=this.itemSizeCache.get(o.key)??o.size,c=i-a;c!==0&&(((r=this.scrollState)==null?void 0:r.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(o,c,this):o.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=c,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(o.index),this.itemSizeCache=new Map(this.itemSizeCache.set(o.key,i)),this.notify(!1))},this.getVirtualItems=Za(()=>[this.getVirtualIndexes(),this.getMeasurements()],(n,i)=>{const r=[];for(let o=0,a=n.length;o<a;o++){const c=n[o],d=i[c];r.push(d)}return r},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=n=>{const i=this.getMeasurements();if(i.length!==0)return Wk(i[Kj(0,i.length-1,r=>Wk(i[r]).start,n)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const n=this.scrollElement.document.documentElement;return this.options.horizontal?n.scrollWidth-this.scrollElement.innerWidth:n.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(n,i,r=0)=>{if(!this.scrollElement)return 0;const o=this.getSize(),a=this.getScrollOffset();i==="auto"&&(i=n>=a+o?"end":"start"),i==="center"?n+=(r-o)/2:i==="end"&&(n-=o);const c=this.getMaxScrollOffset();return Math.max(Math.min(c,n),0)},this.getOffsetForIndex=(n,i="auto")=>{n=Math.max(0,Math.min(n,this.options.count-1));const r=this.getSize(),o=this.getScrollOffset(),a=this.measurementsCache[n];if(!a)return;if(i==="auto")if(a.end>=o+r-this.options.scrollPaddingEnd)i="end";else if(a.start<=o+this.options.scrollPaddingStart)i="start";else return[o,i];if(i==="end"&&n===this.options.count-1)return[this.getMaxScrollOffset(),i];const c=i==="end"?a.end+this.options.scrollPaddingEnd:a.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(c,i,a.size),i]},this.scrollToOffset=(n,{align:i="start",behavior:r="auto"}={})=>{const o=this.getOffsetForAlignment(n,i),a=this.now();this.scrollState={index:null,align:i,behavior:r,startedAt:a,lastTargetOffset:o,stableFrames:0},this._scrollToOffset(o,{adjustments:void 0,behavior:r}),this.scheduleScrollReconcile()},this.scrollToIndex=(n,{align:i="auto",behavior:r="auto"}={})=>{n=Math.max(0,Math.min(n,this.options.count-1));const o=this.getOffsetForIndex(n,i);if(!o)return;const[a,c]=o,d=this.now();this.scrollState={index:n,align:c,behavior:r,startedAt:d,lastTargetOffset:a,stableFrames:0},this._scrollToOffset(a,{adjustments:void 0,behavior:r}),this.scheduleScrollReconcile()},this.scrollBy=(n,{behavior:i="auto"}={})=>{const r=this.getScrollOffset()+n,o=this.now();this.scrollState={index:null,align:"start",behavior:i,startedAt:o,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:i}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var n;const i=this.getMeasurements();let r;if(i.length===0)r=this.options.paddingStart;else if(this.options.lanes===1)r=((n=i[i.length-1])==null?void 0:n.end)??0;else{const o=Array(this.options.lanes).fill(null);let a=i.length-1;for(;a>=0&&o.some(c=>c===null);){const c=i[a];o[c.lane]===null&&(o[c.lane]=c.end),a--}r=Math.max(...o.filter(c=>c!==null))}return Math.max(r-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(n,{adjustments:i,behavior:r})=>{this.options.scrollToFn(n,{behavior:r,adjustments:i},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(t)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const i=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,r=i?i[0]:this.scrollState.lastTargetOffset,o=1,a=r!==this.scrollState.lastTargetOffset;if(!a&&d4(r,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=o){this.scrollState=null;return}}else this.scrollState.stableFrames=0,a&&(this.scrollState.lastTargetOffset=r,this.scrollState.behavior="auto",this._scrollToOffset(r,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const Kj=(e,t,n,i)=>{for(;e<=t;){const r=(e+t)/2|0,o=n(r);if(o<i)e=r+1;else if(o>i)t=r-1;else return r}return e>0?e-1:0};function b4({measurements:e,outerSize:t,scrollOffset:n,lanes:i}){const r=e.length-1,o=d=>e[d].start;if(e.length<=i)return{startIndex:0,endIndex:r};let a=Kj(0,r,o,n),c=a;if(i===1)for(;c<r&&e[c].end<n+t;)c++;else if(i>1){const d=Array(i).fill(0);for(;c<r&&d.some(h=>h<n+t);){const h=e[c];d[h.lane]=h.end,c++}const m=Array(i).fill(n+t);for(;a>=0&&m.some(h=>h>=n);){const h=e[a];m[h.lane]=h.start,a--}a=Math.max(0,a-a%i),c=Math.min(r,c+(i-1-c%i))}return{startIndex:a,endIndex:c}}const Zk=typeof document<"u"?C.useLayoutEffect:C.useEffect;function _4({useFlushSync:e=!0,...t}){const n=C.useReducer(()=>({}),{})[1],i={...t,onChange:(o,a)=>{var c;e&&a?Tm.flushSync(n):n(),(c=t.onChange)==null||c.call(t,o,a)}},[r]=C.useState(()=>new v4(i));return r.setOptions(i),Zk(()=>r._didMount(),[]),Zk(()=>r._willUpdate()),r}function k4(e){return _4({observeElementRect:h4,observeElementOffset:g4,scrollToFn:x4,...e})}function S4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 2C9.5 2 7.5 3.5 7 5.5C5 5.5 3 7.5 3 10C3 12 4.5 13.5 6 14V20C6 21.1 6.9 22 8 22H16C17.1 22 18 21.1 18 20V14C19.5 13.5 21 12 21 10C21 7.5 19 5.5 17 5.5C16.5 3.5 14.5 2 12 2Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M12 2V8M8 6H16M12 14V18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Rm(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94L6.73 20.15a2.12 2.12 0 0 1-3-3l6.72-6.72a6 6 0 0 1 7.94-7.94L14.7 6.3z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Zj(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"4",y:"4",width:"16",height:"16",rx:"3",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"8",y:"8",width:"8",height:"8",rx:"1.5",fill:"currentColor"})]})}function w4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M5 12L3 3L21 12L3 21L5 12ZM5 12H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Am(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Fl(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M20 6L9 17L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function C4(){return u.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M13 8H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M17 12H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function j4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66L9.41 17.41a2 2 0 0 1-2.83-2.83l8.49-8.49",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function ss({down:e}){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{transition:"transform 200ms",transform:e?"rotate(90deg)":"none"},children:u.jsx("path",{d:"M9 18L15 12L9 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function E4(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M12 5V19M5 12H19",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}function Mv(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"11",cy:"11",r:"8",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M21 21L16.65 16.65",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function N4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M3 6H5H21",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2M19 6L18.13 20.11A2 2 0 0 1 16.14 22H7.86a2 2 0 0 1-2-1.89L5 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function I4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"})]})}function Qj(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M22 12H18L15 21L9 3L6 12H2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function gu(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function bl(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.582a.5.5 0 0 1 0 .962L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Jj(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M5 12h14",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"m12 5 7 7-7 7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function T4(){return u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9 11L12 14L22 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M21 12V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function Qk(){return u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M13 2L3 14H12L11 22L21 10H12L13 2Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Mm(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M4 18H10V14H4V18Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M8 14H14V10H8V14Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M12 10H18V6H12V10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M18 8L21 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function R4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M9 12L11 14L15 10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function A4(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M15 9L9 15M9 9L15 15",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Lc(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M12 6V12L16 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Uf(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M7 17L2 12L7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M17 7L22 12L17 17",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M2 12H22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function _l(){return u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M12 2V22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("circle",{cx:"12",cy:"6",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("circle",{cx:"12",cy:"12",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("circle",{cx:"12",cy:"18",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),u.jsx("path",{d:"M14 6H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M14 12H18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),u.jsx("path",{d:"M14 18H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Dm(){return u.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:u.jsx("path",{d:"M18 6L6 18M6 6L18 18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Jk({size:e=12}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function M4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("circle",{cx:"12",cy:"8",r:"5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 21a8 8 0 0 0-16 0",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function D4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M10 6h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 10h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 14h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M10 18h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function O4({size:e=14}={}){return u.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[u.jsx("path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .962 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.582a.5.5 0 0 1 0 .962L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.962 0z",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),u.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}const sl=new Set(["done","failed","cancelled"]),L4=new Set(["company","org","custom"]),z4=new Set(["idle","done","failed","cancelled"]);function Om(e){return sl.has(e.status)?"idle":e.agentStatus==="reflecting"||e.agentStatus==="tool_active"?e.agentStatus:e.runtimeControlState&&e.runtimeControlState!=="running"&&e.runtimeControlState!=="suspending"&&e.runtimeControlState!=="resuming"?"idle":e.status==="running"?"reflecting":"idle"}function os(e){return Om(e)!=="idle"}function P4(e){if(!e)return!1;const t=String(e.execMode??"").trim().toLowerCase(),n=t==="task";return L4.has(t)||!!e.isCompanyRuntime||!!e.parentSessionId||!!e.orgId||!!e.workItemProjectionId||!!e.roleWorkItems||!!e.executorRoleWorkItems||!!e.companyProfile&&!n}function B4(e,t){if(!P4(e))return{};const n=String(t??"").trim().toLowerCase();if(n==="running")return{runtimeControlState:"running",canStop:!0,canResume:!1};if(z4.has(n)){const i=e?.runtimeControlState;return i==="suspending"||i==="suspended"?{}:{runtimeControlState:"idle",canStop:!1,canResume:!1}}return{}}function _g(e){if(!(typeof e!="number"||!Number.isFinite(e)))return e}function eS(e){return Math.max(0,Math.min(Math.round(e),100))}function eE(e){const t=_g(e?.contextTokens),n=_g(e?.contextWindow),i=_g(e?.contextRemainingPct),r=typeof t=="number"?Math.max(0,Math.round(t)):void 0,o=typeof n=="number"&&n>0?Math.max(1,Math.round(n)):void 0,a=typeof i=="number"?eS(i):void 0;if(typeof r=="number"&&typeof o=="number"){const c=Math.min(r,o),d=eS(c/o*100);return{usedPct:d,remainingPct:100-d,usedTokens:c,windowTokens:o}}if(typeof a=="number"&&typeof o=="number"){const c=100-a;return{usedPct:c,remainingPct:a,usedTokens:Math.round(c/100*o),windowTokens:o}}return typeof o=="number"?{usedPct:0,remainingPct:100,usedTokens:0,windowTokens:o}:typeof a=="number"?{remainingPct:a}:typeof r=="number"?{usedTokens:r}:{}}function Dv(e){const t=e.metadata??{},n=String(t.checkpoint_id??"").trim();if(n)return`checkpoint:${n}`;const i=String(t.ui_message_id??"").trim(),r=String(t.transcript_kind??t.kind??"").trim(),o=String(t.role??"").trim().toLowerCase(),a=e.sender==="user"||o==="user"||r==="runtime_v2_user_turn"||r==="top_level_user_turn";if(a&&i)return`ui:${i}`;const c=String(t.ui_timeline_id??"").trim();if(c)return c;const d=String(t.canonical_turn_id??t.turn_id??"").trim();return!a&&d&&r==="runtime_v2_assistant"?`turn:assistant:${d}`:`message:${e.id}`}const $4=/(\d[\d,]*)\s*\/\s*(\d[\d,]*)\s+tokens/i,H4=/(\d{1,3})%\s*used/i,F4=/(\d{1,3})%\s*remaining/i;function Gf(e,t){return t==="full"?!0:String(e.metadata?.detail_visibility??"summary").trim()!=="full"}function V4(e){return e.replace(/\s+/g," ").trim()}function U4(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const i=t.indexOf(": ");if(i<8||i>160)return t;const r=t.slice(0,i).replace(/\*/g,"").trim(),o=t.slice(i+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(r)||/^(https?|file)$/i.test(r)?t:o}function yu(e){const t=e.metadata??{};switch(String(t.transcript_kind??t.kind??"").trim()){case"child_task_result":return 80;case"child_task_result_retry":return 79;case"company_role_result":return 75;case"company_role_result_retry":return 74;case"child_result":return 70;case"runtime_v2_assistant":return 60;case"runtime_v2_company_assistant":return 20;case"top_level_reply":return 40}return String(t.kind??"").trim()==="worker_notification"?20:0}function tE(e){if(yu(e)<=0)return"";const t=V4(U4(e.content)).slice(0,2e3);return t?`result:${t}`:""}function tf(e){if(!e)return;const t=e.replace(/,/g,"").trim();if(!t)return;const n=Number(t);return Number.isFinite(n)?Math.max(0,Math.round(n)):void 0}function tS(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,Math.min(Math.round(e),100))}function kl(e){if(!e)return;const t=String(e.execMode??"").trim();if(!(t==="company"||t==="org"||t==="custom"||!!e.isCompanyRuntime||!!e.roleWorkItems||!!e.executorRoleWorkItems))return;const i=Object.values(e.executorRoleWorkItems??e.roleWorkItems??{});if(i.length===0)return;const r=i.map(o=>o.aggregatedStatus);if(r.some(o=>o==="active"))return"running";if(r.some(o=>o==="waiting")||r.some(o=>o==="pending"))return"pending";if(r.every(o=>o==="failed"))return"failed";if(r.every(o=>o==="done")||r.some(o=>o==="done"))return"done"}function G4(e){const t={};for(const n of e??[]){const i=`${n.summary??""} ${n.detail??""}`.trim();if(!i)continue;const r=$4.exec(i);if(r){const c=tf(r[1]),d=tf(r[2]);typeof c=="number"&&(t.contextTokens=c),typeof d=="number"&&d>0&&(t.contextWindow=d)}const o=F4.exec(i);if(o){t.contextRemainingPct=tS(tf(o[1]));continue}const a=H4.exec(i);if(a){const c=tS(tf(a[1]));typeof c=="number"&&(t.contextRemainingPct=100-c)}}return t}function qf(e){const t=G4(e.progressLog),n=e.contextTokens??t.contextTokens,i=e.contextWindow??t.contextWindow,r=e.contextRemainingPct??t.contextRemainingPct;return n===e.contextTokens&&i===e.contextWindow&&r===e.contextRemainingPct?e:{...e,contextTokens:n,contextWindow:i,contextRemainingPct:r}}function nE(e){const t=new Set,n=[];for(const i of e)t.has(i.taskId)||(t.add(i.taskId),n.push(i));return n}function q4(e){return!!(String(e?.workItemRoleId??"").trim()||String(e?.workItemRoleName??"").trim())}function Af(e,t){if(!e||e.mode==="child")return[];const n=new Set;e.sessionId&&n.add(e.sessionId),n.add(e.taskId);const i=String(e.originTaskId??e.taskId??"").trim(),r=new Map;for(const c of e.workItemLog??[]){const d=c.executionTurnId||c.runtimeTaskId;d&&!r.has(d)&&r.set(d,r.size)}const o=new Set;return t.filter(c=>{if(c.taskId===e.taskId||o.has(c.taskId))return!1;const d=!!c.parentSessionId&&n.has(c.parentSessionId),m=r.has(c.taskId),h=!!i&&String(c.originTaskId??"").trim()===i;return!d&&!m&&!h?!1:(o.add(c.taskId),!0)}).sort((c,d)=>{const m=r.get(c.taskId),h=r.get(d.taskId);return m!=null&&h!=null&&m!==h?m-h:m!=null&&h==null?-1:m==null&&h!=null?1:d.updatedAt-c.updatedAt})}function nS(e,t){const n=Af(e,t);return!e||e.mode==="child"||!q4(e)?n:nE([e,...n])}function Wf(e,t){if(!e||e.mode==="child")return[];const n=String(e.sessionId??"").trim();if(!n)return[];const i=new Set;return t.filter(r=>r.taskId===e.taskId||i.has(r.taskId)||String(r.sessionId??"").trim()!==n?!1:(i.add(r.taskId),!0)).sort((r,o)=>o.updatedAt-r.updatedAt)}function W4(e){const t=String(e?.execMode??"").trim();return t==="company"||t==="org"||t==="custom"}function iS(e){const t=os(e)?1e9:0,n=String(e.draftAssistantText??"").trim()?1e10:0,i=Math.max(0,e.messageCount??0)*1e4,r=(e.progressLog?.length??0)*100;return n+t+i+r+e.updatedAt}function rS(e){const t=eE(e),n=os(e)?1e11:0,i=String(e.draftAssistantText??"").trim()?1e10:0,r=typeof t.usedPct=="number"||typeof t.usedTokens=="number"||typeof t.windowTokens=="number"?1e10:0,o=typeof e.inputTokens=="number"||typeof e.outputTokens=="number"||typeof e.totalTokens=="number"?1e9:0,a=Math.max(0,e.messageCount??0)*1e4,c=(e.progressLog?.length??0)*100;return n+i+r+o+a+c}function Yf(e,t){if(!e)return{timelineSessions:[],displaySession:null,runtimeSession:null,projectedFromChild:!1};const n=qf(e);if(e.mode==="child"||t.length===0)return{timelineSessions:[n],displaySession:n,runtimeSession:n,projectedFromChild:!1};const i=t.map(qf),r=i.filter(p=>p.status!=="cancelled"),o=r.length>0?r:i,a=nE([n,...o]),c=W4(e),d=[...a].sort((p,g)=>iS(g)-iS(p))[0]??n,m=c?n:d,h=[...a].sort((p,g)=>rS(g)-rS(p))[0]??m;return{timelineSessions:a,displaySession:m,runtimeSession:h,projectedFromChild:!c&&m.taskId!==e.taskId}}function sS(e,t,n){if(!e)return null;const i=qf(e),r=t??i,o=kl(r)??kl(i),a=Xf(n.length>0?n:[i]);return{...i,status:o??(r.status||i.status),assigneeIds:r.assigneeIds.length>0?r.assigneeIds:i.assigneeIds,agentStatus:r.agentStatus??i.agentStatus,currentTool:r.currentTool??i.currentTool,displayTool:r.displayTool??r.currentTool??i.displayTool??i.currentTool,toolElapsedMs:r.toolElapsedMs??i.toolElapsedMs,lastToolSummary:r.lastToolSummary??i.lastToolSummary,contextTokens:r.contextTokens??i.contextTokens,contextWindow:r.contextWindow??i.contextWindow,contextRemainingPct:r.contextRemainingPct??i.contextRemainingPct,inputTokens:r.inputTokens??i.inputTokens,outputTokens:r.outputTokens??i.outputTokens,totalTokens:r.totalTokens??i.totalTokens,turnCostUsd:r.turnCostUsd??i.turnCostUsd,sessionCostUsd:r.sessionCostUsd??i.sessionCostUsd,pendingPermissionCount:r.pendingPermissionCount??i.pendingPermissionCount,drainMode:r.drainMode??i.drainMode,workItemProjectionId:r.workItemProjectionId??i.workItemProjectionId,workItemTurnType:r.workItemTurnType??i.workItemTurnType,companyProfile:i.companyProfile??r.companyProfile,workItemRoleId:i.workItemRoleId??r.workItemRoleId,workItemRoleName:i.workItemRoleName??r.workItemRoleName,workItemGate:i.workItemGate??r.workItemGate,employeeAssignment:i.employeeAssignment??r.employeeAssignment,selectedExecutionAgent:r.selectedExecutionAgent??i.selectedExecutionAgent,draftAssistantText:r.draftAssistantText??i.draftAssistantText,draftUpdatedAt:r.draftUpdatedAt??i.draftUpdatedAt,draftIteration:r.draftIteration??i.draftIteration,draftTurnId:r.draftTurnId??i.draftTurnId,runtimeControlState:r.runtimeControlState??i.runtimeControlState,canStop:r.canStop??i.canStop,canResume:r.canResume??i.canResume,resumeParentSessionId:r.resumeParentSessionId??i.resumeParentSessionId,pendingRuntimeCheckpointId:r.pendingRuntimeCheckpointId??i.pendingRuntimeCheckpointId,stopIntentId:r.stopIntentId??i.stopIntentId,updatedAt:Math.max(i.updatedAt,r.updatedAt),messageCount:Math.max(i.messageCount??0,r.messageCount??0,a),isCompanyRuntime:!!(i.isCompanyRuntime||r.isCompanyRuntime),workItemLog:(i.workItemLog?.length??0)>0?i.workItemLog:r.workItemLog,roleWorkItems:i.roleWorkItems??r.roleWorkItems,executorRoleWorkItems:i.executorRoleWorkItems??r.executorRoleWorkItems,activeSubagents:i.activeSubagents??r.activeSubagents,permissionRequests:i.permissionRequests??r.permissionRequests}}function Y4(e,t,n){if(!e)return null;const i=qf(e),r=t??i,o=kl(r)??kl(i),a=Xf(n.length>0?n:[i]);return{...i,status:o??(r.status||i.status),agentStatus:r.agentStatus??i.agentStatus,currentTool:r.currentTool??i.currentTool,displayTool:r.displayTool??r.currentTool??i.displayTool??i.currentTool,toolElapsedMs:r.toolElapsedMs??i.toolElapsedMs,lastToolSummary:r.lastToolSummary??i.lastToolSummary,contextTokens:r.contextTokens??i.contextTokens,contextWindow:r.contextWindow??i.contextWindow,contextRemainingPct:r.contextRemainingPct??i.contextRemainingPct,inputTokens:r.inputTokens??i.inputTokens,outputTokens:r.outputTokens??i.outputTokens,totalTokens:r.totalTokens??i.totalTokens,turnCostUsd:r.turnCostUsd??i.turnCostUsd,sessionCostUsd:r.sessionCostUsd??i.sessionCostUsd,pendingPermissionCount:r.pendingPermissionCount??i.pendingPermissionCount,drainMode:r.drainMode??i.drainMode,selectedExecutionAgent:r.selectedExecutionAgent??i.selectedExecutionAgent,runtimeControlState:r.runtimeControlState??i.runtimeControlState,canStop:r.canStop??i.canStop,canResume:r.canResume??i.canResume,resumeParentSessionId:r.resumeParentSessionId??i.resumeParentSessionId,pendingRuntimeCheckpointId:r.pendingRuntimeCheckpointId??i.pendingRuntimeCheckpointId,stopIntentId:r.stopIntentId??i.stopIntentId,updatedAt:Math.max(i.updatedAt,r.updatedAt),messageCount:Math.max(i.messageCount??0,r.messageCount??0,a)}}function zx(e){const t=new Set,n=new Map,i=new Map,r=[];for(const o of e)for(const a of o){const c=a.metadata??{},d=String(c.checkpoint_id??"").trim();if(d){const x=i.get(d);if(x!==void 0){const v=r[x],b=a.timestamp>=v.timestamp?a:v,k=a.timestamp<v.timestamp?a:v;r[x]={...v,...b,id:v.id,channelId:v.channelId,timestamp:k.timestamp,metadata:{...v.metadata??{},...b.metadata??{}}};continue}}const m=typeof c.ui_message_id=="string"?c.ui_message_id.trim():"",h=tE(a);if(h){const x=n.get(h);if(x!==void 0){const v=r[x],b=yu(a)>yu(v),k=b?a:v,w=b?v:a;r[x]={...w,...k,timestamp:Math.min(v.timestamp,a.timestamp),metadata:{...w.metadata??{},...k.metadata??{},ui_timeline_id:Dv(v)}};continue}n.set(h,r.length)}const p=d?`checkpoint:${d}`:"",g=h||p||m||`${a.sender}:${a.replyToId??""}:${a.timestamp}:${a.content.trim()}`;t.has(g)||(t.add(g),d&&i.set(d,r.length),r.push(a))}return r.sort((o,a)=>o.timestamp===a.timestamp?o.id.localeCompare(a.id):o.timestamp-a.timestamp)}function oS(e,t){const n=a=>{const c=a.metadata??{},d=String(c.transcript_kind??c.kind??"").trim();return d!=="runtime_v2_assistant"&&d!=="runtime_v2_company_assistant"?"":String(c.canonical_turn_id??c.turn_id??"").trim()},i=new Set(e.filter(a=>a.channelId===t&&Gf(a,"summary")).map(n).filter(Boolean)),r=new Map,o=[];for(const a of e){if(a.channelId===t){Gf(a,"summary")&&o.push(a);continue}const c=a.metadata??{},d=String(c.transcript_kind??c.kind??"").trim(),m=String(c.checkpoint_id??"").trim(),h=String(c.checkpoint_type??"").trim(),p=String(c.response_to_checkpoint_id??"").trim(),g=String(c.response_to_escalation_id??"").trim();if(m&&h||p||g){o.push(a);continue}if(["company_role_result","company_role_result_retry","child_task_result","child_task_result_retry","child_result","top_level_reply"].includes(d)){o.push(a);continue}if(!(String(c.detail_visibility??"").trim()==="summary"&&(d==="runtime_v2_assistant"||d==="runtime_v2_company_assistant")))continue;const v=n(a);if(!v){o.push(a);continue}if(i.has(v))continue;const b=r.get(v);if(!b){r.set(v,a);continue}const k=yu(b),w=yu(a);(w>k||w===k&&(a.timestamp>b.timestamp||a.timestamp===b.timestamp&&a.id.localeCompare(b.id)>0))&&r.set(v,a)}return o.push(...r.values()),zx([o])}function aS(e){const t=new Set,n=[];for(const i of e)for(const r of i.progressLog??[]){const o=`${r.timestamp}:${r.type}:${r.summary}:${r.detail??""}`;t.has(o)||(t.add(o),n.push(r))}return n.sort((i,r)=>i.timestamp-r.timestamp)}function Xf(e){return e.reduce((t,n)=>t+Math.max(0,n.messageCount??0),0)}const X4={idle:"status-idle",done:"status-done",pending:"status-pending",failed:"status-failed",cancelled:"status-cancelled",blocked:"status-blocked"};function K4(e){const t=kl(e)??e.status,n=Om({...e,status:t});return n==="tool_active"?"status-tool-active":n==="reflecting"?"status-reflecting":t==="running"?"status-running-idle":X4[t]??"status-pending"}function Z4(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m`:t<864e5?`${Math.floor(t/36e5)}h`:`${Math.floor(t/864e5)}d`}function Q4(e){const t=new Date,n=new Date(e),i=new Date(t.getFullYear(),t.getMonth(),t.getDate()),r=new Date(i.getTime()-864e5);return n>=i?"Today":n>=r?"Yesterday":"Earlier"}function J4(e){const t=new Map,n=[];for(const i of e)if(i.mode==="child"&&i.parentSessionId){const r=t.get(i.parentSessionId)??[];r.push(i),t.set(i.parentSessionId,r)}else n.push(i);return n.map(i=>({session:i,children:Array.from(new Map([...i.sessionId?t.get(i.sessionId)??[]:[],...t.get(i.taskId)??[]].map(r=>[r.taskId,r])).values())}))}function nf({session:e,isActive:t,isChild:n,isLast:i,unreadCount:r,onSelect:o,onDelete:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(!1),p=e.assigneeIds.length>0?e.assigneeIds[0].replace(/^agent-/,""):null,g=kl(e)??e.status;return C.useEffect(()=>{if(!m)return;const x=setTimeout(()=>h(!1),3e3);return()=>clearTimeout(x)},[m]),u.jsxs("button",{className:`session-item${t?" active":""}${n?" session-item-child":""}`,onClick:o,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[n&&u.jsx("span",{className:`session-tree-line${i?" last":""}`}),u.jsx("span",{className:`session-dot ${K4(e)}`}),u.jsxs("div",{className:"session-item-content",children:[u.jsxs("span",{className:"session-item-title",children:[n&&p&&u.jsx("span",{className:"session-agent-tag",children:p}),!n&&e.isCompanyRuntime&&u.jsx("span",{className:"session-runtime-badge",title:"Company runtime",children:u.jsx(Mm,{})}),e.title]}),u.jsxs("span",{className:"session-item-meta",children:[g," · ",Z4(e.updatedAt)]})]}),!!r&&r>0&&u.jsx("span",{className:"session-unread-badge",children:r>99?"99+":r}),c&&!n&&!m&&u.jsx("button",{className:"session-delete-btn",onClick:x=>{x.stopPropagation(),h(!0)},title:"Delete",children:u.jsx(N4,{})}),m&&u.jsxs("span",{className:"session-confirm-delete",onClick:x=>x.stopPropagation(),children:[u.jsx("button",{className:"session-confirm-yes",onClick:()=>{h(!1),a()},children:"Delete"}),u.jsx("button",{className:"session-confirm-no",onClick:()=>h(!1),children:"Cancel"})]})]})}function e5({sessions:e,activeSessionId:t,activeChannel:n,secretaryChannelId:i,unreadCounts:r,onSelect:o,onCreateSession:a,onDeleteSession:c,onSelectSecretary:d}){const[m,h]=C.useState(""),[p,g]=C.useState(new Set),x=e.some(I=>I.isCompanyRuntime||I.mode==="child"||I.execMode==="company"||I.execMode==="org"||I.execMode==="custom"),v=C.useCallback(I=>{g(L=>{const M=new Set(L);return M.has(I)?M.delete(I):M.add(I),M})},[]),b=C.useMemo(()=>{if(!m.trim())return e;const I=m.toLowerCase();return e.filter(L=>L.title.toLowerCase().includes(I))},[e,m]),k=C.useMemo(()=>J4(b),[b]),w=C.useMemo(()=>{const I={Today:[],Yesterday:[],Earlier:[]};for(const L of k){const M=Q4(L.session.createdAt);I[M]?.push(L)}return I},[k]),S=C.useMemo(()=>{const I=[];for(const L of["Today","Yesterday","Earlier"]){const M=w[L];if(!(!M||M.length===0)){I.push({kind:"group",group:L});for(const A of M){I.push({kind:"primary",node:A});const B=A.children.length>0,W=p.has(A.session.taskId);B&&W?I.push({kind:"child-count",node:A}):B&&A.children.forEach((P,G)=>{I.push({kind:"child",parentTaskId:A.session.taskId,child:P,childIndex:G,childCount:A.children.length})})}}}return I},[p,w]),j=S.length>120,N=C.useRef(null),O=k4({count:S.length,getScrollElement:()=>N.current,estimateSize:I=>{const L=S[I];return L?.kind==="group"?26:L?.kind==="child-count"?30:54},overscan:8}),R=C.useCallback(I=>{const L=I.children.length>0,M=p.has(I.session.taskId);return u.jsx("div",{className:"session-tree-node",children:u.jsxs("div",{className:"session-tree-primary",children:[L&&u.jsx("button",{className:`session-expand-btn${M?" collapsed":""}`,onClick:A=>{A.stopPropagation(),v(I.session.taskId)},"aria-label":M?"Expand":"Collapse"}),u.jsx(nf,{session:I.session,isActive:I.session.taskId===t,unreadCount:r?.[I.session.channelId],onSelect:()=>o(I.session.taskId),onDelete:()=>c(I.session.taskId)})]})})},[t,p,c,o,v,r]),D=C.useCallback(I=>I.kind==="group"?u.jsx("div",{className:"session-group-label",children:x?`${I.group} Runtime Sessions`:I.group}):I.kind==="primary"?R(I.node):I.kind==="child-count"?u.jsxs("button",{className:"session-child-count",onClick:()=>v(I.node.session.taskId),children:[I.node.children.length," sub-task",I.node.children.length>1?"s":""]}):u.jsx("div",{className:"session-children",children:u.jsx(nf,{session:I.child,isActive:I.child.taskId===t,isChild:!0,isLast:I.childIndex===I.childCount-1,unreadCount:r?.[I.child.channelId],onSelect:()=>o(I.child.taskId),onDelete:()=>c(I.child.taskId)})}),[t,x,c,o,R,v,r]);return u.jsxs("div",{className:"session-sidebar",children:[u.jsxs("button",{className:"session-new-btn",onClick:a,children:[u.jsx(E4,{}),u.jsx("span",{children:"New Chat"})]}),d&&u.jsxs("button",{className:`session-nav-btn${n===i?" active":""}`,onClick:d,children:[u.jsx(gu,{}),u.jsx("span",{children:"Secretary"}),!!(i&&r?.[i])&&r[i]>0&&u.jsx("span",{className:"session-unread-badge",children:r[i]>99?"99+":r[i]})]}),u.jsxs("div",{className:"session-search-wrap",children:[u.jsx(Mv,{}),u.jsx("input",{className:"session-search",placeholder:"Search...",value:m,onChange:I=>h(I.target.value)})]}),u.jsxs("div",{ref:N,className:`session-list${j?" session-list-virtualized":""}`,children:[j?u.jsx("div",{style:{height:O.getTotalSize(),width:"100%",position:"relative"},children:O.getVirtualItems().map(I=>u.jsx("div",{"data-index":I.index,ref:O.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${I.start}px)`},children:D(S[I.index])},I.key))}):["Today","Yesterday","Earlier"].map(I=>{const L=w[I];return!L||L.length===0?null:u.jsxs("div",{className:"session-group",children:[u.jsx("div",{className:"session-group-label",children:x?`${I} Runtime Sessions`:I}),L.map(M=>{const A=M.children.length>0,B=p.has(M.session.taskId);return u.jsxs("div",{className:"session-tree-node",children:[u.jsxs("div",{className:"session-tree-primary",children:[A&&u.jsx("button",{className:`session-expand-btn${B?" collapsed":""}`,onClick:W=>{W.stopPropagation(),v(M.session.taskId)},"aria-label":B?"Expand":"Collapse"}),u.jsx(nf,{session:M.session,isActive:M.session.taskId===t,unreadCount:r?.[M.session.channelId],onSelect:()=>o(M.session.taskId),onDelete:()=>c(M.session.taskId)})]}),A&&!B&&u.jsx("div",{className:"session-children",children:M.children.map((W,P)=>u.jsx(nf,{session:W,isActive:W.taskId===t,isChild:!0,isLast:P===M.children.length-1,unreadCount:r?.[W.channelId],onSelect:()=>o(W.taskId),onDelete:()=>c(W.taskId)},W.taskId))}),A&&B&&u.jsxs("button",{className:"session-child-count",onClick:()=>v(M.session.taskId),children:[M.children.length," sub-task",M.children.length>1?"s":""]})]},M.session.taskId)})]},I)}),b.length===0&&u.jsx("div",{className:"session-empty",children:"No sessions yet"})]}),u.jsxs("button",{className:`session-nav-btn session-activity-btn${t===null&&n!==i?" active":""}`,onClick:()=>o(null),children:[u.jsx(Qj,{}),u.jsx("span",{children:"Activity"})]})]})}const t5=new Set(["company_work_item_gate","company_delivery_feedback","company_staffing_selection","company_recruitment_confirmation","company_reorg_pending","human_escalation","task_user_input"]),n5=new Set(["responded","resolved","timeout","timed_out","expired","stale","superseded","ignored","cancelled","canceled","invalid"]);function i5(e){return t5.has(String(e??"").trim())}function Sl(e){return!(!i5(e?.checkpoint_type)||e?.self_evolution_completed||String(e?.kind??"").trim()==="company_self_evolution_result")}function r5(e){const t=String(e?.checkpoint_status??"").trim().toLowerCase();return n5.has(t)?!0:!!String(e?.checkpoint_response_message_id??"").trim()}function iE(e){const t=String(e?.checkpoint_id??"").trim();if(!t)return;const n=String(e?.checkpoint_type??"").trim(),i=String(e?.escalation_id??"").trim();return{response_to_checkpoint_id:t,response_to_checkpoint_type:n||void 0,response_to_escalation_id:i||void 0}}function rE(e){const t=String(e?.response_to_checkpoint_type??"").trim();if(!(t==="company_delivery_feedback"||t==="human_escalation"))return e}function Ov(e){const t=new Set,n=new Set,i=new Set;let r;const o=new Map,a=new Map,c=new Set;for(let d=0;d<e.length;d++){const m=e[d];if(m.sender!=="user")continue;const h=m.metadata,p=String(h?.response_to_checkpoint_id??"").trim();p&&o.set(p,d);const g=String(h?.response_to_escalation_id??"").trim();g&&a.set(g,d)}for(let d=0;d<e.length;d++){const m=e[d],h=m.metadata;if(!Sl(h))continue;const p=String(h?.checkpoint_id??"").trim(),g=String(h?.checkpoint_type??"").trim(),x=String(h?.escalation_id??"").trim();if(p&&c.has(p)){i.add(m.id);continue}p&&c.add(p);const v=!!p&&(o.get(p)??-1)>d,b=g==="human_escalation"&&!!x&&(a.get(x)??-1)>d;if(r5(h)||v||b){n.add(m.id);continue}t.add(m.id),r=iE(h)??r}return{pendingMessageIds:t,respondedMessageIds:n,duplicateMessageIds:i,latestPendingReplyMetadata:r}}function Fi(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var s5=typeof Symbol=="function"&&Symbol.observable||"@@observable",lS=s5,cS=()=>Math.random().toString(36).substring(7).split("").join("."),o5={INIT:`@@redux/INIT${cS()}`,REPLACE:`@@redux/REPLACE${cS()}`},uS=o5;function a5(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function sE(e,t,n){if(typeof e!="function")throw new Error(Fi(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Fi(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Fi(1));return n(sE)(e,t)}let i=e,r=t,o=new Map,a=o,c=0,d=!1;function m(){a===o&&(a=new Map,o.forEach((k,w)=>{a.set(w,k)}))}function h(){if(d)throw new Error(Fi(3));return r}function p(k){if(typeof k!="function")throw new Error(Fi(4));if(d)throw new Error(Fi(5));let w=!0;m();const S=c++;return a.set(S,k),function(){if(w){if(d)throw new Error(Fi(6));w=!1,m(),a.delete(S),o=null}}}function g(k){if(!a5(k))throw new Error(Fi(7));if(typeof k.type>"u")throw new Error(Fi(8));if(typeof k.type!="string")throw new Error(Fi(17));if(d)throw new Error(Fi(9));try{d=!0,r=i(r,k)}finally{d=!1}return(o=a).forEach(S=>{S()}),k}function x(k){if(typeof k!="function")throw new Error(Fi(10));i=k,g({type:uS.REPLACE})}function v(){const k=p;return{subscribe(w){if(typeof w!="object"||w===null)throw new Error(Fi(11));function S(){const N=w;N.next&&N.next(h())}return S(),{unsubscribe:k(S)}},[lS](){return this}}}return g({type:uS.INIT}),{dispatch:g,subscribe:p,getState:h,replaceReducer:x,[lS]:v}}function dS(e,t){return function(...n){return t(e.apply(this,n))}}function fS(e,t){if(typeof e=="function")return dS(e,t);if(typeof e!="object"||e===null)throw new Error(Fi(16));const n={};for(const i in e){const r=e[i];typeof r=="function"&&(n[i]=dS(r,t))}return n}function oE(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...i)=>t(n(...i)))}function l5(...e){return t=>(n,i)=>{const r=t(n,i);let o=()=>{throw new Error(Fi(15))};const a={getState:r.getState,dispatch:(d,...m)=>o(d,...m)},c=e.map(d=>d(a));return o=oE(...c)(r.dispatch),{...r,dispatch:o}}}var kg={exports:{}},Sg={};var mS;function c5(){if(mS)return Sg;mS=1;var e=Hl();function t(d,m){return d===m&&(d!==0||1/d===1/m)||d!==d&&m!==m}var n=typeof Object.is=="function"?Object.is:t,i=e.useSyncExternalStore,r=e.useRef,o=e.useEffect,a=e.useMemo,c=e.useDebugValue;return Sg.useSyncExternalStoreWithSelector=function(d,m,h,p,g){var x=r(null);if(x.current===null){var v={hasValue:!1,value:null};x.current=v}else v=x.current;x=a(function(){function k(O){if(!w){if(w=!0,S=O,O=p(O),g!==void 0&&v.hasValue){var R=v.value;if(g(R,O))return j=R}return j=O}if(R=j,n(S,O))return R;var D=p(O);return g!==void 0&&g(R,D)?(S=O,R):(S=O,j=D)}var w=!1,S,j,N=h===void 0?null:h;return[function(){return k(m())},N===null?void 0:function(){return k(N())}]},[m,h,p,g]);var b=i(d,x[0],x[1]);return o(function(){v.hasValue=!0,v.value=b},[b]),c(b),b},Sg}var pS;function u5(){return pS||(pS=1,kg.exports=c5()),kg.exports}u5();var d5=C.version.startsWith("19"),f5=Symbol.for(d5?"react.transitional.element":"react.element"),m5=Symbol.for("react.portal"),p5=Symbol.for("react.fragment"),h5=Symbol.for("react.strict_mode"),g5=Symbol.for("react.profiler"),y5=Symbol.for("react.consumer"),x5=Symbol.for("react.context"),aE=Symbol.for("react.forward_ref"),v5=Symbol.for("react.suspense"),b5=Symbol.for("react.suspense_list"),Lv=Symbol.for("react.memo"),_5=Symbol.for("react.lazy"),k5=aE,S5=Lv;function w5(e){if(typeof e=="object"&&e!==null){const{$$typeof:t}=e;switch(t){case f5:switch(e=e.type,e){case p5:case g5:case h5:case v5:case b5:return e;default:switch(e=e&&e.$$typeof,e){case x5:case aE:case _5:case Lv:return e;case y5:return e;default:return t}}case m5:return t}}}function C5(e){return w5(e)===Lv}function j5(e,t,n,i,{areStatesEqual:r,areOwnPropsEqual:o,areStatePropsEqual:a}){let c=!1,d,m,h,p,g;function x(S,j){return d=S,m=j,h=e(d,m),p=t(i,m),g=n(h,p,m),c=!0,g}function v(){return h=e(d,m),t.dependsOnOwnProps&&(p=t(i,m)),g=n(h,p,m),g}function b(){return e.dependsOnOwnProps&&(h=e(d,m)),t.dependsOnOwnProps&&(p=t(i,m)),g=n(h,p,m),g}function k(){const S=e(d,m),j=!a(S,h);return h=S,j&&(g=n(h,p,m)),g}function w(S,j){const N=!o(j,m),O=!r(S,d,j,m);return d=S,m=j,N&&O?v():N?b():O?k():g}return function(j,N){return c?w(j,N):x(j,N)}}function E5(e,{initMapStateToProps:t,initMapDispatchToProps:n,initMergeProps:i,...r}){const o=t(e,r),a=n(e,r),c=i(e,r);return j5(o,a,c,e,r)}function N5(e,t){const n={};for(const i in e){const r=e[i];typeof r=="function"&&(n[i]=(...o)=>t(r(...o)))}return n}function Px(e){return function(n){const i=e(n);function r(){return i}return r.dependsOnOwnProps=!1,r}}function hS(e){return e.dependsOnOwnProps?!!e.dependsOnOwnProps:e.length!==1}function lE(e,t){return function(i,{displayName:r}){const o=function(c,d){return o.dependsOnOwnProps?o.mapToProps(c,d):o.mapToProps(c,void 0)};return o.dependsOnOwnProps=!0,o.mapToProps=function(c,d){o.mapToProps=e,o.dependsOnOwnProps=hS(e);let m=o(c,d);return typeof m=="function"&&(o.mapToProps=m,o.dependsOnOwnProps=hS(m),m=o(c,d)),m},o}}function zv(e,t){return(n,i)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${i.wrappedComponentName}.`)}}function I5(e){return e&&typeof e=="object"?Px(t=>N5(e,t)):e?typeof e=="function"?lE(e):zv(e,"mapDispatchToProps"):Px(t=>({dispatch:t}))}function T5(e){return e?typeof e=="function"?lE(e):zv(e,"mapStateToProps"):Px(()=>({}))}function R5(e,t,n){return{...n,...e,...t}}function A5(e){return function(n,{displayName:i,areMergedPropsEqual:r}){let o=!1,a;return function(d,m,h){const p=e(d,m,h);return o?r(p,a)||(a=p):(o=!0,a=p),a}}}function M5(e){return e?typeof e=="function"?A5(e):zv(e,"mergeProps"):()=>R5}function D5(e){e()}function O5(){let e=null,t=null;return{clear(){e=null,t=null},notify(){D5(()=>{let n=e;for(;n;)n.callback(),n=n.next})},get(){const n=[];let i=e;for(;i;)n.push(i),i=i.next;return n},subscribe(n){let i=!0;const r=t={callback:n,next:null,prev:t};return r.prev?r.prev.next=r:e=r,function(){!i||e===null||(i=!1,r.next?r.next.prev=r.prev:t=r.prev,r.prev?r.prev.next=r.next:e=r.next)}}}}var gS={notify(){},get:()=>[]};function cE(e,t){let n,i=gS,r=0,o=!1;function a(b){h();const k=i.subscribe(b);let w=!1;return()=>{w||(w=!0,k(),p())}}function c(){i.notify()}function d(){v.onStateChange&&v.onStateChange()}function m(){return o}function h(){r++,n||(n=t?t.addNestedSub(d):e.subscribe(d),i=O5())}function p(){r--,n&&r===0&&(n(),n=void 0,i.clear(),i=gS)}function g(){o||(o=!0,h())}function x(){o&&(o=!1,p())}const v={addNestedSub:a,notifyNestedSubs:c,handleChangeWrapper:d,isSubscribed:m,trySubscribe:g,tryUnsubscribe:x,getListeners:()=>i};return v}var L5=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",z5=L5(),P5=()=>typeof navigator<"u"&&navigator.product==="ReactNative",B5=P5(),$5=()=>z5||B5?C.useLayoutEffect:C.useEffect,Kf=$5();function yS(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function wg(e,t){if(yS(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!yS(e[n[r]],t[n[r]]))return!1;return!0}var H5={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},F5={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},V5={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},uE={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},U5={[k5]:V5,[S5]:uE};function xS(e){return C5(e)?uE:U5[e.$$typeof]||H5}var G5=Object.defineProperty,q5=Object.getOwnPropertyNames,vS=Object.getOwnPropertySymbols,W5=Object.getOwnPropertyDescriptor,Y5=Object.getPrototypeOf,bS=Object.prototype;function Bx(e,t){if(typeof t!="string"){if(bS){const o=Y5(t);o&&o!==bS&&Bx(e,o)}let n=q5(t);vS&&(n=n.concat(vS(t)));const i=xS(e),r=xS(t);for(let o=0;o<n.length;++o){const a=n[o];if(!F5[a]&&!(r&&r[a])&&!(i&&i[a])){const c=W5(t,a);try{G5(e,a,c)}catch{}}}}return e}var X5=Symbol.for("react-redux-context"),K5=typeof globalThis<"u"?globalThis:{};function Z5(){if(!C.createContext)return{};const e=K5[X5]??=new Map;let t=e.get(C.createContext);return t||(t=C.createContext(null),e.set(C.createContext,t)),t}var dE=Z5(),Q5=[null,null];function J5(e,t,n){Kf(()=>e(...t),n)}function eD(e,t,n,i,r,o){e.current=i,n.current=!1,r.current&&(r.current=null,o())}function tD(e,t,n,i,r,o,a,c,d,m,h){if(!e)return()=>{};let p=!1,g=null;const x=()=>{if(p||!c.current)return;const b=t.getState();let k,w;try{k=i(b,r.current)}catch(S){w=S,g=S}w||(g=null),k===o.current?a.current||m():(o.current=k,d.current=k,a.current=!0,h())};return n.onStateChange=x,n.trySubscribe(),x(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,g)throw g}}function nD(e,t){return e===t}function iD(e,t,n,{pure:i,areStatesEqual:r=nD,areOwnPropsEqual:o=wg,areStatePropsEqual:a=wg,areMergedPropsEqual:c=wg,forwardRef:d=!1,context:m=dE}={}){const h=m,p=T5(e),g=I5(t),x=M5(n),v=!!e;return k=>{const w=k.displayName||k.name||"Component",S=`Connect(${w})`,j={shouldHandleStateChanges:v,displayName:S,wrappedComponentName:w,WrappedComponent:k,initMapStateToProps:p,initMapDispatchToProps:g,initMergeProps:x,areStatesEqual:r,areStatePropsEqual:a,areOwnPropsEqual:o,areMergedPropsEqual:c};function N(D){const[I,L,M]=C.useMemo(()=>{const{reactReduxForwardedRef:je,...Te}=D;return[D.context,je,Te]},[D]),A=C.useMemo(()=>{let je=h;return I?.Consumer,je},[I,h]),B=C.useContext(A),W=!!D.store&&!!D.store.getState&&!!D.store.dispatch,P=!!B&&!!B.store,G=W?D.store:B.store,$=P?B.getServerState:G.getState,q=C.useMemo(()=>E5(G.dispatch,j),[G]),[Y,Q]=C.useMemo(()=>{if(!v)return Q5;const je=cE(G,W?void 0:B.subscription),Te=je.notifyNestedSubs.bind(je);return[je,Te]},[G,W,B]),V=C.useMemo(()=>W?B:{...B,subscription:Y},[W,B,Y]),U=C.useRef(void 0),Z=C.useRef(M),F=C.useRef(void 0),K=C.useRef(!1),ee=C.useRef(!1),te=C.useRef(void 0);Kf(()=>(ee.current=!0,()=>{ee.current=!1}),[]);const se=C.useMemo(()=>()=>F.current&&M===Z.current?F.current:q(G.getState(),M),[G,M]),ae=C.useMemo(()=>Te=>Y?tD(v,G,Y,q,Z,U,K,ee,F,Q,Te):()=>{},[Y]);J5(eD,[Z,U,K,M,F,Q]);let ue;try{ue=C.useSyncExternalStore(ae,se,$?()=>q($(),M):se)}catch(je){throw te.current&&(je.message+=` +The error may be correlated with this previous error: +${te.current.stack} + +`),je}Kf(()=>{te.current=void 0,F.current=void 0,U.current=ue});const ie=C.useMemo(()=>C.createElement(k,{...ue,ref:L}),[L,k,ue]);return C.useMemo(()=>v?C.createElement(A.Provider,{value:V},ie):ie,[A,ie,V])}const R=C.memo(N);if(R.WrappedComponent=k,R.displayName=N.displayName=S,d){const I=C.forwardRef(function(M,A){return C.createElement(R,{...M,reactReduxForwardedRef:A})});return I.displayName=S,I.WrappedComponent=k,Bx(I,k)}return Bx(R,k)}}var fE=iD;function rD(e){const{children:t,context:n,serverState:i,store:r}=e,o=C.useMemo(()=>{const d=cE(r);return{store:r,subscription:d,getServerState:i?()=>i:void 0}},[r,i]),a=C.useMemo(()=>r.getState(),[r]);Kf(()=>{const{subscription:d}=o;return d.onStateChange=d.notifyNestedSubs,d.trySubscribe(),a!==r.getState()&&d.notifyNestedSubs(),()=>{d.tryUnsubscribe(),d.onStateChange=void 0}},[o,a]);const c=n||dE;return C.createElement(c.Provider,{value:o},t)}var sD=rD,oD="Invariant failed";function aD(e,t){throw new Error(oD)}var Hr=function(t){var n=t.top,i=t.right,r=t.bottom,o=t.left,a=i-o,c=r-n,d={top:n,right:i,bottom:r,left:o,width:a,height:c,x:o,y:n,center:{x:(i+o)/2,y:(r+n)/2}};return d},Pv=function(t,n){return{top:t.top-n.top,left:t.left-n.left,bottom:t.bottom+n.bottom,right:t.right+n.right}},_S=function(t,n){return{top:t.top+n.top,left:t.left+n.left,bottom:t.bottom-n.bottom,right:t.right-n.right}},lD=function(t,n){return{top:t.top+n.y,left:t.left+n.x,bottom:t.bottom+n.y,right:t.right+n.x}},Cg={top:0,right:0,bottom:0,left:0},Bv=function(t){var n=t.borderBox,i=t.margin,r=i===void 0?Cg:i,o=t.border,a=o===void 0?Cg:o,c=t.padding,d=c===void 0?Cg:c,m=Hr(Pv(n,r)),h=Hr(_S(n,a)),p=Hr(_S(h,d));return{marginBox:m,borderBox:Hr(n),paddingBox:h,contentBox:p,margin:r,border:a,padding:d}},Er=function(t){var n=t.slice(0,-2),i=t.slice(-2);if(i!=="px")return 0;var r=Number(n);return isNaN(r)&&aD(),r},cD=function(){return{x:window.pageXOffset,y:window.pageYOffset}},Zf=function(t,n){var i=t.borderBox,r=t.border,o=t.margin,a=t.padding,c=lD(i,n);return Bv({borderBox:c,border:r,margin:o,padding:a})},Qf=function(t,n){return n===void 0&&(n=cD()),Zf(t,n)},mE=function(t,n){var i={top:Er(n.marginTop),right:Er(n.marginRight),bottom:Er(n.marginBottom),left:Er(n.marginLeft)},r={top:Er(n.paddingTop),right:Er(n.paddingRight),bottom:Er(n.paddingBottom),left:Er(n.paddingLeft)},o={top:Er(n.borderTopWidth),right:Er(n.borderRightWidth),bottom:Er(n.borderBottomWidth),left:Er(n.borderLeftWidth)};return Bv({borderBox:t,margin:i,padding:r,border:o})},pE=function(t){var n=t.getBoundingClientRect(),i=window.getComputedStyle(t);return mE(n,i)},xu=function(t){var n=[],i=null,r=function(){for(var a=arguments.length,c=new Array(a),d=0;d<a;d++)c[d]=arguments[d];n=c,!i&&(i=requestAnimationFrame(function(){i=null,t.apply(void 0,n)}))};return r.cancel=function(){i&&(cancelAnimationFrame(i),i=null)},r};function Jf(){return Jf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Jf.apply(null,arguments)}function hE(e,t){}hE.bind(null,"warn");hE.bind(null,"error");function _o(){}function uD(e,t){return{...e,...t}}function Rr(e,t,n){const i=t.map(r=>{const o=uD(n,r.options);return e.addEventListener(r.eventName,r.fn,o),function(){e.removeEventListener(r.eventName,r.fn,o)}});return function(){i.forEach(o=>{o()})}}const dD="Invariant failed";class em extends Error{}em.prototype.toString=function(){return this.message};function Oe(e,t){throw new em(dD)}let fD=class extends Nt.Component{constructor(...t){super(...t),this.callbacks=null,this.unbind=_o,this.onWindowError=n=>{const i=this.getCallbacks();i.isDragging()&&i.tryAbort(),n.error instanceof em&&n.preventDefault()},this.getCallbacks=()=>{if(!this.callbacks)throw new Error("Unable to find AppCallbacks in <ErrorBoundary/>");return this.callbacks},this.setCallbacks=n=>{this.callbacks=n}}componentDidMount(){this.unbind=Rr(window,[{eventName:"error",fn:this.onWindowError}])}componentDidCatch(t){if(t instanceof em){this.setState({});return}throw t}componentWillUnmount(){this.unbind()}render(){return this.props.children(this.setCallbacks)}};const mD=` + Press space bar to start a drag. + When dragging you can use the arrow keys to move the item around and escape to cancel. + Some screen readers may require you to be in focus mode or to use your pass through key +`,tm=e=>e+1,pD=e=>` + You have lifted an item in position ${tm(e.source.index)} +`,gE=(e,t)=>{const n=e.droppableId===t.droppableId,i=tm(e.index),r=tm(t.index);return n?` + You have moved the item from position ${i} + to position ${r} + `:` + You have moved the item from position ${i} + in list ${e.droppableId} + to list ${t.droppableId} + in position ${r} + `},yE=(e,t,n)=>t.droppableId===n.droppableId?` + The item ${e} + has been combined with ${n.draggableId}`:` + The item ${e} + in list ${t.droppableId} + has been combined with ${n.draggableId} + in list ${n.droppableId} + `,hD=e=>{const t=e.destination;if(t)return gE(e.source,t);const n=e.combine;return n?yE(e.draggableId,e.source,n):"You are over an area that cannot be dropped on"},kS=e=>` + The item has returned to its starting position + of ${tm(e.index)} +`,gD=e=>{if(e.reason==="CANCEL")return` + Movement cancelled. + ${kS(e.source)} + `;const t=e.destination,n=e.combine;return t?` + You have dropped the item. + ${gE(e.source,t)} + `:n?` + You have dropped the item. + ${yE(e.draggableId,e.source,n)} + `:` + The item has been dropped while not over a drop area. + ${kS(e.source)} + `},Mf={dragHandleUsageInstructions:mD,onDragStart:pD,onDragUpdate:hD,onDragEnd:gD};function yD(e,t){return!!(e===t||Number.isNaN(e)&&Number.isNaN(t))}function xE(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!yD(e[n],t[n]))return!1;return!0}function nn(e,t){const n=C.useState(()=>({inputs:t,result:e()}))[0],i=C.useRef(!0),r=C.useRef(n),a=i.current||!!(t&&r.current.inputs&&xE(t,r.current.inputs))?r.current:{inputs:t,result:e()};return C.useEffect(()=>{i.current=!1,r.current=a},[a]),a.result}function it(e,t){return nn(()=>e,t)}const ki={x:0,y:0},Ti=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),fr=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),ko=(e,t)=>e.x===t.x&&e.y===t.y,Vl=e=>({x:e.x!==0?-e.x:0,y:e.y!==0?-e.y:0}),sa=(e,t,n=0)=>e==="x"?{x:t,y:n}:{x:n,y:t},vu=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2),SS=(e,t)=>Math.min(...t.map(n=>vu(e,n))),vE=e=>t=>({x:e(t.x),y:e(t.y)});var xD=(e,t)=>{const n=Hr({top:Math.max(t.top,e.top),right:Math.min(t.right,e.right),bottom:Math.min(t.bottom,e.bottom),left:Math.max(t.left,e.left)});return n.width<=0||n.height<=0?null:n};const Pu=(e,t)=>({top:e.top+t.y,left:e.left+t.x,bottom:e.bottom+t.y,right:e.right+t.x}),wS=e=>[{x:e.left,y:e.top},{x:e.right,y:e.top},{x:e.left,y:e.bottom},{x:e.right,y:e.bottom}],vD={top:0,right:0,bottom:0,left:0},bD=(e,t)=>t?Pu(e,t.scroll.diff.displacement):e,_D=(e,t,n)=>n&&n.increasedBy?{...e,[t.end]:e[t.end]+n.increasedBy[t.line]}:e,kD=(e,t)=>t&&t.shouldClipSubject?xD(t.pageMarginBox,e):Hr(e);var wl=({page:e,withPlaceholder:t,axis:n,frame:i})=>{const r=bD(e.marginBox,i),o=_D(r,n,t),a=kD(o,i);return{page:e,withPlaceholder:t,active:a}},$v=(e,t)=>{e.frame||Oe();const n=e.frame,i=fr(t,n.scroll.initial),r=Vl(i),o={...n,scroll:{initial:n.scroll.initial,current:t,diff:{value:i,displacement:r},max:n.scroll.max}},a=wl({page:e.subject.page,withPlaceholder:e.subject.withPlaceholder,axis:e.axis,frame:o});return{...e,frame:o,subject:a}};function _i(e,t=xE){let n=null;function i(...r){if(n&&n.lastThis===this&&t(r,n.lastArgs))return n.lastResult;const o=e.apply(this,r);return n={lastResult:o,lastArgs:r,lastThis:this},o}return i.clear=function(){n=null},i}const bE=_i(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),_E=_i(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),Lm=_i(e=>Object.values(e)),SD=_i(e=>Object.values(e));var Ul=_i((e,t)=>SD(t).filter(i=>e===i.descriptor.droppableId).sort((i,r)=>i.descriptor.index-r.descriptor.index));function Hv(e){return e.at&&e.at.type==="REORDER"?e.at.destination:null}function zm(e){return e.at&&e.at.type==="COMBINE"?e.at.combine:null}var Pm=_i((e,t)=>t.filter(n=>n.descriptor.id!==e.descriptor.id)),wD=({isMovingForward:e,draggable:t,destination:n,insideDestination:i,previousImpact:r})=>{if(!n.isCombineEnabled||!Hv(r))return null;function a(x){const v={type:"COMBINE",combine:{draggableId:x,droppableId:n.descriptor.id}};return{...r,at:v}}const c=r.displaced.all,d=c.length?c[0]:null;if(e)return d?a(d):null;const m=Pm(t,i);if(!d){if(!m.length)return null;const x=m[m.length-1];return a(x.descriptor.id)}const h=m.findIndex(x=>x.descriptor.id===d);h===-1&&Oe();const p=h-1;if(p<0)return null;const g=m[p];return a(g.descriptor.id)},Gl=(e,t)=>e.descriptor.droppableId===t.descriptor.id;const kE={point:ki,value:0},bu={invisible:{},visible:{},all:[]},CD={displaced:bu,displacedBy:kE,at:null};var Ar=(e,t)=>n=>e<=n&&n<=t,SE=e=>{const t=Ar(e.top,e.bottom),n=Ar(e.left,e.right);return i=>{if(t(i.top)&&t(i.bottom)&&n(i.left)&&n(i.right))return!0;const o=t(i.top)||t(i.bottom),a=n(i.left)||n(i.right);if(o&&a)return!0;const d=i.top<e.top&&i.bottom>e.bottom,m=i.left<e.left&&i.right>e.right;return d&&m?!0:d&&a||m&&o}},jD=e=>{const t=Ar(e.top,e.bottom),n=Ar(e.left,e.right);return i=>t(i.top)&&t(i.bottom)&&n(i.left)&&n(i.right)};const Fv={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},wE={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"};var ED=e=>t=>{const n=Ar(t.top,t.bottom),i=Ar(t.left,t.right);return r=>e===Fv?n(r.top)&&n(r.bottom):i(r.left)&&i(r.right)};const ND=(e,t)=>{const n=t.frame?t.frame.scroll.diff.displacement:ki;return Pu(e,n)},ID=(e,t,n)=>t.subject.active?n(t.subject.active)(e):!1,TD=(e,t,n)=>n(t)(e),Vv=({target:e,destination:t,viewport:n,withDroppableDisplacement:i,isVisibleThroughFrameFn:r})=>{const o=i?ND(e,t):e;return ID(o,t,r)&&TD(o,n,r)},RD=e=>Vv({...e,isVisibleThroughFrameFn:SE}),CE=e=>Vv({...e,isVisibleThroughFrameFn:jD}),AD=e=>Vv({...e,isVisibleThroughFrameFn:ED(e.destination.axis)}),MD=(e,t,n)=>{if(typeof n=="boolean")return n;if(!t)return!0;const{invisible:i,visible:r}=t;if(i[e])return!1;const o=r[e];return o?o.shouldAnimate:!0};function DD(e,t){const n=e.page.marginBox,i={top:t.point.y,right:0,bottom:0,left:t.point.x};return Hr(Pv(n,i))}function _u({afterDragging:e,destination:t,displacedBy:n,viewport:i,forceShouldAnimate:r,last:o}){return e.reduce(function(c,d){const m=DD(d,n),h=d.descriptor.id;if(c.all.push(h),!RD({target:m,destination:t,viewport:i,withDroppableDisplacement:!0}))return c.invisible[d.descriptor.id]=!0,c;const g=MD(h,o,r),x={draggableId:h,shouldAnimate:g};return c.visible[h]=x,c},{all:[],visible:{},invisible:{}})}function OD(e,t){if(!e.length)return 0;const n=e[e.length-1].descriptor.index;return t.inHomeList?n:n+1}function CS({insideDestination:e,inHomeList:t,displacedBy:n,destination:i}){const r=OD(e,{inHomeList:t});return{displaced:bu,displacedBy:n,at:{type:"REORDER",destination:{droppableId:i.descriptor.id,index:r}}}}function nm({draggable:e,insideDestination:t,destination:n,viewport:i,displacedBy:r,last:o,index:a,forceShouldAnimate:c}){const d=Gl(e,n);if(a==null)return CS({insideDestination:t,inHomeList:d,displacedBy:r,destination:n});const m=t.find(v=>v.descriptor.index===a);if(!m)return CS({insideDestination:t,inHomeList:d,displacedBy:r,destination:n});const h=Pm(e,t),p=t.indexOf(m),g=h.slice(p);return{displaced:_u({afterDragging:g,destination:n,displacedBy:r,last:o,viewport:i.frame,forceShouldAnimate:c}),displacedBy:r,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:a}}}}function Co(e,t){return!!t.effected[e]}var LD=({isMovingForward:e,destination:t,draggables:n,combine:i,afterCritical:r})=>{if(!t.isCombineEnabled)return null;const o=i.draggableId,c=n[o].descriptor.index;return Co(o,r)?e?c:c-1:e?c+1:c},zD=({isMovingForward:e,isInHomeList:t,insideDestination:n,location:i})=>{if(!n.length)return null;const r=i.index,o=e?r+1:r-1,a=n[0].descriptor.index,c=n[n.length-1].descriptor.index,d=t?c:c+1;return o<a||o>d?null:o},PD=({isMovingForward:e,isInHomeList:t,draggable:n,draggables:i,destination:r,insideDestination:o,previousImpact:a,viewport:c,afterCritical:d})=>{const m=a.at;if(m||Oe(),m.type==="REORDER"){const p=zD({isMovingForward:e,isInHomeList:t,location:m.destination,insideDestination:o});return p==null?null:nm({draggable:n,insideDestination:o,destination:r,viewport:c,last:a.displaced,displacedBy:a.displacedBy,index:p})}const h=LD({isMovingForward:e,destination:r,displaced:a.displaced,draggables:i,combine:m.combine,afterCritical:d});return h==null?null:nm({draggable:n,insideDestination:o,destination:r,viewport:c,last:a.displaced,displacedBy:a.displacedBy,index:h})},BD=({displaced:e,afterCritical:t,combineWith:n,displacedBy:i})=>{const r=!!(e.visible[n]||e.invisible[n]);return Co(n,t)?r?ki:Vl(i.point):r?i.point:ki},$D=({afterCritical:e,impact:t,draggables:n})=>{const i=zm(t);i||Oe();const r=i.draggableId,o=n[r].page.borderBox.center,a=BD({displaced:t.displaced,afterCritical:e,combineWith:r,displacedBy:t.displacedBy});return Ti(o,a)};const jE=(e,t)=>t.margin[e.start]+t.borderBox[e.size]/2,HD=(e,t)=>t.margin[e.end]+t.borderBox[e.size]/2,Uv=(e,t,n)=>t[e.crossAxisStart]+n.margin[e.crossAxisStart]+n.borderBox[e.crossAxisSize]/2,jS=({axis:e,moveRelativeTo:t,isMoving:n})=>sa(e.line,t.marginBox[e.end]+jE(e,n),Uv(e,t.marginBox,n)),ES=({axis:e,moveRelativeTo:t,isMoving:n})=>sa(e.line,t.marginBox[e.start]-HD(e,n),Uv(e,t.marginBox,n)),FD=({axis:e,moveInto:t,isMoving:n})=>sa(e.line,t.contentBox[e.start]+jE(e,n),Uv(e,t.contentBox,n));var VD=({impact:e,draggable:t,draggables:n,droppable:i,afterCritical:r})=>{const o=Ul(i.descriptor.id,n),a=t.page,c=i.axis;if(!o.length)return FD({axis:c,moveInto:i.page,isMoving:a});const{displaced:d,displacedBy:m}=e,h=d.all[0];if(h){const g=n[h];if(Co(h,r))return ES({axis:c,moveRelativeTo:g.page,isMoving:a});const x=Zf(g.page,m.point);return ES({axis:c,moveRelativeTo:x,isMoving:a})}const p=o[o.length-1];if(p.descriptor.id===t.descriptor.id)return a.borderBox.center;if(Co(p.descriptor.id,r)){const g=Zf(p.page,Vl(r.displacedBy.point));return jS({axis:c,moveRelativeTo:g,isMoving:a})}return jS({axis:c,moveRelativeTo:p.page,isMoving:a})},$x=(e,t)=>{const n=e.frame;return n?Ti(t,n.scroll.diff.displacement):t};const UD=({impact:e,draggable:t,droppable:n,draggables:i,afterCritical:r})=>{const o=t.page.borderBox.center,a=e.at;return!n||!a?o:a.type==="REORDER"?VD({impact:e,draggable:t,draggables:i,droppable:n,afterCritical:r}):$D({impact:e,draggables:i,afterCritical:r})};var Bm=e=>{const t=UD(e),n=e.droppable;return n?$x(n,t):t},EE=(e,t)=>{const n=fr(t,e.scroll.initial),i=Vl(n);return{frame:Hr({top:t.y,bottom:t.y+e.frame.height,left:t.x,right:t.x+e.frame.width}),scroll:{initial:e.scroll.initial,max:e.scroll.max,current:t,diff:{value:n,displacement:i}}}};function NS(e,t){return e.map(n=>t[n])}function GD(e,t){for(let n=0;n<t.length;n++){const i=t[n].visible[e];if(i)return i}return null}var qD=({impact:e,viewport:t,destination:n,draggables:i,maxScrollChange:r})=>{const o=EE(t,Ti(t.scroll.current,r)),a=n.frame?$v(n,Ti(n.frame.scroll.current,r)):n,c=e.displaced,d=_u({afterDragging:NS(c.all,i),destination:n,displacedBy:e.displacedBy,viewport:o.frame,last:c,forceShouldAnimate:!1}),m=_u({afterDragging:NS(c.all,i),destination:a,displacedBy:e.displacedBy,viewport:t.frame,last:c,forceShouldAnimate:!1}),h={},p={},g=[c,d,m];return c.all.forEach(v=>{const b=GD(v,g);if(b){p[v]=b;return}h[v]=!0}),{...e,displaced:{all:c.all,invisible:h,visible:p}}},WD=(e,t)=>Ti(e.scroll.diff.displacement,t),Gv=({pageBorderBoxCenter:e,draggable:t,viewport:n})=>{const i=WD(n,e),r=fr(i,t.page.borderBox.center);return Ti(t.client.borderBox.center,r)},NE=({draggable:e,destination:t,newPageBorderBoxCenter:n,viewport:i,withDroppableDisplacement:r,onlyOnMainAxis:o=!1})=>{const a=fr(n,e.page.borderBox.center),d={target:Pu(e.page.borderBox,a),destination:t,withDroppableDisplacement:r,viewport:i};return o?AD(d):CE(d)},YD=({isMovingForward:e,draggable:t,destination:n,draggables:i,previousImpact:r,viewport:o,previousPageBorderBoxCenter:a,previousClientSelection:c,afterCritical:d})=>{if(!n.isEnabled)return null;const m=Ul(n.descriptor.id,i),h=Gl(t,n),p=wD({isMovingForward:e,draggable:t,destination:n,insideDestination:m,previousImpact:r})||PD({isMovingForward:e,isInHomeList:h,draggable:t,draggables:i,destination:n,insideDestination:m,previousImpact:r,viewport:o,afterCritical:d});if(!p)return null;const g=Bm({impact:p,draggable:t,droppable:n,draggables:i,afterCritical:d});if(NE({draggable:t,destination:n,newPageBorderBoxCenter:g,viewport:o.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0}))return{clientSelection:Gv({pageBorderBoxCenter:g,draggable:t,viewport:o}),impact:p,scrollJumpRequest:null};const v=fr(g,a),b=qD({impact:p,viewport:o,destination:n,draggables:i,maxScrollChange:v});return{clientSelection:c,impact:b,scrollJumpRequest:v}};const Hi=e=>{const t=e.subject.active;return t||Oe(),t};var XD=({isMovingForward:e,pageBorderBoxCenter:t,source:n,droppables:i,viewport:r})=>{const o=n.subject.active;if(!o)return null;const a=n.axis,c=Ar(o[a.start],o[a.end]),d=Lm(i).filter(h=>h!==n).filter(h=>h.isEnabled).filter(h=>!!h.subject.active).filter(h=>SE(r.frame)(Hi(h))).filter(h=>{const p=Hi(h);return e?o[a.crossAxisEnd]<p[a.crossAxisEnd]:p[a.crossAxisStart]<o[a.crossAxisStart]}).filter(h=>{const p=Hi(h),g=Ar(p[a.start],p[a.end]);return c(p[a.start])||c(p[a.end])||g(o[a.start])||g(o[a.end])}).sort((h,p)=>{const g=Hi(h)[a.crossAxisStart],x=Hi(p)[a.crossAxisStart];return e?g-x:x-g}).filter((h,p,g)=>Hi(h)[a.crossAxisStart]===Hi(g[0])[a.crossAxisStart]);if(!d.length)return null;if(d.length===1)return d[0];const m=d.filter(h=>Ar(Hi(h)[a.start],Hi(h)[a.end])(t[a.line]));return m.length===1?m[0]:m.length>1?m.sort((h,p)=>Hi(h)[a.start]-Hi(p)[a.start])[0]:d.sort((h,p)=>{const g=SS(t,wS(Hi(h))),x=SS(t,wS(Hi(p)));return g!==x?g-x:Hi(h)[a.start]-Hi(p)[a.start]})[0]};const IS=(e,t)=>{const n=e.page.borderBox.center;return Co(e.descriptor.id,t)?fr(n,t.displacedBy.point):n},KD=(e,t)=>{const n=e.page.borderBox;return Co(e.descriptor.id,t)?Pu(n,Vl(t.displacedBy.point)):n};var ZD=({pageBorderBoxCenter:e,viewport:t,destination:n,insideDestination:i,afterCritical:r})=>i.filter(a=>CE({target:KD(a,r),destination:n,viewport:t.frame,withDroppableDisplacement:!0})).sort((a,c)=>{const d=vu(e,$x(n,IS(a,r))),m=vu(e,$x(n,IS(c,r)));return d<m?-1:m<d?1:a.descriptor.index-c.descriptor.index})[0]||null,Bu=_i(function(t,n){const i=n[t.line];return{value:i,point:sa(t.line,i)}});const QD=(e,t,n)=>{const i=e.axis;if(e.descriptor.mode==="virtual")return sa(i.line,t[i.line]);const r=e.subject.page.contentBox[i.size],d=Ul(e.descriptor.id,n).reduce((m,h)=>m+h.client.marginBox[i.size],0)+t[i.line]-r;return d<=0?null:sa(i.line,d)},IE=(e,t)=>({...e,scroll:{...e.scroll,max:t}}),TE=(e,t,n)=>{const i=e.frame;Gl(t,e)&&Oe(),e.subject.withPlaceholder&&Oe();const r=Bu(e.axis,t.displaceBy).point,o=QD(e,r,n),a={placeholderSize:r,increasedBy:o,oldFrameMaxScroll:e.frame?e.frame.scroll.max:null};if(!i){const h=wl({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:e.frame});return{...e,subject:h}}const c=o?Ti(i.scroll.max,o):i.scroll.max,d=IE(i,c),m=wl({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:d});return{...e,subject:m,frame:d}},JD=e=>{const t=e.subject.withPlaceholder;t||Oe();const n=e.frame;if(!n){const a=wl({page:e.subject.page,axis:e.axis,frame:null,withPlaceholder:null});return{...e,subject:a}}const i=t.oldFrameMaxScroll;i||Oe();const r=IE(n,i),o=wl({page:e.subject.page,axis:e.axis,frame:r,withPlaceholder:null});return{...e,subject:o,frame:r}};var eO=({previousPageBorderBoxCenter:e,moveRelativeTo:t,insideDestination:n,draggable:i,draggables:r,destination:o,viewport:a,afterCritical:c})=>{if(!t){if(n.length)return null;const p={displaced:bu,displacedBy:kE,at:{type:"REORDER",destination:{droppableId:o.descriptor.id,index:0}}},g=Bm({impact:p,draggable:i,droppable:o,draggables:r,afterCritical:c}),x=Gl(i,o)?o:TE(o,i,r);return NE({draggable:i,destination:x,newPageBorderBoxCenter:g,viewport:a.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})?p:null}const d=e[o.axis.line]<=t.page.borderBox.center[o.axis.line],m=(()=>{const p=t.descriptor.index;return t.descriptor.id===i.descriptor.id||d?p:p+1})(),h=Bu(o.axis,i.displaceBy);return nm({draggable:i,insideDestination:n,destination:o,viewport:a,displacedBy:h,last:bu,index:m})},tO=({isMovingForward:e,previousPageBorderBoxCenter:t,draggable:n,isOver:i,draggables:r,droppables:o,viewport:a,afterCritical:c})=>{const d=XD({isMovingForward:e,pageBorderBoxCenter:t,source:i,droppables:o,viewport:a});if(!d)return null;const m=Ul(d.descriptor.id,r),h=ZD({pageBorderBoxCenter:t,viewport:a,destination:d,insideDestination:m,afterCritical:c}),p=eO({previousPageBorderBoxCenter:t,destination:d,draggable:n,draggables:r,moveRelativeTo:h,insideDestination:m,viewport:a,afterCritical:c});if(!p)return null;const g=Bm({impact:p,draggable:n,droppable:d,draggables:r,afterCritical:c});return{clientSelection:Gv({pageBorderBoxCenter:g,draggable:n,viewport:a}),impact:p,scrollJumpRequest:null}},mr=e=>{const t=e.at;return t?t.type==="REORDER"?t.destination.droppableId:t.combine.droppableId:null};const nO=(e,t)=>{const n=mr(e);return n?t[n]:null};var iO=({state:e,type:t})=>{const n=nO(e.impact,e.dimensions.droppables),i=!!n,r=e.dimensions.droppables[e.critical.droppable.id],o=n||r,a=o.axis.direction,c=a==="vertical"&&(t==="MOVE_UP"||t==="MOVE_DOWN")||a==="horizontal"&&(t==="MOVE_LEFT"||t==="MOVE_RIGHT");if(c&&!i)return null;const d=t==="MOVE_DOWN"||t==="MOVE_RIGHT",m=e.dimensions.draggables[e.critical.draggable.id],h=e.current.page.borderBoxCenter,{draggables:p,droppables:g}=e.dimensions;return c?YD({isMovingForward:d,previousPageBorderBoxCenter:h,draggable:m,destination:o,draggables:p,viewport:e.viewport,previousClientSelection:e.current.client.selection,previousImpact:e.impact,afterCritical:e.afterCritical}):tO({isMovingForward:d,previousPageBorderBoxCenter:h,draggable:m,isOver:o,draggables:p,droppables:g,viewport:e.viewport,afterCritical:e.afterCritical})};function ea(e){return e.phase==="DRAGGING"||e.phase==="COLLECTING"}function RE(e){const t=Ar(e.top,e.bottom),n=Ar(e.left,e.right);return function(r){return t(r.y)&&n(r.x)}}function rO(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}function sO({pageBorderBox:e,draggable:t,candidates:n}){const i=t.page.borderBox.center,r=n.map(o=>{const a=o.axis,c=sa(o.axis.line,e.center[a.line],o.page.borderBox.center[a.crossAxisLine]);return{id:o.descriptor.id,distance:vu(i,c)}}).sort((o,a)=>a.distance-o.distance);return r[0]?r[0].id:null}function oO({pageBorderBox:e,draggable:t,droppables:n}){const i=Lm(n).filter(r=>{if(!r.isEnabled)return!1;const o=r.subject.active;if(!o||!rO(e,o))return!1;if(RE(o)(e.center))return!0;const a=r.axis,c=o.center[a.crossAxisLine],d=e[a.crossAxisStart],m=e[a.crossAxisEnd],h=Ar(o[a.crossAxisStart],o[a.crossAxisEnd]),p=h(d),g=h(m);return!p&&!g?!0:p?d<c:m>c});return i.length?i.length===1?i[0].descriptor.id:sO({pageBorderBox:e,draggable:t,candidates:i}):null}const AE=(e,t)=>Hr(Pu(e,t));var aO=(e,t)=>{const n=e.frame;return n?AE(t,n.scroll.diff.value):t};function ME({displaced:e,id:t}){return!!(e.visible[t]||e.invisible[t])}function lO({draggable:e,closest:t,inHomeList:n}){return t?n&&t.descriptor.index>e.descriptor.index?t.descriptor.index-1:t.descriptor.index:null}var cO=({pageBorderBoxWithDroppableScroll:e,draggable:t,destination:n,insideDestination:i,last:r,viewport:o,afterCritical:a})=>{const c=n.axis,d=Bu(n.axis,t.displaceBy),m=d.value,h=e[c.start],p=e[c.end],x=Pm(t,i).find(b=>{const k=b.descriptor.id,w=b.page.borderBox.center[c.line],S=Co(k,a),j=ME({displaced:r,id:k});return S?j?p<=w:h<w-m:j?p<=w+m:h<w})||null,v=lO({draggable:t,closest:x,inHomeList:Gl(t,n)});return nm({draggable:t,insideDestination:i,destination:n,viewport:o,last:r,displacedBy:d,index:v})};const uO=4;var dO=({draggable:e,pageBorderBoxWithDroppableScroll:t,previousImpact:n,destination:i,insideDestination:r,afterCritical:o})=>{if(!i.isCombineEnabled)return null;const a=i.axis,c=Bu(i.axis,e.displaceBy),d=c.value,m=t[a.start],h=t[a.end],g=Pm(e,r).find(v=>{const b=v.descriptor.id,k=v.page.borderBox,S=k[a.size]/uO,j=Co(b,o),N=ME({displaced:n.displaced,id:b});return j?N?h>k[a.start]+S&&h<k[a.end]-S:m>k[a.start]-d+S&&m<k[a.end]-d-S:N?h>k[a.start]+d+S&&h<k[a.end]+d-S:m>k[a.start]+S&&m<k[a.end]-S});return g?{displacedBy:c,displaced:n.displaced,at:{type:"COMBINE",combine:{draggableId:g.descriptor.id,droppableId:i.descriptor.id}}}:null},DE=({pageOffset:e,draggable:t,draggables:n,droppables:i,previousImpact:r,viewport:o,afterCritical:a})=>{const c=AE(t.page.borderBox,e),d=oO({pageBorderBox:c,draggable:t,droppables:i});if(!d)return CD;const m=i[d],h=Ul(m.descriptor.id,n),p=aO(m,c);return dO({pageBorderBoxWithDroppableScroll:p,draggable:t,previousImpact:r,destination:m,insideDestination:h,afterCritical:a})||cO({pageBorderBoxWithDroppableScroll:p,draggable:t,destination:m,insideDestination:h,last:r.displaced,viewport:o,afterCritical:a})},qv=(e,t)=>({...e,[t.descriptor.id]:t});const fO=({previousImpact:e,impact:t,droppables:n})=>{const i=mr(e),r=mr(t);if(!i||i===r)return n;const o=n[i];if(!o.subject.withPlaceholder)return n;const a=JD(o);return qv(n,a)};var mO=({draggable:e,draggables:t,droppables:n,previousImpact:i,impact:r})=>{const o=fO({previousImpact:i,impact:r,droppables:n}),a=mr(r);if(!a)return o;const c=n[a];if(Gl(e,c)||c.subject.withPlaceholder)return o;const d=TE(c,e,t);return qv(o,d)},ou=({state:e,clientSelection:t,dimensions:n,viewport:i,impact:r,scrollJumpRequest:o})=>{const a=i||e.viewport,c=n||e.dimensions,d=t||e.current.client.selection,m=fr(d,e.initial.client.selection),h={offset:m,selection:d,borderBoxCenter:Ti(e.initial.client.borderBoxCenter,m)},p={selection:Ti(h.selection,a.scroll.current),borderBoxCenter:Ti(h.borderBoxCenter,a.scroll.current),offset:Ti(h.offset,a.scroll.diff.value)},g={client:h,page:p};if(e.phase==="COLLECTING")return{...e,dimensions:c,viewport:a,current:g};const x=c.draggables[e.critical.draggable.id],v=r||DE({pageOffset:p.offset,draggable:x,draggables:c.draggables,droppables:c.droppables,previousImpact:e.impact,viewport:a,afterCritical:e.afterCritical}),b=mO({draggable:x,impact:v,previousImpact:e.impact,draggables:c.draggables,droppables:c.droppables});return{...e,current:g,dimensions:{draggables:c.draggables,droppables:b},impact:v,viewport:a,scrollJumpRequest:o||null,forceShouldAnimate:o?!1:null}};function pO(e,t){return e.map(n=>t[n])}var OE=({impact:e,viewport:t,draggables:n,destination:i,forceShouldAnimate:r})=>{const o=e.displaced,a=pO(o.all,n),c=_u({afterDragging:a,destination:i,displacedBy:e.displacedBy,viewport:t.frame,forceShouldAnimate:r,last:o});return{...e,displaced:c}},LE=({impact:e,draggable:t,droppable:n,draggables:i,viewport:r,afterCritical:o})=>{const a=Bm({impact:e,draggable:t,draggables:i,droppable:n,afterCritical:o});return Gv({pageBorderBoxCenter:a,draggable:t,viewport:r})},zE=({state:e,dimensions:t,viewport:n})=>{e.movementMode!=="SNAP"&&Oe();const i=e.impact,r=n||e.viewport,o=t||e.dimensions,{draggables:a,droppables:c}=o,d=a[e.critical.draggable.id],m=mr(i);m||Oe();const h=c[m],p=OE({impact:i,viewport:r,destination:h,draggables:a}),g=LE({impact:p,draggable:d,droppable:h,draggables:a,viewport:r,afterCritical:e.afterCritical});return ou({impact:p,clientSelection:g,state:e,dimensions:o,viewport:r})},hO=e=>({index:e.index,droppableId:e.droppableId}),PE=({draggable:e,home:t,draggables:n,viewport:i})=>{const r=Bu(t.axis,e.displaceBy),o=Ul(t.descriptor.id,n),a=o.indexOf(e);a===-1&&Oe();const c=o.slice(a+1),d=c.reduce((g,x)=>(g[x.descriptor.id]=!0,g),{}),m={inVirtualList:t.descriptor.mode==="virtual",displacedBy:r,effected:d};return{impact:{displaced:_u({afterDragging:c,destination:t,displacedBy:r,last:null,viewport:i.frame,forceShouldAnimate:!1}),displacedBy:r,at:{type:"REORDER",destination:hO(e.descriptor)}},afterCritical:m}},gO=(e,t)=>({draggables:e.draggables,droppables:qv(e.droppables,t)}),yO=({draggable:e,offset:t,initialWindowScroll:n})=>{const i=Zf(e.client,t),r=Qf(i,n);return{...e,placeholder:{...e.placeholder,client:i},client:i,page:r}},xO=e=>{const t=e.frame;return t||Oe(),t},vO=({additions:e,updatedDroppables:t,viewport:n})=>{const i=n.scroll.diff.value;return e.map(r=>{const o=r.descriptor.droppableId,a=t[o],d=xO(a).scroll.diff.value,m=Ti(i,d);return yO({draggable:r,offset:m,initialWindowScroll:n.scroll.initial})})},bO=({state:e,published:t})=>{const n=t.modified.map(w=>{const S=e.dimensions.droppables[w.droppableId];return $v(S,w.scroll)}),i={...e.dimensions.droppables,...bE(n)},r=_E(vO({additions:t.additions,updatedDroppables:i,viewport:e.viewport})),o={...e.dimensions.draggables,...r};t.removals.forEach(w=>{delete o[w]});const a={droppables:i,draggables:o},c=mr(e.impact),d=c?a.droppables[c]:null,m=a.draggables[e.critical.draggable.id],h=a.droppables[e.critical.droppable.id],{impact:p,afterCritical:g}=PE({draggable:m,home:h,draggables:o,viewport:e.viewport}),x=d&&d.isCombineEnabled?e.impact:p,v=DE({pageOffset:e.current.page.offset,draggable:a.draggables[e.critical.draggable.id],draggables:a.draggables,droppables:a.droppables,previousImpact:x,viewport:e.viewport,afterCritical:g}),b={...e,phase:"DRAGGING",impact:v,onLiftImpact:p,dimensions:a,afterCritical:g,forceShouldAnimate:!1};return e.phase==="COLLECTING"?b:{...b,phase:"DROP_PENDING",reason:e.reason,isWaiting:!1}};const Hx=e=>e.movementMode==="SNAP",jg=(e,t,n)=>{const i=gO(e.dimensions,t);return!Hx(e)||n?ou({state:e,dimensions:i}):zE({state:e,dimensions:i})};function Eg(e){return e.isDragging&&e.movementMode==="SNAP"?{...e,scrollJumpRequest:null}:e}const TS={phase:"IDLE",completed:null,shouldFlush:!1};var _O=(e=TS,t)=>{if(t.type==="FLUSH")return{...TS,shouldFlush:!0};if(t.type==="INITIAL_PUBLISH"){e.phase!=="IDLE"&&Oe();const{critical:n,clientSelection:i,viewport:r,dimensions:o,movementMode:a}=t.payload,c=o.draggables[n.draggable.id],d=o.droppables[n.droppable.id],m={selection:i,borderBoxCenter:c.client.borderBox.center,offset:ki},h={client:m,page:{selection:Ti(m.selection,r.scroll.initial),borderBoxCenter:Ti(m.selection,r.scroll.initial),offset:Ti(m.selection,r.scroll.diff.value)}},p=Lm(o.droppables).every(b=>!b.isFixedOnPage),{impact:g,afterCritical:x}=PE({draggable:c,home:d,draggables:o.draggables,viewport:r});return{phase:"DRAGGING",isDragging:!0,critical:n,movementMode:a,dimensions:o,initial:h,current:h,isWindowScrollAllowed:p,impact:g,afterCritical:x,onLiftImpact:g,viewport:r,scrollJumpRequest:null,forceShouldAnimate:null}}if(t.type==="COLLECTION_STARTING")return e.phase==="COLLECTING"||e.phase==="DROP_PENDING"?e:(e.phase!=="DRAGGING"&&Oe(),{...e,phase:"COLLECTING"});if(t.type==="PUBLISH_WHILE_DRAGGING")return e.phase==="COLLECTING"||e.phase==="DROP_PENDING"||Oe(),bO({state:e,published:t.payload});if(t.type==="MOVE"){if(e.phase==="DROP_PENDING")return e;ea(e)||Oe();const{client:n}=t.payload;return ko(n,e.current.client.selection)?e:ou({state:e,clientSelection:n,impact:Hx(e)?e.impact:null})}if(t.type==="UPDATE_DROPPABLE_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="COLLECTING")return Eg(e);ea(e)||Oe();const{id:n,newScroll:i}=t.payload,r=e.dimensions.droppables[n];if(!r)return e;const o=$v(r,i);return jg(e,o,!1)}if(t.type==="UPDATE_DROPPABLE_IS_ENABLED"){if(e.phase==="DROP_PENDING")return e;ea(e)||Oe();const{id:n,isEnabled:i}=t.payload,r=e.dimensions.droppables[n];r||Oe(),r.isEnabled===i&&Oe();const o={...r,isEnabled:i};return jg(e,o,!0)}if(t.type==="UPDATE_DROPPABLE_IS_COMBINE_ENABLED"){if(e.phase==="DROP_PENDING")return e;ea(e)||Oe();const{id:n,isCombineEnabled:i}=t.payload,r=e.dimensions.droppables[n];r||Oe(),r.isCombineEnabled===i&&Oe();const o={...r,isCombineEnabled:i};return jg(e,o,!0)}if(t.type==="MOVE_BY_WINDOW_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="DROP_ANIMATING")return e;ea(e)||Oe(),e.isWindowScrollAllowed||Oe();const n=t.payload.newScroll;if(ko(e.viewport.scroll.current,n))return Eg(e);const i=EE(e.viewport,n);return Hx(e)?zE({state:e,viewport:i}):ou({state:e,viewport:i})}if(t.type==="UPDATE_VIEWPORT_MAX_SCROLL"){if(!ea(e))return e;const n=t.payload.maxScroll;if(ko(n,e.viewport.scroll.max))return e;const i={...e.viewport,scroll:{...e.viewport.scroll,max:n}};return{...e,viewport:i}}if(t.type==="MOVE_UP"||t.type==="MOVE_DOWN"||t.type==="MOVE_LEFT"||t.type==="MOVE_RIGHT"){if(e.phase==="COLLECTING"||e.phase==="DROP_PENDING")return e;e.phase!=="DRAGGING"&&Oe();const n=iO({state:e,type:t.type});return n?ou({state:e,impact:n.impact,clientSelection:n.clientSelection,scrollJumpRequest:n.scrollJumpRequest}):e}if(t.type==="DROP_PENDING"){const n=t.payload.reason;return e.phase!=="COLLECTING"&&Oe(),{...e,phase:"DROP_PENDING",isWaiting:!0,reason:n}}if(t.type==="DROP_ANIMATE"){const{completed:n,dropDuration:i,newHomeClientOffset:r}=t.payload;return e.phase==="DRAGGING"||e.phase==="DROP_PENDING"||Oe(),{phase:"DROP_ANIMATING",completed:n,dropDuration:i,newHomeClientOffset:r,dimensions:e.dimensions}}if(t.type==="DROP_COMPLETE"){const{completed:n}=t.payload;return{phase:"IDLE",completed:n,shouldFlush:!1}}return e};function mn(e,t){return e instanceof Object&&"type"in e&&e.type===t}const kO=e=>({type:"BEFORE_INITIAL_CAPTURE",payload:e}),SO=e=>({type:"LIFT",payload:e}),wO=e=>({type:"INITIAL_PUBLISH",payload:e}),CO=e=>({type:"PUBLISH_WHILE_DRAGGING",payload:e}),jO=()=>({type:"COLLECTION_STARTING",payload:null}),EO=e=>({type:"UPDATE_DROPPABLE_SCROLL",payload:e}),NO=e=>({type:"UPDATE_DROPPABLE_IS_ENABLED",payload:e}),IO=e=>({type:"UPDATE_DROPPABLE_IS_COMBINE_ENABLED",payload:e}),BE=e=>({type:"MOVE",payload:e}),TO=e=>({type:"MOVE_BY_WINDOW_SCROLL",payload:e}),RO=e=>({type:"UPDATE_VIEWPORT_MAX_SCROLL",payload:e}),AO=()=>({type:"MOVE_UP",payload:null}),MO=()=>({type:"MOVE_DOWN",payload:null}),DO=()=>({type:"MOVE_RIGHT",payload:null}),OO=()=>({type:"MOVE_LEFT",payload:null}),Wv=()=>({type:"FLUSH",payload:null}),LO=e=>({type:"DROP_ANIMATE",payload:e}),Yv=e=>({type:"DROP_COMPLETE",payload:e}),$E=e=>({type:"DROP",payload:e}),zO=e=>({type:"DROP_PENDING",payload:e}),HE=()=>({type:"DROP_ANIMATION_FINISHED",payload:null});var PO=e=>({getState:t,dispatch:n})=>i=>r=>{if(!mn(r,"LIFT")){i(r);return}const{id:o,clientSelection:a,movementMode:c}=r.payload,d=t();d.phase==="DROP_ANIMATING"&&n(Yv({completed:d.completed})),t().phase!=="IDLE"&&Oe(),n(Wv()),n(kO({draggableId:o,movementMode:c}));const h={draggableId:o,scrollOptions:{shouldPublishImmediately:c==="SNAP"}},{critical:p,dimensions:g,viewport:x}=e.startPublishing(h);n(wO({critical:p,dimensions:g,clientSelection:a,movementMode:c,viewport:x}))},BO=e=>()=>t=>n=>{mn(n,"INITIAL_PUBLISH")&&e.dragging(),mn(n,"DROP_ANIMATE")&&e.dropping(n.payload.completed.result.reason),(mn(n,"FLUSH")||mn(n,"DROP_COMPLETE"))&&e.resting(),t(n)};const Xv={outOfTheWay:"cubic-bezier(0.2, 0, 0, 1)",drop:"cubic-bezier(.2,1,.1,1)"},ku={opacity:{drop:0,combining:.7},scale:{drop:.75}},FE={outOfTheWay:.2,minDropTime:.33,maxDropTime:.55},Xo=`${FE.outOfTheWay}s ${Xv.outOfTheWay}`,au={fluid:`opacity ${Xo}`,snap:`transform ${Xo}, opacity ${Xo}`,drop:e=>{const t=`${e}s ${Xv.drop}`;return`transform ${t}, opacity ${t}`},outOfTheWay:`transform ${Xo}`,placeholder:`height ${Xo}, width ${Xo}, margin ${Xo}`},RS=e=>ko(e,ki)?void 0:`translate(${e.x}px, ${e.y}px)`,Fx={moveTo:RS,drop:(e,t)=>{const n=RS(e);if(n)return t?`${n} scale(${ku.scale.drop})`:n}},{minDropTime:Vx,maxDropTime:VE}=FE,$O=VE-Vx,AS=1500,HO=.6;var FO=({current:e,destination:t,reason:n})=>{const i=vu(e,t);if(i<=0)return Vx;if(i>=AS)return VE;const r=i/AS,o=Vx+$O*r,a=n==="CANCEL"?o*HO:o;return Number(a.toFixed(2))},VO=({impact:e,draggable:t,dimensions:n,viewport:i,afterCritical:r})=>{const{draggables:o,droppables:a}=n,c=mr(e),d=c?a[c]:null,m=a[t.descriptor.droppableId],h=LE({impact:e,draggable:t,draggables:o,afterCritical:r,droppable:d||m,viewport:i});return fr(h,t.client.borderBox.center)},UO=({draggables:e,reason:t,lastImpact:n,home:i,viewport:r,onLiftImpact:o})=>!n.at||t!=="DROP"?{impact:OE({draggables:e,impact:o,destination:i,viewport:r,forceShouldAnimate:!0}),didDropInsideDroppable:!1}:n.at.type==="REORDER"?{impact:n,didDropInsideDroppable:!0}:{impact:{...n,displaced:bu},didDropInsideDroppable:!0};const GO=({getState:e,dispatch:t})=>n=>i=>{if(!mn(i,"DROP")){n(i);return}const r=e(),o=i.payload.reason;if(r.phase==="COLLECTING"){t(zO({reason:o}));return}if(r.phase==="IDLE")return;r.phase==="DROP_PENDING"&&r.isWaiting&&Oe(),r.phase==="DRAGGING"||r.phase==="DROP_PENDING"||Oe();const c=r.critical,d=r.dimensions,m=d.draggables[r.critical.draggable.id],{impact:h,didDropInsideDroppable:p}=UO({reason:o,lastImpact:r.impact,afterCritical:r.afterCritical,onLiftImpact:r.onLiftImpact,home:r.dimensions.droppables[r.critical.droppable.id],viewport:r.viewport,draggables:r.dimensions.draggables}),g=p?Hv(h):null,x=p?zm(h):null,v={index:c.draggable.index,droppableId:c.droppable.id},b={draggableId:m.descriptor.id,type:m.descriptor.type,source:v,reason:o,mode:r.movementMode,destination:g,combine:x},k=VO({impact:h,draggable:m,dimensions:d,viewport:r.viewport,afterCritical:r.afterCritical}),w={critical:r.critical,afterCritical:r.afterCritical,result:b,impact:h};if(!(!ko(r.current.client.offset,k)||!!b.combine)){t(Yv({completed:w}));return}const j=FO({current:r.current.client.offset,destination:k,reason:o});t(LO({newHomeClientOffset:k,dropDuration:j,completed:w}))};var UE=()=>({x:window.pageXOffset,y:window.pageYOffset});function qO(e){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:t=>{t.target!==window&&t.target!==window.document||e()}}}function WO({onWindowScroll:e}){function t(){e(UE())}const n=xu(t),i=qO(n);let r=_o;function o(){return r!==_o}function a(){o()&&Oe(),r=Rr(window,[i])}function c(){o()||Oe(),n.cancel(),r(),r=_o}return{start:a,stop:c,isActive:o}}const YO=e=>mn(e,"DROP_COMPLETE")||mn(e,"DROP_ANIMATE")||mn(e,"FLUSH"),XO=e=>{const t=WO({onWindowScroll:n=>{e.dispatch(TO({newScroll:n}))}});return n=>i=>{!t.isActive()&&mn(i,"INITIAL_PUBLISH")&&t.start(),t.isActive()&&YO(i)&&t.stop(),n(i)}};var KO=e=>{let t=!1,n=!1;const i=setTimeout(()=>{n=!0}),r=o=>{t||n||(t=!0,e(o),clearTimeout(i))};return r.wasCalled=()=>t,r},ZO=()=>{const e=[],t=r=>{const o=e.findIndex(c=>c.timerId===r);o===-1&&Oe();const[a]=e.splice(o,1);a.callback()};return{add:r=>{const o=setTimeout(()=>t(o)),a={timerId:o,callback:r};e.push(a)},flush:()=>{if(!e.length)return;const r=[...e];e.length=0,r.forEach(o=>{clearTimeout(o.timerId),o.callback()})}}};const QO=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.droppableId===t.droppableId&&e.index===t.index,JO=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.draggableId===t.draggableId&&e.droppableId===t.droppableId,eL=(e,t)=>{if(e===t)return!0;const n=e.draggable.id===t.draggable.id&&e.draggable.droppableId===t.draggable.droppableId&&e.draggable.type===t.draggable.type&&e.draggable.index===t.draggable.index,i=e.droppable.id===t.droppable.id&&e.droppable.type===t.droppable.type;return n&&i},zc=(e,t)=>{t()},rf=(e,t)=>({draggableId:e.draggable.id,type:e.droppable.type,source:{droppableId:e.droppable.id,index:e.draggable.index},mode:t});function Ng(e,t,n,i){if(!e){n(i(t));return}const r=KO(n);e(t,{announce:r}),r.wasCalled()||n(i(t))}var tL=(e,t)=>{const n=ZO();let i=null;const r=(p,g)=>{i&&Oe(),zc("onBeforeCapture",()=>{const x=e().onBeforeCapture;x&&x({draggableId:p,mode:g})})},o=(p,g)=>{i&&Oe(),zc("onBeforeDragStart",()=>{const x=e().onBeforeDragStart;x&&x(rf(p,g))})},a=(p,g)=>{i&&Oe();const x=rf(p,g);i={mode:g,lastCritical:p,lastLocation:x.source,lastCombine:null},n.add(()=>{zc("onDragStart",()=>Ng(e().onDragStart,x,t,Mf.onDragStart))})},c=(p,g)=>{const x=Hv(g),v=zm(g);i||Oe();const b=!eL(p,i.lastCritical);b&&(i.lastCritical=p);const k=!QO(i.lastLocation,x);k&&(i.lastLocation=x);const w=!JO(i.lastCombine,v);if(w&&(i.lastCombine=v),!b&&!k&&!w)return;const S={...rf(p,i.mode),combine:v,destination:x};n.add(()=>{zc("onDragUpdate",()=>Ng(e().onDragUpdate,S,t,Mf.onDragUpdate))})},d=()=>{i||Oe(),n.flush()},m=p=>{i||Oe(),i=null,zc("onDragEnd",()=>Ng(e().onDragEnd,p,t,Mf.onDragEnd))};return{beforeCapture:r,beforeStart:o,start:a,update:c,flush:d,drop:m,abort:()=>{if(!i)return;const p={...rf(i.lastCritical,i.mode),combine:null,destination:null,reason:"CANCEL"};m(p)}}},nL=(e,t)=>{const n=tL(e,t);return i=>r=>o=>{if(mn(o,"BEFORE_INITIAL_CAPTURE")){n.beforeCapture(o.payload.draggableId,o.payload.movementMode);return}if(mn(o,"INITIAL_PUBLISH")){const c=o.payload.critical;n.beforeStart(c,o.payload.movementMode),r(o),n.start(c,o.payload.movementMode);return}if(mn(o,"DROP_COMPLETE")){const c=o.payload.completed.result;n.flush(),r(o),n.drop(c);return}if(r(o),mn(o,"FLUSH")){n.abort();return}const a=i.getState();a.phase==="DRAGGING"&&n.update(a.critical,a.impact)}};const iL=e=>t=>n=>{if(!mn(n,"DROP_ANIMATION_FINISHED")){t(n);return}const i=e.getState();i.phase!=="DROP_ANIMATING"&&Oe(),e.dispatch(Yv({completed:i.completed}))},rL=e=>{let t=null,n=null;function i(){n&&(cancelAnimationFrame(n),n=null),t&&(t(),t=null)}return r=>o=>{if((mn(o,"FLUSH")||mn(o,"DROP_COMPLETE")||mn(o,"DROP_ANIMATION_FINISHED"))&&i(),r(o),!mn(o,"DROP_ANIMATE"))return;const a={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){e.getState().phase==="DROP_ANIMATING"&&e.dispatch(HE())}};n=requestAnimationFrame(()=>{n=null,t=Rr(window,[a])})}};var sL=e=>()=>t=>n=>{(mn(n,"DROP_COMPLETE")||mn(n,"FLUSH")||mn(n,"DROP_ANIMATE"))&&e.stopPublishing(),t(n)},oL=e=>{let t=!1;return()=>n=>i=>{if(mn(i,"INITIAL_PUBLISH")){t=!0,e.tryRecordFocus(i.payload.critical.draggable.id),n(i),e.tryRestoreFocusRecorded();return}if(n(i),!!t){if(mn(i,"FLUSH")){t=!1,e.tryRestoreFocusRecorded();return}if(mn(i,"DROP_COMPLETE")){t=!1;const r=i.payload.completed.result;r.combine&&e.tryShiftRecord(r.draggableId,r.combine.draggableId),e.tryRestoreFocusRecorded()}}}};const aL=e=>mn(e,"DROP_COMPLETE")||mn(e,"DROP_ANIMATE")||mn(e,"FLUSH");var lL=e=>t=>n=>i=>{if(aL(i)){e.stop(),n(i);return}if(mn(i,"INITIAL_PUBLISH")){n(i);const r=t.getState();r.phase!=="DRAGGING"&&Oe(),e.start(r);return}n(i),e.scroll(t.getState())};const cL=e=>t=>n=>{if(t(n),!mn(n,"PUBLISH_WHILE_DRAGGING"))return;const i=e.getState();i.phase==="DROP_PENDING"&&(i.isWaiting||e.dispatch($E({reason:i.reason})))},uL=oE;var dL=({dimensionMarshal:e,focusMarshal:t,styleMarshal:n,getResponders:i,announce:r,autoScroller:o})=>sE(_O,uL(l5(BO(n),sL(e),PO(e),GO,iL,rL,cL,lL(o),XO,oL(t),nL(i,r))));const Ig=()=>({additions:{},removals:{},modified:{}});function fL({registry:e,callbacks:t}){let n=Ig(),i=null;const r=()=>{i||(t.collectionStarting(),i=requestAnimationFrame(()=>{i=null;const{additions:d,removals:m,modified:h}=n,p=Object.keys(d).map(v=>e.draggable.getById(v).getDimension(ki)).sort((v,b)=>v.descriptor.index-b.descriptor.index),g=Object.keys(h).map(v=>{const k=e.droppable.getById(v).callbacks.getScrollWhileDragging();return{droppableId:v,scroll:k}}),x={additions:p,removals:Object.keys(m),modified:g};n=Ig(),t.publish(x)}))};return{add:d=>{const m=d.descriptor.id;n.additions[m]=d,n.modified[d.descriptor.droppableId]=!0,n.removals[m]&&delete n.removals[m],r()},remove:d=>{const m=d.descriptor;n.removals[m.id]=!0,n.modified[m.droppableId]=!0,n.additions[m.id]&&delete n.additions[m.id],r()},stop:()=>{i&&(cancelAnimationFrame(i),i=null,n=Ig())}}}var GE=({scrollHeight:e,scrollWidth:t,height:n,width:i})=>{const r=fr({x:t,y:e},{x:i,y:n});return{x:Math.max(0,r.x),y:Math.max(0,r.y)}},qE=()=>{const e=document.documentElement;return e||Oe(),e},WE=()=>{const e=qE();return GE({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,width:e.clientWidth,height:e.clientHeight})},mL=()=>{const e=UE(),t=WE(),n=e.y,i=e.x,r=qE(),o=r.clientWidth,a=r.clientHeight,c=i+o,d=n+a;return{frame:Hr({top:n,left:i,right:c,bottom:d}),scroll:{initial:e,current:e,max:t,diff:{value:ki,displacement:ki}}}},pL=({critical:e,scrollOptions:t,registry:n})=>{const i=mL(),r=i.scroll.current,o=e.droppable,a=n.droppable.getAllByType(o.type).map(h=>h.callbacks.getDimensionAndWatchScroll(r,t)),c=n.draggable.getAllByType(e.draggable.type).map(h=>h.getDimension(r));return{dimensions:{draggables:_E(c),droppables:bE(a)},critical:e,viewport:i}};function MS(e,t,n){return!(n.descriptor.id===t.id||n.descriptor.type!==t.type||e.droppable.getById(n.descriptor.droppableId).descriptor.mode!=="virtual")}var hL=(e,t)=>{let n=null;const i=fL({callbacks:{publish:t.publishWhileDragging,collectionStarting:t.collectionStarting},registry:e}),r=(g,x)=>{e.droppable.exists(g)||Oe(),n&&t.updateDroppableIsEnabled({id:g,isEnabled:x})},o=(g,x)=>{n&&(e.droppable.exists(g)||Oe(),t.updateDroppableIsCombineEnabled({id:g,isCombineEnabled:x}))},a=(g,x)=>{n&&(e.droppable.exists(g)||Oe(),t.updateDroppableScroll({id:g,newScroll:x}))},c=(g,x)=>{n&&e.droppable.getById(g).callbacks.scroll(x)},d=()=>{if(!n)return;i.stop();const g=n.critical.droppable;e.droppable.getAllByType(g.type).forEach(x=>x.callbacks.dragStopped()),n.unsubscribe(),n=null},m=g=>{n||Oe();const x=n.critical.draggable;g.type==="ADDITION"&&MS(e,x,g.value)&&i.add(g.value),g.type==="REMOVAL"&&MS(e,x,g.value)&&i.remove(g.value)};return{updateDroppableIsEnabled:r,updateDroppableIsCombineEnabled:o,scrollDroppable:c,updateDroppableScroll:a,startPublishing:g=>{n&&Oe();const x=e.draggable.getById(g.draggableId),v=e.droppable.getById(x.descriptor.droppableId),b={draggable:x.descriptor,droppable:v.descriptor},k=e.subscribe(m);return n={critical:b,unsubscribe:k},pL({critical:b,registry:e,scrollOptions:g.scrollOptions})},stopPublishing:d}},YE=(e,t)=>e.phase==="IDLE"?!0:e.phase!=="DROP_ANIMATING"||e.completed.result.draggableId===t?!1:e.completed.result.reason==="DROP",gL=e=>{window.scrollBy(e.x,e.y)};const yL=_i(e=>Lm(e).filter(t=>!(!t.isEnabled||!t.frame))),xL=(e,t)=>yL(t).find(i=>(i.frame||Oe(),RE(i.frame.pageMarginBox)(e)))||null;var vL=({center:e,destination:t,droppables:n})=>{if(t){const r=n[t];return r.frame?r:null}return xL(e,n)};const Su={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:e=>e**2,durationDampening:{stopDampeningAt:1200,accelerateAt:360},disabled:!1};var bL=(e,t,n=()=>Su)=>{const i=n(),r=e[t.size]*i.startFromPercentage,o=e[t.size]*i.maxScrollAtPercentage;return{startScrollingFrom:r,maxScrollValueAt:o}},XE=({startOfRange:e,endOfRange:t,current:n})=>{const i=t-e;return i===0?0:(n-e)/i},Kv=1,_L=(e,t,n=()=>Su)=>{const i=n();if(e>t.startScrollingFrom)return 0;if(e<=t.maxScrollValueAt)return i.maxPixelScroll;if(e===t.startScrollingFrom)return Kv;const o=1-XE({startOfRange:t.maxScrollValueAt,endOfRange:t.startScrollingFrom,current:e}),a=i.maxPixelScroll*i.ease(o);return Math.ceil(a)},kL=(e,t,n)=>{const i=n(),r=i.durationDampening.accelerateAt,o=i.durationDampening.stopDampeningAt,a=t,c=o,m=Date.now()-a;if(m>=o)return e;if(m<r)return Kv;const h=XE({startOfRange:r,endOfRange:c,current:m}),p=e*i.ease(h);return Math.ceil(p)},DS=({distanceToEdge:e,thresholds:t,dragStartTime:n,shouldUseTimeDampening:i,getAutoScrollerOptions:r})=>{const o=_L(e,t,r);return o===0?0:i?Math.max(kL(o,n,r),Kv):o},OS=({container:e,distanceToEdges:t,dragStartTime:n,axis:i,shouldUseTimeDampening:r,getAutoScrollerOptions:o})=>{const a=bL(e,i,o);return t[i.end]<t[i.start]?DS({distanceToEdge:t[i.end],thresholds:a,dragStartTime:n,shouldUseTimeDampening:r,getAutoScrollerOptions:o}):-1*DS({distanceToEdge:t[i.start],thresholds:a,dragStartTime:n,shouldUseTimeDampening:r,getAutoScrollerOptions:o})},SL=({container:e,subject:t,proposedScroll:n})=>{const i=t.height>e.height,r=t.width>e.width;return!r&&!i?n:r&&i?null:{x:r?0:n.x,y:i?0:n.y}};const wL=vE(e=>e===0?0:e);var KE=({dragStartTime:e,container:t,subject:n,center:i,shouldUseTimeDampening:r,getAutoScrollerOptions:o})=>{const a={top:i.y-t.top,right:t.right-i.x,bottom:t.bottom-i.y,left:i.x-t.left},c=OS({container:t,distanceToEdges:a,dragStartTime:e,axis:Fv,shouldUseTimeDampening:r,getAutoScrollerOptions:o}),d=OS({container:t,distanceToEdges:a,dragStartTime:e,axis:wE,shouldUseTimeDampening:r,getAutoScrollerOptions:o}),m=wL({x:d,y:c});if(ko(m,ki))return null;const h=SL({container:t,subject:n,proposedScroll:m});return h?ko(h,ki)?null:h:null};const CL=vE(e=>e===0?0:e>0?1:-1),Zv=(()=>{const e=(t,n)=>t<0?t:t>n?t-n:0;return({current:t,max:n,change:i})=>{const r=Ti(t,i),o={x:e(r.x,n.x),y:e(r.y,n.y)};return ko(o,ki)?null:o}})(),ZE=({max:e,current:t,change:n})=>{const i={x:Math.max(t.x,e.x),y:Math.max(t.y,e.y)},r=CL(n),o=Zv({max:i,current:t,change:r});return!o||r.x!==0&&o.x===0||r.y!==0&&o.y===0},Qv=(e,t)=>ZE({current:e.scroll.current,max:e.scroll.max,change:t}),jL=(e,t)=>{if(!Qv(e,t))return null;const n=e.scroll.max,i=e.scroll.current;return Zv({current:i,max:n,change:t})},Jv=(e,t)=>{const n=e.frame;return n?ZE({current:n.scroll.current,max:n.scroll.max,change:t}):!1},EL=(e,t)=>{const n=e.frame;return!n||!Jv(e,t)?null:Zv({current:n.scroll.current,max:n.scroll.max,change:t})};var NL=({viewport:e,subject:t,center:n,dragStartTime:i,shouldUseTimeDampening:r,getAutoScrollerOptions:o})=>{const a=KE({dragStartTime:i,container:e.frame,subject:t,center:n,shouldUseTimeDampening:r,getAutoScrollerOptions:o});return a&&Qv(e,a)?a:null},IL=({droppable:e,subject:t,center:n,dragStartTime:i,shouldUseTimeDampening:r,getAutoScrollerOptions:o})=>{const a=e.frame;if(!a)return null;const c=KE({dragStartTime:i,container:a.pageMarginBox,subject:t,center:n,shouldUseTimeDampening:r,getAutoScrollerOptions:o});return c&&Jv(e,c)?c:null},LS=({state:e,dragStartTime:t,shouldUseTimeDampening:n,scrollWindow:i,scrollDroppable:r,getAutoScrollerOptions:o})=>{const a=e.current.page.borderBoxCenter,d=e.dimensions.draggables[e.critical.draggable.id].page.marginBox;if(e.isWindowScrollAllowed){const p=e.viewport,g=NL({dragStartTime:t,viewport:p,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});if(g){i(g);return}}const m=vL({center:a,destination:mr(e.impact),droppables:e.dimensions.droppables});if(!m)return;const h=IL({dragStartTime:t,droppable:m,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});h&&r(m.descriptor.id,h)},TL=({scrollWindow:e,scrollDroppable:t,getAutoScrollerOptions:n=()=>Su})=>{const i=xu(e),r=xu(t);let o=null;const a=m=>{o||Oe();const{shouldUseTimeDampening:h,dragStartTime:p}=o;LS({state:m,scrollWindow:i,scrollDroppable:r,dragStartTime:p,shouldUseTimeDampening:h,getAutoScrollerOptions:n})};return{start:m=>{o&&Oe();const h=Date.now();let p=!1;const g=()=>{p=!0};LS({state:m,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:g,scrollDroppable:g,getAutoScrollerOptions:n}),o={dragStartTime:h,shouldUseTimeDampening:p},p&&a(m)},stop:()=>{o&&(i.cancel(),r.cancel(),o=null)},scroll:a}},RL=({move:e,scrollDroppable:t,scrollWindow:n})=>{const i=(c,d)=>{const m=Ti(c.current.client.selection,d);e({client:m})},r=(c,d)=>{if(!Jv(c,d))return d;const m=EL(c,d);if(!m)return t(c.descriptor.id,d),null;const h=fr(d,m);return t(c.descriptor.id,h),fr(d,h)},o=(c,d,m)=>{if(!c||!Qv(d,m))return m;const h=jL(d,m);if(!h)return n(m),null;const p=fr(m,h);return n(p),fr(m,p)};return c=>{const d=c.scrollJumpRequest;if(!d)return;const m=mr(c.impact);m||Oe();const h=r(c.dimensions.droppables[m],d);if(!h)return;const p=c.viewport,g=o(c.isWindowScrollAllowed,p,h);g&&i(c,g)}},AL=({scrollDroppable:e,scrollWindow:t,move:n,getAutoScrollerOptions:i})=>{const r=TL({scrollWindow:t,scrollDroppable:e,getAutoScrollerOptions:i}),o=RL({move:n,scrollWindow:t,scrollDroppable:e});return{scroll:d=>{if(!(i().disabled||d.phase!=="DRAGGING")){if(d.movementMode==="FLUID"){r.scroll(d);return}d.scrollJumpRequest&&o(d)}},start:r.start,stop:r.stop}};const Cl="data-rfd",jl=(()=>{const e=`${Cl}-drag-handle`;return{base:e,draggableId:`${e}-draggable-id`,contextId:`${e}-context-id`}})(),Ux=(()=>{const e=`${Cl}-draggable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),ML=(()=>{const e=`${Cl}-droppable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),zS={contextId:`${Cl}-scroll-container-context-id`},DL=e=>t=>`[${t}="${e}"]`,Pc=(e,t)=>e.map(n=>{const i=n.styles[t];return i?`${n.selector} { ${i} }`:""}).join(" "),OL="pointer-events: none;";var LL=e=>{const t=DL(e),n=(()=>{const c=` + cursor: -webkit-grab; + cursor: grab; + `;return{selector:t(jl.contextId),styles:{always:` + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + touch-action: manipulation; + `,resting:c,dragging:OL,dropAnimating:c}}})(),i=(()=>{const c=` + transition: ${au.outOfTheWay}; + `;return{selector:t(Ux.contextId),styles:{dragging:c,dropAnimating:c,userCancel:c}}})(),r={selector:t(ML.contextId),styles:{always:"overflow-anchor: none;"}},a=[i,n,r,{selector:"body",styles:{dragging:` + cursor: grabbing; + cursor: -webkit-grabbing; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + overflow-anchor: none; + `}}];return{always:Pc(a,"always"),resting:Pc(a,"resting"),dragging:Pc(a,"dragging"),dropAnimating:Pc(a,"dropAnimating"),userCancel:Pc(a,"userCancel")}};const pr=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?C.useLayoutEffect:C.useEffect,Tg=()=>{const e=document.querySelector("head");return e||Oe(),e},PS=e=>{const t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.type="text/css",t};function zL(e,t){const n=nn(()=>LL(e),[e]),i=C.useRef(null),r=C.useRef(null),o=it(_i(p=>{const g=r.current;g||Oe(),g.textContent=p}),[]),a=it(p=>{const g=i.current;g||Oe(),g.textContent=p},[]);pr(()=>{!i.current&&!r.current||Oe();const p=PS(t),g=PS(t);return i.current=p,r.current=g,p.setAttribute(`${Cl}-always`,e),g.setAttribute(`${Cl}-dynamic`,e),Tg().appendChild(p),Tg().appendChild(g),a(n.always),o(n.resting),()=>{const x=v=>{const b=v.current;b||Oe(),Tg().removeChild(b),v.current=null};x(i),x(r)}},[t,a,o,n.always,n.resting,e]);const c=it(()=>o(n.dragging),[o,n.dragging]),d=it(p=>{if(p==="DROP"){o(n.dropAnimating);return}o(n.userCancel)},[o,n.dropAnimating,n.userCancel]),m=it(()=>{r.current&&o(n.resting)},[o,n.resting]);return nn(()=>({dragging:c,dropping:d,resting:m}),[c,d,m])}function QE(e,t){return Array.from(e.querySelectorAll(t))}var JE=e=>e&&e.ownerDocument&&e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;function $m(e){return e instanceof JE(e).HTMLElement}function PL(e,t){const n=`[${jl.contextId}="${e}"]`,i=QE(document,n);if(!i.length)return null;const r=i.find(o=>o.getAttribute(jl.draggableId)===t);return!r||!$m(r)?null:r}function BL(e){const t=C.useRef({}),n=C.useRef(null),i=C.useRef(null),r=C.useRef(!1),o=it(function(g,x){const v={id:g,focus:x};return t.current[g]=v,function(){const k=t.current;k[g]!==v&&delete k[g]}},[]),a=it(function(g){const x=PL(e,g);x&&x!==document.activeElement&&x.focus()},[e]),c=it(function(g,x){n.current===g&&(n.current=x)},[]),d=it(function(){i.current||r.current&&(i.current=requestAnimationFrame(()=>{i.current=null;const g=n.current;g&&a(g)}))},[a]),m=it(function(g){n.current=null;const x=document.activeElement;x&&x.getAttribute(jl.draggableId)===g&&(n.current=g)},[]);return pr(()=>(r.current=!0,function(){r.current=!1;const g=i.current;g&&cancelAnimationFrame(g)}),[]),nn(()=>({register:o,tryRecordFocus:m,tryRestoreFocusRecorded:d,tryShiftRecord:c}),[o,m,d,c])}function $L(){const e={draggables:{},droppables:{}},t=[];function n(p){return t.push(p),function(){const x=t.indexOf(p);x!==-1&&t.splice(x,1)}}function i(p){t.length&&t.forEach(g=>g(p))}function r(p){return e.draggables[p]||null}function o(p){const g=r(p);return g||Oe(),g}const a={register:p=>{e.draggables[p.descriptor.id]=p,i({type:"ADDITION",value:p})},update:(p,g)=>{const x=e.draggables[g.descriptor.id];x&&x.uniqueId===p.uniqueId&&(delete e.draggables[g.descriptor.id],e.draggables[p.descriptor.id]=p)},unregister:p=>{const g=p.descriptor.id,x=r(g);x&&p.uniqueId===x.uniqueId&&(delete e.draggables[g],e.droppables[p.descriptor.droppableId]&&i({type:"REMOVAL",value:p}))},getById:o,findById:r,exists:p=>!!r(p),getAllByType:p=>Object.values(e.draggables).filter(g=>g.descriptor.type===p)};function c(p){return e.droppables[p]||null}function d(p){const g=c(p);return g||Oe(),g}const m={register:p=>{e.droppables[p.descriptor.id]=p},unregister:p=>{const g=c(p.descriptor.id);g&&p.uniqueId===g.uniqueId&&delete e.droppables[p.descriptor.id]},getById:d,findById:c,exists:p=>!!c(p),getAllByType:p=>Object.values(e.droppables).filter(g=>g.descriptor.type===p)};function h(){e.draggables={},e.droppables={},t.length=0}return{draggable:a,droppable:m,subscribe:n,clean:h}}function HL(){const e=nn($L,[]);return C.useEffect(()=>function(){e.clean()},[e]),e}var e0=Nt.createContext(null),im=()=>{const e=document.body;return e||Oe(),e};const FL={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"},VL=e=>`rfd-announcement-${e}`;function UL(e){const t=nn(()=>VL(e),[e]),n=C.useRef(null);return C.useEffect(function(){const o=document.createElement("div");return n.current=o,o.id=t,o.setAttribute("aria-live","assertive"),o.setAttribute("aria-atomic","true"),Jf(o.style,FL),im().appendChild(o),function(){setTimeout(function(){const d=im();d.contains(o)&&d.removeChild(o),o===n.current&&(n.current=null)})}},[t]),it(r=>{const o=n.current;if(o){o.textContent=r;return}},[])}const GL={separator:"::"};function t0(e,t=GL){const n=Nt.useId();return nn(()=>`${e}${t.separator}${n}`,[t.separator,e,n])}function qL({contextId:e,uniqueId:t}){return`rfd-hidden-text-${e}-${t}`}function WL({contextId:e,text:t}){const n=t0("hidden-text",{separator:"-"}),i=nn(()=>qL({contextId:e,uniqueId:n}),[n,e]);return C.useEffect(function(){const o=document.createElement("div");return o.id=i,o.textContent=t,o.style.display="none",im().appendChild(o),function(){const c=im();c.contains(o)&&c.removeChild(o)}},[i,t]),i}var Hm=Nt.createContext(null);function eN(e){const t=C.useRef(e);return C.useEffect(()=>{t.current=e}),t}function YL(){let e=null;function t(){return!!e}function n(a){return a===e}function i(a){e&&Oe();const c={abandon:a};return e=c,c}function r(){e||Oe(),e=null}function o(){e&&(e.abandon(),r())}return{isClaimed:t,isActive:n,claim:i,release:r,tryAbandon:o}}function wu(e){return e.phase==="IDLE"||e.phase==="DROP_ANIMATING"?!1:e.isDragging}const XL=9,KL=13,n0=27,tN=32,ZL=33,QL=34,JL=35,e6=36,t6=37,n6=38,i6=39,r6=40,s6={[KL]:!0,[XL]:!0};var nN=e=>{s6[e.keyCode]&&e.preventDefault()};const Fm=(()=>{const e="visibilitychange";return typeof document>"u"?e:[e,`ms${e}`,`webkit${e}`,`moz${e}`,`o${e}`].find(i=>`on${i}`in document)||e})(),iN=0,BS=5;function o6(e,t){return Math.abs(t.x-e.x)>=BS||Math.abs(t.y-e.y)>=BS}const $S={type:"IDLE"};function a6({cancel:e,completed:t,getPhase:n,setPhase:i}){return[{eventName:"mousemove",fn:r=>{const{button:o,clientX:a,clientY:c}=r;if(o!==iN)return;const d={x:a,y:c},m=n();if(m.type==="DRAGGING"){r.preventDefault(),m.actions.move(d);return}m.type!=="PENDING"&&Oe();const h=m.point;if(!o6(h,d))return;r.preventDefault();const p=m.actions.fluidLift(d);i({type:"DRAGGING",actions:p})}},{eventName:"mouseup",fn:r=>{const o=n();if(o.type!=="DRAGGING"){e();return}r.preventDefault(),o.actions.drop({shouldBlockNextClick:!0}),t()}},{eventName:"mousedown",fn:r=>{n().type==="DRAGGING"&&r.preventDefault(),e()}},{eventName:"keydown",fn:r=>{if(n().type==="PENDING"){e();return}if(r.keyCode===n0){r.preventDefault(),e();return}nN(r)}},{eventName:"resize",fn:e},{eventName:"scroll",options:{passive:!0,capture:!1},fn:()=>{n().type==="PENDING"&&e()}},{eventName:"webkitmouseforcedown",fn:r=>{const o=n();if(o.type==="IDLE"&&Oe(),o.actions.shouldRespectForcePress()){e();return}r.preventDefault()}},{eventName:Fm,fn:e}]}function l6(e){const t=C.useRef($S),n=C.useRef(_o),i=nn(()=>({eventName:"mousedown",fn:function(p){if(p.defaultPrevented||p.button!==iN||p.ctrlKey||p.metaKey||p.shiftKey||p.altKey)return;const g=e.findClosestDraggableId(p);if(!g)return;const x=e.tryGetLock(g,a,{sourceEvent:p});if(!x)return;p.preventDefault();const v={x:p.clientX,y:p.clientY};n.current(),m(x,v)}}),[e]),r=nn(()=>({eventName:"webkitmouseforcewillbegin",fn:h=>{if(h.defaultPrevented)return;const p=e.findClosestDraggableId(h);if(!p)return;const g=e.findOptionsForDraggable(p);g&&(g.shouldRespectForcePress||e.canGetLock(p)&&h.preventDefault())}}),[e]),o=it(function(){const p={passive:!1,capture:!0};n.current=Rr(window,[r,i],p)},[r,i]),a=it(()=>{t.current.type!=="IDLE"&&(t.current=$S,n.current(),o())},[o]),c=it(()=>{const h=t.current;a(),h.type==="DRAGGING"&&h.actions.cancel({shouldBlockNextClick:!0}),h.type==="PENDING"&&h.actions.abort()},[a]),d=it(function(){const p={capture:!0,passive:!1},g=a6({cancel:c,completed:a,getPhase:()=>t.current,setPhase:x=>{t.current=x}});n.current=Rr(window,g,p)},[c,a]),m=it(function(p,g){t.current.type!=="IDLE"&&Oe(),t.current={type:"PENDING",point:g,actions:p},d()},[d]);pr(function(){return o(),function(){n.current()}},[o])}function c6(){}const u6={[QL]:!0,[ZL]:!0,[e6]:!0,[JL]:!0};function d6(e,t){function n(){t(),e.cancel()}function i(){t(),e.drop()}return[{eventName:"keydown",fn:r=>{if(r.keyCode===n0){r.preventDefault(),n();return}if(r.keyCode===tN){r.preventDefault(),i();return}if(r.keyCode===r6){r.preventDefault(),e.moveDown();return}if(r.keyCode===n6){r.preventDefault(),e.moveUp();return}if(r.keyCode===i6){r.preventDefault(),e.moveRight();return}if(r.keyCode===t6){r.preventDefault(),e.moveLeft();return}if(u6[r.keyCode]){r.preventDefault();return}nN(r)}},{eventName:"mousedown",fn:n},{eventName:"mouseup",fn:n},{eventName:"click",fn:n},{eventName:"touchstart",fn:n},{eventName:"resize",fn:n},{eventName:"wheel",fn:n,options:{passive:!0}},{eventName:Fm,fn:n}]}function f6(e){const t=C.useRef(c6),n=nn(()=>({eventName:"keydown",fn:function(o){if(o.defaultPrevented||o.keyCode!==tN)return;const a=e.findClosestDraggableId(o);if(!a)return;const c=e.tryGetLock(a,h,{sourceEvent:o});if(!c)return;o.preventDefault();let d=!0;const m=c.snapLift();t.current();function h(){d||Oe(),d=!1,t.current(),i()}t.current=Rr(window,d6(m,h),{capture:!0,passive:!1})}}),[e]),i=it(function(){const o={passive:!1,capture:!0};t.current=Rr(window,[n],o)},[n]);pr(function(){return i(),function(){t.current()}},[i])}const Rg={type:"IDLE"},m6=120,p6=.15;function h6({cancel:e,getPhase:t}){return[{eventName:"orientationchange",fn:e},{eventName:"resize",fn:e},{eventName:"contextmenu",fn:n=>{n.preventDefault()}},{eventName:"keydown",fn:n=>{if(t().type!=="DRAGGING"){e();return}n.keyCode===n0&&n.preventDefault(),e()}},{eventName:Fm,fn:e}]}function g6({cancel:e,completed:t,getPhase:n}){return[{eventName:"touchmove",options:{capture:!1},fn:i=>{const r=n();if(r.type!=="DRAGGING"){e();return}r.hasMoved=!0;const{clientX:o,clientY:a}=i.touches[0],c={x:o,y:a};i.preventDefault(),r.actions.move(c)}},{eventName:"touchend",fn:i=>{const r=n();if(r.type!=="DRAGGING"){e();return}i.preventDefault(),r.actions.drop({shouldBlockNextClick:!0}),t()}},{eventName:"touchcancel",fn:i=>{if(n().type!=="DRAGGING"){e();return}i.preventDefault(),e()}},{eventName:"touchforcechange",fn:i=>{const r=n();r.type==="IDLE"&&Oe();const o=i.touches[0];if(!o||!(o.force>=p6))return;const c=r.actions.shouldRespectForcePress();if(r.type==="PENDING"){c&&e();return}if(c){if(r.hasMoved){i.preventDefault();return}e();return}i.preventDefault()}},{eventName:Fm,fn:e}]}function y6(e){const t=C.useRef(Rg),n=C.useRef(_o),i=it(function(){return t.current},[]),r=it(function(x){t.current=x},[]),o=nn(()=>({eventName:"touchstart",fn:function(x){if(x.defaultPrevented)return;const v=e.findClosestDraggableId(x);if(!v)return;const b=e.tryGetLock(v,c,{sourceEvent:x});if(!b)return;const k=x.touches[0],{clientX:w,clientY:S}=k,j={x:w,y:S};n.current(),p(b,j)}}),[e]),a=it(function(){const x={capture:!0,passive:!1};n.current=Rr(window,[o],x)},[o]),c=it(()=>{const g=t.current;g.type!=="IDLE"&&(g.type==="PENDING"&&clearTimeout(g.longPressTimerId),r(Rg),n.current(),a())},[a,r]),d=it(()=>{const g=t.current;c(),g.type==="DRAGGING"&&g.actions.cancel({shouldBlockNextClick:!0}),g.type==="PENDING"&&g.actions.abort()},[c]),m=it(function(){const x={capture:!0,passive:!1},v={cancel:d,completed:c,getPhase:i},b=Rr(window,g6(v),x),k=Rr(window,h6(v),x);n.current=function(){b(),k()}},[d,i,c]),h=it(function(){const x=i();x.type!=="PENDING"&&Oe();const v=x.actions.fluidLift(x.point);r({type:"DRAGGING",actions:v,hasMoved:!1})},[i,r]),p=it(function(x,v){i().type!=="IDLE"&&Oe();const b=setTimeout(h,m6);r({type:"PENDING",point:v,actions:x,longPressTimerId:b}),m()},[m,i,r,h]);pr(function(){return a(),function(){n.current();const v=i();v.type==="PENDING"&&(clearTimeout(v.longPressTimerId),r(Rg))}},[i,a,r]),pr(function(){return Rr(window,[{eventName:"touchmove",fn:()=>{},options:{capture:!1,passive:!1}}])},[])}const x6=["input","button","textarea","select","option","optgroup","video","audio"];function rN(e,t){if(t==null)return!1;if(x6.includes(t.tagName.toLowerCase()))return!0;const i=t.getAttribute("contenteditable");return i==="true"||i===""?!0:t===e?!1:rN(e,t.parentElement)}function v6(e,t){const n=t.target;return $m(n)?rN(e,n):!1}var b6=e=>Hr(e.getBoundingClientRect()).center;function _6(e){return e instanceof JE(e).Element}const k6=(()=>{const e="matches";return typeof document>"u"?e:[e,"msMatchesSelector","webkitMatchesSelector"].find(i=>i in Element.prototype)||e})();function sN(e,t){return e==null?null:e[k6](t)?e:sN(e.parentElement,t)}function S6(e,t){return e.closest?e.closest(t):sN(e,t)}function w6(e){return`[${jl.contextId}="${e}"]`}function C6(e,t){const n=t.target;if(!_6(n))return null;const i=w6(e),r=S6(n,i);return!r||!$m(r)?null:r}function j6(e,t){const n=C6(e,t);return n?n.getAttribute(jl.draggableId):null}function E6(e,t){const n=`[${Ux.contextId}="${e}"]`,r=QE(document,n).find(o=>o.getAttribute(Ux.id)===t);return!r||!$m(r)?null:r}function N6(e){e.preventDefault()}function sf({expected:e,phase:t,isLockActive:n,shouldWarn:i}){return!(!n()||e!==t)}function oN({lockAPI:e,store:t,registry:n,draggableId:i}){if(e.isClaimed())return!1;const r=n.draggable.findById(i);return!(!r||!r.options.isEnabled||!YE(t.getState(),i))}function I6({lockAPI:e,contextId:t,store:n,registry:i,draggableId:r,forceSensorStop:o,sourceEvent:a}){if(!oN({lockAPI:e,store:n,registry:i,draggableId:r}))return null;const d=i.draggable.getById(r),m=E6(t,d.descriptor.id);if(!m||a&&!d.options.canDragInteractiveElements&&v6(m,a))return null;const h=e.claim(o||_o);let p="PRE_DRAG";function g(){return d.options.shouldRespectForcePress}function x(){return e.isActive(h)}function v(O,R){sf({expected:O,phase:p,isLockActive:x,shouldWarn:!0})&&n.dispatch(R())}const b=v.bind(null,"DRAGGING");function k(O){function R(){e.release(),p="COMPLETED"}p!=="PRE_DRAG"&&(R(),Oe()),n.dispatch(SO(O.liftActionArgs)),p="DRAGGING";function D(I,L={shouldBlockNextClick:!1}){if(O.cleanup(),L.shouldBlockNextClick){const M=Rr(window,[{eventName:"click",fn:N6,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(M)}R(),n.dispatch($E({reason:I}))}return{isActive:()=>sf({expected:"DRAGGING",phase:p,isLockActive:x,shouldWarn:!1}),shouldRespectForcePress:g,drop:I=>D("DROP",I),cancel:I=>D("CANCEL",I),...O.actions}}function w(O){const R=xu(I=>{b(()=>BE({client:I}))});return{...k({liftActionArgs:{id:r,clientSelection:O,movementMode:"FLUID"},cleanup:()=>R.cancel(),actions:{move:R}}),move:R}}function S(){const O={moveUp:()=>b(AO),moveRight:()=>b(DO),moveDown:()=>b(MO),moveLeft:()=>b(OO)};return k({liftActionArgs:{id:r,clientSelection:b6(m),movementMode:"SNAP"},cleanup:_o,actions:O})}function j(){sf({expected:"PRE_DRAG",phase:p,isLockActive:x,shouldWarn:!0})&&e.release()}return{isActive:()=>sf({expected:"PRE_DRAG",phase:p,isLockActive:x,shouldWarn:!1}),shouldRespectForcePress:g,fluidLift:w,snapLift:S,abort:j}}const T6=[l6,f6,y6];function R6({contextId:e,store:t,registry:n,customSensors:i,enableDefaultSensors:r}){const o=[...r?T6:[],...i||[]],a=C.useState(()=>YL())[0],c=it(function(k,w){wu(k)&&!wu(w)&&a.tryAbandon()},[a]);pr(function(){let k=t.getState();return t.subscribe(()=>{const S=t.getState();c(k,S),k=S})},[a,t,c]),pr(()=>a.tryAbandon,[a.tryAbandon]);const d=it(b=>oN({lockAPI:a,registry:n,store:t,draggableId:b}),[a,n,t]),m=it((b,k,w)=>I6({lockAPI:a,registry:n,contextId:e,store:t,draggableId:b,forceSensorStop:k||null,sourceEvent:w&&w.sourceEvent?w.sourceEvent:null}),[e,a,n,t]),h=it(b=>j6(e,b),[e]),p=it(b=>{const k=n.draggable.findById(b);return k?k.options:null},[n.draggable]),g=it(function(){a.isClaimed()&&(a.tryAbandon(),t.getState().phase!=="IDLE"&&t.dispatch(Wv()))},[a,t]),x=it(()=>a.isClaimed(),[a]),v=nn(()=>({canGetLock:d,tryGetLock:m,findClosestDraggableId:h,findOptionsForDraggable:p,tryReleaseLock:g,isLockClaimed:x}),[d,m,h,p,g,x]);for(let b=0;b<o.length;b++)o[b](v)}const A6=e=>({onBeforeCapture:t=>{const n=()=>{e.onBeforeCapture&&e.onBeforeCapture(t)};Tm.flushSync(n)},onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragEnd:e.onDragEnd,onDragUpdate:e.onDragUpdate}),M6=e=>({...Su,...e.autoScrollerOptions,durationDampening:{...Su.durationDampening,...e.autoScrollerOptions}});function Bc(e){return e.current||Oe(),e.current}function D6(e){const{contextId:t,setCallbacks:n,sensors:i,nonce:r,dragHandleUsageInstructions:o}=e,a=C.useRef(null),c=eN(e),d=it(()=>A6(c.current),[c]),m=it(()=>M6(c.current),[c]),h=UL(t),p=WL({contextId:t,text:o}),g=zL(t,r),x=it(M=>{Bc(a).dispatch(M)},[]),v=nn(()=>fS({publishWhileDragging:CO,updateDroppableScroll:EO,updateDroppableIsEnabled:NO,updateDroppableIsCombineEnabled:IO,collectionStarting:jO},x),[x]),b=HL(),k=nn(()=>hL(b,v),[b,v]),w=nn(()=>AL({scrollWindow:gL,scrollDroppable:k.scrollDroppable,getAutoScrollerOptions:m,...fS({move:BE},x)}),[k.scrollDroppable,x,m]),S=BL(t),j=nn(()=>dL({announce:h,autoScroller:w,dimensionMarshal:k,focusMarshal:S,getResponders:d,styleMarshal:g}),[h,w,k,S,d,g]);a.current=j;const N=it(()=>{const M=Bc(a);M.getState().phase!=="IDLE"&&M.dispatch(Wv())},[]),O=it(()=>{const M=Bc(a).getState();return M.phase==="DROP_ANIMATING"?!0:M.phase==="IDLE"?!1:M.isDragging},[]),R=nn(()=>({isDragging:O,tryAbort:N}),[O,N]);n(R);const D=it(M=>YE(Bc(a).getState(),M),[]),I=it(()=>ea(Bc(a).getState()),[]),L=nn(()=>({marshal:k,focus:S,contextId:t,canLift:D,isMovementAllowed:I,dragHandleUsageInstructionsId:p,registry:b}),[t,k,p,S,D,I,b]);return R6({contextId:t,store:j,registry:b,customSensors:i||null,enableDefaultSensors:e.enableDefaultSensors!==!1}),C.useEffect(()=>N,[N]),Nt.createElement(Hm.Provider,{value:L},Nt.createElement(sD,{context:e0,store:j},e.children))}function O6(){return Nt.useId()}function L6(e){const t=O6(),n=e.dragHandleUsageInstructions||Mf.dragHandleUsageInstructions;return Nt.createElement(fD,null,i=>Nt.createElement(D6,{nonce:e.nonce,contextId:t,setCallbacks:i,dragHandleUsageInstructions:n,enableDefaultSensors:e.enableDefaultSensors,sensors:e.sensors,onBeforeCapture:e.onBeforeCapture,onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragUpdate:e.onDragUpdate,onDragEnd:e.onDragEnd,autoScrollerOptions:e.autoScrollerOptions},e.children))}const HS={dragging:5e3,dropAnimating:4500},z6=(e,t)=>t?au.drop(t.duration):e?au.snap:au.fluid,P6=(e,t)=>{if(e)return t?ku.opacity.drop:ku.opacity.combining},B6=e=>e.forceShouldAnimate!=null?e.forceShouldAnimate:e.mode==="SNAP";function $6(e){const n=e.dimension.client,{offset:i,combineWith:r,dropping:o}=e,a=!!r,c=B6(e),d=!!o,m=d?Fx.drop(i,a):Fx.moveTo(i);return{position:"fixed",top:n.marginBox.top,left:n.marginBox.left,boxSizing:"border-box",width:n.borderBox.width,height:n.borderBox.height,transition:z6(c,o),transform:m,opacity:P6(a,d),zIndex:d?HS.dropAnimating:HS.dragging,pointerEvents:"none"}}function H6(e){return{transform:Fx.moveTo(e.offset),transition:e.shouldAnimateDisplacement?void 0:"none"}}function F6(e){return e.type==="DRAGGING"?$6(e):H6(e)}function V6(e,t,n=ki){const i=window.getComputedStyle(t),r=t.getBoundingClientRect(),o=mE(r,i),a=Qf(o,n),c={client:o,tagName:t.tagName.toLowerCase(),display:i.display},d={x:o.marginBox.width,y:o.marginBox.height};return{descriptor:e,placeholder:c,displaceBy:d,client:o,page:a}}function U6(e){const t=t0("draggable"),{descriptor:n,registry:i,getDraggableRef:r,canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:c}=e,d=nn(()=>({canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:c}),[o,c,a]),m=it(x=>{const v=r();return v||Oe(),V6(n,v,x)},[n,r]),h=nn(()=>({uniqueId:t,descriptor:n,options:d,getDimension:m}),[n,m,d,t]),p=C.useRef(h),g=C.useRef(!0);pr(()=>(i.draggable.register(p.current),()=>i.draggable.unregister(p.current)),[i.draggable]),pr(()=>{if(g.current){g.current=!1;return}const x=p.current;p.current=h,i.draggable.update(h,x)},[h,i.draggable])}var i0=Nt.createContext(null);function rm(e){const t=C.useContext(e);return t||Oe(),t}function G6(e){e.preventDefault()}const q6=e=>{const t=C.useRef(null),n=it((R=null)=>{t.current=R},[]),i=it(()=>t.current,[]),{contextId:r,dragHandleUsageInstructionsId:o,registry:a}=rm(Hm),{type:c,droppableId:d}=rm(i0),m=nn(()=>({id:e.draggableId,index:e.index,type:c,droppableId:d}),[e.draggableId,e.index,c,d]),{children:h,draggableId:p,isEnabled:g,shouldRespectForcePress:x,canDragInteractiveElements:v,isClone:b,mapped:k,dropAnimationFinished:w}=e;if(!b){const R=nn(()=>({descriptor:m,registry:a,getDraggableRef:i,canDragInteractiveElements:v,shouldRespectForcePress:x,isEnabled:g}),[m,a,i,v,x,g]);U6(R)}const S=nn(()=>g?{tabIndex:0,role:"button","aria-describedby":o,"data-rfd-drag-handle-draggable-id":p,"data-rfd-drag-handle-context-id":r,draggable:!1,onDragStart:G6}:null,[r,o,p,g]),j=it(R=>{k.type==="DRAGGING"&&k.dropping&&R.propertyName==="transform"&&Tm.flushSync(w)},[w,k]),N=nn(()=>{const R=F6(k),D=k.type==="DRAGGING"&&k.dropping?j:void 0;return{innerRef:n,draggableProps:{"data-rfd-draggable-context-id":r,"data-rfd-draggable-id":p,style:R,onTransitionEnd:D},dragHandleProps:S}},[r,S,p,k,j,n]),O=nn(()=>({draggableId:m.id,type:m.type,source:{index:m.index,droppableId:m.droppableId}}),[m.droppableId,m.id,m.index,m.type]);return Nt.createElement(Nt.Fragment,null,h(N,k.snapshot,O))};var aN=(e,t)=>e===t,lN=e=>{const{combine:t,destination:n}=e;return n?n.droppableId:t?t.droppableId:null};const W6=e=>e.combine?e.combine.draggableId:null,Y6=e=>e.at&&e.at.type==="COMBINE"?e.at.combine.draggableId:null;function X6(){const e=_i((r,o)=>({x:r,y:o})),t=_i((r,o,a=null,c=null,d=null)=>({isDragging:!0,isClone:o,isDropAnimating:!!d,dropAnimation:d,mode:r,draggingOver:a,combineWith:c,combineTargetFor:null})),n=_i((r,o,a,c,d=null,m=null,h=null)=>({mapped:{type:"DRAGGING",dropping:null,draggingOver:d,combineWith:m,mode:o,offset:r,dimension:a,forceShouldAnimate:h,snapshot:t(o,c,d,m,null)}}));return(r,o)=>{if(wu(r)){if(r.critical.draggable.id!==o.draggableId)return null;const a=r.current.client.offset,c=r.dimensions.draggables[o.draggableId],d=mr(r.impact),m=Y6(r.impact),h=r.forceShouldAnimate;return n(e(a.x,a.y),r.movementMode,c,o.isClone,d,m,h)}if(r.phase==="DROP_ANIMATING"){const a=r.completed;if(a.result.draggableId!==o.draggableId)return null;const c=o.isClone,d=r.dimensions.draggables[o.draggableId],m=a.result,h=m.mode,p=lN(m),g=W6(m),v={duration:r.dropDuration,curve:Xv.drop,moveTo:r.newHomeClientOffset,opacity:g?ku.opacity.drop:null,scale:g?ku.scale.drop:null};return{mapped:{type:"DRAGGING",offset:r.newHomeClientOffset,dimension:d,dropping:v,draggingOver:p,combineWith:g,mode:h,forceShouldAnimate:null,snapshot:t(h,c,p,g,v)}}}return null}}function cN(e=null){return{isDragging:!1,isDropAnimating:!1,isClone:!1,dropAnimation:null,mode:null,draggingOver:null,combineTargetFor:e,combineWith:null}}const K6={mapped:{type:"SECONDARY",offset:ki,combineTargetFor:null,shouldAnimateDisplacement:!0,snapshot:cN(null)}};function Z6(){const e=_i((a,c)=>({x:a,y:c})),t=_i(cN),n=_i((a,c=null,d)=>({mapped:{type:"SECONDARY",offset:a,combineTargetFor:c,shouldAnimateDisplacement:d,snapshot:t(c)}})),i=a=>a?n(ki,a,!0):null,r=(a,c,d,m)=>{const h=d.displaced.visible[a],p=!!(m.inVirtualList&&m.effected[a]),g=zm(d),x=g&&g.draggableId===a?c:null;if(!h){if(!p)return i(x);if(d.displaced.invisible[a])return null;const k=Vl(m.displacedBy.point),w=e(k.x,k.y);return n(w,x,!0)}if(p)return i(x);const v=d.displacedBy.point,b=e(v.x,v.y);return n(b,x,h.shouldAnimate)};return(a,c)=>{if(wu(a))return a.critical.draggable.id===c.draggableId?null:r(c.draggableId,a.critical.draggable.id,a.impact,a.afterCritical);if(a.phase==="DROP_ANIMATING"){const d=a.completed;return d.result.draggableId===c.draggableId?null:r(c.draggableId,d.result.draggableId,d.impact,d.afterCritical)}return null}}const Q6=()=>{const e=X6(),t=Z6();return(i,r)=>e(i,r)||t(i,r)||K6},J6={dropAnimationFinished:HE},e8=fE(Q6,J6,null,{context:e0,areStatePropsEqual:aN})(q6);function uN(e){return rm(i0).isUsingCloneFor===e.draggableId&&!e.isClone?null:Nt.createElement(e8,e)}function t8(e){const t=typeof e.isDragDisabled=="boolean"?!e.isDragDisabled:!0,n=!!e.disableInteractiveElementBlocking,i=!!e.shouldRespectForcePress;return Nt.createElement(uN,Jf({},e,{isClone:!1,isEnabled:t,canDragInteractiveElements:n,shouldRespectForcePress:i}))}const dN=e=>t=>e===t,n8=dN("scroll"),i8=dN("auto"),FS=(e,t)=>t(e.overflowX)||t(e.overflowY),r8=e=>{const t=window.getComputedStyle(e),n={overflowX:t.overflowX,overflowY:t.overflowY};return FS(n,n8)||FS(n,i8)},s8=()=>!1,fN=e=>e==null?null:e===document.body?s8()?e:null:e===document.documentElement?null:r8(e)?e:fN(e.parentElement);var Gx=e=>({x:e.scrollLeft,y:e.scrollTop});const mN=e=>e?window.getComputedStyle(e).position==="fixed"?!0:mN(e.parentElement):!1;var o8=e=>{const t=fN(e),n=mN(e);return{closestScrollable:t,isFixedOnPage:n}},a8=({descriptor:e,isEnabled:t,isCombineEnabled:n,isFixedOnPage:i,direction:r,client:o,page:a,closest:c})=>{const d=(()=>{if(!c)return null;const{scrollSize:g,client:x}=c,v=GE({scrollHeight:g.scrollHeight,scrollWidth:g.scrollWidth,height:x.paddingBox.height,width:x.paddingBox.width});return{pageMarginBox:c.page.marginBox,frameClient:x,scrollSize:g,shouldClipSubject:c.shouldClipSubject,scroll:{initial:c.scroll,current:c.scroll,max:v,diff:{value:ki,displacement:ki}}}})(),m=r==="vertical"?Fv:wE,h=wl({page:a,withPlaceholder:null,axis:m,frame:d});return{descriptor:e,isCombineEnabled:n,isFixedOnPage:i,axis:m,isEnabled:t,client:o,page:a,frame:d,subject:h}};const l8=(e,t)=>{const n=pE(e);if(!t||e!==t)return n;const i=n.paddingBox.top-t.scrollTop,r=n.paddingBox.left-t.scrollLeft,o=i+t.scrollHeight,a=r+t.scrollWidth,d=Pv({top:i,right:a,bottom:o,left:r},n.border);return Bv({borderBox:d,margin:n.margin,border:n.border,padding:n.padding})};var c8=({ref:e,descriptor:t,env:n,windowScroll:i,direction:r,isDropDisabled:o,isCombineEnabled:a,shouldClipSubject:c})=>{const d=n.closestScrollable,m=l8(e,d),h=Qf(m,i),p=(()=>{if(!d)return null;const x=pE(d),v={scrollHeight:d.scrollHeight,scrollWidth:d.scrollWidth};return{client:x,page:Qf(x,i),scroll:Gx(d),scrollSize:v,shouldClipSubject:c}})();return a8({descriptor:t,isEnabled:!o,isCombineEnabled:a,isFixedOnPage:n.isFixedOnPage,direction:r,client:m,page:h,closest:p})};const u8={passive:!1},d8={passive:!0};var VS=e=>e.shouldPublishImmediately?u8:d8;const of=e=>e&&e.env.closestScrollable||null;function f8(e){const t=C.useRef(null),n=rm(Hm),i=t0("droppable"),{registry:r,marshal:o}=n,a=eN(e),c=nn(()=>({id:e.droppableId,type:e.type,mode:e.mode}),[e.droppableId,e.mode,e.type]),d=C.useRef(c),m=nn(()=>_i((N,O)=>{t.current||Oe();const R={x:N,y:O};o.updateDroppableScroll(c.id,R)}),[c.id,o]),h=it(()=>{const N=t.current;return!N||!N.env.closestScrollable?ki:Gx(N.env.closestScrollable)},[]),p=it(()=>{const N=h();m(N.x,N.y)},[h,m]),g=nn(()=>xu(p),[p]),x=it(()=>{const N=t.current,O=of(N);if(N&&O||Oe(),N.scrollOptions.shouldPublishImmediately){p();return}g()},[g,p]),v=it((N,O)=>{t.current&&Oe();const R=a.current,D=R.getDroppableRef();D||Oe();const I=o8(D),L={ref:D,descriptor:c,env:I,scrollOptions:O};t.current=L;const M=c8({ref:D,descriptor:c,env:I,windowScroll:N,direction:R.direction,isDropDisabled:R.isDropDisabled,isCombineEnabled:R.isCombineEnabled,shouldClipSubject:!R.ignoreContainerClipping}),A=I.closestScrollable;return A&&(A.setAttribute(zS.contextId,n.contextId),A.addEventListener("scroll",x,VS(L.scrollOptions))),M},[n.contextId,c,x,a]),b=it(()=>{const N=t.current,O=of(N);return N&&O||Oe(),Gx(O)},[]),k=it(()=>{const N=t.current;N||Oe();const O=of(N);t.current=null,O&&(g.cancel(),O.removeAttribute(zS.contextId),O.removeEventListener("scroll",x,VS(N.scrollOptions)))},[x,g]),w=it(N=>{const O=t.current;O||Oe();const R=of(O);R||Oe(),R.scrollTop+=N.y,R.scrollLeft+=N.x},[]),S=nn(()=>({getDimensionAndWatchScroll:v,getScrollWhileDragging:b,dragStopped:k,scroll:w}),[k,v,b,w]),j=nn(()=>({uniqueId:i,descriptor:c,callbacks:S}),[S,c,i]);pr(()=>(d.current=j.descriptor,r.droppable.register(j),()=>{t.current&&k(),r.droppable.unregister(j)}),[S,c,k,j,o,r.droppable]),pr(()=>{t.current&&o.updateDroppableIsEnabled(d.current.id,!e.isDropDisabled)},[e.isDropDisabled,o]),pr(()=>{t.current&&o.updateDroppableIsCombineEnabled(d.current.id,e.isCombineEnabled)},[e.isCombineEnabled,o])}function Ag(){}const US={width:0,height:0,margin:vD},m8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>e||n==="close"?US:{height:t.client.borderBox.height,width:t.client.borderBox.width,margin:t.client.margin},p8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>{const i=m8({isAnimatingOpenOnMount:e,placeholder:t,animate:n});return{display:t.display,boxSizing:"border-box",width:i.width,height:i.height,marginTop:i.margin.top,marginRight:i.margin.right,marginBottom:i.margin.bottom,marginLeft:i.margin.left,flexShrink:"0",flexGrow:"0",pointerEvents:"none",transition:n!=="none"?au.placeholder:null}},h8=e=>{const t=C.useRef(null),n=it(()=>{t.current&&(clearTimeout(t.current),t.current=null)},[]),{animate:i,onTransitionEnd:r,onClose:o,contextId:a}=e,[c,d]=C.useState(e.animate==="open");C.useEffect(()=>c?i!=="open"?(n(),d(!1),Ag):t.current?Ag:(t.current=setTimeout(()=>{t.current=null,d(!1)}),n):Ag,[i,c,n]);const m=it(p=>{p.propertyName==="height"&&(r(),i==="close"&&o())},[i,o,r]),h=p8({isAnimatingOpenOnMount:c,animate:e.animate,placeholder:e.placeholder});return Nt.createElement(e.placeholder.tagName,{style:h,"data-rfd-placeholder-context-id":a,onTransitionEnd:m,ref:e.innerRef})};var g8=Nt.memo(h8);class y8 extends Nt.PureComponent{constructor(...t){super(...t),this.state={isVisible:!!this.props.on,data:this.props.on,animate:this.props.shouldAnimate&&this.props.on?"open":"none"},this.onClose=()=>{this.state.animate==="close"&&this.setState({isVisible:!1})}}static getDerivedStateFromProps(t,n){return t.shouldAnimate?t.on?{isVisible:!0,data:t.on,animate:"open"}:n.isVisible?{isVisible:!0,data:n.data,animate:"close"}:{isVisible:!1,animate:"close",data:null}:{isVisible:!!t.on,data:t.on,animate:"none"}}render(){if(!this.state.isVisible)return null;const t={onClose:this.onClose,data:this.state.data,animate:this.state.animate};return this.props.children(t)}}const x8=e=>{const t=C.useContext(Hm);t||Oe();const{contextId:n,isMovementAllowed:i}=t,r=C.useRef(null),o=C.useRef(null),{children:a,droppableId:c,type:d,mode:m,direction:h,ignoreContainerClipping:p,isDropDisabled:g,isCombineEnabled:x,snapshot:v,useClone:b,updateViewportMaxScroll:k,getContainerForClone:w}=e,S=it(()=>r.current,[]),j=it((A=null)=>{r.current=A},[]);it(()=>o.current,[]);const N=it((A=null)=>{o.current=A},[]),O=it(()=>{i()&&k({maxScroll:WE()})},[i,k]);f8({droppableId:c,type:d,mode:m,direction:h,isDropDisabled:g,isCombineEnabled:x,ignoreContainerClipping:p,getDroppableRef:S});const R=nn(()=>Nt.createElement(y8,{on:e.placeholder,shouldAnimate:e.shouldAnimatePlaceholder},({onClose:A,data:B,animate:W})=>Nt.createElement(g8,{placeholder:B,onClose:A,innerRef:N,animate:W,contextId:n,onTransitionEnd:O})),[n,O,e.placeholder,e.shouldAnimatePlaceholder,N]),D=nn(()=>({innerRef:j,placeholder:R,droppableProps:{"data-rfd-droppable-id":c,"data-rfd-droppable-context-id":n}}),[n,c,R,j]),I=b?b.dragging.draggableId:null,L=nn(()=>({droppableId:c,type:d,isUsingCloneFor:I}),[c,I,d]);function M(){if(!b)return null;const{dragging:A,render:B}=b,W=Nt.createElement(uN,{draggableId:A.draggableId,index:A.source.index,isClone:!0,isEnabled:!0,shouldRespectForcePress:!1,canDragInteractiveElements:!0},(P,G)=>B(P,G,A));return u4.createPortal(W,w())}return Nt.createElement(i0.Provider,{value:L},a(D,v),M())};function v8(){return document.body||Oe(),document.body}const GS={mode:"standard",type:"DEFAULT",direction:"vertical",isDropDisabled:!1,isCombineEnabled:!1,ignoreContainerClipping:!1,renderClone:null,getContainerForClone:v8},pN=e=>{let t={...e},n;for(n in GS)e[n]===void 0&&(t={...t,[n]:GS[n]});return t},Mg=(e,t)=>e===t.droppable.type,qS=(e,t)=>t.draggables[e.draggable.id],b8=()=>{const e={placeholder:null,shouldAnimatePlaceholder:!0,snapshot:{isDraggingOver:!1,draggingOverWith:null,draggingFromThisWith:null,isUsingPlaceholder:!1},useClone:null},t={...e,shouldAnimatePlaceholder:!1},n=_i(o=>({draggableId:o.id,type:o.type,source:{index:o.index,droppableId:o.droppableId}})),i=_i((o,a,c,d,m,h)=>{const p=m.descriptor.id;if(m.descriptor.droppableId===o){const v=h?{render:h,dragging:n(m.descriptor)}:null,b={isDraggingOver:c,draggingOverWith:c?p:null,draggingFromThisWith:p,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!1,snapshot:b,useClone:v}}if(!a)return t;if(!d)return e;const x={isDraggingOver:c,draggingOverWith:p,draggingFromThisWith:null,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!0,snapshot:x,useClone:null}});return(o,a)=>{const c=pN(a),d=c.droppableId,m=c.type,h=!c.isDropDisabled,p=c.renderClone;if(wu(o)){const g=o.critical;if(!Mg(m,g))return t;const x=qS(g,o.dimensions),v=mr(o.impact)===d;return i(d,h,v,v,x,p)}if(o.phase==="DROP_ANIMATING"){const g=o.completed;if(!Mg(m,g.critical))return t;const x=qS(g.critical,o.dimensions);return i(d,h,lN(g.result)===d,mr(g.impact)===d,x,p)}if(o.phase==="IDLE"&&o.completed&&!o.shouldFlush){const g=o.completed;if(!Mg(m,g.critical))return t;const x=mr(g.impact)===d,v=!!(g.impact.at&&g.impact.at.type==="COMBINE"),b=g.critical.droppable.id===d;return x?v?e:t:b?e:t}return t}},_8={updateViewportMaxScroll:RO},k8=fE(b8,_8,(e,t,n)=>({...pN(n),...e,...t}),{context:e0,areStatePropsEqual:aN})(x8),sm={urgent:{label:"Urgent",color:"var(--red)",symbol:"▲▲"},high:{label:"High",color:"var(--yellow)",symbol:"▲"},medium:{label:"Medium",color:"var(--accent)",symbol:"■"},low:{label:"Low",color:"var(--text-secondary)",symbol:"▽"}},om={idle:"Idle",reflecting:"Thinking...",tool_active:"Running tool"};function r0(e){const t=(e??"").trim();return t?t.replace(/[_-]+/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function El(e){const t=(e.workItemRoleName??"").trim();return t||r0(e.workItemRoleId)}function S8(e){return(e.employeeAssignment?.name??"").trim()}function Dg(e){const t=El(e),n=S8(e);return t&&n?`${t} · ${n}`:t||n}function ml(e){return typeof e=="string"?e.trim():""}function yo(e){if(!e)return"";const t=e;return ml(t.executionTurnId)||ml(t.runtimeTaskId)||ml(t.taskId)}function Vm(e){return ml(e?.workItemId)?ml(e?.executionTurnId)||ml(e?.runtimeTaskId):""}const w8={todo:{label:"To do",color:"#9ca3af"},in_progress:{label:"In progress",color:"#f59e0b"},in_review:{label:"In review",color:"#fbbf24"},done:{label:"Done",color:"#34d399"},running:{label:"Running",color:"#34d399"},idle:{label:"Idle",color:"#6366f1"},blocked:{label:"Blocked",color:"#f97316"},awaiting_peer:{label:"Awaiting",color:"#fbbf24"},awaiting_manager_review:{label:"Mgr Review",color:"#fbbf24"},awaiting_human:{label:"Human Review",color:"#fbbf24"},awaiting_review:{label:"In Review",color:"#fbbf24"},failed:{label:"Failed",color:"#ef4444"},cancelled:{label:"Cancelled",color:"#9ca3af"}};function C8({task:e,index:t,agents:n,officeMap:i,companyMode:r,isSelected:o,onClick:a,onStart:c}){const d=e.assigneeIds.map(R=>n.find(D=>D.agent_id===R)).filter(Boolean),m=e.priority?sm[e.priority]:null,h=i&&d.length>1&&new Set(d.map(R=>i[R.agent_id]).filter(Boolean)).size>1,p=e.agentStatus&&e.agentStatus!=="idle",g=e.dependencies?.length??0,x=e.phase,v=!p&&x&&x!=="ready"?w8[x]??null:null,b=e.employeeAssignment,k=El(e),w=e.workItemGate,S=r0(e.managerRoleId),j=(e.blockedReason??"").trim(),N=(e.reworkFeedback??"").trim(),O=Vm(e);return u.jsx(t8,{draggableId:e.id,index:t,isDragDisabled:!!r,children:(R,D)=>u.jsxs("div",{ref:R.innerRef,...R.draggableProps,...R.dragHandleProps,className:`kanban-card${D.isDragging?" is-dragging":""}${p?" is-active":""}${o?" is-selected":""}`,"data-task-id":e.id,onMouseUp:I=>{I.button===0&&!D.isDragging&&a(e)},children:[u.jsxs("div",{className:"kanban-card-top",children:[u.jsx("span",{className:"kanban-card-id",children:e.displayId}),v&&u.jsxs("span",{className:"kanban-status-badge",style:{color:v.color},children:[u.jsx("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:v.color,marginRight:3}}),v.label]}),g>0&&u.jsxs("span",{className:"kanban-dep-badge",title:`${g} upstream dep(s)`,children:[g," dep"]}),h&&u.jsx("span",{className:"kanban-cross-badge",title:"Cross-office",children:"⇄"}),c&&u.jsx("button",{className:"kanban-start-btn",title:r?"Start Work Item":"Start task",onClick:I=>{I.stopPropagation(),c(e.id)},children:"▶"})]}),u.jsx("p",{className:"kanban-card-title",children:e.title}),(k||b?.name||w?.type||e.originChannel||e.workItemProjectionId)&&u.jsxs("div",{className:"kanban-card-meta-row",children:[k&&u.jsx("span",{className:"kanban-meta-badge kanban-role-badge",title:`Role: ${k}`,children:k}),b?.name&&u.jsxs("span",{className:"kanban-meta-badge kanban-employee-badge",title:`Employee: ${b.name}${b.category?` (${b.category})`:""}`,children:[u.jsx("span",{className:"kanban-meta-icon",children:"👤"}),b.name]}),e.workItemProjectionId&&u.jsx("span",{className:"kanban-meta-badge kanban-projection-badge",title:`Projection: ${e.workItemProjectionId}`,children:e.workItemProjectionId}),w?.type&&u.jsxs("span",{className:`kanban-meta-badge kanban-gate-badge kanban-gate-${w.type}`,title:`Gate: ${w.type}${w.reviewerRole?` by ${w.reviewerRole}`:""}`,children:[w.type==="review"?"✉":w.type==="approval"?"✓":"✋",w.type]}),e.originChannel&&u.jsxs("span",{className:"kanban-meta-badge kanban-origin-badge",title:`Origin: ${e.originChannel}`,children:["#",e.originChannel]}),S&&u.jsx("span",{className:"kanban-meta-badge",title:`Manager: ${S}`,children:S})]}),(j||N||O)&&u.jsxs("div",{className:"kanban-card-tags",children:[j&&u.jsx("span",{className:"kanban-tag",children:j}),N&&u.jsx("span",{className:"kanban-tag",children:N}),O&&u.jsx("span",{className:"kanban-tag",title:`Execution Turn: ${O}`,children:"Runtime"})]}),p&&u.jsxs("div",{className:`kanban-card-runtime status-${e.agentStatus}`,children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{className:"kanban-runtime-label",children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:om[e.agentStatus]??e.agentStatus})]}),e.tags.length>0&&u.jsx("div",{className:"kanban-card-tags",children:e.tags.slice(0,3).map(I=>u.jsx("span",{className:"kanban-tag",children:I},I))}),(m||d.length>0)&&u.jsxs("div",{className:"kanban-card-footer",children:[u.jsx("div",{className:"kanban-card-footer-left",children:m&&u.jsx("span",{className:"kanban-priority",style:{color:m.color},title:m.label,children:m.symbol})}),u.jsxs("div",{className:"kanban-assignee-group",children:[d.slice(0,3).map(I=>u.jsx("span",{className:"kanban-assignee-badge",title:I.name,children:I.name.charAt(0).toUpperCase()},I.agent_id)),d.length>3&&u.jsxs("span",{className:"kanban-assignee-badge kanban-assignee-more",children:["+",d.length-3]})]})]})]})})}function j8({column:e,tasks:t,agents:n,officeMap:i,companyMode:r,selectedTaskId:o,onCardClick:a,onStartTask:c,onQuickCreate:d}){const[m,h]=C.useState(!1),[p,g]=C.useState(""),x=C.useRef(!1),v=C.useCallback(()=>{if(x.current)return;x.current=!0;const b=p.trim();b&&d&&d(b),g(""),h(!1)},[p,d]);return u.jsxs("div",{className:"kanban-column",children:[u.jsxs("div",{className:"kanban-column-header",children:[u.jsx("span",{className:"kanban-col-dot",style:{background:e.color}}),u.jsx("span",{className:"kanban-col-label",children:e.name}),u.jsx("span",{className:"kanban-col-count",children:t.length}),d&&u.jsx("button",{className:"kanban-col-add",title:"Add task",onClick:()=>{x.current=!1,h(!0)},children:"+"})]}),m&&u.jsx("div",{className:"kanban-quick-add",children:u.jsx("input",{className:"kanban-quick-input",value:p,onChange:b=>g(b.target.value),onKeyDown:b=>{b.key==="Enter"&&(b.preventDefault(),v()),b.key==="Escape"&&(x.current=!0,g(""),h(!1))},onBlur:v,placeholder:"Task title...",autoFocus:!0})}),u.jsx(k8,{droppableId:e.id,isDropDisabled:!!r,children:b=>u.jsxs("div",{ref:b.innerRef,...b.droppableProps,className:"kanban-col-body",children:[t.length===0&&!m&&u.jsx("div",{className:"kanban-empty",children:u.jsx("span",{className:"kanban-empty-icon",children:"·"})}),t.map((k,w)=>u.jsx(C8,{task:k,index:w,agents:n,officeMap:i,companyMode:r,isSelected:k.id===o,onClick:a,onStart:c},k.id)),b.placeholder]})})]})}function E8({columns:e,tasksByColumn:t,agents:n,officeMap:i,store:r,companyMode:o,selectedTaskId:a,onCardClick:c,onStartTask:d,onQuickCreate:m,onMoveTask:h}){const p=g=>{if(o||!g.destination)return;const x=g.source.droppableId,v=g.destination.droppableId;if(x!==v)return;const b=g.destination.index,k=g.draggableId,w=[...t[v]??[]].filter(j=>j.id!==k),S=(t[v]??[]).find(j=>j.id===k);S&&w.splice(b,0,S),w.forEach((j,N)=>{r.moveTask(j.id,v,N)})};return u.jsx(L6,{onDragEnd:p,children:u.jsx("div",{className:"kanban-board",children:e.map(g=>u.jsx(j8,{column:g,tasks:t[g.id]??[],agents:n,officeMap:i,companyMode:o,selectedTaskId:a,onCardClick:c,onStartTask:!o&&g.name==="Todo"?d:void 0,onQuickCreate:!o&&g.name==="Todo"?m:void 0},g.id))})})}function N8({agents:e,tasks:t}){const n=C.useMemo(()=>{const r=new Map(t.map(o=>[o.id,o]));return e.map(o=>{const a=t.find(d=>d.assigneeIds.includes(o.agent_id)&&d.agentStatus&&d.agentStatus!=="idle"),c=o.current_task_id?r.get(o.current_task_id):void 0;return{agent:o,status:a?.agentStatus??o.runtime_status??"idle",currentTool:a?.currentTool??o.current_tool,taskDisplayId:a?.displayId??c?.displayId}})},[e,t]);if(e.length===0)return null;const i=n.filter(r=>r.status!=="idle").length;return u.jsxs("div",{className:"agent-status-bar",children:[u.jsx("span",{className:"agent-status-summary",children:i>0?`${i}/${e.length} active`:`${e.length} agent${e.length!==1?"s":""}`}),u.jsx("div",{className:"agent-status-chips",children:n.map(({agent:r,status:o,currentTool:a,taskDisplayId:c})=>u.jsxs("div",{className:`agent-status-chip status-${o}`,title:`${r.name}: ${o==="tool_active"&&a?a:om[o]}${c?` (${c})`:""}`,children:[u.jsx("span",{className:"agent-status-avatar",children:r.name.charAt(0).toUpperCase()}),u.jsx("span",{className:"agent-status-name",children:r.name}),o!=="idle"&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{className:"agent-status-detail",children:o==="tool_active"&&a?a:om[o]})]}),c&&u.jsx("span",{className:"agent-status-task",children:c})]},r.agent_id))})]})}function I8({boards:e,activeBoardId:t,onSelect:n}){return u.jsx("div",{className:"board-selector",children:u.jsx("div",{className:"board-tabs",children:e.map(i=>u.jsxs("button",{className:`board-tab${i.id===t?" active":""}`,style:{"--board-color":i.color},onClick:()=>n(i.id),children:[u.jsx("span",{className:"board-tab-dot",style:{background:i.color}}),i.name]},i.id))})})}function Ri(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function As(e){return Array.isArray(e)?e.filter(Ri):[]}function Nl(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function T8(e){return Ri(e)?{run_id:typeof e.run_id=="string"?e.run_id:void 0,status:typeof e.status=="string"?e.status:void 0,total_cells:typeof e.total_cells=="number"?e.total_cells:void 0,total_role_sessions:typeof e.total_role_sessions=="number"?e.total_role_sessions:void 0,total_work_items:typeof e.total_work_items=="number"?e.total_work_items:void 0,ready_count:typeof e.ready_count=="number"?e.ready_count:void 0,running_count:typeof e.running_count=="number"?e.running_count:void 0,blocked_count:typeof e.blocked_count=="number"?e.blocked_count:void 0,waiting_count:typeof e.waiting_count=="number"?e.waiting_count:void 0,done_count:typeof e.done_count=="number"?e.done_count:void 0,failed_count:typeof e.failed_count=="number"?e.failed_count:void 0}:{}}function R8(e){return{cell_id:String(e.cell_id??e.team_id??e.id??"").trim(),team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,team_id:typeof e.team_id=="string"?e.team_id:void 0,manager_role_id:String(e.manager_role_id??"").trim(),member_role_ids:Nl(e.member_role_ids),seat_ids:Nl(e.seat_ids),parent_team_id:typeof e.parent_team_id=="string"?e.parent_team_id:void 0,status:String(e.status??"idle"),is_final_decider_cell:typeof e.is_final_decider_cell=="boolean"?e.is_final_decider_cell:void 0}}function A8(e){return{role_session_id:String(e.role_session_id??e.id??"").trim(),role_id:String(e.role_id??"").trim(),employee_id:String(e.employee_id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,seat_id:typeof e.seat_id=="string"?e.seat_id:void 0,focused_work_item_id:typeof e.focused_work_item_id=="string"?e.focused_work_item_id:void 0,current_work_item_id:typeof e.current_work_item_id=="string"?e.current_work_item_id:void 0,background_work_item_ids:Nl(e.background_work_item_ids),manager_role_ids:Nl(e.manager_role_ids),manager_seat_id:typeof e.manager_seat_id=="string"?e.manager_seat_id:void 0,resident_status:typeof e.resident_status=="string"?e.resident_status:void 0,latest_notification:Ri(e.latest_notification)?e.latest_notification:void 0,manager_digest:Ri(e.manager_digest)?e.manager_digest:void 0,status:String(e.status??"cold")}}function M8(e){const t=Ri(e.metadata)?e.metadata:void 0,n=Ri(e.adaptive)?e.adaptive:t&&Ri(t.adaptive)?t.adaptive:void 0;return{work_item_id:String(e.work_item_id??e.id??"").trim(),role_id:String(e.role_id??"").trim(),cell_id:String(e.cell_id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,team_instance_id:typeof e.team_instance_id=="string"?e.team_instance_id:void 0,seat_id:typeof e.seat_id=="string"?e.seat_id:void 0,title:String(e.title??""),kind:String(e.kind??"execute"),phase:String(e.phase??"ready"),kanban_column:String(e.kanban_column??"todo"),batch_id:typeof e.batch_id=="string"?e.batch_id:void 0,batch_index:typeof e.batch_index=="number"?e.batch_index:void 0,deliverable_summary:typeof e.deliverable_summary=="string"?e.deliverable_summary:void 0,blocked_reason:typeof e.blocked_reason=="string"?e.blocked_reason:void 0,handoff_status:typeof e.handoff_status=="string"?e.handoff_status:void 0,parent_work_item_id:typeof e.parent_work_item_id=="string"?e.parent_work_item_id:void 0,work_item_projection_id:typeof e.work_item_projection_id=="string"?e.work_item_projection_id:void 0,metadata:t,adaptive:n}}function D8(e){if(Ri(e))return{run_id:typeof e.run_id=="string"?e.run_id:void 0,project_id:typeof e.project_id=="string"?e.project_id:void 0,session_id:typeof e.session_id=="string"?e.session_id:void 0,status:typeof e.status=="string"?e.status:void 0,lifecycle_status:typeof e.lifecycle_status=="string"?e.lifecycle_status:void 0,company_profile:typeof e.company_profile=="string"?e.company_profile:void 0,execution_model:typeof e.execution_model=="string"?e.execution_model:void 0,current_revision:typeof e.current_revision=="number"?e.current_revision:void 0,latest_deliverable_summary:typeof e.latest_deliverable_summary=="string"?e.latest_deliverable_summary:void 0,recovery_pointer:Ri(e.recovery_pointer)?e.recovery_pointer:void 0}}function O8(e){if(Ri(e))return{project_id:typeof e.project_id=="string"?e.project_id:void 0,run_id:typeof e.run_id=="string"?e.run_id:void 0,latest_deliverable_summary:typeof e.latest_deliverable_summary=="string"?e.latest_deliverable_summary:void 0,architecture_decisions:As(e.architecture_decisions),completed_work_items:As(e.completed_work_items),open_issues:Nl(e.open_issues),verification_summary:typeof e.verification_summary=="string"?e.verification_summary:void 0,artifact_index:As(e.artifact_index),handoff_summaries:As(e.handoff_summaries),last_failure_summary:typeof e.last_failure_summary=="string"?e.last_failure_summary:void 0,project_memory_excerpt:typeof e.project_memory_excerpt=="string"?e.project_memory_excerpt:void 0,session_memory_excerpt:typeof e.session_memory_excerpt=="string"?e.session_memory_excerpt:void 0}}function L8(e){return{seat_id:String(e.seat_id??e.id??"").trim(),team_id:typeof e.team_id=="string"?e.team_id:void 0,role_id:typeof e.role_id=="string"?e.role_id:void 0,employee_id:typeof e.employee_id=="string"?e.employee_id:void 0,role_session_id:typeof e.role_session_id=="string"?e.role_session_id:void 0,resident_status:typeof e.resident_status=="string"?e.resident_status:void 0,current_work_item:Ri(e.current_work_item)?e.current_work_item:void 0,latest_notification:Ri(e.latest_notification)?e.latest_notification:void 0,manager_digest:Ri(e.manager_digest)?e.manager_digest:void 0}}function z8(e){return{link_id:typeof e.link_id=="string"?e.link_id:void 0,session_id:typeof e.session_id=="string"?e.session_id:void 0,linked_session_id:typeof e.linked_session_id=="string"?e.linked_session_id:void 0,link_type:typeof e.link_type=="string"?e.link_type:void 0,metadata:Ri(e.metadata)?e.metadata:void 0,created_at:typeof e.created_at=="string"?e.created_at:void 0}}function hN(e){const t=Ri(e)?e:{},n=As(t.runtime_teams).map(R8),i=As(t.runtime_seats).map(A8),r=As(t.work_items).map(M8);return{roles:Array.isArray(t.roles)?t.roles:[],employees:Array.isArray(t.employees)?t.employees:[],company_profile:typeof t.company_profile=="string"?t.company_profile:"",organization_id:typeof t.organization_id=="string"?t.organization_id:void 0,organization_name:typeof t.organization_name=="string"?t.organization_name:void 0,organization_config_file:typeof t.organization_config_file=="string"?t.organization_config_file:void 0,final_decider_role_id:typeof t.final_decider_role_id=="string"?t.final_decider_role_id:null,top_level_role_ids:Nl(t.top_level_role_ids),runtime_teams:n,runtime_seats:i,work_items:r,frontier:T8(t.frontier),project_run:D8(t.project_run),project_dossier:O8(t.project_dossier),seat_digests:As(t.seat_digests).map(L8),revision_links:As(t.revision_links).map(z8),project_recovery:Ri(t.project_recovery)?t.project_recovery:void 0,channels:Array.isArray(t.channels)?t.channels:[],connectors:Array.isArray(t.connectors)?t.connectors:[],org_version:typeof t.org_version=="number"?t.org_version:0,runtime_topology_version:typeof t.runtime_topology_version=="number"?t.runtime_topology_version:0,installed_packages:Array.isArray(t.installed_packages)?t.installed_packages:[],runtime_policy:Ri(t.runtime_policy)?t.runtime_policy:void 0}}function Um(e){const t=hN(e);return{runtimeTeams:t.runtime_teams??[],runtimeSeats:t.runtime_seats??[],workItems:t.work_items??[],frontier:t.frontier??{},projectRun:t.project_run,projectDossier:t.project_dossier,seatDigests:t.seat_digests??[],revisionLinks:t.revision_links??[],projectRecovery:t.project_recovery}}function P8({state:e,message:t,onRefresh:n,onReadMessage:i,pollIntervalMs:r=3e4,embedded:o=!1}){const[a,c]=C.useState(null),d=C.useRef(n);d.current=n,C.useEffect(()=>{if(!r)return;d.current();const g=window.setInterval(()=>d.current(),r);return()=>window.clearInterval(g)},[r]);const m=C.useMemo(()=>e?.roles?e.roles.reduce((g,x)=>g+x.unread_count,0):0,[e?.roles]),h=g=>{c(g),i(g)},p=o?{fontSize:13,color:"var(--text)"}:{border:"1px solid var(--border, #333)",borderRadius:6,background:"var(--bg-primary, #1e1e1e)",fontSize:13};return u.jsxs("div",{className:"comms-panel",style:p,children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",borderBottom:"1px solid var(--border, #333)"},children:[u.jsx("span",{style:{fontWeight:600,fontSize:13,flex:1},children:"Agent Communications"}),m>0&&u.jsxs(Cu,{color:"var(--accent, #3498db)",children:[m," unread"]}),u.jsx("button",{onClick:n,style:{background:"var(--surface, #2a2a2a)",border:"1px solid var(--border, #444)",color:"var(--text-secondary, #aaa)",fontSize:11,padding:"3px 10px",cursor:"pointer",borderRadius:4},children:"Refresh"})]}),e?e.available?e.empty?u.jsx(Df,{children:"No communications yet. They will appear once agents start collaborating."}):u.jsx(B8,{state:e,selectedPath:a,onSelectMessage:h}):u.jsxs(Df,{children:["Not available",e.reason?`: ${e.reason}`:""]}):u.jsx(Df,{children:"Loading communications..."}),t&&u.jsx(F8,{message:t,onClose:()=>c(null)})]})}function B8({state:e,selectedPath:t,onSelectMessage:n}){const i=(e.roles?.length??0)>0,r=(e.meetings?.length??0)>0,o=(e.recent_failures?.length??0)>0;return u.jsxs("div",{style:{padding:"4px 0"},children:[o&&u.jsx(Og,{title:"Failures",children:(e.recent_failures||[]).map((a,c)=>u.jsxs("div",{style:{padding:"6px 12px",marginBottom:4,background:"color-mix(in srgb, var(--red, #e74c3c) 6%, transparent)",borderLeft:"3px solid var(--red, #e74c3c)"},children:[u.jsxs("div",{style:{fontWeight:600,fontSize:12},children:[a.operation," · ",a.from_role," → ",a.to_role]}),u.jsx("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:2},children:a.reason})]},`${a.recorded_at||"f"}-${c}`))}),i&&u.jsx(Og,{title:`Inboxes (${e.roles.length})`,children:e.roles.map(a=>u.jsx($8,{role:a,selectedPath:t,onSelectMessage:n},a.role_id))}),r&&u.jsx(Og,{title:"Meetings",children:(e.meetings||[]).map(a=>u.jsxs("div",{style:{padding:"6px 12px",marginBottom:4,borderLeft:`3px solid ${a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)"}`},children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[u.jsx(Cu,{color:a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)",children:a.status}),u.jsx("strong",{style:{fontSize:12,flex:1},children:a.topic}),u.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #888)"},children:[a.entry_count," entries"]})]}),u.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:3},children:["by ",a.organizer," · ",a.participants.join(", ")]}),a.decision&&u.jsxs("div",{style:{fontSize:11,marginTop:3,color:"var(--green, #27ae60)"},children:["Decision: ",a.decision]})]},a.meeting_id))}),!i&&!r&&!o&&u.jsx(Df,{children:"No communication activity yet."})]})}function $8({role:e,selectedPath:t,onSelectMessage:n}){const[i,r]=C.useState(!0),o=e.unread_count>0||(e.recent_seen?.length??0)>0||(e.recent_outbox?.length??0)>0,[a,c]=C.useState(e.unread_count>0?"unread":"history"),d=C.useMemo(()=>{switch(a){case"unread":return e.recent_unread||[];case"history":return e.recent_seen||[];case"sent":return e.recent_outbox||[];default:return[]}},[a,e.recent_unread,e.recent_seen,e.recent_outbox]),m=e.role_id.replace(/_/g," ").replace(/\b\w/g,h=>h.toUpperCase());return u.jsxs("div",{style:{marginBottom:2},children:[u.jsxs("div",{onClick:()=>r(h=>!h),style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",cursor:"pointer",userSelect:"none",background:i?"var(--surface-hover, rgba(255,255,255,0.03))":"transparent",borderRadius:4},children:[u.jsx("span",{style:{fontSize:10,width:10},children:i?"▼":"▶"}),u.jsx("span",{style:{flex:1,fontWeight:600,fontSize:12},children:m}),e.has_blocking&&u.jsx(Cu,{color:"var(--red, #e74c3c)",children:"BLOCKING"}),e.unread_count>0&&u.jsxs(Cu,{color:"var(--accent, #3498db)",children:[e.unread_count," new"]}),u.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #666)"},children:[e.seen_count," read · ",e.outbox_count," sent"]})]}),i&&o&&u.jsxs("div",{style:{paddingLeft:12},children:[u.jsxs("div",{style:{display:"flex",gap:2,padding:"4px 0",borderBottom:"1px solid var(--border, #333)",marginBottom:4},children:[u.jsxs(Lg,{active:a==="unread",onClick:()=>c("unread"),children:["Unread (",e.unread_count,")"]}),u.jsxs(Lg,{active:a==="history",onClick:()=>c("history"),children:["Read (",e.recent_seen?.length??0,")"]}),u.jsxs(Lg,{active:a==="sent",onClick:()=>c("sent"),children:["Sent (",e.recent_outbox?.length??0,")"]})]}),d.length===0?u.jsx("div",{style:{padding:"8px 0",fontSize:11,color:"var(--text-dim, #666)"},children:"No messages."}):u.jsx("div",{style:{maxHeight:280,overflow:"auto"},children:d.map(h=>u.jsx(H8,{message:h,selected:h.path===t,onClick:()=>n(h.path)},h.message_id))})]})]})}function H8({message:e,selected:t,onClick:n}){const r=e.bucket==="sent"?`To: ${e.to||"?"}`:`From: ${e.from}`;return u.jsx("div",{onClick:n,style:{padding:"5px 8px",marginBottom:2,background:t?"var(--accent-soft, #2c4a6b)":"transparent",cursor:"pointer",borderRadius:4,borderLeft:e.blocking?"3px solid var(--red, #e74c3c)":"3px solid transparent",transition:"background 0.1s"},children:u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[u.jsxs("span",{style:{fontSize:11,color:"var(--text-secondary, #aaa)",minWidth:0,flex:1},children:[u.jsx("strong",{children:r})," ",u.jsx("span",{style:{color:"var(--text, #ddd)"},children:e.subject})]}),e.blocking&&u.jsx("span",{style:{fontSize:9,color:"var(--red, #e74c3c)",fontWeight:700},children:"BLK"}),u.jsx("span",{style:{fontSize:10,color:"var(--text-dim, #666)",flexShrink:0},children:e.sent_at?.slice(11,19)||""})]})})}function F8({message:e,onClose:t}){return u.jsxs("div",{style:{margin:"8px 12px 12px",padding:12,border:"1px solid var(--border, #444)",borderRadius:6,background:"var(--bg-secondary, #262626)",maxHeight:400,overflow:"auto"},children:[u.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[u.jsx("strong",{style:{flex:1,fontSize:13},children:e.header.subject||"(no subject)"}),u.jsx("button",{onClick:t,style:{background:"var(--surface, #333)",border:"1px solid var(--border, #444)",color:"var(--text-secondary, #aaa)",fontSize:11,padding:"2px 10px",cursor:"pointer",borderRadius:4},children:"Close"})]}),u.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginBottom:8,display:"flex",gap:8,flexWrap:"wrap"},children:[u.jsxs("span",{children:["From: ",u.jsx("strong",{children:e.header.from||"?"})]}),u.jsxs("span",{children:["To: ",u.jsx("strong",{children:e.header.to||"?"})]}),u.jsx("span",{children:e.header.sent_at||""}),e.header.blocking&&u.jsx(Cu,{color:"var(--red, #e74c3c)",children:"BLOCKING"})]}),u.jsx("pre",{style:{margin:0,fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"var(--text, #ddd)",lineHeight:1.5},children:e.body})]})}function Og({title:e,children:t}){return u.jsxs("div",{style:{marginBottom:4},children:[u.jsx("div",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:.6,fontWeight:700,color:"var(--text-dim, #777)",padding:"8px 12px 4px"},children:e}),t]})}function Cu({color:e,children:t}){return u.jsx("span",{style:{background:e,color:"white",borderRadius:10,padding:"1px 7px",fontSize:10,fontWeight:600,whiteSpace:"nowrap"},children:t})}function Lg({active:e,onClick:t,children:n}){return u.jsx("button",{onClick:t,style:{background:e?"var(--accent-soft, #2c4a6b)":"transparent",border:"none",color:e?"var(--text, #ddd)":"var(--text-secondary, #999)",fontSize:11,padding:"3px 10px",cursor:"pointer",borderRadius:4,fontWeight:e?600:400},children:n})}function Df({children:e}){return u.jsx("div",{style:{padding:"20px 16px",fontSize:12,color:"var(--text-secondary, #888)",textAlign:"center"},children:e})}function Qa(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Ja(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object"&&!Array.isArray(t)):[]}function Ir(e,t="Pending"){return String(e??"").trim()||t}function $c(e,t="Team"){const n=String(e??"").trim();return n?n.replace(/[_-]+/g," ").replace(/\b\w/g,i=>i.toUpperCase()):t}function WS(e){return Ir(e,"idle").toLowerCase().replace(/[\s_]+/g,"-")}function V8({orgInfoData:e,commsState:t,onStopRun:n,embedded:i=!1}){const r=C.useMemo(()=>Um(e??null),[e]),o=r.projectRun,a=r.seatDigests,c=a.reduce((b,k)=>{const w=Qa(k.manager_digest);return b+Ja(w.pending_decisions).length},0),d=a.reduce((b,k)=>b+Ja(Qa(k.manager_digest).actionable_chat).length,0),m=a.reduce((b,k)=>b+Ja(Qa(k.manager_digest).protocol_backlog).length,0),h=a.reduce((b,k)=>b+Ja(Qa(k.manager_digest).notification_backlog).length,0),p=d+m+h,g=[{label:"Actionable",value:d},{label:"Protocol",value:m},{label:"Notifications",value:h},{label:"Meetings",value:t?.meetings?.length??0},{label:"Failures",value:t?.recent_failures?.length??0}],x=C.useMemo(()=>{const b=new Map;for(const S of a){const j=String(S.seat_id??"").trim();j&&b.set(j,Qa(S.manager_digest))}const k=r.runtimeTeams.map(S=>{const j=[String(S.cell_id??"").trim(),String(S.team_id??"").trim(),String(S.team_instance_id??"").trim()].filter(Boolean),N=r.runtimeSeats.filter(D=>j.includes(String(D.team_id??"").trim())||j.includes(String(D.team_instance_id??"").trim())),O=N.reduce((D,I)=>{const L=b.get(String(I.seat_id??"").trim())??{};return D+Ja(L.pending_decisions).length},0),R=N.map(D=>Ir(D.latest_notification?.subject??D.latest_notification?.summary,"")).find(Boolean);return{key:String(S.cell_id??S.team_id??S.team_instance_id??S.manager_role_id??"team"),label:$c(S.team_id??S.cell_id,"Team"),managerLabel:$c(S.manager_role_id,"Unassigned manager"),status:Ir(S.status,"idle"),seatCount:N.length||S.member_role_ids.length,pendingApprovals:O,latestAlert:R,seats:N.map(D=>({key:String(D.seat_id??D.role_session_id??D.role_id),roleLabel:$c(D.role_id,"Seat"),seatLabel:Ir(D.seat_id??D.role_session_id,"Seat"),status:Ir(D.resident_status??D.status,"idle")}))}}),w=new Set(k.flatMap(S=>S.seats.map(j=>j.key)));for(const S of r.runtimeSeats){const j=String(S.seat_id??S.role_session_id??S.role_id).trim();if(!j||w.has(j))continue;const N=String(S.team_id??S.team_instance_id??"unassigned").trim()||"unassigned";let O=k.find(D=>D.key===N);O||(O={key:N,label:$c(N,"Unassigned Team"),managerLabel:"Unassigned manager",status:Ir(S.status,"idle"),seatCount:0,pendingApprovals:0,seats:[]},k.push(O));const R=b.get(String(S.seat_id??"").trim())??{};O.pendingApprovals+=Ja(R.pending_decisions).length,O.latestAlert||(O.latestAlert=Ir(S.latest_notification?.subject??S.latest_notification?.summary,"")),O.seats.push({key:j,roleLabel:$c(S.role_id,"Seat"),seatLabel:Ir(S.seat_id??S.role_session_id,"Seat"),status:Ir(S.resident_status??S.status,"idle")}),O.seatCount=O.seats.length}return k.sort((S,j)=>S.label.localeCompare(j.label))},[r.runtimeTeams,r.runtimeSeats,a]),v=x.map(b=>b.latestAlert).find(Boolean)||"No current alerts";return!o?.run_id&&x.length===0?null:u.jsxs("section",{className:`project-cockpit${i?" embedded":""}`,"aria-label":"Team",children:[u.jsxs("div",{className:"project-cockpit-overview",children:[u.jsxs("div",{className:"project-cockpit-title",children:[u.jsx("span",{className:"project-cockpit-label",children:"Team"}),u.jsx("strong",{children:Ir(o?.run_id,"Runtime Team Status")}),n&&u.jsx("button",{className:"project-cockpit-stop-btn",onClick:n,title:"Stop this run",children:"Stop"})]}),u.jsxs("div",{className:"project-cockpit-metrics",children:[u.jsx("span",{children:Ir(o?.lifecycle_status,"active")}),u.jsxs("span",{children:["Teams ",x.length]}),u.jsxs("span",{children:["Seats ",r.runtimeSeats.length]}),u.jsxs("span",{children:["Approvals ",c]}),u.jsxs("span",{children:["Unread ",p]}),u.jsxs("span",{children:["Run state ",Ir(Qa(o?.recovery_pointer).status,"clean")]})]})]}),u.jsxs("div",{className:"project-cockpit-grid project-cockpit-grid--team",children:[u.jsxs("section",{className:"project-cockpit-panel",children:[u.jsxs("header",{children:[u.jsx("h3",{children:"Communication"}),u.jsx("span",{children:g.length})]}),u.jsxs("div",{className:"project-cockpit-summary",children:[g.map(b=>u.jsxs("span",{children:[b.label," ",b.value]},b.label)),u.jsx("div",{className:"project-cockpit-inline-text",children:v})]})]}),u.jsxs("section",{className:"project-cockpit-panel project-cockpit-panel--wide",children:[u.jsxs("header",{children:[u.jsx("h3",{children:"Teams"}),u.jsx("span",{children:x.length})]}),u.jsx("div",{className:"project-cockpit-team-grid",children:x.map(b=>u.jsxs("article",{className:"project-cockpit-team-card",children:[u.jsxs("div",{className:"project-cockpit-team-head",children:[u.jsxs("div",{className:"project-cockpit-team-title",children:[u.jsx("strong",{children:b.label}),u.jsx("span",{children:b.managerLabel})]}),u.jsx("span",{className:`project-cockpit-team-status status-${WS(b.status)}`,children:b.status})]}),u.jsxs("div",{className:"project-cockpit-team-meta",children:[u.jsxs("span",{children:["Seats ",b.seatCount]}),u.jsxs("span",{children:["Approvals ",b.pendingApprovals]}),b.latestAlert&&u.jsx("span",{children:b.latestAlert})]}),u.jsx("div",{className:"project-cockpit-seat-list",children:b.seats.length>0?b.seats.map(k=>u.jsxs("div",{className:"project-cockpit-seat-row",children:[u.jsx("span",{className:"project-cockpit-seat-role",children:k.roleLabel}),u.jsx("span",{className:"project-cockpit-seat-id",children:k.seatLabel}),u.jsx("span",{className:`project-cockpit-seat-status status-${WS(k.status)}`,children:k.status})]},k.key)):u.jsx("div",{className:"project-cockpit-inline-text",children:"No seats assigned yet"})})]},b.key))})]})]})]})}function U8(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:`${Math.floor(t/864e5)}d ago`}const YS={running:{color:"var(--green)",label:"Running"},idle:{color:"var(--accent)",label:"Idle"},done:{color:"var(--green)",label:"Done"},pending:{color:"var(--text-secondary)",label:"Pending"},failed:{color:"var(--red)",label:"Failed"},cancelled:{color:"var(--text-secondary)",label:"Cancelled"},blocked:{color:"var(--yellow)",label:"Blocked"},awaiting_human:{color:"var(--yellow)",label:"Waiting for review"},awaiting_manager_review:{color:"var(--yellow)",label:"Manager review"},awaiting_review:{color:"var(--yellow)",label:"Waiting for review"},awaiting_peer:{color:"var(--yellow)",label:"Waiting for peer"}},G8=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]),XS={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function q8({session:e,agents:t,onTitleChange:n,onViewOnBoard:i,onStop:r,onComplete:o,onResume:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(e.title),p=C.useRef(null);C.useEffect(()=>{c||h(e.title)},[e.title,c]);const g=C.useCallback(()=>{const U=m.trim();U&&U!==e.title?n(e.taskId,U):h(e.title),d(!1)},[m,e.title,e.taskId,n]),x=C.useCallback(()=>{h(e.title),d(!0),setTimeout(()=>p.current?.select(),0)},[e.title]),v=e.assigneeIds.map(U=>t.find(Z=>Z.agent_id===U)).filter(Boolean),b=String(e.execMode??"").trim().toLowerCase(),k=b==="company"||b==="org"||b==="custom"||!!e.isCompanyRuntime||!!e.workItemProjectionId||!!e.workItemRoleId||!!e.workItemRoleName,w=v.length>0&&!k,S=e.runtimeControlState??(e.status==="running"?"running":"idle"),j=S==="suspending",N=S==="resuming",O=S==="suspended",R=e.status==="running"&&!j&&!O&&!N,D=G8.has(e.status),I=(e.canStop??e.status==="running")&&!j&&!O&&!N,L=(e.canResume??(O||!D&&!R&&e.status!=="done"&&e.status!=="pending"))&&!j&&!N,M=YS[e.status]??YS.pending,A=j?"Stopping":O?"Suspended":N?"Resuming":M.label,B=El(e),W=Om(e),P=os(e),G=e.displayTool||e.currentTool,[$,q]=C.useState(G||void 0);C.useEffect(()=>{if(!R){q(void 0);return}G&&q(G)},[R,G]);const Y=typeof e.pendingPermissionCount=="number"&&e.pendingPermissionCount>0,Q=Y,V=j?"var(--yellow)":O?"var(--text-secondary)":W==="tool_active"?"var(--green)":W==="reflecting"?"var(--yellow)":M.color;return u.jsxs("div",{className:"task-header-shell",children:[u.jsxs("div",{className:"task-header-bar",children:[u.jsxs("div",{className:"task-header-left",children:[c?u.jsx("input",{ref:p,className:"task-title-input",value:m,onChange:U=>h(U.target.value),onBlur:g,onKeyDown:U=>{U.key==="Enter"&&g(),U.key==="Escape"&&(h(e.title),d(!1))}}):u.jsx("span",{className:"task-title",onClick:x,title:"Click to edit",children:e.title}),u.jsxs("span",{className:"task-status-pill","data-status":e.status,"data-working":P?"true":"false",children:[u.jsx("span",{className:"task-status-dot",style:{background:V}}),A]}),R&&$&&u.jsxs("span",{className:"task-tool-pill",children:[u.jsx(Rm,{}),u.jsx("code",{children:$}),e.currentTool&&typeof e.toolElapsedMs=="number"&&e.toolElapsedMs>0&&u.jsxs("span",{children:[e.toolElapsedMs,"ms"]})]}),e.lastToolSummary&&u.jsx("span",{className:"task-projection-pill",title:e.lastToolSummary,children:e.lastToolSummary.slice(0,48)}),B&&u.jsx("span",{className:"task-role-pill",title:`Role: ${B}`,children:B}),e.employeeAssignment?.name&&u.jsxs("span",{className:"task-employee-pill",title:`Employee: ${e.employeeAssignment.name}${e.employeeAssignment.category?` (${e.employeeAssignment.category})`:""}`,children:[u.jsx("span",{className:"task-employee-icon",children:"👤"}),e.employeeAssignment.name]}),e.selectedExecutionAgent&&u.jsxs("span",{className:"task-agent-pill",title:`Execution Agent: ${XS[e.selectedExecutionAgent]??e.selectedExecutionAgent}`,children:[u.jsx("span",{className:"task-agent-icon",children:"⚙"}),XS[e.selectedExecutionAgent]??e.selectedExecutionAgent]})]}),u.jsxs("div",{className:"task-header-right",children:[w&&u.jsx("div",{className:"task-header-avatars",children:v.slice(0,3).map(U=>u.jsx("span",{className:"task-header-avatar",title:U.name,children:U.name.charAt(0).toUpperCase()},U.agent_id))}),u.jsx("span",{className:"task-header-time",title:new Date(e.createdAt).toLocaleString(),children:U8(e.createdAt)}),(I||j)&&r&&u.jsxs("button",{className:"task-stop-btn",onClick:r,title:"Stop task",disabled:!I,children:[u.jsx(Zj,{}),u.jsx("span",{children:j?"Stopping...":"Stop"})]}),L&&a&&e.status!=="done"&&u.jsx("button",{className:"task-resume-btn",onClick:a,title:"Resume prior runtime (re-awaken original team, no new plan)",children:u.jsx("span",{children:"Continue"})}),o&&u.jsxs("button",{className:"task-done-btn",onClick:o,title:"Mark task as done",children:[u.jsx(Fl,{}),u.jsx("span",{children:"Done"})]}),i&&u.jsx("button",{className:"task-board-btn",onClick:i,title:"View on Board",children:u.jsx(I4,{})})]})]}),Q&&u.jsx("div",{className:"task-header-metrics",children:Y&&u.jsxs("div",{className:"task-runtime-metric task-runtime-metric-approval",title:"Pending approvals",children:[u.jsx("span",{className:"task-runtime-metric-label",children:"Approvals"}),u.jsx("span",{className:"task-runtime-metric-value",children:e.pendingPermissionCount})]})})]})}function Jr(e){return String(e??"").trim().replace(/\s+/g," ").slice(0,96)}function gN(e){const t=e.itemId||e.streamId||e.toolCallId||e.permissionGroupKey;if(t)return`${e.type}:${Jr(e.turnId)}:${Jr(t)}`;if(e.type==="thinking"||e.type==="assistant")return`${e.type}:${Jr(e.turnId)||Jr(e.executionMode)||"stream"}:${Number.isFinite(e.timestamp)?e.timestamp:""}`;if(e.type==="tool_call")return`tool:${Jr(e.turnId)||"turnless"}:${Jr(e.summary)||"tool"}:${Number.isFinite(e.timestamp)?e.timestamp:""}`;if(e.turnId&&typeof e.seq=="number")return`${e.type}:${Jr(e.turnId)}:seq:${e.seq}`;const n=[e.type,Jr(e.turnId)];return typeof e.seq=="number"&&Number.isFinite(e.seq)&&n.push(`seq-${e.seq}`),n.push(Number.isFinite(e.timestamp)?e.timestamp:"",Jr(e.summary),Jr(e.detail)),n.join(":")}const W8=new Set(["done","failed","cancelled"]),KS=new Set(["thinking","tool_call","autonomy","needs_input","verification"]),am={thinking:{icon:u.jsx(S4,{}),color:"var(--accent)",label:"Thinking"},assistant:{icon:u.jsx(bl,{}),color:"var(--accent)",label:"Reply"},tool_call:{icon:u.jsx(Rm,{}),color:"var(--green)",label:"Tool"},autonomy:{icon:u.jsx(gu,{}),color:"var(--yellow)",label:"Autonomy"},handoff:{icon:u.jsx(Jj,{}),color:"var(--accent)",label:"Handoff"},gate_result:{icon:u.jsx(T4,{}),color:"var(--green)",label:"Gate"},status_change:{icon:u.jsx(Qk,{}),color:"var(--text-secondary)",label:"Status"},work_item_started:{icon:u.jsx(Mm,{}),color:"var(--accent)",label:"Work item"},gate_approved:{icon:u.jsx(R4,{}),color:"var(--green)",label:"Gate Passed"},gate_rejected:{icon:u.jsx(A4,{}),color:"var(--red)",label:"Rejected"},awaiting_manager_review:{icon:u.jsx(Lc,{}),color:"var(--yellow)",label:"Awaiting Manager Review"},awaiting_human:{icon:u.jsx(Lc,{}),color:"var(--yellow)",label:"Awaiting Human Review"},awaiting_review:{icon:u.jsx(Lc,{}),color:"var(--yellow)",label:"Awaiting Review"},awaiting_peer:{icon:u.jsx(Lc,{}),color:"var(--yellow)",label:"Awaiting Peer"},work_item_failed:{icon:u.jsx(Qk,{}),color:"var(--red)",label:"Failed"},deadlock:{icon:u.jsx(Uf,{}),color:"var(--red)",label:"Deadlock"},needs_input:{icon:u.jsx(Lc,{}),color:"var(--yellow)",label:"Needs Input"},verification:{icon:u.jsx(gu,{}),color:"var(--accent)",label:"Verification"}},zg=5;function Hc(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"just now";if(t<60)return`${t}s ago`;const n=Math.floor(t/60);return n<60?`${n}m ago`:`${Math.floor(n/60)}h ago`}function Of(e){if(typeof e=="string"){const t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return Of(JSON.parse(t))}catch{return e}return e}return Array.isArray(e)?e.map(Of):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,Of(n)])):e}function Y8(e){const t=e.trim();if(!t||!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.stringify(Of(JSON.parse(t)),null,2)}catch{return e}}function Il({entries:e,agentStatus:t,currentTool:n,toolElapsedMs:i,lastToolSummary:r,sessionStatus:o,expandedByDefault:a}){const[c,d]=C.useState(!!a),m=!!o&&W8.has(o),h=!m&&t==="reflecting",p=!m&&t==="tool_active",g=h||p,x=C.useMemo(()=>e,[e]),v=C.useMemo(()=>c||x.length<=zg?x:x.slice(-zg),[x,c]),b=x.length-v.length;return x.length===0&&!g&&!m?null:u.jsxs("div",{className:"ptl-block",children:[g&&u.jsxs("div",{className:`ptl-live ${p?"ptl-live-tool":"ptl-live-think"}`,children:[u.jsx("span",{className:"ptl-live-icon",children:p?u.jsx(Rm,{}):u.jsx(bl,{})}),u.jsx("span",{className:"ptl-live-text",children:p?"Running":"Thinking"}),p&&n&&u.jsx("code",{className:"ptl-live-tool-name",children:n}),p&&typeof i=="number"&&i>0&&u.jsx("span",{className:"ptl-live-elapsed",children:i<1e3?`${i}ms`:`${(i/1e3).toFixed(1)}s`}),u.jsx("span",{className:"ptl-live-shimmer"})]}),r&&!p&&u.jsxs("div",{className:"ptl-last-tool-summary",children:[u.jsx("span",{className:"ptl-last-tool-label",children:"Last tool result:"}),u.jsx("span",{className:"ptl-last-tool-text",children:r})]}),b>0&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[u.jsx(ss,{}),u.jsxs("span",{children:[b," earlier step",b>1?"s":""]})]}),v.length>0&&u.jsx("div",{className:"ptl-timeline",children:v.map((k,w)=>{const S=w===v.length-1,j=am[k.type]||am.status_change;return u.jsxs("div",{className:`ptl-entry${S?" ptl-entry-last":""}`,children:[u.jsxs("div",{className:"ptl-connector",children:[u.jsx("div",{className:"ptl-dot",style:{color:j.color},children:j.icon}),!S&&u.jsx("div",{className:"ptl-line"})]}),u.jsx("div",{className:"ptl-content",children:u.jsx(yN,{entry:k})})]},gN(k))})}),m&&!g&&u.jsxs("div",{className:`ptl-completion ptl-completion-${o}`,children:[u.jsx("span",{className:"ptl-completion-icon",children:o==="done"?"✓":o==="failed"?"✗":"—"}),u.jsx("span",{className:"ptl-completion-text",children:o==="done"?"Completed":o==="failed"?"Failed":"Cancelled"})]}),c&&x.length>zg&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!1),children:[u.jsx(ss,{down:!0}),u.jsx("span",{children:"Show less"})]}),!c&&b>0&&u.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[u.jsx(ss,{}),u.jsxs("span",{children:["Show more (",b," earlier step",b>1?"s":"",")"]})]})]})}const yN=Nt.memo(function({entry:t}){const[n,i]=C.useState(!1),r=am[t.type]||am.status_change,o=t.type==="tool_call"&&!!t.detail;if(t.type==="tool_call")return u.jsxs("div",{className:`ptl-tool-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${o?" clickable":""}`,onClick:()=>{o&&i(a=>!a)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:r.color},children:r.label}),u.jsx("code",{className:"ptl-tool-badge",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Hc(t.timestamp)}),o&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("pre",{className:"ptl-tool-card-detail",children:Y8(t.detail)})]});if(t.type==="autonomy"){const a=!!t.detail;return u.jsxs("div",{className:`ptl-tool-card ptl-autonomy-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&i(c=>!c)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:r.color},children:r.label}),u.jsx("code",{className:"ptl-tool-badge",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Hc(t.timestamp)}),a&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("div",{className:"ptl-tool-card-detail ptl-autonomy-detail",children:t.detail})]})}if(t.type==="thinking"||t.type==="assistant")return u.jsxs("div",{className:"ptl-tool-card",children:[u.jsxs("button",{className:"ptl-row ptl-tool-toggle clickable",onClick:()=>i(a=>!a),type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:r.color},children:r.label}),u.jsx("span",{className:"ptl-summary",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Hc(t.timestamp)}),u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&u.jsx("div",{className:"ptl-tool-card-detail ptl-thinking-detail",children:t.detail||t.summary})]});if(t.type==="verification"){const a=!!t.detail;return u.jsxs("div",{className:`ptl-tool-card ptl-verification-card${n?" expanded":""}`,children:[u.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&i(c=>!c)},type:"button",children:[u.jsx("span",{className:"ptl-label",style:{color:r.color},children:r.label}),u.jsx("span",{className:"ptl-summary",children:t.summary||"Verification"}),u.jsx("span",{className:"ptl-time",children:Hc(t.timestamp)}),a&&u.jsx("span",{className:"ptl-tool-chevron",children:u.jsx(ss,{down:n})})]}),n&&t.detail&&u.jsx("div",{className:"ptl-tool-card-detail ptl-verification-detail",children:t.detail})]})}return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"ptl-row",children:[u.jsx("span",{className:"ptl-label",style:{color:r.color},children:r.label}),u.jsx("span",{className:"ptl-summary",children:t.summary}),u.jsx("span",{className:"ptl-time",children:Hc(t.timestamp)})]}),t.detail&&u.jsx("div",{className:"ptl-detail",children:t.detail})]})});function X8(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const K8=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Z8=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Q8={};function ZS(e,t){return(Q8.jsx?Z8:K8).test(e)}const J8=/[ \t\n\f\r]/g;function ez(e){return typeof e=="object"?e.type==="text"?QS(e.value):!1:QS(e)}function QS(e){return e.replace(J8,"")===""}class $u{constructor(t,n,i){this.normal=n,this.property=t,i&&(this.space=i)}}$u.prototype.normal={};$u.prototype.property={};$u.prototype.space=void 0;function xN(e,t){const n={},i={};for(const r of e)Object.assign(n,r.property),Object.assign(i,r.normal);return new $u(n,i,t)}function qx(e){return e.toLowerCase()}class er{constructor(t,n){this.attribute=n,this.property=t}}er.prototype.attribute="";er.prototype.booleanish=!1;er.prototype.boolean=!1;er.prototype.commaOrSpaceSeparated=!1;er.prototype.commaSeparated=!1;er.prototype.defined=!1;er.prototype.mustUseProperty=!1;er.prototype.number=!1;er.prototype.overloadedBoolean=!1;er.prototype.property="";er.prototype.spaceSeparated=!1;er.prototype.space=void 0;let tz=0;const At=fa(),li=fa(),Wx=fa(),De=fa(),Tn=fa(),pl=fa(),cr=fa();function fa(){return 2**++tz}const Yx=Object.freeze(Object.defineProperty({__proto__:null,boolean:At,booleanish:li,commaOrSpaceSeparated:cr,commaSeparated:pl,number:De,overloadedBoolean:Wx,spaceSeparated:Tn},Symbol.toStringTag,{value:"Module"})),Pg=Object.keys(Yx);class s0 extends er{constructor(t,n,i,r){let o=-1;if(super(t,n),JS(this,"space",r),typeof i=="number")for(;++o<Pg.length;){const a=Pg[o];JS(this,Pg[o],(i&Yx[a])===Yx[a])}}}s0.prototype.defined=!0;function JS(e,t,n){n&&(e[t]=n)}function ql(e){const t={},n={};for(const[i,r]of Object.entries(e.properties)){const o=new s0(i,e.transform(e.attributes||{},i),r,e.space);e.mustUseProperty&&e.mustUseProperty.includes(i)&&(o.mustUseProperty=!0),t[i]=o,n[qx(i)]=i,n[qx(o.attribute)]=i}return new $u(t,n,e.space)}const vN=ql({properties:{ariaActiveDescendant:null,ariaAtomic:li,ariaAutoComplete:null,ariaBusy:li,ariaChecked:li,ariaColCount:De,ariaColIndex:De,ariaColSpan:De,ariaControls:Tn,ariaCurrent:null,ariaDescribedBy:Tn,ariaDetails:null,ariaDisabled:li,ariaDropEffect:Tn,ariaErrorMessage:null,ariaExpanded:li,ariaFlowTo:Tn,ariaGrabbed:li,ariaHasPopup:null,ariaHidden:li,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Tn,ariaLevel:De,ariaLive:null,ariaModal:li,ariaMultiLine:li,ariaMultiSelectable:li,ariaOrientation:null,ariaOwns:Tn,ariaPlaceholder:null,ariaPosInSet:De,ariaPressed:li,ariaReadOnly:li,ariaRelevant:null,ariaRequired:li,ariaRoleDescription:Tn,ariaRowCount:De,ariaRowIndex:De,ariaRowSpan:De,ariaSelected:li,ariaSetSize:De,ariaSort:null,ariaValueMax:De,ariaValueMin:De,ariaValueNow:De,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function bN(e,t){return t in e?e[t]:t}function _N(e,t){return bN(e,t.toLowerCase())}const nz=ql({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:pl,acceptCharset:Tn,accessKey:Tn,action:null,allow:null,allowFullScreen:At,allowPaymentRequest:At,allowUserMedia:At,alt:null,as:null,async:At,autoCapitalize:null,autoComplete:Tn,autoFocus:At,autoPlay:At,blocking:Tn,capture:null,charSet:null,checked:At,cite:null,className:Tn,cols:De,colSpan:null,content:null,contentEditable:li,controls:At,controlsList:Tn,coords:De|pl,crossOrigin:null,data:null,dateTime:null,decoding:null,default:At,defer:At,dir:null,dirName:null,disabled:At,download:Wx,draggable:li,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:At,formTarget:null,headers:Tn,height:De,hidden:Wx,high:De,href:null,hrefLang:null,htmlFor:Tn,httpEquiv:Tn,id:null,imageSizes:null,imageSrcSet:null,inert:At,inputMode:null,integrity:null,is:null,isMap:At,itemId:null,itemProp:Tn,itemRef:Tn,itemScope:At,itemType:Tn,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:At,low:De,manifest:null,max:null,maxLength:De,media:null,method:null,min:null,minLength:De,multiple:At,muted:At,name:null,nonce:null,noModule:At,noValidate:At,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:At,optimum:De,pattern:null,ping:Tn,placeholder:null,playsInline:At,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:At,referrerPolicy:null,rel:Tn,required:At,reversed:At,rows:De,rowSpan:De,sandbox:Tn,scope:null,scoped:At,seamless:At,selected:At,shadowRootClonable:At,shadowRootDelegatesFocus:At,shadowRootMode:null,shape:null,size:De,sizes:null,slot:null,span:De,spellCheck:li,src:null,srcDoc:null,srcLang:null,srcSet:null,start:De,step:null,style:null,tabIndex:De,target:null,title:null,translate:null,type:null,typeMustMatch:At,useMap:null,value:li,width:De,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Tn,axis:null,background:null,bgColor:null,border:De,borderColor:null,bottomMargin:De,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:At,declare:At,event:null,face:null,frame:null,frameBorder:null,hSpace:De,leftMargin:De,link:null,longDesc:null,lowSrc:null,marginHeight:De,marginWidth:De,noResize:At,noHref:At,noShade:At,noWrap:At,object:null,profile:null,prompt:null,rev:null,rightMargin:De,rules:null,scheme:null,scrolling:li,standby:null,summary:null,text:null,topMargin:De,valueType:null,version:null,vAlign:null,vLink:null,vSpace:De,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:At,disableRemotePlayback:At,prefix:null,property:null,results:De,security:null,unselectable:null},space:"html",transform:_N}),iz=ql({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:cr,accentHeight:De,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:De,amplitude:De,arabicForm:null,ascent:De,attributeName:null,attributeType:null,azimuth:De,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:De,by:null,calcMode:null,capHeight:De,className:Tn,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:De,diffuseConstant:De,direction:null,display:null,dur:null,divisor:De,dominantBaseline:null,download:At,dx:null,dy:null,edgeMode:null,editable:null,elevation:De,enableBackground:null,end:null,event:null,exponent:De,externalResourcesRequired:null,fill:null,fillOpacity:De,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:pl,g2:pl,glyphName:pl,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:De,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:De,horizOriginX:De,horizOriginY:De,id:null,ideographic:De,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:De,k:De,k1:De,k2:De,k3:De,k4:De,kernelMatrix:cr,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:De,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:De,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:De,overlineThickness:De,paintOrder:null,panose1:null,path:null,pathLength:De,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Tn,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:De,pointsAtY:De,pointsAtZ:De,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:cr,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:cr,rev:cr,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:cr,requiredFeatures:cr,requiredFonts:cr,requiredFormats:cr,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:De,specularExponent:De,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:De,strikethroughThickness:De,string:null,stroke:null,strokeDashArray:cr,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:De,strokeOpacity:De,strokeWidth:null,style:null,surfaceScale:De,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:cr,tabIndex:De,tableValues:null,target:null,targetX:De,targetY:De,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:cr,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:De,underlineThickness:De,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:De,values:null,vAlphabetic:De,vMathematical:De,vectorEffect:null,vHanging:De,vIdeographic:De,version:null,vertAdvY:De,vertOriginX:De,vertOriginY:De,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:De,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:bN}),kN=ql({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),SN=ql({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:_N}),wN=ql({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),rz={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},sz=/[A-Z]/g,ew=/-[a-z]/g,oz=/^data[-\w.:]+$/i;function az(e,t){const n=qx(t);let i=t,r=er;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)==="data"&&oz.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(ew,cz);i="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!ew.test(o)){let a=o.replace(sz,lz);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}r=s0}return new r(i,t)}function lz(e){return"-"+e.toLowerCase()}function cz(e){return e.charAt(1).toUpperCase()}const uz=xN([vN,nz,kN,SN,wN],"html"),o0=xN([vN,iz,kN,SN,wN],"svg");function dz(e){return e.join(" ").trim()}var el={},Bg,tw;function fz(){if(tw)return Bg;tw=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,n=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,r=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,c=/^\s+|\s+$/g,d=` +`,m="/",h="*",p="",g="comment",x="declaration";function v(k,w){if(typeof k!="string")throw new TypeError("First argument must be a string");if(!k)return[];w=w||{};var S=1,j=1;function N(P){var G=P.match(t);G&&(S+=G.length);var $=P.lastIndexOf(d);j=~$?P.length-$:j+P.length}function O(){var P={line:S,column:j};return function(G){return G.position=new R(P),L(),G}}function R(P){this.start=P,this.end={line:S,column:j},this.source=w.source}R.prototype.content=k;function D(P){var G=new Error(w.source+":"+S+":"+j+": "+P);if(G.reason=P,G.filename=w.source,G.line=S,G.column=j,G.source=k,!w.silent)throw G}function I(P){var G=P.exec(k);if(G){var $=G[0];return N($),k=k.slice($.length),G}}function L(){I(n)}function M(P){var G;for(P=P||[];G=A();)G!==!1&&P.push(G);return P}function A(){var P=O();if(!(m!=k.charAt(0)||h!=k.charAt(1))){for(var G=2;p!=k.charAt(G)&&(h!=k.charAt(G)||m!=k.charAt(G+1));)++G;if(G+=2,p===k.charAt(G-1))return D("End of comment missing");var $=k.slice(2,G-2);return j+=2,N($),k=k.slice(G),j+=2,P({type:g,comment:$})}}function B(){var P=O(),G=I(i);if(G){if(A(),!I(r))return D("property missing ':'");var $=I(o),q=P({type:x,property:b(G[0].replace(e,p)),value:$?b($[0].replace(e,p)):p});return I(a),q}}function W(){var P=[];M(P);for(var G;G=B();)G!==!1&&(P.push(G),M(P));return P}return L(),W()}function b(k){return k?k.replace(c,p):p}return Bg=v,Bg}var nw;function mz(){if(nw)return el;nw=1;var e=el&&el.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(el,"__esModule",{value:!0}),el.default=n;const t=e(fz());function n(i,r){let o=null;if(!i||typeof i!="string")return o;const a=(0,t.default)(i),c=typeof r=="function";return a.forEach(d=>{if(d.type!=="declaration")return;const{property:m,value:h}=d;c?r(m,h,d):h&&(o=o||{},o[m]=h)}),o}return el}var Fc={},iw;function pz(){if(iw)return Fc;iw=1,Object.defineProperty(Fc,"__esModule",{value:!0}),Fc.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,n=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,r=/^-(ms)-/,o=function(m){return!m||n.test(m)||e.test(m)},a=function(m,h){return h.toUpperCase()},c=function(m,h){return"".concat(h,"-")},d=function(m,h){return h===void 0&&(h={}),o(m)?m:(m=m.toLowerCase(),h.reactCompat?m=m.replace(r,c):m=m.replace(i,c),m.replace(t,a))};return Fc.camelCase=d,Fc}var Vc,rw;function hz(){if(rw)return Vc;rw=1;var e=Vc&&Vc.__importDefault||function(r){return r&&r.__esModule?r:{default:r}},t=e(mz()),n=pz();function i(r,o){var a={};return!r||typeof r!="string"||(0,t.default)(r,function(c,d){c&&d&&(a[(0,n.camelCase)(c,o)]=d)}),a}return i.default=i,Vc=i,Vc}var gz=hz();const yz=da(gz),CN=jN("end"),a0=jN("start");function jN(e){return t;function t(n){const i=n&&n.position&&n.position[e]||{};if(typeof i.line=="number"&&i.line>0&&typeof i.column=="number"&&i.column>0)return{line:i.line,column:i.column,offset:typeof i.offset=="number"&&i.offset>-1?i.offset:void 0}}}function xz(e){const t=a0(e),n=CN(e);if(t&&n)return{start:t,end:n}}function lu(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?sw(e.position):"start"in e||"end"in e?sw(e):"line"in e||"column"in e?Xx(e):""}function Xx(e){return ow(e&&e.line)+":"+ow(e&&e.column)}function sw(e){return Xx(e&&e.start)+"-"+Xx(e&&e.end)}function ow(e){return e&&typeof e=="number"?e:1}class Pi extends Error{constructor(t,n,i){super(),typeof n=="string"&&(i=n,n=void 0);let r="",o={},a=!1;if(n&&("line"in n&&"column"in n?o={place:n}:"start"in n&&"end"in n?o={place:n}:"type"in n?o={ancestors:[n],place:n.position}:o={...n}),typeof t=="string"?r=t:!o.cause&&t&&(a=!0,r=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof i=="string"){const d=i.indexOf(":");d===-1?o.ruleId=i:(o.source=i.slice(0,d),o.ruleId=i.slice(d+1))}if(!o.place&&o.ancestors&&o.ancestors){const d=o.ancestors[o.ancestors.length-1];d&&(o.place=d.position)}const c=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=c?c.column:void 0,this.fatal=void 0,this.file="",this.message=r,this.line=c?c.line:void 0,this.name=lu(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=a&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Pi.prototype.file="";Pi.prototype.name="";Pi.prototype.reason="";Pi.prototype.message="";Pi.prototype.stack="";Pi.prototype.column=void 0;Pi.prototype.line=void 0;Pi.prototype.ancestors=void 0;Pi.prototype.cause=void 0;Pi.prototype.fatal=void 0;Pi.prototype.place=void 0;Pi.prototype.ruleId=void 0;Pi.prototype.source=void 0;const l0={}.hasOwnProperty,vz=new Map,bz=/[A-Z]/g,_z=new Set(["table","tbody","thead","tfoot","tr"]),kz=new Set(["td","th"]),EN="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function Sz(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let i;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");i=Rz(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");i=Tz(n,t.jsx,t.jsxs)}const r={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:i,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?o0:uz,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=NN(r,e,void 0);return o&&typeof o!="string"?o:r.create(e,r.Fragment,{children:o||void 0},void 0)}function NN(e,t,n){if(t.type==="element")return wz(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return Cz(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return Ez(e,t,n);if(t.type==="mdxjsEsm")return jz(e,t);if(t.type==="root")return Nz(e,t,n);if(t.type==="text")return Iz(e,t)}function wz(e,t,n){const i=e.schema;let r=i;t.tagName.toLowerCase()==="svg"&&i.space==="html"&&(r=o0,e.schema=r),e.ancestors.push(t);const o=TN(e,t.tagName,!1),a=Az(e,t);let c=u0(e,t);return _z.has(t.tagName)&&(c=c.filter(function(d){return typeof d=="string"?!ez(d):!0})),IN(e,a,o,t),c0(a,c),e.ancestors.pop(),e.schema=i,e.create(t,o,a,n)}function Cz(e,t){if(t.data&&t.data.estree&&e.evaluater){const i=t.data.estree.body[0];return i.type,e.evaluater.evaluateExpression(i.expression)}ju(e,t.position)}function jz(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);ju(e,t.position)}function Ez(e,t,n){const i=e.schema;let r=i;t.name==="svg"&&i.space==="html"&&(r=o0,e.schema=r),e.ancestors.push(t);const o=t.name===null?e.Fragment:TN(e,t.name,!0),a=Mz(e,t),c=u0(e,t);return IN(e,a,o,t),c0(a,c),e.ancestors.pop(),e.schema=i,e.create(t,o,a,n)}function Nz(e,t,n){const i={};return c0(i,u0(e,t)),e.create(t,e.Fragment,i,n)}function Iz(e,t){return t.value}function IN(e,t,n,i){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=i)}function c0(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function Tz(e,t,n){return i;function i(r,o,a,c){const m=Array.isArray(a.children)?n:t;return c?m(o,a,c):m(o,a)}}function Rz(e,t){return n;function n(i,r,o,a){const c=Array.isArray(o.children),d=a0(i);return t(r,o,a,c,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function Az(e,t){const n={};let i,r;for(r in t.properties)if(r!=="children"&&l0.call(t.properties,r)){const o=Dz(e,r,t.properties[r]);if(o){const[a,c]=o;e.tableCellAlignToStyle&&a==="align"&&typeof c=="string"&&kz.has(t.tagName)?i=c:n[a]=c}}if(i){const o=n.style||(n.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=i}return n}function Mz(e,t){const n={};for(const i of t.attributes)if(i.type==="mdxJsxExpressionAttribute")if(i.data&&i.data.estree&&e.evaluater){const o=i.data.estree.body[0];o.type;const a=o.expression;a.type;const c=a.properties[0];c.type,Object.assign(n,e.evaluater.evaluateExpression(c.argument))}else ju(e,t.position);else{const r=i.name;let o;if(i.value&&typeof i.value=="object")if(i.value.data&&i.value.data.estree&&e.evaluater){const c=i.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else ju(e,t.position);else o=i.value===null?!0:i.value;n[r]=o}return n}function u0(e,t){const n=[];let i=-1;const r=e.passKeys?new Map:vz;for(;++i<t.children.length;){const o=t.children[i];let a;if(e.passKeys){const d=o.type==="element"?o.tagName:o.type==="mdxJsxFlowElement"||o.type==="mdxJsxTextElement"?o.name:void 0;if(d){const m=r.get(d)||0;a=d+"-"+m,r.set(d,m+1)}}const c=NN(e,o,a);c!==void 0&&n.push(c)}return n}function Dz(e,t,n){const i=az(e.schema,t);if(!(n==null||typeof n=="number"&&Number.isNaN(n))){if(Array.isArray(n)&&(n=i.commaSeparated?X8(n):dz(n)),i.property==="style"){let r=typeof n=="object"?n:Oz(e,String(n));return e.stylePropertyNameCase==="css"&&(r=Lz(r)),["style",r]}return[e.elementAttributeNameCase==="react"&&i.space?rz[i.property]||i.property:i.attribute,n]}}function Oz(e,t){try{return yz(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};const i=n,r=new Pi("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:i,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=EN+"#cannot-parse-style-attribute",r}}function TN(e,t,n){let i;if(!n)i={type:"Literal",value:t};else if(t.includes(".")){const r=t.split(".");let o=-1,a;for(;++o<r.length;){const c=ZS(r[o])?{type:"Identifier",name:r[o]}:{type:"Literal",value:r[o]};a=a?{type:"MemberExpression",object:a,property:c,computed:!!(o&&c.type==="Literal"),optional:!1}:c}i=a}else i=ZS(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(i.type==="Literal"){const r=i.value;return l0.call(e.components,r)?e.components[r]:r}if(e.evaluater)return e.evaluater.evaluateExpression(i);ju(e)}function ju(e,t){const n=new Pi("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=EN+"#cannot-handle-mdx-estrees-without-createevaluater",n}function Lz(e){const t={};let n;for(n in e)l0.call(e,n)&&(t[zz(n)]=e[n]);return t}function zz(e){let t=e.replace(bz,Pz);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function Pz(e){return"-"+e.toLowerCase()}const $g={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},Bz={};function d0(e,t){const n=Bz,i=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,r=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return RN(e,i,r)}function RN(e,t,n){if($z(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return aw(e.children,t,n)}return Array.isArray(e)?aw(e,t,n):""}function aw(e,t,n){const i=[];let r=-1;for(;++r<e.length;)i[r]=RN(e[r],t,n);return i.join("")}function $z(e){return!!(e&&typeof e=="object")}const lw=document.createElement("i");function f0(e){const t="&"+e+";";lw.innerHTML=t;const n=lw.textContent;return n.charCodeAt(n.length-1)===59&&e!=="semi"||n===t?!1:n}function hr(e,t,n,i){const r=e.length;let o=0,a;if(t<0?t=-t>r?0:r+t:t=t>r?r:t,n=n>0?n:0,i.length<1e4)a=Array.from(i),a.unshift(t,n),e.splice(...a);else for(n&&e.splice(t,n);o<i.length;)a=i.slice(o,o+1e4),a.unshift(t,0),e.splice(...a),o+=1e4,t+=1e4}function Tr(e,t){return e.length>0?(hr(e,e.length,0,t),e):t}const cw={}.hasOwnProperty;function AN(e){const t={};let n=-1;for(;++n<e.length;)Hz(t,e[n]);return t}function Hz(e,t){let n;for(n in t){const r=(cw.call(e,n)?e[n]:void 0)||(e[n]={}),o=t[n];let a;if(o)for(a in o){cw.call(r,a)||(r[a]=[]);const c=o[a];Fz(r[a],Array.isArray(c)?c:c?[c]:[])}}}function Fz(e,t){let n=-1;const i=[];for(;++n<t.length;)(t[n].add==="after"?e:i).push(t[n]);hr(e,0,0,i)}function MN(e,t){const n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function Ur(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Vi=No(/[A-Za-z]/),zi=No(/[\dA-Za-z]/),Vz=No(/[#-'*+\--9=?A-Z^-~]/);function lm(e){return e!==null&&(e<32||e===127)}const Kx=No(/\d/),Uz=No(/[\dA-Fa-f]/),Gz=No(/[!-/:-@[-`{-~]/);function dt(e){return e!==null&&e<-2}function Nn(e){return e!==null&&(e<0||e===32)}function Yt(e){return e===-2||e===-1||e===32}const Gm=No(new RegExp("\\p{P}|\\p{S}","u")),oa=No(/\s/);function No(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Wl(e){const t=[];let n=-1,i=0,r=0;for(;++n<e.length;){const o=e.charCodeAt(n);let a="";if(o===37&&zi(e.charCodeAt(n+1))&&zi(e.charCodeAt(n+2)))r=2;else if(o<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(o))||(a=String.fromCharCode(o));else if(o>55295&&o<57344){const c=e.charCodeAt(n+1);o<56320&&c>56319&&c<57344?(a=String.fromCharCode(o,c),r=1):a="�"}else a=String.fromCharCode(o);a&&(t.push(e.slice(i,n),encodeURIComponent(a)),i=n+r+1,a=""),r&&(n+=r,r=0)}return t.join("")+e.slice(i)}function rn(e,t,n,i){const r=i?i-1:Number.POSITIVE_INFINITY;let o=0;return a;function a(d){return Yt(d)?(e.enter(n),c(d)):t(d)}function c(d){return Yt(d)&&o++<r?(e.consume(d),c):(e.exit(n),t(d))}}const qz={tokenize:Wz};function Wz(e){const t=e.attempt(this.parser.constructs.contentInitial,i,r);let n;return t;function i(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),rn(e,t,"linePrefix")}function r(c){return e.enter("paragraph"),o(c)}function o(c){const d=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=d),n=d,a(c)}function a(c){if(c===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(c);return}return dt(c)?(e.consume(c),e.exit("chunkText"),o):(e.consume(c),a)}}const Yz={tokenize:Xz},uw={tokenize:Kz};function Xz(e){const t=this,n=[];let i=0,r,o,a;return c;function c(j){if(i<n.length){const N=n[i];return t.containerState=N[1],e.attempt(N[0].continuation,d,m)(j)}return m(j)}function d(j){if(i++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,r&&S();const N=t.events.length;let O=N,R;for(;O--;)if(t.events[O][0]==="exit"&&t.events[O][1].type==="chunkFlow"){R=t.events[O][1].end;break}w(i);let D=N;for(;D<t.events.length;)t.events[D][1].end={...R},D++;return hr(t.events,O+1,0,t.events.slice(N)),t.events.length=D,m(j)}return c(j)}function m(j){if(i===n.length){if(!r)return g(j);if(r.currentConstruct&&r.currentConstruct.concrete)return v(j);t.interrupt=!!(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(uw,h,p)(j)}function h(j){return r&&S(),w(i),g(j)}function p(j){return t.parser.lazy[t.now().line]=i!==n.length,a=t.now().offset,v(j)}function g(j){return t.containerState={},e.attempt(uw,x,v)(j)}function x(j){return i++,n.push([t.currentConstruct,t.containerState]),g(j)}function v(j){if(j===null){r&&S(),w(0),e.consume(j);return}return r=r||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:r,contentType:"flow",previous:o}),b(j)}function b(j){if(j===null){k(e.exit("chunkFlow"),!0),w(0),e.consume(j);return}return dt(j)?(e.consume(j),k(e.exit("chunkFlow")),i=0,t.interrupt=void 0,c):(e.consume(j),b)}function k(j,N){const O=t.sliceStream(j);if(N&&O.push(null),j.previous=o,o&&(o.next=j),o=j,r.defineSkip(j.start),r.write(O),t.parser.lazy[j.start.line]){let R=r.events.length;for(;R--;)if(r.events[R][1].start.offset<a&&(!r.events[R][1].end||r.events[R][1].end.offset>a))return;const D=t.events.length;let I=D,L,M;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){if(L){M=t.events[I][1].end;break}L=!0}for(w(i),R=D;R<t.events.length;)t.events[R][1].end={...M},R++;hr(t.events,I+1,0,t.events.slice(D)),t.events.length=R}}function w(j){let N=n.length;for(;N-- >j;){const O=n[N];t.containerState=O[1],O[0].exit.call(t,e)}n.length=j}function S(){r.write([null]),o=void 0,r=void 0,t.containerState._closeFlow=void 0}}function Kz(e,t,n){return rn(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Tl(e){if(e===null||Nn(e)||oa(e))return 1;if(Gm(e))return 2}function qm(e,t,n){const i=[];let r=-1;for(;++r<e.length;){const o=e[r].resolveAll;o&&!i.includes(o)&&(t=o(t,n),i.push(o))}return t}const Zx={name:"attention",resolveAll:Zz,tokenize:Qz};function Zz(e,t){let n=-1,i,r,o,a,c,d,m,h;for(;++n<e.length;)if(e[n][0]==="enter"&&e[n][1].type==="attentionSequence"&&e[n][1]._close){for(i=n;i--;)if(e[i][0]==="exit"&&e[i][1].type==="attentionSequence"&&e[i][1]._open&&t.sliceSerialize(e[i][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[i][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[i][1].end.offset-e[i][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;d=e[i][1].end.offset-e[i][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const p={...e[i][1].end},g={...e[n][1].start};dw(p,-d),dw(g,d),a={type:d>1?"strongSequence":"emphasisSequence",start:p,end:{...e[i][1].end}},c={type:d>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:g},o={type:d>1?"strongText":"emphasisText",start:{...e[i][1].end},end:{...e[n][1].start}},r={type:d>1?"strong":"emphasis",start:{...a.start},end:{...c.end}},e[i][1].end={...a.start},e[n][1].start={...c.end},m=[],e[i][1].end.offset-e[i][1].start.offset&&(m=Tr(m,[["enter",e[i][1],t],["exit",e[i][1],t]])),m=Tr(m,[["enter",r,t],["enter",a,t],["exit",a,t],["enter",o,t]]),m=Tr(m,qm(t.parser.constructs.insideSpan.null,e.slice(i+1,n),t)),m=Tr(m,[["exit",o,t],["enter",c,t],["exit",c,t],["exit",r,t]]),e[n][1].end.offset-e[n][1].start.offset?(h=2,m=Tr(m,[["enter",e[n][1],t],["exit",e[n][1],t]])):h=0,hr(e,i-1,n-i+3,m),n=i+m.length-h-2;break}}for(n=-1;++n<e.length;)e[n][1].type==="attentionSequence"&&(e[n][1].type="data");return e}function Qz(e,t){const n=this.parser.constructs.attentionMarkers.null,i=this.previous,r=Tl(i);let o;return a;function a(d){return o=d,e.enter("attentionSequence"),c(d)}function c(d){if(d===o)return e.consume(d),c;const m=e.exit("attentionSequence"),h=Tl(d),p=!h||h===2&&r||n.includes(d),g=!r||r===2&&h||n.includes(i);return m._open=!!(o===42?p:p&&(r||!g)),m._close=!!(o===42?g:g&&(h||!p)),t(d)}}function dw(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const Jz={name:"autolink",tokenize:eP};function eP(e,t,n){let i=0;return r;function r(x){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),o}function o(x){return Vi(x)?(e.consume(x),a):x===64?n(x):m(x)}function a(x){return x===43||x===45||x===46||zi(x)?(i=1,c(x)):m(x)}function c(x){return x===58?(e.consume(x),i=0,d):(x===43||x===45||x===46||zi(x))&&i++<32?(e.consume(x),c):(i=0,m(x))}function d(x){return x===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.exit("autolink"),t):x===null||x===32||x===60||lm(x)?n(x):(e.consume(x),d)}function m(x){return x===64?(e.consume(x),h):Vz(x)?(e.consume(x),m):n(x)}function h(x){return zi(x)?p(x):n(x)}function p(x){return x===46?(e.consume(x),i=0,h):x===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(x),e.exit("autolinkMarker"),e.exit("autolink"),t):g(x)}function g(x){if((x===45||zi(x))&&i++<63){const v=x===45?g:p;return e.consume(x),v}return n(x)}}const Hu={partial:!0,tokenize:tP};function tP(e,t,n){return i;function i(o){return Yt(o)?rn(e,r,"linePrefix")(o):r(o)}function r(o){return o===null||dt(o)?t(o):n(o)}}const DN={continuation:{tokenize:iP},exit:rP,name:"blockQuote",tokenize:nP};function nP(e,t,n){const i=this;return r;function r(a){if(a===62){const c=i.containerState;return c.open||(e.enter("blockQuote",{_container:!0}),c.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(a),e.exit("blockQuoteMarker"),o}return n(a)}function o(a){return Yt(a)?(e.enter("blockQuotePrefixWhitespace"),e.consume(a),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(a))}}function iP(e,t,n){const i=this;return r;function r(a){return Yt(a)?rn(e,o,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a):o(a)}function o(a){return e.attempt(DN,t,n)(a)}}function rP(e){e.exit("blockQuote")}const ON={name:"characterEscape",tokenize:sP};function sP(e,t,n){return i;function i(o){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(o),e.exit("escapeMarker"),r}function r(o){return Gz(o)?(e.enter("characterEscapeValue"),e.consume(o),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(o)}}const LN={name:"characterReference",tokenize:oP};function oP(e,t,n){const i=this;let r=0,o,a;return c;function c(p){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(p),e.exit("characterReferenceMarker"),d}function d(p){return p===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(p),e.exit("characterReferenceMarkerNumeric"),m):(e.enter("characterReferenceValue"),o=31,a=zi,h(p))}function m(p){return p===88||p===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(p),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,a=Uz,h):(e.enter("characterReferenceValue"),o=7,a=Kx,h(p))}function h(p){if(p===59&&r){const g=e.exit("characterReferenceValue");return a===zi&&!f0(i.sliceSerialize(g))?n(p):(e.enter("characterReferenceMarker"),e.consume(p),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return a(p)&&r++<o?(e.consume(p),h):n(p)}}const fw={partial:!0,tokenize:lP},mw={concrete:!0,name:"codeFenced",tokenize:aP};function aP(e,t,n){const i=this,r={partial:!0,tokenize:O};let o=0,a=0,c;return d;function d(R){return m(R)}function m(R){const D=i.events[i.events.length-1];return o=D&&D[1].type==="linePrefix"?D[2].sliceSerialize(D[1],!0).length:0,c=R,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),h(R)}function h(R){return R===c?(a++,e.consume(R),h):a<3?n(R):(e.exit("codeFencedFenceSequence"),Yt(R)?rn(e,p,"whitespace")(R):p(R))}function p(R){return R===null||dt(R)?(e.exit("codeFencedFence"),i.interrupt?t(R):e.check(fw,b,N)(R)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),g(R))}function g(R){return R===null||dt(R)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),p(R)):Yt(R)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),rn(e,x,"whitespace")(R)):R===96&&R===c?n(R):(e.consume(R),g)}function x(R){return R===null||dt(R)?p(R):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),v(R))}function v(R){return R===null||dt(R)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),p(R)):R===96&&R===c?n(R):(e.consume(R),v)}function b(R){return e.attempt(r,N,k)(R)}function k(R){return e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),w}function w(R){return o>0&&Yt(R)?rn(e,S,"linePrefix",o+1)(R):S(R)}function S(R){return R===null||dt(R)?e.check(fw,b,N)(R):(e.enter("codeFlowValue"),j(R))}function j(R){return R===null||dt(R)?(e.exit("codeFlowValue"),S(R)):(e.consume(R),j)}function N(R){return e.exit("codeFenced"),t(R)}function O(R,D,I){let L=0;return M;function M(G){return R.enter("lineEnding"),R.consume(G),R.exit("lineEnding"),A}function A(G){return R.enter("codeFencedFence"),Yt(G)?rn(R,B,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(G):B(G)}function B(G){return G===c?(R.enter("codeFencedFenceSequence"),W(G)):I(G)}function W(G){return G===c?(L++,R.consume(G),W):L>=a?(R.exit("codeFencedFenceSequence"),Yt(G)?rn(R,P,"whitespace")(G):P(G)):I(G)}function P(G){return G===null||dt(G)?(R.exit("codeFencedFence"),D(G)):I(G)}}}function lP(e,t,n){const i=this;return r;function r(a){return a===null?n(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o)}function o(a){return i.parser.lazy[i.now().line]?n(a):t(a)}}const Hg={name:"codeIndented",tokenize:uP},cP={partial:!0,tokenize:dP};function uP(e,t,n){const i=this;return r;function r(m){return e.enter("codeIndented"),rn(e,o,"linePrefix",5)(m)}function o(m){const h=i.events[i.events.length-1];return h&&h[1].type==="linePrefix"&&h[2].sliceSerialize(h[1],!0).length>=4?a(m):n(m)}function a(m){return m===null?d(m):dt(m)?e.attempt(cP,a,d)(m):(e.enter("codeFlowValue"),c(m))}function c(m){return m===null||dt(m)?(e.exit("codeFlowValue"),a(m)):(e.consume(m),c)}function d(m){return e.exit("codeIndented"),t(m)}}function dP(e,t,n){const i=this;return r;function r(a){return i.parser.lazy[i.now().line]?n(a):dt(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),r):rn(e,o,"linePrefix",5)(a)}function o(a){const c=i.events[i.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?t(a):dt(a)?r(a):n(a)}}const fP={name:"codeText",previous:pP,resolve:mP,tokenize:hP};function mP(e){let t=e.length-4,n=3,i,r;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(i=n;++i<t;)if(e[i][1].type==="codeTextData"){e[n][1].type="codeTextPadding",e[t][1].type="codeTextPadding",n+=2,t-=2;break}}for(i=n-1,t++;++i<=t;)r===void 0?i!==t&&e[i][1].type!=="lineEnding"&&(r=i):(i===t||e[i][1].type==="lineEnding")&&(e[r][1].type="codeTextData",i!==r+2&&(e[r][1].end=e[i-1][1].end,e.splice(r+2,i-r-2),t-=i-r-2,i=r+2),r=void 0);return e}function pP(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function hP(e,t,n){let i=0,r,o;return a;function a(p){return e.enter("codeText"),e.enter("codeTextSequence"),c(p)}function c(p){return p===96?(e.consume(p),i++,c):(e.exit("codeTextSequence"),d(p))}function d(p){return p===null?n(p):p===32?(e.enter("space"),e.consume(p),e.exit("space"),d):p===96?(o=e.enter("codeTextSequence"),r=0,h(p)):dt(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),d):(e.enter("codeTextData"),m(p))}function m(p){return p===null||p===32||p===96||dt(p)?(e.exit("codeTextData"),d(p)):(e.consume(p),m)}function h(p){return p===96?(e.consume(p),r++,h):r===i?(e.exit("codeTextSequence"),e.exit("codeText"),t(p)):(o.type="codeTextData",m(p))}}class gP{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){const i=n??Number.POSITIVE_INFINITY;return i<this.left.length?this.left.slice(t,i):t>this.left.length?this.right.slice(this.right.length-i+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-i+this.left.length).reverse())}splice(t,n,i){const r=n||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return i&&Uc(this.left,i),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Uc(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Uc(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const n=this.left.splice(t,Number.POSITIVE_INFINITY);Uc(this.right,n.reverse())}else{const n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);Uc(this.left,n.reverse())}}}function Uc(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function zN(e){const t={};let n=-1,i,r,o,a,c,d,m;const h=new gP(e);for(;++n<h.length;){for(;n in t;)n=t[n];if(i=h.get(n),n&&i[1].type==="chunkFlow"&&h.get(n-1)[1].type==="listItemPrefix"&&(d=i[1]._tokenizer.events,o=0,o<d.length&&d[o][1].type==="lineEndingBlank"&&(o+=2),o<d.length&&d[o][1].type==="content"))for(;++o<d.length&&d[o][1].type!=="content";)d[o][1].type==="chunkText"&&(d[o][1]._isInFirstContentOfListItem=!0,o++);if(i[0]==="enter")i[1].contentType&&(Object.assign(t,yP(h,n)),n=t[n],m=!0);else if(i[1]._container){for(o=n,r=void 0;o--;)if(a=h.get(o),a[1].type==="lineEnding"||a[1].type==="lineEndingBlank")a[0]==="enter"&&(r&&(h.get(r)[1].type="lineEndingBlank"),a[1].type="lineEnding",r=o);else if(!(a[1].type==="linePrefix"||a[1].type==="listItemIndent"))break;r&&(i[1].end={...h.get(r)[1].start},c=h.slice(r,n),c.unshift(i),h.splice(r,n-r+1,c))}}return hr(e,0,Number.POSITIVE_INFINITY,h.slice(0)),!m}function yP(e,t){const n=e.get(t)[1],i=e.get(t)[2];let r=t-1;const o=[];let a=n._tokenizer;a||(a=i.parser[n.contentType](n.start),n._contentTypeTextTrailing&&(a._contentTypeTextTrailing=!0));const c=a.events,d=[],m={};let h,p,g=-1,x=n,v=0,b=0;const k=[b];for(;x;){for(;e.get(++r)[1]!==x;);o.push(r),x._tokenizer||(h=i.sliceStream(x),x.next||h.push(null),p&&a.defineSkip(x.start),x._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=!0),a.write(h),x._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=void 0)),p=x,x=x.next}for(x=n;++g<c.length;)c[g][0]==="exit"&&c[g-1][0]==="enter"&&c[g][1].type===c[g-1][1].type&&c[g][1].start.line!==c[g][1].end.line&&(b=g+1,k.push(b),x._tokenizer=void 0,x.previous=void 0,x=x.next);for(a.events=[],x?(x._tokenizer=void 0,x.previous=void 0):k.pop(),g=k.length;g--;){const w=c.slice(k[g],k[g+1]),S=o.pop();d.push([S,S+w.length-1]),e.splice(S,2,w)}for(d.reverse(),g=-1;++g<d.length;)m[v+d[g][0]]=v+d[g][1],v+=d[g][1]-d[g][0]-1;return m}const xP={resolve:bP,tokenize:_P},vP={partial:!0,tokenize:kP};function bP(e){return zN(e),e}function _P(e,t){let n;return i;function i(c){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(c)}function r(c){return c===null?o(c):dt(c)?e.check(vP,a,o)(c):(e.consume(c),r)}function o(c){return e.exit("chunkContent"),e.exit("content"),t(c)}function a(c){return e.consume(c),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}function kP(e,t,n){const i=this;return r;function r(a){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),rn(e,o,"linePrefix")}function o(a){if(a===null||dt(a))return n(a);const c=i.events[i.events.length-1];return!i.parser.constructs.disable.null.includes("codeIndented")&&c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?t(a):e.interrupt(i.parser.constructs.flow,n,t)(a)}}function PN(e,t,n,i,r,o,a,c,d){const m=d||Number.POSITIVE_INFINITY;let h=0;return p;function p(w){return w===60?(e.enter(i),e.enter(r),e.enter(o),e.consume(w),e.exit(o),g):w===null||w===32||w===41||lm(w)?n(w):(e.enter(i),e.enter(a),e.enter(c),e.enter("chunkString",{contentType:"string"}),b(w))}function g(w){return w===62?(e.enter(o),e.consume(w),e.exit(o),e.exit(r),e.exit(i),t):(e.enter(c),e.enter("chunkString",{contentType:"string"}),x(w))}function x(w){return w===62?(e.exit("chunkString"),e.exit(c),g(w)):w===null||w===60||dt(w)?n(w):(e.consume(w),w===92?v:x)}function v(w){return w===60||w===62||w===92?(e.consume(w),x):x(w)}function b(w){return!h&&(w===null||w===41||Nn(w))?(e.exit("chunkString"),e.exit(c),e.exit(a),e.exit(i),t(w)):h<m&&w===40?(e.consume(w),h++,b):w===41?(e.consume(w),h--,b):w===null||w===32||w===40||lm(w)?n(w):(e.consume(w),w===92?k:b)}function k(w){return w===40||w===41||w===92?(e.consume(w),b):b(w)}}function BN(e,t,n,i,r,o){const a=this;let c=0,d;return m;function m(x){return e.enter(i),e.enter(r),e.consume(x),e.exit(r),e.enter(o),h}function h(x){return c>999||x===null||x===91||x===93&&!d||x===94&&!c&&"_hiddenFootnoteSupport"in a.parser.constructs?n(x):x===93?(e.exit(o),e.enter(r),e.consume(x),e.exit(r),e.exit(i),t):dt(x)?(e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===null||x===91||x===93||dt(x)||c++>999?(e.exit("chunkString"),h(x)):(e.consume(x),d||(d=!Yt(x)),x===92?g:p)}function g(x){return x===91||x===92||x===93?(e.consume(x),c++,p):p(x)}}function $N(e,t,n,i,r,o){let a;return c;function c(g){return g===34||g===39||g===40?(e.enter(i),e.enter(r),e.consume(g),e.exit(r),a=g===40?41:g,d):n(g)}function d(g){return g===a?(e.enter(r),e.consume(g),e.exit(r),e.exit(i),t):(e.enter(o),m(g))}function m(g){return g===a?(e.exit(o),d(a)):g===null?n(g):dt(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),rn(e,m,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(g))}function h(g){return g===a||g===null||dt(g)?(e.exit("chunkString"),m(g)):(e.consume(g),g===92?p:h)}function p(g){return g===a||g===92?(e.consume(g),h):h(g)}}function cu(e,t){let n;return i;function i(r){return dt(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n=!0,i):Yt(r)?rn(e,i,n?"linePrefix":"lineSuffix")(r):t(r)}}const SP={name:"definition",tokenize:CP},wP={partial:!0,tokenize:jP};function CP(e,t,n){const i=this;let r;return o;function o(x){return e.enter("definition"),a(x)}function a(x){return BN.call(i,e,c,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(x)}function c(x){return r=Ur(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),d):n(x)}function d(x){return Nn(x)?cu(e,m)(x):m(x)}function m(x){return PN(e,h,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(x)}function h(x){return e.attempt(wP,p,p)(x)}function p(x){return Yt(x)?rn(e,g,"whitespace")(x):g(x)}function g(x){return x===null||dt(x)?(e.exit("definition"),i.parser.defined.push(r),t(x)):n(x)}}function jP(e,t,n){return i;function i(c){return Nn(c)?cu(e,r)(c):n(c)}function r(c){return $N(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return Yt(c)?rn(e,a,"whitespace")(c):a(c)}function a(c){return c===null||dt(c)?t(c):n(c)}}const EP={name:"hardBreakEscape",tokenize:NP};function NP(e,t,n){return i;function i(o){return e.enter("hardBreakEscape"),e.consume(o),r}function r(o){return dt(o)?(e.exit("hardBreakEscape"),t(o)):n(o)}}const IP={name:"headingAtx",resolve:TP,tokenize:RP};function TP(e,t){let n=e.length-2,i=3,r,o;return e[i][1].type==="whitespace"&&(i+=2),n-2>i&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(i===n-1||n-4>i&&e[n-2][1].type==="whitespace")&&(n-=i+1===n?2:4),n>i&&(r={type:"atxHeadingText",start:e[i][1].start,end:e[n][1].end},o={type:"chunkText",start:e[i][1].start,end:e[n][1].end,contentType:"text"},hr(e,i,n-i+1,[["enter",r,t],["enter",o,t],["exit",o,t],["exit",r,t]])),e}function RP(e,t,n){let i=0;return r;function r(h){return e.enter("atxHeading"),o(h)}function o(h){return e.enter("atxHeadingSequence"),a(h)}function a(h){return h===35&&i++<6?(e.consume(h),a):h===null||Nn(h)?(e.exit("atxHeadingSequence"),c(h)):n(h)}function c(h){return h===35?(e.enter("atxHeadingSequence"),d(h)):h===null||dt(h)?(e.exit("atxHeading"),t(h)):Yt(h)?rn(e,c,"whitespace")(h):(e.enter("atxHeadingText"),m(h))}function d(h){return h===35?(e.consume(h),d):(e.exit("atxHeadingSequence"),c(h))}function m(h){return h===null||h===35||Nn(h)?(e.exit("atxHeadingText"),c(h)):(e.consume(h),m)}}const AP=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],pw=["pre","script","style","textarea"],MP={concrete:!0,name:"htmlFlow",resolveTo:LP,tokenize:zP},DP={partial:!0,tokenize:BP},OP={partial:!0,tokenize:PP};function LP(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function zP(e,t,n){const i=this;let r,o,a,c,d;return m;function m(F){return h(F)}function h(F){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(F),p}function p(F){return F===33?(e.consume(F),g):F===47?(e.consume(F),o=!0,b):F===63?(e.consume(F),r=3,i.interrupt?t:V):Vi(F)?(e.consume(F),a=String.fromCharCode(F),k):n(F)}function g(F){return F===45?(e.consume(F),r=2,x):F===91?(e.consume(F),r=5,c=0,v):Vi(F)?(e.consume(F),r=4,i.interrupt?t:V):n(F)}function x(F){return F===45?(e.consume(F),i.interrupt?t:V):n(F)}function v(F){const K="CDATA[";return F===K.charCodeAt(c++)?(e.consume(F),c===K.length?i.interrupt?t:B:v):n(F)}function b(F){return Vi(F)?(e.consume(F),a=String.fromCharCode(F),k):n(F)}function k(F){if(F===null||F===47||F===62||Nn(F)){const K=F===47,ee=a.toLowerCase();return!K&&!o&&pw.includes(ee)?(r=1,i.interrupt?t(F):B(F)):AP.includes(a.toLowerCase())?(r=6,K?(e.consume(F),w):i.interrupt?t(F):B(F)):(r=7,i.interrupt&&!i.parser.lazy[i.now().line]?n(F):o?S(F):j(F))}return F===45||zi(F)?(e.consume(F),a+=String.fromCharCode(F),k):n(F)}function w(F){return F===62?(e.consume(F),i.interrupt?t:B):n(F)}function S(F){return Yt(F)?(e.consume(F),S):M(F)}function j(F){return F===47?(e.consume(F),M):F===58||F===95||Vi(F)?(e.consume(F),N):Yt(F)?(e.consume(F),j):M(F)}function N(F){return F===45||F===46||F===58||F===95||zi(F)?(e.consume(F),N):O(F)}function O(F){return F===61?(e.consume(F),R):Yt(F)?(e.consume(F),O):j(F)}function R(F){return F===null||F===60||F===61||F===62||F===96?n(F):F===34||F===39?(e.consume(F),d=F,D):Yt(F)?(e.consume(F),R):I(F)}function D(F){return F===d?(e.consume(F),d=null,L):F===null||dt(F)?n(F):(e.consume(F),D)}function I(F){return F===null||F===34||F===39||F===47||F===60||F===61||F===62||F===96||Nn(F)?O(F):(e.consume(F),I)}function L(F){return F===47||F===62||Yt(F)?j(F):n(F)}function M(F){return F===62?(e.consume(F),A):n(F)}function A(F){return F===null||dt(F)?B(F):Yt(F)?(e.consume(F),A):n(F)}function B(F){return F===45&&r===2?(e.consume(F),$):F===60&&r===1?(e.consume(F),q):F===62&&r===4?(e.consume(F),U):F===63&&r===3?(e.consume(F),V):F===93&&r===5?(e.consume(F),Q):dt(F)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(DP,Z,W)(F)):F===null||dt(F)?(e.exit("htmlFlowData"),W(F)):(e.consume(F),B)}function W(F){return e.check(OP,P,Z)(F)}function P(F){return e.enter("lineEnding"),e.consume(F),e.exit("lineEnding"),G}function G(F){return F===null||dt(F)?W(F):(e.enter("htmlFlowData"),B(F))}function $(F){return F===45?(e.consume(F),V):B(F)}function q(F){return F===47?(e.consume(F),a="",Y):B(F)}function Y(F){if(F===62){const K=a.toLowerCase();return pw.includes(K)?(e.consume(F),U):B(F)}return Vi(F)&&a.length<8?(e.consume(F),a+=String.fromCharCode(F),Y):B(F)}function Q(F){return F===93?(e.consume(F),V):B(F)}function V(F){return F===62?(e.consume(F),U):F===45&&r===2?(e.consume(F),V):B(F)}function U(F){return F===null||dt(F)?(e.exit("htmlFlowData"),Z(F)):(e.consume(F),U)}function Z(F){return e.exit("htmlFlow"),t(F)}}function PP(e,t,n){const i=this;return r;function r(a){return dt(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o):n(a)}function o(a){return i.parser.lazy[i.now().line]?n(a):t(a)}}function BP(e,t,n){return i;function i(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(Hu,t,n)}}const $P={name:"htmlText",tokenize:HP};function HP(e,t,n){const i=this;let r,o,a;return c;function c(V){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(V),d}function d(V){return V===33?(e.consume(V),m):V===47?(e.consume(V),O):V===63?(e.consume(V),j):Vi(V)?(e.consume(V),I):n(V)}function m(V){return V===45?(e.consume(V),h):V===91?(e.consume(V),o=0,v):Vi(V)?(e.consume(V),S):n(V)}function h(V){return V===45?(e.consume(V),x):n(V)}function p(V){return V===null?n(V):V===45?(e.consume(V),g):dt(V)?(a=p,q(V)):(e.consume(V),p)}function g(V){return V===45?(e.consume(V),x):p(V)}function x(V){return V===62?$(V):V===45?g(V):p(V)}function v(V){const U="CDATA[";return V===U.charCodeAt(o++)?(e.consume(V),o===U.length?b:v):n(V)}function b(V){return V===null?n(V):V===93?(e.consume(V),k):dt(V)?(a=b,q(V)):(e.consume(V),b)}function k(V){return V===93?(e.consume(V),w):b(V)}function w(V){return V===62?$(V):V===93?(e.consume(V),w):b(V)}function S(V){return V===null||V===62?$(V):dt(V)?(a=S,q(V)):(e.consume(V),S)}function j(V){return V===null?n(V):V===63?(e.consume(V),N):dt(V)?(a=j,q(V)):(e.consume(V),j)}function N(V){return V===62?$(V):j(V)}function O(V){return Vi(V)?(e.consume(V),R):n(V)}function R(V){return V===45||zi(V)?(e.consume(V),R):D(V)}function D(V){return dt(V)?(a=D,q(V)):Yt(V)?(e.consume(V),D):$(V)}function I(V){return V===45||zi(V)?(e.consume(V),I):V===47||V===62||Nn(V)?L(V):n(V)}function L(V){return V===47?(e.consume(V),$):V===58||V===95||Vi(V)?(e.consume(V),M):dt(V)?(a=L,q(V)):Yt(V)?(e.consume(V),L):$(V)}function M(V){return V===45||V===46||V===58||V===95||zi(V)?(e.consume(V),M):A(V)}function A(V){return V===61?(e.consume(V),B):dt(V)?(a=A,q(V)):Yt(V)?(e.consume(V),A):L(V)}function B(V){return V===null||V===60||V===61||V===62||V===96?n(V):V===34||V===39?(e.consume(V),r=V,W):dt(V)?(a=B,q(V)):Yt(V)?(e.consume(V),B):(e.consume(V),P)}function W(V){return V===r?(e.consume(V),r=void 0,G):V===null?n(V):dt(V)?(a=W,q(V)):(e.consume(V),W)}function P(V){return V===null||V===34||V===39||V===60||V===61||V===96?n(V):V===47||V===62||Nn(V)?L(V):(e.consume(V),P)}function G(V){return V===47||V===62||Nn(V)?L(V):n(V)}function $(V){return V===62?(e.consume(V),e.exit("htmlTextData"),e.exit("htmlText"),t):n(V)}function q(V){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(V),e.exit("lineEnding"),Y}function Y(V){return Yt(V)?rn(e,Q,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(V):Q(V)}function Q(V){return e.enter("htmlTextData"),a(V)}}const m0={name:"labelEnd",resolveAll:GP,resolveTo:qP,tokenize:WP},FP={tokenize:YP},VP={tokenize:XP},UP={tokenize:KP};function GP(e){let t=-1;const n=[];for(;++t<e.length;){const i=e[t][1];if(n.push(e[t]),i.type==="labelImage"||i.type==="labelLink"||i.type==="labelEnd"){const r=i.type==="labelImage"?4:2;i.type="data",t+=r}}return e.length!==n.length&&hr(e,0,e.length,n),e}function qP(e,t){let n=e.length,i=0,r,o,a,c;for(;n--;)if(r=e[n][1],o){if(r.type==="link"||r.type==="labelLink"&&r._inactive)break;e[n][0]==="enter"&&r.type==="labelLink"&&(r._inactive=!0)}else if(a){if(e[n][0]==="enter"&&(r.type==="labelImage"||r.type==="labelLink")&&!r._balanced&&(o=n,r.type!=="labelLink")){i=2;break}}else r.type==="labelEnd"&&(a=n);const d={type:e[o][1].type==="labelLink"?"link":"image",start:{...e[o][1].start},end:{...e[e.length-1][1].end}},m={type:"label",start:{...e[o][1].start},end:{...e[a][1].end}},h={type:"labelText",start:{...e[o+i+2][1].end},end:{...e[a-2][1].start}};return c=[["enter",d,t],["enter",m,t]],c=Tr(c,e.slice(o+1,o+i+3)),c=Tr(c,[["enter",h,t]]),c=Tr(c,qm(t.parser.constructs.insideSpan.null,e.slice(o+i+4,a-3),t)),c=Tr(c,[["exit",h,t],e[a-2],e[a-1],["exit",m,t]]),c=Tr(c,e.slice(a+1)),c=Tr(c,[["exit",d,t]]),hr(e,o,e.length,c),e}function WP(e,t,n){const i=this;let r=i.events.length,o,a;for(;r--;)if((i.events[r][1].type==="labelImage"||i.events[r][1].type==="labelLink")&&!i.events[r][1]._balanced){o=i.events[r][1];break}return c;function c(g){return o?o._inactive?p(g):(a=i.parser.defined.includes(Ur(i.sliceSerialize({start:o.end,end:i.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(g),e.exit("labelMarker"),e.exit("labelEnd"),d):n(g)}function d(g){return g===40?e.attempt(FP,h,a?h:p)(g):g===91?e.attempt(VP,h,a?m:p)(g):a?h(g):p(g)}function m(g){return e.attempt(UP,h,p)(g)}function h(g){return t(g)}function p(g){return o._balanced=!0,n(g)}}function YP(e,t,n){return i;function i(p){return e.enter("resource"),e.enter("resourceMarker"),e.consume(p),e.exit("resourceMarker"),r}function r(p){return Nn(p)?cu(e,o)(p):o(p)}function o(p){return p===41?h(p):PN(e,a,c,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(p)}function a(p){return Nn(p)?cu(e,d)(p):h(p)}function c(p){return n(p)}function d(p){return p===34||p===39||p===40?$N(e,m,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(p):h(p)}function m(p){return Nn(p)?cu(e,h)(p):h(p)}function h(p){return p===41?(e.enter("resourceMarker"),e.consume(p),e.exit("resourceMarker"),e.exit("resource"),t):n(p)}}function XP(e,t,n){const i=this;return r;function r(c){return BN.call(i,e,o,a,"reference","referenceMarker","referenceString")(c)}function o(c){return i.parser.defined.includes(Ur(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)))?t(c):n(c)}function a(c){return n(c)}}function KP(e,t,n){return i;function i(o){return e.enter("reference"),e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),r}function r(o){return o===93?(e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),e.exit("reference"),t):n(o)}}const ZP={name:"labelStartImage",resolveAll:m0.resolveAll,tokenize:QP};function QP(e,t,n){const i=this;return r;function r(c){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(c),e.exit("labelImageMarker"),o}function o(c){return c===91?(e.enter("labelMarker"),e.consume(c),e.exit("labelMarker"),e.exit("labelImage"),a):n(c)}function a(c){return c===94&&"_hiddenFootnoteSupport"in i.parser.constructs?n(c):t(c)}}const JP={name:"labelStartLink",resolveAll:m0.resolveAll,tokenize:eB};function eB(e,t,n){const i=this;return r;function r(a){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(a),e.exit("labelMarker"),e.exit("labelLink"),o}function o(a){return a===94&&"_hiddenFootnoteSupport"in i.parser.constructs?n(a):t(a)}}const Fg={name:"lineEnding",tokenize:tB};function tB(e,t){return n;function n(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),rn(e,t,"linePrefix")}}const Lf={name:"thematicBreak",tokenize:nB};function nB(e,t,n){let i=0,r;return o;function o(m){return e.enter("thematicBreak"),a(m)}function a(m){return r=m,c(m)}function c(m){return m===r?(e.enter("thematicBreakSequence"),d(m)):i>=3&&(m===null||dt(m))?(e.exit("thematicBreak"),t(m)):n(m)}function d(m){return m===r?(e.consume(m),i++,d):(e.exit("thematicBreakSequence"),Yt(m)?rn(e,c,"whitespace")(m):c(m))}}const Zi={continuation:{tokenize:oB},exit:lB,name:"list",tokenize:sB},iB={partial:!0,tokenize:cB},rB={partial:!0,tokenize:aB};function sB(e,t,n){const i=this,r=i.events[i.events.length-1];let o=r&&r[1].type==="linePrefix"?r[2].sliceSerialize(r[1],!0).length:0,a=0;return c;function c(x){const v=i.containerState.type||(x===42||x===43||x===45?"listUnordered":"listOrdered");if(v==="listUnordered"?!i.containerState.marker||x===i.containerState.marker:Kx(x)){if(i.containerState.type||(i.containerState.type=v,e.enter(v,{_container:!0})),v==="listUnordered")return e.enter("listItemPrefix"),x===42||x===45?e.check(Lf,n,m)(x):m(x);if(!i.interrupt||x===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(x)}return n(x)}function d(x){return Kx(x)&&++a<10?(e.consume(x),d):(!i.interrupt||a<2)&&(i.containerState.marker?x===i.containerState.marker:x===41||x===46)?(e.exit("listItemValue"),m(x)):n(x)}function m(x){return e.enter("listItemMarker"),e.consume(x),e.exit("listItemMarker"),i.containerState.marker=i.containerState.marker||x,e.check(Hu,i.interrupt?n:h,e.attempt(iB,g,p))}function h(x){return i.containerState.initialBlankLine=!0,o++,g(x)}function p(x){return Yt(x)?(e.enter("listItemPrefixWhitespace"),e.consume(x),e.exit("listItemPrefixWhitespace"),g):n(x)}function g(x){return i.containerState.size=o+i.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(x)}}function oB(e,t,n){const i=this;return i.containerState._closeFlow=void 0,e.check(Hu,r,o);function r(c){return i.containerState.furtherBlankLines=i.containerState.furtherBlankLines||i.containerState.initialBlankLine,rn(e,t,"listItemIndent",i.containerState.size+1)(c)}function o(c){return i.containerState.furtherBlankLines||!Yt(c)?(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,a(c)):(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,e.attempt(rB,t,a)(c))}function a(c){return i.containerState._closeFlow=!0,i.interrupt=void 0,rn(e,e.attempt(Zi,t,n),"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function aB(e,t,n){const i=this;return rn(e,r,"listItemIndent",i.containerState.size+1);function r(o){const a=i.events[i.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===i.containerState.size?t(o):n(o)}}function lB(e){e.exit(this.containerState.type)}function cB(e,t,n){const i=this;return rn(e,r,"listItemPrefixWhitespace",i.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(o){const a=i.events[i.events.length-1];return!Yt(o)&&a&&a[1].type==="listItemPrefixWhitespace"?t(o):n(o)}}const hw={name:"setextUnderline",resolveTo:uB,tokenize:dB};function uB(e,t){let n=e.length,i,r,o;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){i=n;break}e[n][1].type==="paragraph"&&(r=n)}else e[n][1].type==="content"&&e.splice(n,1),!o&&e[n][1].type==="definition"&&(o=n);const a={type:"setextHeading",start:{...e[i][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",o?(e.splice(r,0,["enter",a,t]),e.splice(o+1,0,["exit",e[i][1],t]),e[i][1].end={...e[o][1].end}):e[i][1]=a,e.push(["exit",a,t]),e}function dB(e,t,n){const i=this;let r;return o;function o(m){let h=i.events.length,p;for(;h--;)if(i.events[h][1].type!=="lineEnding"&&i.events[h][1].type!=="linePrefix"&&i.events[h][1].type!=="content"){p=i.events[h][1].type==="paragraph";break}return!i.parser.lazy[i.now().line]&&(i.interrupt||p)?(e.enter("setextHeadingLine"),r=m,a(m)):n(m)}function a(m){return e.enter("setextHeadingLineSequence"),c(m)}function c(m){return m===r?(e.consume(m),c):(e.exit("setextHeadingLineSequence"),Yt(m)?rn(e,d,"lineSuffix")(m):d(m))}function d(m){return m===null||dt(m)?(e.exit("setextHeadingLine"),t(m)):n(m)}}const fB={tokenize:mB};function mB(e){const t=this,n=e.attempt(Hu,i,e.attempt(this.parser.constructs.flowInitial,r,rn(e,e.attempt(this.parser.constructs.flow,r,e.attempt(xP,r)),"linePrefix")));return n;function i(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function r(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const pB={resolveAll:FN()},hB=HN("string"),gB=HN("text");function HN(e){return{resolveAll:FN(e==="text"?yB:void 0),tokenize:t};function t(n){const i=this,r=this.parser.constructs[e],o=n.attempt(r,a,c);return a;function a(h){return m(h)?o(h):c(h)}function c(h){if(h===null){n.consume(h);return}return n.enter("data"),n.consume(h),d}function d(h){return m(h)?(n.exit("data"),o(h)):(n.consume(h),d)}function m(h){if(h===null)return!0;const p=r[h];let g=-1;if(p)for(;++g<p.length;){const x=p[g];if(!x.previous||x.previous.call(i,i.previous))return!0}return!1}}}function FN(e){return t;function t(n,i){let r=-1,o;for(;++r<=n.length;)o===void 0?n[r]&&n[r][1].type==="data"&&(o=r,r++):(!n[r]||n[r][1].type!=="data")&&(r!==o+2&&(n[o][1].end=n[r-1][1].end,n.splice(o+2,r-o-2),r=o+2),o=void 0);return e?e(n,i):n}}function yB(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type==="lineEnding")&&e[n-1][1].type==="data"){const i=e[n-1][1],r=t.sliceStream(i);let o=r.length,a=-1,c=0,d;for(;o--;){const m=r[o];if(typeof m=="string"){for(a=m.length;m.charCodeAt(a-1)===32;)c++,a--;if(a)break;a=-1}else if(m===-2)d=!0,c++;else if(m!==-1){o++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(c=0),c){const m={type:n===e.length||d||c<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?a:i.start._bufferIndex+a,_index:i.start._index+o,line:i.end.line,column:i.end.column-c,offset:i.end.offset-c},end:{...i.end}};i.end={...m.start},i.start.offset===i.end.offset?Object.assign(i,m):(e.splice(n,0,["enter",m,t],["exit",m,t]),n+=2)}n++}return e}const xB={42:Zi,43:Zi,45:Zi,48:Zi,49:Zi,50:Zi,51:Zi,52:Zi,53:Zi,54:Zi,55:Zi,56:Zi,57:Zi,62:DN},vB={91:SP},bB={[-2]:Hg,[-1]:Hg,32:Hg},_B={35:IP,42:Lf,45:[hw,Lf],60:MP,61:hw,95:Lf,96:mw,126:mw},kB={38:LN,92:ON},SB={[-5]:Fg,[-4]:Fg,[-3]:Fg,33:ZP,38:LN,42:Zx,60:[Jz,$P],91:JP,92:[EP,ON],93:m0,95:Zx,96:fP},wB={null:[Zx,pB]},CB={null:[42,95]},jB={null:[]},EB=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:CB,contentInitial:vB,disable:jB,document:xB,flow:_B,flowInitial:bB,insideSpan:wB,string:kB,text:SB},Symbol.toStringTag,{value:"Module"}));function NB(e,t,n){let i={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0};const r={},o=[];let a=[],c=[];const d={attempt:D(O),check:D(R),consume:S,enter:j,exit:N,interrupt:D(R,{interrupt:!0})},m={code:null,containerState:{},defineSkip:b,events:[],now:v,parser:e,previous:null,sliceSerialize:g,sliceStream:x,write:p};let h=t.tokenize.call(m,d);return t.resolveAll&&o.push(t),m;function p(A){return a=Tr(a,A),k(),a[a.length-1]!==null?[]:(I(t,0),m.events=qm(o,m.events,m),m.events)}function g(A,B){return TB(x(A),B)}function x(A){return IB(a,A)}function v(){const{_bufferIndex:A,_index:B,line:W,column:P,offset:G}=i;return{_bufferIndex:A,_index:B,line:W,column:P,offset:G}}function b(A){r[A.line]=A.column,M()}function k(){let A;for(;i._index<a.length;){const B=a[i._index];if(typeof B=="string")for(A=i._index,i._bufferIndex<0&&(i._bufferIndex=0);i._index===A&&i._bufferIndex<B.length;)w(B.charCodeAt(i._bufferIndex));else w(B)}}function w(A){h=h(A)}function S(A){dt(A)?(i.line++,i.column=1,i.offset+=A===-3?2:1,M()):A!==-1&&(i.column++,i.offset++),i._bufferIndex<0?i._index++:(i._bufferIndex++,i._bufferIndex===a[i._index].length&&(i._bufferIndex=-1,i._index++)),m.previous=A}function j(A,B){const W=B||{};return W.type=A,W.start=v(),m.events.push(["enter",W,m]),c.push(W),W}function N(A){const B=c.pop();return B.end=v(),m.events.push(["exit",B,m]),B}function O(A,B){I(A,B.from)}function R(A,B){B.restore()}function D(A,B){return W;function W(P,G,$){let q,Y,Q,V;return Array.isArray(P)?Z(P):"tokenize"in P?Z([P]):U(P);function U(te){return se;function se(ae){const ue=ae!==null&&te[ae],ie=ae!==null&&te.null,we=[...Array.isArray(ue)?ue:ue?[ue]:[],...Array.isArray(ie)?ie:ie?[ie]:[]];return Z(we)(ae)}}function Z(te){return q=te,Y=0,te.length===0?$:F(te[Y])}function F(te){return se;function se(ae){return V=L(),Q=te,te.partial||(m.currentConstruct=te),te.name&&m.parser.constructs.disable.null.includes(te.name)?ee():te.tokenize.call(B?Object.assign(Object.create(m),B):m,d,K,ee)(ae)}}function K(te){return A(Q,V),G}function ee(te){return V.restore(),++Y<q.length?F(q[Y]):$}}}function I(A,B){A.resolveAll&&!o.includes(A)&&o.push(A),A.resolve&&hr(m.events,B,m.events.length-B,A.resolve(m.events.slice(B),m)),A.resolveTo&&(m.events=A.resolveTo(m.events,m))}function L(){const A=v(),B=m.previous,W=m.currentConstruct,P=m.events.length,G=Array.from(c);return{from:P,restore:$};function $(){i=A,m.previous=B,m.currentConstruct=W,m.events.length=P,c=G,M()}}function M(){i.line in r&&i.column<2&&(i.column=r[i.line],i.offset+=r[i.line]-1)}}function IB(e,t){const n=t.start._index,i=t.start._bufferIndex,r=t.end._index,o=t.end._bufferIndex;let a;if(n===r)a=[e[n].slice(i,o)];else{if(a=e.slice(n,r),i>-1){const c=a[0];typeof c=="string"?a[0]=c.slice(i):a.shift()}o>0&&a.push(e[r].slice(0,o))}return a}function TB(e,t){let n=-1;const i=[];let r;for(;++n<e.length;){const o=e[n];let a;if(typeof o=="string")a=o;else switch(o){case-5:{a="\r";break}case-4:{a=` +`;break}case-3:{a=`\r +`;break}case-2:{a=t?" ":" ";break}case-1:{if(!t&&r)continue;a=" ";break}default:a=String.fromCharCode(o)}r=o===-2,i.push(a)}return i.join("")}function RB(e){const i={constructs:AN([EB,...(e||{}).extensions||[]]),content:r(qz),defined:[],document:r(Yz),flow:r(fB),lazy:{},string:r(hB),text:r(gB)};return i;function r(o){return a;function a(c){return NB(i,o,c)}}}function AB(e){for(;!zN(e););return e}const gw=/[\0\t\n\r]/g;function MB(){let e=1,t="",n=!0,i;return r;function r(o,a,c){const d=[];let m,h,p,g,x;for(o=t+(typeof o=="string"?o.toString():new TextDecoder(a||void 0).decode(o)),p=0,t="",n&&(o.charCodeAt(0)===65279&&p++,n=void 0);p<o.length;){if(gw.lastIndex=p,m=gw.exec(o),g=m&&m.index!==void 0?m.index:o.length,x=o.charCodeAt(g),!m){t=o.slice(p);break}if(x===10&&p===g&&i)d.push(-3),i=void 0;else switch(i&&(d.push(-5),i=void 0),p<g&&(d.push(o.slice(p,g)),e+=g-p),x){case 0:{d.push(65533),e++;break}case 9:{for(h=Math.ceil(e/4)*4,d.push(-2);e++<h;)d.push(-1);break}case 10:{d.push(-4),e=1;break}default:i=!0,e=1}p=g+1}return c&&(i&&d.push(-5),t&&d.push(t),d.push(null)),d}}const DB=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function OB(e){return e.replace(DB,LB)}function LB(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){const r=n.charCodeAt(1),o=r===120||r===88;return MN(n.slice(o?2:1),o?16:10)}return f0(n)||e}const VN={}.hasOwnProperty;function zB(e,t,n){return t&&typeof t=="object"&&(n=t,t=void 0),PB(n)(AB(RB(n).document().write(MB()(e,t,!0))))}function PB(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(Mt),autolinkProtocol:L,autolinkEmail:L,atxHeading:o(Ze),blockQuote:o(ie),characterEscape:L,characterReference:L,codeFenced:o(we),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:o(we,a),codeText:o(je,a),codeTextData:L,data:L,codeFlowValue:L,definition:o(Te),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:o(Ge),hardBreakEscape:o(Ye),hardBreakTrailing:o(Ye),htmlFlow:o(mt,a),htmlFlowData:L,htmlText:o(mt,a),htmlTextData:L,image:o(Ft),label:a,link:o(Mt),listItem:o(he),listItemValue:g,listOrdered:o(jt,p),listUnordered:o(jt),paragraph:o(ze),reference:F,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:o(Ze),strong:o(ot),thematicBreak:o(lt)},exit:{atxHeading:d(),atxHeadingSequence:O,autolink:d(),autolinkEmail:ue,autolinkProtocol:ae,blockQuote:d(),characterEscapeValue:M,characterReferenceMarkerHexadecimal:ee,characterReferenceMarkerNumeric:ee,characterReferenceValue:te,characterReference:se,codeFenced:d(k),codeFencedFence:b,codeFencedFenceInfo:x,codeFencedFenceMeta:v,codeFlowValue:M,codeIndented:d(w),codeText:d(G),codeTextData:M,data:M,definition:d(),definitionDestinationString:N,definitionLabelString:S,definitionTitleString:j,emphasis:d(),hardBreakEscape:d(B),hardBreakTrailing:d(B),htmlFlow:d(W),htmlFlowData:M,htmlText:d(P),htmlTextData:M,image:d(q),label:Q,labelText:Y,lineEnding:A,link:d($),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:K,resourceDestinationString:V,resourceTitleString:U,resource:Z,setextHeading:d(I),setextHeadingLineSequence:D,setextHeadingText:R,strong:d(),thematicBreak:d()}};UN(t,(e||{}).mdastExtensions||[]);const n={};return i;function i(me){let be={type:"root",children:[]};const Ae={stack:[be],tokenStack:[],config:t,enter:c,exit:m,buffer:a,resume:h,data:n},Be=[];let We=-1;for(;++We<me.length;)if(me[We][1].type==="listOrdered"||me[We][1].type==="listUnordered")if(me[We][0]==="enter")Be.push(We);else{const Lt=Be.pop();We=r(me,Lt,We)}for(We=-1;++We<me.length;){const Lt=t[me[We][0]];VN.call(Lt,me[We][1].type)&&Lt[me[We][1].type].call(Object.assign({sliceSerialize:me[We][2].sliceSerialize},Ae),me[We][1])}if(Ae.tokenStack.length>0){const Lt=Ae.tokenStack[Ae.tokenStack.length-1];(Lt[1]||yw).call(Ae,void 0,Lt[0])}for(be.position={start:po(me.length>0?me[0][1].start:{line:1,column:1,offset:0}),end:po(me.length>0?me[me.length-2][1].end:{line:1,column:1,offset:0})},We=-1;++We<t.transforms.length;)be=t.transforms[We](be)||be;return be}function r(me,be,Ae){let Be=be-1,We=-1,Lt=!1,pt,ke,qe,Qe;for(;++Be<=Ae;){const $e=me[Be];switch($e[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{$e[0]==="enter"?We++:We--,Qe=void 0;break}case"lineEndingBlank":{$e[0]==="enter"&&(pt&&!Qe&&!We&&!qe&&(qe=Be),Qe=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:Qe=void 0}if(!We&&$e[0]==="enter"&&$e[1].type==="listItemPrefix"||We===-1&&$e[0]==="exit"&&($e[1].type==="listUnordered"||$e[1].type==="listOrdered")){if(pt){let He=Be;for(ke=void 0;He--;){const Vt=me[He];if(Vt[1].type==="lineEnding"||Vt[1].type==="lineEndingBlank"){if(Vt[0]==="exit")continue;ke&&(me[ke][1].type="lineEndingBlank",Lt=!0),Vt[1].type="lineEnding",ke=He}else if(!(Vt[1].type==="linePrefix"||Vt[1].type==="blockQuotePrefix"||Vt[1].type==="blockQuotePrefixWhitespace"||Vt[1].type==="blockQuoteMarker"||Vt[1].type==="listItemIndent"))break}qe&&(!ke||qe<ke)&&(pt._spread=!0),pt.end=Object.assign({},ke?me[ke][1].start:$e[1].end),me.splice(ke||Be,0,["exit",pt,$e[2]]),Be++,Ae++}if($e[1].type==="listItemPrefix"){const He={type:"listItem",_spread:!1,start:Object.assign({},$e[1].start),end:void 0};pt=He,me.splice(Be,0,["enter",He,$e[2]]),Be++,Ae++,qe=void 0,Qe=!0}}}return me[be][1]._spread=Lt,Ae}function o(me,be){return Ae;function Ae(Be){c.call(this,me(Be),Be),be&&be.call(this,Be)}}function a(){this.stack.push({type:"fragment",children:[]})}function c(me,be,Ae){this.stack[this.stack.length-1].children.push(me),this.stack.push(me),this.tokenStack.push([be,Ae||void 0]),me.position={start:po(be.start),end:void 0}}function d(me){return be;function be(Ae){me&&me.call(this,Ae),m.call(this,Ae)}}function m(me,be){const Ae=this.stack.pop(),Be=this.tokenStack.pop();if(Be)Be[0].type!==me.type&&(be?be.call(this,me,Be[0]):(Be[1]||yw).call(this,me,Be[0]));else throw new Error("Cannot close `"+me.type+"` ("+lu({start:me.start,end:me.end})+"): it’s not open");Ae.position.end=po(me.end)}function h(){return d0(this.stack.pop())}function p(){this.data.expectingFirstListItemValue=!0}function g(me){if(this.data.expectingFirstListItemValue){const be=this.stack[this.stack.length-2];be.start=Number.parseInt(this.sliceSerialize(me),10),this.data.expectingFirstListItemValue=void 0}}function x(){const me=this.resume(),be=this.stack[this.stack.length-1];be.lang=me}function v(){const me=this.resume(),be=this.stack[this.stack.length-1];be.meta=me}function b(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function k(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function w(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me.replace(/(\r?\n|\r)$/g,"")}function S(me){const be=this.resume(),Ae=this.stack[this.stack.length-1];Ae.label=be,Ae.identifier=Ur(this.sliceSerialize(me)).toLowerCase()}function j(){const me=this.resume(),be=this.stack[this.stack.length-1];be.title=me}function N(){const me=this.resume(),be=this.stack[this.stack.length-1];be.url=me}function O(me){const be=this.stack[this.stack.length-1];if(!be.depth){const Ae=this.sliceSerialize(me).length;be.depth=Ae}}function R(){this.data.setextHeadingSlurpLineEnding=!0}function D(me){const be=this.stack[this.stack.length-1];be.depth=this.sliceSerialize(me).codePointAt(0)===61?1:2}function I(){this.data.setextHeadingSlurpLineEnding=void 0}function L(me){const Ae=this.stack[this.stack.length-1].children;let Be=Ae[Ae.length-1];(!Be||Be.type!=="text")&&(Be=Ve(),Be.position={start:po(me.start),end:void 0},Ae.push(Be)),this.stack.push(Be)}function M(me){const be=this.stack.pop();be.value+=this.sliceSerialize(me),be.position.end=po(me.end)}function A(me){const be=this.stack[this.stack.length-1];if(this.data.atHardBreak){const Ae=be.children[be.children.length-1];Ae.position.end=po(me.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(be.type)&&(L.call(this,me),M.call(this,me))}function B(){this.data.atHardBreak=!0}function W(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function P(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function G(){const me=this.resume(),be=this.stack[this.stack.length-1];be.value=me}function $(){const me=this.stack[this.stack.length-1];if(this.data.inReference){const be=this.data.referenceType||"shortcut";me.type+="Reference",me.referenceType=be,delete me.url,delete me.title}else delete me.identifier,delete me.label;this.data.referenceType=void 0}function q(){const me=this.stack[this.stack.length-1];if(this.data.inReference){const be=this.data.referenceType||"shortcut";me.type+="Reference",me.referenceType=be,delete me.url,delete me.title}else delete me.identifier,delete me.label;this.data.referenceType=void 0}function Y(me){const be=this.sliceSerialize(me),Ae=this.stack[this.stack.length-2];Ae.label=OB(be),Ae.identifier=Ur(be).toLowerCase()}function Q(){const me=this.stack[this.stack.length-1],be=this.resume(),Ae=this.stack[this.stack.length-1];if(this.data.inReference=!0,Ae.type==="link"){const Be=me.children;Ae.children=Be}else Ae.alt=be}function V(){const me=this.resume(),be=this.stack[this.stack.length-1];be.url=me}function U(){const me=this.resume(),be=this.stack[this.stack.length-1];be.title=me}function Z(){this.data.inReference=void 0}function F(){this.data.referenceType="collapsed"}function K(me){const be=this.resume(),Ae=this.stack[this.stack.length-1];Ae.label=be,Ae.identifier=Ur(this.sliceSerialize(me)).toLowerCase(),this.data.referenceType="full"}function ee(me){this.data.characterReferenceType=me.type}function te(me){const be=this.sliceSerialize(me),Ae=this.data.characterReferenceType;let Be;Ae?(Be=MN(be,Ae==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):Be=f0(be);const We=this.stack[this.stack.length-1];We.value+=Be}function se(me){const be=this.stack.pop();be.position.end=po(me.end)}function ae(me){M.call(this,me);const be=this.stack[this.stack.length-1];be.url=this.sliceSerialize(me)}function ue(me){M.call(this,me);const be=this.stack[this.stack.length-1];be.url="mailto:"+this.sliceSerialize(me)}function ie(){return{type:"blockquote",children:[]}}function we(){return{type:"code",lang:null,meta:null,value:""}}function je(){return{type:"inlineCode",value:""}}function Te(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function Ge(){return{type:"emphasis",children:[]}}function Ze(){return{type:"heading",depth:0,children:[]}}function Ye(){return{type:"break"}}function mt(){return{type:"html",value:""}}function Ft(){return{type:"image",title:null,url:"",alt:null}}function Mt(){return{type:"link",title:null,url:"",children:[]}}function jt(me){return{type:"list",ordered:me.type==="listOrdered",start:null,spread:me._spread,children:[]}}function he(me){return{type:"listItem",spread:me._spread,checked:null,children:[]}}function ze(){return{type:"paragraph",children:[]}}function ot(){return{type:"strong",children:[]}}function Ve(){return{type:"text",value:""}}function lt(){return{type:"thematicBreak"}}}function po(e){return{line:e.line,column:e.column,offset:e.offset}}function UN(e,t){let n=-1;for(;++n<t.length;){const i=t[n];Array.isArray(i)?UN(e,i):BB(e,i)}}function BB(e,t){let n;for(n in t)if(VN.call(t,n))switch(n){case"canContainEols":{const i=t[n];i&&e[n].push(...i);break}case"transforms":{const i=t[n];i&&e[n].push(...i);break}case"enter":case"exit":{const i=t[n];i&&Object.assign(e[n],i);break}}}function yw(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+lu({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+lu({start:t.start,end:t.end})+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+lu({start:t.start,end:t.end})+") is still open")}function $B(e){const t=this;t.parser=n;function n(i){return zB(i,{...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})}}function HB(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function FB(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:` +`}]}function VB(e,t){const n=t.value?t.value+` +`:"",i={},r=t.lang?t.lang.split(/\s+/):[];r.length>0&&(i.className=["language-"+r[0]]);let o={type:"element",tagName:"code",properties:i,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function UB(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function GB(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function qB(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",i=String(t.identifier).toUpperCase(),r=Wl(i.toLowerCase()),o=e.footnoteOrder.indexOf(i);let a,c=e.footnoteCounts.get(i);c===void 0?(c=0,e.footnoteOrder.push(i),a=e.footnoteOrder.length):a=o+1,c+=1,e.footnoteCounts.set(i,c);const d={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+r,id:n+"fnref-"+r+(c>1?"-"+c:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(a)}]};e.patch(t,d);const m={type:"element",tagName:"sup",properties:{},children:[d]};return e.patch(t,m),e.applyData(t,m)}function WB(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function YB(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function GN(e,t){const n=t.referenceType;let i="]";if(n==="collapsed"?i+="[]":n==="full"&&(i+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+i}];const r=e.all(t),o=r[0];o&&o.type==="text"?o.value="["+o.value:r.unshift({type:"text",value:"["});const a=r[r.length-1];return a&&a.type==="text"?a.value+=i:r.push({type:"text",value:i}),r}function XB(e,t){const n=String(t.identifier).toUpperCase(),i=e.definitionById.get(n);if(!i)return GN(e,t);const r={src:Wl(i.url||""),alt:t.alt};i.title!==null&&i.title!==void 0&&(r.title=i.title);const o={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,o),e.applyData(t,o)}function KB(e,t){const n={src:Wl(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const i={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,i),e.applyData(t,i)}function ZB(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const i={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,i),e.applyData(t,i)}function QB(e,t){const n=String(t.identifier).toUpperCase(),i=e.definitionById.get(n);if(!i)return GN(e,t);const r={href:Wl(i.url||"")};i.title!==null&&i.title!==void 0&&(r.title=i.title);const o={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function JB(e,t){const n={href:Wl(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const i={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function e9(e,t,n){const i=e.all(t),r=n?t9(n):qN(t),o={},a=[];if(typeof t.checked=="boolean"){const h=i[0];let p;h&&h.type==="element"&&h.tagName==="p"?p=h:(p={type:"element",tagName:"p",properties:{},children:[]},i.unshift(p)),p.children.length>0&&p.children.unshift({type:"text",value:" "}),p.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let c=-1;for(;++c<i.length;){const h=i[c];(r||c!==0||h.type!=="element"||h.tagName!=="p")&&a.push({type:"text",value:` +`}),h.type==="element"&&h.tagName==="p"&&!r?a.push(...h.children):a.push(h)}const d=i[i.length-1];d&&(r||d.type!=="element"||d.tagName!=="p")&&a.push({type:"text",value:` +`});const m={type:"element",tagName:"li",properties:o,children:a};return e.patch(t,m),e.applyData(t,m)}function t9(e){let t=!1;if(e.type==="list"){t=e.spread||!1;const n=e.children;let i=-1;for(;!t&&++i<n.length;)t=qN(n[i])}return t}function qN(e){const t=e.spread;return t??e.children.length>1}function n9(e,t){const n={},i=e.all(t);let r=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++r<i.length;){const a=i[r];if(a.type==="element"&&a.tagName==="li"&&a.properties&&Array.isArray(a.properties.className)&&a.properties.className.includes("task-list-item")){n.className=["contains-task-list"];break}}const o={type:"element",tagName:t.ordered?"ol":"ul",properties:n,children:e.wrap(i,!0)};return e.patch(t,o),e.applyData(t,o)}function i9(e,t){const n={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function r9(e,t){const n={type:"root",children:e.wrap(e.all(t))};return e.patch(t,n),e.applyData(t,n)}function s9(e,t){const n={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function o9(e,t){const n=e.all(t),i=n.shift(),r=[];if(i){const a={type:"element",tagName:"thead",properties:{},children:e.wrap([i],!0)};e.patch(t.children[0],a),r.push(a)}if(n.length>0){const a={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},c=a0(t.children[1]),d=CN(t.children[t.children.length-1]);c&&d&&(a.position={start:c,end:d}),r.push(a)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(r,!0)};return e.patch(t,o),e.applyData(t,o)}function a9(e,t,n){const i=n?n.children:void 0,o=(i?i.indexOf(t):1)===0?"th":"td",a=n&&n.type==="table"?n.align:void 0,c=a?a.length:t.children.length;let d=-1;const m=[];for(;++d<c;){const p=t.children[d],g={},x=a?a[d]:void 0;x&&(g.align=x);let v={type:"element",tagName:o,properties:g,children:[]};p&&(v.children=e.all(p),e.patch(p,v),v=e.applyData(p,v)),m.push(v)}const h={type:"element",tagName:"tr",properties:{},children:e.wrap(m,!0)};return e.patch(t,h),e.applyData(t,h)}function l9(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}const xw=9,vw=32;function c9(e){const t=String(e),n=/\r?\n|\r/g;let i=n.exec(t),r=0;const o=[];for(;i;)o.push(bw(t.slice(r,i.index),r>0,!0),i[0]),r=i.index+i[0].length,i=n.exec(t);return o.push(bw(t.slice(r),r>0,!1)),o.join("")}function bw(e,t,n){let i=0,r=e.length;if(t){let o=e.codePointAt(i);for(;o===xw||o===vw;)i++,o=e.codePointAt(i)}if(n){let o=e.codePointAt(r-1);for(;o===xw||o===vw;)r--,o=e.codePointAt(r-1)}return r>i?e.slice(i,r):""}function u9(e,t){const n={type:"text",value:c9(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function d9(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const f9={blockquote:HB,break:FB,code:VB,delete:UB,emphasis:GB,footnoteReference:qB,heading:WB,html:YB,imageReference:XB,image:KB,inlineCode:ZB,linkReference:QB,link:JB,listItem:e9,list:n9,paragraph:i9,root:r9,strong:s9,table:o9,tableCell:l9,tableRow:a9,text:u9,thematicBreak:d9,toml:af,yaml:af,definition:af,footnoteDefinition:af};function af(){}const WN=-1,Wm=0,uu=1,cm=2,p0=3,h0=4,g0=5,y0=6,YN=7,XN=8,_w=typeof self=="object"?self:globalThis,m9=(e,t)=>{const n=(r,o)=>(e.set(o,r),r),i=r=>{if(e.has(r))return e.get(r);const[o,a]=t[r];switch(o){case Wm:case WN:return n(a,r);case uu:{const c=n([],r);for(const d of a)c.push(i(d));return c}case cm:{const c=n({},r);for(const[d,m]of a)c[i(d)]=i(m);return c}case p0:return n(new Date(a),r);case h0:{const{source:c,flags:d}=a;return n(new RegExp(c,d),r)}case g0:{const c=n(new Map,r);for(const[d,m]of a)c.set(i(d),i(m));return c}case y0:{const c=n(new Set,r);for(const d of a)c.add(i(d));return c}case YN:{const{name:c,message:d}=a;return n(new _w[c](d),r)}case XN:return n(BigInt(a),r);case"BigInt":return n(Object(BigInt(a)),r);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:c}=new Uint8Array(a);return n(new DataView(c),a)}}return n(new _w[o](a),r)};return i},kw=e=>m9(new Map,e)(0),tl="",{toString:p9}={},{keys:h9}=Object,Gc=e=>{const t=typeof e;if(t!=="object"||!e)return[Wm,t];const n=p9.call(e).slice(8,-1);switch(n){case"Array":return[uu,tl];case"Object":return[cm,tl];case"Date":return[p0,tl];case"RegExp":return[h0,tl];case"Map":return[g0,tl];case"Set":return[y0,tl];case"DataView":return[uu,n]}return n.includes("Array")?[uu,n]:n.includes("Error")?[YN,n]:[cm,n]},lf=([e,t])=>e===Wm&&(t==="function"||t==="symbol"),g9=(e,t,n,i)=>{const r=(a,c)=>{const d=i.push(a)-1;return n.set(c,d),d},o=a=>{if(n.has(a))return n.get(a);let[c,d]=Gc(a);switch(c){case Wm:{let h=a;switch(d){case"bigint":c=XN,h=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);h=null;break;case"undefined":return r([WN],a)}return r([c,h],a)}case uu:{if(d){let g=a;return d==="DataView"?g=new Uint8Array(a.buffer):d==="ArrayBuffer"&&(g=new Uint8Array(a)),r([d,[...g]],a)}const h=[],p=r([c,h],a);for(const g of a)h.push(o(g));return p}case cm:{if(d)switch(d){case"BigInt":return r([d,a.toString()],a);case"Boolean":case"Number":case"String":return r([d,a.valueOf()],a)}if(t&&"toJSON"in a)return o(a.toJSON());const h=[],p=r([c,h],a);for(const g of h9(a))(e||!lf(Gc(a[g])))&&h.push([o(g),o(a[g])]);return p}case p0:return r([c,a.toISOString()],a);case h0:{const{source:h,flags:p}=a;return r([c,{source:h,flags:p}],a)}case g0:{const h=[],p=r([c,h],a);for(const[g,x]of a)(e||!(lf(Gc(g))||lf(Gc(x))))&&h.push([o(g),o(x)]);return p}case y0:{const h=[],p=r([c,h],a);for(const g of a)(e||!lf(Gc(g)))&&h.push(o(g));return p}}const{message:m}=a;return r([c,{name:d,message:m}],a)};return o},Sw=(e,{json:t,lossy:n}={})=>{const i=[];return g9(!(t||n),!!t,new Map,i)(e),i},um=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?kw(Sw(e,t)):structuredClone(e):(e,t)=>kw(Sw(e,t));function y9(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function x9(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function v9(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||y9,i=e.options.footnoteBackLabel||x9,r=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let d=-1;for(;++d<e.footnoteOrder.length;){const m=e.footnoteById.get(e.footnoteOrder[d]);if(!m)continue;const h=e.all(m),p=String(m.identifier).toUpperCase(),g=Wl(p.toLowerCase());let x=0;const v=[],b=e.footnoteCounts.get(p);for(;b!==void 0&&++x<=b;){v.length>0&&v.push({type:"text",value:" "});let S=typeof n=="string"?n:n(d,x);typeof S=="string"&&(S={type:"text",value:S}),v.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(x>1?"-"+x:""),dataFootnoteBackref:"",ariaLabel:typeof i=="string"?i:i(d,x),className:["data-footnote-backref"]},children:Array.isArray(S)?S:[S]})}const k=h[h.length-1];if(k&&k.type==="element"&&k.tagName==="p"){const S=k.children[k.children.length-1];S&&S.type==="text"?S.value+=" ":k.children.push({type:"text",value:" "}),k.children.push(...v)}else h.push(...v);const w={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(h,!0)};e.patch(m,w),c.push(w)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...um(a),id:"footnote-label"},children:[{type:"text",value:r}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:` +`}]}}const Ym=(function(e){if(e==null)return S9;if(typeof e=="function")return Xm(e);if(typeof e=="object")return Array.isArray(e)?b9(e):_9(e);if(typeof e=="string")return k9(e);throw new Error("Expected function, string, or object as test")});function b9(e){const t=[];let n=-1;for(;++n<e.length;)t[n]=Ym(e[n]);return Xm(i);function i(...r){let o=-1;for(;++o<t.length;)if(t[o].apply(this,r))return!0;return!1}}function _9(e){const t=e;return Xm(n);function n(i){const r=i;let o;for(o in e)if(r[o]!==t[o])return!1;return!0}}function k9(e){return Xm(t);function t(n){return n&&n.type===e}}function Xm(e){return t;function t(n,i,r){return!!(w9(n)&&e.call(this,n,typeof i=="number"?i:void 0,r||void 0))}}function S9(){return!0}function w9(e){return e!==null&&typeof e=="object"&&"type"in e}const KN=[],C9=!0,Qx=!1,j9="skip";function ZN(e,t,n,i){let r;typeof t=="function"&&typeof n!="function"?(i=n,n=t):r=t;const o=Ym(r),a=i?-1:1;c(e,void 0,[])();function c(d,m,h){const p=d&&typeof d=="object"?d:{};if(typeof p.type=="string"){const x=typeof p.tagName=="string"?p.tagName:typeof p.name=="string"?p.name:void 0;Object.defineProperty(g,"name",{value:"node ("+(d.type+(x?"<"+x+">":""))+")"})}return g;function g(){let x=KN,v,b,k;if((!t||o(d,m,h[h.length-1]||void 0))&&(x=E9(n(d,h)),x[0]===Qx))return x;if("children"in d&&d.children){const w=d;if(w.children&&x[0]!==j9)for(b=(i?w.children.length:-1)+a,k=h.concat(w);b>-1&&b<w.children.length;){const S=w.children[b];if(v=c(S,b,k)(),v[0]===Qx)return v;b=typeof v[1]=="number"?v[1]:b+a}}return x}}}function E9(e){return Array.isArray(e)?e:typeof e=="number"?[C9,e]:e==null?KN:[e]}function x0(e,t,n,i){let r,o,a;typeof t=="function"&&typeof n!="function"?(o=void 0,a=t,r=n):(o=t,a=n,r=i),ZN(e,o,c,r);function c(d,m){const h=m[m.length-1],p=h?h.children.indexOf(d):void 0;return a(d,p,h)}}const Jx={}.hasOwnProperty,N9={};function I9(e,t){const n=t||N9,i=new Map,r=new Map,o=new Map,a={...f9,...n.handlers},c={all:m,applyData:R9,definitionById:i,footnoteById:r,footnoteCounts:o,footnoteOrder:[],handlers:a,one:d,options:n,patch:T9,wrap:M9};return x0(e,function(h){if(h.type==="definition"||h.type==="footnoteDefinition"){const p=h.type==="definition"?i:r,g=String(h.identifier).toUpperCase();p.has(g)||p.set(g,h)}}),c;function d(h,p){const g=h.type,x=c.handlers[g];if(Jx.call(c.handlers,g)&&x)return x(c,h,p);if(c.options.passThrough&&c.options.passThrough.includes(g)){if("children"in h){const{children:b,...k}=h,w=um(k);return w.children=c.all(h),w}return um(h)}return(c.options.unknownHandler||A9)(c,h,p)}function m(h){const p=[];if("children"in h){const g=h.children;let x=-1;for(;++x<g.length;){const v=c.one(g[x],h);if(v){if(x&&g[x-1].type==="break"&&(!Array.isArray(v)&&v.type==="text"&&(v.value=ww(v.value)),!Array.isArray(v)&&v.type==="element")){const b=v.children[0];b&&b.type==="text"&&(b.value=ww(b.value))}Array.isArray(v)?p.push(...v):p.push(v)}}}return p}}function T9(e,t){e.position&&(t.position=xz(e))}function R9(e,t){let n=t;if(e&&e.data){const i=e.data.hName,r=e.data.hChildren,o=e.data.hProperties;if(typeof i=="string")if(n.type==="element")n.tagName=i;else{const a="children"in n?n.children:[n];n={type:"element",tagName:i,properties:{},children:a}}n.type==="element"&&o&&Object.assign(n.properties,um(o)),"children"in n&&n.children&&r!==null&&r!==void 0&&(n.children=r)}return n}function A9(e,t){const n=t.data||{},i="value"in t&&!(Jx.call(n,"hProperties")||Jx.call(n,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function M9(e,t){const n=[];let i=-1;for(t&&n.push({type:"text",value:` +`});++i<e.length;)i&&n.push({type:"text",value:` +`}),n.push(e[i]);return t&&e.length>0&&n.push({type:"text",value:` +`}),n}function ww(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Cw(e,t){const n=I9(e,t),i=n.one(e,void 0),r=v9(n),o=Array.isArray(i)?{type:"root",children:i}:i||{type:"root",children:[]};return r&&o.children.push({type:"text",value:` +`},r),o}function D9(e,t){return e&&"run"in e?async function(n,i){const r=Cw(n,{file:i,...t});await e.run(r,i)}:function(n,i){return Cw(n,{file:i,...e||t})}}function jw(e){if(e)throw e}var Vg,Ew;function O9(){if(Ew)return Vg;Ew=1;var e=Object.prototype.hasOwnProperty,t=Object.prototype.toString,n=Object.defineProperty,i=Object.getOwnPropertyDescriptor,r=function(m){return typeof Array.isArray=="function"?Array.isArray(m):t.call(m)==="[object Array]"},o=function(m){if(!m||t.call(m)!=="[object Object]")return!1;var h=e.call(m,"constructor"),p=m.constructor&&m.constructor.prototype&&e.call(m.constructor.prototype,"isPrototypeOf");if(m.constructor&&!h&&!p)return!1;var g;for(g in m);return typeof g>"u"||e.call(m,g)},a=function(m,h){n&&h.name==="__proto__"?n(m,h.name,{enumerable:!0,configurable:!0,value:h.newValue,writable:!0}):m[h.name]=h.newValue},c=function(m,h){if(h==="__proto__")if(e.call(m,h)){if(i)return i(m,h).value}else return;return m[h]};return Vg=function d(){var m,h,p,g,x,v,b=arguments[0],k=1,w=arguments.length,S=!1;for(typeof b=="boolean"&&(S=b,b=arguments[1]||{},k=2),(b==null||typeof b!="object"&&typeof b!="function")&&(b={});k<w;++k)if(m=arguments[k],m!=null)for(h in m)p=c(b,h),g=c(m,h),b!==g&&(S&&g&&(o(g)||(x=r(g)))?(x?(x=!1,v=p&&r(p)?p:[]):v=p&&o(p)?p:{},a(b,{name:h,newValue:d(S,v,g)})):typeof g<"u"&&a(b,{name:h,newValue:g}));return b},Vg}var L9=O9();const Ug=da(L9);function ev(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function z9(){const e=[],t={run:n,use:i};return t;function n(...r){let o=-1;const a=r.pop();if(typeof a!="function")throw new TypeError("Expected function as last argument, not "+a);c(null,...r);function c(d,...m){const h=e[++o];let p=-1;if(d){a(d);return}for(;++p<r.length;)(m[p]===null||m[p]===void 0)&&(m[p]=r[p]);r=m,h?P9(h,c)(...m):a(null,...m)}}function i(r){if(typeof r!="function")throw new TypeError("Expected `middelware` to be a function, not "+r);return e.push(r),t}}function P9(e,t){let n;return i;function i(...a){const c=e.length>a.length;let d;c&&a.push(r);try{d=e.apply(this,a)}catch(m){const h=m;if(c&&n)throw h;return r(h)}c||(d&&d.then&&typeof d.then=="function"?d.then(o,r):d instanceof Error?r(d):o(d))}function r(a,...c){n||(n=!0,t(a,...c))}function o(a){r(null,a)}}const es={basename:B9,dirname:$9,extname:H9,join:F9,sep:"/"};function B9(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Fu(e);let n=0,i=-1,r=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;r--;)if(e.codePointAt(r)===47){if(o){n=r+1;break}}else i<0&&(o=!0,i=r+1);return i<0?"":e.slice(n,i)}if(t===e)return"";let a=-1,c=t.length-1;for(;r--;)if(e.codePointAt(r)===47){if(o){n=r+1;break}}else a<0&&(o=!0,a=r+1),c>-1&&(e.codePointAt(r)===t.codePointAt(c--)?c<0&&(i=r):(c=-1,i=a));return n===i?i=a:i<0&&(i=e.length),e.slice(n,i)}function $9(e){if(Fu(e),e.length===0)return".";let t=-1,n=e.length,i;for(;--n;)if(e.codePointAt(n)===47){if(i){t=n;break}}else i||(i=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function H9(e){Fu(e);let t=e.length,n=-1,i=0,r=-1,o=0,a;for(;t--;){const c=e.codePointAt(t);if(c===47){if(a){i=t+1;break}continue}n<0&&(a=!0,n=t+1),c===46?r<0?r=t:o!==1&&(o=1):r>-1&&(o=-1)}return r<0||n<0||o===0||o===1&&r===n-1&&r===i+1?"":e.slice(r,n)}function F9(...e){let t=-1,n;for(;++t<e.length;)Fu(e[t]),e[t]&&(n=n===void 0?e[t]:n+"/"+e[t]);return n===void 0?".":V9(n)}function V9(e){Fu(e);const t=e.codePointAt(0)===47;let n=U9(e,!t);return n.length===0&&!t&&(n="."),n.length>0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function U9(e,t){let n="",i=0,r=-1,o=0,a=-1,c,d;for(;++a<=e.length;){if(a<e.length)c=e.codePointAt(a);else{if(c===47)break;c=47}if(c===47){if(!(r===a-1||o===1))if(r!==a-1&&o===2){if(n.length<2||i!==2||n.codePointAt(n.length-1)!==46||n.codePointAt(n.length-2)!==46){if(n.length>2){if(d=n.lastIndexOf("/"),d!==n.length-1){d<0?(n="",i=0):(n=n.slice(0,d),i=n.length-1-n.lastIndexOf("/")),r=a,o=0;continue}}else if(n.length>0){n="",i=0,r=a,o=0;continue}}t&&(n=n.length>0?n+"/..":"..",i=2)}else n.length>0?n+="/"+e.slice(r+1,a):n=e.slice(r+1,a),i=a-r-1;r=a,o=0}else c===46&&o>-1?o++:o=-1}return n}function Fu(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const G9={cwd:q9};function q9(){return"/"}function tv(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function W9(e){if(typeof e=="string")e=new URL(e);else if(!tv(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return Y9(e)}function Y9(e){if(e.hostname!==""){const i=new TypeError('File URL host must be "localhost" or empty on darwin');throw i.code="ERR_INVALID_FILE_URL_HOST",i}const t=e.pathname;let n=-1;for(;++n<t.length;)if(t.codePointAt(n)===37&&t.codePointAt(n+1)===50){const i=t.codePointAt(n+2);if(i===70||i===102){const r=new TypeError("File URL path must not include encoded / characters");throw r.code="ERR_INVALID_FILE_URL_PATH",r}}return decodeURIComponent(t)}const Gg=["history","path","basename","stem","extname","dirname"];class QN{constructor(t){let n;t?tv(t)?n={path:t}:typeof t=="string"||X9(t)?n={value:t}:n=t:n={},this.cwd="cwd"in n?"":G9.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let i=-1;for(;++i<Gg.length;){const o=Gg[i];o in n&&n[o]!==void 0&&n[o]!==null&&(this[o]=o==="history"?[...n[o]]:n[o])}let r;for(r in n)Gg.includes(r)||(this[r]=n[r])}get basename(){return typeof this.path=="string"?es.basename(this.path):void 0}set basename(t){Wg(t,"basename"),qg(t,"basename"),this.path=es.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?es.dirname(this.path):void 0}set dirname(t){Nw(this.basename,"dirname"),this.path=es.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?es.extname(this.path):void 0}set extname(t){if(qg(t,"extname"),Nw(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=es.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){tv(t)&&(t=W9(t)),Wg(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?es.basename(this.path,this.extname):void 0}set stem(t){Wg(t,"stem"),qg(t,"stem"),this.path=es.join(this.dirname||"",t+(this.extname||""))}fail(t,n,i){const r=this.message(t,n,i);throw r.fatal=!0,r}info(t,n,i){const r=this.message(t,n,i);return r.fatal=void 0,r}message(t,n,i){const r=new Pi(t,n,i);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}}function qg(e,t){if(e&&e.includes(es.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+es.sep+"`")}function Wg(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function Nw(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function X9(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const K9=(function(e){const i=this.constructor.prototype,r=i[e],o=function(){return r.apply(o,arguments)};return Object.setPrototypeOf(o,i),o}),Z9={}.hasOwnProperty;class v0 extends K9{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=z9()}copy(){const t=new v0;let n=-1;for(;++n<this.attachers.length;){const i=this.attachers[n];t.use(...i)}return t.data(Ug(!0,{},this.namespace)),t}data(t,n){return typeof t=="string"?arguments.length===2?(Kg("data",this.frozen),this.namespace[t]=n,this):Z9.call(this.namespace,t)&&this.namespace[t]||void 0:t?(Kg("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;const t=this;for(;++this.freezeIndex<this.attachers.length;){const[n,...i]=this.attachers[this.freezeIndex];if(i[0]===!1)continue;i[0]===!0&&(i[0]=void 0);const r=n.call(t,...i);typeof r=="function"&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();const n=cf(t),i=this.parser||this.Parser;return Yg("parse",i),i(String(n),n)}process(t,n){const i=this;return this.freeze(),Yg("process",this.parser||this.Parser),Xg("process",this.compiler||this.Compiler),n?r(void 0,n):new Promise(r);function r(o,a){const c=cf(t),d=i.parse(c);i.run(d,c,function(h,p,g){if(h||!p||!g)return m(h);const x=p,v=i.stringify(x,g);e$(v)?g.value=v:g.result=v,m(h,g)});function m(h,p){h||!p?a(h):o?o(p):n(void 0,p)}}}processSync(t){let n=!1,i;return this.freeze(),Yg("processSync",this.parser||this.Parser),Xg("processSync",this.compiler||this.Compiler),this.process(t,r),Tw("processSync","process",n),i;function r(o,a){n=!0,jw(o),i=a}}run(t,n,i){Iw(t),this.freeze();const r=this.transformers;return!i&&typeof n=="function"&&(i=n,n=void 0),i?o(void 0,i):new Promise(o);function o(a,c){const d=cf(n);r.run(t,d,m);function m(h,p,g){const x=p||t;h?c(h):a?a(x):i(void 0,x,g)}}}runSync(t,n){let i=!1,r;return this.run(t,n,o),Tw("runSync","run",i),r;function o(a,c){jw(a),r=c,i=!0}}stringify(t,n){this.freeze();const i=cf(n),r=this.compiler||this.Compiler;return Xg("stringify",r),Iw(t),r(t,i)}use(t,...n){const i=this.attachers,r=this.namespace;if(Kg("use",this.frozen),t!=null)if(typeof t=="function")d(t,n);else if(typeof t=="object")Array.isArray(t)?c(t):a(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function o(m){if(typeof m=="function")d(m,[]);else if(typeof m=="object")if(Array.isArray(m)){const[h,...p]=m;d(h,p)}else a(m);else throw new TypeError("Expected usable value, not `"+m+"`")}function a(m){if(!("plugins"in m)&&!("settings"in m))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");c(m.plugins),m.settings&&(r.settings=Ug(!0,r.settings,m.settings))}function c(m){let h=-1;if(m!=null)if(Array.isArray(m))for(;++h<m.length;){const p=m[h];o(p)}else throw new TypeError("Expected a list of plugins, not `"+m+"`")}function d(m,h){let p=-1,g=-1;for(;++p<i.length;)if(i[p][0]===m){g=p;break}if(g===-1)i.push([m,...h]);else if(h.length>0){let[x,...v]=h;const b=i[g][1];ev(b)&&ev(x)&&(x=Ug(!0,b,x)),i[g]=[m,x,...v]}}}}const Q9=new v0().freeze();function Yg(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Xg(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Kg(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Iw(e){if(!ev(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Tw(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function cf(e){return J9(e)?e:new QN(e)}function J9(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function e$(e){return typeof e=="string"||t$(e)}function t$(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const n$="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Rw=[],Aw={allowDangerousHtml:!0},i$=/^(https?|ircs?|mailto|xmpp)$/i,r$=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function s$(e){const t=o$(e),n=a$(e);return l$(t.runSync(t.parse(n),n),e)}function o$(e){const t=e.rehypePlugins||Rw,n=e.remarkPlugins||Rw,i=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Aw}:Aw;return Q9().use($B).use(n).use(D9,i).use(t)}function a$(e){const t=e.children||"",n=new QN;return typeof t=="string"&&(n.value=t),n}function l$(e,t){const n=t.allowedElements,i=t.allowElement,r=t.components,o=t.disallowedElements,a=t.skipHtml,c=t.unwrapDisallowed,d=t.urlTransform||c$;for(const h of r$)Object.hasOwn(t,h.from)&&(""+h.from+(h.to?"use `"+h.to+"` instead":"remove it")+n$+h.id,void 0);return x0(e,m),Sz(e,{Fragment:u.Fragment,components:r,ignoreInvalidStyle:!0,jsx:u.jsx,jsxs:u.jsxs,passKeys:!0,passNode:!0});function m(h,p,g){if(h.type==="raw"&&g&&typeof p=="number")return a?g.children.splice(p,1):g.children[p]={type:"text",value:h.value},p;if(h.type==="element"){let x;for(x in $g)if(Object.hasOwn($g,x)&&Object.hasOwn(h.properties,x)){const v=h.properties[x],b=$g[x];(b===null||b.includes(h.tagName))&&(h.properties[x]=d(String(v||""),x,h))}}if(h.type==="element"){let x=n?!n.includes(h.tagName):o?o.includes(h.tagName):!1;if(!x&&i&&typeof p=="number"&&(x=!i(h,p,g)),x&&g&&typeof p=="number")return c&&h.children?g.children.splice(p,1,...h.children):g.children.splice(p,1),p}}}function c$(e){const t=e.indexOf(":"),n=e.indexOf("?"),i=e.indexOf("#"),r=e.indexOf("/");return t===-1||r!==-1&&t>r||n!==-1&&t>n||i!==-1&&t>i||i$.test(e.slice(0,t))?e:""}function Mw(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let i=0,r=n.indexOf(t);for(;r!==-1;)i++,r=n.indexOf(t,r+t.length);return i}function u$(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function d$(e,t,n){const r=Ym((n||{}).ignore||[]),o=f$(t);let a=-1;for(;++a<o.length;)ZN(e,"text",c);function c(m,h){let p=-1,g;for(;++p<h.length;){const x=h[p],v=g?g.children:void 0;if(r(x,v?v.indexOf(x):void 0,g))return;g=x}if(g)return d(m,h)}function d(m,h){const p=h[h.length-1],g=o[a][0],x=o[a][1];let v=0;const k=p.children.indexOf(m);let w=!1,S=[];g.lastIndex=0;let j=g.exec(m.value);for(;j;){const N=j.index,O={index:j.index,input:j.input,stack:[...h,m]};let R=x(...j,O);if(typeof R=="string"&&(R=R.length>0?{type:"text",value:R}:void 0),R===!1?g.lastIndex=N+1:(v!==N&&S.push({type:"text",value:m.value.slice(v,N)}),Array.isArray(R)?S.push(...R):R&&S.push(R),v=N+j[0].length,w=!0),!g.global)break;j=g.exec(m.value)}return w?(v<m.value.length&&S.push({type:"text",value:m.value.slice(v)}),p.children.splice(k,1,...S)):S=[m],k+S.length}}function f$(e){const t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const n=!e[0]||Array.isArray(e[0])?e:[e];let i=-1;for(;++i<n.length;){const r=n[i];t.push([m$(r[0]),p$(r[1])])}return t}function m$(e){return typeof e=="string"?new RegExp(u$(e),"g"):e}function p$(e){return typeof e=="function"?e:function(){return e}}const Zg="phrasing",Qg=["autolink","link","image","label"];function h$(){return{transforms:[k$],enter:{literalAutolink:y$,literalAutolinkEmail:Jg,literalAutolinkHttp:Jg,literalAutolinkWww:Jg},exit:{literalAutolink:_$,literalAutolinkEmail:b$,literalAutolinkHttp:x$,literalAutolinkWww:v$}}}function g$(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Zg,notInConstruct:Qg},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Zg,notInConstruct:Qg},{character:":",before:"[ps]",after:"\\/",inConstruct:Zg,notInConstruct:Qg}]}}function y$(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function Jg(e){this.config.enter.autolinkProtocol.call(this,e)}function x$(e){this.config.exit.autolinkProtocol.call(this,e)}function v$(e){this.config.exit.data.call(this,e);const t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function b$(e){this.config.exit.autolinkEmail.call(this,e)}function _$(e){this.exit(e)}function k$(e){d$(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,S$],[new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)","gu"),w$]],{ignore:["link","linkReference"]})}function S$(e,t,n,i,r){let o="";if(!JN(r)||(/^w/i.test(t)&&(n=t+n,t="",o="http://"),!C$(n)))return!1;const a=j$(n+i);if(!a[0])return!1;const c={type:"link",title:null,url:o+t+a[0],children:[{type:"text",value:t+a[0]}]};return a[1]?[c,{type:"text",value:a[1]}]:c}function w$(e,t,n,i){return!JN(i,!0)||/[-\d_]$/.test(n)?!1:{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function C$(e){const t=e.split(".");return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function j$(e){const t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],i=n.indexOf(")");const r=Mw(e,"(");let o=Mw(e,")");for(;i!==-1&&r>o;)e+=n.slice(0,i+1),n=n.slice(i+1),i=n.indexOf(")"),o++;return[e,n]}function JN(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||oa(n)||Gm(n))&&(!t||n!==47)}eI.peek=O$;function E$(){this.buffer()}function N$(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function I$(){this.buffer()}function T$(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function R$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ur(this.sliceSerialize(e)).toLowerCase(),n.label=t}function A$(e){this.exit(e)}function M$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Ur(this.sliceSerialize(e)).toLowerCase(),n.label=t}function D$(e){this.exit(e)}function O$(){return"["}function eI(e,t,n,i){const r=n.createTracker(i);let o=r.move("[^");const a=n.enter("footnoteReference"),c=n.enter("reference");return o+=r.move(n.safe(n.associationId(e),{after:"]",before:o})),c(),a(),o+=r.move("]"),o}function L$(){return{enter:{gfmFootnoteCallString:E$,gfmFootnoteCall:N$,gfmFootnoteDefinitionLabelString:I$,gfmFootnoteDefinition:T$},exit:{gfmFootnoteCallString:R$,gfmFootnoteCall:A$,gfmFootnoteDefinitionLabelString:M$,gfmFootnoteDefinition:D$}}}function z$(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:eI},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(i,r,o,a){const c=o.createTracker(a);let d=c.move("[^");const m=o.enter("footnoteDefinition"),h=o.enter("label");return d+=c.move(o.safe(o.associationId(i),{before:d,after:"]"})),h(),d+=c.move("]:"),i.children&&i.children.length>0&&(c.shift(4),d+=c.move((t?` +`:" ")+o.indentLines(o.containerFlow(i,c.current()),t?tI:P$))),m(),d}}function P$(e,t,n){return t===0?e:tI(e,t,n)}function tI(e,t,n){return(n?"":" ")+e}const B$=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];nI.peek=U$;function $$(){return{canContainEols:["delete"],enter:{strikethrough:F$},exit:{strikethrough:V$}}}function H$(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:B$}],handlers:{delete:nI}}}function F$(e){this.enter({type:"delete",children:[]},e)}function V$(e){this.exit(e)}function nI(e,t,n,i){const r=n.createTracker(i),o=n.enter("strikethrough");let a=r.move("~~");return a+=n.containerPhrasing(e,{...r.current(),before:a,after:"~"}),a+=r.move("~~"),o(),a}function U$(){return"~"}function G$(e){return e.length}function q$(e,t){const n=t||{},i=(n.align||[]).concat(),r=n.stringLength||G$,o=[],a=[],c=[],d=[];let m=0,h=-1;for(;++h<e.length;){const b=[],k=[];let w=-1;for(e[h].length>m&&(m=e[h].length);++w<e[h].length;){const S=W$(e[h][w]);if(n.alignDelimiters!==!1){const j=r(S);k[w]=j,(d[w]===void 0||j>d[w])&&(d[w]=j)}b.push(S)}a[h]=b,c[h]=k}let p=-1;if(typeof i=="object"&&"length"in i)for(;++p<m;)o[p]=Dw(i[p]);else{const b=Dw(i);for(;++p<m;)o[p]=b}p=-1;const g=[],x=[];for(;++p<m;){const b=o[p];let k="",w="";b===99?(k=":",w=":"):b===108?k=":":b===114&&(w=":");let S=n.alignDelimiters===!1?1:Math.max(1,d[p]-k.length-w.length);const j=k+"-".repeat(S)+w;n.alignDelimiters!==!1&&(S=k.length+S+w.length,S>d[p]&&(d[p]=S),x[p]=S),g[p]=j}a.splice(1,0,g),c.splice(1,0,x),h=-1;const v=[];for(;++h<a.length;){const b=a[h],k=c[h];p=-1;const w=[];for(;++p<m;){const S=b[p]||"";let j="",N="";if(n.alignDelimiters!==!1){const O=d[p]-(k[p]||0),R=o[p];R===114?j=" ".repeat(O):R===99?O%2?(j=" ".repeat(O/2+.5),N=" ".repeat(O/2-.5)):(j=" ".repeat(O/2),N=j):N=" ".repeat(O)}n.delimiterStart!==!1&&!p&&w.push("|"),n.padding!==!1&&!(n.alignDelimiters===!1&&S==="")&&(n.delimiterStart!==!1||p)&&w.push(" "),n.alignDelimiters!==!1&&w.push(j),w.push(S),n.alignDelimiters!==!1&&w.push(N),n.padding!==!1&&w.push(" "),(n.delimiterEnd!==!1||p!==m-1)&&w.push("|")}v.push(n.delimiterEnd===!1?w.join("").replace(/ +$/,""):w.join(""))}return v.join(` +`)}function W$(e){return e==null?"":String(e)}function Dw(e){const t=typeof e=="string"?e.codePointAt(0):0;return t===67||t===99?99:t===76||t===108?108:t===82||t===114?114:0}function Y$(e,t,n,i){const r=n.enter("blockquote"),o=n.createTracker(i);o.move("> "),o.shift(2);const a=n.indentLines(n.containerFlow(e,o.current()),X$);return r(),a}function X$(e,t,n){return">"+(n?"":" ")+e}function K$(e,t){return Ow(e,t.inConstruct,!0)&&!Ow(e,t.notInConstruct,!1)}function Ow(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let i=-1;for(;++i<t.length;)if(e.includes(t[i]))return!0;return!1}function Lw(e,t,n,i){let r=-1;for(;++r<n.unsafe.length;)if(n.unsafe[r].character===` +`&&K$(n.stack,n.unsafe[r]))return/[ \t]/.test(i.before)?"":" ";return`\\ +`}function Z$(e,t){const n=String(e);let i=n.indexOf(t),r=i,o=0,a=0;if(typeof t!="string")throw new TypeError("Expected substring");for(;i!==-1;)i===r?++o>a&&(a=o):o=1,r=i+t.length,i=n.indexOf(t,r);return a}function Q$(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function J$(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function e7(e,t,n,i){const r=J$(n),o=e.value||"",a=r==="`"?"GraveAccent":"Tilde";if(Q$(e,n)){const p=n.enter("codeIndented"),g=n.indentLines(o,t7);return p(),g}const c=n.createTracker(i),d=r.repeat(Math.max(Z$(o,r)+1,3)),m=n.enter("codeFenced");let h=c.move(d);if(e.lang){const p=n.enter(`codeFencedLang${a}`);h+=c.move(n.safe(e.lang,{before:h,after:" ",encode:["`"],...c.current()})),p()}if(e.lang&&e.meta){const p=n.enter(`codeFencedMeta${a}`);h+=c.move(" "),h+=c.move(n.safe(e.meta,{before:h,after:` +`,encode:["`"],...c.current()})),p()}return h+=c.move(` +`),o&&(h+=c.move(o+` +`)),h+=c.move(d),m(),h}function t7(e,t,n){return(n?"":" ")+e}function b0(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function n7(e,t,n,i){const r=b0(n),o=r==='"'?"Quote":"Apostrophe",a=n.enter("definition");let c=n.enter("label");const d=n.createTracker(i);let m=d.move("[");return m+=d.move(n.safe(n.associationId(e),{before:m,after:"]",...d.current()})),m+=d.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(c=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":` +`,...d.current()}))),c(),e.title&&(c=n.enter(`title${o}`),m+=d.move(" "+r),m+=d.move(n.safe(e.title,{before:m,after:r,...d.current()})),m+=d.move(r),c()),a(),m}function i7(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Eu(e){return"&#x"+e.toString(16).toUpperCase()+";"}function dm(e,t,n){const i=Tl(e),r=Tl(t);return i===void 0?r===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:i===1?r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}iI.peek=r7;function iI(e,t,n,i){const r=i7(n),o=n.enter("emphasis"),a=n.createTracker(i),c=a.move(r);let d=a.move(n.containerPhrasing(e,{after:r,before:c,...a.current()}));const m=d.charCodeAt(0),h=dm(i.before.charCodeAt(i.before.length-1),m,r);h.inside&&(d=Eu(m)+d.slice(1));const p=d.charCodeAt(d.length-1),g=dm(i.after.charCodeAt(0),p,r);g.inside&&(d=d.slice(0,-1)+Eu(p));const x=a.move(r);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:h.outside},c+d+x}function r7(e,t,n){return n.options.emphasis||"*"}function s7(e,t){let n=!1;return x0(e,function(i){if("value"in i&&/\r?\n|\r/.test(i.value)||i.type==="break")return n=!0,Qx}),!!((!e.depth||e.depth<3)&&d0(e)&&(t.options.setext||n))}function o7(e,t,n,i){const r=Math.max(Math.min(6,e.depth||1),1),o=n.createTracker(i);if(s7(e,n)){const h=n.enter("headingSetext"),p=n.enter("phrasing"),g=n.containerPhrasing(e,{...o.current(),before:` +`,after:` +`});return p(),h(),g+` +`+(r===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` +`))+1))}const a="#".repeat(r),c=n.enter("headingAtx"),d=n.enter("phrasing");o.move(a+" ");let m=n.containerPhrasing(e,{before:"# ",after:` +`,...o.current()});return/^[\t ]/.test(m)&&(m=Eu(m.charCodeAt(0))+m.slice(1)),m=m?a+" "+m:a,n.options.closeAtx&&(m+=" "+a),d(),c(),m}rI.peek=a7;function rI(e){return e.value||""}function a7(){return"<"}sI.peek=l7;function sI(e,t,n,i){const r=b0(n),o=r==='"'?"Quote":"Apostrophe",a=n.enter("image");let c=n.enter("label");const d=n.createTracker(i);let m=d.move("![");return m+=d.move(n.safe(e.alt,{before:m,after:"]",...d.current()})),m+=d.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(c=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":")",...d.current()}))),c(),e.title&&(c=n.enter(`title${o}`),m+=d.move(" "+r),m+=d.move(n.safe(e.title,{before:m,after:r,...d.current()})),m+=d.move(r),c()),m+=d.move(")"),a(),m}function l7(){return"!"}oI.peek=c7;function oI(e,t,n,i){const r=e.referenceType,o=n.enter("imageReference");let a=n.enter("label");const c=n.createTracker(i);let d=c.move("![");const m=n.safe(e.alt,{before:d,after:"]",...c.current()});d+=c.move(m+"]["),a();const h=n.stack;n.stack=[],a=n.enter("reference");const p=n.safe(n.associationId(e),{before:d,after:"]",...c.current()});return a(),n.stack=h,o(),r==="full"||!m||m!==p?d+=c.move(p+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function c7(){return"!"}aI.peek=u7;function aI(e,t,n){let i=e.value||"",r="`",o=-1;for(;new RegExp("(^|[^`])"+r+"([^`]|$)").test(i);)r+="`";for(/[^ \r\n]/.test(i)&&(/^[ \r\n]/.test(i)&&/[ \r\n]$/.test(i)||/^`|`$/.test(i))&&(i=" "+i+" ");++o<n.unsafe.length;){const a=n.unsafe[o],c=n.compilePattern(a);let d;if(a.atBreak)for(;d=c.exec(i);){let m=d.index;i.charCodeAt(m)===10&&i.charCodeAt(m-1)===13&&m--,i=i.slice(0,m)+" "+i.slice(d.index+1)}}return r+i+r}function u7(){return"`"}function lI(e,t){const n=d0(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(n===e.url||"mailto:"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}cI.peek=d7;function cI(e,t,n,i){const r=b0(n),o=r==='"'?"Quote":"Apostrophe",a=n.createTracker(i);let c,d;if(lI(e,n)){const h=n.stack;n.stack=[],c=n.enter("autolink");let p=a.move("<");return p+=a.move(n.containerPhrasing(e,{before:p,after:">",...a.current()})),p+=a.move(">"),c(),n.stack=h,p}c=n.enter("link"),d=n.enter("label");let m=a.move("[");return m+=a.move(n.containerPhrasing(e,{before:m,after:"](",...a.current()})),m+=a.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=n.enter("destinationLiteral"),m+=a.move("<"),m+=a.move(n.safe(e.url,{before:m,after:">",...a.current()})),m+=a.move(">")):(d=n.enter("destinationRaw"),m+=a.move(n.safe(e.url,{before:m,after:e.title?" ":")",...a.current()}))),d(),e.title&&(d=n.enter(`title${o}`),m+=a.move(" "+r),m+=a.move(n.safe(e.title,{before:m,after:r,...a.current()})),m+=a.move(r),d()),m+=a.move(")"),c(),m}function d7(e,t,n){return lI(e,n)?"<":"["}uI.peek=f7;function uI(e,t,n,i){const r=e.referenceType,o=n.enter("linkReference");let a=n.enter("label");const c=n.createTracker(i);let d=c.move("[");const m=n.containerPhrasing(e,{before:d,after:"]",...c.current()});d+=c.move(m+"]["),a();const h=n.stack;n.stack=[],a=n.enter("reference");const p=n.safe(n.associationId(e),{before:d,after:"]",...c.current()});return a(),n.stack=h,o(),r==="full"||!m||m!==p?d+=c.move(p+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function f7(){return"["}function _0(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function m7(e){const t=_0(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function p7(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function dI(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function h7(e,t,n,i){const r=n.enter("list"),o=n.bulletCurrent;let a=e.ordered?p7(n):_0(n);const c=e.ordered?a==="."?")":".":m7(n);let d=t&&n.bulletLastUsed?a===n.bulletLastUsed:!1;if(!e.ordered){const h=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&h&&(!h.children||!h.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(d=!0),dI(n)===a&&h){let p=-1;for(;++p<e.children.length;){const g=e.children[p];if(g&&g.type==="listItem"&&g.children&&g.children[0]&&g.children[0].type==="thematicBreak"){d=!0;break}}}}d&&(a=c),n.bulletCurrent=a;const m=n.containerFlow(e,i);return n.bulletLastUsed=a,n.bulletCurrent=o,r(),m}function g7(e){const t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function y7(e,t,n,i){const r=g7(n);let o=n.bulletCurrent||_0(n);t&&t.type==="list"&&t.ordered&&(o=(typeof t.start=="number"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let a=o.length+1;(r==="tab"||r==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(a=Math.ceil(a/4)*4);const c=n.createTracker(i);c.move(o+" ".repeat(a-o.length)),c.shift(a);const d=n.enter("listItem"),m=n.indentLines(n.containerFlow(e,c.current()),h);return d(),m;function h(p,g,x){return g?(x?"":" ".repeat(a))+p:(x?o:o+" ".repeat(a-o.length))+p}}function x7(e,t,n,i){const r=n.enter("paragraph"),o=n.enter("phrasing"),a=n.containerPhrasing(e,i);return o(),r(),a}const v7=Ym(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function b7(e,t,n,i){return(e.children.some(function(a){return v7(a)})?n.containerPhrasing:n.containerFlow).call(n,e,i)}function _7(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}fI.peek=k7;function fI(e,t,n,i){const r=_7(n),o=n.enter("strong"),a=n.createTracker(i),c=a.move(r+r);let d=a.move(n.containerPhrasing(e,{after:r,before:c,...a.current()}));const m=d.charCodeAt(0),h=dm(i.before.charCodeAt(i.before.length-1),m,r);h.inside&&(d=Eu(m)+d.slice(1));const p=d.charCodeAt(d.length-1),g=dm(i.after.charCodeAt(0),p,r);g.inside&&(d=d.slice(0,-1)+Eu(p));const x=a.move(r+r);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:h.outside},c+d+x}function k7(e,t,n){return n.options.strong||"*"}function S7(e,t,n,i){return n.safe(e.value,i)}function w7(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function C7(e,t,n){const i=(dI(n)+(n.options.ruleSpaces?" ":"")).repeat(w7(n));return n.options.ruleSpaces?i.slice(0,-1):i}const mI={blockquote:Y$,break:Lw,code:e7,definition:n7,emphasis:iI,hardBreak:Lw,heading:o7,html:rI,image:sI,imageReference:oI,inlineCode:aI,link:cI,linkReference:uI,list:h7,listItem:y7,paragraph:x7,root:b7,strong:fI,text:S7,thematicBreak:C7};function j7(){return{enter:{table:E7,tableData:zw,tableHeader:zw,tableRow:I7},exit:{codeText:T7,table:N7,tableData:ey,tableHeader:ey,tableRow:ey}}}function E7(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function N7(e){this.exit(e),this.data.inTable=void 0}function I7(e){this.enter({type:"tableRow",children:[]},e)}function ey(e){this.exit(e)}function zw(e){this.enter({type:"tableCell",children:[]},e)}function T7(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,R7));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function R7(e,t){return t==="|"?t:e}function A7(e){const t=e||{},n=t.tableCellPadding,i=t.tablePipeAlign,r=t.stringLength,o=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:a,tableCell:d,tableRow:c}};function a(x,v,b,k){return m(h(x,b,k),x.align)}function c(x,v,b,k){const w=p(x,b,k),S=m([w]);return S.slice(0,S.indexOf(` +`))}function d(x,v,b,k){const w=b.enter("tableCell"),S=b.enter("phrasing"),j=b.containerPhrasing(x,{...k,before:o,after:o});return S(),w(),j}function m(x,v){return q$(x,{align:v,alignDelimiters:i,padding:n,stringLength:r})}function h(x,v,b){const k=x.children;let w=-1;const S=[],j=v.enter("table");for(;++w<k.length;)S[w]=p(k[w],v,b);return j(),S}function p(x,v,b){const k=x.children;let w=-1;const S=[],j=v.enter("tableRow");for(;++w<k.length;)S[w]=d(k[w],x,v,b);return j(),S}function g(x,v,b){let k=mI.inlineCode(x,v,b);return b.stack.includes("tableCell")&&(k=k.replace(/\|/g,"\\$&")),k}}function M7(){return{exit:{taskListCheckValueChecked:Pw,taskListCheckValueUnchecked:Pw,paragraph:O7}}}function D7(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:L7}}}function Pw(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function O7(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const n=this.stack[this.stack.length-1];n.type;const i=n.children[0];if(i&&i.type==="text"){const r=t.children;let o=-1,a;for(;++o<r.length;){const c=r[o];if(c.type==="paragraph"){a=c;break}}a===n&&(i.value=i.value.slice(1),i.value.length===0?n.children.shift():n.position&&i.position&&typeof i.position.start.offset=="number"&&(i.position.start.column++,i.position.start.offset++,n.position.start=Object.assign({},i.position.start)))}}this.exit(e)}function L7(e,t,n,i){const r=e.children[0],o=typeof e.checked=="boolean"&&r&&r.type==="paragraph",a="["+(e.checked?"x":" ")+"] ",c=n.createTracker(i);o&&c.move(a);let d=mI.listItem(e,t,n,{...i,...c.current()});return o&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,m)),d;function m(h){return h+a}}function z7(){return[h$(),L$(),$$(),j7(),M7()]}function P7(e){return{extensions:[g$(),z$(e),H$(),A7(e),D7()]}}const B7={tokenize:G7,partial:!0},pI={tokenize:q7,partial:!0},hI={tokenize:W7,partial:!0},gI={tokenize:Y7,partial:!0},$7={tokenize:X7,partial:!0},yI={name:"wwwAutolink",tokenize:V7,previous:vI},xI={name:"protocolAutolink",tokenize:U7,previous:bI},zs={name:"emailAutolink",tokenize:F7,previous:_I},cs={};function H7(){return{text:cs}}let Ko=48;for(;Ko<123;)cs[Ko]=zs,Ko++,Ko===58?Ko=65:Ko===91&&(Ko=97);cs[43]=zs;cs[45]=zs;cs[46]=zs;cs[95]=zs;cs[72]=[zs,xI];cs[104]=[zs,xI];cs[87]=[zs,yI];cs[119]=[zs,yI];function F7(e,t,n){const i=this;let r,o;return a;function a(p){return!nv(p)||!_I.call(i,i.previous)||k0(i.events)?n(p):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),c(p))}function c(p){return nv(p)?(e.consume(p),c):p===64?(e.consume(p),d):n(p)}function d(p){return p===46?e.check($7,h,m)(p):p===45||p===95||zi(p)?(o=!0,e.consume(p),d):h(p)}function m(p){return e.consume(p),r=!0,d}function h(p){return o&&r&&Vi(i.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(p)):n(p)}}function V7(e,t,n){const i=this;return r;function r(a){return a!==87&&a!==119||!vI.call(i,i.previous)||k0(i.events)?n(a):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(B7,e.attempt(pI,e.attempt(hI,o),n),n)(a))}function o(a){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(a)}}function U7(e,t,n){const i=this;let r="",o=!1;return a;function a(p){return(p===72||p===104)&&bI.call(i,i.previous)&&!k0(i.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),r+=String.fromCodePoint(p),e.consume(p),c):n(p)}function c(p){if(Vi(p)&&r.length<5)return r+=String.fromCodePoint(p),e.consume(p),c;if(p===58){const g=r.toLowerCase();if(g==="http"||g==="https")return e.consume(p),d}return n(p)}function d(p){return p===47?(e.consume(p),o?m:(o=!0,d)):n(p)}function m(p){return p===null||lm(p)||Nn(p)||oa(p)||Gm(p)?n(p):e.attempt(pI,e.attempt(hI,h),n)(p)}function h(p){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(p)}}function G7(e,t,n){let i=0;return r;function r(a){return(a===87||a===119)&&i<3?(i++,e.consume(a),r):a===46&&i===3?(e.consume(a),o):n(a)}function o(a){return a===null?n(a):t(a)}}function q7(e,t,n){let i,r,o;return a;function a(m){return m===46||m===95?e.check(gI,d,c)(m):m===null||Nn(m)||oa(m)||m!==45&&Gm(m)?d(m):(o=!0,e.consume(m),a)}function c(m){return m===95?i=!0:(r=i,i=void 0),e.consume(m),a}function d(m){return r||i||!o?n(m):t(m)}}function W7(e,t){let n=0,i=0;return r;function r(a){return a===40?(n++,e.consume(a),r):a===41&&i<n?o(a):a===33||a===34||a===38||a===39||a===41||a===42||a===44||a===46||a===58||a===59||a===60||a===63||a===93||a===95||a===126?e.check(gI,t,o)(a):a===null||Nn(a)||oa(a)?t(a):(e.consume(a),r)}function o(a){return a===41&&i++,e.consume(a),r}}function Y7(e,t,n){return i;function i(c){return c===33||c===34||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===63||c===95||c===126?(e.consume(c),i):c===38?(e.consume(c),o):c===93?(e.consume(c),r):c===60||c===null||Nn(c)||oa(c)?t(c):n(c)}function r(c){return c===null||c===40||c===91||Nn(c)||oa(c)?t(c):i(c)}function o(c){return Vi(c)?a(c):n(c)}function a(c){return c===59?(e.consume(c),i):Vi(c)?(e.consume(c),a):n(c)}}function X7(e,t,n){return i;function i(o){return e.consume(o),r}function r(o){return zi(o)?n(o):t(o)}}function vI(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Nn(e)}function bI(e){return!Vi(e)}function _I(e){return!(e===47||nv(e))}function nv(e){return e===43||e===45||e===46||e===95||zi(e)}function k0(e){let t=e.length,n=!1;for(;t--;){const i=e[t][1];if((i.type==="labelLink"||i.type==="labelImage")&&!i._balanced){n=!0;break}if(i._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const K7={tokenize:rH,partial:!0};function Z7(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:tH,continuation:{tokenize:nH},exit:iH}},text:{91:{name:"gfmFootnoteCall",tokenize:eH},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Q7,resolveTo:J7}}}}function Q7(e,t,n){const i=this;let r=i.events.length;const o=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let a;for(;r--;){const d=i.events[r][1];if(d.type==="labelImage"){a=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return c;function c(d){if(!a||!a._balanced)return n(d);const m=Ur(i.sliceSerialize({start:a.end,end:i.now()}));return m.codePointAt(0)!==94||!o.includes(m.slice(1))?n(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),t(d))}}function J7(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const i={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},r={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};r.end.column++,r.end.offset++,r.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},r.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},c=[e[n+1],e[n+2],["enter",i,t],e[n+3],e[n+4],["enter",r,t],["exit",r,t],["enter",o,t],["enter",a,t],["exit",a,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",i,t]];return e.splice(n,e.length-n+1,...c),e}function eH(e,t,n){const i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let o=0,a;return c;function c(p){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),d}function d(p){return p!==94?n(p):(e.enter("gfmFootnoteCallMarker"),e.consume(p),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(p){if(o>999||p===93&&!a||p===null||p===91||Nn(p))return n(p);if(p===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return r.includes(Ur(i.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(p)}return Nn(p)||(a=!0),o++,e.consume(p),p===92?h:m}function h(p){return p===91||p===92||p===93?(e.consume(p),o++,m):m(p)}}function tH(e,t,n){const i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let o,a=0,c;return d;function d(v){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),m}function m(v){return v===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):n(v)}function h(v){if(a>999||v===93&&!c||v===null||v===91||Nn(v))return n(v);if(v===93){e.exit("chunkString");const b=e.exit("gfmFootnoteDefinitionLabelString");return o=Ur(i.sliceSerialize(b)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return Nn(v)||(c=!0),a++,e.consume(v),v===92?p:h}function p(v){return v===91||v===92||v===93?(e.consume(v),a++,h):h(v)}function g(v){return v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),r.includes(o)||r.push(o),rn(e,x,"gfmFootnoteDefinitionWhitespace")):n(v)}function x(v){return t(v)}}function nH(e,t,n){return e.check(Hu,t,e.attempt(K7,t,n))}function iH(e){e.exit("gfmFootnoteDefinition")}function rH(e,t,n){const i=this;return rn(e,r,"gfmFootnoteDefinitionIndent",5);function r(o){const a=i.events[i.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(o):n(o)}}function sH(e){let n=(e||{}).singleTilde;const i={name:"strikethrough",tokenize:o,resolveAll:r};return n==null&&(n=!0),{text:{126:i},insideSpan:{null:[i]},attentionMarkers:{null:[126]}};function r(a,c){let d=-1;for(;++d<a.length;)if(a[d][0]==="enter"&&a[d][1].type==="strikethroughSequenceTemporary"&&a[d][1]._close){let m=d;for(;m--;)if(a[m][0]==="exit"&&a[m][1].type==="strikethroughSequenceTemporary"&&a[m][1]._open&&a[d][1].end.offset-a[d][1].start.offset===a[m][1].end.offset-a[m][1].start.offset){a[d][1].type="strikethroughSequence",a[m][1].type="strikethroughSequence";const h={type:"strikethrough",start:Object.assign({},a[m][1].start),end:Object.assign({},a[d][1].end)},p={type:"strikethroughText",start:Object.assign({},a[m][1].end),end:Object.assign({},a[d][1].start)},g=[["enter",h,c],["enter",a[m][1],c],["exit",a[m][1],c],["enter",p,c]],x=c.parser.constructs.insideSpan.null;x&&hr(g,g.length,0,qm(x,a.slice(m+1,d),c)),hr(g,g.length,0,[["exit",p,c],["enter",a[d][1],c],["exit",a[d][1],c],["exit",h,c]]),hr(a,m-1,d-m+3,g),d=m+g.length-2;break}}for(d=-1;++d<a.length;)a[d][1].type==="strikethroughSequenceTemporary"&&(a[d][1].type="data");return a}function o(a,c,d){const m=this.previous,h=this.events;let p=0;return g;function g(v){return m===126&&h[h.length-1][1].type!=="characterEscape"?d(v):(a.enter("strikethroughSequenceTemporary"),x(v))}function x(v){const b=Tl(m);if(v===126)return p>1?d(v):(a.consume(v),p++,x);if(p<2&&!n)return d(v);const k=a.exit("strikethroughSequenceTemporary"),w=Tl(v);return k._open=!w||w===2&&!!b,k._close=!b||b===2&&!!w,c(v)}}}class oH{constructor(){this.map=[]}add(t,n,i){aH(this,t,n,i)}consume(t){if(this.map.sort(function(o,a){return o[0]-a[0]}),this.map.length===0)return;let n=this.map.length;const i=[];for(;n>0;)n-=1,i.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];i.push(t.slice()),t.length=0;let r=i.pop();for(;r;){for(const o of r)t.push(o);r=i.pop()}this.map.length=0}}function aH(e,t,n,i){let r=0;if(!(n===0&&i.length===0)){for(;r<e.map.length;){if(e.map[r][0]===t){e.map[r][1]+=n,e.map[r][2].push(...i);return}r+=1}e.map.push([t,n,i])}}function lH(e,t){let n=!1;const i=[];for(;t<e.length;){const r=e[t];if(n){if(r[0]==="enter")r[1].type==="tableContent"&&i.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(r[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const o=i.length-1;i[o]=i[o]==="left"?"center":"right"}}else if(r[1].type==="tableDelimiterRow")break}else r[0]==="enter"&&r[1].type==="tableDelimiterRow"&&(n=!0);t+=1}return i}function cH(){return{flow:{null:{name:"table",tokenize:uH,resolveAll:dH}}}}function uH(e,t,n){const i=this;let r=0,o=0,a;return c;function c(M){let A=i.events.length-1;for(;A>-1;){const P=i.events[A][1].type;if(P==="lineEnding"||P==="linePrefix")A--;else break}const B=A>-1?i.events[A][1].type:null,W=B==="tableHead"||B==="tableRow"?R:d;return W===R&&i.parser.lazy[i.now().line]?n(M):W(M)}function d(M){return e.enter("tableHead"),e.enter("tableRow"),m(M)}function m(M){return M===124||(a=!0,o+=1),h(M)}function h(M){return M===null?n(M):dt(M)?o>1?(o=0,i.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),x):n(M):Yt(M)?rn(e,h,"whitespace")(M):(o+=1,a&&(a=!1,r+=1),M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),a=!0,h):(e.enter("data"),p(M)))}function p(M){return M===null||M===124||Nn(M)?(e.exit("data"),h(M)):(e.consume(M),M===92?g:p)}function g(M){return M===92||M===124?(e.consume(M),p):p(M)}function x(M){return i.interrupt=!1,i.parser.lazy[i.now().line]?n(M):(e.enter("tableDelimiterRow"),a=!1,Yt(M)?rn(e,v,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(M):v(M))}function v(M){return M===45||M===58?k(M):M===124?(a=!0,e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),b):O(M)}function b(M){return Yt(M)?rn(e,k,"whitespace")(M):k(M)}function k(M){return M===58?(o+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),w):M===45?(o+=1,w(M)):M===null||dt(M)?N(M):O(M)}function w(M){return M===45?(e.enter("tableDelimiterFiller"),S(M)):O(M)}function S(M){return M===45?(e.consume(M),S):M===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),j):(e.exit("tableDelimiterFiller"),j(M))}function j(M){return Yt(M)?rn(e,N,"whitespace")(M):N(M)}function N(M){return M===124?v(M):M===null||dt(M)?!a||r!==o?O(M):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(M)):O(M)}function O(M){return n(M)}function R(M){return e.enter("tableRow"),D(M)}function D(M){return M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),D):M===null||dt(M)?(e.exit("tableRow"),t(M)):Yt(M)?rn(e,D,"whitespace")(M):(e.enter("data"),I(M))}function I(M){return M===null||M===124||Nn(M)?(e.exit("data"),D(M)):(e.consume(M),M===92?L:I)}function L(M){return M===92||M===124?(e.consume(M),I):I(M)}}function dH(e,t){let n=-1,i=!0,r=0,o=[0,0,0,0],a=[0,0,0,0],c=!1,d=0,m,h,p;const g=new oH;for(;++n<e.length;){const x=e[n],v=x[1];x[0]==="enter"?v.type==="tableHead"?(c=!1,d!==0&&(Bw(g,t,d,m,h),h=void 0,d=0),m={type:"table",start:Object.assign({},v.start),end:Object.assign({},v.end)},g.add(n,0,[["enter",m,t]])):v.type==="tableRow"||v.type==="tableDelimiterRow"?(i=!0,p=void 0,o=[0,0,0,0],a=[0,n+1,0,0],c&&(c=!1,h={type:"tableBody",start:Object.assign({},v.start),end:Object.assign({},v.end)},g.add(n,0,[["enter",h,t]])),r=v.type==="tableDelimiterRow"?2:h?3:1):r&&(v.type==="data"||v.type==="tableDelimiterMarker"||v.type==="tableDelimiterFiller")?(i=!1,a[2]===0&&(o[1]!==0&&(a[0]=a[1],p=uf(g,t,o,r,void 0,p),o=[0,0,0,0]),a[2]=n)):v.type==="tableCellDivider"&&(i?i=!1:(o[1]!==0&&(a[0]=a[1],p=uf(g,t,o,r,void 0,p)),o=a,a=[o[1],n,0,0])):v.type==="tableHead"?(c=!0,d=n):v.type==="tableRow"||v.type==="tableDelimiterRow"?(d=n,o[1]!==0?(a[0]=a[1],p=uf(g,t,o,r,n,p)):a[1]!==0&&(p=uf(g,t,a,r,n,p)),r=0):r&&(v.type==="data"||v.type==="tableDelimiterMarker"||v.type==="tableDelimiterFiller")&&(a[3]=n)}for(d!==0&&Bw(g,t,d,m,h),g.consume(t.events),n=-1;++n<t.events.length;){const x=t.events[n];x[0]==="enter"&&x[1].type==="table"&&(x[1]._align=lH(t.events,n))}return e}function uf(e,t,n,i,r,o){const a=i===1?"tableHeader":i===2?"tableDelimiter":"tableData",c="tableContent";n[0]!==0&&(o.end=Object.assign({},ol(t.events,n[0])),e.add(n[0],0,[["exit",o,t]]));const d=ol(t.events,n[1]);if(o={type:a,start:Object.assign({},d),end:Object.assign({},d)},e.add(n[1],0,[["enter",o,t]]),n[2]!==0){const m=ol(t.events,n[2]),h=ol(t.events,n[3]),p={type:c,start:Object.assign({},m),end:Object.assign({},h)};if(e.add(n[2],0,[["enter",p,t]]),i!==2){const g=t.events[n[2]],x=t.events[n[3]];if(g[1].end=Object.assign({},x[1].end),g[1].type="chunkText",g[1].contentType="text",n[3]>n[2]+1){const v=n[2]+1,b=n[3]-n[2]-1;e.add(v,b,[])}}e.add(n[3]+1,0,[["exit",p,t]])}return r!==void 0&&(o.end=Object.assign({},ol(t.events,r)),e.add(r,0,[["exit",o,t]]),o=void 0),o}function Bw(e,t,n,i,r){const o=[],a=ol(t.events,n);r&&(r.end=Object.assign({},a),o.push(["exit",r,t])),i.end=Object.assign({},a),o.push(["exit",i,t]),e.add(n+1,0,o)}function ol(e,t){const n=e[t],i=n[0]==="enter"?"start":"end";return n[1][i]}const fH={name:"tasklistCheck",tokenize:pH};function mH(){return{text:{91:fH}}}function pH(e,t,n){const i=this;return r;function r(d){return i.previous!==null||!i._gfmTasklistFirstContentOfListItem?n(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),o)}function o(d){return Nn(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),a):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),a):n(d)}function a(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):n(d)}function c(d){return dt(d)?t(d):Yt(d)?e.check({tokenize:hH},t,n)(d):n(d)}}function hH(e,t,n){return rn(e,i,"whitespace");function i(r){return r===null?n(r):t(r)}}function gH(e){return AN([H7(),Z7(),sH(e),cH(),mH()])}const yH={};function xH(e){const t=this,n=e||yH,i=t.data(),r=i.micromarkExtensions||(i.micromarkExtensions=[]),o=i.fromMarkdownExtensions||(i.fromMarkdownExtensions=[]),a=i.toMarkdownExtensions||(i.toMarkdownExtensions=[]);r.push(gH(n)),o.push(z7()),a.push(P7(n))}const vH=30,ty=10;function bH({className:e,children:t}){const[n,i]=C.useState(!1),[r,o]=C.useState(!1),a=String(t).replace(/\n$/,""),c=e?.replace("language-","")||"",d=a.split(` +`),m=d.length>vH,h=m?d.length-ty*2:0,p=C.useCallback(()=>{navigator.clipboard.writeText(a),i(!0),setTimeout(()=>i(!1),1500)},[a]);return u.jsxs("div",{className:"code-block-wrap",children:[u.jsxs("div",{className:"code-block-header",children:[u.jsxs("span",{className:"code-block-lang",children:[c||"code",m?` (${d.length} lines)`:""]}),u.jsx("button",{className:"code-block-copy",onClick:p,children:n?u.jsxs(u.Fragment,{children:[u.jsx(Fl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Am,{})," ",u.jsx("span",{children:"Copy"})]})})]}),u.jsx("pre",{children:u.jsx("code",{className:e,children:m&&!r?u.jsxs(u.Fragment,{children:[d.slice(0,ty).join(` +`)+` +`,u.jsxs("span",{className:"code-block-omitted",onClick:()=>o(!0),children:["... +",h," lines (click to expand)"]}),` +`+d.slice(-ty).join(` +`)]}):a})}),m&&r&&u.jsxs("button",{className:"code-block-collapse-btn",onClick:()=>o(!1),children:["Collapse (",d.length," lines)"]})]})}const _H={code({className:e,children:t,...n}){return e?.startsWith("language-")?u.jsx(bH,{className:e,children:t}):u.jsx("code",{className:e,...n,children:t})}},kH=3e3,SH=60,ny=800;function $w(e){if(e.length>kH)return!0;let t=0;for(let n=0;n<e.length;n++)if(e[n]===` +`&&++t>=SH)return!0;return!1}function wH(e){const t=e.lastIndexOf(` +`,ny);return e.slice(0,t>ny/2?t:ny)}const bi=Nt.memo(function({content:t,className:n="msg-content-agent",collapseMode:i="auto"}){const r=i!=="never"&&$w(t),[o,a]=C.useState(r);C.useEffect(()=>{a(i!=="never"&&$w(t))},[i,t]);const c=o?wH(t):t,d=t.split(` +`).length,m=t.length;return u.jsxs("div",{className:n,children:[u.jsx(s$,{remarkPlugins:[xH],components:_H,children:c}),r&&o&&u.jsxs("button",{className:"msg-collapse-toggle",onClick:()=>a(!1),children:["Show more (",d," lines, ",(m/1e3).toFixed(1),"k chars)"]}),r&&!o&&u.jsx("button",{className:"msg-collapse-toggle",onClick:()=>a(!0),children:"Show less"})]})}),Hw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},Nu="codex",iy="native",CH=["codex","native","claude_code","cursor","opencode"],jH=["native","codex","claude_code","cursor","opencode"];function kI(e){if(!e)return{kind:"fallback"};if(e.kind==="employee"){const t=String(e.id??e.employee_id??"").trim();return t?{kind:"employee",id:t}:{kind:"fallback"}}if(e.kind==="template"){const t=String(e.id??e.template_id??"").trim();return t?{kind:"template",id:t}:{kind:"fallback"}}return{kind:"fallback"}}function SI(e){const t=kI(e);return t.kind==="fallback"?"fallback:":`${t.kind}:${t.id??""}`}function EH(e,t,n){const i=String(e.role_id??"").trim(),r=String(e.role_label??"").trim(),o=`${i} ${r} ${e.role_responsibility??""}`.toLowerCase(),a=new Set((e.same_role_employee_ids??[]).map(m=>String(m??"").trim()).filter(Boolean)),c=t.map(m=>{const h=String(m.employee_id??"").trim(),p=String(m.employee_name??h).trim()||h,g=String(m.role_id??"").trim(),x=String(m.category??"").trim(),v=[g,x].filter(Boolean).join(" · ")||h;return{kind:"employee",id:h,name:p,subtitle:v,category:x,searchText:`${h} ${p} ${g} ${x} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(h)||g===i?0:2}}).filter(m=>m.id).sort((m,h)=>m.rank-h.rank||m.name.localeCompare(h.name)),d=n.map(m=>{const h=String(m.template_id??"").trim(),p=String(m.template_name??h).trim()||h,g=String(m.category??"").trim(),x=[g,h].filter(Boolean).join(" · ")||h,v=`${h} ${p} ${g} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),b=o.split(/[^a-z0-9]+/).filter(k=>k.length>=3).reduce((k,w)=>k+(v.includes(w)?1:0),0);return{kind:"template",id:h,name:p,subtitle:x,category:g,searchText:v,rank:b}}).filter(m=>m.id).sort((m,h)=>h.rank-m.rank||m.name.localeCompare(h.name));return[...c,...d,{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}]}function NH(e,t){const n=SI(t);return e.find(i=>`${i.kind}:${i.id}`===n)??e[0]}function IH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(i=>e.searchText.includes(i))}function TH(e){return e.map(t=>{const n=String(t.role_id??"").trim(),i=String(t.existing_employee?.employee_id??"").trim(),r=String(t.candidate?.template_id??"").trim(),o=i?{kind:"employee",id:i}:r?{kind:"template",id:r}:{kind:"fallback"};return{role_id:n,role_label:t.role_labels?.[0]??n,role_responsibility:"",default_selection:o,same_role_employee_ids:t.existing_employee_ids??[],fallback_available:!0,default_agent:t.default_agent??Nu,selected_agent:t.selected_agent??t.default_agent??Nu,default_source:"recruitment"}}).filter(t=>t.role_id)}function RH(e,t){return t.kind==="template"&&e?.candidate?.template_id===t.id?e.candidate.proposed_name||e.candidate.template_name||t.name:t.kind==="employee"&&e?.existing_employee?.employee_id===t.id&&e.existing_employee.employee_name||t.name}function Fw(e,t){const n={},i=e.staffing_selections??{};for(const r of t){const o=String(r.role_id??"").trim();o&&(n[o]=kI(i[o]??r.default_selection))}return n}function Vw(e,t){const n=e.recruitment_role_agents??{},i={};for(const r of t){const o=String(r.role_id??"").trim();o&&(i[o]=n[o]??r.selected_agent??r.default_agent??Nu)}return i}function AH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.checkpoint_reply_kind??"").trim())}const MH=Nt.memo(function({meta:t,onReply:n,responded:i}){const r=t.proposals??[],o=C.useMemo(()=>{const L={};for(const M of r){const A=String(M.role_id??"").trim();A&&(L[A]=M)}return L},[r]),a=C.useMemo(()=>t.staffing_roles?.length?t.staffing_roles:TH(r),[t.staffing_roles,r]),c=t.staffing_pool?.employees??[],d=t.staffing_pool?.templates??[],m=t.recruitment_rationales??[],h=C.useMemo(()=>{const L={};for(const M of a){const A=String(M.role_id??"").trim();A&&(L[A]=EH(M,c,d))}return L},[c,a,d]),[p,g]=C.useState({}),[x,v]=C.useState(""),[b,k]=C.useState(()=>Fw(t,a)),[w,S]=C.useState(()=>Vw(t,a)),[j,N]=C.useState(t.recruitment_agent??iy),O=i;C.useEffect(()=>{!O||!AH(t)||(k(Fw(t,a)),S(Vw(t,a)),N(t.recruitment_agent??iy))},[O,t,a]),C.useEffect(()=>{N(t.recruitment_agent??iy)},[t.recruitment_agent]);const R=C.useCallback(L=>{const M=String(t.checkpoint_id??"").trim();if(!M)throw new Error("Recruitment checkpoint reply requires checkpoint_id metadata.");const A=String(t.checkpoint_type??"").trim();return{response_to_checkpoint_id:M,response_to_checkpoint_type:A||"company_recruitment_confirmation",checkpoint_reply_kind:L,staffing_selections:b,recruitment_agent:j,recruitment_role_agents:a.reduce((B,W)=>{const P=String(W.role_id??"").trim();return P&&(B[P]=w[P]??W.selected_agent??W.default_agent??Nu),B},{})}},[t.checkpoint_id,t.checkpoint_type,j,w,a,b]),D=C.useCallback(()=>{O||n("approve",R("approve"))},[R,O,n]),I=C.useCallback(()=>{O||!x.trim()||(n(x.trim(),R("feedback")),v(""))},[R,O,x,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-recruitment",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-recruit",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("circle",{cx:"6",cy:"5",r:"3"}),u.jsx("path",{d:"M2 14c0-2.2 1.8-4 4-4s4 1.8 4 4"}),u.jsx("path",{d:"M12 5v4M10 7h4"})]})}),u.jsx("div",{className:"ckpt-title",children:"Recruitment Review"}),u.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),O&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),u.jsxs("div",{className:"ckpt-recruiter-agent",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruitment-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),u.jsx("select",{id:`recruitment-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:j,onChange:L=>N(L.target.value),disabled:O,children:jH.map(L=>u.jsx("option",{value:L,children:Hw[L]},L))})]}),m.length>0&&u.jsx("div",{className:"ckpt-recruitment-reasons",children:m.map(L=>u.jsxs("div",{className:"ckpt-recruitment-reason",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:L.role_id}),L.role_label&&L.role_label!==L.role_id&&u.jsx("span",{className:"ckpt-field-tag",children:L.role_label}),L.selection_label&&u.jsx("span",{className:"ckpt-badge ckpt-badge-template",children:L.selection_label})]}),L.rationale&&u.jsx("div",{className:"ckpt-rationale",children:L.rationale})]},L.role_id))}),u.jsx("div",{className:"ckpt-staffing-grid",children:a.map(L=>{const M=String(L.role_id??"").trim(),A=h[M]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],B=NH(A,b[M]),W=o[M],P=p[M]??"",G=A.filter($=>IH($,P)).slice(0,8);return u.jsxs("div",{className:"ckpt-staffing-card",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:M}),u.jsx("span",{className:`ckpt-badge ckpt-badge-${B.kind}`,children:B.kind})]}),L.role_label&&L.role_label!==M&&u.jsx("div",{className:"ckpt-role-labels",children:u.jsx("span",{className:"ckpt-field-tag",children:L.role_label})}),u.jsxs("div",{className:"ckpt-staffing-selected",children:[u.jsx("div",{className:"ckpt-cand-name",children:RH(W,B)}),u.jsxs("div",{className:"ckpt-cand-meta",children:[u.jsx("span",{className:"ckpt-cand-category",children:B.category}),u.jsx("span",{className:"ckpt-domain-tag",children:B.subtitle})]})]}),u.jsx("input",{className:"ckpt-staffing-search",value:P,onChange:$=>g(q=>({...q,[M]:$.target.value})),placeholder:"Search employees or templates...",disabled:O}),u.jsx("div",{className:"ckpt-staffing-options",children:G.map($=>{const q=`${$.kind}:${$.id}`===SI(b[M]);return u.jsxs("button",{className:`ckpt-staffing-option${q?" active":""}`,onClick:()=>k(Y=>({...Y,[M]:{kind:$.kind,id:$.id}})),disabled:O,title:$.subtitle,children:[u.jsx("span",{className:"ckpt-staffing-option-kind",children:$.kind}),u.jsx("span",{className:"ckpt-staffing-option-name",children:$.name})]},`${$.kind}:${$.id}`)})}),u.jsxs("div",{className:"ckpt-agent-picker",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruit-agent-${t.checkpoint_id}-${M}`,children:"Execution Agent"}),u.jsx("select",{id:`recruit-agent-${t.checkpoint_id}-${M}`,className:"ckpt-agent-select",value:w[M]??L.selected_agent??L.default_agent??Nu,onChange:$=>S(q=>({...q,[M]:$.target.value})),disabled:O,children:CH.map($=>u.jsx("option",{value:$,children:Hw[$]},$))})]})]},M)})}),!O&&u.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:D,children:"Approve"}),u.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback to refine recruitment...",value:x,onChange:L=>v(L.target.value),rows:2}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:I,disabled:!x.trim(),children:"Send Feedback"})]})]})}),Uw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},iv="codex",ry="native",DH=["codex","native","claude_code","cursor","opencode"],OH=["native","codex","claude_code","cursor","opencode"];function wI(e){if(!e)return{kind:"fallback"};if(e.kind==="employee"){const t=String(e.id??e.employee_id??"").trim();return t?{kind:"employee",id:t}:{kind:"fallback"}}if(e.kind==="template"){const t=String(e.id??e.template_id??"").trim();return t?{kind:"template",id:t}:{kind:"fallback"}}return{kind:"fallback"}}function CI(e){const t=wI(e);return t.kind==="fallback"?"fallback:":`${t.kind}:${t.id??""}`}function LH(e,t,n){const i=String(e.role_id??"").trim(),r=String(e.role_label??"").trim(),o=`${i} ${r} ${e.role_responsibility??""}`.toLowerCase(),a=new Set((e.same_role_employee_ids??[]).map(h=>String(h??"").trim()).filter(Boolean)),c=h=>{const p=`${h.template_id??""} ${h.template_name??""} ${h.category??""} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),g=String(h.category??"").toLowerCase();let x=0;for(const v of o.split(/[^a-z0-9]+/).filter(b=>b.length>=3))(p.includes(v)||g&&v.includes(g))&&(x+=1);return(p.includes(i.replace(/_/g,"-"))||p.includes(i.replace(/_/g," ")))&&(x+=2),x},d=t.map(h=>{const p=String(h.employee_id??"").trim(),g=String(h.employee_name??p).trim()||p,x=String(h.role_id??"").trim(),v=String(h.category??"").trim(),b=[x,v].filter(Boolean).join(" · ")||p;return{kind:"employee",id:p,name:g,subtitle:b,category:v,searchText:`${p} ${g} ${x} ${v} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(p)||x===i?0:2}}).filter(h=>h.id).sort((h,p)=>h.rank-p.rank||h.name.localeCompare(p.name)),m=n.map(h=>{const p=String(h.template_id??"").trim(),g=String(h.template_name??p).trim()||p,x=String(h.category??"").trim(),v=[x,p].filter(Boolean).join(" · ")||p;return{kind:"template",id:p,name:g,subtitle:v,category:x,searchText:`${p} ${g} ${x} ${(h.domains??[]).join(" ")} ${(h.tags??[]).join(" ")}`.toLowerCase(),rank:c(h)}}).filter(h=>h.id).sort((h,p)=>p.rank-h.rank||h.name.localeCompare(p.name));return[...d,...m,{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}]}function zH(e,t){const n=CI(t);return e.find(i=>`${i.kind}:${i.id}`===n)??e[0]}function PH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(i=>e.searchText.includes(i))}function Gw(e,t){const n={},i=e.staffing_selections??{};for(const r of t){const o=String(r.role_id??"").trim();o&&(n[o]=wI(i[o]??r.default_selection))}return n}function qw(e,t){const n=e.recruitment_role_agents??{},i={};for(const r of t){const o=String(r.role_id??"").trim();o&&(i[o]=n[o]??r.selected_agent??r.default_agent??iv)}return i}function BH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.staffing_action??"").trim())}const $H=Nt.memo(function({meta:t,onReply:n,responded:i}){const r=C.useMemo(()=>t.staffing_roles??[],[t.staffing_roles]),o=t.staffing_pool?.employees??[],a=t.staffing_pool?.templates??[],c=C.useMemo(()=>{const O={};for(const R of r){const D=String(R.role_id??"").trim();D&&(O[D]=LH(R,o,a))}return O},[o,r,a]),[d,m]=C.useState({}),[h,p]=C.useState(()=>Gw(t,r)),[g,x]=C.useState(()=>qw(t,r)),[v,b]=C.useState(t.recruitment_agent??ry),k=i,w=t.recommended_action==="auto_recruit"&&a.length>0;C.useEffect(()=>{!k||!BH(t)||(p(Gw(t,r)),x(qw(t,r)),b(t.recruitment_agent??ry))},[k,t,r]),C.useEffect(()=>{b(t.recruitment_agent??ry)},[t.recruitment_agent]);const S=C.useCallback(O=>{const R=String(t.checkpoint_id??"").trim();if(!R)throw new Error("Staffing checkpoint reply requires checkpoint_id metadata.");return{response_to_checkpoint_id:R,response_to_checkpoint_type:"company_staffing_selection",staffing_action:O,staffing_selections:h,recruitment_agent:v,recruitment_role_agents:r.reduce((D,I)=>{const L=String(I.role_id??"").trim();return L&&(D[L]=g[L]??I.selected_agent??I.default_agent??iv),D},{})}},[t.checkpoint_id,v,g,r,h]),j=C.useCallback(()=>{k||n("approve",S("manual_approve"))},[S,k,n]),N=C.useCallback(()=>{k||n("auto recruit",S("auto_recruit"))},[S,k,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-staffing",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-staffing",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"}),u.jsx("path",{d:"M1.5 14c.6-2.5 2.2-4 4.5-4s3.9 1.5 4.5 4"}),u.jsx("path",{d:"M12.5 3.5v5M10 6h5"})]})}),u.jsx("div",{className:"ckpt-title",children:"Manual Staffing"}),u.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),w&&!k&&u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"Recruit recommended"}),k&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),u.jsxs("div",{className:"ckpt-recruiter-agent",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),u.jsx("select",{id:`staffing-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:v,onChange:O=>b(O.target.value),disabled:k,children:OH.map(O=>u.jsx("option",{value:O,children:Uw[O]},O))})]}),u.jsx("div",{className:"ckpt-staffing-grid",children:r.map(O=>{const R=String(O.role_id??"").trim(),D=c[R]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],I=zH(D,h[R]),L=d[R]??"",M=D.filter(A=>PH(A,L)).slice(0,8);return u.jsxs("div",{className:"ckpt-staffing-card",children:[u.jsxs("div",{className:"ckpt-proposal-header",children:[u.jsx("span",{className:"ckpt-role-name",children:R}),u.jsx("span",{className:`ckpt-badge ckpt-badge-${I.kind}`,children:I.kind})]}),O.role_label&&O.role_label!==R&&u.jsx("div",{className:"ckpt-role-labels",children:u.jsx("span",{className:"ckpt-field-tag",children:O.role_label})}),u.jsxs("div",{className:"ckpt-staffing-selected",children:[u.jsx("div",{className:"ckpt-cand-name",children:I.name}),u.jsxs("div",{className:"ckpt-cand-meta",children:[u.jsx("span",{className:"ckpt-cand-category",children:I.category}),u.jsx("span",{className:"ckpt-domain-tag",children:I.subtitle})]})]}),u.jsx("input",{className:"ckpt-staffing-search",value:L,onChange:A=>m(B=>({...B,[R]:A.target.value})),placeholder:"Search employees or templates...",disabled:k}),u.jsx("div",{className:"ckpt-staffing-options",children:M.map(A=>{const B=`${A.kind}:${A.id}`===CI(h[R]);return u.jsxs("button",{className:`ckpt-staffing-option${B?" active":""}`,onClick:()=>p(W=>({...W,[R]:{kind:A.kind,id:A.id}})),disabled:k,title:A.subtitle,children:[u.jsx("span",{className:"ckpt-staffing-option-kind",children:A.kind}),u.jsx("span",{className:"ckpt-staffing-option-name",children:A.name})]},`${A.kind}:${A.id}`)})}),u.jsxs("div",{className:"ckpt-agent-picker",children:[u.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-agent-${t.checkpoint_id}-${R}`,children:"Execution Agent"}),u.jsx("select",{id:`staffing-agent-${t.checkpoint_id}-${R}`,className:"ckpt-agent-select",value:g[R]??O.selected_agent??O.default_agent??iv,onChange:A=>x(B=>({...B,[R]:A.target.value})),disabled:k,children:DH.map(A=>u.jsx("option",{value:A,children:Uw[A]},A))})]})]},R)})}),!k&&u.jsx("div",{className:"ckpt-actions",children:w?u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:N,children:"Auto Recruit"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:j,children:"Approve Selections"})]}):u.jsxs(u.Fragment,{children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:j,children:"Approve Selections"}),a.length>0&&u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:N,children:"Auto Recruit"})]})})]})}),HH={task_adjustment:"Task Adjustment",runtime_replan:"Runtime Replan",org_mutation:"Org Mutation"},Ww={low:"var(--green)",medium:"var(--yellow)",high:"var(--red)"},FH=Nt.memo(function({meta:t,onReply:n,responded:i}){const r=i,o=C.useCallback(()=>{r||n("approve")},[r,n]),a=C.useCallback(()=>{r||n("deny")},[r,n]),c=t.role_changes??[],d=t.work_item_projection_changes??[],m=t.scope||"org_mutation",h=t.risk_level||"medium",p=t.impact_summary||{};return u.jsxs("div",{className:"ckpt-panel ckpt-reorg",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-reorg",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1"}),u.jsx("rect",{x:"10",y:"1",width:"5",height:"5",rx:"1"}),u.jsx("rect",{x:"5.5",y:"10",width:"5",height:"5",rx:"1"}),u.jsx("path",{d:"M3.5 6v2.5a1 1 0 001 1h7a1 1 0 001-1V6"}),u.jsx("path",{d:"M8 9.5V10"})]})}),u.jsx("div",{className:"ckpt-title",children:t.title||"Company Reorg"}),r&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),u.jsxs("div",{className:"ckpt-reorg-badges",children:[u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:HH[m]||m}),u.jsxs("span",{className:"ckpt-badge",style:{color:Ww[h]||"var(--text-secondary)",borderColor:Ww[h]||"var(--border)"},children:["Risk: ",h.charAt(0).toUpperCase()+h.slice(1)]})]}),t.summary&&u.jsx("div",{className:"ckpt-summary",children:t.summary}),t.rationale&&u.jsx("div",{className:"ckpt-rationale",children:t.rationale}),c.length>0&&u.jsxs("div",{className:"ckpt-changes-section",children:[u.jsx("div",{className:"ckpt-changes-title",children:"Role Changes"}),c.map((g,x)=>u.jsxs("div",{className:"ckpt-change-row",children:[u.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),u.jsx("span",{className:"ckpt-change-id",children:g.role_id}),g.replacement_role_id&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"ckpt-change-arrow",children:"→"}),u.jsx("span",{className:"ckpt-change-id",children:g.replacement_role_id})]}),g.reason&&u.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},x))]}),d.length>0&&u.jsxs("div",{className:"ckpt-changes-section",children:[u.jsx("div",{className:"ckpt-changes-title",children:"Work Item Projection Changes"}),d.map((g,x)=>u.jsxs("div",{className:"ckpt-change-row",children:[u.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),u.jsx("span",{className:"ckpt-change-id",children:g.work_item_projection_id}),g.replacement_work_item_projection_id&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"ckpt-change-arrow",children:"→"}),u.jsx("span",{className:"ckpt-change-id",children:g.replacement_work_item_projection_id})]}),g.reason&&u.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},x))]}),Object.keys(p).length>0&&u.jsxs("div",{className:"ckpt-impact",children:[p.affected_tasks!=null&&u.jsxs("span",{children:["Tasks affected: ",p.affected_tasks]}),p.affected_roles!=null&&u.jsxs("span",{children:["Roles affected: ",p.affected_roles]}),p.migration_count!=null&&u.jsxs("span",{children:["Migrations: ",p.migration_count]})]}),!r&&u.jsxs("div",{className:"ckpt-actions",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:o,children:"Approve Reorg"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-deny",onClick:a,children:"Deny"})]})]})}),VH=3e4;function UH(e){return e.split(` +`).map(t=>t.trim()).find(Boolean)??e}function GH(e){switch(e){case"timeout":case"timed_out":case"expired":return"Expired";case"stale":case"invalid":return"Inactive";case"cancelled":case"canceled":return"Cancelled";case"resolved":return"Resolved";default:return"Responded"}}const Yw=Nt.memo(function({meta:t,onReply:n,responded:i}){const r=i,o=String(t.checkpoint_status??"").trim().toLowerCase(),a=GH(o),c=String(t.prompt??t.summary??""),d=C.useMemo(()=>c.split(` +`).map(O=>O.trim()).filter(Boolean),[c]),m=UH(c).replace(/^\[[^\]]+\]\s*/,"")||"Action Required",h=d.slice(1).join(` +`).trim(),p=String(t.summary??"").trim(),g=(t.options??[]).filter(O=>!!O?.id),x=C.useMemo(()=>(t.active_subagents??[]).filter(O=>!!O&&typeof O=="object"),[t.active_subagents]),v=C.useMemo(()=>(t.permission_requests??[]).filter(O=>!!O&&typeof O=="object"),[t.permission_requests]),b=String(t.worktree_path??"").trim(),k=x.length>0||v.length>0||!!b,[w,S]=C.useState(""),j=!!w&&!r;C.useEffect(()=>{if(!j)return;const O=window.setTimeout(()=>S(""),VH);return()=>window.clearTimeout(O)},[j,w]);const N=C.useCallback(O=>{r||j||(S(O.id),n(O.label||O.id))},[r,j,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-escalation",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-escalation",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M8 1.5L14.5 13H1.5L8 1.5Z"}),u.jsx("path",{d:"M8 5.5V9"}),u.jsx("circle",{cx:"8",cy:"11.5",r:"0.75",fill:"currentColor",stroke:"none"})]})}),u.jsx("div",{className:"ckpt-title",children:m}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.escalation_type??"decision_needed").replace(/_/g," ")}),r&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:a})]}),p&&p!==m&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(bi,{content:p,className:"ckpt-markdown"})]}),h&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Request"}),u.jsx(bi,{content:h,className:"ckpt-markdown"})]}),k&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[b&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:b})]}),x.length>0&&u.jsxs("div",{children:["Active subagents: ",x.length]}),v.length>0&&u.jsxs("div",{children:["Pending permission records: ",v.length]})]})]}),!r&&g.length>0&&u.jsx("div",{className:"ckpt-actions ckpt-escalation-actions",children:g.map(O=>u.jsx("button",{className:`ckpt-btn ${O.id.includes("deny")?"ckpt-btn-deny":"ckpt-btn-approve"}${j?" ckpt-btn-submitting":""}`,onClick:()=>N(O),disabled:j,children:j&&w===O.id?"Submitting…":O.label||O.id},O.id))}),j&&u.jsx("div",{className:"ckpt-escalation-hint",children:"Decision sent — waiting for server confirmation…"}),!r&&t.default_action&&u.jsxs("div",{className:"ckpt-escalation-hint",children:["Default on timeout: ",u.jsx("code",{children:t.default_action})]})]})});function qH(e){return e.split(` +`).map(t=>t.trim()).find(Boolean)??e}function WH(e){switch(e){case"ignored":return"Ignored";case"timeout":case"timed_out":case"expired":return"Expired";case"stale":case"invalid":return"Inactive";case"superseded":return"Superseded";case"cancelled":case"canceled":return"Cancelled";case"resolved":return"Resolved";default:return"Responded"}}const YH=Nt.memo(function({meta:t,onReply:n,responded:i}){const r=i,[o,a]=C.useState(""),[c,d]=C.useState(null),m=String(t.checkpoint_status??"").trim().toLowerCase(),h=WH(m),p=String(t.prompt??t.summary??"").trim(),x=`${String(t.work_item_projection_title??qH(p)??"Human Review").trim()||"Human Review"} (for self-evolution)`,v=String(t.summary??"").trim(),b=C.useMemo(()=>(t.active_subagents??[]).filter(I=>!!I&&typeof I=="object"),[t.active_subagents]),k=C.useMemo(()=>(t.permission_requests??[]).filter(I=>!!I&&typeof I=="object"),[t.permission_requests]),w=String(t.worktree_path??"").trim(),S=b.length>0||k.length>0||!!w,j=r||c!==null,N=C.useCallback((I,L="")=>{const M=String(t.checkpoint_id??"").trim();if(!M)throw new Error("Delivery self-evolution reply requires checkpoint_id metadata.");const A={response_to_checkpoint_id:M,response_to_checkpoint_type:"company_delivery_feedback",checkpoint_reply_kind:I};return(I==="approve"||I==="feedback")&&(A.self_evolution_trigger=!0,A.human_feedback_text=L),A},[t.checkpoint_id]),O=C.useCallback(()=>{if(j)return;const I=N("approve");d("approve"),n("I fully agree with this delivery.",I)},[j,N,n]),R=C.useCallback(()=>{const I=o.trim();if(j||!I)return;const L=N("feedback",I);d("feedback"),n(I,L),a("")},[j,N,o,n]),D=C.useCallback(()=>{if(j)return;const I=N("ignore");d("ignore"),n("Ignore this self-evolution review.",I)},[j,N,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-delivery-feedback",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M8 1.5L14 5v4.5c0 2.25-1.8 4.25-6 5-4.2-.75-6-2.75-6-5V5L8 1.5Z"}),u.jsx("path",{d:"M5.5 8.25L7.25 10l3.25-4"})]})}),u.jsx("div",{className:"ckpt-title",children:x}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.feedback_scope??"final").replace(/_/g," ")}),r&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:h})]}),v&&v!==x&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(bi,{content:v,className:"ckpt-markdown"})]}),p&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Review Request"}),u.jsx(bi,{content:p,className:"ckpt-markdown"})]}),S&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[w&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:w})]}),b.length>0&&u.jsxs("div",{children:["Active subagents: ",b.length]}),k.length>0&&u.jsxs("div",{children:["Pending permission records: ",k.length]})]})]}),!r&&u.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:O,disabled:j,children:"Fully Agree"}),u.jsx("button",{className:"ckpt-btn ckpt-btn-cancel",onClick:D,disabled:j,children:"Ignore"}),u.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback for self-evolution...",value:o,onChange:I=>a(I.target.value),disabled:j,rows:2}),u.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:R,disabled:j||!o.trim(),children:"Send Feedback"})]})]})}),df="__other__",XH=["A","B","C"];function ts(e){return String(e??"").trim()}function KH(e,t){const n=ts(e.question),i=ts(e.header);if(!n&&!i)return null;const r=(e.options??[]).slice(0,3).map((o,a)=>({id:ts(o.id)||String.fromCharCode(97+a),label:ts(o.label),description:ts(o.description)})).filter(o=>o.label);return{id:ts(e.id)||`question_${t+1}`,header:i,question:n||i,options:r,allow_freeform:e.allow_freeform!==!1,required:e.required!==!1}}const ZH=Nt.memo(function({meta:t,onReply:n,responded:i}){const[r,o]=C.useState(""),[a,c]=C.useState({}),d=i,m=String(t.work_item_projection_title??t.work_item_projection_id??"Input Needed").trim()||"Input Needed",h=String(t.summary??"").trim(),p=String(t.prompt??"").trim(),g=String(t.context_note??"").trim(),x=String(t.resume_hint??"").trim(),v=C.useMemo(()=>(t.questions??[]).map(q=>String(q).trim()).filter(Boolean),[t.questions]),b=C.useMemo(()=>(t.input_questions??[]).map((q,Y)=>KH(q,Y)).filter(q=>q!==null),[t.input_questions]),k=b.some(q=>(q.options??[]).length>0),w=C.useMemo(()=>(t.required_fields??[]).map(q=>String(q).trim()).filter(Boolean),[t.required_fields]),S=C.useMemo(()=>(t.active_subagents??[]).filter(q=>!!q&&typeof q=="object"),[t.active_subagents]),j=C.useMemo(()=>(t.permission_requests??[]).filter(q=>!!q&&typeof q=="object"),[t.permission_requests]),N=String(t.worktree_path??"").trim(),O=String(t.requesting_role_id??"").trim(),R=String(t.requesting_task_id??"").trim(),D=String(t.requesting_work_item_id??"").trim(),I=String(t.seat_id??"").trim(),M=!!O||!!R||!!D||!!I||S.length>0||j.length>0||!!N,A=C.useCallback((q,Y)=>{c(Q=>({...Q,[q]:{freeformText:Q[q]?.freeformText??"",selectedOptionId:Y}}))},[]),B=C.useCallback((q,Y)=>{c(Q=>({...Q,[q]:{selectedOptionId:Q[q]?.selectedOptionId,freeformText:Y}}))},[]),W=C.useCallback(q=>{if(q.required===!1)return!0;const Y=a[q.id],Q=Y?.selectedOptionId;return!!(Q&&Q!==df||q.allow_freeform!==!1&&ts(Y?.freeformText))},[a]),P=k&&b.every(W),G=C.useCallback(()=>{const q=r.trim();d||!q||n(q)},[d,n,r]),$=C.useCallback(()=>{if(d||!P)return;const q={},Y=[];b.forEach(Q=>{const V=a[Q.id]??{freeformText:""},U=(Q.options??[]).find(te=>te.id===V.selectedOptionId),Z=ts(V.freeformText),K=[U?.label??"",Z].filter(Boolean).join("; ");q[Q.id]={question_id:Q.id,question:Q.question,...U?{selected_option_id:U.id,selected_label:U.label}:{},...Z?{freeform_text:Z}:{},answer_text:K};const ee=ts(Q.header)||ts(Q.question)||Q.id;Y.push(`- ${ee}: ${K||"(no answer)"}`)}),n(Y.join(` +`),{user_input_answers:q})},[a,P,b,d,n]);return u.jsxs("div",{className:"ckpt-panel ckpt-user-input",children:[u.jsxs("div",{className:"ckpt-header",children:[u.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[u.jsx("path",{d:"M3 3.5h10v6H6.5L3 13V3.5Z"}),u.jsx("path",{d:"M5.5 6h5"}),u.jsx("path",{d:"M5.5 8h3.5"})]})}),u.jsx("div",{className:"ckpt-title",children:m}),u.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"awaiting input"}),d&&u.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),h&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Summary"}),u.jsx(bi,{content:h,className:"ckpt-markdown"})]}),p&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Request"}),u.jsx(bi,{content:p,className:"ckpt-markdown"})]}),k?u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Questions"}),u.jsx("div",{className:"ckpt-choice-list",children:b.map(q=>{const Y=a[q.id]??{freeformText:""},Q=q.options??[],V=q.allow_freeform!==!1,U=V&&(Q.length===0||Y.selectedOptionId===df);return u.jsxs("div",{className:"ckpt-choice-question",children:[q.header&&u.jsx("div",{className:"ckpt-question-header",children:q.header}),u.jsx(bi,{content:q.question,className:"ckpt-markdown"}),Q.length>0&&u.jsxs("div",{className:"ckpt-choice-grid",children:[Q.map((Z,F)=>{const K=Y.selectedOptionId===Z.id;return u.jsxs("button",{className:`ckpt-choice-option${K?" is-selected":""}`,onClick:()=>A(q.id,Z.id),children:[u.jsx("span",{className:"ckpt-choice-letter",children:XH[F]??"?"}),u.jsxs("span",{className:"ckpt-choice-copy",children:[u.jsx("span",{className:"ckpt-choice-label",children:Z.label}),Z.description&&u.jsx("span",{className:"ckpt-choice-desc",children:Z.description})]})]},Z.id)}),V&&u.jsxs("button",{className:`ckpt-choice-option${Y.selectedOptionId===df?" is-selected":""}`,onClick:()=>A(q.id,df),children:[u.jsx("span",{className:"ckpt-choice-letter",children:"D"}),u.jsxs("span",{className:"ckpt-choice-copy",children:[u.jsx("span",{className:"ckpt-choice-label",children:"Other"}),u.jsx("span",{className:"ckpt-choice-desc",children:"Enter a custom answer"})]})]})]}),U&&u.jsx("textarea",{className:"ckpt-feedback-input ckpt-other-field",placeholder:"Type your answer...",value:Y.freeformText,onChange:Z=>B(q.id,Z.target.value),rows:3})]},q.id)})})]}):v.length>0&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Questions"}),u.jsx("ul",{className:"ckpt-task-list",children:v.map(q=>u.jsx("li",{children:q},q))})]}),w.length>0&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Required Fields"}),u.jsx("div",{className:"ckpt-task-tags",children:w.map(q=>u.jsx("span",{className:"ckpt-field-tag",children:q},q))})]}),g&&u.jsxs("div",{className:"ckpt-section",children:[u.jsx("div",{className:"ckpt-section-title",children:"Context"}),u.jsx(bi,{content:g,className:"ckpt-markdown ckpt-markdown-muted"})]}),x&&u.jsx("div",{className:"ckpt-escalation-hint",children:x}),M&&u.jsxs("details",{className:"ckpt-runtime-details",children:[u.jsx("summary",{children:"Runtime State"}),u.jsxs("div",{className:"ckpt-runtime-body",children:[O&&u.jsxs("div",{children:["Requester: ",u.jsx("code",{children:O})]}),D&&u.jsxs("div",{children:["Work item: ",u.jsx("code",{children:D})]}),R&&u.jsxs("div",{children:["Task: ",u.jsx("code",{children:R})]}),I&&u.jsxs("div",{children:["Seat: ",u.jsx("code",{children:I})]}),N&&u.jsxs("div",{children:["Worktree: ",u.jsx("code",{children:N})]}),S.length>0&&u.jsxs("div",{children:["Active subagents: ",S.length]}),j.length>0&&u.jsxs("div",{children:["Pending permission records: ",j.length]})]})]}),!d&&u.jsxs("div",{className:"ckpt-feedback-area",children:[k?null:u.jsx("textarea",{className:"ckpt-feedback-input",placeholder:"Reply with the missing input to continue...",value:r,onChange:q=>o(q.target.value),rows:3}),u.jsx("div",{className:"ckpt-feedback-btns",children:u.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:k?$:G,disabled:k?!P:!r.trim(),children:"Send Reply"})})]})]})}),rv={todo:"To do",in_progress:"In progress",in_review:"In review",done:"Done"};function sy(e,t){if(t&&t in rv)return t;switch(e){case"active":return"in_progress";case"waiting":return"in_review";case"done":return"done";case"failed":return"done";case"pending":return"todo";default:return"todo"}}function ff(e){return rv[e]??rv.todo}const Xw={active:0,waiting:1,failed:2,done:3,pending:4};function QH(e){if(e.length===0)return"pending";let t=e[0],n=Xw[t]??99;for(const i of e){const r=Xw[i]??99;r<n&&(t=i,n=r)}return t}const JH={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function Kw(e){return e.length>12&&/^[0-9a-f-]+$/i.test(e.replace(/_/g,""))}function hl(e){return typeof e=="string"?e.trim():""}function oy(...e){for(const t of e){const n=hl(t);if(n)return n}return""}function eF(e){const t=hl(e);return t?JH[t]??r0(t):""}function tF(e){return e==="done"?u.jsx("span",{className:"wi-projection-icon",children:"✓"}):e==="active"?u.jsx("span",{className:"wi-projection-icon wi-projection-pulse",children:"●"}):e==="failed"?u.jsx("span",{className:"wi-projection-icon",children:"✗"}):e==="waiting"?u.jsx("span",{className:"wi-projection-icon",children:"●"}):null}const nF={active:"active",waiting:"waiting",pending:"pending",done:"done",failed:"failed"};function iF(e){return e?e==="in-progress"?"in_progress":e==="in-review"?"in_review":e:"todo"}function rF(e){switch(e){case"running":case"waiting_for_peer":case"waiting_for_children":case"paused":case"needs_attention":return"active";case"awaiting_manager_review":case"awaiting_human":case"queued":case"ready":case"ready_for_rework":case"waiting_dependencies":return"waiting";case"approved":return"done";case"failed":case"cancelled":return"failed";default:return"pending"}}function sF(e){const t=hl(e.status).toLowerCase();return t==="done"||t==="delivered"?"done":t==="failed"||t==="cancelled"?"failed":t==="awaiting_peer"||t==="awaiting_manager_review"||t==="awaiting_human"||t==="awaiting_review"||t==="blocked"||t==="paused"||t==="awaiting_owner"?"waiting":t==="running"||t==="deliverable"||t==="active"||t==="ready"?"active":"pending"}function jI({workItemLog:e,roleWorkItems:t,executorRoleWorkItems:n,childSessions:i,isCompanyRuntime:r=!1,onWorkItemClick:o}){const a=C.useMemo(()=>{const b=new Map;for(const k of i??[]){b.set(k.taskId,k);const w=yo(k);w&&b.set(w,k)}return b},[i]),c=C.useMemo(()=>{const b=new Map,k=[];for(const w of e){const S=yo(w),j=w.workItemProjectionId??S??"";if(!j)continue;if(!b.has(j)){k.push(j);const O=w.workItemProjectionTitle??j,R=w.roleName||(Kw(O)?"Agent":O);b.set(j,{projectionId:j,title:R,roleName:w.roleName,status:"pending",executionTurnId:S})}const N=b.get(j);switch(w.roleName?(N.roleName=w.roleName,N.title=w.roleName):w.workItemProjectionTitle&&!Kw(w.workItemProjectionTitle)&&(N.title=w.workItemProjectionTitle),S&&(N.executionTurnId=S),w.type){case"work_item_started":N.status="active";break;case"gate_approved":N.status="done";break;case"gate_rejected":N.status="active";break;case"awaiting_manager_review":case"awaiting_human":case"awaiting_review":case"awaiting_peer":N.status="waiting";break;case"work_item_failed":case"deadlock":N.status="failed";break}}for(const w of b.values()){if(!w.executionTurnId)continue;const S=a.get(w.executionTurnId);if(!S)continue;const j=Dg(S);j&&(w.title=j),S.workItemRoleName&&(w.roleName=S.workItemRoleName),S.status==="done"?w.status="done":S.status==="failed"&&(w.status="failed")}return k.map(w=>b.get(w))},[e,a]),d=C.useMemo(()=>{const b=new Map;for(const k of e){const w=yo(k);w&&!b.has(w)&&b.set(w,b.size)}return b},[e]),m=n??t,h=C.useMemo(()=>{if(!m)return[];const b=[];for(const k of Object.values(m)){if(!k||!Array.isArray(k.workItems)||k.workItems.length===0)continue;const S=[...k.workItems].sort((D,I)=>D.createdAt-I.createdAt).map(D=>{const I=iF(D.kanbanColumn),L=rF(D.phase);return{executionTurnId:D.executionTurnId??"",title:hl(D.title)||hl(D.executorRoleName)||hl(D.executorRoleId)||"Work item",status:L,statusLabel:ff(I),columnId:I,updatedAt:D.updatedAt,workItemId:D.workItemId,progressLog:D.progressLog,activitySections:D.activitySections??[],isReviewTarget:D.isReviewTarget}}),j=nF[k.aggregatedStatus]??"pending",N=sy(j),O=S[S.length-1],R=[...S].reverse().find(D=>!!D.executionTurnId)?.executionTurnId??"";b.push({roleKey:k.roleKey,executionTurnId:O.executionTurnId||R,title:k.roleName||k.roleId,status:j,statusLabel:ff(N),roleName:k.roleName,updatedAt:S.reduce((D,I)=>Math.max(D,I.updatedAt),0),turns:S,runtimeStatus:k.runtimeStatus})}return b.sort((k,w)=>{const S=k.turns[0]?.updatedAt??Number.POSITIVE_INFINITY,j=w.turns[0]?.updatedAt??Number.POSITIVE_INFINITY;return S-j}),b},[m]),p=C.useMemo(()=>{const b=[...i??[]];if(b.length===0)return[];const k=new Map,w=[];for(const j of b){const N=oy(j.workItemRoleId,j.assigneeIds[0],j.taskId);k.has(N)||(k.set(N,[]),w.push(N)),k.get(N).push(j)}w.sort((j,N)=>{const O=k.get(j)??[],R=k.get(N)??[],D=Math.min(...O.map(A=>d.get(yo(A)||A.taskId)??Number.POSITIVE_INFINITY)),I=Math.min(...R.map(A=>d.get(yo(A)||A.taskId)??Number.POSITIVE_INFINITY));if(D!==I)return D-I;const L=Math.min(...O.map(A=>A.updatedAt)),M=Math.min(...R.map(A=>A.updatedAt));return L-M});const S=[];for(const j of w){const N=k.get(j)??[];if(N.length===0)continue;const O=N.slice().sort((A,B)=>A.updatedAt-B.updatedAt).map(A=>{const B=sF(A),W=yo(A),P=sy(B,String(A.columnId??"").trim()||void 0);return{executionTurnId:W||A.taskId,title:oy(Dg(A),A.title,A.workItemRoleName,A.workItemRoleId,"Turn"),status:B,statusLabel:ff(P),columnId:P,updatedAt:A.updatedAt}}),R=O[O.length-1],D=QH(O.map(A=>A.status)),I=sy(D),L=N[0],M=oy(L.workItemRoleName,L.workItemRoleId,L.assigneeIds[0],Dg(L),L.title,"Agent");S.push({roleKey:j,executionTurnId:R.executionTurnId,title:M,status:D,statusLabel:ff(I),executionAgent:eF(L.selectedExecutionAgent??L.preferredAgent),roleName:L.workItemRoleName,updatedAt:Math.max(...N.map(A=>A.updatedAt)),turns:O})}return S},[i,d]),g=C.useMemo(()=>h.length>0?h:r?[]:p,[r,h,p]),x=C.useMemo(()=>g.length>0?g.map(b=>({projectionId:b.roleKey,title:b.title,roleName:b.roleName,status:b.status,executionTurnId:b.executionTurnId})):r?[]:c,[r,g,c]),v=r&&g.length===0;return!r&&e.length===0&&x.length===0&&g.length===0?null:u.jsxs("div",{className:"wi-progress-card",children:[u.jsxs("div",{className:"wi-progress-header",children:[u.jsx(Mm,{}),u.jsx("span",{children:"Execution Progress"})]}),x.length>0&&u.jsx("div",{className:"wi-progress-pipeline",children:x.map((b,k)=>u.jsxs("div",{className:"wi-projection-group",children:[u.jsxs("button",{type:"button",className:`wi-projection-chip wi-projection-${b.status}`,onClick:()=>o?.(b.executionTurnId||""),title:`Open Runtime Session${b.roleName?`: ${b.title} (${b.roleName})`:`: ${b.title}`}`,children:[u.jsx("span",{className:"wi-projection-label",children:b.title}),tF(b.status)]}),k<x.length-1&&u.jsx("span",{className:"wi-projection-connector",children:"→"})]},b.projectionId))}),v&&u.jsx("div",{className:"wi-progress-pipeline wi-progress-pipeline-empty",role:"status",children:"Preparing company roles…"})]})}function oF({refs:e,onImageClick:t}){if(!e||e.length===0)return null;const n=e.filter(c=>c.mime_type?.startsWith("image/")),i=e.filter(c=>c.mime_type?.startsWith("video/")),r=e.filter(c=>!c.mime_type?.startsWith("image/")&&!c.mime_type?.startsWith("video/")),o=n.length===1?"":(n.length<=3," cols-2"),a=i.length===1?"":(i.length<=3," cols-2");return u.jsxs("div",{className:"msg-attachments",children:[n.length>0&&u.jsx("div",{className:`msg-attachment-grid${o}`,children:n.map(c=>{const d=`/api/attachments/${c.attachment_id}/${c.filename}`;return u.jsx("img",{className:"msg-attachment-image",src:d,alt:c.filename,loading:"lazy",onClick:()=>t?.(d)},c.attachment_id)})}),i.length>0&&u.jsx("div",{className:`msg-attachment-grid${a}`,children:i.map(c=>{const d=`/api/attachments/${c.attachment_id}/${c.filename}`;return u.jsx("video",{className:"msg-attachment-video",src:d,controls:!0,preload:"metadata",playsInline:!0},c.attachment_id)})}),r.length>0&&u.jsx("div",{className:"msg-attachment-files",children:r.map(c=>u.jsxs("a",{className:"msg-attachment-file-chip",href:`/api/attachments/${c.attachment_id}/${c.filename}`,download:!0,title:c.filename,children:["📎 ",c.filename,u.jsx("span",{className:"msg-attachment-file-size",children:c.size_bytes<1024?`${c.size_bytes}B`:c.size_bytes<1048576?`${(c.size_bytes/1024).toFixed(0)}KB`:`${(c.size_bytes/1048576).toFixed(1)}MB`})]},c.attachment_id))})]})}const Zw=new WeakMap;function ay(e){if(!e||typeof e!="object")return"";const t=Zw.get(e);if(t!==void 0)return t;const n=JSON.stringify(e)??"";return Zw.set(e,n),n}function aF(e){if(e.kind==="message"){const{msg:n}=e;return[e.kind,e.id,e.timestamp,n.sender,n.senderName,n.senderDeleted,n.content,n.replyToId,ay(n.mentions),ay(n.metadata)]}if(e.kind==="progress"){const{entry:n}=e;return[e.kind,e.id,e.timestamp,n.type,n.summary,n.detail,n.turnId,n.itemId,n.streamId,n.toolCallId,n.permissionGroupKey,n.seq,n.executionMode]}if(e.kind==="draft")return[e.kind,e.id,e.timestamp,e.text,e.iteration];const t=[e.kind,e.id,e.timestamp];for(const{msg:n,classification:i}of e.events)t.push(n.id,n.timestamp,n.content,ay(n.metadata),i.kind,i.label,i.summary,i.tone);return t}function lF(e,t){return!e||e.length!==t.length?!1:t.every((n,i)=>{const r=e[i];return r.length===n.length&&n.every((o,a)=>o===r[a])})}const Qw=["#F59E0B","#10B981","#3B82F6","#8B5CF6","#EC4899","#06B6D4","#F97316","#6366F1"],Jw=new Map;function EI(e){const t=Jw.get(e);if(t)return t;let n=0;for(let r=0;r<e.length;r++)n=n*31+e.charCodeAt(r)|0;const i=Qw[Math.abs(n)%Qw.length];return Jw.set(e,i),i}const cF=/^\[Company:([^\]]+)\]\s*(.*)$/;function uF(e){const t=cF.exec(e);if(!t)return null;const n=t[1],i=t[2].trim(),r=i.toLowerCase(),o=n.replace(/_/g," ").replace(/\b\w/g,d=>d.toUpperCase());let a="●",c="active";return r.includes("gate passed")||r.includes("approved")||r.includes("completed")?(a="✓",c="passed"):r.includes("rejected")||r.includes("reworking")?(a="↻",c="rejected"):r.includes("failed")||r.includes("timed out")?(a="✗",c="failed"):r.includes("awaiting")&&(a="⏳",c="waiting"),{projectionId:n,workItemName:o,action:i,icon:a,statusClass:c}}const dF={session:{icon:u.jsx(C4,{}),title:"New Conversation",hint:"Send a message to start working with your OPC system"},activity:{icon:u.jsx(Qj,{}),title:"Activity Feed",hint:"Agent activity across all sessions will appear here."},secretary:{icon:u.jsx(gu,{}),title:"Secretary",hint:"Manage policies, rules, and preferences for your agents."}},fF=5*6e4,mF=200,ly=200,pF=2;function Zo(e){return e.scrollHeight-e.scrollTop-e.clientHeight<=pF}function eC(e){return!String(e.id??"").startsWith("msg-")}function xo(e){return Dv(e)}function hF(e){const t=xo(e);return t.startsWith("turn:assistant:")?t.slice(15):""}function jo(e){return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1})}function Os(e){return new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}async function gF(e){if(typeof navigator<"u"&&navigator.clipboard?.writeText)try{return await navigator.clipboard.writeText(e),!0}catch{}if(typeof document>"u"||!document.body)return!1;const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="0",t.style.left="-9999px",t.style.opacity="0",document.body.appendChild(t);try{return t.focus(),t.select(),t.setSelectionRange(0,t.value.length),document.execCommand("copy")}catch{return!1}finally{document.body.removeChild(t)}}function yF(e){return String(e.metadata?.transcript_kind??"").trim()==="runtime_v2_user_turn"}function du(e){return e.replace(/\s+/g," ").trim()}function xF(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const i=t.indexOf(": ");if(i<8||i>160)return t;const r=t.slice(0,i).replace(/\*/g,"").trim(),o=t.slice(i+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(r)||/^(https?|file)$/i.test(r)?t:o}function vF(e){const t=String(e.metadata?.transcript_kind??e.metadata?.kind??"").trim();return!!(["runtime_v2_assistant","runtime_v2_company_assistant","top_level_reply","company_role_result","company_role_result_retry","child_task_result","child_task_result_retry","child_result"].includes(t)||String(e.metadata?.kind??"").trim()==="worker_notification")}function tC(e){const t=String(e||"").trim();if(!t)return null;try{const n=JSON.parse(t);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}function bF(e){const t=String(e||"").trim();if(!t)return null;if(t.startsWith("{")&&t.endsWith("}")){const c=tC(t);return c?{obj:c}:null}const n=t.indexOf("{"),i=t.lastIndexOf("}");if(n<=0||i<=n)return null;const o=t.slice(0,n).trim().replace(/\*/g,"").replace(/:\s*$/,"").trim();if(!/\b(report|review)\b/i.test(o))return null;const a=tC(t.slice(n,i+1));return a?{obj:a,title:o||void 0}:null}function gl(e){return typeof e=="string"?e.trim():""}function nC(e,t=4){if(!Array.isArray(e))return[];const n=[];for(const i of e){const r=typeof i=="string"?i.trim():i&&typeof i=="object"&&"summary"in i?gl(i.summary):"";if(r&&n.push(r),n.length>=t)break}return n}function _F(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const i=n,r=gl(i.path),o=gl(i.name)||r.split("/").filter(Boolean).pop()||"Artifact";t.push({name:o,path:r,status:gl(i.status)||void 0})}return t}function kF(e){if(!Array.isArray(e))return;const t=e.filter(i=>i&&typeof i=="object").length;return t?`${e.filter(i=>i.met===!0).length}/${t} acceptance checks met`:void 0}function NI(e){const t=bF(e);if(!t)return null;const{obj:n,title:i}=t,r=gl(n.summary),o=gl(n.review_verdict),a=_F(n.deliverables),c=nC(n.risks),d=nC(n.next_actions),m=kF(n.acceptance_status);return!r&&!o&&a.length===0&&!m?null:{kind:o?"review":a.length>0||m?"report":"update",title:i,summary:r,verdict:o||void 0,deliverables:a,risks:c,nextActions:d,acceptanceSummary:m}}const SF=Nt.memo(function({entry:t,showDate:n,dateStr:i,compact:r=!1}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:`msg-row agent msg-row-inline-progress${r?" compact":""}`,children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(bl,{})}),u.jsx("div",{className:"msg-body msg-inline-progress-body",children:u.jsx("div",{className:"msg-inline-progress-shell",children:u.jsx(yN,{entry:t})})})]})]})}),wF=Nt.memo(function({msg:t,showDate:n,dateStr:i}){const r=uF(t.content);return r?u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:`work-item-divider work-item-divider-${r.statusClass}`,children:[u.jsx("div",{className:"work-item-divider-line"}),u.jsxs("span",{className:"work-item-divider-label",children:[u.jsx("span",{className:"work-item-divider-icon",children:r.icon}),r.workItemName,u.jsx("span",{className:"work-item-divider-action",children:r.action})]}),u.jsx("div",{className:"work-item-divider-line"})]})]}):null}),CF=Nt.memo(function({msg:t,showDate:n,dateStr:i}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsx("div",{className:"msg-system",children:u.jsx("span",{children:t.content})})]})}),jF=Nt.memo(function({msg:t,showDate:n,dateStr:i}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:"msg-row agent msg-row-context",children:[u.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-context",children:u.jsx(gu,{})}),u.jsx("div",{className:"msg-body",children:u.jsxs("div",{className:"msg-content-agent-card msg-context-card",children:[u.jsx("div",{className:"msg-context-label",children:"Execution Context"}),u.jsx(bi,{content:t.content})]})})]})]})}),EF=Nt.memo(function({text:t,timestamp:n,iteration:i,showDate:r,dateStr:o}){return u.jsxs("div",{children:[r&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:o})}),u.jsxs("div",{className:"msg-row agent msg-row-draft",children:[u.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-draft",children:u.jsx(bl,{})}),u.jsxs("div",{className:"msg-body",children:[u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:"msg-sender",children:"Live Reply"}),u.jsx("span",{className:"msg-time",title:Os(n),children:jo(n)})]}),u.jsxs("div",{className:"msg-content-agent-card msg-draft-card",children:[i?u.jsxs("div",{className:"msg-draft-label",children:["Turn ",i]}):null,u.jsx(bi,{content:t,collapseMode:"never"})]})]})]})]})}),NF=Nt.memo(function({msg:t,showDate:n,dateStr:i,isGrouped:r,isCopied:o,onCopy:a,onImageClick:c,renderUserMarkdown:d}){return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsx("div",{className:`msg-row user${r?" grouped":""}`,children:u.jsxs("div",{className:"msg-body msg-body-user",children:[u.jsx("div",{className:"msg-content-user",children:d?u.jsx(bi,{content:t.content,className:"msg-content-user-markdown"}):t.content}),u.jsx(oF,{refs:t.metadata?.attachment_refs,onImageClick:c}),u.jsxs("div",{className:"msg-meta-user",children:[u.jsx("span",{className:"msg-time",title:Os(t.timestamp),children:jo(t.timestamp)}),u.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy",children:o?u.jsx(Fl,{}):u.jsx(Am,{})})]})]})})]})});function II(e){const t=String(e||"").trim();if(!t)return null;const n=t.match(/^\[Delegating to ([^\]]+)\]/);if(n){const d=n[1].trim(),m=t.match(/task=([^|]+?)(?:\||$)/),h=m?m[1].trim():"";return{kind:"delegation",label:`Delegating to ${d}`,summary:h,tone:"info"}}if(/^\[External resume\]/i.test(t)){const d=t.match(/codex:[a-z0-9-]+:([a-f0-9-]+)/i);return{kind:"external_resume",label:"External resume",summary:d?`Restored session ${d[1].slice(0,8)}…`:"Resumed prior session",tone:"info"}}const i=t.match(/^\[External inbox\]\s*(.+)$/i);if(i)return{kind:"external_status",label:"External inbox",summary:du(i[1]),tone:"info"};const r=t.match(/^\[External status\]\s*(.+)$/i);if(r)return{kind:"external_status",label:"External status",summary:r[1].split(/\(|;/)[0].trim()||r[1].trim(),tone:"info"};if(/^\[External error\]/i.test(t)||/^\[External failure\]/i.test(t))return{kind:"external_error",label:"External error",summary:t.replace(/^\[[^\]]+\]\s*/,"").split(` +`)[0].slice(0,140),tone:"danger"};const o=t.match(/^\[Company:([^\]]+)\]\s*(.+)$/);if(o){const d=o[1].split("::"),m=d[0]||"company",h=o[2].trim(),p=h.toLowerCase(),g=p.includes("completed")||p.includes("done")?"success":p.includes("blocked")||p.includes("failed")?"warning":"info";return{kind:"company_event",label:`${m.toUpperCase()} · ${d[1]??""}`.replace(/ · $/,""),summary:h,tone:g}}const a=t.match(/^(Review needed|Status digest|Blocked|Completion):\s*(.+)$/i);if(a){const d=a[1].replace(/\b\w/g,h=>h.toUpperCase()),m=du(a[2]);return{kind:"company_event",label:d,summary:m,tone:/^Blocked$/i.test(a[1])?"warning":"info"}}const c=t.match(/^NO_DELEGATION_JUSTIFICATION:\s*(.+)$/i);return c?{kind:"company_event",label:"Delegation check",summary:du(c[1]).slice(0,180),tone:"info"}:null}function IF(e,t){const{isCompanyRuntime:n,detailMode:i}=t;if(!n||i==="full"||Sl(e.metadata))return null;const r=II(e.content);if(!r)return null;const o=e.sender==="system"||e.metadata?.type==="system",a=r.kind==="company_event"||e.content.startsWith("[Company:");return!o&&!a?null:{msg:e,classification:r}}function TF(e,t={}){const{isCompanyRuntime:n=!1,detailMode:i="summary"}=t,r=[];let o=[],a=0;const c=new Set,d=new Set,m=()=>{if(o.length===0)return;const h=o[0].msg;r.push({kind:"ops-bundle",id:`ops:${xo(h)}`,timestamp:h.timestamp,events:o,sortOrder:a}),o=[]};return e.forEach((h,p)=>{const g=p*2+1,x=IF(h,{isCompanyRuntime:n,detailMode:i});if(x){o.length===0&&(a=g),o.push(x);return}const v=i==="summary"?NI(h.content):null;if(v){const b=[h.sender,Math.round(h.timestamp/1e3),v.kind,du(v.summary||v.acceptanceSummary||"").slice(0,500),v.verdict??"",v.deliverables.map(k=>`${k.name}:${k.path}`).join("|").slice(0,800)].join("");if(c.has(b))return;c.add(b)}if(i==="summary"&&!Sl(h.metadata)){const b=du(xF(h.content)).slice(0,1200);if(b){const k=vF(h)?["result",b].join(""):[h.sender,Math.round(h.timestamp/1e3),b].join("");if(d.has(k))return;d.add(k)}}m(),r.push({kind:"message",id:xo(h),timestamp:h.timestamp,msg:h,sortOrder:g})}),m(),r}const RF=Nt.memo(function({msg:t,showDate:n,dateStr:i,classification:r}){const[o,a]=C.useState(!1),c=t.content.trim()!==`[${r.label}] ${r.summary}`.trim()&&t.content.trim().length>r.summary.length+4;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:`msg-ops-row msg-ops-tone-${r.tone}${o?" expanded":""}`,onClick:c?()=>a(d=>!d):void 0,role:c?"button":void 0,tabIndex:c?0:-1,children:[u.jsx("span",{className:"msg-ops-dot","aria-hidden":"true"}),u.jsx("span",{className:"msg-ops-label",children:r.label}),r.summary&&u.jsx("span",{className:"msg-ops-summary",title:r.summary,children:r.summary}),u.jsx("span",{className:"msg-ops-time",title:Os(t.timestamp),children:jo(t.timestamp)}),c&&u.jsx("span",{className:`msg-ops-chevron${o?" open":""}`,"aria-hidden":"true",children:u.jsx(ss,{down:o})})]}),c&&o&&u.jsx("div",{className:"msg-ops-details",children:u.jsx("pre",{className:"msg-ops-details-pre",children:t.content})})]})}),AF=Nt.memo(function({events:t,showDate:n,dateStr:i}){const[r,o]=C.useState(!1);if(t.length===0)return null;const a=t[0].msg,c=t[t.length-1].msg,d=t.reduce((p,g)=>{const x=g.classification.kind==="company_event"?"company":g.classification.kind.startsWith("external")?"runtime":"delegation";return p[x]=(p[x]??0)+1,p},{}),m=Object.entries(d).map(([p,g])=>`${g} ${p}`).join(" · "),h=`${t.length} technical event${t.length===1?"":"s"} hidden`;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("button",{type:"button",className:`msg-ops-bundle${r?" expanded":""}`,onClick:()=>o(p=>!p),title:`${Os(a.timestamp)} - ${Os(c.timestamp)}`,children:[u.jsx("span",{className:"msg-ops-bundle-dot"}),u.jsx("span",{className:"msg-ops-bundle-title",children:h}),u.jsx("span",{className:"msg-ops-bundle-summary",children:m}),u.jsx("span",{className:"msg-ops-bundle-time",children:jo(a.timestamp)}),u.jsx("span",{className:"msg-ops-bundle-chevron",children:u.jsx(ss,{down:r})})]}),r&&u.jsx("div",{className:"msg-ops-bundle-details",children:t.map(({msg:p,classification:g})=>u.jsxs("div",{className:`msg-ops-bundle-event msg-ops-tone-${g.tone}`,children:[u.jsx("span",{className:"msg-ops-dot"}),u.jsx("span",{className:"msg-ops-label",children:g.label}),u.jsx("span",{className:"msg-ops-summary",children:g.summary}),u.jsx("span",{className:"msg-ops-time",title:Os(p.timestamp),children:jo(p.timestamp)})]},p.id))})]})});function MF(e){return e.kind==="review"?`Review · ${e.verdict?e.verdict.replace(/_/g," "):"review"}`:e.kind==="report"?"Report":"Update"}const DF=Nt.memo(function({msg:t,payload:n,showDate:i,dateStr:r,isCopied:o,onCopy:a}){const c=EI(t.sender==="system"?t.senderName||"OPC":t.sender),d=t.senderDeleted?"[Deleted]":t.senderName,m=MF(n),h=n.summary||n.acceptanceSummary||m;return u.jsxs("div",{children:[i&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:r})}),u.jsxs("div",{className:"msg-row agent msg-row-project-update",children:[u.jsx("div",{className:"msg-avatar agent-avatar",style:{background:c},children:d.charAt(0).toUpperCase()}),u.jsxs("div",{className:"msg-body",children:[u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:"msg-sender",style:{color:c},children:d}),u.jsx("span",{className:"msg-time",title:Os(t.timestamp),children:jo(t.timestamp)})]}),u.jsxs("div",{className:`msg-project-update-card msg-project-update-${n.kind}`,children:[u.jsxs("div",{className:"msg-project-update-head",children:[u.jsx("span",{className:"msg-project-update-label",children:m}),n.acceptanceSummary&&u.jsx("span",{className:"msg-project-update-chip",children:n.acceptanceSummary})]}),n.title&&u.jsx("div",{className:"msg-project-update-title",children:n.title}),u.jsx(bi,{content:h,className:"msg-project-update-summary"}),n.deliverables.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Outputs"}),u.jsx("div",{className:"msg-project-update-artifacts",children:n.deliverables.slice(0,6).map((p,g)=>u.jsxs("div",{className:"msg-project-update-artifact",children:[u.jsx("span",{className:"msg-project-update-artifact-name",children:p.name}),p.status&&u.jsx("span",{className:"msg-project-update-artifact-status",children:p.status}),p.path&&u.jsx("code",{className:"msg-project-update-artifact-path",children:p.path})]},`${p.path||p.name}-${g}`))})]}),(n.risks.length>0||n.nextActions.length>0)&&u.jsxs("div",{className:"msg-project-update-grid",children:[n.risks.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Caveats"}),u.jsx("ul",{className:"msg-project-update-list",children:n.risks.map((p,g)=>u.jsx("li",{children:p},`risk-${g}`))})]}),n.nextActions.length>0&&u.jsxs("div",{className:"msg-project-update-section",children:[u.jsx("div",{className:"msg-project-update-section-label",children:"Next"}),u.jsx("ul",{className:"msg-project-update-list",children:n.nextActions.map((p,g)=>u.jsx("li",{children:p},`next-${g}`))})]})]}),u.jsx("div",{className:"msg-card-actions",children:u.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy raw update",children:o?u.jsxs(u.Fragment,{children:[u.jsx(Fl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Am,{})," ",u.jsx("span",{children:"Copy raw"})]})})})]})]})]})]})}),OF=Nt.memo(function({msg:t,showDate:n,dateStr:i,isGrouped:r,isCopied:o,isCheckpointResponded:a,suppressCheckpointPanel:c,keepExpanded:d,onCopy:m,onSend:h}){const p=!!t.senderDeleted,g=p?"[Deleted]":t.senderName,x=EI(t.sender==="system"?t.senderName||"OPC":t.sender),v=t.channelId.startsWith("session:")?t.channelId.slice(8):t.metadata?.taskId??t.metadata?.task_id,b=String(t.metadata?.checkpoint_type??"").trim(),k=iE(t.metadata),w=Sl(t.metadata)&&!c;return u.jsxs("div",{children:[n&&u.jsx("div",{className:"msg-date-sep",children:u.jsx("span",{children:i})}),u.jsxs("div",{className:`msg-row agent${r?" grouped":""}${p?" deleted-sender":""}`,children:[r?u.jsx("div",{className:"msg-avatar-spacer"}):u.jsx("div",{className:"msg-avatar agent-avatar",style:{background:x},children:g.charAt(0).toUpperCase()}),u.jsxs("div",{className:"msg-body",children:[!r&&u.jsxs("div",{className:"msg-agent-header",children:[u.jsx("span",{className:`msg-sender${p?" deleted":""}`,style:{color:x},children:g}),u.jsx("span",{className:"msg-time",title:Os(t.timestamp),children:jo(t.timestamp)})]}),t.replyToId&&u.jsx("div",{className:"msg-reply-indicator",children:"Replying to previous message"}),w?u.jsxs(u.Fragment,{children:[b==="company_recruitment_confirmation"&&u.jsx(MH,{meta:t.metadata,onReply:(S,j)=>h?.(S,v,j),responded:a}),b==="company_staffing_selection"&&u.jsx($H,{meta:t.metadata,onReply:(S,j)=>h?.(S,v,j),responded:a}),b==="company_work_item_gate"&&u.jsx(Yw,{meta:t.metadata,onReply:S=>h?.(S,v,k),responded:a}),b==="company_delivery_feedback"&&u.jsx(YH,{meta:t.metadata,onReply:(S,j)=>h?.(S,v,j??k),responded:a}),b==="company_reorg_pending"&&u.jsx(FH,{meta:t.metadata,onReply:S=>h?.(S,v,k),responded:a}),b==="human_escalation"&&u.jsx(Yw,{meta:t.metadata,onReply:S=>h?.(S,v,k),responded:a}),b==="task_user_input"&&u.jsx(ZH,{meta:t.metadata,onReply:(S,j)=>h?.(S,v,{...k,...j}),responded:a})]}):u.jsxs("div",{className:"msg-content-agent-card",style:{borderLeftColor:x},children:[u.jsx(bi,{content:t.content,collapseMode:d?"never":"auto"}),u.jsxs("div",{className:"msg-card-actions",children:[u.jsx("button",{className:"msg-action-btn",onClick:()=>m(t.id,t.content),title:"Copy message",children:o?u.jsxs(u.Fragment,{children:[u.jsx(Fl,{})," ",u.jsx("span",{children:"Copied"})]}):u.jsxs(u.Fragment,{children:[u.jsx(Am,{})," ",u.jsx("span",{children:"Copy"})]})}),r&&u.jsx("span",{className:"msg-time msg-time-inline",title:Os(t.timestamp),children:jo(t.timestamp)})]})]})]})]})]})}),al=Nt.memo(function({messages:t,channelName:n,viewKind:i="session",detailMode:r="summary",agentStatus:o,currentTool:a,toolElapsedMs:c,lastToolSummary:d,progressLog:m,draftAssistantText:h,draftUpdatedAt:p,draftIteration:g,draftTurnId:x,isCompanyRuntime:v,workItemLog:b,childSessions:k,roleWorkItems:w,executorRoleWorkItems:S,onSend:j,onWorkItemClick:N,onMarkRead:O,hasOlderHistory:R=!1,totalMessageCount:D,onLoadOlderHistory:I,loadingOlderHistory:L=!1,scrollPolicy:M="follow",scrollScope:A,showWorkItemRuntimeCard:B=!0,showRuntimeProgress:W=!0,renderUserMarkdown:P=!1}){const G=A??`${i}:${r}:${n}`,$=C.useRef(null),q=C.useRef(null),[Y,Q]=C.useState(null),[V,U]=C.useState(null),Z=M==="follow"?"following":"browsing",[F,K]=C.useState(Z),[ee,te]=C.useState(0),[se,ae]=C.useState(!1),ue=C.useRef(Z),ie=C.useRef(M),we=C.useRef(M!=="manual"),je=C.useRef(!1),Te=C.useRef(null),Ge=C.useRef(0),Ze=C.useRef(!1),Ye=C.useRef("none"),mt=C.useRef(null),Ft=C.useRef(0),Mt=C.useRef(new Set),jt=C.useRef(null),he=C.useRef(null),ze=C.useRef(O),ot=C.useRef(0),Ve=C.useRef(0),lt=C.useRef(null),me=C.useRef({active:!1,revision:0}),be=C.useRef(!1),Ae=C.useRef(null),Be=C.useRef(!1),We=C.useRef(null),Lt=C.useRef(null),pt=C.useRef([]),ke=C.useRef({scope:G,assignments:new Map}),qe=C.useRef({scope:G,owners:new Map}),Qe=C.useRef({scope:G,keys:new Set});ze.current=O;const He=(b?.length??0)+(k?.length??0),Vt=C.useMemo(()=>{const ce=t.filter(Se=>Gf(Se,r));return v?ce.filter(Se=>!(Se.metadata?.type==="system"&&Se.content.startsWith("[Company:")||!W&&Se.content.startsWith("[Company:"))):ce},[r,v,t,W]),ei=C.useMemo(()=>Ov(Vt),[Vt]),vt=C.useMemo(()=>i==="session"&&j?Vt.filter(ce=>ei.pendingMessageIds.has(ce.id)):[],[ei.pendingMessageIds,Vt,j,i]),bt=Vt,vn=C.useMemo(()=>{const ce=new Set;for(const Se of m??[]){if(Se.type!=="thinking")continue;const Le=String(Se.turnId??"").trim();Le&&ce.add(Le)}return ce},[m]),On=C.useMemo(()=>{const ce=[];for(const Se of bt){const Le=String(Se.metadata?.runtime_thinking??"").trim();if(!Le)continue;const Ue=String(Se.metadata?.canonical_turn_id??Se.metadata?.turn_id??"").trim();Ue&&vn.has(Ue)||ce.push({type:"thinking",summary:"Thinking",detail:Le,timestamp:Math.max(0,Se.timestamp-1),turnId:Ue||void 0,itemId:Ue?`${Ue}:thinking`:`thinking:${Se.id}`,streamId:Ue?`${Ue}:thinking`:`thinking:${Se.id}`,executionMode:String(Se.metadata?.execution_mode??"").trim()||void 0})}return ce},[vn,bt]),wt=C.useMemo(()=>W?[...(m??[]).filter(ce=>KS.has(ce.type)),...On].sort((ce,Se)=>ce.timestamp-Se.timestamp):[],[m,W,On]),zt=C.useMemo(()=>W?(m??[]).filter(ce=>!KS.has(ce.type)):[],[m,W]),Hn=C.useMemo(()=>W?r==="full"?m??[]:wt:[],[r,wt,m,W]),Me=zt,ht=C.useMemo(()=>{const ce=new Set;for(const Se of bt){const Le=hF(Se);Le&&ce.add(Le)}return ce},[bt]),gt=C.useMemo(()=>{const ce=String(h??"").trim(),Se=String(x??"").trim();return!ce||Se&&ht.has(Se)?null:{kind:"draft",id:Se?`turn:assistant:${Se}`:"draft:active",timestamp:p??bt[bt.length-1]?.timestamp??0,text:ce,iteration:g,sortOrder:Number.MAX_SAFE_INTEGER}},[ht,h,g,x,p,bt]);C.useLayoutEffect(()=>{Qe.current.scope!==G&&(Qe.current={scope:G,keys:new Set}),gt&&Qe.current.keys.add(gt.id)},[gt,G]);const fi=!!o&&o!=="idle",Vn=Me.length>0,pn=W&&r!=="full"&&(fi||Vn),Fn=C.useMemo(()=>{const ce=[...TF(bt,{isCompanyRuntime:v,detailMode:r}),...Hn.map((nt,hn)=>({kind:"progress",id:`progress:${gN(nt)}`,timestamp:nt.timestamp,entry:nt,sortOrder:hn*2}))].sort((nt,hn)=>nt.timestamp-hn.timestamp||nt.sortOrder-hn.sortOrder),Se=qe.current.scope===G?qe.current.owners:new Map,Le=new Map;ce.forEach((nt,hn)=>{if(nt.kind!=="message")return;const ii=tE(nt.msg);if(!ii)return;const qn=Se.get(ii)??nt.id;Le.set(ii,qn),qn!==nt.id&&(ce[hn]={...nt,id:qn})});const Ue=new Map;ce.forEach((nt,hn)=>{if(nt.kind!=="message")return;const ii=`${nt.msg.channelId}\0${nt.msg.id}`,qn=Ue.get(nt.id)??[];qn.push({index:hn,identity:ii}),Ue.set(nt.id,qn)});const _t=ke.current.scope===G?ke.current.assignments:new Map,ct=new Map;for(const[nt,hn]of Ue){const ii=_t.get(nt),qn=new Map,Ct=new Set;for(const tn of hn){const gn=ii?.get(tn.identity);!gn||Ct.has(gn)||(qn.set(tn.identity,gn),Ct.add(gn))}for(const tn of hn){if(qn.has(tn.identity))continue;const gn=Ct.has(nt)?`${nt}:message:${encodeURIComponent(tn.identity)}`:nt;qn.set(tn.identity,gn),Ct.add(gn)}ct.set(nt,qn);for(const tn of hn){const gn=qn.get(tn.identity);if(!gn||gn===nt)continue;const Ui=ce[tn.index];Ui.kind==="message"&&(ce[tn.index]={...Ui,id:gn})}}return gt&&ce.push(gt),{items:ce,messageKeyAssignments:ct,resultKeyOwners:Le}},[r,gt,v,G,bt,Hn]),tt=Fn.items,mi=C.useMemo(()=>tt.map(aF),[tt]);C.useLayoutEffect(()=>{ke.current={scope:G,assignments:Fn.messageKeyAssignments},qe.current={scope:G,owners:Fn.resultKeyOwners}},[G,Fn.messageKeyAssignments,Fn.resultKeyOwners]);const Si=C.useRef(bt);Si.current=bt,ot.current=bt.reduce((ce,Se)=>Math.max(ce,Se.timestamp),0);const[Rn,wn]=C.useState({scope:G,startKey:null}),$t=Rn.scope===G?Rn.startKey:null,Cn=Math.max(0,tt.length-mF),Xt=$t?tt.findIndex(ce=>ce.id===$t):-1;let Re=-1;if($t&&Xt<0){const ce=pt.current,Se=ce.indexOf($t),Le=new Map(tt.map((Ue,_t)=>[Ue.id,_t]));for(let Ue=Math.max(0,Se);Ue<ce.length;Ue+=1){const _t=Le.get(ce[Ue]);if(_t!==void 0){Re=_t;break}}if(Re<0)for(let Ue=Se-1;Ue>=0;Ue-=1){const _t=Le.get(ce[Ue]);if(_t!==void 0){Re=_t;break}}}const kt=Xt>=0?Xt:Re>=0?Re:Cn,bn=C.useMemo(()=>tt.slice(kt),[tt,kt]),wi=kt,In=C.useRef(tt);In.current=tt,C.useLayoutEffect(()=>{const ce=tt[kt]?.id??null;Rn.scope===G&&Rn.startKey===ce||(Rn.scope===G&&Rn.startKey&&(Be.current=!0),wn({scope:G,startKey:ce}))},[G,tt,kt,Rn.scope,Rn.startKey]),C.useLayoutEffect(()=>{const ce=Ae.current;if(!ce||ce.scope!==G)return;const Se=tt.findIndex(Ue=>Ue.id===ce.startKey);if(Se<=ce.beforeIndex)return;const Le=Math.max(0,Se-ly);Ae.current=null,Be.current=!0,wn({scope:G,startKey:tt[Le]?.id??null})},[G,tt]),C.useLayoutEffect(()=>{pt.current=tt.map(ce=>ce.id)},[tt]);const It=C.useMemo(()=>{let ce="";return bn.map((Se,Le)=>{const Ue=new Date(Se.timestamp).toLocaleDateString(),_t=Ue!==ce;_t&&(ce=Ue);const ct=Le>0?bn[Le-1]:null,nt=Se.kind==="message"&&ct?.kind==="message"&&!_t&&ct.msg.sender===Se.msg.sender&&ct.msg.senderName===Se.msg.senderName&&Se.msg.metadata?.type!=="system"&&ct.msg.metadata?.type!=="system"&&!Se.msg.metadata?.is_work_item_event&&!ct.msg.metadata?.is_work_item_event&&Se.msg.timestamp-ct.msg.timestamp<fF;return{item:Se,showDate:_t,dateStr:Ue,isGrouped:nt}})},[bn]),yi=!!(r!=="full"&&B&&v&&He>0),Zn=tt.length>0||yi||pn;be.current=Zn;const ti=C.useCallback(ce=>{const Se=q.current?.querySelectorAll("[data-timeline-key]");if(!Se)return null;for(const Le of Se)if(Le.dataset.timelineKey===ce)return Le;return null},[]),ln=C.useCallback(ce=>{je.current=ce,ae(Se=>Se===ce?Se:ce)},[]),Kt=C.useCallback(()=>{const ce=he.current,Se=ze.current;!ce||!Se||jt.current===ce||(jt.current=ce,Se())},[]),Tt=C.useCallback(()=>{const ce=$.current,Se=q.current;if(!ce||!Se)return;const Le=ce.getBoundingClientRect(),Ue=Se.querySelectorAll("[data-timeline-key]");for(const _t of Ue){const ct=_t.getBoundingClientRect();if(!(ct.bottom<=Le.top+.5)){Te.current={key:_t.dataset.timelineKey??"",viewportOffset:ct.top-Le.top};return}}Te.current=null},[]),Zt=C.useCallback(()=>{const ce=$.current,Se=Te.current;if(!ce||!Se?.key)return;const Le=ti(Se.key);if(!Le){Tt();return}const Ue=Le.getBoundingClientRect().top-ce.getBoundingClientRect().top-Se.viewportOffset;Math.abs(Ue)>.5&&(ce.scrollTop+=Ue),Se.viewportOffset=Le.getBoundingClientRect().top-ce.getBoundingClientRect().top,Ge.current=ce.scrollTop,ln(Zo(ce))},[Tt,ti,ln]),Un=C.useCallback(ce=>{ue.current=ce,K(Se=>Se===ce?Se:ce)},[]),dn=C.useCallback(()=>{me.current.active=!1,ue.current!=="browsing"&&(Ft.current=ot.current,te(0),Un("browsing")),Tt()},[Tt,Un]),Je=C.useCallback(()=>{const ce=$.current;if(!ce)return;const Se=Math.max(0,ce.scrollHeight-ce.clientHeight);Math.abs(ce.scrollTop-Se)>.5&&(ce.scrollTop=Se),Ge.current=ce.scrollTop,ln(Zo(ce))},[ln]),ni=C.useCallback(()=>{ie.current==="follow"&&(Un("following"),te(0),Te.current=null,Je(),Kt())},[Kt,Un,Je]),Dt=C.useCallback(()=>{if(ie.current==="follow"){ni();return}me.current.active=!1,Je(),Tt(),te(0),Kt()},[Tt,Kt,ni,Je]),Ot=C.useCallback(()=>{const ce=$.current;if(!ce||!be.current)return;if(ln(Zo(ce)),we.current){we.current=!1,ie.current==="initial-bottom"&&(me.current={active:!0,revision:Ve.current}),Je(),ie.current!=="follow"&&Un("browsing");return}const Se=me.current;if(ie.current==="initial-bottom"&&Se.active&&Se.revision===Ve.current){Je();return}if(ie.current==="follow"&&ue.current==="following"){Je();return}Be.current&&(Be.current=!1,Zt())},[Zt,Un,ln,Je]);C.useLayoutEffect(()=>{ie.current=M;const ce=M==="follow"?"following":"browsing";ue.current=ce,K(ce),we.current=M!=="manual",ln(!1),Te.current=null,Ae.current=null,Be.current=!1,We.current=null,Lt.current=null,me.current={active:!1,revision:Ve.current},Mt.current=new Set(Si.current.filter(eC).map(xo)),Ft.current=ot.current,jt.current=null,te(0)},[M,G,ln]),C.useLayoutEffect(()=>{const ce=lt.current;if(lF(ce,mi))return;lt.current=mi,Ve.current+=1;const Le=me.current;!Le.active||Le.revision===Ve.current||(Le.active=!1,Tt())},[Tt,mi]),C.useLayoutEffect(()=>{const ce=$.current,Se=q.current;if(!ce||!Se||(Lt.current={width:ce.clientWidth,height:ce.clientHeight},Ot(),typeof ResizeObserver>"u"))return;const Le=new ResizeObserver(Ue=>{if(Ue.find(ct=>ct.target===ce)){const ct=Lt.current,nt={width:ce.clientWidth,height:ce.clientHeight};ct&&(ct.width!==nt.width||ct.height!==nt.height)&&(Be.current=ue.current==="browsing"),Lt.current=nt}Ot()});return Le.observe(ce),Le.observe(Se),()=>Le.disconnect()},[Ot,M,G]),C.useEffect(()=>{const ce=$.current;if(!ce)return;Ge.current=ce.scrollTop;const Se=Ct=>{Ye.current=Ct.deltaY<0?"up":Ct.deltaY>0?"down":"none",Ct.deltaY<0&&ce.scrollTop>0&&dn(),Ct.deltaY>0&&Zo(ce)&&ni()},Le=()=>{Ze.current=!0},Ue=()=>{Ze.current=!1,Ye.current="none",ue.current==="browsing"&&Tt()},_t=Ct=>{mt.current=Ct.touches[0]?.clientY??null,Ze.current=!0},ct=Ct=>{const tn=Ct.touches[0]?.clientY,gn=mt.current;tn===void 0||gn===null||(tn>gn+1?(Ye.current="up",dn()):tn<gn-1&&(Ye.current="down"),mt.current=tn)},nt=()=>{mt.current=null,Ue()},hn=Ct=>{const tn=Ct.target;tn&&tn!==ce&&(tn.isContentEditable||["INPUT","TEXTAREA","SELECT","BUTTON"].includes(tn.tagName))||(["ArrowUp","PageUp","Home"].includes(Ct.key)||Ct.key===" "&&Ct.shiftKey?(Ye.current="up",dn()):(["ArrowDown","PageDown","End"].includes(Ct.key)||Ct.key===" ")&&(Ye.current="down",Ct.key==="End"&&Dt()))},ii=()=>{Ye.current="none"},qn=()=>{const Ct=Ge.current,tn=ce.scrollTop,gn=Zo(ce),Ui=je.current,Gi=Ze.current||Ye.current!=="none";tn<Ct-.5&&!gn?dn():Gi?(Ye.current==="up"?dn():gn&&(tn>Ct+.5||Ye.current==="down")&&ni(),ue.current==="browsing"&&Tt(),Ze.current||(Ye.current="none")):tn>Ct+.5&&gn?ni():ue.current==="browsing"&&Math.abs(tn-Ct)>.5&&Tt(),Ge.current=tn,ln(gn),!Ui&&gn&&(Gi||tn>Ct+.5)&&Kt()};return ce.addEventListener("wheel",Se,{passive:!0}),ce.addEventListener("pointerdown",Le),window.addEventListener("pointerup",Ue),window.addEventListener("pointercancel",Ue),window.addEventListener("blur",Ue),ce.addEventListener("touchstart",_t,{passive:!0}),ce.addEventListener("touchmove",ct,{passive:!0}),ce.addEventListener("touchend",nt,{passive:!0}),ce.addEventListener("touchcancel",nt,{passive:!0}),ce.addEventListener("keydown",hn),ce.addEventListener("keyup",ii),ce.addEventListener("scroll",qn,{passive:!0}),()=>{ce.removeEventListener("wheel",Se),ce.removeEventListener("pointerdown",Le),window.removeEventListener("pointerup",Ue),window.removeEventListener("pointercancel",Ue),window.removeEventListener("blur",Ue),ce.removeEventListener("touchstart",_t),ce.removeEventListener("touchmove",ct),ce.removeEventListener("touchend",nt),ce.removeEventListener("touchcancel",nt),ce.removeEventListener("keydown",hn),ce.removeEventListener("keyup",ii),ce.removeEventListener("scroll",qn)}},[Tt,dn,Kt,Dt,ni,ln]);const An=C.useMemo(()=>bt.filter(eC),[bt]),Gn=C.useMemo(()=>An.map(xo),[An]);C.useEffect(()=>{const ce=new Set(Gn);if(Mt.current.size===0){Mt.current=ce;return}if(ue.current==="browsing"){let Se=0;for(const Le of An){const Ue=xo(Le);!Mt.current.has(Ue)&&Le.timestamp>=Ft.current&&(Se+=1)}Se>0&&te(Le=>Le+Se)}else te(0);Mt.current=ce},[An,Gn]);const jn=An.reduce((ce,Se)=>!ce||Se.timestamp>ce.timestamp?Se:ce,void 0),Ln=jn?`${xo(jn)}:${jn.timestamp}`:null;he.current=Ln,C.useEffect(()=>{if(!Ln)return;const ce=$.current,Se=!!ce&&Zo(ce);ln(Se),!(ue.current!=="following"&&!Se)&&Kt()},[Ln,Kt,ln,F]);const xi=C.useCallback((ce,Se)=>{gF(Se).then(Le=>{Le&&(Q(ce),setTimeout(()=>Q(null),1500))})},[]),de=C.useCallback(async()=>{if(Tt(),Be.current=!0,kt>0){const ce=Math.max(0,kt-ly);wn({scope:G,startKey:tt[ce]?.id??null});return}!R||L||!I||(Ae.current=$t?{scope:G,startKey:$t,beforeIndex:kt}:null,await I(Vt[0]))},[Tt,$t,Vt,R,L,I,G,tt,kt]),ve=Dt,Pe=C.useCallback(ce=>{const Se=$.current,Le=ti(ce);if(!Se||!Le)return!1;const Ue=Se.getBoundingClientRect(),_t=Le.getBoundingClientRect();return Se.scrollTop+=_t.top-Ue.top-Math.max(0,(Se.clientHeight-_t.height)/2),Ge.current=Se.scrollTop,ln(Zo(Se)),Tt(),!0},[Tt,ti,ln]);C.useLayoutEffect(()=>{const ce=We.current;!ce||!Pe(ce)||(We.current=null)},[Pe,bn]);const ut=C.useCallback(()=>{const ce=vt[0];if(!ce)return;dn(),Be.current=!1;const Se=xo(ce);if(Pe(Se))return;const Le=tt.findIndex(_t=>_t.id===Se);if(Le<0)return;We.current=Se;const Ue=Math.max(0,Le-2);wn({scope:G,startKey:tt[Ue]?.id??Se})},[Pe,dn,vt,G,tt]),on=C.useCallback(ce=>{const{item:Se,showDate:Le,dateStr:Ue,isGrouped:_t}=ce;if(Se.kind==="progress")return u.jsx(SF,{entry:Se.entry,showDate:Le,dateStr:Ue,compact:r!=="full"});if(Se.kind==="draft")return u.jsx(EF,{text:Se.text,timestamp:Se.timestamp,iteration:Se.iteration,showDate:Le,dateStr:Ue});if(Se.kind==="ops-bundle")return u.jsx(AF,{events:Se.events,showDate:Le,dateStr:Ue});const{msg:ct}=Se,nt=Qe.current.scope===G&&Qe.current.keys.has(Se.id),hn=ct.metadata?.type==="system",ii=yF(ct),qn=!nt&&(!!ct.metadata?.is_work_item_event||ct.content.startsWith("[Company:")),Ct=Sl(ct.metadata),tn=ct.sender==="user",gn=!nt&&!tn&&!Ct?NI(ct.content):null;if(qn&&!Ct)return u.jsx(wF,{msg:ct,showDate:Le,dateStr:Ue});if(gn)return u.jsx(DF,{msg:ct,payload:gn,showDate:Le,dateStr:Ue,isCopied:Y===ct.id,onCopy:xi});if(ii&&!Ct)return u.jsx(jF,{msg:ct,showDate:Le,dateStr:Ue});if(hn&&!Ct)return u.jsx(CF,{msg:ct,showDate:Le,dateStr:Ue});if(tn)return u.jsx(NF,{msg:ct,showDate:Le,dateStr:Ue,isGrouped:_t,isCopied:Y===ct.id,onCopy:xi,onImageClick:U,renderUserMarkdown:P});if(ct.sender==="system"&&!Sl(ct.metadata)){const Ui=II(ct.content);if(Ui)return u.jsx(RF,{msg:ct,showDate:Le,dateStr:Ue,isGrouped:_t,classification:Ui})}return u.jsx(OF,{msg:ct,showDate:Le,dateStr:Ue,isGrouped:_t,isCopied:Y===ct.id,isCheckpointResponded:ei.respondedMessageIds.has(ct.id),suppressCheckpointPanel:ei.duplicateMessageIds.has(ct.id),keepExpanded:nt,onCopy:xi,onSend:j})},[ei,Y,xi,r,j,P,G]),Pt=dF[i];return u.jsxs("div",{className:`msg-list-shell msg-list-shell-${F}`,children:[u.jsx("div",{className:`msg-list msg-list-${F}`,ref:$,tabIndex:0,"data-scroll-policy":M,"data-viewport-mode":F,children:u.jsxs("div",{className:"msg-list-content",ref:q,children:[!Zn&&u.jsxs("div",{className:"msg-welcome",children:[u.jsx("div",{className:"msg-welcome-icon",children:Pt.icon}),u.jsx("div",{className:"msg-welcome-title",children:n||Pt.title}),u.jsx("div",{className:"msg-welcome-hint",children:Pt.hint})]}),(wi>0||R)&&u.jsxs("div",{className:"msg-history-hint",children:[u.jsx("button",{className:"msg-history-load-btn",onClick:()=>{de()},disabled:L,children:L?"Loading older messages...":wi>0?`Load ${Math.min(ly,wi)} older messages`:"Load older messages"}),u.jsxs("span",{className:"msg-history-meta",children:["Showing ",bn.length," of ",D??tt.length]})]}),It.map(ce=>u.jsx("div",{className:"msg-timeline-row","data-timeline-key":ce.item.id,children:on(ce)},ce.item.id)),yi&&u.jsxs("div",{className:"msg-row agent",children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(bl,{})}),u.jsx("div",{className:"msg-body",children:u.jsx(jI,{workItemLog:b??[],roleWorkItems:w,executorRoleWorkItems:S,childSessions:k,isCompanyRuntime:v,onWorkItemClick:N})})]}),pn&&u.jsxs("div",{className:"msg-row agent agent-working-row",children:[u.jsx("div",{className:"msg-avatar agent-avatar",children:u.jsx(bl,{})}),u.jsx("div",{className:"msg-body",children:u.jsx(Il,{entries:Me,agentStatus:o,currentTool:a,toolElapsedMs:c,lastToolSummary:d,expandedByDefault:!0})})]}),u.jsx("div",{className:"msg-end-anchor"})]})}),(vt.length>0||F==="browsing"&&!se)&&u.jsxs("div",{className:"msg-list-floating-actions",children:[vt.length>0&&u.jsxs("button",{type:"button",className:"msg-list-float-btn msg-list-pending-btn",onClick:ut,children:["Pending actions · ",vt.length]}),F==="browsing"&&!se&&u.jsxs("button",{type:"button",className:"msg-list-float-btn msg-list-latest-btn",onClick:ve,children:[ee>0?`${ee} new · `:"","Back to latest"]})]}),V&&u.jsx("div",{className:"lightbox-overlay",onClick:()=>U(null),children:u.jsx("img",{className:"lightbox-img",src:V,alt:"Preview"})})]})}),LF=10*1024*1024,zF=20*1024*1024,PF="image/*,video/mp4,video/mpeg,video/quicktime,video/webm,.mp4,.mpeg,.mpg,.mov,.webm,.txt,.md,.pdf,.csv,.json,.yaml,.yml,.py,.js,.ts,.tsx,.jsx,.html,.css,.java,.c,.cpp,.go,.rs,.rb,.sh,.xml,.toml,.docx,.xlsx,.pptx",mf={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function BF(e,t){return new Promise((n,i)=>{const r=new FileReader;r.onprogress=o=>{o.lengthComputable&&t?.(Math.round(o.loaded/o.total*100))},r.onload=()=>{const o=r.result;t?.(100),n(o.split(",")[1]||"")},r.onerror=i,r.readAsDataURL(e)})}function iC(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(0)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}function TI(e,t){const n=t.includes(".")?t.split(".").pop()?.toUpperCase()??"":"";return e.startsWith("image/")?"IMG":e.startsWith("video/")?"VID":e==="application/pdf"?"PDF":e.includes("wordprocessingml")?"DOC":e.includes("spreadsheetml")||n==="CSV"?"XLS":e.includes("presentationml")?"PPT":e.includes("json")?"JSON":e.includes("yaml")||n==="YML"||n==="YAML"?"YAML":e.startsWith("text/")?"TXT":["PY","TS","TSX","JS","JSX","GO","RS","RB","JAVA","C","CPP","HTML","CSS","SH"].includes(n)?n:n||"FILE"}function $F(e,t){const n=TI(e,t);return n==="IMG"?"image":n==="VID"?"video":n==="PDF"?"pdf":n==="DOC"||n==="XLS"||n==="PPT"?"office":n==="JSON"||n==="YAML"?"data":n==="TXT"?"text":["PY","TS","TSX","JS","JSX","GO","RS","RB","JAVA","C","CPP","HTML","CSS","SH"].includes(n)?"code":"generic"}function HF({progress:e,state:t,error:n}){const r=2*Math.PI*11,o=n||t==="ready"?100:Math.max(0,Math.min(e,100)),a=r*(1-o/100);return u.jsxs("span",{className:`attachment-progress-ring${n?" error":t==="ready"?" ready":""}`,"aria-label":n?"Attachment preparation failed":t==="ready"?"Attachment ready to send":`Preparing attachment ${o}%`,role:"img",children:[u.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[u.jsx("circle",{className:"attachment-progress-track",cx:"14",cy:"14",r:11}),u.jsx("circle",{className:"attachment-progress-value",cx:"14",cy:"14",r:11,strokeDasharray:r,strokeDashoffset:a})]}),u.jsx("span",{className:"attachment-progress-center",children:n?"!":t==="ready"?u.jsx(Fl,{}):o})]})}function FF({usedPct:e,usedTokens:t,windowTokens:n}){const r=2*Math.PI*11,o=Math.max(0,Math.min(e,100)),a=r*(1-o/100),c=o>=80,d=o>=90,m=typeof t=="number"&&typeof n=="number"?`${o}% used (${t.toLocaleString()}/${n.toLocaleString()})`:`${o}% used`;return u.jsxs("span",{className:`composer-context-ring${c?" low":""}${d?" critical":""}`,title:`Context window: ${m}`,"aria-label":`Context window ${m}`,role:"img",children:[u.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[u.jsx("circle",{className:"composer-context-ring-track",cx:"14",cy:"14",r:11}),u.jsx("circle",{className:"composer-context-ring-value",cx:"14",cy:"14",r:11,strokeDasharray:r,strokeDashoffset:a})]}),u.jsx("span",{className:"composer-context-ring-label",children:o})]})}function cy(e){return e.organization_name?.trim()||e.name}function uy({disabled:e,placeholder:t,channelId:n,execMode:i,companyProfile:r,taskPreferredAgent:o="native",agentStatus:a,currentTool:c,displayTool:d,activeAgentCount:m,runtimeControlState:h,canStop:p,autoFocus:g=!0,contextTokens:x,contextWindow:v,contextRemainingPct:b,savedOrgs:k,activeSavedOrg:w,selectedOrgId:S,lockedMode:j=!1,onSend:N,onModeChange:O,onTaskAgentChange:R,onSavedOrgsRefresh:D,onSavedOrgLoad:I,onStop:L,onContinueInNewChat:M}){const[A,B]=C.useState(""),[W,P]=C.useState(!1),[G,$]=C.useState([]),[q,Y]=C.useState(null),Q=C.useRef(null),V=C.useRef(null),U=h==="suspending",Z=h==="running"||h==="suspending"||h==="resuming",F=h==="suspended",K=h!=null,ee=Z||!K&&a!=null&&a!=="idle",te=(p??!0)&&!U&&!F,se=C.useMemo(()=>eE({contextTokens:x,contextWindow:v,contextRemainingPct:b}),[b,x,v]);C.useEffect(()=>{const ke=Q.current;ke&&(ke.style.height="auto",ke.style.height=`${Math.min(ke.scrollHeight,200)}px`)},[A]),C.useEffect(()=>{B(""),$(ke=>(ke.forEach(qe=>{qe.preview_url&&URL.revokeObjectURL(qe.preview_url)}),[])),!e&&g&&setTimeout(()=>Q.current?.focus(),50)},[n,e,g]);const ae=C.useCallback((ke,qe)=>{$(Qe=>Qe.map($e=>$e.id===ke?qe($e):$e))},[]),ue=C.useCallback(async(ke,qe)=>{try{const Qe=await BF(qe,$e=>{ae(ke,He=>({...He,progress_percent:$e,transfer_state:"reading"}))});ae(ke,$e=>({...$e,base64_data:Qe,progress_percent:100,transfer_state:"ready"}))}catch{ae(ke,Qe=>({...Qe,error:"Failed to prepare file",progress_percent:0,transfer_state:"error"}))}},[ae]),ie=C.useCallback(ke=>{const qe=Array.from(ke);let Qe=G.reduce((He,Vt)=>He+Vt.size_bytes,0);const $e=qe.map(He=>{let Vt;return He.size>LF?Vt=`Too large (${iC(He.size)})`:Qe+He.size>zF?Vt="Total size exceeds 20MB":Qe+=He.size,{id:crypto.randomUUID(),file:He,filename:He.name||"upload",mime_type:He.type||"application/octet-stream",size_bytes:He.size,preview_url:He.type.startsWith("image/")?URL.createObjectURL(He):"",progress_percent:0,transfer_state:Vt?"error":"reading",error:Vt}});$(He=>[...He,...$e]),$e.filter(He=>!He.error).forEach(He=>{ue(He.id,He.file)})},[G,ue]),we=C.useCallback(ke=>{$(qe=>{const Qe=qe.find($e=>$e.id===ke);return Qe?.preview_url&&URL.revokeObjectURL(Qe.preview_url),qe.filter($e=>$e.id!==ke)})},[]),je=C.useCallback(()=>{if(e||ee)return;const ke=A.trim(),qe=G.filter(He=>!He.error&&He.transfer_state==="reading"),Qe=G.filter(He=>!He.error&&!!He.base64_data);if(qe.length>0||!ke&&Qe.length===0)return;const $e=Qe.map(He=>({filename:He.filename,data:He.base64_data,mime_type:He.mime_type}));N(ke||"Sent with attachments",$e.length?$e:void 0),B(""),G.forEach(He=>{He.preview_url&&URL.revokeObjectURL(He.preview_url)}),$([])},[e,ee,A,G,N]),Te=C.useCallback(ke=>{const qe=ke.clipboardData?.files;qe&&qe.length>0&&(ke.preventDefault(),ie(qe))},[ie]),Ge=String(r??"").trim().toLowerCase(),Ze=i==="company"?"company":i==="org"||i==="custom"||Ge==="custom"?"org":"task",Ye=C.useMemo(()=>(k??[]).filter(ke=>!!ke.name&&ke.name!=="corporate"),[k]),mt=w?Ye.find(ke=>ke.name===w):void 0,Ft=S?Ye.find(ke=>ke.name===S):void 0,Mt=mt?cy(mt):w||"",jt=Ft?cy(Ft):S||Mt,he=Ft?.name||S||mt?.name||"",ze=Ze==="task"?"task":"company",ot=Ze==="org"?he?`org:${he}`:"":"corporate",Ve=Ze==="org"?jt?`Company / ${jt}`:"Company / Saved org":"Company / Corporate",lt=ze==="task"?"Task":Ve,me=!!i&&!!O,be=Ze==="task"&&!!R,Ae=C.useMemo(()=>{const ke=Ze==="task"?"task":Ze==="org"?`org:${he||"selected"}`:"company:corporate",qe=he||mt?.name||"",Qe=jt||Mt||qe,$e=[{key:"task",mode:"task",label:"Task",description:"A single agent handles the request",icon:u.jsx(M4,{})},{key:"company:corporate",mode:"company",profile:"corporate",label:"Company / Corporate",description:"A team of roles collaborates",icon:u.jsx(D4,{})}];return qe&&$e.push({key:`org:${qe}`,mode:"org",profile:"custom",orgId:qe,label:`Company / ${Qe}`,description:"A saved company architecture collaborates",icon:u.jsx(O4,{})}),$e.filter(He=>He.key!==ke)},[Mt,mt?.name,Ze,jt,he]),Be=G.filter(ke=>!ke.error&&ke.transfer_state==="reading").length,We=G.filter(ke=>!ke.error&&ke.transfer_state==="ready").length,Lt=d||c,pt=ee?U?"Stopping...":m&&m>1?`${m} agents working`:Lt?`Running ${Lt}`:a==="reflecting"?"Thinking...":"Working...":null;return u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:`msg-composer${W?" focused":""}${ee?" working":""}`,children:[ee&&pt&&u.jsxs("div",{className:"composer-status",children:[u.jsx("div",{className:"composer-status-indicator"}),u.jsx("span",{className:"composer-status-text",children:pt}),u.jsxs("button",{className:"composer-stop-btn",onClick:L,title:"Stop",disabled:!te||!L,children:[u.jsx(Zj,{}),u.jsx("span",{children:U?"Stopping...":"Stop"})]})]}),G.length>0&&u.jsx("div",{className:"composer-attachments",children:G.map(ke=>u.jsxs("div",{className:`attachment-chip${ke.error?" error":""}`,children:[ke.preview_url?u.jsx("img",{className:"attachment-thumb",src:ke.preview_url,alt:ke.filename,onClick:()=>Y(ke.preview_url)}):u.jsx("span",{className:`attachment-file-icon tone-${$F(ke.mime_type,ke.filename)}`,children:TI(ke.mime_type,ke.filename)}),u.jsxs("span",{className:"attachment-chip-info",children:[u.jsx("span",{className:"attachment-chip-name",children:ke.filename}),u.jsx("span",{className:"attachment-chip-size",children:ke.error?ke.error:ke.transfer_state==="reading"?`Preparing ${ke.progress_percent}%`:`${iC(ke.size_bytes)} - Ready`})]}),u.jsx(HF,{progress:ke.progress_percent,state:ke.transfer_state,error:ke.error}),u.jsx("button",{className:"attachment-chip-remove",onClick:()=>we(ke.id),title:"Remove",children:u.jsx(Dm,{})})]},ke.id))}),u.jsxs("div",{className:"composer-input-area",children:[u.jsx("textarea",{ref:Q,value:A,onChange:ke=>B(ke.target.value),onFocus:()=>P(!0),onBlur:()=>P(!1),onPaste:Te,onKeyDown:ke=>{ke.key==="Enter"&&!ke.shiftKey&&(ke.preventDefault(),je())},placeholder:t??"Message...",rows:1,disabled:e}),u.jsxs("div",{className:"composer-bottom",children:[u.jsx("button",{className:"composer-attach-btn",onClick:()=>V.current?.click(),title:"Attach files",disabled:e,children:u.jsx(j4,{})}),u.jsx("input",{ref:V,type:"file",multiple:!0,accept:PF,style:{display:"none"},onChange:ke=>{ke.target.files&&ie(ke.target.files),ke.target.value=""}}),(me||i)&&u.jsxs("div",{className:"composer-config-group","data-locked":j?"true":void 0,children:[me&&!j?u.jsxs("label",{className:"composer-mode-inline","data-kind":"mode",title:"Execution mode for this chat and new work started from it",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Mode"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsxs("select",{className:"composer-mode-select",value:ze,onChange:ke=>{if(ke.target.value==="task"){O?.("task");return}O?.("company","corporate")},onFocus:()=>D?.(),onPointerDown:()=>D?.(),disabled:e,"aria-label":"Execution mode",children:[u.jsx("option",{value:"task",children:"Task"}),u.jsx("option",{value:"company",children:"Company"})]})})]}):me&&j?u.jsxs("div",{className:"composer-mode-chip","data-kind":"mode",tabIndex:0,role:"group","aria-label":`Mode locked to ${lt}.${M?" Use the menu to start a new chat in a different mode.":" Start a new chat to use a different mode."}`,children:[u.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:u.jsx(Jk,{})}),u.jsx("span",{className:"composer-mode-chip-label",children:lt}),u.jsxs("div",{className:"composer-mode-chip-popover",role:"dialog","aria-label":"Mode info",children:[u.jsx("div",{className:"composer-mode-chip-popover-title",children:"Mode is fixed for this chat"}),u.jsxs("div",{className:"composer-mode-chip-popover-body",children:["Once the first message is sent, this chat is committed to"," ",u.jsx("strong",{children:lt}),"."]}),M&&Ae.length>0&&u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"composer-mode-chip-popover-divider","aria-hidden":"true"}),u.jsx("div",{className:"composer-mode-chip-popover-action-title",children:"Continue in a new chat"}),u.jsx("div",{className:"composer-mode-chip-popover-actions",children:Ae.map(ke=>u.jsxs("button",{type:"button",className:"composer-mode-chip-popover-action",onClick:()=>M(ke.mode,ke.profile,ke.orgId),"aria-label":`Start a new chat in ${ke.label}`,children:[u.jsx("span",{className:"composer-mode-chip-popover-action-icon","aria-hidden":"true",children:ke.icon}),u.jsxs("span",{className:"composer-mode-chip-popover-action-text",children:[u.jsx("span",{className:"composer-mode-chip-popover-action-label",children:ke.label}),u.jsx("span",{className:"composer-mode-chip-popover-action-desc",children:ke.description})]}),u.jsx("span",{className:"composer-mode-chip-popover-action-arrow","aria-hidden":"true",children:u.jsx(Jj,{})})]},ke.key))})]})]})]}):u.jsx("span",{className:"composer-mode","data-kind":"mode",children:lt}),ze==="company"&&me&&!j&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),u.jsxs("label",{className:"composer-mode-inline","data-kind":"org",title:"Company architecture for this chat",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Company"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsxs("select",{className:"composer-mode-select",value:ot,onChange:ke=>{const qe=ke.target.value;if(qe==="corporate"){O?.("company","corporate");return}if(qe.startsWith("org:")){const Qe=qe.slice(4);Qe&&O?.("org","custom",Qe)}},onFocus:()=>D?.(),onPointerDown:()=>D?.(),disabled:e,"aria-label":"Company architecture",children:[u.jsx("option",{value:"corporate",children:"Corporate"}),!ot&&u.jsx("option",{value:"",disabled:!0,children:"Select saved org"}),ot&&ot!=="corporate"&&!Ye.some(ke=>`org:${ke.name}`===ot)&&u.jsx("option",{value:ot,children:jt||he}),Ye.length===0?u.jsx("option",{value:"",disabled:!0,children:"No saved orgs"}):Ye.map(ke=>u.jsx("option",{value:`org:${ke.name}`,children:cy(ke)},ke.name))]})})]})]}),Ze==="task"&&u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),be&&!j?u.jsxs("label",{className:"composer-mode-inline","data-kind":"agent",title:"Execution agent for this task-mode chat",children:[u.jsx("span",{className:"composer-mode-inline-label",children:"Agent"}),u.jsx("span",{className:"composer-mode-select-wrap",children:u.jsx("select",{className:"composer-mode-select",value:o,onChange:ke=>R?.(ke.target.value),disabled:e,"aria-label":"Task mode agent",children:Object.entries(mf).map(([ke,qe])=>u.jsx("option",{value:ke,children:qe},ke))})})]}):be&&j?u.jsxs("span",{className:"composer-mode-chip","data-kind":"agent",tabIndex:0,role:"status","aria-label":`Agent locked to ${mf[o]}. Start a new chat to use a different agent.`,children:[u.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:u.jsx(Jk,{})}),u.jsx("span",{className:"composer-mode-chip-label",children:mf[o]}),u.jsxs("span",{className:"composer-mode-chip-popover",role:"tooltip",children:[u.jsx("span",{className:"composer-mode-chip-popover-title",children:"Agent is fixed for this chat"}),u.jsx("span",{className:"composer-mode-chip-popover-body",children:"The execution agent is committed once the chat starts. Start a new chat to switch agents."})]})]}):u.jsx("span",{className:"composer-mode","data-kind":"agent",children:mf[o]})]})]}),u.jsx("span",{className:"composer-hint",children:Be>0?`Preparing ${Be} attachment${Be>1?"s":""}`:We>0?`${We} attachment${We>1?"s":""} ready`:"Shift+Enter for new line"}),typeof se.usedPct=="number"&&u.jsx(FF,{usedPct:se.usedPct,usedTokens:se.usedTokens,windowTokens:se.windowTokens}),u.jsx("button",{className:"composer-send-btn",onClick:je,disabled:e||Be>0||!A.trim()&&We===0||ee,children:u.jsx(w4,{})})]})]})]}),q&&u.jsx("div",{className:"lightbox-overlay",onClick:()=>Y(null),children:u.jsx("img",{className:"lightbox-img",src:q,alt:"Preview"})})]})}function S0(e){return Om(e)}function rC(e){const t=S0(e);return t==="tool_active"?0:t==="reflecting"?1:e.status==="running"?2:e.status==="pending"?3:e.status==="done"?5:e.status==="failed"?6:4}function w0(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"now";if(t<60)return`${t}s`;const n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h`}function VF(e){return e.length===0?"—":w0(e[e.length-1].timestamp)}function UF(e){if(e.status==="done")return"Completed";if(e.status==="failed")return"Failed";if(e.status==="cancelled")return"Cancelled";const t=S0(e);if(t==="tool_active"&&e.currentTool)return e.currentTool;if(t==="reflecting")return"Thinking…";if(e.status==="pending")return"Pending";const n=e.progressLog;if(n.length>0){const i=n[n.length-1];return i.type==="work_item_started"?`Work item: ${i.summary}`:i.type==="tool_call"?i.summary:i.detail?i.detail.replace(/\s+/g," ").trim():i.summary}return"Idle"}function sC(e){return e==="done"?"✓":e==="failed"?"✗":e==="cancelled"?"—":null}function oC(e){return e==="done"?"awp-terminal-done":e==="failed"?"awp-terminal-failed":e==="cancelled"?"awp-terminal-cancelled":""}const GF={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},dy={done:{cls:"awp-result-done",text:"Work item completed successfully"},failed:{cls:"awp-result-failed",text:"Work item failed"},cancelled:{cls:"awp-result-cancelled",text:"Work item cancelled"}},sv={active:"Working",waiting:"Waiting",pending:"Pending",done:"Completed",failed:"Failed"},aC={active:0,waiting:1,pending:2,done:3,failed:4};function qF(e){if(e.runtimeStatus==="tool_active")return"Running tool…";if(e.runtimeStatus==="reflecting")return"Thinking…";const t=sv[e.aggregatedStatus]??"Pending";return e.aggregatedStatus==="done"?`${t} · ${e.workItems.length} work item${e.workItems.length===1?"":"s"}`:t}function WF(e){if(e.workItems.length===0)return"—";const t=e.workItems.reduce((n,i)=>Math.max(n,i.updatedAt),0);return t?w0(t):"—"}function YF(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function XF({sections:e,fallbackEntries:t,sessionStatus:n}){const i=(e??[]).filter(r=>(r.entries?.length??0)>0||!!r.runtimeTaskId);return i.length>0?u.jsx("div",{className:"wf-role-turn-activity-sections",children:i.map((r,o)=>{const a=r.entries??[],c=`${r.runtimeTaskId||r.kind}:${o}`;return u.jsxs("section",{className:"wf-role-turn-activity-section",children:[u.jsxs("div",{className:"wf-role-turn-activity-section-head",children:[u.jsx("span",{className:"wf-role-turn-activity-section-title",children:r.title}),r.roleName&&u.jsx("span",{className:"wf-role-turn-activity-section-role",children:r.roleName}),a.length>0&&u.jsx("span",{className:"wf-role-turn-activity-section-count",children:a.length})]}),a.length>0?u.jsx(Il,{entries:a,sessionStatus:n,expandedByDefault:!0}):u.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"})]},c)})}):!t||t.length===0?u.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"}):u.jsx(Il,{entries:t,sessionStatus:n,expandedByDefault:!0})}function KF({roleWorkItems:e,onOpenChildDetail:t,onOpenExecutionPanel:n}){const[i,r]=C.useState(null),[o,a]=C.useState(null),[c,d]=C.useState("all"),[m,h]=C.useState(""),[p,g]=C.useState(!1),x=C.useMemo(()=>Object.values(e),[e]),v=C.useMemo(()=>{let S=x.slice();if(c==="active"?S=S.filter(j=>j.aggregatedStatus==="active"):c==="idle"?S=S.filter(j=>j.aggregatedStatus==="done"||j.aggregatedStatus==="failed"):c==="pending"&&(S=S.filter(j=>j.aggregatedStatus==="pending"||j.aggregatedStatus==="waiting")),m.trim()){const j=m.toLowerCase();S=S.filter(N=>N.roleName.toLowerCase().includes(j)||N.roleId.toLowerCase().includes(j)||N.workItems.some(O=>O.title.toLowerCase().includes(j)))}return S.sort((j,N)=>{const O=aC[j.aggregatedStatus]??99,R=aC[N.aggregatedStatus]??99;return O!==R?O-R:j.roleName.localeCompare(N.roleName)}),S},[x,c,m]);C.useEffect(()=>{i&&!x.some(S=>S.roleKey===i)&&(r(null),a(null))},[x,i]);const b=x.filter(S=>S.aggregatedStatus==="active").length,k=i?e[i]??null:null,w=k&&o?k.workItems.find(S=>S.workItemId===o)??null:null;return x.length===0?null:u.jsxs("div",{className:"awp",children:[u.jsxs("div",{className:"awp-header",children:[u.jsxs("span",{className:"awp-title",children:["Agents",u.jsx("span",{className:"awp-count",children:b>0?`${b}/${x.length} active`:`${x.length}`})]}),u.jsxs("div",{className:"awp-controls",children:[u.jsxs("select",{className:"awp-filter",value:c,onChange:S=>d(S.target.value),children:[u.jsx("option",{value:"all",children:"All"}),u.jsx("option",{value:"active",children:"Active"}),u.jsx("option",{value:"idle",children:"Idle / Done"}),u.jsx("option",{value:"pending",children:"Pending"})]}),u.jsx("button",{className:`awp-search-toggle${p?" active":""}`,onClick:()=>g(S=>!S),title:"Search agents",children:u.jsx(Mv,{})})]})]}),p&&u.jsx("div",{className:"awp-search-bar",children:u.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents or work items...",value:m,onChange:S=>h(S.target.value),autoFocus:!0})}),u.jsxs("div",{className:"awp-list",children:[v.map(S=>{const j=i===S.roleKey,N=S.aggregatedStatus==="active",O=S.runtimeStatus==="reflecting"||S.runtimeStatus==="tool_active",R=S.aggregatedStatus==="done"||S.aggregatedStatus==="failed";return u.jsxs("button",{className:`awp-row${j?" awp-row-selected":""}${N?" awp-row-active":""}${R?` awp-row-terminal awp-terminal-${S.aggregatedStatus}`:""}`,onClick:()=>{r(D=>D===S.roleKey?null:S.roleKey),a(null)},title:`${S.roleName} — ${sv[S.aggregatedStatus]}`,children:[u.jsx("span",{className:`awp-dot${O?" awp-dot-active":""} awp-dot-${S.aggregatedStatus}`}),u.jsxs("div",{className:"awp-row-info",children:[u.jsx("span",{className:"awp-row-name",children:S.roleName}),u.jsxs("span",{className:"awp-row-projection",children:[S.workItems.length," work item",S.workItems.length===1?"":"s"]})]}),u.jsx("span",{className:"awp-row-activity",children:qF(S)}),u.jsx("span",{className:"awp-row-time",children:WF(S)})]},S.roleKey)}),v.length===0&&u.jsx("div",{className:"awp-empty",children:m?"No matching agents":"No agents in this filter"})]}),k&&u.jsxs("div",{className:"awp-detail",children:[u.jsxs("div",{className:"awp-detail-header",children:[u.jsxs("div",{className:"awp-detail-identity",children:[u.jsx("div",{className:"awp-detail-avatar",children:k.roleName.charAt(0).toUpperCase()}),u.jsxs("div",{className:"awp-detail-meta",children:[u.jsx("span",{className:"awp-detail-name",children:k.roleName}),u.jsx("span",{className:"awp-detail-role",children:sv[k.aggregatedStatus]})]})]}),u.jsx("div",{className:"awp-detail-actions",children:u.jsx("button",{className:"awp-detail-close",onClick:()=>{r(null),a(null)},title:"Close detail",children:u.jsx(Dm,{})})})]}),u.jsxs("div",{className:"awp-detail-body",children:[u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(_l,{}),u.jsx("span",{children:"Work items"})]}),u.jsx("ul",{className:"wf-role-turns",children:k.workItems.map(S=>{const j=o===S.workItemId,N=S.kanbanColumn==="in-progress"?"in_progress":S.kanbanColumn==="in-review"?"in_review":S.kanbanColumn;return u.jsxs("li",{className:`wf-role-turn${j?" wf-role-turn-expanded":""}`,children:[u.jsxs("button",{type:"button",className:"wf-role-turn-button",onClick:()=>a(O=>O===S.workItemId?null:S.workItemId),children:[u.jsx("span",{className:`wf-role-turn-column wf-role-turn-column-${N}`,children:S.kanbanColumn.replace("-"," ").replace(/^./,O=>O.toUpperCase())}),u.jsxs("span",{className:"wf-role-turn-title",children:[S.isReviewTarget&&u.jsx("span",{className:"wf-role-turn-tag",children:"Review"}),S.title]}),u.jsx("span",{className:"wf-role-turn-time",children:w0(S.updatedAt)}),u.jsx("span",{className:"wf-role-turn-chevron",children:u.jsx(ss,{down:j})})]}),j&&u.jsxs("div",{className:"wf-role-turn-activity",children:[u.jsx(XF,{sections:S.activitySections,fallbackEntries:S.progressLog,sessionStatus:YF(S)}),S.executionTurnId&&u.jsx("button",{type:"button",className:"wf-role-turn-open-session",onClick:O=>{O.stopPropagation(),S.executionTurnId&&(n??t)?.(S.executionTurnId)},children:"Open runtime session"})]})]},S.workItemId)})})]}),w===null&&k.workItems.length===0&&u.jsx("div",{className:"awp-detail-empty",children:"No work items yet"})]})]})]})}function ZF({sessions:e,agents:t,onOpenChildDetail:n,onOpenExecutionPanel:i}){const[r,o]=C.useState(null),[a,c]=C.useState("all"),[d,m]=C.useState(""),[h,p]=C.useState(!1);C.useEffect(()=>{r&&!e.some(w=>w.taskId===r)&&o(null)},[e,r]);const g=C.useMemo(()=>{let w=[...e];if(a==="active"?w=w.filter(os):a==="idle"?w=w.filter(S=>sl.has(S.status)||S0(S)==="idle"&&S.status!=="pending"):a==="pending"&&(w=w.filter(S=>S.status==="pending")),d.trim()){const S=d.toLowerCase();w=w.filter(j=>(j.assigneeIds[0]??j.title).toLowerCase().includes(S)||j.title.toLowerCase().includes(S))}return w.sort((S,j)=>rC(S)-rC(j)),w},[e,a,d]),x=e.filter(os).length,v=C.useMemo(()=>r?e.find(w=>w.taskId===r)??null:null,[e,r]),b=C.useMemo(()=>{if(!v)return;const w=v.assigneeIds[0];return w?t.find(S=>S.agent_id===w):void 0},[v,t]),k=C.useCallback(w=>{o(S=>S===w?(n?.(w),S):w)},[n]);return e.length===0?null:u.jsxs("div",{className:"awp",children:[u.jsxs("div",{className:"awp-header",children:[u.jsxs("span",{className:"awp-title",children:["Agents",u.jsx("span",{className:"awp-count",children:x>0?`${x}/${e.length} active`:`${e.length}`})]}),u.jsxs("div",{className:"awp-controls",children:[u.jsxs("select",{className:"awp-filter",value:a,onChange:w=>c(w.target.value),children:[u.jsx("option",{value:"all",children:"All"}),u.jsx("option",{value:"active",children:"Active"}),u.jsx("option",{value:"idle",children:"Idle / Done"}),u.jsx("option",{value:"pending",children:"Pending"})]}),u.jsx("button",{className:`awp-search-toggle${h?" active":""}`,onClick:()=>p(w=>!w),title:"Search agents",children:u.jsx(Mv,{})})]})]}),h&&u.jsx("div",{className:"awp-search-bar",children:u.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents...",value:d,onChange:w=>m(w.target.value),autoFocus:!0})}),u.jsxs("div",{className:"awp-list",children:[g.map(w=>{const S=os(w),j=sl.has(w.status),N=r===w.taskId,O=w.assigneeIds[0]?.replace(/_/g," ").replace(/\b\w/g,L=>L.toUpperCase())??w.title,R=w.workItemProjectionId?.replace(/_/g," ")??"",D=sC(w.status),I=oC(w.status);return u.jsxs("button",{className:`awp-row${N?" awp-row-selected":""}${S?" awp-row-active":""}${j?` awp-row-terminal ${I}`:""}`,onClick:()=>k(w.taskId),onDoubleClick:()=>n?.(w.taskId),title:n?"Click to inspect, click again or double-click to open full context":void 0,children:[D?u.jsx("span",{className:`awp-terminal-icon ${I}`,children:D}):u.jsx("span",{className:`awp-dot${S?" awp-dot-active":""}`}),u.jsxs("div",{className:"awp-row-info",children:[u.jsx("span",{className:"awp-row-name",children:O}),R&&u.jsx("span",{className:"awp-row-projection",children:R})]}),u.jsx("span",{className:"awp-row-activity",children:UF(w)}),u.jsx("span",{className:"awp-row-time",children:VF(w.progressLog)})]},w.taskId)}),g.length===0&&u.jsx("div",{className:"awp-empty",children:d?"No matching agents":"No agents in this filter"})]}),v&&u.jsxs("div",{className:"awp-detail",children:[u.jsxs("div",{className:"awp-detail-header",children:[u.jsxs("div",{className:"awp-detail-identity",children:[u.jsx("div",{className:`awp-detail-avatar${sl.has(v.status)?` ${oC(v.status)}`:""}`,children:(b?.name??v.assigneeIds[0]??"?").charAt(0).toUpperCase()}),u.jsxs("div",{className:"awp-detail-meta",children:[u.jsx("span",{className:"awp-detail-name",children:b?.name??v.assigneeIds[0]??v.title}),El(v)&&u.jsx("span",{className:"awp-detail-role",children:El(v)}),v.employeeAssignment?.name&&u.jsx("span",{className:"awp-detail-employee",children:v.employeeAssignment.name}),v.selectedExecutionAgent&&u.jsxs("span",{className:"awp-detail-employee",children:["Agent: ",GF[v.selectedExecutionAgent]??v.selectedExecutionAgent]}),v.workItemProjectionId&&u.jsx("span",{className:"awp-detail-projection",children:v.workItemProjectionId.replace(/_/g," ")})]})]}),u.jsxs("div",{className:"awp-detail-actions",children:[n&&u.jsx("button",{className:"awp-detail-expand",onClick:()=>n(v.taskId),title:"Open full context",children:u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[u.jsx("path",{d:"M2.5 3.25h9a1 1 0 011 1v5.5a1 1 0 01-1 1h-4l-2.75 2v-2h-2.25a1 1 0 01-1-1v-5.5a1 1 0 011-1Z",stroke:"currentColor",strokeWidth:"1.2",strokeLinejoin:"round"}),u.jsx("path",{d:"M4.5 5.5h5M4.5 7.5h3.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})}),i&&u.jsx("button",{className:"awp-detail-expand",onClick:()=>i(v.taskId),title:"Open execution panel",children:u.jsx(_l,{})}),u.jsx("button",{className:"awp-detail-close",onClick:()=>o(null),title:"Close detail",children:u.jsx(Dm,{})})]})]}),u.jsxs("div",{className:"awp-detail-body",children:[v.handoffContext&&u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(Uf,{}),u.jsx("span",{children:"Handoff"})]}),u.jsx("div",{className:"msg-content-agent-card",children:u.jsx(bi,{content:v.handoffContext,className:"awp-detail-handoff awp-detail-handoff-markdown"})})]}),u.jsxs("div",{className:"awp-detail-section",children:[u.jsxs("div",{className:"awp-detail-section-label",children:[u.jsx(_l,{}),u.jsx("span",{children:"Activity"})]}),u.jsx(Il,{entries:v.progressLog,agentStatus:v.agentStatus,currentTool:v.currentTool,toolElapsedMs:v.toolElapsedMs,lastToolSummary:v.lastToolSummary,sessionStatus:v.status,expandedByDefault:!0}),v.progressLog.length===0&&!v.agentStatus&&!sl.has(v.status)&&u.jsx("div",{className:"awp-detail-empty",children:"No activity recorded yet"})]}),sl.has(v.status)&&dy[v.status]&&u.jsxs("div",{className:`awp-result-banner ${dy[v.status].cls}`,children:[u.jsx("span",{className:"awp-result-icon",children:sC(v.status)}),u.jsx("span",{children:dy[v.status].text})]})]})]})]})}function QF({sessions:e,roleWorkItems:t,isCompanyRuntime:n=!1,agents:i,onOpenChildDetail:r,onOpenExecutionPanel:o}){return t&&Object.keys(t).length>0?u.jsx(KF,{roleWorkItems:t,onOpenChildDetail:r,onOpenExecutionPanel:o}):n?null:u.jsx(ZF,{sessions:e,agents:i,onOpenChildDetail:r,onOpenExecutionPanel:o})}function RI(e){try{return JSON.stringify(e,null,2)}catch{return String(e??"")}}function fy(e){return(e??[]).map(t=>t.trim()).filter(Boolean)}function lC(e){return e?Object.entries(e).filter(([,t])=>t!=null&&t!==""&&t!==!1).map(([t,n])=>Array.isArray(n)?[t,n.join(", ")]:typeof n=="object"?[t,RI(n)]:[t,String(n)]):[]}function JF({task:e,linkedSession:t,linkedSessionMessages:n,agents:i,onBack:r,onOpenLinkedSession:o,onOpenExecutionPanel:a}){const c=C.useMemo(()=>e.assigneeIds.map(R=>i.find(D=>D.agent_id===R)).filter(Boolean),[i,e.assigneeIds]),d=e.priority?sm[e.priority]:null,m=e.residentAssignment??{},h=e.memberSessionState??{},p=e.ownershipContract??{},g=!!(e.agentStatus&&e.agentStatus!=="idle"),x=fy(e.deliverables),v=fy(e.acceptanceCriteria),b=fy(e.dependencies),k=lC({role_id:m.role_id,employee_id:m.employee_id,manager_role_id:m.manager_role_id,team_id:m.team_id,seat_id:m.seat_id,work_item_turn_type:m.work_item_turn_type,resident_status:m.resident_status}),w=lC({status:h.status,current_turn_mode:h.current_turn_mode,manager_role_id:h.manager_role_id,actionable_inbox_count:h.actionable_inbox_count,protocol_backlog_count:h.protocol_backlog_count,notification_backlog_count:h.notification_backlog_count}),S=String(e.employeeAssignment?.promptContext??"").trim(),j=String(e.employeeAssignment?.deltaContext??"").trim(),N=Vm(e),O=!!(e.workItemId||e.workItemProjectionId||N);return u.jsxs("div",{className:"ctx-child-detail",children:[u.jsxs("div",{className:"ctx-child-topbar",children:[u.jsxs("button",{className:"ctx-back-btn",onClick:r,children:["←"," Back to board"]}),N&&(o||a)&&u.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>{if(o){o(N);return}a?.(N)},children:"Open Runtime Session"})]}),u.jsxs("div",{className:"ctx-child-header",children:[u.jsx("div",{className:"ctx-child-avatar",children:(e.workItemRoleName??e.title).charAt(0).toUpperCase()}),u.jsxs("div",{className:"ctx-child-meta",children:[u.jsx("span",{className:"ctx-child-name",children:e.title}),u.jsx("span",{className:"ctx-child-work-item",children:[e.workItemRoleName,e.phase].filter(Boolean).join(" · ")})]})]}),g&&u.jsxs("div",{className:`task-detail-runtime status-${e.agentStatus}`,children:[u.jsx("span",{className:"kanban-runtime-dot"}),u.jsx("span",{children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:om[e.agentStatus]??e.agentStatus}),c.length>0&&u.jsx("span",{className:"task-detail-runtime-agent",children:c.map(R=>R.name).join(", ")})]}),u.jsxs("div",{className:"task-detail-body",children:[u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:O?"Work Item":"Task"}),u.jsxs("div",{className:"ctx-task-chip-row",children:[u.jsx("span",{className:"task-detail-dep-id",children:e.displayId}),d&&u.jsx("span",{className:"kanban-tag",children:d.label}),e.workItemRoleName&&u.jsx("span",{className:"kanban-tag",children:e.workItemRoleName}),e.managerRoleId&&u.jsxs("span",{className:"kanban-tag",children:["Manager: ",e.managerRoleId]}),e.scopeKey&&u.jsx("span",{className:"kanban-tag",children:e.scopeKey})]}),e.description&&u.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:u.jsx(bi,{content:e.description})})]}),e.originalMessage&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Session Goal"}),u.jsx("pre",{className:"task-detail-handoff",children:e.originalMessage})]}),e.planningContext&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Planning Context"}),u.jsx("pre",{className:"task-detail-handoff",children:e.planningContext})]}),x.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Deliverables"}),u.jsx("ul",{className:"task-detail-dep-list",children:x.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:R},R))})]}),v.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Acceptance Criteria"}),u.jsx("ul",{className:"task-detail-dep-list",children:v.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:R},R))})]}),(e.delegationRationale||e.nonOverlapGuard||e.coordinationNotes)&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Delegation Notes"}),e.delegationRationale&&u.jsx("pre",{className:"task-detail-handoff",children:e.delegationRationale}),e.nonOverlapGuard&&u.jsx("pre",{className:"task-detail-handoff",children:e.nonOverlapGuard}),e.coordinationNotes&&u.jsx("pre",{className:"task-detail-handoff",children:e.coordinationNotes})]}),b.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Dependencies"}),u.jsx("ul",{className:"task-detail-dep-list",children:b.map(R=>u.jsx("li",{className:"task-detail-dep-item",children:u.jsx("span",{className:"task-detail-dep-id",children:R})},R))})]}),(k.length>0||w.length>0||t)&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Runtime Context"}),t&&u.jsxs("div",{className:"ctx-task-chip-row",children:[u.jsxs("span",{className:"kanban-tag",children:["Runtime Session: ",t.title]}),u.jsxs("span",{className:"kanban-tag",children:["Status: ",t.status]})]}),k.length>0&&u.jsx("div",{className:"ctx-task-kv-grid",children:k.map(([R,D])=>u.jsxs("div",{className:"ctx-task-kv-item",children:[u.jsx("span",{className:"ctx-task-kv-label",children:R}),u.jsx("span",{className:"ctx-task-kv-value",children:D})]},R))}),w.length>0&&u.jsx("div",{className:"ctx-task-kv-grid",children:w.map(([R,D])=>u.jsxs("div",{className:"ctx-task-kv-item",children:[u.jsx("span",{className:"ctx-task-kv-label",children:R}),u.jsx("span",{className:"ctx-task-kv-value",children:D})]},R))})]}),e.handoffContext&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Handoff Context"}),u.jsx("pre",{className:"task-detail-handoff",children:e.handoffContext})]}),S&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Prompt Context"}),u.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:u.jsx(bi,{content:S})})]}),j&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Role Delta Context"}),u.jsx("pre",{className:"task-detail-handoff",children:j})]}),Object.keys(p).length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Ownership Contract"}),u.jsx("pre",{className:"task-detail-handoff",children:RI(p)})]}),e.progressLog&&e.progressLog.length>0&&u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Activity"}),u.jsx("ul",{className:"task-detail-progress",children:e.progressLog.map((R,D)=>u.jsxs("li",{className:`progress-entry type-${R.type}`,children:[u.jsx("span",{className:"progress-time",children:new Date(R.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),u.jsx("span",{className:"progress-summary",children:R.summary})]},`${R.timestamp}-${D}`))})]}),u.jsxs("div",{className:"task-detail-section",children:[u.jsx("h4",{className:"task-detail-section-title",children:"Runtime Session Activity"}),t&&n&&n.length>0?u.jsx("div",{className:"task-detail-linked-messages",children:u.jsx(al,{messages:n,channelName:t.title??"Runtime Session",detailMode:"summary",scrollScope:t.channelId},t.channelId)}):t?u.jsx("p",{className:"task-detail-empty-hint",children:"Runtime session has no visible messages yet."}):u.jsx("p",{className:"task-detail-empty-hint",children:"No Runtime Session linked yet."})]})]})]})}function eV(e){const t=Date.now()-e;return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m`:t<864e5?`${Math.floor(t/36e5)}h`:`${Math.floor(t/864e5)}d`}function tV(e,t){if(t>1)return`${t} agents working`;const n=e.displayTool||e.currentTool;return n?`Running ${n}`:e.agentStatus==="reflecting"?"Thinking...":e.status==="running"?"Running":null}function nV(e){if(!(!e||Object.keys(e).length===0))return Object.values(e).filter(t=>t.aggregatedStatus==="active").length}function iV(e){return new Set(e.filter(os).map(n=>String(n.workItemRoleId??n.assigneeIds[0]??n.taskId).trim()).filter(Boolean)).size}function cC(e,t){const n=nV(e);return n!==void 0?n||void 0:iV(t)||void 0}function rV(e){const t=ov(e);return t==="org"||t==="custom"?`company/${e.orgId??"org"}`:t==="company"?`company/${e.companyProfile??"corporate"}`:t}function AI(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function MI(e){return!!(e.isCompanyRuntime||e.parentSessionId||e.workItemProjectionId||e.roleWorkItems||e.executorRoleWorkItems)}function uC(e,t=0){if(!e)return!1;const n=String(e.execMode??"").trim().toLowerCase();return t>0||MI(e)||n==="company"||n==="org"||n==="custom"}function Jc(e,t){const n=t==="full"?e.fullHasMore:e.summaryHasMore;if(n!==void 0)return n;if(e.summaryHasMore===void 0&&e.fullHasMore===void 0)return e.hasMore}function my(e,t,n,i=!0){const r=e.map(o=>Jc(o,n));return r.some(o=>o===!0)?!0:e.length!==1||r[0]===!1?!1:i&&e[0].messageCount>t}function sV(e){const t=String(e.execMode??"").trim().toLowerCase(),n=AI(e.execMode),i=String(e.companyProfile??"").trim().toLowerCase();return n==="company"?!1:n==="org"?!0:t?!1:i==="custom"||!!e.orgId}function py(e,t=0){if(!e)return t>0;if(Math.max(e.messageCount??0,t)>0)return!0;const i=String(e.status??"").trim().toLowerCase();return!!(i&&i!=="pending"||e.parentSessionId||e.workItemProjectionId||e.workItemRoleId||e.workItemTurnType||e.pendingRuntimeCheckpointId||e.runtimeControlState&&e.runtimeControlState!=="idle"||(e.progressLog?.length??0)>0||(e.workItemLog?.length??0)>0||e.roleWorkItems&&Object.keys(e.roleWorkItems).length>0||e.executorRoleWorkItems&&Object.keys(e.executorRoleWorkItems).length>0)}function ov(e,t){const i=String(e.execMode??"").trim().toLowerCase().length>0,r=AI(e.execMode);return sV(e)?"org":!i&&r==="task"&&MI(e)?"company":e.execMode??t??"task"}function dC(e,t,n){return t&&e.selectedExecutionAgent&&e.selectedExecutionAgent!=="native"?e.selectedExecutionAgent:e.preferredAgent??e.selectedExecutionAgent??n}function qc(e,t){return e?e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}const oV=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]);function fC(e){const t=String(e.status??"").trim(),n=e.runtimeControlState==="suspended"||!oV.has(t)&&t!=="running"&&t!=="done";return!!(e.canResume??n)}function aV({task:e,agents:t,roleLabel:n}){const[i,r]=C.useState(!1),o=e.priority,a=o&&e.priority in sm?sm[o]:null,c=e.assigneeIds.map(p=>t.find(g=>g.agent_id===p)?.name??p).filter(Boolean),d=new Date(e.createdAt),m=e.employeeAssignment?.name?`${e.employeeAssignment.name}${e.employeeAssignment.category?` · ${e.employeeAssignment.category}`:""}`:null,h=({label:p,value:g})=>u.jsxs("div",{className:"ctx-info-fact",children:[u.jsx("span",{className:"ctx-info-fact-label",children:p}),u.jsx("span",{className:"ctx-info-fact-value",children:g})]});return u.jsxs("div",{className:"ctx-info-v2",children:[u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"Status"}),u.jsxs("div",{className:"ctx-info-card",children:[u.jsxs("div",{className:"ctx-info-status-row",children:[u.jsxs("span",{className:`ctx-info-status-pill status-${e.status}`,children:[u.jsx("span",{className:"ctx-info-status-dot"}),e.status]}),a&&u.jsxs("span",{className:"ctx-info-priority-pill",style:{color:a.color},children:[u.jsx("span",{"aria-hidden":"true",children:a.symbol}),a.label]})]}),e.tags&&e.tags.length>0&&u.jsx("div",{className:"ctx-info-chips",children:e.tags.map(p=>u.jsx("span",{className:"ctx-info-chip",children:p},p))})]})]}),u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"People & agent"}),u.jsxs("div",{className:"ctx-info-card",children:[c.length>0&&u.jsx(h,{label:"Assignees",value:u.jsx("div",{className:"ctx-info-chips",children:c.map(p=>u.jsx("span",{className:"ctx-info-chip",children:p},p))})}),n&&u.jsx(h,{label:"Role",value:n}),m&&u.jsx(h,{label:"Employee",value:m}),e.selectedExecutionAgent&&u.jsx(h,{label:"Execution agent",value:u.jsx("span",{className:"ctx-info-mono",children:e.selectedExecutionAgent})})]})]}),u.jsxs("section",{className:"ctx-info-section",children:[u.jsx("h4",{className:"ctx-info-section-title",children:"Timing"}),u.jsx("div",{className:"ctx-info-card",children:u.jsx(h,{label:"Created",value:u.jsx("span",{children:d.toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})})})]}),u.jsxs("section",{className:"ctx-info-section ctx-info-dev-section",children:[u.jsxs("button",{className:`ctx-info-dev-toggle${i?" expanded":""}`,type:"button",onClick:()=>r(p=>!p),"aria-expanded":i,children:[u.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",children:u.jsx("path",{d:i?"M3 6l5 5 5-5":"M6 3l5 5-5 5",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})}),u.jsx("span",{children:"Developer details"})]}),i&&u.jsxs("div",{className:"ctx-info-card ctx-info-dev-card",children:[e.workItemProjectionId&&u.jsx(h,{label:"Projection",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.workItemProjectionId})}),u.jsx(h,{label:"Task ID",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.taskId})}),u.jsx(h,{label:"Channel",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.channelId})}),e.sessionId&&u.jsx(h,{label:"Session",value:u.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.sessionId})})]})]})]})}function lV({panelState:e,width:t,onResizeMouseDown:n,isResizing:i,activeView:r,activeSession:o,activeTask:a,linkedTaskSession:c,linkedTaskSessionMessages:d,childDetailSession:m,messages:h,childDetailMessages:p,allSessions:g,openSessions:x,openSessionMessages:v,openSessionChildren:b,agents:k,childSessions:w,execMode:S,taskPreferredAgent:j,savedOrgsList:N,activeSavedOrg:O,onSavedOrgsList:R,onSavedOrgLoad:D,canShowAgentsTab:I=!1,channelId:L,channelName:M,secretaryChannelId:A,unreadCounts:B,multiSessionView:W=!1,panelTab:P,onPanelTabChange:G,commsState:$,commsMessage:q,onCommsRefresh:Y,onCommsReadMessage:Q,orgInfoData:V,canShowTeamTab:U=!1,onTeamStopRun:Z,onTitleChange:F,onSessionConfigChange:K,onSessionTaskAgentChange:ee,onContinueInNewChat:te,onStop:se,onComplete:ae,onResume:ue,onResumeTask:ie,onStopTask:we,onCompleteTask:je,onLocateOnBoard:Te,onBackToParent:Ge,onCloseTaskDetail:Ze,onOpenChildDetail:Ye,onOpenExecutionPanel:mt,onSelectSessionTab:Ft,onCloseSessionTab:Mt,onToggleMultiSessionView:jt,onCollapse:he,onExpand:ze,onMaximize:ot,onComposerSend:Ve,onMessageSend:lt,onSessionSend:me,onWorkItemClick:be,onWorkItemOpenSession:Ae,onMarkRead:Be,onSessionMarkRead:We,onLoadSessionHistory:Lt,isSessionHistoryLoading:pt}){const ke=r.kind==="secretary",qe=r.kind==="activity",Qe=r.kind==="child-detail",$e=r.kind==="task-detail",He=uC(o,w.length),Vt=r.kind==="session"&&o,ei=ke?!0:!!o,vt=!Qe&&x.length>0,bt=x.length>1,vn=!!(W&&r.kind==="session"&&o&&bt&&P==="chat"),On=C.useRef(null),wt=C.useMemo(()=>{const Re=Wf(o,g);return Yf(o,[...Re,...w])},[o,w,g]),zt=wt.displaySession??o,Hn=qc(zt),Me=C.useMemo(()=>sS(o,wt.runtimeSession,wt.timelineSessions),[o,wt.runtimeSession,wt.timelineSessions]),ht=C.useMemo(()=>Y4(o,wt.runtimeSession,wt.timelineSessions),[o,wt.runtimeSession,wt.timelineSessions]),gt=C.useMemo(()=>aS(wt.timelineSessions),[wt.timelineSessions]),fi=C.useMemo(()=>Me?.workItemLog??o?.workItemLog??[],[Me?.workItemLog,o?.workItemLog]),Vn=C.useMemo(()=>nS(Me??o,g),[Me,o,g]),pn=C.useMemo(()=>Me?.roleWorkItems??o?.roleWorkItems,[Me?.roleWorkItems,o?.roleWorkItems]),Fn=C.useMemo(()=>Me?.executorRoleWorkItems??o?.executorRoleWorkItems,[Me?.executorRoleWorkItems,o?.executorRoleWorkItems]),tt=!!(pn&&Object.keys(pn).length>0||Fn&&Object.keys(Fn).length>0),mi=Vn.length>0?Vn:w,Si=C.useMemo(()=>Xf(wt.timelineSessions),[wt.timelineSessions]),Rn=C.useMemo(()=>wt.timelineSessions.some(Re=>pt?.(Re.taskId)??!1),[wt.timelineSessions,pt]),wn=C.useCallback(Re=>{if(Re){const bn=wt.timelineSessions.find(wi=>wi.channelId===Re.channelId);if(bn&&Jc(bn,Hn)!==!1)return bn}const kt=wt.timelineSessions.find(bn=>Jc(bn,Hn)===!0);return kt||(zt??o)},[wt.timelineSessions,Hn,zt,o]),$t=C.useMemo(()=>{if(!m)return;const Re=m.assigneeIds[0];return Re?k.find(kt=>kt.agent_id===Re):void 0},[m,k]),Cn=c??(()=>{const Re=Vm(a);return Re?g.find(kt=>kt.taskId===Re||kt.runtimeTaskId===Re||kt.executionTurnId===Re)??null:null})();C.useEffect(()=>{!Qe||!m||On.current?.scrollTo({top:0,behavior:"auto"})},[Qe,m?.taskId]);const Xt=o;return e==="collapsed"?u.jsx("div",{className:"ctx-collapse-strip",onClick:()=>ze(),title:"Open panel",children:"◀"}):u.jsxs(u.Fragment,{children:[u.jsx("div",{className:`ctx-resize-handle${i?" active":""}`,onMouseDown:n}),u.jsx("div",{className:`ctx-panel${e==="maximized"?" maximized":""}`,style:e!=="maximized"?{width:t}:void 0,children:$e&&a?u.jsx(JF,{task:a,linkedSession:Cn,linkedSessionMessages:d,agents:k,onBack:Ze??he,onOpenLinkedSession:Ft,onOpenExecutionPanel:mt}):Qe&&m?u.jsxs("div",{className:"ctx-child-detail",ref:On,children:[u.jsxs("div",{className:"ctx-child-topbar",children:[u.jsx("button",{className:"ctx-back-btn",onClick:Ge,children:"← Back to parent"}),(m.canStop??m.status==="running")&&m.runtimeControlState!=="suspending"&&we&&u.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>we(m.taskId),title:"Stop this agent",children:"Stop"}),m.runtimeControlState==="suspending"&&u.jsx("button",{className:"ctx-child-stop-btn",disabled:!0,title:"Stopping this agent",children:"Stopping..."}),fC(m)&&ie&&u.jsx("button",{className:"ctx-child-resume-btn",onClick:()=>ie(m.taskId),title:"Continue this agent's runtime",children:"Continue"})]}),u.jsxs("div",{className:"ctx-child-header",children:[$t&&u.jsx("div",{className:"ctx-child-avatar",children:$t.name.charAt(0).toUpperCase()}),u.jsxs("div",{className:"ctx-child-meta",children:[u.jsx("span",{className:"ctx-child-name",children:$t?.name??m.title}),m.workItemRoleName&&u.jsx("span",{className:"ctx-child-work-item",children:m.workItemRoleName}),!m.workItemRoleName&&m.workItemProjectionId&&u.jsx("span",{className:"ctx-child-work-item",children:m.workItemProjectionId.replace(/_/g," ")})]})]}),m.handoffContext&&u.jsxs("div",{className:"exec-section ctx-child-markdown-section",children:[u.jsxs("div",{className:"exec-section-header",children:[u.jsx(Uf,{}),u.jsx("span",{children:"Received From"})]}),u.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:u.jsx(bi,{content:m.handoffContext})})]}),u.jsxs("div",{className:"ctx-child-transcript",children:[u.jsxs("div",{className:"ctx-child-transcript-header",children:[u.jsx(_l,{}),u.jsx("span",{children:"Transcript"})]}),u.jsx(al,{messages:p,channelName:m.title,viewKind:"session",detailMode:"full",agentStatus:m.agentStatus,currentTool:m.currentTool,toolElapsedMs:m.toolElapsedMs,lastToolSummary:m.lastToolSummary,progressLog:m.progressLog,draftAssistantText:m.draftAssistantText,draftUpdatedAt:m.draftUpdatedAt,draftIteration:m.draftIteration,draftTurnId:m.draftTurnId,onMarkRead:Be,hasOlderHistory:my([m],p.length,"full",!os(m)),totalMessageCount:m.messageCount,onLoadOlderHistory:Re=>Lt?.(m.taskId,Re,"full"),loadingOlderHistory:pt?.(m.taskId)??!1,scrollPolicy:"initial-bottom",scrollScope:m.channelId,showRuntimeProgress:!0,renderUserMarkdown:!0},m.channelId)]}),m.artifacts&&m.artifacts.length>0&&u.jsxs("div",{className:"ctx-child-artifacts",children:[u.jsxs("div",{className:"ctx-child-section-header",children:[u.jsx(Rm,{}),u.jsx("span",{children:"Artifacts"})]}),u.jsx("ul",{className:"ctx-child-artifact-list",children:m.artifacts.map((Re,kt)=>u.jsx("li",{children:Re},kt))})]}),m.handoffTo&&u.jsxs("div",{className:"ctx-child-markdown-section ctx-child-passed-to",children:[u.jsxs("div",{className:"ctx-child-section-header",children:[u.jsx(Uf,{}),u.jsx("span",{children:"Passed To"})]}),u.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:u.jsx(bi,{content:m.handoffTo})})]})]}):u.jsxs(u.Fragment,{children:[vt&&u.jsxs("div",{className:"ctx-session-strip",children:[u.jsx("div",{className:"ctx-session-strip-scroll",children:x.map(Re=>{const kt=B?.[Re.channelId]??0,bn=o?.taskId===Re.taskId;return u.jsxs("div",{className:`ctx-session-chip${bn?" active":""}`,children:[u.jsxs("button",{className:"ctx-session-chip-main",onClick:()=>Ft?.(Re.taskId),title:Re.title,children:[u.jsx("span",{className:`ctx-session-chip-status status-${Re.status}`}),u.jsx("span",{className:"ctx-session-chip-title",children:Re.title}),kt>0&&u.jsx("span",{className:"ctx-session-chip-unread",children:kt>99?"99+":kt})]}),u.jsx("button",{className:"ctx-session-chip-close",onClick:()=>Mt?.(Re.taskId),title:"Close tab",children:"×"})]},Re.taskId)})}),bt&&u.jsx("button",{className:`ctx-session-view-btn${W?" active":""}`,onClick:jt,children:W?"Single View":"Multi View"})]}),u.jsxs("div",{className:"ctx-header",children:[vn?u.jsx("span",{className:"ctx-header-title",children:He?"Open Runtime Sessions":"Open Sessions"}):Vt?u.jsxs("div",{className:"ctx-header-tabs",role:"tablist","aria-label":"Session view",children:[u.jsx("button",{role:"tab","aria-selected":P==="chat",className:`ctx-tab${P==="chat"?" active":""}`,onClick:()=>G("chat"),children:"Chat"}),I&&u.jsx("button",{role:"tab","aria-selected":P==="agents",className:`ctx-tab${P==="agents"?" active":""}`,onClick:()=>G("agents"),children:"Agents"}),u.jsx("button",{role:"tab","aria-selected":P==="info",className:`ctx-tab${P==="info"?" active":""}`,onClick:()=>G("info"),children:"Info"}),Y&&u.jsx("button",{role:"tab","aria-selected":P==="comms",className:`ctx-tab${P==="comms"?" active":""}`,onClick:()=>G("comms"),children:"Comms"}),U&&u.jsx("button",{role:"tab","aria-selected":P==="team",className:`ctx-tab${P==="team"?" active":""}`,onClick:()=>G("team"),children:"Team"})]}):ke?u.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Secretary"}):u.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Activity"}),u.jsxs("div",{className:"ctx-header-actions",children:[e==="open"&&u.jsx("button",{onClick:ot,title:"Maximize",children:u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:u.jsx("rect",{x:"2",y:"2",width:"10",height:"10",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"})})}),e==="maximized"&&u.jsx("button",{onClick:ze,title:"Restore",children:u.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:[u.jsx("rect",{x:"1",y:"3",width:"8",height:"8",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("path",{d:"M5 3V1.5A.5.5 0 015.5 1H12.5a.5.5 0 01.5.5V8.5a.5.5 0 01-.5.5H11",stroke:"currentColor",strokeWidth:"1.3"})]})}),u.jsx("button",{onClick:he,title:"Close panel",children:u.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:u.jsx("path",{d:"M3 3l8 8M11 3l-8 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})})]})]}),u.jsxs("div",{className:"ctx-body",children:[!o&&!ke&&!qe&&u.jsxs("div",{className:"ctx-empty",children:[u.jsx("span",{className:"ctx-empty-icon",children:"📋"}),u.jsx("span",{children:He?"Select a Work Item to see details":"Select a task to see details"})]}),vn&&u.jsx("div",{className:"ctx-multi-grid",children:x.map(Re=>{const kt=v[Re.taskId]??[],bn=b[Re.taskId]??[],wi=Wf(Re,g),In=Yf(Re,[...wi,...bn]),It=sS(Re,In.runtimeSession,In.timelineSessions),yi=nS(It??Re,g),Zn=It?.roleWorkItems??Re.roleWorkItems,ti=cC(Zn,bn)??0,ln=Re.assigneeIds.map(Dt=>k.find(Ot=>Ot.agent_id===Dt)?.name??Dt).filter(Boolean),Kt=tV(It??Re,ti),Tt=uC(Re,bn.length),Zt=In.displaySession??Re,Un=aS(In.timelineSessions),dn=Xf(In.timelineSessions),Je=py(It??Zt,Math.max(dn,kt.length)),ni=In.timelineSessions.some(Dt=>pt?.(Dt.taskId)??!1);return u.jsxs("section",{className:`ctx-multi-card${o?.taskId===Re.taskId?" focused":""}`,children:[u.jsxs("div",{className:"ctx-multi-card-header",children:[u.jsxs("button",{className:"ctx-multi-card-main",onClick:()=>Ft?.(Re.taskId),title:"Focus session",children:[u.jsx("span",{className:`ctx-multi-card-status status-${Re.status}`}),u.jsx("span",{className:"ctx-multi-card-title",children:Re.title})]}),u.jsxs("div",{className:"ctx-multi-card-actions",children:[((It??Re).canStop??(It??Re).status==="running")&&(It??Re).runtimeControlState!=="suspending"&&we&&u.jsx("button",{onClick:()=>we(In.runtimeSession?.taskId??Re.taskId),children:"Stop"}),(It??Re).runtimeControlState==="suspending"&&u.jsx("button",{disabled:!0,children:"Stopping..."}),fC(It??Re)&&ie&&u.jsx("button",{onClick:()=>ie(Re.taskId),children:"Continue"}),(It??Re).status!=="done"&&(It??Re).status!=="cancelled"&&je&&u.jsx("button",{onClick:()=>je(Re.taskId),children:"Done"}),u.jsx("button",{onClick:()=>Ft?.(Re.taskId),children:"Focus"}),u.jsx("button",{onClick:()=>Mt?.(Re.taskId),title:"Close tab",children:"×"})]})]}),u.jsxs("div",{className:"ctx-multi-card-meta",children:[u.jsx("span",{children:rV(Re)}),u.jsx("span",{children:Re.status}),Kt&&u.jsx("span",{children:Kt}),ln.length>0&&u.jsx("span",{children:ln.join(", ")}),u.jsx("span",{children:eV(Re.updatedAt)})]}),u.jsx("div",{className:"ctx-multi-card-body",children:u.jsx(al,{messages:kt,channelName:Zt?.title??Re.title,viewKind:"session",detailMode:qc(Zt),agentStatus:Tt?void 0:It?.agentStatus??Zt?.agentStatus,currentTool:Tt?void 0:It?.currentTool??Zt?.currentTool,toolElapsedMs:Tt?void 0:It?.toolElapsedMs??Zt?.toolElapsedMs,lastToolSummary:Tt?void 0:It?.lastToolSummary??Zt?.lastToolSummary,progressLog:Tt?void 0:Un,draftAssistantText:Tt?void 0:It?.draftAssistantText??Zt?.draftAssistantText,draftUpdatedAt:Tt?void 0:It?.draftUpdatedAt??Zt?.draftUpdatedAt,draftIteration:Tt?void 0:It?.draftIteration??Zt?.draftIteration,draftTurnId:Tt?void 0:It?.draftTurnId??Zt?.draftTurnId,isCompanyRuntime:Tt,workItemLog:It?.workItemLog??Re.workItemLog,childSessions:yi,showWorkItemRuntimeCard:!Tt,onSend:(Dt,Ot,An)=>me?.(Re.taskId,Dt,void 0,An),onWorkItemClick:be,onWorkItemOpenSession:Ae,onMarkRead:()=>We?.(Re.taskId),scrollScope:Re.channelId,hasOlderHistory:my(In.timelineSessions,kt.length,qc(Zt??Re),!In.timelineSessions.some(os)),totalMessageCount:dn,onLoadOlderHistory:Dt=>{const Ot=qc(Zt??Re),An=In.timelineSessions.find(jn=>jn.channelId===Dt?.channelId),Gn=(An&&Jc(An,Ot)!==!1?An:void 0)??In.timelineSessions.find(jn=>Jc(jn,Ot)===!0)??Zt??Re;return Lt?.(Gn.taskId,Dt,Ot)},loadingOlderHistory:ni,showRuntimeProgress:qc(Zt)==="full"},Zt?.channelId??Re.channelId)}),u.jsx(uy,{disabled:!1,channelId:It?.channelId??Re.channelId,execMode:ov(Re,S),companyProfile:Re.companyProfile,taskPreferredAgent:dC(Re,Je,j),agentStatus:It?.agentStatus??Zt?.agentStatus,currentTool:It?.currentTool??Zt?.currentTool,displayTool:It?.displayTool??Zt?.displayTool,activeAgentCount:ti||void 0,runtimeControlState:(It??Zt)?.runtimeControlState,canStop:(It??Zt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:Re.orgId??O??null,lockedMode:Je,autoFocus:!1,contextTokens:It?.contextTokens??Zt?.contextTokens,contextWindow:It?.contextWindow??Zt?.contextWindow,contextRemainingPct:It?.contextRemainingPct??Zt?.contextRemainingPct??100,onSend:(Dt,Ot)=>me?.(Re.taskId,Dt,Ot,rE(Ov(kt).latestPendingReplyMetadata)),onModeChange:(Dt,Ot,An)=>K?.(Re.taskId,Dt,Ot,An),onTaskAgentChange:Dt=>ee?.(Re.taskId,Dt),onContinueInNewChat:te,onSavedOrgsRefresh:R,onSavedOrgLoad:D,onStop:()=>we?.(In.runtimeSession?.taskId??Re.taskId)})]},Re.taskId)})}),qe&&u.jsxs(u.Fragment,{children:[u.jsx("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-secondary)",borderBottom:"1px solid var(--border)"},children:"Recent activity across all sessions"}),u.jsx(al,{messages:h,channelName:"Activity",viewKind:"activity",detailMode:"summary",onSend:lt,onMarkRead:Be,scrollScope:L},L)]}),ke&&u.jsxs(u.Fragment,{children:[u.jsx(al,{messages:h,channelName:"Secretary",viewKind:"secretary",detailMode:"summary",onSend:lt,onMarkRead:Be,scrollScope:A},A),u.jsx(uy,{disabled:!1,channelId:A,placeholder:"Talk to Secretary about policies, rules, preferences...",onSend:Ve})]}),o&&!ke&&!qe&&!vn&&P==="chat"&&u.jsxs(u.Fragment,{children:[u.jsx(q8,{session:ht??o,agents:k,onTitleChange:F,onViewOnBoard:Te?()=>Te(o.taskId):void 0,onStop:se,onComplete:(ht??o).status!=="done"&&(ht??o).status!=="cancelled"?ae:void 0,onResume:ue}),He&&u.jsx("div",{className:"ctx-work-item-progress",children:u.jsx(jI,{workItemLog:fi,roleWorkItems:pn,executorRoleWorkItems:Fn,childSessions:Vn,isCompanyRuntime:He,onWorkItemClick:be})}),u.jsx(al,{messages:h,channelName:M,viewKind:"session",detailMode:Hn,agentStatus:He?void 0:Me?.agentStatus??zt?.agentStatus,currentTool:He?void 0:Me?.currentTool??zt?.currentTool,toolElapsedMs:He?void 0:Me?.toolElapsedMs??zt?.toolElapsedMs,lastToolSummary:He?void 0:Me?.lastToolSummary??zt?.lastToolSummary,progressLog:He?void 0:gt,draftAssistantText:He?void 0:Me?.draftAssistantText??zt?.draftAssistantText,draftUpdatedAt:He?void 0:Me?.draftUpdatedAt??zt?.draftUpdatedAt,draftIteration:He?void 0:Me?.draftIteration??zt?.draftIteration,draftTurnId:He?void 0:Me?.draftTurnId??zt?.draftTurnId,isCompanyRuntime:He,workItemLog:fi,roleWorkItems:pn,executorRoleWorkItems:Fn,childSessions:Vn,onSend:lt,onWorkItemClick:be,onWorkItemOpenSession:Ae,onMarkRead:Be,scrollScope:L,hasOlderHistory:my(wt.timelineSessions,h.length,Hn,!wt.timelineSessions.some(os)),totalMessageCount:Si,onLoadOlderHistory:Re=>{const kt=wn(Re);if(kt)return Lt?.(kt.taskId,Re,Hn)},loadingOlderHistory:Rn,showWorkItemRuntimeCard:!1,showRuntimeProgress:Hn==="full"},L),u.jsx(uy,{disabled:!ei,channelId:Me?.channelId??L,execMode:ov(o,S),companyProfile:o.companyProfile,taskPreferredAgent:dC(o,py(Me??zt??o,Math.max(Si,h.length)),j),agentStatus:Me?.agentStatus??zt?.agentStatus,currentTool:Me?.currentTool??zt?.currentTool,displayTool:Me?.displayTool??zt?.displayTool,runtimeControlState:(Me??zt)?.runtimeControlState,canStop:(Me??zt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:o.orgId??O??null,lockedMode:py(Me??zt??o,Math.max(Si,h.length)),activeAgentCount:cC(pn,mi),contextTokens:Me?.contextTokens??zt?.contextTokens,contextWindow:Me?.contextWindow??zt?.contextWindow,contextRemainingPct:Me?.contextRemainingPct??zt?.contextRemainingPct??100,onSend:Ve,onModeChange:(Re,kt,bn)=>K?.(o.taskId,Re,kt,bn),onTaskAgentChange:Re=>ee?.(o.taskId,Re),onContinueInNewChat:te,onSavedOrgsRefresh:R,onSavedOrgLoad:D,onStop:se})]}),o&&!ke&&!vn&&P==="agents"&&I&&(mi.length>0||tt?u.jsx(QF,{sessions:mi,roleWorkItems:pn,isCompanyRuntime:He,agents:k,onOpenChildDetail:Ye,onOpenExecutionPanel:mt}):u.jsxs("div",{className:"ctx-empty",children:[u.jsx("span",{className:"ctx-empty-icon",children:"🧠"}),u.jsx("span",{children:"No child agents have started for this session yet"})]})),o&&!ke&&!vn&&P==="info"&&Xt&&u.jsx(aV,{task:Xt,agents:k,roleLabel:El(Xt)}),P==="comms"&&Y&&Q&&u.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:u.jsx(P8,{state:$??null,message:q??null,onRefresh:Y,onReadMessage:Q,embedded:!0})}),P==="team"&&U&&u.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:u.jsx(V8,{orgInfoData:V??null,commsState:$??null,onStopRun:Z,embedded:!0})})]})]})})]})}function cV({initialWidth:e,minWidth:t,maxWidth:n,onCollapse:i}){const[r,o]=C.useState(e),[a,c]=C.useState(!1),d=C.useRef(0),m=C.useRef(0),h=C.useRef(e);h.current=r;const p=C.useCallback(g=>{g.preventDefault(),d.current=g.clientX,m.current=h.current,c(!0)},[]);return C.useEffect(()=>{if(!a)return;const g=v=>{const b=d.current-v.clientX,k=m.current+b;if(k<t-50){i?.(),c(!1);return}o(Math.min(n,Math.max(t,k)))},x=()=>{c(!1)};return document.body.style.userSelect="none",document.body.style.cursor="col-resize",document.addEventListener("mousemove",g),document.addEventListener("mouseup",x),()=>{document.body.style.userSelect="",document.body.style.cursor="",document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",x)}},[a,t,n,i]),{width:r,isResizing:a,handleMouseDown:p}}const uV=200;function mC(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?`ui-${e.randomUUID()}`:`ui-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function dV(e,t,n){if(e!=="org"&&e!=="custom"||!t)return!0;const{roles:i,employees:r}=t,o=Um(t),a=t.top_level_role_ids??[],c=t.final_decider_role_id??"";if(i.length===0)return confirm(`Your org has no roles defined. + +Set up at least one role before running a task. + +Go to Org tab now?`)&&n?.(),!1;if(a.length>1&&!c)return confirm(`Your organization has multiple top-level roles but no final decider selected. + +Choose one final decider in the Org tab before running a task. + +Go to Org tab now?`)&&n?.(),!1;const d=[],m=new Set(i.map(x=>x.role_id));o.runtimeTeams.filter(x=>x.member_role_ids.some(v=>m.has(v))||x.manager_role_id&&m.has(x.manager_role_id)).length===0&&d.push("No runtime teams defined — the system will auto-generate from your roles");const p=new Set(r.map(x=>x.role_id)),g=i.filter(x=>!p.has(x.role_id));if(g.length>0){const x=g.map(v=>v.name).join(", ");d.push(`${g.length} role(s) have no employees: ${x}`)}return d.length>0?confirm(`Before running this task: + +`+d.map(x=>"• "+x).join(` +`)+` + +Run anyway?`):!0}function fV(e){if(!e)return!1;const t=Um(e);return!!(t.projectRun?.run_id||t.runtimeTeams.length>0||t.runtimeSeats.length>0)}function mV(e,t){return e?e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}function hy(e,t=0){if(!e)return!1;const n=String(e.execMode??"").trim().toLowerCase();return t>0||!!e.isCompanyRuntime||!!e.roleWorkItems||!!e.executorRoleWorkItems||n==="company"||n==="org"||n==="custom"}function pC(e){return String(e?.originTaskId??e?.taskId??"").trim()||null}function pV({boardColor:e,title:t,onCommit:n}){const[i,r]=C.useState(!1),[o,a]=C.useState(t),c=C.useRef(null);C.useEffect(()=>{i||a(t)},[t,i]);const d=C.useCallback(()=>{const h=o.trim();h&&h!==t?n(h):a(t),r(!1)},[o,t,n]),m=C.useCallback(()=>{a(t),r(!0),setTimeout(()=>c.current?.select(),0)},[t]);return u.jsx("div",{className:"board-selector",children:u.jsx("div",{className:"board-tabs",children:u.jsxs("span",{className:"board-tab active board-tab-editable",style:{"--board-color":e},children:[u.jsx("span",{className:"board-tab-dot",style:{background:e}}),i?u.jsx("input",{ref:c,className:"board-tab-title-input",value:o,onChange:h=>a(h.target.value),onBlur:d,onKeyDown:h=>{h.key==="Enter"&&d(),h.key==="Escape"&&(a(t),r(!1))}}):u.jsx("span",{className:"board-tab-title",onClick:m,title:"Click to edit session title",children:t})]})})})}function hV({boardStore:e,agents:t,officeMap:n,execMode:i,companyProfile:r,taskPreferredAgent:o,chatStore:a,sessionStore:c,projectId:d,onRunTask:m,onCreateTask:h,onMoveTask:p,onCreateSession:g,onSessionSend:x,onSecretarySend:v,onDeleteSession:b,onTitleChange:k,onSessionConfigChange:w,onSessionTaskAgentChange:S,onContinueInNewChat:j,onSessionStop:N,onSessionResume:O,onSessionComplete:R,onLoadSessionDetail:D,onOpenExecutionPanel:I,onCollabSync:L,orgInfoData:M,onNavigateToOrg:A,commsState:B,commsMessage:W,onCommsRefresh:P,onCommsReadMessage:G,savedOrgsList:$,activeSavedOrg:q,onSavedOrgsList:Y,onSavedOrgLoad:Q}){const{sessions:V,activeSessionId:U,activeSession:Z}=c,{markRead:F}=a,[K,ee]=C.useState("collapsed"),{width:te,isResizing:se,handleMouseDown:ae}=cV({initialWidth:380,minWidth:300,maxWidth:600,onCollapse:()=>ee("collapsed")}),[ue,ie]=C.useState("chat"),[we,je]=C.useState(null),[Te,Ge]=C.useState({kind:"activity"}),[Ze,Ye]=C.useState([]),[mt,Ft]=C.useState(!1),[Mt,jt]=C.useState({}),he=C.useRef(D),ze=C.useRef(V),ot=C.useRef(a.getChannelMessages),Ve=C.useRef({scope:null,active:new Set,child:null}),lt=C.useRef(new Set),me=C.useRef(0);ze.current=V,ot.current=a.getChannelMessages;const be=i==="company"||i==="org"||i==="custom",Ae=`secretary:${d}`,Be=`activity:${d}`,We=C.useMemo(()=>we?V.find(de=>de.taskId===we)??null:null,[V,we]),Lt=C.useMemo(()=>Te.kind!=="task-detail"?null:e.tasks.find(de=>de.id===Te.taskId)??null,[Te,e.tasks]),pt=C.useMemo(()=>{const de=Vm(Lt);return de?V.find(ve=>ve.taskId===de||ve.runtimeTaskId===de||ve.executionTurnId===de)??null:null},[V,Lt]),ke=C.useMemo(()=>pt?a.getChannelMessages(pt.channelId):[],[a.messages,a.getChannelMessages,pt]),qe=C.useMemo(()=>Af(Z,V),[V,Z]),Qe=C.useMemo(()=>Wf(Z,V),[V,Z]),$e=C.useMemo(()=>Yf(Z,[...Qe,...qe]),[Z,qe,Qe]);C.useEffect(()=>{he.current=D},[D]);const He=C.useCallback((de,ve,Pe="summary")=>{const ut=he.current;if(!ut||!de)return;const on=me.current,ce=ze.current.find(_t=>_t.taskId===de)?.channelId,Se=ve&&ce&&ve.channelId!==ce?ot.current(ce).find(_t=>Gf(_t,Pe)):ve,Le=[on,de,Pe,Se?.timestamp??"latest",Se?.id??""].join("|");if(lt.current.has(Le))return;lt.current.add(Le),jt(_t=>_t[de]?_t:{..._t,[de]:!0});let Ue;try{Ue=ut(de,{limit:uV,beforeCreatedAt:Se?.timestamp,beforeMessageId:Se?.id,detailLevel:Pe})}catch{lt.current.delete(Le),me.current===on&&(jt(ct=>ct[de]?{...ct,[de]:!1}:ct),Ve.current.active.delete(`${de}:${Pe}`),Ve.current.child===de&&(Ve.current.child=null));return}return Promise.resolve(Ue).catch(()=>{me.current===on&&(Ve.current.active.delete(`${de}:${Pe}`),Ve.current.child===de&&(Ve.current.child=null))}).finally(()=>{if(lt.current.delete(Le),me.current!==on)return;const _t=`${on}|${de}|`;[...lt.current.keys()].some(nt=>nt.startsWith(_t))||jt(nt=>nt[de]?{...nt,[de]:!1}:nt)})},[]),Vt=C.useCallback(de=>!!Mt[de],[Mt]);C.useLayoutEffect(()=>{me.current+=1,lt.current.clear(),Ve.current={scope:null,active:new Set,child:null},jt({})},[d]),C.useEffect(()=>()=>{me.current+=1,lt.current.clear()},[]),C.useEffect(()=>{we&&!We&&je(null)},[we,We]),C.useEffect(()=>{Te.kind==="task-detail"&&!Lt&&Ge({kind:"activity"})},[Te,Lt]);const ei=C.useRef(null);C.useEffect(()=>{if(!pt){ei.current=null;return}ei.current!==pt.taskId&&(ei.current=pt.taskId,He(pt.taskId,void 0,"full"))},[pt,He]),C.useEffect(()=>{if(!we){Ve.current.child=null;return}Ve.current.child!==we&&(Ve.current.child=we,He(we,void 0,"full"))},[we,He]),C.useEffect(()=>{if(!U){Ve.current.scope=null,Ve.current.active.clear();return}Ve.current.scope!==U&&(Ve.current.scope=U,Ve.current.active.clear());const de=$e.timelineSessions.length>0?$e.timelineSessions:V.find(ve=>ve.taskId===U)?[V.find(ve=>ve.taskId===U)]:[];if(de.length===0){Ve.current.active.clear();return}for(const ve of de){const Pe=hy(Z,qe.length)?"summary":mV(ve),ut=`${ve.taskId}:${Pe}`;Ve.current.active.has(ut)||(Ve.current.active.add(ut),He(ve.taskId,void 0,Pe))}},[$e.timelineSessions,Z,U,qe.length,He,V]);const vt=C.useMemo(()=>we?{kind:"child-detail"}:Te.kind==="task-detail"||Te.kind==="secretary"?Te:U?{kind:"session",taskId:U}:{kind:"activity"},[Te,U,we]),bt=C.useMemo(()=>vt.kind==="secretary"?Ae:vt.kind==="child-detail"&&We?We.channelId:vt.kind==="session"&&$e.displaySession?$e.displaySession.channelId:vt.kind==="session"&&Z?Z.channelId:Be,[vt,$e.displaySession,Z,We,Ae,Be]),vn=C.useMemo(()=>{if(vt.kind==="activity")return[Be];if(vt.kind==="secretary")return[Ae];if(vt.kind==="child-detail"&&We)return[We.channelId];if(vt.kind==="session"){const de=$e.timelineSessions.map(ve=>ve.channelId).filter((ve,Pe,ut)=>!!ve&&ut.indexOf(ve)===Pe);if(de.length>0)return de}return bt?[bt]:[]},[vt.kind,$e.timelineSessions,We,Be,Ae,bt]),On=C.useMemo(()=>{const de=new Set;for(const ve of V)ve.status!=="cancelled"&&de.add(ve.channelId);return de.add(Be),de.add(Ae),de},[V,Be,Ae]),wt=C.useMemo(()=>{if(vt.kind==="activity")return a.messages.filter(de=>de.sender!=="user"&&On.has(de.channelId)).sort((de,ve)=>ve.timestamp-de.timestamp).slice(0,50).reverse();if(vt.kind==="session"&&vn.length>1){const de=vn.map(ve=>a.getChannelMessages(ve));return hy(Z,qe.length)&&Z?oS(de.flat(),Z.channelId):zx(de)}return a.getChannelMessages(bt)},[a.messages,a.getChannelMessages,bt,vt.kind,On,Z,qe.length,vn]),zt=C.useMemo(()=>We?a.getChannelMessages(We.channelId):[],[a.messages,a.getChannelMessages,We]),Hn=C.useMemo(()=>{if(vt.kind==="session")return rE(Ov(wt).latestPendingReplyMetadata)},[wt,vt.kind]),Me=C.useMemo(()=>[...be?V.filter(ve=>ve.mode!=="child"):V].sort((ve,Pe)=>Pe.updatedAt-ve.updatedAt),[V,be]),ht=C.useMemo(()=>{if(!be)return null;const de=new Set;for(const ve of V)ve.mode==="child"&&de.add(ve.taskId);return de.size>0?de:null},[V,be]),gt=C.useMemo(()=>{if(!ht)return e.tasksByColumn;const de={};for(const[ve,Pe]of Object.entries(e.tasksByColumn))de[ve]=Pe.filter(ut=>!ht.has(ut.id));return de},[e.tasksByColumn,ht]),fi=!!(Z&&(Z.isCompanyRuntime||qe.length>0)),Vn=!!(Z&&(be||fi)),pn=!!(Z&&be&&fV(M));C.useEffect(()=>{ue==="agents"&&!Vn&&ie("chat"),ue==="comms"&&!P&&ie("chat"),ue==="team"&&!pn&&ie("chat")},[ue,Vn,pn,P]);const Fn=C.useMemo(()=>{const de={};for(const ve of V)de[ve.channelId]=a.getUnreadCount(ve.channelId);return de[Ae]=a.getUnreadCount(Ae),de},[V,a.getUnreadCount,Ae]),tt=C.useMemo(()=>Ze.map(de=>V.find(ve=>ve.taskId===de)).filter(de=>!!de&&de.mode!=="child"),[Ze,V]),mi=C.useMemo(()=>{const de={};for(const ve of tt){const Pe=Af(ve,V),ut=Wf(ve,V),Pt=Yf(ve,[...ut,...Pe]).timelineSessions.map(ce=>a.getChannelMessages(ce.channelId));de[ve.taskId]=hy(ve,Pe.length)?oS(Pt.flat(),ve.channelId):zx(Pt)}return de},[tt,V,a.getChannelMessages]),Si=C.useMemo(()=>{const de={};for(const ve of tt)de[ve.taskId]=Af(ve,V);return de},[tt,V]),Rn=C.useCallback(de=>{Ye(ve=>ve.includes(de)?ve:[...ve,de])},[]),wn=C.useRef(null);C.useEffect(()=>{U&&!wn.current&&K==="collapsed"&&(ee("open"),ie("chat")),wn.current=U},[U,K]),C.useEffect(()=>{U&&Rn(U)},[U,Rn]),C.useEffect(()=>{const de=new Set(V.map(ve=>ve.taskId));Ye(ve=>ve.filter(Pe=>de.has(Pe))),jt(ve=>Object.fromEntries(Object.entries(ve).filter(([Pe])=>de.has(Pe))))},[V]),C.useEffect(()=>{mt&&tt.length<2&&Ft(!1)},[mt,tt.length]),C.useEffect(()=>{const de=ve=>{if(ve.key==="Escape"&&K!=="collapsed"){const Pe=ve.target?.tagName;if(Pe==="INPUT"||Pe==="TEXTAREA"||Pe==="SELECT")return;ee("collapsed")}};return document.addEventListener("keydown",de),()=>document.removeEventListener("keydown",de)},[K]);const $t=C.useCallback(()=>{for(const de of vn)F(de)},[vn,F]),Cn=C.useCallback(de=>{const ve=V.find(Pe=>Pe.taskId===de);ve&&F(ve.channelId)},[V,F]),Xt=C.useCallback(de=>{V.find(Pe=>Pe.taskId===de)&&(Rn(de),c.setActiveSession(de),Ge({kind:"session",taskId:de}),ee("open"),ie("chat"),je(null))},[V,Rn,c]),Re=C.useCallback(de=>{const ve=Ze.filter(ut=>ut!==de);if(Ye(ve),we===de&&je(null),U!==de)return;const Pe=ve[ve.length-1]??null;if(c.setActiveSession(Pe),Pe){Ge({kind:"session",taskId:Pe}),ie("chat");return}Ge({kind:"activity"})},[Ze,we,U,c]),kt=C.useCallback(de=>{if(!de){Ge({kind:"activity"}),c.setActiveSession(null),je(null);return}const ve=V.find(Pe=>Pe.taskId===de);if(be&&ve?.mode==="child"){je(de),ee("open");return}Xt(de)},[V,c,be,Xt]),bn=C.useCallback(()=>{Ge({kind:"secretary"}),c.setActiveSession(null),je(null),ee("open")},[c]),wi=C.useCallback(de=>{const ve=e.tasks.find(ut=>ut.id===de.id);if(be&&ve){je(null),Ge({kind:"task-detail",taskId:ve.id}),ee("open"),ie("info");return}V.find(ut=>ut.taskId===de.id)?Xt(de.id):ve&&ve.phase!=="cancelled"&&(c.createSession({projectId:d,taskId:ve.id,channelId:`session:${ve.id}`,sessionId:ve.sessionId,title:ve.title,status:"pending",columnId:ve.columnId,execMode:i,companyProfile:r,assigneeIds:ve.assigneeIds,priority:ve.priority,tags:ve.tags,selectedExecutionAgent:ve.selectedExecutionAgent,createdAt:ve.createdAt,updatedAt:ve.updatedAt,messageCount:0,progressLog:[]}),Rn(de.id),c.setActiveSession(de.id),Ge({kind:"session",taskId:de.id}),ee("open"),ie("chat"),L?.())},[V,e.tasks,c,Xt,Rn,L,be]),In=C.useCallback(de=>{if(!e.activeBoardId)return;const ve=e.activeBoardColumns.find(ut=>ut.name==="Todo");if(!ve)return;const Pe=e.createTask({boardId:e.activeBoardId,columnId:ve.id,title:de});h(de,e.activeBoardId,ve.id,Pe.id)},[e,h]),It=C.useCallback(de=>{e.setActiveBoard(de);const ve=V.find(Pe=>Pe.mode!=="child"&&pC(Pe)===de);if(ve){Xt(ve.taskId);return}je(null),Ge({kind:"activity"}),c.setActiveSession(null)},[e,V,Xt,c]),yi=C.useMemo(()=>new Set(e.boards.map(de=>de.id)),[e.boards]);C.useEffect(()=>{if(be){const de=Lt?.boardId??pC(Z)??null;if(!de||!yi.has(de)){e.activeBoardId!==null&&e.setActiveBoard(null);return}e.activeBoardId!==de&&e.setActiveBoard(de);return}e.boards.length>0&&!e.activeBoardId&&e.setActiveBoard(e.boards[0].id)},[be,Lt?.boardId,Z,yi,e.activeBoardId,e.boards,e.setActiveBoard]);const Zn=C.useCallback(de=>{const ve=e.tasks.find(Se=>Se.id===de);if(!ve)return;const Pe=V.find(Se=>Se.taskId===de),ut=Pe?.execMode??i,on=Pe?.companyProfile??r,Pt=ut==="org"||ut==="custom"?"custom":ut==="company"?on:void 0;if(!dV(ut,M,A))return;m(de,ve.title,ve.description??"",ut,Pt);const ce=e.activeBoardColumns.find(Se=>Se.name==="In Progress");ce&&e.moveTask(de,ce.id,0)},[e,m,V,i,r,M,A]),ti=C.useCallback((de,ve,Pe,ut)=>{w?.(de,ve,Pe,ut)},[w]),ln=C.useCallback(de=>{K==="maximized"&&ee("open"),setTimeout(()=>{document.querySelector(`[data-task-id="${de}"]`)?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},100)},[K]),Kt=C.useCallback(()=>{const ve=($e.runtimeSession??$e.displaySession??Z)?.taskId??U;ve&&N?.(ve)},[$e.runtimeSession,$e.displaySession,Z,U,N]),Tt=C.useCallback(()=>{we||U&&R?.(U)},[U,we,R]),Zt=C.useCallback(de=>{N?.(de)},[N]),Un=C.useCallback(()=>{const de=$e.runtimeSession??$e.displaySession??Z,ve=U??de?.taskId,Pe=de?.resumeParentSessionId??de?.parentSessionId??de?.sessionId;ve&&O?.(ve,Pe,de?.pendingRuntimeCheckpointId)},[$e.runtimeSession,$e.displaySession,Z,U,O]),dn=C.useCallback(de=>{const ve=V.find(ut=>ut.taskId===de),Pe=ve?.resumeParentSessionId??ve?.parentSessionId??ve?.sessionId;O?.(de,Pe,ve?.pendingRuntimeCheckpointId)},[V,O]),Je=C.useCallback(de=>{R?.(de)},[R]),ni=C.useCallback(()=>{if(!mt&&vt.kind!=="session"){const de=U??tt[tt.length-1]?.taskId??null;de&&Xt(de)}Ft(de=>!de)},[mt,vt.kind,U,tt,Xt]),Dt=C.useCallback((de,ve,Pe,ut)=>{const on=ut?.ui_message_id?ut:{...ut??{},ui_message_id:mC()};x(de,ve,Pe,on)},[x]),Ot=C.useCallback((de,ve)=>{if(vt.kind==="secretary"){v?.(de);return}const Pe=U;if(!Pe)return;const ut=$e.runtimeSession??$e.displaySession??Z,on=String(ut?.pendingRuntimeCheckpointId??"").trim();let Pt=Hn??(on?{response_to_checkpoint_id:on}:void 0);if(!String(Pt?.response_to_checkpoint_id??"").trim()){const Se=mC();Pt={...Hn??{},ui_message_id:Se};const Le=$e.displaySession??Z;a.sendMessage({channelId:Le?.channelId??`session:${Pe}`,sender:"user",senderName:"You",content:de,metadata:{ui_message_id:Se}})}Dt(Pe,de,ve,Pt)},[vt.kind,U,$e.runtimeSession,$e.displaySession,Z,Hn,a,Dt,v]),An=C.useCallback((de,ve,Pe)=>{const ut=ve??U;ut&&Dt(ut,de,void 0,Pe)},[U,Dt]),Gn=C.useCallback(de=>{const ve=V.find(Pe=>Pe.taskId===de||Pe.runtimeTaskId===de||Pe.executionTurnId===de);ve&&(je(ve.taskId),ee("open"),ie("chat"))},[V]),jn=C.useCallback(de=>{if(I){I(de);return}Gn(de)},[Gn,I]),Ln=vt.kind==="secretary",xi=Ln?"Secretary":Z?Z.title:"Activity";return u.jsxs("div",{className:`workspace-page${K==="maximized"?" panel-maximized":""}`,children:[u.jsx(e5,{sessions:Me,activeSessionId:Ln?null:U,activeChannel:Ln?Ae:null,secretaryChannelId:Ae,unreadCounts:Fn,onSelect:kt,onCreateSession:g,onDeleteSession:b,onSelectSecretary:v?bn:void 0}),K!=="maximized"&&u.jsxs("div",{className:"workspace-board",children:[t.length>0&&u.jsx(N8,{agents:t,tasks:e.tasks}),be?e.activeBoard&&Z&&u.jsx(pV,{boardColor:e.activeBoard.color,title:e.activeBoard.name,onCommit:de=>k(Z.taskId,de)},Z.taskId):e.boards.length>1&&u.jsx(I8,{boards:e.boards,activeBoardId:e.activeBoardId,onSelect:It}),be&&!e.activeBoard?u.jsx("div",{className:"kanban-empty-state",children:u.jsx("p",{children:"Select a Runtime Session on the left to view its Work Item board."})}):u.jsxs(u.Fragment,{children:[u.jsx(E8,{columns:e.activeBoardColumns,tasksByColumn:gt,agents:t,officeMap:n,store:e,companyMode:be,selectedTaskId:vt.kind==="task-detail"?vt.taskId:U,onCardClick:wi,onStartTask:Zn,onQuickCreate:In,onMoveTask:p}),be&&e.activeBoard&&e.tasks.filter(de=>de.boardId===e.activeBoardId).length===0&&u.jsx("div",{className:"kanban-empty-state kanban-empty-state-inline",children:u.jsx("p",{children:"No work items yet — start delegation to populate this board."})})]})]}),u.jsx(lV,{panelState:K,width:te,onResizeMouseDown:ae,isResizing:se,activeView:vt,activeSession:Z,activeTask:Lt,linkedTaskSession:pt,linkedTaskSessionMessages:ke,childDetailSession:We,messages:wt,childDetailMessages:zt,allSessions:V,openSessions:tt,openSessionMessages:mi,openSessionChildren:Si,agents:t,childSessions:qe,execMode:i,taskPreferredAgent:o,savedOrgsList:$??null,activeSavedOrg:q??null,onSavedOrgsList:Y,onSavedOrgLoad:Q,canShowAgentsTab:Vn,channelId:bt,channelName:xi,secretaryChannelId:Ae,unreadCounts:Fn,multiSessionView:mt,panelTab:ue,onPanelTabChange:ie,commsState:B??null,commsMessage:W??null,onCommsRefresh:P?()=>P({session_id:Z?.sessionId||void 0,project_id:d||void 0}):void 0,onCommsReadMessage:G,orgInfoData:M??null,canShowTeamTab:pn,onTeamStopRun:U?()=>N?.(U):void 0,onTitleChange:k,onSessionConfigChange:ti,onSessionTaskAgentChange:S,onContinueInNewChat:j,onStop:Kt,onComplete:Tt,onResume:Un,onResumeTask:dn,onStopTask:Zt,onCompleteTask:Je,onLocateOnBoard:ln,onBackToParent:()=>je(null),onCloseTaskDetail:()=>Ge({kind:"activity"}),onOpenChildDetail:Gn,onOpenExecutionPanel:I,onSelectSessionTab:Xt,onCloseSessionTab:Re,onToggleMultiSessionView:ni,onCollapse:()=>ee("collapsed"),onExpand:()=>ee("open"),onMaximize:()=>ee(de=>de==="maximized"?"open":"maximized"),onComposerSend:Ot,onMessageSend:An,onSessionSend:Dt,onWorkItemClick:jn,onWorkItemOpenSession:Gn,onMarkRead:$t,onSessionMarkRead:Cn,onLoadSessionHistory:He,isSessionHistoryLoading:Vt})]})}function gV(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}const C0=2e3,hC={child_task_result:80,child_task_result_retry:79,company_role_result:75,company_role_result_retry:74,child_result:70,runtime_v2_assistant:60,runtime_v2_company_assistant:20,top_level_reply:40,worker_notification:10};function Br(e){return e.metadata??{}}function fm(e){const t=String(e??"").replace(/\r\n/g,` +`).replace(/\r/g,` +`).split(` +`).map(r=>r.trimEnd()).join(` +`).replace(/\n{3,}/g,` + +`).trim(),n=yV(t),i=n.split(/\n{2,}/).map(r=>r.trim()).filter(Boolean);return i.length>1&&/^Verification:\s/i.test(i[i.length-1])?i.slice(0,-1).join(` + +`).trim():n}function yV(e){const t=String(e||"").trim(),n=t.match(/^\*\*(.{8,160}?)\*\*:\s+([\s\S]+)$/);if(n){const a=n[2].trim();if(a.length>=80)return a}const i=t.indexOf(": ");if(i<8||i>160)return t;const r=t.slice(0,i).replace(/\*/g,"").trim(),o=t.slice(i+2).trim();return o.length<80||!/[A-Za-z\u4e00-\u9fff]/.test(r)||/^(https?|file)$/i.test(r)?t:o}function Rl(e){const t=Br(e),n=new Set,i=typeof t.checkpoint_type=="string"?t.checkpoint_type.trim():"",r=typeof t.checkpoint_id=="string"?t.checkpoint_id.trim():"";for(const o of[e.id,typeof t.ui_message_id=="string"?t.ui_message_id:"",i&&r?`checkpoint:${i}:${r}`:""]){const a=String(o??"").trim();a&&n.add(a)}return n}function cl(e){return new Set([...Rl(e)].map(t=>`${e.channelId}\0${t}`))}function xV(e){return e.startsWith("checkpoint:")}function ci(e){return typeof e.timestamp=="number"?e.timestamp:0}function av(e){return String(e.id??"").startsWith("msg-")}function DI(e){return!av(e)}function gC(e){const t={};for(const n of e){if(!DI(n))continue;const i=ci(n);i>(t[n.channelId]??0)&&(t[n.channelId]=i)}return t}function vV(e,t,n){return n<=(e[t]??0)?e:{...e,[t]:n}}function bV(e,t){const n={};for(const i of e){if(!DI(i)||i.sender==="user")continue;const r=t[i.channelId]??0;ci(i)<=r||(n[i.channelId]=(n[i.channelId]??0)+1)}return n}function yC(e){const t=String(e.sender??"").trim().toLowerCase(),n=Br(e),i=typeof n.role=="string"?n.role.trim().toLowerCase():"";return t==="user"||i==="user"?"user":"assistant"}function xC(e){const t=Br(e),n=String(e.sender??"").trim().toLowerCase();let i=0;const r=OI(e);return r&&(i+=1e3+r),t.source==="engine"&&(i+=100),n&&n!=="system"&&(i+=20),n&&!["assistant","system","user"].includes(n)&&(i+=5),e.replyToId&&(i+=2),i+=Math.min(Object.keys(t).length,10),i}function vC(e){return String(Br(e).source??"").trim().toLowerCase()==="engine"}function OI(e){const t=Br(e),n=String(t.transcript_kind??"").trim();if(n)return hC[n]??0;const i=String(t.kind??"").trim();return hC[i]??0}function Al(e){return OI(e)>0}function LI(e,t){if(e.channelId!==t.channelId)return!1;const n=Rl(e),i=Rl(t);for(const r of n)if(i.has(r))return!0;return!1}function mm(e,t){if(LI(e,t))return!0;if(e.channelId!==t.channelId||yC(e)!==yC(t)||fm(e.content)!==fm(t.content))return!1;const n=Al(e)&&Al(t);if(!n&&String(e.replyToId??"")!==String(t.replyToId??"")||!(vC(e)||vC(t)))return!1;const i=ci(e),r=ci(t);return!(!n&&i&&r&&Math.abs(i-r)>C0)}function pm(e,t,n=!1){let i=e,r=t;const o=av(e),a=av(t);o!==a?(i=o?t:e,r=o?e:t):(n||xC(t)>xC(e))&&(i=t,r=e);const c=[];for(const j of[r.mentions,i.mentions])for(const N of j??[])c.includes(N)||c.push(N);const d=Rl(e),m=Rl(t);let h="";for(const j of d)if(m.has(j)&&!xV(j)){h=j;break}const p=fm(i.content),g=p&&p===fm(r.content)?p:i.content,x=String(Br(e).checkpoint_id??"").trim(),v=String(Br(t).checkpoint_id??"").trim(),b=!!x&&x===v,k=Al(e)&&Al(t),w=k?String(Br(e).ui_timeline_id??Br(t).ui_timeline_id??Dv(e)).trim():"",S={...Br(r),...Br(i)};return w&&(S.ui_timeline_id=w),{...r,...i,...h?{id:h}:{},content:g,metadata:S,mentions:c,timestamp:b||k?ci(e)||ci(t):ci(i)||ci(r)}}function bC(e){const t=[],n=new Map;for(const i of[...e].sort((r,o)=>ci(r)-ci(o))){const r=cl(i);let o=-1,a=!1;for(const d of r){const m=n.get(d);if(m!==void 0){o=m,a=t[m].id===i.id;break}}if(o===-1){const d=ci(i),m=Al(i);for(let h=t.length-1;h>=0;h--){const p=ci(t[h]);if(!m&&d>0&&p>0&&d-p>C0)break;if(mm(t[h],i)){o=h;break}}}const c=o===-1?t.length:o;o===-1?t.push(i):t[o]=pm(t[o],i,a);for(const d of cl(t[c]))n.has(d)||n.set(d,c)}return t}function _V(e,t){const n=[...e],i=new Map;n.forEach((r,o)=>{for(const a of cl(r))i.set(a,o)});for(const r of[...t].sort((o,a)=>ci(o)-ci(a))){let o=-1;for(const a of cl(r)){const c=i.get(a);if(c!==void 0){o=c;break}}if(o<0){for(let a=n.length-1;a>=0;a-=1)if(mm(n[a],r)){o=a;break}}if(o<0)o=n.length,n.push(r);else{const a=n[o];n[o]=pm(a,r,a.id===r.id)}for(const a of cl(r))i.set(a,o);for(const a of cl(n[o]))i.set(a,o)}return n.sort((r,o)=>ci(r)===ci(o)?r.id.localeCompare(o.id):ci(r)-ci(o))}function kV(e,t){switch(t.type){case"SET":return t.channels;case"CLEAR":return[];case"ADD":return e.some(n=>n.id===t.channel.id)?e:[...e,t.channel];case"REMOVE":return e.filter(n=>n.id!==t.channelId);case"REMOVE_PARTICIPANT":return e.map(n=>({...n,participants:n.participants.filter(i=>i!==t.agentId)}));default:return e}}function SV(e,t){switch(t.type){case"SET":{const n=bC(t.messages);if(e.length===0)return n;const i=e.filter(r=>typeof r.id=="string"&&r.id.startsWith("msg-")&&!n.some(o=>mm(r,o)));return i.length===0?n:bC([...n,...i])}case"CLEAR":return[];case"ADD":{const n=ci(t.message);Rl(t.message);let i=!1;for(let r=e.length-1;r>=0;r--){const o=ci(e[r]);if(!i&&n>0&&o>0&&n-o>C0&&(i=!0),LI(e[r],t.message)){const a=[...e];return a[r]=pm(e[r],t.message,e[r].id===t.message.id),a}if((Al(t.message)||!i)&&mm(e[r],t.message)){const a=[...e];return a[r]=pm(e[r],t.message),a}}return[...e,t.message]}case"MERGE":return t.messages.length===0?e:_V(e,t.messages);case"MARK_SENDER_DELETED":return e.map(n=>n.sender===t.senderId?{...n,senderDeleted:!0,senderName:"[已删除的 Agent]"}:n);case"REMOVE_BY_CHANNEL":return e.filter(n=>n.channelId!==t.channelId);case"REMOVE_BY_TASK_ID":return e.filter(n=>n.channelId!==`session:${t.taskId}`&&n.metadata?.task_id!==t.taskId);default:return e}}function wV(){const[e,t]=C.useReducer(kV,[]),[n,i]=C.useReducer(SV,[]),[r,o]=C.useState({}),[a,c]=C.useState("default"),d=C.useRef(null),m=C.useMemo(()=>gC(n),[n]),h=C.useRef(m);h.current=m;const p=C.useMemo(()=>{const L={};for(const M of n)L[M.channelId]||(L[M.channelId]=[]),L[M.channelId].push(M);return L},[n]),g=C.useMemo(()=>bV(n,r),[n,r]),x=C.useCallback(L=>{const M={id:`msg-${gV()}`,channelId:L.channelId,sender:L.sender,senderName:L.senderName,content:L.content,timestamp:Date.now(),replyToId:L.replyToId,mentions:[],metadata:L.metadata};return i({type:"ADD",message:M}),M},[]),v=C.useCallback(L=>p[L]??[],[p]),b=C.useCallback(L=>g[L]??0,[g]),k=C.useCallback(L=>{const M=h.current[L]??0;M<=0||o(A=>vV(A,L,M))},[]),w=C.useCallback(L=>{i({type:"MARK_SENDER_DELETED",senderId:L})},[]),S=C.useCallback(L=>{t({type:"REMOVE_PARTICIPANT",agentId:L})},[]),j=C.useCallback(L=>{t({type:"REMOVE",channelId:`session:${L}`}),i({type:"REMOVE_BY_TASK_ID",taskId:L})},[]),N=C.useCallback(()=>{t({type:"CLEAR"}),i({type:"CLEAR"}),d.current=null,o({})},[]),O=C.useCallback((L,M,A)=>{const B=L||"default",W=B!==a,P=d.current!==B;d.current=B,c(B),t({type:"SET",channels:M}),i(W?{type:"SET",messages:A}:{type:"MERGE",messages:A}),P&&o(gC(A))},[a]),R=C.useCallback(L=>{i({type:"ADD",message:L})},[]),D=C.useCallback(L=>{i({type:"MERGE",messages:L})},[]),I=C.useCallback(L=>{t({type:"ADD",channel:L})},[]);return C.useMemo(()=>({scopeProjectId:a,channels:e,messages:n,sendMessage:x,getChannelMessages:v,getUnreadCount:b,markRead:k,markSenderDeleted:w,removeParticipant:S,removeSessionData:j,clear:N,initFromBackend:O,addMessageFromBackend:R,mergeMessagesFromBackend:D,addChannelFromBackend:I}),[a,e,n,x,v,b,k,w,S,j,N,O,R,D,I])}const Km=4e3;function yl(e,t){return e.length>t?e.slice(-t):e}function lv(e,t,n){if(!e)return t;if(!t||e===t)return e;if(t.startsWith(e))return t;if(e.startsWith(t)||e.endsWith(t))return e;if(t.endsWith(e))return t;const i=Math.min(e.length,t.length);for(let r=i;r>0;r-=1)if(e.slice(-r)===t.slice(0,r))return`${e}${t.slice(r)}`;return n==="tool_call"&&/[}\]"]$/.test(e)&&!/^\s/.test(t)?`${e} +${t}`:`${e}${t}`}function CV(e,t){const n=e.trim().replace(/\s+/g," ");return n?n.length>120?`${n.slice(0,120).trimEnd()}...`:n:t||"Thinking"}function jV(e){return{timestamp:Number.isFinite(e.timestamp)?e.timestamp:Date.now(),type:e.type,summary:typeof e.summary=="string"?e.summary:"",detail:typeof e.detail=="string"&&e.detail?e.detail:void 0,turnId:typeof e.turnId=="string"&&e.turnId?e.turnId:void 0,itemId:typeof e.itemId=="string"&&e.itemId?e.itemId:void 0,streamId:typeof e.streamId=="string"&&e.streamId?e.streamId:void 0,toolCallId:typeof e.toolCallId=="string"&&e.toolCallId?e.toolCallId:void 0,permissionGroupKey:typeof e.permissionGroupKey=="string"&&e.permissionGroupKey?e.permissionGroupKey:void 0,seq:typeof e.seq=="number"&&Number.isFinite(e.seq)?e.seq:void 0,executionMode:typeof e.executionMode=="string"&&e.executionMode?e.executionMode:void 0}}function hm(e){const t=e.itemId||e.streamId;return t?`${e.type}:${e.turnId??""}:${t}`:e.toolCallId&&(e.type==="tool_call"||e.type==="autonomy")?`${e.type}:${e.turnId??""}:${e.toolCallId}`:e.permissionGroupKey&&e.type==="autonomy"?`${e.type}:${e.turnId??""}:${e.permissionGroupKey}`:""}function EV(e,t){const n=hm(e),i=hm(t);return n&&i?n===i:t.timestamp-e.timestamp>Km||e.type!==t.type?!1:e.type==="thinking"||e.type==="assistant"?!0:e.type==="tool_call"?e.summary===t.summary:!1}function NV(e,t){return t.timestamp-e.timestamp<=Km&&e.type===t.type&&e.summary===t.summary&&(e.detail??"")===(t.detail??"")}function IV(e,t){if(e.type==="thinking"||e.type==="assistant"){const n=lv(e.detail??"",t.detail??"","thinking");return{timestamp:e.timestamp,type:e.type,summary:CV(n,t.summary||e.summary),detail:n||void 0,turnId:t.turnId??e.turnId,itemId:t.itemId??e.itemId,streamId:t.streamId??e.streamId,toolCallId:t.toolCallId??e.toolCallId,permissionGroupKey:t.permissionGroupKey??e.permissionGroupKey,seq:t.seq??e.seq,executionMode:t.executionMode??e.executionMode}}if(e.type==="tool_call"){const n=lv(e.detail??"",t.detail??"","tool_call");return{timestamp:e.timestamp,type:"tool_call",summary:t.summary||e.summary,detail:n||void 0,turnId:t.turnId??e.turnId,itemId:t.itemId??e.itemId,streamId:t.streamId??e.streamId,toolCallId:t.toolCallId??e.toolCallId,permissionGroupKey:t.permissionGroupKey??e.permissionGroupKey,seq:t.seq??e.seq,executionMode:t.executionMode??e.executionMode}}return t}function zI(e,t,n=100){const i=jV(t),r=hm(i),o=r?[...e].reverse().findIndex(d=>hm(d)===r):-1,a=o>=0?e.length-1-o:e.length-1,c=e[a];return c?r&&o>=0&&typeof c.seq=="number"&&typeof i.seq=="number"&&i.seq<=c.seq?e:NV(c,i)?yl([...e.slice(0,a),c,...e.slice(a+1)],n):EV(c,i)?yl([...e.slice(0,a),IV(c,i),...e.slice(a+1)],n):yl([...e,i],n):[i]}function PI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,i)=>zI(n,i,t),[])}function TV(e){return{timestamp:Number.isFinite(e.timestamp)?e.timestamp:Date.now(),type:e.type,workItemProjectionId:typeof e.workItemProjectionId=="string"&&e.workItemProjectionId?e.workItemProjectionId:void 0,workItemTurnType:typeof e.workItemTurnType=="string"&&e.workItemTurnType?e.workItemTurnType:void 0,workItemProjectionTitle:typeof e.workItemProjectionTitle=="string"&&e.workItemProjectionTitle?e.workItemProjectionTitle:void 0,runtimeTaskId:typeof e.runtimeTaskId=="string"&&e.runtimeTaskId?e.runtimeTaskId:void 0,executionTurnId:typeof e.executionTurnId=="string"&&e.executionTurnId?e.executionTurnId:void 0,roleName:typeof e.roleName=="string"&&e.roleName?e.roleName:void 0,detail:typeof e.detail=="string"&&e.detail?e.detail:void 0}}function BI(e,t){return e.type===t.type&&(e.workItemProjectionId??"")===(t.workItemProjectionId??"")&&(e.workItemTurnType??"")===(t.workItemTurnType??"")&&(e.workItemProjectionTitle??"")===(t.workItemProjectionTitle??"")&&(e.executionTurnId??e.runtimeTaskId??"")===(t.executionTurnId??t.runtimeTaskId??"")&&(e.roleName??"")===(t.roleName??"")}function RV(e,t){return t.timestamp-e.timestamp<=Km&&BI(e,t)&&(e.type==="thinking"||e.type==="tool_call")}function AV(e,t){return BI(e,t)&&(e.detail??"")===(t.detail??"")&&t.timestamp-e.timestamp<=Km}function MV(e,t){const n=t.type==="tool_call"?"tool_call":"thinking";return{...e,...t,timestamp:t.timestamp,detail:lv(e.detail??"",t.detail??"",n)||void 0}}function $I(e,t,n=100){const i=TV(t),r=e[e.length-1];return r?AV(r,i)?yl([...e.slice(0,-1),{...r,timestamp:i.timestamp}],n):RV(r,i)?yl([...e.slice(0,-1),MV(r,i)],n):yl([...e,i],n):[i]}function HI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,i)=>$I(n,i,t),[])}function cv(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function DV(e){return String(e??"").trim().toLowerCase()==="custom"?"custom":"corporate"}function FI(e){const t=String(e.execMode??"").trim().toLowerCase(),n=String(e.companyProfile??"").trim().toLowerCase(),i=String(e.orgId??"").trim(),o=t.length>0?cv(t):n==="custom"||i?"org":cv(t);return o==="org"?{...e,execMode:"org",companyProfile:"custom",orgId:i||void 0}:o==="company"?{...e,execMode:"company",companyProfile:"corporate",orgId:void 0}:{...e,execMode:"task",companyProfile:void 0,orgId:void 0}}const pf=100,OV=new Set(["done","failed","cancelled"]);function LV(e,t,n){const i=n,r=new Map(t.filter(c=>c.projectId===i).map(c=>[c.taskId,c])),o=new Set,a=[];for(const c of e){if(c.projectId!==i)continue;const d=r.get(c.taskId);d?(a.push(d),o.add(c.taskId)):a.push(c)}for(const c of t)c.projectId!==i||o.has(c.taskId)||(a.push(c),o.add(c.taskId));return a}function zV(e,t){const n=g=>FI({...g,progressLog:PI(g.progressLog??[],pf),workItemLog:HI(g.workItemLog??[],pf)}),i=g=>{const x=String(g.execMode??"").trim().toLowerCase();return x==="company"||x==="org"||x==="custom"||!!g.isCompanyRuntime||!!g.parentSessionId||!!g.workItemProjectionId||!!g.roleWorkItems||!!g.executorRoleWorkItems||!!g.orgId},r=g=>{const x=String(g.execMode??"").trim().toLowerCase(),v=String(g.companyProfile??"").trim().toLowerCase(),b=String(g.orgId??"").trim();return x==="task"&&(!v||v==="corporate")&&!b&&!g.isCompanyRuntime&&!g.parentSessionId&&!g.workItemProjectionId&&!g.workItemRoleId&&!g.roleWorkItems&&!g.executorRoleWorkItems},o=(g,x)=>{const v=g.execMode,b=x.execMode;return!v||v==="task"&&b&&b!=="task"&&!r(g)&&(i(g)||i(x))?b:v},a=(g,x,v)=>{const b=g[v],k=x[v];return!b||b==="native"&&k&&k!=="native"?k:b},c=(g,x)=>Object.prototype.hasOwnProperty.call(g,x),d=(g,x,v)=>c(g,v)?g[v]:x[v],m=(g,x)=>{const v=typeof g.updatedAt=="number"&&Number.isFinite(g.updatedAt)?g.updatedAt:void 0,b=typeof x.updatedAt=="number"&&Number.isFinite(x.updatedAt)?x.updatedAt:void 0;return v===void 0?b??Date.now():b===void 0?v:Math.max(b,v)},h=(g,x)=>g.runtimeControlState==="suspending"&&x.runtimeControlState==="running"?{...x,runtimeControlState:"suspending",canStop:!1,canResume:g.canResume??!1,pendingRuntimeCheckpointId:g.pendingRuntimeCheckpointId??x.pendingRuntimeCheckpointId,stopIntentId:g.stopIntentId??x.stopIntentId}:x,p=(g,x,v)=>{const b=g[v];if(b!=null)return b;if(!(OV.has(g.status)||g.status!=="running"&&g.runtimeControlState!=="running"&&g.runtimeControlState!=="suspending"&&g.runtimeControlState!=="resuming"))return x[v]};switch(t.type){case"SET":{if(t.reset)return t.sessions.map(n);const x=new Map(e.map(v=>[v.taskId,v]));return t.sessions.map(v=>{const b=x.get(v.taskId);if(!b)return n(v);const k=h(b,v);return n({...v,updatedAt:m(v,b),execMode:o(v,b),preferredAgent:a(v,b,"preferredAgent"),draftAssistantText:b.draftAssistantText??v.draftAssistantText,draftUpdatedAt:b.draftUpdatedAt??v.draftUpdatedAt,draftIteration:b.draftIteration??v.draftIteration,draftTurnId:b.draftTurnId??v.draftTurnId,agentStatus:p(v,b,"agentStatus"),currentTool:p(v,b,"currentTool"),displayTool:p(v,b,"displayTool"),toolElapsedMs:p(v,b,"toolElapsedMs"),lastToolSummary:p(v,b,"lastToolSummary"),contextTokens:b.contextTokens??v.contextTokens,contextWindow:b.contextWindow??v.contextWindow,contextRemainingPct:b.contextRemainingPct??v.contextRemainingPct,inputTokens:b.inputTokens??v.inputTokens,outputTokens:b.outputTokens??v.outputTokens,totalTokens:b.totalTokens??v.totalTokens,turnCostUsd:b.turnCostUsd??v.turnCostUsd,sessionCostUsd:b.sessionCostUsd??v.sessionCostUsd,pendingPermissionCount:b.pendingPermissionCount??v.pendingPermissionCount,drainMode:b.drainMode??v.drainMode,workItemProjectionId:v.workItemProjectionId??b.workItemProjectionId,workItemTurnType:v.workItemTurnType??b.workItemTurnType,companyProfile:d(v,b,"companyProfile"),orgId:d(v,b,"orgId"),workItemRoleId:v.workItemRoleId??b.workItemRoleId,workItemRoleName:v.workItemRoleName??b.workItemRoleName,workItemGate:v.workItemGate??b.workItemGate,roleWorkItems:v.roleWorkItems??b.roleWorkItems,executorRoleWorkItems:v.executorRoleWorkItems??b.executorRoleWorkItems,employeeAssignment:v.employeeAssignment??b.employeeAssignment,selectedExecutionAgent:a(v,b,"selectedExecutionAgent"),runtimeControlState:k.runtimeControlState??b.runtimeControlState,canStop:k.canStop??b.canStop,canResume:k.canResume??b.canResume,resumeParentSessionId:v.resumeParentSessionId??b.resumeParentSessionId,pendingRuntimeCheckpointId:k.pendingRuntimeCheckpointId??b.pendingRuntimeCheckpointId,stopIntentId:k.stopIntentId??b.stopIntentId,residentStatus:b.residentStatus??v.residentStatus,actionableInboxCount:b.actionableInboxCount??v.actionableInboxCount,protocolBacklogCount:b.protocolBacklogCount??v.protocolBacklogCount,notificationBacklogCount:b.notificationBacklogCount??v.notificationBacklogCount,latestNotification:b.latestNotification??v.latestNotification,latestPreview:v.latestPreview??b.latestPreview,latestSender:v.latestSender??b.latestSender,latestMessageId:v.latestMessageId??b.latestMessageId,indexLoaded:v.indexLoaded??b.indexLoaded,detailLoaded:b.detailLoaded??v.detailLoaded,fullLoaded:b.fullLoaded??v.fullLoaded,hasMore:v.hasMore??b.hasMore,summaryHasMore:v.summaryHasMore??b.summaryHasMore,fullHasMore:v.fullHasMore??b.fullHasMore,detailLoading:v.detailLoading??b.detailLoading,detailError:v.detailError??b.detailError,viewGeneration:v.viewGeneration??b.viewGeneration,progressLog:b.progressLog&&b.progressLog.length>0?b.progressLog:v.progressLog,workItemLog:b.workItemLog&&b.workItemLog.length>0?b.workItemLog:v.workItemLog,lastRuntimeEventType:b.lastRuntimeEventType??v.lastRuntimeEventType,activeSubagents:b.activeSubagents??v.activeSubagents,permissionRequests:b.permissionRequests??v.permissionRequests,handoffContext:v.handoffContext??b.handoffContext,handoffTo:v.handoffTo??b.handoffTo})})}case"ADD":const g=n(t.session);return e.some(x=>x.taskId===t.session.taskId)?e.map(x=>x.taskId===t.session.taskId?n({...x,...g,progressLog:g.progressLog.length>0?g.progressLog:x.progressLog,workItemLog:(g.workItemLog??[]).length>0?g.workItemLog:x.workItemLog,messageCount:Math.max(x.messageCount??0,g.messageCount??0),updatedAt:Math.max(x.updatedAt??0,g.updatedAt??0),execMode:o(g,x),preferredAgent:a(g,x,"preferredAgent"),workItemProjectionId:g.workItemProjectionId??x.workItemProjectionId,workItemTurnType:g.workItemTurnType??x.workItemTurnType,companyProfile:d(g,x,"companyProfile"),orgId:d(g,x,"orgId"),workItemRoleId:g.workItemRoleId??x.workItemRoleId,workItemRoleName:g.workItemRoleName??x.workItemRoleName,workItemGate:g.workItemGate??x.workItemGate,roleWorkItems:g.roleWorkItems??x.roleWorkItems,executorRoleWorkItems:g.executorRoleWorkItems??x.executorRoleWorkItems,employeeAssignment:g.employeeAssignment??x.employeeAssignment,selectedExecutionAgent:a(g,x,"selectedExecutionAgent"),handoffContext:g.handoffContext??x.handoffContext,handoffTo:g.handoffTo??x.handoffTo,latestPreview:g.latestPreview??x.latestPreview,latestSender:g.latestSender??x.latestSender,latestMessageId:g.latestMessageId??x.latestMessageId,indexLoaded:g.indexLoaded??x.indexLoaded,detailLoaded:g.detailLoaded??x.detailLoaded,fullLoaded:g.fullLoaded??x.fullLoaded,hasMore:g.hasMore??x.hasMore,summaryHasMore:g.summaryHasMore??x.summaryHasMore,fullHasMore:g.fullHasMore??x.fullHasMore,detailLoading:g.detailLoading??x.detailLoading,detailError:g.detailError??x.detailError,viewGeneration:g.viewGeneration??x.viewGeneration}):x):[g,...e];case"UPDATE":return e.map(x=>x.taskId===t.taskId?(()=>{const v=h(x,t.partial);return n({...x,...v,updatedAt:m(v,x),runtimeControlState:v.runtimeControlState??x.runtimeControlState,canStop:v.canStop??x.canStop,canResume:v.canResume??x.canResume,resumeParentSessionId:v.resumeParentSessionId??x.resumeParentSessionId,pendingRuntimeCheckpointId:v.pendingRuntimeCheckpointId??x.pendingRuntimeCheckpointId,stopIntentId:v.stopIntentId??x.stopIntentId,roleWorkItems:v.roleWorkItems??x.roleWorkItems,executorRoleWorkItems:v.executorRoleWorkItems??x.executorRoleWorkItems,execMode:d(v,x,"execMode"),companyProfile:d(v,x,"companyProfile"),orgId:d(v,x,"orgId"),isCompanyRuntime:v.isCompanyRuntime??x.isCompanyRuntime,workItemProjectionId:v.workItemProjectionId??x.workItemProjectionId,workItemTurnType:v.workItemTurnType??x.workItemTurnType,workItemRoleId:v.workItemRoleId??x.workItemRoleId,workItemRoleName:v.workItemRoleName??x.workItemRoleName,workItemGate:v.workItemGate??x.workItemGate,employeeAssignment:v.employeeAssignment??x.employeeAssignment,selectedExecutionAgent:v.selectedExecutionAgent??x.selectedExecutionAgent,activeSubagents:v.activeSubagents??x.activeSubagents,permissionRequests:v.permissionRequests??x.permissionRequests,contextTokens:v.contextTokens??x.contextTokens,contextWindow:v.contextWindow??x.contextWindow,contextRemainingPct:v.contextRemainingPct??x.contextRemainingPct,inputTokens:v.inputTokens??x.inputTokens,outputTokens:v.outputTokens??x.outputTokens,totalTokens:v.totalTokens??x.totalTokens,turnCostUsd:v.turnCostUsd??x.turnCostUsd,sessionCostUsd:v.sessionCostUsd??x.sessionCostUsd,...t.partial.progressLog?{progressLog:t.partial.progressLog}:{},...t.partial.workItemLog?{workItemLog:t.partial.workItemLog}:{}})})():x);case"DELETE":return e.filter(x=>x.taskId!==t.taskId);case"APPEND_PROGRESS":return e.map(x=>x.taskId!==t.taskId?x:{...x,progressLog:zI(x.progressLog,t.entry,pf),updatedAt:Math.max(x.updatedAt,t.entry.timestamp)});case"APPEND_DRAFT":return e.map(x=>{if(x.taskId!==t.taskId)return x;const v=t.turnId??x.draftTurnId,b=!!t.turnId&&!!x.draftTurnId&&t.turnId!==x.draftTurnId;return{...x,draftAssistantText:`${b?"":x.draftAssistantText??""}${t.text}`,draftUpdatedAt:t.timestamp,draftIteration:t.iteration??x.draftIteration,draftTurnId:v,updatedAt:Math.max(x.updatedAt,t.timestamp)}});case"CLEAR_DRAFT":return e.map(x=>x.taskId===t.taskId?{...x,draftAssistantText:void 0,draftUpdatedAt:void 0,draftIteration:void 0,draftTurnId:void 0}:x);case"CLEAR_PROGRESS":return e.map(x=>x.taskId===t.taskId?{...x,progressLog:[]}:x);case"APPEND_WORK_ITEM_PROGRESS":return e.map(x=>x.taskId!==t.taskId?x:{...x,workItemLog:$I(x.workItemLog??[],t.entry,pf)});case"SET_COMPANY_RUNTIME":return e.map(x=>x.taskId===t.taskId?{...x,isCompanyRuntime:t.isCompanyRuntime}:x);default:return e}}function PV(){const[e,t]=C.useReducer(zV,[]),[n,i]=C.useState(null),[r,o]=C.useState("default"),a=C.useMemo(()=>e.find(S=>S.taskId===n)??null,[e,n]),c=C.useCallback(S=>{S.projectId===r&&t({type:"ADD",session:S})},[r]),d=C.useCallback(S=>{t({type:"DELETE",taskId:S})},[]),m=C.useCallback(S=>{i(S)},[]),h=C.useCallback((S,j)=>{t({type:"UPDATE",taskId:S,partial:j})},[]),p=C.useCallback((S,j)=>{t({type:"APPEND_PROGRESS",taskId:S,entry:j})},[]),g=C.useCallback((S,j,N,O)=>{t({type:"APPEND_DRAFT",taskId:S,text:j,iteration:N,turnId:O,timestamp:Date.now()})},[]),x=C.useCallback(S=>{t({type:"CLEAR_DRAFT",taskId:S})},[]),v=C.useCallback(S=>{t({type:"CLEAR_PROGRESS",taskId:S})},[]),b=C.useCallback((S,j)=>{t({type:"APPEND_WORK_ITEM_PROGRESS",taskId:S,entry:j})},[]),k=C.useCallback((S,j)=>{t({type:"SET_COMPANY_RUNTIME",taskId:S,isCompanyRuntime:j})},[]),w=C.useCallback((S,j,N)=>{const O=S||"default",R=O!==r,D=N?.preserveExistingWhenIncomingPartial&&!R?LV(e,j,O):j.filter(I=>I.projectId===O);o(O),t({type:"SET",sessions:D,reset:R}),i(I=>!R&&I&&(D.some(L=>L.taskId===I)||N?.preserveActiveWhenMissing)?I:null)},[r,e]);return C.useMemo(()=>({scopeProjectId:r,sessions:e,activeSessionId:n,activeSession:a,createSession:c,deleteSession:d,setActiveSession:m,updateSession:h,appendProgress:p,appendDraft:g,clearDraft:x,clearProgress:v,appendWorkItemProgress:b,setCompanyRuntime:k,initFromBackend:w}),[r,e,n,a,c,d,m,h,p,g,x,v,b,k,w])}function _C(e){return e.trim()||"default"}function BV(e,t){switch(t.type){case"SET":return{projects:t.projects,activeProjectId:_C(t.activeId)};case"ADD":return e.projects.some(n=>n.id===t.project.id)?e:{...e,projects:[...e.projects,t.project]};case"REMOVE":{const n=e.projects.filter(r=>r.id!==t.id),i=e.activeProjectId===t.id?"default":e.activeProjectId;return{projects:n,activeProjectId:i}}case"SET_ACTIVE":return{...e,activeProjectId:_C(t.id)};default:return e}}function $V(){const[e,t]=C.useReducer(BV,{projects:[{id:"default",name:"default"}],activeProjectId:"default"}),n=C.useCallback((a,c)=>{t({type:"SET",projects:a,activeId:c})},[]),i=C.useCallback(a=>{t({type:"ADD",project:a})},[]),r=C.useCallback(a=>{t({type:"REMOVE",id:a})},[]),o=C.useCallback(a=>{t({type:"SET_ACTIVE",id:a})},[]);return C.useMemo(()=>({projects:e.projects,activeProjectId:e.activeProjectId,initFromBackend:n,addProject:i,removeProject:r,setActiveProject:o}),[e,n,i,r,o])}const kC={active:{label:"Working",cls:"exec-badge-running"},waiting:{label:"Waiting",cls:"exec-badge-idle"},pending:{label:"Pending",cls:"exec-badge-pending"},done:{label:"Done",cls:"exec-badge-done"},failed:{label:"Failed",cls:"exec-badge-failed"}},hf={todo:{label:"To do",cls:"exec-badge-pending"},"in-progress":{label:"In progress",cls:"exec-badge-running"},"in-review":{label:"In review",cls:"exec-badge-idle"},done:{label:"Done",cls:"exec-badge-done"},failed:{label:"Failed",cls:"exec-badge-failed"},cancelled:{label:"Cancelled",cls:"exec-badge-cancelled"}};function HV(e){const t=Math.floor((Date.now()-e)/1e3);if(t<5)return"now";if(t<60)return`${t}s ago`;const n=Math.floor(t/60);if(n<60)return`${n}m ago`;const i=Math.floor(n/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function gy(e){const t=String(e??"").trim();return t?t.replace(/[_-]/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function FV(e){return e.phase==="failed"?hf.failed:e.phase==="cancelled"?hf.cancelled:hf[e.kanbanColumn]??hf.todo}function VV(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function UV(e){const t=e.activitySections??[];return t.length>0?t.reduce((n,i)=>n+(i.entries?.length??0),0):e.progressLog.length}function GV({sections:e,fallbackEntries:t,sessionStatus:n}){const i=(e??[]).filter(r=>(r.entries?.length??0)>0||!!r.runtimeTaskId);return i.length>0?u.jsx("div",{className:"exec-activity-sections",children:i.map((r,o)=>{const a=r.entries??[],c=`${r.runtimeTaskId||r.kind}:${o}`;return u.jsxs("section",{className:"exec-activity-section",children:[u.jsxs("div",{className:"exec-activity-section-head",children:[u.jsx("span",{className:"exec-activity-section-title",children:r.title}),r.roleName&&u.jsx("span",{className:"exec-activity-section-role",children:r.roleName}),a.length>0&&u.jsx("span",{className:"exec-section-count",children:a.length})]}),a.length>0?u.jsx(Il,{entries:a,sessionStatus:n,expandedByDefault:!0}):u.jsx("div",{className:"exec-section-empty",children:"No runtime activity yet"})]},c)})}):!t||t.length===0?u.jsx("div",{className:"exec-section-empty",children:"No activity recorded yet"}):u.jsx(Il,{entries:t,sessionStatus:n,expandedByDefault:!0})}function SC({role:e,focusedWorkItemId:t,focusedExecutionTurnId:n,agents:i,onClose:r}){const o=C.useMemo(()=>e.workItems.slice().sort((S,j)=>S.createdAt-j.createdAt),[e.workItems]),c=C.useMemo(()=>o.find(S=>!!t&&S.workItemId===t||!!n&&S.executionTurnId===n)??o[o.length-1]??null,[n,t,o])?.workItemId,[d,m]=C.useState(()=>{const S=new Set;return c&&S.add(c),S}),h=C.useRef(new Set);C.useEffect(()=>{!c||h.current.has(c)||(h.current.add(c),m(S=>{if(S.has(c))return S;const j=new Set(S);return j.add(c),j}))},[c]);const p=C.useCallback(S=>{m(j=>{const N=new Set(j);return N.has(S)?N.delete(S):N.add(S),N})},[]),g=C.useRef(null),x=C.useRef(null);C.useEffect(()=>{!c||x.current===c||(x.current=c,g.current?.scrollIntoView({behavior:"smooth",block:"nearest"}))},[c]);const v=C.useCallback(S=>{S.key==="Escape"&&r()},[r]);C.useEffect(()=>(document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)),[v]);const b=i.find(S=>S.agent_id===e.roleId),k=e.roleName||b?.name||gy(e.roleId)||"Role",w=kC[e.aggregatedStatus]??kC.pending;return u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"exec-panel-backdrop",onClick:r}),u.jsxs("div",{className:"exec-panel",children:[u.jsxs("div",{className:"exec-panel-header",children:[u.jsxs("div",{className:"exec-panel-title-row",children:[u.jsx(_l,{}),u.jsx("h3",{className:"exec-panel-title",children:k}),u.jsx("span",{className:`exec-badge ${w.cls}`,children:w.label}),u.jsxs("span",{className:"exec-panel-task-count",children:[o.length," Work Item",o.length===1?"":"s"]})]}),u.jsx("button",{className:"exec-panel-close",onClick:r,title:"Close (Esc)",children:u.jsx(Dm,{})})]}),u.jsxs("div",{className:"exec-panel-identity",children:[u.jsx("div",{className:"exec-panel-avatar",children:k.charAt(0).toUpperCase()}),u.jsxs("div",{className:"exec-panel-agent-info",children:[u.jsx("span",{className:"exec-panel-agent-name",children:k}),u.jsx("span",{className:"exec-panel-agent-role",children:gy(e.roleId)}),e.roleSessionId&&u.jsx("span",{className:"exec-panel-employee",children:e.roleSessionId})]})]}),u.jsxs("div",{className:"exec-panel-body",children:[o.length===0&&u.jsx("div",{className:"exec-section-empty",children:"No work items yet"}),o.map((S,j)=>{const N=S.workItemId===c,O=d.has(S.workItemId),R=FV(S),D=UV(S);return u.jsxs("div",{ref:N?g:null,className:`exec-task-card${N?" exec-task-card-focused":""}`,children:[u.jsxs("button",{type:"button",className:"exec-task-card-header",onClick:()=>p(S.workItemId),title:O?"Collapse":"Expand",children:[u.jsxs("span",{className:"exec-task-card-index",children:["Work item #",j+1]}),u.jsx("span",{className:"exec-task-card-title",children:S.title||S.workItemId}),u.jsx("span",{className:`exec-badge ${R.cls}`,children:R.label}),u.jsx("span",{className:"exec-task-card-time",children:HV(S.updatedAt)}),u.jsx("span",{className:`exec-task-card-chevron${O?" open":""}`,"aria-hidden":"true",children:"▸"})]}),O&&u.jsxs("div",{className:"exec-task-card-body",children:[u.jsxs("div",{className:"exec-task-card-projection",children:[u.jsx(Mm,{}),u.jsx("span",{children:gy(S.kind)||"Work item"}),S.workItemProjectionId&&u.jsx("code",{children:S.workItemProjectionId}),S.executionTurnId&&u.jsx("span",{className:"exec-inline-tag",children:"Execution Turn"}),S.isReviewTarget&&u.jsx("span",{className:"exec-inline-tag",children:"Review target"}),S.executorRoleName&&u.jsx("span",{children:S.executorRoleName})]}),u.jsxs("div",{className:"exec-section",children:[u.jsxs("div",{className:"exec-section-header",children:[u.jsx(_l,{}),u.jsx("span",{children:"Activity"}),u.jsx("span",{className:"exec-section-count",children:D})]}),u.jsx("div",{className:"exec-section-content exec-activity-scroll",children:u.jsx(GV,{sections:S.activitySections,fallbackEntries:S.progressLog,sessionStatus:VV(S)})})]})]})]},S.workItemId)})]})]})]})}function qV({projects:e,activeId:t,onSelect:n,onCreate:i,onDelete:r}){const[o,a]=C.useState(!1),[c,d]=C.useState(""),[m,h]=C.useState(null),p=C.useCallback(()=>{const x=c.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-|-$/g,"");x&&(i(x),d(""),a(!1))},[c,i]),g=C.useCallback(()=>{!m||!r||(r(m),h(null))},[m,r]);return u.jsxs("div",{className:"project-selector",style:{display:"flex",alignItems:"center",gap:6},children:[u.jsx("select",{className:"theme-select",value:t,onChange:x=>n(x.target.value),title:"Switch project",children:e.map(x=>u.jsx("option",{value:x.id,children:x.name},x.id))}),o?u.jsxs("form",{onSubmit:x=>{x.preventDefault(),p()},style:{display:"flex",gap:4},children:[u.jsx("input",{autoFocus:!0,className:"theme-select",value:c,placeholder:"project-name",onChange:x=>d(x.target.value),onKeyDown:x=>{x.key==="Escape"&&a(!1)},style:{width:120}}),u.jsx("button",{type:"submit",className:"pill-btn",style:{fontSize:11,padding:"2px 8px"},children:"+"})]}):u.jsx("button",{className:"pill-btn",onClick:()=>a(!0),title:"New project",style:{fontSize:11,padding:"2px 8px"},children:"+"}),r&&t!=="default"&&!m&&u.jsx("button",{className:"pill-btn",onClick:()=>h(t),title:"Delete project",style:{fontSize:11,padding:"2px 8px",color:"#ef4444"},children:"Del"}),m&&u.jsx("div",{className:"project-delete-confirm",style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.5)"},children:u.jsxs("div",{style:{background:"var(--bg-surface, #1e1e2e)",borderRadius:12,padding:"24px 32px",maxWidth:400,boxShadow:"0 8px 32px rgba(0,0,0,0.4)",textAlign:"center"},children:[u.jsxs("p",{style:{margin:"0 0 8px",fontWeight:600,fontSize:15},children:['Delete project "',m,'"?']}),u.jsx("p",{style:{margin:"0 0 20px",fontSize:13,opacity:.7},children:"All sessions, messages, tasks, and agent data in this project will be permanently deleted. This action cannot be undone."}),u.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"center"},children:[u.jsx("button",{className:"pill-btn",onClick:()=>h(null),style:{padding:"6px 18px",fontSize:13},children:"Cancel"}),u.jsx("button",{className:"pill-btn",onClick:g,style:{padding:"6px 18px",fontSize:13,background:"#ef4444",color:"#fff"},children:"Delete"})]})]})})]})}const WV=80;function YV(e){const t=Date.now()/1e3,n=Math.max(0,t-e);if(n<60)return"just now";if(n<3600)return`${Math.floor(n/60)}m ago`;if(n<86400)return`${Math.floor(n/3600)}h ago`;if(n<604800)return`${Math.floor(n/86400)}d ago`;try{return new Date(e*1e3).toLocaleDateString()}catch{return""}}function wC(e){return(e.organization_name||e.name).trim()||e.name}function XV(e){const t=e.trim();return t.length>0&&t.length<=WV&&!/[\\/]/.test(t)&&!/[\u0000-\u001f]/.test(t)}function KV(e){return e.normalize("NFKD").replace(/[^\x00-\x7F]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]+/g,"_").replace(/_+/g,"_").replace(/^[_-]+|[_-]+$/g,"").slice(0,64)||"org"}function ZV({className:e}){return u.jsxs("svg",{className:e,width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0,children:[u.jsx("path",{d:"M8 1.5L1.5 4.5L8 7.5L14.5 4.5L8 1.5Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"}),u.jsx("path",{d:"M2 8L8 10.8L14 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.6"}),u.jsx("path",{d:"M2 11.5L8 14.2L14 11.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.35"})]})}function QV({className:e}){return u.jsx("svg",{className:e,width:"10",height:"10",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:u.jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}function JV({className:e}){return u.jsxs("svg",{className:e,width:"11",height:"11",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:[u.jsx("circle",{cx:"5",cy:"5",r:"3.2",stroke:"currentColor",strokeWidth:"1.3"}),u.jsx("path",{d:"M7.5 7.5L10 10",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]})}function eU({savedOrgs:e,activeName:t,isDirty:n,onRefresh:i,onSaveAs:r,onLoad:o,onDelete:a}){const[c,d]=C.useState(!1),[m,h]=C.useState(""),[p,g]=C.useState(0),[x,v]=C.useState(!1),[b,k]=C.useState(""),[w,S]=C.useState(null),[j,N]=C.useState(null),O=C.useRef(null),R=C.useRef(null);C.useEffect(()=>{N(null)},[t,e]);const D=(e??[]).filter(Y=>!m.trim()||Y.name.toLowerCase().includes(m.trim().toLowerCase())),I=C.useRef(!1);C.useEffect(()=>{c&&!I.current&&(I.current=!0,i())},[c,i]),C.useEffect(()=>{x&&R.current?.focus()},[x]),C.useEffect(()=>{g(Y=>Math.min(Y,Math.max(0,D.length-1)))},[D.length]),C.useEffect(()=>{if(!c)return;const Y=Q=>{O.current&&!O.current.contains(Q.target)&&L()};return document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[c]);const L=C.useCallback(()=>{d(!1),h(""),g(0),v(!1),k(""),S(null)},[]),M=C.useCallback(Y=>{if(Y===t){L();return}N(Y),o(Y),L()},[o,L,t]),A=C.useCallback(Y=>{a(Y),S(null)},[a]),B=b.trim(),W=XV(B),P=KV(B),G=(e??[]).some(Y=>Y.name===P||wC(Y).toLowerCase()===B.toLowerCase()),$=C.useCallback(()=>{W&&(r(B,G),v(!1),k(""),L())},[W,B,G,r,L]),q=Y=>{if(Y.key==="Escape"){Y.preventDefault(),L();return}if(x){Y.key==="Enter"&&(Y.preventDefault(),$());return}if(Y.key==="ArrowDown")Y.preventDefault(),g(Q=>Math.min(Q+1,Math.max(0,D.length-1)));else if(Y.key==="ArrowUp")Y.preventDefault(),g(Q=>Math.max(0,Q-1));else if(Y.key==="Enter"){const Q=D[p];Q&&M(Q.name)}else if((Y.key==="Backspace"||Y.key==="Delete")&&(Y.metaKey||Y.ctrlKey)){const Q=D[p];Q&&(Y.preventDefault(),S(Q.name))}};return u.jsxs("div",{className:"sos-wrap",ref:O,children:[u.jsxs("button",{type:"button",className:"sos-pill","data-open":c?"true":"false",onClick:()=>d(Y=>!Y),"aria-haspopup":"listbox","aria-expanded":c,title:t?`Active saved architecture: ${t}`:"No saved architecture loaded",children:[u.jsx(ZV,{className:"sos-pill-glyph"}),t?u.jsx("span",{className:"sos-pill-name",children:t}):u.jsx("span",{className:"sos-pill-name sos-pill-name--placeholder",children:"draft"}),n&&u.jsx("span",{className:"sos-pill-dirty","aria-label":"Modified since opened"}),u.jsx(QV,{className:"sos-pill-caret"})]}),c&&u.jsxs("div",{className:"sos-popover",role:"listbox",onKeyDown:q,tabIndex:-1,children:[u.jsxs("div",{className:"sos-search-row",children:[u.jsx(JV,{className:"sos-search-glyph"}),u.jsx("input",{type:"text",className:"sos-search-input",placeholder:"Search architectures…",value:m,onChange:Y=>{h(Y.target.value),g(0)},autoFocus:!0,onKeyDown:q}),u.jsx("kbd",{className:"sos-search-hint",children:"↑↓ ↵"})]}),u.jsx("div",{className:"sos-list",children:e===null?u.jsx("div",{className:"sos-empty",children:"Loading…"}):D.length===0?u.jsx("div",{className:"sos-empty",children:(e??[]).length===0?"No saved architectures.":"No matches."}):D.map((Y,Q)=>{const V=t===Y.name,U=p===Q,Z=wC(Y);return u.jsxs("div",{className:`sos-row${V?" sos-row--active":""}`,"data-highlighted":U?"true":"false",onMouseEnter:()=>g(Q),onClick:()=>M(Y.name),role:"option","aria-selected":V,children:[u.jsxs("div",{className:"sos-row-meta",children:[u.jsx("span",{className:"sos-row-name",children:Z}),u.jsxs("span",{className:"sos-row-stats",children:[Z!==Y.name&&`${Y.name} · `,Y.roles_count," ",Y.roles_count===1?"role":"roles"," · ",Y.employees_count," ",Y.employees_count===1?"employee":"employees"," · ",YV(Y.saved_at)]})]}),j===Y.name?u.jsx("span",{className:"sos-row-loading",children:"loading…"}):V?u.jsx("span",{className:"sos-row-active-chip",children:"active"}):w===Y.name?u.jsx("button",{type:"button",className:"sos-row-delete sos-row-delete--confirm",onClick:F=>{F.stopPropagation(),A(Y.name)},children:"confirm"}):u.jsx("button",{type:"button",className:"sos-row-delete",onClick:F=>{F.stopPropagation(),S(Y.name)},title:"Delete",children:"delete"})]},Y.name)})}),u.jsxs("div",{className:"sos-save-as",children:[x?u.jsxs("div",{className:"sos-save-as-form",children:[u.jsx("input",{ref:R,type:"text",className:"sos-save-as-input",placeholder:"Organization name",value:b,onChange:Y=>k(Y.target.value),onKeyDown:q}),u.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:$,disabled:!W,children:G?"Overwrite copy":"Save as copy"}),u.jsx("button",{type:"button",className:"btn btn-ghost btn-sm",onClick:()=>{v(!1),k("")},children:"Cancel"})]}):u.jsx("button",{type:"button",className:"sos-save-as-trigger",onClick:()=>v(!0),children:"+ Save as copy..."}),x&&b&&!W&&u.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Use up to 80 characters. Slashes are not allowed."}),x&&W&&G&&u.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Name exists - this will overwrite that copy."})]})]})]})}const tU=["leader","strategy","target","code","terminal","database","settings","bug","design","pen","layout","marketing","analytics","writing","clipboard","security","support","idea","person","team","camera","calendar","group","ai","generic"],fu={leader:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M5 16L3 5l5.5 5L12 4l3.5 6L21 5l-2 11H5zm0 2h14v2H5v-2z'/%3E%3C/svg%3E",strategy:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 22H5v-2h14v2zM17.16 8.26C18.22 9.63 19 10.85 19 12c0 2.21-3.13 4-7 4s-7-1.79-7-4c0-1.15.78-2.37 1.84-3.74C7.83 7.03 9 5.67 9 4.5a2.5 2.5 0 0 1 5 0c0 1.17 1.17 2.53 2.16 3.76zM12 6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z'/%3E%3C/svg%3E",target:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-14c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm0-6a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E",code:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0L19.2 12l-4.6-4.6L16 6l6 6-6 6-1.4-1.4z'/%3E%3C/svg%3E",terminal:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V8h16v10zM13 14h4v2h-4zm-3.41-.82l-2.59 2.59L8.41 17 12 13.41 8.41 9.82 7 11.24l2.59 2.59z'/%3E%3C/svg%3E",database:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4zm0 18c-4.42 0-8-1.34-8-3v-2.5c1.74 1.5 4.71 2.5 8 2.5s6.26-1 8-2.5V17c0 1.66-3.58 3-8 3zm0-5c-4.42 0-8-1.34-8-3v-2.5c1.74 1.5 4.71 2.5 8 2.5s6.26-1 8-2.5V12c0 1.66-3.58 3-8 3zm0-5c-4.42 0-8-1.34-8-3s3.58-3 8-3 8 1.34 8 3-3.58 3-8 3z'/%3E%3C/svg%3E",settings:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19.43 12.98c.04-.32.07-.64.07-.98 0-.34-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98 0 .33.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z'/%3E%3C/svg%3E",bug:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z'/%3E%3C/svg%3E",design:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9zm5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9zm-5 0C8.67 9 8 8.33 8 7.5S8.67 6 9.5 6s1.5.67 1.5 1.5S10.33 9 9.5 9zm-3 4c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z'/%3E%3C/svg%3E",pen:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E",layout:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",marketing:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M18 11v2h4v-2h-4zm-2 6.61c.96.71 2.21 1.65 3.2 2.39.4-.53.8-1.07 1.2-1.6-.99-.74-2.24-1.68-3.2-2.4-.4.54-.8 1.08-1.2 1.61zM20.4 5.6c-.4-.53-.8-1.07-1.2-1.6-.99.74-2.24 1.68-3.2 2.4.4.53.8 1.07 1.2 1.6.96-.72 2.21-1.65 3.2-2.4zM4 9c-1.1 0-2 .9-2 2v2c0 1.1.9 2 2 2h1v4h2v-4h1l5 3V6L8 9H4zm11.5 3c0-1.33-.58-2.53-1.5-3.35v6.69c.92-.81 1.5-2.01 1.5-3.34z'/%3E%3C/svg%3E",analytics:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99l1.5 1.5z'/%3E%3C/svg%3E",writing:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E",clipboard:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3E%3C/svg%3E",security:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11V11.99z'/%3E%3C/svg%3E",support:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z'/%3E%3C/svg%3E",idea:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7z'/%3E%3C/svg%3E",person:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",camera:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 15.2c-1.77 0-3.2-1.43-3.2-3.2s1.43-3.2 3.2-3.2 3.2 1.43 3.2 3.2-1.43 3.2-3.2 3.2zM9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3C/svg%3E",calendar:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z'/%3E%3C/svg%3E",group:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12.75c1.63 0 3.07.39 4.24.9 1.08.48 1.76 1.56 1.76 2.73L18 18H6l.01-1.62c0-1.17.68-2.25 1.76-2.73 1.17-.51 2.6-.9 4.23-.9zM4 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm1.13 1.1c-.37-.06-.74-.1-1.13-.1-.99 0-1.93.21-2.78.58C.48 14.9 0 15.62 0 16.43V18h4.5v-1.61c0-.83.23-1.61.63-2.29zM20 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm4 3.43c0-.81-.48-1.53-1.22-1.85-.85-.37-1.79-.58-2.78-.58-.39 0-.76.04-1.13.1.4.68.63 1.46.63 2.29V18H24v-1.57zM12 6c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3z'/%3E%3C/svg%3E",ai:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z'/%3E%3C/svg%3E",generic:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function Vu(e){return e?e.startsWith("data:")?e:fu[e]??fu.generic:fu.generic}const Wc=["file_read","file_write","file_edit","file_search","list_dir","shell_exec","web_search","web_fetch","todo_read","todo_write","browser_navigate","browser_navigate_back","browser_snapshot","browser_wait_for","browser_scroll","browser_click","browser_type","browser_select_option","browser_take_screenshot","browser_evaluate","browser_close"],nU=[{label:"Files",prefix:"file_",tools:Wc.filter(e=>e.startsWith("file_"))},{label:"Shell",prefix:"shell_",tools:Wc.filter(e=>e==="shell_exec")},{label:"Web",prefix:"web_",tools:Wc.filter(e=>e.startsWith("web_"))},{label:"TODOs",prefix:"todo_",tools:Wc.filter(e=>e.startsWith("todo_"))},{label:"Browser",prefix:"browser_",tools:Wc.filter(e=>e.startsWith("browser_"))}],iU=["codex","cursor","claude_code","opencode"],rU=[{value:"auto",label:"Auto",hint:"System picks native or external based on role config"},{value:"native",label:"Native",hint:"Run directly in-process via LLM"},{value:"external",label:"External",hint:"Delegate to an external agent (codex, cursor, etc.)"}];function sU({role:e,allRoles:t,employees:n,readOnly:i,onUpdateRole:r,onDeleteRole:o,onClose:a}){const[c,d]=C.useState(e.name),[m,h]=C.useState(e.responsibility),[p,g]=C.useState(e.reports_to),[x,v]=C.useState(e.icon??null),[b,k]=C.useState(()=>new Set(e.can_spawn)),[w,S]=C.useState(()=>new Set(e.tools)),[j,N]=C.useState(e.runtime_policy?.execution_strategy??"auto"),[O,R]=C.useState(e.preferred_external_agent??null),[D,I]=C.useState((e.prompt_refs??[]).join(` +`)),[L,M]=C.useState(!1),A=C.useRef(e.role_id);C.useEffect(()=>{A.current!==e.role_id&&(A.current=e.role_id,d(e.name),h(e.responsibility),g(e.reports_to),v(e.icon??null),k(new Set(e.can_spawn)),S(new Set(e.tools)),N(e.runtime_policy?.execution_strategy??"auto"),R(e.preferred_external_agent??null),I((e.prompt_refs??[]).join(` +`)),M(!1))},[e]);const B=C.useRef({}),W=C.useRef(null),P=C.useRef(e.role_id);C.useEffect(()=>{P.current=e.role_id},[e.role_id]);const G=C.useCallback(()=>{W.current&&(clearTimeout(W.current),W.current=null);const ie=B.current;B.current={},Object.keys(ie).length!==0&&r(P.current,ie)},[r]),$=C.useCallback(ie=>{i||(B.current={...B.current,...ie},W.current&&clearTimeout(W.current),W.current=setTimeout(G,500))},[G,i]);C.useEffect(()=>()=>{W.current&&(clearTimeout(W.current),W.current=null);const ie=B.current;Object.keys(ie).length>0&&(B.current={},r(P.current,ie))},[r]);const q=ie=>{d(ie),$({name:ie})},Y=ie=>{h(ie),$({responsibility:ie})},Q=ie=>{g(ie),$({reports_to:ie})},V=ie=>{v(ie),$({icon:ie})},U=ie=>{N(ie),$({execution_strategy:ie})},Z=ie=>{R(ie),$({preferred_external_agent:ie})},F=ie=>{I(ie);const we=ie.split(` +`).map(je=>je.trim()).filter(Boolean);$({prompt_refs:we})},K=ie=>{const we=new Set(b);we.has(ie)?we.delete(ie):we.add(ie),k(we),$({can_spawn:Array.from(we)})},ee=ie=>{const we=new Set(w);we.has(ie)?we.delete(ie):we.add(ie),S(we),$({tools:Array.from(we)})},te=C.useMemo(()=>t.filter(ie=>ie.role_id!==e.role_id),[t,e.role_id]),se=C.useMemo(()=>n.filter(ie=>(ie.role_ids?.length?ie.role_ids:[ie.role_id]).includes(e.role_id)).length,[n,e.role_id]),ae=C.useMemo(()=>D.split(` +`).filter(ie=>ie.trim()).length,[D]),ue=()=>{if(!L){M(!0);return}G(),o(e.role_id)};return u.jsxs("aside",{className:"ri-panel","aria-label":`Inspector for role ${e.name}`,children:[u.jsxs("header",{className:"ri-panel-header",children:[u.jsx("img",{src:Vu(x),alt:"",className:"ri-panel-icon"}),u.jsxs("div",{className:"ri-panel-title-wrap",children:[u.jsx("h3",{className:"ri-panel-title",children:c||"(unnamed)"}),u.jsx("code",{className:"ri-panel-id",children:e.role_id})]}),u.jsx("button",{className:"btn btn-ghost btn-sm ri-panel-close",onClick:a,title:"Close (Esc)",children:"✕"})]}),u.jsxs("div",{className:"ri-panel-body",children:[u.jsxs(nl,{title:"Identity",defaultExpanded:!0,children:[u.jsx(Nr,{label:"Name",children:u.jsx("input",{className:"ri-text-input",value:c,onChange:ie=>q(ie.target.value),disabled:i})}),u.jsx(Nr,{label:"Responsibility",children:u.jsx("textarea",{className:"ri-textarea",rows:3,value:m,onChange:ie=>Y(ie.target.value),disabled:i})}),u.jsx(Nr,{label:"Icon",children:u.jsx(oU,{value:x,onChange:V,readOnly:i})})]}),u.jsxs(nl,{title:"Hierarchy",defaultExpanded:!0,children:[u.jsx(Nr,{label:"Reports to",children:u.jsxs("select",{className:"ri-select",value:p,onChange:ie=>Q(ie.target.value),disabled:i,children:[u.jsx("option",{value:"owner",children:"You (Owner)"}),te.map(ie=>u.jsx("option",{value:ie.role_id,children:ie.name},ie.role_id))]})}),u.jsx(Nr,{label:"Can delegate to",children:u.jsx(aU,{allIds:te.map(ie=>ie.role_id),labelFor:ie=>te.find(we=>we.role_id===ie)?.name??ie,selected:b,onToggle:K,readOnly:i})}),u.jsx(Nr,{label:"Employees assigned",children:u.jsx("span",{className:"ri-meta-value",children:se})})]}),u.jsx(nl,{title:`Tools (${w.size})`,children:u.jsx(lU,{tools:w,onToggle:ee,readOnly:i})}),u.jsx(nl,{title:`Prompts (${ae})`,children:u.jsx(Nr,{label:"Prompt refs / inline",children:u.jsx("textarea",{className:"ri-textarea ri-textarea-mono",rows:5,placeholder:"One prompt ref or inline instruction per line",value:D,onChange:ie=>F(ie.target.value),disabled:i})})}),u.jsxs(nl,{title:"Runtime policy",children:[u.jsx(Nr,{label:"Execution strategy",children:u.jsx("div",{className:"ri-radio-group",children:rU.map(ie=>u.jsxs("label",{className:"ri-radio",title:ie.hint,children:[u.jsx("input",{type:"radio",name:`exec-strategy-${e.role_id}`,value:ie.value,checked:j===ie.value,onChange:()=>U(ie.value),disabled:i}),ie.label]},ie.value))})}),j==="external"&&u.jsx(Nr,{label:"Preferred external agent",children:u.jsxs("select",{className:"ri-select",value:O??"",onChange:ie=>Z(ie.target.value||null),disabled:i,children:[u.jsx("option",{value:"",children:"(any)"}),iU.map(ie=>u.jsx("option",{value:ie,children:ie},ie))]})})]}),u.jsxs(nl,{title:"Advanced",children:[u.jsx(Nr,{label:"Role type",children:u.jsx("span",{className:"ri-meta-value",children:e.role_type??"worker"})}),u.jsx(Nr,{label:"Skills",children:u.jsx("span",{className:"ri-meta-value",children:e.skill_refs&&e.skill_refs.length>0?e.skill_refs.join(", "):"(none)"})}),u.jsx(Nr,{label:"Artifact contract",children:u.jsx("span",{className:"ri-meta-value",children:e.artifact_contract_ref??"(none)"})})]})]}),!i&&u.jsx("footer",{className:"ri-panel-footer",children:u.jsx("button",{className:`btn btn-sm ${L?"btn-danger":"btn-ghost"}`,onClick:ue,onBlur:()=>M(!1),children:L?"Confirm delete?":"Delete role"})})]})}function nl({title:e,defaultExpanded:t=!1,children:n}){const[i,r]=C.useState(t);return u.jsxs("section",{className:`ri-group${i?" is-expanded":""}`,children:[u.jsxs("button",{className:"ri-group-header",onClick:()=>r(o=>!o),children:[u.jsx("span",{className:"ri-group-caret",children:i?"▾":"▸"}),u.jsx("span",{className:"ri-group-title",children:e})]}),i&&u.jsx("div",{className:"ri-group-body",children:n})]})}function Nr({label:e,children:t}){return u.jsxs("div",{className:"ri-field",children:[u.jsx("label",{className:"ri-field-label",children:e}),u.jsx("div",{className:"ri-field-control",children:t})]})}function oU({value:e,onChange:t,readOnly:n}){const[i,r]=C.useState(!1);return u.jsxs("div",{className:"ri-icon-picker",children:[u.jsxs("button",{className:"ri-icon-picker-trigger",onClick:()=>!n&&r(o=>!o),disabled:n,children:[u.jsx("img",{src:Vu(e),alt:"",className:"ri-icon-picker-current"}),u.jsx("span",{className:"ri-icon-picker-label",children:e??"generic"})]}),i&&u.jsxs("div",{className:"ri-icon-picker-popover",children:[u.jsx("button",{className:`ri-icon-option${e===null?" is-active":""}`,onClick:()=>{t(null),r(!1)},title:"Default icon",children:u.jsx("img",{src:fu.generic,alt:""})}),tU.filter(o=>o!=="generic").map(o=>u.jsx("button",{className:`ri-icon-option${e===o?" is-active":""}`,onClick:()=>{t(o),r(!1)},title:o,children:u.jsx("img",{src:fu[o],alt:o})},o))]})]})}function aU({allIds:e,labelFor:t,selected:n,onToggle:i,readOnly:r}){const[o,a]=C.useState(!1),c=e.filter(d=>!n.has(d));return u.jsxs("div",{className:"ri-multiselect",children:[u.jsxs("div",{className:"ri-chips",children:[Array.from(n).map(d=>u.jsxs("span",{className:"ri-chip",children:[t(d),!r&&u.jsx("button",{className:"ri-chip-x",onClick:()=>i(d),title:"Remove",children:"×"})]},d)),!r&&c.length>0&&u.jsx("button",{className:"ri-chip-add",onClick:()=>a(d=>!d),children:"+ Add"}),n.size===0&&r&&u.jsx("span",{className:"ri-meta-value",children:"(none)"})]}),o&&!r&&u.jsx("div",{className:"ri-multiselect-popover",children:c.map(d=>u.jsx("button",{className:"ri-multiselect-option",onClick:()=>{i(d),a(!1)},children:t(d)},d))})]})}function lU({tools:e,onToggle:t,readOnly:n}){return u.jsx("div",{className:"ri-toolcheck",children:nU.map(i=>u.jsxs("fieldset",{className:"ri-toolcheck-group",children:[u.jsx("legend",{className:"ri-toolcheck-legend",children:i.label}),u.jsx("div",{className:"ri-toolcheck-items",children:i.tools.map(r=>u.jsxs("label",{className:"ri-toolcheck-item",children:[u.jsx("input",{type:"checkbox",checked:e.has(r),onChange:()=>t(r),disabled:n}),u.jsx("span",{className:"ri-toolcheck-name",children:r.replace(i.prefix,"")||r})]},r))})]},i.prefix))})}function bo(e,t){return typeof e=="function"?e(t):e}function gr(e,t){return n=>{t.setState(i=>({...i,[e]:bo(n,i[e])}))}}function Zm(e){return e instanceof Function}function cU(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function uU(e,t){const n=[],i=r=>{r.forEach(o=>{n.push(o);const a=t(o);a!=null&&a.length&&i(a)})};return i(e),n}function yt(e,t,n){let i=[],r;return o=>{let a;n.key&&n.debug&&(a=Date.now());const c=e(o);if(!(c.length!==i.length||c.some((h,p)=>i[p]!==h)))return r;i=c;let m;if(n.key&&n.debug&&(m=Date.now()),r=t(...c),n==null||n.onChange==null||n.onChange(r),n.key&&n.debug&&n!=null&&n.debug()){const h=Math.round((Date.now()-a)*100)/100,p=Math.round((Date.now()-m)*100)/100,g=p/16,x=(v,b)=>{for(v=String(v);v.length<b;)v=" "+v;return v};console.info(`%c⏱ ${x(p,5)} /${x(h,5)} ms`,` + font-size: .6rem; + font-weight: bold; + color: hsl(${Math.max(0,Math.min(120-120*g,120))}deg 100% 31%);`,n?.key)}return r}}function xt(e,t,n,i){return{debug:()=>{var r;return(r=e?.debugAll)!=null?r:e[t]},key:!1,onChange:i}}function dU(e,t,n,i){const r=()=>{var a;return(a=o.getValue())!=null?a:e.options.renderFallbackValue},o={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(i),renderValue:r,getContext:yt(()=>[e,n,t,o],(a,c,d,m)=>({table:a,column:c,row:d,cell:m,getValue:m.getValue,renderValue:m.renderValue}),xt(e.options,"debugCells"))};return e._features.forEach(a=>{a.createCell==null||a.createCell(o,n,t,e)},{}),o}function fU(e,t,n,i){var r,o;const c={...e._getDefaultColumnDef(),...t},d=c.accessorKey;let m=(r=(o=c.id)!=null?o:d?typeof String.prototype.replaceAll=="function"?d.replaceAll(".","_"):d.replace(/\./g,"_"):void 0)!=null?r:typeof c.header=="string"?c.header:void 0,h;if(c.accessorFn?h=c.accessorFn:d&&(d.includes(".")?h=g=>{let x=g;for(const b of d.split(".")){var v;x=(v=x)==null?void 0:v[b]}return x}:h=g=>g[c.accessorKey]),!m)throw new Error;let p={id:`${String(m)}`,accessorFn:h,parent:i,depth:n,columnDef:c,columns:[],getFlatColumns:yt(()=>[!0],()=>{var g;return[p,...(g=p.columns)==null?void 0:g.flatMap(x=>x.getFlatColumns())]},xt(e.options,"debugColumns")),getLeafColumns:yt(()=>[e._getOrderColumnsFn()],g=>{var x;if((x=p.columns)!=null&&x.length){let v=p.columns.flatMap(b=>b.getLeafColumns());return g(v)}return[p]},xt(e.options,"debugColumns"))};for(const g of e._features)g.createColumn==null||g.createColumn(p,e);return p}const Li="debugHeaders";function CC(e,t,n){var i;let o={id:(i=n.id)!=null?i:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const a=[],c=d=>{d.subHeaders&&d.subHeaders.length&&d.subHeaders.map(c),a.push(d)};return c(o),a},getContext:()=>({table:e,header:o,column:t})};return e._features.forEach(a=>{a.createHeader==null||a.createHeader(o,e)}),o}const mU={createTable:e=>{e.getHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,i,r)=>{var o,a;const c=(o=i?.map(p=>n.find(g=>g.id===p)).filter(Boolean))!=null?o:[],d=(a=r?.map(p=>n.find(g=>g.id===p)).filter(Boolean))!=null?a:[],m=n.filter(p=>!(i!=null&&i.includes(p.id))&&!(r!=null&&r.includes(p.id)));return gf(t,[...c,...m,...d],e)},xt(e.options,Li)),e.getCenterHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,i,r)=>(n=n.filter(o=>!(i!=null&&i.includes(o.id))&&!(r!=null&&r.includes(o.id))),gf(t,n,e,"center")),xt(e.options,Li)),e.getLeftHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,i)=>{var r;const o=(r=i?.map(a=>n.find(c=>c.id===a)).filter(Boolean))!=null?r:[];return gf(t,o,e,"left")},xt(e.options,Li)),e.getRightHeaderGroups=yt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,i)=>{var r;const o=(r=i?.map(a=>n.find(c=>c.id===a)).filter(Boolean))!=null?r:[];return gf(t,o,e,"right")},xt(e.options,Li)),e.getFooterGroups=yt(()=>[e.getHeaderGroups()],t=>[...t].reverse(),xt(e.options,Li)),e.getLeftFooterGroups=yt(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),xt(e.options,Li)),e.getCenterFooterGroups=yt(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),xt(e.options,Li)),e.getRightFooterGroups=yt(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),xt(e.options,Li)),e.getFlatHeaders=yt(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Li)),e.getLeftFlatHeaders=yt(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Li)),e.getCenterFlatHeaders=yt(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Li)),e.getRightFlatHeaders=yt(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Li)),e.getCenterLeafHeaders=yt(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var i;return!((i=n.subHeaders)!=null&&i.length)}),xt(e.options,Li)),e.getLeftLeafHeaders=yt(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var i;return!((i=n.subHeaders)!=null&&i.length)}),xt(e.options,Li)),e.getRightLeafHeaders=yt(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var i;return!((i=n.subHeaders)!=null&&i.length)}),xt(e.options,Li)),e.getLeafHeaders=yt(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,i)=>{var r,o,a,c,d,m;return[...(r=(o=t[0])==null?void 0:o.headers)!=null?r:[],...(a=(c=n[0])==null?void 0:c.headers)!=null?a:[],...(d=(m=i[0])==null?void 0:m.headers)!=null?d:[]].map(h=>h.getLeafHeaders()).flat()},xt(e.options,Li))}};function gf(e,t,n,i){var r,o;let a=0;const c=function(g,x){x===void 0&&(x=1),a=Math.max(a,x),g.filter(v=>v.getIsVisible()).forEach(v=>{var b;(b=v.columns)!=null&&b.length&&c(v.columns,x+1)},0)};c(e);let d=[];const m=(g,x)=>{const v={depth:x,id:[i,`${x}`].filter(Boolean).join("_"),headers:[]},b=[];g.forEach(k=>{const w=[...b].reverse()[0],S=k.column.depth===v.depth;let j,N=!1;if(S&&k.column.parent?j=k.column.parent:(j=k.column,N=!0),w&&w?.column===j)w.subHeaders.push(k);else{const O=CC(n,j,{id:[i,x,j.id,k?.id].filter(Boolean).join("_"),isPlaceholder:N,placeholderId:N?`${b.filter(R=>R.column===j).length}`:void 0,depth:x,index:b.length});O.subHeaders.push(k),b.push(O)}v.headers.push(k),k.headerGroup=v}),d.push(v),x>0&&m(b,x-1)},h=t.map((g,x)=>CC(n,g,{depth:a,index:x}));m(h,a-1),d.reverse();const p=g=>g.filter(v=>v.column.getIsVisible()).map(v=>{let b=0,k=0,w=[0];v.subHeaders&&v.subHeaders.length?(w=[],p(v.subHeaders).forEach(j=>{let{colSpan:N,rowSpan:O}=j;b+=N,w.push(O)})):b=1;const S=Math.min(...w);return k=k+S,v.colSpan=b,v.rowSpan=k,{colSpan:b,rowSpan:k}});return p((r=(o=d[0])==null?void 0:o.headers)!=null?r:[]),d}const pU=(e,t,n,i,r,o,a)=>{let c={id:t,index:i,original:n,depth:r,parentId:a,_valuesCache:{},_uniqueValuesCache:{},getValue:d=>{if(c._valuesCache.hasOwnProperty(d))return c._valuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return c._valuesCache[d]=m.accessorFn(c.original,i),c._valuesCache[d]},getUniqueValues:d=>{if(c._uniqueValuesCache.hasOwnProperty(d))return c._uniqueValuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return m.columnDef.getUniqueValues?(c._uniqueValuesCache[d]=m.columnDef.getUniqueValues(c.original,i),c._uniqueValuesCache[d]):(c._uniqueValuesCache[d]=[c.getValue(d)],c._uniqueValuesCache[d])},renderValue:d=>{var m;return(m=c.getValue(d))!=null?m:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>uU(c.subRows,d=>d.subRows),getParentRow:()=>c.parentId?e.getRow(c.parentId,!0):void 0,getParentRows:()=>{let d=[],m=c;for(;;){const h=m.getParentRow();if(!h)break;d.push(h),m=h}return d.reverse()},getAllCells:yt(()=>[e.getAllLeafColumns()],d=>d.map(m=>dU(e,c,m,m.id)),xt(e.options,"debugRows")),_getAllCellsByColumnId:yt(()=>[c.getAllCells()],d=>d.reduce((m,h)=>(m[h.column.id]=h,m),{}),xt(e.options,"debugRows"))};for(let d=0;d<e._features.length;d++){const m=e._features[d];m==null||m.createRow==null||m.createRow(c,e)}return c},hU={createColumn:(e,t)=>{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},VI=(e,t,n)=>{var i,r;const o=n==null||(i=n.toString())==null?void 0:i.toLowerCase();return!!(!((r=e.getValue(t))==null||(r=r.toString())==null||(r=r.toLowerCase())==null)&&r.includes(o))};VI.autoRemove=e=>Gr(e);const UI=(e,t,n)=>{var i;return!!(!((i=e.getValue(t))==null||(i=i.toString())==null)&&i.includes(n))};UI.autoRemove=e=>Gr(e);const GI=(e,t,n)=>{var i;return((i=e.getValue(t))==null||(i=i.toString())==null?void 0:i.toLowerCase())===n?.toLowerCase()};GI.autoRemove=e=>Gr(e);const qI=(e,t,n)=>{var i;return(i=e.getValue(t))==null?void 0:i.includes(n)};qI.autoRemove=e=>Gr(e);const WI=(e,t,n)=>!n.some(i=>{var r;return!((r=e.getValue(t))!=null&&r.includes(i))});WI.autoRemove=e=>Gr(e)||!(e!=null&&e.length);const YI=(e,t,n)=>n.some(i=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(i)});YI.autoRemove=e=>Gr(e)||!(e!=null&&e.length);const XI=(e,t,n)=>e.getValue(t)===n;XI.autoRemove=e=>Gr(e);const KI=(e,t,n)=>e.getValue(t)==n;KI.autoRemove=e=>Gr(e);const j0=(e,t,n)=>{let[i,r]=n;const o=e.getValue(t);return o>=i&&o<=r};j0.resolveFilterValue=e=>{let[t,n]=e,i=typeof t!="number"?parseFloat(t):t,r=typeof n!="number"?parseFloat(n):n,o=t===null||Number.isNaN(i)?-1/0:i,a=n===null||Number.isNaN(r)?1/0:r;if(o>a){const c=o;o=a,a=c}return[o,a]};j0.autoRemove=e=>Gr(e)||Gr(e[0])&&Gr(e[1]);const Rs={includesString:VI,includesStringSensitive:UI,equalsString:GI,arrIncludes:qI,arrIncludesAll:WI,arrIncludesSome:YI,equals:XI,weakEquals:KI,inNumberRange:j0};function Gr(e){return e==null||e===""}const gU={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:gr("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],i=n?.getValue(e.id);return typeof i=="string"?Rs.includesString:typeof i=="number"?Rs.inNumberRange:typeof i=="boolean"||i!==null&&typeof i=="object"?Rs.equals:Array.isArray(i)?Rs.arrIncludes:Rs.weakEquals},e.getFilterFn=()=>{var n,i;return Zm(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(i=t.options.filterFns)==null?void 0:i[e.columnDef.filterFn])!=null?n:Rs[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,i,r;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((i=t.options.enableColumnFilters)!=null?i:!0)&&((r=t.options.enableFilters)!=null?r:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(i=>i.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,i;return(n=(i=t.getState().columnFilters)==null?void 0:i.findIndex(r=>r.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(i=>{const r=e.getFilterFn(),o=i?.find(h=>h.id===e.id),a=bo(n,o?o.value:void 0);if(jC(r,a,e)){var c;return(c=i?.filter(h=>h.id!==e.id))!=null?c:[]}const d={id:e.id,value:a};if(o){var m;return(m=i?.map(h=>h.id===e.id?d:h))!=null?m:[]}return i!=null&&i.length?[...i,d]:[d]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),i=r=>{var o;return(o=bo(t,r))==null?void 0:o.filter(a=>{const c=n.find(d=>d.id===a.id);if(c){const d=c.getFilterFn();if(jC(d,a.value,c))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(i)},e.resetColumnFilters=t=>{var n,i;e.setColumnFilters(t?[]:(n=(i=e.initialState)==null?void 0:i.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function jC(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const yU=(e,t,n)=>n.reduce((i,r)=>{const o=r.getValue(e);return i+(typeof o=="number"?o:0)},0),xU=(e,t,n)=>{let i;return n.forEach(r=>{const o=r.getValue(e);o!=null&&(i>o||i===void 0&&o>=o)&&(i=o)}),i},vU=(e,t,n)=>{let i;return n.forEach(r=>{const o=r.getValue(e);o!=null&&(i<o||i===void 0&&o>=o)&&(i=o)}),i},bU=(e,t,n)=>{let i,r;return n.forEach(o=>{const a=o.getValue(e);a!=null&&(i===void 0?a>=a&&(i=r=a):(i>a&&(i=a),r<a&&(r=a)))}),[i,r]},_U=(e,t)=>{let n=0,i=0;if(t.forEach(r=>{let o=r.getValue(e);o!=null&&(o=+o)>=o&&(++n,i+=o)}),n)return i/n},kU=(e,t)=>{if(!t.length)return;const n=t.map(o=>o.getValue(e));if(!cU(n))return;if(n.length===1)return n[0];const i=Math.floor(n.length/2),r=n.sort((o,a)=>o-a);return n.length%2!==0?r[i]:(r[i-1]+r[i])/2},SU=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),wU=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,CU=(e,t)=>t.length,yy={sum:yU,min:xU,max:vU,extent:bU,mean:_U,median:kU,unique:SU,uniqueCount:wU,count:CU},jU={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:gr("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(i=>i!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,i;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((i=t.options.enableGrouping)!=null?i:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],i=n?.getValue(e.id);if(typeof i=="number")return yy.sum;if(Object.prototype.toString.call(i)==="[object Date]")return yy.extent},e.getAggregationFn=()=>{var n,i;if(!e)throw new Error;return Zm(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(i=t.options.aggregationFns)==null?void 0:i[e.columnDef.aggregationFn])!=null?n:yy[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,i;e.setGrouping(t?[]:(n=(i=e.initialState)==null?void 0:i.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const i=t.getColumn(n);return i!=null&&i.columnDef.getGroupingValue?(e._groupingValuesCache[n]=i.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,i)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var r;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((r=n.subRows)!=null&&r.length)}}};function EU(e,t,n){if(!(t!=null&&t.length)||!n)return e;const i=e.filter(o=>!t.includes(o.id));return n==="remove"?i:[...t.map(o=>e.find(a=>a.id===o)).filter(Boolean),...i]}const NU={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:gr("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=yt(n=>[mu(t,n)],n=>n.findIndex(i=>i.id===e.id),xt(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var i;return((i=mu(t,n)[0])==null?void 0:i.id)===e.id},e.getIsLastColumn=n=>{var i;const r=mu(t,n);return((i=r[r.length-1])==null?void 0:i.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=yt(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,i)=>r=>{let o=[];if(!(t!=null&&t.length))o=r;else{const a=[...t],c=[...r];for(;c.length&&a.length;){const d=a.shift(),m=c.findIndex(h=>h.id===d);m>-1&&o.push(c.splice(m,1)[0])}o=[...o,...c]}return EU(o,n,i)},xt(e.options,"debugTable"))}},xy=()=>({left:[],right:[]}),IU={getInitialState:e=>({columnPinning:xy(),...e}),getDefaultOptions:e=>({onColumnPinningChange:gr("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const i=e.getLeafColumns().map(r=>r.id).filter(Boolean);t.setColumnPinning(r=>{var o,a;if(n==="right"){var c,d;return{left:((c=r?.left)!=null?c:[]).filter(p=>!(i!=null&&i.includes(p))),right:[...((d=r?.right)!=null?d:[]).filter(p=>!(i!=null&&i.includes(p))),...i]}}if(n==="left"){var m,h;return{left:[...((m=r?.left)!=null?m:[]).filter(p=>!(i!=null&&i.includes(p))),...i],right:((h=r?.right)!=null?h:[]).filter(p=>!(i!=null&&i.includes(p)))}}return{left:((o=r?.left)!=null?o:[]).filter(p=>!(i!=null&&i.includes(p))),right:((a=r?.right)!=null?a:[]).filter(p=>!(i!=null&&i.includes(p)))}})},e.getCanPin=()=>e.getLeafColumns().some(i=>{var r,o,a;return((r=i.columnDef.enablePinning)!=null?r:!0)&&((o=(a=t.options.enableColumnPinning)!=null?a:t.options.enablePinning)!=null?o:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(c=>c.id),{left:i,right:r}=t.getState().columnPinning,o=n.some(c=>i?.includes(c)),a=n.some(c=>r?.includes(c));return o?"left":a?"right":!1},e.getPinnedIndex=()=>{var n,i;const r=e.getIsPinned();return r?(n=(i=t.getState().columnPinning)==null||(i=i[r])==null?void 0:i.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,i,r)=>{const o=[...i??[],...r??[]];return n.filter(a=>!o.includes(a.column.id))},xt(t.options,"debugRows")),e.getLeftVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,i)=>(i??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"left"})),xt(t.options,"debugRows")),e.getRightVisibleCells=yt(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,i)=>(i??[]).map(o=>n.find(a=>a.column.id===o)).filter(Boolean).map(o=>({...o,position:"right"})),xt(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,i;return e.setColumnPinning(t?xy():(n=(i=e.initialState)==null?void 0:i.columnPinning)!=null?n:xy())},e.getIsSomeColumnsPinned=t=>{var n;const i=e.getState().columnPinning;if(!t){var r,o;return!!((r=i.left)!=null&&r.length||(o=i.right)!=null&&o.length)}return!!((n=i[t])!=null&&n.length)},e.getLeftLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(i=>t.find(r=>r.id===i)).filter(Boolean),xt(e.options,"debugColumns")),e.getRightLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(i=>t.find(r=>r.id===i)).filter(Boolean),xt(e.options,"debugColumns")),e.getCenterLeafColumns=yt(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,i)=>{const r=[...n??[],...i??[]];return t.filter(o=>!r.includes(o.id))},xt(e.options,"debugColumns"))}};function TU(e){return e||(typeof document<"u"?document:null)}const yf={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},vy=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),RU={getDefaultColumnDef:()=>yf,getInitialState:e=>({columnSizing:{},columnSizingInfo:vy(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:gr("columnSizing",e),onColumnSizingInfoChange:gr("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,i,r;const o=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:yf.minSize,(i=o??e.columnDef.size)!=null?i:yf.size),(r=e.columnDef.maxSize)!=null?r:yf.maxSize)},e.getStart=yt(n=>[n,mu(t,n),t.getState().columnSizing],(n,i)=>i.slice(0,e.getIndex(n)).reduce((r,o)=>r+o.getSize(),0),xt(t.options,"debugColumns")),e.getAfter=yt(n=>[n,mu(t,n),t.getState().columnSizing],(n,i)=>i.slice(e.getIndex(n)+1).reduce((r,o)=>r+o.getSize(),0),xt(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:i,...r}=n;return r})},e.getCanResize=()=>{var n,i;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((i=t.options.enableColumnResizing)!=null?i:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const i=r=>{if(r.subHeaders.length)r.subHeaders.forEach(i);else{var o;n+=(o=r.column.getSize())!=null?o:0}};return i(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const i=t.getColumn(e.column.id),r=i?.getCanResize();return o=>{if(!i||!r||(o.persist==null||o.persist(),by(o)&&o.touches&&o.touches.length>1))return;const a=e.getSize(),c=e?e.getLeafHeaders().map(w=>[w.column.id,w.column.getSize()]):[[i.id,i.getSize()]],d=by(o)?Math.round(o.touches[0].clientX):o.clientX,m={},h=(w,S)=>{typeof S=="number"&&(t.setColumnSizingInfo(j=>{var N,O;const R=t.options.columnResizeDirection==="rtl"?-1:1,D=(S-((N=j?.startOffset)!=null?N:0))*R,I=Math.max(D/((O=j?.startSize)!=null?O:0),-.999999);return j.columnSizingStart.forEach(L=>{let[M,A]=L;m[M]=Math.round(Math.max(A+A*I,0)*100)/100}),{...j,deltaOffset:D,deltaPercentage:I}}),(t.options.columnResizeMode==="onChange"||w==="end")&&t.setColumnSizing(j=>({...j,...m})))},p=w=>h("move",w),g=w=>{h("end",w),t.setColumnSizingInfo(S=>({...S,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},x=TU(n),v={moveHandler:w=>p(w.clientX),upHandler:w=>{x?.removeEventListener("mousemove",v.moveHandler),x?.removeEventListener("mouseup",v.upHandler),g(w.clientX)}},b={moveHandler:w=>(w.cancelable&&(w.preventDefault(),w.stopPropagation()),p(w.touches[0].clientX),!1),upHandler:w=>{var S;x?.removeEventListener("touchmove",b.moveHandler),x?.removeEventListener("touchend",b.upHandler),w.cancelable&&(w.preventDefault(),w.stopPropagation()),g((S=w.touches[0])==null?void 0:S.clientX)}},k=AU()?{passive:!1}:!1;by(o)?(x?.addEventListener("touchmove",b.moveHandler,k),x?.addEventListener("touchend",b.upHandler,k)):(x?.addEventListener("mousemove",v.moveHandler,k),x?.addEventListener("mouseup",v.upHandler,k)),t.setColumnSizingInfo(w=>({...w,startOffset:d,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:c,isResizingColumn:i.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?vy():(n=e.initialState.columnSizingInfo)!=null?n:vy())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((i,r)=>i+r.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((i,r)=>i+r.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((i,r)=>i+r.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((i,r)=>i+r.getSize(),0))!=null?t:0}}};let xf=null;function AU(){if(typeof xf=="boolean")return xf;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return xf=e,xf}function by(e){return e.type==="touchstart"}const MU={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:gr("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(i=>({...i,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,i;const r=e.columns;return(n=r.length?r.some(o=>o.getIsVisible()):(i=t.getState().columnVisibility)==null?void 0:i[e.id])!=null?n:!0},e.getCanHide=()=>{var n,i;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((i=t.options.enableHiding)!=null?i:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=yt(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(i=>i.column.getIsVisible()),xt(t.options,"debugRows")),e.getVisibleCells=yt(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,i,r)=>[...n,...i,...r],xt(t.options,"debugRows"))},createTable:e=>{const t=(n,i)=>yt(()=>[i(),i().filter(r=>r.getIsVisible()).map(r=>r.id).join("_")],r=>r.filter(o=>o.getIsVisible==null?void 0:o.getIsVisible()),xt(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var i;e.setColumnVisibility(n?{}:(i=e.initialState.columnVisibility)!=null?i:{})},e.toggleAllColumnsVisible=n=>{var i;n=(i=n)!=null?i:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((r,o)=>({...r,[o.id]:n||!(o.getCanHide!=null&&o.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var i;e.toggleAllColumnsVisible((i=n.target)==null?void 0:i.checked)}}};function mu(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const DU={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},OU={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:gr("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const i=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof i=="string"||typeof i=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,i,r,o;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((i=t.options.enableGlobalFilter)!=null?i:!0)&&((r=t.options.enableFilters)!=null?r:!0)&&((o=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?o:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>Rs.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:i}=e.options;return Zm(i)?i:i==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[i])!=null?t:Rs[i]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},LU={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:gr("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var i,r;if(!t){e._queue(()=>{t=!0});return}if((i=(r=e.options.autoResetAll)!=null?r:e.options.autoResetExpanded)!=null?i:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=i=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(i),e.toggleAllRowsExpanded=i=>{i??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=i=>{var r,o;e.setExpanded(i?{}:(r=(o=e.initialState)==null?void 0:o.expanded)!=null?r:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(i=>i.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>i=>{i.persist==null||i.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const i=e.getState().expanded;return i===!0||Object.values(i).some(Boolean)},e.getIsAllRowsExpanded=()=>{const i=e.getState().expanded;return typeof i=="boolean"?i===!0:!(!Object.keys(i).length||e.getRowModel().flatRows.some(r=>!r.getIsExpanded()))},e.getExpandedDepth=()=>{let i=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(o=>{const a=o.split(".");i=Math.max(i,a.length)}),i},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(i=>{var r;const o=i===!0?!0:!!(i!=null&&i[e.id]);let a={};if(i===!0?Object.keys(t.getRowModel().rowsById).forEach(c=>{a[c]=!0}):a=i,n=(r=n)!=null?r:!o,!o&&n)return{...a,[e.id]:!0};if(o&&!n){const{[e.id]:c,...d}=a;return d}return i})},e.getIsExpanded=()=>{var n;const i=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:i===!0||i?.[e.id])},e.getCanExpand=()=>{var n,i,r;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((i=t.options.enableExpanding)!=null?i:!0)&&!!((r=e.subRows)!=null&&r.length)},e.getIsAllParentsExpanded=()=>{let n=!0,i=e;for(;n&&i.parentId;)i=t.getRow(i.parentId,!0),n=i.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},uv=0,dv=10,_y=()=>({pageIndex:uv,pageSize:dv}),zU={getInitialState:e=>({...e,pagination:{..._y(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:gr("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var i,r;if(!t){e._queue(()=>{t=!0});return}if((i=(r=e.options.autoResetAll)!=null?r:e.options.autoResetPageIndex)!=null?i:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=i=>{const r=o=>bo(i,o);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(r)},e.resetPagination=i=>{var r;e.setPagination(i?_y():(r=e.initialState.pagination)!=null?r:_y())},e.setPageIndex=i=>{e.setPagination(r=>{let o=bo(i,r.pageIndex);const a=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return o=Math.max(0,Math.min(o,a)),{...r,pageIndex:o}})},e.resetPageIndex=i=>{var r,o;e.setPageIndex(i?uv:(r=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageIndex)!=null?r:uv)},e.resetPageSize=i=>{var r,o;e.setPageSize(i?dv:(r=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageSize)!=null?r:dv)},e.setPageSize=i=>{e.setPagination(r=>{const o=Math.max(1,bo(i,r.pageSize)),a=r.pageSize*r.pageIndex,c=Math.floor(a/o);return{...r,pageIndex:c,pageSize:o}})},e.setPageCount=i=>e.setPagination(r=>{var o;let a=bo(i,(o=e.options.pageCount)!=null?o:-1);return typeof a=="number"&&(a=Math.max(-1,a)),{...r,pageCount:a}}),e.getPageOptions=yt(()=>[e.getPageCount()],i=>{let r=[];return i&&i>0&&(r=[...new Array(i)].fill(null).map((o,a)=>a)),r},xt(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:i}=e.getState().pagination,r=e.getPageCount();return r===-1?!0:r===0?!1:i<r-1},e.previousPage=()=>e.setPageIndex(i=>i-1),e.nextPage=()=>e.setPageIndex(i=>i+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var i;return(i=e.options.pageCount)!=null?i:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var i;return(i=e.options.rowCount)!=null?i:e.getPrePaginationRowModel().rows.length}}},ky=()=>({top:[],bottom:[]}),PU={getInitialState:e=>({rowPinning:ky(),...e}),getDefaultOptions:e=>({onRowPinningChange:gr("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,i,r)=>{const o=i?e.getLeafRows().map(d=>{let{id:m}=d;return m}):[],a=r?e.getParentRows().map(d=>{let{id:m}=d;return m}):[],c=new Set([...a,e.id,...o]);t.setRowPinning(d=>{var m,h;if(n==="bottom"){var p,g;return{top:((p=d?.top)!=null?p:[]).filter(b=>!(c!=null&&c.has(b))),bottom:[...((g=d?.bottom)!=null?g:[]).filter(b=>!(c!=null&&c.has(b))),...Array.from(c)]}}if(n==="top"){var x,v;return{top:[...((x=d?.top)!=null?x:[]).filter(b=>!(c!=null&&c.has(b))),...Array.from(c)],bottom:((v=d?.bottom)!=null?v:[]).filter(b=>!(c!=null&&c.has(b)))}}return{top:((m=d?.top)!=null?m:[]).filter(b=>!(c!=null&&c.has(b))),bottom:((h=d?.bottom)!=null?h:[]).filter(b=>!(c!=null&&c.has(b)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:i,enablePinning:r}=t.options;return typeof i=="function"?i(e):(n=i??r)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:i,bottom:r}=t.getState().rowPinning,o=n.some(c=>i?.includes(c)),a=n.some(c=>r?.includes(c));return o?"top":a?"bottom":!1},e.getPinnedIndex=()=>{var n,i;const r=e.getIsPinned();if(!r)return-1;const o=(n=r==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(a=>{let{id:c}=a;return c});return(i=o?.indexOf(e.id))!=null?i:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,i;return e.setRowPinning(t?ky():(n=(i=e.initialState)==null?void 0:i.rowPinning)!=null?n:ky())},e.getIsSomeRowsPinned=t=>{var n;const i=e.getState().rowPinning;if(!t){var r,o;return!!((r=i.top)!=null&&r.length||(o=i.bottom)!=null&&o.length)}return!!((n=i[t])!=null&&n.length)},e._getPinnedRows=(t,n,i)=>{var r;return((r=e.options.keepPinnedRows)==null||r?(n??[]).map(a=>{const c=e.getRow(a,!0);return c.getIsAllParentsExpanded()?c:null}):(n??[]).map(a=>t.find(c=>c.id===a))).filter(Boolean).map(a=>({...a,position:i}))},e.getTopRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),xt(e.options,"debugRows")),e.getBottomRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),xt(e.options,"debugRows")),e.getCenterRows=yt(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,i)=>{const r=new Set([...n??[],...i??[]]);return t.filter(o=>!r.has(o.id))},xt(e.options,"debugRows"))}},BU={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:gr("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const i={...n},r=e.getPreGroupedRowModel().flatRows;return t?r.forEach(o=>{o.getCanSelect()&&(i[o.id]=!0)}):r.forEach(o=>{delete i[o.id]}),i})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const i=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),r={...n};return e.getRowModel().rows.forEach(o=>{fv(r,o.id,i,!0,e)}),r}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?Sy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getFilteredSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?Sy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getGroupedSelectedRowModel=yt(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?Sy(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let i=!!(t.length&&Object.keys(n).length);return i&&t.some(r=>r.getCanSelect()&&!n[r.id])&&(i=!1),i},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(r=>r.getCanSelect()),{rowSelection:n}=e.getState();let i=!!t.length;return i&&t.some(r=>!n[r.id])&&(i=!1),i},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n<e.getFilteredRowModel().flatRows.length},e.getIsSomePageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,i)=>{const r=e.getIsSelected();t.setRowSelection(o=>{var a;if(n=typeof n<"u"?n:!r,e.getCanSelect()&&r===n)return o;const c={...o};return fv(c,e.id,n,(a=i?.selectChildren)!=null?a:!0,t),c})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return E0(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return mv(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return mv(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return i=>{var r;n&&e.toggleSelected((r=i.target)==null?void 0:r.checked)}}}},fv=(e,t,n,i,r)=>{var o;const a=r.getRow(t,!0);n?(a.getCanMultiSelect()||Object.keys(e).forEach(c=>delete e[c]),a.getCanSelect()&&(e[t]=!0)):delete e[t],i&&(o=a.subRows)!=null&&o.length&&a.getCanSelectSubRows()&&a.subRows.forEach(c=>fv(e,c.id,n,i,r))};function Sy(e,t){const n=e.getState().rowSelection,i=[],r={},o=function(a,c){return a.map(d=>{var m;const h=E0(d,n);if(h&&(i.push(d),r[d.id]=d),(m=d.subRows)!=null&&m.length&&(d={...d,subRows:o(d.subRows)}),h)return d}).filter(Boolean)};return{rows:o(t.rows),flatRows:i,rowsById:r}}function E0(e,t){var n;return(n=t[e.id])!=null?n:!1}function mv(e,t,n){var i;if(!((i=e.subRows)!=null&&i.length))return!1;let r=!0,o=!1;return e.subRows.forEach(a=>{if(!(o&&!r)&&(a.getCanSelect()&&(E0(a,t)?o=!0:r=!1),a.subRows&&a.subRows.length)){const c=mv(a,t);c==="all"?o=!0:(c==="some"&&(o=!0),r=!1)}}),r?"all":o?"some":!1}const pv=/([0-9]+)/gm,$U=(e,t,n)=>ZI(Eo(e.getValue(n)).toLowerCase(),Eo(t.getValue(n)).toLowerCase()),HU=(e,t,n)=>ZI(Eo(e.getValue(n)),Eo(t.getValue(n))),FU=(e,t,n)=>N0(Eo(e.getValue(n)).toLowerCase(),Eo(t.getValue(n)).toLowerCase()),VU=(e,t,n)=>N0(Eo(e.getValue(n)),Eo(t.getValue(n))),UU=(e,t,n)=>{const i=e.getValue(n),r=t.getValue(n);return i>r?1:i<r?-1:0},GU=(e,t,n)=>N0(e.getValue(n),t.getValue(n));function N0(e,t){return e===t?0:e>t?1:-1}function Eo(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function ZI(e,t){const n=e.split(pv).filter(Boolean),i=t.split(pv).filter(Boolean);for(;n.length&&i.length;){const r=n.shift(),o=i.shift(),a=parseInt(r,10),c=parseInt(o,10),d=[a,c].sort();if(isNaN(d[0])){if(r>o)return 1;if(o>r)return-1;continue}if(isNaN(d[1]))return isNaN(a)?-1:1;if(a>c)return 1;if(c>a)return-1}return n.length-i.length}const Yc={alphanumeric:$U,alphanumericCaseSensitive:HU,text:FU,textCaseSensitive:VU,datetime:UU,basic:GU},qU={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:gr("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let i=!1;for(const r of n){const o=r?.getValue(e.id);if(Object.prototype.toString.call(o)==="[object Date]")return Yc.datetime;if(typeof o=="string"&&(i=!0,o.split(pv).length>1))return Yc.alphanumeric}return i?Yc.text:Yc.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof n?.getValue(e.id)=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,i;if(!e)throw new Error;return Zm(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(i=t.options.sortingFns)==null?void 0:i[e.columnDef.sortingFn])!=null?n:Yc[e.columnDef.sortingFn]},e.toggleSorting=(n,i)=>{const r=e.getNextSortingOrder(),o=typeof n<"u"&&n!==null;t.setSorting(a=>{const c=a?.find(x=>x.id===e.id),d=a?.findIndex(x=>x.id===e.id);let m=[],h,p=o?n:r==="desc";if(a!=null&&a.length&&e.getCanMultiSort()&&i?c?h="toggle":h="add":a!=null&&a.length&&d!==a.length-1?h="replace":c?h="toggle":h="replace",h==="toggle"&&(o||r||(h="remove")),h==="add"){var g;m=[...a,{id:e.id,desc:p}],m.splice(0,m.length-((g=t.options.maxMultiSortColCount)!=null?g:Number.MAX_SAFE_INTEGER))}else h==="toggle"?m=a.map(x=>x.id===e.id?{...x,desc:p}:x):h==="remove"?m=a.filter(x=>x.id!==e.id):m=[{id:e.id,desc:p}];return m})},e.getFirstSortDir=()=>{var n,i;return((n=(i=e.columnDef.sortDescFirst)!=null?i:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var i,r;const o=e.getFirstSortDir(),a=e.getIsSorted();return a?a!==o&&((i=t.options.enableSortingRemoval)==null||i)&&(!(n&&(r=t.options.enableMultiRemove)!=null)||r)?!1:a==="desc"?"asc":"desc":o},e.getCanSort=()=>{var n,i;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((i=t.options.enableSorting)!=null?i:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,i;return(n=(i=e.columnDef.enableMultiSort)!=null?i:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const i=(n=t.getState().sorting)==null?void 0:n.find(r=>r.id===e.id);return i?i.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,i;return(n=(i=t.getState().sorting)==null?void 0:i.findIndex(r=>r.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(i=>i.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return i=>{n&&(i.persist==null||i.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(i):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,i;e.setSorting(t?[]:(n=(i=e.initialState)==null?void 0:i.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},WU=[mU,MU,NU,IU,hU,gU,DU,OU,qU,jU,LU,zU,PU,BU,RU];function YU(e){var t,n;const i=[...WU,...(t=e._features)!=null?t:[]];let r={_features:i};const o=r._features.reduce((g,x)=>Object.assign(g,x.getDefaultOptions==null?void 0:x.getDefaultOptions(r)),{}),a=g=>r.options.mergeOptions?r.options.mergeOptions(o,g):{...o,...g};let d={...{},...(n=e.initialState)!=null?n:{}};r._features.forEach(g=>{var x;d=(x=g.getInitialState==null?void 0:g.getInitialState(d))!=null?x:d});const m=[];let h=!1;const p={_features:i,options:{...o,...e},initialState:d,_queue:g=>{m.push(g),h||(h=!0,Promise.resolve().then(()=>{for(;m.length;)m.shift()();h=!1}).catch(x=>setTimeout(()=>{throw x})))},reset:()=>{r.setState(r.initialState)},setOptions:g=>{const x=bo(g,r.options);r.options=a(x)},getState:()=>r.options.state,setState:g=>{r.options.onStateChange==null||r.options.onStateChange(g)},_getRowId:(g,x,v)=>{var b;return(b=r.options.getRowId==null?void 0:r.options.getRowId(g,x,v))!=null?b:`${v?[v.id,x].join("."):x}`},getCoreRowModel:()=>(r._getCoreRowModel||(r._getCoreRowModel=r.options.getCoreRowModel(r)),r._getCoreRowModel()),getRowModel:()=>r.getPaginationRowModel(),getRow:(g,x)=>{let v=(x?r.getPrePaginationRowModel():r.getRowModel()).rowsById[g];if(!v&&(v=r.getCoreRowModel().rowsById[g],!v))throw new Error;return v},_getDefaultColumnDef:yt(()=>[r.options.defaultColumn],g=>{var x;return g=(x=g)!=null?x:{},{header:v=>{const b=v.header.column.columnDef;return b.accessorKey?b.accessorKey:b.accessorFn?b.id:null},cell:v=>{var b,k;return(b=(k=v.renderValue())==null||k.toString==null?void 0:k.toString())!=null?b:null},...r._features.reduce((v,b)=>Object.assign(v,b.getDefaultColumnDef==null?void 0:b.getDefaultColumnDef()),{}),...g}},xt(e,"debugColumns")),_getColumnDefs:()=>r.options.columns,getAllColumns:yt(()=>[r._getColumnDefs()],g=>{const x=function(v,b,k){return k===void 0&&(k=0),v.map(w=>{const S=fU(r,w,k,b),j=w;return S.columns=j.columns?x(j.columns,S,k+1):[],S})};return x(g)},xt(e,"debugColumns")),getAllFlatColumns:yt(()=>[r.getAllColumns()],g=>g.flatMap(x=>x.getFlatColumns()),xt(e,"debugColumns")),_getAllFlatColumnsById:yt(()=>[r.getAllFlatColumns()],g=>g.reduce((x,v)=>(x[v.id]=v,x),{}),xt(e,"debugColumns")),getAllLeafColumns:yt(()=>[r.getAllColumns(),r._getOrderColumnsFn()],(g,x)=>{let v=g.flatMap(b=>b.getLeafColumns());return x(v)},xt(e,"debugColumns")),getColumn:g=>r._getAllFlatColumnsById()[g]};Object.assign(r,p);for(let g=0;g<r._features.length;g++){const x=r._features[g];x==null||x.createTable==null||x.createTable(r)}return r}function XU(){return e=>yt(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},i=function(r,o,a){o===void 0&&(o=0);const c=[];for(let m=0;m<r.length;m++){const h=pU(e,e._getRowId(r[m],m,a),r[m],m,o,void 0,a?.id);if(n.flatRows.push(h),n.rowsById[h.id]=h,c.push(h),e.options.getSubRows){var d;h.originalSubRows=e.options.getSubRows(r[m],m),(d=h.originalSubRows)!=null&&d.length&&(h.subRows=i(h.originalSubRows,o+1,h))}}return c};return n.rows=i(t),n},xt(e.options,"debugTable","getRowModel",()=>e._autoResetPageIndex()))}function KU(){return e=>yt(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;const i=e.getState().sorting,r=[],o=i.filter(d=>{var m;return(m=e.getColumn(d.id))==null?void 0:m.getCanSort()}),a={};o.forEach(d=>{const m=e.getColumn(d.id);m&&(a[d.id]={sortUndefined:m.columnDef.sortUndefined,invertSorting:m.columnDef.invertSorting,sortingFn:m.getSortingFn()})});const c=d=>{const m=d.map(h=>({...h}));return m.sort((h,p)=>{for(let x=0;x<o.length;x+=1){var g;const v=o[x],b=a[v.id],k=b.sortUndefined,w=(g=v?.desc)!=null?g:!1;let S=0;if(k){const j=h.getValue(v.id),N=p.getValue(v.id),O=j===void 0,R=N===void 0;if(O||R){if(k==="first")return O?-1:1;if(k==="last")return O?1:-1;S=O&&R?0:O?k:-k}}if(S===0&&(S=b.sortingFn(h,p,v.id)),S!==0)return w&&(S*=-1),b.invertSorting&&(S*=-1),S}return h.index-p.index}),m.forEach(h=>{var p;r.push(h),(p=h.subRows)!=null&&p.length&&(h.subRows=c(h.subRows))}),m};return{rows:c(n.rows),flatRows:r,rowsById:n.rowsById}},xt(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}function EC(e,t){return e?ZU(e)?C.createElement(e,t):e:null}function ZU(e){return QU(e)||typeof e=="function"||JU(e)}function QU(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function JU(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function eG(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=C.useState(()=>({current:YU(t)})),[i,r]=C.useState(()=>n.current.initialState);return n.current.setOptions(o=>({...o,...e,state:{...i,...e.state},onStateChange:a=>{r(a),e.onStateChange==null||e.onStateChange(a)}})),n.current}const NC=["codex","cursor","claude_code","opencode"];function tG({roles:e,employees:t,selectedIds:n,onSelectRow:i,onUpdateRole:r,onDeleteRole:o,readOnly:a}){const[c,d]=C.useState([]),[m,h]=C.useState({}),[p,g]=C.useState(null),[x,v]=C.useState(""),b=C.useMemo(()=>{const I=new Map;for(const L of t){const M=L.role_ids?.length?L.role_ids:[L.role_id];for(const A of M)A&&I.set(A,(I.get(A)??0)+1)}return e.map(L=>({role_id:L.role_id,name:L.name,icon:L.icon??null,reports_to:L.reports_to,toolCount:L.tools?.length??0,agent:L.preferred_external_agent??null,employeeCount:I.get(L.role_id)??0}))},[e,t]),k=C.useMemo(()=>[{id:"owner",name:"Owner"},...e.map(I=>({id:I.role_id,name:I.name}))],[e]),w=I=>{const L=x.trim();L&&L!==e.find(M=>M.role_id===I)?.name&&r(I,{name:L}),g(null),v("")},S=C.useMemo(()=>[{id:"select",header:({table:I})=>u.jsx("input",{type:"checkbox",checked:I.getIsAllRowsSelected(),ref:L=>{L&&(L.indeterminate=I.getIsSomeRowsSelected()&&!I.getIsAllRowsSelected())},onChange:I.getToggleAllRowsSelectedHandler(),disabled:a,"aria-label":"Select all"}),cell:({row:I})=>u.jsx("input",{type:"checkbox",checked:I.getIsSelected(),onChange:I.getToggleSelectedHandler(),disabled:a,"aria-label":`Select ${I.original.role_id}`,onClick:L=>L.stopPropagation()}),size:32,enableSorting:!1},{id:"icon",header:"",cell:({row:I})=>u.jsx("img",{src:Vu(I.original.icon),alt:"",className:"rt-cell-icon"}),size:32,enableSorting:!1},{id:"name",header:"Name",accessorKey:"name",cell:({row:I})=>{const L=I.original;return p?.rowId===L.role_id&&p.col==="name"?u.jsx("input",{autoFocus:!0,className:"rt-inline-input",value:x,onChange:A=>v(A.target.value),onBlur:()=>w(L.role_id),onKeyDown:A=>{A.key==="Enter"?w(L.role_id):A.key==="Escape"&&(g(null),v(""))},onClick:A=>A.stopPropagation()}):u.jsx("span",{className:"rt-cell-name",onDoubleClick:A=>{a||(A.stopPropagation(),v(L.name),g({rowId:L.role_id,col:"name"}))},title:"Double-click to edit",children:L.name})}},{id:"role_id",header:"ID",accessorKey:"role_id",cell:({row:I})=>u.jsx("code",{className:"rt-cell-id",children:I.original.role_id})},{id:"reports_to",header:"Reports to",accessorKey:"reports_to",cell:({row:I})=>{const L=I.original;return u.jsx("select",{className:"rt-cell-select",value:L.reports_to,onChange:M=>r(L.role_id,{reports_to:M.target.value}),disabled:a,onClick:M=>M.stopPropagation(),children:k.filter(M=>M.id!==L.role_id).map(M=>u.jsx("option",{value:M.id,children:M.name},M.id))})}},{id:"toolCount",header:"Tools",accessorKey:"toolCount",cell:({row:I})=>u.jsx("span",{className:"rt-cell-count",children:I.original.toolCount}),size:64},{id:"agent",header:"Agent",accessorKey:"agent",cell:({row:I})=>{const L=I.original;return u.jsxs("select",{className:"rt-cell-select",value:L.agent??"",onChange:M=>r(L.role_id,{preferred_external_agent:M.target.value||null}),disabled:a,onClick:M=>M.stopPropagation(),children:[u.jsx("option",{value:"",children:"(auto)"}),NC.map(M=>u.jsx("option",{value:M,children:M},M))]})}},{id:"employeeCount",header:"People",accessorKey:"employeeCount",cell:({row:I})=>u.jsx("span",{className:"rt-cell-count",children:I.original.employeeCount}),size:64},{id:"actions",header:"",cell:({row:I})=>u.jsx("button",{className:"rt-cell-action",onClick:L=>{L.stopPropagation(),!a&&confirm(`Delete role "${I.original.name}"?`)&&o(I.original.role_id)},disabled:a,title:"Delete",children:"✕"}),size:40,enableSorting:!1}],[p,x,a,k,r,o]),j=eG({data:b,columns:S,state:{sorting:c,rowSelection:m},onSortingChange:d,onRowSelectionChange:h,enableRowSelection:!0,getRowId:I=>I.role_id,getCoreRowModel:XU(),getSortedRowModel:KU()}),N=Object.values(m).filter(Boolean).length,O=Object.keys(m).filter(I=>m[I]),R=I=>{a||(O.forEach(L=>r(L,{preferred_external_agent:I})),h({}))},D=()=>{a||confirm(`Delete ${N} roles? This cannot be undone.`)&&(O.forEach(I=>o(I)),h({}))};return u.jsxs("div",{className:"rt-container",children:[N>0&&!a&&u.jsxs("div",{className:"rt-bulk-bar",children:[u.jsxs("span",{className:"rt-bulk-count",children:[N," selected"]}),u.jsxs("select",{className:"rt-bulk-select",defaultValue:"",onChange:I=>{const L=I.target.value;L&&R(L==="__auto__"?null:L)},children:[u.jsx("option",{value:"",disabled:!0,children:"Change agent…"}),u.jsx("option",{value:"__auto__",children:"(auto)"}),NC.map(I=>u.jsx("option",{value:I,children:I},I))]}),u.jsx("button",{className:"btn btn-danger btn-sm",onClick:D,children:"Delete selected"}),u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>h({}),children:"Clear"})]}),u.jsx("div",{className:"rt-table-wrap",children:u.jsxs("table",{className:"rt-table",children:[u.jsx("thead",{children:j.getHeaderGroups().map(I=>u.jsx("tr",{children:I.headers.map(L=>u.jsxs("th",{style:{width:L.getSize()},className:L.column.getCanSort()?"rt-th-sortable":"",onClick:L.column.getToggleSortingHandler(),children:[EC(L.column.columnDef.header,L.getContext()),L.column.getIsSorted()==="asc"&&u.jsx("span",{className:"rt-sort-caret",children:" ▲"}),L.column.getIsSorted()==="desc"&&u.jsx("span",{className:"rt-sort-caret",children:" ▼"})]},L.id))},I.id))}),u.jsxs("tbody",{children:[j.getRowModel().rows.length===0&&u.jsx("tr",{children:u.jsx("td",{colSpan:9,className:"rt-empty",children:'No roles. Add one via the "+ Add role" button.'})}),j.getRowModel().rows.map(I=>{const L=n.includes(I.original.role_id);return u.jsx("tr",{className:`rt-row${I.getIsSelected()?" rt-row-checked":""}${L?" rt-row-active":""}`,onClick:()=>i(I.original.role_id),children:I.getVisibleCells().map(M=>u.jsx("td",{style:{width:M.column.getSize()},children:EC(M.column.columnDef.cell,M.getContext())},M.id))},I.id)})]})]})})]})}function di(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,i;n<e.length;n++)(i=di(e[n]))!==""&&(t+=(t&&" ")+i);else for(let n in e)e[n]&&(t+=(t&&" ")+n);return t}var nG={value:()=>{}};function Qm(){for(var e=0,t=arguments.length,n={},i;e<t;++e){if(!(i=arguments[e]+"")||i in n||/[\s.]/.test(i))throw new Error("illegal type: "+i);n[i]=[]}return new zf(n)}function zf(e){this._=e}function iG(e,t){return e.trim().split(/^|\s+/).map(function(n){var i="",r=n.indexOf(".");if(r>=0&&(i=n.slice(r+1),n=n.slice(0,r)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:i}})}zf.prototype=Qm.prototype={constructor:zf,on:function(e,t){var n=this._,i=iG(e+"",n),r,o=-1,a=i.length;if(arguments.length<2){for(;++o<a;)if((r=(e=i[o]).type)&&(r=rG(n[r],e.name)))return r;return}if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++o<a;)if(r=(e=i[o]).type)n[r]=IC(n[r],e.name,t);else if(t==null)for(r in n)n[r]=IC(n[r],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new zf(e)},call:function(e,t){if((r=arguments.length-2)>0)for(var n=new Array(r),i=0,r,o;i<r;++i)n[i]=arguments[i+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(o=this._[e],i=0,r=o.length;i<r;++i)o[i].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var i=this._[e],r=0,o=i.length;r<o;++r)i[r].value.apply(t,n)}};function rG(e,t){for(var n=0,i=e.length,r;n<i;++n)if((r=e[n]).name===t)return r.value}function IC(e,t,n){for(var i=0,r=e.length;i<r;++i)if(e[i].name===t){e[i]=nG,e=e.slice(0,i).concat(e.slice(i+1));break}return n!=null&&e.push({name:t,value:n}),e}var hv="http://www.w3.org/1999/xhtml";const TC={svg:"http://www.w3.org/2000/svg",xhtml:hv,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Jm(e){var t=e+="",n=t.indexOf(":");return n>=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),TC.hasOwnProperty(t)?{space:TC[t],local:e}:e}function sG(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===hv&&t.documentElement.namespaceURI===hv?t.createElement(e):t.createElementNS(n,e)}}function oG(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function QI(e){var t=Jm(e);return(t.local?oG:sG)(t)}function aG(){}function I0(e){return e==null?aG:function(){return this.querySelector(e)}}function lG(e){typeof e!="function"&&(e=I0(e));for(var t=this._groups,n=t.length,i=new Array(n),r=0;r<n;++r)for(var o=t[r],a=o.length,c=i[r]=new Array(a),d,m,h=0;h<a;++h)(d=o[h])&&(m=e.call(d,d.__data__,h,o))&&("__data__"in d&&(m.__data__=d.__data__),c[h]=m);return new yr(i,this._parents)}function cG(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function uG(){return[]}function JI(e){return e==null?uG:function(){return this.querySelectorAll(e)}}function dG(e){return function(){return cG(e.apply(this,arguments))}}function fG(e){typeof e=="function"?e=dG(e):e=JI(e);for(var t=this._groups,n=t.length,i=[],r=[],o=0;o<n;++o)for(var a=t[o],c=a.length,d,m=0;m<c;++m)(d=a[m])&&(i.push(e.call(d,d.__data__,m,a)),r.push(d));return new yr(i,r)}function eT(e){return function(){return this.matches(e)}}function tT(e){return function(t){return t.matches(e)}}var mG=Array.prototype.find;function pG(e){return function(){return mG.call(this.children,e)}}function hG(){return this.firstElementChild}function gG(e){return this.select(e==null?hG:pG(typeof e=="function"?e:tT(e)))}var yG=Array.prototype.filter;function xG(){return Array.from(this.children)}function vG(e){return function(){return yG.call(this.children,e)}}function bG(e){return this.selectAll(e==null?xG:vG(typeof e=="function"?e:tT(e)))}function _G(e){typeof e!="function"&&(e=eT(e));for(var t=this._groups,n=t.length,i=new Array(n),r=0;r<n;++r)for(var o=t[r],a=o.length,c=i[r]=[],d,m=0;m<a;++m)(d=o[m])&&e.call(d,d.__data__,m,o)&&c.push(d);return new yr(i,this._parents)}function nT(e){return new Array(e.length)}function kG(){return new yr(this._enter||this._groups.map(nT),this._parents)}function gm(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}gm.prototype={constructor:gm,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function SG(e){return function(){return e}}function wG(e,t,n,i,r,o){for(var a=0,c,d=t.length,m=o.length;a<m;++a)(c=t[a])?(c.__data__=o[a],i[a]=c):n[a]=new gm(e,o[a]);for(;a<d;++a)(c=t[a])&&(r[a]=c)}function CG(e,t,n,i,r,o,a){var c,d,m=new Map,h=t.length,p=o.length,g=new Array(h),x;for(c=0;c<h;++c)(d=t[c])&&(g[c]=x=a.call(d,d.__data__,c,t)+"",m.has(x)?r[c]=d:m.set(x,d));for(c=0;c<p;++c)x=a.call(e,o[c],c,o)+"",(d=m.get(x))?(i[c]=d,d.__data__=o[c],m.delete(x)):n[c]=new gm(e,o[c]);for(c=0;c<h;++c)(d=t[c])&&m.get(g[c])===d&&(r[c]=d)}function jG(e){return e.__data__}function EG(e,t){if(!arguments.length)return Array.from(this,jG);var n=t?CG:wG,i=this._parents,r=this._groups;typeof e!="function"&&(e=SG(e));for(var o=r.length,a=new Array(o),c=new Array(o),d=new Array(o),m=0;m<o;++m){var h=i[m],p=r[m],g=p.length,x=NG(e.call(h,h&&h.__data__,m,i)),v=x.length,b=c[m]=new Array(v),k=a[m]=new Array(v),w=d[m]=new Array(g);n(h,p,b,k,w,x,t);for(var S=0,j=0,N,O;S<v;++S)if(N=b[S]){for(S>=j&&(j=S+1);!(O=k[j])&&++j<v;);N._next=O||null}}return a=new yr(a,i),a._enter=c,a._exit=d,a}function NG(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function IG(){return new yr(this._exit||this._groups.map(nT),this._parents)}function TG(e,t,n){var i=this.enter(),r=this,o=this.exit();return typeof e=="function"?(i=e(i),i&&(i=i.selection())):i=i.append(e+""),t!=null&&(r=t(r),r&&(r=r.selection())),n==null?o.remove():n(o),i&&r?i.merge(r).order():r}function RG(e){for(var t=e.selection?e.selection():e,n=this._groups,i=t._groups,r=n.length,o=i.length,a=Math.min(r,o),c=new Array(r),d=0;d<a;++d)for(var m=n[d],h=i[d],p=m.length,g=c[d]=new Array(p),x,v=0;v<p;++v)(x=m[v]||h[v])&&(g[v]=x);for(;d<r;++d)c[d]=n[d];return new yr(c,this._parents)}function AG(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var i=e[t],r=i.length-1,o=i[r],a;--r>=0;)(a=i[r])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function MG(e){e||(e=DG);function t(p,g){return p&&g?e(p.__data__,g.__data__):!p-!g}for(var n=this._groups,i=n.length,r=new Array(i),o=0;o<i;++o){for(var a=n[o],c=a.length,d=r[o]=new Array(c),m,h=0;h<c;++h)(m=a[h])&&(d[h]=m);d.sort(t)}return new yr(r,this._parents).order()}function DG(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function OG(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function LG(){return Array.from(this)}function zG(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var i=e[t],r=0,o=i.length;r<o;++r){var a=i[r];if(a)return a}return null}function PG(){let e=0;for(const t of this)++e;return e}function BG(){return!this.node()}function $G(e){for(var t=this._groups,n=0,i=t.length;n<i;++n)for(var r=t[n],o=0,a=r.length,c;o<a;++o)(c=r[o])&&e.call(c,c.__data__,o,r);return this}function HG(e){return function(){this.removeAttribute(e)}}function FG(e){return function(){this.removeAttributeNS(e.space,e.local)}}function VG(e,t){return function(){this.setAttribute(e,t)}}function UG(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function GG(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function qG(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function WG(e,t){var n=Jm(e);if(arguments.length<2){var i=this.node();return n.local?i.getAttributeNS(n.space,n.local):i.getAttribute(n)}return this.each((t==null?n.local?FG:HG:typeof t=="function"?n.local?qG:GG:n.local?UG:VG)(n,t))}function iT(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function YG(e){return function(){this.style.removeProperty(e)}}function XG(e,t,n){return function(){this.style.setProperty(e,t,n)}}function KG(e,t,n){return function(){var i=t.apply(this,arguments);i==null?this.style.removeProperty(e):this.style.setProperty(e,i,n)}}function ZG(e,t,n){return arguments.length>1?this.each((t==null?YG:typeof t=="function"?KG:XG)(e,t,n??"")):Ml(this.node(),e)}function Ml(e,t){return e.style.getPropertyValue(t)||iT(e).getComputedStyle(e,null).getPropertyValue(t)}function QG(e){return function(){delete this[e]}}function JG(e,t){return function(){this[e]=t}}function eq(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function tq(e,t){return arguments.length>1?this.each((t==null?QG:typeof t=="function"?eq:JG)(e,t)):this.node()[e]}function rT(e){return e.trim().split(/^|\s+/)}function T0(e){return e.classList||new sT(e)}function sT(e){this._node=e,this._names=rT(e.getAttribute("class")||"")}sT.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function oT(e,t){for(var n=T0(e),i=-1,r=t.length;++i<r;)n.add(t[i])}function aT(e,t){for(var n=T0(e),i=-1,r=t.length;++i<r;)n.remove(t[i])}function nq(e){return function(){oT(this,e)}}function iq(e){return function(){aT(this,e)}}function rq(e,t){return function(){(t.apply(this,arguments)?oT:aT)(this,e)}}function sq(e,t){var n=rT(e+"");if(arguments.length<2){for(var i=T0(this.node()),r=-1,o=n.length;++r<o;)if(!i.contains(n[r]))return!1;return!0}return this.each((typeof t=="function"?rq:t?nq:iq)(n,t))}function oq(){this.textContent=""}function aq(e){return function(){this.textContent=e}}function lq(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function cq(e){return arguments.length?this.each(e==null?oq:(typeof e=="function"?lq:aq)(e)):this.node().textContent}function uq(){this.innerHTML=""}function dq(e){return function(){this.innerHTML=e}}function fq(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function mq(e){return arguments.length?this.each(e==null?uq:(typeof e=="function"?fq:dq)(e)):this.node().innerHTML}function pq(){this.nextSibling&&this.parentNode.appendChild(this)}function hq(){return this.each(pq)}function gq(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function yq(){return this.each(gq)}function xq(e){var t=typeof e=="function"?e:QI(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function vq(){return null}function bq(e,t){var n=typeof e=="function"?e:QI(e),i=t==null?vq:typeof t=="function"?t:I0(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),i.apply(this,arguments)||null)})}function _q(){var e=this.parentNode;e&&e.removeChild(this)}function kq(){return this.each(_q)}function Sq(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function wq(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Cq(e){return this.select(e?wq:Sq)}function jq(e){return arguments.length?this.property("__data__",e):this.node().__data__}function Eq(e){return function(t){e.call(this,t,this.__data__)}}function Nq(e){return e.trim().split(/^|\s+/).map(function(t){var n="",i=t.indexOf(".");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{type:t,name:n}})}function Iq(e){return function(){var t=this.__on;if(t){for(var n=0,i=-1,r=t.length,o;n<r;++n)o=t[n],(!e.type||o.type===e.type)&&o.name===e.name?this.removeEventListener(o.type,o.listener,o.options):t[++i]=o;++i?t.length=i:delete this.__on}}}function Tq(e,t,n){return function(){var i=this.__on,r,o=Eq(t);if(i){for(var a=0,c=i.length;a<c;++a)if((r=i[a]).type===e.type&&r.name===e.name){this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=n),r.value=t;return}}this.addEventListener(e.type,o,n),r={type:e.type,name:e.name,value:t,listener:o,options:n},i?i.push(r):this.__on=[r]}}function Rq(e,t,n){var i=Nq(e+""),r,o=i.length,a;if(arguments.length<2){var c=this.node().__on;if(c){for(var d=0,m=c.length,h;d<m;++d)for(r=0,h=c[d];r<o;++r)if((a=i[r]).type===h.type&&a.name===h.name)return h.value}return}for(c=t?Tq:Iq,r=0;r<o;++r)this.each(c(i[r],t,n));return this}function lT(e,t,n){var i=iT(e),r=i.CustomEvent;typeof r=="function"?r=new r(t,n):(r=i.document.createEvent("Event"),n?(r.initEvent(t,n.bubbles,n.cancelable),r.detail=n.detail):r.initEvent(t,!1,!1)),e.dispatchEvent(r)}function Aq(e,t){return function(){return lT(this,e,t)}}function Mq(e,t){return function(){return lT(this,e,t.apply(this,arguments))}}function Dq(e,t){return this.each((typeof t=="function"?Mq:Aq)(e,t))}function*Oq(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var i=e[t],r=0,o=i.length,a;r<o;++r)(a=i[r])&&(yield a)}var cT=[null];function yr(e,t){this._groups=e,this._parents=t}function Uu(){return new yr([[document.documentElement]],cT)}function Lq(){return this}yr.prototype=Uu.prototype={constructor:yr,select:lG,selectAll:fG,selectChild:gG,selectChildren:bG,filter:_G,data:EG,enter:kG,exit:IG,join:TG,merge:RG,selection:Lq,order:AG,sort:MG,call:OG,nodes:LG,node:zG,size:PG,empty:BG,each:$G,attr:WG,style:ZG,property:tq,classed:sq,text:cq,html:mq,raise:hq,lower:yq,append:xq,insert:bq,remove:kq,clone:Cq,datum:jq,on:Rq,dispatch:Dq,[Symbol.iterator]:Oq};function ur(e){return typeof e=="string"?new yr([[document.querySelector(e)]],[document.documentElement]):new yr([[e]],cT)}function zq(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Pr(e,t){if(e=zq(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var i=n.createSVGPoint();return i.x=e.clientX,i.y=e.clientY,i=i.matrixTransform(t.getScreenCTM().inverse()),[i.x,i.y]}if(t.getBoundingClientRect){var r=t.getBoundingClientRect();return[e.clientX-r.left-t.clientLeft,e.clientY-r.top-t.clientTop]}}return[e.pageX,e.pageY]}const Pq={passive:!1},Iu={capture:!0,passive:!1};function wy(e){e.stopImmediatePropagation()}function xl(e){e.preventDefault(),e.stopImmediatePropagation()}function uT(e){var t=e.document.documentElement,n=ur(e).on("dragstart.drag",xl,Iu);"onselectstart"in t?n.on("selectstart.drag",xl,Iu):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")}function dT(e,t){var n=e.document.documentElement,i=ur(e).on("dragstart.drag",null);t&&(i.on("click.drag",xl,Iu),setTimeout(function(){i.on("click.drag",null)},0)),"onselectstart"in n?i.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}const vf=e=>()=>e;function gv(e,{sourceEvent:t,subject:n,target:i,identifier:r,active:o,x:a,y:c,dx:d,dy:m,dispatch:h}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:r,enumerable:!0,configurable:!0},active:{value:o,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:c,enumerable:!0,configurable:!0},dx:{value:d,enumerable:!0,configurable:!0},dy:{value:m,enumerable:!0,configurable:!0},_:{value:h}})}gv.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function Bq(e){return!e.ctrlKey&&!e.button}function $q(){return this.parentNode}function Hq(e,t){return t??{x:e.x,y:e.y}}function Fq(){return navigator.maxTouchPoints||"ontouchstart"in this}function fT(){var e=Bq,t=$q,n=Hq,i=Fq,r={},o=Qm("start","drag","end"),a=0,c,d,m,h,p=0;function g(N){N.on("mousedown.drag",x).filter(i).on("touchstart.drag",k).on("touchmove.drag",w,Pq).on("touchend.drag touchcancel.drag",S).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function x(N,O){if(!(h||!e.call(this,N,O))){var R=j(this,t.call(this,N,O),N,O,"mouse");R&&(ur(N.view).on("mousemove.drag",v,Iu).on("mouseup.drag",b,Iu),uT(N.view),wy(N),m=!1,c=N.clientX,d=N.clientY,R("start",N))}}function v(N){if(xl(N),!m){var O=N.clientX-c,R=N.clientY-d;m=O*O+R*R>p}r.mouse("drag",N)}function b(N){ur(N.view).on("mousemove.drag mouseup.drag",null),dT(N.view,m),xl(N),r.mouse("end",N)}function k(N,O){if(e.call(this,N,O)){var R=N.changedTouches,D=t.call(this,N,O),I=R.length,L,M;for(L=0;L<I;++L)(M=j(this,D,N,O,R[L].identifier,R[L]))&&(wy(N),M("start",N,R[L]))}}function w(N){var O=N.changedTouches,R=O.length,D,I;for(D=0;D<R;++D)(I=r[O[D].identifier])&&(xl(N),I("drag",N,O[D]))}function S(N){var O=N.changedTouches,R=O.length,D,I;for(h&&clearTimeout(h),h=setTimeout(function(){h=null},500),D=0;D<R;++D)(I=r[O[D].identifier])&&(wy(N),I("end",N,O[D]))}function j(N,O,R,D,I,L){var M=o.copy(),A=Pr(L||R,O),B,W,P;if((P=n.call(N,new gv("beforestart",{sourceEvent:R,target:g,identifier:I,active:a,x:A[0],y:A[1],dx:0,dy:0,dispatch:M}),D))!=null)return B=P.x-A[0]||0,W=P.y-A[1]||0,function G($,q,Y){var Q=A,V;switch($){case"start":r[I]=G,V=a++;break;case"end":delete r[I],--a;case"drag":A=Pr(Y||q,O),V=a;break}M.call($,N,new gv($,{sourceEvent:q,subject:P,target:g,identifier:I,active:V,x:A[0]+B,y:A[1]+W,dx:A[0]-Q[0],dy:A[1]-Q[1],dispatch:M}),D)}}return g.filter=function(N){return arguments.length?(e=typeof N=="function"?N:vf(!!N),g):e},g.container=function(N){return arguments.length?(t=typeof N=="function"?N:vf(N),g):t},g.subject=function(N){return arguments.length?(n=typeof N=="function"?N:vf(N),g):n},g.touchable=function(N){return arguments.length?(i=typeof N=="function"?N:vf(!!N),g):i},g.on=function(){var N=o.on.apply(o,arguments);return N===o?g:N},g.clickDistance=function(N){return arguments.length?(p=(N=+N)*N,g):Math.sqrt(p)},g}function R0(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function mT(e,t){var n=Object.create(e.prototype);for(var i in t)n[i]=t[i];return n}function Gu(){}var Tu=.7,ym=1/Tu,vl="\\s*([+-]?\\d+)\\s*",Ru="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",as="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Vq=/^#([0-9a-f]{3,8})$/,Uq=new RegExp(`^rgb\\(${vl},${vl},${vl}\\)$`),Gq=new RegExp(`^rgb\\(${as},${as},${as}\\)$`),qq=new RegExp(`^rgba\\(${vl},${vl},${vl},${Ru}\\)$`),Wq=new RegExp(`^rgba\\(${as},${as},${as},${Ru}\\)$`),Yq=new RegExp(`^hsl\\(${Ru},${as},${as}\\)$`),Xq=new RegExp(`^hsla\\(${Ru},${as},${as},${Ru}\\)$`),RC={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};R0(Gu,aa,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:AC,formatHex:AC,formatHex8:Kq,formatHsl:Zq,formatRgb:MC,toString:MC});function AC(){return this.rgb().formatHex()}function Kq(){return this.rgb().formatHex8()}function Zq(){return pT(this).formatHsl()}function MC(){return this.rgb().formatRgb()}function aa(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=Vq.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?DC(t):n===3?new Ji(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?bf(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?bf(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Uq.exec(e))?new Ji(t[1],t[2],t[3],1):(t=Gq.exec(e))?new Ji(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=qq.exec(e))?bf(t[1],t[2],t[3],t[4]):(t=Wq.exec(e))?bf(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Yq.exec(e))?zC(t[1],t[2]/100,t[3]/100,1):(t=Xq.exec(e))?zC(t[1],t[2]/100,t[3]/100,t[4]):RC.hasOwnProperty(e)?DC(RC[e]):e==="transparent"?new Ji(NaN,NaN,NaN,0):null}function DC(e){return new Ji(e>>16&255,e>>8&255,e&255,1)}function bf(e,t,n,i){return i<=0&&(e=t=n=NaN),new Ji(e,t,n,i)}function Qq(e){return e instanceof Gu||(e=aa(e)),e?(e=e.rgb(),new Ji(e.r,e.g,e.b,e.opacity)):new Ji}function yv(e,t,n,i){return arguments.length===1?Qq(e):new Ji(e,t,n,i??1)}function Ji(e,t,n,i){this.r=+e,this.g=+t,this.b=+n,this.opacity=+i}R0(Ji,yv,mT(Gu,{brighter(e){return e=e==null?ym:Math.pow(ym,e),new Ji(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Tu:Math.pow(Tu,e),new Ji(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ji(ia(this.r),ia(this.g),ia(this.b),xm(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:OC,formatHex:OC,formatHex8:Jq,formatRgb:LC,toString:LC}));function OC(){return`#${na(this.r)}${na(this.g)}${na(this.b)}`}function Jq(){return`#${na(this.r)}${na(this.g)}${na(this.b)}${na((isNaN(this.opacity)?1:this.opacity)*255)}`}function LC(){const e=xm(this.opacity);return`${e===1?"rgb(":"rgba("}${ia(this.r)}, ${ia(this.g)}, ${ia(this.b)}${e===1?")":`, ${e})`}`}function xm(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ia(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function na(e){return e=ia(e),(e<16?"0":"")+e.toString(16)}function zC(e,t,n,i){return i<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new $r(e,t,n,i)}function pT(e){if(e instanceof $r)return new $r(e.h,e.s,e.l,e.opacity);if(e instanceof Gu||(e=aa(e)),!e)return new $r;if(e instanceof $r)return e;e=e.rgb();var t=e.r/255,n=e.g/255,i=e.b/255,r=Math.min(t,n,i),o=Math.max(t,n,i),a=NaN,c=o-r,d=(o+r)/2;return c?(t===o?a=(n-i)/c+(n<i)*6:n===o?a=(i-t)/c+2:a=(t-n)/c+4,c/=d<.5?o+r:2-o-r,a*=60):c=d>0&&d<1?0:a,new $r(a,c,d,e.opacity)}function eW(e,t,n,i){return arguments.length===1?pT(e):new $r(e,t,n,i??1)}function $r(e,t,n,i){this.h=+e,this.s=+t,this.l=+n,this.opacity=+i}R0($r,eW,mT(Gu,{brighter(e){return e=e==null?ym:Math.pow(ym,e),new $r(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Tu:Math.pow(Tu,e),new $r(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,i=n+(n<.5?n:1-n)*t,r=2*n-i;return new Ji(Cy(e>=240?e-240:e+120,r,i),Cy(e,r,i),Cy(e<120?e+240:e-120,r,i),this.opacity)},clamp(){return new $r(PC(this.h),_f(this.s),_f(this.l),xm(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=xm(this.opacity);return`${e===1?"hsl(":"hsla("}${PC(this.h)}, ${_f(this.s)*100}%, ${_f(this.l)*100}%${e===1?")":`, ${e})`}`}}));function PC(e){return e=(e||0)%360,e<0?e+360:e}function _f(e){return Math.max(0,Math.min(1,e||0))}function Cy(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const A0=e=>()=>e;function tW(e,t){return function(n){return e+n*t}}function nW(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(i){return Math.pow(e+i*t,n)}}function iW(e){return(e=+e)==1?hT:function(t,n){return n-t?nW(t,n,e):A0(isNaN(t)?n:t)}}function hT(e,t){var n=t-e;return n?tW(e,n):A0(isNaN(e)?t:e)}const vm=(function e(t){var n=iW(t);function i(r,o){var a=n((r=yv(r)).r,(o=yv(o)).r),c=n(r.g,o.g),d=n(r.b,o.b),m=hT(r.opacity,o.opacity);return function(h){return r.r=a(h),r.g=c(h),r.b=d(h),r.opacity=m(h),r+""}}return i.gamma=e,i})(1);function rW(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,i=t.slice(),r;return function(o){for(r=0;r<n;++r)i[r]=e[r]*(1-o)+t[r]*o;return i}}function sW(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function oW(e,t){var n=t?t.length:0,i=e?Math.min(n,e.length):0,r=new Array(i),o=new Array(n),a;for(a=0;a<i;++a)r[a]=pu(e[a],t[a]);for(;a<n;++a)o[a]=t[a];return function(c){for(a=0;a<i;++a)o[a]=r[a](c);return o}}function aW(e,t){var n=new Date;return e=+e,t=+t,function(i){return n.setTime(e*(1-i)+t*i),n}}function ns(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function lW(e,t){var n={},i={},r;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(r in t)r in e?n[r]=pu(e[r],t[r]):i[r]=t[r];return function(o){for(r in n)i[r]=n[r](o);return i}}var xv=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,jy=new RegExp(xv.source,"g");function cW(e){return function(){return e}}function uW(e){return function(t){return e(t)+""}}function gT(e,t){var n=xv.lastIndex=jy.lastIndex=0,i,r,o,a=-1,c=[],d=[];for(e=e+"",t=t+"";(i=xv.exec(e))&&(r=jy.exec(t));)(o=r.index)>n&&(o=t.slice(n,o),c[a]?c[a]+=o:c[++a]=o),(i=i[0])===(r=r[0])?c[a]?c[a]+=r:c[++a]=r:(c[++a]=null,d.push({i:a,x:ns(i,r)})),n=jy.lastIndex;return n<t.length&&(o=t.slice(n),c[a]?c[a]+=o:c[++a]=o),c.length<2?d[0]?uW(d[0].x):cW(t):(t=d.length,function(m){for(var h=0,p;h<t;++h)c[(p=d[h]).i]=p.x(m);return c.join("")})}function pu(e,t){var n=typeof t,i;return t==null||n==="boolean"?A0(t):(n==="number"?ns:n==="string"?(i=aa(t))?(t=i,vm):gT:t instanceof aa?vm:t instanceof Date?aW:sW(t)?rW:Array.isArray(t)?oW:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?lW:ns)(e,t)}var BC=180/Math.PI,vv={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function yT(e,t,n,i,r,o){var a,c,d;return(a=Math.sqrt(e*e+t*t))&&(e/=a,t/=a),(d=e*n+t*i)&&(n-=e*d,i-=t*d),(c=Math.sqrt(n*n+i*i))&&(n/=c,i/=c,d/=c),e*i<t*n&&(e=-e,t=-t,d=-d,a=-a),{translateX:r,translateY:o,rotate:Math.atan2(t,e)*BC,skewX:Math.atan(d)*BC,scaleX:a,scaleY:c}}var kf;function dW(e){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?vv:yT(t.a,t.b,t.c,t.d,t.e,t.f)}function fW(e){return e==null||(kf||(kf=document.createElementNS("http://www.w3.org/2000/svg","g")),kf.setAttribute("transform",e),!(e=kf.transform.baseVal.consolidate()))?vv:(e=e.matrix,yT(e.a,e.b,e.c,e.d,e.e,e.f))}function xT(e,t,n,i){function r(m){return m.length?m.pop()+" ":""}function o(m,h,p,g,x,v){if(m!==p||h!==g){var b=x.push("translate(",null,t,null,n);v.push({i:b-4,x:ns(m,p)},{i:b-2,x:ns(h,g)})}else(p||g)&&x.push("translate("+p+t+g+n)}function a(m,h,p,g){m!==h?(m-h>180?h+=360:h-m>180&&(m+=360),g.push({i:p.push(r(p)+"rotate(",null,i)-2,x:ns(m,h)})):h&&p.push(r(p)+"rotate("+h+i)}function c(m,h,p,g){m!==h?g.push({i:p.push(r(p)+"skewX(",null,i)-2,x:ns(m,h)}):h&&p.push(r(p)+"skewX("+h+i)}function d(m,h,p,g,x,v){if(m!==p||h!==g){var b=x.push(r(x)+"scale(",null,",",null,")");v.push({i:b-4,x:ns(m,p)},{i:b-2,x:ns(h,g)})}else(p!==1||g!==1)&&x.push(r(x)+"scale("+p+","+g+")")}return function(m,h){var p=[],g=[];return m=e(m),h=e(h),o(m.translateX,m.translateY,h.translateX,h.translateY,p,g),a(m.rotate,h.rotate,p,g),c(m.skewX,h.skewX,p,g),d(m.scaleX,m.scaleY,h.scaleX,h.scaleY,p,g),m=h=null,function(x){for(var v=-1,b=g.length,k;++v<b;)p[(k=g[v]).i]=k.x(x);return p.join("")}}}var mW=xT(dW,"px, ","px)","deg)"),pW=xT(fW,", ",")",")"),hW=1e-12;function $C(e){return((e=Math.exp(e))+1/e)/2}function gW(e){return((e=Math.exp(e))-1/e)/2}function yW(e){return((e=Math.exp(2*e))-1)/(e+1)}const Pf=(function e(t,n,i){function r(o,a){var c=o[0],d=o[1],m=o[2],h=a[0],p=a[1],g=a[2],x=h-c,v=p-d,b=x*x+v*v,k,w;if(b<hW)w=Math.log(g/m)/t,k=function(D){return[c+D*x,d+D*v,m*Math.exp(t*D*w)]};else{var S=Math.sqrt(b),j=(g*g-m*m+i*b)/(2*m*n*S),N=(g*g-m*m-i*b)/(2*g*n*S),O=Math.log(Math.sqrt(j*j+1)-j),R=Math.log(Math.sqrt(N*N+1)-N);w=(R-O)/t,k=function(D){var I=D*w,L=$C(O),M=m/(n*S)*(L*yW(t*I+O)-gW(O));return[c+M*x,d+M*v,m*L/$C(t*I+O)]}}return k.duration=w*1e3*t/Math.SQRT2,k}return r.rho=function(o){var a=Math.max(.001,+o),c=a*a,d=c*c;return e(a,c,d)},r})(Math.SQRT2,2,4);var Dl=0,eu=0,Xc=0,vT=1e3,bm,tu,_m=0,la=0,ep=0,Au=typeof performance=="object"&&performance.now?performance:Date,bT=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function M0(){return la||(bT(xW),la=Au.now()+ep)}function xW(){la=0}function km(){this._call=this._time=this._next=null}km.prototype=_T.prototype={constructor:km,restart:function(e,t,n){if(typeof e!="function")throw new TypeError("callback is not a function");n=(n==null?M0():+n)+(t==null?0:+t),!this._next&&tu!==this&&(tu?tu._next=this:bm=this,tu=this),this._call=e,this._time=n,bv()},stop:function(){this._call&&(this._call=null,this._time=1/0,bv())}};function _T(e,t,n){var i=new km;return i.restart(e,t,n),i}function vW(){M0(),++Dl;for(var e=bm,t;e;)(t=la-e._time)>=0&&e._call.call(void 0,t),e=e._next;--Dl}function HC(){la=(_m=Au.now())+ep,Dl=eu=0;try{vW()}finally{Dl=0,_W(),la=0}}function bW(){var e=Au.now(),t=e-_m;t>vT&&(ep-=t,_m=e)}function _W(){for(var e,t=bm,n,i=1/0;t;)t._call?(i>t._time&&(i=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:bm=n);tu=e,bv(i)}function bv(e){if(!Dl){eu&&(eu=clearTimeout(eu));var t=e-la;t>24?(e<1/0&&(eu=setTimeout(HC,e-Au.now()-ep)),Xc&&(Xc=clearInterval(Xc))):(Xc||(_m=Au.now(),Xc=setInterval(bW,vT)),Dl=1,bT(HC))}}function FC(e,t,n){var i=new km;return t=t==null?0:+t,i.restart(r=>{i.stop(),e(r+t)},t,n),i}var kW=Qm("start","end","cancel","interrupt"),SW=[],kT=0,VC=1,_v=2,Bf=3,UC=4,kv=5,$f=6;function tp(e,t,n,i,r,o){var a=e.__transition;if(!a)e.__transition={};else if(n in a)return;wW(e,n,{name:t,index:i,group:r,on:kW,tween:SW,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:kT})}function D0(e,t){var n=Wr(e,t);if(n.state>kT)throw new Error("too late; already scheduled");return n}function us(e,t){var n=Wr(e,t);if(n.state>Bf)throw new Error("too late; already running");return n}function Wr(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function wW(e,t,n){var i=e.__transition,r;i[t]=n,n.timer=_T(o,0,n.time);function o(m){n.state=VC,n.timer.restart(a,n.delay,n.time),n.delay<=m&&a(m-n.delay)}function a(m){var h,p,g,x;if(n.state!==VC)return d();for(h in i)if(x=i[h],x.name===n.name){if(x.state===Bf)return FC(a);x.state===UC?(x.state=$f,x.timer.stop(),x.on.call("interrupt",e,e.__data__,x.index,x.group),delete i[h]):+h<t&&(x.state=$f,x.timer.stop(),x.on.call("cancel",e,e.__data__,x.index,x.group),delete i[h])}if(FC(function(){n.state===Bf&&(n.state=UC,n.timer.restart(c,n.delay,n.time),c(m))}),n.state=_v,n.on.call("start",e,e.__data__,n.index,n.group),n.state===_v){for(n.state=Bf,r=new Array(g=n.tween.length),h=0,p=-1;h<g;++h)(x=n.tween[h].value.call(e,e.__data__,n.index,n.group))&&(r[++p]=x);r.length=p+1}}function c(m){for(var h=m<n.duration?n.ease.call(null,m/n.duration):(n.timer.restart(d),n.state=kv,1),p=-1,g=r.length;++p<g;)r[p].call(e,h);n.state===kv&&(n.on.call("end",e,e.__data__,n.index,n.group),d())}function d(){n.state=$f,n.timer.stop(),delete i[t];for(var m in i)return;delete e.__transition}}function Hf(e,t){var n=e.__transition,i,r,o=!0,a;if(n){t=t==null?null:t+"";for(a in n){if((i=n[a]).name!==t){o=!1;continue}r=i.state>_v&&i.state<kv,i.state=$f,i.timer.stop(),i.on.call(r?"interrupt":"cancel",e,e.__data__,i.index,i.group),delete n[a]}o&&delete e.__transition}}function CW(e){return this.each(function(){Hf(this,e)})}function jW(e,t){var n,i;return function(){var r=us(this,e),o=r.tween;if(o!==n){i=n=o;for(var a=0,c=i.length;a<c;++a)if(i[a].name===t){i=i.slice(),i.splice(a,1);break}}r.tween=i}}function EW(e,t,n){var i,r;if(typeof n!="function")throw new Error;return function(){var o=us(this,e),a=o.tween;if(a!==i){r=(i=a).slice();for(var c={name:t,value:n},d=0,m=r.length;d<m;++d)if(r[d].name===t){r[d]=c;break}d===m&&r.push(c)}o.tween=r}}function NW(e,t){var n=this._id;if(e+="",arguments.length<2){for(var i=Wr(this.node(),n).tween,r=0,o=i.length,a;r<o;++r)if((a=i[r]).name===e)return a.value;return null}return this.each((t==null?jW:EW)(n,e,t))}function O0(e,t,n){var i=e._id;return e.each(function(){var r=us(this,i);(r.value||(r.value={}))[t]=n.apply(this,arguments)}),function(r){return Wr(r,i).value[t]}}function ST(e,t){var n;return(typeof t=="number"?ns:t instanceof aa?vm:(n=aa(t))?(t=n,vm):gT)(e,t)}function IW(e){return function(){this.removeAttribute(e)}}function TW(e){return function(){this.removeAttributeNS(e.space,e.local)}}function RW(e,t,n){var i,r=n+"",o;return function(){var a=this.getAttribute(e);return a===r?null:a===i?o:o=t(i=a,n)}}function AW(e,t,n){var i,r=n+"",o;return function(){var a=this.getAttributeNS(e.space,e.local);return a===r?null:a===i?o:o=t(i=a,n)}}function MW(e,t,n){var i,r,o;return function(){var a,c=n(this),d;return c==null?void this.removeAttribute(e):(a=this.getAttribute(e),d=c+"",a===d?null:a===i&&d===r?o:(r=d,o=t(i=a,c)))}}function DW(e,t,n){var i,r,o;return function(){var a,c=n(this),d;return c==null?void this.removeAttributeNS(e.space,e.local):(a=this.getAttributeNS(e.space,e.local),d=c+"",a===d?null:a===i&&d===r?o:(r=d,o=t(i=a,c)))}}function OW(e,t){var n=Jm(e),i=n==="transform"?pW:ST;return this.attrTween(e,typeof t=="function"?(n.local?DW:MW)(n,i,O0(this,"attr."+e,t)):t==null?(n.local?TW:IW)(n):(n.local?AW:RW)(n,i,t))}function LW(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function zW(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function PW(e,t){var n,i;function r(){var o=t.apply(this,arguments);return o!==i&&(n=(i=o)&&zW(e,o)),n}return r._value=t,r}function BW(e,t){var n,i;function r(){var o=t.apply(this,arguments);return o!==i&&(n=(i=o)&&LW(e,o)),n}return r._value=t,r}function $W(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!="function")throw new Error;var i=Jm(e);return this.tween(n,(i.local?PW:BW)(i,t))}function HW(e,t){return function(){D0(this,e).delay=+t.apply(this,arguments)}}function FW(e,t){return t=+t,function(){D0(this,e).delay=t}}function VW(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?HW:FW)(t,e)):Wr(this.node(),t).delay}function UW(e,t){return function(){us(this,e).duration=+t.apply(this,arguments)}}function GW(e,t){return t=+t,function(){us(this,e).duration=t}}function qW(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?UW:GW)(t,e)):Wr(this.node(),t).duration}function WW(e,t){if(typeof t!="function")throw new Error;return function(){us(this,e).ease=t}}function YW(e){var t=this._id;return arguments.length?this.each(WW(t,e)):Wr(this.node(),t).ease}function XW(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!="function")throw new Error;us(this,e).ease=n}}function KW(e){if(typeof e!="function")throw new Error;return this.each(XW(this._id,e))}function ZW(e){typeof e!="function"&&(e=eT(e));for(var t=this._groups,n=t.length,i=new Array(n),r=0;r<n;++r)for(var o=t[r],a=o.length,c=i[r]=[],d,m=0;m<a;++m)(d=o[m])&&e.call(d,d.__data__,m,o)&&c.push(d);return new Ls(i,this._parents,this._name,this._id)}function QW(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,i=t.length,r=n.length,o=Math.min(i,r),a=new Array(i),c=0;c<o;++c)for(var d=t[c],m=n[c],h=d.length,p=a[c]=new Array(h),g,x=0;x<h;++x)(g=d[x]||m[x])&&(p[x]=g);for(;c<i;++c)a[c]=t[c];return new Ls(a,this._parents,this._name,this._id)}function JW(e){return(e+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||t==="start"})}function eY(e,t,n){var i,r,o=JW(t)?D0:us;return function(){var a=o(this,e),c=a.on;c!==i&&(r=(i=c).copy()).on(t,n),a.on=r}}function tY(e,t){var n=this._id;return arguments.length<2?Wr(this.node(),n).on.on(e):this.each(eY(n,e,t))}function nY(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function iY(){return this.on("end.remove",nY(this._id))}function rY(e){var t=this._name,n=this._id;typeof e!="function"&&(e=I0(e));for(var i=this._groups,r=i.length,o=new Array(r),a=0;a<r;++a)for(var c=i[a],d=c.length,m=o[a]=new Array(d),h,p,g=0;g<d;++g)(h=c[g])&&(p=e.call(h,h.__data__,g,c))&&("__data__"in h&&(p.__data__=h.__data__),m[g]=p,tp(m[g],t,n,g,m,Wr(h,n)));return new Ls(o,this._parents,t,n)}function sY(e){var t=this._name,n=this._id;typeof e!="function"&&(e=JI(e));for(var i=this._groups,r=i.length,o=[],a=[],c=0;c<r;++c)for(var d=i[c],m=d.length,h,p=0;p<m;++p)if(h=d[p]){for(var g=e.call(h,h.__data__,p,d),x,v=Wr(h,n),b=0,k=g.length;b<k;++b)(x=g[b])&&tp(x,t,n,b,g,v);o.push(g),a.push(h)}return new Ls(o,a,t,n)}var oY=Uu.prototype.constructor;function aY(){return new oY(this._groups,this._parents)}function lY(e,t){var n,i,r;return function(){var o=Ml(this,e),a=(this.style.removeProperty(e),Ml(this,e));return o===a?null:o===n&&a===i?r:r=t(n=o,i=a)}}function wT(e){return function(){this.style.removeProperty(e)}}function cY(e,t,n){var i,r=n+"",o;return function(){var a=Ml(this,e);return a===r?null:a===i?o:o=t(i=a,n)}}function uY(e,t,n){var i,r,o;return function(){var a=Ml(this,e),c=n(this),d=c+"";return c==null&&(d=c=(this.style.removeProperty(e),Ml(this,e))),a===d?null:a===i&&d===r?o:(r=d,o=t(i=a,c))}}function dY(e,t){var n,i,r,o="style."+t,a="end."+o,c;return function(){var d=us(this,e),m=d.on,h=d.value[o]==null?c||(c=wT(t)):void 0;(m!==n||r!==h)&&(i=(n=m).copy()).on(a,r=h),d.on=i}}function fY(e,t,n){var i=(e+="")=="transform"?mW:ST;return t==null?this.styleTween(e,lY(e,i)).on("end.style."+e,wT(e)):typeof t=="function"?this.styleTween(e,uY(e,i,O0(this,"style."+e,t))).each(dY(this._id,e)):this.styleTween(e,cY(e,i,t),n).on("end.style."+e,null)}function mY(e,t,n){return function(i){this.style.setProperty(e,t.call(this,i),n)}}function pY(e,t,n){var i,r;function o(){var a=t.apply(this,arguments);return a!==r&&(i=(r=a)&&mY(e,a,n)),i}return o._value=t,o}function hY(e,t,n){var i="style."+(e+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(t==null)return this.tween(i,null);if(typeof t!="function")throw new Error;return this.tween(i,pY(e,t,n??""))}function gY(e){return function(){this.textContent=e}}function yY(e){return function(){var t=e(this);this.textContent=t??""}}function xY(e){return this.tween("text",typeof e=="function"?yY(O0(this,"text",e)):gY(e==null?"":e+""))}function vY(e){return function(t){this.textContent=e.call(this,t)}}function bY(e){var t,n;function i(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&vY(r)),t}return i._value=e,i}function _Y(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,bY(e))}function kY(){for(var e=this._name,t=this._id,n=CT(),i=this._groups,r=i.length,o=0;o<r;++o)for(var a=i[o],c=a.length,d,m=0;m<c;++m)if(d=a[m]){var h=Wr(d,t);tp(d,e,n,m,a,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ls(i,this._parents,e,n)}function SY(){var e,t,n=this,i=n._id,r=n.size();return new Promise(function(o,a){var c={value:a},d={value:function(){--r===0&&o()}};n.each(function(){var m=us(this,i),h=m.on;h!==e&&(t=(e=h).copy(),t._.cancel.push(c),t._.interrupt.push(c),t._.end.push(d)),m.on=t}),r===0&&o()})}var wY=0;function Ls(e,t,n,i){this._groups=e,this._parents=t,this._name=n,this._id=i}function CT(){return++wY}var Is=Uu.prototype;Ls.prototype={constructor:Ls,select:rY,selectAll:sY,selectChild:Is.selectChild,selectChildren:Is.selectChildren,filter:ZW,merge:QW,selection:aY,transition:kY,call:Is.call,nodes:Is.nodes,node:Is.node,size:Is.size,empty:Is.empty,each:Is.each,on:tY,attr:OW,attrTween:$W,style:fY,styleTween:hY,text:xY,textTween:_Y,remove:iY,tween:NW,delay:VW,duration:qW,ease:YW,easeVarying:KW,end:SY,[Symbol.iterator]:Is[Symbol.iterator]};function CY(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var jY={time:null,delay:0,duration:250,ease:CY};function EY(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return n}function NY(e){var t,n;e instanceof Ls?(t=e._id,e=e._name):(t=CT(),(n=jY).time=M0(),e=e==null?null:e+"");for(var i=this._groups,r=i.length,o=0;o<r;++o)for(var a=i[o],c=a.length,d,m=0;m<c;++m)(d=a[m])&&tp(d,e,t,m,a,n||EY(d,t));return new Ls(i,this._parents,e,t)}Uu.prototype.interrupt=CW;Uu.prototype.transition=NY;const Sf=e=>()=>e;function IY(e,{sourceEvent:t,target:n,transform:i,dispatch:r}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:r}})}function Ds(e,t,n){this.k=e,this.x=t,this.y=n}Ds.prototype={constructor:Ds,scale:function(e){return e===1?this:new Ds(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Ds(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var np=new Ds(1,0,0);jT.prototype=Ds.prototype;function jT(e){for(;!e.__zoom;)if(!(e=e.parentNode))return np;return e.__zoom}function Ey(e){e.stopImmediatePropagation()}function Kc(e){e.preventDefault(),e.stopImmediatePropagation()}function TY(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function RY(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function GC(){return this.__zoom||np}function AY(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function MY(){return navigator.maxTouchPoints||"ontouchstart"in this}function DY(e,t,n){var i=e.invertX(t[0][0])-n[0][0],r=e.invertX(t[1][0])-n[1][0],o=e.invertY(t[0][1])-n[0][1],a=e.invertY(t[1][1])-n[1][1];return e.translate(r>i?(i+r)/2:Math.min(0,i)||Math.max(0,r),a>o?(o+a)/2:Math.min(0,o)||Math.max(0,a))}function ET(){var e=TY,t=RY,n=DY,i=AY,r=MY,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],c=250,d=Pf,m=Qm("start","zoom","end"),h,p,g,x=500,v=150,b=0,k=10;function w(P){P.property("__zoom",GC).on("wheel.zoom",I,{passive:!1}).on("mousedown.zoom",L).on("dblclick.zoom",M).filter(r).on("touchstart.zoom",A).on("touchmove.zoom",B).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}w.transform=function(P,G,$,q){var Y=P.selection?P.selection():P;Y.property("__zoom",GC),P!==Y?O(P,G,$,q):Y.interrupt().each(function(){R(this,arguments).event(q).start().zoom(null,typeof G=="function"?G.apply(this,arguments):G).end()})},w.scaleBy=function(P,G,$,q){w.scaleTo(P,function(){var Y=this.__zoom.k,Q=typeof G=="function"?G.apply(this,arguments):G;return Y*Q},$,q)},w.scaleTo=function(P,G,$,q){w.transform(P,function(){var Y=t.apply(this,arguments),Q=this.__zoom,V=$==null?N(Y):typeof $=="function"?$.apply(this,arguments):$,U=Q.invert(V),Z=typeof G=="function"?G.apply(this,arguments):G;return n(j(S(Q,Z),V,U),Y,a)},$,q)},w.translateBy=function(P,G,$,q){w.transform(P,function(){return n(this.__zoom.translate(typeof G=="function"?G.apply(this,arguments):G,typeof $=="function"?$.apply(this,arguments):$),t.apply(this,arguments),a)},null,q)},w.translateTo=function(P,G,$,q,Y){w.transform(P,function(){var Q=t.apply(this,arguments),V=this.__zoom,U=q==null?N(Q):typeof q=="function"?q.apply(this,arguments):q;return n(np.translate(U[0],U[1]).scale(V.k).translate(typeof G=="function"?-G.apply(this,arguments):-G,typeof $=="function"?-$.apply(this,arguments):-$),Q,a)},q,Y)};function S(P,G){return G=Math.max(o[0],Math.min(o[1],G)),G===P.k?P:new Ds(G,P.x,P.y)}function j(P,G,$){var q=G[0]-$[0]*P.k,Y=G[1]-$[1]*P.k;return q===P.x&&Y===P.y?P:new Ds(P.k,q,Y)}function N(P){return[(+P[0][0]+ +P[1][0])/2,(+P[0][1]+ +P[1][1])/2]}function O(P,G,$,q){P.on("start.zoom",function(){R(this,arguments).event(q).start()}).on("interrupt.zoom end.zoom",function(){R(this,arguments).event(q).end()}).tween("zoom",function(){var Y=this,Q=arguments,V=R(Y,Q).event(q),U=t.apply(Y,Q),Z=$==null?N(U):typeof $=="function"?$.apply(Y,Q):$,F=Math.max(U[1][0]-U[0][0],U[1][1]-U[0][1]),K=Y.__zoom,ee=typeof G=="function"?G.apply(Y,Q):G,te=d(K.invert(Z).concat(F/K.k),ee.invert(Z).concat(F/ee.k));return function(se){if(se===1)se=ee;else{var ae=te(se),ue=F/ae[2];se=new Ds(ue,Z[0]-ae[0]*ue,Z[1]-ae[1]*ue)}V.zoom(null,se)}})}function R(P,G,$){return!$&&P.__zooming||new D(P,G)}function D(P,G){this.that=P,this.args=G,this.active=0,this.sourceEvent=null,this.extent=t.apply(P,G),this.taps=0}D.prototype={event:function(P){return P&&(this.sourceEvent=P),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(P,G){return this.mouse&&P!=="mouse"&&(this.mouse[1]=G.invert(this.mouse[0])),this.touch0&&P!=="touch"&&(this.touch0[1]=G.invert(this.touch0[0])),this.touch1&&P!=="touch"&&(this.touch1[1]=G.invert(this.touch1[0])),this.that.__zoom=G,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(P){var G=ur(this.that).datum();m.call(P,this.that,new IY(P,{sourceEvent:this.sourceEvent,target:w,transform:this.that.__zoom,dispatch:m}),G)}};function I(P,...G){if(!e.apply(this,arguments))return;var $=R(this,G).event(P),q=this.__zoom,Y=Math.max(o[0],Math.min(o[1],q.k*Math.pow(2,i.apply(this,arguments)))),Q=Pr(P);if($.wheel)($.mouse[0][0]!==Q[0]||$.mouse[0][1]!==Q[1])&&($.mouse[1]=q.invert($.mouse[0]=Q)),clearTimeout($.wheel);else{if(q.k===Y)return;$.mouse=[Q,q.invert(Q)],Hf(this),$.start()}Kc(P),$.wheel=setTimeout(V,v),$.zoom("mouse",n(j(S(q,Y),$.mouse[0],$.mouse[1]),$.extent,a));function V(){$.wheel=null,$.end()}}function L(P,...G){if(g||!e.apply(this,arguments))return;var $=P.currentTarget,q=R(this,G,!0).event(P),Y=ur(P.view).on("mousemove.zoom",Z,!0).on("mouseup.zoom",F,!0),Q=Pr(P,$),V=P.clientX,U=P.clientY;uT(P.view),Ey(P),q.mouse=[Q,this.__zoom.invert(Q)],Hf(this),q.start();function Z(K){if(Kc(K),!q.moved){var ee=K.clientX-V,te=K.clientY-U;q.moved=ee*ee+te*te>b}q.event(K).zoom("mouse",n(j(q.that.__zoom,q.mouse[0]=Pr(K,$),q.mouse[1]),q.extent,a))}function F(K){Y.on("mousemove.zoom mouseup.zoom",null),dT(K.view,q.moved),Kc(K),q.event(K).end()}}function M(P,...G){if(e.apply(this,arguments)){var $=this.__zoom,q=Pr(P.changedTouches?P.changedTouches[0]:P,this),Y=$.invert(q),Q=$.k*(P.shiftKey?.5:2),V=n(j(S($,Q),q,Y),t.apply(this,G),a);Kc(P),c>0?ur(this).transition().duration(c).call(O,V,q,P):ur(this).call(w.transform,V,q,P)}}function A(P,...G){if(e.apply(this,arguments)){var $=P.touches,q=$.length,Y=R(this,G,P.changedTouches.length===q).event(P),Q,V,U,Z;for(Ey(P),V=0;V<q;++V)U=$[V],Z=Pr(U,this),Z=[Z,this.__zoom.invert(Z),U.identifier],Y.touch0?!Y.touch1&&Y.touch0[2]!==Z[2]&&(Y.touch1=Z,Y.taps=0):(Y.touch0=Z,Q=!0,Y.taps=1+!!h);h&&(h=clearTimeout(h)),Q&&(Y.taps<2&&(p=Z[0],h=setTimeout(function(){h=null},x)),Hf(this),Y.start())}}function B(P,...G){if(this.__zooming){var $=R(this,G).event(P),q=P.changedTouches,Y=q.length,Q,V,U,Z;for(Kc(P),Q=0;Q<Y;++Q)V=q[Q],U=Pr(V,this),$.touch0&&$.touch0[2]===V.identifier?$.touch0[0]=U:$.touch1&&$.touch1[2]===V.identifier&&($.touch1[0]=U);if(V=$.that.__zoom,$.touch1){var F=$.touch0[0],K=$.touch0[1],ee=$.touch1[0],te=$.touch1[1],se=(se=ee[0]-F[0])*se+(se=ee[1]-F[1])*se,ae=(ae=te[0]-K[0])*ae+(ae=te[1]-K[1])*ae;V=S(V,Math.sqrt(se/ae)),U=[(F[0]+ee[0])/2,(F[1]+ee[1])/2],Z=[(K[0]+te[0])/2,(K[1]+te[1])/2]}else if($.touch0)U=$.touch0[0],Z=$.touch0[1];else return;$.zoom("touch",n(j(V,U,Z),$.extent,a))}}function W(P,...G){if(this.__zooming){var $=R(this,G).event(P),q=P.changedTouches,Y=q.length,Q,V;for(Ey(P),g&&clearTimeout(g),g=setTimeout(function(){g=null},x),Q=0;Q<Y;++Q)V=q[Q],$.touch0&&$.touch0[2]===V.identifier?delete $.touch0:$.touch1&&$.touch1[2]===V.identifier&&delete $.touch1;if($.touch1&&!$.touch0&&($.touch0=$.touch1,delete $.touch1),$.touch0)$.touch0[1]=this.__zoom.invert($.touch0[0]);else if($.end(),$.taps===2&&(V=Pr(V,this),Math.hypot(p[0]-V[0],p[1]-V[1])<k)){var U=ur(this).on("dblclick.zoom");U&&U.apply(this,arguments)}}}return w.wheelDelta=function(P){return arguments.length?(i=typeof P=="function"?P:Sf(+P),w):i},w.filter=function(P){return arguments.length?(e=typeof P=="function"?P:Sf(!!P),w):e},w.touchable=function(P){return arguments.length?(r=typeof P=="function"?P:Sf(!!P),w):r},w.extent=function(P){return arguments.length?(t=typeof P=="function"?P:Sf([[+P[0][0],+P[0][1]],[+P[1][0],+P[1][1]]]),w):t},w.scaleExtent=function(P){return arguments.length?(o[0]=+P[0],o[1]=+P[1],w):[o[0],o[1]]},w.translateExtent=function(P){return arguments.length?(a[0][0]=+P[0][0],a[1][0]=+P[1][0],a[0][1]=+P[0][1],a[1][1]=+P[1][1],w):[[a[0][0],a[0][1]],[a[1][0],a[1][1]]]},w.constrain=function(P){return arguments.length?(n=P,w):n},w.duration=function(P){return arguments.length?(c=+P,w):c},w.interpolate=function(P){return arguments.length?(d=P,w):d},w.on=function(){var P=m.on.apply(m,arguments);return P===m?w:P},w.clickDistance=function(P){return arguments.length?(b=(P=+P)*P,w):Math.sqrt(b)},w.tapDistance=function(P){return arguments.length?(k=+P,w):k},w}const ls={error001:()=>"[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>"The React Flow parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:t,sourceHandle:n,targetHandle:i})=>`Couldn't create edge for ${e} handle id: "${e==="source"?n:i}", edge id: ${t}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs."},Mu=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],NT=["Enter"," ","Escape"],IT={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:e,x:t,y:n})=>`Moved selected node ${e}. New position, x: ${t}, y: ${n}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var Ol;(function(e){e.Strict="strict",e.Loose="loose"})(Ol||(Ol={}));var ra;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(ra||(ra={}));var Du;(function(e){e.Partial="partial",e.Full="full"})(Du||(Du={}));const TT={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var vo;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(vo||(vo={}));var Sm;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(Sm||(Sm={}));var st;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(st||(st={}));const qC={[st.Left]:st.Right,[st.Right]:st.Left,[st.Top]:st.Bottom,[st.Bottom]:st.Top};function RT(e){return e===null?null:e?"valid":"invalid"}const AT=e=>"id"in e&&"source"in e&&"target"in e,OY=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),L0=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),qu=(e,t=[0,0])=>{const{width:n,height:i}=Ps(e),r=e.origin??t,o=n*r[0],a=i*r[1];return{x:e.position.x-o,y:e.position.y-a}},LY=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};const n=e.reduce((i,r)=>{const o=typeof r=="string";let a=!t.nodeLookup&&!o?r:void 0;t.nodeLookup&&(a=o?t.nodeLookup.get(r):L0(r)?r:t.nodeLookup.get(r.id));const c=a?wm(a,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return ip(i,c)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return rp(n)},Wu=(e,t={})=>{let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0},i=!1;return e.forEach(r=>{(t.filter===void 0||t.filter(r))&&(n=ip(n,wm(r)),i=!0)}),i?rp(n):{x:0,y:0,width:0,height:0}},z0=(e,t,[n,i,r]=[0,0,1],o=!1,a=!1)=>{const c={...Xu(t,[n,i,r]),width:t.width/r,height:t.height/r},d=[];for(const m of e.values()){const{measured:h,selectable:p=!0,hidden:g=!1}=m;if(a&&!p||g)continue;const x=h.width??m.width??m.initialWidth??null,v=h.height??m.height??m.initialHeight??null,b=Ou(c,zl(m)),k=(x??0)*(v??0),w=o&&b>0;(!m.internals.handleBounds||w||b>=k||m.dragging)&&d.push(m)}return d},zY=(e,t)=>{const n=new Set;return e.forEach(i=>{n.add(i.id)}),t.filter(i=>n.has(i.source)||n.has(i.target))};function PY(e,t){const n=new Map,i=t?.nodes?new Set(t.nodes.map(r=>r.id)):null;return e.forEach(r=>{r.measured.width&&r.measured.height&&(t?.includeHiddenNodes||!r.hidden)&&(!i||i.has(r.id))&&n.set(r.id,r)}),n}async function BY({nodes:e,width:t,height:n,panZoom:i,minZoom:r,maxZoom:o},a){if(e.size===0)return Promise.resolve(!0);const c=PY(e,a),d=Wu(c),m=P0(d,t,n,a?.minZoom??r,a?.maxZoom??o,a?.padding??.1);return await i.setViewport(m,{duration:a?.duration,ease:a?.ease,interpolate:a?.interpolate}),Promise.resolve(!0)}function MT({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:i=[0,0],nodeExtent:r,onError:o}){const a=n.get(e),c=a.parentId?n.get(a.parentId):void 0,{x:d,y:m}=c?c.internals.positionAbsolute:{x:0,y:0},h=a.origin??i;let p=a.extent||r;if(a.extent==="parent"&&!a.expandParent)if(!c)o?.("005",ls.error005());else{const x=c.measured.width,v=c.measured.height;x&&v&&(p=[[d,m],[d+x,m+v]])}else c&&Pl(a.extent)&&(p=[[a.extent[0][0]+d,a.extent[0][1]+m],[a.extent[1][0]+d,a.extent[1][1]+m]]);const g=Pl(p)?ca(t,p,a.measured):t;return(a.measured.width===void 0||a.measured.height===void 0)&&o?.("015",ls.error015()),{position:{x:g.x-d+(a.measured.width??0)*h[0],y:g.y-m+(a.measured.height??0)*h[1]},positionAbsolute:g}}async function $Y({nodesToRemove:e=[],edgesToRemove:t=[],nodes:n,edges:i,onBeforeDelete:r}){const o=new Set(e.map(g=>g.id)),a=[];for(const g of n){if(g.deletable===!1)continue;const x=o.has(g.id),v=!x&&g.parentId&&a.find(b=>b.id===g.parentId);(x||v)&&a.push(g)}const c=new Set(t.map(g=>g.id)),d=i.filter(g=>g.deletable!==!1),h=zY(a,d);for(const g of d)c.has(g.id)&&!h.find(v=>v.id===g.id)&&h.push(g);if(!r)return{edges:h,nodes:a};const p=await r({nodes:a,edges:h});return typeof p=="boolean"?p?{edges:h,nodes:a}:{edges:[],nodes:[]}:p}const Ll=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),ca=(e={x:0,y:0},t,n)=>({x:Ll(e.x,t[0][0],t[1][0]-(n?.width??0)),y:Ll(e.y,t[0][1],t[1][1]-(n?.height??0))});function DT(e,t,n){const{width:i,height:r}=Ps(n),{x:o,y:a}=n.internals.positionAbsolute;return ca(e,[[o,a],[o+i,a+r]],t)}const WC=(e,t,n)=>e<t?Ll(Math.abs(e-t),1,t)/t:e>n?-Ll(Math.abs(e-n),1,t)/t:0,OT=(e,t,n=15,i=40)=>{const r=WC(e.x,i,t.width-i)*n,o=WC(e.y,i,t.height-i)*n;return[r,o]},ip=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),Sv=({x:e,y:t,width:n,height:i})=>({x:e,y:t,x2:e+n,y2:t+i}),rp=({x:e,y:t,x2:n,y2:i})=>({x:e,y:t,width:n-e,height:i-t}),zl=(e,t=[0,0])=>{const{x:n,y:i}=L0(e)?e.internals.positionAbsolute:qu(e,t);return{x:n,y:i,width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}},wm=(e,t=[0,0])=>{const{x:n,y:i}=L0(e)?e.internals.positionAbsolute:qu(e,t);return{x:n,y:i,x2:n+(e.measured?.width??e.width??e.initialWidth??0),y2:i+(e.measured?.height??e.height??e.initialHeight??0)}},LT=(e,t)=>rp(ip(Sv(e),Sv(t))),Ou=(e,t)=>{const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),i=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*i)},YC=e=>Fr(e.width)&&Fr(e.height)&&Fr(e.x)&&Fr(e.y),Fr=e=>!isNaN(e)&&isFinite(e),HY=(e,t)=>{},Yu=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),Xu=({x:e,y:t},[n,i,r],o=!1,a=[1,1])=>{const c={x:(e-n)/r,y:(t-i)/r};return o?Yu(c,a):c},Cm=({x:e,y:t},[n,i,r])=>({x:e*r+n,y:t*r+i});function il(e,t){if(typeof e=="number")return Math.floor((t-t/(1+e))*.5);if(typeof e=="string"&&e.endsWith("px")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(n)}if(typeof e=="string"&&e.endsWith("%")){const n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(t*n*.01)}return console.error(`[React Flow] The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function FY(e,t,n){if(typeof e=="string"||typeof e=="number"){const i=il(e,n),r=il(e,t);return{top:i,right:r,bottom:i,left:r,x:r*2,y:i*2}}if(typeof e=="object"){const i=il(e.top??e.y??0,n),r=il(e.bottom??e.y??0,n),o=il(e.left??e.x??0,t),a=il(e.right??e.x??0,t);return{top:i,right:a,bottom:r,left:o,x:o+a,y:i+r}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function VY(e,t,n,i,r,o){const{x:a,y:c}=Cm(e,[t,n,i]),{x:d,y:m}=Cm({x:e.x+e.width,y:e.y+e.height},[t,n,i]),h=r-d,p=o-m;return{left:Math.floor(a),top:Math.floor(c),right:Math.floor(h),bottom:Math.floor(p)}}const P0=(e,t,n,i,r,o)=>{const a=FY(o,t,n),c=(t-a.x)/e.width,d=(n-a.y)/e.height,m=Math.min(c,d),h=Ll(m,i,r),p=e.x+e.width/2,g=e.y+e.height/2,x=t/2-p*h,v=n/2-g*h,b=VY(e,x,v,h,t,n),k={left:Math.min(b.left-a.left,0),top:Math.min(b.top-a.top,0),right:Math.min(b.right-a.right,0),bottom:Math.min(b.bottom-a.bottom,0)};return{x:x-k.left+k.right,y:v-k.top+k.bottom,zoom:h}},Lu=()=>typeof navigator<"u"&&navigator?.userAgent?.indexOf("Mac")>=0;function Pl(e){return e!=null&&e!=="parent"}function Ps(e){return{width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}}function zT(e){return(e.measured?.width??e.width??e.initialWidth)!==void 0&&(e.measured?.height??e.height??e.initialHeight)!==void 0}function PT(e,t={width:0,height:0},n,i,r){const o={...e},a=i.get(n);if(a){const c=a.origin||r;o.x+=a.internals.positionAbsolute.x-(t.width??0)*c[0],o.y+=a.internals.positionAbsolute.y-(t.height??0)*c[1]}return o}function XC(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function UY(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}function GY(e){return{...IT,...e||{}}}function hu(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:i,containerBounds:r}){const{x:o,y:a}=Vr(e),c=Xu({x:o-(r?.left??0),y:a-(r?.top??0)},i),{x:d,y:m}=n?Yu(c,t):c;return{xSnapped:d,ySnapped:m,...c}}const B0=e=>({width:e.offsetWidth,height:e.offsetHeight}),BT=e=>e?.getRootNode?.()||window?.document,qY=["INPUT","SELECT","TEXTAREA"];function $T(e){const t=e.composedPath?.()?.[0]||e.target;return t?.nodeType!==1?!1:qY.includes(t.nodeName)||t.hasAttribute("contenteditable")||!!t.closest(".nokey")}const HT=e=>"clientX"in e,Vr=(e,t)=>{const n=HT(e),i=n?e.clientX:e.touches?.[0].clientX,r=n?e.clientY:e.touches?.[0].clientY;return{x:i-(t?.left??0),y:r-(t?.top??0)}},KC=(e,t,n,i,r)=>{const o=t.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(a=>{const c=a.getBoundingClientRect();return{id:a.getAttribute("data-handleid"),type:e,nodeId:r,position:a.getAttribute("data-handlepos"),x:(c.left-n.left)/i,y:(c.top-n.top)/i,...B0(a)}})};function FT({sourceX:e,sourceY:t,targetX:n,targetY:i,sourceControlX:r,sourceControlY:o,targetControlX:a,targetControlY:c}){const d=e*.125+r*.375+a*.375+n*.125,m=t*.125+o*.375+c*.375+i*.125,h=Math.abs(d-e),p=Math.abs(m-t);return[d,m,h,p]}function wf(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function ZC({pos:e,x1:t,y1:n,x2:i,y2:r,c:o}){switch(e){case st.Left:return[t-wf(t-i,o),n];case st.Right:return[t+wf(i-t,o),n];case st.Top:return[t,n-wf(n-r,o)];case st.Bottom:return[t,n+wf(r-n,o)]}}function VT({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:i,targetY:r,targetPosition:o=st.Top,curvature:a=.25}){const[c,d]=ZC({pos:n,x1:e,y1:t,x2:i,y2:r,c:a}),[m,h]=ZC({pos:o,x1:i,y1:r,x2:e,y2:t,c:a}),[p,g,x,v]=FT({sourceX:e,sourceY:t,targetX:i,targetY:r,sourceControlX:c,sourceControlY:d,targetControlX:m,targetControlY:h});return[`M${e},${t} C${c},${d} ${m},${h} ${i},${r}`,p,g,x,v]}function UT({sourceX:e,sourceY:t,targetX:n,targetY:i}){const r=Math.abs(n-e)/2,o=n<e?n+r:n-r,a=Math.abs(i-t)/2,c=i<t?i+a:i-a;return[o,c,r,a]}function WY({sourceNode:e,targetNode:t,selected:n=!1,zIndex:i=0,elevateOnSelect:r=!1,zIndexMode:o="basic"}){if(o==="manual")return i;const a=r&&n?i+1e3:i,c=Math.max(e.parentId||r&&e.selected?e.internals.z:0,t.parentId||r&&t.selected?t.internals.z:0);return a+c}function YY({sourceNode:e,targetNode:t,width:n,height:i,transform:r}){const o=ip(wm(e),wm(t));o.x===o.x2&&(o.x2+=1),o.y===o.y2&&(o.y2+=1);const a={x:-r[0]/r[2],y:-r[1]/r[2],width:n/r[2],height:i/r[2]};return Ou(a,rp(o))>0}const XY=({source:e,sourceHandle:t,target:n,targetHandle:i})=>`xy-edge__${e}${t||""}-${n}${i||""}`,KY=(e,t)=>t.some(n=>n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle)),ZY=(e,t,n={})=>{if(!e.source||!e.target)return t;const i=n.getEdgeId||XY;let r;return AT(e)?r={...e}:r={...e,id:i(e)},KY(r,t)?t:(r.sourceHandle===null&&delete r.sourceHandle,r.targetHandle===null&&delete r.targetHandle,t.concat(r))};function GT({sourceX:e,sourceY:t,targetX:n,targetY:i}){const[r,o,a,c]=UT({sourceX:e,sourceY:t,targetX:n,targetY:i});return[`M ${e},${t}L ${n},${i}`,r,o,a,c]}const QC={[st.Left]:{x:-1,y:0},[st.Right]:{x:1,y:0},[st.Top]:{x:0,y:-1},[st.Bottom]:{x:0,y:1}},QY=({source:e,sourcePosition:t=st.Bottom,target:n})=>t===st.Left||t===st.Right?e.x<n.x?{x:1,y:0}:{x:-1,y:0}:e.y<n.y?{x:0,y:1}:{x:0,y:-1},JC=(e,t)=>Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function JY({source:e,sourcePosition:t=st.Bottom,target:n,targetPosition:i=st.Top,center:r,offset:o,stepPosition:a}){const c=QC[t],d=QC[i],m={x:e.x+c.x*o,y:e.y+c.y*o},h={x:n.x+d.x*o,y:n.y+d.y*o},p=QY({source:m,sourcePosition:t,target:h}),g=p.x!==0?"x":"y",x=p[g];let v=[],b,k;const w={x:0,y:0},S={x:0,y:0},[,,j,N]=UT({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(c[g]*d[g]===-1){g==="x"?(b=r.x??m.x+(h.x-m.x)*a,k=r.y??(m.y+h.y)/2):(b=r.x??(m.x+h.x)/2,k=r.y??m.y+(h.y-m.y)*a);const I=[{x:b,y:m.y},{x:b,y:h.y}],L=[{x:m.x,y:k},{x:h.x,y:k}];c[g]===x?v=g==="x"?I:L:v=g==="x"?L:I}else{const I=[{x:m.x,y:h.y}],L=[{x:h.x,y:m.y}];if(g==="x"?v=c.x===x?L:I:v=c.y===x?I:L,t===i){const P=Math.abs(e[g]-n[g]);if(P<=o){const G=Math.min(o-1,o-P);c[g]===x?w[g]=(m[g]>e[g]?-1:1)*G:S[g]=(h[g]>n[g]?-1:1)*G}}if(t!==i){const P=g==="x"?"y":"x",G=c[g]===d[P],$=m[P]>h[P],q=m[P]<h[P];(c[g]===1&&(!G&&$||G&&q)||c[g]!==1&&(!G&&q||G&&$))&&(v=g==="x"?I:L)}const M={x:m.x+w.x,y:m.y+w.y},A={x:h.x+S.x,y:h.y+S.y},B=Math.max(Math.abs(M.x-v[0].x),Math.abs(A.x-v[0].x)),W=Math.max(Math.abs(M.y-v[0].y),Math.abs(A.y-v[0].y));B>=W?(b=(M.x+A.x)/2,k=v[0].y):(b=v[0].x,k=(M.y+A.y)/2)}const O={x:m.x+w.x,y:m.y+w.y},R={x:h.x+S.x,y:h.y+S.y};return[[e,...O.x!==v[0].x||O.y!==v[0].y?[O]:[],...v,...R.x!==v[v.length-1].x||R.y!==v[v.length-1].y?[R]:[],n],b,k,j,N]}function eX(e,t,n,i){const r=Math.min(JC(e,t)/2,JC(t,n)/2,i),{x:o,y:a}=t;if(e.x===o&&o===n.x||e.y===a&&a===n.y)return`L${o} ${a}`;if(e.y===a){const m=e.x<n.x?-1:1,h=e.y<n.y?1:-1;return`L ${o+r*m},${a}Q ${o},${a} ${o},${a+r*h}`}const c=e.x<n.x?1:-1,d=e.y<n.y?-1:1;return`L ${o},${a+r*d}Q ${o},${a} ${o+r*c},${a}`}function wv({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:i,targetY:r,targetPosition:o=st.Top,borderRadius:a=5,centerX:c,centerY:d,offset:m=20,stepPosition:h=.5}){const[p,g,x,v,b]=JY({source:{x:e,y:t},sourcePosition:n,target:{x:i,y:r},targetPosition:o,center:{x:c,y:d},offset:m,stepPosition:h});let k=`M${p[0].x} ${p[0].y}`;for(let w=1;w<p.length-1;w++)k+=eX(p[w-1],p[w],p[w+1],a);return k+=`L${p[p.length-1].x} ${p[p.length-1].y}`,[k,g,x,v,b]}function e2(e){return e&&!!(e.internals.handleBounds||e.handles?.length)&&!!(e.measured.width||e.width||e.initialWidth)}function tX(e){const{sourceNode:t,targetNode:n}=e;if(!e2(t)||!e2(n))return null;const i=t.internals.handleBounds||t2(t.handles),r=n.internals.handleBounds||t2(n.handles),o=n2(i?.source??[],e.sourceHandle),a=n2(e.connectionMode===Ol.Strict?r?.target??[]:(r?.target??[]).concat(r?.source??[]),e.targetHandle);if(!o||!a)return e.onError?.("008",ls.error008(o?"target":"source",{id:e.id,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle})),null;const c=o?.position||st.Bottom,d=a?.position||st.Top,m=ua(t,o,c),h=ua(n,a,d);return{sourceX:m.x,sourceY:m.y,targetX:h.x,targetY:h.y,sourcePosition:c,targetPosition:d}}function t2(e){if(!e)return null;const t=[],n=[];for(const i of e)i.width=i.width??1,i.height=i.height??1,i.type==="source"?t.push(i):i.type==="target"&&n.push(i);return{source:t,target:n}}function ua(e,t,n=st.Left,i=!1){const r=(t?.x??0)+e.internals.positionAbsolute.x,o=(t?.y??0)+e.internals.positionAbsolute.y,{width:a,height:c}=t??Ps(e);if(i)return{x:r+a/2,y:o+c/2};switch(t?.position??n){case st.Top:return{x:r+a/2,y:o};case st.Right:return{x:r+a,y:o+c/2};case st.Bottom:return{x:r+a/2,y:o+c};case st.Left:return{x:r,y:o+c/2}}}function n2(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function Cv(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(i=>`${i}=${e[i]}`).join("&")}`:""}function nX(e,{id:t,defaultColor:n,defaultMarkerStart:i,defaultMarkerEnd:r}){const o=new Set;return e.reduce((a,c)=>([c.markerStart||i,c.markerEnd||r].forEach(d=>{if(d&&typeof d=="object"){const m=Cv(d,t);o.has(m)||(a.push({id:m,color:d.color||n,...d}),o.add(m))}}),a),[]).sort((a,c)=>a.id.localeCompare(c.id))}const qT=1e3,iX=10,$0={nodeOrigin:[0,0],nodeExtent:Mu,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},rX={...$0,checkEquality:!0};function H0(e,t){const n={...e};for(const i in t)t[i]!==void 0&&(n[i]=t[i]);return n}function sX(e,t,n){const i=H0($0,n);for(const r of e.values())if(r.parentId)V0(r,e,t,i);else{const o=qu(r,i.nodeOrigin),a=Pl(r.extent)?r.extent:i.nodeExtent,c=ca(o,a,Ps(r));r.internals.positionAbsolute=c}}function oX(e,t){if(!e.handles)return e.measured?t?.internals.handleBounds:void 0;const n=[],i=[];for(const r of e.handles){const o={id:r.id,width:r.width??1,height:r.height??1,nodeId:e.id,x:r.x,y:r.y,position:r.position,type:r.type};r.type==="source"?n.push(o):r.type==="target"&&i.push(o)}return{source:n,target:i}}function F0(e){return e==="manual"}function jv(e,t,n,i={}){const r=H0(rX,i),o={i:0},a=new Map(t),c=r?.elevateNodesOnSelect&&!F0(r.zIndexMode)?qT:0;let d=e.length>0,m=!1;t.clear(),n.clear();for(const h of e){let p=a.get(h.id);if(r.checkEquality&&h===p?.internals.userNode)t.set(h.id,p);else{const g=qu(h,r.nodeOrigin),x=Pl(h.extent)?h.extent:r.nodeExtent,v=ca(g,x,Ps(h));p={...r.defaults,...h,measured:{width:h.measured?.width,height:h.measured?.height},internals:{positionAbsolute:v,handleBounds:oX(h,p),z:WT(h,c,r.zIndexMode),userNode:h}},t.set(h.id,p)}(p.measured===void 0||p.measured.width===void 0||p.measured.height===void 0)&&!p.hidden&&(d=!1),h.parentId&&V0(p,t,n,i,o),m||=h.selected??!1}return{nodesInitialized:d,hasSelectedNodes:m}}function aX(e,t){if(!e.parentId)return;const n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function V0(e,t,n,i,r){const{elevateNodesOnSelect:o,nodeOrigin:a,nodeExtent:c,zIndexMode:d}=H0($0,i),m=e.parentId,h=t.get(m);if(!h){console.warn(`Parent node ${m} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}aX(e,n),r&&!h.parentId&&h.internals.rootParentIndex===void 0&&d==="auto"&&(h.internals.rootParentIndex=++r.i,h.internals.z=h.internals.z+r.i*iX),r&&h.internals.rootParentIndex!==void 0&&(r.i=h.internals.rootParentIndex);const p=o&&!F0(d)?qT:0,{x:g,y:x,z:v}=lX(e,h,a,c,p,d),{positionAbsolute:b}=e.internals,k=g!==b.x||x!==b.y;(k||v!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:k?{x:g,y:x}:b,z:v}})}function WT(e,t,n){const i=Fr(e.zIndex)?e.zIndex:0;return F0(n)?i:i+(e.selected?t:0)}function lX(e,t,n,i,r,o){const{x:a,y:c}=t.internals.positionAbsolute,d=Ps(e),m=qu(e,n),h=Pl(e.extent)?ca(m,e.extent,d):m;let p=ca({x:a+h.x,y:c+h.y},i,d);e.extent==="parent"&&(p=DT(p,d,t));const g=WT(e,r,o),x=t.internals.z??0;return{x:p.x,y:p.y,z:x>=g?x+1:g}}function U0(e,t,n,i=[0,0]){const r=[],o=new Map;for(const a of e){const c=t.get(a.parentId);if(!c)continue;const d=o.get(a.parentId)?.expandedRect??zl(c),m=LT(d,a.rect);o.set(a.parentId,{expandedRect:m,parent:c})}return o.size>0&&o.forEach(({expandedRect:a,parent:c},d)=>{const m=c.internals.positionAbsolute,h=Ps(c),p=c.origin??i,g=a.x<m.x?Math.round(Math.abs(m.x-a.x)):0,x=a.y<m.y?Math.round(Math.abs(m.y-a.y)):0,v=Math.max(h.width,Math.round(a.width)),b=Math.max(h.height,Math.round(a.height)),k=(v-h.width)*p[0],w=(b-h.height)*p[1];(g>0||x>0||k||w)&&(r.push({id:d,type:"position",position:{x:c.position.x-g+k,y:c.position.y-x+w}}),n.get(d)?.forEach(S=>{e.some(j=>j.id===S.id)||r.push({id:S.id,type:"position",position:{x:S.position.x+g,y:S.position.y+x}})})),(h.width<a.width||h.height<a.height||g||x)&&r.push({id:d,type:"dimensions",setAttributes:!0,dimensions:{width:v+(g?p[0]*g-k:0),height:b+(x?p[1]*x-w:0)}})}),r}function cX(e,t,n,i,r,o,a){const c=i?.querySelector(".xyflow__viewport");let d=!1;if(!c)return{changes:[],updatedInternals:d};const m=[],h=window.getComputedStyle(c),{m22:p}=new window.DOMMatrixReadOnly(h.transform),g=[];for(const x of e.values()){const v=t.get(x.id);if(!v)continue;if(v.hidden){t.set(v.id,{...v,internals:{...v.internals,handleBounds:void 0}}),d=!0;continue}const b=B0(x.nodeElement),k=v.measured.width!==b.width||v.measured.height!==b.height;if(!!(b.width&&b.height&&(k||!v.internals.handleBounds||x.force))){const S=x.nodeElement.getBoundingClientRect(),j=Pl(v.extent)?v.extent:o;let{positionAbsolute:N}=v.internals;v.parentId&&v.extent==="parent"?N=DT(N,b,t.get(v.parentId)):j&&(N=ca(N,j,b));const O={...v,measured:b,internals:{...v.internals,positionAbsolute:N,handleBounds:{source:KC("source",x.nodeElement,S,p,v.id),target:KC("target",x.nodeElement,S,p,v.id)}}};t.set(v.id,O),v.parentId&&V0(O,t,n,{nodeOrigin:r,zIndexMode:a}),d=!0,k&&(m.push({id:v.id,type:"dimensions",dimensions:b}),v.expandParent&&v.parentId&&g.push({id:v.id,parentId:v.parentId,rect:zl(O,r)}))}}if(g.length>0){const x=U0(g,t,n,r);m.push(...x)}return{changes:m,updatedInternals:d}}async function uX({delta:e,panZoom:t,transform:n,translateExtent:i,width:r,height:o}){if(!t||!e.x&&!e.y)return Promise.resolve(!1);const a=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[r,o]],i),c=!!a&&(a.x!==n[0]||a.y!==n[1]||a.k!==n[2]);return Promise.resolve(c)}function i2(e,t,n,i,r,o){let a=r;const c=i.get(a)||new Map;i.set(a,c.set(n,t)),a=`${r}-${e}`;const d=i.get(a)||new Map;if(i.set(a,d.set(n,t)),o){a=`${r}-${e}-${o}`;const m=i.get(a)||new Map;i.set(a,m.set(n,t))}}function YT(e,t,n){e.clear(),t.clear();for(const i of n){const{source:r,target:o,sourceHandle:a=null,targetHandle:c=null}=i,d={edgeId:i.id,source:r,target:o,sourceHandle:a,targetHandle:c},m=`${r}-${a}--${o}-${c}`,h=`${o}-${c}--${r}-${a}`;i2("source",d,h,e,r,a),i2("target",d,m,e,o,c),t.set(i.id,i)}}function XT(e,t){if(!e.parentId)return!1;const n=t.get(e.parentId);return n?n.selected?!0:XT(n,t):!1}function r2(e,t,n){let i=e;do{if(i?.matches?.(t))return!0;if(i===n)return!1;i=i?.parentElement}while(i);return!1}function dX(e,t,n,i){const r=new Map;for(const[o,a]of e)if((a.selected||a.id===i)&&(!a.parentId||!XT(a,e))&&(a.draggable||t&&typeof a.draggable>"u")){const c=e.get(o);c&&r.set(o,{id:o,position:c.position||{x:0,y:0},distance:{x:n.x-c.internals.positionAbsolute.x,y:n.y-c.internals.positionAbsolute.y},extent:c.extent,parentId:c.parentId,origin:c.origin,expandParent:c.expandParent,internals:{positionAbsolute:c.internals.positionAbsolute||{x:0,y:0}},measured:{width:c.measured.width??0,height:c.measured.height??0}})}return r}function Ny({nodeId:e,dragItems:t,nodeLookup:n,dragging:i=!0}){const r=[];for(const[a,c]of t){const d=n.get(a)?.internals.userNode;d&&r.push({...d,position:c.position,dragging:i})}if(!e)return[r[0],r];const o=n.get(e)?.internals.userNode;return[o?{...o,position:t.get(e)?.position||o.position,dragging:i}:r[0],r]}function fX({dragItems:e,snapGrid:t,x:n,y:i}){const r=e.values().next().value;if(!r)return null;const o={x:n-r.distance.x,y:i-r.distance.y},a=Yu(o,t);return{x:a.x-o.x,y:a.y-o.y}}function mX({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:i,onDragStop:r}){let o={x:null,y:null},a=0,c=new Map,d=!1,m={x:0,y:0},h=null,p=!1,g=null,x=!1,v=!1,b=null;function k({noDragClassName:S,handleSelector:j,domNode:N,isSelectable:O,nodeId:R,nodeClickDistance:D=0}){g=ur(N);function I({x:B,y:W}){const{nodeLookup:P,nodeExtent:G,snapGrid:$,snapToGrid:q,nodeOrigin:Y,onNodeDrag:Q,onSelectionDrag:V,onError:U,updateNodePositions:Z}=t();o={x:B,y:W};let F=!1;const K=c.size>1,ee=K&&G?Sv(Wu(c)):null,te=K&&q?fX({dragItems:c,snapGrid:$,x:B,y:W}):null;for(const[se,ae]of c){if(!P.has(se))continue;let ue={x:B-ae.distance.x,y:W-ae.distance.y};q&&(ue=te?{x:Math.round(ue.x+te.x),y:Math.round(ue.y+te.y)}:Yu(ue,$));let ie=null;if(K&&G&&!ae.extent&&ee){const{positionAbsolute:Te}=ae.internals,Ge=Te.x-ee.x+G[0][0],Ze=Te.x+ae.measured.width-ee.x2+G[1][0],Ye=Te.y-ee.y+G[0][1],mt=Te.y+ae.measured.height-ee.y2+G[1][1];ie=[[Ge,Ye],[Ze,mt]]}const{position:we,positionAbsolute:je}=MT({nodeId:se,nextPosition:ue,nodeLookup:P,nodeExtent:ie||G,nodeOrigin:Y,onError:U});F=F||ae.position.x!==we.x||ae.position.y!==we.y,ae.position=we,ae.internals.positionAbsolute=je}if(v=v||F,!!F&&(Z(c,!0),b&&(i||Q||!R&&V))){const[se,ae]=Ny({nodeId:R,dragItems:c,nodeLookup:P});i?.(b,c,se,ae),Q?.(b,se,ae),R||V?.(b,ae)}}async function L(){if(!h)return;const{transform:B,panBy:W,autoPanSpeed:P,autoPanOnNodeDrag:G}=t();if(!G){d=!1,cancelAnimationFrame(a);return}const[$,q]=OT(m,h,P);($!==0||q!==0)&&(o.x=(o.x??0)-$/B[2],o.y=(o.y??0)-q/B[2],await W({x:$,y:q})&&I(o)),a=requestAnimationFrame(L)}function M(B){const{nodeLookup:W,multiSelectionActive:P,nodesDraggable:G,transform:$,snapGrid:q,snapToGrid:Y,selectNodesOnDrag:Q,onNodeDragStart:V,onSelectionDragStart:U,unselectNodesAndEdges:Z}=t();p=!0,(!Q||!O)&&!P&&R&&(W.get(R)?.selected||Z()),O&&Q&&R&&e?.(R);const F=hu(B.sourceEvent,{transform:$,snapGrid:q,snapToGrid:Y,containerBounds:h});if(o=F,c=dX(W,G,F,R),c.size>0&&(n||V||!R&&U)){const[K,ee]=Ny({nodeId:R,dragItems:c,nodeLookup:W});n?.(B.sourceEvent,c,K,ee),V?.(B.sourceEvent,K,ee),R||U?.(B.sourceEvent,ee)}}const A=fT().clickDistance(D).on("start",B=>{const{domNode:W,nodeDragThreshold:P,transform:G,snapGrid:$,snapToGrid:q}=t();h=W?.getBoundingClientRect()||null,x=!1,v=!1,b=B.sourceEvent,P===0&&M(B),o=hu(B.sourceEvent,{transform:G,snapGrid:$,snapToGrid:q,containerBounds:h}),m=Vr(B.sourceEvent,h)}).on("drag",B=>{const{autoPanOnNodeDrag:W,transform:P,snapGrid:G,snapToGrid:$,nodeDragThreshold:q,nodeLookup:Y}=t(),Q=hu(B.sourceEvent,{transform:P,snapGrid:G,snapToGrid:$,containerBounds:h});if(b=B.sourceEvent,(B.sourceEvent.type==="touchmove"&&B.sourceEvent.touches.length>1||R&&!Y.has(R))&&(x=!0),!x){if(!d&&W&&p&&(d=!0,L()),!p){const V=Vr(B.sourceEvent,h),U=V.x-m.x,Z=V.y-m.y;Math.sqrt(U*U+Z*Z)>q&&M(B)}(o.x!==Q.xSnapped||o.y!==Q.ySnapped)&&c&&p&&(m=Vr(B.sourceEvent,h),I(Q))}}).on("end",B=>{if(!(!p||x)&&(d=!1,p=!1,cancelAnimationFrame(a),c.size>0)){const{nodeLookup:W,updateNodePositions:P,onNodeDragStop:G,onSelectionDragStop:$}=t();if(v&&(P(c,!1),v=!1),r||G||!R&&$){const[q,Y]=Ny({nodeId:R,dragItems:c,nodeLookup:W,dragging:!1});r?.(B.sourceEvent,c,q,Y),G?.(B.sourceEvent,q,Y),R||$?.(B.sourceEvent,Y)}}}).filter(B=>{const W=B.target;return!B.button&&(!S||!r2(W,`.${S}`,N))&&(!j||r2(W,j,N))});g.call(A)}function w(){g?.on(".drag",null)}return{update:k,destroy:w}}function pX(e,t,n){const i=[],r={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const o of t.values())Ou(r,zl(o))>0&&i.push(o);return i}const hX=250;function gX(e,t,n,i){let r=[],o=1/0;const a=pX(e,n,t+hX);for(const c of a){const d=[...c.internals.handleBounds?.source??[],...c.internals.handleBounds?.target??[]];for(const m of d){if(i.nodeId===m.nodeId&&i.type===m.type&&i.id===m.id)continue;const{x:h,y:p}=ua(c,m,m.position,!0),g=Math.sqrt(Math.pow(h-e.x,2)+Math.pow(p-e.y,2));g>t||(g<o?(r=[{...m,x:h,y:p}],o=g):g===o&&r.push({...m,x:h,y:p}))}}if(!r.length)return null;if(r.length>1){const c=i.type==="source"?"target":"source";return r.find(d=>d.type===c)??r[0]}return r[0]}function KT(e,t,n,i,r,o=!1){const a=i.get(e);if(!a)return null;const c=r==="strict"?a.internals.handleBounds?.[t]:[...a.internals.handleBounds?.source??[],...a.internals.handleBounds?.target??[]],d=(n?c?.find(m=>m.id===n):c?.[0])??null;return d&&o?{...d,...ua(a,d,d.position,!0)}:d}function ZT(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function yX(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}const QT=()=>!0;function xX(e,{connectionMode:t,connectionRadius:n,handleId:i,nodeId:r,edgeUpdaterType:o,isTarget:a,domNode:c,nodeLookup:d,lib:m,autoPanOnConnect:h,flowId:p,panBy:g,cancelConnection:x,onConnectStart:v,onConnect:b,onConnectEnd:k,isValidConnection:w=QT,onReconnectEnd:S,updateConnection:j,getTransform:N,getFromHandle:O,autoPanSpeed:R,dragThreshold:D=1,handleDomNode:I}){const L=BT(e.target);let M=0,A;const{x:B,y:W}=Vr(e),P=ZT(o,I),G=c?.getBoundingClientRect();let $=!1;if(!G||!P)return;const q=KT(r,P,i,d,t);if(!q)return;let Y=Vr(e,G),Q=!1,V=null,U=!1,Z=null;function F(){if(!h||!G)return;const[we,je]=OT(Y,G,R);g({x:we,y:je}),M=requestAnimationFrame(F)}const K={...q,nodeId:r,type:P,position:q.position},ee=d.get(r);let se={inProgress:!0,isValid:null,from:ua(ee,K,st.Left,!0),fromHandle:K,fromPosition:K.position,fromNode:ee,to:Y,toHandle:null,toPosition:qC[K.position],toNode:null,pointer:Y};function ae(){$=!0,j(se),v?.(e,{nodeId:r,handleId:i,handleType:P})}D===0&&ae();function ue(we){if(!$){const{x:mt,y:Ft}=Vr(we),Mt=mt-B,jt=Ft-W;if(!(Mt*Mt+jt*jt>D*D))return;ae()}if(!O()||!K){ie(we);return}const je=N();Y=Vr(we,G),A=gX(Xu(Y,je,!1,[1,1]),n,d,K),Q||(F(),Q=!0);const Te=JT(we,{handle:A,connectionMode:t,fromNodeId:r,fromHandleId:i,fromType:a?"target":"source",isValidConnection:w,doc:L,lib:m,flowId:p,nodeLookup:d});Z=Te.handleDomNode,V=Te.connection,U=yX(!!A,Te.isValid);const Ge=d.get(r),Ze=Ge?ua(Ge,K,st.Left,!0):se.from,Ye={...se,from:Ze,isValid:U,to:Te.toHandle&&U?Cm({x:Te.toHandle.x,y:Te.toHandle.y},je):Y,toHandle:Te.toHandle,toPosition:U&&Te.toHandle?Te.toHandle.position:qC[K.position],toNode:Te.toHandle?d.get(Te.toHandle.nodeId):null,pointer:Y};j(Ye),se=Ye}function ie(we){if(!("touches"in we&&we.touches.length>0)){if($){(A||Z)&&V&&U&&b?.(V);const{inProgress:je,...Te}=se,Ge={...Te,toPosition:se.toHandle?se.toPosition:null};k?.(we,Ge),o&&S?.(we,Ge)}x(),cancelAnimationFrame(M),Q=!1,U=!1,V=null,Z=null,L.removeEventListener("mousemove",ue),L.removeEventListener("mouseup",ie),L.removeEventListener("touchmove",ue),L.removeEventListener("touchend",ie)}}L.addEventListener("mousemove",ue),L.addEventListener("mouseup",ie),L.addEventListener("touchmove",ue),L.addEventListener("touchend",ie)}function JT(e,{handle:t,connectionMode:n,fromNodeId:i,fromHandleId:r,fromType:o,doc:a,lib:c,flowId:d,isValidConnection:m=QT,nodeLookup:h}){const p=o==="target",g=t?a.querySelector(`.${c}-flow__handle[data-id="${d}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x,y:v}=Vr(e),b=a.elementFromPoint(x,v),k=b?.classList.contains(`${c}-flow__handle`)?b:g,w={handleDomNode:k,isValid:!1,connection:null,toHandle:null};if(k){const S=ZT(void 0,k),j=k.getAttribute("data-nodeid"),N=k.getAttribute("data-handleid"),O=k.classList.contains("connectable"),R=k.classList.contains("connectableend");if(!j||!S)return w;const D={source:p?j:i,sourceHandle:p?N:r,target:p?i:j,targetHandle:p?r:N};w.connection=D;const L=O&&R&&(n===Ol.Strict?p&&S==="source"||!p&&S==="target":j!==i||N!==r);w.isValid=L&&m(D),w.toHandle=KT(j,S,N,h,n,!0)}return w}const Ev={onPointerDown:xX,isValid:JT};function vX({domNode:e,panZoom:t,getTransform:n,getViewScale:i}){const r=ur(e);function o({translateExtent:c,width:d,height:m,zoomStep:h=1,pannable:p=!0,zoomable:g=!0,inversePan:x=!1}){const v=j=>{if(j.sourceEvent.type!=="wheel"||!t)return;const N=n(),O=j.sourceEvent.ctrlKey&&Lu()?10:1,R=-j.sourceEvent.deltaY*(j.sourceEvent.deltaMode===1?.05:j.sourceEvent.deltaMode?1:.002)*h,D=N[2]*Math.pow(2,R*O);t.scaleTo(D)};let b=[0,0];const k=j=>{(j.sourceEvent.type==="mousedown"||j.sourceEvent.type==="touchstart")&&(b=[j.sourceEvent.clientX??j.sourceEvent.touches[0].clientX,j.sourceEvent.clientY??j.sourceEvent.touches[0].clientY])},w=j=>{const N=n();if(j.sourceEvent.type!=="mousemove"&&j.sourceEvent.type!=="touchmove"||!t)return;const O=[j.sourceEvent.clientX??j.sourceEvent.touches[0].clientX,j.sourceEvent.clientY??j.sourceEvent.touches[0].clientY],R=[O[0]-b[0],O[1]-b[1]];b=O;const D=i()*Math.max(N[2],Math.log(N[2]))*(x?-1:1),I={x:N[0]-R[0]*D,y:N[1]-R[1]*D},L=[[0,0],[d,m]];t.setViewportConstrained({x:I.x,y:I.y,zoom:N[2]},L,c)},S=ET().on("start",k).on("zoom",p?w:null).on("zoom.wheel",g?v:null);r.call(S,{})}function a(){r.on("zoom",null)}return{update:o,destroy:a,pointer:Pr}}const sp=e=>({x:e.x,y:e.y,zoom:e.k}),Iy=({x:e,y:t,zoom:n})=>np.translate(e,t).scale(n),ul=(e,t)=>e.target.closest(`.${t}`),eR=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),bX=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Ty=(e,t=0,n=bX,i=()=>{})=>{const r=typeof t=="number"&&t>0;return r||i(),r?e.transition().duration(t).ease(n).on("end",i):e},tR=e=>{const t=e.ctrlKey&&Lu()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function _X({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:i,panOnScrollMode:r,panOnScrollSpeed:o,zoomOnPinch:a,onPanZoomStart:c,onPanZoom:d,onPanZoomEnd:m}){return h=>{if(ul(h,t))return h.ctrlKey&&h.preventDefault(),!1;h.preventDefault(),h.stopImmediatePropagation();const p=n.property("__zoom").k||1;if(h.ctrlKey&&a){const k=Pr(h),w=tR(h),S=p*Math.pow(2,w);i.scaleTo(n,S,k,h);return}const g=h.deltaMode===1?20:1;let x=r===ra.Vertical?0:h.deltaX*g,v=r===ra.Horizontal?0:h.deltaY*g;!Lu()&&h.shiftKey&&r!==ra.Vertical&&(x=h.deltaY*g,v=0),i.translateBy(n,-(x/p)*o,-(v/p)*o,{internal:!0});const b=sp(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(d?.(h,b),e.panScrollTimeout=setTimeout(()=>{m?.(h,b),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,c?.(h,b))}}function kX({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(i,r){const o=i.type==="wheel",a=!t&&o&&!i.ctrlKey,c=ul(i,e);if(i.ctrlKey&&o&&c&&i.preventDefault(),a||c)return null;i.preventDefault(),n.call(this,i,r)}}function SX({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return i=>{if(i.sourceEvent?.internal)return;const r=sp(i.transform);e.mouseButton=i.sourceEvent?.button||0,e.isZoomingOrPanning=!0,e.prevViewport=r,i.sourceEvent?.type==="mousedown"&&t(!0),n&&n?.(i.sourceEvent,r)}}function wX({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:i,onPanZoom:r}){return o=>{e.usedRightMouseButton=!!(n&&eR(t,e.mouseButton??0)),o.sourceEvent?.sync||i([o.transform.x,o.transform.y,o.transform.k]),r&&!o.sourceEvent?.internal&&r?.(o.sourceEvent,sp(o.transform))}}function CX({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:i,onPanZoomEnd:r,onPaneContextMenu:o}){return a=>{if(!a.sourceEvent?.internal&&(e.isZoomingOrPanning=!1,o&&eR(t,e.mouseButton??0)&&!e.usedRightMouseButton&&a.sourceEvent&&o(a.sourceEvent),e.usedRightMouseButton=!1,i(!1),r)){const c=sp(a.transform);e.prevViewport=c,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{r?.(a.sourceEvent,c)},n?150:0)}}}function jX({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:n,panOnDrag:i,panOnScroll:r,zoomOnDoubleClick:o,userSelectionActive:a,noWheelClassName:c,noPanClassName:d,lib:m,connectionInProgress:h}){return p=>{const g=e||t,x=n&&p.ctrlKey,v=p.type==="wheel";if(p.button===1&&p.type==="mousedown"&&(ul(p,`${m}-flow__node`)||ul(p,`${m}-flow__edge`)))return!0;if(!i&&!g&&!r&&!o&&!n||a||h&&!v||ul(p,c)&&v||ul(p,d)&&(!v||r&&v&&!e)||!n&&p.ctrlKey&&v)return!1;if(!n&&p.type==="touchstart"&&p.touches?.length>1)return p.preventDefault(),!1;if(!g&&!r&&!x&&v||!i&&(p.type==="mousedown"||p.type==="touchstart")||Array.isArray(i)&&!i.includes(p.button)&&p.type==="mousedown")return!1;const b=Array.isArray(i)&&i.includes(p.button)||!p.button||p.button<=1;return(!p.ctrlKey||v)&&b}}function EX({domNode:e,minZoom:t,maxZoom:n,translateExtent:i,viewport:r,onPanZoom:o,onPanZoomStart:a,onPanZoomEnd:c,onDraggingChange:d}){const m={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},h=e.getBoundingClientRect(),p=ET().scaleExtent([t,n]).translateExtent(i),g=ur(e).call(p);S({x:r.x,y:r.y,zoom:Ll(r.zoom,t,n)},[[0,0],[h.width,h.height]],i);const x=g.on("wheel.zoom"),v=g.on("dblclick.zoom");p.wheelDelta(tR);function b(A,B){return g?new Promise(W=>{p?.interpolate(B?.interpolate==="linear"?pu:Pf).transform(Ty(g,B?.duration,B?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function k({noWheelClassName:A,noPanClassName:B,onPaneContextMenu:W,userSelectionActive:P,panOnScroll:G,panOnDrag:$,panOnScrollMode:q,panOnScrollSpeed:Y,preventScrolling:Q,zoomOnPinch:V,zoomOnScroll:U,zoomOnDoubleClick:Z,zoomActivationKeyPressed:F,lib:K,onTransformChange:ee,connectionInProgress:te,paneClickDistance:se,selectionOnDrag:ae}){P&&!m.isZoomingOrPanning&&w();const ue=G&&!F&&!P;p.clickDistance(ae?1/0:!Fr(se)||se<0?0:se);const ie=ue?_X({zoomPanValues:m,noWheelClassName:A,d3Selection:g,d3Zoom:p,panOnScrollMode:q,panOnScrollSpeed:Y,zoomOnPinch:V,onPanZoomStart:a,onPanZoom:o,onPanZoomEnd:c}):kX({noWheelClassName:A,preventScrolling:Q,d3ZoomHandler:x});if(g.on("wheel.zoom",ie,{passive:!1}),!P){const je=SX({zoomPanValues:m,onDraggingChange:d,onPanZoomStart:a});p.on("start",je);const Te=wX({zoomPanValues:m,panOnDrag:$,onPaneContextMenu:!!W,onPanZoom:o,onTransformChange:ee});p.on("zoom",Te);const Ge=CX({zoomPanValues:m,panOnDrag:$,panOnScroll:G,onPaneContextMenu:W,onPanZoomEnd:c,onDraggingChange:d});p.on("end",Ge)}const we=jX({zoomActivationKeyPressed:F,panOnDrag:$,zoomOnScroll:U,panOnScroll:G,zoomOnDoubleClick:Z,zoomOnPinch:V,userSelectionActive:P,noPanClassName:B,noWheelClassName:A,lib:K,connectionInProgress:te});p.filter(we),Z?g.on("dblclick.zoom",v):g.on("dblclick.zoom",null)}function w(){p.on("zoom",null)}async function S(A,B,W){const P=Iy(A),G=p?.constrain()(P,B,W);return G&&await b(G),new Promise($=>$(G))}async function j(A,B){const W=Iy(A);return await b(W,B),new Promise(P=>P(W))}function N(A){if(g){const B=Iy(A),W=g.property("__zoom");(W.k!==A.zoom||W.x!==A.x||W.y!==A.y)&&p?.transform(g,B,null,{sync:!0})}}function O(){const A=g?jT(g.node()):{x:0,y:0,k:1};return{x:A.x,y:A.y,zoom:A.k}}function R(A,B){return g?new Promise(W=>{p?.interpolate(B?.interpolate==="linear"?pu:Pf).scaleTo(Ty(g,B?.duration,B?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function D(A,B){return g?new Promise(W=>{p?.interpolate(B?.interpolate==="linear"?pu:Pf).scaleBy(Ty(g,B?.duration,B?.ease,()=>W(!0)),A)}):Promise.resolve(!1)}function I(A){p?.scaleExtent(A)}function L(A){p?.translateExtent(A)}function M(A){const B=!Fr(A)||A<0?0:A;p?.clickDistance(B)}return{update:k,destroy:w,setViewport:j,setViewportConstrained:S,getViewport:O,scaleTo:R,scaleBy:D,setScaleExtent:I,setTranslateExtent:L,syncViewport:N,setClickDistance:M}}var Bl;(function(e){e.Line="line",e.Handle="handle"})(Bl||(Bl={}));function NX({width:e,prevWidth:t,height:n,prevHeight:i,affectsX:r,affectsY:o}){const a=e-t,c=n-i,d=[a>0?1:a<0?-1:0,c>0?1:c<0?-1:0];return a&&r&&(d[0]=d[0]*-1),c&&o&&(d[1]=d[1]*-1),d}function s2(e){const t=e.includes("right")||e.includes("left"),n=e.includes("bottom")||e.includes("top"),i=e.includes("left"),r=e.includes("top");return{isHorizontal:t,isVertical:n,affectsX:i,affectsY:r}}function ho(e,t){return Math.max(0,t-e)}function go(e,t){return Math.max(0,e-t)}function Cf(e,t,n){return Math.max(0,t-e,e-n)}function o2(e,t){return e?!t:t}function IX(e,t,n,i,r,o,a,c){let{affectsX:d,affectsY:m}=t;const{isHorizontal:h,isVertical:p}=t,g=h&&p,{xSnapped:x,ySnapped:v}=n,{minWidth:b,maxWidth:k,minHeight:w,maxHeight:S}=i,{x:j,y:N,width:O,height:R,aspectRatio:D}=e;let I=Math.floor(h?x-e.pointerX:0),L=Math.floor(p?v-e.pointerY:0);const M=O+(d?-I:I),A=R+(m?-L:L),B=-o[0]*O,W=-o[1]*R;let P=Cf(M,b,k),G=Cf(A,w,S);if(a){let Y=0,Q=0;d&&I<0?Y=ho(j+I+B,a[0][0]):!d&&I>0&&(Y=go(j+M+B,a[1][0])),m&&L<0?Q=ho(N+L+W,a[0][1]):!m&&L>0&&(Q=go(N+A+W,a[1][1])),P=Math.max(P,Y),G=Math.max(G,Q)}if(c){let Y=0,Q=0;d&&I>0?Y=go(j+I,c[0][0]):!d&&I<0&&(Y=ho(j+M,c[1][0])),m&&L>0?Q=go(N+L,c[0][1]):!m&&L<0&&(Q=ho(N+A,c[1][1])),P=Math.max(P,Y),G=Math.max(G,Q)}if(r){if(h){const Y=Cf(M/D,w,S)*D;if(P=Math.max(P,Y),a){let Q=0;!d&&!m||d&&!m&&g?Q=go(N+W+M/D,a[1][1])*D:Q=ho(N+W+(d?I:-I)/D,a[0][1])*D,P=Math.max(P,Q)}if(c){let Q=0;!d&&!m||d&&!m&&g?Q=ho(N+M/D,c[1][1])*D:Q=go(N+(d?I:-I)/D,c[0][1])*D,P=Math.max(P,Q)}}if(p){const Y=Cf(A*D,b,k)/D;if(G=Math.max(G,Y),a){let Q=0;!d&&!m||m&&!d&&g?Q=go(j+A*D+B,a[1][0])/D:Q=ho(j+(m?L:-L)*D+B,a[0][0])/D,G=Math.max(G,Q)}if(c){let Q=0;!d&&!m||m&&!d&&g?Q=ho(j+A*D,c[1][0])/D:Q=go(j+(m?L:-L)*D,c[0][0])/D,G=Math.max(G,Q)}}}L=L+(L<0?G:-G),I=I+(I<0?P:-P),r&&(g?M>A*D?L=(o2(d,m)?-I:I)/D:I=(o2(d,m)?-L:L)*D:h?(L=I/D,m=d):(I=L*D,d=m));const $=d?j+I:j,q=m?N+L:N;return{width:O+(d?-I:I),height:R+(m?-L:L),x:o[0]*I*(d?-1:1)+$,y:o[1]*L*(m?-1:1)+q}}const nR={width:0,height:0,x:0,y:0},TX={...nR,pointerX:0,pointerY:0,aspectRatio:1};function RX(e){return[[0,0],[e.measured.width,e.measured.height]]}function AX(e,t,n){const i=t.position.x+e.position.x,r=t.position.y+e.position.y,o=e.measured.width??0,a=e.measured.height??0,c=n[0]*o,d=n[1]*a;return[[i-c,r-d],[i+o-c,r+a-d]]}function MX({domNode:e,nodeId:t,getStoreItems:n,onChange:i,onEnd:r}){const o=ur(e);let a={controlDirection:s2("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function c({controlPosition:m,boundaries:h,keepAspectRatio:p,resizeDirection:g,onResizeStart:x,onResize:v,onResizeEnd:b,shouldResize:k}){let w={...nR},S={...TX};a={boundaries:h,resizeDirection:g,keepAspectRatio:p,controlDirection:s2(m)};let j,N=null,O=[],R,D,I,L=!1;const M=fT().on("start",A=>{const{nodeLookup:B,transform:W,snapGrid:P,snapToGrid:G,nodeOrigin:$,paneDomNode:q}=n();if(j=B.get(t),!j)return;N=q?.getBoundingClientRect()??null;const{xSnapped:Y,ySnapped:Q}=hu(A.sourceEvent,{transform:W,snapGrid:P,snapToGrid:G,containerBounds:N});w={width:j.measured.width??0,height:j.measured.height??0,x:j.position.x??0,y:j.position.y??0},S={...w,pointerX:Y,pointerY:Q,aspectRatio:w.width/w.height},R=void 0,j.parentId&&(j.extent==="parent"||j.expandParent)&&(R=B.get(j.parentId),D=R&&j.extent==="parent"?RX(R):void 0),O=[],I=void 0;for(const[V,U]of B)if(U.parentId===t&&(O.push({id:V,position:{...U.position},extent:U.extent}),U.extent==="parent"||U.expandParent)){const Z=AX(U,j,U.origin??$);I?I=[[Math.min(Z[0][0],I[0][0]),Math.min(Z[0][1],I[0][1])],[Math.max(Z[1][0],I[1][0]),Math.max(Z[1][1],I[1][1])]]:I=Z}x?.(A,{...w})}).on("drag",A=>{const{transform:B,snapGrid:W,snapToGrid:P,nodeOrigin:G}=n(),$=hu(A.sourceEvent,{transform:B,snapGrid:W,snapToGrid:P,containerBounds:N}),q=[];if(!j)return;const{x:Y,y:Q,width:V,height:U}=w,Z={},F=j.origin??G,{width:K,height:ee,x:te,y:se}=IX(S,a.controlDirection,$,a.boundaries,a.keepAspectRatio,F,D,I),ae=K!==V,ue=ee!==U,ie=te!==Y&&ae,we=se!==Q&&ue;if(!ie&&!we&&!ae&&!ue)return;if((ie||we||F[0]===1||F[1]===1)&&(Z.x=ie?te:w.x,Z.y=we?se:w.y,w.x=Z.x,w.y=Z.y,O.length>0)){const Ze=te-Y,Ye=se-Q;for(const mt of O)mt.position={x:mt.position.x-Ze+F[0]*(K-V),y:mt.position.y-Ye+F[1]*(ee-U)},q.push(mt)}if((ae||ue)&&(Z.width=ae&&(!a.resizeDirection||a.resizeDirection==="horizontal")?K:w.width,Z.height=ue&&(!a.resizeDirection||a.resizeDirection==="vertical")?ee:w.height,w.width=Z.width,w.height=Z.height),R&&j.expandParent){const Ze=F[0]*(Z.width??0);Z.x&&Z.x<Ze&&(w.x=Ze,S.x=S.x-(Z.x-Ze));const Ye=F[1]*(Z.height??0);Z.y&&Z.y<Ye&&(w.y=Ye,S.y=S.y-(Z.y-Ye))}const je=NX({width:w.width,prevWidth:V,height:w.height,prevHeight:U,affectsX:a.controlDirection.affectsX,affectsY:a.controlDirection.affectsY}),Te={...w,direction:je};k?.(A,Te)!==!1&&(L=!0,v?.(A,Te),i(Z,q))}).on("end",A=>{L&&(b?.(A,{...w}),r?.({...w}),L=!1)});o.call(M)}function d(){o.on(".drag",null)}return{update:c,destroy:d}}var Ry={exports:{}},Ay={},My={exports:{}},Dy={};var a2;function DX(){if(a2)return Dy;a2=1;var e=Hl();function t(p,g){return p===g&&(p!==0||1/p===1/g)||p!==p&&g!==g}var n=typeof Object.is=="function"?Object.is:t,i=e.useState,r=e.useEffect,o=e.useLayoutEffect,a=e.useDebugValue;function c(p,g){var x=g(),v=i({inst:{value:x,getSnapshot:g}}),b=v[0].inst,k=v[1];return o(function(){b.value=x,b.getSnapshot=g,d(b)&&k({inst:b})},[p,x,g]),r(function(){return d(b)&&k({inst:b}),p(function(){d(b)&&k({inst:b})})},[p]),a(x),x}function d(p){var g=p.getSnapshot;p=p.value;try{var x=g();return!n(p,x)}catch{return!0}}function m(p,g){return g()}var h=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?m:c;return Dy.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:h,Dy}var l2;function OX(){return l2||(l2=1,My.exports=DX()),My.exports}var c2;function LX(){if(c2)return Ay;c2=1;var e=Hl(),t=OX();function n(m,h){return m===h&&(m!==0||1/m===1/h)||m!==m&&h!==h}var i=typeof Object.is=="function"?Object.is:n,r=t.useSyncExternalStore,o=e.useRef,a=e.useEffect,c=e.useMemo,d=e.useDebugValue;return Ay.useSyncExternalStoreWithSelector=function(m,h,p,g,x){var v=o(null);if(v.current===null){var b={hasValue:!1,value:null};v.current=b}else b=v.current;v=c(function(){function w(R){if(!S){if(S=!0,j=R,R=g(R),x!==void 0&&b.hasValue){var D=b.value;if(x(D,R))return N=D}return N=R}if(D=N,i(j,R))return D;var I=g(R);return x!==void 0&&x(D,I)?(j=R,D):(j=R,N=I)}var S=!1,j,N,O=p===void 0?null:p;return[function(){return w(h())},O===null?void 0:function(){return w(O())}]},[h,p,g,x]);var k=r(m,v[0],v[1]);return a(function(){b.hasValue=!0,b.value=k},[k]),d(k),k},Ay}var u2;function zX(){return u2||(u2=1,Ry.exports=LX()),Ry.exports}var PX=zX();const BX=da(PX),$X={},d2=e=>{let t;const n=new Set,i=(h,p)=>{const g=typeof h=="function"?h(t):h;if(!Object.is(g,t)){const x=t;t=p??(typeof g!="object"||g===null)?g:Object.assign({},t,g),n.forEach(v=>v(t,x))}},r=()=>t,d={setState:i,getState:r,getInitialState:()=>m,subscribe:h=>(n.add(h),()=>n.delete(h)),destroy:()=>{($X?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},m=t=e(i,r,d);return d},HX=e=>e?d2(e):d2,{useDebugValue:FX}=Nt,{useSyncExternalStoreWithSelector:VX}=BX,UX=e=>e;function iR(e,t=UX,n){const i=VX(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return FX(i),i}const f2=(e,t)=>{const n=HX(e),i=(r,o=t)=>iR(n,r,o);return Object.assign(i,n),i},GX=(e,t)=>e?f2(e,t):f2;function Bn(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[i,r]of e)if(!Object.is(r,t.get(i)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const i of e)if(!t.has(i))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const i of n)if(!Object.prototype.hasOwnProperty.call(t,i)||!Object.is(e[i],t[i]))return!1;return!0}const op=C.createContext(null),qX=op.Provider,rR=ls.error001();function sn(e,t){const n=C.useContext(op);if(n===null)throw new Error(rR);return iR(n,e,t)}function $n(){const e=C.useContext(op);if(e===null)throw new Error(rR);return C.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const m2={display:"none"},WX={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},sR="react-flow__node-desc",oR="react-flow__edge-desc",YX="react-flow__aria-live",XX=e=>e.ariaLiveMessage,KX=e=>e.ariaLabelConfig;function ZX({rfId:e}){const t=sn(XX);return u.jsx("div",{id:`${YX}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:WX,children:t})}function QX({rfId:e,disableKeyboardA11y:t}){const n=sn(KX);return u.jsxs(u.Fragment,{children:[u.jsx("div",{id:`${sR}-${e}`,style:m2,children:t?n["node.a11yDescription.default"]:n["node.a11yDescription.keyboardDisabled"]}),u.jsx("div",{id:`${oR}-${e}`,style:m2,children:n["edge.a11yDescription.default"]}),!t&&u.jsx(ZX,{rfId:e})]})}const ap=C.forwardRef(({position:e="top-left",children:t,className:n,style:i,...r},o)=>{const a=`${e}`.split("-");return u.jsx("div",{className:di(["react-flow__panel",n,...a]),style:i,ref:o,...r,children:t})});ap.displayName="Panel";function JX({proOptions:e,position:t="bottom-right"}){return e?.hideAttribution?null:u.jsx(ap,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:u.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const eK=e=>{const t=[],n=[];for(const[,i]of e.nodeLookup)i.selected&&t.push(i.internals.userNode);for(const[,i]of e.edgeLookup)i.selected&&n.push(i);return{selectedNodes:t,selectedEdges:n}},jf=e=>e.id;function tK(e,t){return Bn(e.selectedNodes.map(jf),t.selectedNodes.map(jf))&&Bn(e.selectedEdges.map(jf),t.selectedEdges.map(jf))}function nK({onSelectionChange:e}){const t=$n(),{selectedNodes:n,selectedEdges:i}=sn(eK,tK);return C.useEffect(()=>{const r={nodes:n,edges:i};e?.(r),t.getState().onSelectionChangeHandlers.forEach(o=>o(r))},[n,i,e]),null}const iK=e=>!!e.onSelectionChangeHandlers;function rK({onSelectionChange:e}){const t=sn(iK);return e||t?u.jsx(nK,{onSelectionChange:e}):null}const Nv=typeof window<"u"?C.useLayoutEffect:C.useEffect,aR=[0,0],sK={x:0,y:0,zoom:1},oK=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],p2=[...oK,"rfId"],aK=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),h2={translateExtent:Mu,nodeOrigin:aR,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function lK(e){const{setNodes:t,setEdges:n,setMinZoom:i,setMaxZoom:r,setTranslateExtent:o,setNodeExtent:a,reset:c,setDefaultNodesAndEdges:d}=sn(aK,Bn),m=$n();Nv(()=>(d(e.defaultNodes,e.defaultEdges),()=>{h.current=h2,c()}),[]);const h=C.useRef(h2);return Nv(()=>{for(const p of p2){const g=e[p],x=h.current[p];g!==x&&(typeof e[p]>"u"||(p==="nodes"?t(g):p==="edges"?n(g):p==="minZoom"?i(g):p==="maxZoom"?r(g):p==="translateExtent"?o(g):p==="nodeExtent"?a(g):p==="ariaLabelConfig"?m.setState({ariaLabelConfig:GY(g)}):p==="fitView"?m.setState({fitViewQueued:g}):p==="fitViewOptions"?m.setState({fitViewOptions:g}):m.setState({[p]:g})))}h.current=e},p2.map(p=>e[p])),null}function g2(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function cK(e){const[t,n]=C.useState(e==="system"?null:e);return C.useEffect(()=>{if(e!=="system"){n(e);return}const i=g2(),r=()=>n(i?.matches?"dark":"light");return r(),i?.addEventListener("change",r),()=>{i?.removeEventListener("change",r)}},[e]),t!==null?t:g2()?.matches?"dark":"light"}const y2=typeof document<"u"?document:null;function zu(e=null,t={target:y2,actInsideInputWithModifier:!0}){const[n,i]=C.useState(!1),r=C.useRef(!1),o=C.useRef(new Set([])),[a,c]=C.useMemo(()=>{if(e!==null){const m=(Array.isArray(e)?e:[e]).filter(p=>typeof p=="string").map(p=>p.replace("+",` +`).replace(` + +`,` ++`).split(` +`)),h=m.reduce((p,g)=>p.concat(...g),[]);return[m,h]}return[[],[]]},[e]);return C.useEffect(()=>{const d=t?.target??y2,m=t?.actInsideInputWithModifier??!0;if(e!==null){const h=x=>{if(r.current=x.ctrlKey||x.metaKey||x.shiftKey||x.altKey,(!r.current||r.current&&!m)&&$T(x))return!1;const b=v2(x.code,c);if(o.current.add(x[b]),x2(a,o.current,!1)){const k=x.composedPath?.()?.[0]||x.target,w=k?.nodeName==="BUTTON"||k?.nodeName==="A";t.preventDefault!==!1&&(r.current||!w)&&x.preventDefault(),i(!0)}},p=x=>{const v=v2(x.code,c);x2(a,o.current,!0)?(i(!1),o.current.clear()):o.current.delete(x[v]),x.key==="Meta"&&o.current.clear(),r.current=!1},g=()=>{o.current.clear(),i(!1)};return d?.addEventListener("keydown",h),d?.addEventListener("keyup",p),window.addEventListener("blur",g),window.addEventListener("contextmenu",g),()=>{d?.removeEventListener("keydown",h),d?.removeEventListener("keyup",p),window.removeEventListener("blur",g),window.removeEventListener("contextmenu",g)}}},[e,i]),n}function x2(e,t,n){return e.filter(i=>n||i.length===t.size).some(i=>i.every(r=>t.has(r)))}function v2(e,t){return t.includes(e)?"code":"key"}const uK=()=>{const e=$n();return C.useMemo(()=>({zoomIn:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,t):Promise.resolve(!1)},zoomOut:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,t):Promise.resolve(!1)},zoomTo:(t,n)=>{const{panZoom:i}=e.getState();return i?i.scaleTo(t,n):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{const{transform:[i,r,o],panZoom:a}=e.getState();return a?(await a.setViewport({x:t.x??i,y:t.y??r,zoom:t.zoom??o},n),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[t,n,i]=e.getState().transform;return{x:t,y:n,zoom:i}},setCenter:async(t,n,i)=>e.getState().setCenter(t,n,i),fitBounds:async(t,n)=>{const{width:i,height:r,minZoom:o,maxZoom:a,panZoom:c}=e.getState(),d=P0(t,i,r,o,a,n?.padding??.1);return c?(await c.setViewport(d,{duration:n?.duration,ease:n?.ease,interpolate:n?.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(t,n={})=>{const{transform:i,snapGrid:r,snapToGrid:o,domNode:a}=e.getState();if(!a)return t;const{x:c,y:d}=a.getBoundingClientRect(),m={x:t.x-c,y:t.y-d},h=n.snapGrid??r,p=n.snapToGrid??o;return Xu(m,i,p,h)},flowToScreenPosition:t=>{const{transform:n,domNode:i}=e.getState();if(!i)return t;const{x:r,y:o}=i.getBoundingClientRect(),a=Cm(t,n);return{x:a.x+r,y:a.y+o}}}),[])};function lR(e,t){const n=[],i=new Map,r=[];for(const o of e)if(o.type==="add"){r.push(o);continue}else if(o.type==="remove"||o.type==="replace")i.set(o.id,[o]);else{const a=i.get(o.id);a?a.push(o):i.set(o.id,[o])}for(const o of t){const a=i.get(o.id);if(!a){n.push(o);continue}if(a[0].type==="remove")continue;if(a[0].type==="replace"){n.push({...a[0].item});continue}const c={...o};for(const d of a)dK(d,c);n.push(c)}return r.length&&r.forEach(o=>{o.index!==void 0?n.splice(o.index,0,{...o.item}):n.push({...o.item})}),n}function dK(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function cR(e,t){return lR(e,t)}function fK(e,t){return lR(e,t)}function ta(e,t){return{id:e,type:"select",selected:t}}function dl(e,t=new Set,n=!1){const i=[];for(const[r,o]of e){const a=t.has(r);!(o.selected===void 0&&!a)&&o.selected!==a&&(n&&(o.selected=a),i.push(ta(o.id,a)))}return i}function b2({items:e=[],lookup:t}){const n=[],i=new Map(e.map(r=>[r.id,r]));for(const[r,o]of e.entries()){const a=t.get(o.id),c=a?.internals?.userNode??a;c!==void 0&&c!==o&&n.push({id:o.id,item:o,type:"replace"}),c===void 0&&n.push({item:o,type:"add",index:r})}for(const[r]of t)i.get(r)===void 0&&n.push({id:r,type:"remove"});return n}function _2(e){return{id:e.id,type:"remove"}}const k2=e=>OY(e),mK=e=>AT(e);function uR(e){return C.forwardRef(e)}function S2(e){const[t,n]=C.useState(BigInt(0)),[i]=C.useState(()=>pK(()=>n(r=>r+BigInt(1))));return Nv(()=>{const r=i.get();r.length&&(e(r),i.reset())},[t]),i}function pK(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const dR=C.createContext(null);function hK({children:e}){const t=$n(),n=C.useCallback(c=>{const{nodes:d=[],setNodes:m,hasDefaultNodes:h,onNodesChange:p,nodeLookup:g,fitViewQueued:x,onNodesChangeMiddlewareMap:v}=t.getState();let b=d;for(const w of c)b=typeof w=="function"?w(b):w;let k=b2({items:b,lookup:g});for(const w of v.values())k=w(k);h&&m(b),k.length>0?p?.(k):x&&window.requestAnimationFrame(()=>{const{fitViewQueued:w,nodes:S,setNodes:j}=t.getState();w&&j(S)})},[]),i=S2(n),r=C.useCallback(c=>{const{edges:d=[],setEdges:m,hasDefaultEdges:h,onEdgesChange:p,edgeLookup:g}=t.getState();let x=d;for(const v of c)x=typeof v=="function"?v(x):v;h?m(x):p&&p(b2({items:x,lookup:g}))},[]),o=S2(r),a=C.useMemo(()=>({nodeQueue:i,edgeQueue:o}),[]);return u.jsx(dR.Provider,{value:a,children:e})}function gK(){const e=C.useContext(dR);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const yK=e=>!!e.panZoom;function G0(){const e=uK(),t=$n(),n=gK(),i=sn(yK),r=C.useMemo(()=>{const o=p=>t.getState().nodeLookup.get(p),a=p=>{n.nodeQueue.push(p)},c=p=>{n.edgeQueue.push(p)},d=p=>{const{nodeLookup:g,nodeOrigin:x}=t.getState(),v=k2(p)?p:g.get(p.id),b=v.parentId?PT(v.position,v.measured,v.parentId,g,x):v.position,k={...v,position:b,width:v.measured?.width??v.width,height:v.measured?.height??v.height};return zl(k)},m=(p,g,x={replace:!1})=>{a(v=>v.map(b=>{if(b.id===p){const k=typeof g=="function"?g(b):g;return x.replace&&k2(k)?k:{...b,...k}}return b}))},h=(p,g,x={replace:!1})=>{c(v=>v.map(b=>{if(b.id===p){const k=typeof g=="function"?g(b):g;return x.replace&&mK(k)?k:{...b,...k}}return b}))};return{getNodes:()=>t.getState().nodes.map(p=>({...p})),getNode:p=>o(p)?.internals.userNode,getInternalNode:o,getEdges:()=>{const{edges:p=[]}=t.getState();return p.map(g=>({...g}))},getEdge:p=>t.getState().edgeLookup.get(p),setNodes:a,setEdges:c,addNodes:p=>{const g=Array.isArray(p)?p:[p];n.nodeQueue.push(x=>[...x,...g])},addEdges:p=>{const g=Array.isArray(p)?p:[p];n.edgeQueue.push(x=>[...x,...g])},toObject:()=>{const{nodes:p=[],edges:g=[],transform:x}=t.getState(),[v,b,k]=x;return{nodes:p.map(w=>({...w})),edges:g.map(w=>({...w})),viewport:{x:v,y:b,zoom:k}}},deleteElements:async({nodes:p=[],edges:g=[]})=>{const{nodes:x,edges:v,onNodesDelete:b,onEdgesDelete:k,triggerNodeChanges:w,triggerEdgeChanges:S,onDelete:j,onBeforeDelete:N}=t.getState(),{nodes:O,edges:R}=await $Y({nodesToRemove:p,edgesToRemove:g,nodes:x,edges:v,onBeforeDelete:N}),D=R.length>0,I=O.length>0;if(D){const L=R.map(_2);k?.(R),S(L)}if(I){const L=O.map(_2);b?.(O),w(L)}return(I||D)&&j?.({nodes:O,edges:R}),{deletedNodes:O,deletedEdges:R}},getIntersectingNodes:(p,g=!0,x)=>{const v=YC(p),b=v?p:d(p),k=x!==void 0;return b?(x||t.getState().nodes).filter(w=>{const S=t.getState().nodeLookup.get(w.id);if(S&&!v&&(w.id===p.id||!S.internals.positionAbsolute))return!1;const j=zl(k?w:S),N=Ou(j,b);return g&&N>0||N>=j.width*j.height||N>=b.width*b.height}):[]},isNodeIntersecting:(p,g,x=!0)=>{const b=YC(p)?p:d(p);if(!b)return!1;const k=Ou(b,g);return x&&k>0||k>=g.width*g.height||k>=b.width*b.height},updateNode:m,updateNodeData:(p,g,x={replace:!1})=>{m(p,v=>{const b=typeof g=="function"?g(v):g;return x.replace?{...v,data:b}:{...v,data:{...v.data,...b}}},x)},updateEdge:h,updateEdgeData:(p,g,x={replace:!1})=>{h(p,v=>{const b=typeof g=="function"?g(v):g;return x.replace?{...v,data:b}:{...v,data:{...v.data,...b}}},x)},getNodesBounds:p=>{const{nodeLookup:g,nodeOrigin:x}=t.getState();return LY(p,{nodeLookup:g,nodeOrigin:x})},getHandleConnections:({type:p,id:g,nodeId:x})=>Array.from(t.getState().connectionLookup.get(`${x}-${p}${g?`-${g}`:""}`)?.values()??[]),getNodeConnections:({type:p,handleId:g,nodeId:x})=>Array.from(t.getState().connectionLookup.get(`${x}${p?g?`-${p}-${g}`:`-${p}`:""}`)?.values()??[]),fitView:async p=>{const g=t.getState().fitViewResolver??UY();return t.setState({fitViewQueued:!0,fitViewOptions:p,fitViewResolver:g}),n.nodeQueue.push(x=>[...x]),g.promise}}},[]);return C.useMemo(()=>({...r,...e,viewportInitialized:i}),[i])}const w2=e=>e.selected,xK=typeof window<"u"?window:void 0;function vK({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=$n(),{deleteElements:i}=G0(),r=zu(e,{actInsideInputWithModifier:!1}),o=zu(t,{target:xK});C.useEffect(()=>{if(r){const{edges:a,nodes:c}=n.getState();i({nodes:c.filter(w2),edges:a.filter(w2)}),n.setState({nodesSelectionActive:!1})}},[r]),C.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])}function bK(e){const t=$n();C.useEffect(()=>{const n=()=>{if(!e.current||!(e.current.checkVisibility?.()??!0))return!1;const i=B0(e.current);(i.height===0||i.width===0)&&t.getState().onError?.("004",ls.error004()),t.setState({width:i.width||500,height:i.height||500})};if(e.current){n(),window.addEventListener("resize",n);const i=new ResizeObserver(()=>n());return i.observe(e.current),()=>{window.removeEventListener("resize",n),i&&e.current&&i.unobserve(e.current)}}},[])}const lp={position:"absolute",width:"100%",height:"100%",top:0,left:0},_K=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function kK({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:i=!1,panOnScrollSpeed:r=.5,panOnScrollMode:o=ra.Free,zoomOnDoubleClick:a=!0,panOnDrag:c=!0,defaultViewport:d,translateExtent:m,minZoom:h,maxZoom:p,zoomActivationKeyCode:g,preventScrolling:x=!0,children:v,noWheelClassName:b,noPanClassName:k,onViewportChange:w,isControlledViewport:S,paneClickDistance:j,selectionOnDrag:N}){const O=$n(),R=C.useRef(null),{userSelectionActive:D,lib:I,connectionInProgress:L}=sn(_K,Bn),M=zu(g),A=C.useRef();bK(R);const B=C.useCallback(W=>{w?.({x:W[0],y:W[1],zoom:W[2]}),S||O.setState({transform:W})},[w,S]);return C.useEffect(()=>{if(R.current){A.current=EX({domNode:R.current,minZoom:h,maxZoom:p,translateExtent:m,viewport:d,onDraggingChange:$=>O.setState(q=>q.paneDragging===$?q:{paneDragging:$}),onPanZoomStart:($,q)=>{const{onViewportChangeStart:Y,onMoveStart:Q}=O.getState();Q?.($,q),Y?.(q)},onPanZoom:($,q)=>{const{onViewportChange:Y,onMove:Q}=O.getState();Q?.($,q),Y?.(q)},onPanZoomEnd:($,q)=>{const{onViewportChangeEnd:Y,onMoveEnd:Q}=O.getState();Q?.($,q),Y?.(q)}});const{x:W,y:P,zoom:G}=A.current.getViewport();return O.setState({panZoom:A.current,transform:[W,P,G],domNode:R.current.closest(".react-flow")}),()=>{A.current?.destroy()}}},[]),C.useEffect(()=>{A.current?.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:i,panOnScrollSpeed:r,panOnScrollMode:o,zoomOnDoubleClick:a,panOnDrag:c,zoomActivationKeyPressed:M,preventScrolling:x,noPanClassName:k,userSelectionActive:D,noWheelClassName:b,lib:I,onTransformChange:B,connectionInProgress:L,selectionOnDrag:N,paneClickDistance:j})},[e,t,n,i,r,o,a,c,M,x,k,D,b,I,B,L,N,j]),u.jsx("div",{className:"react-flow__renderer",ref:R,style:lp,children:v})}const SK=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function wK(){const{userSelectionActive:e,userSelectionRect:t}=sn(SK,Bn);return e&&t?u.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const Oy=(e,t)=>n=>{n.target===t.current&&e?.(n)},CK=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function jK({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Du.Full,panOnDrag:i,paneClickDistance:r,selectionOnDrag:o,onSelectionStart:a,onSelectionEnd:c,onPaneClick:d,onPaneContextMenu:m,onPaneScroll:h,onPaneMouseEnter:p,onPaneMouseMove:g,onPaneMouseLeave:x,children:v}){const b=$n(),{userSelectionActive:k,elementsSelectable:w,dragging:S,connectionInProgress:j}=sn(CK,Bn),N=w&&(e||k),O=C.useRef(null),R=C.useRef(),D=C.useRef(new Set),I=C.useRef(new Set),L=C.useRef(!1),M=Y=>{if(L.current||j){L.current=!1;return}d?.(Y),b.getState().resetSelectedElements(),b.setState({nodesSelectionActive:!1})},A=Y=>{if(Array.isArray(i)&&i?.includes(2)){Y.preventDefault();return}m?.(Y)},B=h?Y=>h(Y):void 0,W=Y=>{L.current&&(Y.stopPropagation(),L.current=!1)},P=Y=>{const{domNode:Q}=b.getState();if(R.current=Q?.getBoundingClientRect(),!R.current)return;const V=Y.target===O.current;if(!V&&!!Y.target.closest(".nokey")||!e||!(o&&V||t)||Y.button!==0||!Y.isPrimary)return;Y.target?.setPointerCapture?.(Y.pointerId),L.current=!1;const{x:F,y:K}=Vr(Y.nativeEvent,R.current);b.setState({userSelectionRect:{width:0,height:0,startX:F,startY:K,x:F,y:K}}),V||(Y.stopPropagation(),Y.preventDefault())},G=Y=>{const{userSelectionRect:Q,transform:V,nodeLookup:U,edgeLookup:Z,connectionLookup:F,triggerNodeChanges:K,triggerEdgeChanges:ee,defaultEdgeOptions:te,resetSelectedElements:se}=b.getState();if(!R.current||!Q)return;const{x:ae,y:ue}=Vr(Y.nativeEvent,R.current),{startX:ie,startY:we}=Q;if(!L.current){const Ye=t?0:r;if(Math.hypot(ae-ie,ue-we)<=Ye)return;se(),a?.(Y)}L.current=!0;const je={startX:ie,startY:we,x:ae<ie?ae:ie,y:ue<we?ue:we,width:Math.abs(ae-ie),height:Math.abs(ue-we)},Te=D.current,Ge=I.current;D.current=new Set(z0(U,je,V,n===Du.Partial,!0).map(Ye=>Ye.id)),I.current=new Set;const Ze=te?.selectable??!0;for(const Ye of D.current){const mt=F.get(Ye);if(mt)for(const{edgeId:Ft}of mt.values()){const Mt=Z.get(Ft);Mt&&(Mt.selectable??Ze)&&I.current.add(Ft)}}if(!XC(Te,D.current)){const Ye=dl(U,D.current,!0);K(Ye)}if(!XC(Ge,I.current)){const Ye=dl(Z,I.current);ee(Ye)}b.setState({userSelectionRect:je,userSelectionActive:!0,nodesSelectionActive:!1})},$=Y=>{Y.button===0&&(Y.target?.releasePointerCapture?.(Y.pointerId),!k&&Y.target===O.current&&b.getState().userSelectionRect&&M?.(Y),b.setState({userSelectionActive:!1,userSelectionRect:null}),L.current&&(c?.(Y),b.setState({nodesSelectionActive:D.current.size>0})))},q=i===!0||Array.isArray(i)&&i.includes(0);return u.jsxs("div",{className:di(["react-flow__pane",{draggable:q,dragging:S,selection:e}]),onClick:N?void 0:Oy(M,O),onContextMenu:Oy(A,O),onWheel:Oy(B,O),onPointerEnter:N?void 0:p,onPointerMove:N?G:g,onPointerUp:N?$:void 0,onPointerDownCapture:N?P:void 0,onClickCapture:N?W:void 0,onPointerLeave:x,ref:O,style:lp,children:[v,u.jsx(wK,{})]})}function Iv({id:e,store:t,unselect:n=!1,nodeRef:i}){const{addSelectedNodes:r,unselectNodesAndEdges:o,multiSelectionActive:a,nodeLookup:c,onError:d}=t.getState(),m=c.get(e);if(!m){d?.("012",ls.error012(e));return}t.setState({nodesSelectionActive:!1}),m.selected?(n||m.selected&&a)&&(o({nodes:[m],edges:[]}),requestAnimationFrame(()=>i?.current?.blur())):r([e])}function fR({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:i,nodeId:r,isSelectable:o,nodeClickDistance:a}){const c=$n(),[d,m]=C.useState(!1),h=C.useRef();return C.useEffect(()=>{h.current=mX({getStoreItems:()=>c.getState(),onNodeMouseDown:p=>{Iv({id:p,store:c,nodeRef:e})},onDragStart:()=>{m(!0)},onDragStop:()=>{m(!1)}})},[]),C.useEffect(()=>{if(!(t||!e.current||!h.current))return h.current.update({noDragClassName:n,handleSelector:i,domNode:e.current,isSelectable:o,nodeId:r,nodeClickDistance:a}),()=>{h.current?.destroy()}},[n,i,t,o,e,r,a]),d}const EK=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function mR(){const e=$n();return C.useCallback(n=>{const{nodeExtent:i,snapToGrid:r,snapGrid:o,nodesDraggable:a,onError:c,updateNodePositions:d,nodeLookup:m,nodeOrigin:h}=e.getState(),p=new Map,g=EK(a),x=r?o[0]:5,v=r?o[1]:5,b=n.direction.x*x*n.factor,k=n.direction.y*v*n.factor;for(const[,w]of m){if(!g(w))continue;let S={x:w.internals.positionAbsolute.x+b,y:w.internals.positionAbsolute.y+k};r&&(S=Yu(S,o));const{position:j,positionAbsolute:N}=MT({nodeId:w.id,nextPosition:S,nodeLookup:m,nodeExtent:i,nodeOrigin:h,onError:c});w.position=j,w.internals.positionAbsolute=N,p.set(w.id,w)}d(p)},[])}const q0=C.createContext(null),NK=q0.Provider;q0.Consumer;const pR=()=>C.useContext(q0),IK=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),TK=(e,t,n)=>i=>{const{connectionClickStartHandle:r,connectionMode:o,connection:a}=i,{fromHandle:c,toHandle:d,isValid:m}=a,h=d?.nodeId===e&&d?.id===t&&d?.type===n;return{connectingFrom:c?.nodeId===e&&c?.id===t&&c?.type===n,connectingTo:h,clickConnecting:r?.nodeId===e&&r?.id===t&&r?.type===n,isPossibleEndHandle:o===Ol.Strict?c?.type!==n:e!==c?.nodeId||t!==c?.id,connectionInProcess:!!c,clickConnectionInProcess:!!r,valid:h&&m}};function RK({type:e="source",position:t=st.Top,isValidConnection:n,isConnectable:i=!0,isConnectableStart:r=!0,isConnectableEnd:o=!0,id:a,onConnect:c,children:d,className:m,onMouseDown:h,onTouchStart:p,...g},x){const v=a||null,b=e==="target",k=$n(),w=pR(),{connectOnClick:S,noPanClassName:j,rfId:N}=sn(IK,Bn),{connectingFrom:O,connectingTo:R,clickConnecting:D,isPossibleEndHandle:I,connectionInProcess:L,clickConnectionInProcess:M,valid:A}=sn(TK(w,v,e),Bn);w||k.getState().onError?.("010",ls.error010());const B=G=>{const{defaultEdgeOptions:$,onConnect:q,hasDefaultEdges:Y}=k.getState(),Q={...$,...G};if(Y){const{edges:V,setEdges:U}=k.getState();U(ZY(Q,V))}q?.(Q),c?.(Q)},W=G=>{if(!w)return;const $=HT(G.nativeEvent);if(r&&($&&G.button===0||!$)){const q=k.getState();Ev.onPointerDown(G.nativeEvent,{handleDomNode:G.currentTarget,autoPanOnConnect:q.autoPanOnConnect,connectionMode:q.connectionMode,connectionRadius:q.connectionRadius,domNode:q.domNode,nodeLookup:q.nodeLookup,lib:q.lib,isTarget:b,handleId:v,nodeId:w,flowId:q.rfId,panBy:q.panBy,cancelConnection:q.cancelConnection,onConnectStart:q.onConnectStart,onConnectEnd:(...Y)=>k.getState().onConnectEnd?.(...Y),updateConnection:q.updateConnection,onConnect:B,isValidConnection:n||((...Y)=>k.getState().isValidConnection?.(...Y)??!0),getTransform:()=>k.getState().transform,getFromHandle:()=>k.getState().connection.fromHandle,autoPanSpeed:q.autoPanSpeed,dragThreshold:q.connectionDragThreshold})}$?h?.(G):p?.(G)},P=G=>{const{onClickConnectStart:$,onClickConnectEnd:q,connectionClickStartHandle:Y,connectionMode:Q,isValidConnection:V,lib:U,rfId:Z,nodeLookup:F,connection:K}=k.getState();if(!w||!Y&&!r)return;if(!Y){$?.(G.nativeEvent,{nodeId:w,handleId:v,handleType:e}),k.setState({connectionClickStartHandle:{nodeId:w,type:e,id:v}});return}const ee=BT(G.target),te=n||V,{connection:se,isValid:ae}=Ev.isValid(G.nativeEvent,{handle:{nodeId:w,id:v,type:e},connectionMode:Q,fromNodeId:Y.nodeId,fromHandleId:Y.id||null,fromType:Y.type,isValidConnection:te,flowId:Z,doc:ee,lib:U,nodeLookup:F});ae&&se&&B(se);const ue=structuredClone(K);delete ue.inProgress,ue.toPosition=ue.toHandle?ue.toHandle.position:null,q?.(G,ue),k.setState({connectionClickStartHandle:null})};return u.jsx("div",{"data-handleid":v,"data-nodeid":w,"data-handlepos":t,"data-id":`${N}-${w}-${v}-${e}`,className:di(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",j,m,{source:!b,target:b,connectable:i,connectablestart:r,connectableend:o,clickconnecting:D,connectingfrom:O,connectingto:R,valid:A,connectionindicator:i&&(!L||I)&&(L||M?o:r)}]),onMouseDown:W,onTouchStart:W,onClick:S?P:void 0,ref:x,...g,children:d})}const $l=C.memo(uR(RK));function AK({data:e,isConnectable:t,sourcePosition:n=st.Bottom}){return u.jsxs(u.Fragment,{children:[e?.label,u.jsx($l,{type:"source",position:n,isConnectable:t})]})}function MK({data:e,isConnectable:t,targetPosition:n=st.Top,sourcePosition:i=st.Bottom}){return u.jsxs(u.Fragment,{children:[u.jsx($l,{type:"target",position:n,isConnectable:t}),e?.label,u.jsx($l,{type:"source",position:i,isConnectable:t})]})}function DK(){return null}function OK({data:e,isConnectable:t,targetPosition:n=st.Top}){return u.jsxs(u.Fragment,{children:[u.jsx($l,{type:"target",position:n,isConnectable:t}),e?.label]})}const jm={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},C2={input:AK,default:MK,output:OK,group:DK};function LK(e){return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??e.style?.width,height:e.height??e.initialHeight??e.style?.height}:{width:e.width??e.style?.width,height:e.height??e.style?.height}}const zK=e=>{const{width:t,height:n,x:i,y:r}=Wu(e.nodeLookup,{filter:o=>!!o.selected});return{width:Fr(t)?t:null,height:Fr(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${i}px,${r}px)`}};function PK({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const i=$n(),{width:r,height:o,transformString:a,userSelectionActive:c}=sn(zK,Bn),d=mR(),m=C.useRef(null);C.useEffect(()=>{n||m.current?.focus({preventScroll:!0})},[n]);const h=!c&&r!==null&&o!==null;if(fR({nodeRef:m,disabled:!h}),!h)return null;const p=e?x=>{const v=i.getState().nodes.filter(b=>b.selected);e(x,v)}:void 0,g=x=>{Object.prototype.hasOwnProperty.call(jm,x.key)&&(x.preventDefault(),d({direction:jm[x.key],factor:x.shiftKey?4:1}))};return u.jsx("div",{className:di(["react-flow__nodesselection","react-flow__container",t]),style:{transform:a},children:u.jsx("div",{ref:m,className:"react-flow__nodesselection-rect",onContextMenu:p,tabIndex:n?void 0:-1,onKeyDown:n?void 0:g,style:{width:r,height:o}})})}const j2=typeof window<"u"?window:void 0,BK=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function hR({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:i,onPaneMouseLeave:r,onPaneContextMenu:o,onPaneScroll:a,paneClickDistance:c,deleteKeyCode:d,selectionKeyCode:m,selectionOnDrag:h,selectionMode:p,onSelectionStart:g,onSelectionEnd:x,multiSelectionKeyCode:v,panActivationKeyCode:b,zoomActivationKeyCode:k,elementsSelectable:w,zoomOnScroll:S,zoomOnPinch:j,panOnScroll:N,panOnScrollSpeed:O,panOnScrollMode:R,zoomOnDoubleClick:D,panOnDrag:I,defaultViewport:L,translateExtent:M,minZoom:A,maxZoom:B,preventScrolling:W,onSelectionContextMenu:P,noWheelClassName:G,noPanClassName:$,disableKeyboardA11y:q,onViewportChange:Y,isControlledViewport:Q}){const{nodesSelectionActive:V,userSelectionActive:U}=sn(BK,Bn),Z=zu(m,{target:j2}),F=zu(b,{target:j2}),K=F||I,ee=F||N,te=h&&K!==!0,se=Z||U||te;return vK({deleteKeyCode:d,multiSelectionKeyCode:v}),u.jsx(kK,{onPaneContextMenu:o,elementsSelectable:w,zoomOnScroll:S,zoomOnPinch:j,panOnScroll:ee,panOnScrollSpeed:O,panOnScrollMode:R,zoomOnDoubleClick:D,panOnDrag:!Z&&K,defaultViewport:L,translateExtent:M,minZoom:A,maxZoom:B,zoomActivationKeyCode:k,preventScrolling:W,noWheelClassName:G,noPanClassName:$,onViewportChange:Y,isControlledViewport:Q,paneClickDistance:c,selectionOnDrag:te,children:u.jsxs(jK,{onSelectionStart:g,onSelectionEnd:x,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:i,onPaneMouseLeave:r,onPaneContextMenu:o,onPaneScroll:a,panOnDrag:K,isSelecting:!!se,selectionMode:p,selectionKeyPressed:Z,paneClickDistance:c,selectionOnDrag:te,children:[e,V&&u.jsx(PK,{onSelectionContextMenu:P,noPanClassName:$,disableKeyboardA11y:q})]})})}hR.displayName="FlowRenderer";const $K=C.memo(hR),HK=e=>t=>e?z0(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(n=>n.id):Array.from(t.nodeLookup.keys());function FK(e){return sn(C.useCallback(HK(e),[e]),Bn)}const VK=e=>e.updateNodeInternals;function UK(){const e=sn(VK),[t]=C.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const i=new Map;n.forEach(r=>{const o=r.target.getAttribute("data-id");i.set(o,{id:o,nodeElement:r.target,force:!0})}),e(i)}));return C.useEffect(()=>()=>{t?.disconnect()},[t]),t}function GK({node:e,nodeType:t,hasDimensions:n,resizeObserver:i}){const r=$n(),o=C.useRef(null),a=C.useRef(null),c=C.useRef(e.sourcePosition),d=C.useRef(e.targetPosition),m=C.useRef(t),h=n&&!!e.internals.handleBounds;return C.useEffect(()=>{o.current&&!e.hidden&&(!h||a.current!==o.current)&&(a.current&&i?.unobserve(a.current),i?.observe(o.current),a.current=o.current)},[h,e.hidden]),C.useEffect(()=>()=>{a.current&&(i?.unobserve(a.current),a.current=null)},[]),C.useEffect(()=>{if(o.current){const p=m.current!==t,g=c.current!==e.sourcePosition,x=d.current!==e.targetPosition;(p||g||x)&&(m.current=t,c.current=e.sourcePosition,d.current=e.targetPosition,r.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function qK({id:e,onClick:t,onMouseEnter:n,onMouseMove:i,onMouseLeave:r,onContextMenu:o,onDoubleClick:a,nodesDraggable:c,elementsSelectable:d,nodesConnectable:m,nodesFocusable:h,resizeObserver:p,noDragClassName:g,noPanClassName:x,disableKeyboardA11y:v,rfId:b,nodeTypes:k,nodeClickDistance:w,onError:S}){const{node:j,internals:N,isParent:O}=sn(ae=>{const ue=ae.nodeLookup.get(e),ie=ae.parentLookup.has(e);return{node:ue,internals:ue.internals,isParent:ie}},Bn);let R=j.type||"default",D=k?.[R]||C2[R];D===void 0&&(S?.("003",ls.error003(R)),R="default",D=k?.default||C2.default);const I=!!(j.draggable||c&&typeof j.draggable>"u"),L=!!(j.selectable||d&&typeof j.selectable>"u"),M=!!(j.connectable||m&&typeof j.connectable>"u"),A=!!(j.focusable||h&&typeof j.focusable>"u"),B=$n(),W=zT(j),P=GK({node:j,nodeType:R,hasDimensions:W,resizeObserver:p}),G=fR({nodeRef:P,disabled:j.hidden||!I,noDragClassName:g,handleSelector:j.dragHandle,nodeId:e,isSelectable:L,nodeClickDistance:w}),$=mR();if(j.hidden)return null;const q=Ps(j),Y=LK(j),Q=L||I||t||n||i||r,V=n?ae=>n(ae,{...N.userNode}):void 0,U=i?ae=>i(ae,{...N.userNode}):void 0,Z=r?ae=>r(ae,{...N.userNode}):void 0,F=o?ae=>o(ae,{...N.userNode}):void 0,K=a?ae=>a(ae,{...N.userNode}):void 0,ee=ae=>{const{selectNodesOnDrag:ue,nodeDragThreshold:ie}=B.getState();L&&(!ue||!I||ie>0)&&Iv({id:e,store:B,nodeRef:P}),t&&t(ae,{...N.userNode})},te=ae=>{if(!($T(ae.nativeEvent)||v)){if(NT.includes(ae.key)&&L){const ue=ae.key==="Escape";Iv({id:e,store:B,unselect:ue,nodeRef:P})}else if(I&&j.selected&&Object.prototype.hasOwnProperty.call(jm,ae.key)){ae.preventDefault();const{ariaLabelConfig:ue}=B.getState();B.setState({ariaLiveMessage:ue["node.a11yDescription.ariaLiveMessage"]({direction:ae.key.replace("Arrow","").toLowerCase(),x:~~N.positionAbsolute.x,y:~~N.positionAbsolute.y})}),$({direction:jm[ae.key],factor:ae.shiftKey?4:1})}}},se=()=>{if(v||!P.current?.matches(":focus-visible"))return;const{transform:ae,width:ue,height:ie,autoPanOnNodeFocus:we,setCenter:je}=B.getState();if(!we)return;z0(new Map([[e,j]]),{x:0,y:0,width:ue,height:ie},ae,!0).length>0||je(j.position.x+q.width/2,j.position.y+q.height/2,{zoom:ae[2]})};return u.jsx("div",{className:di(["react-flow__node",`react-flow__node-${R}`,{[x]:I},j.className,{selected:j.selected,selectable:L,parent:O,draggable:I,dragging:G}]),ref:P,style:{zIndex:N.z,transform:`translate(${N.positionAbsolute.x}px,${N.positionAbsolute.y}px)`,pointerEvents:Q?"all":"none",visibility:W?"visible":"hidden",...j.style,...Y},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:V,onMouseMove:U,onMouseLeave:Z,onContextMenu:F,onClick:ee,onDoubleClick:K,onKeyDown:A?te:void 0,tabIndex:A?0:void 0,onFocus:A?se:void 0,role:j.ariaRole??(A?"group":void 0),"aria-roledescription":"node","aria-describedby":v?void 0:`${sR}-${b}`,"aria-label":j.ariaLabel,...j.domAttributes,children:u.jsx(NK,{value:e,children:u.jsx(D,{id:e,data:j.data,type:R,positionAbsoluteX:N.positionAbsolute.x,positionAbsoluteY:N.positionAbsolute.y,selected:j.selected??!1,selectable:L,draggable:I,deletable:j.deletable??!0,isConnectable:M,sourcePosition:j.sourcePosition,targetPosition:j.targetPosition,dragging:G,dragHandle:j.dragHandle,zIndex:N.z,parentId:j.parentId,...q})})})}var WK=C.memo(qK);const YK=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function gR(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:i,elementsSelectable:r,onError:o}=sn(YK,Bn),a=FK(e.onlyRenderVisibleElements),c=UK();return u.jsx("div",{className:"react-flow__nodes",style:lp,children:a.map(d=>u.jsx(WK,{id:d,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:c,nodesDraggable:t,nodesConnectable:n,nodesFocusable:i,elementsSelectable:r,nodeClickDistance:e.nodeClickDistance,onError:o},d))})}gR.displayName="NodeRenderer";const XK=C.memo(gR);function KK(e){return sn(C.useCallback(n=>{if(!e)return n.edges.map(r=>r.id);const i=[];if(n.width&&n.height)for(const r of n.edges){const o=n.nodeLookup.get(r.source),a=n.nodeLookup.get(r.target);o&&a&&YY({sourceNode:o,targetNode:a,width:n.width,height:n.height,transform:n.transform})&&i.push(r.id)}return i},[e]),Bn)}const ZK=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e}};return u.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},QK=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e,fill:e}};return u.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},E2={[Sm.Arrow]:ZK,[Sm.ArrowClosed]:QK};function JK(e){const t=$n();return C.useMemo(()=>Object.prototype.hasOwnProperty.call(E2,e)?E2[e]:(t.getState().onError?.("009",ls.error009(e)),null),[e])}const eZ=({id:e,type:t,color:n,width:i=12.5,height:r=12.5,markerUnits:o="strokeWidth",strokeWidth:a,orient:c="auto-start-reverse"})=>{const d=JK(t);return d?u.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${i}`,markerHeight:`${r}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:c,refX:"0",refY:"0",children:u.jsx(d,{color:n,strokeWidth:a})}):null},yR=({defaultColor:e,rfId:t})=>{const n=sn(o=>o.edges),i=sn(o=>o.defaultEdgeOptions),r=C.useMemo(()=>nX(n,{id:t,defaultColor:e,defaultMarkerStart:i?.markerStart,defaultMarkerEnd:i?.markerEnd}),[n,i,t,e]);return r.length?u.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:u.jsx("defs",{children:r.map(o=>u.jsx(eZ,{id:o.id,type:o.type,color:o.color,width:o.width,height:o.height,markerUnits:o.markerUnits,strokeWidth:o.strokeWidth,orient:o.orient},o.id))})}):null};yR.displayName="MarkerDefinitions";var tZ=C.memo(yR);function xR({x:e,y:t,label:n,labelStyle:i,labelShowBg:r=!0,labelBgStyle:o,labelBgPadding:a=[2,4],labelBgBorderRadius:c=2,children:d,className:m,...h}){const[p,g]=C.useState({x:1,y:0,width:0,height:0}),x=di(["react-flow__edge-textwrapper",m]),v=C.useRef(null);return C.useEffect(()=>{if(v.current){const b=v.current.getBBox();g({x:b.x,y:b.y,width:b.width,height:b.height})}},[n]),n?u.jsxs("g",{transform:`translate(${e-p.width/2} ${t-p.height/2})`,className:x,visibility:p.width?"visible":"hidden",...h,children:[r&&u.jsx("rect",{width:p.width+2*a[0],x:-a[0],y:-a[1],height:p.height+2*a[1],className:"react-flow__edge-textbg",style:o,rx:c,ry:c}),u.jsx("text",{className:"react-flow__edge-text",y:p.height/2,dy:"0.3em",ref:v,style:i,children:n}),d]}):null}xR.displayName="EdgeText";const nZ=C.memo(xR);function cp({path:e,labelX:t,labelY:n,label:i,labelStyle:r,labelShowBg:o,labelBgStyle:a,labelBgPadding:c,labelBgBorderRadius:d,interactionWidth:m=20,...h}){return u.jsxs(u.Fragment,{children:[u.jsx("path",{...h,d:e,fill:"none",className:di(["react-flow__edge-path",h.className])}),m?u.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:m,className:"react-flow__edge-interaction"}):null,i&&Fr(t)&&Fr(n)?u.jsx(nZ,{x:t,y:n,label:i,labelStyle:r,labelShowBg:o,labelBgStyle:a,labelBgPadding:c,labelBgBorderRadius:d}):null]})}function N2({pos:e,x1:t,y1:n,x2:i,y2:r}){return e===st.Left||e===st.Right?[.5*(t+i),n]:[t,.5*(n+r)]}function vR({sourceX:e,sourceY:t,sourcePosition:n=st.Bottom,targetX:i,targetY:r,targetPosition:o=st.Top}){const[a,c]=N2({pos:n,x1:e,y1:t,x2:i,y2:r}),[d,m]=N2({pos:o,x1:i,y1:r,x2:e,y2:t}),[h,p,g,x]=FT({sourceX:e,sourceY:t,targetX:i,targetY:r,sourceControlX:a,sourceControlY:c,targetControlX:d,targetControlY:m});return[`M${e},${t} C${a},${c} ${d},${m} ${i},${r}`,h,p,g,x]}function bR(e){return C.memo(({id:t,sourceX:n,sourceY:i,targetX:r,targetY:o,sourcePosition:a,targetPosition:c,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:b,markerStart:k,interactionWidth:w})=>{const[S,j,N]=vR({sourceX:n,sourceY:i,sourcePosition:a,targetX:r,targetY:o,targetPosition:c}),O=e.isInternal?void 0:t;return u.jsx(cp,{id:O,path:S,labelX:j,labelY:N,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:b,markerStart:k,interactionWidth:w})})}const iZ=bR({isInternal:!1}),_R=bR({isInternal:!0});iZ.displayName="SimpleBezierEdge";_R.displayName="SimpleBezierEdgeInternal";function kR(e){return C.memo(({id:t,sourceX:n,sourceY:i,targetX:r,targetY:o,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,sourcePosition:x=st.Bottom,targetPosition:v=st.Top,markerEnd:b,markerStart:k,pathOptions:w,interactionWidth:S})=>{const[j,N,O]=wv({sourceX:n,sourceY:i,sourcePosition:x,targetX:r,targetY:o,targetPosition:v,borderRadius:w?.borderRadius,offset:w?.offset,stepPosition:w?.stepPosition}),R=e.isInternal?void 0:t;return u.jsx(cp,{id:R,path:j,labelX:N,labelY:O,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:b,markerStart:k,interactionWidth:S})})}const SR=kR({isInternal:!1}),wR=kR({isInternal:!0});SR.displayName="SmoothStepEdge";wR.displayName="SmoothStepEdgeInternal";function CR(e){return C.memo(({id:t,...n})=>{const i=e.isInternal?void 0:t;return u.jsx(SR,{...n,id:i,pathOptions:C.useMemo(()=>({borderRadius:0,offset:n.pathOptions?.offset}),[n.pathOptions?.offset])})})}const rZ=CR({isInternal:!1}),jR=CR({isInternal:!0});rZ.displayName="StepEdge";jR.displayName="StepEdgeInternal";function ER(e){return C.memo(({id:t,sourceX:n,sourceY:i,targetX:r,targetY:o,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:x,markerStart:v,interactionWidth:b})=>{const[k,w,S]=GT({sourceX:n,sourceY:i,targetX:r,targetY:o}),j=e.isInternal?void 0:t;return u.jsx(cp,{id:j,path:k,labelX:w,labelY:S,label:a,labelStyle:c,labelShowBg:d,labelBgStyle:m,labelBgPadding:h,labelBgBorderRadius:p,style:g,markerEnd:x,markerStart:v,interactionWidth:b})})}const sZ=ER({isInternal:!1}),NR=ER({isInternal:!0});sZ.displayName="StraightEdge";NR.displayName="StraightEdgeInternal";function IR(e){return C.memo(({id:t,sourceX:n,sourceY:i,targetX:r,targetY:o,sourcePosition:a=st.Bottom,targetPosition:c=st.Top,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:b,markerStart:k,pathOptions:w,interactionWidth:S})=>{const[j,N,O]=VT({sourceX:n,sourceY:i,sourcePosition:a,targetX:r,targetY:o,targetPosition:c,curvature:w?.curvature}),R=e.isInternal?void 0:t;return u.jsx(cp,{id:R,path:j,labelX:N,labelY:O,label:d,labelStyle:m,labelShowBg:h,labelBgStyle:p,labelBgPadding:g,labelBgBorderRadius:x,style:v,markerEnd:b,markerStart:k,interactionWidth:S})})}const oZ=IR({isInternal:!1}),TR=IR({isInternal:!0});oZ.displayName="BezierEdge";TR.displayName="BezierEdgeInternal";const I2={default:TR,straight:NR,step:jR,smoothstep:wR,simplebezier:_R},T2={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},aZ=(e,t,n)=>n===st.Left?e-t:n===st.Right?e+t:e,lZ=(e,t,n)=>n===st.Top?e-t:n===st.Bottom?e+t:e,R2="react-flow__edgeupdater";function A2({position:e,centerX:t,centerY:n,radius:i=10,onMouseDown:r,onMouseEnter:o,onMouseOut:a,type:c}){return u.jsx("circle",{onMouseDown:r,onMouseEnter:o,onMouseOut:a,className:di([R2,`${R2}-${c}`]),cx:aZ(t,i,e),cy:lZ(n,i,e),r:i,stroke:"transparent",fill:"transparent"})}function cZ({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:i,sourceY:r,targetX:o,targetY:a,sourcePosition:c,targetPosition:d,onReconnect:m,onReconnectStart:h,onReconnectEnd:p,setReconnecting:g,setUpdateHover:x}){const v=$n(),b=(N,O)=>{if(N.button!==0)return;const{autoPanOnConnect:R,domNode:D,connectionMode:I,connectionRadius:L,lib:M,onConnectStart:A,cancelConnection:B,nodeLookup:W,rfId:P,panBy:G,updateConnection:$}=v.getState(),q=O.type==="target",Y=(U,Z)=>{g(!1),p?.(U,n,O.type,Z)},Q=U=>m?.(n,U),V=(U,Z)=>{g(!0),h?.(N,n,O.type),A?.(U,Z)};Ev.onPointerDown(N.nativeEvent,{autoPanOnConnect:R,connectionMode:I,connectionRadius:L,domNode:D,handleId:O.id,nodeId:O.nodeId,nodeLookup:W,isTarget:q,edgeUpdaterType:O.type,lib:M,flowId:P,cancelConnection:B,panBy:G,isValidConnection:(...U)=>v.getState().isValidConnection?.(...U)??!0,onConnect:Q,onConnectStart:V,onConnectEnd:(...U)=>v.getState().onConnectEnd?.(...U),onReconnectEnd:Y,updateConnection:$,getTransform:()=>v.getState().transform,getFromHandle:()=>v.getState().connection.fromHandle,dragThreshold:v.getState().connectionDragThreshold,handleDomNode:N.currentTarget})},k=N=>b(N,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),w=N=>b(N,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),S=()=>x(!0),j=()=>x(!1);return u.jsxs(u.Fragment,{children:[(e===!0||e==="source")&&u.jsx(A2,{position:c,centerX:i,centerY:r,radius:t,onMouseDown:k,onMouseEnter:S,onMouseOut:j,type:"source"}),(e===!0||e==="target")&&u.jsx(A2,{position:d,centerX:o,centerY:a,radius:t,onMouseDown:w,onMouseEnter:S,onMouseOut:j,type:"target"})]})}function uZ({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:i,onClick:r,onDoubleClick:o,onContextMenu:a,onMouseEnter:c,onMouseMove:d,onMouseLeave:m,reconnectRadius:h,onReconnect:p,onReconnectStart:g,onReconnectEnd:x,rfId:v,edgeTypes:b,noPanClassName:k,onError:w,disableKeyboardA11y:S}){let j=sn(je=>je.edgeLookup.get(e));const N=sn(je=>je.defaultEdgeOptions);j=N?{...N,...j}:j;let O=j.type||"default",R=b?.[O]||I2[O];R===void 0&&(w?.("011",ls.error011(O)),O="default",R=b?.default||I2.default);const D=!!(j.focusable||t&&typeof j.focusable>"u"),I=typeof p<"u"&&(j.reconnectable||n&&typeof j.reconnectable>"u"),L=!!(j.selectable||i&&typeof j.selectable>"u"),M=C.useRef(null),[A,B]=C.useState(!1),[W,P]=C.useState(!1),G=$n(),{zIndex:$,sourceX:q,sourceY:Y,targetX:Q,targetY:V,sourcePosition:U,targetPosition:Z}=sn(C.useCallback(je=>{const Te=je.nodeLookup.get(j.source),Ge=je.nodeLookup.get(j.target);if(!Te||!Ge)return{zIndex:j.zIndex,...T2};const Ze=tX({id:e,sourceNode:Te,targetNode:Ge,sourceHandle:j.sourceHandle||null,targetHandle:j.targetHandle||null,connectionMode:je.connectionMode,onError:w});return{zIndex:WY({selected:j.selected,zIndex:j.zIndex,sourceNode:Te,targetNode:Ge,elevateOnSelect:je.elevateEdgesOnSelect,zIndexMode:je.zIndexMode}),...Ze||T2}},[j.source,j.target,j.sourceHandle,j.targetHandle,j.selected,j.zIndex]),Bn),F=C.useMemo(()=>j.markerStart?`url('#${Cv(j.markerStart,v)}')`:void 0,[j.markerStart,v]),K=C.useMemo(()=>j.markerEnd?`url('#${Cv(j.markerEnd,v)}')`:void 0,[j.markerEnd,v]);if(j.hidden||q===null||Y===null||Q===null||V===null)return null;const ee=je=>{const{addSelectedEdges:Te,unselectNodesAndEdges:Ge,multiSelectionActive:Ze}=G.getState();L&&(G.setState({nodesSelectionActive:!1}),j.selected&&Ze?(Ge({nodes:[],edges:[j]}),M.current?.blur()):Te([e])),r&&r(je,j)},te=o?je=>{o(je,{...j})}:void 0,se=a?je=>{a(je,{...j})}:void 0,ae=c?je=>{c(je,{...j})}:void 0,ue=d?je=>{d(je,{...j})}:void 0,ie=m?je=>{m(je,{...j})}:void 0,we=je=>{if(!S&&NT.includes(je.key)&&L){const{unselectNodesAndEdges:Te,addSelectedEdges:Ge}=G.getState();je.key==="Escape"?(M.current?.blur(),Te({edges:[j]})):Ge([e])}};return u.jsx("svg",{style:{zIndex:$},children:u.jsxs("g",{className:di(["react-flow__edge",`react-flow__edge-${O}`,j.className,k,{selected:j.selected,animated:j.animated,inactive:!L&&!r,updating:A,selectable:L}]),onClick:ee,onDoubleClick:te,onContextMenu:se,onMouseEnter:ae,onMouseMove:ue,onMouseLeave:ie,onKeyDown:D?we:void 0,tabIndex:D?0:void 0,role:j.ariaRole??(D?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":j.ariaLabel===null?void 0:j.ariaLabel||`Edge from ${j.source} to ${j.target}`,"aria-describedby":D?`${oR}-${v}`:void 0,ref:M,...j.domAttributes,children:[!W&&u.jsx(R,{id:e,source:j.source,target:j.target,type:j.type,selected:j.selected,animated:j.animated,selectable:L,deletable:j.deletable??!0,label:j.label,labelStyle:j.labelStyle,labelShowBg:j.labelShowBg,labelBgStyle:j.labelBgStyle,labelBgPadding:j.labelBgPadding,labelBgBorderRadius:j.labelBgBorderRadius,sourceX:q,sourceY:Y,targetX:Q,targetY:V,sourcePosition:U,targetPosition:Z,data:j.data,style:j.style,sourceHandleId:j.sourceHandle,targetHandleId:j.targetHandle,markerStart:F,markerEnd:K,pathOptions:"pathOptions"in j?j.pathOptions:void 0,interactionWidth:j.interactionWidth}),I&&u.jsx(cZ,{edge:j,isReconnectable:I,reconnectRadius:h,onReconnect:p,onReconnectStart:g,onReconnectEnd:x,sourceX:q,sourceY:Y,targetX:Q,targetY:V,sourcePosition:U,targetPosition:Z,setUpdateHover:B,setReconnecting:P})]})})}var dZ=C.memo(uZ);const fZ=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function RR({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:i,noPanClassName:r,onReconnect:o,onEdgeContextMenu:a,onEdgeMouseEnter:c,onEdgeMouseMove:d,onEdgeMouseLeave:m,onEdgeClick:h,reconnectRadius:p,onEdgeDoubleClick:g,onReconnectStart:x,onReconnectEnd:v,disableKeyboardA11y:b}){const{edgesFocusable:k,edgesReconnectable:w,elementsSelectable:S,onError:j}=sn(fZ,Bn),N=KK(t);return u.jsxs("div",{className:"react-flow__edges",children:[u.jsx(tZ,{defaultColor:e,rfId:n}),N.map(O=>u.jsx(dZ,{id:O,edgesFocusable:k,edgesReconnectable:w,elementsSelectable:S,noPanClassName:r,onReconnect:o,onContextMenu:a,onMouseEnter:c,onMouseMove:d,onMouseLeave:m,onClick:h,reconnectRadius:p,onDoubleClick:g,onReconnectStart:x,onReconnectEnd:v,rfId:n,onError:j,edgeTypes:i,disableKeyboardA11y:b},O))]})}RR.displayName="EdgeRenderer";const mZ=C.memo(RR),pZ=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function hZ({children:e}){const t=sn(pZ);return u.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function gZ(e){const t=G0(),n=C.useRef(!1);C.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const yZ=e=>e.panZoom?.syncViewport;function xZ(e){const t=sn(yZ),n=$n();return C.useEffect(()=>{e&&(t?.(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function vZ(e){return e.connection.inProgress?{...e.connection,to:Xu(e.connection.to,e.transform)}:{...e.connection}}function bZ(e){return vZ}function _Z(e){const t=bZ();return sn(t,Bn)}const kZ=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function SZ({containerStyle:e,style:t,type:n,component:i}){const{nodesConnectable:r,width:o,height:a,isValid:c,inProgress:d}=sn(kZ,Bn);return!(o&&r&&d)?null:u.jsx("svg",{style:e,width:o,height:a,className:"react-flow__connectionline react-flow__container",children:u.jsx("g",{className:di(["react-flow__connection",RT(c)]),children:u.jsx(AR,{style:t,type:n,CustomComponent:i,isValid:c})})})}const AR=({style:e,type:t=vo.Bezier,CustomComponent:n,isValid:i})=>{const{inProgress:r,from:o,fromNode:a,fromHandle:c,fromPosition:d,to:m,toNode:h,toHandle:p,toPosition:g,pointer:x}=_Z();if(!r)return;if(n)return u.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:a,fromHandle:c,fromX:o.x,fromY:o.y,toX:m.x,toY:m.y,fromPosition:d,toPosition:g,connectionStatus:RT(i),toNode:h,toHandle:p,pointer:x});let v="";const b={sourceX:o.x,sourceY:o.y,sourcePosition:d,targetX:m.x,targetY:m.y,targetPosition:g};switch(t){case vo.Bezier:[v]=VT(b);break;case vo.SimpleBezier:[v]=vR(b);break;case vo.Step:[v]=wv({...b,borderRadius:0});break;case vo.SmoothStep:[v]=wv(b);break;default:[v]=GT(b)}return u.jsx("path",{d:v,fill:"none",className:"react-flow__connection-path",style:e})};AR.displayName="ConnectionLine";const wZ={};function M2(e=wZ){C.useRef(e),$n(),C.useEffect(()=>{},[e])}function CZ(){$n(),C.useRef(!1),C.useEffect(()=>{},[])}function MR({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:i,onEdgeClick:r,onNodeDoubleClick:o,onEdgeDoubleClick:a,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:h,onSelectionContextMenu:p,onSelectionStart:g,onSelectionEnd:x,connectionLineType:v,connectionLineStyle:b,connectionLineComponent:k,connectionLineContainerStyle:w,selectionKeyCode:S,selectionOnDrag:j,selectionMode:N,multiSelectionKeyCode:O,panActivationKeyCode:R,zoomActivationKeyCode:D,deleteKeyCode:I,onlyRenderVisibleElements:L,elementsSelectable:M,defaultViewport:A,translateExtent:B,minZoom:W,maxZoom:P,preventScrolling:G,defaultMarkerColor:$,zoomOnScroll:q,zoomOnPinch:Y,panOnScroll:Q,panOnScrollSpeed:V,panOnScrollMode:U,zoomOnDoubleClick:Z,panOnDrag:F,onPaneClick:K,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:se,onPaneScroll:ae,onPaneContextMenu:ue,paneClickDistance:ie,nodeClickDistance:we,onEdgeContextMenu:je,onEdgeMouseEnter:Te,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ze,reconnectRadius:Ye,onReconnect:mt,onReconnectStart:Ft,onReconnectEnd:Mt,noDragClassName:jt,noWheelClassName:he,noPanClassName:ze,disableKeyboardA11y:ot,nodeExtent:Ve,rfId:lt,viewport:me,onViewportChange:be}){return M2(e),M2(t),CZ(),gZ(n),xZ(me),u.jsx($K,{onPaneClick:K,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:se,onPaneContextMenu:ue,onPaneScroll:ae,paneClickDistance:ie,deleteKeyCode:I,selectionKeyCode:S,selectionOnDrag:j,selectionMode:N,onSelectionStart:g,onSelectionEnd:x,multiSelectionKeyCode:O,panActivationKeyCode:R,zoomActivationKeyCode:D,elementsSelectable:M,zoomOnScroll:q,zoomOnPinch:Y,zoomOnDoubleClick:Z,panOnScroll:Q,panOnScrollSpeed:V,panOnScrollMode:U,panOnDrag:F,defaultViewport:A,translateExtent:B,minZoom:W,maxZoom:P,onSelectionContextMenu:p,preventScrolling:G,noDragClassName:jt,noWheelClassName:he,noPanClassName:ze,disableKeyboardA11y:ot,onViewportChange:be,isControlledViewport:!!me,children:u.jsxs(hZ,{children:[u.jsx(mZ,{edgeTypes:t,onEdgeClick:r,onEdgeDoubleClick:a,onReconnect:mt,onReconnectStart:Ft,onReconnectEnd:Mt,onlyRenderVisibleElements:L,onEdgeContextMenu:je,onEdgeMouseEnter:Te,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ze,reconnectRadius:Ye,defaultMarkerColor:$,noPanClassName:ze,disableKeyboardA11y:ot,rfId:lt}),u.jsx(SZ,{style:b,type:v,component:k,containerStyle:w}),u.jsx("div",{className:"react-flow__edgelabel-renderer"}),u.jsx(XK,{nodeTypes:e,onNodeClick:i,onNodeDoubleClick:o,onNodeMouseEnter:c,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:h,nodeClickDistance:we,onlyRenderVisibleElements:L,noPanClassName:ze,noDragClassName:jt,disableKeyboardA11y:ot,nodeExtent:Ve,rfId:lt}),u.jsx("div",{className:"react-flow__viewport-portal"})]})})}MR.displayName="GraphView";const jZ=C.memo(MR),D2=({nodes:e,edges:t,defaultNodes:n,defaultEdges:i,width:r,height:o,fitView:a,fitViewOptions:c,minZoom:d=.5,maxZoom:m=2,nodeOrigin:h,nodeExtent:p,zIndexMode:g="basic"}={})=>{const x=new Map,v=new Map,b=new Map,k=new Map,w=i??t??[],S=n??e??[],j=h??[0,0],N=p??Mu;YT(b,k,w);const{nodesInitialized:O}=jv(S,x,v,{nodeOrigin:j,nodeExtent:N,zIndexMode:g});let R=[0,0,1];if(a&&r&&o){const D=Wu(x,{filter:A=>!!((A.width||A.initialWidth)&&(A.height||A.initialHeight))}),{x:I,y:L,zoom:M}=P0(D,r,o,d,m,c?.padding??.1);R=[I,L,M]}return{rfId:"1",width:r??0,height:o??0,transform:R,nodes:S,nodesInitialized:O,nodeLookup:x,parentLookup:v,edges:w,edgeLookup:k,connectionLookup:b,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:i!==void 0,panZoom:null,minZoom:d,maxZoom:m,translateExtent:Mu,nodeExtent:N,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Ol.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:j,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:a??!1,fitViewOptions:c,fitViewResolver:null,connection:{...TT},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:HY,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:IT,zIndexMode:g,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},EZ=({nodes:e,edges:t,defaultNodes:n,defaultEdges:i,width:r,height:o,fitView:a,fitViewOptions:c,minZoom:d,maxZoom:m,nodeOrigin:h,nodeExtent:p,zIndexMode:g})=>GX((x,v)=>{async function b(){const{nodeLookup:k,panZoom:w,fitViewOptions:S,fitViewResolver:j,width:N,height:O,minZoom:R,maxZoom:D}=v();w&&(await BY({nodes:k,width:N,height:O,panZoom:w,minZoom:R,maxZoom:D},S),j?.resolve(!0),x({fitViewResolver:null}))}return{...D2({nodes:e,edges:t,width:r,height:o,fitView:a,fitViewOptions:c,minZoom:d,maxZoom:m,nodeOrigin:h,nodeExtent:p,defaultNodes:n,defaultEdges:i,zIndexMode:g}),setNodes:k=>{const{nodeLookup:w,parentLookup:S,nodeOrigin:j,elevateNodesOnSelect:N,fitViewQueued:O,zIndexMode:R,nodesSelectionActive:D}=v(),{nodesInitialized:I,hasSelectedNodes:L}=jv(k,w,S,{nodeOrigin:j,nodeExtent:p,elevateNodesOnSelect:N,checkEquality:!0,zIndexMode:R}),M=D&&L;O&&I?(b(),x({nodes:k,nodesInitialized:I,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:M})):x({nodes:k,nodesInitialized:I,nodesSelectionActive:M})},setEdges:k=>{const{connectionLookup:w,edgeLookup:S}=v();YT(w,S,k),x({edges:k})},setDefaultNodesAndEdges:(k,w)=>{if(k){const{setNodes:S}=v();S(k),x({hasDefaultNodes:!0})}if(w){const{setEdges:S}=v();S(w),x({hasDefaultEdges:!0})}},updateNodeInternals:k=>{const{triggerNodeChanges:w,nodeLookup:S,parentLookup:j,domNode:N,nodeOrigin:O,nodeExtent:R,debug:D,fitViewQueued:I,zIndexMode:L}=v(),{changes:M,updatedInternals:A}=cX(k,S,j,N,O,R,L);A&&(sX(S,j,{nodeOrigin:O,nodeExtent:R,zIndexMode:L}),I?(b(),x({fitViewQueued:!1,fitViewOptions:void 0})):x({}),M?.length>0&&(D&&console.log("React Flow: trigger node changes",M),w?.(M)))},updateNodePositions:(k,w=!1)=>{const S=[];let j=[];const{nodeLookup:N,triggerNodeChanges:O,connection:R,updateConnection:D,onNodesChangeMiddlewareMap:I}=v();for(const[L,M]of k){const A=N.get(L),B=!!(A?.expandParent&&A?.parentId&&M?.position),W={id:L,type:"position",position:B?{x:Math.max(0,M.position.x),y:Math.max(0,M.position.y)}:M.position,dragging:w};if(A&&R.inProgress&&R.fromNode.id===A.id){const P=ua(A,R.fromHandle,st.Left,!0);D({...R,from:P})}B&&A.parentId&&S.push({id:L,parentId:A.parentId,rect:{...M.internals.positionAbsolute,width:M.measured.width??0,height:M.measured.height??0}}),j.push(W)}if(S.length>0){const{parentLookup:L,nodeOrigin:M}=v(),A=U0(S,N,L,M);j.push(...A)}for(const L of I.values())j=L(j);O(j)},triggerNodeChanges:k=>{const{onNodesChange:w,setNodes:S,nodes:j,hasDefaultNodes:N,debug:O}=v();if(k?.length){if(N){const R=cR(k,j);S(R)}O&&console.log("React Flow: trigger node changes",k),w?.(k)}},triggerEdgeChanges:k=>{const{onEdgesChange:w,setEdges:S,edges:j,hasDefaultEdges:N,debug:O}=v();if(k?.length){if(N){const R=fK(k,j);S(R)}O&&console.log("React Flow: trigger edge changes",k),w?.(k)}},addSelectedNodes:k=>{const{multiSelectionActive:w,edgeLookup:S,nodeLookup:j,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(w){const R=k.map(D=>ta(D,!0));N(R);return}N(dl(j,new Set([...k]),!0)),O(dl(S))},addSelectedEdges:k=>{const{multiSelectionActive:w,edgeLookup:S,nodeLookup:j,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(w){const R=k.map(D=>ta(D,!0));O(R);return}O(dl(S,new Set([...k]))),N(dl(j,new Set,!0))},unselectNodesAndEdges:({nodes:k,edges:w}={})=>{const{edges:S,nodes:j,nodeLookup:N,triggerNodeChanges:O,triggerEdgeChanges:R}=v(),D=k||j,I=w||S,L=[];for(const A of D){if(!A.selected)continue;const B=N.get(A.id);B&&(B.selected=!1),L.push(ta(A.id,!1))}const M=[];for(const A of I)A.selected&&M.push(ta(A.id,!1));O(L),R(M)},setMinZoom:k=>{const{panZoom:w,maxZoom:S}=v();w?.setScaleExtent([k,S]),x({minZoom:k})},setMaxZoom:k=>{const{panZoom:w,minZoom:S}=v();w?.setScaleExtent([S,k]),x({maxZoom:k})},setTranslateExtent:k=>{v().panZoom?.setTranslateExtent(k),x({translateExtent:k})},resetSelectedElements:()=>{const{edges:k,nodes:w,triggerNodeChanges:S,triggerEdgeChanges:j,elementsSelectable:N}=v();if(!N)return;const O=w.reduce((D,I)=>I.selected?[...D,ta(I.id,!1)]:D,[]),R=k.reduce((D,I)=>I.selected?[...D,ta(I.id,!1)]:D,[]);S(O),j(R)},setNodeExtent:k=>{const{nodes:w,nodeLookup:S,parentLookup:j,nodeOrigin:N,elevateNodesOnSelect:O,nodeExtent:R,zIndexMode:D}=v();k[0][0]===R[0][0]&&k[0][1]===R[0][1]&&k[1][0]===R[1][0]&&k[1][1]===R[1][1]||(jv(w,S,j,{nodeOrigin:N,nodeExtent:k,elevateNodesOnSelect:O,checkEquality:!1,zIndexMode:D}),x({nodeExtent:k}))},panBy:k=>{const{transform:w,width:S,height:j,panZoom:N,translateExtent:O}=v();return uX({delta:k,panZoom:N,transform:w,translateExtent:O,width:S,height:j})},setCenter:async(k,w,S)=>{const{width:j,height:N,maxZoom:O,panZoom:R}=v();if(!R)return Promise.resolve(!1);const D=typeof S?.zoom<"u"?S.zoom:O;return await R.setViewport({x:j/2-k*D,y:N/2-w*D,zoom:D},{duration:S?.duration,ease:S?.ease,interpolate:S?.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{x({connection:{...TT}})},updateConnection:k=>{x({connection:k})},reset:()=>x({...D2()})}},Object.is);function DR({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:i,initialWidth:r,initialHeight:o,initialMinZoom:a,initialMaxZoom:c,initialFitViewOptions:d,fitView:m,nodeOrigin:h,nodeExtent:p,zIndexMode:g,children:x}){const[v]=C.useState(()=>EZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:i,width:r,height:o,fitView:m,minZoom:a,maxZoom:c,fitViewOptions:d,nodeOrigin:h,nodeExtent:p,zIndexMode:g}));return u.jsx(qX,{value:v,children:u.jsx(hK,{children:x})})}function NZ({children:e,nodes:t,edges:n,defaultNodes:i,defaultEdges:r,width:o,height:a,fitView:c,fitViewOptions:d,minZoom:m,maxZoom:h,nodeOrigin:p,nodeExtent:g,zIndexMode:x}){return C.useContext(op)?u.jsx(u.Fragment,{children:e}):u.jsx(DR,{initialNodes:t,initialEdges:n,defaultNodes:i,defaultEdges:r,initialWidth:o,initialHeight:a,fitView:c,initialFitViewOptions:d,initialMinZoom:m,initialMaxZoom:h,nodeOrigin:p,nodeExtent:g,zIndexMode:x,children:e})}const IZ={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function TZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:i,className:r,nodeTypes:o,edgeTypes:a,onNodeClick:c,onEdgeClick:d,onInit:m,onMove:h,onMoveStart:p,onMoveEnd:g,onConnect:x,onConnectStart:v,onConnectEnd:b,onClickConnectStart:k,onClickConnectEnd:w,onNodeMouseEnter:S,onNodeMouseMove:j,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:R,onNodeDragStart:D,onNodeDrag:I,onNodeDragStop:L,onNodesDelete:M,onEdgesDelete:A,onDelete:B,onSelectionChange:W,onSelectionDragStart:P,onSelectionDrag:G,onSelectionDragStop:$,onSelectionContextMenu:q,onSelectionStart:Y,onSelectionEnd:Q,onBeforeDelete:V,connectionMode:U,connectionLineType:Z=vo.Bezier,connectionLineStyle:F,connectionLineComponent:K,connectionLineContainerStyle:ee,deleteKeyCode:te="Backspace",selectionKeyCode:se="Shift",selectionOnDrag:ae=!1,selectionMode:ue=Du.Full,panActivationKeyCode:ie="Space",multiSelectionKeyCode:we=Lu()?"Meta":"Control",zoomActivationKeyCode:je=Lu()?"Meta":"Control",snapToGrid:Te,snapGrid:Ge,onlyRenderVisibleElements:Ze=!1,selectNodesOnDrag:Ye,nodesDraggable:mt,autoPanOnNodeFocus:Ft,nodesConnectable:Mt,nodesFocusable:jt,nodeOrigin:he=aR,edgesFocusable:ze,edgesReconnectable:ot,elementsSelectable:Ve=!0,defaultViewport:lt=sK,minZoom:me=.5,maxZoom:be=2,translateExtent:Ae=Mu,preventScrolling:Be=!0,nodeExtent:We,defaultMarkerColor:Lt="#b1b1b7",zoomOnScroll:pt=!0,zoomOnPinch:ke=!0,panOnScroll:qe=!1,panOnScrollSpeed:Qe=.5,panOnScrollMode:$e=ra.Free,zoomOnDoubleClick:He=!0,panOnDrag:Vt=!0,onPaneClick:ei,onPaneMouseEnter:vt,onPaneMouseMove:bt,onPaneMouseLeave:vn,onPaneScroll:On,onPaneContextMenu:wt,paneClickDistance:zt=1,nodeClickDistance:Hn=0,children:Me,onReconnect:ht,onReconnectStart:gt,onReconnectEnd:fi,onEdgeContextMenu:Vn,onEdgeDoubleClick:pn,onEdgeMouseEnter:Fn,onEdgeMouseMove:tt,onEdgeMouseLeave:mi,reconnectRadius:Si=10,onNodesChange:Rn,onEdgesChange:wn,noDragClassName:$t="nodrag",noWheelClassName:Cn="nowheel",noPanClassName:Xt="nopan",fitView:Re,fitViewOptions:kt,connectOnClick:bn,attributionPosition:wi,proOptions:In,defaultEdgeOptions:It,elevateNodesOnSelect:yi=!0,elevateEdgesOnSelect:Zn=!1,disableKeyboardA11y:ti=!1,autoPanOnConnect:ln,autoPanOnNodeDrag:Kt,autoPanSpeed:Tt,connectionRadius:Zt,isValidConnection:Un,onError:dn,style:Je,id:ni,nodeDragThreshold:Dt,connectionDragThreshold:Ot,viewport:An,onViewportChange:Gn,width:jn,height:Ln,colorMode:xi="light",debug:de,onScroll:ve,ariaLabelConfig:Pe,zIndexMode:ut="basic",...on},Pt){const ce=ni||"1",Se=cK(xi),Le=C.useCallback(Ue=>{Ue.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),ve?.(Ue)},[ve]);return u.jsx("div",{"data-testid":"rf__wrapper",...on,onScroll:Le,style:{...Je,...IZ},ref:Pt,className:di(["react-flow",r,Se]),id:ni,role:"application",children:u.jsxs(NZ,{nodes:e,edges:t,width:jn,height:Ln,fitView:Re,fitViewOptions:kt,minZoom:me,maxZoom:be,nodeOrigin:he,nodeExtent:We,zIndexMode:ut,children:[u.jsx(lK,{nodes:e,edges:t,defaultNodes:n,defaultEdges:i,onConnect:x,onConnectStart:v,onConnectEnd:b,onClickConnectStart:k,onClickConnectEnd:w,nodesDraggable:mt,autoPanOnNodeFocus:Ft,nodesConnectable:Mt,nodesFocusable:jt,edgesFocusable:ze,edgesReconnectable:ot,elementsSelectable:Ve,elevateNodesOnSelect:yi,elevateEdgesOnSelect:Zn,minZoom:me,maxZoom:be,nodeExtent:We,onNodesChange:Rn,onEdgesChange:wn,snapToGrid:Te,snapGrid:Ge,connectionMode:U,translateExtent:Ae,connectOnClick:bn,defaultEdgeOptions:It,fitView:Re,fitViewOptions:kt,onNodesDelete:M,onEdgesDelete:A,onDelete:B,onNodeDragStart:D,onNodeDrag:I,onNodeDragStop:L,onSelectionDrag:G,onSelectionDragStart:P,onSelectionDragStop:$,onMove:h,onMoveStart:p,onMoveEnd:g,noPanClassName:Xt,nodeOrigin:he,rfId:ce,autoPanOnConnect:ln,autoPanOnNodeDrag:Kt,autoPanSpeed:Tt,onError:dn,connectionRadius:Zt,isValidConnection:Un,selectNodesOnDrag:Ye,nodeDragThreshold:Dt,connectionDragThreshold:Ot,onBeforeDelete:V,debug:de,ariaLabelConfig:Pe,zIndexMode:ut}),u.jsx(jZ,{onInit:m,onNodeClick:c,onEdgeClick:d,onNodeMouseEnter:S,onNodeMouseMove:j,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:R,nodeTypes:o,edgeTypes:a,connectionLineType:Z,connectionLineStyle:F,connectionLineComponent:K,connectionLineContainerStyle:ee,selectionKeyCode:se,selectionOnDrag:ae,selectionMode:ue,deleteKeyCode:te,multiSelectionKeyCode:we,panActivationKeyCode:ie,zoomActivationKeyCode:je,onlyRenderVisibleElements:Ze,defaultViewport:lt,translateExtent:Ae,minZoom:me,maxZoom:be,preventScrolling:Be,zoomOnScroll:pt,zoomOnPinch:ke,zoomOnDoubleClick:He,panOnScroll:qe,panOnScrollSpeed:Qe,panOnScrollMode:$e,panOnDrag:Vt,onPaneClick:ei,onPaneMouseEnter:vt,onPaneMouseMove:bt,onPaneMouseLeave:vn,onPaneScroll:On,onPaneContextMenu:wt,paneClickDistance:zt,nodeClickDistance:Hn,onSelectionContextMenu:q,onSelectionStart:Y,onSelectionEnd:Q,onReconnect:ht,onReconnectStart:gt,onReconnectEnd:fi,onEdgeContextMenu:Vn,onEdgeDoubleClick:pn,onEdgeMouseEnter:Fn,onEdgeMouseMove:tt,onEdgeMouseLeave:mi,reconnectRadius:Si,defaultMarkerColor:Lt,noDragClassName:$t,noWheelClassName:Cn,noPanClassName:Xt,rfId:ce,disableKeyboardA11y:ti,nodeExtent:We,viewport:An,onViewportChange:Gn}),u.jsx(rK,{onSelectionChange:W}),Me,u.jsx(JX,{proOptions:In,position:wi}),u.jsx(QX,{rfId:ce,disableKeyboardA11y:ti})]})})}var RZ=uR(TZ);function AZ({dimensions:e,lineWidth:t,variant:n,className:i}){return u.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:di(["react-flow__background-pattern",n,i])})}function MZ({radius:e,className:t}){return u.jsx("circle",{cx:e,cy:e,r:e,className:di(["react-flow__background-pattern","dots",t])})}var So;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(So||(So={}));const DZ={[So.Dots]:1,[So.Lines]:1,[So.Cross]:6},OZ=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function OR({id:e,variant:t=So.Dots,gap:n=20,size:i,lineWidth:r=1,offset:o=0,color:a,bgColor:c,style:d,className:m,patternClassName:h}){const p=C.useRef(null),{transform:g,patternId:x}=sn(OZ,Bn),v=i||DZ[t],b=t===So.Dots,k=t===So.Cross,w=Array.isArray(n)?n:[n,n],S=[w[0]*g[2]||1,w[1]*g[2]||1],j=v*g[2],N=Array.isArray(o)?o:[o,o],O=k?[j,j]:S,R=[N[0]*g[2]||1+O[0]/2,N[1]*g[2]||1+O[1]/2],D=`${x}${e||""}`;return u.jsxs("svg",{className:di(["react-flow__background",m]),style:{...d,...lp,"--xy-background-color-props":c,"--xy-background-pattern-color-props":a},ref:p,"data-testid":"rf__background",children:[u.jsx("pattern",{id:D,x:g[0]%S[0],y:g[1]%S[1],width:S[0],height:S[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${R[0]},-${R[1]})`,children:b?u.jsx(MZ,{radius:j/2,className:h}):u.jsx(AZ,{dimensions:O,lineWidth:r,variant:t,className:h})}),u.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${D})`})]})}OR.displayName="Background";const LZ=C.memo(OR);function zZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:u.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function PZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:u.jsx("path",{d:"M0 0h32v4.2H0z"})})}function BZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:u.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function $Z(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:u.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function HZ(){return u.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:u.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function Ef({children:e,className:t,...n}){return u.jsx("button",{type:"button",className:di(["react-flow__controls-button",t]),...n,children:e})}const FZ=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function LR({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:i=!0,fitViewOptions:r,onZoomIn:o,onZoomOut:a,onFitView:c,onInteractiveChange:d,className:m,children:h,position:p="bottom-left",orientation:g="vertical","aria-label":x}){const v=$n(),{isInteractive:b,minZoomReached:k,maxZoomReached:w,ariaLabelConfig:S}=sn(FZ,Bn),{zoomIn:j,zoomOut:N,fitView:O}=G0(),R=()=>{j(),o?.()},D=()=>{N(),a?.()},I=()=>{O(r),c?.()},L=()=>{v.setState({nodesDraggable:!b,nodesConnectable:!b,elementsSelectable:!b}),d?.(!b)},M=g==="horizontal"?"horizontal":"vertical";return u.jsxs(ap,{className:di(["react-flow__controls",M,m]),position:p,style:e,"data-testid":"rf__controls","aria-label":x??S["controls.ariaLabel"],children:[t&&u.jsxs(u.Fragment,{children:[u.jsx(Ef,{onClick:R,className:"react-flow__controls-zoomin",title:S["controls.zoomIn.ariaLabel"],"aria-label":S["controls.zoomIn.ariaLabel"],disabled:w,children:u.jsx(zZ,{})}),u.jsx(Ef,{onClick:D,className:"react-flow__controls-zoomout",title:S["controls.zoomOut.ariaLabel"],"aria-label":S["controls.zoomOut.ariaLabel"],disabled:k,children:u.jsx(PZ,{})})]}),n&&u.jsx(Ef,{className:"react-flow__controls-fitview",onClick:I,title:S["controls.fitView.ariaLabel"],"aria-label":S["controls.fitView.ariaLabel"],children:u.jsx(BZ,{})}),i&&u.jsx(Ef,{className:"react-flow__controls-interactive",onClick:L,title:S["controls.interactive.ariaLabel"],"aria-label":S["controls.interactive.ariaLabel"],children:b?u.jsx(HZ,{}):u.jsx($Z,{})}),h]})}LR.displayName="Controls";const VZ=C.memo(LR);function UZ({id:e,x:t,y:n,width:i,height:r,style:o,color:a,strokeColor:c,strokeWidth:d,className:m,borderRadius:h,shapeRendering:p,selected:g,onClick:x}){const{background:v,backgroundColor:b}=o||{},k=a||v||b;return u.jsx("rect",{className:di(["react-flow__minimap-node",{selected:g},m]),x:t,y:n,rx:h,ry:h,width:i,height:r,style:{fill:k,stroke:c,strokeWidth:d},shapeRendering:p,onClick:x?w=>x(w,e):void 0})}const GZ=C.memo(UZ),qZ=e=>e.nodes.map(t=>t.id),Ly=e=>e instanceof Function?e:()=>e;function WZ({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:i=5,nodeStrokeWidth:r,nodeComponent:o=GZ,onClick:a}){const c=sn(qZ,Bn),d=Ly(t),m=Ly(e),h=Ly(n),p=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return u.jsx(u.Fragment,{children:c.map(g=>u.jsx(XZ,{id:g,nodeColorFunc:d,nodeStrokeColorFunc:m,nodeClassNameFunc:h,nodeBorderRadius:i,nodeStrokeWidth:r,NodeComponent:o,onClick:a,shapeRendering:p},g))})}function YZ({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:i,nodeBorderRadius:r,nodeStrokeWidth:o,shapeRendering:a,NodeComponent:c,onClick:d}){const{node:m,x:h,y:p,width:g,height:x}=sn(v=>{const b=v.nodeLookup.get(e);if(!b)return{node:void 0,x:0,y:0,width:0,height:0};const k=b.internals.userNode,{x:w,y:S}=b.internals.positionAbsolute,{width:j,height:N}=Ps(k);return{node:k,x:w,y:S,width:j,height:N}},Bn);return!m||m.hidden||!zT(m)?null:u.jsx(c,{x:h,y:p,width:g,height:x,style:m.style,selected:!!m.selected,className:i(m),color:t(m),borderRadius:r,strokeColor:n(m),strokeWidth:o,shapeRendering:a,onClick:d,id:m.id})}const XZ=C.memo(YZ);var KZ=C.memo(WZ);const ZZ=200,QZ=150,JZ=e=>!e.hidden,eQ=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?LT(Wu(e.nodeLookup,{filter:JZ}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},tQ="react-flow__minimap-desc";function zR({style:e,className:t,nodeStrokeColor:n,nodeColor:i,nodeClassName:r="",nodeBorderRadius:o=5,nodeStrokeWidth:a,nodeComponent:c,bgColor:d,maskColor:m,maskStrokeColor:h,maskStrokeWidth:p,position:g="bottom-right",onClick:x,onNodeClick:v,pannable:b=!1,zoomable:k=!1,ariaLabel:w,inversePan:S,zoomStep:j=1,offsetScale:N=5}){const O=$n(),R=C.useRef(null),{boundingRect:D,viewBB:I,rfId:L,panZoom:M,translateExtent:A,flowWidth:B,flowHeight:W,ariaLabelConfig:P}=sn(eQ,Bn),G=e?.width??ZZ,$=e?.height??QZ,q=D.width/G,Y=D.height/$,Q=Math.max(q,Y),V=Q*G,U=Q*$,Z=N*Q,F=D.x-(V-D.width)/2-Z,K=D.y-(U-D.height)/2-Z,ee=V+Z*2,te=U+Z*2,se=`${tQ}-${L}`,ae=C.useRef(0),ue=C.useRef();ae.current=Q,C.useEffect(()=>{if(R.current&&M)return ue.current=vX({domNode:R.current,panZoom:M,getTransform:()=>O.getState().transform,getViewScale:()=>ae.current}),()=>{ue.current?.destroy()}},[M]),C.useEffect(()=>{ue.current?.update({translateExtent:A,width:B,height:W,inversePan:S,pannable:b,zoomStep:j,zoomable:k})},[b,k,S,j,A,B,W]);const ie=x?Te=>{const[Ge,Ze]=ue.current?.pointer(Te)||[0,0];x(Te,{x:Ge,y:Ze})}:void 0,we=v?C.useCallback((Te,Ge)=>{const Ze=O.getState().nodeLookup.get(Ge).internals.userNode;v(Te,Ze)},[]):void 0,je=w??P["minimap.ariaLabel"];return u.jsx(ap,{position:g,style:{...e,"--xy-minimap-background-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-background-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-stroke-width-props":typeof p=="number"?p*Q:void 0,"--xy-minimap-node-background-color-props":typeof i=="string"?i:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof a=="number"?a:void 0},className:di(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:u.jsxs("svg",{width:G,height:$,viewBox:`${F} ${K} ${ee} ${te}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":se,ref:R,onClick:ie,children:[je&&u.jsx("title",{id:se,children:je}),u.jsx(KZ,{onClick:we,nodeColor:i,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:r,nodeStrokeWidth:a,nodeComponent:c}),u.jsx("path",{className:"react-flow__minimap-mask",d:`M${F-Z},${K-Z}h${ee+Z*2}v${te+Z*2}h${-ee-Z*2}z + M${I.x},${I.y}h${I.width}v${I.height}h${-I.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}zR.displayName="MiniMap";const nQ=C.memo(zR),iQ=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,rQ={[Bl.Line]:"right",[Bl.Handle]:"bottom-right"};function sQ({nodeId:e,position:t,variant:n=Bl.Handle,className:i,style:r=void 0,children:o,color:a,minWidth:c=10,minHeight:d=10,maxWidth:m=Number.MAX_VALUE,maxHeight:h=Number.MAX_VALUE,keepAspectRatio:p=!1,resizeDirection:g,autoScale:x=!0,shouldResize:v,onResizeStart:b,onResize:k,onResizeEnd:w}){const S=pR(),j=typeof e=="string"?e:S,N=$n(),O=C.useRef(null),R=n===Bl.Handle,D=sn(C.useCallback(iQ(R&&x),[R,x]),Bn),I=C.useRef(null),L=t??rQ[n];C.useEffect(()=>{if(!(!O.current||!j))return I.current||(I.current=MX({domNode:O.current,nodeId:j,getStoreItems:()=>{const{nodeLookup:A,transform:B,snapGrid:W,snapToGrid:P,nodeOrigin:G,domNode:$}=N.getState();return{nodeLookup:A,transform:B,snapGrid:W,snapToGrid:P,nodeOrigin:G,paneDomNode:$}},onChange:(A,B)=>{const{triggerNodeChanges:W,nodeLookup:P,parentLookup:G,nodeOrigin:$}=N.getState(),q=[],Y={x:A.x,y:A.y},Q=P.get(j);if(Q&&Q.expandParent&&Q.parentId){const V=Q.origin??$,U=A.width??Q.measured.width??0,Z=A.height??Q.measured.height??0,F={id:Q.id,parentId:Q.parentId,rect:{width:U,height:Z,...PT({x:A.x??Q.position.x,y:A.y??Q.position.y},{width:U,height:Z},Q.parentId,P,V)}},K=U0([F],P,G,$);q.push(...K),Y.x=A.x?Math.max(V[0]*U,A.x):void 0,Y.y=A.y?Math.max(V[1]*Z,A.y):void 0}if(Y.x!==void 0&&Y.y!==void 0){const V={id:j,type:"position",position:{...Y}};q.push(V)}if(A.width!==void 0&&A.height!==void 0){const U={id:j,type:"dimensions",resizing:!0,setAttributes:g?g==="horizontal"?"width":"height":!0,dimensions:{width:A.width,height:A.height}};q.push(U)}for(const V of B){const U={...V,type:"position"};q.push(U)}W(q)},onEnd:({width:A,height:B})=>{const W={id:j,type:"dimensions",resizing:!1,dimensions:{width:A,height:B}};N.getState().triggerNodeChanges([W])}})),I.current.update({controlPosition:L,boundaries:{minWidth:c,minHeight:d,maxWidth:m,maxHeight:h},keepAspectRatio:p,resizeDirection:g,onResizeStart:b,onResize:k,onResizeEnd:w,shouldResize:v}),()=>{I.current?.destroy()}},[L,c,d,m,h,p,b,k,w,v]);const M=L.split("-");return u.jsx("div",{className:di(["react-flow__resize-control","nodrag",...M,n,i]),ref:O,style:{...r,scale:D,...a&&{[R?"backgroundColor":"borderColor"]:a}},children:o})}C.memo(sQ);const oQ=C.memo(function({data:t}){const n=["oc-canvas-node",t.isOwner&&"is-owner",t.isSelected&&"is-selected",t.isDropTarget&&"is-drop-target"].filter(Boolean).join(" "),i=Vu(t.icon);return u.jsxs("div",{className:n,children:[u.jsx($l,{type:"target",position:st.Top,className:"oc-canvas-handle"}),u.jsxs("div",{className:"oc-canvas-node-row",children:[u.jsx("div",{className:"oc-canvas-node-chip",children:u.jsx("span",{className:"oc-canvas-node-chip-icon",style:{WebkitMaskImage:`url("${i}")`,maskImage:`url("${i}")`},"aria-hidden":!0})}),u.jsxs("div",{className:"oc-canvas-node-text",children:[u.jsx("span",{className:"oc-canvas-node-name",children:t.name}),u.jsxs("div",{className:"oc-canvas-node-meta",children:[t.employeeNames.length>0?u.jsxs("span",{className:"oc-canvas-node-person",title:t.employeeNames.join(", "),children:[t.employeeNames[0],t.employeeNames.length>1?` +${t.employeeNames.length-1}`:""]}):u.jsx("span",{className:"oc-canvas-node-id",children:t.roleId}),t.employeeCount>0&&u.jsx("span",{className:"oc-canvas-node-badge",children:t.employeeCount})]})]})]}),u.jsx($l,{type:"source",position:st.Bottom,className:"oc-canvas-handle"})]})});var zy,O2;function W0(){if(O2)return zy;O2=1;var e="\0",t="\0",n="";class i{_isDirected=!0;_isMultigraph=!1;_isCompound=!1;_label;_defaultNodeLabelFn=()=>{};_defaultEdgeLabelFn=()=>{};_nodes={};_in={};_preds={};_out={};_sucs={};_edgeObjs={};_edgeLabels={};_nodeCount=0;_edgeCount=0;_parent;_children;constructor(h){h&&(this._isDirected=Object.hasOwn(h,"directed")?h.directed:!0,this._isMultigraph=Object.hasOwn(h,"multigraph")?h.multigraph:!1,this._isCompound=Object.hasOwn(h,"compound")?h.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[t]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(h){return this._label=h,this}graph(){return this._label}setDefaultNodeLabel(h){return this._defaultNodeLabelFn=h,typeof h!="function"&&(this._defaultNodeLabelFn=()=>h),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var h=this;return this.nodes().filter(p=>Object.keys(h._in[p]).length===0)}sinks(){var h=this;return this.nodes().filter(p=>Object.keys(h._out[p]).length===0)}setNodes(h,p){var g=arguments,x=this;return h.forEach(function(v){g.length>1?x.setNode(v,p):x.setNode(v)}),this}setNode(h,p){return Object.hasOwn(this._nodes,h)?(arguments.length>1&&(this._nodes[h]=p),this):(this._nodes[h]=arguments.length>1?p:this._defaultNodeLabelFn(h),this._isCompound&&(this._parent[h]=t,this._children[h]={},this._children[t][h]=!0),this._in[h]={},this._preds[h]={},this._out[h]={},this._sucs[h]={},++this._nodeCount,this)}node(h){return this._nodes[h]}hasNode(h){return Object.hasOwn(this._nodes,h)}removeNode(h){var p=this;if(Object.hasOwn(this._nodes,h)){var g=x=>p.removeEdge(p._edgeObjs[x]);delete this._nodes[h],this._isCompound&&(this._removeFromParentsChildList(h),delete this._parent[h],this.children(h).forEach(function(x){p.setParent(x)}),delete this._children[h]),Object.keys(this._in[h]).forEach(g),delete this._in[h],delete this._preds[h],Object.keys(this._out[h]).forEach(g),delete this._out[h],delete this._sucs[h],--this._nodeCount}return this}setParent(h,p){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(p===void 0)p=t;else{p+="";for(var g=p;g!==void 0;g=this.parent(g))if(g===h)throw new Error("Setting "+p+" as parent of "+h+" would create a cycle");this.setNode(p)}return this.setNode(h),this._removeFromParentsChildList(h),this._parent[h]=p,this._children[p][h]=!0,this}_removeFromParentsChildList(h){delete this._children[this._parent[h]][h]}parent(h){if(this._isCompound){var p=this._parent[h];if(p!==t)return p}}children(h=t){if(this._isCompound){var p=this._children[h];if(p)return Object.keys(p)}else{if(h===t)return this.nodes();if(this.hasNode(h))return[]}}predecessors(h){var p=this._preds[h];if(p)return Object.keys(p)}successors(h){var p=this._sucs[h];if(p)return Object.keys(p)}neighbors(h){var p=this.predecessors(h);if(p){const x=new Set(p);for(var g of this.successors(h))x.add(g);return Array.from(x.values())}}isLeaf(h){var p;return this.isDirected()?p=this.successors(h):p=this.neighbors(h),p.length===0}filterNodes(h){var p=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});p.setGraph(this.graph());var g=this;Object.entries(this._nodes).forEach(function([b,k]){h(b)&&p.setNode(b,k)}),Object.values(this._edgeObjs).forEach(function(b){p.hasNode(b.v)&&p.hasNode(b.w)&&p.setEdge(b,g.edge(b))});var x={};function v(b){var k=g.parent(b);return k===void 0||p.hasNode(k)?(x[b]=k,k):k in x?x[k]:v(k)}return this._isCompound&&p.nodes().forEach(b=>p.setParent(b,v(b))),p}setDefaultEdgeLabel(h){return this._defaultEdgeLabelFn=h,typeof h!="function"&&(this._defaultEdgeLabelFn=()=>h),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(h,p){var g=this,x=arguments;return h.reduce(function(v,b){return x.length>1?g.setEdge(v,b,p):g.setEdge(v,b),b}),this}setEdge(){var h,p,g,x,v=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(h=b.v,p=b.w,g=b.name,arguments.length===2&&(x=arguments[1],v=!0)):(h=b,p=arguments[1],g=arguments[3],arguments.length>2&&(x=arguments[2],v=!0)),h=""+h,p=""+p,g!==void 0&&(g=""+g);var k=a(this._isDirected,h,p,g);if(Object.hasOwn(this._edgeLabels,k))return v&&(this._edgeLabels[k]=x),this;if(g!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(h),this.setNode(p),this._edgeLabels[k]=v?x:this._defaultEdgeLabelFn(h,p,g);var w=c(this._isDirected,h,p,g);return h=w.v,p=w.w,Object.freeze(w),this._edgeObjs[k]=w,r(this._preds[p],h),r(this._sucs[h],p),this._in[p][k]=w,this._out[h][k]=w,this._edgeCount++,this}edge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g);return this._edgeLabels[x]}edgeAsObj(){const h=this.edge(...arguments);return typeof h!="object"?{label:h}:h}hasEdge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g);return Object.hasOwn(this._edgeLabels,x)}removeEdge(h,p,g){var x=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,h,p,g),v=this._edgeObjs[x];return v&&(h=v.v,p=v.w,delete this._edgeLabels[x],delete this._edgeObjs[x],o(this._preds[p],h),o(this._sucs[h],p),delete this._in[p][x],delete this._out[h][x],this._edgeCount--),this}inEdges(h,p){var g=this._in[h];if(g){var x=Object.values(g);return p?x.filter(v=>v.v===p):x}}outEdges(h,p){var g=this._out[h];if(g){var x=Object.values(g);return p?x.filter(v=>v.w===p):x}}nodeEdges(h,p){var g=this.inEdges(h,p);if(g)return g.concat(this.outEdges(h,p))}}function r(m,h){m[h]?m[h]++:m[h]=1}function o(m,h){--m[h]||delete m[h]}function a(m,h,p,g){var x=""+h,v=""+p;if(!m&&x>v){var b=x;x=v,v=b}return x+n+v+n+(g===void 0?e:g)}function c(m,h,p,g){var x=""+h,v=""+p;if(!m&&x>v){var b=x;x=v,v=b}var k={v:x,w:v};return g&&(k.name=g),k}function d(m,h){return a(m,h.v,h.w,h.name)}return zy=i,zy}var Py,L2;function aQ(){return L2||(L2=1,Py="2.2.4"),Py}var By,z2;function lQ(){return z2||(z2=1,By={Graph:W0(),version:aQ()}),By}var $y,P2;function cQ(){if(P2)return $y;P2=1;var e=W0();$y={write:t,read:r};function t(o){var a={options:{directed:o.isDirected(),multigraph:o.isMultigraph(),compound:o.isCompound()},nodes:n(o),edges:i(o)};return o.graph()!==void 0&&(a.value=structuredClone(o.graph())),a}function n(o){return o.nodes().map(function(a){var c=o.node(a),d=o.parent(a),m={v:a};return c!==void 0&&(m.value=c),d!==void 0&&(m.parent=d),m})}function i(o){return o.edges().map(function(a){var c=o.edge(a),d={v:a.v,w:a.w};return a.name!==void 0&&(d.name=a.name),c!==void 0&&(d.value=c),d})}function r(o){var a=new e(o.options).setGraph(o.value);return o.nodes.forEach(function(c){a.setNode(c.v,c.value),c.parent&&a.setParent(c.v,c.parent)}),o.edges.forEach(function(c){a.setEdge({v:c.v,w:c.w,name:c.name},c.value)}),a}return $y}var Hy,B2;function uQ(){if(B2)return Hy;B2=1,Hy=e;function e(t){var n={},i=[],r;function o(a){Object.hasOwn(n,a)||(n[a]=!0,r.push(a),t.successors(a).forEach(o),t.predecessors(a).forEach(o))}return t.nodes().forEach(function(a){r=[],o(a),r.length&&i.push(r)}),i}return Hy}var Fy,$2;function PR(){if($2)return Fy;$2=1;class e{_arr=[];_keyIndices={};size(){return this._arr.length}keys(){return this._arr.map(function(n){return n.key})}has(n){return Object.hasOwn(this._keyIndices,n)}priority(n){var i=this._keyIndices[n];if(i!==void 0)return this._arr[i].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(n,i){var r=this._keyIndices;if(n=String(n),!Object.hasOwn(r,n)){var o=this._arr,a=o.length;return r[n]=a,o.push({key:n,priority:i}),this._decrease(a),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);var n=this._arr.pop();return delete this._keyIndices[n.key],this._heapify(0),n.key}decrease(n,i){var r=this._keyIndices[n];if(i>this._arr[r].priority)throw new Error("New priority is greater than current priority. Key: "+n+" Old: "+this._arr[r].priority+" New: "+i);this._arr[r].priority=i,this._decrease(r)}_heapify(n){var i=this._arr,r=2*n,o=r+1,a=n;r<i.length&&(a=i[r].priority<i[a].priority?r:a,o<i.length&&(a=i[o].priority<i[a].priority?o:a),a!==n&&(this._swap(n,a),this._heapify(a)))}_decrease(n){for(var i=this._arr,r=i[n].priority,o;n!==0&&(o=n>>1,!(i[o].priority<r));)this._swap(n,o),n=o}_swap(n,i){var r=this._arr,o=this._keyIndices,a=r[n],c=r[i];r[n]=c,r[i]=a,o[c.key]=n,o[a.key]=i}}return Fy=e,Fy}var Vy,H2;function BR(){if(H2)return Vy;H2=1;var e=PR();Vy=n;var t=()=>1;function n(r,o,a,c){return i(r,String(o),a||t,c||function(d){return r.outEdges(d)})}function i(r,o,a,c){var d={},m=new e,h,p,g=function(x){var v=x.v!==h?x.v:x.w,b=d[v],k=a(x),w=p.distance+k;if(k<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+x+" Weight: "+k);w<b.distance&&(b.distance=w,b.predecessor=h,m.decrease(v,w))};for(r.nodes().forEach(function(x){var v=x===o?0:Number.POSITIVE_INFINITY;d[x]={distance:v},m.add(x,v)});m.size()>0&&(h=m.removeMin(),p=d[h],p.distance!==Number.POSITIVE_INFINITY);)c(h).forEach(g);return d}return Vy}var Uy,F2;function dQ(){if(F2)return Uy;F2=1;var e=BR();Uy=t;function t(n,i,r){return n.nodes().reduce(function(o,a){return o[a]=e(n,a,i,r),o},{})}return Uy}var Gy,V2;function $R(){if(V2)return Gy;V2=1,Gy=e;function e(t){var n=0,i=[],r={},o=[];function a(c){var d=r[c]={onStack:!0,lowlink:n,index:n++};if(i.push(c),t.successors(c).forEach(function(p){Object.hasOwn(r,p)?r[p].onStack&&(d.lowlink=Math.min(d.lowlink,r[p].index)):(a(p),d.lowlink=Math.min(d.lowlink,r[p].lowlink))}),d.lowlink===d.index){var m=[],h;do h=i.pop(),r[h].onStack=!1,m.push(h);while(c!==h);o.push(m)}}return t.nodes().forEach(function(c){Object.hasOwn(r,c)||a(c)}),o}return Gy}var qy,U2;function fQ(){if(U2)return qy;U2=1;var e=$R();qy=t;function t(n){return e(n).filter(function(i){return i.length>1||i.length===1&&n.hasEdge(i[0],i[0])})}return qy}var Wy,G2;function mQ(){if(G2)return Wy;G2=1,Wy=t;var e=()=>1;function t(i,r,o){return n(i,r||e,o||function(a){return i.outEdges(a)})}function n(i,r,o){var a={},c=i.nodes();return c.forEach(function(d){a[d]={},a[d][d]={distance:0},c.forEach(function(m){d!==m&&(a[d][m]={distance:Number.POSITIVE_INFINITY})}),o(d).forEach(function(m){var h=m.v===d?m.w:m.v,p=r(m);a[d][h]={distance:p,predecessor:d}})}),c.forEach(function(d){var m=a[d];c.forEach(function(h){var p=a[h];c.forEach(function(g){var x=p[d],v=m[g],b=p[g],k=x.distance+v.distance;k<b.distance&&(b.distance=k,b.predecessor=v.predecessor)})})}),a}return Wy}var Yy,q2;function HR(){if(q2)return Yy;q2=1;function e(n){var i={},r={},o=[];function a(c){if(Object.hasOwn(r,c))throw new t;Object.hasOwn(i,c)||(r[c]=!0,i[c]=!0,n.predecessors(c).forEach(a),delete r[c],o.push(c))}if(n.sinks().forEach(a),Object.keys(i).length!==n.nodeCount())throw new t;return o}class t extends Error{constructor(){super(...arguments)}}return Yy=e,e.CycleException=t,Yy}var Xy,W2;function pQ(){if(W2)return Xy;W2=1;var e=HR();Xy=t;function t(n){try{e(n)}catch(i){if(i instanceof e.CycleException)return!1;throw i}return!0}return Xy}var Ky,Y2;function FR(){if(Y2)return Ky;Y2=1,Ky=e;function e(r,o,a){Array.isArray(o)||(o=[o]);var c=r.isDirected()?p=>r.successors(p):p=>r.neighbors(p),d=a==="post"?t:n,m=[],h={};return o.forEach(p=>{if(!r.hasNode(p))throw new Error("Graph does not have node: "+p);d(p,c,h,m)}),m}function t(r,o,a,c){for(var d=[[r,!1]];d.length>0;){var m=d.pop();m[1]?c.push(m[0]):Object.hasOwn(a,m[0])||(a[m[0]]=!0,d.push([m[0],!0]),i(o(m[0]),h=>d.push([h,!1])))}}function n(r,o,a,c){for(var d=[r];d.length>0;){var m=d.pop();Object.hasOwn(a,m)||(a[m]=!0,c.push(m),i(o(m),h=>d.push(h)))}}function i(r,o){for(var a=r.length;a--;)o(r[a],a,r);return r}return Ky}var Zy,X2;function hQ(){if(X2)return Zy;X2=1;var e=FR();Zy=t;function t(n,i){return e(n,i,"post")}return Zy}var Qy,K2;function gQ(){if(K2)return Qy;K2=1;var e=FR();Qy=t;function t(n,i){return e(n,i,"pre")}return Qy}var Jy,Z2;function yQ(){if(Z2)return Jy;Z2=1;var e=W0(),t=PR();Jy=n;function n(i,r){var o=new e,a={},c=new t,d;function m(p){var g=p.v===d?p.w:p.v,x=c.priority(g);if(x!==void 0){var v=r(p);v<x&&(a[g]=d,c.decrease(g,v))}}if(i.nodeCount()===0)return o;i.nodes().forEach(function(p){c.add(p,Number.POSITIVE_INFINITY),o.setNode(p)}),c.decrease(i.nodes()[0],0);for(var h=!1;c.size()>0;){if(d=c.removeMin(),Object.hasOwn(a,d))o.setEdge(d,a[d]);else{if(h)throw new Error("Input graph is not connected: "+i);h=!0}i.nodeEdges(d).forEach(m)}return o}return Jy}var ex,Q2;function xQ(){return Q2||(Q2=1,ex={components:uQ(),dijkstra:BR(),dijkstraAll:dQ(),findCycles:fQ(),floydWarshall:mQ(),isAcyclic:pQ(),postorder:hQ(),preorder:gQ(),prim:yQ(),tarjan:$R(),topsort:HR()}),ex}var tx,J2;function qr(){if(J2)return tx;J2=1;var e=lQ();return tx={Graph:e.Graph,json:cQ(),alg:xQ(),version:e.version},tx}var nx,ej;function vQ(){if(ej)return nx;ej=1;class e{constructor(){let r={};r._next=r._prev=r,this._sentinel=r}dequeue(){let r=this._sentinel,o=r._prev;if(o!==r)return t(o),o}enqueue(r){let o=this._sentinel;r._prev&&r._next&&t(r),r._next=o._next,o._next._prev=r,o._next=r,r._prev=o}toString(){let r=[],o=this._sentinel,a=o._prev;for(;a!==o;)r.push(JSON.stringify(a,n)),a=a._prev;return"["+r.join(", ")+"]"}}function t(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function n(i,r){if(i!=="_next"&&i!=="_prev")return r}return nx=e,nx}var ix,tj;function bQ(){if(tj)return ix;tj=1;let e=qr().Graph,t=vQ();ix=i;let n=()=>1;function i(m,h){if(m.nodeCount()<=1)return[];let p=a(m,h||n);return r(p.graph,p.buckets,p.zeroIdx).flatMap(x=>m.outEdges(x.v,x.w))}function r(m,h,p){let g=[],x=h[h.length-1],v=h[0],b;for(;m.nodeCount();){for(;b=v.dequeue();)o(m,h,p,b);for(;b=x.dequeue();)o(m,h,p,b);if(m.nodeCount()){for(let k=h.length-2;k>0;--k)if(b=h[k].dequeue(),b){g=g.concat(o(m,h,p,b,!0));break}}}return g}function o(m,h,p,g,x){let v=x?[]:void 0;return m.inEdges(g.v).forEach(b=>{let k=m.edge(b),w=m.node(b.v);x&&v.push({v:b.v,w:b.w}),w.out-=k,c(h,p,w)}),m.outEdges(g.v).forEach(b=>{let k=m.edge(b),w=b.w,S=m.node(w);S.in-=k,c(h,p,S)}),m.removeNode(g.v),v}function a(m,h){let p=new e,g=0,x=0;m.nodes().forEach(k=>{p.setNode(k,{v:k,in:0,out:0})}),m.edges().forEach(k=>{let w=p.edge(k.v,k.w)||0,S=h(k),j=w+S;p.setEdge(k.v,k.w,j),x=Math.max(x,p.node(k.v).out+=S),g=Math.max(g,p.node(k.w).in+=S)});let v=d(x+g+3).map(()=>new t),b=g+1;return p.nodes().forEach(k=>{c(v,b,p.node(k))}),{graph:p,buckets:v,zeroIdx:b}}function c(m,h,p){p.out?p.in?m[p.out-p.in+h].enqueue(p):m[m.length-1].enqueue(p):m[0].enqueue(p)}function d(m){const h=[];for(let p=0;p<m;p++)h.push(p);return h}return ix}var rx,nj;function ui(){if(nj)return rx;nj=1;let e=qr().Graph;rx={addBorderNode:h,addDummyNode:t,applyWithChunking:x,asNonCompoundGraph:i,buildLayerMatrix:c,intersectRect:a,mapValues:R,maxRank:v,normalizeRanks:d,notime:w,partition:b,pick:O,predecessorWeights:o,range:N,removeEmptyRanks:m,simplify:n,successorWeights:r,time:k,uniqueId:j,zipObject:D};function t(I,L,M,A){for(var B=A;I.hasNode(B);)B=j(A);return M.dummy=L,I.setNode(B,M),B}function n(I){let L=new e().setGraph(I.graph());return I.nodes().forEach(M=>L.setNode(M,I.node(M))),I.edges().forEach(M=>{let A=L.edge(M.v,M.w)||{weight:0,minlen:1},B=I.edge(M);L.setEdge(M.v,M.w,{weight:A.weight+B.weight,minlen:Math.max(A.minlen,B.minlen)})}),L}function i(I){let L=new e({multigraph:I.isMultigraph()}).setGraph(I.graph());return I.nodes().forEach(M=>{I.children(M).length||L.setNode(M,I.node(M))}),I.edges().forEach(M=>{L.setEdge(M,I.edge(M))}),L}function r(I){let L=I.nodes().map(M=>{let A={};return I.outEdges(M).forEach(B=>{A[B.w]=(A[B.w]||0)+I.edge(B).weight}),A});return D(I.nodes(),L)}function o(I){let L=I.nodes().map(M=>{let A={};return I.inEdges(M).forEach(B=>{A[B.v]=(A[B.v]||0)+I.edge(B).weight}),A});return D(I.nodes(),L)}function a(I,L){let M=I.x,A=I.y,B=L.x-M,W=L.y-A,P=I.width/2,G=I.height/2;if(!B&&!W)throw new Error("Not possible to find intersection inside of the rectangle");let $,q;return Math.abs(W)*P>Math.abs(B)*G?(W<0&&(G=-G),$=G*B/W,q=G):(B<0&&(P=-P),$=P,q=P*W/B),{x:M+$,y:A+q}}function c(I){let L=N(v(I)+1).map(()=>[]);return I.nodes().forEach(M=>{let A=I.node(M),B=A.rank;B!==void 0&&(L[B][A.order]=M)}),L}function d(I){let L=I.nodes().map(A=>{let B=I.node(A).rank;return B===void 0?Number.MAX_VALUE:B}),M=x(Math.min,L);I.nodes().forEach(A=>{let B=I.node(A);Object.hasOwn(B,"rank")&&(B.rank-=M)})}function m(I){let L=I.nodes().map(P=>I.node(P).rank),M=x(Math.min,L),A=[];I.nodes().forEach(P=>{let G=I.node(P).rank-M;A[G]||(A[G]=[]),A[G].push(P)});let B=0,W=I.graph().nodeRankFactor;Array.from(A).forEach((P,G)=>{P===void 0&&G%W!==0?--B:P!==void 0&&B&&P.forEach($=>I.node($).rank+=B)})}function h(I,L,M,A){let B={width:0,height:0};return arguments.length>=4&&(B.rank=M,B.order=A),t(I,"border",B,L)}function p(I,L=g){const M=[];for(let A=0;A<I.length;A+=L){const B=I.slice(A,A+L);M.push(B)}return M}const g=65535;function x(I,L){if(L.length>g){const M=p(L);return I.apply(null,M.map(A=>I.apply(null,A)))}else return I.apply(null,L)}function v(I){const M=I.nodes().map(A=>{let B=I.node(A).rank;return B===void 0?Number.MIN_VALUE:B});return x(Math.max,M)}function b(I,L){let M={lhs:[],rhs:[]};return I.forEach(A=>{L(A)?M.lhs.push(A):M.rhs.push(A)}),M}function k(I,L){let M=Date.now();try{return L()}finally{console.log(I+" time: "+(Date.now()-M)+"ms")}}function w(I,L){return L()}let S=0;function j(I){var L=++S;return I+(""+L)}function N(I,L,M=1){L==null&&(L=I,I=0);let A=W=>W<L;M<0&&(A=W=>L<W);const B=[];for(let W=I;A(W);W+=M)B.push(W);return B}function O(I,L){const M={};for(const A of L)I[A]!==void 0&&(M[A]=I[A]);return M}function R(I,L){let M=L;return typeof L=="string"&&(M=A=>A[L]),Object.entries(I).reduce((A,[B,W])=>(A[B]=M(W,B),A),{})}function D(I,L){return I.reduce((M,A,B)=>(M[A]=L[B],M),{})}return rx}var sx,ij;function _Q(){if(ij)return sx;ij=1;let e=bQ(),t=ui().uniqueId;sx={run:n,undo:r};function n(o){(o.graph().acyclicer==="greedy"?e(o,c(o)):i(o)).forEach(d=>{let m=o.edge(d);o.removeEdge(d),m.forwardName=d.name,m.reversed=!0,o.setEdge(d.w,d.v,m,t("rev"))});function c(d){return m=>d.edge(m).weight}}function i(o){let a=[],c={},d={};function m(h){Object.hasOwn(d,h)||(d[h]=!0,c[h]=!0,o.outEdges(h).forEach(p=>{Object.hasOwn(c,p.w)?a.push(p):m(p.w)}),delete c[h])}return o.nodes().forEach(m),a}function r(o){o.edges().forEach(a=>{let c=o.edge(a);if(c.reversed){o.removeEdge(a);let d=c.forwardName;delete c.reversed,delete c.forwardName,o.setEdge(a.w,a.v,c,d)}})}return sx}var ox,rj;function kQ(){if(rj)return ox;rj=1;let e=ui();ox={run:t,undo:i};function t(r){r.graph().dummyChains=[],r.edges().forEach(o=>n(r,o))}function n(r,o){let a=o.v,c=r.node(a).rank,d=o.w,m=r.node(d).rank,h=o.name,p=r.edge(o),g=p.labelRank;if(m===c+1)return;r.removeEdge(o);let x,v,b;for(b=0,++c;c<m;++b,++c)p.points=[],v={width:0,height:0,edgeLabel:p,edgeObj:o,rank:c},x=e.addDummyNode(r,"edge",v,"_d"),c===g&&(v.width=p.width,v.height=p.height,v.dummy="edge-label",v.labelpos=p.labelpos),r.setEdge(a,x,{weight:p.weight},h),b===0&&r.graph().dummyChains.push(x),a=x;r.setEdge(a,d,{weight:p.weight},h)}function i(r){r.graph().dummyChains.forEach(o=>{let a=r.node(o),c=a.edgeLabel,d;for(r.setEdge(a.edgeObj,c);a.dummy;)d=r.successors(o)[0],r.removeNode(o),c.points.push({x:a.x,y:a.y}),a.dummy==="edge-label"&&(c.x=a.x,c.y=a.y,c.width=a.width,c.height=a.height),o=d,a=r.node(o)})}return ox}var ax,sj;function Em(){if(sj)return ax;sj=1;const{applyWithChunking:e}=ui();ax={longestPath:t,slack:n};function t(i){var r={};function o(a){var c=i.node(a);if(Object.hasOwn(r,a))return c.rank;r[a]=!0;let d=i.outEdges(a).map(h=>h==null?Number.POSITIVE_INFINITY:o(h.w)-i.edge(h).minlen);var m=e(Math.min,d);return m===Number.POSITIVE_INFINITY&&(m=0),c.rank=m}i.sources().forEach(o)}function n(i,r){return i.node(r.w).rank-i.node(r.v).rank-i.edge(r).minlen}return ax}var lx,oj;function VR(){if(oj)return lx;oj=1;var e=qr().Graph,t=Em().slack;lx=n;function n(a){var c=new e({directed:!1}),d=a.nodes()[0],m=a.nodeCount();c.setNode(d,{});for(var h,p;i(c,a)<m;)h=r(c,a),p=c.hasNode(h.v)?t(a,h):-t(a,h),o(c,a,p);return c}function i(a,c){function d(m){c.nodeEdges(m).forEach(h=>{var p=h.v,g=m===p?h.w:p;!a.hasNode(g)&&!t(c,h)&&(a.setNode(g,{}),a.setEdge(m,g,{}),d(g))})}return a.nodes().forEach(d),a.nodeCount()}function r(a,c){return c.edges().reduce((m,h)=>{let p=Number.POSITIVE_INFINITY;return a.hasNode(h.v)!==a.hasNode(h.w)&&(p=t(c,h)),p<m[0]?[p,h]:m},[Number.POSITIVE_INFINITY,null])[1]}function o(a,c,d){a.nodes().forEach(m=>c.node(m).rank+=d)}return lx}var cx,aj;function SQ(){if(aj)return cx;aj=1;var e=VR(),t=Em().slack,n=Em().longestPath,i=qr().alg.preorder,r=qr().alg.postorder,o=ui().simplify;cx=a,a.initLowLimValues=h,a.initCutValues=c,a.calcCutValue=m,a.leaveEdge=g,a.enterEdge=x,a.exchangeEdges=v;function a(S){S=o(S),n(S);var j=e(S);h(j),c(j,S);for(var N,O;N=g(j);)O=x(j,S,N),v(j,S,N,O)}function c(S,j){var N=r(S,S.nodes());N=N.slice(0,N.length-1),N.forEach(O=>d(S,j,O))}function d(S,j,N){var O=S.node(N),R=O.parent;S.edge(N,R).cutvalue=m(S,j,N)}function m(S,j,N){var O=S.node(N),R=O.parent,D=!0,I=j.edge(N,R),L=0;return I||(D=!1,I=j.edge(R,N)),L=I.weight,j.nodeEdges(N).forEach(M=>{var A=M.v===N,B=A?M.w:M.v;if(B!==R){var W=A===D,P=j.edge(M).weight;if(L+=W?P:-P,k(S,N,B)){var G=S.edge(N,B).cutvalue;L+=W?-G:G}}}),L}function h(S,j){arguments.length<2&&(j=S.nodes()[0]),p(S,{},1,j)}function p(S,j,N,O,R){var D=N,I=S.node(O);return j[O]=!0,S.neighbors(O).forEach(L=>{Object.hasOwn(j,L)||(N=p(S,j,N,L,O))}),I.low=D,I.lim=N++,R?I.parent=R:delete I.parent,N}function g(S){return S.edges().find(j=>S.edge(j).cutvalue<0)}function x(S,j,N){var O=N.v,R=N.w;j.hasEdge(O,R)||(O=N.w,R=N.v);var D=S.node(O),I=S.node(R),L=D,M=!1;D.lim>I.lim&&(L=I,M=!0);var A=j.edges().filter(B=>M===w(S,S.node(B.v),L)&&M!==w(S,S.node(B.w),L));return A.reduce((B,W)=>t(j,W)<t(j,B)?W:B)}function v(S,j,N,O){var R=N.v,D=N.w;S.removeEdge(R,D),S.setEdge(O.v,O.w,{}),h(S),c(S,j),b(S,j)}function b(S,j){var N=S.nodes().find(R=>!j.node(R).parent),O=i(S,N);O=O.slice(1),O.forEach(R=>{var D=S.node(R).parent,I=j.edge(R,D),L=!1;I||(I=j.edge(D,R),L=!0),j.node(R).rank=j.node(D).rank+(L?I.minlen:-I.minlen)})}function k(S,j,N){return S.hasEdge(j,N)}function w(S,j,N){return N.low<=j.lim&&j.lim<=N.lim}return cx}var ux,lj;function wQ(){if(lj)return ux;lj=1;var e=Em(),t=e.longestPath,n=VR(),i=SQ();ux=r;function r(d){var m=d.graph().ranker;if(m instanceof Function)return m(d);switch(d.graph().ranker){case"network-simplex":c(d);break;case"tight-tree":a(d);break;case"longest-path":o(d);break;case"none":break;default:c(d)}}var o=t;function a(d){t(d),n(d)}function c(d){i(d)}return ux}var dx,cj;function CQ(){if(cj)return dx;cj=1,dx=e;function e(i){let r=n(i);i.graph().dummyChains.forEach(o=>{let a=i.node(o),c=a.edgeObj,d=t(i,r,c.v,c.w),m=d.path,h=d.lca,p=0,g=m[p],x=!0;for(;o!==c.w;){if(a=i.node(o),x){for(;(g=m[p])!==h&&i.node(g).maxRank<a.rank;)p++;g===h&&(x=!1)}if(!x){for(;p<m.length-1&&i.node(g=m[p+1]).minRank<=a.rank;)p++;g=m[p]}i.setParent(o,g),o=i.successors(o)[0]}})}function t(i,r,o,a){let c=[],d=[],m=Math.min(r[o].low,r[a].low),h=Math.max(r[o].lim,r[a].lim),p,g;p=o;do p=i.parent(p),c.push(p);while(p&&(r[p].low>m||h>r[p].lim));for(g=p,p=a;(p=i.parent(p))!==g;)d.push(p);return{path:c.concat(d.reverse()),lca:g}}function n(i){let r={},o=0;function a(c){let d=o;i.children(c).forEach(a),r[c]={low:d,lim:o++}}return i.children().forEach(a),r}return dx}var fx,uj;function jQ(){if(uj)return fx;uj=1;let e=ui();fx={run:t,cleanup:o};function t(a){let c=e.addDummyNode(a,"root",{},"_root"),d=i(a),m=Object.values(d),h=e.applyWithChunking(Math.max,m)-1,p=2*h+1;a.graph().nestingRoot=c,a.edges().forEach(x=>a.edge(x).minlen*=p);let g=r(a)+1;a.children().forEach(x=>n(a,c,p,g,h,d,x)),a.graph().nodeRankFactor=p}function n(a,c,d,m,h,p,g){let x=a.children(g);if(!x.length){g!==c&&a.setEdge(c,g,{weight:0,minlen:d});return}let v=e.addBorderNode(a,"_bt"),b=e.addBorderNode(a,"_bb"),k=a.node(g);a.setParent(v,g),k.borderTop=v,a.setParent(b,g),k.borderBottom=b,x.forEach(w=>{n(a,c,d,m,h,p,w);let S=a.node(w),j=S.borderTop?S.borderTop:w,N=S.borderBottom?S.borderBottom:w,O=S.borderTop?m:2*m,R=j!==N?1:h-p[g]+1;a.setEdge(v,j,{weight:O,minlen:R,nestingEdge:!0}),a.setEdge(N,b,{weight:O,minlen:R,nestingEdge:!0})}),a.parent(g)||a.setEdge(c,v,{weight:0,minlen:h+p[g]})}function i(a){var c={};function d(m,h){var p=a.children(m);p&&p.length&&p.forEach(g=>d(g,h+1)),c[m]=h}return a.children().forEach(m=>d(m,1)),c}function r(a){return a.edges().reduce((c,d)=>c+a.edge(d).weight,0)}function o(a){var c=a.graph();a.removeNode(c.nestingRoot),delete c.nestingRoot,a.edges().forEach(d=>{var m=a.edge(d);m.nestingEdge&&a.removeEdge(d)})}return fx}var mx,dj;function EQ(){if(dj)return mx;dj=1;let e=ui();mx=t;function t(i){function r(o){let a=i.children(o),c=i.node(o);if(a.length&&a.forEach(r),Object.hasOwn(c,"minRank")){c.borderLeft=[],c.borderRight=[];for(let d=c.minRank,m=c.maxRank+1;d<m;++d)n(i,"borderLeft","_bl",o,c,d),n(i,"borderRight","_br",o,c,d)}}i.children().forEach(r)}function n(i,r,o,a,c,d){let m={width:0,height:0,rank:d,borderType:r},h=c[r][d-1],p=e.addDummyNode(i,"border",m,o);c[r][d]=p,i.setParent(p,a),h&&i.setEdge(h,p,{weight:1})}return mx}var px,fj;function NQ(){if(fj)return px;fj=1,px={adjust:e,undo:t};function e(d){let m=d.graph().rankdir.toLowerCase();(m==="lr"||m==="rl")&&n(d)}function t(d){let m=d.graph().rankdir.toLowerCase();(m==="bt"||m==="rl")&&r(d),(m==="lr"||m==="rl")&&(a(d),n(d))}function n(d){d.nodes().forEach(m=>i(d.node(m))),d.edges().forEach(m=>i(d.edge(m)))}function i(d){let m=d.width;d.width=d.height,d.height=m}function r(d){d.nodes().forEach(m=>o(d.node(m))),d.edges().forEach(m=>{let h=d.edge(m);h.points.forEach(o),Object.hasOwn(h,"y")&&o(h)})}function o(d){d.y=-d.y}function a(d){d.nodes().forEach(m=>c(d.node(m))),d.edges().forEach(m=>{let h=d.edge(m);h.points.forEach(c),Object.hasOwn(h,"x")&&c(h)})}function c(d){let m=d.x;d.x=d.y,d.y=m}return px}var hx,mj;function IQ(){if(mj)return hx;mj=1;let e=ui();hx=t;function t(n){let i={},r=n.nodes().filter(h=>!n.children(h).length),o=r.map(h=>n.node(h).rank),a=e.applyWithChunking(Math.max,o),c=e.range(a+1).map(()=>[]);function d(h){if(i[h])return;i[h]=!0;let p=n.node(h);c[p.rank].push(h),n.successors(h).forEach(d)}return r.sort((h,p)=>n.node(h).rank-n.node(p).rank).forEach(d),c}return hx}var gx,pj;function TQ(){if(pj)return gx;pj=1;let e=ui().zipObject;gx=t;function t(i,r){let o=0;for(let a=1;a<r.length;++a)o+=n(i,r[a-1],r[a]);return o}function n(i,r,o){let a=e(o,o.map((g,x)=>x)),c=r.flatMap(g=>i.outEdges(g).map(x=>({pos:a[x.w],weight:i.edge(x).weight})).sort((x,v)=>x.pos-v.pos)),d=1;for(;d<o.length;)d<<=1;let m=2*d-1;d-=1;let h=new Array(m).fill(0),p=0;return c.forEach(g=>{let x=g.pos+d;h[x]+=g.weight;let v=0;for(;x>0;)x%2&&(v+=h[x+1]),x=x-1>>1,h[x]+=g.weight;p+=g.weight*v}),p}return gx}var yx,hj;function RQ(){if(hj)return yx;hj=1,yx=e;function e(t,n=[]){return n.map(i=>{let r=t.inEdges(i);if(r.length){let o=r.reduce((a,c)=>{let d=t.edge(c),m=t.node(c.v);return{sum:a.sum+d.weight*m.order,weight:a.weight+d.weight}},{sum:0,weight:0});return{v:i,barycenter:o.sum/o.weight,weight:o.weight}}else return{v:i}})}return yx}var xx,gj;function AQ(){if(gj)return xx;gj=1;let e=ui();xx=t;function t(r,o){let a={};r.forEach((d,m)=>{let h=a[d.v]={indegree:0,in:[],out:[],vs:[d.v],i:m};d.barycenter!==void 0&&(h.barycenter=d.barycenter,h.weight=d.weight)}),o.edges().forEach(d=>{let m=a[d.v],h=a[d.w];m!==void 0&&h!==void 0&&(h.indegree++,m.out.push(a[d.w]))});let c=Object.values(a).filter(d=>!d.indegree);return n(c)}function n(r){let o=[];function a(d){return m=>{m.merged||(m.barycenter===void 0||d.barycenter===void 0||m.barycenter>=d.barycenter)&&i(d,m)}}function c(d){return m=>{m.in.push(d),--m.indegree===0&&r.push(m)}}for(;r.length;){let d=r.pop();o.push(d),d.in.reverse().forEach(a(d)),d.out.forEach(c(d))}return o.filter(d=>!d.merged).map(d=>e.pick(d,["vs","i","barycenter","weight"]))}function i(r,o){let a=0,c=0;r.weight&&(a+=r.barycenter*r.weight,c+=r.weight),o.weight&&(a+=o.barycenter*o.weight,c+=o.weight),r.vs=o.vs.concat(r.vs),r.barycenter=a/c,r.weight=c,r.i=Math.min(o.i,r.i),o.merged=!0}return xx}var vx,yj;function MQ(){if(yj)return vx;yj=1;let e=ui();vx=t;function t(r,o){let a=e.partition(r,v=>Object.hasOwn(v,"barycenter")),c=a.lhs,d=a.rhs.sort((v,b)=>b.i-v.i),m=[],h=0,p=0,g=0;c.sort(i(!!o)),g=n(m,d,g),c.forEach(v=>{g+=v.vs.length,m.push(v.vs),h+=v.barycenter*v.weight,p+=v.weight,g=n(m,d,g)});let x={vs:m.flat(!0)};return p&&(x.barycenter=h/p,x.weight=p),x}function n(r,o,a){let c;for(;o.length&&(c=o[o.length-1]).i<=a;)o.pop(),r.push(c.vs),a++;return a}function i(r){return(o,a)=>o.barycenter<a.barycenter?-1:o.barycenter>a.barycenter?1:r?a.i-o.i:o.i-a.i}return vx}var bx,xj;function DQ(){if(xj)return bx;xj=1;let e=RQ(),t=AQ(),n=MQ();bx=i;function i(a,c,d,m){let h=a.children(c),p=a.node(c),g=p?p.borderLeft:void 0,x=p?p.borderRight:void 0,v={};g&&(h=h.filter(S=>S!==g&&S!==x));let b=e(a,h);b.forEach(S=>{if(a.children(S.v).length){let j=i(a,S.v,d,m);v[S.v]=j,Object.hasOwn(j,"barycenter")&&o(S,j)}});let k=t(b,d);r(k,v);let w=n(k,m);if(g&&(w.vs=[g,w.vs,x].flat(!0),a.predecessors(g).length)){let S=a.node(a.predecessors(g)[0]),j=a.node(a.predecessors(x)[0]);Object.hasOwn(w,"barycenter")||(w.barycenter=0,w.weight=0),w.barycenter=(w.barycenter*w.weight+S.order+j.order)/(w.weight+2),w.weight+=2}return w}function r(a,c){a.forEach(d=>{d.vs=d.vs.flatMap(m=>c[m]?c[m].vs:m)})}function o(a,c){a.barycenter!==void 0?(a.barycenter=(a.barycenter*a.weight+c.barycenter*c.weight)/(a.weight+c.weight),a.weight+=c.weight):(a.barycenter=c.barycenter,a.weight=c.weight)}return bx}var _x,vj;function OQ(){if(vj)return _x;vj=1;let e=qr().Graph,t=ui();_x=n;function n(r,o,a,c){c||(c=r.nodes());let d=i(r),m=new e({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(h=>r.node(h));return c.forEach(h=>{let p=r.node(h),g=r.parent(h);(p.rank===o||p.minRank<=o&&o<=p.maxRank)&&(m.setNode(h),m.setParent(h,g||d),r[a](h).forEach(x=>{let v=x.v===h?x.w:x.v,b=m.edge(v,h),k=b!==void 0?b.weight:0;m.setEdge(v,h,{weight:r.edge(x).weight+k})}),Object.hasOwn(p,"minRank")&&m.setNode(h,{borderLeft:p.borderLeft[o],borderRight:p.borderRight[o]}))}),m}function i(r){for(var o;r.hasNode(o=t.uniqueId("_root")););return o}return _x}var kx,bj;function LQ(){if(bj)return kx;bj=1,kx=e;function e(t,n,i){let r={},o;i.forEach(a=>{let c=t.parent(a),d,m;for(;c;){if(d=t.parent(c),d?(m=r[d],r[d]=c):(m=o,o=c),m&&m!==c){n.setEdge(m,c);return}c=d}})}return kx}var Sx,_j;function zQ(){if(_j)return Sx;_j=1;let e=IQ(),t=TQ(),n=DQ(),i=OQ(),r=LQ(),o=qr().Graph,a=ui();Sx=c;function c(p,g){if(g&&typeof g.customOrder=="function"){g.customOrder(p,c);return}let x=a.maxRank(p),v=d(p,a.range(1,x+1),"inEdges"),b=d(p,a.range(x-1,-1,-1),"outEdges"),k=e(p);if(h(p,k),g&&g.disableOptimalOrderHeuristic)return;let w=Number.POSITIVE_INFINITY,S;for(let j=0,N=0;N<4;++j,++N){m(j%2?v:b,j%4>=2),k=a.buildLayerMatrix(p);let O=t(p,k);O<w&&(N=0,S=Object.assign({},k),w=O)}h(p,S)}function d(p,g,x){const v=new Map,b=(k,w)=>{v.has(k)||v.set(k,[]),v.get(k).push(w)};for(const k of p.nodes()){const w=p.node(k);if(typeof w.rank=="number"&&b(w.rank,k),typeof w.minRank=="number"&&typeof w.maxRank=="number")for(let S=w.minRank;S<=w.maxRank;S++)S!==w.rank&&b(S,k)}return g.map(function(k){return i(p,k,x,v.get(k)||[])})}function m(p,g){let x=new o;p.forEach(function(v){let b=v.graph().root,k=n(v,b,x,g);k.vs.forEach((w,S)=>v.node(w).order=S),r(v,x,k.vs)})}function h(p,g){Object.values(g).forEach(x=>x.forEach((v,b)=>p.node(v).order=b))}return Sx}var wx,kj;function PQ(){if(kj)return wx;kj=1;let e=qr().Graph,t=ui();wx={positionX:x,findType1Conflicts:n,findType2Conflicts:i,addConflict:o,hasConflict:a,verticalAlignment:c,horizontalCompaction:d,alignCoordinates:p,findSmallestWidthAlignment:h,balance:g};function n(k,w){let S={};function j(N,O){let R=0,D=0,I=N.length,L=O[O.length-1];return O.forEach((M,A)=>{let B=r(k,M),W=B?k.node(B).order:I;(B||M===L)&&(O.slice(D,A+1).forEach(P=>{k.predecessors(P).forEach(G=>{let $=k.node(G),q=$.order;(q<R||W<q)&&!($.dummy&&k.node(P).dummy)&&o(S,G,P)})}),D=A+1,R=W)}),O}return w.length&&w.reduce(j),S}function i(k,w){let S={};function j(O,R,D,I,L){let M;t.range(R,D).forEach(A=>{M=O[A],k.node(M).dummy&&k.predecessors(M).forEach(B=>{let W=k.node(B);W.dummy&&(W.order<I||W.order>L)&&o(S,B,M)})})}function N(O,R){let D=-1,I,L=0;return R.forEach((M,A)=>{if(k.node(M).dummy==="border"){let B=k.predecessors(M);B.length&&(I=k.node(B[0]).order,j(R,L,A,D,I),L=A,D=I)}j(R,L,R.length,I,O.length)}),R}return w.length&&w.reduce(N),S}function r(k,w){if(k.node(w).dummy)return k.predecessors(w).find(S=>k.node(S).dummy)}function o(k,w,S){if(w>S){let N=w;w=S,S=N}let j=k[w];j||(k[w]=j={}),j[S]=!0}function a(k,w,S){if(w>S){let j=w;w=S,S=j}return!!k[w]&&Object.hasOwn(k[w],S)}function c(k,w,S,j){let N={},O={},R={};return w.forEach(D=>{D.forEach((I,L)=>{N[I]=I,O[I]=I,R[I]=L})}),w.forEach(D=>{let I=-1;D.forEach(L=>{let M=j(L);if(M.length){M=M.sort((B,W)=>R[B]-R[W]);let A=(M.length-1)/2;for(let B=Math.floor(A),W=Math.ceil(A);B<=W;++B){let P=M[B];O[L]===L&&I<R[P]&&!a(S,L,P)&&(O[P]=L,O[L]=N[L]=N[P],I=R[P])}}})}),{root:N,align:O}}function d(k,w,S,j,N){let O={},R=m(k,w,S,N),D=N?"borderLeft":"borderRight";function I(A,B){let W=R.nodes(),P=W.pop(),G={};for(;P;)G[P]?A(P):(G[P]=!0,W.push(P),W=W.concat(B(P))),P=W.pop()}function L(A){O[A]=R.inEdges(A).reduce((B,W)=>Math.max(B,O[W.v]+R.edge(W)),0)}function M(A){let B=R.outEdges(A).reduce((P,G)=>Math.min(P,O[G.w]-R.edge(G)),Number.POSITIVE_INFINITY),W=k.node(A);B!==Number.POSITIVE_INFINITY&&W.borderType!==D&&(O[A]=Math.max(O[A],B))}return I(L,R.predecessors.bind(R)),I(M,R.successors.bind(R)),Object.keys(j).forEach(A=>O[A]=O[S[A]]),O}function m(k,w,S,j){let N=new e,O=k.graph(),R=v(O.nodesep,O.edgesep,j);return w.forEach(D=>{let I;D.forEach(L=>{let M=S[L];if(N.setNode(M),I){var A=S[I],B=N.edge(A,M);N.setEdge(A,M,Math.max(R(k,L,I),B||0))}I=L})}),N}function h(k,w){return Object.values(w).reduce((S,j)=>{let N=Number.NEGATIVE_INFINITY,O=Number.POSITIVE_INFINITY;Object.entries(j).forEach(([D,I])=>{let L=b(k,D)/2;N=Math.max(I+L,N),O=Math.min(I-L,O)});const R=N-O;return R<S[0]&&(S=[R,j]),S},[Number.POSITIVE_INFINITY,null])[1]}function p(k,w){let S=Object.values(w),j=t.applyWithChunking(Math.min,S),N=t.applyWithChunking(Math.max,S);["u","d"].forEach(O=>{["l","r"].forEach(R=>{let D=O+R,I=k[D];if(I===w)return;let L=Object.values(I),M=j-t.applyWithChunking(Math.min,L);R!=="l"&&(M=N-t.applyWithChunking(Math.max,L)),M&&(k[D]=t.mapValues(I,A=>A+M))})})}function g(k,w){return t.mapValues(k.ul,(S,j)=>{if(w)return k[w.toLowerCase()][j];{let N=Object.values(k).map(O=>O[j]).sort((O,R)=>O-R);return(N[1]+N[2])/2}})}function x(k){let w=t.buildLayerMatrix(k),S=Object.assign(n(k,w),i(k,w)),j={},N;["u","d"].forEach(R=>{N=R==="u"?w:Object.values(w).reverse(),["l","r"].forEach(D=>{D==="r"&&(N=N.map(A=>Object.values(A).reverse()));let I=(R==="u"?k.predecessors:k.successors).bind(k),L=c(k,N,S,I),M=d(k,N,L.root,L.align,D==="r");D==="r"&&(M=t.mapValues(M,A=>-A)),j[R+D]=M})});let O=h(k,j);return p(j,O),g(j,k.graph().align)}function v(k,w,S){return(j,N,O)=>{let R=j.node(N),D=j.node(O),I=0,L;if(I+=R.width/2,Object.hasOwn(R,"labelpos"))switch(R.labelpos.toLowerCase()){case"l":L=-R.width/2;break;case"r":L=R.width/2;break}if(L&&(I+=S?L:-L),L=0,I+=(R.dummy?w:k)/2,I+=(D.dummy?w:k)/2,I+=D.width/2,Object.hasOwn(D,"labelpos"))switch(D.labelpos.toLowerCase()){case"l":L=D.width/2;break;case"r":L=-D.width/2;break}return L&&(I+=S?L:-L),L=0,I}}function b(k,w){return k.node(w).width}return wx}var Cx,Sj;function BQ(){if(Sj)return Cx;Sj=1;let e=ui(),t=PQ().positionX;Cx=n;function n(r){r=e.asNonCompoundGraph(r),i(r),Object.entries(t(r)).forEach(([o,a])=>r.node(o).x=a)}function i(r){let o=e.buildLayerMatrix(r),a=r.graph().ranksep,c=0;o.forEach(d=>{const m=d.reduce((h,p)=>{const g=r.node(p).height;return h>g?h:g},0);d.forEach(h=>r.node(h).y=c+m/2),c+=m+a})}return Cx}var jx,wj;function $Q(){if(wj)return jx;wj=1;let e=_Q(),t=kQ(),n=wQ(),i=ui().normalizeRanks,r=CQ(),o=ui().removeEmptyRanks,a=jQ(),c=EQ(),d=NQ(),m=zQ(),h=BQ(),p=ui(),g=qr().Graph;jx=x;function x(F,K){let ee=K&&K.debugTiming?p.time:p.notime;ee("layout",()=>{let te=ee(" buildLayoutGraph",()=>I(F));ee(" runLayout",()=>v(te,ee,K)),ee(" updateInputGraph",()=>b(F,te))})}function v(F,K,ee){K(" makeSpaceForEdgeLabels",()=>L(F)),K(" removeSelfEdges",()=>Y(F)),K(" acyclic",()=>e.run(F)),K(" nestingGraph.run",()=>a.run(F)),K(" rank",()=>n(p.asNonCompoundGraph(F))),K(" injectEdgeLabelProxies",()=>M(F)),K(" removeEmptyRanks",()=>o(F)),K(" nestingGraph.cleanup",()=>a.cleanup(F)),K(" normalizeRanks",()=>i(F)),K(" assignRankMinMax",()=>A(F)),K(" removeEdgeLabelProxies",()=>B(F)),K(" normalize.run",()=>t.run(F)),K(" parentDummyChains",()=>r(F)),K(" addBorderSegments",()=>c(F)),K(" order",()=>m(F,ee)),K(" insertSelfEdges",()=>Q(F)),K(" adjustCoordinateSystem",()=>d.adjust(F)),K(" position",()=>h(F)),K(" positionSelfEdges",()=>V(F)),K(" removeBorderNodes",()=>q(F)),K(" normalize.undo",()=>t.undo(F)),K(" fixupEdgeLabelCoords",()=>G(F)),K(" undoCoordinateSystem",()=>d.undo(F)),K(" translateGraph",()=>W(F)),K(" assignNodeIntersects",()=>P(F)),K(" reversePoints",()=>$(F)),K(" acyclic.undo",()=>e.undo(F))}function b(F,K){F.nodes().forEach(ee=>{let te=F.node(ee),se=K.node(ee);te&&(te.x=se.x,te.y=se.y,te.rank=se.rank,K.children(ee).length&&(te.width=se.width,te.height=se.height))}),F.edges().forEach(ee=>{let te=F.edge(ee),se=K.edge(ee);te.points=se.points,Object.hasOwn(se,"x")&&(te.x=se.x,te.y=se.y)}),F.graph().width=K.graph().width,F.graph().height=K.graph().height}let k=["nodesep","edgesep","ranksep","marginx","marginy"],w={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},S=["acyclicer","ranker","rankdir","align"],j=["width","height","rank"],N={width:0,height:0},O=["minlen","weight","width","height","labeloffset"],R={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},D=["labelpos"];function I(F){let K=new g({multigraph:!0,compound:!0}),ee=Z(F.graph());return K.setGraph(Object.assign({},w,U(ee,k),p.pick(ee,S))),F.nodes().forEach(te=>{let se=Z(F.node(te));const ae=U(se,j);Object.keys(N).forEach(ue=>{ae[ue]===void 0&&(ae[ue]=N[ue])}),K.setNode(te,ae),K.setParent(te,F.parent(te))}),F.edges().forEach(te=>{let se=Z(F.edge(te));K.setEdge(te,Object.assign({},R,U(se,O),p.pick(se,D)))}),K}function L(F){let K=F.graph();K.ranksep/=2,F.edges().forEach(ee=>{let te=F.edge(ee);te.minlen*=2,te.labelpos.toLowerCase()!=="c"&&(K.rankdir==="TB"||K.rankdir==="BT"?te.width+=te.labeloffset:te.height+=te.labeloffset)})}function M(F){F.edges().forEach(K=>{let ee=F.edge(K);if(ee.width&&ee.height){let te=F.node(K.v),ae={rank:(F.node(K.w).rank-te.rank)/2+te.rank,e:K};p.addDummyNode(F,"edge-proxy",ae,"_ep")}})}function A(F){let K=0;F.nodes().forEach(ee=>{let te=F.node(ee);te.borderTop&&(te.minRank=F.node(te.borderTop).rank,te.maxRank=F.node(te.borderBottom).rank,K=Math.max(K,te.maxRank))}),F.graph().maxRank=K}function B(F){F.nodes().forEach(K=>{let ee=F.node(K);ee.dummy==="edge-proxy"&&(F.edge(ee.e).labelRank=ee.rank,F.removeNode(K))})}function W(F){let K=Number.POSITIVE_INFINITY,ee=0,te=Number.POSITIVE_INFINITY,se=0,ae=F.graph(),ue=ae.marginx||0,ie=ae.marginy||0;function we(je){let Te=je.x,Ge=je.y,Ze=je.width,Ye=je.height;K=Math.min(K,Te-Ze/2),ee=Math.max(ee,Te+Ze/2),te=Math.min(te,Ge-Ye/2),se=Math.max(se,Ge+Ye/2)}F.nodes().forEach(je=>we(F.node(je))),F.edges().forEach(je=>{let Te=F.edge(je);Object.hasOwn(Te,"x")&&we(Te)}),K-=ue,te-=ie,F.nodes().forEach(je=>{let Te=F.node(je);Te.x-=K,Te.y-=te}),F.edges().forEach(je=>{let Te=F.edge(je);Te.points.forEach(Ge=>{Ge.x-=K,Ge.y-=te}),Object.hasOwn(Te,"x")&&(Te.x-=K),Object.hasOwn(Te,"y")&&(Te.y-=te)}),ae.width=ee-K+ue,ae.height=se-te+ie}function P(F){F.edges().forEach(K=>{let ee=F.edge(K),te=F.node(K.v),se=F.node(K.w),ae,ue;ee.points?(ae=ee.points[0],ue=ee.points[ee.points.length-1]):(ee.points=[],ae=se,ue=te),ee.points.unshift(p.intersectRect(te,ae)),ee.points.push(p.intersectRect(se,ue))})}function G(F){F.edges().forEach(K=>{let ee=F.edge(K);if(Object.hasOwn(ee,"x"))switch((ee.labelpos==="l"||ee.labelpos==="r")&&(ee.width-=ee.labeloffset),ee.labelpos){case"l":ee.x-=ee.width/2+ee.labeloffset;break;case"r":ee.x+=ee.width/2+ee.labeloffset;break}})}function $(F){F.edges().forEach(K=>{let ee=F.edge(K);ee.reversed&&ee.points.reverse()})}function q(F){F.nodes().forEach(K=>{if(F.children(K).length){let ee=F.node(K),te=F.node(ee.borderTop),se=F.node(ee.borderBottom),ae=F.node(ee.borderLeft[ee.borderLeft.length-1]),ue=F.node(ee.borderRight[ee.borderRight.length-1]);ee.width=Math.abs(ue.x-ae.x),ee.height=Math.abs(se.y-te.y),ee.x=ae.x+ee.width/2,ee.y=te.y+ee.height/2}}),F.nodes().forEach(K=>{F.node(K).dummy==="border"&&F.removeNode(K)})}function Y(F){F.edges().forEach(K=>{if(K.v===K.w){var ee=F.node(K.v);ee.selfEdges||(ee.selfEdges=[]),ee.selfEdges.push({e:K,label:F.edge(K)}),F.removeEdge(K)}})}function Q(F){var K=p.buildLayerMatrix(F);K.forEach(ee=>{var te=0;ee.forEach((se,ae)=>{var ue=F.node(se);ue.order=ae+te,(ue.selfEdges||[]).forEach(ie=>{p.addDummyNode(F,"selfedge",{width:ie.label.width,height:ie.label.height,rank:ue.rank,order:ae+ ++te,e:ie.e,label:ie.label},"_se")}),delete ue.selfEdges})})}function V(F){F.nodes().forEach(K=>{var ee=F.node(K);if(ee.dummy==="selfedge"){var te=F.node(ee.e.v),se=te.x+te.width/2,ae=te.y,ue=ee.x-se,ie=te.height/2;F.setEdge(ee.e,ee.label),F.removeNode(K),ee.label.points=[{x:se+2*ue/3,y:ae-ie},{x:se+5*ue/6,y:ae-ie},{x:se+ue,y:ae},{x:se+5*ue/6,y:ae+ie},{x:se+2*ue/3,y:ae+ie}],ee.label.x=ee.x,ee.label.y=ee.y}})}function U(F,K){return p.mapValues(p.pick(F,K),Number)}function Z(F){var K={};return F&&Object.entries(F).forEach(([ee,te])=>{typeof ee=="string"&&(ee=ee.toLowerCase()),K[ee]=te}),K}return jx}var Ex,Cj;function HQ(){if(Cj)return Ex;Cj=1;let e=ui(),t=qr().Graph;Ex={debugOrdering:n};function n(i){let r=e.buildLayerMatrix(i),o=new t({compound:!0,multigraph:!0}).setGraph({});return i.nodes().forEach(a=>{o.setNode(a,{label:a}),o.setParent(a,"layer"+i.node(a).rank)}),i.edges().forEach(a=>o.setEdge(a.v,a.w,{},a.name)),r.forEach((a,c)=>{let d="layer"+c;o.setNode(d,{rank:"same"}),a.reduce((m,h)=>(o.setEdge(m,h,{style:"invis"}),h))}),o}return Ex}var Nx,jj;function FQ(){return jj||(jj=1,Nx="1.1.8"),Nx}var Ix,Ej;function VQ(){return Ej||(Ej=1,Ix={graphlib:qr(),layout:$Q(),debug:HQ(),util:{time:ui().time,notime:ui().notime},version:FQ()}),Ix}var UQ=VQ();const Nj=da(UQ);function GQ(e,t,n={}){const i=new Nj.graphlib.Graph;i.setDefaultEdgeLabel(()=>({})),i.setGraph({rankdir:"TB",ranksep:60,nodesep:36,marginx:24,marginy:24});const r=n.nodeWidth??220,o=n.nodeHeight??80;return e.forEach(a=>i.setNode(a.id,{width:r,height:o})),t.forEach(a=>i.setEdge(a.source,a.target)),Nj.layout(i),e.map(a=>{const{x:c,y:d}=i.node(a.id);return{...a,position:{x:c-r/2,y:d-o/2}}})}const qQ={roleNode:oQ},WQ=C.forwardRef(function(t,n){return u.jsx(DR,{children:u.jsx(YQ,{...t,forwardedRef:n})})});function YQ({roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:i,onSelectRole:r,onReparent:o,readOnly:a,forwardedRef:c}){const d=C.useMemo(()=>{const M=new Map;for(const A of t){const B=A.role_ids?.length?A.role_ids:[A.role_id];for(const W of B){if(!W)continue;const P=M.get(W)??[];P.push(A),M.set(W,P)}}return M},[t]),m=C.useCallback(M=>n?n[M]??[]:(d.get(M)??[]).filter(A=>!A.is_default_employee).map(A=>A.name).filter(Boolean),[d,n]),[h,p]=C.useState(0),g=C.useMemo(()=>e.map(M=>M.role_id).sort().join("|"),[e]),x=C.useRef(g);C.useEffect(()=>{x.current!==g&&(x.current=g,p(M=>M+1))},[g]),C.useImperativeHandle(c,()=>({autoLayout:()=>p(M=>M+1)}),[]);const[v,b]=C.useState(null),[k,w]=C.useState({});C.useEffect(()=>{w({})},[h]);const S=C.useMemo(()=>{const M={id:"owner",type:"roleNode",position:{x:0,y:0},draggable:!1,data:{roleId:"owner",name:"You (Owner)",responsibility:"",icon:null,employeeCount:0,employeeNames:[],isOwner:!0,isSelected:!1,isDropTarget:!1}},A=e.map(G=>({id:G.role_id,type:"roleNode",position:{x:0,y:0},draggable:!0,data:{roleId:G.role_id,name:G.name,responsibility:G.responsibility,icon:G.icon??null,employeeCount:m(G.role_id).length,employeeNames:m(G.role_id),isOwner:!1,isSelected:!1,isDropTarget:!1}})),B=[M,...A],W=e.map(G=>({id:`e-${G.reports_to}-${G.role_id}`,source:G.reports_to,target:G.role_id,type:"smoothstep"}));return{nodes:GQ(B,W),edges:W}},[h,a]),j=C.useMemo(()=>S.nodes.map(M=>{if(M.id==="owner")return M;const A=e.find(W=>W.role_id===M.id);if(!A)return M;const B=k[M.id];return{...M,position:B??M.position,draggable:!0,data:{...M.data,name:A.name,responsibility:A.responsibility,icon:A.icon??null,employeeCount:m(A.role_id).length,employeeNames:m(A.role_id),isSelected:A.role_id===i,isDropTarget:A.role_id===v}}}),[S.nodes,e,d,m,i,v,a,k]),[N,O]=C.useState(j);C.useEffect(()=>{O(j)},[j]);const R=C.useCallback(M=>{O(A=>cR(M,A))},[]),D=C.useCallback((M,A)=>{if(a)return;const B=220,W=80,P={x:A.position.x+B/2,y:A.position.y+W/2},G=N.find($=>$.id===A.id?!1:P.x>=$.position.x&&P.x<=$.position.x+B&&P.y>=$.position.y&&P.y<=$.position.y+W);b(G?.id??null)},[N,a]),I=C.useCallback((M,A)=>{const B=v;b(null);const W=()=>w(P=>({...P,[A.id]:{x:A.position.x,y:A.position.y}}));if(a||!B||B===A.id||UR(e,A.id,B)){W();return}o(A.id,B),p(P=>P+1)},[v,e,a,o]),L=C.useCallback((M,A)=>{r(A.id==="owner"?null:A.id)},[r]);return u.jsx("div",{style:{width:"100%",height:"100%"},children:u.jsxs(RZ,{nodes:N,edges:S.edges,nodeTypes:qQ,onNodesChange:R,onNodeDrag:D,onNodeDragStop:I,onNodeClick:L,fitView:!0,fitViewOptions:{padding:.32,minZoom:.45,maxZoom:1.2},nodesConnectable:!1,edgesFocusable:!1,style:{width:"100%",height:"100%"},children:[u.jsx(LZ,{gap:28,size:1,color:"rgba(240, 237, 232, 0.10)"}),u.jsx(VZ,{showInteractive:!1}),u.jsx(nQ,{pannable:!0,nodeStrokeWidth:0,maskColor:"rgba(12, 17, 27, 0.6)"})]})})}function UR(e,t,n){const i=e.filter(r=>r.reports_to===t).map(r=>r.role_id);for(const r of i)if(r===n||UR(e,r,n))return!0;return!1}function XQ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:i,onAddRole:r,onUpdateRole:o,onDeleteRole:a,savedOrgsList:c,activeSavedOrg:d,currentOrgVersion:m,versionAtLoad:h,onSavedOrgsList:p,onSavedOrgSaveAs:g,onSavedOrgLoad:x,onSavedOrgDelete:v}){const[b,k]=C.useState("canvas"),[w,S]=C.useState(null),j=C.useRef(null),N=C.useMemo(()=>e.find(M=>M.role_id===w)??null,[e,w]),O=C.useCallback((M,A)=>{i&&o(M,{reports_to:A})},[o,i]),R=C.useCallback(()=>{j.current?.autoLayout()},[]),D=C.useCallback(()=>{if(!i)return;const M=new Set(e.map(W=>W.role_id));let A="new_role",B=1;for(;M.has(A);)B+=1,A=`new_role_${B}`;r(A,"New Role","","owner",null),S(A)},[e,r,i]),I=C.useCallback(()=>{if(!i||!N)return;const M=new Set(e.map(W=>W.role_id));let A=`${N.role_id}_copy`,B=1;for(;M.has(A);)B+=1,A=`${N.role_id}_copy_${B}`;r(A,`${N.name} (copy)`,N.responsibility,N.reports_to,N.icon),S(A)},[e,r,N,i]),L=C.useRef(null);return C.useEffect(()=>{const M=A=>{const B=A.target;if(!(B&&(B.tagName==="INPUT"||B.tagName==="TEXTAREA"||B.tagName==="SELECT"||B.isContentEditable))&&!(L.current&&!L.current.contains(B))){if(A.key==="Escape"&&w){S(null),A.preventDefault();return}if(A.key==="Delete"&&w&&i){a(w),S(null),A.preventDefault();return}if((A.metaKey||A.ctrlKey)&&A.key.toLowerCase()==="d"&&w&&i){I(),A.preventDefault();return}if(A.key.toLowerCase()==="f"&&b==="canvas"){R(),A.preventDefault();return}}};return window.addEventListener("keydown",M),()=>window.removeEventListener("keydown",M)},[w,i,b,a,R,I]),u.jsxs("div",{className:"se-container",ref:L,children:[u.jsxs("div",{className:"se-toolbar",children:[u.jsxs("div",{className:"se-view-switcher",role:"tablist","aria-label":"Editor view",children:[u.jsx("button",{role:"tab","aria-selected":b==="canvas",className:`se-view-btn${b==="canvas"?" is-active":""}`,onClick:()=>k("canvas"),children:"Canvas"}),u.jsx("button",{role:"tab","aria-selected":b==="table",className:`se-view-btn${b==="table"?" is-active":""}`,onClick:()=>k("table"),children:"Table"})]}),u.jsxs("div",{className:`se-toolbar-actions${i?"":" se-toolbar-actions--readonly"}`,children:[i?u.jsxs("div",{className:"se-saved-org-control",children:[u.jsx("span",{className:"se-toolbar-label",children:"Saved org"}),u.jsx(eU,{savedOrgs:c??null,activeName:d??null,isDirty:h!=null&&(m??0)!==h,onRefresh:p??(()=>{}),onSaveAs:g??(()=>{}),onLoad:x??(()=>{}),onDelete:v??(()=>{})})]}):u.jsx("span",{className:"se-readonly-pill",children:"Read-only corporate"}),u.jsx("div",{className:"se-toolbar-divider","aria-hidden":!0}),b==="canvas"&&u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:R,children:"Auto-layout"}),i&&u.jsx("button",{className:"btn btn-primary btn-sm",onClick:D,children:"+ Add role"})]})]}),u.jsxs("div",{className:"se-body",children:[b==="canvas"?u.jsx(WQ,{ref:j,roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:w,onSelectRole:S,onReparent:O,readOnly:!i}):u.jsx(tG,{roles:e,employees:t,selectedIds:w?[w]:[],onSelectRow:M=>S(M),onUpdateRole:o,onDeleteRole:a,readOnly:!i}),N&&u.jsx(sU,{role:N,allRoles:e,employees:t,readOnly:!i,onUpdateRole:o,onDeleteRole:M=>{a(M),S(null)},onClose:()=>S(null)})]})]})}const rs={rocket:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M13.13 22.19L11.5 18.36c3.07-1.39 5.51-3.94 6.69-7.07L22 13l-8.87 9.19zM5.64 12.5L2 10.87l9.19-8.87 1.63 3.81c-3.13 1.18-5.68 3.62-7.07 6.69zM14.54 9.46c-.78-.78-.78-2.05 0-2.83s2.05-.78 2.83 0 .78 2.05 0 2.83c-.79.78-2.05.78-2.83 0zM8 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z'/%3E%3C/svg%3E",people:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",check:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",addPerson:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",trash:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z'/%3E%3C/svg%3E",team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",deploy:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z'/%3E%3C/svg%3E",person:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function KQ({onComplete:e,onSwitchToTab:t}){const[n,i]=C.useState(1),[r,o]=C.useState([{name:"",resp:"",parent:"owner"}]),a=()=>o([...r,{name:"",resp:"",parent:"owner"}]),c=(g,x,v)=>{const b=[...r];b[g][x]=v,o(b)},d=g=>{r.length<=1||o(r.filter((x,v)=>v!==g))},m=r.filter(g=>g.name.trim()),h=m.map(g=>g.name.trim()).filter(Boolean),p=()=>{e(m.map(g=>({name:g.name.trim(),responsibility:g.resp.trim(),reportsTo:g.parent})))};return u.jsxs("div",{className:"qs-wizard",children:[u.jsxs("div",{className:"qs-header",children:[u.jsx("img",{src:rs.rocket,alt:"",className:"qs-header-icon"}),u.jsxs("div",{children:[u.jsx("h3",{className:"qs-header-title",children:"Build Your Team"}),u.jsxs("p",{className:"qs-header-sub",children:["Create an org team in a few steps, or ",u.jsx("button",{className:"qs-link-btn",onClick:()=>t("architecture"),children:"use a template"})]})]})]}),u.jsx("div",{className:"qs-progress",children:[{n:1,icon:rs.people,label:"Team Members"},{n:2,icon:rs.check,label:"Preview"}].map(g=>u.jsxs("div",{className:`qs-step${n===g.n?" qs-step-active":n>g.n?" qs-step-done":""}`,children:[u.jsx("img",{src:g.icon,alt:"",className:"qs-step-icon"}),u.jsx("span",{children:g.label})]},g.n))}),n===1&&u.jsxs("div",{className:"qs-panel",children:[u.jsx("h4",{children:"Who's on your team?"}),u.jsx("p",{className:"qs-hint",children:"Add each team member with their name and what they do."}),u.jsx("div",{className:"qs-members",children:r.map((g,x)=>u.jsxs("div",{className:"qs-member-row",children:[u.jsx("input",{className:"qs-member-name",value:g.name,placeholder:"Role name (e.g. Engineer)",onChange:v=>c(x,"name",v.target.value)}),u.jsx("input",{className:"qs-member-resp",value:g.resp,placeholder:"What do they do?",onChange:v=>c(x,"resp",v.target.value)}),u.jsxs("select",{className:"qs-member-parent",value:g.parent,onChange:v=>c(x,"parent",v.target.value),children:[u.jsx("option",{value:"owner",children:"Reports to you"}),h.filter(v=>v!==g.name.trim()).map(v=>u.jsx("option",{value:v,children:`Managed by ${v}`},v))]}),r.length>1&&u.jsx("button",{className:"qs-remove-btn",onClick:()=>d(x),title:"Remove",children:u.jsx("img",{src:rs.trash,alt:"",className:"qs-remove-icon"})})]},x))}),u.jsxs("button",{className:"qs-add-member",onClick:a,children:[u.jsx("img",{src:rs.addPerson,alt:"",className:"qs-add-icon"})," Add another member"]}),u.jsxs("div",{className:"qs-nav",children:[u.jsx("span",{}),u.jsx("button",{className:"oc-btn-primary",onClick:()=>i(2),disabled:m.length===0,children:"Next: Preview →"})]})]}),n===2&&u.jsxs("div",{className:"qs-panel",children:[u.jsx("h4",{children:"Your team at a glance"}),u.jsxs("div",{className:"qs-preview",children:[u.jsxs("div",{className:"qs-preview-section",children:[u.jsxs("h5",{children:["Team (",m.length," members)"]}),m.map((g,x)=>u.jsxs("div",{className:"qs-preview-member",children:[u.jsx("strong",{children:g.name}),g.resp&&u.jsxs("span",{className:"qs-preview-resp",children:[" — ",g.resp]}),u.jsx("span",{className:"qs-preview-parent",children:g.parent==="owner"?" (reports to you)":` (managed by ${g.parent})`})]},x))]}),u.jsxs("div",{className:"qs-preview-section",children:[u.jsx("h5",{children:"Actor Runtime"}),u.jsx("p",{children:"Seat routing and delegation will be derived from your reporting structure and any team seats you configure later."})]})]}),u.jsxs("div",{className:"qs-nav",children:[u.jsx("button",{className:"oc-btn-ghost",onClick:()=>i(1),children:"← Back"}),u.jsx("button",{className:"oc-btn-primary qs-create-btn",onClick:p,children:"Create Team"})]})]})]})}function ZQ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:i,onAddRole:r,onBulkAddRoles:o,onUpdateRole:a,onDeleteRole:c,onExport:d,onImportEmployee:m,onResetArchitecture:h,onSwitchToTab:p,savedOrgsList:g,activeSavedOrg:x,currentOrgVersion:v,versionAtLoad:b,onSavedOrgsList:k,onSavedOrgSaveAs:w,onSavedOrgLoad:S,onSavedOrgDelete:j}){const[N,O]=C.useState(!1),[R,D]=C.useState(!1),[I,L]=C.useState(""),[M,A]=C.useState(""),[B,W]=C.useState(""),[P,G]=C.useState("1.0.0"),$=C.useMemo(()=>{const K=new Map;for(const ee of t){const te=ee.role_ids?.length?ee.role_ids:[ee.role_id];for(const se of te){if(!se)continue;const ae=K.get(se)||[];ae.push(ee),K.set(se,ae)}}return K},[t]),q=()=>{!I.trim()||!M.trim()||(d({package_id:I.trim(),name:M.trim(),description:B,version:P}),D(!1),L(""),A(""),W(""),G("1.0.0"))},Y=C.useRef(null);C.useEffect(()=>{N&&e.length>0&&(O(!1),Y.current&&(clearTimeout(Y.current),Y.current=null))},[e.length,N]),C.useEffect(()=>{if(N)return Y.current=setTimeout(()=>O(!1),1e4),()=>{Y.current&&clearTimeout(Y.current)}},[N]);const Q=K=>{const ee=new Map,te=new Set,se=[];for(const ae of K){let ue=ae.name.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/^-+|-+$/g,"");if(!ue)continue;let ie=ue,we=2;for(;te.has(ie);)ie=`${ue}-${we++}`;te.add(ie),ee.set(ae.name,ie);const je=ae.reportsTo==="owner"?"owner":ee.get(ae.reportsTo)||"owner";se.push({role_id:ie,name:ae.name,responsibility:ae.responsibility,reports_to:je})}if(se.length!==0)if(o)O(!0),o(se);else{for(const ae of se)r(ae.role_id,ae.name,ae.responsibility,ae.reports_to);O(!0)}},V=()=>{confirm("This will remove all org roles, employees, and work-item templates. Continue?")&&h?.()},U=C.useMemo(()=>{let K=0;for(const ee of e)($.get(ee.role_id)??[]).length>0&&(K+=1);return K},[e,$]),Z=C.useMemo(()=>t.filter(K=>K.linked_agent_id).length,[t]),F=Math.max(0,e.length-U);return i&&e.length===0?u.jsx("div",{className:"team-view",children:N?u.jsx("div",{className:"qs-wizard",children:u.jsxs("div",{className:"qs-loading",children:[u.jsx("span",{className:"spinner-inline"})," Setting up your team..."]})}):u.jsx(KQ,{onComplete:Q,onSwitchToTab:p})}):u.jsxs("div",{className:"team-view",children:[u.jsxs("div",{className:`team-command-bar${i?" team-command-bar--editable":" team-command-bar--readonly"}`,children:[u.jsxs("div",{className:"team-command-copy",children:[u.jsx("span",{className:"team-command-eyebrow",children:i?"Saved org workspace":"Corporate baseline"}),u.jsx("span",{className:"team-command-title",children:i?"Editable company architecture":"Built-in company architecture"})]}),u.jsxs("div",{className:"team-command-metrics",children:[u.jsxs("span",{children:[u.jsx("b",{children:U})," staffed roles"]}),u.jsxs("span",{children:[u.jsx("b",{children:F})," vacant"]}),u.jsxs("span",{children:[u.jsx("b",{children:Z})," in office"]})]}),i&&u.jsxs("div",{className:"team-command-actions",children:[u.jsxs("button",{className:"myorg-inline-btn",onClick:()=>p("employees"),children:[u.jsx("img",{src:rs.addPerson,alt:"",className:"myorg-inline-icon"})," Hire Talent"]}),u.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>D(!0),children:"Export Package"}),h&&u.jsxs("button",{className:"myorg-reset-btn",onClick:V,children:[u.jsx("img",{src:rs.trash,alt:"",className:"myorg-reset-icon"})," Reset"]})]})]}),!i&&u.jsx("div",{className:"team-readonly-strip",children:"Corporate is fixed and read-only; saved company architectures are edited separately."}),u.jsx(XQ,{roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:i,onAddRole:r,onUpdateRole:a,onDeleteRole:c,savedOrgsList:g??null,activeSavedOrg:x??null,currentOrgVersion:v??0,versionAtLoad:b??null,onSavedOrgsList:k,onSavedOrgSaveAs:w,onSavedOrgLoad:S,onSavedOrgDelete:j}),R&&u.jsxs("div",{className:"myorg-form",children:[u.jsx("h4",{className:"myorg-form-title",children:"Export as .opcpkg"}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Package ID"}),u.jsx("input",{value:I,onChange:K=>L(K.target.value),placeholder:"my-architecture"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Name"}),u.jsx("input",{value:M,onChange:K=>A(K.target.value),placeholder:"My Architecture"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Description"}),u.jsx("input",{value:B,onChange:K=>W(K.target.value),placeholder:"An org team structure"})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Version"}),u.jsx("input",{value:P,onChange:K=>G(K.target.value)})]}),u.jsxs("div",{className:"oc-form-actions",children:[u.jsx("button",{className:"oc-btn-primary",onClick:q,disabled:!I.trim()||!M.trim(),children:"Export"}),u.jsx("button",{className:"oc-btn-ghost",onClick:()=>D(!1),children:"Cancel"})]})]}),u.jsxs("div",{className:"myorg-section",children:[u.jsxs("div",{className:"myorg-section-header",children:[u.jsx("img",{src:rs.team,alt:"",className:"myorg-section-icon"}),u.jsx("h3",{className:"myorg-section-title",children:"Team Roster"}),u.jsxs("span",{className:"myorg-section-count",children:[t.length," members"]}),u.jsx("span",{className:"myorg-section-spacer"}),u.jsxs("span",{className:"myorg-section-note",children:[U,"/",e.length," staffed"]})]}),u.jsx("div",{className:"team-roster-grid",children:e.map(K=>{const ee=$.get(K.role_id)||[];return u.jsxs("div",{className:"team-roster-card",children:[u.jsxs("div",{className:"team-roster-card-header",children:[u.jsx("img",{src:Vu(K.icon),alt:"",className:"team-roster-card-icon"}),u.jsx("span",{className:"team-roster-role-name",children:K.name}),u.jsx("span",{className:"team-roster-count",children:ee.length||"vacant"})]}),ee.length>0?ee.map(te=>u.jsxs("div",{className:"team-roster-emp",children:[u.jsx("img",{src:rs.person,alt:"",className:"team-roster-emp-avatar"}),u.jsxs("div",{className:"team-roster-emp-info",children:[u.jsx("span",{className:"team-roster-emp-name",children:te.name}),u.jsx("span",{className:`team-roster-seniority team-roster-seniority--${te.seniority}`,children:te.seniority})]}),te.linked_agent_id?u.jsx("span",{className:"team-roster-badge team-roster-badge--active",children:"In Office"}):m&&te.role_id?u.jsxs("button",{className:"team-roster-deploy-btn",onClick:()=>m(te.employee_id),title:"Add this employee to the office workspace",children:[u.jsx("img",{src:rs.deploy,alt:"",className:"team-roster-deploy-icon"})," Deploy"]}):null]},te.employee_id)):u.jsxs("div",{className:"team-roster-vacant",children:[u.jsx("span",{className:"team-roster-vacant-text",children:"No members yet"}),i&&u.jsx("button",{className:"team-roster-hire-btn",onClick:()=>p("employees"),children:"Hire"})]})]},K.role_id)})})]})]})}function up(e){if(e.adaptive&&typeof e.adaptive=="object")return e.adaptive;const t=e.metadata;if(t&&typeof t=="object"&&t.adaptive&&typeof t.adaptive=="object")return t.adaptive}function QQ(e){const t=up(e);return(Array.isArray(t?.signals)?t.signals:[]).filter(i=>i&&typeof i=="object").filter(i=>!!(i.required??!0)&&!i.satisfied).map(i=>String(i.name??"").trim()).filter(Boolean)}function JQ(e){const n=up(e)?.work_item_profile;return n&&typeof n=="object"?String(n.gate_owner_role_id??"").trim():""}function eJ(e){const t=up(e),n=typeof t?.confidence=="number"?t.confidence:void 0;return typeof n=="number"?`${Math.round(n*100)}%`:""}function tJ({roles:e,runtimeTeams:t,runtimeSeats:n,workItems:i,frontier:r,companyProfile:o,runtimePolicy:a,finalDeciderRoleId:c,topLevelRoleIds:d,readOnly:m=!1,onUpdateOrgStrategy:h,onUpdateRuntimePolicy:p}){const g=e.filter(k=>(d??[]).includes(k.role_id)),x=c||(g.length===1?g[0]?.role_id:""),v=g.length>1&&!x,b=new Map(e.map(k=>[k.role_id,k.name]));return u.jsxs("div",{className:"wfe-container",children:[u.jsxs("div",{className:"wfe-header",children:[u.jsx("h3",{className:"wfe-title",children:"Actor Runtime"}),u.jsx("span",{className:"wfe-profile-badge",children:o})]}),u.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:u.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Final decider"}),u.jsxs("select",{value:x,disabled:m,onChange:k=>{m||h?.({final_decider_role_id:k.target.value||null})},children:[u.jsx("option",{value:"",children:g.length>1?"Select top-level role":"Auto-select only top-level role"}),g.map(k=>u.jsx("option",{value:k.role_id,children:k.name},k.role_id))]})]}),u.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Runtime wakeups, delegation, approvals, and recovery are seat-scoped."}),v&&u.jsx("div",{className:"org-toast org-toast--warn",style:{margin:"0 0 8px"},children:"Multiple top-level roles exist. Select one final decider before company execution can start."})]})}),t.length||n.length||i.length?u.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:u.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Runtime"}),u.jsxs("div",{children:[r.status||"running",r.run_id?` (${r.run_id.slice(0,8)})`:""]})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Frontier"}),u.jsxs("div",{children:[r.running_count??0," running, ",r.ready_count??0," ready, ",r.blocked_count??0," blocked, ",r.waiting_count??0," waiting"]})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Teams"}),u.jsx("div",{children:t.length})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Seats"}),u.jsx("div",{children:n.length})]}),u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Work items"}),u.jsx("div",{children:i.length})]}),i.length>0&&u.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:i.slice(0,6).map(k=>{const w=up(k),S=typeof w?.normalized_state=="string"?w.normalized_state:"",j=typeof w?.blocked_reason=="string"?w.blocked_reason:k.blocked_reason??"",N=JQ(k),O=QQ(k),R=eJ(k),D=[j?`waiting ${j}`:"",N?`gate ${b.get(N)??N}`:"",O.length?`signals ${O.join(", ")}`:"",R?`confidence ${R}`:"",S==="invalidated"?"invalidated":""].filter(Boolean);return u.jsxs("div",{style:{marginBottom:6},children:[u.jsxs("div",{children:[b.get(k.role_id)??k.role_id,": ",k.title," [",k.phase,"]",k.kanban_column&&u.jsxs("span",{style:{opacity:.5},children:[" · ",k.kanban_column]}),k.batch_id&&u.jsxs("span",{style:{opacity:.5},children:[" batch:",k.batch_id]}),S&&S!==k.phase&&u.jsxs("span",{style:{opacity:.7},children:[" state:",S]})]}),D.length>0&&u.jsx("div",{style:{marginLeft:12,opacity:.85},children:D.join(" • ")})]},k.work_item_id)})})]})}):null]})}function nJ({pkg:e,onUninstall:t,uninstallingId:n}){const i=n===e.package_id;return u.jsxs("div",{className:"pkg-card",children:[u.jsxs("div",{className:"pkg-card-header",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z'/%3E%3C/svg%3E",alt:"package",className:"pkg-card-icon"}),u.jsxs("div",{className:"pkg-card-title-wrap",children:[u.jsx("span",{className:"pkg-card-name",children:e.name||e.package_id}),u.jsxs("span",{className:"pkg-card-version",children:["v",e.version]})]})]}),u.jsxs("div",{className:"pkg-card-stats",children:[u.jsxs("span",{className:"pkg-card-stat",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E",alt:"roles",className:"pkg-stat-icon"}),e.role_ids.length," roles"]}),u.jsxs("span",{className:"pkg-card-stat",children:[u.jsx("img",{src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3E%3C/svg%3E",alt:"templates",className:"pkg-stat-icon"}),e.template_ids.length," templates"]})]}),e.installed_at&&u.jsxs("div",{className:"pkg-card-date",children:["Installed ",new Date(e.installed_at).toLocaleDateString()]}),t&&u.jsx("div",{className:"pkg-card-actions",children:u.jsx("button",{className:"pkg-btn pkg-btn-danger",disabled:i,onClick:r=>{r.stopPropagation(),t(e.package_id)},children:i?"Removing...":"Uninstall"})})]})}function Tx({icon:e,title:t,count:n,extra:i,children:r,defaultExpanded:o=!1}){const[a,c]=C.useState(o);return u.jsxs("div",{className:"myorg-collapsible",children:[u.jsxs("button",{className:"myorg-collapsible-toggle",onClick:()=>c(!a),children:[u.jsx("span",{className:"myorg-toggle-icon",children:a?"▾":"▸"}),u.jsx("img",{src:e,alt:"",className:"myorg-section-icon"}),u.jsx("span",{className:"myorg-collapsible-title",children:t}),u.jsx("span",{className:"myorg-collapsible-count",children:n}),i&&u.jsx("span",{className:"myorg-collapsible-extra",onClick:d=>d.stopPropagation(),children:i})]}),a&&u.jsx("div",{className:"myorg-collapsible-body",children:r})]})}const is={search:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14z'/%3E%3C/svg%3E",arch:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",packages:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z'/%3E%3C/svg%3E",channels:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z'/%3E%3C/svg%3E",reorg:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z'/%3E%3C/svg%3E",importPkg:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z'/%3E%3C/svg%3E",arrow:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z'/%3E%3C/svg%3E",gateReview:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23f59e0b' d='M12 2L4 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-3zm-2 16l-4-4 1.41-1.41L10 15.17l6.59-6.59L18 10l-8 8z'/%3E%3C/svg%3E",gateApproval:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",gateHold:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ef4444' d='M6 19h4V5H6v14zm8-14v14h4V5h-4z'/%3E%3C/svg%3E"},Tv={pipeline:"Pipeline",hub_spoke:"Hub & Spoke",review_loop:"Review Loop",hierarchical:"Hierarchical",flat:"Flat Team"};function iJ({presets:e,installedIds:t,previewData:n,applyingPresetId:i,readOnly:r,onPreview:o,onApplyPreset:a,onClearPreview:c,installedPackages:d,channels:m,reorgProposals:h,isCustomMode:p,onReorgDecide:g,onMarketInstall:x,onMarketUninstall:v}){const[b,k]=C.useState(""),[w,S]=C.useState(null),[j,N]=C.useState(null),[O,R]=C.useState(!1),[D,I]=C.useState(""),[L,M]=C.useState(null),A=C.useMemo(()=>{const $=new Set;for(const q of e)q.category&&$.add(q.category);return Array.from($).sort()},[e]),B=C.useMemo(()=>{const $=new Set;for(const q of e)q.collaboration_pattern&&$.add(q.collaboration_pattern);return Array.from($).sort()},[e]),W=C.useMemo(()=>{let $=e;if(w&&($=$.filter(q=>q.category===w)),j&&($=$.filter(q=>q.collaboration_pattern===j)),b.trim()){const q=b.trim().toLowerCase();$=$.filter(Y=>Y.name.toLowerCase().includes(q)||Y.description.toLowerCase().includes(q)||Y.tags.some(Q=>Q.toLowerCase().includes(q))||(Tv[Y.collaboration_pattern]||"").toLowerCase().includes(q))}return $},[e,w,j,b]),P=()=>{D.trim()&&(x(D.trim(),"namespace"),R(!1),I(""))},G=$=>{confirm("Uninstall this package? Roles and work-item templates from this package will be removed.")&&(M($),v($),setTimeout(()=>M(null),3e3))};return u.jsxs("div",{className:"mkt-container","data-testid":"architecture-marketplace",children:[u.jsxs("div",{className:"mkt-toolbar",children:[u.jsxs("div",{className:"mkt-search-wrap",children:[u.jsx("img",{src:is.search,alt:"",className:"mkt-search-icon"}),u.jsx("input",{className:"mkt-search",placeholder:"Search architectures...",value:b,onChange:$=>k($.target.value)})]}),u.jsxs("span",{className:"mkt-count",children:[W.length," architectures"]})]}),u.jsxs("div",{className:"mkt-filters",children:[A.length>0&&u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill${w?"":" active"}`,onClick:()=>S(null),children:"All"}),A.map($=>u.jsx("button",{className:`mkt-pill${w===$?" active":""}`,onClick:()=>S(w===$?null:$),children:$},$))]}),B.length>0&&u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill mkt-pill-pattern${j?"":" active"}`,onClick:()=>N(null),children:"All Patterns"}),B.map($=>u.jsx("button",{className:`mkt-pill mkt-pill-pattern${j===$?" active":""}`,onClick:()=>N(j===$?null:$),children:Tv[$]||$},$))]})]}),W.length>0?u.jsxs("div",{className:"mkt-section",children:[u.jsxs("div",{className:"mkt-section-header",children:[u.jsx("img",{src:is.arch,alt:"",className:"mkt-section-icon"}),u.jsx("h3",{className:"mkt-section-title",children:"Architecture Blueprints"}),u.jsx("span",{className:"mkt-section-count",children:W.length})]}),u.jsx("div",{className:"mkt-arch-grid",children:W.map($=>u.jsx(rJ,{preset:$,isInstalled:t.has($.id),isApplying:i===$.id,readOnly:r,onPreview:()=>o($.id),onApply:()=>a($.id,"namespace")},$.id))})]}):u.jsx("div",{className:"mkt-empty",children:u.jsx("p",{children:"No architectures match your search."})}),u.jsxs(Tx,{icon:is.packages,title:"Installed Packages",count:d.length,extra:p?u.jsxs("button",{className:"myorg-inline-btn",onClick:()=>R(!O),children:[u.jsx("img",{src:is.importPkg,alt:"",className:"myorg-inline-icon"})," Import"]}):void 0,children:[p&&O&&u.jsxs("div",{className:"myorg-form",children:[u.jsxs("div",{className:"oc-form-row",children:[u.jsx("label",{children:"Path"}),u.jsx("input",{value:D,onChange:$=>I($.target.value),placeholder:"/path/to/package.opcpkg"})]}),u.jsxs("div",{className:"oc-form-actions",children:[u.jsx("button",{className:"oc-btn-primary",onClick:P,disabled:!D.trim(),children:"Install"}),u.jsx("button",{className:"oc-btn-ghost",onClick:()=>R(!1),children:"Cancel"})]})]}),d.length>0?u.jsx("div",{className:"pkg-grid",children:d.map($=>u.jsx(nJ,{pkg:$,onUninstall:p?G:void 0,uninstallingId:L},$.package_id))}):u.jsx("div",{className:"myorg-empty-hint",children:"No packages installed."})]}),u.jsx(Tx,{icon:is.channels,title:"Channels & Connectors",count:m.length,children:m.length>0?u.jsx("div",{className:"org-channels-grid",children:m.map($=>u.jsxs("div",{className:`org-channel-card${$.running?" org-ch-running":""}${$.enabled?"":" org-ch-disabled"}`,children:[u.jsxs("div",{className:"org-ch-header",children:[u.jsx("span",{className:`org-ch-dot${$.running?" running":$.ready?" ready":$.configured?" configured":""}`}),u.jsx("span",{className:"org-ch-name",children:$.name})]}),u.jsxs("div",{className:"org-ch-status-row",children:[$.enabled&&u.jsx("span",{className:"org-ch-badge org-ch-enabled",children:"enabled"}),$.running&&u.jsx("span",{className:"org-ch-badge org-ch-running-badge",children:"running"}),!$.enabled&&u.jsx("span",{className:"org-ch-badge org-ch-off",children:"disabled"})]})]},$.name))}):u.jsx("div",{className:"myorg-empty-hint",children:"No channels configured."})}),h.length>0&&u.jsx(Tx,{icon:is.reorg,title:"Reorg Proposals",count:h.length,children:u.jsx("div",{className:"org-reorg-list",children:h.map($=>{const q=$.status==="proposed";return u.jsxs("div",{className:`org-reorg-card org-reorg-${$.status}`,children:[u.jsxs("div",{className:"org-reorg-header",children:[u.jsx("span",{className:"org-reorg-title",children:$.title||$.summary||"Untitled"}),u.jsx("span",{className:"org-reorg-status",children:$.status})]}),$.summary&&u.jsx("div",{className:"org-reorg-summary",children:$.summary}),q&&p&&u.jsxs("div",{className:"org-reorg-actions",children:[u.jsx("button",{className:"org-reorg-approve",onClick:()=>g($.proposal_id,!0),children:"Approve"}),u.jsx("button",{className:"org-reorg-deny",onClick:()=>g($.proposal_id,!1),children:"Deny"})]})]},$.proposal_id)})})}),n&&u.jsx(sJ,{data:n,isInstalled:t.has(n.id),isApplying:i===n.id,onApply:()=>a(n.id,"namespace"),onClose:c})]})}function rJ({preset:e,isInstalled:t,isApplying:n,readOnly:i,onPreview:r,onApply:o}){const a=Tv[e.collaboration_pattern]||e.collaboration_pattern;return u.jsxs("div",{className:"mkt-arch-card",style:{borderLeftColor:e.color||"var(--accent)"},onClick:r,children:[u.jsxs("div",{className:"mkt-arch-header",children:[u.jsx("span",{className:"mkt-arch-emoji",children:e.emoji}),u.jsxs("div",{className:"mkt-arch-title-wrap",children:[u.jsx("span",{className:"mkt-arch-name",children:e.name}),u.jsxs("div",{className:"mkt-arch-badges",children:[u.jsx("span",{className:"mkt-arch-category",children:e.category}),e.collaboration_pattern&&u.jsx("span",{className:"mkt-arch-pattern",children:a})]})]})]}),e.dag_summary&&u.jsx("div",{className:"mkt-arch-dag-summary",children:e.dag_summary}),u.jsx("div",{className:"mkt-arch-desc",children:e.description}),u.jsxs("div",{className:"mkt-arch-stats",children:[u.jsxs("span",{className:"mkt-arch-stat",children:[e.roles_count," roles"]}),u.jsxs("span",{className:"mkt-arch-stat",children:[e.work_item_templates_count," templates"]}),e.gates_count>0&&u.jsxs("span",{className:"mkt-arch-stat",children:[e.gates_count," checkpoints"]}),e.team_size&&u.jsxs("span",{className:"mkt-arch-stat",children:[e.team_size," people"]})]}),e.tags.length>0&&u.jsx("div",{className:"mkt-arch-tags",children:e.tags.slice(0,4).map(c=>u.jsx("span",{className:"mkt-tag",children:c},c))}),u.jsxs("div",{className:"mkt-arch-actions",children:[t?u.jsx("span",{className:"mkt-installed-badge",children:"Installed"}):i?null:u.jsx("button",{className:"mkt-btn mkt-btn-primary mkt-btn-sm",disabled:n,onClick:c=>{c.stopPropagation(),o()},children:n?"Applying...":"Use This"}),u.jsx("button",{className:"mkt-btn mkt-btn-ghost mkt-btn-sm",onClick:c=>{c.stopPropagation(),r()},children:"Preview"})]})]})}function sJ({data:e,isInstalled:t,isApplying:n,onApply:i,onClose:r}){return u.jsx("div",{className:"mkt-modal-overlay",onClick:r,children:u.jsxs("div",{className:"mkt-modal",onClick:o=>o.stopPropagation(),children:[u.jsxs("div",{className:"mkt-modal-header",style:{borderBottomColor:e.color||"var(--border)"},children:[u.jsx("span",{className:"mkt-modal-emoji",children:e.emoji}),u.jsxs("div",{children:[u.jsx("h2",{className:"mkt-modal-name",children:e.name}),u.jsx("span",{className:"mkt-modal-category",children:e.category})]}),u.jsx("button",{className:"mkt-modal-close",onClick:r,children:"×"})]}),u.jsxs("div",{className:"mkt-modal-body",children:[u.jsx("p",{className:"mkt-modal-desc",children:e.description}),e.tags.length>0&&u.jsxs("div",{className:"mkt-modal-section",children:[u.jsx("div",{className:"mkt-modal-label",children:"Tags"}),u.jsx("div",{className:"mkt-modal-tags",children:e.tags.map(o=>u.jsx("span",{className:"mkt-tag",children:o},o))})]}),u.jsxs("div",{className:"mkt-modal-section",children:[u.jsxs("div",{className:"mkt-modal-label",children:["Roles (",e.roles.length,")"]}),u.jsx("div",{className:"mkt-role-list",children:e.roles.map(o=>u.jsxs("div",{className:"mkt-role-item",children:[u.jsxs("div",{className:"mkt-role-name",children:[o.name," ",u.jsx("code",{children:o.id})]}),u.jsx("div",{className:"mkt-role-resp",children:o.responsibility}),u.jsxs("div",{className:"mkt-role-meta",children:["reports to: ",u.jsx("code",{children:o.reports_to}),o.can_spawn&&o.can_spawn.length>0&&u.jsxs(u.Fragment,{children:[" · spawns: ",o.can_spawn.map(a=>u.jsx("code",{children:a},a))]})]})]},o.id))})]}),u.jsxs("div",{className:"mkt-modal-section",children:[u.jsxs("div",{className:"mkt-modal-label",children:["Work item templates (",e.work_item_templates.length," templates)"]}),u.jsx("div",{className:"mkt-dag-wrap",children:u.jsx(oJ,{templates:e.work_item_templates})})]})]}),u.jsx("div",{className:"mkt-modal-footer",children:t?u.jsx("span",{className:"mkt-installed-badge",children:"Already Installed"}):u.jsx("button",{className:"mkt-btn mkt-btn-primary",disabled:n,onClick:i,children:n?"Applying...":"Use This Architecture"})})]})})}function oJ({templates:e}){const t=[];let n="__init__",i=[];for(const r of e)r.parallel_group!==n?(i.length>0&&t.push({group:n,templates:i}),n=r.parallel_group,i=[r]):i.push(r);return i.length>0&&t.push({group:n,templates:i}),u.jsx("div",{className:"org-dag",children:t.map((r,o)=>u.jsxs("div",{className:"org-dag-group-wrap",children:[o>0&&u.jsx("div",{className:"org-dag-arrow",children:u.jsx("img",{src:is.arrow,alt:"→",className:"org-dag-arrow-icon"})}),u.jsxs("div",{className:`org-dag-group${r.templates.length>1?" org-dag-parallel":""}`,children:[r.templates.length>1&&u.jsx("div",{className:"org-dag-parallel-label",children:"parallel"}),r.templates.map(a=>u.jsxs("div",{className:"org-dag-node",children:[u.jsxs("div",{className:"org-dag-node-header",children:[u.jsx("span",{className:"org-dag-node-title",children:a.title}),u.jsx("span",{className:"org-dag-node-role",children:a.role_id})]}),u.jsx("div",{className:"org-dag-node-id",children:a.id}),a.gate&&u.jsxs("div",{className:`org-dag-gate org-gate-${a.gate.type}`,children:[u.jsx("img",{src:a.gate.type==="review"?is.gateReview:a.gate.type==="approval"?is.gateApproval:is.gateHold,alt:"",className:"org-gate-icon"}),u.jsx("span",{children:a.gate.type}),a.gate.reviewer_role&&u.jsxs("span",{className:"org-gate-reviewer",children:["by ",a.gate.reviewer_role]})]})]},a.id))]})]},o))})}function aJ(e){const t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?"?":t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function lJ({template:e,hiringId:t,onHire:n,onClick:i}){const r=t===e.template_id,o=e.color?{background:`color-mix(in srgb, ${e.color} 18%, transparent)`,color:e.color,boxShadow:`inset 0 0 0 1px color-mix(in srgb, ${e.color} 28%, transparent)`}:void 0,a=[],c=new Set;for(const h of[...e.tags,...e.domains])c.has(h)||(c.add(h),a.push(h));const d=a.slice(0,3),m=a.length-d.length;return u.jsxs("div",{className:"tm-card",onClick:()=>i(e),children:[u.jsxs("div",{className:"tm-card-head",children:[u.jsx("div",{className:"tm-card-avatar",style:o,"aria-hidden":!0,children:e.emoji?u.jsx("span",{className:"tm-card-avatar-emoji",children:e.emoji}):u.jsx("span",{className:"tm-card-avatar-mono",children:aJ(e.name)})}),u.jsxs("div",{className:"tm-card-head-text",children:[u.jsxs("div",{className:"tm-card-name-row",children:[u.jsx("span",{className:"tm-card-name",title:e.name,children:e.name}),e.preferred_external_agent&&u.jsx("span",{className:"tm-card-agent-badge",title:`Agent: ${e.preferred_external_agent}`,children:e.preferred_external_agent})]}),e.category&&u.jsx("span",{className:"tm-card-category",children:e.category})]})]}),u.jsxs("div",{className:"tm-card-body",children:[e.vibe&&u.jsxs("div",{className:"tm-card-vibe",children:['"',e.vibe,'"']}),e.description&&u.jsx("div",{className:"tm-card-desc",children:e.description})]}),d.length>0&&u.jsxs("div",{className:"tm-card-chips",children:[d.map(h=>u.jsx("span",{className:"tm-card-chip",children:h},h)),m>0&&u.jsxs("span",{className:"tm-card-chip tm-card-chip-more",children:["+",m]})]}),u.jsx("div",{className:"tm-card-footer",children:u.jsx("button",{className:"tm-card-hire-btn",disabled:r,onClick:h=>{h.stopPropagation(),n(e.template_id)},children:r?u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"spinner-inline"})," Hiring"]}):"Hire →"})})]})}const GR=e=>e,qR=e=>e;function cJ({template:e,vacantRoles:t,hiringId:n,readOnly:i,onHire:r,onClose:o}){const[a,c]=C.useState(""),d=n===e.template_id,m=t.length===0,h=!i&&!d&&!m&&a!=="";C.useEffect(()=>{c("")},[e.template_id]);const p=()=>{h&&r(qR(e.template_id),GR(a))};return u.jsx("div",{className:"tm-detail-overlay",onClick:o,children:u.jsxs("div",{className:"tm-detail-modal",onClick:g=>g.stopPropagation(),children:[u.jsxs("div",{className:"tm-detail-header",style:{borderBottomColor:e.color||"var(--border)"},children:[e.emoji&&u.jsx("span",{className:"tm-detail-emoji",children:e.emoji}),u.jsxs("div",{children:[u.jsx("h2",{className:"tm-detail-name",children:e.name}),u.jsx("span",{className:"tm-detail-category",children:e.category})]}),u.jsx("button",{className:"tm-detail-close",onClick:o,children:"×"})]}),u.jsxs("div",{className:"tm-detail-body",children:[e.vibe&&u.jsxs("blockquote",{className:"tm-detail-vibe",children:['"',e.vibe,'"']}),e.description&&u.jsx("p",{className:"tm-detail-desc",children:e.description}),e.domains.length>0&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Domains"}),u.jsx("div",{className:"tm-detail-tags",children:e.domains.map(g=>u.jsx("span",{className:"org-domain-tag",children:g},g))})]}),e.tags.length>0&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Tags"}),u.jsx("div",{className:"tm-detail-tags",children:e.tags.map(g=>u.jsx("span",{className:"org-tool-tag",children:g},g))})]}),e.preferred_external_agent&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Recommended Agent"}),u.jsx("span",{className:"tm-card-agent-badge",children:e.preferred_external_agent})]}),!i&&u.jsxs("div",{className:"tm-detail-section",children:[u.jsx("div",{className:"tm-detail-label",children:"Hire into role"}),m?u.jsx("p",{className:"tm-detail-vacancy-empty",children:"No vacant roles. Create a role in the Team tab first."}):u.jsx("div",{className:"tm-detail-role-list",role:"listbox","aria-label":"Vacant roles",children:t.map(g=>{const x=g.role_id===a;return u.jsxs("button",{type:"button",role:"option","aria-selected":x,className:`tm-detail-role-row${x?" is-selected":""}`,onClick:()=>c(g.role_id),children:[u.jsx("span",{className:"tm-detail-role-name",children:g.name}),g.responsibility&&u.jsx("span",{className:"tm-detail-role-resp",children:g.responsibility})]},g.role_id)})})]})]}),!i&&u.jsx("div",{className:"tm-detail-footer",children:u.jsx("button",{className:"tm-detail-hire-btn",disabled:!h,onClick:p,children:d?u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"spinner-inline"})," Hiring..."]}):"Hire to selected role"})})]})})}function uJ({open:e,template:t,vacantRoles:n,onConfirm:i,onClose:r}){const[o,a]=C.useState("");if(C.useEffect(()=>{e&&a("")},[e,t?.template_id]),C.useEffect(()=>{if(!e)return;const h=p=>{p.key==="Escape"&&r()};return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[e,r]),!e||!t)return null;const c=n.length===0,d=!c&&o!=="",m=()=>{d&&i(qR(t.template_id),GR(o))};return u.jsx("div",{className:"htr-overlay",role:"dialog","aria-modal":"true",onMouseDown:r,children:u.jsxs("div",{className:"htr-modal",onMouseDown:h=>h.stopPropagation(),children:[u.jsxs("header",{className:"htr-header",children:[u.jsxs("div",{children:[u.jsxs("h3",{className:"htr-title",children:["Hire ",t.name]}),u.jsx("p",{className:"htr-subtitle",children:"Pick the role to fill with this employee."})]}),u.jsx("button",{className:"htr-close",type:"button",onClick:r,"aria-label":"Close",children:"x"})]}),u.jsx("div",{className:"htr-body",children:c?u.jsxs("div",{className:"htr-empty",children:[u.jsx("p",{className:"htr-empty-title",children:"No vacant roles."}),u.jsx("p",{className:"htr-empty-hint",children:"Add a role in the Team tab first, then come back to hire."})]}):u.jsx("div",{className:"htr-role-list",role:"listbox","aria-label":"Vacant roles",children:n.map(h=>{const p=h.role_id===o;return u.jsxs("button",{type:"button",role:"option","aria-selected":p,className:`htr-role-row${p?" is-selected":""}`,onClick:()=>a(h.role_id),children:[u.jsx("span",{className:"htr-role-name",children:h.name}),h.responsibility&&u.jsx("span",{className:"htr-role-resp",children:h.responsibility})]},h.role_id)})})}),u.jsxs("footer",{className:"htr-footer",children:[u.jsx("button",{type:"button",className:"btn btn-ghost",onClick:r,children:c?"Close":"Cancel"}),!c&&u.jsx("button",{type:"button",className:"btn btn-primary",onClick:m,disabled:!d,children:"Hire to selected role"})]})]})})}const Ij={search:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M15.5 14h-.79l-.28-.27a6.5 6.5 0 1 0-.7.7l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0A4.5 4.5 0 1 1 14 9.5 4.5 4.5 0 0 1 9.5 14z'/%3E%3C/svg%3E",talent:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"};function dJ({templates:e,vacantRoles:t,hiringTemplateId:n,readOnly:i,onHireTalent:r}){const[o,a]=C.useState(""),[c,d]=C.useState(null),[m,h]=C.useState(null),[p,g]=C.useState(null),x=C.useMemo(()=>{const k=new Set;for(const w of e)w.category&&k.add(w.category);return Array.from(k).sort()},[e]),v=C.useMemo(()=>{let k=e;if(c&&(k=k.filter(w=>w.category===c)),o.trim()){const w=o.trim().toLowerCase();k=k.filter(S=>S.name.toLowerCase().includes(w)||S.description.toLowerCase().includes(w)||S.domains.some(j=>j.toLowerCase().includes(w))||S.tags.some(j=>j.toLowerCase().includes(w))||(S.vibe??"").toLowerCase().includes(w))}return k},[e,c,o]),b=k=>{if(i)return;const w=e.find(S=>S.template_id===k);w&&g(w)};return u.jsxs("div",{className:"mkt-container","data-testid":"employees-marketplace",children:[u.jsxs("div",{className:"mkt-toolbar",children:[u.jsxs("div",{className:"mkt-search-wrap",children:[u.jsx("img",{src:Ij.search,alt:"",className:"mkt-search-icon"}),u.jsx("input",{className:"mkt-search",placeholder:"Search talent templates...",value:o,onChange:k=>a(k.target.value)})]}),u.jsxs("span",{className:"mkt-count",children:[v.length," employees",t.length>0&&u.jsxs(u.Fragment,{children:[" · ",t.length," vacant role",t.length===1?"":"s"]})]})]}),x.length>0&&u.jsx("div",{className:"mkt-filters",children:u.jsxs("div",{className:"mkt-pill-row",children:[u.jsx("button",{className:`mkt-pill${c?"":" active"}`,onClick:()=>d(null),children:"All"}),x.map(k=>u.jsx("button",{className:`mkt-pill${c===k?" active":""}`,onClick:()=>d(c===k?null:k),children:k},k))]})}),v.length>0?u.jsxs("div",{className:"mkt-section",children:[u.jsxs("div",{className:"mkt-section-header",children:[u.jsx("img",{src:Ij.talent,alt:"",className:"mkt-section-icon"}),u.jsx("h3",{className:"mkt-section-title",children:"Talent Templates"}),u.jsx("span",{className:"mkt-section-count",children:v.length})]}),u.jsx("div",{className:"tm-grid",children:v.map(k=>u.jsx(lJ,{template:k,hiringId:n,onHire:b,onClick:h},k.template_id))})]}):u.jsx("div",{className:"mkt-empty",children:u.jsx("p",{children:e.length===0?"No talent templates available.":"No employees match your search."})}),m&&u.jsx(cJ,{template:m,vacantRoles:t,hiringId:n,readOnly:i,onHire:(k,w)=>{i||(r(k,w),h(null))},onClose:()=>h(null)}),u.jsx(uJ,{open:p!==null,template:p,vacantRoles:t,onConfirm:(k,w)=>{r(k,w),g(null)},onClose:()=>g(null)})]})}const Zc={download:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z'/%3E%3C/svg%3E",upload:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z'/%3E%3C/svg%3E",check:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E",warn:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ef4444' d='M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z'/%3E%3C/svg%3E"};function fJ({onExport:e,onImport:t,configExportYaml:n,importPreview:i,importError:r}){const[o,a]=C.useState(""),[c,d]=C.useState(null),[m,h]=C.useState(!1),p=C.useRef(!1),g=C.useRef(null);C.useEffect(()=>{if(!p.current||!n||n===g.current)return;g.current=n,p.current=!1;const S=new Blob([n],{type:"application/x-yaml"}),j=URL.createObjectURL(S),N=document.createElement("a");N.href=j;const O=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19);N.download=`org_config_${O}.yaml`,document.body.appendChild(N),N.click(),document.body.removeChild(N),URL.revokeObjectURL(j)},[n]),C.useEffect(()=>{h(!1)},[o]),C.useEffect(()=>{i&&!r&&h(!0)},[i,r]);const x=()=>{p.current=!0,e()},v=S=>{const j=S.target.files?.[0];if(!j)return;d(j.name);const N=new FileReader;N.onload=()=>{const O=N.result;typeof O=="string"&&a(O)},N.readAsText(j),S.target.value=""},b=()=>{o.trim()&&t(o,!0)},k=()=>{!m||!o.trim()||confirm("Apply this config? The current company architecture will be overwritten.")&&(t(o,!1),h(!1),a(""),d(null))},w=()=>{a(""),d(null),h(!1)};return u.jsxs("div",{className:"cfg-io-panel","data-testid":"config-import-export-panel",children:[u.jsxs("div",{className:"cfg-io-header",children:[u.jsx("h3",{className:"cfg-io-title",children:"Config Import / Export"}),u.jsx("p",{className:"cfg-io-subtitle",children:"Download the current company architecture as YAML, or upload one to replace it."})]}),u.jsxs("div",{className:"cfg-io-section",children:[u.jsxs("div",{className:"cfg-io-section-header",children:[u.jsx("img",{src:Zc.download,alt:"",className:"cfg-io-section-icon"}),u.jsx("span",{className:"cfg-io-section-title",children:"Download current config"})]}),u.jsxs("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:x,children:[u.jsx("img",{src:Zc.download,alt:"",className:"cfg-io-btn-icon"})," Download YAML"]})]}),u.jsxs("div",{className:"cfg-io-section",children:[u.jsxs("div",{className:"cfg-io-section-header",children:[u.jsx("img",{src:Zc.upload,alt:"",className:"cfg-io-section-icon"}),u.jsx("span",{className:"cfg-io-section-title",children:"Upload config"})]}),u.jsx("div",{className:"cfg-io-upload-row",children:u.jsxs("label",{className:"cfg-io-file-label",children:[u.jsx("input",{type:"file",accept:".yaml,.yml",onChange:v,className:"cfg-io-file-input"}),u.jsx("span",{className:"cfg-io-file-btn",children:"Choose file…"}),u.jsx("span",{className:"cfg-io-file-name",children:c??"no file selected"})]})}),u.jsx("textarea",{className:"cfg-io-textarea",placeholder:"…or paste YAML here",value:o,onChange:S=>a(S.target.value),spellCheck:!1,rows:10}),u.jsxs("div",{className:"cfg-io-actions",children:[u.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:b,disabled:!o.trim(),children:"Dry run"}),u.jsx("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:k,disabled:!m||!o.trim(),children:"Apply"}),o&&u.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:w,children:"Clear"})]}),i&&!r&&u.jsxs("div",{className:"cfg-io-preview",children:[u.jsx("img",{src:Zc.check,alt:"",className:"cfg-io-preview-icon"}),u.jsxs("div",{className:"cfg-io-preview-body",children:[u.jsx("div",{className:"cfg-io-preview-title",children:"Dry run OK — ready to apply"}),u.jsxs("div",{className:"cfg-io-preview-stats",children:[u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Roles added"}),u.jsx("span",{className:"cfg-io-stat-value",children:i.roles_added})]}),u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Roles removed"}),u.jsx("span",{className:"cfg-io-stat-value",children:i.roles_removed})]}),u.jsxs("span",{className:"cfg-io-preview-stat",children:[u.jsx("span",{className:"cfg-io-stat-label",children:"Employees changed"}),u.jsx("span",{className:"cfg-io-stat-value",children:i.employees_changed})]})]})]})]}),r&&u.jsxs("div",{className:"cfg-io-error",children:[u.jsx("img",{src:Zc.warn,alt:"",className:"cfg-io-error-icon"}),u.jsxs("div",{className:"cfg-io-error-body",children:[u.jsx("div",{className:"cfg-io-error-title",children:"Validation failed"}),u.jsx("pre",{className:"cfg-io-error-text",children:r})]})]})]})]})}const Tj=[{name:"",responsibility:"",prompt:"",reportsToIndex:null},{name:"",responsibility:"",prompt:"",reportsToIndex:0}];function Rx(e){return e.trim()||"Member"}function mJ({open:e,pending:t,result:n,onClose:i,onCreate:r}){const[o,a]=C.useState(1),[c,d]=C.useState(""),[m,h]=C.useState(Tj),[p,g]=C.useState("");C.useEffect(()=>{e&&(a(1),d(""),h(Tj),g(""))},[e]),C.useEffect(()=>{if(!(!e||!n)){if(n.ok){i();return}g(n.error||"Failed to create organization")}},[e,n,i]);const x=c.trim().length>0,v=C.useMemo(()=>m.map((D,I)=>({member:D,index:I})).filter(D=>D.member.name.trim()),[m]),b=C.useMemo(()=>new Map(v.map((D,I)=>[D.index,I])),[v]),k=v.length>=2,w=x&&k&&!t,S=C.useMemo(()=>v.map(({member:D,index:I},L)=>{const M=D.reportsToIndex==null?null:b.get(D.reportsToIndex);return{...D,roleName:Rx(D.name),managerName:M!=null&&M<L?Rx(v[M]?.member.name||""):"Owner",index:I}}),[b,v]);if(!e)return null;const j=(D,I)=>{h(L=>L.map((M,A)=>A===D?{...M,...I}:M))},N=()=>{h(D=>[...D,{name:"",responsibility:"",prompt:"",reportsToIndex:0}])},O=D=>{h(I=>I.filter((M,A)=>A!==D).map((M,A)=>({...M,reportsToIndex:M.reportsToIndex==null?null:M.reportsToIndex>=D?Math.max(0,M.reportsToIndex-1):M.reportsToIndex})).map((M,A)=>A===0?{...M,reportsToIndex:null}:M))},R=()=>{w&&(g(""),r(c.trim(),v.map(({member:D},I)=>{const L=D.reportsToIndex==null?null:b.get(D.reportsToIndex);return{name:D.name.trim(),responsibility:D.responsibility.trim(),prompt:D.prompt.trim(),reports_to_index:L!=null&&L<I?L:I===0?null:0}})))};return u.jsx("div",{className:"org-create-backdrop",role:"presentation",onMouseDown:i,children:u.jsxs("div",{className:"org-create-modal",role:"dialog","aria-modal":"true","aria-labelledby":"org-create-title",onMouseDown:D=>D.stopPropagation(),children:[u.jsxs("div",{className:"org-create-header",children:[u.jsxs("div",{children:[u.jsx("span",{className:"org-create-eyebrow",children:"New organization"}),u.jsx("h3",{id:"org-create-title",className:"org-create-title",children:"Create a saved org"})]}),u.jsx("button",{type:"button",className:"org-create-close",onClick:i,"aria-label":"Close",children:"x"})]}),u.jsx("div",{className:"org-create-steps","aria-label":"Create organization steps",children:[["1","Name"],["2","Members"],["3","Review"]].map(([D,I])=>u.jsxs("span",{className:`org-create-step${o===Number(D)?" org-create-step--active":o>Number(D)?" org-create-step--done":""}`,children:[u.jsx("span",{children:D}),I]},D))}),o===1&&u.jsx("div",{className:"org-create-panel",children:u.jsxs("label",{className:"org-create-field",children:[u.jsx("span",{children:"Organization name"}),u.jsx("input",{value:c,onChange:D=>d(D.target.value),placeholder:"HKU Research Lab",autoFocus:!0})]})}),o===2&&u.jsxs("div",{className:"org-create-panel",children:[u.jsx("div",{className:"org-create-member-list",children:m.map((D,I)=>u.jsxs("div",{className:"org-create-member-row",children:[u.jsx("input",{value:D.name,onChange:L=>j(I,{name:L.target.value}),placeholder:I===0?"Lead role":"Member role"}),u.jsx("input",{value:D.responsibility,onChange:L=>j(I,{responsibility:L.target.value}),placeholder:"Responsibility"}),u.jsxs("select",{value:D.reportsToIndex==null?"owner":String(D.reportsToIndex),onChange:L=>j(I,{reportsToIndex:L.target.value==="owner"?null:Number(L.target.value)}),disabled:I===0,"aria-label":"Reports to",children:[u.jsx("option",{value:"owner",children:"Owner"}),m.slice(0,I).map((L,M)=>u.jsx("option",{value:M,children:Rx(L.name)},M))]}),u.jsx("button",{type:"button",className:"org-create-icon-btn",onClick:()=>O(I),disabled:m.length<=2,title:"Remove member","aria-label":"Remove member",children:"-"}),u.jsx("textarea",{value:D.prompt,onChange:L=>j(I,{prompt:L.target.value}),placeholder:"Prompt optional","aria-label":`${I===0?"Lead role":"Member role"} prompt optional`})]},I))}),u.jsx("button",{type:"button",className:"org-create-add",onClick:N,children:"+ Add member"})]}),o===3&&u.jsx("div",{className:"org-create-panel",children:u.jsxs("div",{className:"org-create-review",children:[u.jsxs("div",{className:"org-create-review-head",children:[u.jsx("span",{children:c.trim()}),u.jsxs("b",{children:[v.length," members"]})]}),S.map(D=>u.jsxs("div",{className:"org-create-review-row",children:[u.jsx("strong",{children:D.roleName}),u.jsxs("span",{children:[D.managerName,D.prompt.trim()?u.jsx("em",{children:"Prompt"}):null]})]},D.index))]})}),p&&u.jsx("div",{className:"org-create-error",children:p}),u.jsxs("div",{className:"org-create-actions",children:[u.jsx("button",{type:"button",className:"btn btn-ghost",onClick:o===1?i:()=>a(o-1),children:o===1?"Cancel":"Back"}),o<3?u.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>a(o+1),disabled:o===1?!x:!k,children:"Next"}):u.jsx("button",{type:"button",className:"btn btn-primary",onClick:R,disabled:!w,children:t?"Creating...":"Create organization"})]})]})})}const rl={team:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3E%3C/svg%3E",runtime:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M13 2.05v2.02c3.95.49 7 3.85 7 7.93 0 3.21-1.81 6-4.72 7.72L13 17v5h5l-1.22-1.22C19.91 19.07 22 15.76 22 12c0-5.18-3.95-9.45-9-9.95zM11 2.05C5.95 2.55 2 6.82 2 12c0 3.76 2.09 7.07 5.22 8.78L6 22h5V2.05z'/%3E%3C/svg%3E",architecture:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z'/%3E%3C/svg%3E",employees:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E"},Rj={agents:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23888' d='M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3z'/%3E%3C/svg%3E",active:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%2322c55e' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z'/%3E%3C/svg%3E"};function pJ(e){const t=String(e??"").trim();return t?t.replace(/^org[_-]/i,"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,n=>n.toUpperCase()):""}function hJ({data:e,sessionRecruitmentByRole:t,talents:n,employeeDetail:i,reorgProposals:r,isCustomMode:o,onRequestData:a,onRequestTalents:c,onRequestEmployeeDetail:d,onHireTalent:m,hiringTemplateId:h,onImportEmployee:p,onRequestReorgList:g,onReorgDecide:x,onMarketExport:v,onMarketInstall:b,onMarketUninstall:k,marketPresets:w,marketPreviewData:S,onMarketBrowse:j,onMarketPreview:N,onMarketApplyPreset:O,onMarketClearPreview:R,onAddRole:D,onBulkAddRoles:I,onUpdateRole:L,onDeleteRole:M,onUpdateOrgStrategy:A,onUpdateRuntimePolicy:B,onResetArchitecture:W,onConfigExport:P,onConfigImport:G,configExportYaml:$,configImportPreview:q,configImportError:Y,onSavedOrgsList:Q,onSavedOrgSaveAs:V,onSavedOrgCreate:U,onSavedOrgLoad:Z,onSavedOrgDelete:F,savedOrgsList:K,activeSavedOrg:ee,activeSavedOrgVersionAtLoad:te,orgCreatePending:se,orgCreateResult:ae,onSelectCorporate:ue}){const[ie,we]=C.useState("team"),[je,Te]=C.useState(!1),Ge=C.useCallback(Me=>{we(Me)},[]),[Ze,Ye]=C.useState(null),mt=C.useRef(-1),[Ft,Mt]=C.useState(null),jt=C.useRef(null),he=C.useCallback((Me,ht="info")=>{Mt({msg:Me,type:ht}),jt.current&&clearTimeout(jt.current),jt.current=setTimeout(()=>Mt(null),3e3)},[]);C.useEffect(()=>()=>{jt.current&&clearTimeout(jt.current)},[]);const ze=C.useRef(a),ot=C.useRef(c),Ve=C.useRef(g),lt=C.useRef(j),me=C.useRef(Q);ze.current=a,ot.current=c,Ve.current=g,lt.current=j,me.current=Q,C.useEffect(()=>{ze.current(),ot.current(),Ve.current(),lt.current?.(),me.current?.()},[]),C.useEffect(()=>{!ae||!ae.ok||(Te(!1),we("team"),he(`Created ${ae.organization_name||ae.name} and saved automatically`))},[ae,he]);const be=e?.roles??[],Ae=C.useMemo(()=>o?be.filter(Me=>!Me.is_builtin):be,[be,o]),Be=C.useMemo(()=>e?.employees??[],[e?.employees]),We=C.useMemo(()=>Um(e),[e]),Lt=C.useMemo(()=>Be.filter(Me=>Me.linked_agent_id),[Be]),ke=e?.organization_name?.trim()||pJ(ee)||(o?"Custom org":"Corporate company"),qe=(o?e?.organization_id||ee:"corporate")||"",Qe=o?"Saved org":"Corporate",$e=o?ee?"Editable saved architecture":"Editable draft architecture":"Built-in read-only architecture",He=We.frontier.status||We.projectRun?.status||We.projectRun?.lifecycle_status||"ready",Vt=C.useMemo(()=>{const Me=new Set;for(const ht of Be){if(ht.is_default_employee)continue;const gt=ht.role_ids?.length?ht.role_ids:[ht.role_id];for(const fi of gt)fi&&Me.add(fi)}return Me},[Be]),ei=C.useMemo(()=>Ae.filter(Me=>!Vt.has(Me.role_id)),[Ae,Vt]),vt=C.useMemo(()=>new Set((e?.installed_packages??[]).map(Me=>Me.package_id)),[e?.installed_packages]),bt=e?.org_version??0;C.useEffect(()=>{Ze&&mt.current>=0&&bt!==mt.current&&(Ye(null),mt.current=-1,we("team"),he("Architecture applied successfully"))},[bt,Ze,he]);const vn=(Me,ht)=>{mt.current=bt,Ye(Me),O?.(Me,ht)},On=Me=>{if(Me==="corporate"){ue?.();return}if(Me.startsWith("org:")){const ht=Me.slice(4);ht&&Z?.(ht)}};if(!e)return u.jsx("div",{className:"org-tab",children:u.jsx("div",{className:"org-loading",children:"Loading organization data..."})});const wt=e.installed_packages??[],zt=K??[],Hn=o&&ee?`org:${ee}`:"corporate";return u.jsxs("div",{className:"org-tab",children:[u.jsxs("div",{className:`org-header${o?" org-header--custom":" org-header--corporate"}`,children:[u.jsxs("div",{className:"org-header-main",children:[u.jsxs("div",{className:"org-eyebrow",children:[u.jsx("span",{children:"Company"}),u.jsx("span",{className:"org-eyebrow-separator",children:"/"}),u.jsx("span",{children:Qe})]}),u.jsxs("div",{className:"org-title-row",children:[u.jsx("h2",{className:"org-title",children:ke}),u.jsxs("span",{className:"org-version-badge",children:["v",e.org_version]}),u.jsx("span",{className:`org-state-badge${o?" org-state-badge--editable":" org-state-badge--readonly"}`,children:$e})]}),u.jsxs("div",{className:"org-header-meta",children:[u.jsx("span",{className:"org-meta-pill",children:e.company_profile||(o?"custom":"corporate")}),qe&&u.jsx("code",{className:"org-meta-code",children:qe}),u.jsx("span",{className:"org-meta-pill org-meta-pill--runtime",children:He}),u.jsx("span",{className:"org-meta-pill org-meta-pill--saved",children:"Auto-saved"})]})]}),u.jsxs("div",{className:"org-control-panel",children:[u.jsxs("label",{className:"org-switcher",children:[u.jsx("span",{className:"org-switcher-label",children:"Organization"}),u.jsx("span",{className:"org-switcher-select-wrap",children:u.jsxs("select",{className:"org-switcher-select",value:Hn,onChange:Me=>On(Me.target.value),onFocus:()=>Q?.(),onPointerDown:()=>Q?.(),"aria-label":"Organization",children:[u.jsx("option",{value:"corporate",children:"Corporate"}),zt.map(Me=>u.jsx("option",{value:`org:${Me.name}`,children:(Me.organization_name||Me.name).trim()||Me.name},Me.name))]})})]}),u.jsxs("button",{type:"button",className:"org-create-trigger",onClick:()=>Te(!0),children:[u.jsx("span",{className:"org-create-trigger-icon","aria-hidden":!0,children:"+"}),"New organization"]})]}),u.jsxs("div",{className:"org-stats-strip",children:[u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:Rj.agents,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:Ae.length})," roles"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:rl.employees,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:Be.length})," employees"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:rl.runtime,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:We.runtimeTeams.length})," runtime teams"]}),u.jsxs("span",{className:"org-stat",children:[u.jsx("img",{src:Rj.active,alt:"",className:"org-stat-icon"}),u.jsx("b",{children:Lt.length})," active"]})]})]}),u.jsx("div",{className:"org-subtabs",children:[{id:"team",icon:rl.team,label:"Team",count:Ae.length},{id:"runtime",icon:rl.runtime,label:"Runtime",count:We.runtimeTeams.length},{id:"architecture",icon:rl.architecture,label:"Architecture",count:w?.length??0},{id:"employees",icon:rl.employees,label:"Employees",count:n.length}].map(Me=>u.jsxs("button",{className:`org-subtab${ie===Me.id?" org-subtab--active":""}`,onClick:()=>Ge(Me.id),children:[u.jsx("img",{src:Me.icon,alt:"",className:"org-subtab-icon"}),u.jsx("span",{className:"org-subtab-label",children:Me.label}),u.jsx("span",{className:"org-subtab-count",children:Me.count})]},Me.id))}),Ft&&u.jsx("div",{className:`org-toast org-toast--${Ft.type}`,onClick:()=>Mt(null),children:Ft.msg}),u.jsxs("div",{className:"org-tab-content",children:[ie==="team"&&u.jsx(ZQ,{roles:Ae,employees:Be,sessionRecruitmentByRole:t,isCustomMode:o,onAddRole:D??(()=>{}),onBulkAddRoles:I,onUpdateRole:L??(()=>{}),onDeleteRole:M??(()=>{}),onExport:v??(()=>{}),onImportEmployee:p,onResetArchitecture:W,onSwitchToTab:Me=>we(Me),savedOrgsList:K,activeSavedOrg:ee??null,currentOrgVersion:e?.org_version??0,versionAtLoad:te??null,onSavedOrgsList:Q,onSavedOrgSaveAs:V,onSavedOrgLoad:Z,onSavedOrgDelete:F}),ie==="runtime"&&u.jsx(tJ,{roles:Ae,runtimeTeams:We.runtimeTeams,runtimeSeats:We.runtimeSeats,workItems:We.workItems,frontier:We.frontier,companyProfile:e.company_profile,runtimePolicy:e.runtime_policy,finalDeciderRoleId:e.final_decider_role_id,topLevelRoleIds:e.top_level_role_ids,readOnly:!o,onUpdateOrgStrategy:A,onUpdateRuntimePolicy:B}),ie==="architecture"&&u.jsxs(u.Fragment,{children:[u.jsx(iJ,{presets:w??[],installedIds:vt,previewData:S??null,applyingPresetId:Ze,readOnly:!o,onPreview:N??(()=>{}),onApplyPreset:vn,onClearPreview:R??(()=>{}),installedPackages:wt,channels:e.channels,reorgProposals:r,isCustomMode:!!o,onReorgDecide:x,onMarketInstall:(Me,ht)=>b?.(Me,ht),onMarketUninstall:Me=>k?.(Me)}),o&&u.jsx(fJ,{onExport:P??(()=>{}),onImport:G??(()=>{}),configExportYaml:$??null,importPreview:q??null,importError:Y??null})]}),ie==="employees"&&u.jsx(dJ,{templates:n,vacantRoles:ei,hiringTemplateId:h??null,readOnly:!o,onHireTalent:m})]}),u.jsx(mJ,{open:je,pending:se,result:ae??null,onClose:()=>Te(!1),onCreate:(Me,ht)=>U?.(Me,ht)})]})}function gJ(e,t,n,i){const r=n.join(", "),o=`session:${t.id}`,a=e.channels.find(c=>c.id===o)??e.channels.find(c=>c.type==="activity");a&&e.sendMessage({channelId:a.id,sender:"system",senderName:"System",content:`Task **${t.displayId}** assigned to ${r}`,metadata:{type:"task_assigned",taskId:t.id,boardId:t.boardId}})}const yJ=1e12,xJ=/^\[Company:([^\]]+)\]\s*(.*)$/,vJ=/^\[Company\]\s*(.*)$/;function bJ(e,t,n){return!n&&e===!1?!1:t}function WR(e,t){return t==="idle"||t==="reflecting"||t==="tool_active"?t:e==="running"?"reflecting":void 0}function Nm(e){const t=typeof e=="string"?Number(e):e;return typeof t!="number"||!Number.isFinite(t)?Date.now():t<yJ?t*1e3:t}function dp(e){return Array.isArray(e)?PI(e.filter(t=>!!t&&typeof t=="object").map(t=>({timestamp:Nm(t.timestamp),type:t.type??"status_change",summary:typeof t.summary=="string"?t.summary:"",detail:typeof t.detail=="string"?t.detail:void 0,turnId:typeof t.turn_id=="string"?t.turn_id:typeof t.turnId=="string"?t.turnId:void 0,itemId:typeof t.item_id=="string"?t.item_id:typeof t.itemId=="string"?t.itemId:void 0,streamId:typeof t.stream_id=="string"?t.stream_id:typeof t.streamId=="string"?t.streamId:void 0,toolCallId:typeof t.tool_call_id=="string"?t.tool_call_id:typeof t.toolCallId=="string"?t.toolCallId:void 0,permissionGroupKey:typeof t.permission_group_key=="string"?t.permission_group_key:typeof t.permissionGroupKey=="string"?t.permissionGroupKey:void 0,seq:typeof t.seq=="number"&&Number.isFinite(t.seq)?t.seq:void 0,executionMode:typeof t.execution_mode=="string"?t.execution_mode:typeof t.executionMode=="string"?t.executionMode:void 0}))):[]}function _J(e){return Array.isArray(e)?HI(e.filter(t=>!!t&&typeof t=="object").map(t=>{const n=typeof t.runtime_task_id=="string"?t.runtime_task_id:typeof t.runtimeTaskId=="string"?t.runtimeTaskId:typeof t.execution_turn_id=="string"?t.execution_turn_id:typeof t.executionTurnId=="string"?t.executionTurnId:void 0,i=typeof t.execution_turn_id=="string"?t.execution_turn_id:typeof t.executionTurnId=="string"?t.executionTurnId:n;return{timestamp:Nm(t.timestamp),type:t.type??"gate_result",workItemProjectionId:typeof t.work_item_projection_id=="string"?t.work_item_projection_id:typeof t.workItemProjectionId=="string"?t.workItemProjectionId:void 0,workItemTurnType:typeof t.work_item_turn_type=="string"?t.work_item_turn_type:typeof t.workItemTurnType=="string"?t.workItemTurnType:void 0,workItemProjectionTitle:typeof t.work_item_projection_title=="string"?t.work_item_projection_title:typeof t.workItemProjectionTitle=="string"?t.workItemProjectionTitle:void 0,runtimeTaskId:n,executionTurnId:i,roleName:typeof t.role_name=="string"?t.role_name:typeof t.roleName=="string"?t.roleName:void 0,detail:typeof t.detail=="string"?t.detail:void 0}})):[]}function kJ(e){return e.replace(/[_-]/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function Aj(e){const t=e.toLowerCase();return t.includes("starting")||t.includes("started")?"work_item_started":t.includes("gate passed")||t.includes("approved")||t.includes("completed")?"gate_approved":t.includes("rejected")||t.includes("reworking")?"gate_rejected":t.includes("awaiting peer")?"awaiting_peer":t.includes("awaiting manager review")?"awaiting_manager_review":t.includes("awaiting user")||t.includes("awaiting human review")||t.includes("awaiting review")||t.includes("awaiting confirmation")||t.includes("awaiting feedback")?"awaiting_human":t.includes("failed")?"work_item_failed":t.includes("deadlock")?"deadlock":"gate_result"}function SJ(e){const t=e.content.trim(),n=e.metadata??{},i=e.sender!=="system"&&e.sender!=="assistant"?e.senderName:void 0,r=typeof n.forwarded_from=="string"?n.forwarded_from:typeof n.task_id=="string"?n.task_id:typeof n.taskId=="string"?n.taskId:void 0,o=xJ.exec(t);if(o){const[,c,d]=o,m=d.trim();return{timestamp:e.timestamp,type:Aj(m),workItemProjectionId:c,workItemProjectionTitle:kJ(c),roleName:i,detail:m||void 0,runtimeTaskId:r,executionTurnId:r}}const a=vJ.exec(t);if(a){const c=a[1].trim();return{timestamp:e.timestamp,type:Aj(c),workItemProjectionId:"company_runtime",workItemProjectionTitle:"Company Runtime",roleName:i,detail:c||void 0,runtimeTaskId:r,executionTurnId:r}}return null}function wJ(e){return e.map(SJ).filter(t=>t!=null).sort((t,n)=>t.timestamp-n.timestamp)}function CJ(e,t){if(e.length===0||t.length===0)return e;const n=new Map;for(const i of t){const r=n.get(i.channelId);r?r.push(i):n.set(i.channelId,[i])}return e.map(i=>{const r=wJ(n.get(i.channelId)??[]),o=i.workItemLog&&i.workItemLog.length>0?i.workItemLog:r,a=[...o].reverse().find(m=>{const h=m.workItemProjectionId;return h&&h!=="company_runtime"}),c=i.mode==="primary"?a?.workItemProjectionId??i.workItemProjectionId:i.workItemProjectionId??a?.workItemProjectionId,d=i.isCompanyRuntime||i.mode==="primary"&&o.length>0;return o.length===0&&c===i.workItemProjectionId&&d===i.isCompanyRuntime?i:{...i,isCompanyRuntime:d,workItemProjectionId:c,...o.length>0?{workItemLog:o}:{}}})}function jJ(e,t){if(e.length===0||t.length===0)return e;const n=new Map(t.map(i=>[i.taskId,i]));return e.map(i=>{const r=n.get(i.id);if(!r)return i;const o=r.workItemProjectionId??i.workItemProjectionId,a=r.companyProfile??i.companyProfile,c=r.workItemRoleId??i.workItemRoleId,d=r.workItemRoleName??i.workItemRoleName;return o===i.workItemProjectionId&&a===i.companyProfile&&c===i.workItemRoleId&&d===i.workItemRoleName?i:{...i,workItemProjectionId:o,companyProfile:a,workItemRoleId:c,workItemRoleName:d}})}function YR(e){return{id:e.channel_id??e.id??"",type:e.channel_type??e.type??"session",name:e.name??"",officeId:e.office_id??e.officeId,participants:e.participants??[],pinned:!!e.pinned,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now()}}function Ff(e){const t=e.sender_name??e.senderName??"",n=String(t).trim().toLowerCase()==="task generalist"?"OPC":t;return{id:e.message_id??e.id??"",channelId:e.channel_id??e.channelId??"",sender:e.sender??"",senderName:n,content:e.content??"",timestamp:typeof e.created_at=="number"?e.created_at*1e3:e.timestamp??Date.now(),replyToId:e.reply_to_id??e.replyToId,mentions:e.mentions??[],metadata:e.metadata,senderDeleted:!!(e.sender_deleted??e.senderDeleted)}}function XR(e){return{id:e.board_id??e.id??"",name:e.name??"",description:e.description,color:e.color??"#3b82f6",officeId:e.office_id??e.officeId,prefix:e.prefix??"T",nextTaskNum:e.next_task_num??e.nextTaskNum??1,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now()}}function KR(e){return{id:e.column_id??e.id??"",boardId:e.board_id??e.boardId??"",name:e.name??"",color:e.color??"#888",sortOrder:e.sort_order??e.sortOrder??0,isTerminal:!!(e.is_terminal??e.isTerminal),roleLabel:e.role_label??e.roleLabel,gateType:e.gate_type??e.gateType,isParallel:e.is_parallel??e.isParallel}}function ZR(e){const t=WR(e.status,e.agent_status??e.agentStatus),n=e.kanban_column??e.column_id??e.columnId??"",i=e.work_item_id??e.workItemId??e.task_id??e.id??"",r=e.runtime_task_id??e.runtimeTaskId??e.execution_turn_id??e.executionTurnId??(e.work_item_id??e.workItemId?void 0:e.task_id??e.id),o=e.execution_turn_id??e.executionTurnId??r,a=e.execution_mode??e.executionMode,c=e.work_item_projection_id??e.workItemProjectionId,d=a==="task_mode"||c==="task_mode_execution";return{id:i,displayId:e.display_id??e.displayId??"",boardId:e.board_id??e.boardId??"",columnId:n,title:e.title??"",description:e.description,priority:e.priority??null,assigneeIds:e.assignee_ids??e.assigneeIds??[],tags:e.tags??[],sortOrder:e.sort_order??e.sortOrder??0,sessionId:e.session_id??e.sessionId,workItemId:e.work_item_id??e.workItemId,runtimeTaskId:r,executionTurnId:o,createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now(),agentStatus:t,currentTool:e.current_tool??e.currentTool,displayTool:e.display_tool??e.displayTool??e.current_tool??e.currentTool,toolElapsedMs:e.tool_elapsed_ms??e.toolElapsedMs,lastToolSummary:e.last_tool_summary??e.lastToolSummary,contextTokens:e.context_tokens??e.contextTokens,contextWindow:e.context_window??e.contextWindow,contextRemainingPct:e.context_remaining_pct??e.contextRemainingPct,inputTokens:e.input_tokens??e.inputTokens,outputTokens:e.output_tokens??e.outputTokens,totalTokens:e.total_tokens??e.totalTokens,turnCostUsd:e.turn_cost_usd??e.turnCostUsd,sessionCostUsd:e.session_cost_usd??e.sessionCostUsd,pendingPermissionCount:e.pending_permission_count??e.pendingPermissionCount,drainMode:e.drain_mode??e.drainMode,residentStatus:e.resident_status??e.residentStatus,actionableInboxCount:e.actionable_inbox_count??e.actionableInboxCount,protocolBacklogCount:e.protocol_backlog_count??e.protocolBacklogCount,notificationBacklogCount:e.notification_backlog_count??e.notificationBacklogCount,latestNotification:e.latest_notification??e.latestNotification,workItemProjectionId:d?void 0:c,workItemTurnType:d?void 0:e.work_item_turn_type??e.workItemTurnType,companyProfile:d?void 0:e.company_profile??e.companyProfile,orgId:d?void 0:e.org_id??e.organization_id??e.orgId??e.organizationId,workItemRoleId:d?void 0:e.work_item_role_id??e.workItemRoleId,workItemRoleName:d?void 0:e.work_item_role_name??e.workItemRoleName,workItemGate:d?void 0:JR(e.work_item_gate??e.workItemGate),employeeAssignment:QR(e.employee_assignment??e.employeeAssignment),selectedExecutionAgent:e.selected_execution_agent??e.selectedExecutionAgent,originChannel:e.origin_channel??e.originChannel,dependencies:e.dependencies,progressLog:dp(e.progress_log??e.progressLog),handoffContext:e.handoff_context??e.handoffContext,phase:e.phase,runtimeSessionId:e.runtime_session_id??e.runtimeSessionId,resumeCursor:e.resume_cursor??e.resumeCursor,worktreePath:e.worktree_path??e.worktreePath,blockedReason:e.blocked_reason??e.blockedReason,reviewVerdict:e.review_verdict??e.reviewVerdict,reviewSummary:e.review_summary??e.reviewSummary,reviewOwnerRoleId:e.review_owner_role_id??e.reviewOwnerRoleId,reviewOwnerSeatId:e.review_owner_seat_id??e.reviewOwnerSeatId,managerRoleId:e.manager_role_id??e.managerRoleId,managerSeatId:e.manager_seat_id??e.managerSeatId,scopeKey:e.scope_key??e.scopeKey,completionReport:e.completion_report??e.completionReport,reworkFeedback:e.rework_feedback??e.reworkFeedback,planningContext:e.planning_context??e.planningContext,deliverables:e.deliverables,acceptanceCriteria:e.acceptance_criteria??e.acceptanceCriteria,delegationRationale:e.delegation_rationale??e.delegationRationale,nonOverlapGuard:e.non_overlap_guard??e.nonOverlapGuard,coordinationNotes:e.coordination_notes??e.coordinationNotes,originalMessage:e.original_message??e.originalMessage,residentAssignment:e.resident_assignment??e.residentAssignment,memberSessionState:e.member_session_state??e.memberSessionState,ownershipContract:e.ownership_contract??e.ownershipContract}}function QR(e){if(!(!e||typeof e!="object"))return{name:e.name,employeeId:e.employee_id??e.employeeId,category:e.category,experienceScore:e.experience_score??e.experienceScore,domains:e.domains,preferredExternalAgent:e.preferred_external_agent??e.preferredExternalAgent,promptContext:e.prompt_context??e.promptContext,deltaContext:e.delta_context??e.deltaContext,skillRefs:e.skill_refs??e.skillRefs}}function JR(e){if(!(!e||typeof e!="object"))return{type:e.type??e.gate_type??e.gateType,reviewerRole:e.reviewer_role??e.reviewerRole,autoApprove:e.auto_approve??e.autoApprove,criteria:e.criteria}}const EJ=new Set(["queued","ready","ready_for_rework","waiting_dependencies","running","waiting_for_peer","waiting_for_children","paused","needs_attention","awaiting_manager_review","awaiting_human","approved","failed","cancelled"]),NJ=new Set(["active","waiting","pending","done","failed"]);function IJ(e){return typeof e=="string"&&EJ.has(e)?e:"queued"}function TJ(e){return typeof e=="string"&&NJ.has(e)?e:"pending"}function RJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function AJ(e){const t=typeof e.kind=="string"&&e.kind.trim()?e.kind:"activity",n=typeof e.title=="string"&&e.title.trim()?e.title:t.replace(/_/g," ");return{kind:t,title:n,roleName:typeof e.role_name=="string"?e.role_name:typeof e.roleName=="string"?e.roleName:void 0,runtimeTaskId:typeof e.runtime_task_id=="string"?e.runtime_task_id:typeof e.runtimeTaskId=="string"?e.runtimeTaskId:void 0,entries:dp(e.entries)}}function MJ(e){const t=Array.isArray(e.activity_sections)?e.activity_sections:Array.isArray(e.activitySections)?e.activitySections:[];return{workItemId:typeof e.work_item_id=="string"?e.work_item_id:e.workItemId??"",workItemProjectionId:typeof e.work_item_projection_id=="string"?e.work_item_projection_id:e.workItemProjectionId??void 0,phase:IJ(e.phase),kanbanColumn:typeof e.kanban_column=="string"?e.kanban_column:e.kanbanColumn??"todo",title:typeof e.title=="string"?e.title:"",kind:typeof e.kind=="string"?e.kind:e.kind??void 0,isReviewTarget:!!(e.is_review_target??e.isReviewTarget),executorRoleId:e.executor_role_id??e.executorRoleId??void 0,executorRoleName:e.executor_role_name??e.executorRoleName??void 0,reviewerRoleId:e.reviewer_role_id??e.reviewerRoleId??void 0,createdAt:Nm(e.created_at??e.createdAt),updatedAt:Nm(e.updated_at??e.updatedAt),executionTurnId:e.execution_turn_id??e.executionTurnId??void 0,activitySections:t.filter(n=>!!n&&typeof n=="object").map(AJ),progressLog:dp(e.progress_log??e.progressLog)}}function Mj(e){if(!e||typeof e!="object")return;const t={};for(const[n,i]of Object.entries(e)){if(!i||typeof i!="object")continue;const r=i,a=(Array.isArray(r.work_items)?r.work_items:Array.isArray(r.workItems)?r.workItems:[]).map(MJ).sort((d,m)=>d.createdAt-m.createdAt),c=typeof r.role_key=="string"?r.role_key:typeof r.roleKey=="string"?r.roleKey:n;t[n]={roleKey:c,roleId:typeof r.role_id=="string"?r.role_id:typeof r.roleId=="string"?r.roleId:n,roleName:typeof r.role_name=="string"?r.role_name:typeof r.roleName=="string"?r.roleName:n,roleSessionId:typeof r.role_session_id=="string"?r.role_session_id:typeof r.roleSessionId=="string"?r.roleSessionId:void 0,teamInstanceId:typeof r.team_instance_id=="string"?r.team_instance_id:typeof r.teamInstanceId=="string"?r.teamInstanceId:void 0,runtimeStatus:RJ(r.runtime_status??r.runtimeStatus),aggregatedStatus:TJ(r.aggregated_status??r.aggregatedStatus),workItems:a}}return Object.keys(t).length>0?t:void 0}function eA(e){const t=WR(e.status,e.agent_status??e.agentStatus),n=e.task_id??e.taskId??"",i=e.runtime_task_id??e.runtimeTaskId??e.execution_turn_id??e.executionTurnId??n,r=e.execution_turn_id??e.executionTurnId??i,o=e.execution_mode??e.executionMode,a=String(e.exec_mode??e.execMode??"").trim().toLowerCase(),c=e.work_item_projection_id??e.workItemProjectionId,d=a==="task"||a==="project"||a==="single"||o==="task_mode"||c==="task_mode_execution",m=d?void 0:e.parent_session_id??e.parentSessionId,h={projectId:e.project_id??e.projectId??"",taskId:n,runtimeTaskId:i,executionTurnId:r,channelId:e.channel_id??e.channelId??"",sessionId:e.session_id??e.sessionId,parentSessionId:m,mode:d?"primary":e.mode??(m?"child":"primary"),title:e.title??"Untitled",status:e.status??"pending",columnId:e.column_id??e.columnId??"todo",assigneeIds:e.assignee_ids??e.assigneeIds??[],priority:e.priority??null,tags:e.tags??[],agentStatus:t,currentTool:e.current_tool??e.currentTool,displayTool:e.display_tool??e.displayTool??e.current_tool??e.currentTool,toolElapsedMs:e.tool_elapsed_ms??e.toolElapsedMs,lastToolSummary:e.last_tool_summary??e.lastToolSummary,contextTokens:e.context_tokens??e.contextTokens,contextWindow:e.context_window??e.contextWindow,contextRemainingPct:e.context_remaining_pct??e.contextRemainingPct,inputTokens:e.input_tokens??e.inputTokens,outputTokens:e.output_tokens??e.outputTokens,totalTokens:e.total_tokens??e.totalTokens,turnCostUsd:e.turn_cost_usd??e.turnCostUsd,sessionCostUsd:e.session_cost_usd??e.sessionCostUsd,pendingPermissionCount:e.pending_permission_count??e.pendingPermissionCount,drainMode:e.drain_mode??e.drainMode,progressLog:dp(e.progress_log??e.progressLog),createdAt:typeof e.created_at=="number"?e.created_at*1e3:e.createdAt??Date.now(),updatedAt:typeof e.updated_at=="number"?e.updated_at*1e3:e.updatedAt??Date.now(),messageCount:e.message_count??e.messageCount??0,latestPreview:e.latest_preview??e.latestPreview,latestSender:e.latest_sender??e.latestSender,latestMessageId:e.latest_message_id??e.latestMessageId,indexLoaded:e.index_loaded??e.indexLoaded,detailLoaded:e.detail_loaded??e.detailLoaded,fullLoaded:e.full_loaded??e.fullLoaded,hasMore:e.has_more??e.hasMore,summaryHasMore:e.summary_has_more??e.summaryHasMore,fullHasMore:e.full_has_more??e.fullHasMore,detailLoading:e.detail_loading??e.detailLoading,detailError:e.detail_error??e.detailError,viewGeneration:e.view_generation??e.viewGeneration,execMode:e.exec_mode??e.execMode,companyProfile:d?void 0:e.company_profile??e.companyProfile,orgId:d?void 0:e.org_id??e.organization_id??e.orgId??e.organizationId,preferredAgent:e.preferred_agent??e.preferredAgent,workItemProjectionId:d?void 0:c,workItemTurnType:d?void 0:e.work_item_turn_type??e.workItemTurnType,workItemRoleId:d?void 0:e.work_item_role_id??e.workItemRoleId,workItemRoleName:d?void 0:e.work_item_role_name??e.workItemRoleName,workItemGate:d?void 0:JR(e.work_item_gate??e.workItemGate),employeeAssignment:QR(e.employee_assignment??e.employeeAssignment),selectedExecutionAgent:e.selected_execution_agent??e.selectedExecutionAgent,originChannel:e.origin_channel??e.originChannel,originTaskId:e.origin_task_id??e.originTaskId??e.task_id??e.taskId,runtimeControlState:e.runtime_control_state??e.runtimeControlState,canStop:e.can_stop??e.canStop,canResume:e.can_resume??e.canResume,resumeParentSessionId:e.resume_parent_session_id??e.resumeParentSessionId,pendingRuntimeCheckpointId:e.pending_runtime_checkpoint_id??e.pendingRuntimeCheckpointId,stopIntentId:e.stop_intent_id??e.stopIntentId,handoffContext:e.handoff_context??e.handoffContext,handoffTo:e.handoff_to??e.handoffTo,artifacts:e.artifacts,isCompanyRuntime:d?!1:e.is_company_runtime??e.isCompanyRuntime,workItemLog:d?[]:_J(e.work_item_log??e.workItemLog),roleWorkItems:d?void 0:Mj(e.role_work_items??e.roleWorkItems),executorRoleWorkItems:d?void 0:Mj(e.executor_role_work_items??e.executorRoleWorkItems),draftTurnId:e.draft_turn_id??e.draftTurnId,runtimeSessionId:e.runtime_session_id??e.runtimeSessionId,resumeCursor:e.resume_cursor??e.resumeCursor,activeSubagents:e.active_subagents??e.activeSubagents,permissionRequests:e.permission_requests??e.permissionRequests,worktreePath:e.worktree_path??e.worktreePath,residentStatus:e.resident_status??e.residentStatus,actionableInboxCount:e.actionable_inbox_count??e.actionableInboxCount,protocolBacklogCount:e.protocol_backlog_count??e.protocolBacklogCount,notificationBacklogCount:e.notification_backlog_count??e.notificationBacklogCount,latestNotification:e.latest_notification??e.latestNotification};return FI(h)}function Dj(e){const t=(e.channels??[]).map(YR),n=(e.messages??[]).map(Ff),i=(e.boards??[]).map(XR),r=(e.columns??[]).map(KR),o=CJ((e.sessions??[]).map(eA),n),a=jJ((e.tasks??[]).map(ZR),o);return{channels:t,messages:n,boards:i,columns:r,tasks:a,sessions:o}}function DJ(e){return`session:${e}`}const OJ=new Set(["company_recruitment_confirmation","company_staffing_selection"]);function LJ(e){let t=null;for(const o of e){const a=o.metadata?.checkpoint_type;!a||!OJ.has(a)||(!t||(o.timestamp??0)>=(t.timestamp??0))&&(t=o)}if(!t?.metadata)return null;const n=t.metadata,i={},r=(o,a)=>{const c=String(o??"").trim(),d=String(a??"").trim();if(!c||!d)return;const m=i[c]??(i[c]=[]);m.includes(d)||m.push(d)};for(const o of n.recruitment_rationales??[])o?.selection_label&&r(o.role_id,o.selection_label);if(Object.keys(i).length===0)for(const o of n.proposals??[]){const a=o?.existing_employee?.employee_name||o?.candidate?.proposed_name||o?.candidate?.template_name||"";r(o?.role_id,a)}return Object.keys(i).length?i:null}function zJ(){try{const e=localStorage.getItem("opc_outdoor_override");if(e==="day"||e==="night")return e;if(localStorage.getItem("opc_outdoor_day")==="1")return"day";if(localStorage.getItem("opc_outdoor_night")==="1")return"night"}catch{}return"auto"}const Oj=80,PJ=new Set(["message_start","message_stop","tool_call_delta","status_snapshot","context_usage","cost_update","task_ledger_updated","prompt_prefix_state","prompt_prefix_cache_fingerprint","prefetch_started","prefetch_completed","prefetch_consumed","durable_memory_extracted","durable_memory_extraction_failed","session_memory_updated","session_memory_update_failed","tool_batch_started","tool_batch_completed","permission_predicted","turn_started","turn_completed"]),BJ=new Set(["member_inbox_updated"]);function $J(){return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.hostname}:${window.location.port||"8765"}/ws`}function HJ(e){return e==="connected"?"ok":e==="connecting"?"warn":e==="error"?"error":"off"}function Qc(e){return DV(e)}function Ts(e){return cv(e)}function Ax(e,t){if(e!=="task")return e==="org"?"custom":"corporate"}function Qo(e,t){return e!=="org"?void 0:String(t??"").trim()||void 0}function Ms(e){const t=String(e??"").trim().toLowerCase().replace("-","_");return t==="codex"||t==="claude_code"||t==="cursor"||t==="opencode"?t:"native"}function FJ(e,t=120){const n=JSON.stringify(e)??"";return n.length<=t?n:n.slice(0,t)+"…"}function VJ(e,t){const n=typeof e.runtime_status=="string"?e.runtime_status:typeof e.status=="string"?e.status:t?.runtime_status??t?.status??"idle",i=e.appearance&&typeof e.appearance=="object"?e.appearance:t?.appearance??{palette:0,hue_shift:0,seat_zone:"work_area"},r=Array.isArray(e.specialties)?e.specialties.filter(a=>typeof a=="string"):t?.specialties??[],o=typeof e.agent_id=="string"?e.agent_id:t?.agent_id??"";return{agent_id:o,name:typeof e.name=="string"&&e.name?e.name:typeof e.role_name=="string"&&e.role_name?e.role_name:t?.name??o,description:typeof e.description=="string"?e.description:t?.description??"",specialties:r,status:n,office_id:typeof e.office_id=="string"?e.office_id:t?.office_id,appearance:i,employee_id:typeof e.employee_id=="string"?e.employee_id:t?.employee_id,opc_role_id:typeof e.opc_role_id=="string"?e.opc_role_id:t?.opc_role_id,runtime_status:n,current_tool:typeof e.current_tool=="string"?e.current_tool:e.current_tool==null?void 0:t?.current_tool,current_task_id:typeof e.current_task_id=="string"?e.current_task_id:e.current_task_id==null?void 0:t?.current_task_id}}function Lj(e,t=[]){const n=new Map(t.map(i=>[i.agent_id,i]));return e.filter(i=>!!i&&typeof i=="object").map(i=>{const r=typeof i.agent_id=="string"?i.agent_id:"";return VJ(i,n.get(r))}).filter(i=>!!i.agent_id)}function zj(e){if(!e||typeof e!="object")return;const t=e;return{name:typeof t.name=="string"?t.name:void 0,employeeId:typeof t.employee_id=="string"?t.employee_id:typeof t.employeeId=="string"?t.employeeId:void 0,category:typeof t.category=="string"?t.category:void 0,experienceScore:typeof t.experience_score=="number"?t.experience_score:typeof t.experienceScore=="number"?t.experienceScore:void 0}}function Nf(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function UJ(e){const t=String(e??"").trim().toLowerCase();return t==="idle"||t==="done"||t==="failed"||t==="cancelled"}function Mx(e){const t={};if((typeof e.execution_mode=="string"?e.execution_mode:"")==="task_mode"||e.work_item_projection_id==="task_mode_execution"){const o=zj(e.employee_assignment??e.employeeAssignment);return o&&(t.employeeAssignment=o),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Ms(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Ms(e.selectedExecutionAgent)),t}typeof e.work_item_projection_id=="string"?t.workItemProjectionId=e.work_item_projection_id:typeof e.workItemProjectionId=="string"&&(t.workItemProjectionId=e.workItemProjectionId),typeof e.work_item_turn_type=="string"?t.workItemTurnType=e.work_item_turn_type:typeof e.workItemTurnType=="string"&&(t.workItemTurnType=e.workItemTurnType),typeof e.work_item_role_id=="string"?t.workItemRoleId=e.work_item_role_id:typeof e.workItemRoleId=="string"&&(t.workItemRoleId=e.workItemRoleId),typeof e.work_item_role_name=="string"?t.workItemRoleName=e.work_item_role_name:typeof e.workItemRoleName=="string"&&(t.workItemRoleName=e.workItemRoleName);const r=zj(e.employee_assignment??e.employeeAssignment);return r&&(t.employeeAssignment=r),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Ms(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Ms(e.selectedExecutionAgent)),t}function Dx(e){const t={};return e.latest_notification&&typeof e.latest_notification=="object"&&(t.latestNotification=e.latest_notification),typeof e.runtime_session_id=="string"&&(t.runtimeSessionId=e.runtime_session_id),typeof e.resume_cursor=="number"&&(t.resumeCursor=e.resume_cursor),Array.isArray(e.active_subagents)&&(t.activeSubagents=e.active_subagents),Array.isArray(e.permission_requests)&&(t.permissionRequests=e.permission_requests),typeof e.worktree_path=="string"&&(t.worktreePath=e.worktree_path),typeof e.current_tool=="string"&&(t.currentTool=e.current_tool),typeof e.display_tool=="string"&&e.display_tool.trim()&&(t.displayTool=e.display_tool),typeof e.tool_elapsed_ms=="number"&&(t.toolElapsedMs=e.tool_elapsed_ms),typeof e.last_tool_summary=="string"&&(t.lastToolSummary=e.last_tool_summary),typeof e.context_tokens=="number"&&(t.contextTokens=e.context_tokens),typeof e.context_window=="number"&&e.context_window>0&&(t.contextWindow=e.context_window),typeof e.context_remaining_pct=="number"&&(t.contextRemainingPct=e.context_remaining_pct),typeof e.input_tokens=="number"?t.inputTokens=e.input_tokens:typeof e.input_tokens_total=="number"?t.inputTokens=e.input_tokens_total:typeof e.tokens_in=="number"&&(t.inputTokens=e.tokens_in),typeof e.output_tokens=="number"?t.outputTokens=e.output_tokens:typeof e.output_tokens_total=="number"?t.outputTokens=e.output_tokens_total:typeof e.tokens_out=="number"&&(t.outputTokens=e.tokens_out),typeof e.total_tokens=="number"?t.totalTokens=e.total_tokens:typeof e.tokens_total=="number"&&(t.totalTokens=e.tokens_total),typeof e.turn_cost_usd=="number"&&(t.turnCostUsd=e.turn_cost_usd),typeof e.session_cost_usd=="number"&&(t.sessionCostUsd=e.session_cost_usd),typeof e.pending_permission_count=="number"&&(t.pendingPermissionCount=e.pending_permission_count),typeof e.drain_mode=="string"&&(t.drainMode=e.drain_mode),typeof e.resident_status=="string"&&(t.residentStatus=e.resident_status),typeof e.actionable_inbox_count=="number"&&(t.actionableInboxCount=e.actionable_inbox_count),typeof e.protocol_backlog_count=="number"&&(t.protocolBacklogCount=e.protocol_backlog_count),typeof e.notification_backlog_count=="number"&&(t.notificationBacklogCount=e.notification_backlog_count),t}function Ox(e){const t={};return e.latest_notification&&typeof e.latest_notification=="object"&&(t.latestNotification=e.latest_notification),typeof e.current_tool=="string"&&(t.currentTool=e.current_tool),typeof e.display_tool=="string"&&e.display_tool.trim()&&(t.displayTool=e.display_tool),typeof e.tool_elapsed_ms=="number"&&(t.toolElapsedMs=e.tool_elapsed_ms),typeof e.last_tool_summary=="string"&&(t.lastToolSummary=e.last_tool_summary),typeof e.context_tokens=="number"&&(t.contextTokens=e.context_tokens),typeof e.context_window=="number"&&e.context_window>0&&(t.contextWindow=e.context_window),typeof e.context_remaining_pct=="number"&&(t.contextRemainingPct=e.context_remaining_pct),typeof e.input_tokens=="number"?t.inputTokens=e.input_tokens:typeof e.input_tokens_total=="number"?t.inputTokens=e.input_tokens_total:typeof e.tokens_in=="number"&&(t.inputTokens=e.tokens_in),typeof e.output_tokens=="number"?t.outputTokens=e.output_tokens:typeof e.output_tokens_total=="number"?t.outputTokens=e.output_tokens_total:typeof e.tokens_out=="number"&&(t.outputTokens=e.tokens_out),typeof e.total_tokens=="number"?t.totalTokens=e.total_tokens:typeof e.tokens_total=="number"&&(t.totalTokens=e.tokens_total),typeof e.turn_cost_usd=="number"&&(t.turnCostUsd=e.turn_cost_usd),typeof e.session_cost_usd=="number"&&(t.sessionCostUsd=e.session_cost_usd),typeof e.pending_permission_count=="number"&&(t.pendingPermissionCount=e.pending_permission_count),typeof e.drain_mode=="string"&&(t.drainMode=e.drain_mode),typeof e.resident_status=="string"&&(t.residentStatus=e.resident_status),typeof e.actionable_inbox_count=="number"&&(t.actionableInboxCount=e.actionable_inbox_count),typeof e.protocol_backlog_count=="number"&&(t.protocolBacklogCount=e.protocol_backlog_count),typeof e.notification_backlog_count=="number"&&(t.notificationBacklogCount=e.notification_backlog_count),t}function Pj(e,t){if(!t||!e)return!1;if(t.activeSessionId===e)return!0;const n=t.activeSession;if(!n)return!1;if(n.taskId===e||n.parentSessionId===e||n.sessionId===e)return!0;const i=t.sessions.find(c=>c.taskId===e);if(!i)return!1;const r=new Set([String(n.taskId??"").trim(),String(n.sessionId??"").trim()].filter(Boolean)),o=String(i.parentSessionId??"").trim();if(o&&r.has(o))return!0;const a=String(n.parentSessionId??"").trim();return a?String(i.taskId??"").trim()===a||String(i.sessionId??"").trim()===a:!1}function GJ(e){return e==="done"||e==="delivered"?"approved":e==="failed"?"failed":e==="cancelled"?"cancelled":e==="pending"?"queued":e==="awaiting_manager_review"||e==="awaiting_review"?"awaiting_manager_review":e==="awaiting_human"?"awaiting_human":"running"}function qJ(e){return e==="approved"||e==="failed"||e==="cancelled"?"done":e==="awaiting_manager_review"||e==="awaiting_human"?"in-review":e==="queued"||e==="ready"||e==="ready_for_rework"||e==="waiting_dependencies"?"todo":"in-progress"}function WJ(e){return e==="done"||e==="delivered"?"done":e==="failed"||e==="cancelled"?"failed":e==="pending"?"pending":e==="awaiting_manager_review"||e==="awaiting_review"||e==="awaiting_human"?"waiting":"active"}function YJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function XJ(e){const t=yo(e)||e.taskId,n=e.workItemRoleId||e.assigneeIds[0]||e.taskId,i=e.workItemRoleName||n.replace(/[_-]/g," ").replace(/\b\w/g,o=>o.toUpperCase()),r=GJ(e.status);return{roleKey:n,roleId:n,roleName:i,runtimeStatus:YJ(e.agentStatus),aggregatedStatus:WJ(e.status),workItems:[{workItemId:e.workItemProjectionId||t,workItemProjectionId:e.workItemProjectionId,phase:r,kanbanColumn:qJ(r),title:e.title||i,kind:e.workItemTurnType,executorRoleId:n,executorRoleName:i,createdAt:e.createdAt,updatedAt:e.updatedAt,executionTurnId:t,progressLog:e.progressLog,activitySections:e.progressLog.length>0?[{kind:"activity",title:"Runtime activity",roleName:i,runtimeTaskId:t,entries:e.progressLog}]:[]}]}}function KJ({taskId:e,sessions:t,agents:n,onClose:i}){if(!e)return null;for(const a of t){const c=a.roleWorkItems;if(c)for(const d of Object.values(c)){const m=d.workItems.find(h=>h.executionTurnId===e);if(m)return u.jsx(SC,{role:d,focusedWorkItemId:m.workItemId,focusedExecutionTurnId:m.executionTurnId,agents:n,onClose:i})}}const r=t.find(a=>a.taskId===e||yo(a)===e);if(!r)return null;const o=XJ(r);return u.jsx(SC,{role:o,focusedExecutionTurnId:e,agents:n,onClose:i})}function ZJ(){const e=C.useRef(new ZM);C.useMemo(()=>n4(e.current),[]);const t=C.useRef(null),n=$J(),[i,r]=C.useState(n),[o,a]=C.useState(n),[c,d]=C.useState("disconnected"),[m,h]=C.useState(""),[p,g]=C.useState(null),[x,v]=C.useState([]),[b,k]=C.useState(0),[w,S]=C.useState(null),[j,N]=C.useState("openopc"),[O,R]=C.useState(!0),[D,I]=C.useState(()=>{try{return localStorage.getItem("opc_office_sidebar_collapsed")==="1"}catch{return!1}}),L=()=>I(J=>{const z=!J;try{localStorage.setItem("opc_office_sidebar_collapsed",z?"1":"0")}catch{}return z}),[M,A]=C.useState("all"),[B,W]=C.useState("workspace"),[P,G]=C.useState([]),[$,q]=C.useState(!1),[Y,Q]=C.useState(null),[V,U]=C.useState("task"),[Z,F]=C.useState("corporate"),[K,ee]=C.useState("native"),[te,se]=C.useState(null),[ae,ue]=C.useState(null),[ie,we]=C.useState(null),[je,Te]=C.useState([]),[Ge,Ze]=C.useState(""),[Ye,mt]=C.useState(null),[Ft,Mt]=C.useState([]),[jt,he]=C.useState([]),[ze,ot]=C.useState(null),[Ve,lt]=C.useState(null),[me,be]=C.useState(null),[Ae,Be]=C.useState(null),[We,Lt]=C.useState(null),[pt,ke]=C.useState(null),[qe,Qe]=C.useState(null),[$e,He]=C.useState(!1),[Vt,ei]=C.useState(null),[vt,bt]=C.useState(null),vn=C.useRef(new Set),On=C.useRef(new Set),wt=C.useRef([]),zt=C.useRef("task"),Hn=C.useRef(null),Me=C.useRef(null),ht=C.useRef(null),gt=C.useRef(null),fi=C.useRef(null),Vn=C.useRef("default"),pn=C.useRef(null),Fn=C.useRef(""),tt=C.useRef(0),mi=C.useRef(!1),Si=C.useRef(!1),Rn=C.useRef(0),wn=C.useRef(!1),$t=C.useRef(null),Cn=C.useRef(null),Xt=C.useRef(new Map),[Re,kt]=C.useState(null),[bn,wi]=C.useState(null),[In,It]=C.useState("success"),[yi,Zn]=C.useState(null),[ti,ln]=C.useState(null),[Kt,Tt]=C.useState(null),[Zt,Un]=C.useState(()=>zJ()),dn=C.useCallback(J=>(typeof J=="string"?J.trim():"")||"default",[]),Je=C.useCallback(()=>dn(Vn.current),[dn]),ni=C.useCallback(()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`,[]),Dt=C.useCallback(J=>{if(!J||typeof J!="object")return"";for(const ne of["project_id","projectId","active_project_id","activeProjectId"]){const oe=J[ne];if(typeof oe=="string"&&oe.trim())return oe.trim()}const z=J.data;if(z&&typeof z=="object")for(const ne of["project_id","projectId"]){const oe=z[ne];if(typeof oe=="string"&&oe.trim())return oe.trim()}return""},[]),Ot=C.useCallback((J,z=!1)=>{const ne=Dt(J);return ne?ne===Je():z},[Je,Dt]),An=C.useCallback(J=>{if(!J||typeof J!="object")return"";const z=J.switch_seq??J.switchSeq;return typeof z=="string"?z.trim():""},[]),Gn=C.useCallback(J=>{if(!J||typeof J!="object")return null;const z=J.view_generation??J.viewGeneration;if(typeof z=="number")return z;if(typeof z=="string"&&z.trim()){const ne=Number(z);return Number.isFinite(ne)?ne:null}return null},[]),jn=C.useCallback(J=>{const z=Dt(J);if(!z)return!1;const ne=pn.current;if(z!==Je()&&z!==ne)return!1;const oe=Gn(J);if(oe!==null&&oe!==tt.current)return!1;const pe=An(J);return!pe||!Fn.current||pe===Fn.current},[Je,An,Gn,Dt]),Ln=C.useCallback(J=>{if(!J||J.error!=="task_not_found")return!1;if(!Ot(J,!1))return!0;if((typeof J.action=="string"?J.action:"")!=="session_detail")return!1;const ne=Gn(J);if(ne!==null&&ne!==tt.current)return!0;const oe=typeof J.task_id=="string"?J.task_id:"";return oe?!(gt.current?.sessions??[]).some(Ie=>Ie.taskId===oe):!0},[Ot,Gn]),xi=C.useCallback(()=>{for(const J of Xt.current.values())clearTimeout(J);Xt.current.clear()},[]),de=C.useCallback((J,z="full",ne=!1,oe)=>{if(!J)return;const pe=oe||Je(),Ie=tt.current;if(!ne&&!Pj(J,gt.current))return;const Xe=`${pe}:${Ie}:${J}`,Fe=Xt.current.get(Xe);Fe&&(clearTimeout(Fe),Xt.current.delete(Xe));const Bt=setTimeout(()=>{if(Xt.current.delete(Xe),pe!==Je()||Ie!==tt.current||!ne&&!Pj(J,gt.current))return;const an=t.current;if(gt.current?.updateSession(J,{detailLoading:!0,detailError:void 0,viewGeneration:Ie}),!an){gt.current?.updateSession(J,{detailLoading:!1,detailError:"connection_unavailable"});return}an.sessionDetail(pe,J,{limit:200,detailLevel:z,include:z==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:Ie}).then(Ht=>{Ht.ok===!1&&pe===Je()&&Ie===tt.current&>.current?.updateSession(J,{detailLoading:!1,detailError:String(Ht.error??"request_failed")})})},180);Xt.current.set(Xe,Bt)},[Je]),ve=C.useCallback((J,z="success")=>{wi(J),It(z),setTimeout(()=>wi(null),3e3)},[]),Pe=C.useCallback(()=>{Cn.current&&(clearTimeout(Cn.current),Cn.current=null),wn.current=!1,$t.current=null},[]),ut=C.useCallback(J=>{Pe(),wn.current=!0,$t.current=J,Cn.current=setTimeout(()=>{!wn.current||$t.current!==J||(Pe(),h("create_session_timeout"),ve("Session creation timed out. Please try again.","error"))},3e4)},[Pe,ve]),on=c4(),Pt=wV(),ce=PV(),Se=$V(),Le=ce.activeSessionId,Ue=C.useMemo(()=>Le?LJ(Pt.getChannelMessages(DJ(Le))):null,[Le,Pt]);C.useCallback(J=>{const z=dn(J);Vn.current=z,xi(),Pt.initFromBackend(z,[],[]),on.initFromBackend(z,[],[],[]),ce.initFromBackend(z,[]),Pe(),Tt(null),ue(null),we(null)},[on,Pt,Pe,xi,dn,ce]);const _t=C.useCallback(J=>{const z=dn(J),ne=ni();return mi.current=!0,Fn.current=ne,tt.current+=1,pn.current=z,xi(),h(`Switching to ${z}...`),ne},[xi,ni,dn]),ct=C.useRef(!1);C.useLayoutEffect(()=>{Me.current=Pt,ht.current=on,gt.current=ce,fi.current=Se,Hn.current=J=>{if(!on.activeBoardId||on.activeBoardColumns.length===0)return;const ne=on.activeBoardColumns.find(oe=>oe.name==="Todo")?.id??on.activeBoardColumns[0].id;on.createTask({boardId:on.activeBoardId,columnId:ne,title:J.title,priority:J.priority,assigneeIds:J.assignee_id?[J.assignee_id]:[]})},ct.current=!0}),C.useEffect(()=>{wt.current=P},[P]),C.useEffect(()=>{zt.current=V},[V]),C.useEffect(()=>{const J=e.current,z=ne=>{S(ne),k(oe=>oe+1)};return J.on("agentSelected",z),()=>{J.off("agentSelected",z)}},[]);const nt=C.useRef(new Map),hn=C.useRef(null),ii=C.useCallback(J=>{const z=nt.current;if(z.size===0)return;const ne=J?[J]:Array.from(z.keys());for(const oe of ne){const pe=z.get(oe);if(!pe)continue;z.delete(oe);const Ie=gt.current;pe.draftText&&Ie?.appendDraft(oe,pe.draftText,pe.draftIteration,pe.draftTurnId),Ie?.updateSession(oe,pe.sessionPatch),Object.keys(pe.kanbanPatch).length>0&&ht.current?.updateTask(oe,pe.kanbanPatch)}z.size===0&&hn.current!==null&&(window.clearTimeout(hn.current),hn.current=null)},[]),qn=C.useCallback(()=>{hn.current===null&&(hn.current=window.setTimeout(()=>{hn.current=null,ii()},80))},[ii]),Ct=C.useRef(null),tn=C.useCallback(()=>{Ct.current===null&&(Ct.current=window.setTimeout(()=>{Ct.current=null,k(J=>J+1)},300))},[]);C.useEffect(()=>{const J=new iM(i,{onSnapshot:z=>{if(!jn(z))return;g(z);const ne=z.timeline.slice(-Oj);v(ne);const oe=new Set;for(const Ie of ne)oe.add(Ie.event_id);On.current=oe,e.current.pushSnapshot(z);const pe=Object.entries(z.agents??{});if(pe.length>0){const Ie=Lj(pe.map(([Xe,Fe])=>({...Fe&&typeof Fe=="object"?Fe:{},agent_id:Xe})),wt.current);wt.current=Ie,G(Ie)}z.exec_mode&&U(Ts(z.exec_mode)),z.company_profile&&F(Qc(z.company_profile)),z.task_preferred_agent&&ee(Ms(z.task_preferred_agent)),k(Ie=>Ie+1)},onEvent:z=>{try{if(!Ot(z,!1))return;if(On.current.has(z.event_id)){On.current.delete(z.event_id);return}if(v(ne=>[...ne.slice(-Oj+1),z]),e.current.pushEvent(z),z.type==="task_routed"&&z.agent_id){if(zt.current==="company"||zt.current==="org")return;const ne=z.data?.task_id;if(ne&&!ht.current?.tasks.find(oe=>oe.id===ne)){const oe=typeof z.data?.content_preview=="string"?z.data.content_preview.slice(0,80):"Task";Hn.current?.({title:oe,priority:null,assignee_id:z.agent_id})}}if(z.type==="task_done"&&z.agent_id&&Q(z.agent_id),["turn_started","assistant_delta","thinking_delta","status_snapshot","tool_started","tool_progress","tool_completed","permission_requested","permission_resolved","cost_update","context_usage","context_warning","subagent_started","subagent_updated","subagent_completed","member_inbox_updated","compaction_applied","checkpoint_saved","turn_completed","turn_failed"].includes(z.type)){const ne=z.data,oe=typeof ne.task_id=="string"?ne.task_id:"";if(oe){const pe=z.type==="assistant_delta"||z.type==="thinking_delta";pe||ii(oe);const Ie=gt.current,Xe=ht.current,Fe=Ie?.sessions.find(xr=>xr.taskId===oe),Bt=typeof ne.work_item_projection_id=="string"?ne.work_item_projection_id:"",Ht=(typeof ne.execution_mode=="string"?ne.execution_mode:"")==="task_mode"||Bt==="task_mode_execution",Ut=typeof ne.turn_id=="string"&&ne.turn_id?ne.turn_id:typeof ne.canonical_turn_id=="string"&&ne.canonical_turn_id?ne.canonical_turn_id:typeof ne.execution_turn_id=="string"&&ne.execution_turn_id?ne.execution_turn_id:void 0,Gt=!!Bt&&Bt!=="task_mode_execution"&&!Ht;Gt&&!pe&&Fe?.isCompanyRuntime!==!0&&Ie?.setCompanyRuntime(oe,!0);const Bi={lastRuntimeEventType:z.type,...z.type==="member_inbox_updated"?{}:{updatedAt:Date.now()},...Dx(ne)},Mi=typeof ne.tool_name=="string"?ne.tool_name:void 0,xa={...Ox(ne),...Mi!==void 0?{currentTool:Mi||void 0}:{},...Mi?{displayTool:Mi}:{}};if(pe){const xr=nt.current;let pi=xr.get(oe);const va=z.type==="assistant_delta"&&typeof ne.text=="string"?ne.text:"";pi&&va&&pi.draftText&&pi.draftTurnId!==void 0&&Ut!==void 0&&pi.draftTurnId!==Ut&&(ii(oe),pi=void 0),pi||(pi={draftText:"",sessionPatch:{},kanbanPatch:{}},xr.set(oe,pi)),va&&(pi.draftText+=va,pi.draftIteration=typeof ne.iteration=="number"?ne.iteration:pi.draftIteration??Fe?.draftIteration,Ut!==void 0&&(pi.draftTurnId=Ut)),pi.sessionPatch={...pi.sessionPatch,...Bi,...Gt?{isCompanyRuntime:!0}:{}},pi.kanbanPatch={...pi.kanbanPatch,...xa},qn()}else(z.type==="turn_started"||z.type==="turn_completed"||z.type==="turn_failed"||z.type==="checkpoint_saved")&&Ie?.clearDraft(oe),Ie?.updateSession(oe,Bi),Xe?.updateTask(oe,xa);const Us=Ht&&PJ.has(z.type)||BJ.has(z.type);z.type!=="assistant_delta"&&!Us&&de(oe)}}if(z.type==="agent_removed"&&z.agent_id){const ne=z.agent_id;EM(ne);const oe=Me.current;oe&&(oe.markSenderDeleted(ne),oe.removeParticipant(ne))}tn()}catch(ne){console.error("[onEvent] Error:",ne,z)}},onAck:z=>{try{if(z.ok===!1){if(z.action==="create_session"&&Pe(),Ln(z))return;z.action==="session_detail"&&typeof z.task_id=="string"&>.current?.updateSession(z.task_id,{detailLoading:!1,detailError:String(z.error??"request_failed")}),h(String(z.error??"request_failed")),ln(null),Zn(null),ve(String(z.error??"Request failed"),"error")}if(z.ok&&z.action==="employee_imported"&&ve("Employee deployed to office!"),z.ok&&z.action==="talent_imported"&&ve(`Imported ${z.count??0} templates!`),z.ok&&z.action==="talent_hired"&&(kt(null),ve(`${z.name??"Agent"} hired and added to office!`)),z.ok&&z.action==="architecture_reset"&&(ke(null),Qe(null)),z.ok&&z.action==="session_detail"){if(!Ot(z,!1))return;const ne=Gn(z);if(ne!==null&&ne!==tt.current)return;const oe=typeof z.task_id=="string"?z.task_id:"",pe=Array.isArray(z.messages)?z.messages.map(Ff):[],Ie=typeof z.message_count=="number"?z.message_count:pe.length,Xe=z.detail_level==="full"?"full":"summary",Fe=Me.current;Fe&&pe.length>0&&Fe.mergeMessagesFromBackend(pe);const Bt=gt.current;if(Bt&&oe){const an=Bt.sessions.find(Us=>Us.taskId===oe),Ht=Xe==="full"?an?.fullHasMore:an?.summaryHasMore,Ut=bJ(Ht,z.has_more===!0,z.client_history_page===!0),Gt=String(an?.draftTurnId??"").trim();Gt&&pe.some(Us=>{if(Us.sender==="user")return!1;const xr=Us.metadata??{};return String(xr.transcript_kind??xr.kind??"").trim()!=="runtime_v2_assistant"?!1:String(xr.canonical_turn_id??xr.turn_id??"").trim()===Gt})&&Bt.clearDraft(oe);const Mi=z.session_state,xa=Mi&&typeof Mi=="object"?eA(Mi):null;Bt.updateSession(oe,{...xa??{},...typeof z.handoff_context=="string"?{handoffContext:z.handoff_context}:{},...typeof z.handoff_to=="string"?{handoffTo:z.handoff_to}:{},messageCount:Ie,detailLoaded:!0,...Xe==="full"?{fullLoaded:!Ut}:{},hasMore:Ut,...Xe==="full"?{fullHasMore:Ut}:{summaryHasMore:Ut},detailLoading:!1,detailError:void 0,viewGeneration:ne??tt.current})}}if(Array.isArray(z.agents)){const ne=Lj(z.agents,wt.current);wt.current=ne,G(ne);for(const oe of ne)e.current.ensureAgent(oe.agent_id,oe.name,oe.office_id,oe.appearance?.palette,oe.appearance?.desk_id);k(oe=>oe+1)}if(z.ok&&(z.agent_id||z.deleted)&&(z.deleted&&(ln(null),Zn(null),ve("Agent removed")),z.agent_id&&!z.deleted&&ve("Agent created!"),t.current?.listAgents()),z.ok&&Array.isArray(z.projects)){const ne=fi.current;if(ne){const oe=Je(),pe=!Si.current,Ie=!Si.current&&!mi.current,Xe=typeof z.active_project_id=="string"?z.active_project_id.trim():"",Fe=z.action==="create_project"&&typeof z.project_id=="string"?z.project_id.trim():"",Bt=Ie?dn(Fe||Xe||Vn.current):Fe?dn(Fe):Je();if(Fe&&(mi.current=!0),Si.current=!0,Vn.current=Bt,ne.initFromBackend(z.projects,Bt),Bt!==oe||pe){const an=ni();Fn.current=an,pn.current=Bt,tt.current+=1,h(`Switching to ${Bt}...`),t.current?.switchProject(Bt,an)}}}if(z.ok&&Array.isArray(z.channels)){if(!jn(z))return;const ne=Dj(z),oe=Dt(z);if(!oe)return;const pe=pn.current===oe||Je()!==oe;Vn.current=oe,pn.current=null,fi.current?.setActiveProject(oe),pe&&(xi(),Tt(null),ue(null),we(null)),h("");const Ie=Me.current;Ie&&Ie.initFromBackend(oe,ne.channels,ne.messages);const Xe=ht.current;Xe&&Xe.initFromBackend(oe,ne.boards,ne.columns,ne.tasks);const Fe=gt.current;if(Fe){Fe.initFromBackend(oe,ne.sessions);const Bt=Fe.activeSessionId;Bt&&de(Bt,"full",!0)}}}catch(ne){console.error("[onAck] Error:",ne)}},onStatus:(z,ne)=>{if(d(z),h(ne??""),z==="connected"){const oe=Je();J.listProjects(),J.orgInfo(),J.orgSavedList(),J.collabSync(oe,void 0,tt.current)}},onCollabMessage:(z,ne)=>{try{if(z==="project_index_push"){if(!jn(ne))return}else if(!Ot(ne,!1))return;const oe=Me.current;if(z==="chat_new_message")oe&&oe.addMessageFromBackend(Ff(ne));else if(z==="chat_channel_created")oe&&oe.addChannelFromBackend(YR(ne));else if(z==="session_runtime_control"){const pe=gt.current;if(pe){const Ie=Array.isArray(ne.task_ids)?ne.task_ids.map(String).filter(Boolean):[],Xe={runtimeControlState:String(ne.runtime_control_state??ne.runtimeControlState??"idle"),canStop:!!(ne.can_stop??ne.canStop),canResume:!!(ne.can_resume??ne.canResume),resumeParentSessionId:String(ne.resume_parent_session_id??ne.resumeParentSessionId??""),pendingRuntimeCheckpointId:String(ne.pending_runtime_checkpoint_id??ne.pendingRuntimeCheckpointId??""),stopIntentId:String(ne.stop_intent_id??ne.stopIntentId??"")};for(const Fe of Ie)pe.updateSession(Fe,Xe)}}else if(z==="board_task_status_changed"){const pe=String(ne.task_id??""),Ie=String(ne.column_id??""),Xe=String(ne.status??""),Fe=["done","failed","cancelled"].includes(Xe);if(pe&&Ie){const Bt=ht.current;if(Bt){const Ht=Bt.tasks.find(Ut=>Ut.id===pe);if(Ht){const Ut={};Ht.columnId!==Ie&&Bt.moveTask(pe,Ie,0),Xe==="running"?(!Ht.agentStatus||Ht.agentStatus==="idle")&&(Ut.agentStatus="reflecting"):(Ht.agentStatus||Ht.currentTool||Ht.displayTool)&&(Ut.agentStatus=void 0,Ut.currentTool=void 0,Ut.displayTool=void 0),Object.keys(Ut).length>0&&Bt.updateTask(pe,Ut)}}const an=gt.current;if(an){const Ht=an.sessions.find(Gt=>Gt.taskId===pe),Ut={columnId:Ie,status:Xe||Ie};Xe==="running"?(!Ht?.agentStatus||Ht.agentStatus==="idle")&&(Ut.agentStatus="reflecting"):(Ht?.agentStatus||Ht?.currentTool||Ht?.displayTool||Fe)&&(Ut.agentStatus=void 0,Ut.currentTool=void 0,Ut.displayTool=void 0),Object.assign(Ut,B4(Ht,Xe)),an.updateSession(pe,{...Ut})}}}else if(z==="execution_mode_resolved"){const pe=String(ne.mode??""),Ie=String(ne.profile??"");if(pe){const Xe=Ts(pe);U(Xe),F(Xe==="org"?"custom":Xe==="company"?Qc(Ie):"corporate")}else Ie&&F(Qc(Ie))}else if(z==="project_run_updated"||z==="seat_digest_updated"||z==="work_item_batch_updated")t.current?.collabSync(Je(),void 0,tt.current);else if(z==="collab_sync_push"||z==="project_index_push"){const pe=String(ne.sync_scope??ne.syncScope??"").toLowerCase(),Ie=z==="project_index_push"||pe==="index";if(!jn(ne))return;const Xe=Dj(ne),Fe=Dt(ne);if(!Fe)return;const Bt=pn.current===Fe||Je()!==Fe;if(Vn.current=Fe,pn.current=null,fi.current?.setActiveProject(Fe),Bt&&(xi(),Tt(null),ue(null),we(null)),h(""),Ie){const Gt=gt.current;Gt&&Gt.initFromBackend(Fe,Xe.sessions,{preserveExistingWhenIncomingPartial:!0,preserveActiveWhenMissing:!0}),t.current?.collabSync(Fe,void 0,tt.current);return}const an=Me.current;an&&an.initFromBackend(Fe,Xe.channels,Xe.messages);const Ht=ht.current;Ht&&Ht.initFromBackend(Fe,Xe.boards,Xe.columns,Xe.tasks);const Ut=gt.current;if(Ut){Ut.initFromBackend(Fe,Xe.sessions);const Gt=Ut.activeSessionId;Gt&&de(Gt,"full",!0)}}}catch(oe){console.error("[onCollabMessage] Error:",oe)}},onAgentRuntimeUpdate:z=>{if(!Ot(z,!1))return;z.agent_id&&G(oe=>{const pe=oe.map(Ie=>Ie.agent_id===z.agent_id?{...Ie,status:z.status,runtime_status:z.status,current_tool:z.current_tool??void 0,current_task_id:z.task_id??void 0}:Ie);return wt.current=pe,pe});const ne=ht.current;if(ne&&z.task_id){const oe=z,pe=Ox(oe),Ie=Dx(oe);if(Nf(oe,"current_tool")){const Fe=typeof oe.current_tool=="string"&&oe.current_tool.trim()?oe.current_tool:void 0;pe.currentTool=Fe,Ie.currentTool=Fe,Fe&&(pe.displayTool=Fe,Ie.displayTool=Fe)}if(Nf(oe,"display_tool")){const Fe=typeof oe.display_tool=="string"&&oe.display_tool.trim()?oe.display_tool:void 0;Fe&&(pe.displayTool=Fe,Ie.displayTool=Fe)}if(UJ(z.status)&&(pe.displayTool=void 0,Ie.displayTool=void 0),Nf(oe,"tool_elapsed_ms")){const Fe=typeof oe.tool_elapsed_ms=="number"?oe.tool_elapsed_ms:void 0;pe.toolElapsedMs=Fe,Ie.toolElapsedMs=Fe}if(Nf(oe,"last_tool_summary")){const Fe=typeof oe.last_tool_summary=="string"?oe.last_tool_summary:void 0;pe.lastToolSummary=Fe,Ie.lastToolSummary=Fe}typeof z.iteration=="number"&&(pe.iterationCount=z.iteration),ne.updateTask(z.task_id,{agentStatus:z.status,...pe});const Xe=gt.current;Xe&&Xe.updateSession(z.task_id,{agentStatus:z.status,...Ie,updatedAt:Date.now()}),de(z.task_id)}},onWorkerNotification:z=>{if(!Ot(z,!1))return;const ne=z,oe=typeof z.task_id=="string"?z.task_id:"";if(!oe)return;const pe=ne;gt.current?.updateSession(oe,{...Dx(ne),latestNotification:pe,updatedAt:Date.now()}),ht.current?.updateTask(oe,{...Ox(ne),latestNotification:pe}),de(oe)},onKanbanViewData:z=>{if(!Ot(z,!1))return;const ne=ht.current;ne&&ne.initFromBackend(Dt(z)||Je(),(z.boards??[]).map(XR),(z.columns??[]).map(KR),(z.tasks??[]).map(ZR))},onSessionProgress:z=>{if(!Ot(z,!1))return;const ne=gt.current;if(!(!ne||!z.task_id||!z.entry)){if(ne.appendProgress(z.task_id,{type:z.entry.type,summary:z.entry.summary,detail:z.entry.detail,timestamp:z.entry.timestamp*1e3,turnId:typeof z.entry.turn_id=="string"?z.entry.turn_id:typeof z.entry.turnId=="string"?z.entry.turnId:void 0,itemId:typeof z.entry.item_id=="string"?z.entry.item_id:typeof z.entry.itemId=="string"?z.entry.itemId:void 0,streamId:typeof z.entry.stream_id=="string"?z.entry.stream_id:typeof z.entry.streamId=="string"?z.entry.streamId:void 0,toolCallId:typeof z.entry.tool_call_id=="string"?z.entry.tool_call_id:typeof z.entry.toolCallId=="string"?z.entry.toolCallId:void 0,permissionGroupKey:typeof z.entry.permission_group_key=="string"?z.entry.permission_group_key:typeof z.entry.permissionGroupKey=="string"?z.entry.permissionGroupKey:void 0,seq:typeof z.entry.seq=="number"?z.entry.seq:void 0,executionMode:typeof z.entry.execution_mode=="string"?z.entry.execution_mode:typeof z.entry.executionMode=="string"?z.entry.executionMode:void 0}),z.entry.type==="tool_call"){const oe=String(z.entry.summary??"").trim();ne.updateSession(z.task_id,{...oe?{currentTool:oe,displayTool:oe}:{},updatedAt:z.entry.timestamp*1e3})}z.entry.type!=="thinking"&&z.entry.type!=="verification"&&de(z.task_id)}},onBoardEvent:z=>{if(!Ot(z,!1))return;const ne=ht.current;if(!ne)return;const oe=String(z.task_id??"");if(!oe)return;const pe=gt.current;if(pe&&pe.sessions.find(Bi=>Bi.taskId===oe)?.mode==="child")return;const Ie=Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):[],Xe=Mx(z);if(ne.tasks.find(Gt=>Gt.id===oe)){const Gt={};z.title&&(Gt.title=String(z.title)),z.display_id&&(Gt.displayId=String(z.display_id)),Ie.length>0&&(Gt.assigneeIds=Ie),Object.assign(Gt,Xe),Object.keys(Gt).length>0&&ne.updateTask(oe,Gt);return}const Bt=String(z.board_id??ne.activeBoardId??"default"),an=ne.columns.filter(Gt=>Gt.boardId===Bt),Ut=an.find(Gt=>Gt.name==="Todo")?.id??an[0]?.id??"";Ut&&(ne.createTask({boardId:Bt,columnId:Ut,title:String(z.title??"Untitled"),taskId:oe,displayId:z.display_id?String(z.display_id):void 0,assigneeIds:Ie}),Object.keys(Xe).length>0&&ne.updateTask(oe,Xe))},onSessionCreated:z=>{try{if(!Ot(z,!1))return;const ne=gt.current;if(!ne)return;const oe=String(z.task_id??"");if(!oe)return;const pe=Dt(z);if(!pe)return;const Ie=oe?ne.sessions.find(Gt=>Gt.taskId===oe):void 0,Xe=Mx(z),Fe=Ts(z.exec_mode??Ie?.execMode),Bt=Ax(Fe,z.company_profile??Ie?.companyProfile),an=Qo(Fe,z.org_id??z.organization_id??Ie?.orgId);Fe==="org"&&an&&ke(an),ne.createSession({projectId:pe,taskId:oe,channelId:z.channel_id,sessionId:z.session_id,parentSessionId:z.parent_session_id,originTaskId:z.origin_task_id??Ie?.originTaskId??oe,mode:z.parent_session_id?"child":"primary",execMode:Fe,companyProfile:Bt,orgId:an,preferredAgent:Ms(z.preferred_agent??Ie?.preferredAgent),title:z.title,status:z.status,columnId:Ie?.columnId??"todo",assigneeIds:Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):Ie?.assigneeIds??[],priority:Ie?.priority??null,tags:Ie?.tags??[],progressLog:Ie?.progressLog??[],createdAt:typeof z.created_at=="number"?z.created_at*1e3:Ie?.createdAt??Date.now(),updatedAt:Date.now(),messageCount:0,...Xe});const Ht=ht.current;if(Ht&&Fe==="task"&&!z.parent_session_id&&oe&&!Ht.tasks.find(Gt=>Gt.id===oe)&&Ht.activeBoardId){const Bi=Ht.columns.filter(Mi=>Mi.boardId===Ht.activeBoardId).find(Mi=>Mi.name==="Todo");Bi&&Ht.createTask({boardId:Ht.activeBoardId,columnId:Bi.id,title:z.title,taskId:oe,assigneeIds:Ie?.assigneeIds??[]})}if(wn.current){if($t.current!==pe)return;Pe(),ne.setActiveSession(z.task_id),de(z.task_id,"full",!0)}}catch(ne){console.error("[onSessionCreated] Error:",ne)}},onSessionUpdated:z=>{try{if(!Ot(z,!1))return;const ne=gt.current;if(!ne||!z.task_id)return;const oe=Ts(z.exec_mode??ne.sessions.find(pe=>pe.taskId===z.task_id)?.execMode);ne.updateSession(z.task_id,{...z.exec_mode?{execMode:oe}:{},...z.exec_mode||z.company_profile?{companyProfile:Ax(oe,z.company_profile)}:{},..."org_id"in z||"organization_id"in z?{orgId:Qo(oe,z.org_id??z.organization_id)}:{},...z.preferred_agent?{preferredAgent:Ms(z.preferred_agent)}:{},...z.selected_execution_agent?{selectedExecutionAgent:Ms(z.selected_execution_agent)}:{}}),(z.exec_mode==="org"||z.exec_mode==="custom")&&(z.org_id||z.organization_id)&&ke(String(z.org_id??z.organization_id))}catch(ne){console.error("[onSessionUpdated] Error:",ne)}},onSessionMessage:z=>{try{if(!Ot(z,!1))return;const ne=Me.current;if(!ne)return;const oe=Ff(z);console.debug("[onSessionMessage]",oe.sender,oe.channelId,oe.content?.slice(0,60)),ne.addMessageFromBackend(oe);const pe=oe.channelId.startsWith("session:")?oe.channelId.slice(8):"";pe&&oe.sender!=="user"&&(gt.current?.clearDraft(pe),de(pe,"full",!0))}catch(ne){console.error("[onSessionMessage] Error:",ne)}},onSessionTitleUpdated:z=>{try{if(!Ot(z,!1))return;const ne=gt.current;ne&&ne.updateSession(z.task_id,{title:z.title});const oe=ht.current;if(oe){const Ie=ne?.sessions.find(Fe=>Fe.taskId===z.task_id)?.originTaskId??z.task_id,Xe=oe.boards.find(Fe=>Fe.id===Ie);Xe&&Xe.name!==z.title&&oe.updateBoardName(Ie,z.title)}}catch(ne){console.error("[onSessionTitleUpdated] Error:",ne)}},onSessionDeleted:z=>{try{if(!Ot(z,!1))return;const ne=gt.current;if(!ne)return;ne.activeSessionId===z.task_id&&ne.setActiveSession(null),ne.deleteSession(z.task_id);const oe=ht.current;oe&&oe.deleteTask(z.task_id);const pe=Me.current;pe&&pe.removeSessionData(z.task_id)}catch(ne){console.error("[onSessionDeleted] Error:",ne)}},onProjectSwitched:z=>{if(!jn(z))return;const ne=typeof z.project_id=="string"?z.project_id.trim():"";ne&&(pn.current=ne,h(`Switching to ${ne}...`))},onProjectDeleted:z=>{const ne=fi.current;ne&&ne.removeProject(z.project_id)},onOrgInfo:z=>{const ne=hN(z);se(ne),Qe(oe=>oe===null?ne?.org_version??0:oe),(z?.project_run?.execution_model==="multi_team_org"||Array.isArray(z?.work_items)&&z.work_items.length>0)&&t.current?.collabSync(Je(),void 0,tt.current)},onCommsState:z=>{Ot(z,!1)&&ue(z)},onCommsMessage:z=>{Ot(z,!0)&&we(z)},onTalentList:z=>{Te(z.templates??[]),z.talent_dir&&Ze(z.talent_dir)},onEmployeeDetail:z=>{mt(z)},onReorgList:z=>{Mt(z.proposals??[])},onOrgConfigExport:z=>{lt(z.yaml??"")},onOrgConfigImport:z=>{z.ok?(be(z.preview??null),Be(null),z.dry_run||(ke(null),Qe(null))):(Be(z.error??"Import failed"),be(null))},onOrgSavedList:z=>{Lt(z.orgs??[]),"active_name"in z&&ke(z.active_name??null)},onOrgSavedSaveAs:z=>{z.ok?(t.current?.orgSavedList(),ke(z.name),Qe(null),bt({kind:"ok",text:`Saved "${z.name}"`})):bt({kind:"error",text:`Save failed: ${z.error??"unknown"}`})},onOrgSavedCreate:z=>{if(He(!1),ei({...z,nonce:Date.now()}),z.ok){const ne=z.organization_id||z.name;ke(ne),U("org"),F("custom"),t.current?.orgSavedList(),t.current?.orgInfo(),Qe(null),bt({kind:"ok",text:`Created "${z.organization_name||ne}"`})}else bt({kind:"error",text:`Create failed: ${z.error??"unknown"}`})},onOrgSavedLoad:z=>{z.ok?(ke(z.name),U("org"),F("custom"),t.current?.orgSavedList(),Qe(null),bt({kind:"ok",text:`Loaded "${z.name}"`})):bt({kind:"error",text:`Load failed: ${z.error??"unknown"}`})},onOrgSavedDelete:z=>{z.ok?(t.current?.orgSavedList(),ke(ne=>ne===z.name?(Qe(null),null):ne),bt({kind:"ok",text:`Deleted "${z.name}"`})):bt({kind:"error",text:`Delete failed: ${z.error??"unknown"}`})},onMarketBrowse:z=>{he(z.presets??[])},onMarketPreview:z=>{ot(z)},onChildSessionCreated:z=>{if(!Ot(z,!1))return;const ne=gt.current;if(!ne)return;const oe=Mx(z),pe=Dt(z);if(pe&&(ne.createSession({projectId:pe,taskId:z.task_id,channelId:z.channel_id??`session:${z.task_id}`,sessionId:z.session_id,parentSessionId:z.parent_session_id,originTaskId:z.origin_task_id??z.task_id,mode:"child",orgId:String(z.org_id??z.organization_id??"").trim()||void 0,title:z.title,status:"pending",columnId:"todo",assigneeIds:z.agent_id?[z.agent_id]:[],priority:null,tags:[],createdAt:Date.now(),updatedAt:Date.now(),messageCount:0,progressLog:[],...oe}),z.parent_session_id)){const Ie=ne.sessions.find(Xe=>Xe.sessionId===z.parent_session_id||Xe.taskId===z.parent_session_id);Ie&&!Ie.isCompanyRuntime&&ne.setCompanyRuntime(Ie.taskId,!0)}},onWorkItemProgress:z=>{if(!Ot(z,!1))return;const ne=gt.current;if(!ne||!z.task_id||!z.entry)return;const oe=typeof z.entry.work_item_projection_id=="string"?z.entry.work_item_projection_id:"",pe=oe&&oe!=="company_runtime"?oe:void 0,Ie=typeof z.entry.runtime_task_id=="string"&&z.entry.runtime_task_id?z.entry.runtime_task_id:typeof z.runtime_task_id=="string"&&z.runtime_task_id?z.runtime_task_id:typeof z.entry.execution_turn_id=="string"&&z.entry.execution_turn_id?z.entry.execution_turn_id:typeof z.execution_turn_id=="string"&&z.execution_turn_id?z.execution_turn_id:void 0,Xe=typeof z.entry.execution_turn_id=="string"&&z.entry.execution_turn_id?z.entry.execution_turn_id:typeof z.execution_turn_id=="string"&&z.execution_turn_id?z.execution_turn_id:Ie;ne.updateSession(z.task_id,{isCompanyRuntime:!0,...pe?{workItemProjectionId:pe}:{}});const Fe=ht.current;Fe&&pe&&Fe.updateTask(z.task_id,{workItemProjectionId:pe}),ne.appendWorkItemProgress(z.task_id,{timestamp:z.entry.timestamp*1e3,type:z.entry.type,workItemProjectionId:pe,workItemTurnType:typeof z.entry.work_item_turn_type=="string"?z.entry.work_item_turn_type:void 0,workItemProjectionTitle:typeof z.entry.work_item_projection_title=="string"?z.entry.work_item_projection_title:void 0,runtimeTaskId:Ie,executionTurnId:Xe,roleName:z.entry.role_name,detail:z.entry.detail})}});return t.current=J,J.connect(),()=>{J.disconnect();for(const z of vn.current)clearTimeout(z);vn.current.clear();for(const z of Xt.current.values())clearTimeout(z);Xt.current.clear(),hn.current!==null&&(window.clearTimeout(hn.current),hn.current=null),nt.current.clear(),Ct.current!==null&&(window.clearTimeout(Ct.current),Ct.current=null)}},[i]),C.useEffect(()=>{const J=()=>{if(typeof document<"u"&&document.visibilityState==="hidden")return;const ne=Date.now();ne-Rn.current<1500||(Rn.current=ne,t.current?.collabSync(Je(),void 0,tt.current))},z=()=>{document.visibilityState==="visible"&&J()};return window.addEventListener("focus",J),document.addEventListener("visibilitychange",z),()=>{window.removeEventListener("focus",J),document.removeEventListener("visibilitychange",z)}},[Je]),C.useEffect(()=>{if(!vt)return;const J=setTimeout(()=>bt(null),3e3);return()=>clearTimeout(J)},[vt]);const gn=C.useCallback(()=>{t.current?.orgSavedList()},[]),Ui=C.useCallback((J,z)=>{t.current?.orgSavedSaveAs(J,z)},[]),Gi=C.useCallback((J,z)=>{He(!0),ei(null),t.current?.orgSavedCreate(J,z)},[]),ma=C.useCallback(J=>{t.current?.orgSavedLoad(J)},[]),Yl=C.useCallback(J=>{t.current?.orgSavedDelete(J)},[]),Bs=C.useCallback(()=>{U("company"),F("corporate"),Qe(null),t.current?.setExecutionMode("company","corporate",K),t.current?.orgInfo()},[K]);C.useEffect(()=>{if(!Y)return;const J=Y;e.current.setAgentBubble(J,"Done!");const z=setTimeout(()=>{vn.current.delete(z),e.current.setAgentBubble(J,null)},3e3);vn.current.add(z),Q(null)},[Y]),C.useCallback((J,z,ne)=>{const oe=on.tasks.find(pe=>pe.id===J);for(const pe of z)e.current.sendToSeat(pe),e.current.setAgentActive(pe,!0),e.current.setAgentBubble(pe,`Task: ${ne.slice(0,22)}`),t.current?.assignTaskToAgent(Je(),J,pe,ne);if(oe){const pe=z.map(Ie=>P.find(Xe=>Xe.agent_id===Ie)?.name??Ie);gJ(Pt,oe,pe)}k(pe=>pe+1)},[on.tasks,Pt,P,Je]);const ds=C.useMemo(()=>{const J=p?Object.keys(p.agents).length:0,z=p?.skills.total??0;return{totalAgents:J,totalSkills:z}},[p]),Mr=C.useMemo(()=>{const J=e.current.getCharacterCards();return(O?J:J.filter(ne=>!ne.isSubagent)).slice().sort((ne,oe)=>ne.displayName.localeCompare(oe.displayName))},[O,b]),$s=C.useMemo(()=>Kn(),[b]),Ku=C.useMemo(()=>{const J={};for(const z of Mr)z.officeId&&(J[z.id]=z.officeId);return J},[Mr]),[Io,tr]=C.useState(null),[To,Hs]=C.useState(""),Dr=J=>{To.trim()&&(e.current.renameOffice(J,To.trim()),k(z=>z+1)),tr(null)},pa=(J,z)=>{e.current.assignAgentToOffice(z,J),t.current?.moveAgent(z,J),k(ne=>ne+1)},ha=(J,z)=>{e.current.changeAgentSeat(J,z),k(ne=>ne+1)},Ci=Mr.find(J=>J.id===w)??null,ga=C.useMemo(()=>Ci?e.current.getSeatsForOffice(Ci.officeId):[],[Ci?.officeId,b]),Ro=C.useMemo(()=>{const J=x.slice(-40);return{trace:J.some(z=>z.type==="tool_start"||z.type==="tool_done"),reflect:J.some(z=>z.type==="reflect_start"||z.type==="reflect_done"),synthesize:J.some(z=>z.type==="skill_synthesized")}},[x]),Zu=C.useMemo(()=>["all",...Array.from(new Set(x.map(z=>z.type)))],[x]),Ai=C.useMemo(()=>(M==="all"?x:x.filter(z=>z.type===M)).slice().reverse(),[M,x]),fs=()=>{const J=o.trim();!J||J===i||r(J)},Fs=C.useCallback(J=>{S(J),k(z=>z+1)},[]),Ao=C.useCallback((J,z,ne,oe)=>{const pe=ce.sessions.find(Mi=>Mi.taskId===J),Ie=Ts(z),Xe=Qc(pe?.companyProfile??Z),Fe=Ie==="org"?"custom":"corporate",Bt=String(pe?.orgId??pt??"").trim(),an=Qo(Ie,oe??pe?.orgId??pt),Ht=Ts(pe?.execMode),Ut=Qc(Z);if(Ht===Ie&&Xe===Fe&&Bt===String(an??"").trim()&&V===Ie&&Ut===Fe)return;ce.updateSession(J,{execMode:Ie,companyProfile:Fe,orgId:an,preferredAgent:pe?.preferredAgent??K}),U(Ie),F(Fe),Ie==="org"&&an&&ke(an);const Gt=pe?.preferredAgent??K,Bi=Ie==="task"?void 0:Fe;t.current?.sessionUpdateConfig(Je(),J,Ie,Bi,Gt,an),t.current?.setExecutionMode(Ie,Bi,Gt,an)},[ce,V,Z,K,pt,Je]),fp=C.useCallback((J,z)=>{const ne=ce.sessions.find(Bt=>Bt.taskId===J),oe=Ms(z),pe=Ts(ne?.execMode),Ie=pe==="org"?"custom":"corporate";ce.updateSession(J,{preferredAgent:oe,selectedExecutionAgent:oe}),ee(oe);const Xe=pe==="task"?void 0:Ie,Fe=Qo(pe,ne?.orgId??pt);t.current?.sessionUpdateConfig(Je(),J,pe,Xe,oe,Fe),t.current?.setExecutionMode(pe,Xe,oe,Fe)},[ce,Z,pt,Je]),Xl=C.useCallback((J,z,ne)=>{if(pn.current||wn.current)return;const oe=Je();ut(oe);const pe=Ts(J),Ie=pe==="org"?"custom":pe==="company"?"corporate":void 0;t.current?.createSession(oe,void 0,pe,Ie,K,Qo(pe,ne??pt)),W("workspace")},[Je,ut,K,pt]),Vs=C.useCallback((J,z)=>{const ne=ce.sessions.find(pe=>pe.taskId===J),oe=ne?.resumeParentSessionId??ne?.parentSessionId??ne?.sessionId;for(const pe of ce.sessions)(pe.taskId===J||oe&&(pe.parentSessionId===oe||pe.sessionId===oe))&&ce.updateSession(pe.taskId,{...z,resumeParentSessionId:oe})},[ce]),Mo=C.useCallback(J=>{const z=ce.sessions.find(oe=>oe.taskId===J);(z?.execMode==="company"||z?.execMode==="org"||z?.execMode==="custom"||z?.isCompanyRuntime||z?.parentSessionId||z?.companyProfile)&&Vs(J,{runtimeControlState:"suspending",canStop:!1,canResume:!1}),t.current?.sessionStop(Je(),J)},[ce.sessions,Vs,Je]),ya=C.useCallback((J,z,ne)=>{const oe=ce.sessions.find(Ie=>Ie.taskId===J);(oe?.execMode==="company"||oe?.execMode==="org"||oe?.execMode==="custom"||oe?.isCompanyRuntime||oe?.parentSessionId||oe?.companyProfile)&&Vs(J,{runtimeControlState:"resuming",canStop:!1,canResume:!1}),t.current?.sessionResume(Je(),J,z??oe?.resumeParentSessionId??oe?.parentSessionId??oe?.sessionId,ne??oe?.pendingRuntimeCheckpointId)},[ce.sessions,Vs,Je]);C.useCallback((J,z,ne)=>{const oe=Ts(J),pe=oe==="org"?"custom":"corporate",Ie=Qo(oe,ne??pt);U(oe),F(pe),Ie&&ke(Ie),t.current?.setExecutionMode(oe,oe==="task"?void 0:pe,K,Ie)},[Z,K,pt]);const ms=V==="org",mp=V==="task"?"task":V==="org"?`company/${pt??"org"}`:`company/${Z}`;return u.jsxs("div",{className:`app-shell theme-${j}`,children:[vt&&u.jsx("div",{className:`org-toast org-toast--${vt.kind}`,role:"status","aria-live":"polite",children:vt.text}),u.jsxs("header",{className:"topbar",children:[u.jsxs("div",{className:"topbar-left",children:[u.jsxs("span",{className:"logo-text",children:["Open",u.jsx("span",{className:"logo-accent",children:"OPC"})]}),u.jsx("div",{className:`conn-dot ${HJ(c)}`,title:`${c}${m?` — ${m}`:""} +${i}`}),u.jsx(qV,{projects:Se.projects,activeId:Se.activeProjectId,onSelect:J=>{const z=_t(J);t.current?.switchProject(J,z)},onCreate:J=>{t.current?.createProject(J)},onDelete:J=>t.current?.deleteProject(J)})]}),u.jsxs("div",{className:"topbar-center",children:[u.jsxs("div",{className:"page-nav",children:[u.jsxs("button",{className:`page-nav-btn${B==="workspace"?" active":""}`,onClick:()=>W("workspace"),children:["Workspace",(()=>{const J=Pt.channels.reduce((z,ne)=>z+Pt.getUnreadCount(ne.id),0);return J>0?u.jsx("span",{className:"nav-unread-badge",children:J>99?"99+":J}):null})()]}),u.jsx("button",{className:`page-nav-btn${B==="office"?" active":""}`,onClick:()=>W("office"),children:"Office"}),u.jsx("button",{className:`page-nav-btn${B==="org"?" active":""}`,onClick:()=>W("org"),children:"Org"})]}),u.jsxs("div",{className:"stat-chips",children:[u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:ds.totalAgents})," agents"]}),u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:ds.totalSkills})," skills"]}),u.jsxs("span",{className:"stat-chip",children:[u.jsx("b",{children:on.getOpenTaskCount()})," tasks"]})]})]}),u.jsxs("div",{className:"topbar-right",children:[u.jsxs("select",{className:"theme-select",value:Zt,title:"Outdoor lighting override",onChange:J=>{const z=J.target.value;Un(z);try{z==="auto"?(localStorage.removeItem("opc_outdoor_override"),localStorage.removeItem("opc_outdoor_day"),localStorage.removeItem("opc_outdoor_night")):(localStorage.setItem("opc_outdoor_override",z),localStorage.removeItem("opc_outdoor_day"),localStorage.removeItem("opc_outdoor_night"))}catch{}e.current.syncOutdoorLighting()},children:[u.jsx("option",{value:"auto",children:"Outdoor auto"}),u.jsx("option",{value:"day",children:"Outdoor day"}),u.jsx("option",{value:"night",children:"Outdoor night"})]}),u.jsxs("select",{className:"theme-select",value:j,onChange:J=>N(J.target.value),children:[u.jsx("option",{value:"midnight",children:"Midnight"}),u.jsx("option",{value:"neon",children:"Neon"}),u.jsx("option",{value:"paper",children:"Paper"}),u.jsx("option",{value:"retro",children:"Retro"}),u.jsx("option",{value:"terminal",children:"Terminal"}),u.jsx("option",{value:"cozy",children:"Cozy"}),u.jsx("option",{value:"openopc",children:"OpenOPC"})]}),u.jsx("button",{className:`icon-btn ${$?"active":""}`,onClick:()=>q(J=>!J),title:"Developer Tools",children:u.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[u.jsx("path",{d:"M5.5 2L2 5.5 5.5 9",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.jsx("path",{d:"M10.5 7L14 10.5 10.5 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]})]}),B==="workspace"&&u.jsx(hV,{boardStore:on,chatStore:Pt,sessionStore:ce,agents:P,officeMap:Ku,execMode:V,companyProfile:Z,taskPreferredAgent:K,projectId:Se.activeProjectId,orgInfoData:te,onNavigateToOrg:()=>W("org"),savedOrgsList:We,activeSavedOrg:pt,onSavedOrgsList:gn,onSavedOrgLoad:ma,commsState:ae,commsMessage:ie,onCommsRefresh:J=>{const{project_id:z,...ne}=J??{};t.current?.commsState(Je(),ne)},onCommsReadMessage:J=>t.current?.commsReadMessage(Je(),J),onRunTask:(J,z,ne,oe,pe)=>{t.current?.send({type:"run_task",project_id:Je(),task_id:J,title:z,description:ne,mode:oe,profile:pe})},onCreateTask:(J,z,ne,oe)=>{t.current?.send({type:"kanban_create_task",project_id:Je(),title:J,board_id:z,column_id:ne,task_id:oe})},onMoveTask:(J,z)=>{t.current?.send({type:"kanban_move_task",project_id:Je(),task_id:J,column_id:z})},onCreateSession:()=>{if(pn.current||wn.current)return;const J=Je();ut(J),t.current?.createSession(J,void 0,V,Ax(V),K,Qo(V,pt))},onSessionSend:(J,z,ne,oe)=>t.current?.sessionSend(Je(),J,z,ne,oe),onSecretarySend:J=>t.current?.secretarySend(Je(),J),onDeleteSession:J=>t.current?.deleteSession(Je(),J),onTitleChange:(J,z)=>t.current?.sessionUpdateTitle(Je(),J,z),onSessionConfigChange:Ao,onSessionTaskAgentChange:fp,onContinueInNewChat:Xl,onSessionStop:Mo,onSessionResume:ya,onSessionComplete:J=>t.current?.sessionComplete(Je(),J),onLoadSessionDetail:(J,z)=>{const ne=t.current;if(ne)return ne.sessionDetail(Je(),J,{...z,include:z?.detailLevel==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:tt.current}).then(oe=>{if(oe.ok===!1)throw new Error(String(oe.error??"session_detail failed"))})},onOpenExecutionPanel:J=>Tt(J),onCollabSync:()=>t.current?.collabSync(Je(),void 0,tt.current)}),B==="org"&&u.jsx("div",{className:"org-page",children:u.jsx(hJ,{data:te,sessionRecruitmentByRole:Ue,talents:je,employeeDetail:Ye,reorgProposals:Ft,isCustomMode:ms,onRequestData:()=>t.current?.orgInfo(),onRequestTalents:()=>t.current?.talentList(),onRequestEmployeeDetail:J=>t.current?.employeeDetail(J),onHireTalent:(J,z)=>{kt(J),t.current?.talentHire(J,z,void 0,te?.organization_id||pt||void 0)},hiringTemplateId:Re,onImportEmployee:J=>t.current?.importEmployeeAsAgent(J),onRequestReorgList:()=>t.current?.reorgList(),onReorgDecide:(J,z,ne)=>t.current?.reorgDecide(J,z,ne),onMarketExport:J=>t.current?.marketExport(J),onMarketInstall:(J,z)=>t.current?.marketInstall(J,z),onMarketUninstall:J=>t.current?.marketUninstall(J),marketPresets:jt,marketPreviewData:ze,onMarketBrowse:()=>t.current?.marketBrowse(),onMarketPreview:J=>t.current?.marketPreview(J),onMarketApplyPreset:(J,z)=>t.current?.marketApplyPreset(J,z),onMarketClearPreview:()=>ot(null),onAddRole:(J,z,ne,oe,pe)=>t.current?.addRole(J,z,ne,oe,pe),onBulkAddRoles:J=>t.current?.bulkAddRoles(J),onUpdateRole:(J,z)=>t.current?.updateRole(J,z),onDeleteRole:J=>t.current?.deleteRole(J),onUpdateOrgStrategy:J=>t.current?.updateOrgStrategy(J),onUpdateRuntimePolicy:J=>t.current?.updateRuntimePolicy(J),onResetArchitecture:()=>t.current?.resetArchitecture(),onConfigExport:()=>t.current?.orgConfigExport(),onConfigImport:(J,z)=>t.current?.orgConfigImport(J,z),configExportYaml:Ve,configImportPreview:me,configImportError:Ae,onSavedOrgsList:gn,onSavedOrgSaveAs:Ui,onSavedOrgCreate:Gi,onSavedOrgLoad:ma,onSavedOrgDelete:Yl,savedOrgsList:We,activeSavedOrg:pt,activeSavedOrgVersionAtLoad:qe,orgCreatePending:$e,orgCreateResult:Vt,onSelectCorporate:Bs})}),B==="mapEditor"&&u.jsx("div",{className:"editor-page",children:u.jsx(JM,{bridge:e.current})}),u.jsxs("main",{className:`main-grid${B!=="office"?" hidden":""}${D?" sidebar-collapsed":""}`,children:[u.jsxs("section",{className:"canvas-wrap",children:[u.jsx(KM,{bridge:e.current,active:B==="office"}),u.jsx("button",{className:"canvas-float-btn",onClick:()=>R(J=>!J),title:O?"Hide sub-agents":"Show sub-agents",children:O?"👥":"👤"}),u.jsx("button",{className:"sidebar-collapse-btn",onClick:L,title:D?"Show side panel":"Hide side panel","aria-label":D?"Show side panel":"Hide side panel",children:u.jsx("span",{className:"collapse-glyph",children:D?"❮":"❯"})})]}),u.jsx("aside",{className:"sidebar",children:u.jsx("div",{className:"sidebar-body",children:u.jsxs("div",{className:"team-panel",children:[u.jsxs("div",{className:"mode-info-bar",children:[u.jsx("span",{className:"mode-badge",children:V==="company"?`${V}/${Z}`:mp}),ms?u.jsxs("span",{className:"mode-hint",children:["Manage your team in the ",u.jsx("b",{children:"Org"})," tab"]}):u.jsxs("span",{className:"mode-hint",children:["Switch to ",u.jsx("b",{children:"Org"})," mode to create or manage agents"]})]}),u.jsxs("div",{className:"section-label",children:["Offices ",u.jsx("span",{className:"count-badge",children:$s.length})]}),u.jsx("div",{className:"office-cards",children:$s.map(J=>{const z=Xj(J.id).length,ne=Mr.filter(pe=>pe.officeId===J.id),oe=Mr.filter(pe=>pe.officeId!==J.id&&!pe.isSubagent);return u.jsxs("div",{className:"office-card",onClick:()=>e.current.panToOffice(J.id),children:[u.jsxs("div",{className:"office-card-header",children:[Io===J.id?u.jsx("input",{className:"office-name-input",value:To,onChange:pe=>Hs(pe.target.value),onBlur:()=>Dr(J.id),onKeyDown:pe=>{pe.key==="Enter"&&Dr(J.id),pe.key==="Escape"&&tr(null)},autoFocus:!0,onClick:pe=>pe.stopPropagation()}):u.jsxs(u.Fragment,{children:[u.jsx("span",{className:"office-name",children:J.name}),u.jsx("button",{className:"office-edit-btn",title:"Rename",onClick:pe=>{pe.stopPropagation(),tr(J.id),Hs(J.name)},children:"✎"})]}),u.jsxs("span",{className:"office-capacity",children:[ne.length,"/",z]})]}),u.jsxs("div",{className:"office-agents",children:[ne.map(pe=>u.jsx("span",{className:"office-agent-chip",title:`${pe.displayName} — ${pe.seatId??"no seat"}`,onClick:Ie=>{Ie.stopPropagation(),Fs(pe.id)},children:pe.displayName.slice(0,8)},pe.id)),ms&&ne.length<z&&oe.length>0&&u.jsxs("select",{className:"assign-dropdown",value:"",onClick:pe=>pe.stopPropagation(),onChange:pe=>{pe.target.value&&pa(J.id,pe.target.value)},children:[u.jsx("option",{value:"",children:"+ Move here"}),oe.map(pe=>u.jsxs("option",{value:pe.id,children:[pe.displayName," (",$s.find(Ie=>Ie.id===Mr.find(Xe=>Xe.id===pe.id)?.officeId)?.name??"?",")"]},pe.id))]})]})]},J.id)})}),u.jsxs("div",{className:"section-label",children:["Active Agents ",u.jsx("span",{className:"count-badge",children:P.length})]}),u.jsxs("div",{className:"agent-list",children:[P.map(J=>u.jsxs("div",{className:`agent-row ${w===J.agent_id?"selected":""}`,children:[u.jsxs("button",{className:"agent-row-main",onClick:()=>Fs(J.agent_id),children:[u.jsx("span",{className:`dot ${J.status}`}),u.jsxs("div",{className:"agent-info",children:[u.jsx("span",{className:"agent-name",children:J.name}),u.jsx("span",{className:"agent-spec",children:J.specialties.slice(0,2).join(" · ")||"general"})]})]}),ms&&(ti===J.agent_id?u.jsx("span",{className:"agent-del",style:{pointerEvents:"none"},children:u.jsx("span",{className:"spinner-inline"})}):yi===J.agent_id?u.jsxs("span",{className:"del-confirm",children:[u.jsx("span",{className:"del-confirm-label",children:"Delete?"}),u.jsx("button",{className:"del-confirm-yes",onClick:()=>{ln(J.agent_id),Zn(null),t.current?.deleteAgent(J.agent_id)},children:"Yes"}),u.jsx("button",{className:"del-confirm-no",onClick:()=>Zn(null),children:"No"})]}):u.jsx("button",{className:"agent-del",title:`Remove ${J.name}`,onClick:()=>Zn(J.agent_id),children:"×"}))]},J.agent_id)),P.length===0&&u.jsx("div",{className:"empty-state",children:"No agents yet — click a template above to spawn one."})]}),Ci&&u.jsxs("div",{className:"agent-detail",children:[u.jsx("div",{className:"agent-detail-name",children:Ci.displayName}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"State"}),u.jsx("span",{className:"detail-value",children:Ci.state})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Tool"}),u.jsx("span",{className:"detail-value",children:Ci.currentTool??"—"})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Task"}),u.jsx("span",{className:"detail-value",children:Ci.taskSummary??"—"})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Office"}),u.jsx("select",{className:"detail-select",value:Ci.officeId,onChange:J=>{pa(J.target.value,Ci.id)},disabled:!ms,children:$s.map(J=>u.jsx("option",{value:J.id,children:J.name},J.id))})]}),u.jsxs("div",{className:"agent-detail-row",children:[u.jsx("span",{className:"detail-label",children:"Seat"}),u.jsxs("select",{className:"detail-select",value:Ci.seatId??"",onChange:J=>{J.target.value&&ha(Ci.id,J.target.value)},disabled:!ms,children:[u.jsx("option",{value:"",children:"—"}),ga.map(J=>{const z=J.id.replace(/^office-\d+-/,"").replace("-"," ").replace(/\b\w/g,oe=>oe.toUpperCase()),ne=J.assigned&&J.assignedTo!==Ci.id;return u.jsxs("option",{value:J.id,disabled:ne,children:[z,ne?` (${J.assignedTo})`:J.assignedTo===Ci.id?" ✓":""]},J.id)})]})]})]}),Mr.length>P.length&&u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"section-label",children:["Characters",u.jsx("button",{className:"inline-btn",onClick:()=>R(J=>!J),children:O?"hide sub":"show sub"})]}),u.jsx("div",{className:"agent-list",children:Mr.filter(J=>!P.some(z=>z.agent_id===J.id)).map(J=>u.jsxs("button",{className:`agent-row-simple ${w===J.id?"selected":""}`,onClick:()=>Fs(J.id),children:[J.isSubagent&&u.jsx("span",{className:"sub-badge",children:"SUB"}),u.jsx("span",{className:"agent-name",children:J.displayName}),u.jsxs("span",{className:"agent-spec",children:[J.state,J.currentTool?` · ${J.currentTool}`:""]})]},J.id))})]})]})})})]}),$&&u.jsxs("div",{className:"dev-overlay",children:[u.jsxs("div",{className:"dev-header",children:[u.jsx("span",{className:"dev-title",children:"Developer Tools"}),u.jsx("button",{className:"icon-btn",onClick:()=>q(!1),children:"✕"})]}),u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Connection"}),u.jsxs("div",{className:"input-row",children:[u.jsx("input",{value:o,onChange:J=>a(J.target.value),placeholder:"ws://..."}),u.jsx("button",{className:"send-btn",onClick:fs,children:"↩"})]})]}),u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Evolution Pipeline"}),u.jsx("div",{className:"evo-pipeline",children:["Trace","Reflect","Synthesize","Practice","Lifecycle"].map((J,z)=>{const ne=J.toLowerCase(),oe=ne in Ro?Ro[ne]:!1;return u.jsxs("div",{className:"evo-phase-group",children:[z>0&&u.jsx("div",{className:"evo-connector"}),u.jsxs("div",{className:`evo-node ${oe?"active":""}`,children:[u.jsx("div",{className:"evo-dot"}),u.jsx("span",{className:"evo-label",children:J})]})]},J)})}),u.jsx("div",{className:"list",children:(p?.skills.recent??[]).slice(-6).reverse().map((J,z)=>u.jsxs("div",{className:"list-row",children:[u.jsx("span",{children:J.skill_name}),u.jsx("span",{className:"muted mono",children:J.version})]},`${J.skill_name}-${J.timestamp}-${z}`))})]}),u.jsxs("div",{className:"dev-group",children:[u.jsxs("div",{className:"dev-label",children:["Events",u.jsx("select",{className:"inline-select",value:M,onChange:J=>A(J.target.value),children:Zu.map(J=>u.jsx("option",{value:J,children:J},J))})]}),u.jsx("div",{className:"event-log",children:Ai.slice(0,30).map(J=>u.jsxs("div",{className:"log-row",children:[u.jsx("span",{className:"log-time",children:new Date(J.timestamp*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),u.jsx("span",{className:"log-type",children:J.type}),u.jsx("span",{className:"log-agent",children:J.agent_id}),u.jsx("span",{className:"log-data",children:FJ(J.data)})]},J.event_id))})]}),Object.keys(p?.channels??{}).length>0&&u.jsxs("div",{className:"dev-group",children:[u.jsx("div",{className:"dev-label",children:"Channels"}),Object.entries(p?.channels??{}).map(([J,z])=>u.jsxs("div",{className:"list-row",children:[u.jsx("span",{children:J}),u.jsx("span",{className:"muted",children:String(z.last_type??"idle")})]},J))]})]}),bn&&u.jsx("div",{className:In==="error"?"toast-error":"toast-success",children:bn}),u.jsx(KJ,{taskId:Kt,sessions:ce.sessions,agents:P,onClose:()=>Tt(null)})]})}class QJ extends Nt.Component{constructor(){super(...arguments),this.state={error:null,info:""}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] React crashed:",t,n),this.setState({info:n.componentStack??""})}render(){return this.state.error?u.jsxs("div",{style:{padding:32,color:"#ff6b6b",background:"#1a1a2e",minHeight:"100vh",fontFamily:"monospace"},children:[u.jsx("h2",{children:"UI Error — React crashed"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap",fontSize:13},children:this.state.error.message}),u.jsxs("details",{open:!0,style:{marginTop:12,fontSize:12,color:"#ccc"},children:[u.jsx("summary",{children:"Stack trace"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.error.stack})]}),this.state.info&&u.jsxs("details",{style:{marginTop:12,fontSize:12,color:"#888"},children:[u.jsx("summary",{children:"Component stack"}),u.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.info})]}),u.jsx("button",{onClick:()=>{this.setState({error:null,info:""})},style:{marginTop:16,padding:"8px 16px",background:"#6366f1",color:"#fff",border:"none",borderRadius:6,cursor:"pointer"},children:"Try to recover"})]}):this.props.children}}window.addEventListener("error",e=>{console.error("[Global] Uncaught error:",e.error??e.message)});window.addEventListener("unhandledrejection",e=>{console.error("[Global] Unhandled promise rejection:",e.reason)});const Rv=document.getElementById("root");if(!Rv)throw document.body.innerHTML='<h1 style="color:red">Root element not found</h1>',new Error("Root element #root not found");try{Y3.createRoot(Rv).render(u.jsx(QJ,{children:u.jsx(ZJ,{})}))}catch(e){console.error("React render error:",e),Rv.innerHTML=`<h1 style="color:red">React Error: ${e}</h1>`} diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.css b/opc/plugins/office_ui/frontend_dist/assets/index-DEvLDWDw.css similarity index 88% rename from opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.css rename to opc/plugins/office_ui/frontend_dist/assets/index-DEvLDWDw.css index df70cee..27a96e0 100644 --- a/opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.css +++ b/opc/plugins/office_ui/frontend_dist/assets/index-DEvLDWDw.css @@ -1 +1 @@ -.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.org-tab{display:flex;flex-direction:column;height:100%;min-width:0;overflow-y:auto;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 26%,var(--bg) 74%) 0%,var(--bg) 240px);color:var(--text)}.org-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);font-size:14px}.org-empty{padding:32px;text-align:center;color:var(--text-secondary);font-size:13px}.org-header{display:flex;align-items:center;justify-content:space-between;padding:18px 28px 16px;border-bottom:1px solid var(--border);flex-shrink:0;gap:18px;flex-wrap:wrap;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 34%,var(--bg) 66%),color-mix(in srgb,var(--bg) 92%,var(--bg-elevated) 8%));backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.org-header-main{display:flex;flex-direction:column;gap:7px;min-width:min(100%,260px);flex:1 1 420px}.org-eyebrow{display:inline-flex;align-items:center;gap:7px;color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-eyebrow-separator{color:color-mix(in srgb,var(--text-secondary) 46%,transparent)}.org-title-row{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.org-title{font-size:21px;font-weight:650;margin:0;max-width:min(58vw,680px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:0}.org-version-badge{font-size:10px;padding:2px 7px;border-radius:4px;background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent);font-family:JetBrains Mono,SF Mono,monospace}.org-state-badge,.org-profile-badge{font-size:10px;padding:3px 8px;border-radius:4px;white-space:nowrap}.org-state-badge--editable{background:color-mix(in srgb,var(--green) 11%,transparent);color:var(--green);border:1px solid color-mix(in srgb,var(--green) 20%,transparent)}.org-state-badge--readonly{background:color-mix(in srgb,var(--text-secondary) 10%,transparent);color:var(--text-secondary);border:1px solid color-mix(in srgb,var(--border) 80%,transparent)}.org-profile-badge{background:color-mix(in srgb,var(--yellow) 11%,transparent);color:var(--yellow)}.org-header-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-width:0}.org-meta-pill,.org-meta-code{min-height:22px;display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);background:color-mix(in srgb,var(--bg) 58%,transparent);color:var(--text-secondary);font-size:10.5px;line-height:1;text-transform:capitalize}.org-meta-code{max-width:min(52vw,360px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:none;color:var(--text)}.org-meta-pill--runtime{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 22%,transparent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.org-meta-pill--saved{color:var(--green);border-color:color-mix(in srgb,var(--green) 24%,transparent);background:color-mix(in srgb,var(--green) 8%,transparent)}.org-control-panel{display:flex;align-items:flex-end;justify-content:flex-end;gap:10px;flex:0 1 430px;min-width:min(100%,300px)}.org-switcher{display:flex;flex-direction:column;gap:5px;min-width:210px;flex:1 1 240px}.org-switcher-label{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-switcher-select-wrap{position:relative;display:block}.org-switcher-select{width:100%;min-height:36px;padding:7px 34px 7px 11px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:7px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 76%,var(--bg) 24%),color-mix(in srgb,var(--bg) 88%,var(--bg-elevated) 12%));color:var(--text);font:inherit;font-size:12px;outline:none;cursor:pointer;appearance:none}.org-switcher-select option{background:var(--bg-elevated);color:var(--text)}.org-switcher-select-wrap:after{content:"";position:absolute;right:12px;top:50%;width:7px;height:7px;border-right:1.5px solid var(--text-secondary);border-bottom:1.5px solid var(--text-secondary);transform:translateY(-68%) rotate(45deg);pointer-events:none}.org-switcher-select:hover,.org-switcher-select:focus{border-color:color-mix(in srgb,var(--accent) 38%,var(--border))}.org-create-trigger{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:8px 14px;border:1px solid color-mix(in srgb,var(--accent) 36%,transparent);border-radius:7px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 22%,var(--bg-elevated) 78%),color-mix(in srgb,var(--accent) 13%,var(--bg) 87%));color:color-mix(in srgb,var(--accent) 84%,var(--text) 16%);font-size:12px;font-weight:700;white-space:nowrap;cursor:pointer;box-shadow:0 10px 24px color-mix(in srgb,var(--accent) 10%,transparent);transition:transform .15s,border-color .15s,background .15s}.org-create-trigger:hover{border-color:color-mix(in srgb,var(--accent) 54%,transparent);transform:translateY(-1px)}.org-create-trigger-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:color-mix(in srgb,var(--accent) 18%,transparent);font-size:16px;line-height:1}.org-stats-strip{display:grid;grid-template-columns:repeat(4,minmax(104px,auto));gap:7px;align-items:center;justify-content:flex-end;flex:1 1 460px}.org-stat{display:inline-flex;align-items:center;gap:6px;justify-content:center;font-size:11px;color:var(--text-secondary);min-height:32px;padding:6px 11px;background:color-mix(in srgb,var(--bg-elevated) 58%,var(--bg) 42%);border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);white-space:nowrap}.org-stat b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums}.org-stat-icon{width:13px;height:13px;opacity:.72}.org-subtabs{display:flex;gap:2px;padding:0 28px;border-bottom:1px solid var(--border);flex-shrink:0;background:color-mix(in srgb,var(--bg) 92%,transparent);position:sticky;top:0;z-index:10;overflow-x:auto}.org-subtab{display:inline-flex;align-items:center;gap:6px;padding:11px 16px 12px;margin-bottom:-1px;font-size:12px;color:var(--text-secondary);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap}.org-subtab:hover:not(.org-subtab--active){color:var(--text)}.org-subtab--active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.org-subtab-icon{width:14px;height:14px;opacity:.6;flex-shrink:0}.org-subtab--active .org-subtab-icon{opacity:1}.org-subtab-label{font-size:12px}.org-subtab-count{font-size:10px;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 70%,var(--bg) 30%);color:var(--text-secondary);font-weight:500}.org-subtab--active .org-subtab-count{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}.org-toast{padding:8px 16px;margin:0 20px;font-size:12px;border-radius:6px;cursor:pointer;flex-shrink:0}.org-toast--info{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 25%,transparent)}.org-toast--warn{background:color-mix(in srgb,var(--yellow) 12%,transparent);color:var(--yellow);border:1px solid color-mix(in srgb,var(--yellow) 25%,transparent)}.org-toast--ok{background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green);border:1px solid color-mix(in srgb,var(--green) 25%,transparent)}.org-toast--error{background:color-mix(in srgb,var(--red) 12%,transparent);color:var(--red);border:1px solid color-mix(in srgb,var(--red) 25%,transparent)}.org-tab-content{flex:1 0 auto;overflow:visible;padding:16px 28px 28px}.org-create-backdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,#05070b 68%,transparent)}.org-create-modal{width:min(720px,100%);max-height:min(720px,calc(100vh - 48px));display:flex;flex-direction:column;gap:16px;padding:20px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:8px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 88%,var(--bg) 12%),color-mix(in srgb,var(--bg) 94%,var(--bg-elevated) 6%));box-shadow:0 28px 80px #00000075;overflow:hidden}.org-create-header,.org-create-actions,.org-create-review-head,.org-create-review-row{display:flex;align-items:center}.org-create-header{justify-content:space-between;gap:16px;flex-shrink:0}.org-create-eyebrow{display:block;margin-bottom:5px;color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-create-title{margin:0;color:var(--text);font-size:19px;font-weight:650;letter-spacing:0}.org-create-close,.org-create-icon-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:6px;background:color-mix(in srgb,var(--bg) 60%,transparent);color:var(--text-secondary);cursor:pointer}.org-create-close{width:30px;height:30px;font-size:14px}.org-create-close:hover,.org-create-icon-btn:hover:not(:disabled){color:var(--text);border-color:color-mix(in srgb,var(--text-secondary) 34%,var(--border))}.org-create-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;flex-shrink:0}.org-create-step{display:inline-flex;align-items:center;gap:8px;min-width:0;min-height:34px;padding:7px 10px;border:1px solid color-mix(in srgb,var(--border) 74%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 58%,transparent);color:var(--text-secondary);font-size:12px;font-weight:600}.org-create-step span{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:color-mix(in srgb,var(--text-secondary) 12%,transparent);color:var(--text-secondary);font-size:10px}.org-create-step--active{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));color:var(--text);background:color-mix(in srgb,var(--accent) 9%,var(--bg) 91%)}.org-create-step--active span,.org-create-step--done span{background:color-mix(in srgb,var(--accent) 24%,transparent);color:var(--accent)}.org-create-panel{min-height:180px;overflow:auto;padding:4px 2px}.org-create-field{display:flex;flex-direction:column;gap:8px}.org-create-field span{color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.org-create-field input,.org-create-member-row input,.org-create-member-row select,.org-create-member-row textarea{min-height:38px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 64%,transparent);color:var(--text);font:inherit;font-size:13px;outline:none}.org-create-field input:focus,.org-create-member-row input:focus,.org-create-member-row select:focus,.org-create-member-row textarea:focus{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.org-create-member-row select option{background:var(--bg-elevated);color:var(--text)}.org-create-member-row textarea{grid-column:1 / -1;min-height:62px;line-height:1.45;resize:vertical}.org-create-member-list{display:flex;flex-direction:column;gap:8px}.org-create-member-row{display:grid;grid-template-columns:minmax(130px,1fr) minmax(150px,1.5fr) minmax(120px,.8fr) 34px;gap:8px;align-items:center}.org-create-icon-btn{width:34px;height:34px;font-size:16px}.org-create-icon-btn:disabled{cursor:not-allowed;opacity:.42}.org-create-add{margin-top:12px;min-height:34px;padding:7px 12px;border:1px dashed color-mix(in srgb,var(--accent) 34%,var(--border));border-radius:7px;background:color-mix(in srgb,var(--accent) 7%,transparent);color:var(--accent);font-size:12px;font-weight:700;cursor:pointer}.org-create-review{display:flex;flex-direction:column;gap:8px}.org-create-review-head,.org-create-review-row{justify-content:space-between;gap:14px;min-height:38px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--border) 74%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 56%,transparent)}.org-create-review-head span,.org-create-review-row strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.org-create-review-head b,.org-create-review-row span{flex-shrink:0;color:var(--text-secondary);font-size:12px;font-weight:600}.org-create-review-row span{display:inline-flex;align-items:center;gap:6px}.org-create-review-row em{padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase}.org-create-error{padding:9px 11px;border:1px solid color-mix(in srgb,var(--red) 28%,transparent);border-radius:7px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);font-size:12px}.org-create-actions{justify-content:flex-end;gap:8px;flex-shrink:0}@media(max-width:1040px){.org-title{max-width:100%}.org-control-panel{flex:1 1 100%;justify-content:stretch}.org-stats-strip{grid-template-columns:repeat(2,minmax(128px,1fr));justify-content:stretch;width:100%}}@media(max-width:760px){.org-header{padding:14px 16px 12px}.org-header-main{flex-basis:100%}.org-title{max-width:100%;font-size:18px}.org-stats-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.org-control-panel{flex-direction:column;align-items:stretch}.org-switcher{min-width:0}.org-create-trigger{width:100%}.org-subtabs{padding:0 16px}.org-tab-content{padding:12px 16px 18px}.org-create-backdrop{align-items:flex-start;padding:14px}.org-create-modal{max-height:calc(100vh - 28px);padding:16px}.org-create-steps,.org-create-member-row{grid-template-columns:1fr}.org-create-icon-btn{width:100%}}@media(max-width:460px){.org-header{gap:12px}.org-stats-strip{grid-template-columns:1fr}.org-meta-code{max-width:100%}}.btn,.oc-btn-primary,.oc-btn-ghost,.oc-btn-danger,.mkt-btn,.mkt-btn-primary,.mkt-btn-ghost,.pkg-btn,.pkg-btn-primary,.pkg-btn-secondary,.pkg-btn-danger,.pkg-btn-ghost,.cfg-io-btn,.cfg-io-btn-primary,.cfg-io-btn-ghost,.tm-detail-hire-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;font-size:12px;font-weight:500;border-radius:var(--radius-xs);border:1px solid transparent;background:transparent;color:var(--text);cursor:pointer;white-space:nowrap;font-family:inherit;transition:background .15s,border-color .15s,color .15s,opacity .15s}.btn:disabled,.oc-btn-primary:disabled,.mkt-btn-primary:disabled,.pkg-btn-primary:disabled,.pkg-btn-danger:disabled,.cfg-io-btn:disabled,.cfg-io-btn-primary:disabled,.cfg-io-btn-ghost:disabled,.tm-detail-hire-btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary,.oc-btn-primary,.mkt-btn-primary,.pkg-btn-primary,.cfg-io-btn-primary,.tm-detail-hire-btn{background:var(--accent);color:var(--white);border-color:var(--accent)}.btn-primary:hover:not(:disabled),.oc-btn-primary:hover:not(:disabled),.mkt-btn-primary:hover:not(:disabled),.pkg-btn-primary:hover:not(:disabled),.cfg-io-btn-primary:hover:not(:disabled),.tm-detail-hire-btn:hover:not(:disabled){opacity:.88}.btn-ghost,.oc-btn-ghost,.mkt-btn-ghost,.pkg-btn-ghost,.cfg-io-btn-ghost{background:transparent;color:var(--text-secondary);border-color:var(--border)}.btn-ghost:hover:not(:disabled),.oc-btn-ghost:hover:not(:disabled),.mkt-btn-ghost:hover:not(:disabled),.pkg-btn-ghost:hover:not(:disabled),.cfg-io-btn-ghost:hover:not(:disabled){color:var(--text);border-color:var(--text-secondary)}.btn-secondary,.pkg-btn-secondary{background:var(--bg-secondary);color:var(--text);border-color:var(--border)}.btn-secondary:hover:not(:disabled),.pkg-btn-secondary:hover:not(:disabled){border-color:var(--accent)}.btn-danger,.oc-btn-danger,.pkg-btn-danger{background:transparent;color:var(--red);border-color:var(--red)}.btn-danger:hover:not(:disabled),.oc-btn-danger:hover:not(:disabled),.pkg-btn-danger:hover:not(:disabled){background:var(--red);color:var(--white)}.btn-sm,.mkt-btn-sm,.pkg-btn-sm{padding:4px 10px;font-size:11px}.btn-lg,.qs-create-btn{padding:8px 24px;font-size:14px}.btn-icon,.pkg-btn-icon,.cfg-io-btn-icon{width:14px;height:14px;opacity:.9;flex-shrink:0}.btn-primary .btn-icon,.btn-primary .pkg-btn-icon,.btn-primary .cfg-io-btn-icon,.oc-btn-primary img,.mkt-btn-primary img,.pkg-btn-primary .pkg-btn-icon,.cfg-io-btn-primary .cfg-io-btn-icon{filter:brightness(0) invert(1)}.btn:focus-visible,.oc-btn-primary:focus-visible,.oc-btn-ghost:focus-visible,.oc-btn-danger:focus-visible,.mkt-btn:focus-visible,.mkt-btn-primary:focus-visible,.mkt-btn-ghost:focus-visible,.pkg-btn:focus-visible,.pkg-btn-primary:focus-visible,.pkg-btn-secondary:focus-visible,.pkg-btn-danger:focus-visible,.pkg-btn-ghost:focus-visible,.cfg-io-btn:focus-visible,.cfg-io-btn-primary:focus-visible,.cfg-io-btn-ghost:focus-visible,.tm-detail-hire-btn:focus-visible,.org-subtab:focus-visible,.mkt-pill:focus-visible,.myorg-inline-btn:focus-visible,.myorg-reset-btn:focus-visible,.wfe-action-btn:focus-visible,.wfe-pattern-btn:focus-visible,.oc-action-btn:focus-visible,.oc-advanced-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-xs)}.oc-form-row input:focus-visible,.oc-form-row select:focus-visible,.oc-form-row textarea:focus-visible,.cfg-io-textarea:focus-visible,.mkt-search:focus-visible,.pkg-search:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.btn:focus:not(:focus-visible),.org-subtab:focus:not(:focus-visible),.mkt-pill:focus:not(:focus-visible){outline:none}.team-view{display:flex;flex-direction:column;gap:14px;padding:0;min-width:0}.team-command-bar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:14px;align-items:center;padding:12px 14px;border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 34%,var(--bg) 66%)}.team-command-bar--readonly{background:color-mix(in srgb,var(--bg-elevated) 24%,var(--bg) 76%)}.team-command-copy{min-width:0;display:flex;flex-direction:column;gap:3px}.team-command-eyebrow{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.team-command-title{color:var(--text);font-size:13px;font-weight:600}.team-command-metrics{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end;color:var(--text-secondary);font-size:11px}.team-command-metrics span{min-height:24px;display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:999px;background:color-mix(in srgb,var(--bg) 54%,transparent);white-space:nowrap}.team-command-metrics b{color:var(--text);font-variant-numeric:tabular-nums}.team-command-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.team-readonly-strip{padding:9px 12px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:8px;background:color-mix(in srgb,var(--text-secondary) 6%,transparent);color:var(--text-secondary);font-size:12px}.team-roster-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(282px,1fr));gap:12px}.team-roster-card{min-width:0;background:color-mix(in srgb,var(--bg) 84%,var(--bg-elevated) 16%);border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;padding:11px 12px;transition:border-color .15s ease,background .15s ease}.team-roster-card:hover{background:color-mix(in srgb,var(--bg-elevated) 48%,var(--bg) 52%);border-color:color-mix(in srgb,var(--border-hover) 78%,var(--accent) 22%)}.team-roster-card-header{display:flex;align-items:center;gap:9px;margin-bottom:10px;padding-bottom:9px;border-bottom:1px solid color-mix(in srgb,var(--border) 72%,transparent)}.team-roster-card-icon{width:22px;height:22px;padding:4px;border-radius:7px;background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 18%,transparent)}.team-roster-role-name{font-size:13px;font-weight:600;color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-roster-count{font-size:10px;color:var(--text-secondary);padding:2px 7px;background:color-mix(in srgb,var(--bg-elevated) 78%,var(--bg) 22%);border-radius:999px;font-variant-numeric:tabular-nums}.team-roster-emp{display:flex;align-items:center;gap:9px;padding:7px 0}.team-roster-emp+.team-roster-emp{border-top:1px solid color-mix(in srgb,var(--border) 50%,transparent)}.team-roster-emp-avatar{width:24px;height:24px;border-radius:50%;opacity:.58}.team-roster-emp-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.team-roster-emp-name{font-size:12.5px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-roster-seniority{font-size:9px;text-transform:uppercase;letter-spacing:.3px;font-weight:600}.team-roster-seniority--junior{color:var(--text-secondary)}.team-roster-seniority--mid{color:var(--yellow)}.team-roster-seniority--senior{color:var(--accent)}.team-roster-seniority--lead{color:var(--green)}.team-roster-badge{font-size:9px;padding:3px 8px;border-radius:999px;font-weight:500;white-space:nowrap}.team-roster-badge--active{background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green)}.team-roster-deploy-btn{display:inline-flex;align-items:center;gap:4px;font-size:10px;padding:3px 10px;border:1px solid var(--accent);border-radius:999px;background:none;color:var(--accent);cursor:pointer;transition:all .15s}.team-roster-deploy-btn:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.team-roster-deploy-icon{width:11px;height:11px}.team-roster-vacant{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0}.team-roster-vacant-text{font-size:11px;color:var(--text-secondary);font-style:italic}.team-roster-hire-btn{font-size:10px;padding:3px 10px;border:1px solid var(--yellow);border-radius:999px;background:none;color:var(--yellow);cursor:pointer;transition:all .15s}.team-roster-hire-btn:hover{background:color-mix(in srgb,var(--yellow) 12%,transparent)}.wfe-container{background:var(--bg-secondary);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}.wfe-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.wfe-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.wfe-profile-badge{font-size:9px;text-transform:uppercase;letter-spacing:.4px;padding:2px 6px;border-radius:3px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border)}.wfe-header-actions{display:flex;gap:8px;margin-left:auto}.wfe-action-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;font-size:11px;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.wfe-action-btn:hover{border-color:var(--accent);color:var(--text)}.wfe-action-icon{width:13px;height:13px;opacity:.6}.wfe-save-btn{border-color:var(--green, #27ae60);color:var(--green, #27ae60)}.wfe-save-btn:hover{background:var(--green, #27ae60);color:var(--white)}.wfe-dag-wrap{overflow-x:auto;overflow-y:visible;padding:8px 0;min-height:0}.wfe-dag-node{cursor:pointer}.wfe-dag-node:hover{box-shadow:0 0 0 2px var(--accent);border-radius:6px}.wfe-node-editing{box-shadow:0 0 0 2px var(--accent)}.wfe-editor{background:var(--bg);border:1px solid var(--accent);border-radius:8px;padding:14px;margin-top:12px}.wfe-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.wfe-editor-title{font-size:12px;font-weight:600;color:var(--text)}.wfe-editor-close{font-size:18px;background:none;border:none;color:var(--text-secondary);cursor:pointer}.wfe-editor-close:hover{color:var(--text)}.wfe-add-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:12px}.wfe-readonly{opacity:.6}.wfe-inline-input,.wfe-inline-select{margin-left:6px;padding:3px 6px;font-size:11px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:4px;color:var(--text)}.wfe-hint{font-size:10px;color:var(--text-secondary);font-style:italic}.wfe-empty{text-align:center;padding:30px;color:var(--text-secondary);font-size:13px}.wfe-empty-hint{font-size:11px;opacity:.7}.myorg-container{padding:0 4px;overflow-y:auto;flex:1}.myorg-section{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 30%,var(--bg) 70%),color-mix(in srgb,var(--bg) 94%,var(--bg-elevated) 6%));border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px;padding:15px 16px 16px;margin-bottom:0}.myorg-section-header{display:flex;align-items:center;gap:9px;margin-bottom:14px;flex-wrap:wrap}.myorg-section-icon{width:16px;height:16px;opacity:.68}.myorg-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.myorg-section-count{font-size:11px;color:var(--text-secondary)}.myorg-section-spacer{flex:1 1 auto;min-width:12px}.myorg-section-note{color:var(--text-secondary);font-size:11px;font-variant-numeric:tabular-nums}.myorg-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:14px;margin-bottom:12px}.myorg-form-title{font-size:13px;font-weight:600;color:var(--text);margin:0 0 10px}.myorg-roster-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.myorg-roster-role{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:10px}.myorg-roster-role-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.myorg-roster-role-name{font-size:12px;font-weight:600;color:var(--text)}.myorg-roster-role-count{font-size:10px;color:var(--text-secondary)}.myorg-roster-emp{display:flex;align-items:center;gap:6px;padding:3px 0}.myorg-roster-emp-name{font-size:11px;color:var(--text)}.myorg-roster-seniority{font-size:9px;padding:1px 5px;border-radius:3px;text-transform:uppercase;letter-spacing:.3px}.myorg-seniority-junior{background:var(--bg-secondary);color:var(--text-secondary)}.myorg-seniority-mid{background:#3498db26;color:var(--accent)}.myorg-seniority-senior{background:#27ae6026;color:var(--green, #27ae60)}.myorg-roster-office-badge{font-size:9px;color:var(--green, #27ae60);border:1px solid var(--green, #27ae60);padding:0 4px;border-radius:3px}.myorg-roster-vacant{font-size:10px;color:var(--text-secondary);font-style:italic}.myorg-empty-hint{font-size:11px;color:var(--text-secondary);padding:12px 0}.myorg-collapsible{border:1px solid var(--border);border-radius:8px;margin-bottom:8px;overflow:hidden}.myorg-collapsible-toggle{width:100%;display:flex;align-items:center;gap:8px;padding:10px 14px;font-size:12px;background:var(--bg-secondary);border:none;color:var(--text);cursor:pointer;text-align:left}.myorg-collapsible-toggle:hover{background:var(--bg)}.myorg-toggle-icon{font-size:10px;color:var(--text-secondary);width:12px}.myorg-collapsible-title{font-weight:500}.myorg-collapsible-count{font-size:10px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:8px}.myorg-collapsible-extra{margin-left:auto}.myorg-collapsible-body{padding:12px 14px}.myorg-inline-btn{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--accent) 16%,transparent);border-radius:999px;padding:5px 9px;cursor:pointer}.myorg-inline-btn:hover{background:color-mix(in srgb,var(--accent) 13%,transparent)}.myorg-inline-icon{width:12px;height:12px}.myorg-action-bar{display:flex;justify-content:flex-end;padding:0}.myorg-reset-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;font-size:11px;color:var(--red);background:color-mix(in srgb,var(--red) 4%,transparent);border:1px solid color-mix(in srgb,var(--red) 30%,transparent);border-radius:999px;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.myorg-reset-btn:hover{background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.myorg-reset-icon{width:12px;height:12px;filter:hue-rotate(0deg)}.oc-node-resp{font-size:10px;color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}.oc-icon-picker-trigger{position:relative}.oc-icon-preview-btn{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text);font-size:12px;transition:border-color .15s}.oc-icon-preview-btn:hover{border-color:var(--accent)}.oc-icon-preview-img{width:24px;height:24px;border-radius:4px}.oc-icon-placeholder{opacity:.35}.oc-icon-preview-label{color:var(--text-secondary);font-size:11px}.oc-icon-clear-btn{padding:2px 8px;font-size:10px;color:var(--text-secondary);background:none;border:1px solid var(--border);border-radius:4px;cursor:pointer;margin-left:6px}.oc-icon-clear-btn:hover{color:var(--red);border-color:var(--red)}.oc-icon-gallery{position:absolute;top:100%;left:0;z-index:20;display:grid;grid-template-columns:repeat(6,1fr);gap:4px;padding:8px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000004d;margin-top:4px;width:240px}.oc-icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border:1px solid transparent;border-radius:6px;background:none;cursor:pointer;transition:all .15s}.oc-icon-option:hover{background:color-mix(in srgb,var(--accent) 10%,transparent);border-color:var(--accent)}.oc-icon-option--active{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:var(--accent)}.oc-icon-option-img{width:24px;height:24px}.qs-wizard{padding:24px;max-width:640px;margin:0 auto}.qs-loading{display:flex;align-items:center;justify-content:center;gap:10px;padding:48px 24px;color:var(--accent);font-size:14px}.qs-header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.qs-header-icon{width:40px;height:40px;flex-shrink:0}.qs-header-title{margin:0;font-size:18px;font-weight:600;color:var(--text)}.qs-header-sub{margin:2px 0 0;font-size:12px;color:var(--text-dim)}.qs-link-btn{background:none;border:none;color:var(--accent);cursor:pointer;padding:0;font-size:12px;text-decoration:underline}.qs-progress{display:flex;gap:4px;margin-bottom:20px;padding:8px 0;border-bottom:1px solid var(--border)}.qs-step{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;font-size:11px;font-weight:500;color:var(--text-dim);background:var(--bg-card);transition:all .2s}.qs-step-active{background:var(--accent);color:var(--white)}.qs-step-done{background:var(--green);color:var(--white)}.qs-step-icon{width:14px;height:14px;filter:grayscale(1) opacity(.5)}.qs-step-active .qs-step-icon,.qs-step-done .qs-step-icon{filter:brightness(10)}.qs-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:20px}.qs-panel h4{margin:0 0 4px;font-size:15px;font-weight:600;color:var(--text)}.qs-hint{font-size:12px;color:var(--text-dim);margin:0 0 16px}.qs-members{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.qs-member-row{display:flex;gap:6px;align-items:center}.qs-member-name{flex:1;min-width:0;padding:6px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:12px}.qs-member-resp{flex:1.5;min-width:0;padding:6px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:12px}.qs-member-parent{flex:1;min-width:0;padding:6px 8px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:11px}.qs-remove-btn{background:none;border:none;cursor:pointer;padding:4px;opacity:.4;transition:opacity .15s}.qs-remove-btn:hover{opacity:1}.qs-remove-icon{width:14px;height:14px}.qs-add-member{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;border:1px dashed var(--border);background:none;color:var(--accent);font-size:12px;cursor:pointer;margin-bottom:16px}.qs-add-member:hover{background:var(--bg)}.qs-add-icon{width:14px;height:14px}.qs-nav{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;border-top:1px solid var(--border)}.qs-patterns{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.qs-pattern-card{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:8px;border:2px solid var(--border);cursor:pointer;transition:border-color .15s}.qs-pattern-card:hover{border-color:var(--accent)}.qs-pattern-selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.qs-pattern-card input[type=radio]{margin-top:3px;flex-shrink:0}.qs-pattern-label{font-size:13px;font-weight:600;color:var(--text)}.qs-pattern-desc{font-size:11px;color:var(--text-dim);margin:2px 0}.qs-pattern-preview{font-size:11px;font-family:SF Mono,Fira Code,monospace;color:var(--accent);margin-top:4px}.qs-preview{margin-bottom:8px}.qs-preview-section{margin-bottom:12px}.qs-preview-section h5{margin:0 0 6px;font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.qs-preview-member{font-size:12px;padding:4px 0;color:var(--text)}.qs-preview-resp{color:var(--text-dim)}.qs-preview-parent{color:var(--text-dim);font-size:11px}@media(max-width:980px){.team-command-bar{grid-template-columns:1fr;align-items:stretch}.team-command-metrics,.team-command-actions{justify-content:flex-start}}@media(max-width:560px){.team-roster-grid{grid-template-columns:1fr}.team-command-actions{align-items:stretch}.team-command-actions>*{justify-content:center}.myorg-section{padding:12px}.qs-wizard{padding:16px 0}.qs-member-row{flex-direction:column;align-items:stretch}}.org-dag{display:flex;align-items:flex-start;gap:0;overflow-x:auto;padding:16px 0 24px}.org-dag-group-wrap{display:flex;align-items:center;gap:0}.org-dag-arrow{display:flex;align-items:center;justify-content:center;opacity:.4;padding:0 8px;flex-shrink:0}.org-dag-arrow-icon{width:16px;height:16px;filter:brightness(0) invert(.6)}.org-dag-group{display:flex;flex-direction:column;gap:8px;position:relative}.org-dag-parallel{border:1px dashed var(--border);border-radius:8px;padding:8px;background:#ffffff03}.org-dag-parallel-label{position:absolute;top:-8px;left:8px;font-size:9px;padding:0 4px;background:var(--bg);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.org-dag-node{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px;min-width:180px;max-width:240px}.org-dag-node-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.org-dag-node-title{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-dag-node-role{font-size:10px;padding:1px 5px;border-radius:3px;background:#6366f114;color:var(--accent);white-space:nowrap;flex-shrink:0}.org-dag-node-id{font-size:10px;color:var(--text-secondary);font-family:JetBrains Mono,SF Mono,monospace;margin-bottom:6px}.org-dag-gate{display:flex;align-items:center;gap:4px;font-size:10px;padding:3px 6px;border-radius:4px;margin-bottom:4px}.org-gate-review{background:#eab30814;color:var(--yellow)}.org-gate-approval{background:#34d39914;color:var(--green)}.org-gate-human_confirmation{background:#ef444414;color:var(--red)}.org-gate-icon{width:12px;height:12px}.org-gate-reviewer{opacity:.7;font-style:italic}.org-dag-strategy{font-size:9px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px}.org-dag-legend{display:flex;gap:16px;padding-top:12px;border-top:1px solid var(--border);margin-top:8px}.org-dag-legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-secondary)}.org-gate-icon-sm{font-size:12px}.org-channels-grid,.org-connectors-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-bottom:24px}.org-channel-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px}.org-ch-running{border-color:color-mix(in srgb,var(--green) 35%,var(--border))}.org-ch-disabled{opacity:.5}.org-ch-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.org-ch-dot{width:8px;height:8px;border-radius:50%;background:var(--text-secondary);opacity:.3;flex-shrink:0}.org-ch-dot.configured{background:var(--yellow);opacity:.6}.org-ch-dot.ready{background:var(--yellow);opacity:1}.org-ch-dot.running{background:var(--green);opacity:1;animation:pulse-dot 2s ease-in-out infinite}.org-ch-name{font-size:13px;font-weight:500;text-transform:capitalize}.org-ch-status-row{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:4px}.org-ch-badge{font-size:9px;padding:1px 5px;border-radius:3px;background:#ffffff0a;color:var(--text-secondary)}.org-ch-enabled{color:var(--accent);background:#6366f114}.org-ch-configured{color:var(--yellow);background:#eab30814}.org-ch-running-badge{color:var(--green);background:#34d39914}.org-ch-available{color:var(--green)}.org-ch-off{color:var(--text-secondary)}.org-ch-delivery{font-size:10px;color:var(--text-secondary);margin-top:4px}.org-ch-error{font-size:10px;color:var(--red);margin-top:4px;word-break:break-all}.org-connector-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px}.org-conn-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.org-conn-name{font-size:13px;font-weight:500}.org-conn-type{font-size:9px;padding:1px 5px;border-radius:3px;background:#6366f114;color:var(--accent);text-transform:uppercase}.org-conn-desc{font-size:11px;color:var(--text-secondary);line-height:1.3;margin-bottom:6px}.org-conn-actions{display:flex;flex-wrap:wrap;gap:3px}.org-conn-action-tag{font-size:9px;padding:1px 5px;border-radius:3px;background:#34d39914;color:var(--green);font-family:JetBrains Mono,SF Mono,monospace}.org-emp-card{cursor:pointer;transition:background .15s}.org-emp-card:hover{background:#ffffff0a}.org-emp-selected{background:#6366f10f;border:1px solid rgba(99,102,241,.15);border-radius:6px}.org-emp-detail{margin-top:8px;padding:10px;background:#ffffff05;border-top:1px solid var(--border);border-radius:0 0 6px 6px}.org-emp-detail-title{font-size:11px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.org-emp-detail-block{margin-bottom:8px}.org-emp-detail-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}.org-emp-detail-text{font-size:11px;color:var(--text-secondary);line-height:1.4;white-space:pre-wrap;max-height:120px;overflow-y:auto}.org-emp-detail-stats{display:flex;flex-wrap:wrap;gap:6px}.org-stat-tag{font-size:10px;padding:2px 6px;border-radius:3px;background:#6366f114;color:var(--accent);font-family:JetBrains Mono,SF Mono,monospace}.org-reorg-refresh:hover{color:var(--text);border-color:var(--text-secondary)}.org-reorg-list{display:flex;flex-direction:column;gap:10px}.org-reorg-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px}.org-reorg-proposed{border-left:3px solid var(--accent)}.org-reorg-approved,.org-reorg-applied{border-left:3px solid var(--green)}.org-reorg-denied,.org-reorg-failed{border-left:3px solid var(--red)}.org-reorg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.org-reorg-title{font-size:14px;font-weight:600}.org-reorg-status{font-size:10px;text-transform:uppercase;font-weight:600;letter-spacing:.3px}.org-reorg-summary{font-size:12px;color:var(--text);line-height:1.4;margin-bottom:6px}.org-reorg-change-item code{font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;color:var(--accent)}.org-reorg-actions{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}.org-reorg-approve{background:var(--green);color:var(--white);border:none;padding:5px 14px;border-radius:4px;font-size:11px;cursor:pointer;font-weight:500}.org-reorg-approve:hover{opacity:.9}.org-reorg-deny{background:none;border:1px solid var(--red);color:var(--red);padding:5px 14px;border-radius:4px;font-size:11px;cursor:pointer}.org-reorg-deny:hover{background:var(--red);color:var(--white)}.tm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.tm-card{display:flex;flex-direction:column;gap:12px;padding:16px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 1px 2px #0000004d,0 8px 24px #0000001f;cursor:pointer;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease;min-height:196px}.tm-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--accent) 42%,var(--border));box-shadow:inset 0 1px color-mix(in srgb,var(--text) 8%,transparent),0 2px 4px #00000052,0 14px 32px #00000038}.tm-card-head{display:flex;align-items:flex-start;gap:12px;min-width:0}.tm-card-avatar{position:relative;flex-shrink:0;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 22%,transparent),inset 0 1px color-mix(in srgb,var(--text) 6%,transparent);font-family:inherit;transition:background .18s ease}.tm-card:hover .tm-card-avatar{background:color-mix(in srgb,var(--accent) 20%,transparent)}.tm-card-avatar-emoji{font-size:22px;line-height:1}.tm-card-avatar-mono{font-size:15px;font-weight:700;letter-spacing:.02em}.tm-card-head-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.tm-card-name-row{display:flex;align-items:center;gap:8px;min-width:0}.tm-card-name{font-size:14px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.tm-card-agent-badge{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:9.5px;font-weight:500;padding:2px 6px;border-radius:4px;background:var(--bg-secondary);color:var(--text-secondary);letter-spacing:.01em;white-space:nowrap;flex-shrink:0}.tm-card-category{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:9.5px;font-weight:600;color:var(--text-secondary);opacity:.75;text-transform:uppercase;letter-spacing:.08em}.tm-card-category:before{content:"· ";opacity:.5}.tm-card-body{display:flex;flex-direction:column;gap:4px;flex:1;min-height:0}.tm-card-vibe{font-size:12px;color:var(--text);opacity:.86;font-style:italic;line-height:1.4;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.tm-card-desc{font-size:12px;color:var(--text-secondary);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tm-card-chips{display:flex;flex-wrap:wrap;gap:4px}.tm-card-chip{font-size:10px;font-weight:500;padding:2px 7px;border-radius:4px;background:color-mix(in srgb,var(--accent) 9%,transparent);color:color-mix(in srgb,var(--accent) 85%,var(--text) 15%);letter-spacing:.01em;white-space:nowrap}.tm-card-chip-more{opacity:.6}.tm-card-footer{display:flex;justify-content:flex-end;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);margin-top:auto}.tm-card-hire-btn{background:transparent;border:1px solid color-mix(in srgb,var(--accent) 55%,var(--border));color:var(--accent);font-size:11px;font-weight:600;letter-spacing:.01em;padding:5px 14px;border-radius:6px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.tm-card-hire-btn:hover:not(:disabled){background:var(--accent);color:var(--white);border-color:var(--accent)}.tm-card-hire-btn:active:not(:disabled){transform:translateY(1px)}.tm-card-hire-btn:disabled{opacity:.55;cursor:default;border-color:var(--border);color:var(--text-secondary)}.tm-detail-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#0000008c}.tm-detail-modal{background:var(--bg);border:1px solid var(--border);border-radius:12px;width:480px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.tm-detail-header{display:flex;align-items:center;gap:12px;padding:20px;border-bottom:2px solid var(--border)}.tm-detail-emoji{font-size:48px;line-height:1;flex-shrink:0}.tm-detail-name{font-size:18px;font-weight:600;margin:0}.tm-detail-category{font-size:11px;color:var(--text-secondary);text-transform:capitalize}.tm-detail-close{margin-left:auto;background:none;border:none;color:var(--text-secondary);font-size:22px;cursor:pointer;line-height:1;padding:4px}.tm-detail-close:hover{color:var(--text)}.tm-detail-body{flex:1;overflow-y:auto;padding:20px}.tm-detail-vibe{margin:0 0 16px;padding:10px 14px;border-left:3px solid var(--accent);background:#6366f10a;font-size:13px;font-style:italic;color:var(--text-secondary);line-height:1.4}.tm-detail-desc{font-size:13px;color:var(--text);line-height:1.5;margin:0 0 16px}.tm-detail-section{margin-bottom:14px}.tm-detail-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.4px;margin-bottom:6px}.tm-detail-tags{display:flex;flex-wrap:wrap;gap:4px}.org-domain-tag,.org-tool-tag{font-size:10px;font-weight:500;padding:2px 7px;border-radius:4px;letter-spacing:.01em}.org-domain-tag{background:color-mix(in srgb,var(--accent) 10%,transparent);color:color-mix(in srgb,var(--accent) 85%,var(--text) 15%)}.org-tool-tag{background:color-mix(in srgb,var(--green) 10%,transparent);color:color-mix(in srgb,var(--green) 85%,var(--text) 15%)}.tm-detail-footer{display:flex;align-items:center;gap:10px;padding:16px 20px;border-top:1px solid var(--border)}.pkg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.pkg-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;padding:14px;transition:border-color .15s}.pkg-card:hover{border-color:var(--accent)}.pkg-card-header{display:flex;align-items:center;gap:10px;margin-bottom:10px}.pkg-card-icon{width:32px;height:32px;opacity:.85}.pkg-card-title-wrap{display:flex;flex-direction:column;gap:2px}.pkg-card-name{font-size:13px;font-weight:600;color:var(--text)}.pkg-card-version{font-size:11px;color:var(--text-secondary)}.pkg-card-stats{display:flex;gap:14px;margin-bottom:8px}.pkg-card-stat{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-secondary)}.pkg-stat-icon{width:13px;height:13px;opacity:.6}.pkg-card-date{font-size:10px;color:var(--text-secondary);margin-bottom:10px}.pkg-card-actions{display:flex;justify-content:flex-end}.mkt-container{padding:0 4px;overflow-y:auto;flex:1}.mkt-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.mkt-search-wrap{flex:1;position:relative}.mkt-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:13px;height:13px;opacity:.4}.mkt-search{width:100%;padding:7px 10px 7px 30px;font-size:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text)}.mkt-search:focus{border-color:var(--accent);outline:none}.mkt-count{font-size:11px;color:var(--text-secondary);white-space:nowrap}.mkt-filters{margin-bottom:14px}.mkt-pill-row{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px}.mkt-pill{padding:3px 10px;font-size:11px;border-radius:12px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s;text-transform:capitalize;display:inline-flex;align-items:center;gap:4px}.mkt-pill:hover{border-color:var(--accent);color:var(--text)}.mkt-pill.active{background:var(--accent);color:var(--white);border-color:var(--accent)}.mkt-pill-pattern{border-style:dashed}.mkt-pill-pattern.active{border-style:solid}.mkt-section{margin-bottom:20px}.mkt-section-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.mkt-section-icon{width:18px;height:18px;opacity:.6}.mkt-section-title{font-size:13px;font-weight:600;color:var(--text);margin:0}.mkt-section-count{font-size:11px;color:var(--text-secondary);background:var(--bg-secondary);padding:1px 6px;border-radius:8px}.mkt-arch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px}.mkt-arch-card{background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .2s}.mkt-arch-card:hover{border-color:var(--accent);box-shadow:0 2px 12px #0000001a}.mkt-arch-header{display:flex;align-items:flex-start;gap:10px;margin-bottom:6px}.mkt-arch-emoji{font-size:26px;line-height:1}.mkt-arch-title-wrap{flex:1}.mkt-arch-name{font-size:14px;font-weight:600;color:var(--text);display:block}.mkt-arch-badges{display:flex;gap:6px;margin-top:3px}.mkt-arch-category{font-size:9px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:3px}.mkt-arch-pattern{font-size:9px;color:var(--accent);display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border:1px dashed var(--accent);border-radius:3px;opacity:.8}.mkt-arch-dag-summary{font-family:SF Mono,Fira Code,monospace;font-size:11px;color:var(--accent);background:var(--bg);padding:4px 8px;border-radius:4px;margin-bottom:8px;overflow-x:auto;white-space:nowrap;letter-spacing:.2px}.mkt-arch-desc{font-size:12px;color:var(--text-secondary);line-height:1.4;margin-bottom:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.mkt-arch-stats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:6px}.mkt-arch-stat{font-size:10px;color:var(--text-secondary);background:var(--bg);padding:2px 6px;border-radius:4px}.mkt-arch-tags{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}.mkt-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border)}.mkt-arch-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px}.mkt-installed-badge{font-size:11px;color:var(--green, #27ae60);font-weight:500;padding:3px 8px;border:1px solid var(--green, #27ae60);border-radius:4px}.mkt-empty{text-align:center;padding:40px;color:var(--text-secondary);font-size:13px}.mkt-modal-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px}.mkt-modal{background:var(--bg);border:1px solid var(--border);border-radius:12px;width:700px;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.mkt-modal-header{display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:2px solid var(--border)}.mkt-modal-emoji{font-size:32px;line-height:1}.mkt-modal-name{font-size:18px;font-weight:700;color:var(--text);margin:0}.mkt-modal-category{font-size:11px;color:var(--text-secondary);text-transform:uppercase}.mkt-modal-close{margin-left:auto;font-size:24px;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:0 4px}.mkt-modal-close:hover{color:var(--text)}.mkt-modal-body{padding:20px;overflow-y:auto;flex:1}.mkt-modal-desc{font-size:13px;color:var(--text);line-height:1.5;margin:0 0 16px}.mkt-modal-section{margin-bottom:16px}.mkt-modal-label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:8px}.mkt-modal-tags{display:flex;flex-wrap:wrap;gap:4px}.mkt-role-list{display:flex;flex-direction:column;gap:8px}.mkt-role-item{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:10px 12px}.mkt-role-name{font-size:13px;font-weight:600;color:var(--text);margin-bottom:3px}.mkt-role-name code{font-size:10px;font-weight:400;color:var(--text-secondary);margin-left:4px}.mkt-role-resp{font-size:11px;color:var(--text-secondary);margin-bottom:3px}.mkt-role-meta{font-size:10px;color:var(--text-secondary)}.mkt-role-meta code{font-size:10px;background:var(--bg);padding:0 3px;border-radius:2px;margin:0 2px}.mkt-dag-wrap{overflow-x:auto}.mkt-modal-footer{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;align-items:center;gap:10px}.htr-overlay{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.htr-modal{width:100%;max-width:520px;max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);border:1px solid var(--border);border-radius:8px;box-shadow:0 18px 60px #00000061}.htr-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 18px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.htr-title{margin:0 0 2px;font-size:14px;font-weight:600;color:var(--text)}.htr-subtitle{margin:0;font-size:11.5px;color:var(--text-secondary)}.htr-close{background:transparent;border:none;color:var(--text-secondary);font-size:18px;line-height:1;cursor:pointer}.htr-close:hover{color:var(--text)}.htr-body{display:flex;flex-direction:column;gap:8px;padding:14px 18px;overflow:auto}.htr-empty{padding:24px 8px;text-align:center}.htr-empty-title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--text)}.htr-empty-hint{margin:0;font-size:11.5px;color:var(--text-secondary)}.htr-role-list,.tm-detail-role-list{display:flex;flex-direction:column;gap:4px}.tm-detail-role-list{margin-top:4px}.htr-role-row,.tm-detail-role-row{display:flex;flex-direction:column;gap:2px;padding:9px 12px;text-align:left;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);cursor:pointer;transition:border-color .12s ease,background .12s ease}.htr-role-row:hover,.tm-detail-role-row:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.htr-role-row.is-selected,.tm-detail-role-row.is-selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.htr-role-name,.tm-detail-role-name{font-size:12.5px;font-weight:600;color:var(--text)}.htr-role-resp,.tm-detail-role-resp{font-size:11px;color:var(--text-secondary);line-height:1.35}.htr-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.tm-detail-vacancy-empty{margin:4px 0 0;font-size:11.5px;color:var(--text-secondary);font-style:italic}.cfg-io-panel{background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;padding:16px;margin-top:16px;display:flex;flex-direction:column;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 1px 2px #0000004d,0 8px 24px #0000001f}.cfg-io-header{padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:4px}.cfg-io-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.cfg-io-subtitle{font-size:12px;color:var(--text-secondary);margin:4px 0 0;line-height:1.5}.cfg-io-section{padding:14px 0;display:flex;flex-direction:column;gap:10px}.cfg-io-section+.cfg-io-section{border-top:1px solid var(--border)}.cfg-io-section-header{display:flex;align-items:center;gap:8px}.cfg-io-section-icon{width:16px;height:16px;opacity:.6}.cfg-io-section-title{font-size:12px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.4px}.cfg-io-upload-row{display:flex;align-items:center}.cfg-io-file-label{display:inline-flex;align-items:center;gap:12px;cursor:pointer}.cfg-io-file-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.cfg-io-file-btn{padding:6px 14px;font-size:12px;font-weight:500;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text);transition:border-color .15s,color .15s}.cfg-io-file-label:hover .cfg-io-file-btn{border-color:var(--accent);color:var(--accent)}.cfg-io-file-input:focus-visible+.cfg-io-file-btn{outline:2px solid var(--accent);outline-offset:2px}.cfg-io-file-name{font-size:12px;color:var(--text-secondary);font-style:italic}.cfg-io-textarea{width:100%;padding:10px 12px;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;line-height:1.5;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);box-sizing:border-box;resize:vertical;min-height:140px}.cfg-io-textarea:focus{border-color:var(--accent);outline:none}.cfg-io-actions{display:flex;gap:8px;margin-top:2px;flex-wrap:wrap}.cfg-io-preview{display:flex;gap:12px;padding:12px 14px;background:color-mix(in srgb,var(--green) 8%,transparent);border:1px solid color-mix(in srgb,var(--green) 28%,transparent);border-radius:var(--radius-xs);margin-top:4px}.cfg-io-preview-icon{width:20px;height:20px;flex-shrink:0;margin-top:1px}.cfg-io-preview-body{flex:1;min-width:0}.cfg-io-preview-title{font-size:12px;font-weight:600;color:var(--green);margin-bottom:8px}.cfg-io-preview-stats{display:flex;gap:20px;flex-wrap:wrap}.cfg-io-preview-stat{display:flex;flex-direction:column;gap:2px}.cfg-io-stat-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.cfg-io-stat-value{font-size:16px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.cfg-io-error{display:flex;gap:12px;padding:12px 14px;background:color-mix(in srgb,var(--red) 8%,transparent);border:1px solid color-mix(in srgb,var(--red) 28%,transparent);border-radius:var(--radius-xs);margin-top:4px}.cfg-io-error-icon{width:20px;height:20px;flex-shrink:0;margin-top:1px}.cfg-io-error-body{flex:1;min-width:0}.cfg-io-error-title{font-size:12px;font-weight:600;color:var(--red);margin-bottom:6px}.cfg-io-error-text{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--text);background:var(--bg-secondary);padding:8px 10px;border-radius:4px;margin:0;overflow-x:auto;white-space:pre-wrap;word-break:break-word;line-height:1.4}.oc-container{background:var(--bg-secondary);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}.oc-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.oc-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.oc-header-actions{display:flex;gap:8px}.oc-action-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;font-size:11px;font-weight:500;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.oc-action-btn:hover{border-color:var(--accent);color:var(--text)}.oc-action-icon{width:13px;height:13px;opacity:.6}.oc-empty{text-align:center;padding:30px;color:var(--text-secondary)}.oc-empty-icon{width:40px;height:40px;opacity:.3;margin-bottom:8px}.oc-empty-hint{font-size:11px;opacity:.7}.oc-tree{overflow-x:auto;overflow-y:visible;padding:10px 0;min-height:0}.oc-node{display:flex;flex-direction:column;align-items:center}.oc-children{display:flex;gap:16px;padding-top:20px;position:relative}.oc-children:before{content:"";position:absolute;top:0;left:50%;width:0;height:20px;border-left:1px solid var(--border)}.oc-node:not(.oc-node-root){position:relative}.oc-node:not(.oc-node-root):before{content:"";position:absolute;top:-20px;left:50%;width:0;height:20px;border-left:1px solid var(--border)}.oc-node-card{background:var(--bg);border:1px solid var(--border);border-left:3px solid var(--green);border-radius:8px;padding:8px 12px;min-width:120px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.oc-node-card:hover{border-color:var(--accent);box-shadow:0 2px 8px #00000014}.oc-card-editing{border-color:var(--accent);box-shadow:0 0 0 2px rgba(var(--accent-rgb, 52,152,219),.2)}.oc-card-owner{background:var(--accent);color:var(--white);border-left-color:var(--accent);cursor:default}.oc-node-top{display:flex;align-items:center;gap:6px}.oc-node-icon{width:20px;height:20px;flex-shrink:0;border-radius:4px}.oc-node-name{font-size:12px;font-weight:600;color:var(--text)}.oc-card-owner .oc-node-name{color:var(--white)}.oc-node-status{width:6px;height:6px;border-radius:50%;flex-shrink:0}.oc-node-emp{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}.oc-emp-chip{font-size:9px;padding:1px 5px;background:var(--bg-secondary);border-radius:3px;color:var(--text-secondary)}.oc-node-vacant{font-size:10px;color:var(--yellow, #f39c12);font-style:italic;margin-top:3px}.oc-editor{background:var(--bg);border:1px solid var(--accent);border-radius:8px;padding:14px 16px;margin-top:6px;min-width:300px;width:max-content;max-width:420px}.oc-form-row{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.oc-form-row label{font-size:11px;font-weight:600;color:var(--text-secondary)}.oc-form-row input,.oc-form-row select{width:100%;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);box-sizing:border-box}.oc-form-row input:focus,.oc-form-row select:focus{border-color:var(--accent);outline:none}.oc-spawn-checks{display:flex;flex-direction:column;gap:6px}.oc-check-label{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary);cursor:pointer}.oc-check-label input[type=checkbox],.oc-check-label input[type=radio]{accent-color:var(--accent);width:15px;height:15px;flex-shrink:0}.oc-form-actions{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}.oc-add-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:14px}.wfe-pattern-strip{display:flex;align-items:center;gap:6px;margin:0 0 10px;padding:5px 8px;background:var(--bg);border-radius:8px;border:1px solid var(--border)}.wfe-pattern-label{font-size:11px;color:var(--text-dim);margin-right:4px;font-weight:500}.wfe-pattern-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;font-size:11px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text-dim);cursor:pointer;transition:all .15s}.wfe-pattern-btn:hover{background:color-mix(in srgb,var(--accent) 8%,transparent);color:var(--text)}.wfe-pattern-btn--active{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent);font-weight:600}.wfe-pattern-icon{width:14px;height:14px;filter:brightness(0) invert(.7)}.wfe-pattern-btn--active .wfe-pattern-icon{filter:none}.flow-dag-container{position:relative;overflow-x:auto;overflow-y:visible;padding:20px 16px;min-height:120px}.flow-dag-node{position:absolute;z-index:2;cursor:pointer;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:8px 12px;transition:box-shadow .15s,opacity .2s}.flow-dag-node:hover{box-shadow:0 0 0 2px var(--accent)}.flow-dag-node--selected{box-shadow:0 0 0 2px var(--accent);border-color:var(--accent)}.flow-dag-node--dimmed{opacity:.18}.flow-dag-node-header{display:flex;justify-content:space-between;align-items:center;gap:6px}.flow-dag-node-icon{width:16px;height:16px;flex-shrink:0;border-radius:3px}.flow-dag-node-title{font-size:12px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flow-dag-node-role{font-size:10px;color:var(--accent);font-weight:500;white-space:nowrap}.flow-dag-gate{display:flex;align-items:center;gap:4px;margin-top:4px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:500}.flow-dag-gate--review{background:color-mix(in srgb,var(--yellow) 15%,transparent);color:var(--yellow)}.flow-dag-gate--approval{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.flow-dag-gate-icon{width:12px;height:12px}.flow-dag-gate-reviewer{font-style:italic;opacity:.7}.flow-dag-parallel-group{border:1px dashed var(--border);border-radius:10px;z-index:0}.flow-dag-parallel-label{position:absolute;top:-8px;left:10px;font-size:9px;padding:0 6px;background:var(--bg);color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;font-weight:500}.flow-dag-svg{z-index:1}.flow-dag-insert-btn circle{transition:all .15s}.flow-dag-insert-btn:hover circle{stroke:var(--accent);fill:color-mix(in srgb,var(--accent) 12%,var(--bg-card))}.flow-dag-insert-btn:hover text{fill:var(--accent)}.wfe-connect-active{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:var(--accent);color:var(--accent)}.wfe-connect-hint{padding:8px 14px;font-size:12px;color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent);border:1px solid color-mix(in srgb,var(--accent) 20%,transparent);border-radius:6px;margin:0 0 8px}.wfe-hint-cancel{background:none;border:none;color:var(--text-secondary);cursor:pointer;text-decoration:underline;font-size:12px;padding:0;margin-left:8px}.flow-dag-port{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--border);border:1.5px solid var(--bg-card);z-index:3;transition:all .15s}.flow-dag-port--in{left:-4px;top:50%;transform:translateY(-50%)}.flow-dag-port--out{right:-4px;top:50%;transform:translateY(-50%)}.flow-dag-port--source{background:var(--accent);box-shadow:0 0 4px var(--accent)}.flow-dag-port--target{background:var(--green);box-shadow:0 0 4px var(--green)}.flow-dag-port--active{background:var(--yellow);box-shadow:0 0 6px var(--yellow);width:10px;height:10px;right:-5px}.oc-advanced-toggle{margin:4px 0;border-top:1px solid var(--border);padding-top:8px}.oc-advanced-btn{display:flex;align-items:center;gap:5px;padding:4px 0;background:none;border:none;color:var(--accent);font-size:11px;font-weight:600;cursor:pointer}.oc-advanced-btn:hover{opacity:.8}.oc-advanced-section{margin-top:4px}.oc-exec-options{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.oc-exec-options .oc-check-label{white-space:nowrap}.oc-exec-agent-select{margin-top:6px;width:100%;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);box-sizing:border-box}.oc-form-row textarea{width:100%;padding:8px 10px;font-size:12px;font-family:inherit;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);line-height:1.5;box-sizing:border-box}.oc-form-row textarea:focus{border-color:var(--accent);outline:none}.wfe-policy-settings{padding:8px 4px}.wfe-policy-settings .oc-form-row label{font-size:12px;font-weight:600;color:var(--text);margin-bottom:2px}.wfe-policy-settings .oc-spawn-checks{gap:8px;padding-left:2px}.wfe-policy-settings .oc-check-label{font-size:12px;color:var(--text-secondary)}.wfe-policy-settings .wfe-max-workers{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary)}.wfe-policy-settings .wfe-max-workers input{width:60px;padding:4px 8px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text)}.wfe-policy-settings .oc-form-actions{margin-top:16px}.oc-canvas-node{position:relative;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 82%,var(--bg) 18%),color-mix(in srgb,var(--bg) 72%,var(--bg-elevated) 28%));border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px;padding:12px 14px;min-width:208px;max-width:228px;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 10px 28px #0000002e;font-family:inherit;transition:border-color .18s ease,box-shadow .18s ease,background .18s ease}.oc-canvas-node:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:inset 0 1px color-mix(in srgb,var(--text) 7%,transparent),0 14px 32px #0000003d}.oc-canvas-node.is-owner{min-width:232px;max-width:256px;padding:14px 16px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 17%,var(--bg-elevated) 83%),color-mix(in srgb,var(--bg) 66%,var(--accent) 8%));border-color:color-mix(in srgb,var(--accent) 42%,var(--border));color:var(--text);box-shadow:inset 0 1px color-mix(in srgb,var(--accent) 28%,transparent),0 16px 34px #00000042}.oc-canvas-node.is-owner:hover{border-color:color-mix(in srgb,var(--accent) 90%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--accent) 34%,transparent),0 18px 42px #0000004d}.oc-canvas-node.is-selected{border-color:var(--accent);box-shadow:inset 0 1px color-mix(in srgb,var(--text) 10%,transparent),0 0 0 2px var(--accent),0 0 0 6px color-mix(in srgb,var(--accent) 12%,transparent),0 8px 24px #0003}.oc-canvas-node.is-drop-target{border-color:var(--green);box-shadow:0 0 0 2px var(--green),0 0 24px color-mix(in srgb,var(--green) 30%,transparent);transform:scale(1.03)}.oc-canvas-node-row{display:flex;align-items:center;gap:10px;min-width:0}.oc-canvas-node-chip{position:relative;flex-shrink:0;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 10%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 18%,transparent),inset 0 1px color-mix(in srgb,var(--text) 8%,transparent);transition:background .18s ease,box-shadow .18s ease}.oc-canvas-node:hover .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 18%,transparent)}.oc-canvas-node.is-selected .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 24%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 40%,transparent),inset 0 1px color-mix(in srgb,var(--text) 10%,transparent)}.is-owner .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 28%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 34%,transparent),inset 0 1px color-mix(in srgb,var(--text) 7%,transparent)}.oc-canvas-node-chip-icon{width:18px;height:18px;display:block;background-color:var(--accent);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;transition:background-color .18s ease}.is-owner .oc-canvas-node-chip-icon{background-color:var(--accent)}.oc-canvas-node-text{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.oc-canvas-node-name{font-size:13.5px;font-weight:600;color:var(--text);letter-spacing:0;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.is-owner .oc-canvas-node-name{color:var(--text)}.oc-canvas-node-meta{display:flex;gap:6px;align-items:center;font-size:10.5px;color:var(--text-secondary);line-height:1.2}.is-owner .oc-canvas-node-meta{color:var(--text-secondary)}.oc-canvas-node-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-canvas-node-person{font-weight:600;color:var(--accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.is-owner .oc-canvas-node-person{color:var(--text)}.oc-canvas-node-badge{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent);padding:1px 7px;border-radius:10px;font-weight:600;font-size:10px;letter-spacing:.02em}.is-owner .oc-canvas-node-badge{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent)}.oc-canvas-handle{width:8px;height:8px;background:var(--accent);border:none;opacity:0}.oc-canvas-node:hover .oc-canvas-handle{opacity:.5}.react-flow__background{background:color-mix(in srgb,var(--bg) 92%,#000 8%)!important}.react-flow__edge-path{stroke:color-mix(in srgb,var(--text-secondary) 70%,var(--border) 30%);stroke-width:1.4;opacity:.48}.react-flow__edge:hover .react-flow__edge-path{stroke:var(--accent);opacity:1}.react-flow__minimap{background:color-mix(in srgb,var(--bg-elevated) 62%,transparent)!important;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);border-radius:8px;opacity:.78;width:150px!important;height:92px!important;right:16px!important;bottom:16px!important}.react-flow__controls{left:16px!important;bottom:16px!important;background:color-mix(in srgb,var(--bg-elevated) 72%,transparent);border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:8px;overflow:hidden}.react-flow__controls button{background:transparent;color:var(--text-secondary);border-bottom:1px solid var(--border)}.react-flow__controls button:hover{background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent)}.ri-panel{position:absolute;top:0;right:0;bottom:0;width:340px;display:flex;flex-direction:column;background:color-mix(in srgb,var(--bg-elevated) 72%,transparent);backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);border-left:1px solid var(--border);box-shadow:-8px 0 32px #00000040;z-index:20;font-size:13px}.ri-panel-header{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.ri-panel-icon{width:22px;height:22px;opacity:.9;flex-shrink:0}.ri-panel-title-wrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.ri-panel-title{margin:0;font-size:14px;font-weight:600;color:var(--text);letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-panel-id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;color:var(--text-secondary);opacity:.8}.ri-panel-close{padding:4px 8px}.ri-panel-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 0}.ri-panel-body::-webkit-scrollbar{width:8px}.ri-panel-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.ri-panel-body::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.ri-group{border-bottom:1px solid var(--border)}.ri-group:last-child{border-bottom:none}.ri-group-header{width:100%;display:flex;align-items:center;gap:8px;padding:10px 16px;background:transparent;border:none;cursor:pointer;color:var(--text);font-size:12px;font-weight:600;letter-spacing:.01em;transition:background .15s}.ri-group-header:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.ri-group-caret{font-size:10px;color:var(--text-secondary);width:12px;text-align:center;transition:transform .15s}.ri-group.is-expanded .ri-group-caret{color:var(--accent)}.ri-group-title{flex:1;text-align:left}.ri-group-body{padding:4px 16px 14px;display:flex;flex-direction:column;gap:12px}.ri-field{display:flex;flex-direction:column;gap:4px}.ri-field-label{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.6px}.ri-field-control{display:flex;flex-direction:column;gap:4px}.ri-text-input,.ri-select,.ri-textarea{width:100%;padding:7px 10px;font-size:12px;font-family:inherit;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);box-sizing:border-box;transition:border-color .15s,box-shadow .15s}.ri-text-input:focus,.ri-select:focus,.ri-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.ri-textarea{resize:vertical;min-height:60px;line-height:1.5}.ri-textarea-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.ri-meta-value{font-size:12px;color:var(--text);padding:4px 0}.ri-radio-group{display:flex;gap:4px;flex-wrap:wrap}.ri-radio{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);font-size:11px;color:var(--text-secondary);cursor:pointer;transition:border-color .15s,color .15s}.ri-radio:has(input:checked){border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.ri-radio input{margin:0;accent-color:var(--accent)}.ri-icon-picker{position:relative}.ri-icon-picker-trigger{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);cursor:pointer;transition:border-color .15s}.ri-icon-picker-trigger:hover:not(:disabled){border-color:var(--accent)}.ri-icon-picker-current{width:18px;height:18px;opacity:.9}.ri-icon-picker-label{font-size:11px;color:var(--text-secondary)}.ri-icon-picker-popover{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:280px;max-height:240px;overflow-y:auto;padding:8px;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-xs);box-shadow:0 8px 24px #00000059;display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.ri-icon-option{display:flex;align-items:center;justify-content:center;padding:6px;background:transparent;border:1px solid transparent;border-radius:var(--radius-xs);cursor:pointer;transition:background .15s,border-color .15s}.ri-icon-option:hover{background:color-mix(in srgb,var(--accent) 12%,transparent);border-color:var(--accent)}.ri-icon-option.is-active{background:color-mix(in srgb,var(--accent) 20%,transparent);border-color:var(--accent)}.ri-icon-option img{width:20px;height:20px;opacity:.85}.ri-multiselect{position:relative}.ri-chips{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.ri-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 10px;background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 28%,transparent);border-radius:999px;color:var(--accent);font-size:11px;font-weight:500}.ri-chip-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:50%;background:transparent;color:var(--accent);font-size:12px;cursor:pointer;opacity:.65;transition:opacity .15s,background .15s}.ri-chip-x:hover{opacity:1;background:color-mix(in srgb,var(--accent) 20%,transparent)}.ri-chip-add{padding:2px 10px;font-size:11px;color:var(--text-secondary);background:transparent;border:1px dashed var(--border);border-radius:999px;cursor:pointer;transition:border-color .15s,color .15s}.ri-chip-add:hover{color:var(--accent);border-color:var(--accent)}.ri-multiselect-popover{position:absolute;z-index:30;top:calc(100% + 4px);left:0;min-width:180px;max-height:200px;overflow-y:auto;padding:4px;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-xs);box-shadow:0 8px 24px #00000059;display:flex;flex-direction:column}.ri-multiselect-option{padding:6px 10px;text-align:left;background:transparent;border:none;border-radius:var(--radius-xs);color:var(--text);font-size:12px;cursor:pointer;transition:background .15s}.ri-multiselect-option:hover{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.ri-toolcheck{display:flex;flex-direction:column;gap:10px}.ri-toolcheck-group{border:1px solid var(--border);border-radius:var(--radius-xs);padding:6px 10px 8px;margin:0;background:color-mix(in srgb,var(--bg) 40%,transparent)}.ri-toolcheck-legend{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--text-secondary);padding:0 6px;font-weight:600}.ri-toolcheck-items{display:grid;grid-template-columns:1fr 1fr;gap:2px 8px}.ri-toolcheck-item{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text-secondary);cursor:pointer;padding:2px 0;transition:color .15s}.ri-toolcheck-item:has(input:checked){color:var(--text)}.ri-toolcheck-item input{margin:0;accent-color:var(--accent)}.ri-toolcheck-name{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px}.ri-panel-footer{padding:12px 16px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;flex-shrink:0}.rt-container{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0;overflow:hidden}.rt-bulk-bar{display:flex;align-items:center;gap:12px;padding:8px 14px;background:color-mix(in srgb,var(--accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--accent) 28%,transparent);border-radius:var(--radius-xs);font-size:12px}.rt-bulk-count{font-weight:600;color:var(--accent);margin-right:auto}.rt-bulk-select{padding:4px 8px;font-size:11px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text)}.rt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.rt-table{width:100%;border-collapse:separate;border-spacing:0;font-size:12px}.rt-table thead th{position:sticky;top:0;z-index:1;background:var(--bg-elevated);padding:10px 12px;text-align:left;font-weight:600;font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none}.rt-th-sortable{cursor:pointer;transition:color .15s}.rt-th-sortable:hover{color:var(--accent)}.rt-sort-caret{font-size:9px;color:var(--accent)}.rt-table tbody td{padding:8px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent);vertical-align:middle}.rt-row{cursor:pointer;transition:background .1s}.rt-row:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.rt-row-checked{background:color-mix(in srgb,var(--accent) 8%,transparent)}.rt-row-checked:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.rt-row-active{background:color-mix(in srgb,var(--accent) 14%,transparent)}.rt-row-active:hover{background:color-mix(in srgb,var(--accent) 18%,transparent)}.rt-cell-icon{width:18px;height:18px;opacity:.85;display:block}.rt-cell-name{font-weight:500;color:var(--text)}.rt-cell-id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--text-secondary);opacity:.85}.rt-cell-count{font-variant-numeric:tabular-nums;color:var(--text)}.rt-cell-select{padding:4px 8px;font-size:11px;background:transparent;border:1px solid transparent;border-radius:var(--radius-xs);color:var(--text);cursor:pointer;transition:border-color .15s,background .15s}.rt-cell-select:hover{border-color:var(--border);background:var(--bg-secondary)}.rt-cell-select:focus{outline:none;border-color:var(--accent);background:var(--bg-secondary)}.rt-cell-action{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-xs);color:var(--text-secondary);font-size:12px;cursor:pointer;opacity:0;transition:background .15s,color .15s,opacity .15s}.rt-row:hover .rt-cell-action{opacity:1}.rt-cell-action:hover{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}.rt-inline-input{width:100%;padding:4px 6px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--accent);border-radius:var(--radius-xs);color:var(--text);outline:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.rt-empty{text-align:center;padding:48px 16px;color:var(--text-secondary);font-size:13px}.se-container{display:flex;flex-direction:column;gap:10px;flex:1;min-height:480px;position:relative}.se-toolbar{display:flex;align-items:center;gap:10px;padding:0;flex-shrink:0;flex-wrap:wrap}.se-toolbar-actions{display:flex;gap:7px;margin-left:auto;align-items:center;justify-content:flex-end;flex-wrap:wrap;min-width:0}.se-toolbar-actions--readonly{color:var(--text-secondary)}.se-saved-org-control{display:inline-flex;align-items:center;gap:7px;min-width:0}.se-toolbar-label{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.se-readonly-pill{min-height:26px;display:inline-flex;align-items:center;padding:4px 10px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);border-radius:999px;background:color-mix(in srgb,var(--text-secondary) 7%,transparent);color:var(--text-secondary);font-size:11px;white-space:nowrap}.se-view-switcher{display:inline-flex;padding:2px;background:color-mix(in srgb,var(--bg-elevated) 72%,var(--bg) 28%);border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px}.se-view-btn{padding:5px 14px;font-size:12px;font-weight:500;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:background .15s,color .15s}.se-view-btn:hover{color:var(--text)}.se-view-btn.is-active{background:color-mix(in srgb,var(--accent) 18%,var(--bg-elevated) 82%);color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 16%,transparent)}.se-body{position:relative;height:clamp(430px,calc(100vh - 330px),660px);min-height:430px;background:color-mix(in srgb,var(--bg) 92%,#000 8%);border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;overflow:hidden}.se-body>div,.se-body>div>.react-flow,.se-body .react-flow{width:100%!important;height:100%!important;position:relative;z-index:2}.se-body:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 6%,transparent) 0%,transparent 18%),radial-gradient(ellipse at center,transparent 58%,color-mix(in srgb,var(--bg) 86%,#000000) 100%);border-radius:inherit}.se-loading{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--text-secondary);font-size:13px}.se-export-bar{display:flex;justify-content:flex-end;padding:0;margin-top:-2px}.oc-canvas-node.is-drop-target{animation:oc-drop-pulse .8s cubic-bezier(.4,0,.2,1) 1}@keyframes oc-drop-pulse{0%{box-shadow:0 0 0 2px var(--green),0 0 #0000}50%{box-shadow:0 0 0 2px var(--green),0 0 28px color-mix(in srgb,var(--green) 45%,transparent)}to{box-shadow:0 0 0 2px var(--green),0 0 18px color-mix(in srgb,var(--green) 25%,transparent)}}@media(prefers-reduced-motion:reduce){.react-flow__edge,.oc-canvas-node,.oc-canvas-node.is-drop-target,.ri-panel,.se-view-btn{animation:none!important;transition:none!important}}.sos-wrap{position:relative;display:inline-flex;align-items:center}.sos-pill{display:inline-flex;align-items:center;gap:8px;padding:5px 10px 5px 8px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);font-size:12px;font-weight:500;letter-spacing:0;cursor:pointer;font-family:inherit;transition:background .15s ease,border-color .15s ease;max-width:240px}.sos-pill:hover{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));background:var(--bg-elevated)}.sos-pill[data-open=true]{border-color:var(--accent);background:color-mix(in srgb,var(--bg-elevated) 88%,var(--accent) 8%)}.sos-pill-glyph{color:var(--accent);opacity:.9;flex-shrink:0}.sos-pill-name{font-weight:600;letter-spacing:0;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sos-pill-name--placeholder{opacity:.55;font-weight:500;font-style:italic}.sos-pill-dirty{width:6px;height:6px;border-radius:50%;background:var(--yellow);box-shadow:0 0 0 2px color-mix(in srgb,var(--yellow) 30%,transparent);flex-shrink:0}.sos-pill-caret{color:var(--text-secondary);transition:transform .15s ease;flex-shrink:0}.sos-pill[data-open=true] .sos-pill-caret{transform:rotate(180deg)}.se-toolbar-divider{width:1px;align-self:stretch;background:var(--border);margin:2px 4px}.sos-popover{position:absolute;top:calc(100% + 6px);right:0;width:min(420px,calc(100vw - 32px));min-width:min(320px,calc(100vw - 32px));max-width:calc(100vw - 32px);z-index:80;background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 28px #0000003d;overflow:hidden}.sos-search-row{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.sos-search-glyph{color:var(--text-secondary);opacity:.8;flex-shrink:0}.sos-search-input{flex:1;background:transparent;border:none;outline:none;color:var(--text);font-size:12px;font-family:inherit}.sos-search-input::placeholder{color:var(--text-secondary);opacity:.7}.sos-search-hint{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:10px;color:var(--text-secondary);opacity:.6;padding:1px 5px;border-radius:3px;background:color-mix(in srgb,var(--bg-secondary) 60%,transparent);flex-shrink:0;letter-spacing:.05em}.sos-list{max-height:280px;overflow-y:auto;padding:4px 0}.sos-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 12px 7px 16px;cursor:pointer;transition:background .1s ease}.sos-row:hover,.sos-row[data-highlighted=true]{background:color-mix(in srgb,var(--accent) 8%,transparent)}.sos-row--active:before{content:"";position:absolute;left:6px;top:8px;bottom:8px;width:2px;border-radius:1px;background:var(--accent)}.sos-row-meta{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.sos-row-name{font-size:12.5px;font-weight:600;color:var(--text);letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sos-row--active .sos-row-name{color:var(--accent)}.sos-row-stats{font-size:10.5px;color:var(--text-secondary);letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sos-row-delete{opacity:.5;transition:opacity .12s ease,background .12s ease,color .12s ease;background:transparent;border:none;padding:3px 9px;border-radius:4px;color:var(--text-secondary);font-size:10.5px;font-family:inherit;letter-spacing:.02em;cursor:pointer;flex-shrink:0}.sos-row:hover .sos-row-delete,.sos-row[data-highlighted=true] .sos-row-delete{opacity:1}.sos-row-delete:hover{background:color-mix(in srgb,var(--red) 22%,transparent);color:var(--red)}.sos-row-delete--confirm{opacity:1!important;background:color-mix(in srgb,var(--red) 22%,transparent);color:var(--red);font-weight:600}.sos-row-loading{font-size:10.5px;color:var(--accent);letter-spacing:.02em;padding:3px 9px;flex-shrink:0;opacity:.8}.sos-row-active-chip{font-size:10.5px;color:var(--green);border:1px solid color-mix(in srgb,var(--green) 28%,transparent);background:color-mix(in srgb,var(--green) 10%,transparent);border-radius:999px;padding:3px 9px;flex-shrink:0;letter-spacing:0}.sos-empty{padding:20px 12px;text-align:center;color:var(--text-secondary);font-size:11.5px;font-style:italic;opacity:.8}.sos-save-as{border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);padding:8px 10px}.sos-save-as-trigger{display:block;width:100%;padding:6px 8px;background:transparent;border:none;color:var(--accent);font-size:12px;font-weight:500;letter-spacing:0;cursor:pointer;border-radius:4px;font-family:inherit;text-align:left;transition:background .1s ease}.sos-save-as-trigger:hover{background:color-mix(in srgb,var(--accent) 10%,transparent)}.sos-save-as-form{display:flex;gap:6px;align-items:center;padding:2px 4px}.sos-save-as-input{flex:1;padding:5px 8px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:12px;font-family:inherit;outline:none}.sos-save-as-input:focus{border-color:var(--accent)}.sos-save-as-hint{margin-top:6px;padding:0 6px;font-size:10.5px;color:var(--text-secondary);letter-spacing:.01em}.sos-save-as-hint--warn{color:var(--yellow)}@media(max-width:900px){.se-toolbar{align-items:stretch}.se-toolbar-actions{width:100%;margin-left:0;justify-content:flex-start}.se-saved-org-control{flex:1 1 240px}.sos-wrap,.sos-pill{max-width:100%}.se-body{height:min(560px,68vh);min-height:380px}.ri-panel{inset:auto 0 0;width:auto;max-height:62%;border-left:none;border-top:1px solid var(--border);box-shadow:0 -8px 28px #00000040}}@media(max-width:640px){.se-container{min-height:0}.se-view-switcher,.se-view-btn{width:100%}.se-view-switcher{display:grid;grid-template-columns:1fr 1fr}.se-saved-org-control{flex-direction:column;align-items:stretch;gap:5px}.se-toolbar-divider{display:none}.se-toolbar-actions .btn,.se-toolbar-actions .oc-btn-primary,.se-toolbar-actions .oc-btn-ghost{justify-content:center}.se-body{height:440px;min-height:360px}.react-flow__minimap{display:none!important}.react-flow__controls{left:10px!important;bottom:10px!important}.sos-popover{right:auto;left:0}.sos-save-as-form{flex-wrap:wrap}.sos-save-as-input{flex-basis:100%}}.org-toast{position:fixed;bottom:20px;right:20px;z-index:200;padding:10px 16px;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:12.5px;font-weight:500;letter-spacing:0;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 8%,transparent),0 8px 28px #0000004d}.org-toast--ok{border-left:2px solid var(--green);padding-left:14px}.org-toast--error{border-left:2px solid var(--red);padding-left:14px}@media(prefers-reduced-motion:reduce){.sos-popover,.sos-pill-dirty,.org-toast{animation:none!important}.sos-pill-caret,.sos-pill,.sos-row,.sos-row-delete{transition:none!important}}.agent-status-bar{display:flex;align-items:center;gap:10px;padding:6px 16px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0;overflow:hidden}.agent-status-summary{font-size:10px;color:var(--text-secondary);font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;flex-shrink:0}.agent-status-chips{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;flex:1;min-width:0}.agent-status-chip{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:16px;border:1px solid var(--border);background:var(--surface);font-size:11px;white-space:nowrap;flex-shrink:0;transition:border-color .2s,background .2s}.agent-status-chip.status-idle{opacity:.6}.agent-status-chip.status-reflecting{border-color:var(--yellow);background:color-mix(in srgb,var(--yellow) 8%,var(--surface))}.agent-status-chip.status-tool_active{border-color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--surface))}.agent-status-avatar{width:20px;height:20px;border-radius:50%;background:var(--accent-soft);border:1.5px solid var(--accent);color:var(--accent);font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.agent-status-chip.status-reflecting .agent-status-avatar{border-color:var(--yellow);color:var(--yellow);background:color-mix(in srgb,var(--yellow) 15%,var(--surface))}.agent-status-chip.status-tool_active .agent-status-avatar{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 15%,var(--surface))}.agent-status-name{font-weight:500;color:var(--text)}.agent-status-detail{color:var(--text-secondary);max-width:120px;overflow:hidden;text-overflow:ellipsis}.agent-status-chip.status-reflecting .agent-status-detail{color:var(--yellow)}.agent-status-chip.status-tool_active .agent-status-detail{color:var(--green)}.agent-status-task{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--bg);color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace}.kanban-board{display:flex;gap:10px;padding:16px;height:100%;min-height:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.kanban-column{display:flex;flex-direction:column;min-width:290px;max-width:290px;background:var(--surface);border-radius:8px;border:1px solid var(--border);overflow:hidden;flex-shrink:0}.kanban-column-header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--bg-elevated)}.kanban-col-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.kanban-col-label{font-size:11px;font-weight:600;color:var(--text-secondary);flex:1;text-transform:uppercase;letter-spacing:.06em}.kanban-col-count{font-size:10px;color:var(--text-secondary);padding:1px 6px;border-radius:999px;background:var(--bg);border:1px solid var(--border);min-width:20px;text-align:center}.kanban-col-add{margin-left:auto;background:none;border:1px solid var(--border);border-radius:4px;color:var(--text-secondary);font-size:14px;width:22px;height:22px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;transition:background .15s,color .15s}.kanban-col-add:hover{background:var(--accent);color:#fff;border-color:var(--accent)}.kanban-quick-add{padding:4px 8px 8px}.kanban-quick-input{width:100%;padding:6px 8px;border:1px solid var(--accent);border-radius:6px;background:var(--bg);color:var(--text);font-size:.82rem;outline:none}.kanban-col-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:var(--border) transparent;min-height:60px}.kanban-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;transition:border-color .15s,box-shadow .15s;-webkit-user-select:none;user-select:none}.kanban-card:hover{border-color:var(--border-hover);box-shadow:0 2px 8px #0000001f}.kanban-card.is-dragging{box-shadow:0 8px 24px #00000047;border-color:var(--accent);opacity:.97}.kanban-card-id{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;letter-spacing:.02em;margin-bottom:5px;display:block}.kanban-card-title{font-size:13px;font-weight:500;color:var(--text);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0 0 6px}.kanban-card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:4px;gap:4px}.kanban-card-footer-left{display:flex;align-items:center;gap:6px}.kanban-priority{font-size:13px;flex-shrink:0;line-height:1}.kanban-assignee-badge{width:22px;height:22px;border-radius:50%;background:var(--accent-soft);border:1.5px solid var(--accent);color:var(--accent);font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;text-transform:uppercase}.kanban-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:32px 16px;color:var(--text-secondary);font-size:12px;opacity:.6}.kanban-empty-icon{font-size:28px;opacity:.4}.board-selector{border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.board-tabs{display:flex;gap:2px;padding:6px 16px;overflow-x:auto;scrollbar-width:none}.board-tab{padding:6px 14px;border:1px solid transparent;border-radius:6px 6px 0 0;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:all .12s;white-space:nowrap;display:flex;align-items:center;gap:6px}.board-tab:hover{background:var(--surface);color:var(--text)}.board-tab.active{background:var(--surface);color:var(--text);border-color:var(--border);border-bottom-color:var(--surface);font-weight:600}.board-tab-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.board-tab-editable{cursor:default}.board-tab-title{cursor:text;padding:2px 4px;border-radius:3px;transition:background .12s}.board-tab-title:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.board-tab-title-input{font:inherit;color:inherit;background:var(--bg);border:1px solid var(--accent);border-radius:3px;padding:2px 4px;outline:none;min-width:120px}.kanban-start-btn{width:22px;height:22px;border:none;border-radius:4px;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:10px;display:flex;align-items:center;justify-content:center;transition:all .12s;flex-shrink:0}.kanban-start-btn:hover{background:var(--accent-soft);color:var(--accent)}.kanban-card.is-active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 2px 8px #4f46e526}.kanban-card-runtime{display:flex;align-items:center;gap:6px;padding:3px 8px;margin-bottom:6px;border-radius:4px;font-size:10px;font-weight:500;background:var(--surface)}.kanban-card-runtime.status-reflecting{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 10%,var(--surface))}.kanban-card-runtime.status-tool_active{color:var(--green);background:color-mix(in srgb,var(--green) 10%,var(--surface))}.kanban-runtime-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0;animation:kanban-pulse 1.2s ease-in-out infinite}.kanban-runtime-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes kanban-pulse{0%,to{opacity:1}50%{opacity:.4}}.kanban-dep-badge{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}.kanban-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.kanban-cross-badge{font-size:10px;padding:1px 5px;border-radius:4px;background:var(--accent-soft);color:var(--accent);font-weight:600}.kanban-card-tags{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.kanban-tag{font-size:10px;padding:1px 6px;border-radius:4px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border);cursor:pointer}.kanban-assignee-group{display:flex;gap:0}.kanban-assignee-group .kanban-assignee-badge{margin-left:-4px}.kanban-assignee-group .kanban-assignee-badge:first-child{margin-left:0}.kanban-assignee-more{background:var(--surface);color:var(--text-secondary);border-color:var(--border);font-size:8px}.kanban-card-meta-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.kanban-meta-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;padding:1px 6px;border-radius:3px;border:1px solid var(--border);color:var(--text-secondary);white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.kanban-meta-icon{font-size:10px;line-height:1}.kanban-employee-badge{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.kanban-role-badge{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 8%,transparent)}.kanban-projection-badge{border-color:var(--yellow);color:var(--yellow);font-family:var(--font-mono, monospace);font-size:9px}.kanban-gate-badge{gap:2px}.kanban-gate-review{border-color:var(--yellow);color:var(--yellow)}.kanban-gate-approval{border-color:var(--green);color:var(--green)}.kanban-gate-human_confirmation{border-color:var(--red);color:var(--red)}.kanban-origin-badge{border-color:var(--text-secondary);color:var(--text-secondary);font-size:9px}@keyframes exec-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.exec-panel-backdrop{position:fixed;inset:0;background:#0000004d;z-index:199;animation:exec-backdrop-in .2s ease}@keyframes exec-backdrop-in{0%{opacity:0}to{opacity:1}}.exec-panel{position:fixed;top:0;right:0;width:560px;max-width:90vw;height:100vh;height:100dvh;background:var(--surface);border-left:1px solid var(--border);z-index:200;display:flex;flex-direction:column;animation:exec-slide-in .25s cubic-bezier(.32,.72,0,1);box-shadow:-4px 0 24px #0003}.exec-panel-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.exec-panel-title-row{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.exec-panel-title-row svg{flex-shrink:0;color:var(--accent)}.exec-panel-title{margin:0;font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.exec-badge{font-size:11px;font-weight:500;padding:2px 8px;border-radius:10px;white-space:nowrap;flex-shrink:0}.exec-badge-running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.exec-badge-idle{background:color-mix(in srgb,var(--yellow) 15%,transparent);color:var(--yellow)}.exec-badge-done{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.exec-badge-pending{background:color-mix(in srgb,var(--text-secondary) 15%,transparent);color:var(--text-secondary)}.exec-badge-failed{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}.exec-badge-cancelled{background:color-mix(in srgb,var(--text-secondary) 10%,transparent);color:var(--text-secondary)}.exec-panel-close{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s}.exec-panel-close:hover{background:var(--surface-hover, rgba(255, 255, 255, .06));color:var(--text-primary)}.exec-panel-identity{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.exec-panel-avatar{width:36px;height:36px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}.exec-panel-agent-info{display:flex;flex-direction:column;gap:1px;min-width:0}.exec-panel-agent-name{font-size:13px;font-weight:600;color:var(--text-primary)}.exec-panel-agent-role{font-size:11px;color:var(--green)}.exec-panel-employee{font-size:11px;color:var(--text-tertiary, var(--text-secondary));opacity:.8}.exec-panel-projection{font-size:11px;color:var(--text-secondary);text-transform:capitalize}.exec-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:12px 16px;display:flex;flex-direction:column;gap:16px}.exec-section{display:flex;flex-direction:column;gap:8px}.exec-section-header{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.exec-section-header svg{width:14px;height:14px;flex-shrink:0}.exec-section-content{font-size:13px;color:var(--text-primary);line-height:1.5}.exec-handoff-scroll{max-height:28vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.exec-handoff-scroll::-webkit-scrollbar{width:8px}.exec-handoff-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.exec-handoff-scroll::-webkit-scrollbar-track{background:transparent}.exec-activity-scroll{max-height:55vh;overflow-y:auto;overflow-x:hidden;padding-right:4px;scrollbar-width:thin;scrollbar-color:var(--border) transparent;border-radius:6px;background:color-mix(in srgb,var(--bg, var(--surface)) 30%,transparent)}.exec-activity-scroll::-webkit-scrollbar{width:8px}.exec-activity-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.exec-activity-scroll::-webkit-scrollbar-track{background:transparent}pre.exec-section-content{white-space:pre-wrap;word-break:break-word;background:var(--bg, var(--surface));border:1px solid var(--border);border-radius:6px;padding:10px 12px;font-size:12px;font-family:var(--mono, monospace);margin:0}.exec-section-empty{font-size:12px;color:var(--text-secondary);font-style:italic;padding:8px 0}.exec-artifact-list{margin:0;padding:0 0 0 18px;font-size:13px;color:var(--text-primary);line-height:1.6}.exec-artifact-item{word-break:break-word}.exec-panel-task-count{font-size:11px;padding:2px 8px;border-radius:10px;background:color-mix(in srgb,var(--text-secondary) 15%,transparent);color:var(--text-secondary);margin-left:6px;letter-spacing:.2px}.exec-task-card{border:1px solid color-mix(in srgb,var(--text-secondary) 20%,transparent);border-radius:8px;margin-bottom:10px;background:color-mix(in srgb,var(--bg-primary) 80%,transparent);overflow:hidden;flex-shrink:0;flex-basis:auto}.exec-task-card-focused{border-color:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 40%,transparent)}.exec-task-card-header{width:100%;display:flex;align-items:center;gap:10px;padding:10px 14px;background:transparent;border:none;cursor:pointer;text-align:left;color:var(--text-primary)}.exec-task-card-header:hover{background:color-mix(in srgb,var(--text-secondary) 5%,transparent)}.exec-task-card-index{font-family:var(--font-mono, monospace);font-size:11px;color:var(--text-secondary);min-width:22px}.exec-task-card-title{flex:1;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exec-task-card-time{font-size:11px;color:var(--text-secondary);white-space:nowrap}.exec-task-card-chevron{font-size:12px;color:var(--text-secondary);display:inline-block;transition:transform .12s ease}.exec-task-card-chevron.open{transform:rotate(90deg)}.exec-task-card-body{padding:4px 14px 14px;border-top:1px solid color-mix(in srgb,var(--text-secondary) 12%,transparent)}.exec-task-card-projection{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--text-secondary);margin:8px 0 12px}.exec-task-card-projection svg{width:13px;height:13px;color:var(--accent)}.exec-task-card-projection code{font-family:var(--font-mono, monospace);background:color-mix(in srgb,var(--text-secondary) 10%,transparent);padding:1px 6px;border-radius:4px}.exec-inline-tag{padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--yellow) 18%,transparent);color:var(--yellow);font-size:10px;font-weight:600;text-transform:uppercase}.exec-activity-sections{display:flex;flex-direction:column;gap:10px}.exec-activity-section{padding-top:8px;border-top:1px solid color-mix(in srgb,var(--text-secondary) 10%,transparent)}.exec-activity-section:first-child{padding-top:0;border-top:0}.exec-activity-section-head{display:flex;align-items:center;gap:6px;margin-bottom:6px;min-width:0;font-size:11px;color:var(--text-secondary)}.exec-activity-section-title{color:var(--text-primary);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exec-activity-section-role{flex:0 0 auto;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--text-secondary) 10%,transparent)}.exec-section-count{font-size:10px;color:var(--text-secondary);padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--text-secondary) 10%,transparent);margin-left:auto}.chat-fullpage{display:flex;flex:1;min-height:0;overflow:hidden;background:var(--bg)}.chat-page{display:flex;width:100%;height:100%;min-height:0}.session-sidebar{width:272px;min-width:240px;border-right:1px solid var(--border);background:var(--bg);display:flex;flex-direction:column;flex-shrink:0}.session-new-btn{margin:14px 14px 6px;padding:9px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:13px;font-weight:500;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .15s}.session-new-btn:hover{background:var(--surface-hover);border-color:var(--border-hover)}.session-nav-btn{margin:2px 14px;padding:8px 12px;border:none;border-radius:var(--radius-xs);background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .12s;text-align:left}.session-nav-btn:hover{background:var(--surface-hover);color:var(--text)}.session-nav-btn.active{background:var(--accent-soft);color:var(--accent);border-left:2px solid var(--accent);padding-left:10px}.session-activity-btn{margin-top:auto;margin-bottom:10px}.session-search-wrap{display:flex;align-items:center;gap:6px;margin:6px 14px 8px;padding:6px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid transparent;color:var(--text-secondary);transition:border-color .15s}.session-search-wrap:focus-within{border-color:var(--accent)}.session-search{flex:1;border:none;background:transparent;color:var(--text);font-size:12px;font-family:inherit;outline:none}.session-search::placeholder{color:var(--text-secondary)}.session-list{flex:1;overflow-y:auto;padding:0 0 4px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.session-list-virtualized{position:relative;contain:strict}.session-group{margin-bottom:2px}.session-group-label{padding:10px 16px 4px;font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}.session-tree-node{position:relative}.session-tree-primary{display:flex;align-items:stretch}.session-expand-btn{width:20px;flex-shrink:0;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin-left:4px;color:var(--text-secondary)}.session-expand-btn:before{content:"";display:block;width:0;height:0;border-left:4px solid currentColor;border-top:3px solid transparent;border-bottom:3px solid transparent;transition:transform .15s;transform:rotate(90deg)}.session-expand-btn.collapsed:before{transform:rotate(0)}.session-expand-btn:hover{color:var(--accent)}.session-children{position:relative;margin-left:12px;padding-left:8px;border-left:1px solid var(--border)}.session-child-count{border:none;background:transparent;color:var(--text-secondary);font-size:10px;font-weight:500;font-family:inherit;cursor:pointer;padding:2px 16px 2px 36px;text-align:left}.session-child-count:hover{color:var(--accent)}.session-unread-badge{flex-shrink:0;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:10px;font-weight:700;line-height:18px;text-align:center}.session-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 14px;border:none;border-radius:var(--radius-xs);margin:1px 8px;width:calc(100% - 16px);background:transparent;color:var(--text);font-size:13px;font-family:inherit;cursor:pointer;text-align:left;position:relative;transition:background .12s,border-color .12s;border-left:2px solid transparent}.session-item:hover{background:var(--surface-hover)}.session-item.active{background:var(--accent-soft);border-left-color:var(--accent)}.session-item.session-item-child{padding:5px 12px 5px 6px;border-left:none;font-size:12px;position:relative;margin:0;width:100%}.session-tree-line{position:absolute;left:-8px;top:0;bottom:50%;width:8px;border-left:1px solid var(--border);border-bottom:1px solid var(--border);border-bottom-left-radius:4px;pointer-events:none}.session-tree-line.last{bottom:50%}.session-agent-tag{display:inline-block;font-size:10px;font-weight:600;padding:0 5px;border-radius:3px;background:var(--accent-soft);color:var(--accent);margin-right:4px}.session-runtime-badge{display:inline-flex;align-items:center;color:var(--accent);margin-right:4px;flex-shrink:0}.session-runtime-badge svg{width:12px;height:12px}.session-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.session-dot.status-running,.session-dot.status-running-idle{background:var(--green);opacity:.35}.session-dot.status-tool-active{background:var(--green);box-shadow:0 0 4px color-mix(in srgb,var(--green) 55%,transparent)}.session-dot.status-reflecting{background:var(--yellow);box-shadow:0 0 4px color-mix(in srgb,var(--yellow) 55%,transparent)}.session-dot.status-idle{background:var(--accent);opacity:.7}.session-dot.status-done{background:var(--green)}.session-dot.status-pending{background:var(--text-secondary);opacity:.4}.session-dot.status-failed{background:var(--red)}.session-dot.status-cancelled{background:var(--text-secondary);opacity:.3}.session-dot.status-blocked{background:var(--yellow)}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.session-item-content{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.session-item-title{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}.session-item-meta{font-size:11px;color:var(--text-secondary)}.session-delete-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;transition:all .12s}.session-delete-btn:hover{color:var(--red);background:#f871711a}.session-empty{padding:32px 16px;text-align:center;color:var(--text-secondary);font-size:12px}.task-header-shell{display:flex;flex-direction:column;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.task-header-bar{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;gap:12px;min-height:48px;min-width:0}.task-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 auto;flex-wrap:wrap;row-gap:6px}.task-title{font-size:14px;font-weight:600;color:var(--text);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .12s;min-width:0;max-width:100%;flex:1 1 auto}.task-title:hover{color:var(--accent)}.task-title-input{font-size:14px;font-weight:600;color:var(--text);background:var(--surface);border:1px solid var(--accent);border-radius:var(--radius-xs);padding:2px 8px;font-family:inherit;outline:none;width:100%;max-width:400px}.task-status-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;background:var(--surface);font-size:11px;font-weight:500;color:var(--text-secondary);flex-shrink:0}.task-status-pill[data-status=running]{color:var(--green)}.task-status-pill[data-status=idle]{color:var(--accent)}.task-status-pill[data-status=failed]{color:var(--red)}.task-status-pill[data-status=blocked]{color:var(--yellow)}.task-status-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.task-status-pill[data-working=true] .task-status-dot{opacity:.9;box-shadow:0 0 5px color-mix(in srgb,currentColor 45%,transparent)}.task-tool-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:4px;background:#34d39914;color:var(--green);font-size:11px;flex-shrink:0}.task-tool-pill code{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:500;background:none;padding:0}.task-projection-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;background:#eab30814;color:var(--yellow);font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;flex-shrink:0}.task-role-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;background:#10b98114;color:var(--green);font-size:11px;flex-shrink:0}.task-employee-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:4px;background:#6366f114;color:var(--accent);font-size:11px;flex-shrink:0}.task-employee-icon{font-size:11px;line-height:1}.task-agent-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:4px;background:#0ea5e914;color:var(--blue);font-size:11px;flex-shrink:0}.task-agent-icon{font-size:11px;line-height:1}.task-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.task-header-avatars{display:flex}.task-header-avatar{width:24px;height:24px;border-radius:50%;background:var(--accent-soft);border:2px solid var(--bg);color:var(--accent);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-left:-4px}.task-header-avatar:first-child{margin-left:0}.task-header-time{font-size:11px;color:var(--text-secondary);opacity:.6}.task-header-metrics{display:flex;flex-wrap:wrap;gap:6px 10px;padding:0 20px 10px}.task-runtime-metric{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;padding:4px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 85%,transparent 15%);background:color-mix(in srgb,var(--surface) 86%,var(--bg-elevated) 14%)}.task-runtime-metric-label{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);flex-shrink:0}.task-runtime-metric-value{font-size:11px;color:var(--text);font-family:JetBrains Mono,SF Mono,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.task-stop-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--red);border-radius:var(--radius-xs);background:transparent;color:var(--red);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-stop-btn:hover{background:var(--red);color:#fff}.task-stop-btn:disabled{opacity:.45;cursor:not-allowed}.task-stop-btn:disabled:hover{background:transparent;color:var(--red)}.task-resume-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--accent);border-radius:var(--radius-xs);background:transparent;color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-resume-btn:hover{background:var(--accent);color:#fff}.task-done-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--green);border-radius:var(--radius-xs);background:transparent;color:var(--green);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-done-btn:hover{background:var(--green);color:#fff}.task-board-btn{padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius-xs);background:transparent;color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;transition:all .12s}.task-board-btn:hover{background:var(--surface-hover);color:var(--text)}@container ctxpanel (max-width: 720px){.task-header-bar{align-items:flex-start;flex-wrap:wrap;padding:10px 14px;gap:8px}.task-header-right{width:100%;justify-content:flex-end;flex-wrap:wrap}.task-header-metrics{padding:0 14px 10px}}@container ctxpanel (max-width: 560px){.task-projection-pill,.task-employee-pill,.task-tool-pill,.task-header-time,.task-header-avatars{display:none}.task-header-bar{padding:10px 12px}.task-runtime-metric-value{font-size:10.5px}}@container ctxpanel (max-width: 420px){.task-role-pill{display:none}.task-agent-pill .task-agent-icon{margin-right:0}.task-stop-btn span,.task-done-btn span,.task-resume-btn span{display:none}.task-stop-btn,.task-done-btn,.task-resume-btn{padding:5px 8px}.task-header-bar{padding:8px 10px}.task-header-metrics{padding:0 10px 8px;gap:6px 8px}}.chat-main{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--bg)}.chat-main-header{display:flex;align-items:center;gap:8px;padding:10px 20px;border-bottom:1px solid var(--border);flex-shrink:0;min-height:48px}.chat-main-icon{font-size:13px;font-weight:700;color:var(--text-secondary)}.chat-main-name{font-size:14px;font-weight:600;color:var(--text)}.chat-main-desc{margin-left:8px;font-size:11px;color:var(--text-secondary);font-weight:400}.msg-list-shell{flex:1;min-height:0;min-width:0;position:relative;display:flex;flex-direction:column;overflow:hidden}.msg-list{flex:1;min-height:0;overflow-y:auto;padding:16px 0 20px;scrollbar-width:thin;scrollbar-gutter:stable;scrollbar-color:var(--border) transparent;overscroll-behavior-y:contain;position:relative}.msg-list:focus{outline:none}.msg-list-following{overflow-anchor:none}.msg-list-browsing{overflow-anchor:auto}.msg-list-content{width:100%;min-height:100%}.msg-timeline-row{overflow-anchor:auto}.msg-list-following .msg-timeline-row{overflow-anchor:none}.msg-end-anchor{height:1px;flex-shrink:0;overflow-anchor:none}.msg-list-floating-actions{position:absolute;left:50%;bottom:12px;z-index:8;transform:translate(-50%);display:flex;align-items:center;gap:8px;max-width:calc(100% - 24px);pointer-events:none}.msg-list-float-btn{pointer-events:auto;min-width:0;max-width:min(320px,70vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid color-mix(in srgb,var(--border) 72%,var(--accent) 28%);border-radius:999px;padding:7px 12px;background:color-mix(in srgb,var(--bg-elevated) 92%,var(--accent) 8%);color:var(--text);box-shadow:0 6px 22px #00000047;font:inherit;font-size:11px;font-weight:600;cursor:pointer}.msg-list-float-btn:hover{border-color:var(--accent);background:color-mix(in srgb,var(--bg-elevated) 84%,var(--accent) 16%)}.msg-list-pending-btn{border-color:color-mix(in srgb,var(--yellow) 55%,var(--border));color:var(--yellow)}.msg-history-hint{display:flex;align-items:center;justify-content:center;gap:10px;padding:0 20px 14px;flex-wrap:wrap}.msg-history-load-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;padding:6px 12px;font-size:12px;font-family:inherit;cursor:pointer;transition:background .12s,border-color .12s}.msg-history-load-btn:hover{background:var(--surface-hover);border-color:var(--border-hover)}.msg-history-load-btn:disabled{opacity:.65;cursor:default}.msg-history-meta{font-size:11px;color:var(--text-secondary)}.msg-welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:56px 24px;color:var(--text-secondary);text-align:center;flex:1;min-height:0}.msg-welcome-icon{color:var(--accent);width:56px;height:56px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 30%,color-mix(in srgb,var(--accent) 18%,transparent 82%),transparent 70%),color-mix(in srgb,var(--accent-soft) 65%,var(--bg-elevated) 35%);border:1px solid color-mix(in srgb,var(--accent) 22%,transparent 78%);border-radius:50%;box-shadow:0 1px color-mix(in srgb,var(--accent) 22%,transparent 78%) inset,0 8px 24px -10px color-mix(in srgb,var(--accent) 60%,transparent 40%)}.msg-welcome-icon svg{width:26px;height:26px;opacity:.85}.msg-welcome-title{font-size:18px;font-weight:600;color:var(--text);margin-top:2px;letter-spacing:-.01em}.msg-welcome-hint{font-size:13px;line-height:1.55;max-width:320px;color:var(--text-secondary);opacity:.85}@container ctxpanel (max-width: 480px){.msg-welcome{padding:36px 20px;gap:10px}.msg-welcome-icon{width:48px;height:48px}.msg-welcome-icon svg{width:22px;height:22px}.msg-welcome-title{font-size:16px}.msg-welcome-hint{font-size:12px;line-height:1.5}}.msg-date-sep{display:flex;align-items:center;justify-content:center;padding:12px 0 8px}.msg-date-sep span{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;padding:2px 12px;background:var(--surface);border-radius:999px}.msg-system{display:flex;justify-content:center;padding:6px 20px}.msg-system span{font-size:11px;color:var(--text-secondary);background:var(--surface);padding:4px 12px;border-radius:999px}.work-item-divider{display:flex;align-items:center;gap:12px;padding:14px 24px;max-width:820px;margin:4px auto;animation:msg-enter .2s ease-out}.work-item-divider-line{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--border) 20%,var(--border) 80%,transparent)}.work-item-divider-label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--text-secondary);white-space:nowrap;text-transform:capitalize}.work-item-divider-icon{font-size:10px;line-height:1}.work-item-divider-action{font-weight:400;opacity:.7;font-size:10px}.work-item-divider-active .work-item-divider-icon{color:#f59e0b}.work-item-divider-active .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(245,158,11,.25) 20%,rgba(245,158,11,.25) 80%,transparent)}.work-item-divider-passed .work-item-divider-icon{color:#10b981}.work-item-divider-passed .work-item-divider-label{color:#10b981;opacity:.8}.work-item-divider-passed .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(16,185,129,.2) 20%,rgba(16,185,129,.2) 80%,transparent)}.work-item-divider-rejected .work-item-divider-icon{color:#f59e0b}.work-item-divider-rejected .work-item-divider-label{color:#f59e0b;opacity:.8}.work-item-divider-failed .work-item-divider-icon{color:var(--red)}.work-item-divider-failed .work-item-divider-label{color:var(--red);opacity:.8}.work-item-divider-failed .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(239,68,68,.15) 20%,rgba(239,68,68,.15) 80%,transparent)}.work-item-divider-waiting .work-item-divider-icon,.work-item-divider-waiting .work-item-divider-label{color:var(--text-secondary)}.msg-row{display:flex;gap:10px;padding:6px 24px;max-width:820px;width:100%;margin:0 auto;animation:msg-enter .2s ease-out;border-radius:var(--radius-xs);transition:background .1s}@keyframes msg-enter{0%{opacity:0}to{opacity:1}}.msg-row.user{justify-content:flex-end}.msg-row.deleted-sender{opacity:.5}.msg-row.grouped{padding-top:0;padding-bottom:0;animation:none}.msg-row-inline-progress,.msg-row-context,.msg-row-draft{align-items:flex-start}.msg-row.agent.grouped .msg-content-agent-card{border-top:none;border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-top:-1px}.msg-row.user.grouped{padding-top:2px}.msg-row.user.grouped .msg-content-user{border-radius:18px 4px 4px 18px}.msg-avatar-spacer{width:34px;flex-shrink:0}.msg-time-inline{font-size:10px;opacity:0;transition:opacity .15s}.msg-row:hover .msg-time-inline{opacity:.6}.msg-avatar{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:13px;font-weight:700;margin-top:1px}.agent-avatar{background:linear-gradient(135deg,var(--accent-soft),var(--surface));color:#fff;border:none;box-shadow:0 1px 3px #00000026;text-shadow:0 1px 2px rgba(0,0,0,.2)}.msg-avatar-context{background:linear-gradient(135deg,#3b82f62e,#0ea5e947);color:var(--accent)}.msg-avatar-draft{background:linear-gradient(135deg,#10b98138,#3b82f633);color:var(--green)}.msg-body{flex:1;min-width:0}.msg-inline-progress-body{width:100%}.msg-inline-progress-shell{width:100%;max-width:100%}.msg-body-user{max-width:70%}.msg-agent-header{display:flex;align-items:center;gap:8px;margin-bottom:3px}.msg-sender{font-size:12px;font-weight:600;color:var(--text)}.msg-sender.deleted{color:var(--text-secondary);text-decoration:line-through}.msg-time{font-size:10px;color:var(--text-secondary);opacity:.6}.msg-reply-indicator{font-size:11px;color:var(--text-secondary);padding:2px 0 4px 10px;border-left:2px solid var(--accent-soft);margin-bottom:4px}.msg-ops-row{display:flex;align-items:center;gap:8px;width:min(820px,100%);margin:2px auto;padding:5px clamp(12px,3vw,24px) 5px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;font-size:clamp(11px,.74rem,12.5px);color:var(--text-secondary);background:transparent;border:1px solid transparent;cursor:default;-webkit-user-select:none;user-select:none;transition:background .14s ease,border-color .14s ease,color .14s ease;min-width:0}.msg-ops-row[role=button]{cursor:pointer}.msg-ops-row:hover,.msg-ops-row.expanded{background:color-mix(in srgb,var(--surface) 60%,transparent 40%);border-color:color-mix(in srgb,var(--border) 60%,transparent 40%);color:var(--text)}.msg-ops-dot{width:5px;height:5px;border-radius:999px;flex-shrink:0;background:color-mix(in srgb,var(--text-secondary) 60%,transparent 40%)}.msg-ops-tone-info .msg-ops-dot{background:color-mix(in srgb,var(--accent) 80%,transparent 20%)}.msg-ops-tone-success .msg-ops-dot{background:var(--green)}.msg-ops-tone-warning .msg-ops-dot{background:var(--yellow)}.msg-ops-tone-danger .msg-ops-dot{background:var(--red)}.msg-ops-label{font-weight:600;letter-spacing:.01em;color:var(--text);flex-shrink:0}.msg-ops-tone-info .msg-ops-label{color:color-mix(in srgb,var(--accent) 88%,var(--text) 12%)}.msg-ops-tone-success .msg-ops-label{color:color-mix(in srgb,var(--green) 90%,var(--text) 10%)}.msg-ops-tone-warning .msg-ops-label{color:color-mix(in srgb,var(--yellow) 90%,var(--text) 10%)}.msg-ops-tone-danger .msg-ops-label{color:color-mix(in srgb,var(--red) 90%,var(--text) 10%)}.msg-ops-summary{color:var(--text-secondary);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-ops-time{font-size:10.5px;color:var(--text-secondary);opacity:.55;flex-shrink:0;font-variant-numeric:tabular-nums}.msg-ops-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--text-secondary);opacity:.6;flex-shrink:0;transition:transform .16s ease,opacity .16s ease;transform:rotate(0)}.msg-ops-row.expanded .msg-ops-chevron{opacity:1}.msg-ops-details{width:min(820px,100%);margin:0 auto 6px;padding:10px clamp(12px,3vw,24px) 10px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 80%,var(--surface) 20%);border:1px solid color-mix(in srgb,var(--border) 70%,transparent 30%)}.msg-ops-details-pre{margin:0;font-family:JetBrains Mono,SF Mono,monospace;font-size:10.5px;line-height:1.55;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;max-height:220px;overflow-y:auto}.msg-ops-bundle{display:flex;align-items:center;gap:8px;width:min(820px,100%);margin:3px auto;padding:6px clamp(12px,3vw,24px) 6px clamp(20px,8vw,56px);box-sizing:border-box;border:1px dashed color-mix(in srgb,var(--border) 70%,transparent);border-radius:8px;background:color-mix(in srgb,var(--surface) 42%,transparent);color:var(--text-secondary);font:inherit;font-size:12px;text-align:left;cursor:pointer;min-width:0;transition:background .14s ease,border-color .14s ease,color .14s ease}.msg-ops-bundle:hover,.msg-ops-bundle.expanded{background:color-mix(in srgb,var(--surface) 76%,transparent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border));color:var(--text)}.msg-ops-bundle-dot{width:6px;height:6px;border-radius:999px;flex:0 0 auto;background:color-mix(in srgb,var(--accent) 72%,transparent)}.msg-ops-bundle-title{flex:0 0 auto;color:var(--text);font-weight:650}.msg-ops-bundle-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-ops-bundle-time{flex:0 0 auto;font-size:10.5px;color:var(--text-secondary);opacity:.6;font-variant-numeric:tabular-nums}.msg-ops-bundle-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--text-secondary);flex:0 0 auto}.msg-ops-bundle-details{width:min(820px,100%);margin:0 auto 8px;padding:6px clamp(12px,3vw,24px) 8px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 80%,var(--surface) 20%);border:1px solid color-mix(in srgb,var(--border) 68%,transparent)}.msg-ops-bundle-event{display:flex;align-items:center;gap:8px;min-width:0;padding:4px 0;font-size:11.5px}.msg-content-agent-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:2px var(--radius-sm) var(--radius-sm) 2px;padding:10px 14px;transition:border-color .2s,box-shadow .2s,border-left-color .2s}.msg-attached-thinking{margin-bottom:10px}.msg-row.agent:hover .msg-content-agent-card{border-color:var(--border-hover);border-left-color:var(--accent);box-shadow:0 2px 8px #00000014}.msg-context-card{border-left-color:#3b82f6bf;background:linear-gradient(180deg,rgba(59,130,246,.06),var(--surface))}.msg-context-label,.msg-draft-label{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary);margin-bottom:6px}.msg-draft-card{border-style:dashed;border-left-color:var(--green);background:linear-gradient(180deg,rgba(16,185,129,.06),var(--surface))}.msg-row-project-update .msg-body{min-width:0}.msg-project-update-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:2px var(--radius-sm) var(--radius-sm) 2px;padding:11px 14px 10px;display:flex;flex-direction:column;gap:10px;min-width:0;overflow:hidden}.msg-project-update-report{border-left-color:var(--accent)}.msg-project-update-review{border-left-color:var(--green)}.msg-project-update-update{border-left-color:var(--yellow)}.msg-project-update-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.msg-project-update-label{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary)}.msg-project-update-chip{flex:0 1 auto;min-width:0;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 7px;border-radius:999px;background:color-mix(in srgb,var(--green) 14%,transparent);color:color-mix(in srgb,var(--green) 86%,var(--text) 14%);font-size:11px;font-weight:650}.msg-project-update-title{margin-top:8px;color:var(--text-secondary);font-size:12px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;word-break:break-word}.msg-project-update-summary{color:var(--text);line-height:1.58;font-size:14px;overflow-wrap:anywhere;word-break:break-word}.msg-project-update-summary p{margin:0 0 7px}.msg-project-update-summary p:last-child{margin-bottom:0}.msg-project-update-section{min-width:0}.msg-project-update-section-label{margin-bottom:5px;color:var(--text-secondary);font-size:11px;font-weight:750;letter-spacing:.04em;text-transform:uppercase}.msg-project-update-artifacts{display:grid;gap:6px}.msg-project-update-artifact{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 8px;align-items:center;min-width:0;padding:7px 9px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:6px;background:color-mix(in srgb,var(--bg-elevated) 46%,transparent)}.msg-project-update-artifact-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:12.5px;font-weight:650}.msg-project-update-artifact-status{color:var(--green);font-size:11px;font-weight:650;text-transform:lowercase}.msg-project-update-artifact-path{grid-column:1 / -1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);background:transparent;font-size:11px}.msg-project-update-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.msg-project-update-list{margin:0;padding-left:18px;color:var(--text-secondary);font-size:12.5px;line-height:1.48;min-width:0}.msg-project-update-list li{margin:0 0 4px;overflow-wrap:anywhere;word-break:break-word}@media(max-width:680px){.msg-project-update-grid{grid-template-columns:1fr}.msg-project-update-head{align-items:flex-start;flex-direction:column}.msg-project-update-chip{max-width:100%}}.msg-content-agent{font-size:14px;line-height:1.65;color:var(--text);word-wrap:break-word}.msg-content-agent h1,.msg-content-agent h2,.msg-content-agent h3,.msg-content-agent h4,.msg-content-agent h5,.msg-content-agent h6{margin:0 0 10px;line-height:1.35}.msg-content-agent p{margin:0 0 8px}.msg-content-agent p:last-child{margin-bottom:0}.msg-content-agent ul,.msg-content-agent ol{margin:4px 0 8px;padding-left:20px}.msg-content-agent li{margin-bottom:3px;line-height:1.55}.msg-content-agent pre{background:var(--bg);padding:10px 14px;border-radius:var(--radius-xs);border:1px solid var(--border);overflow-x:auto;font-size:12px;line-height:1.5;margin:8px 0}.msg-content-agent code{font-family:JetBrains Mono,SF Mono,Fira Code,monospace;font-size:12px;background:var(--accent-soft);padding:2px 6px;border-radius:4px;color:var(--accent)}.msg-content-agent pre code{background:transparent;padding:0;color:var(--text)}.msg-content-agent blockquote{margin:8px 0;padding:6px 14px;border-left:3px solid var(--accent-soft);color:var(--text-secondary);background:#0000000a;border-radius:0 var(--radius-xs) var(--radius-xs) 0}.msg-content-agent table{border-collapse:collapse;margin:8px 0;font-size:13px;width:100%}.msg-content-agent th,.msg-content-agent td{border:1px solid var(--border);padding:6px 12px;text-align:left}.msg-content-agent th{background:var(--bg);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}.msg-content-agent strong{color:var(--text)}.msg-content-agent a{color:var(--accent);text-decoration:none}.msg-content-agent a:hover{text-decoration:underline}.msg-content-agent hr{border:none;border-top:1px solid var(--border);margin:12px 0}.msg-content-user{background:var(--accent);color:#fff;padding:10px 16px;border-radius:18px 18px 4px;font-size:14px;line-height:1.5;word-wrap:break-word;white-space:pre-wrap;box-shadow:0 1px 3px #0000001a}.msg-content-user-markdown{color:inherit;font-size:inherit;line-height:inherit}.msg-content-user-markdown h1,.msg-content-user-markdown h2,.msg-content-user-markdown h3,.msg-content-user-markdown h4,.msg-content-user-markdown h5,.msg-content-user-markdown h6{margin:0 0 8px;line-height:1.35;color:inherit}.msg-content-user-markdown p{margin:0 0 8px}.msg-content-user-markdown p:last-child{margin-bottom:0}.msg-content-user-markdown ul,.msg-content-user-markdown ol{margin:4px 0 8px;padding-left:20px}.msg-content-user-markdown li{margin-bottom:3px;line-height:1.5}.msg-content-user-markdown strong{color:inherit}.msg-content-user-markdown a{color:inherit;text-decoration:underline}.msg-content-user-markdown code{background:#ffffff24;color:inherit;border-radius:4px;padding:.08em .35em;font-size:.92em}.msg-content-user-markdown pre{background:#00000029;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-xs);padding:10px 12px;margin:8px 0;overflow-x:auto}.msg-content-user-markdown pre code{background:transparent;border:none;padding:0}.msg-meta-user{display:flex;align-items:center;justify-content:flex-end;gap:6px;margin-top:4px;opacity:0;transition:opacity .15s}.msg-row.user:hover .msg-meta-user{opacity:1}.msg-card-actions{display:flex;gap:2px;margin-top:4px;padding-top:0;height:0;overflow:hidden;opacity:0;transition:opacity .15s,height .15s}.msg-row:hover .msg-card-actions{opacity:1;height:26px}.msg-action-btn{border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:11px;padding:3px 8px;border-radius:4px;display:flex;align-items:center;gap:4px;font-family:inherit;transition:all .12s}.msg-action-btn:hover{background:var(--surface);color:var(--text)}.agent-working-row{animation:msg-enter .2s ease-out}.agent-working-row .progress-block{border:1px dashed var(--border-hover);background:transparent}.ptl-block{display:flex;flex-direction:column;gap:0;animation:ptl-enter .2s ease-out}@keyframes ptl-enter{0%{opacity:0}to{opacity:1}}.ptl-live{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:6px;font-size:12px;font-weight:500}.ptl-live-think{background:var(--accent-soft);color:var(--accent)}.ptl-live-tool{background:#34d3990f;color:var(--green)}.ptl-live-icon{display:flex;align-items:center;flex-shrink:0}.ptl-live-think .ptl-live-icon{animation:ptl-spin 3s linear infinite}@keyframes ptl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptl-live-text{white-space:nowrap}.ptl-live-tool-name{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:600;background:#34d3991a;padding:2px 8px;border-radius:4px}.ptl-live-shimmer{flex:1;height:2px;min-width:32px;border-radius:1px;background:linear-gradient(90deg,transparent 0%,currentColor 50%,transparent 100%);opacity:.25;background-size:200% 100%;animation:ptl-shimmer 1.5s ease-in-out infinite}@keyframes ptl-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.ptl-live-elapsed{font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;color:var(--text-secondary);white-space:nowrap}.ptl-last-tool-summary{display:flex;align-items:baseline;gap:6px;padding:4px 12px;font-size:11px;color:var(--text-secondary);border-bottom:1px solid rgba(128,128,128,.08)}.ptl-last-tool-label{font-weight:600;white-space:nowrap;color:var(--green);font-size:10px;text-transform:uppercase;letter-spacing:.3px}.ptl-last-tool-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ptl-autonomy-card{border-left-color:var(--yellow)}.ptl-autonomy-detail{color:var(--text-secondary);font-size:11px;padding:4px 8px}.task-runtime-metric-approval{color:var(--yellow);font-weight:600}.ptl-completion{display:flex;align-items:center;gap:6px;padding:6px 12px;margin-top:4px;border-radius:6px;font-size:11px;font-weight:600}.ptl-completion-icon{font-size:13px;line-height:1}.ptl-completion-done{color:var(--green);background:#10b98114}.ptl-completion-failed{color:var(--red);background:#ef444414}.ptl-completion-cancelled{color:var(--text-secondary);background:#8080800f}.ptl-expand{display:flex;align-items:center;gap:4px;border:none;background:transparent;color:var(--text-secondary);font-size:11px;font-weight:500;font-family:inherit;cursor:pointer;padding:4px 12px;margin-bottom:2px;transition:color .12s}.ptl-expand:hover{color:var(--accent)}.ptl-timeline{display:flex;flex-direction:column;padding-left:2px}.ptl-entry{display:flex;gap:0;min-height:30px;animation:ptl-entry-in .18s ease-out}@keyframes ptl-entry-in{0%{opacity:0}to{opacity:1}}.ptl-connector{display:flex;flex-direction:column;align-items:center;width:26px;flex-shrink:0}.ptl-dot{width:22px;height:22px;border-radius:6px;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:border-color .2s,background .2s}.ptl-dot svg{width:12px;height:12px}.ptl-entry:hover .ptl-dot{border-color:currentColor;background:color-mix(in srgb,currentColor 6%,var(--surface))}.ptl-line{width:1px;flex:1;background:var(--border);min-height:8px}.ptl-entry-last .ptl-line{display:none}.ptl-content{flex:1;min-width:0;padding:2px 0 8px 8px}.ptl-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;min-height:22px}.ptl-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;flex-shrink:0}.ptl-tool-badge{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:600;background:#34d39914;color:var(--green);padding:1px 7px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.ptl-summary{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.ptl-tool-card{width:100%;min-width:0;background:color-mix(in srgb,var(--surface) 78%,#d9dde5 22%);border:1px solid var(--border);border-radius:10px;overflow:hidden}.ptl-tool-toggle{width:100%;border:none;background:transparent;padding:8px 10px;text-align:left}.ptl-tool-toggle.clickable{cursor:pointer}.ptl-tool-toggle.clickable:hover{background:color-mix(in srgb,var(--surface) 70%,#e7ebf2 30%)}.ptl-tool-chevron{margin-left:auto;color:var(--text-secondary);display:inline-flex;align-items:center}.ptl-tool-card-detail{border-top:1px solid var(--border);padding:9px 10px 10px;margin:0;font-size:11px;color:var(--text-secondary);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;overflow-x:auto;max-width:100%;font-family:JetBrains Mono,SF Mono,monospace;background:color-mix(in srgb,var(--surface) 86%,#f2f4f8 14%)}.ptl-thinking-detail{font-family:inherit;font-size:12px;line-height:1.6;color:var(--text);max-height:300px;overflow-y:auto}.ptl-time{font-size:10px;color:var(--text-secondary);opacity:.5;flex-shrink:0;white-space:nowrap}.ptl-detail{font-size:11px;color:var(--text-secondary);opacity:.7;margin-top:2px;padding-left:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:JetBrains Mono,SF Mono,monospace;max-width:400px}.ckpt-escalation{border-color:color-mix(in srgb,var(--yellow) 55%,var(--border) 45%)}.ckpt-icon-escalation{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 14%,transparent)}.ckpt-escalation-body{display:flex;flex-direction:column;gap:6px;margin-top:10px}.ckpt-escalation-line{font-size:12px;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word}.ckpt-escalation-actions{flex-wrap:wrap}.ckpt-escalation-hint{margin-top:10px;font-size:11px;color:var(--text-secondary)}.agent-working-row .ptl-block{border:1px dashed var(--border-hover);border-radius:var(--radius-sm);padding:10px 12px;background:transparent}.code-block-wrap{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;margin:8px 0}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:5px 12px;background:var(--surface);border-bottom:1px solid var(--border)}.code-block-lang{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.code-block-copy{border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:10px;font-family:inherit;display:flex;align-items:center;gap:4px;padding:2px 6px;border-radius:4px;transition:all .12s}.code-block-copy:hover{color:var(--text);background:var(--surface-hover)}.code-block-wrap pre{margin:0;border:none;border-radius:0;background:var(--bg)!important}.msg-composer{padding:4px 24px 16px;flex-shrink:0;max-width:820px;width:100%;margin:0 auto}.msg-composer .composer-input-area{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden;transition:border-color .2s,box-shadow .2s;box-shadow:0 2px 8px #0000000f}.msg-composer.focused .composer-input-area{border-color:var(--accent);box-shadow:0 2px 12px #00000014,0 0 0 3px var(--accent-glow)}.msg-composer .composer-input-area textarea{width:100%;padding:14px 16px 0;border:none;background:transparent;color:var(--text);font-size:14px;font-family:inherit;outline:none;resize:none;min-height:24px;max-height:200px;line-height:1.5}.msg-composer .composer-input-area textarea::placeholder{color:var(--text-secondary)}.composer-bottom{display:flex;align-items:center;gap:8px;padding:6px 8px 8px 16px}.composer-config-group{display:inline-flex;align-items:center;gap:4px;padding:4px 6px;border-radius:18px;border:1px solid color-mix(in srgb,var(--border) 78%,var(--accent-soft) 22%);background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 88%,white 12%),color-mix(in srgb,var(--surface) 86%,var(--bg-elevated) 14%));box-shadow:inset 0 1px #ffffff14,0 10px 20px #0f172a14;min-width:0;flex-shrink:0}.composer-config-divider{width:1px;height:24px;background:color-mix(in srgb,var(--border) 72%,transparent 28%);border-radius:999px;flex-shrink:0}.composer-mode-inline{display:inline-flex;align-items:center;gap:8px;min-width:0;flex-shrink:0;padding:0 4px}.composer-mode-inline-label{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap}.composer-mode-inline[data-kind=mode] .composer-mode-inline-label{color:color-mix(in srgb,var(--accent) 74%,var(--text-secondary) 26%)}.composer-mode-inline[data-kind=agent] .composer-mode-inline-label{color:color-mix(in srgb,var(--yellow) 78%,var(--text-secondary) 22%)}.composer-mode-inline[data-kind=org] .composer-mode-inline-label{color:color-mix(in srgb,var(--green) 74%,var(--text-secondary) 26%)}.composer-mode-select-wrap{position:relative;display:inline-flex;align-items:center}.composer-mode-select-wrap:after{content:"";position:absolute;right:11px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--text-secondary);border-bottom:1.5px solid var(--text-secondary);transform:translateY(-65%) rotate(45deg);pointer-events:none}.composer-mode-select{appearance:none;min-height:30px;max-width:210px;padding:5px 28px 5px 12px;border:1px solid transparent;border-radius:12px;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);color:var(--text);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s,transform .15s}.composer-mode-select:hover{border-color:color-mix(in srgb,var(--border-hover) 70%,var(--accent-soft) 30%);background:color-mix(in srgb,var(--surface-hover) 76%,var(--bg-elevated) 24%)}.composer-mode-select:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 52%,var(--border) 48%);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent-soft) 78%,transparent 22%)}.composer-mode-select:disabled{opacity:.5;cursor:default}.composer-mode-inline[data-kind=org] .composer-mode-select{max-width:260px}.composer-hint{font-size:10px;color:var(--text-secondary);opacity:.5;flex:1}.composer-mode{font-size:10px;font-weight:600;padding:6px 10px;border-radius:10px;background:color-mix(in srgb,var(--surface) 72%,var(--bg-elevated) 28%);color:var(--text);flex-shrink:0}.composer-mode[data-kind=mode]{color:var(--accent)}.composer-mode[data-kind=agent]{color:var(--yellow)}.composer-config-group[data-locked=true]{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 94%,transparent 6%),color-mix(in srgb,var(--surface) 92%,var(--bg-elevated) 8%));border-color:color-mix(in srgb,var(--border) 90%,transparent 10%);box-shadow:none}.composer-mode-chip{position:relative;display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent 22%);background:color-mix(in srgb,var(--surface) 60%,var(--bg-elevated) 40%);font-size:11px;font-weight:600;color:var(--text);white-space:nowrap;cursor:default;outline:none;transition:border-color .15s,background .15s}.composer-mode-chip:before{content:"";position:absolute;bottom:100%;left:-8px;right:-8px;height:12px;background:transparent;pointer-events:none}.composer-mode-chip:hover:before,.composer-mode-chip:focus-within:before{pointer-events:auto}.composer-mode-chip:hover,.composer-mode-chip:focus-visible{border-color:color-mix(in srgb,var(--border-hover) 78%,var(--accent-soft) 22%);background:color-mix(in srgb,var(--surface-hover) 70%,var(--bg-elevated) 30%)}.composer-mode-chip[data-kind=mode]{color:color-mix(in srgb,var(--accent) 92%,var(--text) 8%)}.composer-mode-chip[data-kind=agent]{color:color-mix(in srgb,var(--yellow) 88%,var(--text) 12%)}.composer-mode-chip-icon{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:6px;background:color-mix(in srgb,currentColor 14%,transparent 86%);color:currentColor;flex-shrink:0;opacity:.85}.composer-mode-chip-label{letter-spacing:.01em}.composer-mode-chip-popover{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%) translateY(4px);display:flex;flex-direction:column;gap:4px;min-width:220px;max-width:280px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);font-size:11px;font-weight:400;line-height:1.45;letter-spacing:0;text-align:left;white-space:normal;box-shadow:0 8px 24px #0f172a2e,0 2px 6px #0f172a14;opacity:0;pointer-events:none;visibility:hidden;transition:opacity .14s ease,transform .14s ease,visibility .14s ease;z-index:20}.composer-mode-chip-popover:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid var(--bg-elevated);filter:drop-shadow(0 1px 0 var(--border))}.composer-mode-chip:hover .composer-mode-chip-popover,.composer-mode-chip:focus-visible .composer-mode-chip-popover,.composer-mode-chip:focus-within .composer-mode-chip-popover{opacity:1;pointer-events:auto;visibility:visible;transform:translate(-50%) translateY(0)}.composer-mode-chip-popover-title{font-size:11px;font-weight:600;color:var(--text);letter-spacing:.01em}.composer-mode-chip-popover-body{font-size:11px;color:var(--text-secondary)}.composer-mode-chip-popover-body strong{color:var(--text);font-weight:600}.composer-mode-chip-popover-divider{height:1px;margin:4px -12px 2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--border) 80%,transparent 20%) 16%,color-mix(in srgb,var(--border) 80%,transparent 20%) 84%,transparent 100%)}.composer-mode-chip-popover-action-title{margin-top:2px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.composer-mode-chip-popover-actions{display:flex;flex-direction:column;gap:4px;margin:2px -4px -2px}.composer-mode-chip-popover-action{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:11px;text-align:left;cursor:pointer;transition:background .14s ease,border-color .14s ease,transform .14s ease}.composer-mode-chip-popover-action:hover,.composer-mode-chip-popover-action:focus-visible{background:color-mix(in srgb,var(--accent-soft) 35%,var(--surface) 65%);border-color:color-mix(in srgb,var(--accent) 36%,transparent 64%);outline:none}.composer-mode-chip-popover-action:active{transform:scale(.985)}.composer-mode-chip-popover-action-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);color:var(--accent);flex-shrink:0;transition:background .14s ease,color .14s ease}.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-icon,.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-icon{background:color-mix(in srgb,var(--accent) 18%,var(--surface) 82%);color:var(--accent)}.composer-mode-chip-popover-action-text{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.composer-mode-chip-popover-action-label{font-size:11.5px;font-weight:600;color:var(--text);line-height:1.25}.composer-mode-chip-popover-action-desc{font-size:10px;color:var(--text-secondary);line-height:1.3}.composer-mode-chip-popover-action-arrow{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--text-secondary);opacity:.6;transform:translate(-2px);transition:transform .16s ease,opacity .16s ease,color .16s ease;flex-shrink:0}.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-arrow,.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-arrow{opacity:1;color:var(--accent);transform:translate(0)}@container ctxpanel (max-width: 540px){.composer-mode-chip-popover{left:auto;right:0;transform:translateY(4px)}.composer-mode-chip-popover:after{left:auto;right:16px;transform:none}.composer-mode-chip:hover .composer-mode-chip-popover,.composer-mode-chip:focus-visible .composer-mode-chip-popover,.composer-mode-chip:focus-within .composer-mode-chip-popover{transform:translateY(0)}}.composer-send-btn{width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s}.composer-send-btn:disabled{opacity:.3;cursor:default}.composer-send-btn:not(:disabled):hover{filter:brightness(1.15);transform:scale(1.05)}@container ctxpanel (max-width: 540px){.composer-bottom{display:grid;grid-template-columns:36px minmax(0,1fr) 32px 32px;grid-template-areas:"attach hint context send" "config config config config";align-items:center;row-gap:8px;column-gap:8px}.composer-config-group{grid-area:config;width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;justify-content:stretch;padding:6px;border-radius:16px}.composer-mode-inline{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;min-width:0;padding:0}.composer-mode-select-wrap{width:100%;min-width:0}.composer-mode-select{max-width:none;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.composer-config-divider{height:28px}.composer-attach-btn{grid-area:attach}.composer-hint{grid-area:hint;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-context-ring{grid-area:context;justify-self:end}.composer-send-btn{grid-area:send;justify-self:end}}@media(max-width:760px){.composer-bottom{display:grid;grid-template-columns:36px minmax(0,1fr) 32px 32px;grid-template-areas:"attach hint context send" "config config config config";align-items:center;row-gap:8px;column-gap:8px}.composer-config-group{grid-area:config;width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;justify-content:stretch}.composer-mode-inline{display:grid;grid-template-columns:auto minmax(0,1fr);min-width:0}.composer-mode-select-wrap,.composer-mode-select{width:100%;min-width:0;max-width:none}.composer-attach-btn{grid-area:attach}.composer-hint{grid-area:hint;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-context-ring{grid-area:context;justify-self:end}.composer-send-btn{grid-area:send;justify-self:end}}@container ctxpanel (max-width: 430px){.msg-composer{padding-left:14px;padding-right:14px}.msg-composer .composer-input-area textarea{padding:13px 14px 2px}.composer-bottom{grid-template-columns:36px minmax(0,1fr) 32px;grid-template-areas:"attach hint send" "config config config"}.composer-context-ring{display:none}.composer-config-group{grid-template-columns:1fr;gap:6px;border-radius:14px}.composer-config-divider{display:none}.composer-mode-inline{grid-template-columns:minmax(68px,auto) minmax(0,1fr);gap:8px;width:100%}}@media(max-width:430px){.composer-bottom{grid-template-columns:36px minmax(0,1fr) 32px;grid-template-areas:"attach hint send" "config config config"}.composer-context-ring{display:none}.composer-config-group{grid-template-columns:1fr}.composer-config-divider{display:none}.composer-mode-inline{grid-template-columns:minmax(68px,auto) minmax(0,1fr);width:100%}}.composer-status{display:flex;align-items:center;gap:8px;padding:8px 16px;margin-bottom:6px;border-radius:10px;background:var(--surface);border:1px solid var(--border);font-size:12px;box-shadow:0 1px 4px #0000000a}.composer-status-indicator{width:7px;height:7px;border-radius:50%;background:var(--green);flex-shrink:0;box-shadow:0 0 6px #10b98166}.composer-status-text{flex:1;color:var(--text-secondary);font-weight:500;letter-spacing:.01em}.composer-stop-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border:1px solid var(--red);border-radius:var(--radius-xs);background:transparent;color:var(--red);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.composer-stop-btn:hover{background:var(--red);color:#fff}.composer-stop-btn:disabled{opacity:.45;cursor:not-allowed}.composer-stop-btn:disabled:hover{background:transparent;color:var(--red)}.msg-composer .composer-input-area textarea:disabled{cursor:not-allowed;opacity:.5}.msg-composer .composer-input-area textarea:disabled::placeholder{font-style:italic}.msg-composer.working .composer-input-area{border-color:var(--green);box-shadow:0 0 0 2px #34d39914}.chat-main.chat-main-split{flex:1}.child-sessions-container{flex:1;display:flex;flex-direction:column;overflow-y:auto;border-left:1px solid var(--border);min-width:300px;max-width:50%}.child-session-panel{display:flex;flex-direction:column;border-bottom:1px solid var(--border);min-height:200px;max-height:400px}.child-session-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px}.child-session-agent{font-weight:700;color:var(--accent)}.child-session-title{flex:1;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.child-session-status{font-size:10px;padding:2px 6px;border-radius:999px;background:var(--bg);border:1px solid var(--border)}.child-session-status.status-running{color:var(--yellow);border-color:var(--yellow)}.child-session-status.status-done{color:var(--green);border-color:var(--green)}.child-session-status.status-failed{color:var(--red);border-color:var(--red)}.child-session-messages{flex:1;overflow-y:auto;min-height:0}.awp{display:flex;flex-direction:column;border-left:1px solid var(--border);width:clamp(280px,30vw,420px);min-width:280px;min-height:0;background:var(--bg);overflow:hidden}.awp-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.awp-title{font-size:12px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px}.awp-count{font-weight:400;font-size:10px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:999px;border:1px solid var(--border)}.awp-controls{display:flex;align-items:center;gap:4px}.awp-filter{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border);cursor:pointer}.awp-filter:focus{outline:1px solid var(--accent)}.awp-search-toggle{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:2px;border-radius:4px;display:flex;align-items:center}.awp-search-toggle:hover,.awp-search-toggle.active{color:var(--accent);background:var(--bg)}.awp-search-toggle svg{width:14px;height:14px}.awp-search-bar{padding:4px 8px;border-bottom:1px solid var(--border);flex-shrink:0}.awp-search-input{width:100%;font-size:11px;padding:4px 8px;border-radius:4px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.awp-search-input:focus{outline:1px solid var(--accent);border-color:var(--accent)}.awp-list{flex:1 1 260px;min-height:180px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.awp-row{display:flex;align-items:center;gap:8px;width:100%;padding:6px 12px;border:none;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent);background:transparent;color:var(--text);cursor:pointer;text-align:left;font-size:11px;transition:background .12s}.awp-row:hover{background:var(--bg-elevated)}.awp-row-selected{background:color-mix(in srgb,var(--accent) 8%,transparent);border-left:2px solid var(--accent);padding-left:10px}.awp-row-active .awp-row-activity{color:var(--accent);font-weight:600}.awp-dot{width:6px;height:6px;border-radius:50%;background:var(--text-secondary);flex-shrink:0;opacity:.5}.awp-dot-active{background:var(--green);opacity:1;box-shadow:0 0 4px var(--green);animation:awp-pulse 2s ease-in-out infinite}@keyframes awp-pulse{0%,to{opacity:1}50%{opacity:.5}}.awp-row-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.awp-row-name{font-weight:600;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.awp-row-projection{font-size:9px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}.awp-row-activity{font-size:10px;color:var(--text-secondary);white-space:nowrap;max-width:100px;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}.awp-row-time{font-size:9px;color:var(--text-muted, var(--text-secondary));opacity:.6;white-space:nowrap;flex-shrink:0;min-width:20px;text-align:right}.awp-empty{padding:16px;text-align:center;font-size:11px;color:var(--text-secondary)}.awp-detail{flex:1;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.awp-detail-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.awp-detail-identity{display:flex;align-items:center;gap:8px;min-width:0}.awp-detail-avatar{width:28px;height:28px;border-radius:6px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.awp-detail-meta{display:flex;flex-direction:column;min-width:0}.awp-detail-name{font-size:12px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}.awp-detail-projection{font-size:10px;color:var(--accent);text-transform:capitalize}.awp-detail-role{font-size:10px;color:var(--green)}.awp-detail-employee{font-size:10px;color:var(--text-secondary)}.awp-detail-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}.awp-detail-expand,.awp-detail-close{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center}.awp-detail-expand:hover,.awp-detail-close:hover{color:var(--text);background:var(--bg)}.awp-detail-expand svg,.awp-detail-close svg{width:14px;height:14px}.awp-detail-body{flex:1;overflow-y:auto;padding:8px 12px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.awp-detail-section{margin-bottom:12px}.awp-detail-section-label{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.awp-detail-section-label svg{width:12px;height:12px}.awp-detail-handoff{font-size:11px;color:var(--text-secondary);max-height:220px;overflow-y:auto}.awp-detail-handoff-markdown{padding:2px 0}.awp-detail-empty{font-size:11px;color:var(--text-secondary);text-align:center;padding:12px}.awp-terminal-icon{width:16px;flex-shrink:0;font-size:11px;font-weight:700;text-align:center;line-height:1}.awp-terminal-done{color:var(--green)}.awp-terminal-failed{color:var(--red)}.awp-terminal-cancelled{color:var(--text-secondary);opacity:.6}.awp-row-terminal{opacity:.7}.awp-row-terminal:hover{opacity:.9}.awp-row-terminal .awp-row-activity{font-weight:500}.awp-row-terminal.awp-terminal-done .awp-row-activity{color:var(--green)}.awp-row-terminal.awp-terminal-failed .awp-row-activity{color:var(--red)}.awp-result-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin:8px 12px 12px;border-radius:8px;font-size:12px;font-weight:500}.awp-result-icon{font-size:14px;font-weight:700;line-height:1}.awp-result-done{background:#10b9811a;color:var(--green);border:1px solid rgba(16,185,129,.2)}.awp-result-failed{background:#ef44441a;color:var(--red);border:1px solid rgba(239,68,68,.2)}.awp-result-cancelled{background:#80808014;color:var(--text-secondary);border:1px solid var(--border)}.awp-detail-avatar.awp-terminal-done{border:2px solid var(--green)}.awp-detail-avatar.awp-terminal-failed{border:2px solid var(--red)}.awp-detail-avatar.awp-terminal-cancelled{border:2px solid var(--text-secondary);opacity:.6}.kanban-status-badge{font-size:10px;font-weight:600;display:inline-flex;align-items:center;margin-left:auto}@media(max-width:1024px){.session-sidebar{width:60px;min-width:60px}.session-new-btn span{display:none}.session-new-btn{justify-content:center;padding:10px}.session-search-wrap,.session-group-label,.session-item-content{display:none}.session-item{padding:10px;justify-content:center;margin:1px 4px;width:calc(100% - 8px);border-left:none}.session-item.active{border-left:none}.session-dot{width:10px;height:10px}.session-nav-btn span{display:none}.session-nav-btn{justify-content:center}.session-expand-btn,.session-children,.session-child-count{display:none}.session-tree-primary{justify-content:center}.session-delete-btn{display:none}}@media(max-width:700px){.chat-page{flex-direction:column}.session-sidebar{width:100%;max-height:52px;border-right:none;border-bottom:1px solid var(--border);flex-direction:row;overflow:hidden}.session-new-btn{margin:8px;padding:6px 12px}.session-search-wrap{display:none}.session-list{display:flex;overflow-x:auto;padding:4px 8px;gap:4px;flex-direction:row}.session-list.session-list-virtualized{display:block;overflow-x:hidden;overflow-y:auto;padding:4px 8px}.session-group{display:flex;gap:2px;margin-bottom:0}.session-group-label{display:none}.session-item{white-space:nowrap;padding:4px 10px;border-radius:999px;border:1px solid var(--border);flex-shrink:0;margin:0;width:auto}.session-item.active{border-color:var(--accent);background:var(--accent-soft);border-left:none}.session-item-meta,.session-nav-btn,.session-expand-btn,.session-children,.session-child-count,.session-item.session-item-child{display:none}.session-tree-primary{flex-shrink:0}.msg-row{padding:8px 16px}.msg-body-user{max-width:85%}.msg-composer{padding:0 12px 12px}.msg-composer .composer-input-area textarea{font-size:16px}}.ckpt-panel{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;animation:msg-enter .2s ease-out}.ckpt-recruitment{border-left:3px solid var(--accent)}.ckpt-staffing{border-left:3px solid var(--green)}.ckpt-reorg{border-left:3px solid var(--yellow)}.ckpt-user-input{border-left:3px solid var(--blue)}.ckpt-header{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--border)}.ckpt-icon{width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ckpt-icon-recruit{background:var(--accent-soft);color:var(--accent)}.ckpt-icon-staffing{background:#34d3991a;color:var(--green)}.ckpt-icon-reorg{background:#fbbf241a;color:var(--yellow)}.ckpt-icon-user-input{background:#3b82f61a;color:var(--blue)}.ckpt-title{font-size:13px;font-weight:600;color:var(--text);flex:1}.ckpt-badge{font-size:10px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary);flex-shrink:0}.ckpt-badge-profile{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.ckpt-badge-responded{color:var(--green);border-color:var(--green);background:#34d3990f}.ckpt-badge-scope{color:var(--yellow);border-color:var(--yellow);background:#fbbf240f}.ckpt-badge-proposed_hire{color:var(--accent);border-color:var(--accent)}.ckpt-badge-existing_staff{color:var(--green);border-color:var(--green)}.ckpt-badge-fallback_role_only{color:var(--text-secondary)}.ckpt-badge-direct_role_execution{color:var(--blue);border-color:var(--blue)}.ckpt-badge-employee{color:var(--green);border-color:var(--green)}.ckpt-badge-template{color:var(--accent);border-color:var(--accent)}.ckpt-badge-fallback{color:var(--text-secondary)}.ckpt-summary{padding:10px 14px;font-size:13px;line-height:1.55;color:var(--text);border-bottom:1px solid var(--border);background:var(--bg)}.ckpt-rationale{padding:6px 14px;font-size:12px;line-height:1.5;color:var(--text-secondary);font-style:italic}.ckpt-recruitment-reasons{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1px;background:var(--border);border-bottom:1px solid var(--border)}.ckpt-recruitment-reason{min-width:0;padding:10px 14px;background:var(--bg)}.ckpt-recruitment-reason .ckpt-rationale{padding:0}.ckpt-proposals{display:flex;flex-direction:column;gap:1px;background:var(--border)}.ckpt-proposal-card{padding:10px 14px;background:var(--bg)}.ckpt-proposal-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.ckpt-role-name{font-size:13px;font-weight:600;color:var(--text);font-family:JetBrains Mono,SF Mono,monospace}.ckpt-role-labels{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.ckpt-field-tag{font-size:10px;font-weight:500;padding:1px 6px;border-radius:3px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}.ckpt-candidate,.ckpt-employee{padding:8px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid var(--border);margin-top:4px}.ckpt-cand-name,.ckpt-emp-name{font-size:13px;font-weight:600;color:var(--text)}.ckpt-cand-meta{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}.ckpt-cand-category{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--accent)}.ckpt-domain-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:#34d39914;color:var(--green);font-weight:500}.ckpt-emp-row{display:flex;align-items:center;gap:8px}.ckpt-emp-id{font-size:11px;color:var(--text-secondary);font-family:JetBrains Mono,SF Mono,monospace}.ckpt-exp-bar-wrap{display:flex;align-items:center;gap:8px;margin-top:6px;height:16px;background:var(--bg);border-radius:8px;overflow:hidden;border:1px solid var(--border);position:relative}.ckpt-exp-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--green));border-radius:8px 0 0 8px;transition:width .5s ease-out;min-width:4px}.ckpt-exp-label{position:absolute;right:6px;font-size:9px;font-weight:700;color:var(--text)}.ckpt-agent-picker{display:flex;align-items:center;gap:10px;margin-top:10px}.ckpt-recruiter-agent{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 72%,var(--bg))}.ckpt-agent-label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:0;flex:0 0 auto}.ckpt-agent-select{min-width:180px;max-width:100%;padding:7px 10px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:12px;line-height:1.2}.ckpt-agent-select:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1px;background:var(--border)}.ckpt-staffing-card{min-width:0;padding:10px 14px;background:var(--bg)}.ckpt-staffing-selected{padding:8px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid var(--border);margin-bottom:8px}.ckpt-staffing-search{width:100%;padding:7px 10px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:12px;font-family:inherit;outline:none}.ckpt-staffing-search:focus{border-color:var(--accent)}.ckpt-staffing-search:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:6px;margin-top:8px}.ckpt-staffing-option{min-width:0;min-height:42px;padding:6px 8px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);font-family:inherit;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:3px;transition:border-color .12s,background .12s}.ckpt-staffing-option:hover:not(:disabled){border-color:var(--accent);background:var(--surface-hover)}.ckpt-staffing-option.active{border-color:var(--green);background:#34d39914}.ckpt-staffing-option:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-option-kind{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}.ckpt-staffing-option-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600}@media(max-width:640px){.ckpt-recruiter-agent,.ckpt-agent-picker{align-items:stretch;flex-direction:column;gap:6px}.ckpt-agent-select{width:100%;min-width:0}}.ckpt-reorg-badges{display:flex;gap:6px;padding:8px 14px;border-bottom:1px solid var(--border)}.ckpt-changes-section{padding:8px 14px;border-top:1px solid var(--border)}.ckpt-changes-title{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ckpt-change-row{display:flex;align-items:center;gap:6px;padding:3px 0;font-size:12px}.ckpt-change-action{font-size:10px;font-weight:600;padding:1px 6px;border-radius:3px;text-transform:uppercase}.ckpt-action-add{background:#34d3991a;color:var(--green)}.ckpt-action-remove{background:#f871711a;color:var(--red)}.ckpt-action-replace{background:#fbbf241a;color:var(--yellow)}.ckpt-action-update{background:var(--accent-soft);color:var(--accent)}.ckpt-change-id{font-family:JetBrains Mono,SF Mono,monospace;font-size:12px;font-weight:500;color:var(--text)}.ckpt-change-arrow{color:var(--text-secondary);font-size:12px}.ckpt-change-reason{color:var(--text-secondary);font-size:11px;margin-left:auto;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ckpt-impact{display:flex;gap:16px;padding:8px 14px;border-top:1px solid var(--border);font-size:11px;color:var(--text-secondary)}.ckpt-section,.ckpt-task-section{padding:10px 14px 0}.ckpt-section+.ckpt-section,.ckpt-task-section+.ckpt-task-section{border-top:1px solid rgba(148,163,184,.12);margin-top:10px}.ckpt-section-title,.ckpt-task-section-title{margin-bottom:8px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.ckpt-markdown{min-width:0;font-size:13px;line-height:1.58;color:var(--text)}.ckpt-markdown-muted{color:var(--text-secondary)}.ckpt-markdown>:first-child{margin-top:0}.ckpt-markdown>:last-child{margin-bottom:0}.ckpt-markdown p{margin:0 0 8px}.ckpt-markdown ul,.ckpt-markdown ol{margin:0 0 8px;padding-left:20px}.ckpt-markdown li+li{margin-top:4px}.ckpt-markdown code{font-size:12px;border-radius:4px;padding:1px 4px;background:var(--surface);border:1px solid var(--border)}.ckpt-markdown pre code{padding:0;border:0;background:transparent}.ckpt-task-prompt{padding:10px 14px;font-size:13px;line-height:1.55;color:var(--text);white-space:pre-wrap;background:var(--bg)}.ckpt-task-list{margin:0;padding-left:18px;color:var(--text)}.ckpt-task-list li+li{margin-top:6px}.ckpt-task-tags{display:flex;gap:6px;flex-wrap:wrap}.ckpt-task-note{padding:10px 14px 0;font-size:12px;line-height:1.5;color:var(--text-secondary)}.ckpt-choice-list{display:grid;gap:12px}.ckpt-choice-question{display:grid;gap:8px;min-width:0}.ckpt-question-header{font-size:13px;font-weight:700;color:var(--text)}.ckpt-choice-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.ckpt-choice-option{display:grid;grid-template-columns:28px 1fr;gap:8px;align-items:flex-start;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);color:var(--text);text-align:left;font:inherit;cursor:pointer}.ckpt-choice-option:hover{border-color:var(--accent);background:var(--surface-hover)}.ckpt-choice-option.is-selected{border-color:var(--accent);background:var(--accent-soft)}.ckpt-choice-letter{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:999px;background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);font-size:11px;font-weight:700}.ckpt-choice-option.is-selected .ckpt-choice-letter{background:var(--accent);border-color:var(--accent);color:#fff}.ckpt-choice-copy{display:grid;gap:3px;min-width:0}.ckpt-choice-label{font-size:12px;font-weight:700;color:var(--text)}.ckpt-choice-desc{font-size:12px;line-height:1.35;color:var(--text-secondary)}.ckpt-other-field{min-height:64px}.ckpt-runtime-details{margin:10px 14px 0;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary)}.ckpt-runtime-details summary{cursor:pointer;padding:8px 10px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.ckpt-runtime-body{display:grid;gap:5px;padding:0 10px 10px;font-size:12px;line-height:1.45}.ckpt-actions{display:flex;gap:8px;padding:10px 14px;border-top:1px solid var(--border);background:var(--surface)}.ckpt-actions-inline-feedback{align-items:stretch}.ckpt-btn{padding:6px 16px;border-radius:var(--radius-xs);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;border:1px solid transparent;transition:all .12s}.ckpt-btn:disabled{opacity:.4;cursor:default}.ckpt-btn-approve{background:var(--green);color:#fff;border-color:var(--green)}.ckpt-btn-approve:not(:disabled):hover{filter:brightness(1.1)}.ckpt-btn-deny{background:transparent;color:var(--red);border-color:var(--red)}.ckpt-btn-deny:hover{background:var(--red);color:#fff}.ckpt-btn-feedback{background:transparent;color:var(--accent);border-color:var(--accent)}.ckpt-btn-feedback:hover{background:var(--accent-soft)}.ckpt-btn-cancel{background:transparent;color:var(--text-secondary);border-color:var(--border)}.ckpt-btn-cancel:hover{background:var(--surface-hover)}.ckpt-feedback-area{flex:1;display:flex;flex-direction:column;gap:6px;padding:10px 14px;border-top:1px solid var(--border);background:var(--surface)}.ckpt-feedback-input{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);color:var(--text);font-size:12px;font-family:inherit;resize:vertical;outline:none;min-height:48px}.ckpt-feedback-input:focus{border-color:var(--accent)}.ckpt-feedback-inline-input{min-height:34px;flex:1;resize:vertical}.ckpt-feedback-btns{display:flex;gap:6px}@media(max-width:640px){.ckpt-actions-inline-feedback{flex-direction:column}}.wi-progress-card{width:100%;min-width:0;flex-shrink:0;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:10px}.wi-progress-header{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text-primary)}.wi-progress-header svg{color:var(--accent)}.wi-progress-pipeline{display:flex;align-items:center;gap:0;flex-wrap:wrap;row-gap:6px}.wi-projection-group{display:flex;align-items:center;gap:0}.wi-projection-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:500;border:1px solid var(--border);background:transparent;cursor:pointer;font-family:inherit;transition:background .12s,border-color .12s;white-space:nowrap}.wi-projection-chip:hover{background:var(--surface-hover, rgba(255, 255, 255, .04))}.wi-projection-label{max-width:120px;overflow:hidden;text-overflow:ellipsis}.wi-projection-icon{font-size:10px;line-height:1}.wi-projection-active{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.wi-projection-done{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 10%,transparent)}.wi-projection-failed{border-color:var(--red);color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent)}.wi-projection-waiting{border-color:var(--yellow);color:var(--yellow);background:color-mix(in srgb,var(--yellow) 10%,transparent)}.wi-projection-pending{color:var(--text-secondary)}@keyframes wf-pulse{0%,to{opacity:1}50%{opacity:.3}}.wi-projection-pulse{animation:wf-pulse 1.5s ease-in-out infinite}.wi-projection-connector{margin:0 4px;color:var(--text-tertiary, var(--text-secondary));font-size:12px;opacity:.6}.wi-progress-toggle{align-self:flex-start;margin-top:-2px}.wf-role-summaries{display:flex;flex-direction:column;gap:10px}.wf-role-summary{border:1px solid color-mix(in srgb,var(--border) 88%,transparent);border-radius:8px;background:color-mix(in srgb,var(--surface) 92%,transparent);padding:10px 11px;display:flex;flex-direction:column;gap:10px}.wf-role-summary-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.wf-role-summary-identity{min-width:0;display:flex;flex-direction:column;gap:6px}.wf-role-summary-meta{display:flex;flex-wrap:wrap;gap:6px 8px;font-size:11px;color:var(--text-secondary)}.wf-role-open{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:8px;padding:5px 9px;font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:border-color .12s,color .12s,background .12s;flex-shrink:0}.wf-role-open:hover{color:var(--text);border-color:var(--border-hover);background:var(--surface-hover)}.wf-role-summary-body{display:flex;flex-direction:column;gap:10px}.wf-role-summary-block{display:flex;flex-direction:column;gap:6px}.wf-role-summary-block-label{font-size:11px;font-weight:700;color:var(--text-secondary);text-transform:uppercase}.wf-role-summary-block-content{font-size:12px;line-height:1.55;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.wf-role-turns{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}.wf-role-turn{border-radius:6px;border:1px solid var(--border);background:var(--surface-muted, rgba(255, 255, 255, .03))}.wf-role-turn-button{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:6px 10px;background:transparent;border:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.wf-role-turn-button:hover{background:var(--surface-hover, rgba(255, 255, 255, .06))}.wf-role-turn-column{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--surface-muted, rgba(255, 255, 255, .06));color:var(--text-secondary);white-space:nowrap}.wf-role-turn-column-todo{background:color-mix(in srgb,var(--text-secondary) 18%,transparent);color:var(--text-secondary)}.wf-role-turn-column-in_progress{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.wf-role-turn-column-in_review{background:color-mix(in srgb,var(--yellow) 18%,transparent);color:var(--yellow)}.wf-role-turn-column-done{background:color-mix(in srgb,var(--green) 18%,transparent);color:var(--green)}.wf-role-turn-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--text-primary)}.wf-role-turn-time{font-size:11px;color:var(--text-secondary);flex-shrink:0}.wf-role-turn-active .wf-role-turn-title{font-weight:600}.wf-role-turn-failed .wf-role-turn-column{background:#ff64642e;color:#ff9696f2}.wf-role-turn-expander{border-style:dashed;background:transparent}.wf-role-turn-expander-button{width:100%;padding:6px 10px;background:transparent;border:none;color:var(--text-secondary);font:inherit;font-size:11px;cursor:pointer;text-align:center}.wf-role-turn-expander-button:hover{color:var(--text-primary);background:var(--surface-hover, rgba(255, 255, 255, .04))}.wf-event-row{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary);padding-top:4px;border-top:1px solid var(--border)}.wf-event-icon{display:flex;flex-shrink:0}.wf-event-icon svg{width:14px;height:14px}.wf-event-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-event-text strong{color:var(--text-primary);font-weight:600}.wf-event-time{flex-shrink:0;font-size:11px;opacity:.7}@media(max-width:640px){.wf-role-summary-head{flex-direction:column}.wf-role-open{width:fit-content}}.composer-attachments{display:flex;gap:10px;padding:10px 12px 6px;overflow-x:auto;scrollbar-width:thin}.attachment-chip{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 85%,transparent),color-mix(in srgb,var(--surface) 92%,transparent));border:1px solid var(--border);box-shadow:inset 0 1px #ffffff08;min-width:220px;max-width:min(320px,72vw);flex-shrink:0}.attachment-chip.error{border-color:color-mix(in srgb,var(--red) 55%,var(--border));background:color-mix(in srgb,var(--red) 10%,var(--bg-elevated))}.attachment-chip-remove{position:absolute;top:8px;right:8px;width:22px;height:22px;border-radius:50%;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);color:var(--text-secondary);border:none;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease;display:inline-flex;align-items:center;justify-content:center}.attachment-chip:hover .attachment-chip-remove,.attachment-chip-remove:focus-visible{opacity:1}.attachment-chip-remove:hover{background:color-mix(in srgb,var(--red) 16%,var(--bg-elevated));color:var(--red)}.attachment-thumb{width:52px;height:52px;border-radius:12px;object-fit:cover;cursor:pointer;border:1px solid color-mix(in srgb,var(--border) 70%,transparent);background:color-mix(in srgb,var(--bg-elevated) 80%,transparent)}.attachment-file-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);border:1px solid color-mix(in srgb,var(--border) 75%,transparent);color:var(--text);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.attachment-file-icon.tone-image{background:color-mix(in srgb,var(--green) 12%,var(--bg-elevated));color:var(--green)}.attachment-file-icon.tone-video{background:color-mix(in srgb,var(--accent) 16%,var(--bg-elevated));color:color-mix(in srgb,var(--accent) 70%,var(--text))}.attachment-file-icon.tone-pdf{background:color-mix(in srgb,var(--red) 12%,var(--bg-elevated));color:var(--red)}.attachment-file-icon.tone-office{background:color-mix(in srgb,var(--yellow) 14%,var(--bg-elevated));color:var(--yellow)}.attachment-file-icon.tone-data{background:color-mix(in srgb,var(--accent) 14%,var(--bg-elevated));color:var(--accent)}.attachment-file-icon.tone-text{background:color-mix(in srgb,var(--text-secondary) 16%,var(--bg-elevated));color:var(--text)}.attachment-file-icon.tone-code{background:color-mix(in srgb,var(--accent) 12%,var(--bg-elevated));color:color-mix(in srgb,var(--accent) 40%,var(--text))}.attachment-chip-info{display:flex;flex-direction:column;min-width:0;gap:4px}.attachment-chip-name{font-size:12px;font-weight:600;color:var(--text);line-height:1.35;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.attachment-chip-size{font-size:11px;color:var(--text-secondary)}.attachment-chip.error .attachment-chip-size{color:var(--red)}.attachment-progress-ring{position:relative;width:32px;height:32px;flex-shrink:0}.attachment-progress-ring svg{width:32px;height:32px;transform:rotate(-90deg)}.attachment-progress-track,.attachment-progress-value{fill:none;stroke-width:2.5}.attachment-progress-track{stroke:color-mix(in srgb,var(--border) 85%,transparent)}.attachment-progress-value{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .2s ease}.attachment-progress-ring.ready .attachment-progress-value{stroke:var(--green)}.attachment-progress-ring.error .attachment-progress-value{stroke:var(--red)}.attachment-progress-center{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:var(--text)}.attachment-progress-ring.ready .attachment-progress-center{color:var(--green)}.attachment-progress-ring.error .attachment-progress-center{color:var(--red)}.attachment-progress-center svg{width:13px;height:13px;transform:none}.composer-attach-btn{background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);border:1px solid var(--border);width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;border-radius:10px;color:var(--text-secondary);transition:border-color .15s ease,color .15s ease,background .15s ease}.composer-attach-btn:hover:not(:disabled){color:var(--text);border-color:var(--border-hover);background:color-mix(in srgb,var(--surface-hover) 88%,transparent)}.msg-attachments{margin-top:10px}.msg-attachment-grid{display:grid;gap:8px}.msg-attachment-grid.cols-2{grid-template-columns:1fr 1fr}.msg-attachment-image{max-width:320px;border-radius:12px;cursor:pointer;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);transition:opacity .15s ease,transform .15s ease}.msg-attachment-video{width:100%;max-width:320px;border-radius:12px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);background:color-mix(in srgb,var(--bg-elevated) 88%,transparent)}.msg-attachment-image:hover{opacity:.92;transform:translateY(-1px)}.msg-attachment-files{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,max-content));gap:8px;margin-top:8px}.msg-attachment-file-chip{display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--surface) 94%,transparent);border:1px solid color-mix(in srgb,var(--border) 85%,transparent);font-size:12px;text-decoration:none;color:var(--text);transition:background .15s ease,border-color .15s ease,transform .15s ease}.msg-attachment-file-chip:hover{background:color-mix(in srgb,var(--surface-hover) 96%,transparent);border-color:var(--border-hover);transform:translateY(-1px)}.msg-attachment-file-size{color:var(--text-secondary);font-size:11px;margin-left:4px}@media(max-width:640px){.attachment-chip{min-width:min(250px,82vw);max-width:82vw}.msg-attachment-files{grid-template-columns:1fr}}.lightbox-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:2000;cursor:zoom-out}.lightbox-img{max-width:90vw;max-height:90vh;border-radius:8px}.session-confirm-delete{display:flex;gap:4px;flex-shrink:0;margin-left:auto;animation:msgListFadeIn .15s ease-out}.session-confirm-yes{font-size:11px;padding:1px 8px;border-radius:4px;border:none;background:#e53935;color:#fff;cursor:pointer;font-weight:600}.session-confirm-yes:hover{background:#c62828}.session-confirm-no{font-size:11px;padding:1px 6px;border-radius:4px;border:1px solid var(--border, #ddd);background:transparent;color:var(--text-secondary);cursor:pointer}.session-confirm-no:hover{background:var(--surface-hover, #f0f0f0)}@keyframes msgListFadeIn{0%{opacity:0}to{opacity:1}}.msg-list{animation:msgListFadeIn .2s ease-out}.msg-collapse-toggle{display:inline-flex;align-items:center;gap:4px;margin-top:8px;padding:4px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.msg-collapse-toggle:hover{background:var(--accent-soft);border-color:var(--accent)}.code-block-omitted{display:block;padding:6px 0;color:var(--accent);font-style:italic;font-weight:500;cursor:pointer;opacity:.85;transition:opacity .12s;-webkit-user-select:none;user-select:none}.code-block-omitted:hover{opacity:1;text-decoration:underline}.code-block-collapse-btn{display:block;width:100%;padding:4px 12px;border:none;border-top:1px solid var(--border);background:var(--surface);color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;text-align:center;transition:background .12s}.code-block-collapse-btn:hover{background:var(--accent-soft)}.composer-context-ring{position:relative;width:28px;height:28px;flex-shrink:0;cursor:default}.composer-context-ring svg{width:28px;height:28px;transform:rotate(-90deg)}.composer-context-ring-track,.composer-context-ring-value{fill:none;stroke-width:2.5}.composer-context-ring-track{stroke:color-mix(in srgb,var(--border) 85%,transparent)}.composer-context-ring-value{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .4s ease,stroke .4s ease}.composer-context-ring.low .composer-context-ring-value{stroke:var(--yellow)}.composer-context-ring.critical .composer-context-ring-value{stroke:var(--red)}.composer-context-ring-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:7px;font-weight:700;color:var(--text-secondary);line-height:1;pointer-events:none}.composer-context-ring.low .composer-context-ring-label{color:var(--yellow)}.composer-context-ring.critical .composer-context-ring-label{color:var(--red)}.composer-send-btn:focus-visible,.composer-attach-btn:focus-visible,.composer-stop-btn:focus-visible,.msg-action-btn:focus-visible,.session-item:focus-visible,.awp-row:focus-visible,.awp-filter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wf-role-turn-tag{display:inline-block;margin-right:6px;padding:1px 6px;border-radius:3px;background:color-mix(in srgb,var(--yellow) 22%,transparent);color:var(--yellow);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.wf-role-turn-chevron{display:inline-flex;align-items:center;color:var(--text-secondary);margin-left:4px}.wf-role-turn-expanded{border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.wf-role-turn-activity{padding:8px 10px 10px;border-top:1px dashed var(--border);background:var(--surface, rgba(255, 255, 255, .02));display:flex;flex-direction:column;gap:6px}.wf-role-turn-activity-sections{display:flex;flex-direction:column;gap:8px}.wf-role-turn-activity-section{padding:6px 0 0;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.wf-role-turn-activity-section:first-child{padding-top:0;border-top:0}.wf-role-turn-activity-section-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;min-width:0;font-size:11px;color:var(--text-secondary)}.wf-role-turn-activity-section-title{color:var(--text-primary);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-role-turn-activity-section-role,.wf-role-turn-activity-section-count{flex:0 0 auto;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--border) 55%,transparent)}.wf-role-turn-empty-activity{color:var(--text-secondary);font-size:12px;padding:4px 0}.wf-role-turn-open-session{align-self:flex-start;padding:4px 10px;border-radius:4px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);font-size:11px;cursor:pointer}.wf-role-turn-open-session:hover{background:var(--surface-hover, rgba(255, 255, 255, .06));color:var(--text-primary)}.awp-dot-active{background:var(--accent);opacity:1;box-shadow:0 0 4px var(--accent);animation:awp-pulse 2s ease-in-out infinite}.awp-dot-waiting{background:var(--yellow);opacity:1}.awp-dot-pending{background:var(--text-secondary);opacity:.6}.awp-dot-done{background:var(--green);opacity:1}.awp-dot-failed{background:var(--red);opacity:1}.awp-row-terminal.awp-terminal-active .awp-row-activity{color:var(--accent)}.awp-row-terminal.awp-terminal-waiting .awp-row-activity{color:var(--yellow)}.workspace-page{display:flex;flex:1;min-height:0;overflow:hidden}.workspace-board{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden}.project-cockpit{display:flex;flex-direction:column;gap:10px;padding:10px 12px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 92%,var(--surface) 8%);flex-shrink:0}.project-cockpit.embedded{flex:1;padding:12px;border-bottom:none;background:transparent;overflow:auto}.project-cockpit.embedded .project-cockpit-grid--team,.project-cockpit.embedded .project-cockpit-team-grid{grid-template-columns:minmax(0,1fr)}.project-cockpit.embedded .project-cockpit-team-head{flex-direction:column;align-items:flex-start}.project-cockpit.embedded .project-cockpit-team-status{align-self:flex-start}.project-cockpit.embedded .project-cockpit-seat-row{grid-template-columns:minmax(0,1fr);align-items:flex-start}.project-cockpit.embedded .project-cockpit-metrics span,.project-cockpit.embedded .project-cockpit-summary span,.project-cockpit.embedded .project-cockpit-team-meta span,.project-cockpit.embedded .project-cockpit-seat-role,.project-cockpit.embedded .project-cockpit-seat-id{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}.project-cockpit-overview{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}.project-cockpit-title{display:flex;align-items:center;min-width:0;gap:8px;flex-wrap:wrap}.project-cockpit-label{font-size:11px;color:var(--text-secondary);text-transform:uppercase}.project-cockpit-title strong{font-size:14px;line-height:1.3;overflow-wrap:anywhere}.project-cockpit-stop-btn{margin-left:auto;padding:3px 12px;font-size:12px;font-weight:600;font-family:inherit;border:1px solid var(--red);border-radius:6px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);cursor:pointer;transition:background .12s}.project-cockpit-stop-btn:hover{background:color-mix(in srgb,var(--red) 20%,transparent)}.project-cockpit-metrics{display:flex;flex-wrap:wrap;gap:6px}.project-cockpit-metrics span,.project-cockpit-summary span{border:1px solid var(--border);border-radius:8px;padding:4px 8px;font-size:12px;background:var(--surface)}.project-cockpit-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;min-width:0}.project-cockpit-grid--team{grid-template-columns:minmax(240px,.8fr) minmax(0,1.6fr)}.project-cockpit-panel{display:flex;flex-direction:column;min-width:0;min-height:180px;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.project-cockpit-panel--wide{min-width:0}.project-cockpit-panel header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border)}.project-cockpit-panel h3{margin:0;font-size:13px}.project-cockpit-summary{display:flex;flex-direction:column;gap:8px;padding:10px 12px;min-width:0;overflow:auto}.project-cockpit-inline-text{margin:0;font-size:12px;line-height:1.45;overflow-wrap:anywhere}.project-cockpit-team-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;padding:10px 12px;overflow:auto}.project-cockpit-team-card{display:flex;flex-direction:column;gap:10px;min-width:0;border:1px solid var(--border);border-radius:8px;background:var(--bg-elevated);padding:10px}.project-cockpit-team-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.project-cockpit-team-title{min-width:0;display:flex;flex-direction:column;gap:4px}.project-cockpit-team-title strong{font-size:13px;line-height:1.3;overflow-wrap:anywhere}.project-cockpit-team-title span{font-size:11px;color:var(--text-secondary);overflow-wrap:anywhere}.project-cockpit-team-status,.project-cockpit-seat-status{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:3px 8px;font-size:10px;font-weight:700;text-transform:uppercase;border:1px solid var(--border);flex-shrink:0}.project-cockpit-team-meta{display:flex;flex-wrap:wrap;gap:6px}.project-cockpit-team-meta span{border:1px solid var(--border);border-radius:999px;padding:3px 8px;font-size:11px;color:var(--text-secondary);background:var(--surface)}.project-cockpit-seat-list{display:flex;flex-direction:column;gap:8px}.project-cockpit-seat-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:8px;align-items:center;min-width:0;border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--surface)}.project-cockpit-seat-role,.project-cockpit-seat-id{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.project-cockpit-seat-id{color:var(--text-secondary)}.project-cockpit-team-status.status-running,.project-cockpit-seat-status.status-running,.project-cockpit-team-status.status-active,.project-cockpit-seat-status.status-active,.project-cockpit-team-status.status-ready,.project-cockpit-seat-status.status-ready{color:var(--green);border-color:color-mix(in srgb,var(--green) 55%,var(--border) 45%);background:color-mix(in srgb,var(--green) 10%,transparent)}.project-cockpit-team-status.status-blocked,.project-cockpit-seat-status.status-blocked,.project-cockpit-team-status.status-awaiting-review,.project-cockpit-seat-status.status-awaiting-review,.project-cockpit-team-status.status-awaiting-peer,.project-cockpit-seat-status.status-awaiting-peer,.project-cockpit-team-status.status-awaiting_review,.project-cockpit-seat-status.status-awaiting_review,.project-cockpit-team-status.status-awaiting-manager-review,.project-cockpit-seat-status.status-awaiting-manager-review,.project-cockpit-team-status.status-awaiting-human-review,.project-cockpit-seat-status.status-awaiting-human-review{color:var(--yellow);border-color:color-mix(in srgb,var(--yellow) 55%,var(--border) 45%);background:color-mix(in srgb,var(--yellow) 10%,transparent)}.project-cockpit-team-status.status-failed,.project-cockpit-seat-status.status-failed,.project-cockpit-team-status.status-error,.project-cockpit-seat-status.status-error{color:var(--red);border-color:color-mix(in srgb,var(--red) 55%,var(--border) 45%);background:color-mix(in srgb,var(--red) 10%,transparent)}.project-cockpit-team-status.status-idle,.project-cockpit-seat-status.status-idle,.project-cockpit-team-status.status-cold,.project-cockpit-seat-status.status-cold,.project-cockpit-team-status.status-paused,.project-cockpit-seat-status.status-paused,.project-cockpit-team-status.status-done,.project-cockpit-seat-status.status-done{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent) 10%,transparent)}@media(max-width:1280px){.project-cockpit-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.project-cockpit-grid--team{grid-template-columns:minmax(0,1fr)}}@media(max-width:780px){.project-cockpit-grid,.project-cockpit-seat-row{grid-template-columns:minmax(0,1fr)}}.workspace-page.panel-maximized .workspace-board{display:none}.ctx-panel{display:flex;flex-direction:column;min-width:0;border-left:1px solid var(--border);background:var(--bg-elevated);overflow:hidden;transition:width .15s ease;position:relative;container-type:inline-size;container-name:ctxpanel}.ctx-panel.collapsed{width:0!important;border-left:none;overflow:hidden}.ctx-panel.maximized{flex:1}.ctx-resize-handle{width:4px;cursor:col-resize;background:transparent;flex-shrink:0;transition:background .15s}.ctx-resize-handle:hover,.ctx-resize-handle.active{background:var(--accent);opacity:.5}.ctx-collapse-strip{width:24px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;border-left:1px solid var(--border);opacity:.5;transition:opacity .15s}.ctx-collapse-strip:hover{opacity:1}.ctx-header{display:flex;align-items:center;padding:0 8px;border-bottom:1px solid var(--border);height:36px;gap:2px;flex-shrink:0;min-width:0}.ctx-header-tabs{display:flex;align-items:center;gap:2px;min-width:0;flex:1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;-webkit-mask-image:linear-gradient(to right,transparent 0,black 6px,black calc(100% - 14px),transparent 100%);mask-image:linear-gradient(to right,transparent 0,black 6px,black calc(100% - 14px),transparent 100%)}.ctx-header-tabs::-webkit-scrollbar{display:none}.ctx-tab{background:none;border:none;color:var(--text-secondary);font-size:12px;padding:6px 10px;cursor:pointer;border-radius:var(--radius-xs);transition:color .15s,background .15s;flex-shrink:0;white-space:nowrap;font-family:inherit}.ctx-tab:hover{color:var(--text);background:var(--surface-hover)}.ctx-tab.active{color:var(--text);background:var(--accent-soft)}.ctx-header-actions{margin-left:auto;display:flex;gap:4px;padding-left:6px;flex-shrink:0}.ctx-header-actions button{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:var(--radius-xs);display:flex;align-items:center}.ctx-header-actions button:hover{color:var(--text);background:var(--surface-hover)}.ctx-header-title{font-size:13px;font-weight:600;padding:0 4px}.ctx-session-strip{display:flex;align-items:center;gap:8px;padding:8px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 90%,var(--surface) 10%);flex-shrink:0}.ctx-session-strip-scroll{display:flex;align-items:center;gap:6px;min-width:0;flex:1;overflow-x:auto;scrollbar-width:thin}.ctx-session-chip{display:flex;align-items:center;min-width:0;border:1px solid var(--border);border-radius:999px;background:var(--surface)}.ctx-session-chip.active{border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent-soft) 75%,var(--surface) 25%)}.ctx-session-chip-main{display:flex;align-items:center;gap:8px;min-width:0;border:none;background:transparent;color:var(--text);padding:6px 10px;cursor:pointer}.ctx-session-chip-status,.ctx-multi-card-status{width:8px;height:8px;border-radius:999px;flex-shrink:0;background:var(--text-secondary)}.ctx-session-chip-status.status-running,.ctx-multi-card-status.status-running{background:var(--green)}.ctx-session-chip-status.status-idle,.ctx-multi-card-status.status-idle,.ctx-session-chip-status.status-done,.ctx-multi-card-status.status-done{background:var(--accent)}.ctx-session-chip-status.status-failed,.ctx-multi-card-status.status-failed{background:var(--red)}.ctx-session-chip-status.status-cancelled,.ctx-multi-card-status.status-cancelled{background:var(--text-secondary)}.ctx-session-chip-title{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;min-width:0}@container ctxpanel (max-width: 480px){.ctx-session-chip-title{max-width:120px}}.ctx-session-chip-unread{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--accent);color:#fff;font-size:10px;font-weight:700}.ctx-session-chip-close{border:none;border-left:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;width:28px;height:28px;flex-shrink:0}.ctx-session-chip-close:hover,.ctx-session-view-btn:hover{color:var(--text);background:var(--surface-hover)}.ctx-session-view-btn{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:999px;padding:6px 10px;font-size:11px;cursor:pointer;flex-shrink:0}.ctx-session-view-btn.active{color:var(--text);border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent-soft) 75%,var(--surface) 25%)}.ctx-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.ctx-body>.msg-list,.ctx-body>.msg-list-shell{min-height:0}.ctx-work-item-progress{flex:0 0 84px;height:84px;min-height:84px;padding:12px 12px 0;overflow:hidden;position:relative;z-index:1;background:var(--bg-elevated)}.ctx-work-item-progress .wi-progress-card{box-sizing:border-box;height:72px;padding:10px 12px;gap:7px;overflow:hidden}.ctx-work-item-progress .wi-progress-pipeline{min-width:0;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.ctx-work-item-progress .wi-progress-pipeline::-webkit-scrollbar{display:none}.ctx-work-item-progress .wi-projection-group{flex:0 0 auto}.ctx-work-item-progress .wi-progress-pipeline-empty{color:var(--text-secondary);font-size:11px;line-height:22px;white-space:nowrap}.ctx-multi-grid{flex:1;min-height:0;overflow:auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:12px;padding:12px;align-content:start}.ctx-multi-card{min-height:0;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:14px;background:color-mix(in srgb,var(--bg-elevated) 86%,var(--surface) 14%);overflow:hidden;container-type:inline-size;container-name:ctxpanel}.ctx-multi-card.focused{border-color:color-mix(in srgb,var(--accent) 60%,var(--border) 40%);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 24%,transparent 76%)}.ctx-multi-card-header{display:flex;align-items:center;gap:8px;padding:10px 12px 8px;border-bottom:1px solid var(--border);min-width:0;flex-wrap:wrap;row-gap:6px}.ctx-multi-card-main{min-width:0;flex:1;display:flex;align-items:center;gap:8px;border:none;background:transparent;color:var(--text);cursor:pointer;padding:0}.ctx-multi-card-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;text-align:left}.ctx-multi-card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;min-width:0}.ctx-multi-card-actions button{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:999px;padding:4px 8px;font-size:11px;cursor:pointer}.ctx-multi-card-actions button:hover{color:var(--text);background:var(--surface-hover)}.ctx-multi-card-meta{display:flex;flex-wrap:wrap;gap:6px 8px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:11px;color:var(--text-secondary)}.ctx-multi-card-body{flex:1;min-height:220px;overflow:hidden;display:flex;flex-direction:column}.ctx-multi-card-body .msg-list{flex:1;min-height:0}.ctx-multi-card .msg-composer{border-top:1px solid var(--border);border-radius:0;border-left:none;border-right:none;border-bottom:none}@media(max-width:900px){.ctx-multi-grid{grid-template-columns:1fr;gap:8px;padding:8px}.ctx-multi-card-actions{flex-wrap:wrap;justify-content:flex-end}}@media(max-width:640px){.ctx-session-strip{flex-wrap:wrap}.ctx-session-strip-scroll{flex-basis:100%;order:2}}.ctx-child-topbar{display:flex;align-items:center;gap:8px;flex-shrink:0}.ctx-back-btn{background:none;border:none;color:var(--accent);cursor:pointer;font-size:12px;padding:6px 10px;display:flex;align-items:center;gap:4px;flex-shrink:0}.ctx-back-btn:hover{text-decoration:underline}.ctx-child-stop-btn{margin-left:auto;padding:3px 10px;font-size:11px;font-weight:600;font-family:inherit;border:1px solid var(--red);border-radius:5px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);cursor:pointer;transition:background .12s}.ctx-child-stop-btn:hover{background:color-mix(in srgb,var(--red) 20%,transparent)}.ctx-child-resume-btn{margin-left:auto;padding:3px 10px;font-size:11px;font-weight:600;font-family:inherit;border:1px solid var(--green);border-radius:5px;background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green);cursor:pointer;transition:background .12s}.ctx-child-resume-btn:hover{background:color-mix(in srgb,var(--green) 22%,transparent)}.ctx-child-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border)}.ctx-child-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}.ctx-child-meta{flex:1;min-width:0}.ctx-child-name{font-weight:600;font-size:13px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctx-child-work-item{font-size:11px;color:var(--text-secondary)}.ctx-task-chip-row{display:flex;flex-wrap:wrap;gap:6px}.ctx-task-detail-card{border:1px solid var(--border);border-radius:6px;padding:10px 12px;background:var(--surface)}.ctx-task-kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px}.ctx-task-kv-item{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.ctx-task-kv-label{font-size:10px;text-transform:uppercase;color:var(--text-secondary)}.ctx-task-kv-value{font-size:12px;color:var(--text);white-space:pre-wrap;word-break:break-word}.kanban-card.is-selected{box-shadow:0 0 0 2px var(--accent)}.ctx-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:var(--text-secondary);font-size:13px;gap:8px;padding:20px;text-align:center}.ctx-empty-icon{font-size:24px;opacity:.4}.ctx-child-detail{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-height:0}.ctx-child-detail .exec-section{padding:8px 12px;border-bottom:1px solid var(--border)}.ctx-child-detail .exec-section-header{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ctx-child-detail .exec-section-content{font-size:12px}.ctx-child-transcript{display:flex;flex-direction:column;min-height:280px;max-height:55vh;overflow:hidden;border-bottom:1px solid var(--border);flex-shrink:0}.ctx-child-transcript-header,.ctx-child-section-header{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ctx-child-transcript-header{padding:8px 12px 0}.ctx-child-transcript .msg-list{min-height:0}.ctx-child-markdown-section,.ctx-child-artifacts,.ctx-child-passed-to{padding:8px 12px}.ctx-child-artifacts,.ctx-child-passed-to{border-top:1px solid var(--border)}.ctx-child-markdown-card{padding:10px 12px}.ctx-child-markdown-card .msg-content-agent{font-size:12px}.ctx-child-artifact-list{margin:0;padding-left:16px;font-size:12px}.ctx-info-v2{flex:1;min-height:0;overflow-y:auto;padding:16px 14px 24px;display:flex;flex-direction:column;gap:14px}.ctx-info-section{display:flex;flex-direction:column;gap:6px}.ctx-info-section-title{margin:0 4px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.ctx-info-card{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border-radius:10px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent 20%);background:color-mix(in srgb,var(--surface) 60%,var(--bg-elevated) 40%)}.ctx-info-status-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.ctx-info-status-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:600;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);border:1px solid color-mix(in srgb,var(--border) 70%,transparent 30%);color:var(--text);text-transform:capitalize}.ctx-info-status-pill.status-running{color:var(--green);border-color:color-mix(in srgb,var(--green) 35%,transparent 65%)}.ctx-info-status-pill.status-idle,.ctx-info-status-pill.status-suspended{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent 65%)}.ctx-info-status-pill.status-done{color:var(--green);border-color:color-mix(in srgb,var(--green) 35%,transparent 65%)}.ctx-info-status-pill.status-failed,.ctx-info-status-pill.status-cancelled{color:var(--red);border-color:color-mix(in srgb,var(--red) 35%,transparent 65%)}.ctx-info-status-pill.status-blocked,.ctx-info-status-pill.status-awaiting_human{color:var(--yellow);border-color:color-mix(in srgb,var(--yellow) 35%,transparent 65%)}.ctx-info-status-dot{width:7px;height:7px;border-radius:999px;background:currentColor}.ctx-info-priority-pill{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:6px;font-size:11px;font-weight:500;background:transparent}.ctx-info-chips{display:flex;flex-wrap:wrap;gap:5px}.ctx-info-chip{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:color-mix(in srgb,var(--bg-elevated) 80%,transparent 20%);border:1px solid color-mix(in srgb,var(--border) 65%,transparent 35%);color:var(--text-secondary);font-size:11px;line-height:1.3}.ctx-info-fact{display:flex;align-items:flex-start;gap:12px;padding:0;min-width:0}.ctx-info-fact-label{flex:0 0 auto;width:clamp(72px,22%,104px);font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary);padding-top:2px;word-break:break-word}.ctx-info-fact-value{flex:1;min-width:0;font-size:12.5px;color:var(--text);word-break:break-word}.ctx-info-mono{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;color:var(--text-secondary)}.ctx-info-mono-break{word-break:break-all;display:inline-block;line-height:1.5}.ctx-info-dev-section{margin-top:4px}.ctx-info-dev-toggle{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;margin-left:-4px;background:transparent;border:none;color:var(--text-secondary);font:inherit;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;border-radius:6px;align-self:flex-start;transition:color .14s ease,background .14s ease}.ctx-info-dev-toggle:hover,.ctx-info-dev-toggle.expanded{color:var(--text);background:color-mix(in srgb,var(--surface) 50%,transparent 50%)}.ctx-info-dev-card{background:color-mix(in srgb,var(--bg-elevated) 86%,var(--surface) 14%);border-style:dashed}@container ctxpanel (max-width: 360px){.ctx-info-v2{padding:12px 10px 20px;gap:12px}.ctx-info-card{padding:10px 12px}.ctx-info-fact{flex-direction:column;align-items:stretch;gap:4px}.ctx-info-fact-label{width:auto;font-size:9.5px}.ctx-info-fact-value{font-size:12px}}.ctx-body .awp{flex:1 1 auto;display:grid;grid-template-columns:minmax(300px,38%) minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr);grid-template-areas:"header header" "search search" "list detail";width:100%;min-width:0;min-height:0;border-left:none;background:color-mix(in srgb,var(--bg) 88%,var(--surface) 12%)}.ctx-body .awp-header{grid-area:header;padding:10px 16px;background:color-mix(in srgb,var(--bg-elevated) 82%,var(--surface) 18%)}.ctx-body .awp-title{font-size:13px;gap:8px}.ctx-body .awp-count{font-size:11px;padding:2px 7px}.ctx-body .awp-controls{gap:8px}.ctx-body .awp-filter{min-width:112px;padding:5px 8px;font-size:11px}.ctx-body .awp-search-toggle{width:28px;height:28px;justify-content:center;border:1px solid transparent}.ctx-body .awp-search-toggle:hover,.ctx-body .awp-search-toggle.active{border-color:var(--border);background:var(--surface)}.ctx-body .awp-search-bar{grid-area:search;padding:8px 12px;background:color-mix(in srgb,var(--bg) 82%,var(--surface) 18%)}.ctx-body .awp-search-input{padding:7px 10px;font-size:12px}.ctx-body .awp-list{grid-area:list;flex:unset;min-height:0;max-height:none;border-right:1px solid var(--border);background:color-mix(in srgb,var(--bg) 94%,var(--surface) 6%)}.ctx-body .awp:not(:has(.awp-detail)) .awp-list{grid-column:1 / -1;border-right:none}.ctx-body .awp-row{display:grid;grid-template-columns:10px minmax(160px,1fr) minmax(148px,220px) minmax(44px,max-content);gap:10px;min-height:58px;padding:10px 16px;font-size:12px}.ctx-body .awp-row-selected{padding-left:14px}.ctx-body .awp-dot{align-self:center}.ctx-body .awp-row-info{gap:3px}.ctx-body .awp-row-name{font-size:12.5px;line-height:1.25}.ctx-body .awp-row-projection{font-size:10.5px;line-height:1.25}.ctx-body .awp-row-activity{max-width:none;justify-self:end;font-size:11.5px;line-height:1.25}.ctx-body .awp-row-time{min-width:36px;font-size:10.5px}.ctx-body .awp-detail{grid-area:detail;flex:unset;min-width:0;min-height:260px;border-top:none;border-left:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 78%,var(--bg) 22%)}.ctx-body .awp-detail-header{padding:12px 16px}.ctx-body .awp-detail-avatar{width:36px;height:36px;border-radius:8px;font-size:15px}.ctx-body .awp-detail-name{font-size:13px;line-height:1.25}.ctx-body .awp-detail-role,.ctx-body .awp-detail-employee,.ctx-body .awp-detail-projection{font-size:11px;line-height:1.25}.ctx-body .awp-detail-body{padding:12px 16px 16px}.ctx-body .awp-detail-section-label{letter-spacing:0}.ctx-body .awp .wf-role-turns{gap:8px;margin-top:10px}.ctx-body .awp .wf-role-turn{border-radius:8px;background:color-mix(in srgb,var(--surface) 72%,var(--bg) 28%)}.ctx-body .awp .wf-role-turn-button{grid-template-columns:auto minmax(0,1fr) max-content 22px;min-height:48px;padding:10px 12px;gap:10px}.ctx-body .awp .wf-role-turn-title{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.35;color:var(--text)}.ctx-body .awp .wf-role-turn-time{align-self:center;white-space:nowrap}.ctx-body .awp .wf-role-turn-chevron{align-self:center;justify-self:end;width:22px;height:22px;justify-content:center;color:var(--text-secondary);opacity:.9}.ctx-body .awp .wf-role-turn-chevron svg{width:14px;height:14px}.ctx-body .awp .wf-role-turn-activity{padding:12px}@container ctxpanel (max-width: 720px){.ctx-body .awp{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(180px,42%) minmax(260px,1fr);grid-template-areas:"header" "search" "list" "detail"}.ctx-body .awp-list{border-right:none;border-bottom:1px solid var(--border)}.ctx-body .awp-detail{min-height:260px;border-left:none;border-top:1px solid var(--border)}.ctx-body .awp:not(:has(.awp-detail)) .awp-list{grid-row:3 / -1}.ctx-body .awp-row{grid-template-columns:10px minmax(0,1fr) minmax(34px,max-content);grid-template-rows:auto auto;gap:4px 10px;min-height:56px;padding:9px 12px}.ctx-body .awp-row-activity{grid-column:2 / 4;justify-self:start}.ctx-body .awp-row-time{grid-column:3;grid-row:1}.ctx-body .awp .wf-role-turn-button{grid-template-columns:auto minmax(0,1fr) 22px;grid-template-rows:auto auto;min-height:58px}.ctx-body .awp .wf-role-turn-time{grid-column:2;grid-row:2;justify-self:start}.ctx-body .awp .wf-role-turn-chevron{grid-column:3;grid-row:1 / span 2}}@container ctxpanel (max-width: 420px){.ctx-body .awp-header{align-items:flex-start;gap:8px;flex-direction:column}.ctx-body .awp-controls{width:100%}.ctx-body .awp-filter{flex:1}}.wfr-panel{padding:0 8px}.wfr-card{background:color-mix(in srgb,var(--yellow, #f39c12) 8%,var(--bg-secondary));border:1px solid color-mix(in srgb,var(--yellow, #f39c12) 25%,transparent);border-radius:8px;padding:12px 14px;margin-bottom:8px}.wfr-header{display:flex;align-items:flex-start;gap:8px;margin-bottom:8px}.wfr-icon{font-size:16px;line-height:1;flex-shrink:0}.wfr-header-text{display:flex;flex-direction:column;gap:2px;min-width:0}.wfr-title{font-size:13px;font-weight:600;color:var(--text)}.wfr-subtitle{font-size:11px;color:var(--text-secondary)}.wfr-work-items{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.wfr-work-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary)}.wfr-work-item-icon{font-size:12px;width:14px;text-align:center;flex-shrink:0;font-weight:700}.wfr-work-item-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wfr-work-item-badge{font-size:9px;padding:1px 5px;border-radius:3px;background:color-mix(in srgb,var(--red, #e74c3c) 15%,transparent);color:var(--red, #e74c3c);flex-shrink:0}.wfr-actions{display:flex;gap:8px;align-items:center}.wfr-btn{padding:5px 14px;font-size:12px;font-weight:500;border:none;border-radius:6px;cursor:pointer}.wfr-btn--resume{background:var(--green, #27ae60);color:#fff}.wfr-btn--resume:hover{opacity:.85}.wfr-btn--cancel{background:var(--red, #e74c3c);color:#fff}.wfr-btn--cancel:hover{opacity:.85}.wfr-btn--dismiss{background:transparent;color:var(--text-secondary)}.wfr-btn--dismiss:hover{color:var(--text)}.wfr-recovering{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--accent)}.kanban-empty-state{display:flex;align-items:center;justify-content:center;flex:1;color:var(--text-secondary);font-size:14px;padding:32px 16px;text-align:center}.kanban-empty-state-inline{flex:0;padding:16px}.task-detail-runtime{display:flex;align-items:center;gap:6px;padding:8px 16px;font-size:11px;font-weight:500;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface)}.task-detail-runtime.status-reflecting{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 8%,var(--surface))}.task-detail-runtime.status-tool_active{color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--surface))}.task-detail-runtime-agent{color:var(--text-secondary);font-weight:400}.task-detail-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:14px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.task-detail-section{display:flex;flex-direction:column;gap:6px}.task-detail-section-title{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin:0}.task-detail-dep-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.task-detail-dep-item{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:4px;background:var(--surface);font-size:12px;color:var(--text)}.task-detail-dep-id{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;flex-shrink:0}.task-detail-handoff{margin:0;padding:8px 10px;border-radius:6px;background:var(--surface);font-size:11px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:160px;overflow-y:auto;border:1px solid var(--border)}.task-detail-progress{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;max-height:200px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.progress-entry{display:flex;align-items:baseline;gap:8px;padding:3px 8px;border-radius:3px;font-size:11px}.progress-entry:hover{background:var(--surface)}.progress-time{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;flex-shrink:0;min-width:64px}.progress-summary{color:var(--text);word-break:break-word}.progress-entry.type-thinking .progress-summary{color:var(--yellow)}.progress-entry.type-tool_call .progress-summary{color:var(--green)}.progress-entry.type-handoff .progress-summary{color:var(--accent)}.progress-entry.type-gate_result .progress-summary{color:#d97706}.task-detail-linked-messages{height:min(400px,55vh);min-height:220px;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:6px;padding:4px 0;background:var(--bg)}.task-detail-linked-messages>.msg-list-shell{flex:1;min-height:0}.task-detail-empty-hint{color:var(--text-secondary);font-size:12px;font-style:italic;margin:4px 0}:root{font-family:Inter,SF Pro Display,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box;min-width:0}html,body,#root{margin:0;padding:0;height:100%;overflow:hidden}.app-shell{--bg: #0c111b;--bg-elevated: #141b2b;--text: #e2e8f0;--text-secondary: #8494a7;--border: rgba(148, 163, 184, .12);--border-hover: rgba(148, 163, 184, .22);--surface: rgba(20, 27, 43, .7);--surface-hover: rgba(30, 41, 63, .7);--accent: #6366f1;--accent-soft: rgba(99, 102, 241, .15);--accent-glow: rgba(99, 102, 241, .3);--green: #34d399;--yellow: #fbbf24;--red: #f87171;--radius: 12px;--radius-sm: 8px;--radius-xs: 6px;--white: #ffffff;--text-dim: #64748b;--bg-card: #141b2b;--bg-secondary: #1a2332;height:100vh;max-height:100vh;display:grid;grid-template-rows:48px minmax(0,1fr);gap:0;color:var(--text);overflow:hidden;background:var(--bg)}.theme-neon{--bg: #05100e;--bg-elevated: #0a1f1a;--text: #d0fef0;--text-secondary: #5eada0;--text-dim: #3d7a6e;--bg-card: #0a1f1a;--bg-secondary: #0e2a24;--border: rgba(94, 173, 160, .15);--border-hover: rgba(94, 173, 160, .28);--surface: rgba(10, 31, 26, .75);--surface-hover: rgba(16, 48, 40, .75);--accent: #00ddc6;--accent-soft: rgba(0, 221, 198, .12);--accent-glow: rgba(0, 221, 198, .3)}.theme-paper{--bg: #f8f9fb;--bg-elevated: #ffffff;--text: #1e293b;--text-secondary: #64748b;--text-dim: #94a3b8;--bg-card: #ffffff;--bg-secondary: #f1f5f9;--border: rgba(0, 0, 0, .08);--border-hover: rgba(0, 0, 0, .14);--surface: rgba(255, 255, 255, .9);--surface-hover: rgba(241, 245, 249, .95);--accent: #4f46e5;--accent-soft: rgba(79, 70, 229, .08);--accent-glow: rgba(79, 70, 229, .15);--green: #059669;--yellow: #d97706;--red: #dc2626;color-scheme:light}.theme-paper .kanban-card:hover{box-shadow:0 2px 8px #0000000f}.theme-paper .kanban-card.is-dragging{box-shadow:0 8px 24px #0000001f}.theme-retro{--bg: #080e08;--bg-elevated: #0e1a0e;--text: #a8d8a8;--text-secondary: #4a8a4a;--text-dim: #3a6a3a;--bg-card: #0e1a0e;--bg-secondary: #142014;--border: rgba(74, 138, 74, .18);--border-hover: rgba(74, 138, 74, .3);--surface: rgba(14, 26, 14, .8);--surface-hover: rgba(20, 40, 20, .8);--accent: #4ade80;--accent-soft: rgba(74, 222, 128, .12);--accent-glow: rgba(74, 222, 128, .3)}.theme-terminal{--bg: #080808;--bg-elevated: #111111;--text: #22c55e;--text-secondary: #166534;--text-dim: #0f4a22;--bg-card: #111111;--bg-secondary: #181818;--border: rgba(34, 197, 94, .12);--border-hover: rgba(34, 197, 94, .25);--surface: rgba(17, 17, 17, .9);--surface-hover: rgba(24, 24, 24, .9);--accent: #22c55e;--accent-soft: rgba(34, 197, 94, .1);--accent-glow: rgba(34, 197, 94, .3)}.theme-cozy{--bg: #16120e;--bg-elevated: #201a14;--text: #ede0d4;--text-secondary: #9a8470;--text-dim: #7a6a5a;--bg-card: #201a14;--bg-secondary: #2a221a;--border: rgba(154, 132, 112, .16);--border-hover: rgba(154, 132, 112, .28);--surface: rgba(32, 26, 20, .8);--surface-hover: rgba(42, 34, 26, .8);--accent: #f59e0b;--accent-soft: rgba(245, 158, 11, .12);--accent-glow: rgba(245, 158, 11, .3)}.theme-openopc{--bg: #0a0a0a;--bg-elevated: #161616;--bg-card: #121111;--bg-secondary: #171412;--text: #f0ede8;--text-secondary: #8a8580;--text-dim: #6f6a66;--border: rgba(217, 119, 87, .12);--border-hover: rgba(217, 119, 87, .24);--surface: rgba(22, 22, 22, .85);--surface-hover: rgba(34, 30, 28, .85);--accent: #d97757;--accent-soft: rgba(217, 119, 87, .12);--accent-glow: rgba(217, 119, 87, .25);--green: #98c379;--yellow: #e5c07b;--red: #e06c75}.theme-openopc .topbar{background:#0e0e0e;border-bottom-color:#d9775714}.theme-openopc .session-sidebar{background:#0e0e0e;border-right-color:#d9775714}.theme-openopc .session-new-btn{border-color:#d977572e}.theme-openopc .session-new-btn:hover{border-color:var(--accent);color:var(--accent)}.theme-openopc .msg-content-user{background:linear-gradient(135deg,#d97757,#c96442);box-shadow:0 2px 8px #d9775726}.theme-openopc .msg-content-agent-card{background:#131313;border-color:#d977571a;border-left-color:#d97757}.theme-openopc .msg-row.agent:hover .msg-content-agent-card{border-color:#d9775733;border-left-color:#d97757;box-shadow:0 2px 12px #d977570f}.theme-openopc .msg-content-agent pre{background:#0c0c0c;border-color:#d9775714}.theme-openopc .msg-content-agent blockquote{background:#d9775708;border-left-color:#d9775740}.theme-openopc .msg-card-actions{border-top-color:#d9775714}.theme-openopc .agent-avatar{background:linear-gradient(135deg,#d9775726,#d977570d);border-color:#d9775726;color:var(--accent)}.theme-openopc .composer-send-btn{background:linear-gradient(135deg,#d97757,#c96442)}.theme-openopc .composer-send-btn:not(:disabled):hover{filter:brightness(1.2)}.theme-openopc .task-header-bar{background:#0e0e0e;border-bottom-color:#d9775714}.theme-openopc .ptl-live-think{background:#d977570f}.theme-openopc .ptl-live-tool-name{background:#98c3791a;color:#98c379}.theme-openopc .ptl-tool-badge{background:#98c37914;color:#98c379}.theme-openopc .ptl-dot{background:#131313;border-color:#d977571f}.theme-openopc .ptl-line{background:#d977571a}.theme-openopc .agent-working-row .ptl-block{border-color:#d9775726}.theme-openopc .code-block-header{background:#111}.theme-openopc .code-block-wrap pre{background:#0e0e0e!important}.theme-openopc .msg-content-agent code{background:#d9775714;color:#ffb38a}.theme-openopc .msg-content-agent pre code{background:transparent;color:#f0ede8}.theme-openopc .kanban-card:hover{box-shadow:0 2px 12px #d977570f}.theme-openopc .kanban-card.is-dragging{box-shadow:0 8px 24px #d977571f}.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border);background:var(--bg);z-index:10}.topbar-left{display:flex;align-items:center;gap:10px}.logo-text{font-size:15px;font-weight:700;letter-spacing:-.02em}.logo-accent{color:var(--accent)}.conn-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:help;transition:background .2s}.conn-dot.ok{background:var(--green);box-shadow:0 0 6px #34d39980}.conn-dot.warn{background:var(--yellow);box-shadow:0 0 6px #fbbf2466}.conn-dot.error{background:var(--red);box-shadow:0 0 6px #f8717166}.conn-dot.off{background:var(--text-secondary)}.topbar-center{flex:0 0 auto;display:flex;align-items:center;gap:12px}.page-nav{display:flex;border:1px solid var(--border);border-radius:6px;overflow:hidden;flex-shrink:0}.page-nav-btn{padding:4px 14px;border:none;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:all .12s}.page-nav-btn:first-child{border-right:1px solid var(--border)}.page-nav-btn.active{background:var(--accent);color:#fff}.page-nav-btn:not(.active):hover{background:var(--surface-hover);color:var(--text)}.page-nav-btn{position:relative}.nav-unread-badge{position:absolute;top:-2px;right:-2px;font-size:8px;padding:1px 4px;border-radius:999px;background:var(--red);color:#fff;font-weight:700;line-height:1.2;min-width:14px;text-align:center}.stat-chips{display:flex;gap:6px}.stat-chip{font-size:11px;color:var(--text-secondary);padding:3px 10px;border-radius:999px;border:1px solid var(--border);background:var(--surface);white-space:nowrap}.stat-chip b{color:var(--text);font-weight:600}.topbar-right{display:flex;align-items:center;gap:6px}.theme-select{font-size:11px;padding:4px 8px;border-radius:var(--radius-xs);border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;outline:none}.theme-select:focus{border-color:var(--accent)}.icon-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--radius-sm);border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;padding:0;transition:all .15s}.icon-btn:hover{background:var(--surface-hover);color:var(--text);border-color:var(--border-hover);transform:none}.icon-btn.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.main-grid{display:grid;grid-template-columns:1fr clamp(280px,30vw,360px);height:100%;min-height:0;overflow:hidden;transition:grid-template-columns .22s ease}.main-grid.hidden{display:none}.main-grid.sidebar-collapsed{grid-template-columns:1fr 0px}.main-grid.sidebar-collapsed .sidebar{border-left:none}.canvas-wrap{position:relative;overflow:hidden;background:#1a2533;min-width:0;min-height:0}.canvas-wrap>div{width:100%;height:100%}.canvas-wrap canvas{display:block;image-rendering:pixelated;image-rendering:crisp-edges}.canvas-float-btn{position:absolute;bottom:12px;left:12px;width:34px;height:34px;border-radius:50%;border:1px solid var(--border);background:#141b2bf0;box-shadow:0 8px 20px #0000003d;color:var(--text);font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:all .15s;z-index:5}.canvas-float-btn:hover{background:var(--surface-hover);border-color:var(--border-hover);transform:scale(1.05)}.sidebar-collapse-btn{position:absolute;top:50%;right:0;transform:translateY(-50%);width:18px;height:56px;padding:0;border:1px solid var(--border);border-right:none;border-radius:8px 0 0 8px;background:#141b2bf0;color:var(--text-secondary);font-size:10px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:6;transition:background .15s,color .15s}.sidebar-collapse-btn:hover{background:var(--surface-hover);color:var(--text)}.sidebar{display:grid;grid-template-rows:auto minmax(0,1fr) auto;border-left:1px solid var(--border);background:var(--bg-elevated);overflow:hidden}.sidebar-body{overflow-y:auto;overflow-x:hidden;min-height:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.input-row{display:flex;gap:6px;align-items:flex-end}.input-row input,.dev-group .input-row input{flex:1;padding:9px 14px;border-radius:20px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:13px;outline:none;transition:border-color .15s}.input-row input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.input-row input::placeholder{color:var(--text-secondary);opacity:.7}.send-btn{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:all .15s}.send-btn:hover{transform:scale(1.05);filter:brightness(1.1)}.send-btn:disabled{opacity:.35;cursor:not-allowed;transform:none;filter:none}.team-panel{padding:12px;display:flex;flex-direction:column;gap:12px;min-width:0;overflow-x:hidden}.section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);display:flex;align-items:center;gap:6px}.count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:10px;font-weight:700}.toast-success{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:#22c55e;color:#0c111b;padding:8px 20px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;z-index:9999;animation:toast-in .3s ease-out;pointer-events:none}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.toast-error{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--red, #f87171);color:#fff;padding:8px 20px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;z-index:9999;animation:toast-in .3s ease-out;pointer-events:none}.spinner-inline{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin-inline .6s linear infinite;vertical-align:middle}@keyframes spin-inline{to{transform:rotate(360deg)}}.del-confirm{position:absolute;right:0;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:4px;padding:3px 6px;background:var(--bg-elevated);border:1px solid var(--red);border-radius:var(--radius-xs);animation:del-pop .12s ease-out;z-index:10;white-space:nowrap}.del-confirm-label{font-size:10px;color:var(--red);font-weight:500}.del-confirm-yes{padding:1px 8px;font-size:10px;border-radius:3px;border:none;background:var(--red);color:#fff;cursor:pointer;font-weight:600}.del-confirm-yes:hover{filter:brightness(1.15)}.del-confirm-no{padding:1px 6px;font-size:10px;border-radius:3px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer}.del-confirm-no:hover{background:var(--surface-hover);color:var(--text)}@keyframes del-pop{0%{opacity:0;transform:translateY(-50%) scale(.92)}to{opacity:1;transform:translateY(-50%) scale(1)}}.office-cards{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.office-card{border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;cursor:pointer;transition:border-color .15s,background .15s}.office-card:hover{border-color:var(--accent);background:var(--accent-soft)}.office-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.office-name{font-size:12px;font-weight:600;color:var(--text)}.office-edit-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:13px;padding:0 2px;line-height:1;opacity:0;transition:opacity .15s}.office-card:hover .office-edit-btn{opacity:.7}.office-edit-btn:hover{opacity:1!important;color:var(--accent)}.office-name-input{font-size:12px;font-weight:600;background:var(--bg-elevated);color:var(--text);border:1px solid var(--accent);border-radius:3px;padding:1px 4px;width:120px;outline:none}.office-capacity{font-size:11px;color:var(--text-secondary);font-family:var(--font-mono, monospace)}.office-agents{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.office-agent-chip{font-size:10px;padding:1px 6px;border-radius:8px;background:var(--accent-soft);color:var(--text-primary);cursor:pointer;border:1px solid var(--border);transition:background .1s}.office-agent-chip:hover{background:var(--accent);color:#fff}.assign-dropdown{font-size:10px;padding:2px 16px 2px 4px;border-radius:4px;appearance:none;-webkit-appearance:none;background:var(--bg-elevated);color:var(--text);color-scheme:inherit;border:1px solid var(--border);cursor:pointer;outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%23888'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 4px center;background-size:8px 5px}.agent-list{display:flex;flex-direction:column;gap:4px}.agent-row{position:relative;display:flex;align-items:stretch;border-radius:var(--radius-sm);border:1px solid var(--border);overflow:visible;transition:border-color .15s}.agent-row:hover{border-color:var(--border-hover)}.agent-row.selected{border-color:var(--accent);background:var(--accent-soft)}.agent-row-main{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;border:none;background:transparent;color:var(--text);cursor:pointer;text-align:left;border-radius:0}.agent-row-main:hover{background:var(--surface-hover);transform:none}.agent-info{display:flex;flex-direction:column;gap:1px;min-width:0}.agent-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-spec{font-size:10px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-del{flex-shrink:0;width:30px;display:flex;align-items:center;justify-content:center;border:none;border-left:1px solid var(--border);background:transparent;color:var(--text-secondary);font-size:14px;cursor:pointer;padding:0;border-radius:0;transition:all .12s}.agent-del:hover{background:#f8717126;color:var(--red);transform:none}.dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-secondary)}.dot.active,.dot.working{background:var(--green);box-shadow:0 0 4px #34d39966}.dot.idle{background:var(--text-secondary)}.dot.waiting{background:var(--yellow)}.dot.delegating{background:var(--accent)}.dot.reflecting{background:#c084fc}.dot.spawned{background:var(--green)}.empty-state{font-size:12px;color:var(--text-secondary);text-align:center;padding:16px 12px;line-height:1.5}.agent-detail{padding:10px;border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--accent-soft);display:flex;flex-direction:column;gap:6px}.agent-detail-name{font-size:13px;font-weight:700;color:var(--accent)}.agent-detail-row{display:flex;justify-content:space-between;gap:8px;font-size:11px}.detail-label{color:var(--text-secondary);flex-shrink:0}.detail-value{text-align:right;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-select{flex:1;text-align:right;appearance:none;-webkit-appearance:none;background:var(--bg-elevated);color:var(--text);color-scheme:inherit;border:1px solid var(--border);border-radius:4px;padding:4px 20px 4px 8px;font-size:12px;cursor:pointer;min-width:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px 6px}.agent-row-simple{display:flex;align-items:center;gap:6px;padding:7px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer;text-align:left;font-size:12px;transition:all .12s}.agent-row-simple:hover{border-color:var(--border-hover);background:var(--surface-hover);transform:none}.agent-row-simple.selected{border-color:var(--accent);background:var(--accent-soft)}.sub-badge{font-size:9px;font-weight:700;padding:1px 4px;border-radius:3px;background:var(--accent-soft);color:var(--accent)}.inline-btn{font-size:10px;padding:1px 6px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;margin-left:auto}.inline-btn:hover{background:var(--surface-hover);color:var(--text);transform:none}.dev-overlay{position:fixed;top:52px;right:8px;width:400px;max-height:calc(100vh - 60px);overflow-y:auto;z-index:100;padding:14px;border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);box-shadow:0 16px 48px #0006,0 0 0 1px var(--border);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);display:flex;flex-direction:column;gap:14px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.dev-header{display:flex;justify-content:space-between;align-items:center}.dev-title{font-size:13px;font-weight:700;letter-spacing:-.01em}.dev-group{display:flex;flex-direction:column;gap:8px}.dev-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);display:flex;align-items:center;gap:8px}.inline-select{font-size:10px;padding:2px 6px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);margin-left:auto;outline:none}.dev-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.dev-row select{padding:5px 8px;font-size:11px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);outline:none}.pill-btn{padding:5px 12px;font-size:11px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .12s}.pill-btn:hover{background:var(--surface-hover);color:var(--text);border-color:var(--border-hover);transform:none}.pill-btn.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.evo-pipeline{display:flex;align-items:center;gap:0;padding:6px 0}.evo-phase-group{display:flex;align-items:center;flex-shrink:0}.evo-connector{width:16px;height:2px;background:var(--border)}.evo-node{display:flex;flex-direction:column;align-items:center;gap:5px}.evo-dot{width:14px;height:14px;border-radius:50%;border:2px dashed var(--border);background:transparent;transition:all .2s}.evo-node.active .evo-dot{border-style:solid;border-color:var(--accent);background:var(--accent);box-shadow:0 0 8px var(--accent-glow);animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 0 4px var(--accent-glow)}50%{box-shadow:0 0 14px var(--accent-glow)}}.evo-label{font-size:9px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.evo-node.active .evo-label{color:var(--text);font-weight:600}.event-log{max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:3px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.log-row{display:grid;grid-template-columns:52px 80px 70px minmax(0,1fr);gap:6px;padding:4px 6px;border-radius:var(--radius-xs);background:var(--surface);font-size:10px;overflow:hidden;font-variant-numeric:tabular-nums}.log-time{color:var(--text-secondary)}.log-type{color:var(--accent);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-agent{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-data{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Consolas,monospace}.list{display:flex;flex-direction:column;gap:4px}.list-row{display:flex;justify-content:space-between;gap:8px;font-size:11px;padding:4px 8px;border-radius:var(--radius-xs);background:var(--surface)}.list-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono{font-family:SF Mono,Consolas,Courier New,monospace}.muted{color:var(--text-secondary)}@media(max-width:1024px){.main-grid{grid-template-columns:1fr;grid-template-rows:minmax(0,1.2fr) minmax(0,1fr);transition:grid-template-rows .22s ease}.main-grid.sidebar-collapsed{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) 0}.main-grid.sidebar-collapsed .sidebar{border-top:none}.sidebar{border-left:none;border-top:1px solid var(--border);max-height:48vh;min-height:0}.sidebar-collapse-btn{top:auto;bottom:0;right:50%;transform:translate(50%);width:56px;height:18px;border:1px solid var(--border);border-bottom:none;border-radius:8px 8px 0 0}.sidebar-collapse-btn .collapse-glyph{display:inline-block;transform:rotate(90deg)}.stat-chips{display:none}}@media(max-width:760px){.topbar{padding:0 10px}.dev-overlay{width:calc(100vw - 16px);right:8px;left:8px}}@media(max-width:480px){.main-grid{grid-template-rows:minmax(0,1fr) minmax(0,auto)}.sidebar{max-height:45vh}}.org-page{display:flex;flex-direction:column;flex:1;min-height:0;overflow-y:auto}.editor-page{overflow:hidden;display:flex;flex-direction:column}.collision-editor{display:flex;flex-direction:column;height:100%;background:var(--bg);color:var(--text)}.ce-toolbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--bg-elevated);border-bottom:1px solid var(--border);flex-wrap:wrap;min-height:44px}.ce-toolbar-group{display:flex;align-items:center;gap:6px}.ce-title{font-weight:700;font-size:14px;letter-spacing:.02em;white-space:nowrap}.ce-office-select{font-size:12px;padding:2px 6px;border-radius:4px;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);cursor:pointer;outline:none}.ce-mode-btn{display:flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary);font-size:12px;cursor:pointer;transition:all .15s}.ce-mode-btn:hover{background:var(--surface-hover);color:var(--text)}.ce-mode-btn.active{border-color:var(--accent);color:var(--text);background:var(--accent-soft)}.ce-mode-btn.active.wall{border-color:var(--red);background:#f8717126}.ce-mode-btn.active.floor{border-color:var(--green);background:#34d39926}.ce-mode-btn.active.seat{border-color:var(--yellow);background:#fbbf2426}.ce-mode-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.ce-mode-dot.wall{background:var(--red)}.ce-mode-dot.floor{background:var(--green)}.ce-mode-dot.seat{background:var(--yellow)}.ce-btn{padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary);font-size:12px;cursor:pointer;transition:all .15s;white-space:nowrap}.ce-btn:hover{background:var(--surface-hover);color:var(--text)}.ce-btn.active{border-color:var(--accent);color:var(--accent)}.ce-btn.apply{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}.ce-btn.apply:hover{filter:brightness(1.1)}.ce-btn.apply.success{background:var(--green);border-color:var(--green)}.ce-btn.upload{background:linear-gradient(135deg,var(--accent-soft),var(--surface));border-color:var(--accent);color:var(--accent);font-weight:600}.ce-btn.upload:hover{filter:brightness(1.1)}.ce-btn.danger{color:var(--red)}.ce-btn.danger:hover{background:#f8717126;border-color:var(--red)}.ce-zoom-label{font-size:11px;color:var(--text-secondary);min-width:36px;text-align:center;font-variant-numeric:tabular-nums}.ce-stats{font-size:11px;color:var(--text-secondary);gap:10px;margin-left:auto}.ce-body{flex:1;display:flex;overflow:hidden}.ce-canvas-wrap{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:16px;background:#1a1a2e}.ce-canvas-wrap canvas{box-shadow:0 4px 24px #00000080;border:1px solid var(--border);border-radius:4px}.ce-export-panel{width:380px;min-width:320px;border-left:1px solid var(--border);background:var(--bg-elevated);display:flex;flex-direction:column;overflow:hidden}.ce-export-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);font-size:12px;color:var(--text-secondary)}.ce-export-textarea{flex:1;padding:12px;background:var(--bg);color:var(--text);border:none;font-family:JetBrains Mono,Fira Code,Menlo,monospace;font-size:11px;line-height:1.5;resize:none;outline:none} +.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.org-tab{display:flex;flex-direction:column;height:100%;min-width:0;overflow-y:auto;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 26%,var(--bg) 74%) 0%,var(--bg) 240px);color:var(--text)}.org-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary);font-size:14px}.org-empty{padding:32px;text-align:center;color:var(--text-secondary);font-size:13px}.org-header{display:flex;align-items:center;justify-content:space-between;padding:18px 28px 16px;border-bottom:1px solid var(--border);flex-shrink:0;gap:18px;flex-wrap:wrap;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 34%,var(--bg) 66%),color-mix(in srgb,var(--bg) 92%,var(--bg-elevated) 8%));backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.org-header-main{display:flex;flex-direction:column;gap:7px;min-width:min(100%,260px);flex:1 1 420px}.org-eyebrow{display:inline-flex;align-items:center;gap:7px;color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-eyebrow-separator{color:color-mix(in srgb,var(--text-secondary) 46%,transparent)}.org-title-row{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.org-title{font-size:21px;font-weight:650;margin:0;max-width:min(58vw,680px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:0}.org-version-badge{font-size:10px;padding:2px 7px;border-radius:4px;background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent);font-family:JetBrains Mono,SF Mono,monospace}.org-state-badge,.org-profile-badge{font-size:10px;padding:3px 8px;border-radius:4px;white-space:nowrap}.org-state-badge--editable{background:color-mix(in srgb,var(--green) 11%,transparent);color:var(--green);border:1px solid color-mix(in srgb,var(--green) 20%,transparent)}.org-state-badge--readonly{background:color-mix(in srgb,var(--text-secondary) 10%,transparent);color:var(--text-secondary);border:1px solid color-mix(in srgb,var(--border) 80%,transparent)}.org-profile-badge{background:color-mix(in srgb,var(--yellow) 11%,transparent);color:var(--yellow)}.org-header-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-width:0}.org-meta-pill,.org-meta-code{min-height:22px;display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);background:color-mix(in srgb,var(--bg) 58%,transparent);color:var(--text-secondary);font-size:10.5px;line-height:1;text-transform:capitalize}.org-meta-code{max-width:min(52vw,360px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:none;color:var(--text)}.org-meta-pill--runtime{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 22%,transparent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.org-meta-pill--saved{color:var(--green);border-color:color-mix(in srgb,var(--green) 24%,transparent);background:color-mix(in srgb,var(--green) 8%,transparent)}.org-control-panel{display:flex;align-items:flex-end;justify-content:flex-end;gap:10px;flex:0 1 430px;min-width:min(100%,300px)}.org-switcher{display:flex;flex-direction:column;gap:5px;min-width:210px;flex:1 1 240px}.org-switcher-label{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-switcher-select-wrap{position:relative;display:block}.org-switcher-select{width:100%;min-height:36px;padding:7px 34px 7px 11px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:7px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 76%,var(--bg) 24%),color-mix(in srgb,var(--bg) 88%,var(--bg-elevated) 12%));color:var(--text);font:inherit;font-size:12px;outline:none;cursor:pointer;appearance:none}.org-switcher-select option{background:var(--bg-elevated);color:var(--text)}.org-switcher-select-wrap:after{content:"";position:absolute;right:12px;top:50%;width:7px;height:7px;border-right:1.5px solid var(--text-secondary);border-bottom:1.5px solid var(--text-secondary);transform:translateY(-68%) rotate(45deg);pointer-events:none}.org-switcher-select:hover,.org-switcher-select:focus{border-color:color-mix(in srgb,var(--accent) 38%,var(--border))}.org-create-trigger{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:8px 14px;border:1px solid color-mix(in srgb,var(--accent) 36%,transparent);border-radius:7px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 22%,var(--bg-elevated) 78%),color-mix(in srgb,var(--accent) 13%,var(--bg) 87%));color:color-mix(in srgb,var(--accent) 84%,var(--text) 16%);font-size:12px;font-weight:700;white-space:nowrap;cursor:pointer;box-shadow:0 10px 24px color-mix(in srgb,var(--accent) 10%,transparent);transition:transform .15s,border-color .15s,background .15s}.org-create-trigger:hover{border-color:color-mix(in srgb,var(--accent) 54%,transparent);transform:translateY(-1px)}.org-create-trigger-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:color-mix(in srgb,var(--accent) 18%,transparent);font-size:16px;line-height:1}.org-stats-strip{display:grid;grid-template-columns:repeat(4,minmax(104px,auto));gap:7px;align-items:center;justify-content:flex-end;flex:1 1 460px}.org-stat{display:inline-flex;align-items:center;gap:6px;justify-content:center;font-size:11px;color:var(--text-secondary);min-height:32px;padding:6px 11px;background:color-mix(in srgb,var(--bg-elevated) 58%,var(--bg) 42%);border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);white-space:nowrap}.org-stat b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums}.org-stat-icon{width:13px;height:13px;opacity:.72}.org-subtabs{display:flex;gap:2px;padding:0 28px;border-bottom:1px solid var(--border);flex-shrink:0;background:color-mix(in srgb,var(--bg) 92%,transparent);position:sticky;top:0;z-index:10;overflow-x:auto}.org-subtab{display:inline-flex;align-items:center;gap:6px;padding:11px 16px 12px;margin-bottom:-1px;font-size:12px;color:var(--text-secondary);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap}.org-subtab:hover:not(.org-subtab--active){color:var(--text)}.org-subtab--active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.org-subtab-icon{width:14px;height:14px;opacity:.6;flex-shrink:0}.org-subtab--active .org-subtab-icon{opacity:1}.org-subtab-label{font-size:12px}.org-subtab-count{font-size:10px;padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 70%,var(--bg) 30%);color:var(--text-secondary);font-weight:500}.org-subtab--active .org-subtab-count{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}.org-toast{padding:8px 16px;margin:0 20px;font-size:12px;border-radius:6px;cursor:pointer;flex-shrink:0}.org-toast--info{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 25%,transparent)}.org-toast--warn{background:color-mix(in srgb,var(--yellow) 12%,transparent);color:var(--yellow);border:1px solid color-mix(in srgb,var(--yellow) 25%,transparent)}.org-toast--ok{background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green);border:1px solid color-mix(in srgb,var(--green) 25%,transparent)}.org-toast--error{background:color-mix(in srgb,var(--red) 12%,transparent);color:var(--red);border:1px solid color-mix(in srgb,var(--red) 25%,transparent)}.org-tab-content{flex:1 0 auto;overflow:visible;padding:16px 28px 28px}.org-create-backdrop{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,#05070b 68%,transparent)}.org-create-modal{width:min(720px,100%);max-height:min(720px,calc(100vh - 48px));display:flex;flex-direction:column;gap:16px;padding:20px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:8px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 88%,var(--bg) 12%),color-mix(in srgb,var(--bg) 94%,var(--bg-elevated) 6%));box-shadow:0 28px 80px #00000075;overflow:hidden}.org-create-header,.org-create-actions,.org-create-review-head,.org-create-review-row{display:flex;align-items:center}.org-create-header{justify-content:space-between;gap:16px;flex-shrink:0}.org-create-eyebrow{display:block;margin-bottom:5px;color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.org-create-title{margin:0;color:var(--text);font-size:19px;font-weight:650;letter-spacing:0}.org-create-close,.org-create-icon-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:6px;background:color-mix(in srgb,var(--bg) 60%,transparent);color:var(--text-secondary);cursor:pointer}.org-create-close{width:30px;height:30px;font-size:14px}.org-create-close:hover,.org-create-icon-btn:hover:not(:disabled){color:var(--text);border-color:color-mix(in srgb,var(--text-secondary) 34%,var(--border))}.org-create-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;flex-shrink:0}.org-create-step{display:inline-flex;align-items:center;gap:8px;min-width:0;min-height:34px;padding:7px 10px;border:1px solid color-mix(in srgb,var(--border) 74%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 58%,transparent);color:var(--text-secondary);font-size:12px;font-weight:600}.org-create-step span{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:color-mix(in srgb,var(--text-secondary) 12%,transparent);color:var(--text-secondary);font-size:10px}.org-create-step--active{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));color:var(--text);background:color-mix(in srgb,var(--accent) 9%,var(--bg) 91%)}.org-create-step--active span,.org-create-step--done span{background:color-mix(in srgb,var(--accent) 24%,transparent);color:var(--accent)}.org-create-panel{min-height:180px;overflow:auto;padding:4px 2px}.org-create-field{display:flex;flex-direction:column;gap:8px}.org-create-field span{color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.org-create-field input,.org-create-member-row input,.org-create-member-row select,.org-create-member-row textarea{min-height:38px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 64%,transparent);color:var(--text);font:inherit;font-size:13px;outline:none}.org-create-field input:focus,.org-create-member-row input:focus,.org-create-member-row select:focus,.org-create-member-row textarea:focus{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.org-create-member-row select option{background:var(--bg-elevated);color:var(--text)}.org-create-member-row textarea{grid-column:1 / -1;min-height:62px;line-height:1.45;resize:vertical}.org-create-member-list{display:flex;flex-direction:column;gap:8px}.org-create-member-row{display:grid;grid-template-columns:minmax(130px,1fr) minmax(150px,1.5fr) minmax(120px,.8fr) 34px;gap:8px;align-items:center}.org-create-icon-btn{width:34px;height:34px;font-size:16px}.org-create-icon-btn:disabled{cursor:not-allowed;opacity:.42}.org-create-add{margin-top:12px;min-height:34px;padding:7px 12px;border:1px dashed color-mix(in srgb,var(--accent) 34%,var(--border));border-radius:7px;background:color-mix(in srgb,var(--accent) 7%,transparent);color:var(--accent);font-size:12px;font-weight:700;cursor:pointer}.org-create-review{display:flex;flex-direction:column;gap:8px}.org-create-review-head,.org-create-review-row{justify-content:space-between;gap:14px;min-height:38px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--border) 74%,transparent);border-radius:7px;background:color-mix(in srgb,var(--bg) 56%,transparent)}.org-create-review-head span,.org-create-review-row strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.org-create-review-head b,.org-create-review-row span{flex-shrink:0;color:var(--text-secondary);font-size:12px;font-weight:600}.org-create-review-row span{display:inline-flex;align-items:center;gap:6px}.org-create-review-row em{padding:2px 6px;border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-style:normal;font-size:10px;font-weight:700;text-transform:uppercase}.org-create-error{padding:9px 11px;border:1px solid color-mix(in srgb,var(--red) 28%,transparent);border-radius:7px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);font-size:12px}.org-create-actions{justify-content:flex-end;gap:8px;flex-shrink:0}@media(max-width:1040px){.org-title{max-width:100%}.org-control-panel{flex:1 1 100%;justify-content:stretch}.org-stats-strip{grid-template-columns:repeat(2,minmax(128px,1fr));justify-content:stretch;width:100%}}@media(max-width:760px){.org-header{padding:14px 16px 12px}.org-header-main{flex-basis:100%}.org-title{max-width:100%;font-size:18px}.org-stats-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.org-control-panel{flex-direction:column;align-items:stretch}.org-switcher{min-width:0}.org-create-trigger{width:100%}.org-subtabs{padding:0 16px}.org-tab-content{padding:12px 16px 18px}.org-create-backdrop{align-items:flex-start;padding:14px}.org-create-modal{max-height:calc(100vh - 28px);padding:16px}.org-create-steps,.org-create-member-row{grid-template-columns:1fr}.org-create-icon-btn{width:100%}}@media(max-width:460px){.org-header{gap:12px}.org-stats-strip{grid-template-columns:1fr}.org-meta-code{max-width:100%}}.btn,.oc-btn-primary,.oc-btn-ghost,.oc-btn-danger,.mkt-btn,.mkt-btn-primary,.mkt-btn-ghost,.pkg-btn,.pkg-btn-primary,.pkg-btn-secondary,.pkg-btn-danger,.pkg-btn-ghost,.cfg-io-btn,.cfg-io-btn-primary,.cfg-io-btn-ghost,.tm-detail-hire-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;font-size:12px;font-weight:500;border-radius:var(--radius-xs);border:1px solid transparent;background:transparent;color:var(--text);cursor:pointer;white-space:nowrap;font-family:inherit;transition:background .15s,border-color .15s,color .15s,opacity .15s}.btn:disabled,.oc-btn-primary:disabled,.mkt-btn-primary:disabled,.pkg-btn-primary:disabled,.pkg-btn-danger:disabled,.cfg-io-btn:disabled,.cfg-io-btn-primary:disabled,.cfg-io-btn-ghost:disabled,.tm-detail-hire-btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary,.oc-btn-primary,.mkt-btn-primary,.pkg-btn-primary,.cfg-io-btn-primary,.tm-detail-hire-btn{background:var(--accent);color:var(--white);border-color:var(--accent)}.btn-primary:hover:not(:disabled),.oc-btn-primary:hover:not(:disabled),.mkt-btn-primary:hover:not(:disabled),.pkg-btn-primary:hover:not(:disabled),.cfg-io-btn-primary:hover:not(:disabled),.tm-detail-hire-btn:hover:not(:disabled){opacity:.88}.btn-ghost,.oc-btn-ghost,.mkt-btn-ghost,.pkg-btn-ghost,.cfg-io-btn-ghost{background:transparent;color:var(--text-secondary);border-color:var(--border)}.btn-ghost:hover:not(:disabled),.oc-btn-ghost:hover:not(:disabled),.mkt-btn-ghost:hover:not(:disabled),.pkg-btn-ghost:hover:not(:disabled),.cfg-io-btn-ghost:hover:not(:disabled){color:var(--text);border-color:var(--text-secondary)}.btn-secondary,.pkg-btn-secondary{background:var(--bg-secondary);color:var(--text);border-color:var(--border)}.btn-secondary:hover:not(:disabled),.pkg-btn-secondary:hover:not(:disabled){border-color:var(--accent)}.btn-danger,.oc-btn-danger,.pkg-btn-danger{background:transparent;color:var(--red);border-color:var(--red)}.btn-danger:hover:not(:disabled),.oc-btn-danger:hover:not(:disabled),.pkg-btn-danger:hover:not(:disabled){background:var(--red);color:var(--white)}.btn-sm,.mkt-btn-sm,.pkg-btn-sm{padding:4px 10px;font-size:11px}.btn-lg,.qs-create-btn{padding:8px 24px;font-size:14px}.btn-icon,.pkg-btn-icon,.cfg-io-btn-icon{width:14px;height:14px;opacity:.9;flex-shrink:0}.btn-primary .btn-icon,.btn-primary .pkg-btn-icon,.btn-primary .cfg-io-btn-icon,.oc-btn-primary img,.mkt-btn-primary img,.pkg-btn-primary .pkg-btn-icon,.cfg-io-btn-primary .cfg-io-btn-icon{filter:brightness(0) invert(1)}.btn:focus-visible,.oc-btn-primary:focus-visible,.oc-btn-ghost:focus-visible,.oc-btn-danger:focus-visible,.mkt-btn:focus-visible,.mkt-btn-primary:focus-visible,.mkt-btn-ghost:focus-visible,.pkg-btn:focus-visible,.pkg-btn-primary:focus-visible,.pkg-btn-secondary:focus-visible,.pkg-btn-danger:focus-visible,.pkg-btn-ghost:focus-visible,.cfg-io-btn:focus-visible,.cfg-io-btn-primary:focus-visible,.cfg-io-btn-ghost:focus-visible,.tm-detail-hire-btn:focus-visible,.org-subtab:focus-visible,.mkt-pill:focus-visible,.myorg-inline-btn:focus-visible,.myorg-reset-btn:focus-visible,.wfe-action-btn:focus-visible,.wfe-pattern-btn:focus-visible,.oc-action-btn:focus-visible,.oc-advanced-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-xs)}.oc-form-row input:focus-visible,.oc-form-row select:focus-visible,.oc-form-row textarea:focus-visible,.cfg-io-textarea:focus-visible,.mkt-search:focus-visible,.pkg-search:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.btn:focus:not(:focus-visible),.org-subtab:focus:not(:focus-visible),.mkt-pill:focus:not(:focus-visible){outline:none}.team-view{display:flex;flex-direction:column;gap:14px;padding:0;min-width:0}.team-command-bar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:14px;align-items:center;padding:12px 14px;border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 34%,var(--bg) 66%)}.team-command-bar--readonly{background:color-mix(in srgb,var(--bg-elevated) 24%,var(--bg) 76%)}.team-command-copy{min-width:0;display:flex;flex-direction:column;gap:3px}.team-command-eyebrow{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.team-command-title{color:var(--text);font-size:13px;font-weight:600}.team-command-metrics{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end;color:var(--text-secondary);font-size:11px}.team-command-metrics span{min-height:24px;display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:999px;background:color-mix(in srgb,var(--bg) 54%,transparent);white-space:nowrap}.team-command-metrics b{color:var(--text);font-variant-numeric:tabular-nums}.team-command-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.team-readonly-strip{padding:9px 12px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:8px;background:color-mix(in srgb,var(--text-secondary) 6%,transparent);color:var(--text-secondary);font-size:12px}.team-roster-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(282px,1fr));gap:12px}.team-roster-card{min-width:0;background:color-mix(in srgb,var(--bg) 84%,var(--bg-elevated) 16%);border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;padding:11px 12px;transition:border-color .15s ease,background .15s ease}.team-roster-card:hover{background:color-mix(in srgb,var(--bg-elevated) 48%,var(--bg) 52%);border-color:color-mix(in srgb,var(--border-hover) 78%,var(--accent) 22%)}.team-roster-card-header{display:flex;align-items:center;gap:9px;margin-bottom:10px;padding-bottom:9px;border-bottom:1px solid color-mix(in srgb,var(--border) 72%,transparent)}.team-roster-card-icon{width:22px;height:22px;padding:4px;border-radius:7px;background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 18%,transparent)}.team-roster-role-name{font-size:13px;font-weight:600;color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-roster-count{font-size:10px;color:var(--text-secondary);padding:2px 7px;background:color-mix(in srgb,var(--bg-elevated) 78%,var(--bg) 22%);border-radius:999px;font-variant-numeric:tabular-nums}.team-roster-emp{display:flex;align-items:center;gap:9px;padding:7px 0}.team-roster-emp+.team-roster-emp{border-top:1px solid color-mix(in srgb,var(--border) 50%,transparent)}.team-roster-emp-avatar{width:24px;height:24px;border-radius:50%;opacity:.58}.team-roster-emp-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.team-roster-emp-name{font-size:12.5px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.team-roster-seniority{font-size:9px;text-transform:uppercase;letter-spacing:.3px;font-weight:600}.team-roster-seniority--junior{color:var(--text-secondary)}.team-roster-seniority--mid{color:var(--yellow)}.team-roster-seniority--senior{color:var(--accent)}.team-roster-seniority--lead{color:var(--green)}.team-roster-badge{font-size:9px;padding:3px 8px;border-radius:999px;font-weight:500;white-space:nowrap}.team-roster-badge--active{background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green)}.team-roster-deploy-btn{display:inline-flex;align-items:center;gap:4px;font-size:10px;padding:3px 10px;border:1px solid var(--accent);border-radius:999px;background:none;color:var(--accent);cursor:pointer;transition:all .15s}.team-roster-deploy-btn:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.team-roster-deploy-icon{width:11px;height:11px}.team-roster-vacant{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0}.team-roster-vacant-text{font-size:11px;color:var(--text-secondary);font-style:italic}.team-roster-hire-btn{font-size:10px;padding:3px 10px;border:1px solid var(--yellow);border-radius:999px;background:none;color:var(--yellow);cursor:pointer;transition:all .15s}.team-roster-hire-btn:hover{background:color-mix(in srgb,var(--yellow) 12%,transparent)}.wfe-container{background:var(--bg-secondary);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}.wfe-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.wfe-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.wfe-profile-badge{font-size:9px;text-transform:uppercase;letter-spacing:.4px;padding:2px 6px;border-radius:3px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border)}.wfe-header-actions{display:flex;gap:8px;margin-left:auto}.wfe-action-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;font-size:11px;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.wfe-action-btn:hover{border-color:var(--accent);color:var(--text)}.wfe-action-icon{width:13px;height:13px;opacity:.6}.wfe-save-btn{border-color:var(--green, #27ae60);color:var(--green, #27ae60)}.wfe-save-btn:hover{background:var(--green, #27ae60);color:var(--white)}.wfe-dag-wrap{overflow-x:auto;overflow-y:visible;padding:8px 0;min-height:0}.wfe-dag-node{cursor:pointer}.wfe-dag-node:hover{box-shadow:0 0 0 2px var(--accent);border-radius:6px}.wfe-node-editing{box-shadow:0 0 0 2px var(--accent)}.wfe-editor{background:var(--bg);border:1px solid var(--accent);border-radius:8px;padding:14px;margin-top:12px}.wfe-editor-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.wfe-editor-title{font-size:12px;font-weight:600;color:var(--text)}.wfe-editor-close{font-size:18px;background:none;border:none;color:var(--text-secondary);cursor:pointer}.wfe-editor-close:hover{color:var(--text)}.wfe-add-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:12px}.wfe-readonly{opacity:.6}.wfe-inline-input,.wfe-inline-select{margin-left:6px;padding:3px 6px;font-size:11px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:4px;color:var(--text)}.wfe-hint{font-size:10px;color:var(--text-secondary);font-style:italic}.wfe-empty{text-align:center;padding:30px;color:var(--text-secondary);font-size:13px}.wfe-empty-hint{font-size:11px;opacity:.7}.myorg-container{padding:0 4px;overflow-y:auto;flex:1}.myorg-section{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 30%,var(--bg) 70%),color-mix(in srgb,var(--bg) 94%,var(--bg-elevated) 6%));border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px;padding:15px 16px 16px;margin-bottom:0}.myorg-section-header{display:flex;align-items:center;gap:9px;margin-bottom:14px;flex-wrap:wrap}.myorg-section-icon{width:16px;height:16px;opacity:.68}.myorg-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.myorg-section-count{font-size:11px;color:var(--text-secondary)}.myorg-section-spacer{flex:1 1 auto;min-width:12px}.myorg-section-note{color:var(--text-secondary);font-size:11px;font-variant-numeric:tabular-nums}.myorg-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:14px;margin-bottom:12px}.myorg-form-title{font-size:13px;font-weight:600;color:var(--text);margin:0 0 10px}.myorg-roster-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.myorg-roster-role{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:10px}.myorg-roster-role-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.myorg-roster-role-name{font-size:12px;font-weight:600;color:var(--text)}.myorg-roster-role-count{font-size:10px;color:var(--text-secondary)}.myorg-roster-emp{display:flex;align-items:center;gap:6px;padding:3px 0}.myorg-roster-emp-name{font-size:11px;color:var(--text)}.myorg-roster-seniority{font-size:9px;padding:1px 5px;border-radius:3px;text-transform:uppercase;letter-spacing:.3px}.myorg-seniority-junior{background:var(--bg-secondary);color:var(--text-secondary)}.myorg-seniority-mid{background:#3498db26;color:var(--accent)}.myorg-seniority-senior{background:#27ae6026;color:var(--green, #27ae60)}.myorg-roster-office-badge{font-size:9px;color:var(--green, #27ae60);border:1px solid var(--green, #27ae60);padding:0 4px;border-radius:3px}.myorg-roster-vacant{font-size:10px;color:var(--text-secondary);font-style:italic}.myorg-empty-hint{font-size:11px;color:var(--text-secondary);padding:12px 0}.myorg-collapsible{border:1px solid var(--border);border-radius:8px;margin-bottom:8px;overflow:hidden}.myorg-collapsible-toggle{width:100%;display:flex;align-items:center;gap:8px;padding:10px 14px;font-size:12px;background:var(--bg-secondary);border:none;color:var(--text);cursor:pointer;text-align:left}.myorg-collapsible-toggle:hover{background:var(--bg)}.myorg-toggle-icon{font-size:10px;color:var(--text-secondary);width:12px}.myorg-collapsible-title{font-weight:500}.myorg-collapsible-count{font-size:10px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:8px}.myorg-collapsible-extra{margin-left:auto}.myorg-collapsible-body{padding:12px 14px}.myorg-inline-btn{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--accent) 16%,transparent);border-radius:999px;padding:5px 9px;cursor:pointer}.myorg-inline-btn:hover{background:color-mix(in srgb,var(--accent) 13%,transparent)}.myorg-inline-icon{width:12px;height:12px}.myorg-action-bar{display:flex;justify-content:flex-end;padding:0}.myorg-reset-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;font-size:11px;color:var(--red);background:color-mix(in srgb,var(--red) 4%,transparent);border:1px solid color-mix(in srgb,var(--red) 30%,transparent);border-radius:999px;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.myorg-reset-btn:hover{background:color-mix(in srgb,var(--red) 10%,transparent);border-color:var(--red)}.myorg-reset-icon{width:12px;height:12px;filter:hue-rotate(0deg)}.oc-node-resp{font-size:10px;color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}.oc-icon-picker-trigger{position:relative}.oc-icon-preview-btn{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text);font-size:12px;transition:border-color .15s}.oc-icon-preview-btn:hover{border-color:var(--accent)}.oc-icon-preview-img{width:24px;height:24px;border-radius:4px}.oc-icon-placeholder{opacity:.35}.oc-icon-preview-label{color:var(--text-secondary);font-size:11px}.oc-icon-clear-btn{padding:2px 8px;font-size:10px;color:var(--text-secondary);background:none;border:1px solid var(--border);border-radius:4px;cursor:pointer;margin-left:6px}.oc-icon-clear-btn:hover{color:var(--red);border-color:var(--red)}.oc-icon-gallery{position:absolute;top:100%;left:0;z-index:20;display:grid;grid-template-columns:repeat(6,1fr);gap:4px;padding:8px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px #0000004d;margin-top:4px;width:240px}.oc-icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border:1px solid transparent;border-radius:6px;background:none;cursor:pointer;transition:all .15s}.oc-icon-option:hover{background:color-mix(in srgb,var(--accent) 10%,transparent);border-color:var(--accent)}.oc-icon-option--active{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:var(--accent)}.oc-icon-option-img{width:24px;height:24px}.qs-wizard{padding:24px;max-width:640px;margin:0 auto}.qs-loading{display:flex;align-items:center;justify-content:center;gap:10px;padding:48px 24px;color:var(--accent);font-size:14px}.qs-header{display:flex;align-items:center;gap:14px;margin-bottom:20px}.qs-header-icon{width:40px;height:40px;flex-shrink:0}.qs-header-title{margin:0;font-size:18px;font-weight:600;color:var(--text)}.qs-header-sub{margin:2px 0 0;font-size:12px;color:var(--text-dim)}.qs-link-btn{background:none;border:none;color:var(--accent);cursor:pointer;padding:0;font-size:12px;text-decoration:underline}.qs-progress{display:flex;gap:4px;margin-bottom:20px;padding:8px 0;border-bottom:1px solid var(--border)}.qs-step{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;font-size:11px;font-weight:500;color:var(--text-dim);background:var(--bg-card);transition:all .2s}.qs-step-active{background:var(--accent);color:var(--white)}.qs-step-done{background:var(--green);color:var(--white)}.qs-step-icon{width:14px;height:14px;filter:grayscale(1) opacity(.5)}.qs-step-active .qs-step-icon,.qs-step-done .qs-step-icon{filter:brightness(10)}.qs-panel{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:20px}.qs-panel h4{margin:0 0 4px;font-size:15px;font-weight:600;color:var(--text)}.qs-hint{font-size:12px;color:var(--text-dim);margin:0 0 16px}.qs-members{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}.qs-member-row{display:flex;gap:6px;align-items:center}.qs-member-name{flex:1;min-width:0;padding:6px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:12px}.qs-member-resp{flex:1.5;min-width:0;padding:6px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:12px}.qs-member-parent{flex:1;min-width:0;padding:6px 8px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:11px}.qs-remove-btn{background:none;border:none;cursor:pointer;padding:4px;opacity:.4;transition:opacity .15s}.qs-remove-btn:hover{opacity:1}.qs-remove-icon{width:14px;height:14px}.qs-add-member{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:6px;border:1px dashed var(--border);background:none;color:var(--accent);font-size:12px;cursor:pointer;margin-bottom:16px}.qs-add-member:hover{background:var(--bg)}.qs-add-icon{width:14px;height:14px}.qs-nav{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;border-top:1px solid var(--border)}.qs-patterns{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.qs-pattern-card{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:8px;border:2px solid var(--border);cursor:pointer;transition:border-color .15s}.qs-pattern-card:hover{border-color:var(--accent)}.qs-pattern-selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.qs-pattern-card input[type=radio]{margin-top:3px;flex-shrink:0}.qs-pattern-label{font-size:13px;font-weight:600;color:var(--text)}.qs-pattern-desc{font-size:11px;color:var(--text-dim);margin:2px 0}.qs-pattern-preview{font-size:11px;font-family:SF Mono,Fira Code,monospace;color:var(--accent);margin-top:4px}.qs-preview{margin-bottom:8px}.qs-preview-section{margin-bottom:12px}.qs-preview-section h5{margin:0 0 6px;font-size:12px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.qs-preview-member{font-size:12px;padding:4px 0;color:var(--text)}.qs-preview-resp{color:var(--text-dim)}.qs-preview-parent{color:var(--text-dim);font-size:11px}@media(max-width:980px){.team-command-bar{grid-template-columns:1fr;align-items:stretch}.team-command-metrics,.team-command-actions{justify-content:flex-start}}@media(max-width:560px){.team-roster-grid{grid-template-columns:1fr}.team-command-actions{align-items:stretch}.team-command-actions>*{justify-content:center}.myorg-section{padding:12px}.qs-wizard{padding:16px 0}.qs-member-row{flex-direction:column;align-items:stretch}}.org-dag{display:flex;align-items:flex-start;gap:0;overflow-x:auto;padding:16px 0 24px}.org-dag-group-wrap{display:flex;align-items:center;gap:0}.org-dag-arrow{display:flex;align-items:center;justify-content:center;opacity:.4;padding:0 8px;flex-shrink:0}.org-dag-arrow-icon{width:16px;height:16px;filter:brightness(0) invert(.6)}.org-dag-group{display:flex;flex-direction:column;gap:8px;position:relative}.org-dag-parallel{border:1px dashed var(--border);border-radius:8px;padding:8px;background:#ffffff03}.org-dag-parallel-label{position:absolute;top:-8px;left:8px;font-size:9px;padding:0 4px;background:var(--bg);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.org-dag-node{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px;min-width:180px;max-width:240px}.org-dag-node-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.org-dag-node-title{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-dag-node-role{font-size:10px;padding:1px 5px;border-radius:3px;background:#6366f114;color:var(--accent);white-space:nowrap;flex-shrink:0}.org-dag-node-id{font-size:10px;color:var(--text-secondary);font-family:JetBrains Mono,SF Mono,monospace;margin-bottom:6px}.org-dag-gate{display:flex;align-items:center;gap:4px;font-size:10px;padding:3px 6px;border-radius:4px;margin-bottom:4px}.org-gate-review{background:#eab30814;color:var(--yellow)}.org-gate-approval{background:#34d39914;color:var(--green)}.org-gate-human_confirmation{background:#ef444414;color:var(--red)}.org-gate-icon{width:12px;height:12px}.org-gate-reviewer{opacity:.7;font-style:italic}.org-dag-strategy{font-size:9px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px}.org-dag-legend{display:flex;gap:16px;padding-top:12px;border-top:1px solid var(--border);margin-top:8px}.org-dag-legend-item{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-secondary)}.org-gate-icon-sm{font-size:12px}.org-channels-grid,.org-connectors-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-bottom:24px}.org-channel-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px}.org-ch-running{border-color:color-mix(in srgb,var(--green) 35%,var(--border))}.org-ch-disabled{opacity:.5}.org-ch-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.org-ch-dot{width:8px;height:8px;border-radius:50%;background:var(--text-secondary);opacity:.3;flex-shrink:0}.org-ch-dot.configured{background:var(--yellow);opacity:.6}.org-ch-dot.ready{background:var(--yellow);opacity:1}.org-ch-dot.running{background:var(--green);opacity:1;animation:pulse-dot 2s ease-in-out infinite}.org-ch-name{font-size:13px;font-weight:500;text-transform:capitalize}.org-ch-status-row{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:4px}.org-ch-badge{font-size:9px;padding:1px 5px;border-radius:3px;background:#ffffff0a;color:var(--text-secondary)}.org-ch-enabled{color:var(--accent);background:#6366f114}.org-ch-configured{color:var(--yellow);background:#eab30814}.org-ch-running-badge{color:var(--green);background:#34d39914}.org-ch-available{color:var(--green)}.org-ch-off{color:var(--text-secondary)}.org-ch-delivery{font-size:10px;color:var(--text-secondary);margin-top:4px}.org-ch-error{font-size:10px;color:var(--red);margin-top:4px;word-break:break-all}.org-connector-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px}.org-conn-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.org-conn-name{font-size:13px;font-weight:500}.org-conn-type{font-size:9px;padding:1px 5px;border-radius:3px;background:#6366f114;color:var(--accent);text-transform:uppercase}.org-conn-desc{font-size:11px;color:var(--text-secondary);line-height:1.3;margin-bottom:6px}.org-conn-actions{display:flex;flex-wrap:wrap;gap:3px}.org-conn-action-tag{font-size:9px;padding:1px 5px;border-radius:3px;background:#34d39914;color:var(--green);font-family:JetBrains Mono,SF Mono,monospace}.org-emp-card{cursor:pointer;transition:background .15s}.org-emp-card:hover{background:#ffffff0a}.org-emp-selected{background:#6366f10f;border:1px solid rgba(99,102,241,.15);border-radius:6px}.org-emp-detail{margin-top:8px;padding:10px;background:#ffffff05;border-top:1px solid var(--border);border-radius:0 0 6px 6px}.org-emp-detail-title{font-size:11px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.org-emp-detail-block{margin-bottom:8px}.org-emp-detail-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}.org-emp-detail-text{font-size:11px;color:var(--text-secondary);line-height:1.4;white-space:pre-wrap;max-height:120px;overflow-y:auto}.org-emp-detail-stats{display:flex;flex-wrap:wrap;gap:6px}.org-stat-tag{font-size:10px;padding:2px 6px;border-radius:3px;background:#6366f114;color:var(--accent);font-family:JetBrains Mono,SF Mono,monospace}.org-reorg-refresh:hover{color:var(--text);border-color:var(--text-secondary)}.org-reorg-list{display:flex;flex-direction:column;gap:10px}.org-reorg-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px}.org-reorg-proposed{border-left:3px solid var(--accent)}.org-reorg-approved,.org-reorg-applied{border-left:3px solid var(--green)}.org-reorg-denied,.org-reorg-failed{border-left:3px solid var(--red)}.org-reorg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.org-reorg-title{font-size:14px;font-weight:600}.org-reorg-status{font-size:10px;text-transform:uppercase;font-weight:600;letter-spacing:.3px}.org-reorg-summary{font-size:12px;color:var(--text);line-height:1.4;margin-bottom:6px}.org-reorg-change-item code{font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;color:var(--accent)}.org-reorg-actions{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--border)}.org-reorg-approve{background:var(--green);color:var(--white);border:none;padding:5px 14px;border-radius:4px;font-size:11px;cursor:pointer;font-weight:500}.org-reorg-approve:hover{opacity:.9}.org-reorg-deny{background:none;border:1px solid var(--red);color:var(--red);padding:5px 14px;border-radius:4px;font-size:11px;cursor:pointer}.org-reorg-deny:hover{background:var(--red);color:var(--white)}.tm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}.tm-card{display:flex;flex-direction:column;gap:12px;padding:16px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 1px 2px #0000004d,0 8px 24px #0000001f;cursor:pointer;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease;min-height:196px}.tm-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--accent) 42%,var(--border));box-shadow:inset 0 1px color-mix(in srgb,var(--text) 8%,transparent),0 2px 4px #00000052,0 14px 32px #00000038}.tm-card-head{display:flex;align-items:flex-start;gap:12px;min-width:0}.tm-card-avatar{position:relative;flex-shrink:0;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 22%,transparent),inset 0 1px color-mix(in srgb,var(--text) 6%,transparent);font-family:inherit;transition:background .18s ease}.tm-card:hover .tm-card-avatar{background:color-mix(in srgb,var(--accent) 20%,transparent)}.tm-card-avatar-emoji{font-size:22px;line-height:1}.tm-card-avatar-mono{font-size:15px;font-weight:700;letter-spacing:.02em}.tm-card-head-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.tm-card-name-row{display:flex;align-items:center;gap:8px;min-width:0}.tm-card-name{font-size:14px;font-weight:600;color:var(--text);letter-spacing:-.01em;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.tm-card-agent-badge{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:9.5px;font-weight:500;padding:2px 6px;border-radius:4px;background:var(--bg-secondary);color:var(--text-secondary);letter-spacing:.01em;white-space:nowrap;flex-shrink:0}.tm-card-category{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:9.5px;font-weight:600;color:var(--text-secondary);opacity:.75;text-transform:uppercase;letter-spacing:.08em}.tm-card-category:before{content:"· ";opacity:.5}.tm-card-body{display:flex;flex-direction:column;gap:4px;flex:1;min-height:0}.tm-card-vibe{font-size:12px;color:var(--text);opacity:.86;font-style:italic;line-height:1.4;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.tm-card-desc{font-size:12px;color:var(--text-secondary);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tm-card-chips{display:flex;flex-wrap:wrap;gap:4px}.tm-card-chip{font-size:10px;font-weight:500;padding:2px 7px;border-radius:4px;background:color-mix(in srgb,var(--accent) 9%,transparent);color:color-mix(in srgb,var(--accent) 85%,var(--text) 15%);letter-spacing:.01em;white-space:nowrap}.tm-card-chip-more{opacity:.6}.tm-card-footer{display:flex;justify-content:flex-end;padding-top:10px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);margin-top:auto}.tm-card-hire-btn{background:transparent;border:1px solid color-mix(in srgb,var(--accent) 55%,var(--border));color:var(--accent);font-size:11px;font-weight:600;letter-spacing:.01em;padding:5px 14px;border-radius:6px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}.tm-card-hire-btn:hover:not(:disabled){background:var(--accent);color:var(--white);border-color:var(--accent)}.tm-card-hire-btn:active:not(:disabled){transform:translateY(1px)}.tm-card-hire-btn:disabled{opacity:.55;cursor:default;border-color:var(--border);color:var(--text-secondary)}.tm-detail-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#0000008c}.tm-detail-modal{background:var(--bg);border:1px solid var(--border);border-radius:12px;width:480px;max-width:90vw;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.tm-detail-header{display:flex;align-items:center;gap:12px;padding:20px;border-bottom:2px solid var(--border)}.tm-detail-emoji{font-size:48px;line-height:1;flex-shrink:0}.tm-detail-name{font-size:18px;font-weight:600;margin:0}.tm-detail-category{font-size:11px;color:var(--text-secondary);text-transform:capitalize}.tm-detail-close{margin-left:auto;background:none;border:none;color:var(--text-secondary);font-size:22px;cursor:pointer;line-height:1;padding:4px}.tm-detail-close:hover{color:var(--text)}.tm-detail-body{flex:1;overflow-y:auto;padding:20px}.tm-detail-vibe{margin:0 0 16px;padding:10px 14px;border-left:3px solid var(--accent);background:#6366f10a;font-size:13px;font-style:italic;color:var(--text-secondary);line-height:1.4}.tm-detail-desc{font-size:13px;color:var(--text);line-height:1.5;margin:0 0 16px}.tm-detail-section{margin-bottom:14px}.tm-detail-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.4px;margin-bottom:6px}.tm-detail-tags{display:flex;flex-wrap:wrap;gap:4px}.org-domain-tag,.org-tool-tag{font-size:10px;font-weight:500;padding:2px 7px;border-radius:4px;letter-spacing:.01em}.org-domain-tag{background:color-mix(in srgb,var(--accent) 10%,transparent);color:color-mix(in srgb,var(--accent) 85%,var(--text) 15%)}.org-tool-tag{background:color-mix(in srgb,var(--green) 10%,transparent);color:color-mix(in srgb,var(--green) 85%,var(--text) 15%)}.tm-detail-footer{display:flex;align-items:center;gap:10px;padding:16px 20px;border-top:1px solid var(--border)}.pkg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.pkg-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;padding:14px;transition:border-color .15s}.pkg-card:hover{border-color:var(--accent)}.pkg-card-header{display:flex;align-items:center;gap:10px;margin-bottom:10px}.pkg-card-icon{width:32px;height:32px;opacity:.85}.pkg-card-title-wrap{display:flex;flex-direction:column;gap:2px}.pkg-card-name{font-size:13px;font-weight:600;color:var(--text)}.pkg-card-version{font-size:11px;color:var(--text-secondary)}.pkg-card-stats{display:flex;gap:14px;margin-bottom:8px}.pkg-card-stat{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-secondary)}.pkg-stat-icon{width:13px;height:13px;opacity:.6}.pkg-card-date{font-size:10px;color:var(--text-secondary);margin-bottom:10px}.pkg-card-actions{display:flex;justify-content:flex-end}.mkt-container{padding:0 4px;overflow-y:auto;flex:1}.mkt-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:10px}.mkt-search-wrap{flex:1;position:relative}.mkt-search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:13px;height:13px;opacity:.4}.mkt-search{width:100%;padding:7px 10px 7px 30px;font-size:12px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text)}.mkt-search:focus{border-color:var(--accent);outline:none}.mkt-count{font-size:11px;color:var(--text-secondary);white-space:nowrap}.mkt-filters{margin-bottom:14px}.mkt-pill-row{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px}.mkt-pill{padding:3px 10px;font-size:11px;border-radius:12px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s;text-transform:capitalize;display:inline-flex;align-items:center;gap:4px}.mkt-pill:hover{border-color:var(--accent);color:var(--text)}.mkt-pill.active{background:var(--accent);color:var(--white);border-color:var(--accent)}.mkt-pill-pattern{border-style:dashed}.mkt-pill-pattern.active{border-style:solid}.mkt-section{margin-bottom:20px}.mkt-section-header{display:flex;align-items:center;gap:8px;margin-bottom:10px}.mkt-section-icon{width:18px;height:18px;opacity:.6}.mkt-section-title{font-size:13px;font-weight:600;color:var(--text);margin:0}.mkt-section-count{font-size:11px;color:var(--text-secondary);background:var(--bg-secondary);padding:1px 6px;border-radius:8px}.mkt-arch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px}.mkt-arch-card{background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .2s}.mkt-arch-card:hover{border-color:var(--accent);box-shadow:0 2px 12px #0000001a}.mkt-arch-header{display:flex;align-items:flex-start;gap:10px;margin-bottom:6px}.mkt-arch-emoji{font-size:26px;line-height:1}.mkt-arch-title-wrap{flex:1}.mkt-arch-name{font-size:14px;font-weight:600;color:var(--text);display:block}.mkt-arch-badges{display:flex;gap:6px;margin-top:3px}.mkt-arch-category{font-size:9px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:3px}.mkt-arch-pattern{font-size:9px;color:var(--accent);display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border:1px dashed var(--accent);border-radius:3px;opacity:.8}.mkt-arch-dag-summary{font-family:SF Mono,Fira Code,monospace;font-size:11px;color:var(--accent);background:var(--bg);padding:4px 8px;border-radius:4px;margin-bottom:8px;overflow-x:auto;white-space:nowrap;letter-spacing:.2px}.mkt-arch-desc{font-size:12px;color:var(--text-secondary);line-height:1.4;margin-bottom:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.mkt-arch-stats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:6px}.mkt-arch-stat{font-size:10px;color:var(--text-secondary);background:var(--bg);padding:2px 6px;border-radius:4px}.mkt-arch-tags{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:10px}.mkt-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border)}.mkt-arch-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px}.mkt-installed-badge{font-size:11px;color:var(--green, #27ae60);font-weight:500;padding:3px 8px;border:1px solid var(--green, #27ae60);border-radius:4px}.mkt-empty{text-align:center;padding:40px;color:var(--text-secondary);font-size:13px}.mkt-modal-overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px}.mkt-modal{background:var(--bg);border:1px solid var(--border);border-radius:12px;width:700px;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.mkt-modal-header{display:flex;align-items:center;gap:12px;padding:18px 20px;border-bottom:2px solid var(--border)}.mkt-modal-emoji{font-size:32px;line-height:1}.mkt-modal-name{font-size:18px;font-weight:700;color:var(--text);margin:0}.mkt-modal-category{font-size:11px;color:var(--text-secondary);text-transform:uppercase}.mkt-modal-close{margin-left:auto;font-size:24px;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:0 4px}.mkt-modal-close:hover{color:var(--text)}.mkt-modal-body{padding:20px;overflow-y:auto;flex:1}.mkt-modal-desc{font-size:13px;color:var(--text);line-height:1.5;margin:0 0 16px}.mkt-modal-section{margin-bottom:16px}.mkt-modal-label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:8px}.mkt-modal-tags{display:flex;flex-wrap:wrap;gap:4px}.mkt-role-list{display:flex;flex-direction:column;gap:8px}.mkt-role-item{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:10px 12px}.mkt-role-name{font-size:13px;font-weight:600;color:var(--text);margin-bottom:3px}.mkt-role-name code{font-size:10px;font-weight:400;color:var(--text-secondary);margin-left:4px}.mkt-role-resp{font-size:11px;color:var(--text-secondary);margin-bottom:3px}.mkt-role-meta{font-size:10px;color:var(--text-secondary)}.mkt-role-meta code{font-size:10px;background:var(--bg);padding:0 3px;border-radius:2px;margin:0 2px}.mkt-dag-wrap{overflow-x:auto}.mkt-modal-footer{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;align-items:center;gap:10px}.htr-overlay{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.htr-modal{width:100%;max-width:520px;max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);border:1px solid var(--border);border-radius:8px;box-shadow:0 18px 60px #00000061}.htr-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:16px 18px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.htr-title{margin:0 0 2px;font-size:14px;font-weight:600;color:var(--text)}.htr-subtitle{margin:0;font-size:11.5px;color:var(--text-secondary)}.htr-close{background:transparent;border:none;color:var(--text-secondary);font-size:18px;line-height:1;cursor:pointer}.htr-close:hover{color:var(--text)}.htr-body{display:flex;flex-direction:column;gap:8px;padding:14px 18px;overflow:auto}.htr-empty{padding:24px 8px;text-align:center}.htr-empty-title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--text)}.htr-empty-hint{margin:0;font-size:11.5px;color:var(--text-secondary)}.htr-role-list,.tm-detail-role-list{display:flex;flex-direction:column;gap:4px}.tm-detail-role-list{margin-top:4px}.htr-role-row,.tm-detail-role-row{display:flex;flex-direction:column;gap:2px;padding:9px 12px;text-align:left;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);cursor:pointer;transition:border-color .12s ease,background .12s ease}.htr-role-row:hover,.tm-detail-role-row:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.htr-role-row.is-selected,.tm-detail-role-row.is-selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.htr-role-name,.tm-detail-role-name{font-size:12.5px;font-weight:600;color:var(--text)}.htr-role-resp,.tm-detail-role-resp{font-size:11px;color:var(--text-secondary);line-height:1.35}.htr-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.tm-detail-vacancy-empty{margin:4px 0 0;font-size:11.5px;color:var(--text-secondary);font-style:italic}.cfg-io-panel{background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;padding:16px;margin-top:16px;display:flex;flex-direction:column;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 1px 2px #0000004d,0 8px 24px #0000001f}.cfg-io-header{padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:4px}.cfg-io-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.cfg-io-subtitle{font-size:12px;color:var(--text-secondary);margin:4px 0 0;line-height:1.5}.cfg-io-section{padding:14px 0;display:flex;flex-direction:column;gap:10px}.cfg-io-section+.cfg-io-section{border-top:1px solid var(--border)}.cfg-io-section-header{display:flex;align-items:center;gap:8px}.cfg-io-section-icon{width:16px;height:16px;opacity:.6}.cfg-io-section-title{font-size:12px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.4px}.cfg-io-upload-row{display:flex;align-items:center}.cfg-io-file-label{display:inline-flex;align-items:center;gap:12px;cursor:pointer}.cfg-io-file-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.cfg-io-file-btn{padding:6px 14px;font-size:12px;font-weight:500;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text);transition:border-color .15s,color .15s}.cfg-io-file-label:hover .cfg-io-file-btn{border-color:var(--accent);color:var(--accent)}.cfg-io-file-input:focus-visible+.cfg-io-file-btn{outline:2px solid var(--accent);outline-offset:2px}.cfg-io-file-name{font-size:12px;color:var(--text-secondary);font-style:italic}.cfg-io-textarea{width:100%;padding:10px 12px;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;line-height:1.5;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);box-sizing:border-box;resize:vertical;min-height:140px}.cfg-io-textarea:focus{border-color:var(--accent);outline:none}.cfg-io-actions{display:flex;gap:8px;margin-top:2px;flex-wrap:wrap}.cfg-io-preview{display:flex;gap:12px;padding:12px 14px;background:color-mix(in srgb,var(--green) 8%,transparent);border:1px solid color-mix(in srgb,var(--green) 28%,transparent);border-radius:var(--radius-xs);margin-top:4px}.cfg-io-preview-icon{width:20px;height:20px;flex-shrink:0;margin-top:1px}.cfg-io-preview-body{flex:1;min-width:0}.cfg-io-preview-title{font-size:12px;font-weight:600;color:var(--green);margin-bottom:8px}.cfg-io-preview-stats{display:flex;gap:20px;flex-wrap:wrap}.cfg-io-preview-stat{display:flex;flex-direction:column;gap:2px}.cfg-io-stat-label{font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.cfg-io-stat-value{font-size:16px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.cfg-io-error{display:flex;gap:12px;padding:12px 14px;background:color-mix(in srgb,var(--red) 8%,transparent);border:1px solid color-mix(in srgb,var(--red) 28%,transparent);border-radius:var(--radius-xs);margin-top:4px}.cfg-io-error-icon{width:20px;height:20px;flex-shrink:0;margin-top:1px}.cfg-io-error-body{flex:1;min-width:0}.cfg-io-error-title{font-size:12px;font-weight:600;color:var(--red);margin-bottom:6px}.cfg-io-error-text{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--text);background:var(--bg-secondary);padding:8px 10px;border-radius:4px;margin:0;overflow-x:auto;white-space:pre-wrap;word-break:break-word;line-height:1.4}.oc-container{background:var(--bg-secondary);border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}.oc-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.oc-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.oc-header-actions{display:flex;gap:8px}.oc-action-btn{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;font-size:11px;font-weight:500;border:1px solid var(--border);border-radius:6px;background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .15s}.oc-action-btn:hover{border-color:var(--accent);color:var(--text)}.oc-action-icon{width:13px;height:13px;opacity:.6}.oc-empty{text-align:center;padding:30px;color:var(--text-secondary)}.oc-empty-icon{width:40px;height:40px;opacity:.3;margin-bottom:8px}.oc-empty-hint{font-size:11px;opacity:.7}.oc-tree{overflow-x:auto;overflow-y:visible;padding:10px 0;min-height:0}.oc-node{display:flex;flex-direction:column;align-items:center}.oc-children{display:flex;gap:16px;padding-top:20px;position:relative}.oc-children:before{content:"";position:absolute;top:0;left:50%;width:0;height:20px;border-left:1px solid var(--border)}.oc-node:not(.oc-node-root){position:relative}.oc-node:not(.oc-node-root):before{content:"";position:absolute;top:-20px;left:50%;width:0;height:20px;border-left:1px solid var(--border)}.oc-node-card{background:var(--bg);border:1px solid var(--border);border-left:3px solid var(--green);border-radius:8px;padding:8px 12px;min-width:120px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.oc-node-card:hover{border-color:var(--accent);box-shadow:0 2px 8px #00000014}.oc-card-editing{border-color:var(--accent);box-shadow:0 0 0 2px rgba(var(--accent-rgb, 52,152,219),.2)}.oc-card-owner{background:var(--accent);color:var(--white);border-left-color:var(--accent);cursor:default}.oc-node-top{display:flex;align-items:center;gap:6px}.oc-node-icon{width:20px;height:20px;flex-shrink:0;border-radius:4px}.oc-node-name{font-size:12px;font-weight:600;color:var(--text)}.oc-card-owner .oc-node-name{color:var(--white)}.oc-node-status{width:6px;height:6px;border-radius:50%;flex-shrink:0}.oc-node-emp{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}.oc-emp-chip{font-size:9px;padding:1px 5px;background:var(--bg-secondary);border-radius:3px;color:var(--text-secondary)}.oc-node-vacant{font-size:10px;color:var(--yellow, #f39c12);font-style:italic;margin-top:3px}.oc-editor{background:var(--bg);border:1px solid var(--accent);border-radius:8px;padding:14px 16px;margin-top:6px;min-width:300px;width:max-content;max-width:420px}.oc-form-row{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.oc-form-row label{font-size:11px;font-weight:600;color:var(--text-secondary)}.oc-form-row input,.oc-form-row select{width:100%;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);box-sizing:border-box}.oc-form-row input:focus,.oc-form-row select:focus{border-color:var(--accent);outline:none}.oc-spawn-checks{display:flex;flex-direction:column;gap:6px}.oc-check-label{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary);cursor:pointer}.oc-check-label input[type=checkbox],.oc-check-label input[type=radio]{accent-color:var(--accent);width:15px;height:15px;flex-shrink:0}.oc-form-actions{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}.oc-add-form{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:14px}.wfe-pattern-strip{display:flex;align-items:center;gap:6px;margin:0 0 10px;padding:5px 8px;background:var(--bg);border-radius:8px;border:1px solid var(--border)}.wfe-pattern-label{font-size:11px;color:var(--text-dim);margin-right:4px;font-weight:500}.wfe-pattern-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;font-size:11px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--text-dim);cursor:pointer;transition:all .15s}.wfe-pattern-btn:hover{background:color-mix(in srgb,var(--accent) 8%,transparent);color:var(--text)}.wfe-pattern-btn--active{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent);font-weight:600}.wfe-pattern-icon{width:14px;height:14px;filter:brightness(0) invert(.7)}.wfe-pattern-btn--active .wfe-pattern-icon{filter:none}.flow-dag-container{position:relative;overflow-x:auto;overflow-y:visible;padding:20px 16px;min-height:120px}.flow-dag-node{position:absolute;z-index:2;cursor:pointer;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:8px 12px;transition:box-shadow .15s,opacity .2s}.flow-dag-node:hover{box-shadow:0 0 0 2px var(--accent)}.flow-dag-node--selected{box-shadow:0 0 0 2px var(--accent);border-color:var(--accent)}.flow-dag-node--dimmed{opacity:.18}.flow-dag-node-header{display:flex;justify-content:space-between;align-items:center;gap:6px}.flow-dag-node-icon{width:16px;height:16px;flex-shrink:0;border-radius:3px}.flow-dag-node-title{font-size:12px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flow-dag-node-role{font-size:10px;color:var(--accent);font-weight:500;white-space:nowrap}.flow-dag-gate{display:flex;align-items:center;gap:4px;margin-top:4px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:500}.flow-dag-gate--review{background:color-mix(in srgb,var(--yellow) 15%,transparent);color:var(--yellow)}.flow-dag-gate--approval{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.flow-dag-gate-icon{width:12px;height:12px}.flow-dag-gate-reviewer{font-style:italic;opacity:.7}.flow-dag-parallel-group{border:1px dashed var(--border);border-radius:10px;z-index:0}.flow-dag-parallel-label{position:absolute;top:-8px;left:10px;font-size:9px;padding:0 6px;background:var(--bg);color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;font-weight:500}.flow-dag-svg{z-index:1}.flow-dag-insert-btn circle{transition:all .15s}.flow-dag-insert-btn:hover circle{stroke:var(--accent);fill:color-mix(in srgb,var(--accent) 12%,var(--bg-card))}.flow-dag-insert-btn:hover text{fill:var(--accent)}.wfe-connect-active{background:color-mix(in srgb,var(--accent) 15%,transparent);border-color:var(--accent);color:var(--accent)}.wfe-connect-hint{padding:8px 14px;font-size:12px;color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,transparent);border:1px solid color-mix(in srgb,var(--accent) 20%,transparent);border-radius:6px;margin:0 0 8px}.wfe-hint-cancel{background:none;border:none;color:var(--text-secondary);cursor:pointer;text-decoration:underline;font-size:12px;padding:0;margin-left:8px}.flow-dag-port{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--border);border:1.5px solid var(--bg-card);z-index:3;transition:all .15s}.flow-dag-port--in{left:-4px;top:50%;transform:translateY(-50%)}.flow-dag-port--out{right:-4px;top:50%;transform:translateY(-50%)}.flow-dag-port--source{background:var(--accent);box-shadow:0 0 4px var(--accent)}.flow-dag-port--target{background:var(--green);box-shadow:0 0 4px var(--green)}.flow-dag-port--active{background:var(--yellow);box-shadow:0 0 6px var(--yellow);width:10px;height:10px;right:-5px}.oc-advanced-toggle{margin:4px 0;border-top:1px solid var(--border);padding-top:8px}.oc-advanced-btn{display:flex;align-items:center;gap:5px;padding:4px 0;background:none;border:none;color:var(--accent);font-size:11px;font-weight:600;cursor:pointer}.oc-advanced-btn:hover{opacity:.8}.oc-advanced-section{margin-top:4px}.oc-exec-options{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.oc-exec-options .oc-check-label{white-space:nowrap}.oc-exec-agent-select{margin-top:6px;width:100%;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);box-sizing:border-box}.oc-form-row textarea{width:100%;padding:8px 10px;font-size:12px;font-family:inherit;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);line-height:1.5;box-sizing:border-box}.oc-form-row textarea:focus{border-color:var(--accent);outline:none}.wfe-policy-settings{padding:8px 4px}.wfe-policy-settings .oc-form-row label{font-size:12px;font-weight:600;color:var(--text);margin-bottom:2px}.wfe-policy-settings .oc-spawn-checks{gap:8px;padding-left:2px}.wfe-policy-settings .oc-check-label{font-size:12px;color:var(--text-secondary)}.wfe-policy-settings .wfe-max-workers{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary)}.wfe-policy-settings .wfe-max-workers input{width:60px;padding:4px 8px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text)}.wfe-policy-settings .oc-form-actions{margin-top:16px}.oc-canvas-node{position:relative;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 82%,var(--bg) 18%),color-mix(in srgb,var(--bg) 72%,var(--bg-elevated) 28%));border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px;padding:12px 14px;min-width:208px;max-width:228px;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 5%,transparent),0 10px 28px #0000002e;font-family:inherit;transition:border-color .18s ease,box-shadow .18s ease,background .18s ease}.oc-canvas-node:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:inset 0 1px color-mix(in srgb,var(--text) 7%,transparent),0 14px 32px #0000003d}.oc-canvas-node.is-owner{min-width:232px;max-width:256px;padding:14px 16px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 17%,var(--bg-elevated) 83%),color-mix(in srgb,var(--bg) 66%,var(--accent) 8%));border-color:color-mix(in srgb,var(--accent) 42%,var(--border));color:var(--text);box-shadow:inset 0 1px color-mix(in srgb,var(--accent) 28%,transparent),0 16px 34px #00000042}.oc-canvas-node.is-owner:hover{border-color:color-mix(in srgb,var(--accent) 90%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--accent) 34%,transparent),0 18px 42px #0000004d}.oc-canvas-node.is-selected{border-color:var(--accent);box-shadow:inset 0 1px color-mix(in srgb,var(--text) 10%,transparent),0 0 0 2px var(--accent),0 0 0 6px color-mix(in srgb,var(--accent) 12%,transparent),0 8px 24px #0003}.oc-canvas-node.is-drop-target{border-color:var(--green);box-shadow:0 0 0 2px var(--green),0 0 24px color-mix(in srgb,var(--green) 30%,transparent);transform:scale(1.03)}.oc-canvas-node-row{display:flex;align-items:center;gap:10px;min-width:0}.oc-canvas-node-chip{position:relative;flex-shrink:0;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--accent) 10%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 18%,transparent),inset 0 1px color-mix(in srgb,var(--text) 8%,transparent);transition:background .18s ease,box-shadow .18s ease}.oc-canvas-node:hover .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 18%,transparent)}.oc-canvas-node.is-selected .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 24%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 40%,transparent),inset 0 1px color-mix(in srgb,var(--text) 10%,transparent)}.is-owner .oc-canvas-node-chip{background:color-mix(in srgb,var(--accent) 28%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 34%,transparent),inset 0 1px color-mix(in srgb,var(--text) 7%,transparent)}.oc-canvas-node-chip-icon{width:18px;height:18px;display:block;background-color:var(--accent);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;transition:background-color .18s ease}.is-owner .oc-canvas-node-chip-icon{background-color:var(--accent)}.oc-canvas-node-text{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.oc-canvas-node-name{font-size:13.5px;font-weight:600;color:var(--text);letter-spacing:0;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.is-owner .oc-canvas-node-name{color:var(--text)}.oc-canvas-node-meta{display:flex;gap:6px;align-items:center;font-size:10.5px;color:var(--text-secondary);line-height:1.2}.is-owner .oc-canvas-node-meta{color:var(--text-secondary)}.oc-canvas-node-id{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oc-canvas-node-person{font-weight:600;color:var(--accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.is-owner .oc-canvas-node-person{color:var(--text)}.oc-canvas-node-badge{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent);padding:1px 7px;border-radius:10px;font-weight:600;font-size:10px;letter-spacing:.02em}.is-owner .oc-canvas-node-badge{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent)}.oc-canvas-handle{width:8px;height:8px;background:var(--accent);border:none;opacity:0}.oc-canvas-node:hover .oc-canvas-handle{opacity:.5}.react-flow__background{background:color-mix(in srgb,var(--bg) 92%,#000 8%)!important}.react-flow__edge-path{stroke:color-mix(in srgb,var(--text-secondary) 70%,var(--border) 30%);stroke-width:1.4;opacity:.48}.react-flow__edge:hover .react-flow__edge-path{stroke:var(--accent);opacity:1}.react-flow__minimap{background:color-mix(in srgb,var(--bg-elevated) 62%,transparent)!important;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);border-radius:8px;opacity:.78;width:150px!important;height:92px!important;right:16px!important;bottom:16px!important}.react-flow__controls{left:16px!important;bottom:16px!important;background:color-mix(in srgb,var(--bg-elevated) 72%,transparent);border:1px solid color-mix(in srgb,var(--border) 82%,transparent);border-radius:8px;overflow:hidden}.react-flow__controls button{background:transparent;color:var(--text-secondary);border-bottom:1px solid var(--border)}.react-flow__controls button:hover{background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent)}.ri-panel{position:absolute;top:0;right:0;bottom:0;width:340px;display:flex;flex-direction:column;background:color-mix(in srgb,var(--bg-elevated) 72%,transparent);backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);border-left:1px solid var(--border);box-shadow:-8px 0 32px #00000040;z-index:20;font-size:13px}.ri-panel-header{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.ri-panel-icon{width:22px;height:22px;opacity:.9;flex-shrink:0}.ri-panel-title-wrap{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.ri-panel-title{margin:0;font-size:14px;font-weight:600;color:var(--text);letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ri-panel-id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;color:var(--text-secondary);opacity:.8}.ri-panel-close{padding:4px 8px}.ri-panel-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 0}.ri-panel-body::-webkit-scrollbar{width:8px}.ri-panel-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.ri-panel-body::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.ri-group{border-bottom:1px solid var(--border)}.ri-group:last-child{border-bottom:none}.ri-group-header{width:100%;display:flex;align-items:center;gap:8px;padding:10px 16px;background:transparent;border:none;cursor:pointer;color:var(--text);font-size:12px;font-weight:600;letter-spacing:.01em;transition:background .15s}.ri-group-header:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.ri-group-caret{font-size:10px;color:var(--text-secondary);width:12px;text-align:center;transition:transform .15s}.ri-group.is-expanded .ri-group-caret{color:var(--accent)}.ri-group-title{flex:1;text-align:left}.ri-group-body{padding:4px 16px 14px;display:flex;flex-direction:column;gap:12px}.ri-field{display:flex;flex-direction:column;gap:4px}.ri-field-label{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.6px}.ri-field-control{display:flex;flex-direction:column;gap:4px}.ri-text-input,.ri-select,.ri-textarea{width:100%;padding:7px 10px;font-size:12px;font-family:inherit;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);box-sizing:border-box;transition:border-color .15s,box-shadow .15s}.ri-text-input:focus,.ri-select:focus,.ri-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.ri-textarea{resize:vertical;min-height:60px;line-height:1.5}.ri-textarea-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.ri-meta-value{font-size:12px;color:var(--text);padding:4px 0}.ri-radio-group{display:flex;gap:4px;flex-wrap:wrap}.ri-radio{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);font-size:11px;color:var(--text-secondary);cursor:pointer;transition:border-color .15s,color .15s}.ri-radio:has(input:checked){border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.ri-radio input{margin:0;accent-color:var(--accent)}.ri-icon-picker{position:relative}.ri-icon-picker-trigger{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);cursor:pointer;transition:border-color .15s}.ri-icon-picker-trigger:hover:not(:disabled){border-color:var(--accent)}.ri-icon-picker-current{width:18px;height:18px;opacity:.9}.ri-icon-picker-label{font-size:11px;color:var(--text-secondary)}.ri-icon-picker-popover{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:280px;max-height:240px;overflow-y:auto;padding:8px;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-xs);box-shadow:0 8px 24px #00000059;display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.ri-icon-option{display:flex;align-items:center;justify-content:center;padding:6px;background:transparent;border:1px solid transparent;border-radius:var(--radius-xs);cursor:pointer;transition:background .15s,border-color .15s}.ri-icon-option:hover{background:color-mix(in srgb,var(--accent) 12%,transparent);border-color:var(--accent)}.ri-icon-option.is-active{background:color-mix(in srgb,var(--accent) 20%,transparent);border-color:var(--accent)}.ri-icon-option img{width:20px;height:20px;opacity:.85}.ri-multiselect{position:relative}.ri-chips{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.ri-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 10px;background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 28%,transparent);border-radius:999px;color:var(--accent);font-size:11px;font-weight:500}.ri-chip-x{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:50%;background:transparent;color:var(--accent);font-size:12px;cursor:pointer;opacity:.65;transition:opacity .15s,background .15s}.ri-chip-x:hover{opacity:1;background:color-mix(in srgb,var(--accent) 20%,transparent)}.ri-chip-add{padding:2px 10px;font-size:11px;color:var(--text-secondary);background:transparent;border:1px dashed var(--border);border-radius:999px;cursor:pointer;transition:border-color .15s,color .15s}.ri-chip-add:hover{color:var(--accent);border-color:var(--accent)}.ri-multiselect-popover{position:absolute;z-index:30;top:calc(100% + 4px);left:0;min-width:180px;max-height:200px;overflow-y:auto;padding:4px;background:color-mix(in srgb,var(--bg-elevated) 94%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--border);border-radius:var(--radius-xs);box-shadow:0 8px 24px #00000059;display:flex;flex-direction:column}.ri-multiselect-option{padding:6px 10px;text-align:left;background:transparent;border:none;border-radius:var(--radius-xs);color:var(--text);font-size:12px;cursor:pointer;transition:background .15s}.ri-multiselect-option:hover{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.ri-toolcheck{display:flex;flex-direction:column;gap:10px}.ri-toolcheck-group{border:1px solid var(--border);border-radius:var(--radius-xs);padding:6px 10px 8px;margin:0;background:color-mix(in srgb,var(--bg) 40%,transparent)}.ri-toolcheck-legend{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--text-secondary);padding:0 6px;font-weight:600}.ri-toolcheck-items{display:grid;grid-template-columns:1fr 1fr;gap:2px 8px}.ri-toolcheck-item{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text-secondary);cursor:pointer;padding:2px 0;transition:color .15s}.ri-toolcheck-item:has(input:checked){color:var(--text)}.ri-toolcheck-item input{margin:0;accent-color:var(--accent)}.ri-toolcheck-name{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px}.ri-panel-footer{padding:12px 16px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;flex-shrink:0}.rt-container{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0;overflow:hidden}.rt-bulk-bar{display:flex;align-items:center;gap:12px;padding:8px 14px;background:color-mix(in srgb,var(--accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--accent) 28%,transparent);border-radius:var(--radius-xs);font-size:12px}.rt-bulk-count{font-weight:600;color:var(--accent);margin-right:auto}.rt-bulk-select{padding:4px 8px;font-size:11px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text)}.rt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.rt-table{width:100%;border-collapse:separate;border-spacing:0;font-size:12px}.rt-table thead th{position:sticky;top:0;z-index:1;background:var(--bg-elevated);padding:10px 12px;text-align:left;font-weight:600;font-size:10px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none}.rt-th-sortable{cursor:pointer;transition:color .15s}.rt-th-sortable:hover{color:var(--accent)}.rt-sort-caret{font-size:9px;color:var(--accent)}.rt-table tbody td{padding:8px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent);vertical-align:middle}.rt-row{cursor:pointer;transition:background .1s}.rt-row:hover{background:color-mix(in srgb,var(--accent) 5%,transparent)}.rt-row-checked{background:color-mix(in srgb,var(--accent) 8%,transparent)}.rt-row-checked:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.rt-row-active{background:color-mix(in srgb,var(--accent) 14%,transparent)}.rt-row-active:hover{background:color-mix(in srgb,var(--accent) 18%,transparent)}.rt-cell-icon{width:18px;height:18px;opacity:.85;display:block}.rt-cell-name{font-weight:500;color:var(--text)}.rt-cell-id{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;color:var(--text-secondary);opacity:.85}.rt-cell-count{font-variant-numeric:tabular-nums;color:var(--text)}.rt-cell-select{padding:4px 8px;font-size:11px;background:transparent;border:1px solid transparent;border-radius:var(--radius-xs);color:var(--text);cursor:pointer;transition:border-color .15s,background .15s}.rt-cell-select:hover{border-color:var(--border);background:var(--bg-secondary)}.rt-cell-select:focus{outline:none;border-color:var(--accent);background:var(--bg-secondary)}.rt-cell-action{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-xs);color:var(--text-secondary);font-size:12px;cursor:pointer;opacity:0;transition:background .15s,color .15s,opacity .15s}.rt-row:hover .rt-cell-action{opacity:1}.rt-cell-action:hover{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}.rt-inline-input{width:100%;padding:4px 6px;font-size:12px;background:var(--bg-secondary);border:1px solid var(--accent);border-radius:var(--radius-xs);color:var(--text);outline:none;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.rt-empty{text-align:center;padding:48px 16px;color:var(--text-secondary);font-size:13px}.se-container{display:flex;flex-direction:column;gap:10px;flex:1;min-height:480px;position:relative}.se-toolbar{display:flex;align-items:center;gap:10px;padding:0;flex-shrink:0;flex-wrap:wrap}.se-toolbar-actions{display:flex;gap:7px;margin-left:auto;align-items:center;justify-content:flex-end;flex-wrap:wrap;min-width:0}.se-toolbar-actions--readonly{color:var(--text-secondary)}.se-saved-org-control{display:inline-flex;align-items:center;gap:7px;min-width:0}.se-toolbar-label{color:var(--text-secondary);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.se-readonly-pill{min-height:26px;display:inline-flex;align-items:center;padding:4px 10px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);border-radius:999px;background:color-mix(in srgb,var(--text-secondary) 7%,transparent);color:var(--text-secondary);font-size:11px;white-space:nowrap}.se-view-switcher{display:inline-flex;padding:2px;background:color-mix(in srgb,var(--bg-elevated) 72%,var(--bg) 28%);border:1px solid color-mix(in srgb,var(--border) 86%,transparent);border-radius:8px}.se-view-btn{padding:5px 14px;font-size:12px;font-weight:500;background:transparent;border:none;border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:background .15s,color .15s}.se-view-btn:hover{color:var(--text)}.se-view-btn.is-active{background:color-mix(in srgb,var(--accent) 18%,var(--bg-elevated) 82%);color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 16%,transparent)}.se-body{position:relative;height:clamp(430px,calc(100vh - 330px),660px);min-height:430px;background:color-mix(in srgb,var(--bg) 92%,#000 8%);border:1px solid color-mix(in srgb,var(--border) 84%,transparent);border-radius:8px;overflow:hidden}.se-body>div,.se-body>div>.react-flow,.se-body .react-flow{width:100%!important;height:100%!important;position:relative;z-index:2}.se-body:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 6%,transparent) 0%,transparent 18%),radial-gradient(ellipse at center,transparent 58%,color-mix(in srgb,var(--bg) 86%,#000000) 100%);border-radius:inherit}.se-loading{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--text-secondary);font-size:13px}.se-export-bar{display:flex;justify-content:flex-end;padding:0;margin-top:-2px}.oc-canvas-node.is-drop-target{animation:oc-drop-pulse .8s cubic-bezier(.4,0,.2,1) 1}@keyframes oc-drop-pulse{0%{box-shadow:0 0 0 2px var(--green),0 0 #0000}50%{box-shadow:0 0 0 2px var(--green),0 0 28px color-mix(in srgb,var(--green) 45%,transparent)}to{box-shadow:0 0 0 2px var(--green),0 0 18px color-mix(in srgb,var(--green) 25%,transparent)}}@media(prefers-reduced-motion:reduce){.react-flow__edge,.oc-canvas-node,.oc-canvas-node.is-drop-target,.ri-panel,.se-view-btn{animation:none!important;transition:none!important}}.sos-wrap{position:relative;display:inline-flex;align-items:center}.sos-pill{display:inline-flex;align-items:center;gap:8px;padding:5px 10px 5px 8px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text);font-size:12px;font-weight:500;letter-spacing:0;cursor:pointer;font-family:inherit;transition:background .15s ease,border-color .15s ease;max-width:240px}.sos-pill:hover{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));background:var(--bg-elevated)}.sos-pill[data-open=true]{border-color:var(--accent);background:color-mix(in srgb,var(--bg-elevated) 88%,var(--accent) 8%)}.sos-pill-glyph{color:var(--accent);opacity:.9;flex-shrink:0}.sos-pill-name{font-weight:600;letter-spacing:0;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sos-pill-name--placeholder{opacity:.55;font-weight:500;font-style:italic}.sos-pill-dirty{width:6px;height:6px;border-radius:50%;background:var(--yellow);box-shadow:0 0 0 2px color-mix(in srgb,var(--yellow) 30%,transparent);flex-shrink:0}.sos-pill-caret{color:var(--text-secondary);transition:transform .15s ease;flex-shrink:0}.sos-pill[data-open=true] .sos-pill-caret{transform:rotate(180deg)}.se-toolbar-divider{width:1px;align-self:stretch;background:var(--border);margin:2px 4px}.sos-popover{position:absolute;top:calc(100% + 6px);right:0;width:min(420px,calc(100vw - 32px));min-width:min(320px,calc(100vw - 32px));max-width:calc(100vw - 32px);z-index:80;background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;box-shadow:0 12px 28px #0000003d;overflow:hidden}.sos-search-row{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.sos-search-glyph{color:var(--text-secondary);opacity:.8;flex-shrink:0}.sos-search-input{flex:1;background:transparent;border:none;outline:none;color:var(--text);font-size:12px;font-family:inherit}.sos-search-input::placeholder{color:var(--text-secondary);opacity:.7}.sos-search-hint{font-family:ui-monospace,SFMono-Regular,JetBrains Mono,Menlo,monospace;font-size:10px;color:var(--text-secondary);opacity:.6;padding:1px 5px;border-radius:3px;background:color-mix(in srgb,var(--bg-secondary) 60%,transparent);flex-shrink:0;letter-spacing:.05em}.sos-list{max-height:280px;overflow-y:auto;padding:4px 0}.sos-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 12px 7px 16px;cursor:pointer;transition:background .1s ease}.sos-row:hover,.sos-row[data-highlighted=true]{background:color-mix(in srgb,var(--accent) 8%,transparent)}.sos-row--active:before{content:"";position:absolute;left:6px;top:8px;bottom:8px;width:2px;border-radius:1px;background:var(--accent)}.sos-row-meta{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.sos-row-name{font-size:12.5px;font-weight:600;color:var(--text);letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sos-row--active .sos-row-name{color:var(--accent)}.sos-row-stats{font-size:10.5px;color:var(--text-secondary);letter-spacing:.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sos-row-delete{opacity:.5;transition:opacity .12s ease,background .12s ease,color .12s ease;background:transparent;border:none;padding:3px 9px;border-radius:4px;color:var(--text-secondary);font-size:10.5px;font-family:inherit;letter-spacing:.02em;cursor:pointer;flex-shrink:0}.sos-row:hover .sos-row-delete,.sos-row[data-highlighted=true] .sos-row-delete{opacity:1}.sos-row-delete:hover{background:color-mix(in srgb,var(--red) 22%,transparent);color:var(--red)}.sos-row-delete--confirm{opacity:1!important;background:color-mix(in srgb,var(--red) 22%,transparent);color:var(--red);font-weight:600}.sos-row-loading{font-size:10.5px;color:var(--accent);letter-spacing:.02em;padding:3px 9px;flex-shrink:0;opacity:.8}.sos-row-active-chip{font-size:10.5px;color:var(--green);border:1px solid color-mix(in srgb,var(--green) 28%,transparent);background:color-mix(in srgb,var(--green) 10%,transparent);border-radius:999px;padding:3px 9px;flex-shrink:0;letter-spacing:0}.sos-empty{padding:20px 12px;text-align:center;color:var(--text-secondary);font-size:11.5px;font-style:italic;opacity:.8}.sos-save-as{border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);padding:8px 10px}.sos-save-as-trigger{display:block;width:100%;padding:6px 8px;background:transparent;border:none;color:var(--accent);font-size:12px;font-weight:500;letter-spacing:0;cursor:pointer;border-radius:4px;font-family:inherit;text-align:left;transition:background .1s ease}.sos-save-as-trigger:hover{background:color-mix(in srgb,var(--accent) 10%,transparent)}.sos-save-as-form{display:flex;gap:6px;align-items:center;padding:2px 4px}.sos-save-as-input{flex:1;padding:5px 8px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:12px;font-family:inherit;outline:none}.sos-save-as-input:focus{border-color:var(--accent)}.sos-save-as-hint{margin-top:6px;padding:0 6px;font-size:10.5px;color:var(--text-secondary);letter-spacing:.01em}.sos-save-as-hint--warn{color:var(--yellow)}@media(max-width:900px){.se-toolbar{align-items:stretch}.se-toolbar-actions{width:100%;margin-left:0;justify-content:flex-start}.se-saved-org-control{flex:1 1 240px}.sos-wrap,.sos-pill{max-width:100%}.se-body{height:min(560px,68vh);min-height:380px}.ri-panel{inset:auto 0 0;width:auto;max-height:62%;border-left:none;border-top:1px solid var(--border);box-shadow:0 -8px 28px #00000040}}@media(max-width:640px){.se-container{min-height:0}.se-view-switcher,.se-view-btn{width:100%}.se-view-switcher{display:grid;grid-template-columns:1fr 1fr}.se-saved-org-control{flex-direction:column;align-items:stretch;gap:5px}.se-toolbar-divider{display:none}.se-toolbar-actions .btn,.se-toolbar-actions .oc-btn-primary,.se-toolbar-actions .oc-btn-ghost{justify-content:center}.se-body{height:440px;min-height:360px}.react-flow__minimap{display:none!important}.react-flow__controls{left:10px!important;bottom:10px!important}.sos-popover{right:auto;left:0}.sos-save-as-form{flex-wrap:wrap}.sos-save-as-input{flex-basis:100%}}.org-toast{position:fixed;bottom:20px;right:20px;z-index:200;padding:10px 16px;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:12.5px;font-weight:500;letter-spacing:0;box-shadow:inset 0 1px color-mix(in srgb,var(--text) 8%,transparent),0 8px 28px #0000004d}.org-toast--ok{border-left:2px solid var(--green);padding-left:14px}.org-toast--error{border-left:2px solid var(--red);padding-left:14px}@media(prefers-reduced-motion:reduce){.sos-popover,.sos-pill-dirty,.org-toast{animation:none!important}.sos-pill-caret,.sos-pill,.sos-row,.sos-row-delete{transition:none!important}}.agent-status-bar{display:flex;align-items:center;gap:10px;padding:6px 16px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0;overflow:hidden}.agent-status-summary{font-size:10px;color:var(--text-secondary);font-weight:600;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;flex-shrink:0}.agent-status-chips{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;flex:1;min-width:0}.agent-status-chip{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:16px;border:1px solid var(--border);background:var(--surface);font-size:11px;white-space:nowrap;flex-shrink:0;transition:border-color .2s,background .2s}.agent-status-chip.status-idle{opacity:.6}.agent-status-chip.status-reflecting{border-color:var(--yellow);background:color-mix(in srgb,var(--yellow) 8%,var(--surface))}.agent-status-chip.status-tool_active{border-color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--surface))}.agent-status-avatar{width:20px;height:20px;border-radius:50%;background:var(--accent-soft);border:1.5px solid var(--accent);color:var(--accent);font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.agent-status-chip.status-reflecting .agent-status-avatar{border-color:var(--yellow);color:var(--yellow);background:color-mix(in srgb,var(--yellow) 15%,var(--surface))}.agent-status-chip.status-tool_active .agent-status-avatar{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 15%,var(--surface))}.agent-status-name{font-weight:500;color:var(--text)}.agent-status-detail{color:var(--text-secondary);max-width:120px;overflow:hidden;text-overflow:ellipsis}.agent-status-chip.status-reflecting .agent-status-detail{color:var(--yellow)}.agent-status-chip.status-tool_active .agent-status-detail{color:var(--green)}.agent-status-task{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--bg);color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace}.kanban-board{display:flex;gap:10px;padding:16px;height:100%;min-height:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.kanban-column{display:flex;flex-direction:column;min-width:290px;max-width:290px;background:var(--surface);border-radius:8px;border:1px solid var(--border);overflow:hidden;flex-shrink:0}.kanban-column-header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--bg-elevated)}.kanban-col-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.kanban-col-label{font-size:11px;font-weight:600;color:var(--text-secondary);flex:1;text-transform:uppercase;letter-spacing:.06em}.kanban-col-count{font-size:10px;color:var(--text-secondary);padding:1px 6px;border-radius:999px;background:var(--bg);border:1px solid var(--border);min-width:20px;text-align:center}.kanban-col-add{margin-left:auto;background:none;border:1px solid var(--border);border-radius:4px;color:var(--text-secondary);font-size:14px;width:22px;height:22px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;transition:background .15s,color .15s}.kanban-col-add:hover{background:var(--accent);color:#fff;border-color:var(--accent)}.kanban-quick-add{padding:4px 8px 8px}.kanban-quick-input{width:100%;padding:6px 8px;border:1px solid var(--accent);border-radius:6px;background:var(--bg);color:var(--text);font-size:.82rem;outline:none}.kanban-col-body{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:var(--border) transparent;min-height:60px}.kanban-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;transition:border-color .15s,box-shadow .15s;-webkit-user-select:none;user-select:none}.kanban-card:hover{border-color:var(--border-hover);box-shadow:0 2px 8px #0000001f}.kanban-card.is-dragging{box-shadow:0 8px 24px #00000047;border-color:var(--accent);opacity:.97}.kanban-card-id{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;letter-spacing:.02em;margin-bottom:5px;display:block}.kanban-card-title{font-size:13px;font-weight:500;color:var(--text);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0 0 6px}.kanban-card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:4px;gap:4px}.kanban-card-footer-left{display:flex;align-items:center;gap:6px}.kanban-priority{font-size:13px;flex-shrink:0;line-height:1}.kanban-assignee-badge{width:22px;height:22px;border-radius:50%;background:var(--accent-soft);border:1.5px solid var(--accent);color:var(--accent);font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;text-transform:uppercase}.kanban-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:32px 16px;color:var(--text-secondary);font-size:12px;opacity:.6}.kanban-empty-icon{font-size:28px;opacity:.4}.board-selector{border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.board-tabs{display:flex;gap:2px;padding:6px 16px;overflow-x:auto;scrollbar-width:none}.board-tab{padding:6px 14px;border:1px solid transparent;border-radius:6px 6px 0 0;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:all .12s;white-space:nowrap;display:flex;align-items:center;gap:6px}.board-tab:hover{background:var(--surface);color:var(--text)}.board-tab.active{background:var(--surface);color:var(--text);border-color:var(--border);border-bottom-color:var(--surface);font-weight:600}.board-tab-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.board-tab-editable{cursor:default}.board-tab-title{cursor:text;padding:2px 4px;border-radius:3px;transition:background .12s}.board-tab-title:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.board-tab-title-input{font:inherit;color:inherit;background:var(--bg);border:1px solid var(--accent);border-radius:3px;padding:2px 4px;outline:none;min-width:120px}.kanban-start-btn{width:22px;height:22px;border:none;border-radius:4px;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:10px;display:flex;align-items:center;justify-content:center;transition:all .12s;flex-shrink:0}.kanban-start-btn:hover{background:var(--accent-soft);color:var(--accent)}.kanban-card.is-active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 2px 8px #4f46e526}.kanban-card-runtime{display:flex;align-items:center;gap:6px;padding:3px 8px;margin-bottom:6px;border-radius:4px;font-size:10px;font-weight:500;background:var(--surface)}.kanban-card-runtime.status-reflecting{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 10%,var(--surface))}.kanban-card-runtime.status-tool_active{color:var(--green);background:color-mix(in srgb,var(--green) 10%,var(--surface))}.kanban-runtime-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0;animation:kanban-pulse 1.2s ease-in-out infinite}.kanban-runtime-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes kanban-pulse{0%,to{opacity:1}50%{opacity:.4}}.kanban-dep-badge{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}.kanban-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.kanban-cross-badge{font-size:10px;padding:1px 5px;border-radius:4px;background:var(--accent-soft);color:var(--accent);font-weight:600}.kanban-card-tags{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.kanban-tag{font-size:10px;padding:1px 6px;border-radius:4px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border);cursor:pointer}.kanban-assignee-group{display:flex;gap:0}.kanban-assignee-group .kanban-assignee-badge{margin-left:-4px}.kanban-assignee-group .kanban-assignee-badge:first-child{margin-left:0}.kanban-assignee-more{background:var(--surface);color:var(--text-secondary);border-color:var(--border);font-size:8px}.kanban-card-meta-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.kanban-meta-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;padding:1px 6px;border-radius:3px;border:1px solid var(--border);color:var(--text-secondary);white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.kanban-meta-icon{font-size:10px;line-height:1}.kanban-employee-badge{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.kanban-role-badge{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 8%,transparent)}.kanban-projection-badge{border-color:var(--yellow);color:var(--yellow);font-family:var(--font-mono, monospace);font-size:9px}.kanban-gate-badge{gap:2px}.kanban-gate-review{border-color:var(--yellow);color:var(--yellow)}.kanban-gate-approval{border-color:var(--green);color:var(--green)}.kanban-gate-human_confirmation{border-color:var(--red);color:var(--red)}.kanban-origin-badge{border-color:var(--text-secondary);color:var(--text-secondary);font-size:9px}@keyframes exec-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.exec-panel-backdrop{position:fixed;inset:0;background:#0000004d;z-index:199;animation:exec-backdrop-in .2s ease}@keyframes exec-backdrop-in{0%{opacity:0}to{opacity:1}}.exec-panel{position:fixed;top:0;right:0;width:560px;max-width:90vw;height:100vh;height:100dvh;background:var(--surface);border-left:1px solid var(--border);z-index:200;display:flex;flex-direction:column;animation:exec-slide-in .25s cubic-bezier(.32,.72,0,1);box-shadow:-4px 0 24px #0003}.exec-panel-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.exec-panel-title-row{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.exec-panel-title-row svg{flex-shrink:0;color:var(--accent)}.exec-panel-title{margin:0;font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.exec-badge{font-size:11px;font-weight:500;padding:2px 8px;border-radius:10px;white-space:nowrap;flex-shrink:0}.exec-badge-running{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent)}.exec-badge-idle{background:color-mix(in srgb,var(--yellow) 15%,transparent);color:var(--yellow)}.exec-badge-done{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.exec-badge-pending{background:color-mix(in srgb,var(--text-secondary) 15%,transparent);color:var(--text-secondary)}.exec-badge-failed{background:color-mix(in srgb,var(--red) 15%,transparent);color:var(--red)}.exec-badge-cancelled{background:color-mix(in srgb,var(--text-secondary) 10%,transparent);color:var(--text-secondary)}.exec-panel-close{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s}.exec-panel-close:hover{background:var(--surface-hover, rgba(255, 255, 255, .06));color:var(--text-primary)}.exec-panel-identity{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.exec-panel-avatar{width:36px;height:36px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}.exec-panel-agent-info{display:flex;flex-direction:column;gap:1px;min-width:0}.exec-panel-agent-name{font-size:13px;font-weight:600;color:var(--text-primary)}.exec-panel-agent-role{font-size:11px;color:var(--green)}.exec-panel-employee{font-size:11px;color:var(--text-tertiary, var(--text-secondary));opacity:.8}.exec-panel-projection{font-size:11px;color:var(--text-secondary);text-transform:capitalize}.exec-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:12px 16px;display:flex;flex-direction:column;gap:16px}.exec-section{display:flex;flex-direction:column;gap:8px}.exec-section-header{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.exec-section-header svg{width:14px;height:14px;flex-shrink:0}.exec-section-content{font-size:13px;color:var(--text-primary);line-height:1.5}.exec-handoff-scroll{max-height:28vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.exec-handoff-scroll::-webkit-scrollbar{width:8px}.exec-handoff-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.exec-handoff-scroll::-webkit-scrollbar-track{background:transparent}.exec-activity-scroll{max-height:55vh;overflow-y:auto;overflow-x:hidden;padding-right:4px;scrollbar-width:thin;scrollbar-color:var(--border) transparent;border-radius:6px;background:color-mix(in srgb,var(--bg, var(--surface)) 30%,transparent)}.exec-activity-scroll::-webkit-scrollbar{width:8px}.exec-activity-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.exec-activity-scroll::-webkit-scrollbar-track{background:transparent}pre.exec-section-content{white-space:pre-wrap;word-break:break-word;background:var(--bg, var(--surface));border:1px solid var(--border);border-radius:6px;padding:10px 12px;font-size:12px;font-family:var(--mono, monospace);margin:0}.exec-section-empty{font-size:12px;color:var(--text-secondary);font-style:italic;padding:8px 0}.exec-artifact-list{margin:0;padding:0 0 0 18px;font-size:13px;color:var(--text-primary);line-height:1.6}.exec-artifact-item{word-break:break-word}.exec-panel-task-count{font-size:11px;padding:2px 8px;border-radius:10px;background:color-mix(in srgb,var(--text-secondary) 15%,transparent);color:var(--text-secondary);margin-left:6px;letter-spacing:.2px}.exec-task-card{border:1px solid color-mix(in srgb,var(--text-secondary) 20%,transparent);border-radius:8px;margin-bottom:10px;background:color-mix(in srgb,var(--bg-primary) 80%,transparent);overflow:hidden;flex-shrink:0;flex-basis:auto}.exec-task-card-focused{border-color:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 40%,transparent)}.exec-task-card-header{width:100%;display:flex;align-items:center;gap:10px;padding:10px 14px;background:transparent;border:none;cursor:pointer;text-align:left;color:var(--text-primary)}.exec-task-card-header:hover{background:color-mix(in srgb,var(--text-secondary) 5%,transparent)}.exec-task-card-index{font-family:var(--font-mono, monospace);font-size:11px;color:var(--text-secondary);min-width:22px}.exec-task-card-title{flex:1;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exec-task-card-time{font-size:11px;color:var(--text-secondary);white-space:nowrap}.exec-task-card-chevron{font-size:12px;color:var(--text-secondary);display:inline-block;transition:transform .12s ease}.exec-task-card-chevron.open{transform:rotate(90deg)}.exec-task-card-body{padding:4px 14px 14px;border-top:1px solid color-mix(in srgb,var(--text-secondary) 12%,transparent)}.exec-task-card-projection{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:11px;color:var(--text-secondary);margin:8px 0 12px}.exec-task-card-projection svg{width:13px;height:13px;color:var(--accent)}.exec-task-card-projection code{font-family:var(--font-mono, monospace);background:color-mix(in srgb,var(--text-secondary) 10%,transparent);padding:1px 6px;border-radius:4px}.exec-inline-tag{padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--yellow) 18%,transparent);color:var(--yellow);font-size:10px;font-weight:600;text-transform:uppercase}.exec-activity-sections{display:flex;flex-direction:column;gap:10px}.exec-activity-section{padding-top:8px;border-top:1px solid color-mix(in srgb,var(--text-secondary) 10%,transparent)}.exec-activity-section:first-child{padding-top:0;border-top:0}.exec-activity-section-head{display:flex;align-items:center;gap:6px;margin-bottom:6px;min-width:0;font-size:11px;color:var(--text-secondary)}.exec-activity-section-title{color:var(--text-primary);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exec-activity-section-role{flex:0 0 auto;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--text-secondary) 10%,transparent)}.exec-section-count{font-size:10px;color:var(--text-secondary);padding:1px 6px;border-radius:8px;background:color-mix(in srgb,var(--text-secondary) 10%,transparent);margin-left:auto}.chat-fullpage{display:flex;flex:1;min-height:0;overflow:hidden;background:var(--bg)}.chat-page{display:flex;width:100%;height:100%;min-height:0}.session-sidebar{width:272px;min-width:240px;border-right:1px solid var(--border);background:var(--bg);display:flex;flex-direction:column;flex-shrink:0}.session-new-btn{margin:14px 14px 6px;padding:9px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:transparent;color:var(--text);font-size:13px;font-weight:500;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .15s}.session-new-btn:hover{background:var(--surface-hover);border-color:var(--border-hover)}.session-nav-btn{margin:2px 14px;padding:8px 12px;border:none;border-radius:var(--radius-xs);background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:8px;transition:all .12s;text-align:left}.session-nav-btn:hover{background:var(--surface-hover);color:var(--text)}.session-nav-btn.active{background:var(--accent-soft);color:var(--accent);border-left:2px solid var(--accent);padding-left:10px}.session-activity-btn{margin-top:auto;margin-bottom:10px}.session-search-wrap{display:flex;align-items:center;gap:6px;margin:6px 14px 8px;padding:6px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid transparent;color:var(--text-secondary);transition:border-color .15s}.session-search-wrap:focus-within{border-color:var(--accent)}.session-search{flex:1;border:none;background:transparent;color:var(--text);font-size:12px;font-family:inherit;outline:none}.session-search::placeholder{color:var(--text-secondary)}.session-list{flex:1;overflow-y:auto;padding:0 0 4px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.session-list-virtualized{position:relative;contain:strict}.session-group{margin-bottom:2px}.session-group-label{padding:10px 16px 4px;font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}.session-tree-node{position:relative}.session-tree-primary{display:flex;align-items:stretch}.session-expand-btn{width:20px;flex-shrink:0;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin-left:4px;color:var(--text-secondary)}.session-expand-btn:before{content:"";display:block;width:0;height:0;border-left:4px solid currentColor;border-top:3px solid transparent;border-bottom:3px solid transparent;transition:transform .15s;transform:rotate(90deg)}.session-expand-btn.collapsed:before{transform:rotate(0)}.session-expand-btn:hover{color:var(--accent)}.session-children{position:relative;margin-left:12px;padding-left:8px;border-left:1px solid var(--border)}.session-child-count{border:none;background:transparent;color:var(--text-secondary);font-size:10px;font-weight:500;font-family:inherit;cursor:pointer;padding:2px 16px 2px 36px;text-align:left}.session-child-count:hover{color:var(--accent)}.session-unread-badge{flex-shrink:0;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:#fff;font-size:10px;font-weight:700;line-height:18px;text-align:center}.session-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 14px;border:none;border-radius:var(--radius-xs);margin:1px 8px;width:calc(100% - 16px);background:transparent;color:var(--text);font-size:13px;font-family:inherit;cursor:pointer;text-align:left;position:relative;transition:background .12s,border-color .12s;border-left:2px solid transparent}.session-item:hover{background:var(--surface-hover)}.session-item.active{background:var(--accent-soft);border-left-color:var(--accent)}.session-item.session-item-child{padding:5px 12px 5px 6px;border-left:none;font-size:12px;position:relative;margin:0;width:100%}.session-tree-line{position:absolute;left:-8px;top:0;bottom:50%;width:8px;border-left:1px solid var(--border);border-bottom:1px solid var(--border);border-bottom-left-radius:4px;pointer-events:none}.session-tree-line.last{bottom:50%}.session-agent-tag{display:inline-block;font-size:10px;font-weight:600;padding:0 5px;border-radius:3px;background:var(--accent-soft);color:var(--accent);margin-right:4px}.session-runtime-badge{display:inline-flex;align-items:center;color:var(--accent);margin-right:4px;flex-shrink:0}.session-runtime-badge svg{width:12px;height:12px}.session-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.session-dot.status-running,.session-dot.status-running-idle{background:var(--green);opacity:.35}.session-dot.status-tool-active{background:var(--green);box-shadow:0 0 4px color-mix(in srgb,var(--green) 55%,transparent)}.session-dot.status-reflecting{background:var(--yellow);box-shadow:0 0 4px color-mix(in srgb,var(--yellow) 55%,transparent)}.session-dot.status-idle{background:var(--accent);opacity:.7}.session-dot.status-done{background:var(--green)}.session-dot.status-pending{background:var(--text-secondary);opacity:.4}.session-dot.status-failed{background:var(--red)}.session-dot.status-cancelled{background:var(--text-secondary);opacity:.3}.session-dot.status-blocked{background:var(--yellow)}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.session-item-content{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.session-item-title{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}.session-item-meta{font-size:11px;color:var(--text-secondary)}.session-delete-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;transition:all .12s}.session-delete-btn:hover{color:var(--red);background:#f871711a}.session-empty{padding:32px 16px;text-align:center;color:var(--text-secondary);font-size:12px}.task-header-shell{display:flex;flex-direction:column;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.task-header-bar{display:flex;align-items:center;justify-content:space-between;padding:10px 20px;gap:12px;min-height:48px;min-width:0}.task-header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 auto;flex-wrap:wrap;row-gap:6px}.task-title{font-size:14px;font-weight:600;color:var(--text);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .12s;min-width:0;max-width:100%;flex:1 1 auto}.task-title:hover{color:var(--accent)}.task-title-input{font-size:14px;font-weight:600;color:var(--text);background:var(--surface);border:1px solid var(--accent);border-radius:var(--radius-xs);padding:2px 8px;font-family:inherit;outline:none;width:100%;max-width:400px}.task-status-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;background:var(--surface);font-size:11px;font-weight:500;color:var(--text-secondary);flex-shrink:0}.task-status-pill[data-status=running]{color:var(--green)}.task-status-pill[data-status=idle]{color:var(--accent)}.task-status-pill[data-status=failed]{color:var(--red)}.task-status-pill[data-status=blocked]{color:var(--yellow)}.task-status-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.task-status-pill[data-working=true] .task-status-dot{opacity:.9;box-shadow:0 0 5px color-mix(in srgb,currentColor 45%,transparent)}.task-tool-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:4px;background:#34d39914;color:var(--green);font-size:11px;flex-shrink:0}.task-tool-pill code{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:500;background:none;padding:0}.task-projection-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;background:#eab30814;color:var(--yellow);font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;flex-shrink:0}.task-role-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;background:#10b98114;color:var(--green);font-size:11px;flex-shrink:0}.task-employee-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:4px;background:#6366f114;color:var(--accent);font-size:11px;flex-shrink:0}.task-employee-icon{font-size:11px;line-height:1}.task-agent-pill{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:4px;background:#0ea5e914;color:var(--blue);font-size:11px;flex-shrink:0}.task-agent-icon{font-size:11px;line-height:1}.task-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.task-header-avatars{display:flex}.task-header-avatar{width:24px;height:24px;border-radius:50%;background:var(--accent-soft);border:2px solid var(--bg);color:var(--accent);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-left:-4px}.task-header-avatar:first-child{margin-left:0}.task-header-time{font-size:11px;color:var(--text-secondary);opacity:.6}.task-header-metrics{display:flex;flex-wrap:wrap;gap:6px 10px;padding:0 20px 10px}.task-runtime-metric{display:inline-flex;align-items:center;gap:6px;min-width:0;max-width:100%;padding:4px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 85%,transparent 15%);background:color-mix(in srgb,var(--surface) 86%,var(--bg-elevated) 14%)}.task-runtime-metric-label{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);flex-shrink:0}.task-runtime-metric-value{font-size:11px;color:var(--text);font-family:JetBrains Mono,SF Mono,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.task-stop-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--red);border-radius:var(--radius-xs);background:transparent;color:var(--red);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-stop-btn:hover{background:var(--red);color:#fff}.task-stop-btn:disabled{opacity:.45;cursor:not-allowed}.task-stop-btn:disabled:hover{background:transparent;color:var(--red)}.task-resume-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--accent);border-radius:var(--radius-xs);background:transparent;color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-resume-btn:hover{background:var(--accent);color:#fff}.task-done-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid var(--green);border-radius:var(--radius-xs);background:transparent;color:var(--green);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.task-done-btn:hover{background:var(--green);color:#fff}.task-board-btn{padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius-xs);background:transparent;color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;transition:all .12s}.task-board-btn:hover{background:var(--surface-hover);color:var(--text)}@container ctxpanel (max-width: 720px){.task-header-bar{align-items:flex-start;flex-wrap:wrap;padding:10px 14px;gap:8px}.task-header-right{width:100%;justify-content:flex-end;flex-wrap:wrap}.task-header-metrics{padding:0 14px 10px}}@container ctxpanel (max-width: 560px){.task-projection-pill,.task-employee-pill,.task-tool-pill,.task-header-time,.task-header-avatars{display:none}.task-header-bar{padding:10px 12px}.task-runtime-metric-value{font-size:10.5px}}@container ctxpanel (max-width: 420px){.task-role-pill{display:none}.task-agent-pill .task-agent-icon{margin-right:0}.task-stop-btn span,.task-done-btn span,.task-resume-btn span{display:none}.task-stop-btn,.task-done-btn,.task-resume-btn{padding:5px 8px}.task-header-bar{padding:8px 10px}.task-header-metrics{padding:0 10px 8px;gap:6px 8px}}.chat-main{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--bg)}.chat-main-header{display:flex;align-items:center;gap:8px;padding:10px 20px;border-bottom:1px solid var(--border);flex-shrink:0;min-height:48px}.chat-main-icon{font-size:13px;font-weight:700;color:var(--text-secondary)}.chat-main-name{font-size:14px;font-weight:600;color:var(--text)}.chat-main-desc{margin-left:8px;font-size:11px;color:var(--text-secondary);font-weight:400}.msg-list-shell{flex:1;min-height:0;min-width:0;position:relative;display:flex;flex-direction:column;overflow:hidden}.msg-list{flex:1;min-height:0;overflow-y:auto;padding:16px 0 20px;scrollbar-width:thin;scrollbar-gutter:stable;scrollbar-color:var(--border) transparent;overscroll-behavior-y:contain;position:relative}.msg-list:focus{outline:none}.msg-list-following{overflow-anchor:none}.msg-list-browsing{overflow-anchor:auto}.msg-list-content{width:100%;min-height:100%}.msg-timeline-row{overflow-anchor:auto}.msg-list-following .msg-timeline-row{overflow-anchor:none}.msg-end-anchor{height:1px;flex-shrink:0;overflow-anchor:none}.msg-list-floating-actions{position:absolute;left:50%;bottom:12px;z-index:8;transform:translate(-50%);display:flex;align-items:center;gap:8px;max-width:calc(100% - 24px);pointer-events:none}.msg-list-float-btn{pointer-events:auto;min-width:0;max-width:min(320px,70vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid color-mix(in srgb,var(--border) 72%,var(--accent) 28%);border-radius:999px;padding:7px 12px;background:color-mix(in srgb,var(--bg-elevated) 92%,var(--accent) 8%);color:var(--text);box-shadow:0 6px 22px #00000047;font:inherit;font-size:11px;font-weight:600;cursor:pointer}.msg-list-float-btn:hover{border-color:var(--accent);background:color-mix(in srgb,var(--bg-elevated) 84%,var(--accent) 16%)}.msg-list-pending-btn{border-color:color-mix(in srgb,var(--yellow) 55%,var(--border));color:var(--yellow)}.msg-history-hint{display:flex;align-items:center;justify-content:center;gap:10px;padding:0 20px 14px;flex-wrap:wrap}.msg-history-load-btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;padding:6px 12px;font-size:12px;font-family:inherit;cursor:pointer;transition:background .12s,border-color .12s}.msg-history-load-btn:hover{background:var(--surface-hover);border-color:var(--border-hover)}.msg-history-load-btn:disabled{opacity:.65;cursor:default}.msg-history-meta{font-size:11px;color:var(--text-secondary)}.msg-welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:56px 24px;color:var(--text-secondary);text-align:center;flex:1;min-height:0}.msg-welcome-icon{color:var(--accent);width:56px;height:56px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 30%,color-mix(in srgb,var(--accent) 18%,transparent 82%),transparent 70%),color-mix(in srgb,var(--accent-soft) 65%,var(--bg-elevated) 35%);border:1px solid color-mix(in srgb,var(--accent) 22%,transparent 78%);border-radius:50%;box-shadow:0 1px color-mix(in srgb,var(--accent) 22%,transparent 78%) inset,0 8px 24px -10px color-mix(in srgb,var(--accent) 60%,transparent 40%)}.msg-welcome-icon svg{width:26px;height:26px;opacity:.85}.msg-welcome-title{font-size:18px;font-weight:600;color:var(--text);margin-top:2px;letter-spacing:-.01em}.msg-welcome-hint{font-size:13px;line-height:1.55;max-width:320px;color:var(--text-secondary);opacity:.85}@container ctxpanel (max-width: 480px){.msg-welcome{padding:36px 20px;gap:10px}.msg-welcome-icon{width:48px;height:48px}.msg-welcome-icon svg{width:22px;height:22px}.msg-welcome-title{font-size:16px}.msg-welcome-hint{font-size:12px;line-height:1.5}}.msg-date-sep{display:flex;align-items:center;justify-content:center;padding:12px 0 8px}.msg-date-sep span{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;padding:2px 12px;background:var(--surface);border-radius:999px}.msg-system{display:flex;justify-content:center;padding:6px 20px}.msg-system span{font-size:11px;color:var(--text-secondary);background:var(--surface);padding:4px 12px;border-radius:999px}.work-item-divider{display:flex;align-items:center;gap:12px;padding:14px 24px;max-width:820px;margin:4px auto;animation:msg-enter .2s ease-out}.work-item-divider-line{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--border) 20%,var(--border) 80%,transparent)}.work-item-divider-label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--text-secondary);white-space:nowrap;text-transform:capitalize}.work-item-divider-icon{font-size:10px;line-height:1}.work-item-divider-action{font-weight:400;opacity:.7;font-size:10px}.work-item-divider-active .work-item-divider-icon{color:#f59e0b}.work-item-divider-active .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(245,158,11,.25) 20%,rgba(245,158,11,.25) 80%,transparent)}.work-item-divider-passed .work-item-divider-icon{color:#10b981}.work-item-divider-passed .work-item-divider-label{color:#10b981;opacity:.8}.work-item-divider-passed .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(16,185,129,.2) 20%,rgba(16,185,129,.2) 80%,transparent)}.work-item-divider-rejected .work-item-divider-icon{color:#f59e0b}.work-item-divider-rejected .work-item-divider-label{color:#f59e0b;opacity:.8}.work-item-divider-failed .work-item-divider-icon{color:var(--red)}.work-item-divider-failed .work-item-divider-label{color:var(--red);opacity:.8}.work-item-divider-failed .work-item-divider-line{background:linear-gradient(90deg,transparent,rgba(239,68,68,.15) 20%,rgba(239,68,68,.15) 80%,transparent)}.work-item-divider-waiting .work-item-divider-icon,.work-item-divider-waiting .work-item-divider-label{color:var(--text-secondary)}.msg-row{display:flex;gap:10px;padding:6px 24px;max-width:820px;width:100%;margin:0 auto;animation:msg-enter .2s ease-out;border-radius:var(--radius-xs);transition:background .1s}@keyframes msg-enter{0%{opacity:0}to{opacity:1}}.msg-row.user{justify-content:flex-end}.msg-row.deleted-sender{opacity:.5}.msg-row.grouped{padding-top:0;padding-bottom:0;animation:none}.msg-row-inline-progress,.msg-row-context,.msg-row-draft{align-items:flex-start}.msg-row.agent.grouped .msg-content-agent-card{border-top:none;border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin-top:-1px}.msg-row.user.grouped{padding-top:2px}.msg-row.user.grouped .msg-content-user{border-radius:18px 4px 4px 18px}.msg-avatar-spacer{width:34px;flex-shrink:0}.msg-time-inline{font-size:10px;opacity:0;transition:opacity .15s}.msg-row:hover .msg-time-inline{opacity:.6}.msg-avatar{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:13px;font-weight:700;margin-top:1px}.agent-avatar{background:linear-gradient(135deg,var(--accent-soft),var(--surface));color:#fff;border:none;box-shadow:0 1px 3px #00000026;text-shadow:0 1px 2px rgba(0,0,0,.2)}.msg-avatar-context{background:linear-gradient(135deg,#3b82f62e,#0ea5e947);color:var(--accent)}.msg-avatar-draft{background:linear-gradient(135deg,#10b98138,#3b82f633);color:var(--green)}.msg-body{flex:1;min-width:0}.msg-inline-progress-body{width:100%}.msg-inline-progress-shell{width:100%;max-width:100%}.msg-body-user{max-width:70%}.msg-agent-header{display:flex;align-items:center;gap:8px;margin-bottom:3px}.msg-sender{font-size:12px;font-weight:600;color:var(--text)}.msg-sender.deleted{color:var(--text-secondary);text-decoration:line-through}.msg-time{font-size:10px;color:var(--text-secondary);opacity:.6}.msg-reply-indicator{font-size:11px;color:var(--text-secondary);padding:2px 0 4px 10px;border-left:2px solid var(--accent-soft);margin-bottom:4px}.msg-ops-row{display:flex;align-items:center;gap:8px;width:min(820px,100%);margin:2px auto;padding:5px clamp(12px,3vw,24px) 5px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;font-size:clamp(11px,.74rem,12.5px);color:var(--text-secondary);background:transparent;border:1px solid transparent;cursor:default;-webkit-user-select:none;user-select:none;transition:background .14s ease,border-color .14s ease,color .14s ease;min-width:0}.msg-ops-row[role=button]{cursor:pointer}.msg-ops-row:hover,.msg-ops-row.expanded{background:color-mix(in srgb,var(--surface) 60%,transparent 40%);border-color:color-mix(in srgb,var(--border) 60%,transparent 40%);color:var(--text)}.msg-ops-dot{width:5px;height:5px;border-radius:999px;flex-shrink:0;background:color-mix(in srgb,var(--text-secondary) 60%,transparent 40%)}.msg-ops-tone-info .msg-ops-dot{background:color-mix(in srgb,var(--accent) 80%,transparent 20%)}.msg-ops-tone-success .msg-ops-dot{background:var(--green)}.msg-ops-tone-warning .msg-ops-dot{background:var(--yellow)}.msg-ops-tone-danger .msg-ops-dot{background:var(--red)}.msg-ops-label{font-weight:600;letter-spacing:.01em;color:var(--text);flex-shrink:0}.msg-ops-tone-info .msg-ops-label{color:color-mix(in srgb,var(--accent) 88%,var(--text) 12%)}.msg-ops-tone-success .msg-ops-label{color:color-mix(in srgb,var(--green) 90%,var(--text) 10%)}.msg-ops-tone-warning .msg-ops-label{color:color-mix(in srgb,var(--yellow) 90%,var(--text) 10%)}.msg-ops-tone-danger .msg-ops-label{color:color-mix(in srgb,var(--red) 90%,var(--text) 10%)}.msg-ops-summary{color:var(--text-secondary);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-ops-time{font-size:10.5px;color:var(--text-secondary);opacity:.55;flex-shrink:0;font-variant-numeric:tabular-nums}.msg-ops-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--text-secondary);opacity:.6;flex-shrink:0;transition:transform .16s ease,opacity .16s ease;transform:rotate(0)}.msg-ops-row.expanded .msg-ops-chevron{opacity:1}.msg-ops-details{width:min(820px,100%);margin:0 auto 6px;padding:10px clamp(12px,3vw,24px) 10px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 80%,var(--surface) 20%);border:1px solid color-mix(in srgb,var(--border) 70%,transparent 30%)}.msg-ops-details-pre{margin:0;font-family:JetBrains Mono,SF Mono,monospace;font-size:10.5px;line-height:1.55;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;max-height:220px;overflow-y:auto}.msg-ops-bundle{display:flex;align-items:center;gap:8px;width:min(820px,100%);margin:3px auto;padding:6px clamp(12px,3vw,24px) 6px clamp(20px,8vw,56px);box-sizing:border-box;border:1px dashed color-mix(in srgb,var(--border) 70%,transparent);border-radius:8px;background:color-mix(in srgb,var(--surface) 42%,transparent);color:var(--text-secondary);font:inherit;font-size:12px;text-align:left;cursor:pointer;min-width:0;transition:background .14s ease,border-color .14s ease,color .14s ease}.msg-ops-bundle:hover,.msg-ops-bundle.expanded{background:color-mix(in srgb,var(--surface) 76%,transparent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border));color:var(--text)}.msg-ops-bundle-dot{width:6px;height:6px;border-radius:999px;flex:0 0 auto;background:color-mix(in srgb,var(--accent) 72%,transparent)}.msg-ops-bundle-title{flex:0 0 auto;color:var(--text);font-weight:650}.msg-ops-bundle-summary{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-ops-bundle-time{flex:0 0 auto;font-size:10.5px;color:var(--text-secondary);opacity:.6;font-variant-numeric:tabular-nums}.msg-ops-bundle-chevron{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--text-secondary);flex:0 0 auto}.msg-ops-bundle-details{width:min(820px,100%);margin:0 auto 8px;padding:6px clamp(12px,3vw,24px) 8px clamp(20px,8vw,56px);box-sizing:border-box;border-radius:8px;background:color-mix(in srgb,var(--bg-elevated) 80%,var(--surface) 20%);border:1px solid color-mix(in srgb,var(--border) 68%,transparent)}.msg-ops-bundle-event{display:flex;align-items:center;gap:8px;min-width:0;padding:4px 0;font-size:11.5px}.msg-content-agent-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:2px var(--radius-sm) var(--radius-sm) 2px;padding:10px 14px;transition:border-color .2s,box-shadow .2s,border-left-color .2s}.msg-attached-thinking{margin-bottom:10px}.msg-row.agent:hover .msg-content-agent-card{border-color:var(--border-hover);border-left-color:var(--accent);box-shadow:0 2px 8px #00000014}.msg-context-card{border-left-color:#3b82f6bf;background:linear-gradient(180deg,rgba(59,130,246,.06),var(--surface))}.msg-context-label,.msg-draft-label{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary);margin-bottom:6px}.msg-draft-card{border-style:dashed;border-left-color:var(--green);background:linear-gradient(180deg,rgba(16,185,129,.06),var(--surface))}.msg-row-project-update .msg-body{min-width:0}.msg-project-update-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:2px var(--radius-sm) var(--radius-sm) 2px;padding:11px 14px 10px;display:flex;flex-direction:column;gap:10px;min-width:0;overflow:hidden}.msg-project-update-report{border-left-color:var(--accent)}.msg-project-update-review{border-left-color:var(--green)}.msg-project-update-update{border-left-color:var(--yellow)}.msg-project-update-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}.msg-project-update-label{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary)}.msg-project-update-chip{flex:0 1 auto;min-width:0;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 7px;border-radius:999px;background:color-mix(in srgb,var(--green) 14%,transparent);color:color-mix(in srgb,var(--green) 86%,var(--text) 14%);font-size:11px;font-weight:650}.msg-project-update-title{margin-top:8px;color:var(--text-secondary);font-size:12px;font-weight:650;line-height:1.35;overflow-wrap:anywhere;word-break:break-word}.msg-project-update-summary{color:var(--text);line-height:1.58;font-size:14px;overflow-wrap:anywhere;word-break:break-word}.msg-project-update-summary p{margin:0 0 7px}.msg-project-update-summary p:last-child{margin-bottom:0}.msg-project-update-section{min-width:0}.msg-project-update-section-label{margin-bottom:5px;color:var(--text-secondary);font-size:11px;font-weight:750;letter-spacing:.04em;text-transform:uppercase}.msg-project-update-artifacts{display:grid;gap:6px}.msg-project-update-artifact{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 8px;align-items:center;min-width:0;padding:7px 9px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:6px;background:color-mix(in srgb,var(--bg-elevated) 46%,transparent)}.msg-project-update-artifact-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:12.5px;font-weight:650}.msg-project-update-artifact-status{color:var(--green);font-size:11px;font-weight:650;text-transform:lowercase}.msg-project-update-artifact-path{grid-column:1 / -1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);background:transparent;font-size:11px}.msg-project-update-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.msg-project-update-list{margin:0;padding-left:18px;color:var(--text-secondary);font-size:12.5px;line-height:1.48;min-width:0}.msg-project-update-list li{margin:0 0 4px;overflow-wrap:anywhere;word-break:break-word}@media(max-width:680px){.msg-project-update-grid{grid-template-columns:1fr}.msg-project-update-head{align-items:flex-start;flex-direction:column}.msg-project-update-chip{max-width:100%}}.msg-content-agent{font-size:14px;line-height:1.65;color:var(--text);word-wrap:break-word}.msg-content-agent h1,.msg-content-agent h2,.msg-content-agent h3,.msg-content-agent h4,.msg-content-agent h5,.msg-content-agent h6{margin:0 0 10px;line-height:1.35}.msg-content-agent p{margin:0 0 8px}.msg-content-agent p:last-child{margin-bottom:0}.msg-content-agent ul,.msg-content-agent ol{margin:4px 0 8px;padding-left:20px}.msg-content-agent li{margin-bottom:3px;line-height:1.55}.msg-content-agent pre{background:var(--bg);padding:10px 14px;border-radius:var(--radius-xs);border:1px solid var(--border);overflow-x:auto;font-size:12px;line-height:1.5;margin:8px 0}.msg-content-agent code{font-family:JetBrains Mono,SF Mono,Fira Code,monospace;font-size:12px;background:var(--accent-soft);padding:2px 6px;border-radius:4px;color:var(--accent)}.msg-content-agent pre code{background:transparent;padding:0;color:var(--text)}.msg-content-agent blockquote{margin:8px 0;padding:6px 14px;border-left:3px solid var(--accent-soft);color:var(--text-secondary);background:#0000000a;border-radius:0 var(--radius-xs) var(--radius-xs) 0}.msg-content-agent table{border-collapse:collapse;margin:8px 0;font-size:13px;width:100%}.msg-content-agent th,.msg-content-agent td{border:1px solid var(--border);padding:6px 12px;text-align:left}.msg-content-agent th{background:var(--bg);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em}.msg-content-agent strong{color:var(--text)}.msg-content-agent a{color:var(--accent);text-decoration:none}.msg-content-agent a:hover{text-decoration:underline}.msg-content-agent hr{border:none;border-top:1px solid var(--border);margin:12px 0}.msg-content-user{background:var(--accent);color:#fff;padding:10px 16px;border-radius:18px 18px 4px;font-size:14px;line-height:1.5;word-wrap:break-word;white-space:pre-wrap;box-shadow:0 1px 3px #0000001a}.msg-content-user-markdown{color:inherit;font-size:inherit;line-height:inherit}.msg-content-user-markdown h1,.msg-content-user-markdown h2,.msg-content-user-markdown h3,.msg-content-user-markdown h4,.msg-content-user-markdown h5,.msg-content-user-markdown h6{margin:0 0 8px;line-height:1.35;color:inherit}.msg-content-user-markdown p{margin:0 0 8px}.msg-content-user-markdown p:last-child{margin-bottom:0}.msg-content-user-markdown ul,.msg-content-user-markdown ol{margin:4px 0 8px;padding-left:20px}.msg-content-user-markdown li{margin-bottom:3px;line-height:1.5}.msg-content-user-markdown strong{color:inherit}.msg-content-user-markdown a{color:inherit;text-decoration:underline}.msg-content-user-markdown code{background:#ffffff24;color:inherit;border-radius:4px;padding:.08em .35em;font-size:.92em}.msg-content-user-markdown pre{background:#00000029;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-xs);padding:10px 12px;margin:8px 0;overflow-x:auto}.msg-content-user-markdown pre code{background:transparent;border:none;padding:0}.msg-meta-user{display:flex;align-items:center;justify-content:flex-end;gap:6px;margin-top:4px;opacity:0;transition:opacity .15s}.msg-row.user:hover .msg-meta-user{opacity:1}.msg-card-actions{display:flex;gap:2px;margin-top:4px;padding-top:0;height:0;overflow:hidden;opacity:0;transition:opacity .15s,height .15s}.msg-row:hover .msg-card-actions{opacity:1;height:26px}.msg-action-btn{border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:11px;padding:3px 8px;border-radius:4px;display:flex;align-items:center;gap:4px;font-family:inherit;transition:all .12s}.msg-action-btn:hover{background:var(--surface);color:var(--text)}.agent-working-row{animation:msg-enter .2s ease-out}.agent-working-row .progress-block{border:1px dashed var(--border-hover);background:transparent}.ptl-block{display:flex;flex-direction:column;gap:0;animation:ptl-enter .2s ease-out}@keyframes ptl-enter{0%{opacity:0}to{opacity:1}}.ptl-live{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:6px;font-size:12px;font-weight:500}.ptl-live-think{background:var(--accent-soft);color:var(--accent)}.ptl-live-tool{background:#34d3990f;color:var(--green)}.ptl-live-icon{display:flex;align-items:center;flex-shrink:0}.ptl-live-think .ptl-live-icon{animation:ptl-spin 3s linear infinite}@keyframes ptl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptl-live-text{white-space:nowrap}.ptl-live-tool-name{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:600;background:#34d3991a;padding:2px 8px;border-radius:4px}.ptl-live-shimmer{flex:1;height:2px;min-width:32px;border-radius:1px;background:linear-gradient(90deg,transparent 0%,currentColor 50%,transparent 100%);opacity:.25;background-size:200% 100%;animation:ptl-shimmer 1.5s ease-in-out infinite}@keyframes ptl-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.ptl-live-elapsed{font-size:10px;font-family:JetBrains Mono,SF Mono,monospace;color:var(--text-secondary);white-space:nowrap}.ptl-last-tool-summary{display:flex;align-items:baseline;gap:6px;padding:4px 12px;font-size:11px;color:var(--text-secondary);border-bottom:1px solid rgba(128,128,128,.08)}.ptl-last-tool-label{font-weight:600;white-space:nowrap;color:var(--green);font-size:10px;text-transform:uppercase;letter-spacing:.3px}.ptl-last-tool-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ptl-autonomy-card{border-left-color:var(--yellow)}.ptl-autonomy-detail{color:var(--text-secondary);font-size:11px;padding:4px 8px}.task-runtime-metric-approval{color:var(--yellow);font-weight:600}.ptl-completion{display:flex;align-items:center;gap:6px;padding:6px 12px;margin-top:4px;border-radius:6px;font-size:11px;font-weight:600}.ptl-completion-icon{font-size:13px;line-height:1}.ptl-completion-done{color:var(--green);background:#10b98114}.ptl-completion-failed{color:var(--red);background:#ef444414}.ptl-completion-cancelled{color:var(--text-secondary);background:#8080800f}.ptl-expand{display:flex;align-items:center;gap:4px;border:none;background:transparent;color:var(--text-secondary);font-size:11px;font-weight:500;font-family:inherit;cursor:pointer;padding:4px 12px;margin-bottom:2px;transition:color .12s}.ptl-expand:hover{color:var(--accent)}.ptl-timeline{display:flex;flex-direction:column;padding-left:2px}.ptl-entry{display:flex;gap:0;min-height:30px;animation:ptl-entry-in .18s ease-out}@keyframes ptl-entry-in{0%{opacity:0}to{opacity:1}}.ptl-connector{display:flex;flex-direction:column;align-items:center;width:26px;flex-shrink:0}.ptl-dot{width:22px;height:22px;border-radius:6px;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:border-color .2s,background .2s}.ptl-dot svg{width:12px;height:12px}.ptl-entry:hover .ptl-dot{border-color:currentColor;background:color-mix(in srgb,currentColor 6%,var(--surface))}.ptl-line{width:1px;flex:1;background:var(--border);min-height:8px}.ptl-entry-last .ptl-line{display:none}.ptl-content{flex:1;min-width:0;padding:2px 0 8px 8px}.ptl-row{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;min-height:22px}.ptl-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;flex-shrink:0}.ptl-tool-badge{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;font-weight:600;background:#34d39914;color:var(--green);padding:1px 7px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.ptl-summary{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.ptl-tool-card{width:100%;min-width:0;background:color-mix(in srgb,var(--surface) 78%,#d9dde5 22%);border:1px solid var(--border);border-radius:10px;overflow:hidden}.ptl-tool-toggle{width:100%;border:none;background:transparent;padding:8px 10px;text-align:left}.ptl-tool-toggle.clickable{cursor:pointer}.ptl-tool-toggle.clickable:hover{background:color-mix(in srgb,var(--surface) 70%,#e7ebf2 30%)}.ptl-tool-chevron{margin-left:auto;color:var(--text-secondary);display:inline-flex;align-items:center}.ptl-tool-card-detail{border-top:1px solid var(--border);padding:9px 10px 10px;margin:0;font-size:11px;color:var(--text-secondary);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;overflow-x:auto;max-width:100%;font-family:JetBrains Mono,SF Mono,monospace;background:color-mix(in srgb,var(--surface) 86%,#f2f4f8 14%)}.ptl-thinking-detail{font-family:inherit;font-size:12px;line-height:1.6;color:var(--text);max-height:300px;overflow-y:auto}.ptl-time{font-size:10px;color:var(--text-secondary);opacity:.5;flex-shrink:0;white-space:nowrap}.ptl-detail{font-size:11px;color:var(--text-secondary);opacity:.7;margin-top:2px;padding-left:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:JetBrains Mono,SF Mono,monospace;max-width:400px}.ckpt-escalation{border-color:color-mix(in srgb,var(--yellow) 55%,var(--border) 45%)}.ckpt-icon-escalation{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 14%,transparent)}.ckpt-escalation-body{display:flex;flex-direction:column;gap:6px;margin-top:10px}.ckpt-escalation-line{font-size:12px;color:var(--text-secondary);white-space:pre-wrap;word-break:break-word}.ckpt-escalation-actions{flex-wrap:wrap}.ckpt-escalation-hint{margin-top:10px;font-size:11px;color:var(--text-secondary)}.agent-working-row .ptl-block{border:1px dashed var(--border-hover);border-radius:var(--radius-sm);padding:10px 12px;background:transparent}.code-block-wrap{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;margin:8px 0}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:5px 12px;background:var(--surface);border-bottom:1px solid var(--border)}.code-block-lang{font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.code-block-copy{border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:10px;font-family:inherit;display:flex;align-items:center;gap:4px;padding:2px 6px;border-radius:4px;transition:all .12s}.code-block-copy:hover{color:var(--text);background:var(--surface-hover)}.code-block-wrap pre{margin:0;border:none;border-radius:0;background:var(--bg)!important}.msg-composer{padding:4px 24px 16px;flex-shrink:0;max-width:820px;width:100%;margin:0 auto}.msg-composer .composer-input-area{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden;transition:border-color .2s,box-shadow .2s;box-shadow:0 2px 8px #0000000f}.msg-composer.focused .composer-input-area{border-color:var(--accent);box-shadow:0 2px 12px #00000014,0 0 0 3px var(--accent-glow)}.msg-composer .composer-input-area textarea{width:100%;padding:14px 16px 0;border:none;background:transparent;color:var(--text);font-size:14px;font-family:inherit;outline:none;resize:none;min-height:24px;max-height:200px;line-height:1.5}.msg-composer .composer-input-area textarea::placeholder{color:var(--text-secondary)}.composer-bottom{display:flex;align-items:center;gap:8px;padding:6px 8px 8px 16px}.composer-config-group{display:inline-flex;align-items:center;gap:4px;padding:4px 6px;border-radius:18px;border:1px solid color-mix(in srgb,var(--border) 78%,var(--accent-soft) 22%);background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 88%,white 12%),color-mix(in srgb,var(--surface) 86%,var(--bg-elevated) 14%));box-shadow:inset 0 1px #ffffff14,0 10px 20px #0f172a14;min-width:0;flex-shrink:0}.composer-config-divider{width:1px;height:24px;background:color-mix(in srgb,var(--border) 72%,transparent 28%);border-radius:999px;flex-shrink:0}.composer-mode-inline{display:inline-flex;align-items:center;gap:8px;min-width:0;flex-shrink:0;padding:0 4px}.composer-mode-inline-label{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);white-space:nowrap}.composer-mode-inline[data-kind=mode] .composer-mode-inline-label{color:color-mix(in srgb,var(--accent) 74%,var(--text-secondary) 26%)}.composer-mode-inline[data-kind=agent] .composer-mode-inline-label{color:color-mix(in srgb,var(--yellow) 78%,var(--text-secondary) 22%)}.composer-mode-inline[data-kind=org] .composer-mode-inline-label{color:color-mix(in srgb,var(--green) 74%,var(--text-secondary) 26%)}.composer-mode-select-wrap{position:relative;display:inline-flex;align-items:center}.composer-mode-select-wrap:after{content:"";position:absolute;right:11px;top:50%;width:6px;height:6px;border-right:1.5px solid var(--text-secondary);border-bottom:1.5px solid var(--text-secondary);transform:translateY(-65%) rotate(45deg);pointer-events:none}.composer-mode-select{appearance:none;min-height:30px;max-width:210px;padding:5px 28px 5px 12px;border:1px solid transparent;border-radius:12px;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);color:var(--text);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s,transform .15s}.composer-mode-select:hover{border-color:color-mix(in srgb,var(--border-hover) 70%,var(--accent-soft) 30%);background:color-mix(in srgb,var(--surface-hover) 76%,var(--bg-elevated) 24%)}.composer-mode-select:focus{outline:none;border-color:color-mix(in srgb,var(--accent) 52%,var(--border) 48%);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent-soft) 78%,transparent 22%)}.composer-mode-select:disabled{opacity:.5;cursor:default}.composer-mode-inline[data-kind=org] .composer-mode-select{max-width:260px}.composer-hint{font-size:10px;color:var(--text-secondary);opacity:.5;flex:1}.composer-mode{font-size:10px;font-weight:600;padding:6px 10px;border-radius:10px;background:color-mix(in srgb,var(--surface) 72%,var(--bg-elevated) 28%);color:var(--text);flex-shrink:0}.composer-mode[data-kind=mode]{color:var(--accent)}.composer-mode[data-kind=agent]{color:var(--yellow)}.composer-config-group[data-locked=true]{background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 94%,transparent 6%),color-mix(in srgb,var(--surface) 92%,var(--bg-elevated) 8%));border-color:color-mix(in srgb,var(--border) 90%,transparent 10%);box-shadow:none}.composer-mode-chip{position:relative;display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent 22%);background:color-mix(in srgb,var(--surface) 60%,var(--bg-elevated) 40%);font-size:11px;font-weight:600;color:var(--text);white-space:nowrap;cursor:default;outline:none;transition:border-color .15s,background .15s}.composer-mode-chip:before{content:"";position:absolute;bottom:100%;left:-8px;right:-8px;height:12px;background:transparent;pointer-events:none}.composer-mode-chip:hover:before,.composer-mode-chip:focus-within:before{pointer-events:auto}.composer-mode-chip:hover,.composer-mode-chip:focus-visible{border-color:color-mix(in srgb,var(--border-hover) 78%,var(--accent-soft) 22%);background:color-mix(in srgb,var(--surface-hover) 70%,var(--bg-elevated) 30%)}.composer-mode-chip[data-kind=mode]{color:color-mix(in srgb,var(--accent) 92%,var(--text) 8%)}.composer-mode-chip[data-kind=agent]{color:color-mix(in srgb,var(--yellow) 88%,var(--text) 12%)}.composer-mode-chip-icon{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:6px;background:color-mix(in srgb,currentColor 14%,transparent 86%);color:currentColor;flex-shrink:0;opacity:.85}.composer-mode-chip-label{letter-spacing:.01em}.composer-mode-chip-popover{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%) translateY(4px);display:flex;flex-direction:column;gap:4px;min-width:220px;max-width:280px;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);font-size:11px;font-weight:400;line-height:1.45;letter-spacing:0;text-align:left;white-space:normal;box-shadow:0 8px 24px #0f172a2e,0 2px 6px #0f172a14;opacity:0;pointer-events:none;visibility:hidden;transition:opacity .14s ease,transform .14s ease,visibility .14s ease;z-index:20}.composer-mode-chip-popover:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid var(--bg-elevated);filter:drop-shadow(0 1px 0 var(--border))}.composer-mode-chip:hover .composer-mode-chip-popover,.composer-mode-chip:focus-visible .composer-mode-chip-popover,.composer-mode-chip:focus-within .composer-mode-chip-popover{opacity:1;pointer-events:auto;visibility:visible;transform:translate(-50%) translateY(0)}.composer-mode-chip-popover-title{font-size:11px;font-weight:600;color:var(--text);letter-spacing:.01em}.composer-mode-chip-popover-body{font-size:11px;color:var(--text-secondary)}.composer-mode-chip-popover-body strong{color:var(--text);font-weight:600}.composer-mode-chip-popover-divider{height:1px;margin:4px -12px 2px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--border) 80%,transparent 20%) 16%,color-mix(in srgb,var(--border) 80%,transparent 20%) 84%,transparent 100%)}.composer-mode-chip-popover-action-title{margin-top:2px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.composer-mode-chip-popover-actions{display:flex;flex-direction:column;gap:4px;margin:2px -4px -2px}.composer-mode-chip-popover-action{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:11px;text-align:left;cursor:pointer;transition:background .14s ease,border-color .14s ease,transform .14s ease}.composer-mode-chip-popover-action:hover,.composer-mode-chip-popover-action:focus-visible{background:color-mix(in srgb,var(--accent-soft) 35%,var(--surface) 65%);border-color:color-mix(in srgb,var(--accent) 36%,transparent 64%);outline:none}.composer-mode-chip-popover-action:active{transform:scale(.985)}.composer-mode-chip-popover-action-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);color:var(--accent);flex-shrink:0;transition:background .14s ease,color .14s ease}.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-icon,.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-icon{background:color-mix(in srgb,var(--accent) 18%,var(--surface) 82%);color:var(--accent)}.composer-mode-chip-popover-action-text{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.composer-mode-chip-popover-action-label{font-size:11.5px;font-weight:600;color:var(--text);line-height:1.25}.composer-mode-chip-popover-action-desc{font-size:10px;color:var(--text-secondary);line-height:1.3}.composer-mode-chip-popover-action-arrow{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--text-secondary);opacity:.6;transform:translate(-2px);transition:transform .16s ease,opacity .16s ease,color .16s ease;flex-shrink:0}.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-arrow,.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-arrow{opacity:1;color:var(--accent);transform:translate(0)}@container ctxpanel (max-width: 540px){.composer-mode-chip-popover{left:auto;right:0;transform:translateY(4px)}.composer-mode-chip-popover:after{left:auto;right:16px;transform:none}.composer-mode-chip:hover .composer-mode-chip-popover,.composer-mode-chip:focus-visible .composer-mode-chip-popover,.composer-mode-chip:focus-within .composer-mode-chip-popover{transform:translateY(0)}}.composer-send-btn{width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s}.composer-send-btn:disabled{opacity:.3;cursor:default}.composer-send-btn:not(:disabled):hover{filter:brightness(1.15);transform:scale(1.05)}@container ctxpanel (max-width: 540px){.composer-bottom{display:grid;grid-template-columns:36px minmax(0,1fr) 32px 32px;grid-template-areas:"attach hint context send" "config config config config";align-items:center;row-gap:8px;column-gap:8px}.composer-config-group{grid-area:config;width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;justify-content:stretch;padding:6px;border-radius:16px}.composer-mode-inline{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;min-width:0;padding:0}.composer-mode-select-wrap{width:100%;min-width:0}.composer-mode-select{max-width:none;width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.composer-config-divider{height:28px}.composer-attach-btn{grid-area:attach}.composer-hint{grid-area:hint;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-context-ring{grid-area:context;justify-self:end}.composer-send-btn{grid-area:send;justify-self:end}}@media(max-width:760px){.composer-bottom{display:grid;grid-template-columns:36px minmax(0,1fr) 32px 32px;grid-template-areas:"attach hint context send" "config config config config";align-items:center;row-gap:8px;column-gap:8px}.composer-config-group{grid-area:config;width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;justify-content:stretch}.composer-mode-inline{display:grid;grid-template-columns:auto minmax(0,1fr);min-width:0}.composer-mode-select-wrap,.composer-mode-select{width:100%;min-width:0;max-width:none}.composer-attach-btn{grid-area:attach}.composer-hint{grid-area:hint;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.composer-context-ring{grid-area:context;justify-self:end}.composer-send-btn{grid-area:send;justify-self:end}}@container ctxpanel (max-width: 430px){.msg-composer{padding-left:14px;padding-right:14px}.msg-composer .composer-input-area textarea{padding:13px 14px 2px}.composer-bottom{grid-template-columns:36px minmax(0,1fr) 32px;grid-template-areas:"attach hint send" "config config config"}.composer-context-ring{display:none}.composer-config-group{grid-template-columns:1fr;gap:6px;border-radius:14px}.composer-config-divider{display:none}.composer-mode-inline{grid-template-columns:minmax(68px,auto) minmax(0,1fr);gap:8px;width:100%}}@media(max-width:430px){.composer-bottom{grid-template-columns:36px minmax(0,1fr) 32px;grid-template-areas:"attach hint send" "config config config"}.composer-context-ring{display:none}.composer-config-group{grid-template-columns:1fr}.composer-config-divider{display:none}.composer-mode-inline{grid-template-columns:minmax(68px,auto) minmax(0,1fr);width:100%}}.composer-status{display:flex;align-items:center;gap:8px;padding:8px 16px;margin-bottom:6px;border-radius:10px;background:var(--surface);border:1px solid var(--border);font-size:12px;box-shadow:0 1px 4px #0000000a}.composer-status-indicator{width:7px;height:7px;border-radius:50%;background:var(--green);flex-shrink:0;box-shadow:0 0 6px #10b98166}.composer-status-text{flex:1;color:var(--text-secondary);font-weight:500;letter-spacing:.01em}.composer-stop-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 12px;border:1px solid var(--red);border-radius:var(--radius-xs);background:transparent;color:var(--red);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.composer-stop-btn:hover{background:var(--red);color:#fff}.composer-stop-btn:disabled{opacity:.45;cursor:not-allowed}.composer-stop-btn:disabled:hover{background:transparent;color:var(--red)}.msg-composer .composer-input-area textarea:disabled{cursor:not-allowed;opacity:.5}.msg-composer .composer-input-area textarea:disabled::placeholder{font-style:italic}.msg-composer.working .composer-input-area{border-color:var(--green);box-shadow:0 0 0 2px #34d39914}.chat-main.chat-main-split{flex:1}.child-sessions-container{flex:1;display:flex;flex-direction:column;overflow-y:auto;border-left:1px solid var(--border);min-width:300px;max-width:50%}.child-session-panel{display:flex;flex-direction:column;border-bottom:1px solid var(--border);min-height:200px;max-height:400px}.child-session-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px}.child-session-agent{font-weight:700;color:var(--accent)}.child-session-title{flex:1;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.child-session-status{font-size:10px;padding:2px 6px;border-radius:999px;background:var(--bg);border:1px solid var(--border)}.child-session-status.status-running{color:var(--yellow);border-color:var(--yellow)}.child-session-status.status-done{color:var(--green);border-color:var(--green)}.child-session-status.status-failed{color:var(--red);border-color:var(--red)}.child-session-messages{flex:1;overflow-y:auto;min-height:0}.awp{display:flex;flex-direction:column;border-left:1px solid var(--border);width:clamp(280px,30vw,420px);min-width:280px;min-height:0;background:var(--bg);overflow:hidden}.awp-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.awp-title{font-size:12px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px}.awp-count{font-weight:400;font-size:10px;color:var(--text-secondary);background:var(--bg);padding:1px 6px;border-radius:999px;border:1px solid var(--border)}.awp-controls{display:flex;align-items:center;gap:4px}.awp-filter{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--bg);color:var(--text-secondary);border:1px solid var(--border);cursor:pointer}.awp-filter:focus{outline:1px solid var(--accent)}.awp-search-toggle{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:2px;border-radius:4px;display:flex;align-items:center}.awp-search-toggle:hover,.awp-search-toggle.active{color:var(--accent);background:var(--bg)}.awp-search-toggle svg{width:14px;height:14px}.awp-search-bar{padding:4px 8px;border-bottom:1px solid var(--border);flex-shrink:0}.awp-search-input{width:100%;font-size:11px;padding:4px 8px;border-radius:4px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.awp-search-input:focus{outline:1px solid var(--accent);border-color:var(--accent)}.awp-list{flex:1 1 260px;min-height:180px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.awp-row{display:flex;align-items:center;gap:8px;width:100%;padding:6px 12px;border:none;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent);background:transparent;color:var(--text);cursor:pointer;text-align:left;font-size:11px;transition:background .12s}.awp-row:hover{background:var(--bg-elevated)}.awp-row-selected{background:color-mix(in srgb,var(--accent) 8%,transparent);border-left:2px solid var(--accent);padding-left:10px}.awp-row-active .awp-row-activity{color:var(--accent);font-weight:600}.awp-dot{width:6px;height:6px;border-radius:50%;background:var(--text-secondary);flex-shrink:0;opacity:.5}.awp-dot-active{background:var(--green);opacity:1;box-shadow:0 0 4px var(--green);animation:awp-pulse 2s ease-in-out infinite}@keyframes awp-pulse{0%,to{opacity:1}50%{opacity:.5}}.awp-row-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.awp-row-name{font-weight:600;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.awp-row-projection{font-size:9px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}.awp-row-activity{font-size:10px;color:var(--text-secondary);white-space:nowrap;max-width:100px;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}.awp-row-time{font-size:9px;color:var(--text-muted, var(--text-secondary));opacity:.6;white-space:nowrap;flex-shrink:0;min-width:20px;text-align:right}.awp-empty{padding:16px;text-align:center;font-size:11px;color:var(--text-secondary)}.awp-detail{flex:1;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.awp-detail-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--bg-elevated);flex-shrink:0}.awp-detail-identity{display:flex;align-items:center;gap:8px;min-width:0}.awp-detail-avatar{width:28px;height:28px;border-radius:6px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.awp-detail-meta{display:flex;flex-direction:column;min-width:0}.awp-detail-name{font-size:12px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:capitalize}.awp-detail-projection{font-size:10px;color:var(--accent);text-transform:capitalize}.awp-detail-role{font-size:10px;color:var(--green)}.awp-detail-employee{font-size:10px;color:var(--text-secondary)}.awp-detail-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}.awp-detail-expand,.awp-detail-close{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center}.awp-detail-expand:hover,.awp-detail-close:hover{color:var(--text);background:var(--bg)}.awp-detail-expand svg,.awp-detail-close svg{width:14px;height:14px}.awp-detail-body{flex:1;overflow-y:auto;padding:8px 12px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.awp-detail-section{margin-bottom:12px}.awp-detail-section-label{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.awp-detail-section-label svg{width:12px;height:12px}.awp-detail-handoff{font-size:11px;color:var(--text-secondary);max-height:220px;overflow-y:auto}.awp-detail-handoff-markdown{padding:2px 0}.awp-detail-empty{font-size:11px;color:var(--text-secondary);text-align:center;padding:12px}.awp-terminal-icon{width:16px;flex-shrink:0;font-size:11px;font-weight:700;text-align:center;line-height:1}.awp-terminal-done{color:var(--green)}.awp-terminal-failed{color:var(--red)}.awp-terminal-cancelled{color:var(--text-secondary);opacity:.6}.awp-row-terminal{opacity:.7}.awp-row-terminal:hover{opacity:.9}.awp-row-terminal .awp-row-activity{font-weight:500}.awp-row-terminal.awp-terminal-done .awp-row-activity{color:var(--green)}.awp-row-terminal.awp-terminal-failed .awp-row-activity{color:var(--red)}.awp-result-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin:8px 12px 12px;border-radius:8px;font-size:12px;font-weight:500}.awp-result-icon{font-size:14px;font-weight:700;line-height:1}.awp-result-done{background:#10b9811a;color:var(--green);border:1px solid rgba(16,185,129,.2)}.awp-result-failed{background:#ef44441a;color:var(--red);border:1px solid rgba(239,68,68,.2)}.awp-result-cancelled{background:#80808014;color:var(--text-secondary);border:1px solid var(--border)}.awp-detail-avatar.awp-terminal-done{border:2px solid var(--green)}.awp-detail-avatar.awp-terminal-failed{border:2px solid var(--red)}.awp-detail-avatar.awp-terminal-cancelled{border:2px solid var(--text-secondary);opacity:.6}.kanban-status-badge{font-size:10px;font-weight:600;display:inline-flex;align-items:center;margin-left:auto}@media(max-width:1024px){.session-sidebar{width:60px;min-width:60px}.session-new-btn span{display:none}.session-new-btn{justify-content:center;padding:10px}.session-search-wrap,.session-group-label,.session-item-content{display:none}.session-item{padding:10px;justify-content:center;margin:1px 4px;width:calc(100% - 8px);border-left:none}.session-item.active{border-left:none}.session-dot{width:10px;height:10px}.session-nav-btn span{display:none}.session-nav-btn{justify-content:center}.session-expand-btn,.session-children,.session-child-count{display:none}.session-tree-primary{justify-content:center}.session-delete-btn{display:none}}@media(max-width:700px){.chat-page{flex-direction:column}.session-sidebar{width:100%;max-height:52px;border-right:none;border-bottom:1px solid var(--border);flex-direction:row;overflow:hidden}.session-new-btn{margin:8px;padding:6px 12px}.session-search-wrap{display:none}.session-list{display:flex;overflow-x:auto;padding:4px 8px;gap:4px;flex-direction:row}.session-list.session-list-virtualized{display:block;overflow-x:hidden;overflow-y:auto;padding:4px 8px}.session-group{display:flex;gap:2px;margin-bottom:0}.session-group-label{display:none}.session-item{white-space:nowrap;padding:4px 10px;border-radius:999px;border:1px solid var(--border);flex-shrink:0;margin:0;width:auto}.session-item.active{border-color:var(--accent);background:var(--accent-soft);border-left:none}.session-item-meta,.session-nav-btn,.session-expand-btn,.session-children,.session-child-count,.session-item.session-item-child{display:none}.session-tree-primary{flex-shrink:0}.msg-row{padding:8px 16px}.msg-body-user{max-width:85%}.msg-composer{padding:0 12px 12px}.msg-composer .composer-input-area textarea{font-size:16px}}.ckpt-panel{border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden;animation:msg-enter .2s ease-out}.ckpt-recruitment{border-left:3px solid var(--accent)}.ckpt-staffing{border-left:3px solid var(--green)}.ckpt-reorg{border-left:3px solid var(--yellow)}.ckpt-user-input{border-left:3px solid var(--blue)}.ckpt-header{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--border)}.ckpt-icon{width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ckpt-icon-recruit{background:var(--accent-soft);color:var(--accent)}.ckpt-icon-staffing{background:#34d3991a;color:var(--green)}.ckpt-icon-reorg{background:#fbbf241a;color:var(--yellow)}.ckpt-icon-user-input{background:#3b82f61a;color:var(--blue)}.ckpt-title{font-size:13px;font-weight:600;color:var(--text);flex:1}.ckpt-badge{font-size:10px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary);flex-shrink:0}.ckpt-badge-profile{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.ckpt-badge-responded{color:var(--green);border-color:var(--green);background:#34d3990f}.ckpt-badge-scope{color:var(--yellow);border-color:var(--yellow);background:#fbbf240f}.ckpt-badge-proposed_hire{color:var(--accent);border-color:var(--accent)}.ckpt-badge-existing_staff{color:var(--green);border-color:var(--green)}.ckpt-badge-fallback_role_only{color:var(--text-secondary)}.ckpt-badge-direct_role_execution{color:var(--blue);border-color:var(--blue)}.ckpt-badge-employee{color:var(--green);border-color:var(--green)}.ckpt-badge-template{color:var(--accent);border-color:var(--accent)}.ckpt-badge-fallback{color:var(--text-secondary)}.ckpt-summary{padding:10px 14px;font-size:13px;line-height:1.55;color:var(--text);border-bottom:1px solid var(--border);background:var(--bg)}.ckpt-rationale{padding:6px 14px;font-size:12px;line-height:1.5;color:var(--text-secondary);font-style:italic}.ckpt-recruitment-reasons{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1px;background:var(--border);border-bottom:1px solid var(--border)}.ckpt-recruitment-reason{min-width:0;padding:10px 14px;background:var(--bg)}.ckpt-recruitment-reason .ckpt-rationale{padding:0}.ckpt-proposals{display:flex;flex-direction:column;gap:1px;background:var(--border)}.ckpt-proposal-card{padding:10px 14px;background:var(--bg)}.ckpt-proposal-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.ckpt-role-name{font-size:13px;font-weight:600;color:var(--text);font-family:JetBrains Mono,SF Mono,monospace}.ckpt-role-labels{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:6px}.ckpt-field-tag{font-size:10px;font-weight:500;padding:1px 6px;border-radius:3px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}.ckpt-candidate,.ckpt-employee{padding:8px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid var(--border);margin-top:4px}.ckpt-cand-name,.ckpt-emp-name{font-size:13px;font-weight:600;color:var(--text)}.ckpt-cand-meta{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}.ckpt-cand-category{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--accent)}.ckpt-domain-tag{font-size:10px;padding:1px 6px;border-radius:3px;background:#34d39914;color:var(--green);font-weight:500}.ckpt-emp-row{display:flex;align-items:center;gap:8px}.ckpt-emp-id{font-size:11px;color:var(--text-secondary);font-family:JetBrains Mono,SF Mono,monospace}.ckpt-exp-bar-wrap{display:flex;align-items:center;gap:8px;margin-top:6px;height:16px;background:var(--bg);border-radius:8px;overflow:hidden;border:1px solid var(--border);position:relative}.ckpt-exp-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--green));border-radius:8px 0 0 8px;transition:width .5s ease-out;min-width:4px}.ckpt-exp-label{position:absolute;right:6px;font-size:9px;font-weight:700;color:var(--text)}.ckpt-agent-picker{display:flex;align-items:center;gap:10px;margin-top:10px}.ckpt-recruiter-agent{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 72%,var(--bg))}.ckpt-agent-label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:0;flex:0 0 auto}.ckpt-agent-select{min-width:180px;max-width:100%;padding:7px 10px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:12px;line-height:1.2}.ckpt-agent-select:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1px;background:var(--border)}.ckpt-staffing-card{min-width:0;padding:10px 14px;background:var(--bg)}.ckpt-staffing-selected{padding:8px 10px;border-radius:var(--radius-xs);background:var(--surface);border:1px solid var(--border);margin-bottom:8px}.ckpt-staffing-search{width:100%;padding:7px 10px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:12px;font-family:inherit;outline:none}.ckpt-staffing-search:focus{border-color:var(--accent)}.ckpt-staffing-search:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:6px;margin-top:8px}.ckpt-staffing-option{min-width:0;min-height:42px;padding:6px 8px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);font-family:inherit;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:3px;transition:border-color .12s,background .12s}.ckpt-staffing-option:hover:not(:disabled){border-color:var(--accent);background:var(--surface-hover)}.ckpt-staffing-option.active{border-color:var(--green);background:#34d39914}.ckpt-staffing-option:disabled{opacity:.7;cursor:not-allowed}.ckpt-staffing-option-kind{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}.ckpt-staffing-option-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600}@media(max-width:640px){.ckpt-recruiter-agent,.ckpt-agent-picker{align-items:stretch;flex-direction:column;gap:6px}.ckpt-agent-select{width:100%;min-width:0}}.ckpt-reorg-badges{display:flex;gap:6px;padding:8px 14px;border-bottom:1px solid var(--border)}.ckpt-changes-section{padding:8px 14px;border-top:1px solid var(--border)}.ckpt-changes-title{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ckpt-change-row{display:flex;align-items:center;gap:6px;padding:3px 0;font-size:12px}.ckpt-change-action{font-size:10px;font-weight:600;padding:1px 6px;border-radius:3px;text-transform:uppercase}.ckpt-action-add{background:#34d3991a;color:var(--green)}.ckpt-action-remove{background:#f871711a;color:var(--red)}.ckpt-action-replace{background:#fbbf241a;color:var(--yellow)}.ckpt-action-update{background:var(--accent-soft);color:var(--accent)}.ckpt-change-id{font-family:JetBrains Mono,SF Mono,monospace;font-size:12px;font-weight:500;color:var(--text)}.ckpt-change-arrow{color:var(--text-secondary);font-size:12px}.ckpt-change-reason{color:var(--text-secondary);font-size:11px;margin-left:auto;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ckpt-impact{display:flex;gap:16px;padding:8px 14px;border-top:1px solid var(--border);font-size:11px;color:var(--text-secondary)}.ckpt-section,.ckpt-task-section{padding:10px 14px 0}.ckpt-section+.ckpt-section,.ckpt-task-section+.ckpt-task-section{border-top:1px solid rgba(148,163,184,.12);margin-top:10px}.ckpt-section-title,.ckpt-task-section-title{margin-bottom:8px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.ckpt-markdown{min-width:0;font-size:13px;line-height:1.58;color:var(--text)}.ckpt-markdown-muted{color:var(--text-secondary)}.ckpt-markdown>:first-child{margin-top:0}.ckpt-markdown>:last-child{margin-bottom:0}.ckpt-markdown p{margin:0 0 8px}.ckpt-markdown ul,.ckpt-markdown ol{margin:0 0 8px;padding-left:20px}.ckpt-markdown li+li{margin-top:4px}.ckpt-markdown code{font-size:12px;border-radius:4px;padding:1px 4px;background:var(--surface);border:1px solid var(--border)}.ckpt-markdown pre code{padding:0;border:0;background:transparent}.ckpt-task-prompt{padding:10px 14px;font-size:13px;line-height:1.55;color:var(--text);white-space:pre-wrap;background:var(--bg)}.ckpt-task-list{margin:0;padding-left:18px;color:var(--text)}.ckpt-task-list li+li{margin-top:6px}.ckpt-task-tags{display:flex;gap:6px;flex-wrap:wrap}.ckpt-task-note{padding:10px 14px 0;font-size:12px;line-height:1.5;color:var(--text-secondary)}.ckpt-choice-list{display:grid;gap:12px}.ckpt-choice-question{display:grid;gap:8px;min-width:0}.ckpt-question-header{font-size:13px;font-weight:700;color:var(--text)}.ckpt-choice-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.ckpt-choice-option{display:grid;grid-template-columns:28px 1fr;gap:8px;align-items:flex-start;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);color:var(--text);text-align:left;font:inherit;cursor:pointer}.ckpt-choice-option:hover{border-color:var(--accent);background:var(--surface-hover)}.ckpt-choice-option.is-selected{border-color:var(--accent);background:var(--accent-soft)}.ckpt-choice-letter{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:999px;background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);font-size:11px;font-weight:700}.ckpt-choice-option.is-selected .ckpt-choice-letter{background:var(--accent);border-color:var(--accent);color:#fff}.ckpt-choice-copy{display:grid;gap:3px;min-width:0}.ckpt-choice-label{font-size:12px;font-weight:700;color:var(--text)}.ckpt-choice-desc{font-size:12px;line-height:1.35;color:var(--text-secondary)}.ckpt-other-field{min-height:64px}.ckpt-runtime-details{margin:10px 14px 0;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary)}.ckpt-runtime-details summary{cursor:pointer;padding:8px 10px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.ckpt-runtime-body{display:grid;gap:5px;padding:0 10px 10px;font-size:12px;line-height:1.45}.ckpt-actions{display:flex;gap:8px;padding:10px 14px;border-top:1px solid var(--border);background:var(--surface)}.ckpt-actions-inline-feedback{align-items:stretch}.ckpt-btn{padding:6px 16px;border-radius:var(--radius-xs);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer;border:1px solid transparent;transition:all .12s}.ckpt-btn:disabled{opacity:.4;cursor:default}.ckpt-btn-approve{background:var(--green);color:#fff;border-color:var(--green)}.ckpt-btn-approve:not(:disabled):hover{filter:brightness(1.1)}.ckpt-btn-deny{background:transparent;color:var(--red);border-color:var(--red)}.ckpt-btn-deny:hover{background:var(--red);color:#fff}.ckpt-btn-feedback{background:transparent;color:var(--accent);border-color:var(--accent)}.ckpt-btn-feedback:hover{background:var(--accent-soft)}.ckpt-btn-cancel{background:transparent;color:var(--text-secondary);border-color:var(--border)}.ckpt-btn-cancel:hover{background:var(--surface-hover)}.ckpt-feedback-area{flex:1;display:flex;flex-direction:column;gap:6px;padding:10px 14px;border-top:1px solid var(--border);background:var(--surface)}.ckpt-feedback-input{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);color:var(--text);font-size:12px;font-family:inherit;resize:vertical;outline:none;min-height:48px}.ckpt-feedback-input:focus{border-color:var(--accent)}.ckpt-feedback-inline-input{min-height:34px;flex:1;resize:vertical}.ckpt-feedback-btns{display:flex;gap:6px}@media(max-width:640px){.ckpt-actions-inline-feedback{flex-direction:column}}.wi-progress-card{width:100%;min-width:0;flex-shrink:0;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:10px}.wi-progress-header{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text-primary)}.wi-progress-header svg{color:var(--accent)}.wi-progress-pipeline{display:flex;align-items:center;gap:0;flex-wrap:wrap;row-gap:6px}.wi-projection-group{display:flex;align-items:center;gap:0}.wi-projection-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:500;border:1px solid var(--border);background:transparent;cursor:pointer;font-family:inherit;transition:background .12s,border-color .12s;white-space:nowrap}.wi-projection-chip:hover{background:var(--surface-hover, rgba(255, 255, 255, .04))}.wi-projection-label{max-width:120px;overflow:hidden;text-overflow:ellipsis}.wi-projection-icon{font-size:10px;line-height:1}.wi-projection-active{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.wi-projection-done{border-color:var(--green);color:var(--green);background:color-mix(in srgb,var(--green) 10%,transparent)}.wi-projection-failed{border-color:var(--red);color:var(--red);background:color-mix(in srgb,var(--red) 10%,transparent)}.wi-projection-waiting{border-color:var(--yellow);color:var(--yellow);background:color-mix(in srgb,var(--yellow) 10%,transparent)}.wi-projection-pending{color:var(--text-secondary)}@keyframes wf-pulse{0%,to{opacity:1}50%{opacity:.3}}.wi-projection-pulse{animation:wf-pulse 1.5s ease-in-out infinite}.wi-projection-connector{margin:0 4px;color:var(--text-tertiary, var(--text-secondary));font-size:12px;opacity:.6}.wi-progress-toggle{align-self:flex-start;margin-top:-2px}.wf-role-summaries{display:flex;flex-direction:column;gap:10px}.wf-role-summary{border:1px solid color-mix(in srgb,var(--border) 88%,transparent);border-radius:8px;background:color-mix(in srgb,var(--surface) 92%,transparent);padding:10px 11px;display:flex;flex-direction:column;gap:10px}.wf-role-summary-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.wf-role-summary-identity{min-width:0;display:flex;flex-direction:column;gap:6px}.wf-role-summary-meta{display:flex;flex-wrap:wrap;gap:6px 8px;font-size:11px;color:var(--text-secondary)}.wf-role-open{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:8px;padding:5px 9px;font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:border-color .12s,color .12s,background .12s;flex-shrink:0}.wf-role-open:hover{color:var(--text);border-color:var(--border-hover);background:var(--surface-hover)}.wf-role-summary-body{display:flex;flex-direction:column;gap:10px}.wf-role-summary-block{display:flex;flex-direction:column;gap:6px}.wf-role-summary-block-label{font-size:11px;font-weight:700;color:var(--text-secondary);text-transform:uppercase}.wf-role-summary-block-content{font-size:12px;line-height:1.55;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.wf-role-turns{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}.wf-role-turn{border-radius:6px;border:1px solid var(--border);background:var(--surface-muted, rgba(255, 255, 255, .03))}.wf-role-turn-button{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:6px 10px;background:transparent;border:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.wf-role-turn-button:hover{background:var(--surface-hover, rgba(255, 255, 255, .06))}.wf-role-turn-column{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--surface-muted, rgba(255, 255, 255, .06));color:var(--text-secondary);white-space:nowrap}.wf-role-turn-column-todo{background:color-mix(in srgb,var(--text-secondary) 18%,transparent);color:var(--text-secondary)}.wf-role-turn-column-in_progress{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.wf-role-turn-column-in_review{background:color-mix(in srgb,var(--yellow) 18%,transparent);color:var(--yellow)}.wf-role-turn-column-done{background:color-mix(in srgb,var(--green) 18%,transparent);color:var(--green)}.wf-role-turn-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--text-primary)}.wf-role-turn-time{font-size:11px;color:var(--text-secondary);flex-shrink:0}.wf-role-turn-active .wf-role-turn-title{font-weight:600}.wf-role-turn-failed .wf-role-turn-column{background:#ff64642e;color:#ff9696f2}.wf-role-turn-expander{border-style:dashed;background:transparent}.wf-role-turn-expander-button{width:100%;padding:6px 10px;background:transparent;border:none;color:var(--text-secondary);font:inherit;font-size:11px;cursor:pointer;text-align:center}.wf-role-turn-expander-button:hover{color:var(--text-primary);background:var(--surface-hover, rgba(255, 255, 255, .04))}.wf-event-row{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary);padding-top:4px;border-top:1px solid var(--border)}.wf-event-icon{display:flex;flex-shrink:0}.wf-event-icon svg{width:14px;height:14px}.wf-event-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-event-text strong{color:var(--text-primary);font-weight:600}.wf-event-time{flex-shrink:0;font-size:11px;opacity:.7}@media(max-width:640px){.wf-role-summary-head{flex-direction:column}.wf-role-open{width:fit-content}}.composer-attachments{display:flex;gap:10px;padding:10px 12px 6px;overflow-x:auto;scrollbar-width:thin}.attachment-chip{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-elevated) 85%,transparent),color-mix(in srgb,var(--surface) 92%,transparent));border:1px solid var(--border);box-shadow:inset 0 1px #ffffff08;min-width:220px;max-width:min(320px,72vw);flex-shrink:0}.attachment-chip.error{border-color:color-mix(in srgb,var(--red) 55%,var(--border));background:color-mix(in srgb,var(--red) 10%,var(--bg-elevated))}.attachment-chip-remove{position:absolute;top:8px;right:8px;width:22px;height:22px;border-radius:50%;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);color:var(--text-secondary);border:none;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease;display:inline-flex;align-items:center;justify-content:center}.attachment-chip:hover .attachment-chip-remove,.attachment-chip-remove:focus-visible{opacity:1}.attachment-chip-remove:hover{background:color-mix(in srgb,var(--red) 16%,var(--bg-elevated));color:var(--red)}.attachment-thumb{width:52px;height:52px;border-radius:12px;object-fit:cover;cursor:pointer;border:1px solid color-mix(in srgb,var(--border) 70%,transparent);background:color-mix(in srgb,var(--bg-elevated) 80%,transparent)}.attachment-file-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);border:1px solid color-mix(in srgb,var(--border) 75%,transparent);color:var(--text);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.attachment-file-icon.tone-image{background:color-mix(in srgb,var(--green) 12%,var(--bg-elevated));color:var(--green)}.attachment-file-icon.tone-video{background:color-mix(in srgb,var(--accent) 16%,var(--bg-elevated));color:color-mix(in srgb,var(--accent) 70%,var(--text))}.attachment-file-icon.tone-pdf{background:color-mix(in srgb,var(--red) 12%,var(--bg-elevated));color:var(--red)}.attachment-file-icon.tone-office{background:color-mix(in srgb,var(--yellow) 14%,var(--bg-elevated));color:var(--yellow)}.attachment-file-icon.tone-data{background:color-mix(in srgb,var(--accent) 14%,var(--bg-elevated));color:var(--accent)}.attachment-file-icon.tone-text{background:color-mix(in srgb,var(--text-secondary) 16%,var(--bg-elevated));color:var(--text)}.attachment-file-icon.tone-code{background:color-mix(in srgb,var(--accent) 12%,var(--bg-elevated));color:color-mix(in srgb,var(--accent) 40%,var(--text))}.attachment-chip-info{display:flex;flex-direction:column;min-width:0;gap:4px}.attachment-chip-name{font-size:12px;font-weight:600;color:var(--text);line-height:1.35;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.attachment-chip-size{font-size:11px;color:var(--text-secondary)}.attachment-chip.error .attachment-chip-size{color:var(--red)}.attachment-progress-ring{position:relative;width:32px;height:32px;flex-shrink:0}.attachment-progress-ring svg{width:32px;height:32px;transform:rotate(-90deg)}.attachment-progress-track,.attachment-progress-value{fill:none;stroke-width:2.5}.attachment-progress-track{stroke:color-mix(in srgb,var(--border) 85%,transparent)}.attachment-progress-value{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .2s ease}.attachment-progress-ring.ready .attachment-progress-value{stroke:var(--green)}.attachment-progress-ring.error .attachment-progress-value{stroke:var(--red)}.attachment-progress-center{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:var(--text)}.attachment-progress-ring.ready .attachment-progress-center{color:var(--green)}.attachment-progress-ring.error .attachment-progress-center{color:var(--red)}.attachment-progress-center svg{width:13px;height:13px;transform:none}.composer-attach-btn{background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);border:1px solid var(--border);width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;border-radius:10px;color:var(--text-secondary);transition:border-color .15s ease,color .15s ease,background .15s ease}.composer-attach-btn:hover:not(:disabled){color:var(--text);border-color:var(--border-hover);background:color-mix(in srgb,var(--surface-hover) 88%,transparent)}.msg-attachments{margin-top:10px}.msg-attachment-grid{display:grid;gap:8px}.msg-attachment-grid.cols-2{grid-template-columns:1fr 1fr}.msg-attachment-image{max-width:320px;border-radius:12px;cursor:pointer;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);transition:opacity .15s ease,transform .15s ease}.msg-attachment-video{width:100%;max-width:320px;border-radius:12px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent);background:color-mix(in srgb,var(--bg-elevated) 88%,transparent)}.msg-attachment-image:hover{opacity:.92;transform:translateY(-1px)}.msg-attachment-files{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,max-content));gap:8px;margin-top:8px}.msg-attachment-file-chip{display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--surface) 94%,transparent);border:1px solid color-mix(in srgb,var(--border) 85%,transparent);font-size:12px;text-decoration:none;color:var(--text);transition:background .15s ease,border-color .15s ease,transform .15s ease}.msg-attachment-file-chip:hover{background:color-mix(in srgb,var(--surface-hover) 96%,transparent);border-color:var(--border-hover);transform:translateY(-1px)}.msg-attachment-file-size{color:var(--text-secondary);font-size:11px;margin-left:4px}@media(max-width:640px){.attachment-chip{min-width:min(250px,82vw);max-width:82vw}.msg-attachment-files{grid-template-columns:1fr}}.lightbox-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:2000;cursor:zoom-out}.lightbox-img{max-width:90vw;max-height:90vh;border-radius:8px}.session-confirm-delete{display:flex;gap:4px;flex-shrink:0;margin-left:auto;animation:msgListFadeIn .15s ease-out}.session-confirm-yes{font-size:11px;padding:1px 8px;border-radius:4px;border:none;background:#e53935;color:#fff;cursor:pointer;font-weight:600}.session-confirm-yes:hover{background:#c62828}.session-confirm-no{font-size:11px;padding:1px 6px;border-radius:4px;border:1px solid var(--border, #ddd);background:transparent;color:var(--text-secondary);cursor:pointer}.session-confirm-no:hover{background:var(--surface-hover, #f0f0f0)}@keyframes msgListFadeIn{0%{opacity:0}to{opacity:1}}.msg-list{animation:msgListFadeIn .2s ease-out}.msg-collapse-toggle{display:inline-flex;align-items:center;gap:4px;margin-top:8px;padding:4px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:all .12s}.msg-collapse-toggle:hover{background:var(--accent-soft);border-color:var(--accent)}.code-block-omitted{display:block;padding:6px 0;color:var(--accent);font-style:italic;font-weight:500;cursor:pointer;opacity:.85;transition:opacity .12s;-webkit-user-select:none;user-select:none}.code-block-omitted:hover{opacity:1;text-decoration:underline}.code-block-collapse-btn{display:block;width:100%;padding:4px 12px;border:none;border-top:1px solid var(--border);background:var(--surface);color:var(--accent);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;text-align:center;transition:background .12s}.code-block-collapse-btn:hover{background:var(--accent-soft)}.composer-context-ring{position:relative;width:28px;height:28px;flex-shrink:0;cursor:default}.composer-context-ring svg{width:28px;height:28px;transform:rotate(-90deg)}.composer-context-ring-track,.composer-context-ring-value{fill:none;stroke-width:2.5}.composer-context-ring-track{stroke:color-mix(in srgb,var(--border) 85%,transparent)}.composer-context-ring-value{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .4s ease,stroke .4s ease}.composer-context-ring.low .composer-context-ring-value{stroke:var(--yellow)}.composer-context-ring.critical .composer-context-ring-value{stroke:var(--red)}.composer-context-ring-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:7px;font-weight:700;color:var(--text-secondary);line-height:1;pointer-events:none}.composer-context-ring.low .composer-context-ring-label{color:var(--yellow)}.composer-context-ring.critical .composer-context-ring-label{color:var(--red)}.composer-send-btn:focus-visible,.composer-attach-btn:focus-visible,.composer-stop-btn:focus-visible,.msg-action-btn:focus-visible,.session-item:focus-visible,.awp-row:focus-visible,.awp-filter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wf-role-turn-tag{display:inline-block;margin-right:6px;padding:1px 6px;border-radius:3px;background:color-mix(in srgb,var(--yellow) 22%,transparent);color:var(--yellow);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.wf-role-turn-chevron{display:inline-flex;align-items:center;color:var(--text-secondary);margin-left:4px}.wf-role-turn-expanded{border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}.wf-role-turn-activity{padding:8px 10px 10px;border-top:1px dashed var(--border);background:var(--surface, rgba(255, 255, 255, .02));display:flex;flex-direction:column;gap:6px}.wf-role-turn-activity-sections{display:flex;flex-direction:column;gap:8px}.wf-role-turn-activity-section{padding:6px 0 0;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent)}.wf-role-turn-activity-section:first-child{padding-top:0;border-top:0}.wf-role-turn-activity-section-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;min-width:0;font-size:11px;color:var(--text-secondary)}.wf-role-turn-activity-section-title{color:var(--text-primary);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-role-turn-activity-section-role,.wf-role-turn-activity-section-count{flex:0 0 auto;padding:1px 6px;border-radius:999px;background:color-mix(in srgb,var(--border) 55%,transparent)}.wf-role-turn-empty-activity{color:var(--text-secondary);font-size:12px;padding:4px 0}.wf-role-turn-open-session{align-self:flex-start;padding:4px 10px;border-radius:4px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);font-size:11px;cursor:pointer}.wf-role-turn-open-session:hover{background:var(--surface-hover, rgba(255, 255, 255, .06));color:var(--text-primary)}.awp-dot-active{background:var(--accent);opacity:1;box-shadow:0 0 4px var(--accent);animation:awp-pulse 2s ease-in-out infinite}.awp-dot-waiting{background:var(--yellow);opacity:1}.awp-dot-pending{background:var(--text-secondary);opacity:.6}.awp-dot-done{background:var(--green);opacity:1}.awp-dot-failed{background:var(--red);opacity:1}.awp-row-terminal.awp-terminal-active .awp-row-activity{color:var(--accent)}.awp-row-terminal.awp-terminal-waiting .awp-row-activity{color:var(--yellow)}.workspace-page{display:flex;flex:1;min-height:0;overflow:hidden}.workspace-board{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden}.project-cockpit{display:flex;flex-direction:column;gap:10px;padding:10px 12px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 92%,var(--surface) 8%);flex-shrink:0}.project-cockpit.embedded{flex:1;padding:12px;border-bottom:none;background:transparent;overflow:auto}.project-cockpit.embedded .project-cockpit-grid--team,.project-cockpit.embedded .project-cockpit-team-grid{grid-template-columns:minmax(0,1fr)}.project-cockpit.embedded .project-cockpit-team-head{flex-direction:column;align-items:flex-start}.project-cockpit.embedded .project-cockpit-team-status{align-self:flex-start}.project-cockpit.embedded .project-cockpit-seat-row{grid-template-columns:minmax(0,1fr);align-items:flex-start}.project-cockpit.embedded .project-cockpit-metrics span,.project-cockpit.embedded .project-cockpit-summary span,.project-cockpit.embedded .project-cockpit-team-meta span,.project-cockpit.embedded .project-cockpit-seat-role,.project-cockpit.embedded .project-cockpit-seat-id{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}.project-cockpit-overview{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}.project-cockpit-title{display:flex;align-items:center;min-width:0;gap:8px;flex-wrap:wrap}.project-cockpit-label{font-size:11px;color:var(--text-secondary);text-transform:uppercase}.project-cockpit-title strong{font-size:14px;line-height:1.3;overflow-wrap:anywhere}.project-cockpit-stop-btn{margin-left:auto;padding:3px 12px;font-size:12px;font-weight:600;font-family:inherit;border:1px solid var(--red);border-radius:6px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);cursor:pointer;transition:background .12s}.project-cockpit-stop-btn:hover{background:color-mix(in srgb,var(--red) 20%,transparent)}.project-cockpit-metrics{display:flex;flex-wrap:wrap;gap:6px}.project-cockpit-metrics span,.project-cockpit-summary span{border:1px solid var(--border);border-radius:8px;padding:4px 8px;font-size:12px;background:var(--surface)}.project-cockpit-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;min-width:0}.project-cockpit-grid--team{grid-template-columns:minmax(240px,.8fr) minmax(0,1.6fr)}.project-cockpit-panel{display:flex;flex-direction:column;min-width:0;min-height:180px;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.project-cockpit-panel--wide{min-width:0}.project-cockpit-panel header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border)}.project-cockpit-panel h3{margin:0;font-size:13px}.project-cockpit-summary{display:flex;flex-direction:column;gap:8px;padding:10px 12px;min-width:0;overflow:auto}.project-cockpit-inline-text{margin:0;font-size:12px;line-height:1.45;overflow-wrap:anywhere}.project-cockpit-team-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;padding:10px 12px;overflow:auto}.project-cockpit-team-card{display:flex;flex-direction:column;gap:10px;min-width:0;border:1px solid var(--border);border-radius:8px;background:var(--bg-elevated);padding:10px}.project-cockpit-team-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.project-cockpit-team-title{min-width:0;display:flex;flex-direction:column;gap:4px}.project-cockpit-team-title strong{font-size:13px;line-height:1.3;overflow-wrap:anywhere}.project-cockpit-team-title span{font-size:11px;color:var(--text-secondary);overflow-wrap:anywhere}.project-cockpit-team-status,.project-cockpit-seat-status{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:3px 8px;font-size:10px;font-weight:700;text-transform:uppercase;border:1px solid var(--border);flex-shrink:0}.project-cockpit-team-meta{display:flex;flex-wrap:wrap;gap:6px}.project-cockpit-team-meta span{border:1px solid var(--border);border-radius:999px;padding:3px 8px;font-size:11px;color:var(--text-secondary);background:var(--surface)}.project-cockpit-seat-list{display:flex;flex-direction:column;gap:8px}.project-cockpit-seat-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:8px;align-items:center;min-width:0;border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--surface)}.project-cockpit-seat-role,.project-cockpit-seat-id{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.project-cockpit-seat-id{color:var(--text-secondary)}.project-cockpit-team-status.status-running,.project-cockpit-seat-status.status-running,.project-cockpit-team-status.status-active,.project-cockpit-seat-status.status-active,.project-cockpit-team-status.status-ready,.project-cockpit-seat-status.status-ready{color:var(--green);border-color:color-mix(in srgb,var(--green) 55%,var(--border) 45%);background:color-mix(in srgb,var(--green) 10%,transparent)}.project-cockpit-team-status.status-blocked,.project-cockpit-seat-status.status-blocked,.project-cockpit-team-status.status-awaiting-review,.project-cockpit-seat-status.status-awaiting-review,.project-cockpit-team-status.status-awaiting-peer,.project-cockpit-seat-status.status-awaiting-peer,.project-cockpit-team-status.status-awaiting_review,.project-cockpit-seat-status.status-awaiting_review,.project-cockpit-team-status.status-awaiting-manager-review,.project-cockpit-seat-status.status-awaiting-manager-review,.project-cockpit-team-status.status-awaiting-human-review,.project-cockpit-seat-status.status-awaiting-human-review{color:var(--yellow);border-color:color-mix(in srgb,var(--yellow) 55%,var(--border) 45%);background:color-mix(in srgb,var(--yellow) 10%,transparent)}.project-cockpit-team-status.status-failed,.project-cockpit-seat-status.status-failed,.project-cockpit-team-status.status-error,.project-cockpit-seat-status.status-error{color:var(--red);border-color:color-mix(in srgb,var(--red) 55%,var(--border) 45%);background:color-mix(in srgb,var(--red) 10%,transparent)}.project-cockpit-team-status.status-idle,.project-cockpit-seat-status.status-idle,.project-cockpit-team-status.status-cold,.project-cockpit-seat-status.status-cold,.project-cockpit-team-status.status-paused,.project-cockpit-seat-status.status-paused,.project-cockpit-team-status.status-done,.project-cockpit-seat-status.status-done{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent) 10%,transparent)}@media(max-width:1280px){.project-cockpit-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.project-cockpit-grid--team{grid-template-columns:minmax(0,1fr)}}@media(max-width:780px){.project-cockpit-grid,.project-cockpit-seat-row{grid-template-columns:minmax(0,1fr)}}.workspace-page.panel-maximized .workspace-board{display:none}.ctx-panel{display:flex;flex-direction:column;min-width:0;border-left:1px solid var(--border);background:var(--bg-elevated);overflow:hidden;transition:width .15s ease;position:relative;container-type:inline-size;container-name:ctxpanel}.ctx-panel.collapsed{width:0!important;border-left:none;overflow:hidden}.ctx-panel.maximized{flex:1}.ctx-resize-handle{width:4px;cursor:col-resize;background:transparent;flex-shrink:0;transition:background .15s}.ctx-resize-handle:hover,.ctx-resize-handle.active{background:var(--accent);opacity:.5}.ctx-collapse-strip{width:24px;flex-shrink:0;display:flex;align-items:center;justify-content:center;cursor:pointer;border-left:1px solid var(--border);opacity:.5;transition:opacity .15s}.ctx-collapse-strip:hover{opacity:1}.ctx-header{display:flex;align-items:center;padding:0 8px;border-bottom:1px solid var(--border);height:36px;gap:2px;flex-shrink:0;min-width:0}.ctx-header-tabs{display:flex;align-items:center;gap:2px;min-width:0;flex:1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;-webkit-mask-image:linear-gradient(to right,transparent 0,black 6px,black calc(100% - 14px),transparent 100%);mask-image:linear-gradient(to right,transparent 0,black 6px,black calc(100% - 14px),transparent 100%)}.ctx-header-tabs::-webkit-scrollbar{display:none}.ctx-tab{background:none;border:none;color:var(--text-secondary);font-size:12px;padding:6px 10px;cursor:pointer;border-radius:var(--radius-xs);transition:color .15s,background .15s;flex-shrink:0;white-space:nowrap;font-family:inherit}.ctx-tab:hover{color:var(--text);background:var(--surface-hover)}.ctx-tab.active{color:var(--text);background:var(--accent-soft)}.ctx-header-actions{margin-left:auto;display:flex;gap:4px;padding-left:6px;flex-shrink:0}.ctx-header-actions button{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;border-radius:var(--radius-xs);display:flex;align-items:center}.ctx-header-actions button:hover{color:var(--text);background:var(--surface-hover)}.ctx-header-title{font-size:13px;font-weight:600;padding:0 4px}.ctx-session-strip{display:flex;align-items:center;gap:8px;padding:8px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 90%,var(--surface) 10%);flex-shrink:0}.ctx-session-strip-scroll{display:flex;align-items:center;gap:6px;min-width:0;flex:1;overflow-x:auto;scrollbar-width:thin}.ctx-session-chip{display:flex;align-items:center;min-width:0;border:1px solid var(--border);border-radius:999px;background:var(--surface)}.ctx-session-chip.active{border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent-soft) 75%,var(--surface) 25%)}.ctx-session-chip-main{display:flex;align-items:center;gap:8px;min-width:0;border:none;background:transparent;color:var(--text);padding:6px 10px;cursor:pointer}.ctx-session-chip-status,.ctx-multi-card-status{width:8px;height:8px;border-radius:999px;flex-shrink:0;background:var(--text-secondary)}.ctx-session-chip-status.status-running,.ctx-multi-card-status.status-running{background:var(--green)}.ctx-session-chip-status.status-idle,.ctx-multi-card-status.status-idle,.ctx-session-chip-status.status-done,.ctx-multi-card-status.status-done{background:var(--accent)}.ctx-session-chip-status.status-failed,.ctx-multi-card-status.status-failed{background:var(--red)}.ctx-session-chip-status.status-cancelled,.ctx-multi-card-status.status-cancelled{background:var(--text-secondary)}.ctx-session-chip-title{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;min-width:0}@container ctxpanel (max-width: 480px){.ctx-session-chip-title{max-width:120px}}.ctx-session-chip-unread{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--accent);color:#fff;font-size:10px;font-weight:700}.ctx-session-chip-close{border:none;border-left:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;width:28px;height:28px;flex-shrink:0}.ctx-session-chip-close:hover,.ctx-session-view-btn:hover{color:var(--text);background:var(--surface-hover)}.ctx-session-view-btn{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:999px;padding:6px 10px;font-size:11px;cursor:pointer;flex-shrink:0}.ctx-session-view-btn.active{color:var(--text);border-color:color-mix(in srgb,var(--accent) 55%,var(--border) 45%);background:color-mix(in srgb,var(--accent-soft) 75%,var(--surface) 25%)}.ctx-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.ctx-body>.msg-list,.ctx-body>.msg-list-shell{min-height:0}.ctx-work-item-progress{flex:0 0 84px;height:84px;min-height:84px;padding:12px 12px 0;overflow:hidden;position:relative;z-index:1;background:var(--bg-elevated)}.ctx-work-item-progress .wi-progress-card{box-sizing:border-box;height:72px;padding:10px 12px;gap:7px;overflow:hidden}.ctx-work-item-progress .wi-progress-pipeline{min-width:0;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.ctx-work-item-progress .wi-progress-pipeline::-webkit-scrollbar{display:none}.ctx-work-item-progress .wi-projection-group{flex:0 0 auto}.ctx-work-item-progress .wi-progress-pipeline-empty{color:var(--text-secondary);font-size:11px;line-height:22px;white-space:nowrap}.ctx-multi-grid{flex:1;min-height:0;overflow:auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:12px;padding:12px;align-content:start}.ctx-multi-card{min-height:0;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:14px;background:color-mix(in srgb,var(--bg-elevated) 86%,var(--surface) 14%);overflow:hidden;container-type:inline-size;container-name:ctxpanel}.ctx-multi-card.focused{border-color:color-mix(in srgb,var(--accent) 60%,var(--border) 40%);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 24%,transparent 76%)}.ctx-multi-card-header{display:flex;align-items:center;gap:8px;padding:10px 12px 8px;border-bottom:1px solid var(--border);min-width:0;flex-wrap:wrap;row-gap:6px}.ctx-multi-card-main{min-width:0;flex:1;display:flex;align-items:center;gap:8px;border:none;background:transparent;color:var(--text);cursor:pointer;padding:0}.ctx-multi-card-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;text-align:left}.ctx-multi-card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;min-width:0}.ctx-multi-card-actions button{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:999px;padding:4px 8px;font-size:11px;cursor:pointer}.ctx-multi-card-actions button:hover{color:var(--text);background:var(--surface-hover)}.ctx-multi-card-meta{display:flex;flex-wrap:wrap;gap:6px 8px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:11px;color:var(--text-secondary)}.ctx-multi-card-body{flex:1;min-height:220px;overflow:hidden;display:flex;flex-direction:column}.ctx-multi-card-body .msg-list{flex:1;min-height:0}.ctx-multi-card .msg-composer{border-top:1px solid var(--border);border-radius:0;border-left:none;border-right:none;border-bottom:none}@media(max-width:900px){.ctx-multi-grid{grid-template-columns:1fr;gap:8px;padding:8px}.ctx-multi-card-actions{flex-wrap:wrap;justify-content:flex-end}}@media(max-width:640px){.ctx-session-strip{flex-wrap:wrap}.ctx-session-strip-scroll{flex-basis:100%;order:2}}.ctx-child-topbar{display:flex;align-items:center;gap:8px;flex-shrink:0}.ctx-back-btn{background:none;border:none;color:var(--accent);cursor:pointer;font-size:12px;padding:6px 10px;display:flex;align-items:center;gap:4px;flex-shrink:0}.ctx-back-btn:hover{text-decoration:underline}.ctx-child-stop-btn{margin-left:auto;padding:3px 10px;font-size:11px;font-weight:600;font-family:inherit;border:1px solid var(--red);border-radius:5px;background:color-mix(in srgb,var(--red) 10%,transparent);color:var(--red);cursor:pointer;transition:background .12s}.ctx-child-stop-btn:hover{background:color-mix(in srgb,var(--red) 20%,transparent)}.ctx-child-resume-btn{margin-left:auto;padding:3px 10px;font-size:11px;font-weight:600;font-family:inherit;border:1px solid var(--green);border-radius:5px;background:color-mix(in srgb,var(--green) 12%,transparent);color:var(--green);cursor:pointer;transition:background .12s}.ctx-child-resume-btn:hover{background:color-mix(in srgb,var(--green) 22%,transparent)}.ctx-child-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--border)}.ctx-child-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}.ctx-child-meta{flex:1;min-width:0}.ctx-child-name{font-weight:600;font-size:13px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ctx-child-work-item{font-size:11px;color:var(--text-secondary)}.ctx-task-chip-row{display:flex;flex-wrap:wrap;gap:6px}.ctx-task-detail-card{border:1px solid var(--border);border-radius:6px;padding:10px 12px;background:var(--surface)}.ctx-task-kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px}.ctx-task-kv-item{display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.ctx-task-kv-label{font-size:10px;text-transform:uppercase;color:var(--text-secondary)}.ctx-task-kv-value{font-size:12px;color:var(--text);white-space:pre-wrap;word-break:break-word}.kanban-card.is-selected{box-shadow:0 0 0 2px var(--accent)}.ctx-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;color:var(--text-secondary);font-size:13px;gap:8px;padding:20px;text-align:center}.ctx-empty-icon{font-size:24px;opacity:.4}.ctx-child-detail{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-height:0}.ctx-child-detail .exec-section{padding:8px 12px;border-bottom:1px solid var(--border)}.ctx-child-detail .exec-section-header{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ctx-child-detail .exec-section-content{font-size:12px}.ctx-child-transcript{display:flex;flex-direction:column;min-height:280px;max-height:55vh;overflow:hidden;border-bottom:1px solid var(--border);flex-shrink:0}.ctx-child-transcript-header,.ctx-child-section-header{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.ctx-child-transcript-header{padding:8px 12px 0}.ctx-child-transcript .msg-list{min-height:0}.ctx-child-markdown-section,.ctx-child-artifacts,.ctx-child-passed-to{padding:8px 12px}.ctx-child-artifacts,.ctx-child-passed-to{border-top:1px solid var(--border)}.ctx-child-markdown-card{padding:10px 12px}.ctx-child-markdown-card .msg-content-agent{font-size:12px}.ctx-child-artifact-list{margin:0;padding-left:16px;font-size:12px}.ctx-info-v2{flex:1;min-height:0;overflow-y:auto;padding:16px 14px 24px;display:flex;flex-direction:column;gap:14px}.ctx-info-section{display:flex;flex-direction:column;gap:6px}.ctx-info-section-title{margin:0 4px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}.ctx-info-card{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border-radius:10px;border:1px solid color-mix(in srgb,var(--border) 80%,transparent 20%);background:color-mix(in srgb,var(--surface) 60%,var(--bg-elevated) 40%)}.ctx-info-status-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.ctx-info-status-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:600;background:color-mix(in srgb,var(--surface) 70%,var(--bg-elevated) 30%);border:1px solid color-mix(in srgb,var(--border) 70%,transparent 30%);color:var(--text);text-transform:capitalize}.ctx-info-status-pill.status-running{color:var(--green);border-color:color-mix(in srgb,var(--green) 35%,transparent 65%)}.ctx-info-status-pill.status-idle,.ctx-info-status-pill.status-suspended{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent 65%)}.ctx-info-status-pill.status-done{color:var(--green);border-color:color-mix(in srgb,var(--green) 35%,transparent 65%)}.ctx-info-status-pill.status-failed,.ctx-info-status-pill.status-cancelled{color:var(--red);border-color:color-mix(in srgb,var(--red) 35%,transparent 65%)}.ctx-info-status-pill.status-blocked,.ctx-info-status-pill.status-awaiting_human{color:var(--yellow);border-color:color-mix(in srgb,var(--yellow) 35%,transparent 65%)}.ctx-info-status-dot{width:7px;height:7px;border-radius:999px;background:currentColor}.ctx-info-priority-pill{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:6px;font-size:11px;font-weight:500;background:transparent}.ctx-info-chips{display:flex;flex-wrap:wrap;gap:5px}.ctx-info-chip{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:color-mix(in srgb,var(--bg-elevated) 80%,transparent 20%);border:1px solid color-mix(in srgb,var(--border) 65%,transparent 35%);color:var(--text-secondary);font-size:11px;line-height:1.3}.ctx-info-fact{display:flex;align-items:flex-start;gap:12px;padding:0;min-width:0}.ctx-info-fact-label{flex:0 0 auto;width:clamp(72px,22%,104px);font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary);padding-top:2px;word-break:break-word}.ctx-info-fact-value{flex:1;min-width:0;font-size:12.5px;color:var(--text);word-break:break-word}.ctx-info-mono{font-family:JetBrains Mono,SF Mono,monospace;font-size:11px;color:var(--text-secondary)}.ctx-info-mono-break{word-break:break-all;display:inline-block;line-height:1.5}.ctx-info-dev-section{margin-top:4px}.ctx-info-dev-toggle{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;margin-left:-4px;background:transparent;border:none;color:var(--text-secondary);font:inherit;font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;border-radius:6px;align-self:flex-start;transition:color .14s ease,background .14s ease}.ctx-info-dev-toggle:hover,.ctx-info-dev-toggle.expanded{color:var(--text);background:color-mix(in srgb,var(--surface) 50%,transparent 50%)}.ctx-info-dev-card{background:color-mix(in srgb,var(--bg-elevated) 86%,var(--surface) 14%);border-style:dashed}@container ctxpanel (max-width: 360px){.ctx-info-v2{padding:12px 10px 20px;gap:12px}.ctx-info-card{padding:10px 12px}.ctx-info-fact{flex-direction:column;align-items:stretch;gap:4px}.ctx-info-fact-label{width:auto;font-size:9.5px}.ctx-info-fact-value{font-size:12px}}.ctx-body .awp{flex:1 1 auto;display:grid;grid-template-columns:minmax(300px,38%) minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr);grid-template-areas:"header header" "search search" "list detail";width:100%;min-width:0;min-height:0;border-left:none;background:color-mix(in srgb,var(--bg) 88%,var(--surface) 12%)}.ctx-body .awp-header{grid-area:header;padding:10px 16px;background:color-mix(in srgb,var(--bg-elevated) 82%,var(--surface) 18%)}.ctx-body .awp-title{font-size:13px;gap:8px}.ctx-body .awp-count{font-size:11px;padding:2px 7px}.ctx-body .awp-controls{gap:8px}.ctx-body .awp-filter{min-width:112px;padding:5px 8px;font-size:11px}.ctx-body .awp-search-toggle{width:28px;height:28px;justify-content:center;border:1px solid transparent}.ctx-body .awp-search-toggle:hover,.ctx-body .awp-search-toggle.active{border-color:var(--border);background:var(--surface)}.ctx-body .awp-search-bar{grid-area:search;padding:8px 12px;background:color-mix(in srgb,var(--bg) 82%,var(--surface) 18%)}.ctx-body .awp-search-input{padding:7px 10px;font-size:12px}.ctx-body .awp-list{grid-area:list;flex:unset;min-height:0;max-height:none;border-right:1px solid var(--border);background:color-mix(in srgb,var(--bg) 94%,var(--surface) 6%)}.ctx-body .awp:not(:has(.awp-detail)) .awp-list{grid-column:1 / -1;border-right:none}.ctx-body .awp-row{display:grid;grid-template-columns:10px minmax(160px,1fr) minmax(148px,220px) minmax(44px,max-content);gap:10px;min-height:58px;padding:10px 16px;font-size:12px}.ctx-body .awp-row-selected{padding-left:14px}.ctx-body .awp-dot{align-self:center}.ctx-body .awp-row-info{gap:3px}.ctx-body .awp-row-name{font-size:12.5px;line-height:1.25}.ctx-body .awp-row-projection{font-size:10.5px;line-height:1.25}.ctx-body .awp-row-activity{max-width:none;justify-self:end;font-size:11.5px;line-height:1.25}.ctx-body .awp-row-time{min-width:36px;font-size:10.5px}.ctx-body .awp-detail{grid-area:detail;flex:unset;min-width:0;min-height:260px;border-top:none;border-left:1px solid var(--border);background:color-mix(in srgb,var(--bg-elevated) 78%,var(--bg) 22%)}.ctx-body .awp-detail-header{padding:12px 16px}.ctx-body .awp-detail-avatar{width:36px;height:36px;border-radius:8px;font-size:15px}.ctx-body .awp-detail-name{font-size:13px;line-height:1.25}.ctx-body .awp-detail-role,.ctx-body .awp-detail-employee,.ctx-body .awp-detail-projection{font-size:11px;line-height:1.25}.ctx-body .awp-detail-body{padding:12px 16px 16px}.ctx-body .awp-detail-section-label{letter-spacing:0}.ctx-body .awp .wf-role-turns{gap:8px;margin-top:10px}.ctx-body .awp .wf-role-turn{border-radius:8px;background:color-mix(in srgb,var(--surface) 72%,var(--bg) 28%)}.ctx-body .awp .wf-role-turn-button{grid-template-columns:auto minmax(0,1fr) max-content 22px;min-height:48px;padding:10px 12px;gap:10px}.ctx-body .awp .wf-role-turn-title{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.35;color:var(--text)}.ctx-body .awp .wf-role-turn-time{align-self:center;white-space:nowrap}.ctx-body .awp .wf-role-turn-chevron{align-self:center;justify-self:end;width:22px;height:22px;justify-content:center;color:var(--text-secondary);opacity:.9}.ctx-body .awp .wf-role-turn-chevron svg{width:14px;height:14px}.ctx-body .awp .wf-role-turn-activity{padding:12px}@container ctxpanel (max-width: 720px){.ctx-body .awp{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(180px,42%) minmax(260px,1fr);grid-template-areas:"header" "search" "list" "detail"}.ctx-body .awp-list{border-right:none;border-bottom:1px solid var(--border)}.ctx-body .awp-detail{min-height:260px;border-left:none;border-top:1px solid var(--border)}.ctx-body .awp:not(:has(.awp-detail)) .awp-list{grid-row:3 / -1}.ctx-body .awp-row{grid-template-columns:10px minmax(0,1fr) minmax(34px,max-content);grid-template-rows:auto auto;gap:4px 10px;min-height:56px;padding:9px 12px}.ctx-body .awp-row-activity{grid-column:2 / 4;justify-self:start}.ctx-body .awp-row-time{grid-column:3;grid-row:1}.ctx-body .awp .wf-role-turn-button{grid-template-columns:auto minmax(0,1fr) 22px;grid-template-rows:auto auto;min-height:58px}.ctx-body .awp .wf-role-turn-time{grid-column:2;grid-row:2;justify-self:start}.ctx-body .awp .wf-role-turn-chevron{grid-column:3;grid-row:1 / span 2}}@container ctxpanel (max-width: 420px){.ctx-body .awp-header{align-items:flex-start;gap:8px;flex-direction:column}.ctx-body .awp-controls{width:100%}.ctx-body .awp-filter{flex:1}}.kanban-empty-state{display:flex;align-items:center;justify-content:center;flex:1;color:var(--text-secondary);font-size:14px;padding:32px 16px;text-align:center}.kanban-empty-state-inline{flex:0;padding:16px}.task-detail-runtime{display:flex;align-items:center;gap:6px;padding:8px 16px;font-size:11px;font-weight:500;border-bottom:1px solid var(--border);flex-shrink:0;background:var(--surface)}.task-detail-runtime.status-reflecting{color:var(--yellow);background:color-mix(in srgb,var(--yellow) 8%,var(--surface))}.task-detail-runtime.status-tool_active{color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--surface))}.task-detail-runtime-agent{color:var(--text-secondary);font-weight:400}.task-detail-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:14px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.task-detail-section{display:flex;flex-direction:column;gap:6px}.task-detail-section-title{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin:0}.task-detail-dep-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.task-detail-dep-item{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:4px;background:var(--surface);font-size:12px;color:var(--text)}.task-detail-dep-id{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;flex-shrink:0}.task-detail-handoff{margin:0;padding:8px 10px;border-radius:6px;background:var(--surface);font-size:11px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:160px;overflow-y:auto;border:1px solid var(--border)}.task-detail-progress{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;max-height:200px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.progress-entry{display:flex;align-items:baseline;gap:8px;padding:3px 8px;border-radius:3px;font-size:11px}.progress-entry:hover{background:var(--surface)}.progress-time{font-size:10px;color:var(--text-secondary);font-family:SF Mono,Fira Code,Consolas,Courier New,monospace;flex-shrink:0;min-width:64px}.progress-summary{color:var(--text);word-break:break-word}.progress-entry.type-thinking .progress-summary{color:var(--yellow)}.progress-entry.type-tool_call .progress-summary{color:var(--green)}.progress-entry.type-handoff .progress-summary{color:var(--accent)}.progress-entry.type-gate_result .progress-summary{color:#d97706}.task-detail-linked-messages{height:min(400px,55vh);min-height:220px;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:6px;padding:4px 0;background:var(--bg)}.task-detail-linked-messages>.msg-list-shell{flex:1;min-height:0}.task-detail-empty-hint{color:var(--text-secondary);font-size:12px;font-style:italic;margin:4px 0}:root{font-family:Inter,SF Pro Display,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box;min-width:0}html,body,#root{margin:0;padding:0;height:100%;overflow:hidden}.app-shell{--bg: #0c111b;--bg-elevated: #141b2b;--text: #e2e8f0;--text-secondary: #8494a7;--border: rgba(148, 163, 184, .12);--border-hover: rgba(148, 163, 184, .22);--surface: rgba(20, 27, 43, .7);--surface-hover: rgba(30, 41, 63, .7);--accent: #6366f1;--accent-soft: rgba(99, 102, 241, .15);--accent-glow: rgba(99, 102, 241, .3);--green: #34d399;--yellow: #fbbf24;--red: #f87171;--radius: 12px;--radius-sm: 8px;--radius-xs: 6px;--white: #ffffff;--text-dim: #64748b;--bg-card: #141b2b;--bg-secondary: #1a2332;height:100vh;max-height:100vh;display:grid;grid-template-rows:48px minmax(0,1fr);gap:0;color:var(--text);overflow:hidden;background:var(--bg)}.theme-neon{--bg: #05100e;--bg-elevated: #0a1f1a;--text: #d0fef0;--text-secondary: #5eada0;--text-dim: #3d7a6e;--bg-card: #0a1f1a;--bg-secondary: #0e2a24;--border: rgba(94, 173, 160, .15);--border-hover: rgba(94, 173, 160, .28);--surface: rgba(10, 31, 26, .75);--surface-hover: rgba(16, 48, 40, .75);--accent: #00ddc6;--accent-soft: rgba(0, 221, 198, .12);--accent-glow: rgba(0, 221, 198, .3)}.theme-paper{--bg: #f8f9fb;--bg-elevated: #ffffff;--text: #1e293b;--text-secondary: #64748b;--text-dim: #94a3b8;--bg-card: #ffffff;--bg-secondary: #f1f5f9;--border: rgba(0, 0, 0, .08);--border-hover: rgba(0, 0, 0, .14);--surface: rgba(255, 255, 255, .9);--surface-hover: rgba(241, 245, 249, .95);--accent: #4f46e5;--accent-soft: rgba(79, 70, 229, .08);--accent-glow: rgba(79, 70, 229, .15);--green: #059669;--yellow: #d97706;--red: #dc2626;color-scheme:light}.theme-paper .kanban-card:hover{box-shadow:0 2px 8px #0000000f}.theme-paper .kanban-card.is-dragging{box-shadow:0 8px 24px #0000001f}.theme-retro{--bg: #080e08;--bg-elevated: #0e1a0e;--text: #a8d8a8;--text-secondary: #4a8a4a;--text-dim: #3a6a3a;--bg-card: #0e1a0e;--bg-secondary: #142014;--border: rgba(74, 138, 74, .18);--border-hover: rgba(74, 138, 74, .3);--surface: rgba(14, 26, 14, .8);--surface-hover: rgba(20, 40, 20, .8);--accent: #4ade80;--accent-soft: rgba(74, 222, 128, .12);--accent-glow: rgba(74, 222, 128, .3)}.theme-terminal{--bg: #080808;--bg-elevated: #111111;--text: #22c55e;--text-secondary: #166534;--text-dim: #0f4a22;--bg-card: #111111;--bg-secondary: #181818;--border: rgba(34, 197, 94, .12);--border-hover: rgba(34, 197, 94, .25);--surface: rgba(17, 17, 17, .9);--surface-hover: rgba(24, 24, 24, .9);--accent: #22c55e;--accent-soft: rgba(34, 197, 94, .1);--accent-glow: rgba(34, 197, 94, .3)}.theme-cozy{--bg: #16120e;--bg-elevated: #201a14;--text: #ede0d4;--text-secondary: #9a8470;--text-dim: #7a6a5a;--bg-card: #201a14;--bg-secondary: #2a221a;--border: rgba(154, 132, 112, .16);--border-hover: rgba(154, 132, 112, .28);--surface: rgba(32, 26, 20, .8);--surface-hover: rgba(42, 34, 26, .8);--accent: #f59e0b;--accent-soft: rgba(245, 158, 11, .12);--accent-glow: rgba(245, 158, 11, .3)}.theme-openopc{--bg: #0a0a0a;--bg-elevated: #161616;--bg-card: #121111;--bg-secondary: #171412;--text: #f0ede8;--text-secondary: #8a8580;--text-dim: #6f6a66;--border: rgba(217, 119, 87, .12);--border-hover: rgba(217, 119, 87, .24);--surface: rgba(22, 22, 22, .85);--surface-hover: rgba(34, 30, 28, .85);--accent: #d97757;--accent-soft: rgba(217, 119, 87, .12);--accent-glow: rgba(217, 119, 87, .25);--green: #98c379;--yellow: #e5c07b;--red: #e06c75}.theme-openopc .topbar{background:#0e0e0e;border-bottom-color:#d9775714}.theme-openopc .session-sidebar{background:#0e0e0e;border-right-color:#d9775714}.theme-openopc .session-new-btn{border-color:#d977572e}.theme-openopc .session-new-btn:hover{border-color:var(--accent);color:var(--accent)}.theme-openopc .msg-content-user{background:linear-gradient(135deg,#d97757,#c96442);box-shadow:0 2px 8px #d9775726}.theme-openopc .msg-content-agent-card{background:#131313;border-color:#d977571a;border-left-color:#d97757}.theme-openopc .msg-row.agent:hover .msg-content-agent-card{border-color:#d9775733;border-left-color:#d97757;box-shadow:0 2px 12px #d977570f}.theme-openopc .msg-content-agent pre{background:#0c0c0c;border-color:#d9775714}.theme-openopc .msg-content-agent blockquote{background:#d9775708;border-left-color:#d9775740}.theme-openopc .msg-card-actions{border-top-color:#d9775714}.theme-openopc .agent-avatar{background:linear-gradient(135deg,#d9775726,#d977570d);border-color:#d9775726;color:var(--accent)}.theme-openopc .composer-send-btn{background:linear-gradient(135deg,#d97757,#c96442)}.theme-openopc .composer-send-btn:not(:disabled):hover{filter:brightness(1.2)}.theme-openopc .task-header-bar{background:#0e0e0e;border-bottom-color:#d9775714}.theme-openopc .ptl-live-think{background:#d977570f}.theme-openopc .ptl-live-tool-name{background:#98c3791a;color:#98c379}.theme-openopc .ptl-tool-badge{background:#98c37914;color:#98c379}.theme-openopc .ptl-dot{background:#131313;border-color:#d977571f}.theme-openopc .ptl-line{background:#d977571a}.theme-openopc .agent-working-row .ptl-block{border-color:#d9775726}.theme-openopc .code-block-header{background:#111}.theme-openopc .code-block-wrap pre{background:#0e0e0e!important}.theme-openopc .msg-content-agent code{background:#d9775714;color:#ffb38a}.theme-openopc .msg-content-agent pre code{background:transparent;color:#f0ede8}.theme-openopc .kanban-card:hover{box-shadow:0 2px 12px #d977570f}.theme-openopc .kanban-card.is-dragging{box-shadow:0 8px 24px #d977571f}.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border);background:var(--bg);z-index:10}.topbar-left{display:flex;align-items:center;gap:10px}.logo-text{font-size:15px;font-weight:700;letter-spacing:-.02em}.logo-accent{color:var(--accent)}.conn-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:help;transition:background .2s}.conn-dot.ok{background:var(--green);box-shadow:0 0 6px #34d39980}.conn-dot.warn{background:var(--yellow);box-shadow:0 0 6px #fbbf2466}.conn-dot.error{background:var(--red);box-shadow:0 0 6px #f8717166}.conn-dot.off{background:var(--text-secondary)}.topbar-center{flex:0 0 auto;display:flex;align-items:center;gap:12px}.page-nav{display:flex;border:1px solid var(--border);border-radius:6px;overflow:hidden;flex-shrink:0}.page-nav-btn{padding:4px 14px;border:none;background:transparent;color:var(--text-secondary);font-size:12px;font-weight:500;cursor:pointer;font-family:inherit;transition:all .12s}.page-nav-btn:first-child{border-right:1px solid var(--border)}.page-nav-btn.active{background:var(--accent);color:#fff}.page-nav-btn:not(.active):hover{background:var(--surface-hover);color:var(--text)}.page-nav-btn{position:relative}.nav-unread-badge{position:absolute;top:-2px;right:-2px;font-size:8px;padding:1px 4px;border-radius:999px;background:var(--red);color:#fff;font-weight:700;line-height:1.2;min-width:14px;text-align:center}.stat-chips{display:flex;gap:6px}.stat-chip{font-size:11px;color:var(--text-secondary);padding:3px 10px;border-radius:999px;border:1px solid var(--border);background:var(--surface);white-space:nowrap}.stat-chip b{color:var(--text);font-weight:600}.topbar-right{display:flex;align-items:center;gap:6px}.theme-select{font-size:11px;padding:4px 8px;border-radius:var(--radius-xs);border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;outline:none}.theme-select:focus{border-color:var(--accent)}.icon-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--radius-sm);border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;padding:0;transition:all .15s}.icon-btn:hover{background:var(--surface-hover);color:var(--text);border-color:var(--border-hover);transform:none}.icon-btn.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.main-grid{display:grid;grid-template-columns:1fr clamp(280px,30vw,360px);height:100%;min-height:0;overflow:hidden;transition:grid-template-columns .22s ease}.main-grid.hidden{display:none}.main-grid.sidebar-collapsed{grid-template-columns:1fr 0px}.main-grid.sidebar-collapsed .sidebar{border-left:none}.canvas-wrap{position:relative;overflow:hidden;background:#1a2533;min-width:0;min-height:0}.canvas-wrap>div{width:100%;height:100%}.canvas-wrap canvas{display:block;image-rendering:pixelated;image-rendering:crisp-edges}.canvas-float-btn{position:absolute;bottom:12px;left:12px;width:34px;height:34px;border-radius:50%;border:1px solid var(--border);background:#141b2bf0;box-shadow:0 8px 20px #0000003d;color:var(--text);font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:all .15s;z-index:5}.canvas-float-btn:hover{background:var(--surface-hover);border-color:var(--border-hover);transform:scale(1.05)}.sidebar-collapse-btn{position:absolute;top:50%;right:0;transform:translateY(-50%);width:18px;height:56px;padding:0;border:1px solid var(--border);border-right:none;border-radius:8px 0 0 8px;background:#141b2bf0;color:var(--text-secondary);font-size:10px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:6;transition:background .15s,color .15s}.sidebar-collapse-btn:hover{background:var(--surface-hover);color:var(--text)}.sidebar{display:grid;grid-template-rows:auto minmax(0,1fr) auto;border-left:1px solid var(--border);background:var(--bg-elevated);overflow:hidden}.sidebar-body{overflow-y:auto;overflow-x:hidden;min-height:0;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.input-row{display:flex;gap:6px;align-items:flex-end}.input-row input,.dev-group .input-row input{flex:1;padding:9px 14px;border-radius:20px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:13px;outline:none;transition:border-color .15s}.input-row input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.input-row input::placeholder{color:var(--text-secondary);opacity:.7}.send-btn{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:all .15s}.send-btn:hover{transform:scale(1.05);filter:brightness(1.1)}.send-btn:disabled{opacity:.35;cursor:not-allowed;transform:none;filter:none}.team-panel{padding:12px;display:flex;flex-direction:column;gap:12px;min-width:0;overflow-x:hidden}.section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);display:flex;align-items:center;gap:6px}.count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:10px;font-weight:700}.toast-success{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:#22c55e;color:#0c111b;padding:8px 20px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;z-index:9999;animation:toast-in .3s ease-out;pointer-events:none}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.toast-error{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--red, #f87171);color:#fff;padding:8px 20px;border-radius:var(--radius-sm);font-size:13px;font-weight:500;z-index:9999;animation:toast-in .3s ease-out;pointer-events:none}.spinner-inline{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin-inline .6s linear infinite;vertical-align:middle}@keyframes spin-inline{to{transform:rotate(360deg)}}.del-confirm{position:absolute;right:0;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:4px;padding:3px 6px;background:var(--bg-elevated);border:1px solid var(--red);border-radius:var(--radius-xs);animation:del-pop .12s ease-out;z-index:10;white-space:nowrap}.del-confirm-label{font-size:10px;color:var(--red);font-weight:500}.del-confirm-yes{padding:1px 8px;font-size:10px;border-radius:3px;border:none;background:var(--red);color:#fff;cursor:pointer;font-weight:600}.del-confirm-yes:hover{filter:brightness(1.15)}.del-confirm-no{padding:1px 6px;font-size:10px;border-radius:3px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer}.del-confirm-no:hover{background:var(--surface-hover);color:var(--text)}@keyframes del-pop{0%{opacity:0;transform:translateY(-50%) scale(.92)}to{opacity:1;transform:translateY(-50%) scale(1)}}.office-cards{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}.office-card{border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;cursor:pointer;transition:border-color .15s,background .15s}.office-card:hover{border-color:var(--accent);background:var(--accent-soft)}.office-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.office-name{font-size:12px;font-weight:600;color:var(--text)}.office-edit-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;font-size:13px;padding:0 2px;line-height:1;opacity:0;transition:opacity .15s}.office-card:hover .office-edit-btn{opacity:.7}.office-edit-btn:hover{opacity:1!important;color:var(--accent)}.office-name-input{font-size:12px;font-weight:600;background:var(--bg-elevated);color:var(--text);border:1px solid var(--accent);border-radius:3px;padding:1px 4px;width:120px;outline:none}.office-capacity{font-size:11px;color:var(--text-secondary);font-family:var(--font-mono, monospace)}.office-agents{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.office-agent-chip{font-size:10px;padding:1px 6px;border-radius:8px;background:var(--accent-soft);color:var(--text-primary);cursor:pointer;border:1px solid var(--border);transition:background .1s}.office-agent-chip:hover{background:var(--accent);color:#fff}.assign-dropdown{font-size:10px;padding:2px 16px 2px 4px;border-radius:4px;appearance:none;-webkit-appearance:none;background:var(--bg-elevated);color:var(--text);color-scheme:inherit;border:1px solid var(--border);cursor:pointer;outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%23888'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 4px center;background-size:8px 5px}.agent-list{display:flex;flex-direction:column;gap:4px}.agent-row{position:relative;display:flex;align-items:stretch;border-radius:var(--radius-sm);border:1px solid var(--border);overflow:visible;transition:border-color .15s}.agent-row:hover{border-color:var(--border-hover)}.agent-row.selected{border-color:var(--accent);background:var(--accent-soft)}.agent-row-main{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;border:none;background:transparent;color:var(--text);cursor:pointer;text-align:left;border-radius:0}.agent-row-main:hover{background:var(--surface-hover);transform:none}.agent-info{display:flex;flex-direction:column;gap:1px;min-width:0}.agent-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-spec{font-size:10px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-del{flex-shrink:0;width:30px;display:flex;align-items:center;justify-content:center;border:none;border-left:1px solid var(--border);background:transparent;color:var(--text-secondary);font-size:14px;cursor:pointer;padding:0;border-radius:0;transition:all .12s}.agent-del:hover{background:#f8717126;color:var(--red);transform:none}.dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-secondary)}.dot.active,.dot.working{background:var(--green);box-shadow:0 0 4px #34d39966}.dot.idle{background:var(--text-secondary)}.dot.waiting{background:var(--yellow)}.dot.delegating{background:var(--accent)}.dot.reflecting{background:#c084fc}.dot.spawned{background:var(--green)}.empty-state{font-size:12px;color:var(--text-secondary);text-align:center;padding:16px 12px;line-height:1.5}.agent-detail{padding:10px;border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--accent-soft);display:flex;flex-direction:column;gap:6px}.agent-detail-name{font-size:13px;font-weight:700;color:var(--accent)}.agent-detail-row{display:flex;justify-content:space-between;gap:8px;font-size:11px}.detail-label{color:var(--text-secondary);flex-shrink:0}.detail-value{text-align:right;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-select{flex:1;text-align:right;appearance:none;-webkit-appearance:none;background:var(--bg-elevated);color:var(--text);color-scheme:inherit;border:1px solid var(--border);border-radius:4px;padding:4px 20px 4px 8px;font-size:12px;cursor:pointer;min-width:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center;background-size:10px 6px}.agent-row-simple{display:flex;align-items:center;gap:6px;padding:7px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer;text-align:left;font-size:12px;transition:all .12s}.agent-row-simple:hover{border-color:var(--border-hover);background:var(--surface-hover);transform:none}.agent-row-simple.selected{border-color:var(--accent);background:var(--accent-soft)}.sub-badge{font-size:9px;font-weight:700;padding:1px 4px;border-radius:3px;background:var(--accent-soft);color:var(--accent)}.inline-btn{font-size:10px;padding:1px 6px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;margin-left:auto}.inline-btn:hover{background:var(--surface-hover);color:var(--text);transform:none}.dev-overlay{position:fixed;top:52px;right:8px;width:400px;max-height:calc(100vh - 60px);overflow-y:auto;z-index:100;padding:14px;border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-elevated);box-shadow:0 16px 48px #0006,0 0 0 1px var(--border);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);display:flex;flex-direction:column;gap:14px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.dev-header{display:flex;justify-content:space-between;align-items:center}.dev-title{font-size:13px;font-weight:700;letter-spacing:-.01em}.dev-group{display:flex;flex-direction:column;gap:8px}.dev-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);display:flex;align-items:center;gap:8px}.inline-select{font-size:10px;padding:2px 6px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);margin-left:auto;outline:none}.dev-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.dev-row select{padding:5px 8px;font-size:11px;border-radius:var(--radius-xs);border:1px solid var(--border);background:var(--surface);color:var(--text);outline:none}.pill-btn{padding:5px 12px;font-size:11px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;transition:all .12s}.pill-btn:hover{background:var(--surface-hover);color:var(--text);border-color:var(--border-hover);transform:none}.pill-btn.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.evo-pipeline{display:flex;align-items:center;gap:0;padding:6px 0}.evo-phase-group{display:flex;align-items:center;flex-shrink:0}.evo-connector{width:16px;height:2px;background:var(--border)}.evo-node{display:flex;flex-direction:column;align-items:center;gap:5px}.evo-dot{width:14px;height:14px;border-radius:50%;border:2px dashed var(--border);background:transparent;transition:all .2s}.evo-node.active .evo-dot{border-style:solid;border-color:var(--accent);background:var(--accent);box-shadow:0 0 8px var(--accent-glow);animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 0 4px var(--accent-glow)}50%{box-shadow:0 0 14px var(--accent-glow)}}.evo-label{font-size:9px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.evo-node.active .evo-label{color:var(--text);font-weight:600}.event-log{max-height:220px;overflow-y:auto;display:flex;flex-direction:column;gap:3px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}.log-row{display:grid;grid-template-columns:52px 80px 70px minmax(0,1fr);gap:6px;padding:4px 6px;border-radius:var(--radius-xs);background:var(--surface);font-size:10px;overflow:hidden;font-variant-numeric:tabular-nums}.log-time{color:var(--text-secondary)}.log-type{color:var(--accent);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-agent{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-data{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Consolas,monospace}.list{display:flex;flex-direction:column;gap:4px}.list-row{display:flex;justify-content:space-between;gap:8px;font-size:11px;padding:4px 8px;border-radius:var(--radius-xs);background:var(--surface)}.list-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono{font-family:SF Mono,Consolas,Courier New,monospace}.muted{color:var(--text-secondary)}@media(max-width:1024px){.main-grid{grid-template-columns:1fr;grid-template-rows:minmax(0,1.2fr) minmax(0,1fr);transition:grid-template-rows .22s ease}.main-grid.sidebar-collapsed{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) 0}.main-grid.sidebar-collapsed .sidebar{border-top:none}.sidebar{border-left:none;border-top:1px solid var(--border);max-height:48vh;min-height:0}.sidebar-collapse-btn{top:auto;bottom:0;right:50%;transform:translate(50%);width:56px;height:18px;border:1px solid var(--border);border-bottom:none;border-radius:8px 8px 0 0}.sidebar-collapse-btn .collapse-glyph{display:inline-block;transform:rotate(90deg)}.stat-chips{display:none}}@media(max-width:760px){.topbar{padding:0 10px}.dev-overlay{width:calc(100vw - 16px);right:8px;left:8px}}@media(max-width:480px){.main-grid{grid-template-rows:minmax(0,1fr) minmax(0,auto)}.sidebar{max-height:45vh}}.org-page{display:flex;flex-direction:column;flex:1;min-height:0;overflow-y:auto}.editor-page{overflow:hidden;display:flex;flex-direction:column}.collision-editor{display:flex;flex-direction:column;height:100%;background:var(--bg);color:var(--text)}.ce-toolbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--bg-elevated);border-bottom:1px solid var(--border);flex-wrap:wrap;min-height:44px}.ce-toolbar-group{display:flex;align-items:center;gap:6px}.ce-title{font-weight:700;font-size:14px;letter-spacing:.02em;white-space:nowrap}.ce-office-select{font-size:12px;padding:2px 6px;border-radius:4px;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);cursor:pointer;outline:none}.ce-mode-btn{display:flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary);font-size:12px;cursor:pointer;transition:all .15s}.ce-mode-btn:hover{background:var(--surface-hover);color:var(--text)}.ce-mode-btn.active{border-color:var(--accent);color:var(--text);background:var(--accent-soft)}.ce-mode-btn.active.wall{border-color:var(--red);background:#f8717126}.ce-mode-btn.active.floor{border-color:var(--green);background:#34d39926}.ce-mode-btn.active.seat{border-color:var(--yellow);background:#fbbf2426}.ce-mode-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.ce-mode-dot.wall{background:var(--red)}.ce-mode-dot.floor{background:var(--green)}.ce-mode-dot.seat{background:var(--yellow)}.ce-btn{padding:4px 10px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--surface);color:var(--text-secondary);font-size:12px;cursor:pointer;transition:all .15s;white-space:nowrap}.ce-btn:hover{background:var(--surface-hover);color:var(--text)}.ce-btn.active{border-color:var(--accent);color:var(--accent)}.ce-btn.apply{background:var(--accent);color:#fff;border-color:var(--accent);font-weight:600}.ce-btn.apply:hover{filter:brightness(1.1)}.ce-btn.apply.success{background:var(--green);border-color:var(--green)}.ce-btn.upload{background:linear-gradient(135deg,var(--accent-soft),var(--surface));border-color:var(--accent);color:var(--accent);font-weight:600}.ce-btn.upload:hover{filter:brightness(1.1)}.ce-btn.danger{color:var(--red)}.ce-btn.danger:hover{background:#f8717126;border-color:var(--red)}.ce-zoom-label{font-size:11px;color:var(--text-secondary);min-width:36px;text-align:center;font-variant-numeric:tabular-nums}.ce-stats{font-size:11px;color:var(--text-secondary);gap:10px;margin-left:auto}.ce-body{flex:1;display:flex;overflow:hidden}.ce-canvas-wrap{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center;padding:16px;background:#1a1a2e}.ce-canvas-wrap canvas{box-shadow:0 4px 24px #00000080;border:1px solid var(--border);border-radius:4px}.ce-export-panel{width:380px;min-width:320px;border-left:1px solid var(--border);background:var(--bg-elevated);display:flex;flex-direction:column;overflow:hidden}.ce-export-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);font-size:12px;color:var(--text-secondary)}.ce-export-textarea{flex:1;padding:12px;background:var(--bg);color:var(--text);border:none;font-family:JetBrains Mono,Fira Code,Menlo,monospace;font-size:11px;line-height:1.5;resize:none;outline:none} diff --git a/opc/plugins/office_ui/frontend_dist/index.html b/opc/plugins/office_ui/frontend_dist/index.html index e76013d..702a31a 100644 --- a/opc/plugins/office_ui/frontend_dist/index.html +++ b/opc/plugins/office_ui/frontend_dist/index.html @@ -5,9 +5,9 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="icon" href="data:," /> <title>OpenOPC Pixel Office - + - +
diff --git a/opc/plugins/office_ui/frontend_src/App.tsx b/opc/plugins/office_ui/frontend_src/App.tsx index 8abad21..6c02ae3 100644 --- a/opc/plugins/office_ui/frontend_src/App.tsx +++ b/opc/plugins/office_ui/frontend_src/App.tsx @@ -476,7 +476,6 @@ export default function App() { const [globalCompanyProfile, setGlobalCompanyProfile] = useState<'corporate' | 'custom'>('corporate') const [globalTaskPreferredAgent, setGlobalTaskPreferredAgent] = useState('native') const [orgInfoData, setOrgInfoData] = useState(null) - const [recoveryStatus, setRecoveryStatus] = useState(null) const [commsState, setCommsState] = useState(null) const [commsMessage, setCommsMessage] = useState(null) const [talentTemplates, setTalentTemplates] = useState([]) @@ -1239,7 +1238,6 @@ export default function App() { runtimeControlState: String(payload.runtime_control_state ?? payload.runtimeControlState ?? 'idle') as any, canStop: Boolean(payload.can_stop ?? payload.canStop), canResume: Boolean(payload.can_resume ?? payload.canResume), - resumeParentTaskId: String(payload.resume_parent_task_id ?? payload.resumeParentTaskId ?? ''), resumeParentSessionId: String(payload.resume_parent_session_id ?? payload.resumeParentSessionId ?? ''), pendingRuntimeCheckpointId: String(payload.pending_runtime_checkpoint_id ?? payload.pendingRuntimeCheckpointId ?? ''), stopIntentId: String(payload.stop_intent_id ?? payload.stopIntentId ?? ''), @@ -1749,10 +1747,6 @@ export default function App() { clientRef.current?.collabSync(getActiveProjectId(), undefined, projectViewGenerationRef.current) } }, - onRecoveryStatus: (payload) => { - if (!payloadMatchesActiveProject(payload as unknown as Record, false)) return - setRecoveryStatus(payload) - }, onCommsState: (payload) => { if (!payloadMatchesActiveProject(payload as unknown as Record, false)) return setCommsState(payload) @@ -1761,13 +1755,6 @@ export default function App() { if (!payloadMatchesActiveProject(payload as unknown as Record, true)) return setCommsMessage(payload) }, - onRecoveryResult: (payload) => { - if (!payloadMatchesActiveProject(payload as unknown as Record, false)) return - if (payload?.status === 'completed' || payload?.status === 'cancelled') { - // Trigger a re-scan - clientRef.current?.recoveryAction(getActiveProjectId(), 'scan') - } - }, onTalentList: (payload) => { setTalentTemplates(payload.templates ?? []) if (payload.talent_dir) setDefaultTalentDir(payload.talent_dir) @@ -2242,18 +2229,13 @@ export default function App() { ) => { const session = sessionStore.sessions.find(s => s.taskId === taskId) const parentSessionId = session?.resumeParentSessionId ?? session?.parentSessionId ?? session?.sessionId - const parentTaskId = session?.resumeParentTaskId - ?? (parentSessionId ? sessionStore.sessions.find(s => s.sessionId === parentSessionId && !s.parentSessionId)?.taskId : undefined) - ?? taskId for (const candidate of sessionStore.sessions) { if ( candidate.taskId === taskId - || candidate.taskId === parentTaskId || (!!parentSessionId && (candidate.parentSessionId === parentSessionId || candidate.sessionId === parentSessionId)) ) { sessionStore.updateSession(candidate.taskId, { ...patch, - resumeParentTaskId: parentTaskId, resumeParentSessionId: parentSessionId, }) } @@ -2278,7 +2260,7 @@ export default function App() { clientRef.current?.sessionStop(getActiveProjectId(), taskId) }, [sessionStore.sessions, markRuntimeControlForTask, getActiveProjectId]) - const handleSessionResume = useCallback((taskId: string) => { + const handleSessionResume = useCallback((taskId: string, runtimeSessionId?: string, checkpointId?: string) => { const session = sessionStore.sessions.find(s => s.taskId === taskId) const isCompanyRuntime = session?.execMode === 'company' || session?.execMode === 'org' @@ -2293,7 +2275,12 @@ export default function App() { canResume: false, }) } - clientRef.current?.sessionResume(getActiveProjectId(), taskId) + clientRef.current?.sessionResume( + getActiveProjectId(), + taskId, + runtimeSessionId ?? session?.resumeParentSessionId ?? session?.parentSessionId ?? session?.sessionId, + checkpointId ?? session?.pendingRuntimeCheckpointId, + ) }, [sessionStore.sessions, markRuntimeControlForTask, getActiveProjectId]) const handleGlobalModeChange = useCallback((mode: 'task' | 'company' | 'org' | 'custom', profile?: string, orgId?: string) => { @@ -2426,9 +2413,6 @@ export default function App() { activeSavedOrg={activeSavedOrg} onSavedOrgsList={handleSavedOrgsList} onSavedOrgLoad={handleSavedOrgLoad} - recoveryStatus={recoveryStatus} - onRecoveryResume={(id) => clientRef.current?.recoveryAction(getActiveProjectId(), 'resume', id)} - onRecoveryCancel={(id) => clientRef.current?.recoveryAction(getActiveProjectId(), 'cancel', id)} commsState={commsState} commsMessage={commsMessage} onCommsRefresh={(opts) => { diff --git a/opc/plugins/office_ui/frontend_src/lib/collabSync.ts b/opc/plugins/office_ui/frontend_src/lib/collabSync.ts index 182036d..7977fe7 100644 --- a/opc/plugins/office_ui/frontend_src/lib/collabSync.ts +++ b/opc/plugins/office_ui/frontend_src/lib/collabSync.ts @@ -676,7 +676,6 @@ export function mapBackendSession(raw: any): Session { runtimeControlState: raw.runtime_control_state ?? raw.runtimeControlState, canStop: raw.can_stop ?? raw.canStop, canResume: raw.can_resume ?? raw.canResume, - resumeParentTaskId: raw.resume_parent_task_id ?? raw.resumeParentTaskId, resumeParentSessionId: raw.resume_parent_session_id ?? raw.resumeParentSessionId, pendingRuntimeCheckpointId: raw.pending_runtime_checkpoint_id ?? raw.pendingRuntimeCheckpointId, stopIntentId: raw.stop_intent_id ?? raw.stopIntentId, diff --git a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts index 0596de0..e0a246b 100644 --- a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts +++ b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts @@ -387,7 +387,6 @@ export function getConversationSessionView( runtimeControlState: runtimeSource.runtimeControlState ?? normalizedActiveSession.runtimeControlState, canStop: runtimeSource.canStop ?? normalizedActiveSession.canStop, canResume: runtimeSource.canResume ?? normalizedActiveSession.canResume, - resumeParentTaskId: runtimeSource.resumeParentTaskId ?? normalizedActiveSession.resumeParentTaskId, resumeParentSessionId: runtimeSource.resumeParentSessionId ?? normalizedActiveSession.resumeParentSessionId, pendingRuntimeCheckpointId: runtimeSource.pendingRuntimeCheckpointId ?? normalizedActiveSession.pendingRuntimeCheckpointId, stopIntentId: runtimeSource.stopIntentId ?? normalizedActiveSession.stopIntentId, @@ -447,7 +446,6 @@ export function getConversationHeaderSession( runtimeControlState: runtimeSource.runtimeControlState ?? normalizedActiveSession.runtimeControlState, canStop: runtimeSource.canStop ?? normalizedActiveSession.canStop, canResume: runtimeSource.canResume ?? normalizedActiveSession.canResume, - resumeParentTaskId: runtimeSource.resumeParentTaskId ?? normalizedActiveSession.resumeParentTaskId, resumeParentSessionId: runtimeSource.resumeParentSessionId ?? normalizedActiveSession.resumeParentSessionId, pendingRuntimeCheckpointId: runtimeSource.pendingRuntimeCheckpointId ?? normalizedActiveSession.pendingRuntimeCheckpointId, stopIntentId: runtimeSource.stopIntentId ?? normalizedActiveSession.stopIntentId, diff --git a/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts b/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts index 7daaedb..236e7d7 100644 --- a/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts +++ b/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts @@ -30,6 +30,17 @@ const flushPromises = async () => { const client = new VisualSocketClient('ws://unit.test', {}) +// Company Continue keeps the selected UI channel task separate from the +// durable runtime identity used by the checkpoint handoff. +client.sessionResume('project-a', 'ui-task', 'runtime-session', 'checkpoint-1') +const resumeEnvelope = JSON.parse( + (client as unknown as TestSocketClient).pendingQueue.pop() ?? '{}', +) as Record +assert.equal(resumeEnvelope.type, 'session_resume') +assert.equal(resumeEnvelope.task_id, 'ui-task') +assert.equal(resumeEnvelope.runtime_session_id, 'runtime-session') +assert.equal(resumeEnvelope.checkpoint_id, 'checkpoint-1') + // A summary and a full request for the same task are distinct correlations. // Neither Promise may settle merely because the request was queued locally. const summaryPromise = client.sessionDetail('project-a', 'task-1', { detailLevel: 'summary' }) diff --git a/opc/plugins/office_ui/frontend_src/lib/wsClient.ts b/opc/plugins/office_ui/frontend_src/lib/wsClient.ts index 7d7a456..afad41c 100644 --- a/opc/plugins/office_ui/frontend_src/lib/wsClient.ts +++ b/opc/plugins/office_ui/frontend_src/lib/wsClient.ts @@ -41,8 +41,6 @@ interface SocketHandlers { onProjectSwitched?: (payload: { project_id: string; switch_seq?: string }) => void onProjectDeleted?: (payload: { project_id: string }) => void onOrgInfo?: (payload: OrgInfoPayload) => void - onRecoveryStatus?: (payload: any) => void - onRecoveryResult?: (payload: any) => void onTalentList?: (payload: TalentListPayload) => void onTalentScanLocal?: (payload: { templates: Array<{ template_id: string; name: string; description: string; category: string; domains: string[]; tags: string[] }> }) => void onEmployeeDetail?: (payload: EmployeeDetailPayload) => void @@ -169,7 +167,6 @@ const PROJECT_SCOPED_MESSAGE_TYPES = new Set([ 'session_update_title', 'secretary_send', 'project_index', - 'recovery_action', 'comms_state', 'comms_read_message', ]) @@ -420,9 +417,22 @@ export class VisualSocketClient { this.send({ type: 'session_stop', project_id: pid, task_id: taskId }) } - sessionResume(projectId: string, taskId: string, content?: string): void { + sessionResume( + projectId: string, + taskId: string, + runtimeSessionId?: string, + checkpointId?: string, + content?: string, + ): void { const pid = this.requireProjectId(projectId, 'session_resume') - this.send({ type: 'session_resume', project_id: pid, task_id: taskId, content }) + this.send({ + type: 'session_resume', + project_id: pid, + task_id: taskId, + runtime_session_id: runtimeSessionId, + checkpoint_id: checkpointId, + content, + }) } sessionComplete(projectId: string, taskId: string): void { @@ -646,11 +656,6 @@ export class VisualSocketClient { this.send({ type: 'org_saved_delete', name }) } - recoveryAction(projectId: string, action: 'resume' | 'cancel' | 'scan', parentTaskId?: string): void { - const pid = this.requireProjectId(projectId, 'recovery_action') - this.send({ type: 'recovery_action', project_id: pid, action, parent_task_id: parentTaskId }) - } - commsState(projectId: string, opts?: { task_id?: string; session_id?: string }): void { const pid = this.requireProjectId(projectId, 'comms_state') this.send({ type: 'comms_state', project_id: pid, ...(opts || {}) }) @@ -801,12 +806,6 @@ export class VisualSocketClient { if (projectId) this.commsState(projectId) } catch { /* ignore */ } break - case 'recovery_status': - this.handlers.onRecoveryStatus?.(parsed.payload) - break - case 'recovery_result': - this.handlers.onRecoveryResult?.(parsed.payload) - break case 'talent_list': this.handlers.onTalentList?.(parsed.payload) break diff --git a/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts b/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts index 18f1086..8d63423 100644 --- a/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts +++ b/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts @@ -244,7 +244,6 @@ function sessionReducer(state: Session[], action: SessionAction): Session[] { runtimeControlState: guardedRuntimeControl.runtimeControlState ?? existing.runtimeControlState, canStop: guardedRuntimeControl.canStop ?? existing.canStop, canResume: guardedRuntimeControl.canResume ?? existing.canResume, - resumeParentTaskId: incoming.resumeParentTaskId ?? existing.resumeParentTaskId, resumeParentSessionId: incoming.resumeParentSessionId ?? existing.resumeParentSessionId, pendingRuntimeCheckpointId: guardedRuntimeControl.pendingRuntimeCheckpointId ?? existing.pendingRuntimeCheckpointId, stopIntentId: guardedRuntimeControl.stopIntentId ?? existing.stopIntentId, @@ -337,7 +336,6 @@ function sessionReducer(state: Session[], action: SessionAction): Session[] { runtimeControlState: guarded.runtimeControlState ?? s.runtimeControlState, canStop: guarded.canStop ?? s.canStop, canResume: guarded.canResume ?? s.canResume, - resumeParentTaskId: guarded.resumeParentTaskId ?? s.resumeParentTaskId, resumeParentSessionId: guarded.resumeParentSessionId ?? s.resumeParentSessionId, pendingRuntimeCheckpointId: guarded.pendingRuntimeCheckpointId ?? s.pendingRuntimeCheckpointId, stopIntentId: guarded.stopIntentId ?? s.stopIntentId, diff --git a/opc/plugins/office_ui/frontend_src/types/kanban.ts b/opc/plugins/office_ui/frontend_src/types/kanban.ts index 3d1381c..a02f9f0 100644 --- a/opc/plugins/office_ui/frontend_src/types/kanban.ts +++ b/opc/plugins/office_ui/frontend_src/types/kanban.ts @@ -316,10 +316,9 @@ export interface Session { originChannel?: string originTaskId?: string runtimeControlState?: 'running' | 'suspending' | 'suspended' | 'resuming' | 'idle' - canStop?: boolean - canResume?: boolean - resumeParentTaskId?: string - resumeParentSessionId?: string + canStop?: boolean + canResume?: boolean + resumeParentSessionId?: string pendingRuntimeCheckpointId?: string stopIntentId?: string // Handoff context from upstream work item (Company Mode) diff --git a/opc/plugins/office_ui/frontend_src/types/visual.ts b/opc/plugins/office_ui/frontend_src/types/visual.ts index af2ac71..ecdb80b 100644 --- a/opc/plugins/office_ui/frontend_src/types/visual.ts +++ b/opc/plugins/office_ui/frontend_src/types/visual.ts @@ -100,8 +100,6 @@ export type SocketEnvelope = | { type: 'work_item_batch_updated'; payload: { run_id?: string; work_items: RuntimeWorkItemInfo[]; frontier?: RuntimeFrontierSummary } } | { type: 'project_recovery_updated'; payload: Record } | { type: 'project_revision_created'; payload: { run_id?: string; revision_links: SessionLinkInfo[] } } - | { type: 'recovery_status'; payload: Record } - | { type: 'recovery_result'; payload: Record } | { type: 'talent_list'; payload: TalentListPayload } | { type: 'talent_scan_local'; payload: { templates: Array<{ template_id: string; name: string; description: string; category: string; domains: string[]; tags: string[] }> } } | { type: 'employee_detail'; payload: EmployeeDetailPayload } diff --git a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx index fc7e2a5..8d99997 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx +++ b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx @@ -77,7 +77,6 @@ interface ContextPanelProps { onCommsRefresh?: () => void onCommsReadMessage?: (path: string) => void orgInfoData?: OrgInfoPayload | null - recoveryStatus?: Record | null canShowTeamTab?: boolean onTeamStopRun?: () => void @@ -497,7 +496,6 @@ export function ContextPanel({ onCommsRefresh, onCommsReadMessage, orgInfoData, - recoveryStatus, canShowTeamTab = false, onTeamStopRun, onTitleChange, @@ -1306,7 +1304,6 @@ export function ContextPanel({
| null commsState?: CommsStatePayload | null onStopRun?: () => void embedded?: boolean @@ -56,7 +55,6 @@ interface ProjectCockpitProps { export function ProjectCockpit({ orgInfoData, - recoveryStatus, commsState, onStopRun, embedded = false, @@ -78,7 +76,6 @@ export function ProjectCockpit({ count + asRecordList(asRecord(digest.manager_digest).notification_backlog).length ), 0) const unreadCount = actionableCount + protocolCount + notificationCount - const interrupted = Array.isArray(recoveryStatus?.interrupted) ? recoveryStatus.interrupted.length : 0 const communicationItems = [ { label: 'Actionable', value: actionableCount }, @@ -198,7 +195,7 @@ export function ProjectCockpit({ Seats {runtimeView.runtimeSeats.length} Approvals {pendingDecisionCount} Unread {unreadCount} - Recovery {interrupted > 0 ? `${interrupted} interrupted` : summarizeText(asRecord(projectRun?.recovery_pointer).status, 'clean')} + Run state {summarizeText(asRecord(projectRun?.recovery_pointer).status, 'clean')}
diff --git a/opc/plugins/office_ui/frontend_src/workspace/WorkItemRecoveryPanel.tsx b/opc/plugins/office_ui/frontend_src/workspace/WorkItemRecoveryPanel.tsx deleted file mode 100644 index 0fce992..0000000 --- a/opc/plugins/office_ui/frontend_src/workspace/WorkItemRecoveryPanel.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { useState } from 'react' - -export interface RecoverableWorkItem { - work_item_projection_id: string - title: string - task_id: string - status: string - interrupted: boolean - previous_status: string -} - -export interface InterruptedWorkItemRuntime { - parent_session_id: string - parent_task_id: string - project_id: string - title: string - profile: string - interrupted_at: string - work_items: RecoverableWorkItem[] -} - -export interface RecoveryStatusPayload { - interrupted: InterruptedWorkItemRuntime[] - active_recoveries: string[] - scanned_at: number -} - -interface WorkItemRecoveryPanelProps { - data: RecoveryStatusPayload - onResume: (parentTaskId: string) => void - onCancel: (parentTaskId: string) => void -} - -const STATUS_ICON: Record = { - done: '\u2713', - failed: '\u2717', - pending: '\u25CB', - blocked: '\u25A0', - cancelled: '\u2014', - running: '\u25B6', -} - -const STATUS_COLOR: Record = { - done: 'var(--green, #27ae60)', - failed: 'var(--red, #e74c3c)', - pending: 'var(--text-secondary, #888)', - blocked: 'var(--yellow, #f39c12)', - cancelled: 'var(--text-dim, #555)', - running: 'var(--accent, #3498db)', -} - -export function WorkItemRecoveryPanel({ data, onResume, onCancel }: WorkItemRecoveryPanelProps) { - const [dismissed, setDismissed] = useState>(new Set()) - - if (!data.interrupted.length && !data.active_recoveries.length) return null - - const visible = data.interrupted.filter(w => !dismissed.has(w.parent_task_id)) - if (!visible.length && !data.active_recoveries.length) return null - - return ( -
- {visible.map(wf => { - const isRecovering = data.active_recoveries.includes(wf.parent_task_id) - const doneCount = wf.work_items.filter(item => item.status === 'done').length - const failedCount = wf.work_items.filter(item => item.interrupted || item.status === 'failed').length - - return ( -
-
- -
- Interrupted: {wf.title} - - {doneCount}/{wf.work_items.length} work items done, {failedCount} interrupted - {wf.profile && <> · {wf.profile}} - -
-
- -
- {wf.work_items.map(item => ( -
- - {STATUS_ICON[item.status] || STATUS_ICON.pending} - - {item.title} - {item.interrupted && interrupted} -
- ))} -
- -
- {isRecovering ? ( - - Recovering... - - ) : ( - <> - - - - - )} -
-
- ) - })} -
- ) -} diff --git a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx index 7646108..f0c20c7 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx +++ b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx @@ -1,6 +1,5 @@ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' import type { AgentInfo, OrgInfoPayload, SavedOrgSummary } from '../types/visual' -import { WorkItemRecoveryPanel } from './WorkItemRecoveryPanel' import type { ChatMessage, CheckpointReplyMetadata, OutgoingAttachmentPayload } from '../types/chat' import type { KanbanTask, Session, TaskPreferredAgent } from '../types/kanban' import type { BoardStoreState } from '../kanban/BoardStore' @@ -253,7 +252,7 @@ interface WorkspacePageProps { */ onContinueInNewChat?: (mode: 'task' | 'company' | 'org' | 'custom', companyProfile?: 'corporate' | 'custom', orgId?: string) => void onSessionStop?: (taskId: string) => void - onSessionResume?: (taskId: string) => void + onSessionResume?: (taskId: string, runtimeSessionId?: string, checkpointId?: string) => void onSessionComplete?: (taskId: string) => void onLoadSessionDetail?: ( taskId: string, @@ -263,9 +262,6 @@ interface WorkspacePageProps { onCollabSync?: () => void orgInfoData?: OrgInfoPayload | null onNavigateToOrg?: () => void - recoveryStatus?: any - onRecoveryResume?: (parentTaskId: string) => void - onRecoveryCancel?: (parentTaskId: string) => void commsState?: import('../lib/wsClient').CommsStatePayload | null commsMessage?: import('../lib/wsClient').CommsMessagePayload | null onCommsRefresh?: (opts?: { task_id?: string; session_id?: string; project_id?: string }) => void @@ -305,9 +301,6 @@ export function WorkspacePage({ onCollabSync, orgInfoData, onNavigateToOrg, - recoveryStatus, - onRecoveryResume, - onRecoveryCancel, commsState, commsMessage, onCommsRefresh, @@ -988,13 +981,21 @@ export function WorkspacePage({ const handleResume = useCallback(() => { const targetSession = activeConversation.runtimeSession ?? activeConversation.displaySession ?? activeSession - const targetTaskId = targetSession?.resumeParentTaskId ?? targetSession?.taskId ?? activeSessionId - if (targetTaskId) onSessionResume?.(targetTaskId) + const uiTaskId = activeSessionId ?? targetSession?.taskId + const runtimeSessionId = targetSession?.resumeParentSessionId + ?? targetSession?.parentSessionId + ?? targetSession?.sessionId + if (uiTaskId) { + onSessionResume?.(uiTaskId, runtimeSessionId, targetSession?.pendingRuntimeCheckpointId) + } }, [activeConversation.runtimeSession, activeConversation.displaySession, activeSession, activeSessionId, onSessionResume]) const handleResumeTask = useCallback((taskId: string) => { const session = sessions.find(s => s.taskId === taskId) - onSessionResume?.(session?.resumeParentTaskId ?? taskId) + const runtimeSessionId = session?.resumeParentSessionId + ?? session?.parentSessionId + ?? session?.sessionId + onSessionResume?.(taskId, runtimeSessionId, session?.pendingRuntimeCheckpointId) }, [sessions, onSessionResume]) const handleCompleteTask = useCallback((taskId: string) => { @@ -1034,8 +1035,11 @@ export function WorkspacePage({ } const targetTaskId = activeSessionId if (!targetTaskId) return - const checkpointReplyId = String(latestPendingCheckpointReply?.response_to_checkpoint_id ?? '').trim() + const runtimeSession = activeConversation.runtimeSession ?? activeConversation.displaySession ?? activeSession + const runtimeCheckpointId = String(runtimeSession?.pendingRuntimeCheckpointId ?? '').trim() let outgoingMetadata = latestPendingCheckpointReply + ?? (runtimeCheckpointId ? { response_to_checkpoint_id: runtimeCheckpointId } : undefined) + const checkpointReplyId = String(outgoingMetadata?.response_to_checkpoint_id ?? '').trim() if (!checkpointReplyId) { const uiMessageId = makeOptimisticUserMessageId() outgoingMetadata = { ...(latestPendingCheckpointReply ?? {}), ui_message_id: uiMessageId } @@ -1050,7 +1054,7 @@ export function WorkspacePage({ } dispatchSessionSend(targetTaskId, content, attachments, outgoingMetadata) }, - [effectiveView.kind, activeSessionId, activeConversation.displaySession, activeSession, latestPendingCheckpointReply, chatStore, dispatchSessionSend, onSecretarySend], + [effectiveView.kind, activeSessionId, activeConversation.runtimeSession, activeConversation.displaySession, activeSession, latestPendingCheckpointReply, chatStore, dispatchSessionSend, onSecretarySend], ) // ── MessageList send (checkpoint replies) ── @@ -1114,13 +1118,6 @@ export function WorkspacePage({ {/* Middle column: Kanban Board (hidden when panel maximized) */} {panelState !== 'maximized' && (
- {recoveryStatus && onRecoveryResume && onRecoveryCancel && ( - - )} {agents.length > 0 && } {isCompanyMode ? ( boardStore.activeBoard && activeSession && ( @@ -1206,7 +1203,6 @@ export function WorkspacePage({ onCommsRefresh={onCommsRefresh ? () => onCommsRefresh({ session_id: activeSession?.sessionId || undefined, project_id: projectId || undefined }) : undefined} onCommsReadMessage={onCommsReadMessage} orgInfoData={orgInfoData ?? null} - recoveryStatus={recoveryStatus ?? null} canShowTeamTab={canShowTeamTab} onTeamStopRun={activeSessionId ? () => onSessionStop?.(activeSessionId) : undefined} onTitleChange={onTitleChange} diff --git a/opc/plugins/office_ui/frontend_src/workspace/workspace.css b/opc/plugins/office_ui/frontend_src/workspace/workspace.css index 972683b..f9bb6ab 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/workspace.css +++ b/opc/plugins/office_ui/frontend_src/workspace/workspace.css @@ -1605,132 +1605,6 @@ } } -/* ── Work Item Recovery Panel ────────────────────────────────────────── */ - -.wfr-panel { - padding: 0 8px; -} - -.wfr-card { - background: color-mix(in srgb, var(--yellow, #f39c12) 8%, var(--bg-secondary)); - border: 1px solid color-mix(in srgb, var(--yellow, #f39c12) 25%, transparent); - border-radius: 8px; - padding: 12px 14px; - margin-bottom: 8px; -} - -.wfr-header { - display: flex; - align-items: flex-start; - gap: 8px; - margin-bottom: 8px; -} - -.wfr-icon { - font-size: 16px; - line-height: 1; - flex-shrink: 0; -} - -.wfr-header-text { - display: flex; - flex-direction: column; - gap: 2px; - min-width: 0; -} - -.wfr-title { - font-size: 13px; - font-weight: 600; - color: var(--text); -} - -.wfr-subtitle { - font-size: 11px; - color: var(--text-secondary); -} - -.wfr-work-items { - display: flex; - flex-direction: column; - gap: 4px; - margin-bottom: 10px; -} - -.wfr-work-item { - display: flex; - align-items: center; - gap: 6px; - font-size: 12px; - color: var(--text-secondary); -} - -.wfr-work-item-icon { - font-size: 12px; - width: 14px; - text-align: center; - flex-shrink: 0; - font-weight: 700; -} - -.wfr-work-item-title { - flex: 1; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.wfr-work-item-badge { - font-size: 9px; - padding: 1px 5px; - border-radius: 3px; - background: color-mix(in srgb, var(--red, #e74c3c) 15%, transparent); - color: var(--red, #e74c3c); - flex-shrink: 0; -} - -.wfr-actions { - display: flex; - gap: 8px; - align-items: center; -} - -.wfr-btn { - padding: 5px 14px; - font-size: 12px; - font-weight: 500; - border: none; - border-radius: 6px; - cursor: pointer; -} - -.wfr-btn--resume { - background: var(--green, #27ae60); - color: #fff; -} -.wfr-btn--resume:hover { opacity: 0.85; } - -.wfr-btn--cancel { - background: var(--red, #e74c3c); - color: #fff; -} -.wfr-btn--cancel:hover { opacity: 0.85; } - -.wfr-btn--dismiss { - background: transparent; - color: var(--text-secondary); -} -.wfr-btn--dismiss:hover { color: var(--text); } - -.wfr-recovering { - display: flex; - align-items: center; - gap: 6px; - font-size: 12px; - color: var(--accent); -} - /* ═══════════════════════════════════════════════════════ Kanban empty-state ═══════════════════════════════════════════════════════ */ diff --git a/opc/plugins/office_ui/recovery_manager.py b/opc/plugins/office_ui/recovery_manager.py deleted file mode 100644 index 08cbbae..0000000 --- a/opc/plugins/office_ui/recovery_manager.py +++ /dev/null @@ -1,552 +0,0 @@ -"""Pluggable work-item crash-recovery manager. - -Detects interrupted company-mode work items after server restart and provides -deterministic Resume / Cancel operations — no LLM needed. - -Hooks into existing engine capabilities without modifying core code: -- engine.store → task queries + persistence -- engine._load_company_runtime_snapshot() → reconstruct work-item plan + tasks -- engine.company_executor.execute() → resume execution -- ws_handler.broadcast() → push status to all clients -""" - -from __future__ import annotations - -import asyncio -import dataclasses -import logging -import time -from dataclasses import dataclass, field -from datetime import datetime -from typing import Any, Awaitable, Callable - -from opc.layer2_organization.work_item_identity import work_item_projection_id_from_metadata -from opc.layer2_organization.work_item_transition import apply_task_status_transition - -logger = logging.getLogger(__name__) - - -# --------------------------------------------------------------------------- -# Data types -# --------------------------------------------------------------------------- - -@dataclass -class RecoverableWorkItem: - work_item_projection_id: str - title: str - task_id: str - status: str # "done" | "failed" | "pending" | "blocked" | "cancelled" - interrupted: bool # has interrupted_recovery metadata - previous_status: str # what it was before reconciliation - - -@dataclass -class InterruptedWorkItemRun: - parent_session_id: str - parent_task_id: str - project_id: str - title: str - profile: str - interrupted_at: str - work_items: list[RecoverableWorkItem] = field(default_factory=list) - - -@dataclass -class RecoveryStatus: - interrupted: list[InterruptedWorkItemRun] = field(default_factory=list) - active_recoveries: list[str] = field(default_factory=list) - scanned_at: float = 0.0 - - -# --------------------------------------------------------------------------- -# Manager -# --------------------------------------------------------------------------- - -class RuntimeRecoveryManager: - """Scans for interrupted work-item runs and provides deterministic recovery.""" - - _CACHE_TTL = 10.0 # seconds - - def __init__( - self, - engine: Any, - broadcast_fn: Callable[[dict[str, Any]], Awaitable[None]], - ) -> None: - self._engine = engine - self._broadcast = broadcast_fn - self._lock = asyncio.Lock() - self._active_recoveries: dict[str, asyncio.Task[Any]] = {} - self._cached: RecoveryStatus | None = None - self._cache_until: float = 0.0 - - # ------------------------------------------------------------------ - # Public API - # ------------------------------------------------------------------ - - async def get_recovery_status(self) -> RecoveryStatus: - """Return cached scan results, re-scanning if stale.""" - now = time.time() - if self._cached is not None and now < self._cache_until: - # Keep active_recoveries up to date even from cache - self._cached.active_recoveries = list(self._active_recoveries.keys()) - return self._cached - status = await self.scan() - self._cached = status - self._cache_until = now + self._CACHE_TTL - return status - - async def scan(self) -> RecoveryStatus: - """Scan the database for recoverable interrupted work-item runs.""" - store = self._engine.store - if not store: - return RecoveryStatus() - - project_id = self._engine.project_id or "default" - try: - all_tasks = await store.get_tasks(project_id=project_id) - except Exception as exc: - logger.warning(f"Recovery scan failed: {exc}") - return RecoveryStatus() - - # Group projected work-item tasks by parent_session_id. - groups: dict[str, list[Any]] = {} - all_tasks_by_session: dict[str, Any] = {} - for task in all_tasks: - session_id = str(getattr(task, "session_id", "") or "").strip() - if session_id: - all_tasks_by_session[session_id] = task - - parent_sid = str(getattr(task, "parent_session_id", "") or "").strip() - projection_id = work_item_projection_id_from_metadata(getattr(task, "metadata", {}) or {}) - if parent_sid and projection_id: - groups.setdefault(parent_sid, []).append(task) - - interrupted: list[InterruptedWorkItemRun] = [] - - for parent_sid, tasks in groups.items(): - # Check if any task has interrupted_recovery metadata - has_interrupted = any( - _is_interrupted(t) for t in tasks - ) - if not has_interrupted: - continue - - # Skip if all tasks are terminal (DONE or CANCELLED) - from opc.core.models import TaskStatus - non_terminal = [ - t for t in tasks - if t.status not in (TaskStatus.DONE, TaskStatus.CANCELLED) - ] - if not non_terminal: - continue - - # Find the parent (primary) task - parent_task = all_tasks_by_session.get(parent_sid) - parent_task_id = parent_task.id if parent_task else parent_sid - title = parent_task.title if parent_task else "Unknown work-item run" - - # Build work-item list. - work_items: list[RecoverableWorkItem] = [] - earliest_interrupt = "" - for t in sorted(tasks, key=lambda x: (x.created_at, x.id)): - meta = dict(getattr(t, "metadata", {}) or {}) - recovery_meta = meta.get("interrupted_recovery", {}) - is_int = _is_interrupted(t) - if is_int and recovery_meta.get("detected_at", ""): - detected = recovery_meta["detected_at"] - if not earliest_interrupt or detected < earliest_interrupt: - earliest_interrupt = detected - - work_items.append(RecoverableWorkItem( - work_item_projection_id=work_item_projection_id_from_metadata(meta, fallback=t.id), - title=t.title, - task_id=t.id, - status=t.status.value if hasattr(t.status, "value") else str(t.status), - interrupted=is_int, - previous_status=recovery_meta.get("previous_status", ""), - )) - - profile = "" - for t in tasks: - p = (getattr(t, "metadata", {}) or {}).get("company_profile", "") - if p: - profile = p - break - - interrupted.append(InterruptedWorkItemRun( - parent_session_id=parent_sid, - parent_task_id=parent_task_id, - project_id=project_id, - title=title, - profile=profile, - interrupted_at=earliest_interrupt or datetime.now().isoformat(), - work_items=work_items, - )) - - return RecoveryStatus( - interrupted=interrupted, - active_recoveries=list(self._active_recoveries.keys()), - scanned_at=time.time(), - ) - - async def resume(self, parent_task_id: str) -> dict[str, Any]: - """Deterministically resume an interrupted work-item run.""" - async with self._lock: - if parent_task_id in self._active_recoveries: - return {"ok": False, "error": "already_in_progress"} - - # Find the interrupted work-item run. - status = await self.scan() - wf = next((w for w in status.interrupted if w.parent_task_id == parent_task_id), None) - if not wf: - return {"ok": False, "error": "not_found"} - - # Load snapshot - snapshot = await self._engine._load_company_runtime_snapshot(wf.parent_session_id) - if not snapshot: - return {"ok": False, "error": "snapshot_unavailable"} - - plan, tasks = snapshot - - # Clean orphaned checkpoints - await self._clean_orphaned_checkpoints(wf, tasks) - - # Reset interrupted/failed/blocked tasks → PENDING - from opc.core.models import TaskStatus - resumed_ids: list[str] = [] - failed_ids: list[str] = [] - for task in tasks: - if task.status == TaskStatus.DONE: - continue - if task.status in (TaskStatus.FAILED, TaskStatus.BLOCKED): - task.result = None - task.execution_lock = False - task.execution_locked_at = None - meta = dict(task.metadata) - meta.pop("interrupted_recovery", None) - progress = list(meta.get("progress_log", [])) - progress.append(f"[Recovery] Resumed at {datetime.now().isoformat()}") - meta["progress_log"] = progress[-20:] - task.metadata = meta - projection_id = work_item_projection_id_from_metadata(meta, fallback=task.id) - try: - await apply_task_status_transition( - self._engine.store, - task, - target_status_or_phase=TaskStatus.PENDING, - reason="office_recovery_resume", - release_claim=True, - ) - except Exception as exc: - logger.warning("Recovery resume skipped %s: %s", task.id, exc) - failed_ids.append(projection_id) - continue - if task.status != TaskStatus.PENDING: - logger.warning("Recovery resume preserved non-runnable phase for %s", task.id) - failed_ids.append(projection_id) - continue - await self._engine.store.save_task(task) - resumed_ids.append(projection_id) - - if not resumed_ids: - return { - "ok": False, - "error": "no_work_items_to_resume", - "failed_work_item_projection_ids": failed_ids, - } - - # Invalidate cache - self._cache_until = 0.0 - - # Launch execution in background - await self._set_run_recovery_state( - wf.parent_session_id, - status="resuming", - lifecycle_status="active", - ) - bg_task = asyncio.create_task( - self._execute_recovery(parent_task_id, wf.parent_session_id, plan, tasks) - ) - self._active_recoveries[parent_task_id] = bg_task - - return { - "ok": True, - "resumed_work_item_projection_ids": resumed_ids, - "failed_work_item_projection_ids": failed_ids, - } - - async def cancel(self, parent_task_id: str) -> dict[str, Any]: - """Cancel an interrupted work-item run and clean up.""" - async with self._lock: - # Cancel active recovery if running - bg = self._active_recoveries.pop(parent_task_id, None) - if bg and not bg.done(): - bg.cancel() - - # Find the interrupted work-item run. - status = await self.scan() - wf = next((w for w in status.interrupted if w.parent_task_id == parent_task_id), None) - if not wf: - return {"ok": False, "error": "not_found"} - - # Load tasks and cancel non-terminal ones - snapshot = await self._engine._load_company_runtime_snapshot(wf.parent_session_id) - if not snapshot: - return {"ok": False, "error": "snapshot_unavailable"} - - _, tasks = snapshot - from opc.core.models import TaskStatus - cancelled_count = 0 - failed_ids: list[str] = [] - for task in tasks: - if task.status not in (TaskStatus.DONE, TaskStatus.CANCELLED): - projection_id = work_item_projection_id_from_metadata( - getattr(task, "metadata", {}) or {}, - fallback=task.id, - ) - try: - await apply_task_status_transition( - self._engine.store, - task, - target_status_or_phase=TaskStatus.CANCELLED, - reason="office_recovery_cancel", - release_claim=True, - ) - except Exception as exc: - logger.warning("Recovery cancel skipped %s: %s", task.id, exc) - failed_ids.append(projection_id) - continue - if task.status != TaskStatus.CANCELLED: - logger.warning("Recovery cancel preserved non-cancelled phase for %s", task.id) - failed_ids.append(projection_id) - continue - cancelled_count += 1 - - # Clean orphaned checkpoints - await self._clean_orphaned_checkpoints(wf, tasks) - - # Invalidate cache - self._cache_until = 0.0 - - await self._set_run_recovery_state( - wf.parent_session_id, - status="cancelled", - lifecycle_status="cancelled", - ) - await self._broadcast_status() - return { - "ok": True, - "cancelled_count": cancelled_count, - "failed_work_item_projection_ids": failed_ids, - } - - # ------------------------------------------------------------------ - # Internal helpers - # ------------------------------------------------------------------ - - async def _execute_recovery( - self, - parent_task_id: str, - parent_session_id: str, - plan: Any, - tasks: list[Any], - ) -> None: - """Run the work-item executor in the background.""" - project_id = self._engine.project_id or "default" - try: - await self._set_run_recovery_state( - parent_session_id, - status="started", - lifecycle_status="active", - ) - await self._broadcast({"type": "recovery_result", "payload": { - "project_id": project_id, - "parent_task_id": parent_task_id, "status": "started", - }}) - - executor = self._engine.company_executor - if not executor: - raise RuntimeError("company_executor not available") - - result = await executor.execute(plan, tasks) - - await self._broadcast({"type": "recovery_result", "payload": { - "project_id": project_id, - "parent_task_id": parent_task_id, "status": "completed", - "summary": result[:500] if result else "", - }}) - await self._set_run_recovery_state( - parent_session_id, - status="completed", - lifecycle_status="active", - ) - except asyncio.CancelledError: - await self._broadcast({"type": "recovery_result", "payload": { - "project_id": project_id, - "parent_task_id": parent_task_id, "status": "cancelled", - }}) - await self._set_run_recovery_state( - parent_session_id, - status="cancelled", - lifecycle_status="cancelled", - ) - except Exception as exc: - logger.warning(f"Recovery execution failed for {parent_task_id}: {exc}") - await self._broadcast({"type": "recovery_result", "payload": { - "project_id": project_id, - "parent_task_id": parent_task_id, "status": "failed", - "error": str(exc), - }}) - await self._set_run_recovery_state( - parent_session_id, - status="failed", - lifecycle_status="blocked", - extra={"error": str(exc)}, - ) - finally: - self._active_recoveries.pop(parent_task_id, None) - self._cache_until = 0.0 - await self._broadcast_status() - - async def _clean_orphaned_checkpoints( - self, - wf: InterruptedWorkItemRun, - tasks: list[Any], - ) -> int: - """Resolve pending checkpoints whose tasks are no longer active.""" - store = self._engine.store - if not store: - return 0 - - session_ids = { - str(getattr(t, "session_id", "") or "").strip() - for t in tasks - } - session_ids.add(wf.parent_session_id) - session_ids.discard("") - - cleaned = 0 - try: - pending = await store.get_pending_checkpoints( - project_id=wf.project_id, - ) - for cp in pending: - cp_session = str(cp.session_id or "").strip() - if cp_session in session_ids: - await store.resolve_execution_checkpoint( - cp.checkpoint_id, status="cancelled" - ) - cleaned += 1 - except Exception as exc: - logger.debug(f"Checkpoint cleanup error: {exc}") - - return cleaned - - async def _broadcast_status(self) -> None: - """Push updated recovery status to all connected clients.""" - try: - status = await self.get_recovery_status() - await self._broadcast({"type": "recovery_status", "payload": - _serialize_status(status, project_id=self._engine.project_id or "default") - }) - except Exception as exc: - logger.debug(f"Recovery status broadcast failed: {exc}") - - def _invalidate_cache(self) -> None: - """Force next get_recovery_status to re-scan.""" - self._cache_until = 0.0 - self._cached = None - - async def _set_run_recovery_state( - self, - key: str, - *, - status: str, - lifecycle_status: str | None = None, - match_task_id: bool = False, - extra: dict[str, Any] | None = None, - ) -> None: - store = getattr(self._engine, "store", None) - if not store or not hasattr(store, "list_delegation_runs") or not hasattr(store, "save_delegation_run"): - return - runs = await store.list_delegation_runs(project_id=self._engine.project_id or "default") - target = None - if match_task_id: - for run in runs: - metadata = dict(getattr(run, "metadata", {}) or {}) - if str(metadata.get("origin_task_id", "") or "").strip() == key: - target = run - break - if target is None: - for run in runs: - if str(run.session_id or "").strip() == key: - target = run - break - if target is None: - return - target.recovery_pointer = { - **dict(getattr(target, "recovery_pointer", {}) or {}), - "status": status, - "updated_at": datetime.now().isoformat(), - **dict(extra or {}), - } - if lifecycle_status: - target.lifecycle_status = lifecycle_status - target.updated_at = datetime.now() - await store.save_delegation_run(target) - - -# --------------------------------------------------------------------------- -# Helpers -# --------------------------------------------------------------------------- - -def _is_interrupted(task: Any) -> bool: - """Check if a task was interrupted by crash.""" - from opc.core.models import TaskStatus - if task.status != TaskStatus.FAILED: - return False - meta = getattr(task, "metadata", {}) or {} - if meta.get("interrupted_recovery"): - return True - result = getattr(task, "result", {}) or {} - artifacts = result.get("artifacts", {}) or {} - return bool(artifacts.get("interrupted")) - - -def _serialize_status(status: RecoveryStatus, *, project_id: str | None = None) -> dict[str, Any]: - """Convert RecoveryStatus to JSON-safe dict.""" - resolved_project_id = str(project_id or "").strip() - if not resolved_project_id: - for item in status.interrupted: - if item.project_id: - resolved_project_id = item.project_id - break - payload = { - "interrupted": [ - { - "parent_session_id": w.parent_session_id, - "parent_task_id": w.parent_task_id, - "project_id": w.project_id, - "title": w.title, - "profile": w.profile, - "interrupted_at": w.interrupted_at, - "work_items": [ - { - "work_item_projection_id": s.work_item_projection_id, - "title": s.title, - "task_id": s.task_id, - "status": s.status, - "interrupted": s.interrupted, - "previous_status": s.previous_status, - } - for s in w.work_items - ], - } - for w in status.interrupted - ], - "active_recoveries": status.active_recoveries, - "scanned_at": status.scanned_at, - } - if resolved_project_id: - payload["project_id"] = resolved_project_id - return payload diff --git a/opc/plugins/office_ui/server.py b/opc/plugins/office_ui/server.py index 39d0a56..4053b74 100644 --- a/opc/plugins/office_ui/server.py +++ b/opc/plugins/office_ui/server.py @@ -144,17 +144,6 @@ async def create_app( engine.event_bus.subscribe_all(_root_engine_event) - # ── Runtime crash recovery (pluggable, no engine modifications) ── - from opc.plugins.office_ui.recovery_manager import RuntimeRecoveryManager - recovery_manager = RuntimeRecoveryManager(engine, ws_handler.broadcast) - ws_handler.recovery_manager = recovery_manager - - # ── Startup self-heal for tasks abandoned by a prior process ───── - # Must run before restoring persisted mode and before any WS client can - # connect, so orphaned running/locked rows do not block new Continue / - # session_send acquisitions. - await ws_handler.heal_orphan_tasks_on_boot() - # ── Restore persisted mode and load matching agents on startup ─── await ws_handler.restore_persisted_mode() startup_preset = ws_handler._resolve_preset_name() diff --git a/opc/plugins/office_ui/services/models.py b/opc/plugins/office_ui/services/models.py index 080a955..677e8af 100644 --- a/opc/plugins/office_ui/services/models.py +++ b/opc/plugins/office_ui/services/models.py @@ -32,4 +32,13 @@ class ServiceError(Exception): self.payload = dict(payload or {}) def to_payload(self) -> dict[str, Any]: - return {"error": self.message, "code": self.code, **self.payload} + # Transport envelope fields are authoritative. Business details may + # add context, but must never turn an error acknowledgement into a + # success or replace the exception's code/message. + payload = { + key: value + for key, value in self.payload.items() + if key not in {"ok", "error", "code"} + } + payload.update({"error": self.message, "code": self.code}) + return payload diff --git a/opc/plugins/office_ui/services/runtime.py b/opc/plugins/office_ui/services/runtime.py index 5400356..c89e0d1 100644 --- a/opc/plugins/office_ui/services/runtime.py +++ b/opc/plugins/office_ui/services/runtime.py @@ -200,48 +200,3 @@ class RuntimeService: payload["display_text"] = " | ".join(display_parts) payload["event_type"] = event_type return payload - - async def recovery_scan(self, *, project_id: str) -> ServiceResult: - manager = await self._recovery_manager(project_id) - from opc.plugins.office_ui.recovery_manager import _serialize_status - - status = await manager.get_recovery_status() - return ServiceResult(_serialize_status(status, project_id=project_id)) - - async def recovery_action(self, *, project_id: str, action: str, parent_task_id: str) -> ServiceResult: - manager = await self._recovery_manager(project_id) - normalized = str(action or "").strip().lower() - if normalized == "scan": - return await self.recovery_scan(project_id=project_id) - if not str(parent_task_id or "").strip(): - raise ServiceError("parent_task_id_required", "parent_task_id required") - if normalized in {"resume", "retry"}: - payload = await manager.resume(parent_task_id) - elif normalized == "cancel": - payload = await manager.cancel(parent_task_id) - else: - raise ServiceError("unknown_recovery_action", f"unknown action: {action}", {"action": action}) - payload = {**dict(payload), "project_id": project_id, "parent_task_id": parent_task_id, "action": normalized} - if not payload.get("ok", False): - raise ServiceError(str(payload.get("error") or "recovery_failed"), str(payload.get("error") or "recovery_failed"), payload) - return ServiceResult(payload) - - async def _recovery_manager(self, project_id: str) -> Any: - engine = await self.context.engine_for_project(project_id) - - async def _noop_broadcast(_event: dict[str, Any]) -> None: - return None - - managers = getattr(self.context, "recovery_managers", None) - if managers is None: - managers = {} - setattr(self.context, "recovery_managers", managers) - key = self.context.normalize_project_id(project_id) - existing = managers.get(key) - if existing is not None and getattr(existing, "_engine", None) is engine: - return existing - from opc.plugins.office_ui.recovery_manager import RuntimeRecoveryManager - - manager = RuntimeRecoveryManager(engine, _noop_broadcast) - managers[key] = manager - return manager diff --git a/opc/plugins/office_ui/services/session.py b/opc/plugins/office_ui/services/session.py index aa4dfc4..f980f19 100644 --- a/opc/plugins/office_ui/services/session.py +++ b/opc/plugins/office_ui/services/session.py @@ -12,6 +12,12 @@ from typing import Any from loguru import logger from opc.core.models import Task, TaskStatus +from opc.layer2_organization.company_runtime_identity import ( + ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES, + COMPANY_RUNTIME_CHECKPOINT_TYPES, + is_company_runtime_task, + load_company_runtime_identity_index, +) from opc.plugins.office_ui.execution_identity import ( ExecutionIdentity, canonicalize_execution_identity, @@ -156,6 +162,32 @@ class SessionService: task_project = self.context.normalize_project_id(getattr(task, "project_id", None)) if task_project != pid: raise ServiceError("target_wrong_project", "Target belongs to a different project", {"project_id": task_project}) + + # Company control is resolved from durable session/checkpoint scope + # before any generic Task/session fallback. This prevents a shared + # final-decider row from winning merely because it was loaded first. + identity_index = await load_company_runtime_identity_index(store, pid) + if task is not None: + identity = identity_index.resolve(task_id=raw_target) + else: + identity = ( + identity_index.resolve(runtime_session_id=raw_target) + or identity_index.resolve(task_session_id=raw_target) + ) + if identity is not None: + # A concrete Task id is the caller's UI/chat channel, never the + # company execution identity. Keep that channel stable while the + # shared identity supplies the durable runtime session/checkpoint. + if task is not None: + return task, identity.runtime_session_id + resolved_task = ( + identity_index.task(identity.ui_anchor_task_id) + or identity_index.task(identity.config_source_task_id) + ) + if resolved_task is not None: + return resolved_task, identity.runtime_session_id + + if task is not None: return task, str(getattr(task, "session_id", "") or getattr(task, "parent_session_id", "") or "") session = await store.get_session(raw_target) if hasattr(store, "get_session") else None @@ -165,139 +197,64 @@ class SessionService: if session_project != pid: raise ServiceError("target_wrong_project", "Target belongs to a different project", {"project_id": session_project}) - tasks = await store.get_tasks(project_id=pid) if hasattr(store, "get_tasks") else [] + tasks = list(identity_index.tasks) session_tasks = [ candidate for candidate in tasks if str(getattr(candidate, "session_id", "") or "") == raw_target ] if not session_tasks: raise ServiceError("session_not_task_backed", "Session is not linked to a task-backed runtime", {"session_id": raw_target}) - session_tasks.sort(key=lambda item: bool(str(getattr(item, "parent_session_id", "") or ""))) - return session_tasks[0], raw_target + task_mode_anchor = min( + session_tasks, + key=lambda item: ( + bool(str(getattr(item, "parent_session_id", "") or "")), + str(getattr(item, "created_at", "") or ""), + str(getattr(item, "id", "") or ""), + ), + ) + return task_mode_anchor, raw_target - async def _resolve_company_runtime_target(self, engine: Any, task: Any) -> dict[str, Any]: - store = getattr(engine, "store", None) - parent_session_id = str( - getattr(task, "parent_session_id", "") - or getattr(task, "session_id", "") - or "" - ).strip() - parent_task_id = str(self.context.session_to_task.get(parent_session_id) or "").strip() - project_id = self.context.normalize_project_id(getattr(task, "project_id", None) or getattr(engine, "project_id", None)) - try: - project_tasks = await store.get_tasks(project_id=project_id) if hasattr(store, "get_tasks") else [task] - except Exception: - project_tasks = [task] - for candidate in project_tasks: - candidate_id = str(getattr(candidate, "id", "") or "").strip() - candidate_session_id = str(getattr(candidate, "session_id", "") or "").strip() - candidate_parent_session_id = str(getattr(candidate, "parent_session_id", "") or "").strip() - if candidate_session_id == parent_session_id and not candidate_parent_session_id: - parent_task_id = candidate_id - break - if not parent_task_id: - parent_task_id = str( - self.context.active_runtime_children.get(str(getattr(task, "id", "") or "")) - or getattr(task, "id", "") - or "" - ).strip() - - affected_task_ids: list[str] = [] - for candidate in project_tasks: - candidate_id = str(getattr(candidate, "id", "") or "").strip() - if not candidate_id: - continue - candidate_session_id = str(getattr(candidate, "session_id", "") or "").strip() - candidate_parent_session_id = str(getattr(candidate, "parent_session_id", "") or "").strip() - if ( - candidate_id == str(getattr(task, "id", "") or "") - or candidate_id == parent_task_id - or candidate_session_id == parent_session_id - or candidate_parent_session_id == parent_session_id - ): - if candidate_id not in affected_task_ids: - affected_task_ids.append(candidate_id) - for child_id, origin_id in list(self.context.active_runtime_children.items()): - if origin_id == parent_task_id or child_id == str(getattr(task, "id", "") or ""): - if child_id not in affected_task_ids: - affected_task_ids.append(child_id) - if parent_task_id and parent_task_id not in affected_task_ids: - affected_task_ids.insert(0, parent_task_id) - return { - "parent_session_id": parent_session_id, - "parent_task_id": parent_task_id or str(getattr(task, "id", "") or ""), - "origin_task_id": parent_task_id or str(getattr(task, "id", "") or ""), - "affected_task_ids": affected_task_ids or [str(getattr(task, "id", "") or "")], - } - - async def _mark_company_runtime_stop_state( + async def _resolve_company_runtime_target( self, - *, engine: Any, - task_ids: list[str], - state: str, - stop_intent_id: str, - checkpoint_type: str = "", - ) -> None: + task: Any, + *, + runtime_session_id: str = "", + checkpoint_id: str = "", + ) -> dict[str, Any]: store = getattr(engine, "store", None) + project_id = self.context.normalize_project_id(getattr(task, "project_id", None) or getattr(engine, "project_id", None)) if not self.context.store_is_ready(store): - return - for task_id in task_ids: - try: - task = await store.get_task(str(task_id)) - except Exception: - task = None - if not task or self._is_terminal_status(task): - continue - metadata = dict(getattr(task, "metadata", {}) or {}) - metadata["company_runtime_stop_state"] = state - metadata["company_runtime_stop_intent_id"] = stop_intent_id - metadata["company_runtime_stop_marked_at"] = datetime.now().isoformat() - metadata["dispatch_hold"] = "company_runtime_suspended" - metadata["company_runtime_suspended_at"] = datetime.now().isoformat() - if checkpoint_type: - metadata["company_runtime_suspend_checkpoint_type"] = checkpoint_type - metadata.setdefault("suspended_task_status", self._task_status_value(task)) - task.metadata = metadata - task.status = TaskStatus.BLOCKED - if hasattr(task, "execution_lock"): - task.execution_lock = False - if hasattr(task, "execution_locked_at"): - task.execution_locked_at = None - try: - await store.save_task(task) - except Exception: - logger.opt(exception=True).debug("failed to mark company runtime stop state") - - async def _clear_company_runtime_stop_state(self, *, engine: Any, task_ids: list[str]) -> None: - store = getattr(engine, "store", None) - if not self.context.store_is_ready(store): - return - for task_id in task_ids: - try: - task = await store.get_task(str(task_id)) - except Exception: - task = None - if not task: - continue - metadata = dict(getattr(task, "metadata", {}) or {}) - for key in ( - "dispatch_hold", - "company_runtime_stop_state", - "company_runtime_stop_intent_id", - "company_runtime_stop_marked_at", - "company_runtime_suspend_checkpoint_type", - "company_runtime_suspended_at", - "suspended_task_status", - ): - metadata.pop(key, None) - task.metadata = metadata - if self._task_status_value(task) == "blocked": - task.status = TaskStatus.IDLE - try: - await store.save_task(task) - except Exception: - logger.opt(exception=True).debug("failed to clear company runtime stop state") + raise ServiceError("store_not_ready", "store_not_ready", {"project_id": project_id}) + index = await load_company_runtime_identity_index(store, project_id) + identity = index.resolve( + task_id=str(getattr(task, "id", "") or ""), + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, + ) + if identity is None: + raise ServiceError( + "company_runtime_identity_mismatch", + "Company runtime identity does not match the requested task/session/checkpoint", + { + "task_id": str(getattr(task, "id", "") or ""), + "runtime_session_id": str(runtime_session_id or ""), + "checkpoint_id": str(checkpoint_id or ""), + }, + ) + config_task = index.task(identity.config_source_task_id) or task + ui_anchor_task_id = identity.ui_anchor_task_id + return { + "identity": identity, + "runtime_session_id": identity.runtime_session_id, + "ui_channel_task_id": str(getattr(task, "id", "") or ""), + "ui_anchor_task_id": ui_anchor_task_id, + "config_source_task_id": identity.config_source_task_id, + "config_task": config_task, + "origin_task_id": ui_anchor_task_id, + "affected_task_ids": list(identity.runtime_task_ids), + "checkpoint": identity.checkpoint, + } def _normalize_requested_config( self, @@ -743,8 +700,54 @@ class SessionService: if getattr(engine, "memory", None): await engine.memory.ensure_session(task.session_id, project_id=project_id, title=task.title, mode="primary", metadata={"source": "service"}) await store.save_task(task) + + # A Task selected by the UI/CLI is only the chat channel for company + # mode. Resolve the durable runtime scope before choosing execution + # configuration, session, origin, or checkpoint. In particular, a + # role/work-item Task must never become the parent execution identity. + company_target: dict[str, Any] | None = None + task_is_company_runtime = is_company_runtime_task(task) + try: + company_target = await self._resolve_company_runtime_target(engine, task) + except ServiceError as exc: + if exc.code != "company_runtime_identity_mismatch" or task_is_company_runtime: + raise + + if task.status == TaskStatus.CANCELLED: + company_identity = ( + company_target.get("identity") + if company_target is not None + else None + ) + checkpoint = ( + company_target.get("checkpoint") + if company_target is not None + else None + ) + active_cancelled_anchor = bool( + company_identity is not None + and str(getattr(company_identity, "ui_anchor_task_id", "") or "").strip() + == str(getattr(task, "id", "") or "").strip() + and checkpoint is not None + and str(getattr(checkpoint, "checkpoint_type", "") or "").strip() + in COMPANY_RUNTIME_CHECKPOINT_TYPES + and str(getattr(checkpoint, "status", "") or "").strip().lower() + in ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES + ) + if not active_cancelled_anchor: + raise ServiceError( + "session_ended", + "session_ended", + {"project_id": project_id, "task_id": task.id}, + ) + + config_task = ( + company_target.get("config_task") + if company_target is not None + else task + ) or task identity = self.resolve_task_identity( - task, + config_task, default_exec_mode=mode, default_company_profile=company_profile if company_profile is not None else "corporate", default_preferred_agent=preferred_agent if preferred_agent is not None else "native", @@ -752,26 +755,85 @@ class SessionService: ) if identity.is_custom_org and not identity.org_id: raise ServiceError("org_id_required", "org_id_required", {"project_id": project_id, "task_id": task.id}) - await self.persist_session_config( - task, - exec_mode=identity.exec_mode, - company_profile=identity.company_profile, - preferred_agent=identity.preferred_agent, - org_id=identity.org_id, - engine=engine, - ) + + # Existing company scopes read configuration from the resolver's + # config source. Only persist when that source is the selected Task; + # this preserves normal session configuration while avoiding writes to + # an internal work item merely because it was used as the UI channel. + if ( + company_target is None + or str(getattr(config_task, "id", "") or "").strip() + == str(getattr(task, "id", "") or "").strip() + ): + await self.persist_session_config( + task, + exec_mode=identity.exec_mode, + company_profile=identity.company_profile, + preferred_agent=identity.preferred_agent, + org_id=identity.org_id, + engine=engine, + ) + + execution_session_id = str(getattr(task, "session_id", "") or "").strip() + origin_task_id = str(getattr(task, "id", "") or "").strip() or None + message_metadata: dict[str, Any] | None = None + if company_target is not None: + execution_session_id = str( + company_target.get("runtime_session_id", "") or "" + ).strip() + origin_task_id = str( + company_target.get("ui_anchor_task_id", "") or "" + ).strip() or None + if not execution_session_id: + raise ServiceError( + "company_runtime_identity_mismatch", + "Company runtime has no canonical runtime session", + {"project_id": project_id, "task_id": task.id}, + ) + checkpoint = company_target.get("checkpoint") + if checkpoint is not None: + checkpoint_id = str( + getattr(checkpoint, "checkpoint_id", "") or "" + ).strip() + checkpoint_status = str( + getattr(checkpoint, "status", "") or "" + ).strip().lower() + if checkpoint_status != "pending": + raise ServiceError( + "company_runtime_checkpoint_not_pending", + "Company runtime checkpoint is not pending", + { + "project_id": project_id, + "task_id": task.id, + "checkpoint_id": checkpoint_id, + "checkpoint_status": checkpoint_status, + }, + ) + message_metadata = { + "response_to_checkpoint_id": checkpoint_id, + "response_to_checkpoint_type": str( + getattr(checkpoint, "checkpoint_type", "") or "" + ).strip(), + } + response = await engine.process_message( str(content or "").strip(), project_id=project_id, - session_id=task.session_id, + session_id=execution_session_id, mode=identity.exec_mode, org_id=identity.org_id or None, company_profile=identity.company_profile if identity.is_company_runtime else None, preferred_agent=identity.preferred_agent if identity.is_task else None, domains=list(domains or []), - origin_task_id=task.id, + origin_task_id=origin_task_id, + message_metadata=message_metadata, ) - return ServiceResult({"project_id": project_id, "task_id": task.id, "session_id": task.session_id, "response": response}) + return ServiceResult({ + "project_id": project_id, + "task_id": task.id, + "session_id": execution_session_id, + "response": response, + }) async def rename(self, *, project_id: str, task_id: str = "", session_id: str = "", title: str) -> ServiceResult: pid = self.context.normalize_project_id(project_id) @@ -935,50 +997,44 @@ class SessionService: default_payload=default_payload, ) engine = await self.context.engine_for_project(project_id) - exec_mode, _company_profile = self.resolve_task_session_config(task) - if exec_mode in {"company", "org", "custom"}: + try: target_info = await self._resolve_company_runtime_target(engine, task) + except ServiceError as exc: + if exc.code != "company_runtime_identity_mismatch": + raise + target_info = None + if target_info is None and is_company_runtime_task(task): + raise ServiceError( + "company_runtime_identity_mismatch", + "Company runtime identity could not be resolved; refusing task-mode cancellation", + {"task_id": resolved_task_id, "session_id": resolved_session_id}, + ) + if target_info is not None: stop_intent_id = str(uuid.uuid4()) affected_task_ids = list(target_info.get("affected_task_ids", []) or [resolved_task_id]) suspended: dict[str, Any] | None = None suspend = getattr(engine, "suspend_company_runtime", None) - await self._mark_company_runtime_stop_state( - engine=engine, - task_ids=affected_task_ids, - state="suspending", - stop_intent_id=stop_intent_id, - ) if callable(suspend): try: suspended = await suspend( origin_task_id=str(target_info.get("origin_task_id", "") or resolved_task_id), - session_id=(str(target_info.get("parent_session_id", "") or resolved_session_id).strip() or None), + session_id=(str(target_info.get("runtime_session_id", "") or resolved_session_id).strip() or None), reason="user_stop", checkpoint_type="company_runtime_suspended", stop_intent_id=stop_intent_id, ) except Exception: logger.opt(exception=True).warning("suspend_company_runtime failed during service stop") - if suspended is not None: - for candidate in list(suspended.get("task_ids", []) or []): - candidate_id = str(candidate or "").strip() - if candidate_id and candidate_id not in affected_task_ids: - affected_task_ids.append(candidate_id) - await self._mark_company_runtime_stop_state( - engine=engine, - task_ids=affected_task_ids, - state="suspended", - stop_intent_id=stop_intent_id, - checkpoint_type=str(suspended.get("checkpoint_type", "") or "company_runtime_suspended"), - ) - else: - await self._mark_company_runtime_stop_state( - engine=engine, - task_ids=affected_task_ids, - state="suspended", - stop_intent_id=stop_intent_id, - checkpoint_type="company_runtime_suspended", + if suspended is None: + raise ServiceError( + "company_runtime_suspend_failed", + "Company runtime could not be suspended", + {"runtime_session_id": target_info.get("runtime_session_id", "")}, ) + for candidate in list(suspended.get("task_ids", []) or []): + candidate_id = str(candidate or "").strip() + if candidate_id and candidate_id not in affected_task_ids: + affected_task_ids.append(candidate_id) self.context.stop_requested_task_ids.update(affected_task_ids) if self.context.cancel_session_tasks is not None: for tid in affected_task_ids: @@ -1009,8 +1065,7 @@ class SessionService: "stop_intent_id": stop_intent_id, "checkpoint_id": str((suspended or {}).get("checkpoint_id", "") or ""), "task_ids": affected_task_ids, - "resume_parent_task_id": str(target_info.get("parent_task_id", "") or resolved_task_id), - "resume_parent_session_id": str(target_info.get("parent_session_id", "") or resolved_session_id), + "resume_parent_session_id": str(target_info.get("runtime_session_id", "") or resolved_session_id), } return ServiceResult(payload, [ServiceEvent("session_runtime_control", payload), ServiceEvent("session_updated", payload)]) @@ -1039,6 +1094,8 @@ class SessionService: project_id: str, task_id: str = "", session_id: str = "", + runtime_session_id: str = "", + checkpoint_id: str = "", target: str = "", content: str = "", ) -> ServiceResult: @@ -1066,45 +1123,111 @@ class SessionService: default_payload=default_payload, ) engine = await self.context.engine_for_project(project_id) - exec_mode, company_profile = self.resolve_task_session_config(task) - target_info = await self._resolve_company_runtime_target(engine, task) if exec_mode in {"company", "org", "custom"} else { + try: + company_target = await self._resolve_company_runtime_target( + engine, + task, + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, + ) + except ServiceError as exc: + if exc.code != "company_runtime_identity_mismatch" or runtime_session_id or checkpoint_id: + raise + if is_company_runtime_task(task): + raise + company_target = None + target_info = company_target or { "affected_task_ids": [resolved_task_id], - "parent_task_id": resolved_task_id, - "parent_session_id": resolved_session_id, + "ui_anchor_task_id": resolved_task_id, + "runtime_session_id": resolved_session_id, + "config_task": task, + "checkpoint": None, } affected_task_ids = list(target_info.get("affected_task_ids", []) or [resolved_task_id]) - await self._clear_company_runtime_stop_state(engine=engine, task_ids=affected_task_ids) message = str(content or "").strip() or "Resume the existing runtime." - engine_mode = "company" if exec_mode == "company" else ("org" if exec_mode in {"org", "custom"} else "task") - org_id = self.resolve_task_org_id(task) if engine_mode == "org" else "" + config_task = target_info.get("config_task") or task + config_exec_mode, config_company_profile = self.resolve_task_session_config(config_task) + engine_mode = "company" if config_exec_mode == "company" else ( + "org" if config_exec_mode in {"org", "custom"} else "task" + ) + if engine_mode in {"company", "org"}: + checkpoint = target_info.get("checkpoint") + if checkpoint is None: + raise ServiceError("company_runtime_checkpoint_not_found", "No active company runtime checkpoint") + if str(getattr(checkpoint, "status", "") or "").strip().lower() != "pending": + raise ServiceError( + "company_runtime_checkpoint_not_pending", + "Company runtime checkpoint is not pending", + {"checkpoint_id": str(getattr(checkpoint, "checkpoint_id", "") or "")}, + ) + else: + checkpoint = None + org_id = self.resolve_task_org_id(config_task) if engine_mode == "org" else "" + message_metadata: dict[str, Any] = {"ui_force_resume": True} + if checkpoint is not None: + message_metadata.update({ + "response_to_checkpoint_id": str(getattr(checkpoint, "checkpoint_id", "") or ""), + "response_to_checkpoint_type": str(getattr(checkpoint, "checkpoint_type", "") or ""), + }) response = await engine.process_message( message, project_id=self.context.normalize_project_id(project_id), - session_id=str(target_info.get("parent_session_id", "") or resolved_session_id), + session_id=str(target_info.get("runtime_session_id", "") or resolved_session_id), mode=engine_mode, org_id=org_id or None, - company_profile=company_profile if engine_mode == "company" else None, - preferred_agent=self.resolve_task_preferred_agent(task) if engine_mode == "task" else None, - origin_task_id=str(target_info.get("parent_task_id", "") or resolved_task_id), - message_metadata={"ui_force_resume": True}, + company_profile=config_company_profile if engine_mode == "company" else None, + preferred_agent=self.resolve_task_preferred_agent(config_task) if engine_mode == "task" else None, + origin_task_id=(str(target_info.get("ui_anchor_task_id", "") or "").strip() or None), + message_metadata=message_metadata, ) + runtime_control_state = "idle" + pending_runtime_checkpoint_id = "" + if engine_mode in {"company", "org"}: + refreshed_index = await load_company_runtime_identity_index( + engine.store, + self.context.normalize_project_id(project_id), + ) + refreshed_identity = refreshed_index.resolve( + runtime_session_id=str( + target_info.get("runtime_session_id", "") or resolved_session_id + ), + ) + if refreshed_identity is not None and refreshed_identity.pending_checkpoint_id: + pending_runtime_checkpoint_id = refreshed_identity.pending_checkpoint_id + runtime_control_state = ( + "suspended" + if refreshed_identity.pending_checkpoint_status == "pending" + else "resuming" + ) payload = { **default_payload, - "status": "resuming", - "runtime_control_state": "resuming", - "can_resume": False, + "status": runtime_control_state, + "runtime_control_state": runtime_control_state, + "can_resume": runtime_control_state == "suspended", "response": response, "task_ids": affected_task_ids, - "resume_parent_task_id": str(target_info.get("parent_task_id", "") or resolved_task_id), - "resume_parent_session_id": str(target_info.get("parent_session_id", "") or resolved_session_id), + "resume_parent_session_id": str(target_info.get("runtime_session_id", "") or resolved_session_id), + "pending_runtime_checkpoint_id": pending_runtime_checkpoint_id, } return ServiceResult(payload, [ServiceEvent("session_runtime_control", payload), ServiceEvent("session_updated", payload)]) - async def resume(self, *, project_id: str, task_id: str = "", session_id: str = "", target: str = "", content: str = "") -> ServiceResult: + async def resume( + self, + *, + project_id: str, + task_id: str = "", + session_id: str = "", + runtime_session_id: str = "", + checkpoint_id: str = "", + target: str = "", + content: str = "", + ) -> ServiceResult: return await self.continue_run( project_id=project_id, task_id=task_id, session_id=session_id, + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, target=target, content=content, ) diff --git a/opc/plugins/office_ui/snapshot_builder.py b/opc/plugins/office_ui/snapshot_builder.py index 2d9449b..ae62d3f 100644 --- a/opc/plugins/office_ui/snapshot_builder.py +++ b/opc/plugins/office_ui/snapshot_builder.py @@ -39,6 +39,11 @@ from opc.layer2_organization.phase import ( should_hide_work_item_from_company_kanban, verdict, ) +from opc.layer2_organization.company_runtime_identity import ( + ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES, + COMPANY_RUNTIME_CHECKPOINT_TYPES, + build_company_runtime_identity_index, +) from opc.layer2_organization.work_item_context_view import WorkItemContextView from opc.layer2_organization.work_item_identity import ( WORK_ITEM_PROJECTION_ID_KEY, @@ -1503,6 +1508,11 @@ def _primary_session_tasks_by_session_id( *, task_meta_map: dict[str, dict[str, Any]] | None = None, ) -> tuple[dict[str, Any], list[str]]: + identity_index = build_company_runtime_identity_index(tasks) + company_identities = { + identity.runtime_session_id: identity + for identity in identity_index.identities + } primary_tasks_by_session_id: dict[str, Any] = {} ordered_session_ids: list[str] = [] for task in tasks: @@ -1513,6 +1523,19 @@ def _primary_session_tasks_by_session_id( if bool(task_meta.get("review_task", False)): continue session_id = str(getattr(task, "session_id", "") or "").strip() + company_identity = company_identities.get(session_id) + if company_identity is not None: + anchor = identity_index.task(company_identity.ui_anchor_task_id) + if anchor is not None and session_id not in primary_tasks_by_session_id: + primary_tasks_by_session_id[session_id] = anchor + ordered_session_ids.append(session_id) + if anchor is not None: + # A shared final-decider/work-item Task must never replace a + # pure UI anchor that owns the same session id. + continue + # Without a pure anchor this scope has no primary chat container. + # Never synthesize one from a role/work-item Task. + continue if not session_id or _task_parent_session_link(task, task_meta): continue current = primary_tasks_by_session_id.get(session_id) @@ -1530,31 +1553,16 @@ def _primary_session_tasks_by_session_id( return primary_tasks_by_session_id, ordered_session_ids -def _shared_role_identity_tasks_by_session_id( +def _company_config_source_tasks_by_session_id( tasks: list[Any], - *, - task_meta_map: dict[str, dict[str, Any]] | None = None, ) -> dict[str, Any]: - identity_tasks_by_session_id: dict[str, Any] = {} - for task in tasks: - task_id = str(getattr(task, "id", "") or "").strip() - task_meta = ( - task_meta_map.get(task_id, {}) if task_meta_map is not None and task_id else _task_metadata(task) - ) - session_id = _shared_role_session_key(task, task_meta) - if not session_id: - continue - current = identity_tasks_by_session_id.get(session_id) - if current is None: - identity_tasks_by_session_id[session_id] = task - continue - current_id = str(getattr(current, "id", "") or "").strip() - current_meta = ( - task_meta_map.get(current_id, {}) if task_meta_map is not None and current_id else _task_metadata(current) - ) - if _session_representative_rank(task, task_meta) > _session_representative_rank(current, current_meta): - identity_tasks_by_session_id[session_id] = task - return identity_tasks_by_session_id + identity_index = build_company_runtime_identity_index(tasks) + return { + identity.runtime_session_id: task + for identity in identity_index.identities + if identity.config_source_task_id + and (task := identity_index.task(identity.config_source_task_id)) is not None + } async def build_company_kanban_projection( @@ -2594,31 +2602,7 @@ async def _build_company_runtime_control_by_task( if not store: return {} - parent_task_by_session: dict[str, str] = {} - tasks_by_parent_session: dict[str, list[Any]] = {} - for task in tasks: - metadata = dict(getattr(task, "metadata", {}) or {}) - mode = str(metadata.get("mode", "") or metadata.get("exec_mode", "") or "").strip().lower() - is_company_runtime_task = bool( - mode in {"company", "org", "custom"} - or str(getattr(task, "parent_session_id", "") or "").strip() - or metadata.get("company_profile") - or metadata.get("company_work_item_plan") - or metadata.get("work_item_runtime") - or metadata.get("work_item_projection_id") - ) - if not is_company_runtime_task: - continue - session_id = str(getattr(task, "session_id", "") or "").strip() - parent_session_id = str(getattr(task, "parent_session_id", "") or "").strip() - task_id = str(getattr(task, "id", "") or "").strip() - if session_id and not parent_session_id: - parent_task_by_session[session_id] = task_id - runtime_parent_session_id = parent_session_id or session_id - if runtime_parent_session_id: - tasks_by_parent_session.setdefault(runtime_parent_session_id, []).append(task) - - checkpoints_by_session: dict[str, Any] = {} + checkpoints: list[Any] = [] getter = getattr(store, "get_execution_checkpoints", None) if not callable(getter): getter = getattr(store, "get_pending_checkpoints", None) @@ -2626,29 +2610,25 @@ async def _build_company_runtime_control_by_task( try: kwargs = { "project_id": project_id, - "checkpoint_types": ["company_runtime_suspended", "company_runtime_interrupted"], + "checkpoint_types": sorted(COMPANY_RUNTIME_CHECKPOINT_TYPES), } if getattr(getter, "__name__", "") == "get_execution_checkpoints": - kwargs["statuses"] = ["pending", "resuming"] + kwargs["statuses"] = sorted(ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES) checkpoints = await getter(**kwargs) - for checkpoint in checkpoints: - sid = str(getattr(checkpoint, "session_id", "") or "").strip() - if sid and sid not in checkpoints_by_session: - checkpoints_by_session[sid] = checkpoint except Exception: logger.opt(exception=True).debug("snapshot: failed to load company runtime checkpoints") + checkpoints = [] + + identity_index = build_company_runtime_identity_index(tasks, checkpoints) result: dict[str, dict[str, Any]] = {} - for parent_session_id, group in tasks_by_parent_session.items(): - checkpoint = checkpoints_by_session.get(parent_session_id) - parent_task_id = parent_task_by_session.get(parent_session_id, "") - if not parent_task_id: - for task in group: - if not str(getattr(task, "parent_session_id", "") or "").strip(): - parent_task_id = str(getattr(task, "id", "") or "").strip() - break - if not parent_task_id and group: - parent_task_id = str(getattr(group[0], "id", "") or "").strip() + for identity in identity_index.identities: + group = [ + task + for task_id in identity.runtime_task_ids + if (task := identity_index.task(task_id)) is not None + ] + checkpoint = identity.checkpoint def _task_status_value(task: Any) -> str: status = getattr(task, "status", "") @@ -2660,10 +2640,19 @@ async def _build_company_runtime_control_by_task( task for task in group if _task_status_value(task) not in {"done", "failed", "cancelled"} ] - has_running_task = any( - _task_status_value(task) == "running" - for task in non_terminal_group - ) + # Persisted RUNNING is only a projection. The controller-local + # execution registry is the sole proof that this process still owns a + # coroutine capable of monitoring and persisting the run. + runtime_is_live = getattr(engine, "_task_runtime_is_live", None) + has_running_task = False + if callable(runtime_is_live): + for task in non_terminal_group: + live_result = runtime_is_live(task) + if inspect.isawaitable(live_result): + live_result = await live_result + if live_result is True: + has_running_task = True + break any_stop_in_progress = any( str((getattr(task, "metadata", {}) or {}).get("company_runtime_stop_state", "") or "").strip() in {"suspending", "suspended", "resuming_after_suspending"} @@ -2708,8 +2697,7 @@ async def _build_company_runtime_control_by_task( "runtime_control_state": state, "can_stop": state == "running", "can_resume": state == "suspended", - "resume_parent_task_id": parent_task_id, - "resume_parent_session_id": parent_session_id, + "resume_parent_session_id": identity.runtime_session_id, "pending_runtime_checkpoint_id": pending_checkpoint_id, "stop_intent_id": str(checkpoint_payload.get("stop_intent_id", "") or ""), } @@ -3014,9 +3002,8 @@ async def build_project_index_sync( session_tasks, task_meta_map=task_meta_map, ) - shared_identity_tasks_by_session_id = _shared_role_identity_tasks_by_session_id( + company_config_tasks_by_session_id = _company_config_source_tasks_by_session_id( session_tasks, - task_meta_map=task_meta_map, ) child_tasks_by_parent: dict[str, list[Any]] = {} for task in session_tasks: @@ -3087,11 +3074,12 @@ async def build_project_index_sync( representative_task = primary_tasks_by_session_id.get(session_id) representative_task_id = str(getattr(representative_task, "id", "") or "").strip() shared_session_id = _shared_role_session_key(t, t_meta) - if shared_session_id and representative_task_id and representative_task_id != task_id: - continue + if shared_session_id: + if not representative_task_id or representative_task_id != task_id: + continue identity_task = t identity_meta = t_meta - shared_identity_task = shared_identity_tasks_by_session_id.get(session_id) + shared_identity_task = company_config_tasks_by_session_id.get(session_id) shared_identity_task_id = str(getattr(shared_identity_task, "id", "") or "").strip() if shared_identity_task_id and shared_identity_task_id != task_id: identity_task = shared_identity_task @@ -3569,9 +3557,8 @@ async def build_collab_sync( session_tasks, task_meta_map=task_meta_map, ) - shared_identity_tasks_by_session_id = _shared_role_identity_tasks_by_session_id( + company_config_tasks_by_session_id = _company_config_source_tasks_by_session_id( session_tasks, - task_meta_map=task_meta_map, ) child_tasks_by_parent: dict[str, list[Any]] = {} for task in session_tasks: @@ -3616,11 +3603,15 @@ async def build_collab_sync( representative_task = primary_tasks_by_session_id.get(session_id) representative_task_id = str(getattr(representative_task, "id", "") or "").strip() shared_session_id = _shared_role_session_key(t, t_meta) - if shared_session_id and representative_task_id and representative_task_id != str(getattr(t, "id", "") or "").strip(): - continue + if shared_session_id: + if ( + not representative_task_id + or representative_task_id != str(getattr(t, "id", "") or "").strip() + ): + continue identity_task = t identity_meta = t_meta - shared_identity_task = shared_identity_tasks_by_session_id.get(session_id) + shared_identity_task = company_config_tasks_by_session_id.get(session_id) shared_identity_task_id = str(getattr(shared_identity_task, "id", "") or "").strip() if shared_identity_task_id and shared_identity_task_id != str(getattr(t, "id", "") or "").strip(): identity_task = shared_identity_task diff --git a/opc/plugins/office_ui/tests/test_snapshot_builder_company_kanban.py b/opc/plugins/office_ui/tests/test_snapshot_builder_company_kanban.py index 1a3e0b8..464d5ed 100644 --- a/opc/plugins/office_ui/tests/test_snapshot_builder_company_kanban.py +++ b/opc/plugins/office_ui/tests/test_snapshot_builder_company_kanban.py @@ -51,8 +51,11 @@ class CompanyKanbanProjectionTests(unittest.IsolatedAsyncioTestCase): }, ) store = MagicMock() - store.get_pending_checkpoints = AsyncMock(return_value=[]) - engine = SimpleNamespace(store=store) + store.get_execution_checkpoints = AsyncMock(return_value=[]) + engine = SimpleNamespace( + store=store, + _task_runtime_is_live=AsyncMock(return_value=True), + ) control = await _build_company_runtime_control_by_task( engine, @@ -95,8 +98,11 @@ class CompanyKanbanProjectionTests(unittest.IsolatedAsyncioTestCase): }, ) store = MagicMock() - store.get_pending_checkpoints = AsyncMock(return_value=[]) - engine = SimpleNamespace(store=store) + store.get_execution_checkpoints = AsyncMock(return_value=[]) + engine = SimpleNamespace( + store=store, + _task_runtime_is_live=AsyncMock(return_value=True), + ) control = await _build_company_runtime_control_by_task( engine, @@ -106,8 +112,9 @@ class CompanyKanbanProjectionTests(unittest.IsolatedAsyncioTestCase): self.assertEqual(control["child-task"]["runtime_control_state"], "running") self.assertTrue(control["child-task"]["can_stop"]) + engine._task_runtime_is_live.assert_awaited() - async def test_runtime_control_running_status_does_not_require_live_heartbeat(self) -> None: + async def test_runtime_control_running_status_requires_controller_registry_ownership(self) -> None: created_at = datetime.now(timezone.utc) parent_task = SimpleNamespace( id="parent-task", @@ -122,7 +129,7 @@ class CompanyKanbanProjectionTests(unittest.IsolatedAsyncioTestCase): }, ) store = MagicMock() - store.get_pending_checkpoints = AsyncMock(return_value=[]) + store.get_execution_checkpoints = AsyncMock(return_value=[]) engine = SimpleNamespace( store=store, _task_runtime_is_live=AsyncMock(return_value=False), @@ -134,9 +141,9 @@ class CompanyKanbanProjectionTests(unittest.IsolatedAsyncioTestCase): "proj1", ) - self.assertEqual(control["parent-task"]["runtime_control_state"], "running") - self.assertTrue(control["parent-task"]["can_stop"]) - engine._task_runtime_is_live.assert_not_awaited() + self.assertEqual(control["parent-task"]["runtime_control_state"], "idle") + self.assertFalse(control["parent-task"]["can_stop"]) + engine._task_runtime_is_live.assert_awaited_once_with(parent_task) async def test_runtime_control_treats_dispatch_hold_as_suspending_without_checkpoint(self) -> None: created_at = datetime.now(timezone.utc) @@ -1482,7 +1489,7 @@ class CollabSyncCompanyModeTests(unittest.IsolatedAsyncioTestCase): self.assertEqual(session["company_profile"], "custom") self.assertEqual(session["preferred_agent"], "codex") - async def test_build_collab_sync_deduplicates_shared_role_sessions(self) -> None: + async def test_build_collab_sync_does_not_promote_shared_role_session_without_ui_anchor(self) -> None: created_at = datetime.now(timezone.utc) shared_session_id = "root-session:role:cto" pending_task = SimpleNamespace( @@ -1519,6 +1526,7 @@ class CollabSyncCompanyModeTests(unittest.IsolatedAsyncioTestCase): engine = MagicMock() engine.store = MagicMock() engine.store.get_tasks = AsyncMock(return_value=[pending_task, running_task]) + engine.store.get_execution_checkpoints = AsyncMock(return_value=[]) engine.project_id = "proj-shared" engine.llm = None @@ -1586,10 +1594,7 @@ class CollabSyncCompanyModeTests(unittest.IsolatedAsyncioTestCase): ) sessions = result.get("sessions", []) - self.assertEqual(len(sessions), 1) - self.assertEqual(sessions[0]["project_id"], "proj-shared") - self.assertEqual(sessions[0]["task_id"], "task-running") - self.assertEqual(sessions[0]["session_id"], shared_session_id) + self.assertEqual(sessions, []) async def test_build_collab_sync_keeps_root_session_visible_when_final_decider_shares_session(self) -> None: created_at = datetime.now(timezone.utc) diff --git a/opc/plugins/office_ui/ws_handler.py b/opc/plugins/office_ui/ws_handler.py index ffd7997..6d5199b 100644 --- a/opc/plugins/office_ui/ws_handler.py +++ b/opc/plugins/office_ui/ws_handler.py @@ -17,6 +17,10 @@ from pathlib import Path from typing import Any, TYPE_CHECKING from loguru import logger +from opc.core.active_task_runs import ( + ActiveTaskRunAdmissionClosed, + ActiveTaskRunRegistry, +) from opc.core.config import ( OPCConfig, get_project_workplace, @@ -46,6 +50,12 @@ from opc.layer2_organization.phase import ( kanban_column, should_hide_work_item_from_company_kanban, ) +from opc.layer2_organization.company_runtime_identity import ( + ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES, + COMPANY_RUNTIME_CHECKPOINT_TYPES, + is_company_runtime_task, + load_company_runtime_identity_index, +) from opc.layer2_organization.work_item_identity import ( work_item_identity_payload, work_item_identity_payload_for_task, @@ -205,6 +215,16 @@ _COMPANY_MODE_HIDDEN_RUNTIME_PROGRESS_TYPES: frozenset[str] = ( ) +# These handlers can hand an accepted UI request to engine execution. Reserve +# at the router boundary (before their first await), because the persisted task +# mode may not be known until the handler loads the task from the project store. +_EXECUTION_HANDOFF_MESSAGE_TYPES: frozenset[str] = frozenset({ + "run_task", + "session_send", + "session_resume", +}) + + _TASK_MODE_VISIBLE_RUNTIME_PROGRESS_TYPES: frozenset[str] = frozenset({ "thinking_delta", "tool_started", @@ -358,8 +378,6 @@ _PROJECT_SCOPED_ENVELOPE_TYPES = frozenset({ "seat_digest_updated", "work_item_batch_updated", "project_recovery_updated", - "recovery_status", - "recovery_result", "project_revision_created", "comms_state", "comms_message", @@ -425,6 +443,7 @@ class WSHandler: self._background_tasks: set[asyncio.Task[Any]] = set() self._task_bg_map: dict[str, set[asyncio.Task[Any]]] = {} self._task_bg_context: dict[asyncio.Task[Any], dict[str, Any]] = {} + self._handoff_route_tasks: dict[asyncio.Task[Any], str] = {} self._broadcast_seq: int = 0 self._broadcast_lock = asyncio.Lock() self._task_locks: dict[str, asyncio.Lock] = {} @@ -466,7 +485,6 @@ class WSHandler: self._progress_flush_task: asyncio.Task[None] | None = None self._shutting_down: bool = False self._active_message_tasks: set[asyncio.Task[Any]] = set() - self._recovery_managers: dict[str, Any] = {} self.dispatcher = Dispatcher(engine, chat_store) self.services_context = OfficeServiceContext( engine=engine, @@ -611,21 +629,6 @@ class WSHandler: engine = await self._engine_for_project(project_id) return engine, project_id - def _recovery_manager_for_engine(self, engine: Any, project_id: str) -> Any: - normalized = self._normalize_project_id(project_id) - existing = self._recovery_managers.get(normalized) - if existing is not None and getattr(existing, "_engine", None) is engine: - return existing - root_manager = getattr(self, "recovery_manager", None) - if root_manager is not None and getattr(root_manager, "_engine", None) is engine: - self._recovery_managers[normalized] = root_manager - return root_manager - from opc.plugins.office_ui.recovery_manager import RuntimeRecoveryManager - - manager = RuntimeRecoveryManager(engine, self.broadcast) - self._recovery_managers[normalized] = manager - return manager - def _progress_callback_for_engine(self, engine: Any) -> Any: async def _progress(text: str, **kw: Any) -> None: # UI progress is a best-effort display copy: a failure here (e.g. @@ -840,90 +843,6 @@ class WSHandler: self._task_locks[task_id] = lock return lock - async def heal_orphan_tasks_on_boot(self, *, lease_seconds: int = 300) -> None: - """Called once at server startup, before accepting WS connections. - - Any task still sitting at ``status=running`` must be an orphan from a - previous (crashed / killed / power-cut) process, because the new server - has not yet started any work. ``reset_orphan_running_tasks`` reverts - those rows to ``idle`` and drops stale execution locks so: - - - The UI shows them as idle (not permanently stuck as "running"). - - Continue / normal session send can acquire the lock freely. - - The ``lease_seconds`` grace window is defensive for theoretical - multi-process deployments: if another live worker is still - heartbeating, its ``execution_locked_at`` will be fresh and we skip it. - In the single-process default deployment the check is a no-op and all - stale rows are reset. - """ - store = self.engine.store - if not self._store_is_ready(store): - return - if not hasattr(store, "reset_orphan_running_tasks"): - return - try: - summary = await store.reset_orphan_running_tasks(lease_seconds=lease_seconds) - except Exception: - logger.opt(exception=True).warning("heal_orphan_tasks_on_boot: reset_orphan_running_tasks failed") - return - reset_count = summary.get("statuses_reset", 0) - locks_cleared = summary.get("locks_cleared", 0) - if reset_count or locks_cleared: - logger.info( - f"Startup self-heal: reset {reset_count} orphan running task(s), " - f"cleared {locks_cleared} stale execution lock(s) " - f"(lease={lease_seconds}s)." - ) - - async def _task_heartbeat_loop( - self, - task_id: str, - *, - interval_seconds: float = 15.0, - store: Any | None = None, - ) -> None: - """Bump ``tasks.execution_locked_at`` every ``interval_seconds`` while - the task is being processed by this server. - - Paired with ``reset_orphan_running_tasks`` on startup: a fresh timestamp - proves the task is actually alive, so crash recovery can safely reset - only those whose heartbeat has gone stale. - - Silently exits when cancelled (normal shutdown of the processing - coroutine) or when the DB row stops being locked. - """ - store = store or self.engine.store - if not self._store_is_ready(store): - return - try: - # Fire once immediately so an early crash still leaves a fresh - # timestamp behind (avoids recent work being mistaken for an orphan - # from a prior run if the task row already had a stale value). - try: - still_ours = await store.renew_task_lock(task_id) - except Exception: - logger.opt(exception=True).debug( - f"Heartbeat (initial) renew_task_lock failed for {task_id}", - ) - still_ours = True - if not still_ours: - return - while True: - await asyncio.sleep(interval_seconds) - try: - still_ours = await store.renew_task_lock(task_id) - except Exception: - logger.opt(exception=True).debug( - f"Heartbeat renew_task_lock failed for {task_id}", - ) - continue - if not still_ours: - # Task is no longer running — stop bumping the timestamp. - return - except asyncio.CancelledError: - return - def _resolve_agent_for_idle(self, task_id: str, task: Any = None) -> str | None: """Resolve agent_id for a task, trying event_adapter map first, then task.assigned_to.""" agent_id = self.event_adapter._resolve_agent_from_task(task_id) @@ -1157,7 +1076,7 @@ class WSHandler: import aiohttp.web as web ws = web.WebSocketResponse() await ws.prepare(request) - if self._shutting_down: + if bool(getattr(self, "_shutting_down", False)): await ws.close() return ws self._clients.add(ws) @@ -1189,22 +1108,6 @@ class WSHandler: ), ) - # Push work-item recovery status if any interrupted work-item runtimes exist - initial_recovery_project_id = initial_project_id - _rm = self._recovery_manager_for_engine(self.engine, initial_recovery_project_id) - if _rm: - try: - from opc.plugins.office_ui.recovery_manager import _serialize_status - _rs = await _rm.get_recovery_status() - if _rs.interrupted: - if not await self._safe_send_json( - ws, - {"type": "recovery_status", "payload": _serialize_status(_rs, project_id=initial_recovery_project_id)}, - ): - return ws - except Exception: - pass - # Process messages async for msg in ws: if msg.type == 1: # aiohttp.WSMsgType.TEXT @@ -2020,10 +1923,6 @@ class WSHandler: if not source_task_id: return None - parent_task_id = str(self._active_runtime_children.get(source_task_id) or "").strip() - if parent_task_id: - return parent_task_id - runtime_engine = engine or self.engine store = getattr(runtime_engine, "store", None) get_task = getattr(store, "get_task", None) @@ -2034,6 +1933,27 @@ class WSHandler: logger.warning(f"Failed to resolve escalation task mapping for {source_task_id}: {e}") task = None if task is not None: + try: + identity_index = await load_company_runtime_identity_index( + store, + self._normalize_project_id( + getattr(task, "project_id", None) + or getattr(runtime_engine, "project_id", None) + ), + ) + runtime_identity = identity_index.resolve(task_id=source_task_id) + except Exception: + logger.opt(exception=True).debug( + "failed to resolve durable company identity for escalation" + ) + runtime_identity = None + if runtime_identity is not None: + # Escalations are a control decision. Route only through + # the durable runtime identity; process-local progress maps + # are not evidence that a work-item Task is the UI parent. + return runtime_identity.ui_anchor_task_id or None + if is_company_runtime_task(task): + return None internal_turn_target = self._company_internal_turn_escalation_target(task) if internal_turn_target is not None: return internal_turn_target or None @@ -2044,11 +1964,6 @@ class WSHandler: origin_task_id = str(metadata.get("origin_task_id") or "").strip() if origin_task_id: return origin_task_id - session_id = str(getattr(task, "session_id", "") or "").strip() - if session_id: - mapped_task_id = str(self._session_to_task.get(session_id) or "").strip() - if mapped_task_id: - return mapped_task_id return source_task_id @@ -2064,10 +1979,10 @@ class WSHandler: parks on AWAITING_HUMAN. Returns None when ``task`` is not such an internal turn (caller keeps - its normal resolution), the primary task id of the run's root session - when resolvable, or "" when the turn is internal but no visible session - is known (caller should fall back to the activity channel rather than - the hidden channel). + its normal resolution), the durable origin task when present, or "" + when no visible channel is known. Company runtime control routing is + resolved before this helper; process-local session maps are deliberately + not consulted here. """ if task is None: return None @@ -2080,15 +1995,6 @@ class WSHandler: task_id = str(getattr(task, "id", "") or "").strip() if origin_task_id and origin_task_id != task_id: return origin_task_id - for candidate_session_id in ( - root_session_id, - str(getattr(task, "parent_session_id", "") or "").strip(), - ): - if not candidate_session_id: - continue - mapped_task_id = str(self._session_to_task.get(candidate_session_id) or "").strip() - if mapped_task_id and mapped_task_id != task_id: - return mapped_task_id return "" @staticmethod @@ -3394,12 +3300,37 @@ class WSHandler: logger.debug(f"Ignoring WS message during shutdown: {msg_type}") return handler = self._HANDLERS.get(msg_type) + handoff_registry = None + handoff_token: str | None = None + if handler and msg_type in _EXECUTION_HANDOFF_MESSAGE_TYPES: + handoff_registry = self._controller_active_task_run_registry() + if handoff_registry is not None: + try: + handoff_token = handoff_registry.reserve_handoff() + except ActiveTaskRunAdmissionClosed: + await self._send_ack( + ws, + ok=False, + error="service_shutting_down", + action=msg_type, + ) + return if handler: current_task = asyncio.current_task() if current_task is not None: self._active_message_tasks.add(current_task) + if handoff_token is not None: + handoff_routes = getattr(self, "_handoff_route_tasks", None) + if not isinstance(handoff_routes, dict): + handoff_routes = {} + self._handoff_route_tasks = handoff_routes + handoff_routes[current_task] = handoff_token try: - await handler(self, ws, data) + if handoff_registry is not None and handoff_token is not None: + with handoff_registry.bind_handoff(handoff_token): + await handler(self, ws, data) + else: + await handler(self, ws, data) except Exception as e: if self._is_ws_disconnect_error(e) or self._is_expected_shutdown_error(e): logger.debug( @@ -3425,10 +3356,21 @@ class WSHandler: except Exception: pass # WS may already be closed finally: + if handoff_registry is not None and handoff_token is not None: + handoff_registry.release_handoff(handoff_token) if current_task is not None: self._active_message_tasks.discard(current_task) + handoff_routes = getattr(self, "_handoff_route_tasks", None) + if isinstance(handoff_routes, dict): + handoff_routes.pop(current_task, None) else: logger.debug(f"Unknown WS message type: {msg_type}") + await self._send_ack( + ws, + ok=False, + error="unknown_message_type", + action=msg_type, + ) # ── Sync ────────────────────────────────────────────────────────── @@ -4305,9 +4247,65 @@ class WSHandler: # Private helpers # ══════════════════════════════════════════════════════════════════════ + def _controller_active_task_run_registry(self) -> Any | None: + root_engine = getattr(self, "_root_engine", None) or getattr(self, "engine", None) + registry = getattr(root_engine, "_active_task_run_registry", None) + return registry if isinstance(registry, ActiveTaskRunRegistry) else None + + def _release_current_execution_handoff(self) -> None: + registry = self._controller_active_task_run_registry() + release = getattr(registry, "release_current_handoff", None) + if callable(release): + release() + def _track(self, coro: Any) -> asyncio.Task[Any]: """Create a tracked background task that auto-removes itself on completion.""" - task = asyncio.create_task(coro) + handoff_registry = self._controller_active_task_run_registry() + handoff_token = ( + handoff_registry.retain_current_handoff() + if handoff_registry is not None + else None + ) + try: + task = asyncio.create_task(coro) + except BaseException: + if handoff_registry is not None and handoff_token is not None: + handoff_registry.release_handoff(handoff_token) + if inspect.iscoroutine(coro): + coro.close() + raise + if handoff_registry is not None and handoff_token is not None: + def _release_execution_handoff( + done_task: asyncio.Task[Any], + *, + registry: ActiveTaskRunRegistry = handoff_registry, + token: str = handoff_token, + ) -> None: + registry.release_handoff(token) + task_context = getattr(self, "_task_bg_context", None) + if isinstance(task_context, dict): + context = task_context.get(done_task) + if isinstance(context, dict): + context.pop("execution_handoff_token", None) + if not context: + task_context.pop(done_task, None) + + task.add_done_callback( + _release_execution_handoff + ) + # This task owns the accepted engine handoff even before callers + # such as _track_session add their richer session context. Keep it + # in the existing execution-owned task index so shutdown cannot + # close the store while its cancellation cleanup is still running. + task_context = getattr(self, "_task_bg_context", None) + if isinstance(task_context, dict): + context = task_context.setdefault(task, {}) + context["execution_handoff_token"] = handoff_token + # Work scheduled after the gate closes is rejected. A coroutine + # retained by a pre-shutdown reservation is the one exception: it must + # reach registry.register (or exit) before checkpoint snapshotting. + if self._shutting_down and handoff_token is None: + task.cancel() self._background_tasks.add(task) task.add_done_callback(self._on_bg_task_done) return task @@ -4361,11 +4359,13 @@ class WSHandler: ) -> asyncio.Task[Any]: """Like _track but keeps all live tasks for explicit cancellation.""" bg = self._track(coro) - self._task_bg_context[bg] = { + context = dict(self._task_bg_context.get(bg) or {}) + context.update({ "task_id": task_id, "project_id": self._normalize_project_id(project_id or getattr(engine, "project_id", None)), "engine": engine, - } + }) + self._task_bg_context[bg] = context task_group = self._task_bg_map.setdefault(task_id, set()) task_group.add(bg) bg.add_done_callback(lambda t: self._discard_session_bg_task(task_id, t)) @@ -4449,18 +4449,143 @@ class WSHandler: return False raise - async def shutdown(self, timeout: float = 2.0) -> None: - """Stop accepting new WS work and close clients before DB shutdown.""" + async def shutdown(self, timeout: float = 15.0) -> None: + """Checkpoint owned runtimes, then stop all WS work before DB shutdown.""" import aiohttp self._shutting_down = True + pending_handlers = [ + task + for task in self._active_message_tasks + if task is not asyncio.current_task() and not task.done() + ] + + def execution_owned_tasks() -> set[asyncio.Task[Any]]: + owned = set(self._task_bg_context) + for task_group in self._task_bg_map.values(): + owned.update(task_group) + return { + task + for task in owned + if task is not asyncio.current_task() and not task.done() + } + + # A preaccepted handler can replace its handoff reservation with the + # real execution task while the admission barrier drains. Union this + # pre-barrier view with the post-checkpoint view so neither owner can + # disappear from the cancellation set during that handoff. + execution_tasks_before_prepare = execution_owned_tasks() + + # Atomically close execution admission, then wait only for requests + # accepted before that close to either register their first real engine + # coroutine or exit. There is intentionally no timeout window here: + # registration drains the reservation, so long execution is not part + # of this wait. + active_run_registry = self._controller_active_task_run_registry() + close_and_wait = getattr( + active_run_registry, + "close_admission_and_wait_for_handoffs", + None, + ) + if callable(close_and_wait): + # Close synchronously, then cancel accepted requests which are + # still queued before their first engine registration. In + # particular, a duplicate Continue can be waiting behind the + # per-runtime reply lock for the entire first execution; waiting + # for that reservation here would deadlock shutdown before it can + # checkpoint and cancel the live owner. + active_run_registry.close_admission() + is_handoff_pending = getattr( + active_run_registry, + "is_handoff_pending", + None, + ) + pending_handoff_tasks: set[asyncio.Task[Any]] = set() + pending_handoff_tokens: set[str] = set() + if callable(is_handoff_pending): + for task, context in list(self._task_bg_context.items()): + token = ( + context.get("execution_handoff_token") + if isinstance(context, dict) + else None + ) + if ( + task is not asyncio.current_task() + and not task.done() + and is_handoff_pending(token) + ): + pending_handoff_tasks.add(task) + pending_handoff_tokens.add(str(token)) + handoff_routes = getattr(self, "_handoff_route_tasks", {}) + if isinstance(handoff_routes, dict): + for task, token in list(handoff_routes.items()): + if ( + task is not asyncio.current_task() + and not task.done() + and is_handoff_pending(token) + ): + pending_handoff_tasks.add(task) + pending_handoff_tokens.add(token) + for task in pending_handoff_tasks: + task.cancel() + revoke_handoff = getattr(active_run_registry, "revoke_handoff", None) + if callable(revoke_handoff): + for token in pending_handoff_tokens: + revoke_handoff(token) + await close_and_wait() + + # The controller registry is the only source of truth for executions + # owned by this process. Persist one checkpoint per active company + # scope while every execution coroutine and its store are still alive. + root_engine = getattr(self, "_root_engine", None) or self.engine + try: + await root_engine.prepare_active_company_runtimes_for_shutdown() + except Exception: + logger.opt(exception=True).error( + "Refusing to cancel WS execution because company runtime checkpointing failed" + ) + raise + + # No execution coroutine may get another scheduling turn after its + # checkpoint/holds are durable. Build the cancellation set and set + # every cancellation flag synchronously, before awaiting progress + # flushing, client close handshakes, or any other UI cleanup. + execution_tasks = execution_tasks_before_prepare | execution_owned_tasks() + tracked_tasks = set(self._background_tasks) + tracked_tasks.update(execution_tasks) + tracked_tasks.update(pending_handlers) + tracked_tasks = { + task + for task in tracked_tasks + if task is not asyncio.current_task() and not task.done() + } + for task in tracked_tasks: + task.cancel() if self._progress_flush_task and not self._progress_flush_task.done(): self._progress_flush_task.cancel() + + # Await execution cleanup first so broker finally blocks reap process + # groups while the engine/store are guaranteed to remain available. + if execution_tasks: + _done, still_cleaning = await asyncio.wait( + execution_tasks, + timeout=max(0.0, float(timeout)), + ) + if still_cleaning: + message = ( + "Timed out waiting for " + f"{len(still_cleaning)} execution task(s) to finish cancellation cleanup" + ) + logger.error(message) + raise RuntimeError(message) + + if self._progress_flush_task: try: await self._progress_flush_task except (asyncio.CancelledError, Exception): pass self._progress_flush_task = None + clients = list(self._clients) for ws in clients: try: @@ -4472,50 +4597,17 @@ class WSHandler: if not self._is_ws_disconnect_error(exc): logger.debug(f"Failed to close WS client cleanly: {type(exc).__name__}: {exc!r}") - pending = [ - task - for task in self._active_message_tasks - if task is not asyncio.current_task() and not task.done() - ] - if pending: - try: - await asyncio.wait_for( - asyncio.gather(*pending, return_exceptions=True), - timeout=timeout, + ui_background_tasks = tracked_tasks - execution_tasks + if ui_background_tasks: + _done, still_running = await asyncio.wait( + ui_background_tasks, + timeout=max(0.0, float(timeout)), + ) + if still_running: + logger.warning( + "Timed out waiting for {} non-execution WS background task(s) to stop", + len(still_running), ) - except asyncio.TimeoutError: - logger.debug(f"Timed out waiting for {len(pending)} WS message handler(s) to finish") - - async def _mark_task_tree_cancelled_if_active( - self, - task_id: str, - *, - store: Any | None = None, - ) -> list[str]: - store = store or self.engine.store - if not self._store_is_ready(store): - return [] - - from opc.core.models import TaskStatus as TS - - affected_ids = [task_id] - affected_ids.extend( - child_id - for child_id, origin_id in self._active_runtime_children.items() - if origin_id == task_id and child_id != task_id - ) - - updated_ids: list[str] = [] - for current_id in affected_ids: - if current_id in self._stop_requested_task_ids: - continue - task = await store.get_task(current_id) - if not task or task.status in (TS.CANCELLED, TS.DONE, TS.FAILED): - continue - task.status = TS.CANCELLED - await store.save_task(task) - updated_ids.append(current_id) - return updated_ids @staticmethod def _store_is_ready(store: Any | None) -> bool: @@ -4707,10 +4799,32 @@ class WSHandler: async def _send_service_error(self, ws: Any, exc: ServiceError, *, action: str | None = None) -> None: payload = exc.to_payload() + payload.pop("ok", None) if action: - payload.setdefault("action", action) + payload["action"] = action await self._send_ack(ws, ok=False, **payload) + async def _refresh_runtime_control_for_client( + self, + ws: Any, + *, + engine: Any, + project_id: str, + ) -> None: + """Replace optimistic Continue state with a durable snapshot.""" + try: + collab = await build_collab_sync( + engine, + self.agent_store, + self.chat_store, + self.event_adapter, + exec_mode=self._exec_mode, + ) + collab["project_id"] = self._normalize_project_id(project_id) + await self._safe_send_json(ws, {"type": "collab_sync_push", "payload": collab}) + except Exception: + logger.opt(exception=True).debug("failed to refresh runtime control after rejected Continue") + # UI profile name → engine CompanyProfile name _PROFILE_TO_ENGINE: dict[str, str] = {"classic": "corporate"} @@ -4824,7 +4938,6 @@ class WSHandler: preferred_agent = identity.preferred_agent company_runtime_target: dict[str, Any] | None = None - heartbeat_task: asyncio.Task[Any] | None = None try: content = f"{title}\n{description}".strip() engine_mode, company_profile = self._resolve_engine_mode(mode, profile) @@ -4858,11 +4971,6 @@ class WSHandler: try: company_runtime_target = await self._resolve_company_runtime_target(task_id, engine=engine) await self._set_company_runtime_control(company_runtime_target, state="running") - if self._store_is_ready(engine.store): - heartbeat_task = asyncio.create_task( - self._task_heartbeat_loop(task_id, interval_seconds=15.0, store=engine.store), - name=f"task-heartbeat:{task_id}", - ) except Exception: logger.opt(exception=True).debug("failed to mark run_task company runtime running") response = await engine.process_message( @@ -4929,12 +5037,6 @@ class WSHandler: ) await self.broadcast({"type": "session_message", "payload": msg}) finally: - if heartbeat_task is not None and not heartbeat_task.done(): - heartbeat_task.cancel() - try: - await heartbeat_task - except (asyncio.CancelledError, Exception): - pass # Always refresh the frontend after a task run so new delegation # runs / work items are reflected on the kanban immediately. try: @@ -5780,8 +5882,29 @@ class WSHandler: if task: from opc.core.models import TaskStatus if task.status == TaskStatus.CANCELLED: - await self._send_ack(ws, ok=False, error="session_ended") - return + try: + cancelled_target = await self._resolve_company_runtime_target( + task_id, + engine=run_engine, + ) + except Exception: + logger.opt(exception=True).debug( + "failed to resolve cancelled company UI anchor" + ) + cancelled_target = None + identity = (cancelled_target or {}).get("identity") + active_cancelled_anchor = bool( + identity is not None + and str(getattr(identity, "ui_anchor_task_id", "") or "") == task_id + and str(getattr(identity, "pending_checkpoint_id", "") or "").strip() + and str(getattr(identity, "pending_checkpoint_type", "") or "").strip() + in COMPANY_RUNTIME_CHECKPOINT_TYPES + and str(getattr(identity, "pending_checkpoint_status", "") or "").strip().lower() + in ACTIVE_COMPANY_RUNTIME_CHECKPOINT_STATUSES + ) + if not active_cancelled_anchor: + await self._send_ack(ws, ok=False, error="session_ended") + return if attachment_errors: helper_lines = [ @@ -6407,8 +6530,10 @@ class WSHandler: task_id: str, *, engine: Any | None = None, + runtime_session_id: str = "", + checkpoint_id: str = "", ) -> dict[str, Any] | None: - """Resolve any company parent/child task id to the parent runtime scope.""" + """Resolve a Task/UI channel to the canonical session-first scope.""" runtime_engine = engine or self.engine store = runtime_engine.store if not task_id or not self._store_is_ready(store): @@ -6416,64 +6541,32 @@ class WSHandler: task = await store.get_task(task_id) if task is None: return None - parent_session_id = str( - getattr(task, "parent_session_id", "") - or getattr(task, "session_id", "") - or "" - ).strip() - if not parent_session_id: + project_id = self._normalize_project_id( + getattr(task, "project_id", None) or getattr(runtime_engine, "project_id", None) + ) + identity_index = await load_company_runtime_identity_index(store, project_id) + identity = identity_index.resolve( + task_id=task_id, + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, + ) + if identity is None: return None - - project_id = str(getattr(task, "project_id", "") or runtime_engine.project_id or "default") - try: - project_tasks = await store.get_tasks(project_id=project_id) - except Exception: - project_tasks = [task] - - parent_task_id = str(self._session_to_task.get(parent_session_id) or "").strip() - for candidate in project_tasks: - candidate_id = str(getattr(candidate, "id", "") or "").strip() - candidate_session_id = str(getattr(candidate, "session_id", "") or "").strip() - candidate_parent_session_id = str(getattr(candidate, "parent_session_id", "") or "").strip() - if candidate_session_id == parent_session_id and not candidate_parent_session_id: - parent_task_id = candidate_id - break - if not parent_task_id: - parent_task_id = str( - self._active_runtime_children.get(task_id) - or self._session_to_task.get(parent_session_id) - or task_id - ).strip() - - affected_task_ids: list[str] = [] - for candidate in project_tasks: - candidate_id = str(getattr(candidate, "id", "") or "").strip() - if not candidate_id: - continue - candidate_session_id = str(getattr(candidate, "session_id", "") or "").strip() - candidate_parent_session_id = str(getattr(candidate, "parent_session_id", "") or "").strip() - if ( - candidate_id == task_id - or candidate_id == parent_task_id - or candidate_session_id == parent_session_id - or candidate_parent_session_id == parent_session_id - ): - if candidate_id not in affected_task_ids: - affected_task_ids.append(candidate_id) - for child_id, origin_id in list(self._active_runtime_children.items()): - if origin_id == parent_task_id or child_id == task_id: - if child_id not in affected_task_ids: - affected_task_ids.append(child_id) - if parent_task_id and parent_task_id not in affected_task_ids: - affected_task_ids.insert(0, parent_task_id) + ui_anchor_task_id = identity.ui_anchor_task_id + config_task = identity_index.task(identity.config_source_task_id) or task return { "task": task, "engine": runtime_engine, - "parent_session_id": parent_session_id, - "parent_task_id": parent_task_id or task_id, - "origin_task_id": parent_task_id or task_id, - "affected_task_ids": affected_task_ids or [task_id], + "identity": identity, + "runtime_session_id": identity.runtime_session_id, + "ui_channel_task_id": task_id, + "ui_anchor_task_id": ui_anchor_task_id, + "config_source_task_id": identity.config_source_task_id, + "config_task": config_task, + "checkpoint": identity.checkpoint, + "origin_task_id": ui_anchor_task_id, + "affected_task_ids": list(identity.runtime_task_ids), } async def _broadcast_company_runtime_control( @@ -6489,7 +6582,6 @@ class WSHandler: for item in list(target.get("affected_task_ids", []) or []) if str(item).strip() ] - parent_task_id = str(target.get("parent_task_id", "") or "").strip() runtime_engine = target.get("engine") or self.engine project_id = self._normalize_project_id(getattr(runtime_engine, "project_id", None)) payload = { @@ -6497,8 +6589,7 @@ class WSHandler: "runtime_control_state": state, "can_stop": state == "running", "can_resume": state == "suspended", - "resume_parent_task_id": parent_task_id, - "resume_parent_session_id": str(target.get("parent_session_id", "") or "").strip(), + "resume_parent_session_id": str(target.get("runtime_session_id", "") or "").strip(), "pending_runtime_checkpoint_id": checkpoint_id, "stop_intent_id": stop_intent_id, "task_ids": affected_task_ids, @@ -6522,82 +6613,9 @@ class WSHandler: stop_intent_id=stop_intent_id, ) - async def _mark_company_runtime_stop_state( - self, - target: dict[str, Any], - *, - state: str, - stop_intent_id: str, - ) -> None: - runtime_engine = target.get("engine") or self.engine - store = runtime_engine.store - if not self._store_is_ready(store): - return - from opc.core.models import TaskStatus - - for task_id in list(target.get("affected_task_ids", []) or []): - try: - task = await store.get_task(str(task_id)) - except Exception: - task = None - if not task or task.status in {TaskStatus.DONE, TaskStatus.FAILED, TaskStatus.CANCELLED}: - continue - task.metadata = dict(task.metadata or {}) - task.metadata["company_runtime_stop_state"] = state - task.metadata["company_runtime_stop_intent_id"] = stop_intent_id - task.metadata["company_runtime_stop_marked_at"] = datetime.now().isoformat() - task.metadata.setdefault( - "suspended_task_status", - task.status.value if hasattr(task.status, "value") else str(task.status or ""), - ) - task.execution_lock = False - task.execution_locked_at = None - try: - await store.save_task(task) - except Exception: - logger.opt(exception=True).debug("failed to mark company runtime stop state") - - async def _clear_company_runtime_stop_state( - self, - target: dict[str, Any], - *, - stop_intent_id: str, - ) -> None: - runtime_engine = target.get("engine") or self.engine - store = runtime_engine.store - if not self._store_is_ready(store): - return - for task_id in list(target.get("affected_task_ids", []) or []): - try: - task = await store.get_task(str(task_id)) - except Exception: - task = None - if not task: - continue - metadata = dict(task.metadata or {}) - if str(metadata.get("company_runtime_stop_intent_id", "") or "") != str(stop_intent_id or ""): - continue - for key in ( - "dispatch_hold", - "company_runtime_stop_state", - "company_runtime_stop_intent_id", - "company_runtime_stop_marked_at", - "company_runtime_suspend_checkpoint_type", - "company_runtime_suspended_at", - "suspended_task_status", - ): - metadata.pop(key, None) - task.metadata = metadata - task.execution_lock = False - task.execution_locked_at = None - try: - await store.save_task(task) - except Exception: - logger.opt(exception=True).debug("failed to clear company runtime stop state") - async def _finalize_company_runtime_stop(self, target: dict[str, Any], *, stop_intent_id: str) -> None: runtime_engine = target.get("engine") or self.engine - parent_session_id = str(target.get("parent_session_id", "") or "").strip() + parent_session_id = str(target.get("runtime_session_id", "") or "").strip() origin_task_id = str(target.get("origin_task_id", "") or "").strip() affected_task_ids = [ str(item).strip() @@ -6627,14 +6645,6 @@ class WSHandler: self._progress_buffer.pop(tid, None) self._progress_project_ids.pop(tid, None) self._cancel_session_tasks(tid) - try: - await self._mark_company_runtime_stop_state( - target, - state="suspended", - stop_intent_id=stop_intent_id, - ) - except Exception: - logger.opt(exception=True).debug("failed to mark company runtime fully suspended") try: await self._set_company_runtime_control( target, @@ -6644,7 +6654,7 @@ class WSHandler: ) except Exception: logger.opt(exception=True).debug("failed to broadcast company runtime suspended state") - channel_id = f"session:{origin_task_id or target.get('parent_task_id', '')}" + channel_id = f"session:{target.get('ui_channel_task_id', '')}" pid = self._normalize_project_id(getattr(runtime_engine, "project_id", None)) try: msg = await self.chat_store.insert_message( @@ -6665,10 +6675,6 @@ class WSHandler: except Exception: logger.opt(exception=True).warning(f"Failed to insert suspend message for {origin_task_id}") else: - try: - await self._clear_company_runtime_stop_state(target, stop_intent_id=stop_intent_id) - except Exception: - logger.opt(exception=True).debug("failed to clear company runtime stop state after suspend failure") try: await self._set_company_runtime_control( target, @@ -6698,15 +6704,16 @@ class WSHandler: await self._send_ack(ws, ok=False, error="task_not_found", project_id=run_project_id, task_id=task_id) return - exec_mode, _company_profile = self._resolve_task_session_config(task) - if exec_mode in {"company", "org", "custom"} and task is not None: + target = None + if task is not None: try: target = await self._resolve_company_runtime_target(task_id, engine=run_engine) except Exception: - logger.opt(exception=True).warning(f"failed to resolve company runtime stop target for {task_id}") - target = None + logger.opt(exception=True).warning( + f"failed to resolve company runtime stop target for {task_id}" + ) if target is not None: - parent_session_id = str(target.get("parent_session_id", "") or "").strip() + parent_session_id = str(target.get("runtime_session_id", "") or "").strip() existing_checkpoint = None try: existing_checkpoint = await run_engine.get_pending_company_runtime_suspend_checkpoint(parent_session_id) @@ -6738,25 +6745,28 @@ class WSHandler: "requested_at": datetime.now().isoformat(), "origin_task_id": target.get("origin_task_id", task_id), } - await self._mark_company_runtime_stop_state( - target, - state="suspending", - stop_intent_id=stop_intent_id, - ) await self._set_company_runtime_control( target, state="suspending", stop_intent_id=stop_intent_id, ) - finalizer = asyncio.create_task( + finalizer = self._track( self._finalize_company_runtime_stop(target, stop_intent_id=stop_intent_id) ) self._company_stop_finalize_tasks[parent_session_id] = finalizer - self._background_tasks.add(finalizer) - finalizer.add_done_callback(self._on_bg_task_done) await self._send_ack(ws, ok=True, stop_intent_id=stop_intent_id) return + if is_company_runtime_task(task): + await self._send_ack( + ws, + ok=False, + error="company_runtime_identity_mismatch", + project_id=run_project_id, + task_id=task_id, + ) + return + try: all_task_ids = await self._cancel_task_tree(task_id, preserve_history=True, store=store) except Exception: @@ -6810,21 +6820,21 @@ class WSHandler: await self._send_ack(ws, ok=True) async def _handle_session_resume(self, ws: Any, data: dict) -> None: - """Resume an existing runtime after disconnect / Stop without re-planning. - - The engine's `_maybe_resume_existing_company_runtime` normally asks an - LLM to classify whether a user reply means "resume" or "start new". - The UI Continue button is unambiguous, so we set ``ui_force_resume`` in - the message metadata to bypass the classifier and re-awaken any - blocked/failed/pending tasks for the session (and their downstream - descendants) via the same path as a natural-language "继续". - """ + """Resume by durable runtime-session/checkpoint identity.""" task_id = str(data.get("task_id", "") or "").strip() if not task_id: await self._send_ack(ws, ok=False, error="missing_task_id") return run_engine, run_project_id = await self._engine_for_request(data) + async def reject(error: str, **extra: Any) -> None: + await self._send_ack(ws, ok=False, error=error, **extra) + await self._refresh_runtime_control_for_client( + ws, + engine=run_engine, + project_id=run_project_id, + ) + task = None session_id_override = str(data.get("session_id", "") or "").strip() or None if self._store_is_ready(run_engine.store): @@ -6833,47 +6843,114 @@ class WSHandler: except Exception: logger.opt(exception=True).warning(f"session_resume: get_task failed for {task_id}") if task is None: - await self._send_ack(ws, ok=False, error="task_not_found", project_id=run_project_id, task_id=task_id) + await reject("task_not_found", project_id=run_project_id, task_id=task_id) return session_id = session_id_override if not session_id and task is not None: session_id = str(task.session_id or task.parent_session_id or "").strip() or None exec_mode, _company_profile = self._resolve_task_session_config(task) - resume_task_id = task_id - if exec_mode in {"company", "org", "custom"} and task is not None: + runtime_session_id = str(data.get("runtime_session_id", "") or "").strip() + checkpoint_id = str(data.get("checkpoint_id", "") or "").strip() + is_company_resume = bool(runtime_session_id or checkpoint_id) or exec_mode in { + "company", + "org", + "custom", + } + if is_company_resume and task is not None: + if not runtime_session_id: + await reject("missing_runtime_session_id") + return + if not checkpoint_id: + await reject("missing_checkpoint_id") + return try: - target = await self._resolve_company_runtime_target(task_id, engine=run_engine) + target = await self._resolve_company_runtime_target( + task_id, + engine=run_engine, + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, + ) except Exception: logger.opt(exception=True).warning(f"session_resume: failed to resolve company runtime target for {task_id}") target = None - if target is not None: - parent_session_id = str(target.get("parent_session_id", "") or "").strip() - resume_task_id = str(target.get("parent_task_id", "") or task_id).strip() - session_id = parent_session_id or session_id - finalizer = self._company_stop_finalize_tasks.get(parent_session_id) - if finalizer is not None and not finalizer.done(): - try: - await asyncio.wait_for(asyncio.shield(finalizer), timeout=10.0) - except asyncio.TimeoutError: - await self._send_ack(ws, ok=False, error="stop_finalize_in_progress") - return - except Exception: - logger.opt(exception=True).debug("session_resume: stop finalizer ended with error") - self._company_stop_intents.pop(parent_session_id, None) + if target is None: + await reject( + "company_runtime_identity_mismatch", + project_id=run_project_id, + task_id=task_id, + ) + return + checkpoint = target.get("checkpoint") + if checkpoint is None or str(getattr(checkpoint, "status", "") or "").strip().lower() != "pending": + await reject("checkpoint_not_pending", checkpoint_id=checkpoint_id) + return + session_id = runtime_session_id + finalizer = self._company_stop_finalize_tasks.get(runtime_session_id) + if finalizer is not None and not finalizer.done(): try: - await self._set_company_runtime_control(target, state="resuming") + await asyncio.wait_for(asyncio.shield(finalizer), timeout=10.0) + except asyncio.TimeoutError: + await reject("stop_finalize_in_progress") + return except Exception: - logger.opt(exception=True).debug("session_resume: failed to broadcast resuming state") + logger.opt(exception=True).debug("session_resume: stop finalizer ended with error") + self._company_stop_intents.pop(runtime_session_id, None) + content = str(data.get("content", "") or "").strip() or "Resume the existing runtime." + lock = self._company_suspend_reply_locks.get(runtime_session_id) + if lock is not None: + self._release_current_execution_handoff() + await reject( + "checkpoint_handoff_in_progress", + checkpoint_id=checkpoint_id, + ) + return + lock = asyncio.Lock() + self._company_suspend_reply_locks[runtime_session_id] = lock + try: + bg = self._track_session( + task_id, + self._process_company_suspend_reply( + ui_task_id=task_id, + runtime_session_id=runtime_session_id, + content=content, + attachment_refs=None, + message_metadata={ + "ui_force_resume": True, + "response_to_checkpoint_id": checkpoint_id, + "response_to_checkpoint_type": str(getattr(checkpoint, "checkpoint_type", "") or ""), + }, + user_message_id=None, + user_message_created_at=None, + run_engine=run_engine, + run_project_id=run_project_id, + target=target, + checkpoint=checkpoint, + lock=lock, + ), + project_id=run_project_id, + engine=run_engine, + ) + except BaseException: + self._company_suspend_reply_locks.pop(runtime_session_id, None) + raise + self._task_bg_context[bg]["company_suspend_reply"] = True + await self._send_ack( + ws, + ok=True, + runtime_session_id=runtime_session_id, + checkpoint_id=checkpoint_id, + ) + return if not session_id: - await self._send_ack(ws, ok=False, error="session_not_found") + await reject("session_not_found") return content = str(data.get("content", "") or "").strip() or "Resume the existing runtime." self._track_session( - resume_task_id, + task_id, self._process_session_message( - resume_task_id, + task_id, content, session_id=session_id, message_metadata={"ui_force_resume": True}, @@ -6946,14 +7023,13 @@ class WSHandler: checkpoint: Any, payload: dict[str, Any], engine: Any, - project_id: str, ) -> dict[str, str]: - parent_session_id = str( + expected_runtime_session_id = str( payload.get("parent_session_id") or getattr(waiting_task, "parent_session_id", "") + or getattr(checkpoint, "session_id", "") or "" ).strip() - parent_task_id = "" for candidate_task_id in (waiting_task_id, task_id): if not candidate_task_id: @@ -6965,59 +7041,20 @@ class WSHandler: target = None if not target: continue - candidate_parent_session_id = str(target.get("parent_session_id", "") or "").strip() - candidate_parent_task_id = str(target.get("parent_task_id", "") or "").strip() - if not parent_session_id and candidate_parent_session_id: - parent_session_id = candidate_parent_session_id - if candidate_parent_task_id and ( - not parent_task_id - or not parent_session_id - or candidate_parent_session_id == parent_session_id - ): - parent_task_id = candidate_parent_task_id - if parent_session_id and parent_task_id: - break + runtime_session_id = str(target.get("runtime_session_id", "") or "").strip() + if expected_runtime_session_id and runtime_session_id != expected_runtime_session_id: + continue + ui_anchor_task_id = str(target.get("ui_anchor_task_id", "") or "").strip() + if runtime_session_id and ui_anchor_task_id: + return { + "parent_task_id": ui_anchor_task_id, + "parent_session_id": runtime_session_id, + } - if not parent_session_id: - raw_session_id = str( - payload.get("session_id") - or getattr(checkpoint, "session_id", "") - or getattr(waiting_task, "session_id", "") - or "" - ).strip() - if raw_session_id and ":" in raw_session_id: - parent_session_id = raw_session_id.split(":", 1)[0] - else: - parent_session_id = raw_session_id - - store = getattr(engine, "store", None) - if (not parent_task_id or not parent_session_id) and self._store_is_ready(store): - try: - tasks = await store.get_tasks(project_id=project_id) - except Exception: - tasks = [] - for candidate in tasks: - candidate_id = str(getattr(candidate, "id", "") or "").strip() - candidate_session_id = str(getattr(candidate, "session_id", "") or "").strip() - candidate_parent_session_id = str(getattr(candidate, "parent_session_id", "") or "").strip() - if parent_session_id and candidate_session_id == parent_session_id and not candidate_parent_session_id: - parent_task_id = candidate_id - break - if not parent_session_id and candidate_id == task_id: - parent_session_id = candidate_session_id - parent_task_id = candidate_id - break - - if not parent_task_id: - parent_task_id = str(task_id or waiting_task_id or "").strip() - if not parent_session_id: - parent_session_id = str( - getattr(waiting_task, "session_id", "") - or payload.get("session_id") - or getattr(checkpoint, "session_id", "") - or "" - ).strip() - return {"parent_task_id": parent_task_id, "parent_session_id": parent_session_id} + # Delivery feedback is a company checkpoint action, not a generic + # chat operation. Ambiguous/missing durable identity must be rejected + # instead of selecting the first Task sharing the root session. + return {"parent_task_id": "", "parent_session_id": ""} async def _delivery_feedback_checkpoint_visible_to_session( self, @@ -7331,8 +7368,12 @@ class WSHandler: "feedback_superseded_at": superseded_at, "feedback_resolution": "superseded_by_new_company_turn", }) - waiting_task.status = TaskStatus.DONE - await store.save_task(waiting_task) + await apply_task_status_transition( + store, + waiting_task, + target_status_or_phase=TaskStatus.DONE, + reason="superseded_by_new_company_turn", + ) except Exception: logger.opt(exception=True).debug("failed to mark delivery feedback checkpoint superseded") continue @@ -7554,12 +7595,35 @@ class WSHandler: checkpoint=checkpoint, payload=payload, engine=run_engine, - project_id=run_project_id, ) - parent_task_id = str(target.get("parent_task_id", "") or task_id).strip() or task_id - parent_session_id = str(target.get("parent_session_id", "") or session_id or "").strip() - if not parent_session_id: - return False + parent_task_id = str(target.get("parent_task_id", "") or "").strip() + parent_session_id = str(target.get("parent_session_id", "") or "").strip() + if not parent_task_id or not parent_session_id: + # This is already known to be an explicit delivery-feedback reply. + # Consuming it here prevents a missing/ambiguous durable identity + # from falling through as an ordinary turn on the work-item Task. + if self._chat_store_is_ready(self.chat_store): + try: + helper = await self.chat_store.insert_message( + channel_id=reply_channel_id, + sender="assistant", + sender_name="OPC", + content=( + "This review no longer matches an active company runtime. " + "Refresh the session before replying again." + ), + project_id=run_project_id, + metadata={ + "type": "system", + "reason": "company_runtime_identity_mismatch", + }, + ) + await self.broadcast({"type": "session_message", "payload": helper}) + except Exception: + logger.opt(exception=True).debug( + "failed to emit delivery feedback identity rejection" + ) + return True lock_key = checkpoint_id or parent_session_id lock = self._company_delivery_feedback_reply_locks.get(lock_key) @@ -7726,28 +7790,86 @@ class WSHandler: resume path. """ explicit_checkpoint_type = str((message_metadata or {}).get("response_to_checkpoint_type", "") or "").strip() - if explicit_checkpoint_type and explicit_checkpoint_type not in { - "company_runtime_suspended", - "company_runtime_interrupted", - }: + explicit_runtime_handoff = ( + explicit_checkpoint_type in COMPANY_RUNTIME_CHECKPOINT_TYPES + ) + if explicit_checkpoint_type and not explicit_runtime_handoff: return False if task is None: return False - exec_mode, _company_profile = self._resolve_task_session_config(task) - if exec_mode not in {"company", "org", "custom"}: - return False + explicit_checkpoint_id = str( + (message_metadata or {}).get("response_to_checkpoint_id", "") or "" + ).strip() + + async def reject(reason: str, content: str) -> bool: + if self._chat_store_is_ready(self.chat_store): + try: + helper = await self.chat_store.insert_message( + channel_id=f"session:{task_id}", + sender="assistant", + sender_name="OPC", + content=content, + project_id=run_project_id, + metadata={"type": "system", "reason": reason}, + ) + await self.broadcast({"type": "session_message", "payload": helper}) + except Exception: + logger.opt(exception=True).debug( + "failed to emit company runtime handoff rejection" + ) + return True + + if explicit_runtime_handoff and not explicit_checkpoint_id: + return await reject( + "missing_runtime_checkpoint_id", + "This Continue request has no runtime checkpoint identity. Refresh the session and try again.", + ) + try: - target = await self._resolve_company_runtime_target(task_id, engine=run_engine) + base_target = await self._resolve_company_runtime_target( + task_id, + engine=run_engine, + ) except Exception: logger.opt(exception=True).debug("failed to resolve company suspend reply target") - return False - if target is None: - return False - parent_session_id = str(target.get("parent_session_id", "") or session_id or "").strip() - if not parent_session_id: + base_target = None + if base_target is None: + if explicit_runtime_handoff or is_company_runtime_task(task): + return await reject( + "company_runtime_identity_mismatch", + "This message no longer matches an active company runtime. Refresh the session before retrying.", + ) return False - finalizer = self._company_stop_finalize_tasks.get(parent_session_id) + target = base_target + if explicit_checkpoint_id: + try: + target = await self._resolve_company_runtime_target( + task_id, + engine=run_engine, + checkpoint_id=explicit_checkpoint_id, + ) + except Exception: + logger.opt(exception=True).debug( + "failed to resolve explicit company runtime checkpoint" + ) + target = None + if target is None: + if explicit_runtime_handoff or base_target.get("checkpoint") is not None: + return await reject( + "company_runtime_identity_mismatch", + "This runtime checkpoint does not match the current company session. Refresh before retrying.", + ) + return False + + runtime_session_id = str(target.get("runtime_session_id", "") or "").strip() + if not runtime_session_id: + return await reject( + "company_runtime_identity_mismatch", + "The active company runtime has no canonical session identity. Refresh before retrying.", + ) + + finalizer = self._company_stop_finalize_tasks.get(runtime_session_id) if finalizer is not None and not finalizer.done(): try: await asyncio.wait_for(asyncio.shield(finalizer), timeout=10.0) @@ -7765,52 +7887,88 @@ class WSHandler: except Exception: logger.opt(exception=True).debug("company stop finalizer failed before follow-up routing") - checkpoint = None - get_checkpoint = getattr(run_engine, "get_active_company_runtime_suspend_checkpoint", None) - if callable(get_checkpoint): + # Stop finalization may have created the checkpoint after the first + # index load. Reload durable identity before deciding whether this + # message is an ordinary turn. try: - checkpoint = await get_checkpoint(parent_session_id) + target = await self._resolve_company_runtime_target( + task_id, + engine=run_engine, + checkpoint_id=explicit_checkpoint_id, + ) except Exception: - logger.opt(exception=True).debug("failed to load active company suspend checkpoint") + logger.opt(exception=True).debug( + "failed to reload company runtime identity after stop finalization" + ) + target = None + if target is None: + return await reject( + "company_runtime_identity_mismatch", + "The stopped runtime could not be matched to this session. Refresh before retrying.", + ) + + checkpoint = target.get("checkpoint") if checkpoint is None: + if explicit_runtime_handoff: + return await reject( + "company_runtime_checkpoint_not_found", + "This company runtime checkpoint is no longer active. Refresh before retrying.", + ) return False - if str(getattr(checkpoint, "status", "") or "").strip() != "pending": - return False - - parent_task_id = str(target.get("parent_task_id", "") or task_id).strip() or task_id - lock = self._company_suspend_reply_locks.get(parent_session_id) - if lock is None: - lock = asyncio.Lock() - self._company_suspend_reply_locks[parent_session_id] = lock - - bg = self._track( - self._process_company_suspend_reply( - parent_task_id=parent_task_id, - parent_session_id=parent_session_id, - content=content, - attachment_refs=attachment_refs, - message_metadata=message_metadata, - user_message_id=user_message_id, - user_message_created_at=user_message_created_at, - run_engine=run_engine, - run_project_id=run_project_id, - target=target, - lock=lock, + checkpoint_status = str( + getattr(checkpoint, "status", "") or "" + ).strip().lower() + if checkpoint_status != "pending": + return await reject( + "company_runtime_checkpoint_not_pending", + ( + "This company runtime is already being resumed. Wait for the current handoff to finish." + if checkpoint_status == "resuming" + else "This company runtime checkpoint is no longer pending. Refresh before retrying." + ), ) - ) - self._task_bg_context[bg] = { - "task_id": parent_task_id, - "project_id": self._normalize_project_id(run_project_id), - "engine": run_engine, - "company_suspend_reply": True, - } + + lock = self._company_suspend_reply_locks.get(runtime_session_id) + if lock is not None: + self._release_current_execution_handoff() + return await reject( + "checkpoint_handoff_in_progress", + "This company runtime is already being resumed by another request.", + ) + lock = asyncio.Lock() + self._company_suspend_reply_locks[runtime_session_id] = lock + + try: + bg = self._track_session( + task_id, + self._process_company_suspend_reply( + ui_task_id=task_id, + runtime_session_id=runtime_session_id, + content=content, + attachment_refs=attachment_refs, + message_metadata=message_metadata, + user_message_id=user_message_id, + user_message_created_at=user_message_created_at, + run_engine=run_engine, + run_project_id=run_project_id, + target=target, + checkpoint=checkpoint, + lock=lock, + ), + project_id=run_project_id, + engine=run_engine, + ) + except BaseException: + self._company_suspend_reply_locks.pop(runtime_session_id, None) + raise + self._task_bg_context[bg]["company_suspend_reply"] = True return True async def _process_company_suspend_reply( self, *, - parent_task_id: str, - parent_session_id: str, + ui_task_id: str, + runtime_session_id: str, content: str, attachment_refs: list[dict] | None, message_metadata: dict[str, Any] | None, @@ -7819,9 +7977,10 @@ class WSHandler: run_engine: Any, run_project_id: str, target: dict[str, Any], + checkpoint: Any, lock: asyncio.Lock, ) -> None: - channel_id = f"session:{parent_task_id}" + channel_id = f"session:{ui_task_id}" pid = self._normalize_project_id(run_project_id or getattr(run_engine, "project_id", None)) async with lock: try: @@ -7830,52 +7989,67 @@ class WSHandler: except Exception: logger.opt(exception=True).debug("failed to broadcast company suspend reply routing state") - parent_task = None - if self._store_is_ready(run_engine.store): - try: - parent_task = await run_engine.store.get_task(parent_task_id) - except Exception: - logger.opt(exception=True).debug("failed to load parent task for company suspend reply") + config_task = target.get("config_task") session_exec_mode = self._normalize_session_exec_mode(self._exec_mode) session_company_profile = self._normalize_session_company_profile(self._company_profile) session_org_id = "" - if parent_task is not None: - session_exec_mode, session_company_profile = self._resolve_task_session_config(parent_task) - session_org_id = self._resolve_task_org_id(parent_task) + if config_task is not None: + session_exec_mode, session_company_profile = self._resolve_task_session_config(config_task) + session_org_id = self._resolve_task_org_id(config_task) engine_mode, company_profile = self._resolve_engine_mode( session_exec_mode, session_company_profile, ) engine_message_metadata = dict(message_metadata or {}) + engine_message_metadata.update({ + "response_to_checkpoint_id": str(getattr(checkpoint, "checkpoint_id", "") or ""), + "response_to_checkpoint_type": str(getattr(checkpoint, "checkpoint_type", "") or ""), + }) engine_message_metadata.update(_ui_message_identity_metadata( message_id=user_message_id, conversation_turn_id=_ui_conversation_turn_id(user_message_id), created_at=user_message_created_at, )) - self._active_runtime_children[parent_task_id] = parent_task_id - self._session_to_task[parent_session_id] = parent_task_id + execution_anchor_task_id = str( + target.get("ui_anchor_task_id", "") or "" + ).strip() + if execution_anchor_task_id: + self._active_runtime_children[execution_anchor_task_id] = execution_anchor_task_id + self._session_to_task[runtime_session_id] = ( + execution_anchor_task_id or ui_task_id + ) await run_engine.process_message( content, project_id=pid, - session_id=parent_session_id, + session_id=runtime_session_id, mode=engine_mode, org_id=session_org_id or None, company_profile=company_profile, preferred_agent=None, - origin_task_id=parent_task_id, + origin_task_id=execution_anchor_task_id or None, attachment_refs=attachment_refs, message_metadata=engine_message_metadata or None, ) checkpoint_meta = await self._extract_checkpoint_metadata( - parent_task_id, - session_id=parent_session_id, + ui_task_id, + session_id=runtime_session_id, engine=run_engine, ) await self._sync_task_transcript_messages( - parent_task_id, + ui_task_id, engine=run_engine, latest_assistant_metadata=checkpoint_meta if checkpoint_meta else None, ) + # Replace the optimistic ``resuming`` projection with the + # checkpoint state committed by the engine. Successful and + # already-consumed handoffs need the same durable refresh as + # failed handoffs so every client converges on snapshot state. + try: + await self.on_kanban_changed(engine=run_engine) + except Exception: + logger.opt(exception=True).debug( + "failed to refresh company runtime control after handoff" + ) except asyncio.CancelledError: raise except Exception as exc: @@ -7908,11 +8082,15 @@ class WSHandler: logger.opt(exception=True).debug( "Failed to write company suspend reply error message", ) + # The engine restores a failed handoff checkpoint to + # pending. Replace the optimistic ``resuming`` projection + # for every client with that durable state immediately. + await self.on_kanban_changed(engine=run_engine) finally: if self._chat_store_is_ready(self.chat_store): - await self._flush_progress(parent_task_id, project_id=pid) + await self._flush_progress(ui_task_id, project_id=pid) self._task_bg_context.pop(asyncio.current_task(), None) - self._company_suspend_reply_locks.pop(parent_session_id, None) + self._company_suspend_reply_locks.pop(runtime_session_id, None) def _resolve_task_comms_dir(self, task: Any) -> Path | None: """Resolve `/.opc-comms//` for a task. @@ -8290,15 +8468,6 @@ class WSHandler: await self.broadcast({"type": "board_task_status_changed", "payload": { "project_id": pid, "task_id": task_id, "column_id": "in-progress", "status": "running", }}) - # Bump execution_locked_at periodically while we own this task, so - # crash recovery (reset_orphan_running_tasks) can distinguish live - # work from abandoned locks by timestamp freshness. - heartbeat_task: asyncio.Task[Any] | None = None - if self._store_is_ready(engine.store): - heartbeat_task = asyncio.create_task( - self._task_heartbeat_loop(task_id, interval_seconds=15.0, store=engine.store), - name=f"task-heartbeat:{task_id}", - ) # Register company runtime origin so child-task progress can dual-route company_runtime_target: dict[str, Any] | None = None if session_exec_mode in ("company", "org", "custom"): @@ -8395,11 +8564,6 @@ class WSHandler: except Exception: logger.opt(exception=True).debug("failed to mark company session runtime idle") except asyncio.CancelledError: - cancelled_ids = await self._mark_task_tree_cancelled_if_active(task_id, store=engine.store) - for cancelled_id in cancelled_ids: - await self.broadcast({"type": "board_task_status_changed", "payload": { - "project_id": pid, "task_id": cancelled_id, "column_id": "done", "status": "cancelled", - }}) raise except Exception as e: logger.exception(f"Session processing error: {e}") @@ -8430,14 +8594,6 @@ class WSHandler: except Exception: logger.opt(exception=True).debug("failed to clear company session runtime after error") finally: - # Stop heartbeat before anything else so we don't keep bumping - # execution_locked_at for a task we've just finished handling. - if heartbeat_task is not None and not heartbeat_task.done(): - heartbeat_task.cancel() - try: - await heartbeat_task - except (asyncio.CancelledError, Exception): - pass # Flush progress buffers before clearing company runtime mappings child_ids = [k for k, v in self._active_runtime_children.items() if v == task_id and k != task_id] for cid in child_ids: @@ -9943,24 +10099,6 @@ class WSHandler: except ServiceError as exc: await self._send_service_error(ws, exc, action="comms_read_message") - async def _handle_recovery_action(self, ws: Any, data: dict) -> None: - """Handle work-item recovery actions (resume/cancel/scan).""" - try: - _engine, project_id = await self._engine_for_request(data) - action = str(data.get("action", "") or "").strip() - result = await self._ensure_office_services().runtime.recovery_action( - project_id=project_id, - action=action, - parent_task_id=str(data.get("parent_task_id", "") or "").strip(), - ) - if action == "scan": - await ws.send_json({"type": "recovery_status", "payload": result.payload}) - else: - await self._send_service_ack(ws, result) - except ServiceError as exc: - await self._send_service_error(ws, exc, action="recovery_action") - # Register handlers defined after _HANDLERS class-level dict - _HANDLERS["recovery_action"] = _handle_recovery_action _HANDLERS["comms_state"] = _handle_comms_state _HANDLERS["comms_read_message"] = _handle_comms_read_message diff --git a/tests/test_active_task_run_registry.py b/tests/test_active_task_run_registry.py new file mode 100644 index 0000000..4102867 --- /dev/null +++ b/tests/test_active_task_run_registry.py @@ -0,0 +1,549 @@ +from __future__ import annotations + +import asyncio +from functools import wraps +from types import SimpleNamespace +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +from opc.core.active_task_runs import ( + ActiveTaskRunAdmissionClosed, + ActiveTaskRunRegistry, +) +from opc.core.models import CompanyMemberSession, Task, TaskResult, TaskStatus +from opc.engine import OPCEngine +from opc.layer2_organization.company_mode import CompanyWorkItemExecutor +from opc.layer2_organization.company_runtime_identity import is_company_runtime_task +from opc.layer2_organization.org_work_item_planner import CompanyWorkItemRuntimePlan + + +def _async_test(func): + @wraps(func) + def runner(*args, **kwargs): + return asyncio.run(func(*args, **kwargs)) + + return runner + + +def test_overlapping_attempts_remain_active_until_last_attempt_exits() -> None: + registry = ActiveTaskRunRegistry() + first = registry.register("project-a", "task-1") + second = registry.register("project-a", "task-1") + + assert first != second + assert registry.attempt_count("project-a", "task-1") == 2 + assert registry.is_active("project-a", "task-1") + assert registry.unregister("project-a", "task-1", first) + assert registry.is_active("project-a", "task-1") + assert registry.unregister("project-a", "task-1", second) + assert not registry.is_active("project-a", "task-1") + + +def test_registry_isolates_projects_with_equal_task_ids() -> None: + registry = ActiveTaskRunRegistry() + token = registry.register("project-a", "task-1") + + assert registry.active_task_ids("project-a") == {"task-1"} + assert registry.active_task_ids("project-b") == set() + assert not registry.is_active("project-b", "task-1") + assert registry.unregister("project-a", "task-1", token) + + +def test_plain_child_task_is_not_classified_as_company_runtime_scope() -> None: + task = Task( + id="plain-task", + title="Plain task", + project_id="project-a", + parent_session_id="parent-session", + metadata={"mode": "task", "parent_session_id": "parent-session"}, + ) + + assert not is_company_runtime_task(task) + + +def test_closing_admission_preserves_existing_attempts_and_rejects_new_ones() -> None: + registry = ActiveTaskRunRegistry() + token = registry.register("project-a", "task-1") + + registry.close_admission() + + assert registry.admission_closed + assert registry.active_task_ids("project-a") == {"task-1"} + assert registry.is_active("project-a", "task-1") + with pytest.raises(ActiveTaskRunAdmissionClosed): + registry.register("project-a", "task-2") + assert registry.unregister("project-a", "task-1", token) + + +def test_closed_admission_allows_only_nested_live_driver_attempts() -> None: + registry = ActiveTaskRunRegistry() + driver_token = registry.register("project-a", "driver-task") + + with registry.bind_driver_attempt(driver_token): + registry.close_admission() + nested_token = registry.register("project-a", "claimed-child") + assert registry.is_active("project-a", "claimed-child") + registry.unregister("project-a", "claimed-child", nested_token) + + with pytest.raises(ActiveTaskRunAdmissionClosed): + registry.register("project-a", "new-ingress") + registry.unregister("project-a", "driver-task", driver_token) + + +@_async_test +async def test_shutdown_barrier_allows_only_reserved_handoff_to_register() -> None: + registry = ActiveTaskRunRegistry() + handoff_token = registry.reserve_handoff() + + with registry.bind_handoff(handoff_token): + barrier = asyncio.create_task( + registry.close_admission_and_wait_for_handoffs() + ) + await asyncio.sleep(0) + + assert not barrier.done() + attempt_token = registry.register("project-a", "task-1") + + registry.release_handoff(handoff_token) + await asyncio.wait_for(barrier, timeout=0.1) + + # The handoff wait ends at real coroutine registration, not at the end of + # that execution attempt. + assert registry.is_active("project-a", "task-1") + assert registry.pending_handoff_count == 0 + with pytest.raises(ActiveTaskRunAdmissionClosed): + registry.register("project-a", "late-task") + assert registry.unregister("project-a", "task-1", attempt_token) + + +@_async_test +async def test_shutdown_barrier_drains_request_that_exits_before_registration() -> None: + registry = ActiveTaskRunRegistry() + handoff_token = registry.reserve_handoff() + barrier = asyncio.create_task(registry.close_admission_and_wait_for_handoffs()) + await asyncio.sleep(0) + + assert not barrier.done() + assert registry.release_handoff(handoff_token) + await asyncio.wait_for(barrier, timeout=0.1) + + assert registry.pending_handoff_count == 0 + assert registry.active_task_ids("project-a") == set() + + +@_async_test +async def test_revoked_handoff_cannot_block_shutdown_or_register_late() -> None: + registry = ActiveTaskRunRegistry() + handoff_token = registry.reserve_handoff() + + with registry.bind_handoff(handoff_token): + assert registry.retain_current_handoff() == handoff_token + registry.close_admission() + assert registry.revoke_handoff(handoff_token) + await asyncio.wait_for( + registry.close_admission_and_wait_for_handoffs(), + timeout=0.1, + ) + with pytest.raises(ActiveTaskRunAdmissionClosed): + registry.register("project-a", "late-task") + + assert registry.pending_handoff_count == 0 + assert not registry.release_handoff(handoff_token) + + +@_async_test +async def test_engine_turns_closed_admission_into_infrastructure_cancellation() -> None: + registry = ActiveTaskRunRegistry() + registry.close_admission() + engine = OPCEngine(project_id="project-a", active_task_run_registry=registry) + engine._run_task_once = AsyncMock() + task = Task( + id="late-task", + title="Late task", + project_id="project-a", + status=TaskStatus.PENDING, + ) + + with pytest.raises(asyncio.CancelledError): + await engine._execute_task(task) + + engine._run_task_once.assert_not_awaited() + assert registry.active_task_ids("project-a") == set() + + +@_async_test +async def test_task_liveness_uses_registry_only() -> None: + registry = ActiveTaskRunRegistry() + engine = OPCEngine(project_id="project-a", active_task_run_registry=registry) + engine.store = SimpleNamespace(get_latest_external_session_for_task=AsyncMock()) + task = Task( + id="task-1", + title="Live task", + project_id="project-a", + status=TaskStatus.RUNNING, + ) + + assert not await engine._task_runtime_is_live(task) + engine.store.get_latest_external_session_for_task.assert_not_awaited() + + token = registry.register("project-a", task.id) + assert await engine._task_runtime_is_live(task) + registry.unregister("project-a", task.id, token) + + +@_async_test +async def test_project_delegate_receives_controller_registry() -> None: + registry = ActiveTaskRunRegistry() + root = OPCEngine(project_id="project-a", active_task_run_registry=registry) + root._initialized = True + captured: dict[str, object] = {} + + class FakeDelegate: + def __init__(self, **kwargs: object) -> None: + captured.update(kwargs) + self.store = None + + async def initialize(self) -> None: + return None + + with patch("opc.engine.OPCEngine", FakeDelegate): + delegate = await root._get_project_delegate("project-b") + + assert delegate is root._project_engine_delegates["project-b"] + assert captured["active_task_run_registry"] is registry + assert captured["owns_active_task_run_registry"] is False + + +@_async_test +async def test_shutdown_cancellation_does_not_write_business_cancelled() -> None: + registry = ActiveTaskRunRegistry() + engine = OPCEngine(project_id="project-a", active_task_run_registry=registry) + engine._shutting_down = True + engine.store = SimpleNamespace( + is_ready=True, + get_task=AsyncMock(), + save_task=AsyncMock(), + ) + engine._run_task_once = AsyncMock(side_effect=asyncio.CancelledError) + task = Task( + id="task-1", + title="Interrupted task", + project_id="project-a", + status=TaskStatus.RUNNING, + ) + + with pytest.raises(asyncio.CancelledError): + await engine._execute_task(task) + + engine.store.get_task.assert_not_awaited() + engine.store.save_task.assert_not_awaited() + assert not registry.is_active("project-a", task.id) + + +@_async_test +async def test_company_cancellation_never_synthesizes_hold_without_checkpoint() -> None: + engine = OPCEngine(project_id="project-a") + engine.store = SimpleNamespace( + is_ready=True, + get_task=AsyncMock(), + save_task=AsyncMock(), + ) + engine._run_task_once = AsyncMock(side_effect=asyncio.CancelledError) + task = Task( + id="company-task", + title="Company task", + project_id="project-a", + status=TaskStatus.RUNNING, + metadata={"work_item_runtime": True}, + ) + + with pytest.raises(asyncio.CancelledError): + await engine._execute_task(task) + + engine.store.get_task.assert_not_awaited() + engine.store.save_task.assert_not_awaited() + assert "company_runtime_suspended_at" not in task.metadata + assert "last_stop_reason" not in task.metadata + + +@_async_test +async def test_suspended_checkpoint_discards_racing_task_completion() -> None: + engine = OPCEngine(project_id="project-a") + engine._shutting_down = False + task = Task( + id="company-task", + title="Company task", + project_id="project-a", + status=TaskStatus.RUNNING, + metadata={"work_item_runtime": True}, + ) + suspended = Task( + id=task.id, + title=task.title, + project_id=task.project_id, + status=TaskStatus.BLOCKED, + metadata={ + "work_item_runtime": True, + "dispatch_hold": "company_runtime_suspended", + "company_runtime_stop_state": "suspended", + }, + ) + engine.store = SimpleNamespace( + get_task=AsyncMock(return_value=suspended), + save_task=AsyncMock(), + ) + engine._run_task_once = AsyncMock( + return_value=TaskResult(status=TaskStatus.DONE, content="done", artifacts={}) + ) + engine._apply_runtime_state_to_task = MagicMock() + + with pytest.raises(asyncio.CancelledError): + await engine._execute_task(task) + + engine.store.save_task.assert_not_awaited() + engine._apply_runtime_state_to_task.assert_not_called() + + +@_async_test +async def test_attempt_stays_active_until_result_persistence_finishes() -> None: + registry = ActiveTaskRunRegistry() + engine = OPCEngine(project_id="project-a", active_task_run_registry=registry) + save_started = asyncio.Event() + allow_save = asyncio.Event() + + async def blocked_save(_task: Task) -> None: + save_started.set() + await allow_save.wait() + + engine.store = SimpleNamespace( + get_task=AsyncMock(return_value=None), + save_task=blocked_save, + ) + engine._run_task_once = AsyncMock( + return_value=TaskResult(status=TaskStatus.IDLE, content="done", artifacts={}) + ) + engine._apply_runtime_state_to_task = MagicMock() + task = Task( + id="persisting-task", + title="Persisting task", + project_id="project-a", + status=TaskStatus.RUNNING, + ) + + execution = asyncio.create_task(engine._execute_task(task)) + await save_started.wait() + assert registry.is_active("project-a", task.id) + allow_save.set() + await execution + assert not registry.is_active("project-a", task.id) + + +@_async_test +async def test_claimed_work_item_ownership_covers_post_execution_finalize_gap() -> None: + registry = ActiveTaskRunRegistry() + engine = OPCEngine(project_id="project-a", active_task_run_registry=registry) + engine.store = SimpleNamespace( + get_task=AsyncMock(return_value=None), + save_task=AsyncMock(), + ) + engine._run_task_once = AsyncMock( + return_value=TaskResult(status=TaskStatus.IDLE, content="done", artifacts={}) + ) + engine._apply_runtime_state_to_task = MagicMock() + task = Task( + id="finalizing-work-item", + title="Finalizing work item", + project_id="project-a", + parent_session_id="runtime-session", + status=TaskStatus.RUNNING, + metadata={"work_item_runtime": True}, + ) + inner_finished = asyncio.Event() + allow_finalize = asyncio.Event() + executor = object.__new__(CompanyWorkItemExecutor) + executor.active_task_run_registry = registry + + async def run_claimed(*_args: object, **_kwargs: object) -> TaskResult: + result = await engine._execute_task(task) + inner_finished.set() + await allow_finalize.wait() + return result + + executor._run_claimed_work_item = run_claimed + owned = executor._create_claimed_work_item_task( + CompanyMemberSession( + role_id="executor", + seat_id="seat::executor", + member_session_id="role-session", + ), + task, + {}, + ) + await inner_finished.wait() + + assert registry.attempt_count("project-a", task.id) == 1 + allow_finalize.set() + await owned + assert not registry.is_active("project-a", task.id) + + +@_async_test +async def test_work_item_claim_and_spawn_share_stop_scope_lock() -> None: + registry = ActiveTaskRunRegistry() + executor = object.__new__(CompanyWorkItemExecutor) + executor.active_task_run_registry = registry + claim_entered = asyncio.Event() + allow_claim = asyncio.Event() + allow_child_exit = asyncio.Event() + stop_acquired = asyncio.Event() + task = Task( + id="claimed-task", + title="Claimed task", + project_id="project-a", + session_id="role-session", + parent_session_id="runtime-session", + metadata={"work_item_runtime": True}, + ) + member_session = CompanyMemberSession( + role_id="executor", + seat_id="seat::executor", + member_session_id="role-session", + ) + + async def claim_runnable_tasks( + _tasks: list[Task], + *, + work_items: list[object], + ) -> list[tuple[CompanyMemberSession, Task]]: + del work_items + claim_entered.set() + await allow_claim.wait() + return [(member_session, task)] + + async def run_claimed(*_args: object, **_kwargs: object) -> None: + await allow_child_exit.wait() + + executor.runtime = SimpleNamespace( + claim_runnable_tasks=claim_runnable_tasks, + ) + executor._run_claimed_work_item = run_claimed + active: dict[asyncio.Task, tuple[CompanyMemberSession, Task]] = {} + scheduled = asyncio.create_task( + executor._claim_and_create_work_item_tasks([task], [], active) + ) + await claim_entered.wait() + + async def stop_scope() -> None: + async with registry.scope_lock("project-a", "runtime-session"): + assert registry.is_active("project-a", task.id) + stop_acquired.set() + + stopping = asyncio.create_task(stop_scope()) + await asyncio.sleep(0) + assert not stop_acquired.is_set() + + allow_claim.set() + await scheduled + await stopping + assert len(active) == 1 + + allow_child_exit.set() + await asyncio.gather(*active) + assert not registry.is_active("project-a", task.id) + + +@_async_test +async def test_company_executor_driver_ownership_covers_idle_scheduler_window() -> None: + registry = ActiveTaskRunRegistry() + entered = asyncio.Event() + allow_exit = asyncio.Event() + executor = object.__new__(CompanyWorkItemExecutor) + executor.active_task_run_registry = registry + + async def idle_scheduler( + _plan: CompanyWorkItemRuntimePlan, + _tasks: list[Task], + ) -> str: + entered.set() + await allow_exit.wait() + return "done" + + executor._execute_multi_team_org = idle_scheduler + task = Task( + id="driver-task", + title="Driver task", + project_id="project-a", + parent_session_id="runtime-session", + metadata={"work_item_runtime": True}, + ) + execution = asyncio.create_task( + executor.execute(CompanyWorkItemRuntimePlan(), [task]) + ) + await entered.wait() + + assert registry.is_active("project-a", task.id) + allow_exit.set() + assert await execution == "done" + assert not registry.is_active("project-a", task.id) + + +@_async_test +async def test_borrowed_engine_shutdown_keeps_controller_registry_open() -> None: + registry = ActiveTaskRunRegistry() + root_token = registry.register("project-a", "root-attempt") + borrowed = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=False, + ) + + await borrowed.shutdown() + + assert not registry.admission_closed + assert registry.is_active("project-a", "root-attempt") + next_token = registry.register("project-a", "next-attempt") + registry.unregister("project-a", "next-attempt", next_token) + registry.unregister("project-a", "root-attempt", root_token) + + +@_async_test +async def test_shutdown_preparation_includes_project_delegates() -> None: + engine = OPCEngine(project_id="project-a") + delegate_prepare = AsyncMock( + return_value=[{"session_id": "delegate-session", "checkpoint_id": "checkpoint-1"}] + ) + engine._project_engine_delegates["project-b"] = SimpleNamespace( + prepare_active_company_runtimes_for_shutdown=delegate_prepare, + ) + + prepared = await engine.prepare_active_company_runtimes_for_shutdown() + + assert prepared == [{"session_id": "delegate-session", "checkpoint_id": "checkpoint-1"}] + delegate_prepare.assert_awaited_once() + + +@_async_test +async def test_engine_shutdown_prepares_before_closing_subsystems() -> None: + engine = OPCEngine(project_id="project-a") + engine.prepare_active_company_runtimes_for_shutdown = AsyncMock(return_value=[]) + + await engine.shutdown() + + engine.prepare_active_company_runtimes_for_shutdown.assert_awaited_once() + + +@_async_test +async def test_engine_shutdown_does_not_close_store_when_durable_prepare_fails() -> None: + engine = OPCEngine(project_id="project-a") + engine.prepare_active_company_runtimes_for_shutdown = AsyncMock( + side_effect=RuntimeError("checkpoint failed") + ) + engine.store = SimpleNamespace(close=AsyncMock()) + engine.message_bus.stop = MagicMock() + + with pytest.raises(RuntimeError, match="checkpoint failed"): + await engine.shutdown() + + engine.message_bus.stop.assert_not_called() + engine.store.close.assert_not_awaited() diff --git a/tests/test_cli_app.py b/tests/test_cli_app.py index c03e960..e725c36 100644 --- a/tests/test_cli_app.py +++ b/tests/test_cli_app.py @@ -1116,6 +1116,34 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(calls, ["first", "second"]) self.assertIn("Queued #1", console.export_text()) + def test_chat_turn_controller_prepares_checkpoint_before_cancelling_active_turn(self) -> None: + state, _engine = self._make_state() + + async def _run() -> list[str]: + order: list[str] = [] + started = asyncio.Event() + + async def active_turn() -> None: + started.set() + try: + await asyncio.Event().wait() + finally: + order.append("cancelled") + + async def prepare() -> list[dict[str, Any]]: + order.append("prepared") + return [] + + state.engine.prepare_active_company_runtimes_for_shutdown = prepare + controller = ChatTurnController(state) + controller.active_task = asyncio.create_task(active_turn()) + await started.wait() + + await controller.shutdown() + return order + + self.assertEqual(asyncio.run(_run()), ["prepared", "cancelled"]) + def test_busy_slash_policy_allows_readonly_and_blocks_mutating_commands(self) -> None: self.assertEqual(_busy_slash_policy("kanban", []), BusyCommandPolicy.IMMEDIATE_READONLY) self.assertEqual(_busy_slash_policy("logs", ["task-1"]), BusyCommandPolicy.IMMEDIATE_READONLY) @@ -1168,6 +1196,17 @@ class CliSlashCommandTests(unittest.TestCase): "org_id": "quantum_harbor", "preferred_agent": "codex", }) + store.checkpoints = [ + SimpleNamespace( + checkpoint_id="cp-org-interrupted", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="task-1", + session_id="sess-1", + updated_at=datetime(2026, 5, 17, 12, 0), + payload={}, + ) + ] state, engine = self._make_state(store=store) state.mode = "company" state.company_profile = "corporate" @@ -1183,7 +1222,59 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(engine.calls[-1]["org_id"], "quantum_harbor") self.assertIsNone(engine.calls[-1]["company_profile"]) self.assertEqual(engine.calls[-1]["preferred_agent"], "codex") - self.assertEqual(engine.calls[-1]["message_metadata"], {"ui_force_resume": True}) + self.assertEqual(engine.calls[-1]["message_metadata"], { + "ui_force_resume": True, + "response_to_checkpoint_id": "cp-org-interrupted", + "response_to_checkpoint_type": "company_runtime_interrupted", + }) + + def test_company_continue_requires_a_durable_runtime_checkpoint(self) -> None: + console = Console(record=True, force_terminal=False, width=120) + store = self._Store() + store.tasks[0].metadata.update({ + "exec_mode": "company", + "company_profile": "corporate", + }) + state, engine = self._make_state(store=store) + + async def _run() -> None: + await _handle_chat_slash_command(state, "/continue") + + with patch("opc.cli.app.console", console): + asyncio.run(_run()) + + self.assertEqual(engine.calls, []) + self.assertIn("No suspended or interrupted company runtime", console.export_text()) + + def test_continue_slash_routes_to_durable_runtime_checkpoint(self) -> None: + store = self._Store() + store.checkpoints = [ + SimpleNamespace( + checkpoint_id="cp-interrupted", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="task-1", + session_id="sess-1", + updated_at=datetime(2026, 5, 17, 12, 0), + payload={}, + ) + ] + state, engine = self._make_state(store=store) + state.mode = "company" + state.runtime_control_state = "suspended" + + async def _run() -> None: + await _handle_chat_slash_command(state, "/continue") + + asyncio.run(_run()) + + self.assertEqual(engine.calls[-1]["session_id"], "sess-1") + self.assertEqual(engine.calls[-1]["message_metadata"], { + "ui_force_resume": True, + "response_to_checkpoint_id": "cp-interrupted", + "response_to_checkpoint_type": "company_runtime_interrupted", + }) + self.assertEqual(state.runtime_control_checkpoint_id, "cp-interrupted") def test_plain_message_after_stop_routes_to_suspend_checkpoint(self) -> None: store = self._Store() @@ -1209,7 +1300,127 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(engine.calls[-1]["message_metadata"]["response_to_checkpoint_id"], "cp-suspend") self.assertEqual(engine.calls[-1]["message_metadata"]["response_to_checkpoint_type"], "company_runtime_suspended") - self.assertEqual(state.runtime_control_state, "running") + self.assertEqual(state.runtime_control_state, "suspended") + + def test_plain_message_from_company_child_uses_root_runtime_checkpoint(self) -> None: + store = self._Store() + now = datetime(2026, 5, 17, 12, 0) + store.tasks[0].metadata.update({ + "exec_mode": "company", + "mode": "company", + "company_profile": "corporate", + }) + store.tasks[0].parent_session_id = "" + store.tasks.append(SimpleNamespace( + id="worker-child", + title="Worker", + description="Worker turn", + status=TaskStatus.BLOCKED, + priority=3, + assigned_to="worker", + session_id="sess-1:role:worker", + parent_session_id="sess-1", + project_id="demo", + created_at=now, + tags=[], + result={}, + linked_work_item_id="worker-item", + metadata={ + "exec_mode": "company", + "work_item_runtime": True, + "work_item_projection_id": "worker", + "company_runtime_root_session_id": "sess-1", + }, + context_snapshot={}, + )) + store.checkpoints = [SimpleNamespace( + checkpoint_id="cp-child-interrupted", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="task-1", + session_id="sess-1", + project_id="demo", + updated_at=now, + payload={"parent_session_id": "sess-1"}, + )] + state, engine = self._make_state(store=store) + state.session_id = "sess-1:role:worker" + # The selected child channel may have left the CLI's ambient mode in + # task mode. Runtime config, not ambient state, owns resumed execution. + state.mode = "task" + + asyncio.run(_process_interactive_chat_message(state, "revise and continue")) + + call = engine.calls[-1] + self.assertEqual(call["session_id"], "sess-1") + self.assertEqual(call["origin_task_id"], "task-1") + self.assertEqual(call["mode"], "company") + self.assertEqual(call["company_profile"], "corporate") + self.assertEqual(call["message_metadata"], { + "response_to_checkpoint_id": "cp-child-interrupted", + "response_to_checkpoint_type": "company_runtime_interrupted", + }) + + def test_plain_message_during_resuming_checkpoint_fails_closed(self) -> None: + console = Console(record=True, force_terminal=False, width=140) + store = self._Store() + store.tasks[0].metadata.update({ + "exec_mode": "company", + "mode": "company", + "company_profile": "corporate", + }) + store.checkpoints = [SimpleNamespace( + checkpoint_id="cp-resuming", + checkpoint_type="company_runtime_suspended", + status="resuming", + task_id="task-1", + session_id="sess-1", + project_id="demo", + updated_at=datetime(2026, 5, 17, 12, 0), + payload={"parent_session_id": "sess-1"}, + )] + state, engine = self._make_state(store=store) + state.mode = "company" + + with patch("opc.cli.app.console", console): + asyncio.run(_process_interactive_chat_message(state, "continue again")) + + self.assertEqual(engine.calls, []) + self.assertIn("checkpoint is resuming", console.export_text()) + + def test_explicit_cli_runtime_checkpoint_mismatch_fails_closed(self) -> None: + console = Console(record=True, force_terminal=False, width=140) + store = self._Store() + store.tasks[0].metadata.update({ + "exec_mode": "company", + "mode": "company", + "company_profile": "corporate", + }) + store.checkpoints = [SimpleNamespace( + checkpoint_id="cp-current", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="task-1", + session_id="sess-1", + project_id="demo", + updated_at=datetime(2026, 5, 17, 12, 0), + payload={"parent_session_id": "sess-1"}, + )] + state, engine = self._make_state(store=store) + state.mode = "company" + + with patch("opc.cli.app.console", console): + asyncio.run(_process_interactive_chat_message( + state, + "continue stale", + message_metadata={ + "response_to_checkpoint_id": "cp-stale", + "response_to_checkpoint_type": "company_runtime_interrupted", + }, + )) + + self.assertEqual(engine.calls, []) + self.assertIn("checkpoint identity mismatch", console.export_text()) def test_session_resume_still_switches_session(self) -> None: state, engine = self._make_state(store=self._Store()) @@ -1287,8 +1498,6 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(output["payload"]["checkpoint_id"], "cp-stop") self.assertEqual(output["cancelled"], ["task-company"]) self.assertEqual(output["suspend_calls"][0]["session_id"], "sess-company") - self.assertEqual(output["task"].metadata["dispatch_hold"], "company_runtime_suspended") - self.assertEqual(output["task"].metadata["company_runtime_stop_state"], "suspended") def test_session_service_continue_uses_force_resume_metadata(self) -> None: class Store: @@ -1305,10 +1514,17 @@ class CliSlashCommandTests(unittest.TestCase): metadata={ "exec_mode": "company", "company_profile": "corporate", - "dispatch_hold": "company_runtime_suspended", - "company_runtime_stop_state": "suspended", }, ) + self.checkpoint = SimpleNamespace( + checkpoint_id="cp-company", + checkpoint_type="company_runtime_suspended", + status="pending", + project_id="demo", + session_id="sess-company", + task_id="task-company", + payload={}, + ) async def get_task(self, task_id: str): return self.task if task_id == self.task.id else None @@ -1319,6 +1535,9 @@ class CliSlashCommandTests(unittest.TestCase): async def get_session(self, session_id: str): return SimpleNamespace(session_id=session_id, project_id="demo") + async def get_execution_checkpoints(self, **_kwargs): + return [self.checkpoint] + async def save_task(self, task): self.task = task @@ -1331,7 +1550,12 @@ class CliSlashCommandTests(unittest.TestCase): engine = SimpleNamespace(project_id="demo", store=Store(), process_message=process_message) context = OfficeServiceContext(engine=engine, agent_store=None, chat_store=None, event_adapter=None) - result = await SessionService(context).continue_run(project_id="demo", target="sess-company") + result = await SessionService(context).continue_run( + project_id="demo", + target="sess-company", + runtime_session_id="sess-company", + checkpoint_id="cp-company", + ) self.assertEqual(result.payload["response"], "resumed") return calls @@ -1340,7 +1564,11 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(calls[-1]["content"], "Resume the existing runtime.") self.assertEqual(calls[-1]["session_id"], "sess-company") self.assertEqual(calls[-1]["mode"], "company") - self.assertEqual(calls[-1]["message_metadata"], {"ui_force_resume": True}) + self.assertEqual(calls[-1]["message_metadata"], { + "ui_force_resume": True, + "response_to_checkpoint_id": "cp-company", + "response_to_checkpoint_type": "company_runtime_suspended", + }) def test_session_service_continue_preserves_custom_org_id(self) -> None: class Store: @@ -1359,10 +1587,17 @@ class CliSlashCommandTests(unittest.TestCase): "company_profile": "custom", "org_id": "quantum_harbor", "preferred_agent": "codex", - "dispatch_hold": "company_runtime_suspended", - "company_runtime_stop_state": "suspended", }, ) + self.checkpoint = SimpleNamespace( + checkpoint_id="cp-org", + checkpoint_type="company_runtime_interrupted", + status="pending", + project_id="demo", + session_id="sess-org", + task_id="task-org", + payload={}, + ) async def get_task(self, task_id: str): return self.task if task_id == self.task.id else None @@ -1373,6 +1608,9 @@ class CliSlashCommandTests(unittest.TestCase): async def get_session(self, session_id: str): return SimpleNamespace(session_id=session_id, project_id="demo") + async def get_execution_checkpoints(self, **_kwargs): + return [self.checkpoint] + async def save_task(self, task): self.task = task @@ -1385,7 +1623,12 @@ class CliSlashCommandTests(unittest.TestCase): engine = SimpleNamespace(project_id="demo", store=Store(), process_message=process_message) context = OfficeServiceContext(engine=engine, agent_store=None, chat_store=None, event_adapter=None) - result = await SessionService(context).continue_run(project_id="demo", target="sess-org") + result = await SessionService(context).continue_run( + project_id="demo", + target="sess-org", + runtime_session_id="sess-org", + checkpoint_id="cp-org", + ) self.assertEqual(result.payload["response"], "resumed") return calls @@ -1394,7 +1637,11 @@ class CliSlashCommandTests(unittest.TestCase): self.assertEqual(calls[-1]["mode"], "org") self.assertEqual(calls[-1]["org_id"], "quantum_harbor") self.assertIsNone(calls[-1]["company_profile"]) - self.assertEqual(calls[-1]["message_metadata"], {"ui_force_resume": True}) + self.assertEqual(calls[-1]["message_metadata"], { + "ui_force_resume": True, + "response_to_checkpoint_id": "cp-org", + "response_to_checkpoint_type": "company_runtime_interrupted", + }) def test_queue_slash_lists_and_drops_queued_prompts(self) -> None: console = Console(record=True, force_terminal=False, width=160) @@ -2648,49 +2895,16 @@ class CliSlashCommandTests(unittest.TestCase): self.assertIn("Pending Checkpoints", rendered) self.assertIn("cp-1", rendered) - def test_recover_slash_lists_and_resumes_interrupted_runtime(self) -> None: + def test_legacy_recover_slash_is_not_registered(self) -> None: console = Console(record=True, force_terminal=False, width=200) state, _engine = self._make_state(store=self._Store()) - resume_calls: list[str] = [] - class _FakeRecoveryManager: - async def get_status(self): - return SimpleNamespace( - interrupted=[ - SimpleNamespace( - parent_task_id="parent-task", - parent_session_id="parent-session", - title="Interrupted Runtime", - profile="corporate", - interrupted_at="2026-05-03T12:00:00", - work_items=[ - SimpleNamespace(projection_id="wi-1", interrupted=True), - SimpleNamespace(projection_id="wi-2", interrupted=False), - ], - ) - ], - active_recoveries=[], - ) - - async def resume(self, parent_task_id: str): - resume_calls.append(parent_task_id) - if parent_task_id == "parent-task": - return {"ok": True, "resumed_work_item_projection_ids": ["wi-1"]} - return {"ok": False, "error": "not_found"} - - async def _run() -> None: - await _handle_chat_slash_command(state, "/recover") - await _handle_chat_slash_command(state, "/recover resume parent-task") - await _handle_chat_slash_command(state, "/recover resume cp-1") - - with patch("opc.cli.app.console", console), patch("opc.cli.app._get_chat_recovery_manager", return_value=_FakeRecoveryManager()): - asyncio.run(_run()) + with patch("opc.cli.app.console", console): + asyncio.run(_handle_chat_slash_command(state, "/recover")) rendered = console.export_text() - self.assertIn("Interrupted Runtime", rendered) - self.assertIn("Recovery started for parent-task", rendered) - self.assertIn("Checkpoint cp-1 is not resumed directly", rendered) - self.assertEqual(resume_calls, ["parent-task", "cp-1"]) + self.assertIn("Unknown command: /recover", rendered) + self.assertNotIn("Interrupted Company Runtimes", rendered) def test_logs_slash_renders_task_and_session_runtime_details(self) -> None: console = Console(record=True, force_terminal=False, width=220) diff --git a/tests/test_company_collaboration.py b/tests/test_company_collaboration.py index 26b0286..72f1bda 100644 --- a/tests/test_company_collaboration.py +++ b/tests/test_company_collaboration.py @@ -527,6 +527,25 @@ class CompanyCollaborationTests(unittest.IsolatedAsyncioTestCase): await runtime.bootstrap([task]) runtime.enqueue_runnable_work_items([work_item], task_by_work_item_id={"work-item-1": task}) + + async def claim_work_item(*_args: object, **kwargs: object) -> DelegationWorkItem: + role_session_id = str(kwargs["role_runtime_session_id"]) + work_item.phase = Phase.RUNNING + work_item.role_runtime_session_id = role_session_id + work_item.claimed_by_role_runtime_session_id = role_session_id + work_item.claimed_by_seat_id = str(kwargs.get("seat_id", "")) + work_item.metadata = { + **dict(work_item.metadata or {}), + "claimed_by_role_session_id": role_session_id, + "claimed_task_id": str(kwargs["task_id"]), + } + return work_item + + runtime.store = SimpleNamespace( + is_ready=True, + claim_delegation_work_item_if_dispatchable=claim_work_item, + save_delegation_role_session=AsyncMock(), + ) claims = await runtime.claim_runnable_tasks([task], work_items=[work_item]) self.assertEqual(len(claims), 1) @@ -534,6 +553,61 @@ class CompanyCollaborationTests(unittest.IsolatedAsyncioTestCase): self.assertEqual(claimed_task.id, task.id) self.assertEqual(claimed_session.member_session_id, "role-session::proj1::root-a::executor::backend-architect") + async def test_company_runtime_does_not_spawn_after_atomic_claim_loses_to_hold(self) -> None: + runtime = CompanyRuntime( + org_engine=DummyOrgEngine(), + communication=DummyRuntimeCommunication(), + ) + task = Task( + id="held-work-item-task", + title="Held Work Item", + session_id="root-a", + parent_session_id="root-a", + assigned_to="executor", + status=TaskStatus.PENDING, + project_id="proj1", + metadata={ + "work_item_projection_id": "held_execution", + "work_item_role_id": "executor", + "employee_assignment": { + "employee_id": "backend-architect", + "role_id": "executor", + }, + }, + ) + set_linked_work_item_id(task, "held-work-item") + work_item = DelegationWorkItem( + work_item_id="held-work-item", + run_id="run-1", + cell_id="cell-1", + role_id="executor", + projection_id="held_execution", + phase=Phase.READY, + ) + held_after_race = DelegationWorkItem( + **{ + **work_item.__dict__, + "metadata": {"dispatch_hold": "company_runtime_suspended"}, + } + ) + claim = AsyncMock(return_value=None) + runtime.store = SimpleNamespace( + is_ready=True, + claim_delegation_work_item_if_dispatchable=claim, + get_delegation_work_item=AsyncMock(return_value=held_after_race), + ) + await runtime.bootstrap([task]) + runtime.enqueue_runnable_work_items( + [work_item], + task_by_work_item_id={work_item.work_item_id: task}, + ) + + claims = await runtime.claim_runnable_tasks([task], work_items=[work_item]) + + self.assertEqual(claims, []) + self.assertNotIn(work_item.work_item_id, runtime._claimed_work_item_ids) + claim.assert_awaited_once() + async def test_company_runtime_does_not_double_claim_same_work_item(self) -> None: runtime = CompanyRuntime( org_engine=DummyOrgEngine(), @@ -2722,9 +2796,11 @@ class CompanyCollaborationTests(unittest.IsolatedAsyncioTestCase): engine.project_id = "proj1" engine.store = store engine.company_executor = DummyExecutor() + attempt_token = engine._active_task_run_registry.register("proj1", running_task.id) response = await engine._maybe_resume_existing_company_runtime("缁х画", "sess-parent-live") refreshed = await store.get_task(running_task.id) + engine._active_task_run_registry.unregister("proj1", running_task.id, attempt_token) self.assertIn("already in progress", response) self.assertEqual(refreshed.status, TaskStatus.RUNNING) diff --git a/tests/test_company_role_session_behavior.py b/tests/test_company_role_session_behavior.py index e3664c7..8b4160d 100644 --- a/tests/test_company_role_session_behavior.py +++ b/tests/test_company_role_session_behavior.py @@ -80,7 +80,6 @@ class SharedRoleSessionExecutionTests(unittest.IsolatedAsyncioTestCase): record_child_session_result=AsyncMock(), record_task_completion_async=AsyncMock(), ) - engine._active_task_runs = set() engine._run_task_once = AsyncMock( return_value=TaskResult(status=TaskStatus.DONE, content="done", artifacts={}) ) @@ -106,4 +105,3 @@ class SharedRoleSessionExecutionTests(unittest.IsolatedAsyncioTestCase): engine.memory.record_assistant_turn.assert_awaited_once() engine.memory.record_child_session_result.assert_not_awaited() - diff --git a/tests/test_company_runtime_identity.py b/tests/test_company_runtime_identity.py new file mode 100644 index 0000000..51aadbe --- /dev/null +++ b/tests/test_company_runtime_identity.py @@ -0,0 +1,410 @@ +from __future__ import annotations + +import asyncio +import json +from datetime import datetime, timedelta +from types import SimpleNamespace +from unittest.mock import AsyncMock, MagicMock + +from opc.core.models import ExecutionCheckpoint, Task, TaskStatus +from opc.layer2_organization.company_runtime_identity import ( + build_company_runtime_identity_index, +) +from opc.plugins.office_ui.services.models import ServiceError +from opc.plugins.office_ui.snapshot_builder import ( + _build_company_runtime_control_by_task, + _primary_session_tasks_by_session_id, +) +from opc.plugins.office_ui.ws_handler import WSHandler + + +def _runtime_records() -> tuple[list[Task], ExecutionCheckpoint]: + runtime_session_id = "runtime-session" + anchor = Task( + id="ui-anchor", + project_id="project-a", + session_id=runtime_session_id, + status=TaskStatus.CANCELLED, + metadata={ + "exec_mode": "company", + "mode": "company", + "company_profile": "corporate", + }, + created_at=datetime.now() - timedelta(minutes=3), + ) + final_decider = Task( + id="final-decider", + project_id="project-a", + session_id=runtime_session_id, + parent_session_id=runtime_session_id, + status=TaskStatus.CANCELLED, + linked_work_item_id="work-item-root", + metadata={ + "mode": "company", + "work_item_runtime": True, + "work_item_projection_id": "root", + "shared_role_session": True, + "shared_role_id": "ceo", + "company_runtime_root_session_id": runtime_session_id, + }, + created_at=datetime.now() - timedelta(minutes=2), + ) + child = Task( + id="worker", + project_id="project-a", + session_id=f"{runtime_session_id}:role:worker", + parent_session_id=runtime_session_id, + status=TaskStatus.BLOCKED, + linked_work_item_id="work-item-worker", + metadata={ + "mode": "company", + "work_item_runtime": True, + "work_item_projection_id": "worker", + "shared_role_session": True, + "company_runtime_root_session_id": runtime_session_id, + }, + created_at=datetime.now() - timedelta(minutes=1), + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="checkpoint-1", + project_id="project-a", + session_id=runtime_session_id, + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id=final_decider.id, + payload={"parent_session_id": runtime_session_id}, + ) + return [anchor, final_decider, child], checkpoint + + +def test_identity_is_session_first_and_never_selects_shared_final_decider_as_ui_anchor() -> None: + tasks, checkpoint = _runtime_records() + index = build_company_runtime_identity_index(tasks, [checkpoint]) + + identity = index.resolve( + task_id="final-decider", + runtime_session_id="runtime-session", + checkpoint_id="checkpoint-1", + ) + + assert identity is not None + assert identity.runtime_session_id == "runtime-session" + assert identity.ui_anchor_task_id == "ui-anchor" + assert identity.config_source_task_id == "ui-anchor" + assert identity.runtime_task_ids == ("ui-anchor", "final-decider", "worker") + assert identity.pending_checkpoint_id == "checkpoint-1" + assert identity.resumable is True + assert index.resolve(task_session_id="runtime-session:role:worker") == identity + assert index.resolve(task_id="worker", runtime_session_id="other-session") is None + assert index.resolve(task_id="ui-anchor", checkpoint_id="other-checkpoint") is None + + +def test_config_source_uses_configured_scope_task_when_ui_anchor_has_no_config() -> None: + tasks, _checkpoint = _runtime_records() + tasks[0].metadata = {} + tasks[1].metadata.update({"exec_mode": "org", "company_profile": "custom", "org_id": "studio"}) + + identity = build_company_runtime_identity_index(tasks).resolve( + task_id="ui-anchor", + ) + + assert identity is not None + assert identity.ui_anchor_task_id == "ui-anchor" + assert identity.config_source_task_id == "final-decider" + + +def test_snapshot_session_representative_uses_canonical_ui_anchor() -> None: + tasks, _checkpoint = _runtime_records() + primary, ordered = _primary_session_tasks_by_session_id( + [tasks[1], tasks[0], tasks[2]], + ) + + assert ordered[0] == "runtime-session" + assert primary["runtime-session"].id == "ui-anchor" + + +def test_runtime_without_ui_anchor_never_promotes_shared_work_item() -> None: + tasks, checkpoint = _runtime_records() + shared_final = tasks[1] + shared_final.parent_session_id = None + index = build_company_runtime_identity_index([shared_final, tasks[2]], [checkpoint]) + + identity = index.resolve(runtime_session_id="runtime-session") + + assert identity is not None + assert identity.ui_anchor_task_id == "" + assert identity.config_source_task_id == "final-decider" + primary, _ordered = _primary_session_tasks_by_session_id( + [shared_final, tasks[2]], + ) + assert "runtime-session" not in primary + + +def test_snapshot_projects_checkpoint_control_to_cancelled_anchor_without_task_resume_identity() -> None: + tasks, checkpoint = _runtime_records() + + class Store: + async def get_execution_checkpoints(self, **_kwargs): + return [checkpoint] + + engine = SimpleNamespace(store=Store()) + control = asyncio.run(_build_company_runtime_control_by_task(engine, tasks, "project-a")) + + assert control["ui-anchor"]["runtime_control_state"] == "suspended" + assert control["ui-anchor"]["can_resume"] is True + assert control["ui-anchor"]["resume_parent_session_id"] == "runtime-session" + assert control["ui-anchor"]["pending_runtime_checkpoint_id"] == "checkpoint-1" + assert "resume_parent_task_id" not in control["ui-anchor"] + + +def test_service_error_transport_fields_cannot_be_overridden() -> None: + handler = WSHandler.__new__(WSHandler) + sent: list[dict] = [] + + async def send_ack(_ws, ok=True, **payload): + sent.append({"ok": ok, **payload}) + + handler._send_ack = send_ack + error = ServiceError( + "actual_code", + "actual message", + {"ok": True, "code": "wrong", "error": "wrong", "detail": "kept"}, + ) + + asyncio.run(handler._send_service_error(object(), error, action="test_action")) + + assert sent == [{ + "ok": False, + "detail": "kept", + "error": "actual message", + "code": "actual_code", + "action": "test_action", + }] + + +def test_removed_recovery_action_receives_normal_unknown_message_ack() -> None: + handler = WSHandler.__new__(WSHandler) + handler._shutting_down = False + handler._active_message_tasks = set() + handler._send_ack = AsyncMock() + ws = object() + + asyncio.run(handler._route_message(ws, json.dumps({"type": "recovery_action"}))) + + handler._send_ack.assert_awaited_once_with( + ws, + ok=False, + error="unknown_message_type", + action="recovery_action", + ) + + +def test_work_item_chat_resume_uses_canonical_ui_anchor_as_engine_origin() -> None: + async def scenario() -> None: + tasks, checkpoint = _runtime_records() + handler = WSHandler.__new__(WSHandler) + handler._exec_mode = "task" + handler._company_profile = "corporate" + handler._shutting_down = False + handler._active_runtime_children = {} + handler._session_to_task = {} + handler._task_bg_context = {} + handler._company_suspend_reply_locks = {"runtime-session": asyncio.Lock()} + handler.chat_store = None + handler._set_company_runtime_control = AsyncMock() + handler._normalize_session_exec_mode = MagicMock(return_value="task") + handler._normalize_session_company_profile = MagicMock(return_value="corporate") + handler._resolve_task_session_config = MagicMock( + return_value=("company", "corporate") + ) + handler._resolve_task_org_id = MagicMock(return_value="") + handler._extract_checkpoint_metadata = AsyncMock(return_value=None) + handler._sync_task_transcript_messages = AsyncMock() + handler.on_kanban_changed = AsyncMock() + handler._flush_progress = AsyncMock() + run_engine = SimpleNamespace( + project_id="project-a", + process_message=AsyncMock(return_value="resumed"), + ) + target = { + "ui_anchor_task_id": "ui-anchor", + "config_task": tasks[1], + } + + await handler._process_company_suspend_reply( + ui_task_id="final-decider", + runtime_session_id="runtime-session", + content="continue", + attachment_refs=None, + message_metadata={"ui_force_resume": True}, + user_message_id=None, + user_message_created_at=None, + run_engine=run_engine, + run_project_id="project-a", + target=target, + checkpoint=checkpoint, + lock=handler._company_suspend_reply_locks["runtime-session"], + ) + + call = run_engine.process_message.await_args + assert call.kwargs["session_id"] == "runtime-session" + assert call.kwargs["origin_task_id"] == "ui-anchor" + assert handler._session_to_task["runtime-session"] == "ui-anchor" + handler.on_kanban_changed.assert_awaited_once_with(engine=run_engine) + + asyncio.run(scenario()) + + +def test_delivery_feedback_rejects_missing_canonical_identity_without_first_task_fallback() -> None: + async def scenario() -> None: + tasks, checkpoint = _runtime_records() + + class Store: + is_ready = True + + async def get_tasks(self, **_kwargs): + # A shared final-decider deliberately precedes the UI anchor; + # legacy first-match routing selected the wrong Task here. + return [tasks[1], tasks[0], tasks[2]] + + handler = WSHandler.__new__(WSHandler) + handler._resolve_company_runtime_target = AsyncMock(return_value=None) + engine = SimpleNamespace(store=Store()) + + target = await handler._company_delivery_feedback_parent_target( + task_id="final-decider", + waiting_task_id="worker", + waiting_task=tasks[2], + checkpoint=checkpoint, + payload={"parent_session_id": "runtime-session"}, + engine=engine, + ) + + assert target == {"parent_task_id": "", "parent_session_id": ""} + + asyncio.run(scenario()) + + +def test_delivery_feedback_route_consumes_missing_identity_instead_of_running_work_item() -> None: + async def scenario() -> None: + handler = WSHandler.__new__(WSHandler) + handler.chat_store = None + handler._company_delivery_feedback_reply_locks = {} + handler._load_execution_checkpoint_for_reply = AsyncMock(return_value=SimpleNamespace( + checkpoint_id="feedback-1", + checkpoint_type="company_delivery_feedback", + status="pending", + task_id="worker", + session_id="runtime-session", + payload={"waiting_task_id": "worker", "parent_session_id": "runtime-session"}, + )) + handler._company_delivery_feedback_parent_target = AsyncMock(return_value={ + "parent_task_id": "", + "parent_session_id": "", + }) + handler._track_session = MagicMock() + engine = SimpleNamespace(store=SimpleNamespace(is_ready=True)) + + handled = await handler._route_company_delivery_feedback_reply_if_pending( + task_id="worker", + content="looks good", + session_id="runtime-session:worker", + task=SimpleNamespace(id="worker"), + attachment_refs=None, + message_metadata={ + "response_to_checkpoint_id": "feedback-1", + "response_to_checkpoint_type": "company_delivery_feedback", + }, + user_message_id="message-1", + user_message_created_at=None, + run_engine=engine, + run_project_id="project-a", + reply_channel_id="session:worker", + ) + + assert handled is True + handler._track_session.assert_not_called() + + asyncio.run(scenario()) + + +def test_suspend_reply_identity_mismatch_and_resuming_checkpoint_fail_closed() -> None: + async def scenario() -> None: + tasks, checkpoint = _runtime_records() + handler = WSHandler.__new__(WSHandler) + handler.chat_store = None + handler._company_stop_finalize_tasks = {} + handler._company_suspend_reply_locks = {} + handler._track = MagicMock() + engine = SimpleNamespace(project_id="project-a") + target = { + "runtime_session_id": "runtime-session", + "checkpoint": checkpoint, + } + + handler._resolve_company_runtime_target = AsyncMock( + side_effect=[target, None], + ) + mismatched = await handler._route_company_suspend_reply_if_pending( + task_id="worker", + content="continue", + session_id="runtime-session:role:worker", + task=tasks[2], + attachment_refs=None, + message_metadata={ + "response_to_checkpoint_id": "wrong-checkpoint", + "response_to_checkpoint_type": "company_runtime_interrupted", + }, + user_message_id=None, + user_message_created_at=None, + run_engine=engine, + run_project_id="project-a", + ) + assert mismatched is True + handler._track.assert_not_called() + + checkpoint.status = "resuming" + handler._resolve_company_runtime_target = AsyncMock(return_value=target) + resuming = await handler._route_company_suspend_reply_if_pending( + task_id="worker", + content="continue again", + session_id="runtime-session:role:worker", + task=tasks[2], + attachment_refs=None, + message_metadata=None, + user_message_id=None, + user_message_created_at=None, + run_engine=engine, + run_project_id="project-a", + ) + assert resuming is True + handler._track.assert_not_called() + + asyncio.run(scenario()) + + +def test_escalation_control_uses_durable_anchor_not_transient_progress_maps() -> None: + async def scenario() -> None: + tasks, checkpoint = _runtime_records() + + class Store: + async def get_task(self, task_id: str): + return next((task for task in tasks if task.id == task_id), None) + + async def get_tasks(self, **_kwargs): + return tasks + + async def get_execution_checkpoints(self, **_kwargs): + return [checkpoint] + + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace(project_id="project-a", store=Store()) + handler._active_runtime_children = {"worker": "wrong-parent"} + handler._session_to_task = {"runtime-session": "wrong-parent"} + handler._ui_task_aliases = {} + + resolved = await handler._resolve_escalation_session_task_id("worker") + + assert resolved == "ui-anchor" + + asyncio.run(scenario()) diff --git a/tests/test_company_runtime_suspend_resume.py b/tests/test_company_runtime_suspend_resume.py index 12f9301..961d7c3 100644 --- a/tests/test_company_runtime_suspend_resume.py +++ b/tests/test_company_runtime_suspend_resume.py @@ -74,6 +74,19 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): external_provider_session_id: str = "provider-session-1", ) -> tuple[CompanyWorkItemRuntimePlan, Task]: plan = self._plan(profile) + await store.save_task( + Task( + id=f"ui-anchor-{parent_session_id}", + title="Company chat", + session_id=parent_session_id, + project_id="proj1", + status=TaskStatus.IDLE, + metadata={ + "exec_mode": "company", + "company_profile": profile, + }, + ) + ) await store.save_delegation_work_item( DelegationWorkItem( work_item_id=work_item_id, @@ -1445,7 +1458,7 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): self.assertNotIn("external_resume_session_id", resumed_task.metadata) self.assertEqual(resumed_task.metadata["external_resume_fallback"], "context_replay") - async def test_company_runtime_checkpoint_resolves_before_long_execute(self) -> None: + async def test_company_runtime_checkpoint_stays_resuming_during_long_execute(self) -> None: store = await self._store() _, task = await self._seed_runtime(store) engine = self._engine(store) @@ -1472,7 +1485,7 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): ) captured["resuming_count_during_execute"] = len(resuming) captured["resolved_count_during_execute"] = len(resolved) - captured["resume_state_during_execute"] = resolved[0].payload.get("resume_state") if resolved else "" + captured["resume_state_during_execute"] = resuming[0].payload.get("resume_state") if resuming else "" return "runtime resumed" engine.company_executor = DummyCompanyExecutor() @@ -1489,9 +1502,9 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): statuses=["resolved"], ) - self.assertEqual(captured["resuming_count_during_execute"], 0) - self.assertEqual(captured["resolved_count_during_execute"], 1) - self.assertEqual(captured["resume_state_during_execute"], "handoff_complete") + self.assertEqual(captured["resuming_count_during_execute"], 1) + self.assertEqual(captured["resolved_count_during_execute"], 0) + self.assertEqual(captured["resume_state_during_execute"], "resuming") self.assertEqual(len(resolved), 1) self.assertEqual(resolved[0].payload.get("resume_state"), "handoff_complete") @@ -1537,10 +1550,24 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): checkpoint_types=["company_runtime_suspended"], statuses=["resuming"], ) + refreshed_task = await store.get_task(task.id) + refreshed_item = await store.get_delegation_work_item("work-item-1") self.assertEqual(len(pending), 1) self.assertEqual(resuming, []) self.assertEqual(pending[0].payload.get("resume_state"), "failed_before_handoff") + assert refreshed_task is not None + assert refreshed_item is not None + self.assertEqual( + refreshed_task.metadata.get("dispatch_hold"), + "company_runtime_suspended", + ) + self.assertEqual( + refreshed_item.metadata.get("dispatch_hold"), + "company_runtime_suspended", + ) + self.assertEqual(refreshed_item.claimed_by_role_runtime_session_id, "") + self.assertEqual(refreshed_item.claimed_by_seat_id, "") async def test_suspend_is_parent_session_idempotent(self) -> None: store = await self._store() @@ -1831,22 +1858,16 @@ class CompanyRuntimeSuspendResumeTests(unittest.IsolatedAsyncioTestCase): async def test_continue_clears_parent_runtime_stop_marker(self) -> None: store = await self._store() _, task = await self._seed_runtime(store) - parent = Task( - id="parent-task", - title="Parent company runtime", - session_id="sess-parent", - parent_session_id="", - status=TaskStatus.RUNNING, - project_id="proj1", - metadata={ - "exec_mode": "company", - "company_profile": "corporate", - "company_runtime_stop_state": "suspended", - "company_runtime_stop_intent_id": "intent-1", - "company_runtime_stop_marked_at": "2026-04-29T11:02:40", - "company_runtime_suspended_at": "2026-04-29T11:02:40", - }, - ) + parent = await store.get_task("ui-anchor-sess-parent") + assert parent is not None + parent.status = TaskStatus.RUNNING + parent.metadata = { + **dict(parent.metadata or {}), + "company_runtime_stop_state": "suspended", + "company_runtime_stop_intent_id": "intent-1", + "company_runtime_stop_marked_at": "2026-04-29T11:02:40", + "company_runtime_suspended_at": "2026-04-29T11:02:40", + } await store.save_task(parent) engine = self._engine(store) await engine.suspend_company_runtime( diff --git a/tests/test_engine_pid.py b/tests/test_engine_pid.py deleted file mode 100644 index 0cfb829..0000000 --- a/tests/test_engine_pid.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import annotations - -import os -import unittest -from unittest.mock import patch - -from opc import engine as engine_module -from opc.engine import OPCEngine - - -class EnginePidProbeTests(unittest.TestCase): - def test_current_process_is_running(self) -> None: - self.assertTrue(OPCEngine._pid_is_running(os.getpid())) - - def test_posix_probe_treats_unexpected_oserror_as_not_running(self) -> None: - with patch.object(engine_module.os, "name", "posix"), patch.object( - engine_module.os, - "kill", - side_effect=OSError("platform probe failed"), - ): - self.assertFalse(OPCEngine._pid_is_running(12345)) - diff --git a/tests/test_engine_runtime_recovery.py b/tests/test_engine_runtime_recovery.py new file mode 100644 index 0000000..5f1e0a4 --- /dev/null +++ b/tests/test_engine_runtime_recovery.py @@ -0,0 +1,1871 @@ +from __future__ import annotations + +import os +import asyncio +from datetime import datetime, timedelta +from functools import wraps +from pathlib import Path +from types import SimpleNamespace +from unittest.mock import AsyncMock + +import pytest + +from opc.core.active_task_runs import ActiveTaskRunRegistry +from opc.core.models import ( + CompanyMemberSession, + DelegationWorkItem, + ExecutionCheckpoint, + ExternalSession, + Phase, + Task, + TaskStatus, +) +from opc.database.store import OPCStore +from opc.engine import OPCEngine +from opc.layer2_organization.company_mode import CompanyWorkItemExecutor +from opc.layer2_organization.org_work_item_planner import ( + CompanyWorkItemRuntimePlan, + WorkItemProjectionSpec, + serialize_company_work_item_plan, +) +from opc.layer2_organization.work_item_links import set_linked_work_item_id + + +def _async_test(func): + @wraps(func) + def runner(*args, **kwargs): + return asyncio.run(func(*args, **kwargs)) + + return runner + + +def _runtime_plan() -> CompanyWorkItemRuntimePlan: + return CompanyWorkItemRuntimePlan( + profile="corporate", + projections=[ + WorkItemProjectionSpec( + projection_id="execution", + turn_type="execute", + title="Execution", + summary="Execute the work.", + role_id="executor", + ) + ], + metadata={"execution_model": "multi_team_org"}, + ) + + +def _runtime_task(*, task_id: str, status: TaskStatus, metadata: dict | None = None) -> Task: + return Task( + id=task_id, + title="Execution", + session_id=f"role-session-{task_id}", + parent_session_id="root-session", + project_id="project-a", + status=status, + metadata={ + "work_item_projection_id": "execution", + "work_item_runtime": True, + "execution_model": "multi_team_org", + "company_work_item_plan": serialize_company_work_item_plan(_runtime_plan()), + **dict(metadata or {}), + }, + ) + + +def _ui_anchor(*, status: TaskStatus = TaskStatus.IDLE) -> Task: + return Task( + id="ui-anchor", + title="Company chat", + session_id="root-session", + project_id="project-a", + status=status, + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + + +@pytest.mark.parametrize("pid", [None, os.getpid(), 99999999]) +@_async_test +async def test_startup_creates_exactly_one_checkpoint_without_persisted_liveness( + tmp_path: Path, + pid: int | None, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + task = _runtime_task(task_id="running-task", status=TaskStatus.RUNNING) + await store.save_task(task) + await store.save_external_session( + ExternalSession( + agent_type="codex", + project_id="project-a", + session_id="codex:project-a:running-task", + opc_session_id=str(task.session_id or ""), + task_id=task.id, + workspace_path=str(tmp_path), + run_mode="interactive", + status="working", + metadata={ + **({"pid": pid} if pid is not None else {}), + "status_heartbeat_seconds": 30, + }, + updated_at=datetime.now(), + ) + ) + engine = OPCEngine(project_id="project-a") + engine.store = store + engine.company_executor = SimpleNamespace(execute=AsyncMock()) + + assert await engine._reconcile_interrupted_project_tasks() == 1 + assert await engine._reconcile_interrupted_project_tasks() == 0 + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending", "resuming"], + ) + + assert len(checkpoints) == 1 + engine.company_executor.execute.assert_not_awaited() + finally: + await store.close() + + +@_async_test +async def test_startup_normalizes_duplicate_active_scope_checkpoints( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + task = _runtime_task( + task_id="duplicate-checkpoint-task", + status=TaskStatus.RUNNING, + ) + await store.save_task(task) + older = ExecutionCheckpoint( + checkpoint_id="checkpoint-older", + project_id="project-a", + session_id="root-session", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id=task.id, + payload={"reason": "older"}, + ) + winner = ExecutionCheckpoint( + checkpoint_id="checkpoint-winner", + project_id="project-a", + session_id="root-session", + checkpoint_type="company_runtime_suspended", + status="resuming", + task_id=task.id, + payload={"reason": "winner"}, + ) + winner.updated_at = older.updated_at + timedelta(microseconds=1) + await store.save_execution_checkpoint(older) + await store.save_execution_checkpoint(winner) + + engine = OPCEngine(project_id="project-a") + engine.store = store + await engine._reconcile_interrupted_project_tasks() + + active = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=[ + "company_runtime_interrupted", + "company_runtime_suspended", + ], + statuses=["pending", "resuming"], + ) + assert [checkpoint.checkpoint_id for checkpoint in active] == [ + winner.checkpoint_id + ] + assert active[0].status == "pending" + + await store.resolve_execution_checkpoint(winner.checkpoint_id) + assert await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=[ + "company_runtime_interrupted", + "company_runtime_suspended", + ], + statuses=["pending", "resuming"], + ) == [] + all_rows = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + ) + by_id = {checkpoint.checkpoint_id: checkpoint for checkpoint in all_rows} + assert by_id[older.checkpoint_id].status == "superseded" + assert by_id[winner.checkpoint_id].status == "resolved" + finally: + await store.close() + + +@_async_test +async def test_legacy_failed_interruption_is_migrated_but_business_failure_is_not( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + legacy = _runtime_task( + task_id="legacy-interrupted", + status=TaskStatus.FAILED, + metadata={ + "interrupted_recovery": { + "previous_status": "running", + "reason": "process disappeared", + } + }, + ) + legacy.result = { + "content": "interrupted", + "artifacts": { + "interrupted": True, + "interrupted_previous_status": "running", + }, + } + await store.save_delegation_work_item( + DelegationWorkItem( + work_item_id="legacy-work-item", + run_id="legacy-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Legacy work", + kind="execute", + projection_id="execution", + phase=Phase.PAUSED, + ) + ) + set_linked_work_item_id(legacy, "legacy-work-item") + await store.save_task(legacy) + await store.link_work_item_runtime_task("legacy-work-item", legacy.id) + + # Use a separate scope so the genuine failure cannot be included in + # the legacy task's scope checkpoint. + genuine = _runtime_task( + task_id="business-failure", + status=TaskStatus.FAILED, + metadata={"interrupted_recovery": {"previous_status": "running"}}, + ) + genuine.parent_session_id = "failed-root-session" + genuine.result = { + "content": "real failure", + "artifacts": {"interrupted": True, "interrupted_previous_status": "running"}, + } + await store.save_delegation_work_item( + DelegationWorkItem( + work_item_id="failed-work-item", + run_id="failed-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Failed work", + kind="execute", + projection_id="execution", + phase=Phase.FAILED, + ) + ) + set_linked_work_item_id(genuine, "failed-work-item") + await store.save_task(genuine) + await store.link_work_item_runtime_task("failed-work-item", genuine.id) + + engine = OPCEngine(project_id="project-a") + engine.store = store + await engine._reconcile_interrupted_project_tasks() + + migrated = await store.get_task(legacy.id) + untouched = await store.get_task(genuine.id) + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending", "resuming"], + ) + failed_checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="failed-root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending", "resuming"], + ) + + assert migrated is not None + assert migrated.status != TaskStatus.FAILED + assert "interrupted_recovery" not in migrated.metadata + assert not (migrated.result or {}).get("artifacts", {}).get("interrupted") + assert checkpoints[0].payload["legacy_interrupted_recovery"][0]["task_id"] == legacy.id + assert untouched is not None and untouched.status == TaskStatus.FAILED + assert failed_checkpoints == [] + finally: + await store.close() + + +@_async_test +async def test_legacy_migration_does_not_change_task_before_checkpoint_commit( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + legacy = _runtime_task( + task_id="legacy-crash-window", + status=TaskStatus.FAILED, + metadata={"interrupted_recovery": {"previous_status": "running"}}, + ) + await store.save_task(legacy) + engine = OPCEngine(project_id="project-a") + engine.store = store + engine._save_company_runtime_suspend_checkpoint = AsyncMock( + side_effect=RuntimeError("checkpoint write failed") + ) + + with pytest.raises(RuntimeError, match="checkpoint write failed"): + await engine._reconcile_interrupted_project_tasks() + + persisted = await store.get_task(legacy.id) + assert persisted is not None and persisted.status == TaskStatus.FAILED + assert persisted.metadata["interrupted_recovery"]["previous_status"] == "running" + finally: + await store.close() + + +@_async_test +async def test_initialize_fails_closed_when_startup_checkpoint_write_fails( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + await store.save_task( + _runtime_task(task_id="startup-write-failure", status=TaskStatus.RUNNING) + ) + engine = OPCEngine( + opc_home=tmp_path / "opc-home", + project_id="project-a", + store=store, + owns_store=False, + ) + engine._save_company_runtime_suspend_checkpoint = AsyncMock( + side_effect=RuntimeError("checkpoint write failed") + ) + + with pytest.raises(RuntimeError, match="checkpoint write failed"): + await engine.initialize() + + assert not engine._initialized + finally: + await store.close() + + +@_async_test +async def test_shutdown_preparation_reuses_existing_checkpoint(tmp_path: Path) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + registry = ActiveTaskRunRegistry() + try: + task = _runtime_task(task_id="active-task", status=TaskStatus.RUNNING) + work_item = DelegationWorkItem( + work_item_id="active-work-item", + run_id="active-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Active work", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + claimed_by_role_runtime_session_id="runtime-session", + claimed_by_seat_id="seat::executor", + metadata={ + "claimed_by_role_session_id": "role-session", + "claimed_task_id": task.id, + }, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + token = registry.register("project-a", task.id) + engine = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=True, + ) + engine.store = store + + first = await engine.prepare_active_company_runtimes_for_shutdown() + task_after_first = await store.get_task(task.id) + work_item_after_first = await store.get_delegation_work_item(work_item.work_item_id) + second = await engine.prepare_active_company_runtimes_for_shutdown() + task_after_second = await store.get_task(task.id) + work_item_after_second = await store.get_delegation_work_item(work_item.work_item_id) + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending", "resuming"], + ) + + assert len(checkpoints) == 1 + assert first[0]["checkpoint_id"] == second[0]["checkpoint_id"] + assert not first[0]["idempotent"] + assert second[0]["idempotent"] + assert second[0]["task_ids"] == [] + assert task_after_first is not None and task_after_second is not None + assert task_after_second.metadata == task_after_first.metadata + assert work_item_after_first is not None and work_item_after_second is not None + assert work_item_after_second.metadata == work_item_after_first.metadata + assert engine._shutting_down + registry.unregister("project-a", task.id, token) + finally: + await store.close() + + +@_async_test +async def test_shutdown_captures_post_execution_pre_finalize_work_item( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + registry = ActiveTaskRunRegistry() + try: + await store.save_task(_ui_anchor()) + task = _runtime_task(task_id="finalize-gap-task", status=TaskStatus.DONE) + work_item = DelegationWorkItem( + work_item_id="finalize-gap-item", + run_id="finalize-gap-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Finalize gap", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + token = registry.register("project-a", task.id) + engine = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=True, + ) + engine.store = store + + prepared = await engine.prepare_active_company_runtimes_for_shutdown() + + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + persisted_task = await store.get_task(task.id) + persisted_item = await store.get_delegation_work_item(work_item.work_item_id) + assert len(prepared) == 1 + assert len(checkpoints) == 1 + assert persisted_task is not None and persisted_task.status == TaskStatus.DONE + assert persisted_task.metadata["dispatch_hold"] == "company_runtime_suspended" + assert persisted_item is not None and persisted_item.phase == Phase.RUNNING + assert persisted_item.metadata["dispatch_hold"] == "company_runtime_suspended" + registry.unregister("project-a", task.id, token) + finally: + await store.close() + + +@_async_test +async def test_shutdown_admission_close_cannot_orphan_claim_before_child_spawn( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + registry = ActiveTaskRunRegistry() + driver_ownership = None + child_execution = None + try: + await store.save_task(_ui_anchor()) + task = _runtime_task(task_id="claim-spawn-gap-task", status=TaskStatus.PENDING) + work_item = DelegationWorkItem( + work_item_id="claim-spawn-gap-item", + run_id="claim-spawn-gap-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Claim/spawn gap", + kind="execute", + projection_id="execution", + phase=Phase.READY, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + engine = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=True, + ) + engine.store = store + executor = object.__new__(CompanyWorkItemExecutor) + executor.active_task_run_registry = registry + child_started = asyncio.Event() + hold_child = asyncio.Event() + + async def run_claimed(*_args: object, **_kwargs: object): + child_started.set() + await hold_child.wait() + + executor._run_claimed_work_item = run_claimed + driver_ownership = executor.acquire_driver_ownership([task]) + assert driver_ownership is not None + with driver_ownership.bind(): + claimed = await store.claim_delegation_work_item_if_dispatchable( + work_item.work_item_id, + expected_phase=Phase.READY, + role_runtime_session_id="role-session", + seat_id="seat::executor", + task_id=task.id, + ) + assert claimed is not None + registry.close_admission() + child_execution = executor._create_claimed_work_item_task( + CompanyMemberSession( + member_session_id="member-session", + role_session_id="role-session", + role_id="executor", + seat_id="seat::executor", + ), + task, + {}, + ) + await child_started.wait() + prepared = await engine.prepare_active_company_runtimes_for_shutdown() + + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + item_after = await store.get_delegation_work_item(work_item.work_item_id) + assert len(prepared) == 1 + assert len(checkpoints) == 1 + assert item_after is not None + assert item_after.metadata["dispatch_hold"] == "company_runtime_suspended" + assert item_after.claimed_by_role_runtime_session_id == "" + finally: + if child_execution is not None: + child_execution.cancel() + await asyncio.gather(child_execution, return_exceptions=True) + if driver_ownership is not None: + driver_ownership.release() + await store.close() + + +@_async_test +async def test_startup_uses_nonterminal_work_item_over_terminal_task_projection( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + await store.save_task(_ui_anchor()) + stale_task = _runtime_task(task_id="stale-terminal-task", status=TaskStatus.DONE) + terminal_task = _runtime_task(task_id="terminal-pair-task", status=TaskStatus.DONE) + stale_item = DelegationWorkItem( + work_item_id="stale-nonterminal-item", + run_id="terminal-projection-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Still running", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + ) + terminal_item = DelegationWorkItem( + work_item_id="terminal-item", + run_id="terminal-projection-run", + cell_id="team::reviewer", + role_id="reviewer", + seat_id="seat::reviewer", + title="Already approved", + kind="review", + projection_id="review", + phase=Phase.APPROVED, + ) + for task, item in ( + (stale_task, stale_item), + (terminal_task, terminal_item), + ): + await store.save_delegation_work_item(item) + set_linked_work_item_id(task, item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(item.work_item_id, task.id) + engine = OPCEngine(project_id="project-a") + engine.store = store + + updated = await engine._reconcile_interrupted_project_tasks() + + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + stale_after = await store.get_task(stale_task.id) + stale_item_after = await store.get_delegation_work_item(stale_item.work_item_id) + terminal_after = await store.get_task(terminal_task.id) + terminal_item_after = await store.get_delegation_work_item(terminal_item.work_item_id) + assert updated >= 1 + assert len(checkpoints) == 1 + assert stale_after is not None and stale_after.status == TaskStatus.DONE + assert stale_after.metadata["dispatch_hold"] == "company_runtime_suspended" + assert stale_item_after is not None + assert stale_item_after.metadata["dispatch_hold"] == "company_runtime_suspended" + assert terminal_after is not None and terminal_after.status == TaskStatus.DONE + assert "dispatch_hold" not in terminal_after.metadata + assert terminal_item_after is not None and terminal_item_after.phase == Phase.APPROVED + assert "dispatch_hold" not in terminal_item_after.metadata + finally: + await store.close() + + +@_async_test +async def test_startup_interrupts_ready_work_despite_stale_human_task_projection( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + await store.save_task(_ui_anchor()) + task = _runtime_task( + task_id="pre-claim-task", + status=TaskStatus.AWAITING_HUMAN, + ) + work_item = DelegationWorkItem( + work_item_id="pre-claim-item", + run_id="pre-claim-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Ready before first claim", + kind="execute", + projection_id="execution", + phase=Phase.READY, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + engine = OPCEngine(project_id="project-a") + engine.store = store + engine.company_executor = SimpleNamespace(execute=AsyncMock()) + + updated = await engine._reconcile_interrupted_project_tasks() + + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + task_after = await store.get_task(task.id) + item_after = await store.get_delegation_work_item(work_item.work_item_id) + assert updated >= 1 + assert len(checkpoints) == 1 + assert task_after is not None + assert task_after.metadata["dispatch_hold"] == "company_runtime_suspended" + assert item_after is not None and item_after.phase == Phase.READY + assert item_after.metadata["dispatch_hold"] == "company_runtime_suspended" + engine.company_executor.execute.assert_not_awaited() + finally: + await store.close() + + +@_async_test +async def test_startup_preserves_stable_human_work_item_despite_stale_task_projection( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + await store.save_task(_ui_anchor()) + task = _runtime_task( + task_id="stable-human-task", + status=TaskStatus.PENDING, + ) + work_item = DelegationWorkItem( + work_item_id="stable-human-item", + run_id="stable-human-run", + cell_id="team::reviewer", + role_id="reviewer", + seat_id="seat::reviewer", + title="Awaiting human", + kind="review", + projection_id="execution", + phase=Phase.AWAITING_HUMAN, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + engine = OPCEngine(project_id="project-a") + engine.store = store + + updated = await engine._reconcile_interrupted_project_tasks() + first_task_after = await store.get_task(task.id) + assert first_task_after is not None + first_marker = dict( + first_task_after.metadata.get( + "startup_reconcile_preserved_waiting_state", + {}, + ) + or {} + ) + repeated = await engine._reconcile_interrupted_project_tasks() + + interrupted = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending", "resuming"], + ) + task_after = await store.get_task(task.id) + item_after = await store.get_delegation_work_item(work_item.work_item_id) + assert updated >= 1 + assert repeated == 0 + assert interrupted == [] + assert task_after is not None + assert task_after.status == TaskStatus.PENDING + assert task_after.metadata["startup_reconcile_preserved_waiting_state"] == first_marker + assert "dispatch_hold" not in task_after.metadata + assert item_after is not None and item_after.phase == Phase.AWAITING_HUMAN + assert "dispatch_hold" not in item_after.metadata + finally: + await store.close() + + +@_async_test +async def test_resume_candidates_use_nonterminal_work_item_over_terminal_task( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + task = _runtime_task( + task_id="terminal-resume-projection", + status=TaskStatus.DONE, + metadata={ + "dispatch_hold": "company_runtime_suspended", + "company_runtime_stop_state": "suspended", + "suspended_task_status": TaskStatus.DONE.value, + }, + ) + work_item = DelegationWorkItem( + work_item_id="terminal-resume-item", + run_id="terminal-resume-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Resume authoritative item", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + metadata={ + "dispatch_hold": "company_runtime_suspended", + "suspended_phase": Phase.RUNNING.value, + }, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + engine = OPCEngine(project_id="project-a") + engine.store = store + + candidates = await engine._company_suspend_resume_candidate_task_ids([task]) + resumed = await engine._prepare_company_runtime_tasks_for_resume( + [task], + { + "checkpoint_id": "resume-checkpoint", + "checkpoint_type": "company_runtime_interrupted", + "active_work_items": [ + { + "work_item_id": work_item.work_item_id, + "phase": Phase.RUNNING.value, + } + ], + }, + resume_task_ids={task.id}, + ) + + persisted_item = await store.get_delegation_work_item(work_item.work_item_id) + assert candidates == {task.id} + assert resumed[0].status == TaskStatus.RUNNING + assert "dispatch_hold" not in resumed[0].metadata + assert persisted_item is not None and persisted_item.phase == Phase.RUNNING + assert not str(persisted_item.metadata.get("dispatch_hold", "") or "").strip() + finally: + await store.close() + + +@_async_test +async def test_user_stop_and_shutdown_share_exactly_one_scope_checkpoint( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + registry = ActiveTaskRunRegistry() + try: + task = _runtime_task(task_id="concurrent-task", status=TaskStatus.RUNNING) + work_item = DelegationWorkItem( + work_item_id="concurrent-work-item", + run_id="concurrent-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Concurrent work", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + ) + await store.save_task(_ui_anchor()) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + token = registry.register("project-a", task.id) + engine = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=True, + ) + engine.store = store + + stopped, prepared = await asyncio.gather( + engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="user_stop", + ), + engine.prepare_active_company_runtimes_for_shutdown(), + ) + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=[ + "company_runtime_suspended", + "company_runtime_interrupted", + ], + statuses=["pending", "resuming"], + ) + + assert stopped is not None + assert len(prepared) == 1 + assert len(checkpoints) == 1 + assert stopped["checkpoint_id"] == prepared[0]["checkpoint_id"] + assert {stopped["idempotent"], prepared[0]["idempotent"]} == {False, True} + registry.unregister("project-a", task.id, token) + finally: + await store.close() + + +@_async_test +async def test_atomic_work_item_claim_rejects_durable_hold_and_post_commit_stop( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + held = DelegationWorkItem( + work_item_id="held-claim-item", + run_id="claim-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Held claim", + kind="execute", + projection_id="held", + phase=Phase.READY, + metadata={"dispatch_hold": "company_runtime_suspended"}, + ) + await store.save_delegation_work_item(held) + rejected = await store.claim_delegation_work_item_if_dispatchable( + held.work_item_id, + expected_phase=Phase.READY, + role_runtime_session_id="role-session", + seat_id="seat::executor", + task_id="runtime-task", + ) + held_after = await store.get_delegation_work_item(held.work_item_id) + assert rejected is None + assert held_after is not None + assert held_after.claimed_by_role_runtime_session_id == "" + + revised = DelegationWorkItem( + work_item_id="revised-claim-item", + run_id="claim-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Revised claim", + kind="execute", + projection_id="revised", + phase=Phase.READY, + metadata={"manager_mutation_revision": 2}, + ) + await store.save_delegation_work_item(revised) + stale_revision = await store.claim_delegation_work_item_if_dispatchable( + revised.work_item_id, + expected_phase=Phase.READY, + role_runtime_session_id="role-session", + seat_id="seat::executor", + task_id="runtime-task", + work_item_revision=1, + ) + revised_after = await store.get_delegation_work_item(revised.work_item_id) + assert stale_revision is None + assert revised_after is not None + assert revised_after.phase == Phase.READY + assert revised_after.claimed_by_role_runtime_session_id == "" + + raced = DelegationWorkItem( + work_item_id="post-commit-stop-item", + run_id="claim-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Post-commit stop", + kind="execute", + projection_id="raced", + phase=Phase.READY, + ) + await store.save_delegation_work_item(raced) + original_get = store.get_delegation_work_item + stop_injected = False + + async def get_after_stop(work_item_id: str): + nonlocal stop_injected + if work_item_id == raced.work_item_id and not stop_injected: + stop_injected = True + await store.update_delegation_work_item( + work_item_id, + metadata_updates={ + "dispatch_hold": "company_runtime_suspended", + "claimed_by_role_session_id": "", + "claimed_task_id": "", + }, + claimed_by_role_runtime_session_id="", + claimed_by_seat_id="", + ) + return await original_get(work_item_id) + + store.get_delegation_work_item = get_after_stop # type: ignore[method-assign] + post_commit = await store.claim_delegation_work_item_if_dispatchable( + raced.work_item_id, + expected_phase=Phase.READY, + role_runtime_session_id="role-session", + seat_id="seat::executor", + task_id="runtime-task", + ) + raced_after = await original_get(raced.work_item_id) + assert post_commit is None + assert raced_after is not None + assert raced_after.metadata["dispatch_hold"] == "company_runtime_suspended" + assert raced_after.claimed_by_role_runtime_session_id == "" + finally: + await store.close() + + +@_async_test +async def test_shared_final_decider_without_parent_uses_runtime_identity_scope( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = _ui_anchor(status=TaskStatus.RUNNING) + shared_final = Task( + id="shared-final", + title="Final decision", + session_id="root-session", + parent_session_id=None, + project_id="project-a", + status=TaskStatus.RUNNING, + metadata={ + "work_item_runtime": True, + "work_item_projection_id": "execution", + "shared_role_session": True, + "company_runtime_root_session_id": "root-session", + "company_work_item_plan": serialize_company_work_item_plan( + _runtime_plan() + ), + }, + ) + await store.save_task(anchor) + await store.save_task(shared_final) + engine = OPCEngine(project_id="project-a") + engine.store = store + + snapshot = await engine._load_company_runtime_snapshot("root-session") + reconciled = await engine._reconcile_interrupted_project_tasks() + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + + assert snapshot is not None + assert [task.id for task in snapshot[1]] == [shared_final.id] + assert reconciled == 2 + assert len(checkpoints) == 1 + refreshed_anchor = await store.get_task(anchor.id) + assert refreshed_anchor is not None + assert refreshed_anchor.status == TaskStatus.IDLE + finally: + await store.close() + + +@_async_test +async def test_successful_checkpoint_handoff_reopens_cancelled_ui_anchor( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = Task( + id="ui-anchor", + title="Company chat", + session_id="root-session", + project_id="project-a", + status=TaskStatus.CANCELLED, + metadata={}, + ) + runtime_task = _runtime_task(task_id="runtime-task", status=TaskStatus.BLOCKED) + await store.save_task(anchor) + await store.save_task(runtime_task) + checkpoint = ExecutionCheckpoint( + project_id="project-a", + session_id="root-session", + checkpoint_type="company_runtime_interrupted", + task_id=runtime_task.id, + payload={"task_ids": [runtime_task.id], "parent_session_id": "root-session"}, + ) + await store.save_execution_checkpoint(checkpoint) + engine = OPCEngine(project_id="project-a") + engine.store = store + engine.company_executor = SimpleNamespace() + engine._prepare_company_runtime_tasks_for_resume = AsyncMock( + return_value=[runtime_task] + ) + engine._reset_company_executor_runtime_for_resume = AsyncMock() + engine._clear_company_runtime_parent_stop_state = AsyncMock() + + handed_off = await engine._handoff_company_suspend_checkpoint( + checkpoint, + payload=dict(checkpoint.payload), + parent_session_id="root-session", + tasks=[runtime_task], + ) + + still_cancelled = await store.get_task(anchor.id) + resuming = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["resuming"], + ) + assert handed_off is not None + handed_off_tasks, driver_ownership = handed_off + assert handed_off_tasks == [runtime_task] + assert driver_ownership is not None + driver_ownership.release() + assert still_cancelled is not None + assert still_cancelled.status == TaskStatus.CANCELLED + assert len(resuming) == 1 + + await engine._complete_company_suspend_checkpoint_resume( + checkpoint, + parent_session_id="root-session", + ) + + reopened = await store.get_task(anchor.id) + persisted_checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["resolved"], + ) + assert reopened is not None and reopened.status == TaskStatus.IDLE + assert len(persisted_checkpoints) == 1 + finally: + await store.close() + + +@_async_test +async def test_executor_failure_restores_pending_checkpoint_and_durable_holds( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = _ui_anchor(status=TaskStatus.CANCELLED) + task = _runtime_task(task_id="failing-task", status=TaskStatus.RUNNING) + work_item = DelegationWorkItem( + work_item_id="failing-work-item", + run_id="failing-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Failing work", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + claimed_by_role_runtime_session_id="role-runtime", + claimed_by_seat_id="seat::executor", + metadata={ + "claimed_by_role_session_id": "role-session", + "claimed_task_id": task.id, + }, + ) + await store.save_task(anchor) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + engine = OPCEngine(project_id="project-a") + engine.store = store + suspended = await engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="user_stop", + ) + assert suspended is not None + checkpoint = ( + await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + engine.company_executor = SimpleNamespace( + execute=AsyncMock(side_effect=RuntimeError("executor failed")) + ) + + with pytest.raises(RuntimeError, match="executor failed"): + await engine._resume_company_suspend_checkpoint(checkpoint, "continue") + + pending = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + refreshed_task = await store.get_task(task.id) + refreshed_item = await store.get_delegation_work_item(work_item.work_item_id) + refreshed_anchor = await store.get_task(anchor.id) + assert len(pending) == 1 + assert pending[0].payload["resume_state"] == "failed_during_execution" + assert refreshed_task is not None + assert refreshed_task.metadata["dispatch_hold"] == "company_runtime_suspended" + assert refreshed_task.metadata["company_runtime_stop_state"] == "suspended" + assert refreshed_item is not None + assert refreshed_item.metadata["dispatch_hold"] == "company_runtime_suspended" + assert refreshed_item.claimed_by_role_runtime_session_id == "" + assert refreshed_item.claimed_by_seat_id == "" + assert refreshed_anchor is not None + assert refreshed_anchor.status == TaskStatus.CANCELLED + finally: + await store.close() + + +@_async_test +async def test_concurrent_resume_requests_execute_checkpoint_once(tmp_path: Path) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + await store.save_task(_ui_anchor()) + task = _runtime_task(task_id="single-resume-task", status=TaskStatus.RUNNING) + await store.save_task(task) + engine = OPCEngine(project_id="project-a") + engine.store = store + await engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="user_stop", + ) + checkpoint = ( + await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + execute_started = asyncio.Event() + allow_execute = asyncio.Event() + calls = 0 + + async def execute(_plan, _tasks): + nonlocal calls + calls += 1 + execute_started.set() + await allow_execute.wait() + return "resumed once" + + engine.company_executor = SimpleNamespace(execute=execute) + first = asyncio.create_task( + engine._resume_company_suspend_checkpoint(checkpoint, "continue") + ) + await execute_started.wait() + persisted = ( + await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["resuming"], + ) + )[0] + + second = await engine._resume_company_suspend_checkpoint( + persisted, + "continue", + ) + allow_execute.set() + first_result = await first + + assert calls == 1 + assert "already being resumed" in second + assert "resumed once" in first_result + resolved = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["resolved"], + ) + assert len(resolved) == 1 + finally: + await store.close() + + +@_async_test +async def test_separate_controllers_atomically_claim_checkpoint_once( + tmp_path: Path, +) -> None: + db_path = tmp_path / "tasks.db" + first_store = OPCStore(db_path) + second_store = OPCStore(db_path) + await first_store.initialize() + try: + await first_store.save_task(_ui_anchor()) + task = _runtime_task( + task_id="cross-controller-resume-task", + status=TaskStatus.RUNNING, + ) + work_item = DelegationWorkItem( + work_item_id="cross-controller-work-item", + run_id="cross-controller-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Cross-controller work", + kind="execute", + projection_id="execution", + phase=Phase.RUNNING, + ) + await first_store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await first_store.save_task(task) + await first_store.link_work_item_runtime_task(work_item.work_item_id, task.id) + setup_engine = OPCEngine(project_id="project-a") + setup_engine.store = first_store + await setup_engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="user_stop", + ) + await second_store.initialize() + + first_checkpoint = ( + await first_store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + second_checkpoint = ( + await second_store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + first_engine = OPCEngine(project_id="project-a") + second_engine = OPCEngine(project_id="project-a") + first_engine.store = first_store + second_engine.store = second_store + calls = 0 + + async def execute(_plan, _tasks): + nonlocal calls + calls += 1 + return "claimed" + + first_engine.company_executor = SimpleNamespace(execute=execute) + second_engine.company_executor = SimpleNamespace(execute=execute) + + # Hold both controllers after their independent pending reads so the + # conditional UPDATE, rather than scheduling luck, decides ownership. + both_read = asyncio.Event() + read_count = 0 + + async def resolve_anchor(**_kwargs): + nonlocal read_count + read_count += 1 + if read_count == 2: + both_read.set() + await both_read.wait() + return "ui-anchor" + + first_engine._resolve_company_runtime_ui_anchor_task_id = resolve_anchor + second_engine._resolve_company_runtime_ui_anchor_task_id = resolve_anchor + + results = await asyncio.gather( + first_engine._resume_company_suspend_checkpoint( + first_checkpoint, + "continue", + ), + second_engine._resume_company_suspend_checkpoint( + second_checkpoint, + "continue", + ), + ) + + assert calls == 1 + assert sum("already being resumed" in result for result in results) == 1 + resolved = await first_store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["resolved"], + ) + assert len(resolved) == 1 + finally: + await second_store.close() + await first_store.close() + + +@_async_test +async def test_runtime_without_ui_anchor_resumes_without_promoting_work_item( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + task = _runtime_task(task_id="headless-runtime-task", status=TaskStatus.RUNNING) + await store.save_task(task) + engine = OPCEngine(project_id="project-a") + engine.store = store + await engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="user_stop", + ) + checkpoint = ( + await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + engine.company_executor = SimpleNamespace( + execute=AsyncMock(return_value="headless resumed") + ) + + result = await engine._resume_company_suspend_checkpoint( + checkpoint, + "continue", + ) + + resolved = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["resolved"], + ) + refreshed = await store.get_task(task.id) + assert "headless resumed" in result + assert len(resolved) == 1 + assert resolved[0].payload.get("ui_anchor_task_id") == "" + assert refreshed is not None + assert refreshed.status != TaskStatus.IDLE + finally: + await store.close() + + +@_async_test +async def test_canonical_suspend_wins_real_executor_result_commit_race( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + task = _runtime_task(task_id="racing-task", status=TaskStatus.PENDING) + task.assigned_to = "executor" + task.metadata.update({ + "runtime_model": "multi_team_org", + "work_item_role_id": "executor", + "work_item_execution_strategy": "native", + }) + work_item = DelegationWorkItem( + work_item_id="racing-work-item", + run_id="racing-run", + cell_id="team::executor", + role_id="executor", + seat_id="seat::executor", + title="Racing work", + kind="execute", + projection_id="execution", + phase=Phase.READY, + ) + await store.save_delegation_work_item(work_item) + set_linked_work_item_id(task, work_item.work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item.work_item_id, task.id) + + run_started = asyncio.Event() + allow_result = asyncio.Event() + + async def run_once(_task: Task): + run_started.set() + await allow_result.wait() + return SimpleNamespace( + status=TaskStatus.DONE, + content="must not commit", + artifacts={}, + ) + + class OrgEngine: + @staticmethod + def get_role_for_work_item(_role_id, _tags): + return SimpleNamespace( + role_id="executor", + preferred_external_agent=None, + default_agent=None, + tools=[], + ) + + engine = OPCEngine(project_id="project-a") + engine.store = store + engine._run_task_once = run_once + executor = CompanyWorkItemExecutor( + org_engine=OrgEngine(), + communication=None, + approval_engine=SimpleNamespace(), + memory=None, + execute_task=engine._execute_task, + save_task=store.save_task, + store=store, + ) + + execution = asyncio.create_task( + executor._run_work_item(task, {"execution": task}) + ) + await run_started.wait() + suspended = await engine.suspend_company_runtime( + origin_task_id=task.id, + session_id="root-session", + reason="service_shutdown", + checkpoint_type="company_runtime_interrupted", + ) + allow_result.set() + with pytest.raises(asyncio.CancelledError): + await execution + + checkpoints = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_interrupted"], + statuses=["pending"], + ) + refreshed_task = await store.get_task(task.id) + refreshed_item = await store.get_delegation_work_item(work_item.work_item_id) + assert suspended is not None + assert len(checkpoints) == 1 + assert refreshed_task is not None + assert refreshed_task.metadata["dispatch_hold"] == "company_runtime_suspended" + assert refreshed_task.metadata["company_runtime_suspend_checkpoint_type"] == "company_runtime_interrupted" + assert refreshed_task.result is None + assert refreshed_item is not None + assert refreshed_item.phase not in {Phase.APPROVED, Phase.FAILED, Phase.CANCELLED} + assert refreshed_item.metadata["dispatch_hold"] == "company_runtime_suspended" + finally: + await store.close() + + +@pytest.mark.parametrize("interrupt_kind", ["stop", "shutdown"]) +@_async_test +async def test_stop_or_shutdown_cannot_release_remaining_final_decider_work( + tmp_path: Path, + interrupt_kind: str, +) -> None: + store = OPCStore(tmp_path / f"tasks-{interrupt_kind}.db") + await store.initialize() + registry = ActiveTaskRunRegistry() + token = "" + try: + plan = CompanyWorkItemRuntimePlan( + profile="corporate", + projections=[ + WorkItemProjectionSpec( + projection_id="final", + turn_type="deliver", + title="Final decision", + summary="Arbitrate the follow-up.", + role_id="ceo", + ), + WorkItemProjectionSpec( + projection_id="worker", + turn_type="execute", + title="Worker", + summary="Continue implementation.", + role_id="engineer", + ), + ], + metadata={ + "execution_model": "multi_team_org", + "final_decider_role_id": "ceo", + }, + ) + serialized_plan = serialize_company_work_item_plan(plan) + await store.save_task(_ui_anchor()) + final_task = Task( + id="final-task", + title="Final decision", + session_id="final-session", + parent_session_id="root-session", + project_id="project-a", + assigned_to="ceo", + status=TaskStatus.RUNNING, + metadata={ + "work_item_runtime": True, + "work_item_projection_id": "final", + "company_work_item_plan": serialized_plan, + }, + ) + worker_task = Task( + id="worker-task", + title="Worker", + session_id="worker-session", + parent_session_id="root-session", + project_id="project-a", + assigned_to="engineer", + status=TaskStatus.RUNNING, + metadata={ + "work_item_runtime": True, + "work_item_projection_id": "worker", + "company_work_item_plan": serialized_plan, + }, + ) + for task, work_item_id, projection, role in ( + (final_task, "final-item", "final", "ceo"), + (worker_task, "worker-item", "worker", "engineer"), + ): + await store.save_delegation_work_item( + DelegationWorkItem( + work_item_id=work_item_id, + run_id="final-run", + cell_id=f"team::{role}", + role_id=role, + seat_id=f"seat::{role}", + title=task.title, + kind="deliver" if role == "ceo" else "execute", + projection_id=projection, + phase=Phase.RUNNING, + ) + ) + set_linked_work_item_id(task, work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item_id, task.id) + + engine = OPCEngine( + project_id="project-a", + active_task_run_registry=registry, + owns_active_task_run_registry=True, + ) + engine.store = store + engine.company_executor = SimpleNamespace(execute=AsyncMock()) + await engine.suspend_company_runtime( + origin_task_id=worker_task.id, + session_id="root-session", + reason="user_stop", + ) + checkpoint = ( + await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + )[0] + loaded = await engine._load_company_suspend_checkpoint_runtime(checkpoint) + assert loaded is not None + payload, parent_session_id, loaded_plan, tasks = loaded + handoff = await engine._handoff_company_suspend_checkpoint( + checkpoint, + payload=payload, + parent_session_id=parent_session_id, + tasks=tasks, + resume_task_ids={final_task.id}, + ) + assert handoff is not None + resumed_tasks, initial_driver_ownership = handoff + if initial_driver_ownership is not None: + initial_driver_ownership.release() + + progress_checked = asyncio.Event() + allow_remaining_handoff = asyncio.Event() + + async def final_progressed(_task_id: str) -> bool: + progress_checked.set() + await allow_remaining_handoff.wait() + return True + + engine._company_followup_target_progressed = final_progressed + continuation = asyncio.create_task( + engine._resume_remaining_company_runtime_after_final_decider( + checkpoint=checkpoint, + plan=loaded_plan, + tasks=resumed_tasks, + payload=payload, + parent_session_id=parent_session_id, + final_decider_task_id=final_task.id, + ) + ) + await progress_checked.wait() + if interrupt_kind == "stop": + await engine.suspend_company_runtime( + origin_task_id=final_task.id, + session_id="root-session", + reason="user_stop", + ) + else: + token = registry.register("project-a", final_task.id) + await engine.prepare_active_company_runtimes_for_shutdown() + allow_remaining_handoff.set() + + continuation_owned, continuation_result = await continuation + assert not continuation_owned + assert continuation_result is None + engine.company_executor.execute.assert_not_awaited() + pending = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + assert len(pending) == 1 + for task_id, work_item_id in ( + (final_task.id, "final-item"), + (worker_task.id, "worker-item"), + ): + refreshed_task = await store.get_task(task_id) + refreshed_item = await store.get_delegation_work_item(work_item_id) + assert refreshed_task is not None + assert refreshed_item is not None + assert refreshed_task.metadata["dispatch_hold"] == "company_runtime_suspended" + assert refreshed_item.metadata["dispatch_hold"] == "company_runtime_suspended" + finally: + if token: + registry.unregister("project-a", final_task.id, token) + await store.close() + + +@_async_test +async def test_final_decider_without_arbitration_keeps_multi_item_checkpoint_pending( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + plan = CompanyWorkItemRuntimePlan( + profile="corporate", + projections=[ + WorkItemProjectionSpec( + projection_id="final", + turn_type="deliver", + title="Final decision", + summary="Arbitrate the follow-up.", + role_id="ceo", + ), + WorkItemProjectionSpec( + projection_id="worker", + turn_type="execute", + title="Worker", + summary="Continue implementation.", + role_id="engineer", + ), + ], + metadata={ + "execution_model": "multi_team_org", + "final_decider_role_id": "ceo", + }, + ) + serialized_plan = serialize_company_work_item_plan(plan) + await store.save_task(_ui_anchor()) + final_task = Task( + id="final-task-no-arbitration", + title="Final decision", + session_id="final-session-no-arbitration", + parent_session_id="root-session", + project_id="project-a", + assigned_to="ceo", + status=TaskStatus.RUNNING, + metadata={ + "work_item_runtime": True, + "work_item_projection_id": "final", + "company_work_item_plan": serialized_plan, + }, + ) + worker_task = Task( + id="worker-task-still-held", + title="Worker", + session_id="worker-session-still-held", + parent_session_id="root-session", + project_id="project-a", + assigned_to="engineer", + status=TaskStatus.RUNNING, + metadata={ + "work_item_runtime": True, + "work_item_projection_id": "worker", + "company_work_item_plan": serialized_plan, + }, + ) + for task, work_item_id, projection, role in ( + (final_task, "final-item-no-arbitration", "final", "ceo"), + (worker_task, "worker-item-still-held", "worker", "engineer"), + ): + await store.save_delegation_work_item( + DelegationWorkItem( + work_item_id=work_item_id, + run_id="no-arbitration-run", + cell_id=f"team::{role}", + role_id=role, + seat_id=f"seat::{role}", + title=task.title, + kind="deliver" if role == "ceo" else "execute", + projection_id=projection, + phase=Phase.RUNNING, + ) + ) + set_linked_work_item_id(task, work_item_id) + await store.save_task(task) + await store.link_work_item_runtime_task(work_item_id, task.id) + + engine = OPCEngine(project_id="project-a") + engine.store = store + engine.company_executor = SimpleNamespace(execute=AsyncMock()) + engine._resume_company_runtime_via_final_decider = AsyncMock( + return_value="Final-decider turn returned without arbitration." + ) + suspended = await engine.suspend_company_runtime( + origin_task_id=worker_task.id, + session_id="root-session", + reason="user_stop", + ) + assert suspended is not None + active = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + assert len(active) == 1 + checkpoint = active[0] + + response = await engine._resume_company_suspend_checkpoint_via_final_decider( + checkpoint, + "Continue and arbitrate the remaining work.", + ) + + pending = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["pending"], + ) + resolved = await store.get_execution_checkpoints( + project_id="project-a", + session_id="root-session", + checkpoint_types=["company_runtime_suspended"], + statuses=["resolved"], + ) + assert len(pending) == 1 + assert pending[0].checkpoint_id == checkpoint.checkpoint_id + assert pending[0].payload["resume_state"] == "awaiting_final_decider_action" + assert resolved == [] + assert "durable arbitration action" in response + assert "Resumed remaining company runtime" not in response + engine.company_executor.execute.assert_not_awaited() + for task_id, work_item_id in ( + (final_task.id, "final-item-no-arbitration"), + (worker_task.id, "worker-item-still-held"), + ): + refreshed_task = await store.get_task(task_id) + refreshed_item = await store.get_delegation_work_item(work_item_id) + assert refreshed_task is not None + assert refreshed_item is not None + assert refreshed_task.metadata["dispatch_hold"] == "company_runtime_suspended" + assert refreshed_item.metadata["dispatch_hold"] == "company_runtime_suspended" + finally: + await store.close() + + +@_async_test +async def test_startup_does_not_replay_resolved_checkpoint_into_ui_anchor( + tmp_path: Path, +) -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = Task( + id="crash-gap-anchor", + title="Company chat", + session_id="crash-gap-session", + project_id="project-a", + status=TaskStatus.CANCELLED, + metadata={}, + ) + await store.save_task(anchor) + checkpoint = ExecutionCheckpoint( + project_id="project-a", + session_id="crash-gap-session", + checkpoint_type="company_runtime_interrupted", + task_id="runtime-task", + status="resolved", + payload={ + "resume_state": "handoff_complete", + "ui_anchor_task_id": anchor.id, + }, + ) + await store.save_execution_checkpoint(checkpoint) + engine = OPCEngine(project_id="project-a") + engine.store = store + + assert await engine._reconcile_interrupted_project_tasks() == 0 + still_cancelled = await store.get_task(anchor.id) + assert still_cancelled is not None and still_cancelled.status == TaskStatus.CANCELLED + finally: + await store.close() diff --git a/tests/test_execution_checkpoint_cas.py b/tests/test_execution_checkpoint_cas.py new file mode 100644 index 0000000..f56a5c0 --- /dev/null +++ b/tests/test_execution_checkpoint_cas.py @@ -0,0 +1,295 @@ +from __future__ import annotations + +import asyncio +from datetime import timedelta + +from opc.core.models import ExecutionCheckpoint, Task, TaskStatus +from opc.database.store import OPCStore + + +def test_checkpoint_compare_and_set_has_one_winner_across_store_connections( + tmp_path, +) -> None: + async def scenario() -> None: + db_path = tmp_path / "tasks.db" + first_store = OPCStore(db_path) + second_store = OPCStore(db_path) + await first_store.initialize() + await second_store.initialize() + try: + checkpoint = ExecutionCheckpoint( + checkpoint_id="checkpoint-1", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="runtime-task", + payload={"reason": "service_restart"}, + ) + await first_store.save_execution_checkpoint(checkpoint) + + start = asyncio.Event() + payloads = [ + {"reason": "service_restart", "claimed_by": "office"}, + {"reason": "service_restart", "claimed_by": "cli"}, + ] + + async def claim(store: OPCStore, payload: dict[str, str]) -> bool: + await start.wait() + return await store.compare_and_set_execution_checkpoint( + checkpoint.checkpoint_id, + expected_statuses={"pending"}, + status="resuming", + payload=payload, + ) + + claims = [ + asyncio.create_task(claim(first_store, payloads[0])), + asyncio.create_task(claim(second_store, payloads[1])), + ] + start.set() + results = await asyncio.gather(*claims) + + assert results.count(True) == 1 + assert results.count(False) == 1 + winner = results.index(True) + rows = await first_store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + ) + assert len(rows) == 1 + assert rows[0].status == "resuming" + assert rows[0].payload == payloads[winner] + finally: + await second_store.close() + await first_store.close() + + asyncio.run(scenario()) + + +def test_checkpoint_get_or_create_has_one_active_row_across_store_connections( + tmp_path, +) -> None: + async def scenario() -> None: + db_path = tmp_path / "tasks.db" + first_store = OPCStore(db_path) + second_store = OPCStore(db_path) + await first_store.initialize() + await second_store.initialize() + try: + checkpoint_types = { + "company_runtime_suspended", + "company_runtime_interrupted", + } + candidates = [ + ExecutionCheckpoint( + checkpoint_id="checkpoint-office", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + task_id="runtime-task", + payload={"creator": "office"}, + ), + ExecutionCheckpoint( + checkpoint_id="checkpoint-cli", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_suspended", + task_id="runtime-task", + payload={"creator": "cli"}, + ), + ] + start = asyncio.Event() + + async def create( + store: OPCStore, + candidate: ExecutionCheckpoint, + ) -> tuple[ExecutionCheckpoint, bool]: + await start.wait() + return await store.get_or_create_active_execution_checkpoint( + candidate, + checkpoint_types=checkpoint_types, + ) + + attempts = [ + asyncio.create_task(create(first_store, candidates[0])), + asyncio.create_task(create(second_store, candidates[1])), + ] + start.set() + results = await asyncio.gather(*attempts) + + assert [created for _, created in results].count(True) == 1 + assert [created for _, created in results].count(False) == 1 + assert len({row.checkpoint_id for row, _ in results}) == 1 + + active = await first_store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + checkpoint_types=list(checkpoint_types), + statuses=["pending", "resuming"], + ) + assert len(active) == 1 + assert active[0].checkpoint_id == results[0][0].checkpoint_id + finally: + await second_store.close() + await first_store.close() + + asyncio.run(scenario()) + + +def test_checkpoint_get_or_create_normalizes_historical_active_duplicates( + tmp_path, +) -> None: + async def scenario() -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + older = ExecutionCheckpoint( + checkpoint_id="checkpoint-older", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + status="resuming", + payload={"created": "older"}, + ) + newer = ExecutionCheckpoint( + checkpoint_id="checkpoint-newer", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_suspended", + payload={"created": "newer"}, + ) + newer.updated_at = older.updated_at + timedelta(microseconds=1) + await store.save_execution_checkpoint(older) + await store.save_execution_checkpoint(newer) + + winner, created = await store.get_or_create_active_execution_checkpoint( + ExecutionCheckpoint( + checkpoint_id="checkpoint-unused", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + ), + checkpoint_types={ + "company_runtime_suspended", + "company_runtime_interrupted", + }, + ) + + assert created is False + assert winner.checkpoint_id == "checkpoint-newer" + active = await store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + statuses=["pending", "resuming"], + ) + assert [row.checkpoint_id for row in active] == ["checkpoint-newer"] + all_rows = await store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + ) + by_id = {row.checkpoint_id: row for row in all_rows} + assert by_id["checkpoint-older"].status == "superseded" + assert ( + by_id["checkpoint-older"].payload["superseded_by_checkpoint_id"] + == "checkpoint-newer" + ) + finally: + await store.close() + + asyncio.run(scenario()) + + +def test_checkpoint_completion_and_cancelled_anchor_reopen_are_atomic(tmp_path) -> None: + async def scenario() -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = Task( + id="ui-anchor", + project_id="project-a", + session_id="runtime-session", + title="Company chat", + status=TaskStatus.CANCELLED, + execution_lock=True, + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="checkpoint-1", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + status="resuming", + payload={"ui_anchor_task_id": anchor.id}, + ) + await store.save_task(anchor) + await store.save_execution_checkpoint(checkpoint) + + completed = await store.complete_execution_checkpoint_and_reopen_ui_anchor( + checkpoint.checkpoint_id, + project_id="project-a", + session_id="runtime-session", + expected_status="resuming", + status="resolved", + payload={"resume_state": "handoff_complete"}, + ui_anchor_task_id=anchor.id, + ) + + assert completed is True + assert (await store.get_task(anchor.id)).status == TaskStatus.IDLE + rows = await store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + ) + assert rows[0].status == "resolved" + assert rows[0].payload == {"resume_state": "handoff_complete"} + finally: + await store.close() + + asyncio.run(scenario()) + + +def test_checkpoint_completion_does_not_reopen_anchor_after_stop_wins(tmp_path) -> None: + async def scenario() -> None: + store = OPCStore(tmp_path / "tasks.db") + await store.initialize() + try: + anchor = Task( + id="ui-anchor", + project_id="project-a", + session_id="runtime-session", + title="Company chat", + status=TaskStatus.CANCELLED, + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="checkpoint-1", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + status="pending", + payload={"resume_state": "interrupted"}, + ) + await store.save_task(anchor) + await store.save_execution_checkpoint(checkpoint) + + completed = await store.complete_execution_checkpoint_and_reopen_ui_anchor( + checkpoint.checkpoint_id, + project_id="project-a", + session_id="runtime-session", + expected_status="resuming", + status="resolved", + payload={"resume_state": "handoff_complete"}, + ui_anchor_task_id=anchor.id, + ) + + assert completed is False + assert (await store.get_task(anchor.id)).status == TaskStatus.CANCELLED + rows = await store.get_execution_checkpoints( + project_id="project-a", + session_id="runtime-session", + ) + assert rows[0].status == "pending" + assert rows[0].payload == {"resume_state": "interrupted"} + finally: + await store.close() + + asyncio.run(scenario()) diff --git a/tests/test_office_shutdown_lifecycle.py b/tests/test_office_shutdown_lifecycle.py new file mode 100644 index 0000000..ae8b862 --- /dev/null +++ b/tests/test_office_shutdown_lifecycle.py @@ -0,0 +1,380 @@ +from __future__ import annotations + +import asyncio +from types import SimpleNamespace +from unittest.mock import AsyncMock + +from opc.core.active_task_runs import ActiveTaskRunRegistry +from opc.core.models import ExecutionCheckpoint, Task +from opc.plugins.office_ui.ws_handler import WSHandler + + +def test_ws_shutdown_checkpoints_before_cancelling_and_awaiting_sessions() -> None: + async def scenario() -> None: + events: list[str] = [] + started = asyncio.Event() + + async def execution() -> None: + started.set() + try: + await asyncio.Event().wait() + finally: + events.append("execution_finally") + + async def prepare() -> list[dict]: + events.append("checkpoint") + assert not execution_task.done() + return [] + + execution_task = asyncio.create_task(execution()) + await started.wait() + + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace() + handler._root_engine = SimpleNamespace( + prepare_active_company_runtimes_for_shutdown=prepare, + ) + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = set() + handler._active_message_tasks = set() + handler._background_tasks = {execution_task} + handler._task_bg_context = {execution_task: {"task_id": "runtime-task"}} + handler._task_bg_map = {"runtime-task": {execution_task}} + + await handler.shutdown(timeout=1.0) + + assert events == ["checkpoint", "execution_finally"] + assert execution_task.done() + + asyncio.run(scenario()) + + +def test_ws_shutdown_checkpoint_failure_does_not_cancel_execution_or_close_the_gap() -> None: + async def scenario() -> None: + released = asyncio.Event() + + async def execution() -> None: + try: + await asyncio.Event().wait() + finally: + released.set() + + execution_task = asyncio.create_task(execution()) + await asyncio.sleep(0) + + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace() + handler._root_engine = SimpleNamespace( + prepare_active_company_runtimes_for_shutdown=AsyncMock( + side_effect=RuntimeError("checkpoint unavailable") + ), + ) + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = set() + handler._active_message_tasks = set() + handler._background_tasks = {execution_task} + handler._task_bg_context = {execution_task: {"task_id": "runtime-task"}} + handler._task_bg_map = {"runtime-task": {execution_task}} + + try: + await handler.shutdown(timeout=1.0) + except RuntimeError as exc: + assert str(exc) == "checkpoint unavailable" + else: + raise AssertionError("shutdown must fail closed when checkpointing fails") + + assert not released.is_set() + assert not execution_task.done() + execution_task.cancel() + await asyncio.gather(execution_task, return_exceptions=True) + + asyncio.run(scenario()) + + +def test_ws_shutdown_rejects_background_work_scheduled_by_late_ingress() -> None: + async def scenario() -> None: + entered = False + + async def late_work() -> None: + nonlocal entered + entered = True + + handler = WSHandler.__new__(WSHandler) + handler._shutting_down = True + handler._background_tasks = set() + task = handler._track(late_work()) + await asyncio.gather(task, return_exceptions=True) + await asyncio.sleep(0) + + assert task.cancelled() + assert entered is False + assert task not in handler._background_tasks + + asyncio.run(scenario()) + + +def test_ws_shutdown_drains_queued_duplicate_handoff_before_checkpointing() -> None: + async def scenario() -> None: + registry = ActiveTaskRunRegistry() + runtime_lock = asyncio.Lock() + execution_registered = asyncio.Event() + prepare_called = asyncio.Event() + execution_released = asyncio.Event() + + async def prepare() -> list[dict]: + assert registry.is_active("project-a", "runtime-task") + assert registry.pending_handoff_count == 0 + prepare_called.set() + return [] + + root_engine = SimpleNamespace( + _active_task_run_registry=registry, + prepare_active_company_runtimes_for_shutdown=prepare, + ) + handler = WSHandler.__new__(WSHandler) + handler.engine = root_engine + handler._root_engine = root_engine + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = set() + handler._active_message_tasks = set() + handler._background_tasks = set() + handler._task_bg_context = {} + handler._task_bg_map = {} + handler._handoff_route_tasks = {} + + async def execution() -> None: + async with runtime_lock: + attempt_token = registry.register("project-a", "runtime-task") + execution_registered.set() + try: + await asyncio.Event().wait() + finally: + registry.unregister("project-a", "runtime-task", attempt_token) + execution_released.set() + + async def queued_duplicate() -> None: + async with runtime_lock: + attempt_token = registry.register("project-a", "runtime-task") + try: + await asyncio.Event().wait() + finally: + registry.unregister("project-a", "runtime-task", attempt_token) + + first_handoff = registry.reserve_handoff() + with registry.bind_handoff(first_handoff): + first = handler._track_session( + "runtime-task", + execution(), + project_id="project-a", + engine=root_engine, + ) + registry.release_handoff(first_handoff) + await execution_registered.wait() + + second_handoff = registry.reserve_handoff() + with registry.bind_handoff(second_handoff): + second = handler._track_session( + "runtime-task", + queued_duplicate(), + project_id="project-a", + engine=root_engine, + ) + registry.release_handoff(second_handoff) + await asyncio.sleep(0) + assert registry.pending_handoff_count == 1 + + await asyncio.wait_for(handler.shutdown(timeout=1.0), timeout=1.0) + + assert prepare_called.is_set() + assert execution_released.is_set() + assert first.cancelled() + assert second.cancelled() + assert registry.pending_handoff_count == 0 + assert not registry.is_active("project-a", "runtime-task") + + asyncio.run(scenario()) + + +def test_ws_shutdown_fails_closed_while_execution_cleanup_is_still_running() -> None: + async def scenario() -> None: + cancellation_started = asyncio.Event() + allow_cleanup = asyncio.Event() + + async def execution() -> None: + try: + await asyncio.Event().wait() + except asyncio.CancelledError: + cancellation_started.set() + await allow_cleanup.wait() + + execution_task = asyncio.create_task(execution()) + await asyncio.sleep(0) + + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace() + handler._root_engine = SimpleNamespace( + prepare_active_company_runtimes_for_shutdown=AsyncMock(return_value=[]), + ) + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = set() + handler._active_message_tasks = set() + handler._background_tasks = {execution_task} + handler._task_bg_context = { + execution_task: {"task_id": "runtime-task", "execution_handoff": True} + } + handler._task_bg_map = {"runtime-task": {execution_task}} + + try: + await handler.shutdown(timeout=0.01) + except RuntimeError as exc: + assert "execution task(s)" in str(exc) + else: + raise AssertionError("shutdown must not close resources before execution cleanup") + + assert cancellation_started.is_set() + assert not execution_task.done() + allow_cleanup.set() + await execution_task + + asyncio.run(scenario()) + + +def test_ws_shutdown_cancels_execution_before_waiting_for_client_close() -> None: + async def scenario() -> None: + execution_released = asyncio.Event() + close_entered = asyncio.Event() + allow_close = asyncio.Event() + + async def execution() -> None: + try: + await asyncio.Event().wait() + finally: + execution_released.set() + + class BlockingWebSocket: + async def close(self, **_kwargs: object) -> None: + close_entered.set() + await allow_close.wait() + + execution_task = asyncio.create_task(execution()) + await asyncio.sleep(0) + client = BlockingWebSocket() + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace() + handler._root_engine = SimpleNamespace( + prepare_active_company_runtimes_for_shutdown=AsyncMock(return_value=[]), + ) + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = {client} + handler._active_message_tasks = set() + handler._background_tasks = {execution_task} + handler._task_bg_context = {execution_task: {"task_id": "runtime-task"}} + handler._task_bg_map = {"runtime-task": {execution_task}} + + shutdown_task = asyncio.create_task(handler.shutdown(timeout=1.0)) + await close_entered.wait() + + assert execution_released.is_set() + assert execution_task.done() + allow_close.set() + await shutdown_task + + asyncio.run(scenario()) + + +def test_duplicate_resume_does_not_leave_shutdown_handoff_barrier_queued() -> None: + async def scenario() -> None: + registry = ActiveTaskRunRegistry() + execution_started = asyncio.Event() + execution_released = asyncio.Event() + + async def prepare() -> list[dict]: + assert registry.is_active("project-a", "runtime-task") + return [] + + root_engine = SimpleNamespace( + project_id="project-a", + _active_task_run_registry=registry, + prepare_active_company_runtimes_for_shutdown=prepare, + ) + handler = WSHandler.__new__(WSHandler) + handler.engine = root_engine + handler._root_engine = root_engine + handler.chat_store = None + handler._shutting_down = False + handler._progress_flush_task = None + handler._clients = set() + handler._active_message_tasks = set() + handler._background_tasks = set() + handler._task_bg_context = {} + handler._task_bg_map = {} + handler._company_stop_finalize_tasks = {} + handler._company_suspend_reply_locks = {} + + checkpoint = ExecutionCheckpoint( + checkpoint_id="checkpoint-1", + project_id="project-a", + session_id="runtime-session", + checkpoint_type="company_runtime_interrupted", + status="pending", + ) + task = Task( + id="ui-task", + title="Company chat", + project_id="project-a", + session_id="runtime-session", + metadata={"exec_mode": "company"}, + ) + target = { + "runtime_session_id": "runtime-session", + "checkpoint": checkpoint, + } + handler._resolve_company_runtime_target = AsyncMock(return_value=target) + + async def fake_resume(**_kwargs: object) -> None: + attempt = registry.register("project-a", "runtime-task") + execution_started.set() + try: + await asyncio.Event().wait() + finally: + registry.unregister("project-a", "runtime-task", attempt) + execution_released.set() + + handler._process_company_suspend_reply = fake_resume + + async def route_once() -> bool: + handoff = registry.reserve_handoff() + try: + with registry.bind_handoff(handoff): + return await handler._route_company_suspend_reply_if_pending( + task_id=task.id, + content="continue", + session_id=task.session_id, + task=task, + attachment_refs=None, + message_metadata=None, + user_message_id=None, + user_message_created_at=None, + run_engine=root_engine, + run_project_id="project-a", + ) + finally: + registry.release_handoff(handoff) + + assert await route_once() is True + await execution_started.wait() + assert await route_once() is True + assert registry.pending_handoff_count == 0 + assert len(handler._background_tasks) == 1 + + await asyncio.wait_for(handler.shutdown(timeout=1.0), timeout=1.0) + + assert execution_released.is_set() + assert registry.pending_handoff_count == 0 + + asyncio.run(scenario()) diff --git a/tests/test_org_mode_entrypoint.py b/tests/test_org_mode_entrypoint.py index 50550b9..f372e32 100644 --- a/tests/test_org_mode_entrypoint.py +++ b/tests/test_org_mode_entrypoint.py @@ -4,6 +4,7 @@ import asyncio from types import SimpleNamespace from unittest.mock import AsyncMock +from opc.core.active_task_runs import ActiveTaskRunRegistry from opc.core.config import OPCConfig, RoleConfig from opc.core.org_config import ( build_org_config_payload_from_config, @@ -137,6 +138,10 @@ def test_custom_runtime_initializes_with_parent_store(monkeypatch, tmp_path) -> self.store = kwargs.get("store") or object() self.owns_store = kwargs.get("owns_store") self.run_startup_reconcile = kwargs.get("run_startup_reconcile") + self.active_task_run_registry = kwargs.get("active_task_run_registry") + self.owns_active_task_run_registry = kwargs.get( + "owns_active_task_run_registry" + ) self.bound_stores = [] self.message_bus = FakeMessageBus(self) self.company_executor = SimpleNamespace(_signal_dispatcher_wake=lambda: None) @@ -164,6 +169,7 @@ def test_custom_runtime_initializes_with_parent_store(monkeypatch, tmp_path) -> parent.config = OPCConfig() parent.project_id = None parent.store = parent_store + parent._active_task_run_registry = ActiveTaskRunRegistry() parent.on_progress = None parent.on_runtime_event = None parent.on_escalation = None @@ -198,6 +204,8 @@ def test_custom_runtime_initializes_with_parent_store(monkeypatch, tmp_path) -> assert runtime.store is parent_store assert runtime.owns_store is False assert runtime.run_startup_reconcile is False + assert runtime.active_task_run_registry is parent._active_task_run_registry + assert runtime.owns_active_task_run_registry is False assert runtime.bound_stores == [] assert captured["kanban_callback_runtime"] is runtime assert callable(runtime.company_executor.on_kanban_changed) diff --git a/tests/test_phase_single_truth_invariants.py b/tests/test_phase_single_truth_invariants.py index f2e73d5..cec62e2 100644 --- a/tests/test_phase_single_truth_invariants.py +++ b/tests/test_phase_single_truth_invariants.py @@ -188,10 +188,8 @@ class DirectStatusWriteLintTest(unittest.TestCase): PATTERN = re.compile(r"\.status\s*=\s*TaskStatus\.(CANCELLED|FAILED)") MIGRATED_COMPANY_AWARE_FILES = ( "opc/plugins/office_ui/dispatcher.py", - "opc/plugins/office_ui/recovery_manager.py", "opc/plugins/office_ui/ws_handler.py", "opc/plugins/cli_board/services/actions.py", - "opc/plugins/cli_board/services/recovery.py", ) MIGRATED_FIVE_STATUS_PATTERN = re.compile( r"\.status\s*=\s*TaskStatus\.(PENDING|RUNNING|DONE|FAILED|CANCELLED)" diff --git a/tests/test_session_integration.py b/tests/test_session_integration.py index 839671b..4ace294 100644 --- a/tests/test_session_integration.py +++ b/tests/test_session_integration.py @@ -27,6 +27,7 @@ from opc.database.store import _SQLiteConnectionAdapter from opc.layer2_organization import comms as file_comms from opc.plugins.office_ui.event_adapter import EventAdapter from opc.plugins.office_ui.chat_store import ChatStore +from opc.plugins.office_ui.services.models import ServiceError # ═══════════════════════════════════════════════════════════════════════ @@ -1823,6 +1824,126 @@ class TestWSHandlerSessionSend(unittest.IsolatedAsyncioTestCase): self.assertEqual(len(ended), 1) self.handler._dispatch_session_message.assert_not_called() + async def _seed_cancelled_markerless_company_anchor(self) -> ExecutionCheckpoint: + anchor = await self.store.get_task(self.task_id) + assert anchor is not None + anchor.status = TaskStatus.CANCELLED + anchor.metadata = {} + await self.store.save_task(anchor) + await self.store.save_task(Task( + id="shared-final-decider", + title="Final decision", + project_id="test-project", + session_id=self.session_id, + parent_session_id=self.session_id, + linked_work_item_id="work-item-final", + status=TaskStatus.BLOCKED, + metadata={ + "exec_mode": "company", + "company_profile": "corporate", + "work_item_runtime": True, + "work_item_projection_id": "final", + "shared_role_session": True, + }, + )) + checkpoint = ExecutionCheckpoint( + checkpoint_id="cp-markerless-anchor", + project_id="test-project", + session_id=self.session_id, + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id="shared-final-decider", + payload={"parent_session_id": self.session_id}, + ) + await self.store.save_execution_checkpoint(checkpoint) + return checkpoint + + async def test_cancelled_markerless_company_anchor_text_routes_by_checkpoint_identity(self) -> None: + checkpoint = await self._seed_cancelled_markerless_company_anchor() + self.handler._process_company_suspend_reply = AsyncMock() + fake_bg = object() + + def _close_and_track(_task_id: str, coro: Any, **_kwargs: Any) -> object: + coro.close() + self.handler._task_bg_context[fake_bg] = {} + return fake_bg + + self.handler._track_session = MagicMock(side_effect=_close_and_track) + ws = MagicMock() + + await self.handler._handle_session_send(ws, { + "project_id": "test-project", + "task_id": self.task_id, + "content": "继续恢复这个 runtime。", + }) + + self.handler._process_company_suspend_reply.assert_called_once() + routed = self.handler._process_company_suspend_reply.call_args.kwargs + self.assertEqual(routed["ui_task_id"], self.task_id) + self.assertEqual(routed["runtime_session_id"], self.session_id) + self.assertEqual(routed["checkpoint"].checkpoint_id, checkpoint.checkpoint_id) + self.handler._track_session.assert_called_once() + anchor = await self.store.get_task(self.task_id) + assert anchor is not None + self.assertEqual(anchor.status, TaskStatus.CANCELLED) + + async def test_cancelled_company_anchor_with_resuming_checkpoint_is_not_ended_early(self) -> None: + checkpoint = await self._seed_cancelled_markerless_company_anchor() + checkpoint.status = "resuming" + await self.store.save_execution_checkpoint(checkpoint) + self.handler._process_company_suspend_reply = AsyncMock() + self.handler._process_session_message = AsyncMock() + ws = MagicMock() + + await self.handler._handle_session_send(ws, { + "project_id": "test-project", + "task_id": self.task_id, + "content": "不要重复恢复。", + }) + + ended = [ + call for call in self.handler._send_ack.await_args_list + if call.kwargs.get("error") == "session_ended" + ] + self.assertEqual(ended, []) + self.handler._process_company_suspend_reply.assert_not_called() + self.handler._process_session_message.assert_not_called() + + async def test_cancelled_markerless_company_anchor_button_routes_by_checkpoint_identity(self) -> None: + checkpoint = await self._seed_cancelled_markerless_company_anchor() + self.handler._process_company_suspend_reply = AsyncMock() + fake_bg = object() + + def _close_and_track(_task_id: str, coro: Any, **_kwargs: Any) -> object: + coro.close() + self.handler._task_bg_context[fake_bg] = {} + return fake_bg + + self.handler._track_session = MagicMock(side_effect=_close_and_track) + ws = MagicMock() + + await self.handler._handle_session_resume(ws, { + "project_id": "test-project", + "task_id": self.task_id, + "runtime_session_id": self.session_id, + "checkpoint_id": checkpoint.checkpoint_id, + }) + + self.handler._process_company_suspend_reply.assert_called_once() + routed = self.handler._process_company_suspend_reply.call_args.kwargs + self.assertEqual(routed["ui_task_id"], self.task_id) + self.assertEqual(routed["runtime_session_id"], self.session_id) + self.assertEqual(routed["checkpoint"].checkpoint_id, checkpoint.checkpoint_id) + self.handler._send_ack.assert_awaited_with( + ws, + ok=True, + runtime_session_id=self.session_id, + checkpoint_id=checkpoint.checkpoint_id, + ) + anchor = await self.store.get_task(self.task_id) + assert anchor is not None + self.assertEqual(anchor.status, TaskStatus.CANCELLED) + async def test_done_company_session_send_is_reopened_for_followup(self) -> None: """Completed company chats can continue in the same CEO/company context.""" ws = MagicMock() @@ -1980,23 +2101,23 @@ class TestWSHandlerSessionSend(unittest.IsolatedAsyncioTestCase): } await self.store.save_task(task) - self.engine.get_active_company_runtime_suspend_checkpoint = AsyncMock( - return_value=SimpleNamespace( - checkpoint_id="cp-suspended", - checkpoint_type="company_runtime_suspended", - status="pending", - payload={}, - ) - ) + await self.store.save_execution_checkpoint(ExecutionCheckpoint( + checkpoint_id="cp-suspended", + project_id="test-project", + session_id=self.session_id, + checkpoint_type="company_runtime_suspended", + status="pending", + payload={"parent_session_id": self.session_id}, + )) self.handler._process_company_suspend_reply = AsyncMock() fake_bg = object() - def _close_and_track(coro: Any) -> object: + def _close_and_track(_task_id: str, coro: Any, **_kwargs: Any) -> object: coro.close() + self.handler._task_bg_context[fake_bg] = {} return fake_bg - self.handler._track = MagicMock(side_effect=_close_and_track) - self.handler._track_session = MagicMock() + self.handler._track_session = MagicMock(side_effect=_close_and_track) await self.handler._handle_session_send(ws, { "project_id": "test-project", @@ -2004,13 +2125,39 @@ class TestWSHandlerSessionSend(unittest.IsolatedAsyncioTestCase): "content": "改成 Sapphire Tide Runner,并让 CEO 自己修改/删除/新增 work item。", }) - self.handler._track_session.assert_not_called() + self.handler._track_session.assert_called_once() self.handler._process_company_suspend_reply.assert_called_once() call = self.handler._process_company_suspend_reply.call_args.kwargs - self.assertEqual(call["parent_task_id"], self.task_id) - self.assertEqual(call["parent_session_id"], self.session_id) + self.assertEqual(call["ui_task_id"], self.task_id) + self.assertEqual(call["runtime_session_id"], self.session_id) + self.assertEqual(call["checkpoint"].checkpoint_id, "cp-suspended") self.assertEqual(call["content"], "改成 Sapphire Tide Runner,并让 CEO 自己修改/删除/新增 work item。") + async def test_rejected_company_resume_refreshes_optimistic_runtime_control(self) -> None: + task = await self.store.get_task(self.task_id) + assert task is not None + task.metadata = {"exec_mode": "company", "company_profile": "corporate"} + await self.store.save_task(task) + self.handler._refresh_runtime_control_for_client = AsyncMock() + ws = MagicMock() + + await self.handler._handle_session_resume(ws, { + "project_id": "test-project", + "task_id": self.task_id, + "runtime_session_id": self.session_id, + }) + + self.handler._send_ack.assert_awaited_once_with( + ws, + ok=False, + error="missing_checkpoint_id", + ) + self.handler._refresh_runtime_control_for_client.assert_awaited_once_with( + ws, + engine=self.engine, + project_id="test-project", + ) + async def test_session_send_persists_attachment_refs_and_dispatches_them(self) -> None: """Uploaded session attachments should be stored and forwarded into engine execution.""" ws = MagicMock() @@ -3264,6 +3411,37 @@ class TestWSHandlerSessionStop(unittest.IsolatedAsyncioTestCase): self.assertTrue(any(msg["payload"]["task_id"] == "stop-parent" and msg["payload"]["status"] == "idle" for msg in status_updates)) self.assertTrue(any(msg["payload"]["task_id"] == "stop-child" and msg["payload"]["status"] == "cancelled" for msg in status_updates)) + async def test_company_identity_failure_is_rejected_without_task_tree_cancel(self) -> None: + ws = MagicMock() + task = Task( + id="company-stop-mismatch", + title="Company runtime", + session_id="company-stop-session", + project_id="test-project", + status=TaskStatus.RUNNING, + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + await self.store.save_task(task) + self.handler._resolve_company_runtime_target = AsyncMock(return_value=None) + self.handler._cancel_task_tree = AsyncMock() + + await self.handler._handle_session_stop( + ws, + {"project_id": "test-project", "task_id": task.id}, + ) + + self.handler._cancel_task_tree.assert_not_awaited() + self.handler._send_ack.assert_awaited_once_with( + ws, + ok=False, + error="company_runtime_identity_mismatch", + project_id="test-project", + task_id=task.id, + ) + persisted = await self.store.get_task(task.id) + assert persisted is not None + self.assertEqual(persisted.status, TaskStatus.RUNNING) + # ═══════════════════════════════════════════════════════════════════════ # Test 6: WSHandler — on_opc_event child_session_created @@ -3711,7 +3889,7 @@ class TestWSHandlerSessionDetail(unittest.IsolatedAsyncioTestCase): "execution_checkpoint_lifecycle", ) - async def test_session_detail_includes_runtime_control_state(self) -> None: + async def test_session_detail_uses_controller_registry_for_runtime_control_state(self) -> None: ws = MagicMock() ws.send_json = AsyncMock() task = Task( @@ -3735,8 +3913,17 @@ class TestWSHandlerSessionDetail(unittest.IsolatedAsyncioTestCase): payload = ws.send_json.await_args.args[0]["payload"] self.assertTrue(payload["ok"]) - self.assertEqual(payload["session_state"].get("runtime_control_state"), "running") - self.assertTrue(payload["session_state"].get("can_stop")) + self.assertEqual(payload["session_state"].get("runtime_control_state"), "idle") + self.assertFalse(payload["session_state"].get("can_stop")) + + self.engine._task_runtime_is_live = AsyncMock(return_value=True) + await self.handler._handle_session_detail( + ws, + {"project_id": "test-project", "task_id": "custom-running-task"}, + ) + live_payload = ws.send_json.await_args.args[0]["payload"] + self.assertEqual(live_payload["session_state"].get("runtime_control_state"), "running") + self.assertTrue(live_payload["session_state"].get("can_stop")) async def test_session_detail_prefers_task_description_for_role_prompt_context(self) -> None: ws = MagicMock() @@ -4582,10 +4769,13 @@ class TestWSHandlerShutdown(unittest.IsolatedAsyncioTestCase): ws.send_json.assert_awaited_once() - async def test_shutdown_closes_clients_and_waits_for_active_messages(self) -> None: + async def test_shutdown_closes_clients_and_cancels_non_handoff_messages(self) -> None: ws = MagicMock() ws.closed = False ws.closing = False + self.handler._root_engine.prepare_active_company_runtimes_for_shutdown = AsyncMock( + return_value=[] + ) async def _close(*_args: Any, **_kwargs: Any) -> None: ws.closed = True @@ -4593,23 +4783,16 @@ class TestWSHandlerShutdown(unittest.IsolatedAsyncioTestCase): ws.close = AsyncMock(side_effect=_close) self.handler._clients.add(ws) - blocker = asyncio.Event() - async def _active_message() -> None: - await blocker.wait() + await asyncio.Event().wait() active_task = asyncio.create_task(_active_message()) self.handler._active_message_tasks.add(active_task) - shutdown_task = asyncio.create_task(self.handler.shutdown(timeout=0.5)) - await asyncio.sleep(0.05) - self.assertFalse(shutdown_task.done()) - - blocker.set() - await shutdown_task - await active_task + await self.handler.shutdown(timeout=0.5) ws.close.assert_awaited_once() + self.assertTrue(active_task.cancelled()) self.assertTrue(self.handler._shutting_down) @@ -4967,6 +5150,312 @@ class TestOfficeServiceExecutionIdentity(unittest.IsolatedAsyncioTestCase): async def asyncTearDown(self) -> None: await self.chat_store._db.close() + async def test_continue_uses_scope_config_for_markerless_cancelled_ui_anchor(self) -> None: + anchor = Task( + id="service-ui-anchor", + title="Company chat", + session_id="service-runtime-session", + project_id="test-project", + status=TaskStatus.CANCELLED, + metadata={}, + ) + final_decider = Task( + id="service-final-decider", + title="Final decision", + session_id="service-runtime-session", + parent_session_id="service-runtime-session", + project_id="test-project", + status=TaskStatus.BLOCKED, + linked_work_item_id="service-work-item", + metadata={ + "exec_mode": "company", + "company_profile": "corporate", + "work_item_runtime": True, + "work_item_projection_id": "final", + "shared_role_session": True, + }, + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="service-runtime-checkpoint", + project_id="test-project", + session_id="service-runtime-session", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id=final_decider.id, + payload={"parent_session_id": "service-runtime-session"}, + ) + await self.store.save_task(anchor) + await self.store.save_task(final_decider) + await self.store.save_execution_checkpoint(checkpoint) + + await self.session_service.continue_run( + project_id="test-project", + task_id=anchor.id, + runtime_session_id="service-runtime-session", + checkpoint_id=checkpoint.checkpoint_id, + content="continue", + ) + + call = self.engine.process_message.await_args + self.assertEqual(call.kwargs["mode"], "company") + self.assertEqual(call.kwargs["session_id"], "service-runtime-session") + self.assertEqual(call.kwargs["origin_task_id"], anchor.id) + self.assertEqual( + call.kwargs["message_metadata"]["response_to_checkpoint_id"], + checkpoint.checkpoint_id, + ) + persisted_anchor = await self.store.get_task(anchor.id) + assert persisted_anchor is not None + self.assertEqual(persisted_anchor.status, TaskStatus.CANCELLED) + + async def test_company_continue_preserves_requested_work_item_as_ui_channel(self) -> None: + anchor = Task( + id="service-channel-anchor", + title="Company chat", + session_id="service-channel-runtime", + project_id="test-project", + status=TaskStatus.CANCELLED, + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + work_item = Task( + id="service-channel-work-item", + title="Shared final decision", + session_id="service-channel-runtime", + parent_session_id="service-channel-runtime", + project_id="test-project", + status=TaskStatus.BLOCKED, + linked_work_item_id="service-channel-wi", + metadata={ + "exec_mode": "company", + "company_profile": "corporate", + "work_item_runtime": True, + "work_item_projection_id": "final", + "shared_role_session": True, + }, + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="service-channel-checkpoint", + project_id="test-project", + session_id="service-channel-runtime", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id=work_item.id, + payload={"parent_session_id": "service-channel-runtime"}, + ) + await self.store.save_task(anchor) + await self.store.save_task(work_item) + await self.store.save_execution_checkpoint(checkpoint) + + result = await self.session_service.continue_run( + project_id="test-project", + task_id=work_item.id, + runtime_session_id="service-channel-runtime", + checkpoint_id=checkpoint.checkpoint_id, + content="continue", + ) + + call = self.engine.process_message.await_args + self.assertEqual(result.payload["task_id"], work_item.id) + self.assertEqual(call.kwargs["session_id"], "service-channel-runtime") + self.assertEqual(call.kwargs["origin_task_id"], anchor.id) + + async def test_company_identity_failure_never_falls_back_to_task_mode_control(self) -> None: + from opc.plugins.office_ui.services.models import ServiceError + + task = Task( + id="service-company-control", + title="Company control", + session_id="service-company-session", + project_id="test-project", + status=TaskStatus.RUNNING, + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + await self.store.save_task(task) + mismatch = ServiceError( + "company_runtime_identity_mismatch", + "identity mismatch", + ) + self.session_service._resolve_company_runtime_target = AsyncMock( + side_effect=mismatch, + ) + + with self.assertRaises(ServiceError) as stop_error: + await self.session_service.stop( + project_id="test-project", + task_id=task.id, + ) + self.assertEqual(stop_error.exception.code, "company_runtime_identity_mismatch") + + with self.assertRaises(ServiceError) as continue_error: + await self.session_service.continue_run( + project_id="test-project", + task_id=task.id, + ) + self.assertEqual(continue_error.exception.code, "company_runtime_identity_mismatch") + persisted = await self.store.get_task(task.id) + assert persisted is not None + self.assertEqual(persisted.status, TaskStatus.RUNNING) + + async def test_session_send_from_work_item_uses_runtime_checkpoint_identity(self) -> None: + anchor = Task( + id="service-send-anchor", + title="Company chat", + session_id="service-send-runtime", + project_id="test-project", + status=TaskStatus.CANCELLED, + metadata={}, + ) + final_decider = Task( + id="service-send-final", + title="Final decider", + session_id="service-send-runtime", + parent_session_id="service-send-runtime", + project_id="test-project", + linked_work_item_id="service-send-final-wi", + metadata={ + "exec_mode": "company", + "company_profile": "corporate", + "work_item_runtime": True, + "work_item_projection_id": "final", + "shared_role_session": True, + }, + ) + worker = Task( + id="service-send-worker", + title="Worker", + session_id="service-send-runtime:role:worker", + parent_session_id="service-send-runtime", + project_id="test-project", + linked_work_item_id="service-send-worker-wi", + metadata={ + "exec_mode": "company", + "company_profile": "corporate", + "work_item_runtime": True, + "work_item_projection_id": "worker", + }, + ) + original_worker_metadata = dict(worker.metadata) + checkpoint = ExecutionCheckpoint( + checkpoint_id="service-send-checkpoint", + project_id="test-project", + session_id="service-send-runtime", + checkpoint_type="company_runtime_interrupted", + status="pending", + task_id=final_decider.id, + payload={"parent_session_id": "service-send-runtime"}, + ) + for task in (anchor, final_decider, worker): + await self.store.save_task(task) + await self.store.save_execution_checkpoint(checkpoint) + + result = await self.session_service.send( + project_id="test-project", + task_id=worker.id, + content="revise and continue", + ) + + call = self.engine.process_message.await_args + self.assertEqual(result.payload["task_id"], worker.id) + self.assertEqual(result.payload["session_id"], "service-send-runtime") + self.assertEqual(call.kwargs["session_id"], "service-send-runtime") + self.assertEqual(call.kwargs["origin_task_id"], anchor.id) + self.assertEqual(call.kwargs["mode"], "company") + self.assertEqual(call.kwargs["message_metadata"], { + "response_to_checkpoint_id": checkpoint.checkpoint_id, + "response_to_checkpoint_type": checkpoint.checkpoint_type, + }) + persisted_worker = await self.store.get_task(worker.id) + assert persisted_worker is not None + self.assertEqual(persisted_worker.metadata, original_worker_metadata) + + async def test_session_send_rejects_resuming_checkpoint_without_engine_fallback(self) -> None: + anchor = Task( + id="service-resuming-anchor", + title="Company chat", + session_id="service-resuming-runtime", + project_id="test-project", + status=TaskStatus.CANCELLED, + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + checkpoint = ExecutionCheckpoint( + checkpoint_id="service-resuming-checkpoint", + project_id="test-project", + session_id="service-resuming-runtime", + checkpoint_type="company_runtime_suspended", + status="resuming", + task_id=anchor.id, + payload={"parent_session_id": "service-resuming-runtime"}, + ) + await self.store.save_task(anchor) + await self.store.save_execution_checkpoint(checkpoint) + + with self.assertRaises(ServiceError) as raised: + await self.session_service.send( + project_id="test-project", + task_id=anchor.id, + content="continue twice", + ) + + self.assertEqual( + raised.exception.code, + "company_runtime_checkpoint_not_pending", + ) + self.engine.process_message.assert_not_called() + + async def test_session_send_rejects_cancelled_task_mode_session(self) -> None: + task = Task( + id="service-cancelled-task-mode", + title="Cancelled task chat", + session_id="service-cancelled-task-session", + project_id="test-project", + status=TaskStatus.CANCELLED, + metadata={ + "mode": "task", + "execution_mode": "task_mode", + "origin_task_id": "service-cancelled-task-mode", + }, + ) + await self.store.save_task(task) + + with self.assertRaises(ServiceError) as raised: + await self.session_service.send( + project_id="test-project", + task_id=task.id, + content="must stay cancelled", + ) + + self.assertEqual(raised.exception.code, "session_ended") + self.engine.process_message.assert_not_called() + + async def test_session_send_company_identity_mismatch_fails_closed(self) -> None: + task = Task( + id="service-send-mismatch", + title="Company chat", + session_id="service-send-mismatch-runtime", + project_id="test-project", + metadata={"exec_mode": "company", "company_profile": "corporate"}, + ) + await self.store.save_task(task) + self.session_service._resolve_company_runtime_target = AsyncMock( + side_effect=ServiceError( + "company_runtime_identity_mismatch", + "identity mismatch", + ), + ) + + with self.assertRaises(ServiceError) as raised: + await self.session_service.send( + project_id="test-project", + task_id=task.id, + content="do not fall back", + ) + + self.assertEqual( + raised.exception.code, + "company_runtime_identity_mismatch", + ) + self.engine.process_message.assert_not_called() + async def test_session_send_prefers_persisted_org_identity_over_call_defaults(self) -> None: task = Task( id="task-org-send", diff --git a/tests/test_wake_and_delivery.py b/tests/test_wake_and_delivery.py index 1e8c21b..bfca586 100644 --- a/tests/test_wake_and_delivery.py +++ b/tests/test_wake_and_delivery.py @@ -352,7 +352,6 @@ class DeliveryCardPhaseSyncTests(unittest.IsolatedAsyncioTestCase): executor._kanban_broadcast_task = None executor._kanban_debounce_sec = 0.2 executor.runtime = MagicMock() - executor._active_task_runs = set() executor._runtime_invariant_issue_keys = set() return executor diff --git a/tests/test_work_item_identity_guard.py b/tests/test_work_item_identity_guard.py index 8feec49..98aed9d 100644 --- a/tests/test_work_item_identity_guard.py +++ b/tests/test_work_item_identity_guard.py @@ -384,7 +384,6 @@ def test_office_ui_work_item_paths_do_not_use_legacy_projection_identity_names() [ REPO_ROOT / "opc/plugins/office_ui/ws_handler.py", REPO_ROOT / "opc/plugins/office_ui/snapshot_builder.py", - REPO_ROOT / "opc/plugins/office_ui/recovery_manager.py", ], ) assert not backend_matches, _format_matches(backend_matches)