diff --git a/opc/core/transcript_visibility.py b/opc/core/transcript_visibility.py new file mode 100644 index 0000000..d9fc18b --- /dev/null +++ b/opc/core/transcript_visibility.py @@ -0,0 +1,97 @@ +"""Shared visibility rules for persisted session transcript messages. + +The database pager and the Office UI renderer must agree on this boundary. +If either side independently classifies transcript kinds, a summary request can +page over rows that the renderer later drops and leave the caller with a cursor +that never advances through the visible timeline. +""" + +from __future__ import annotations + +from typing import Any, Literal, Mapping + + +TranscriptDetailLevel = Literal["summary", "full"] + +FULL_DETAIL_ONLY_TRANSCRIPT_KINDS: frozenset[str] = frozenset({ + "runtime_v2_user_turn", + "runtime_v2_intermediate_assistant", + "runtime_v2_company_assistant", + "runtime_v2_tool_output", +}) + + +def normalize_transcript_detail_level(value: Any) -> TranscriptDetailLevel: + return "full" if str(value or "").strip().lower() == "full" else "summary" + + +def transcript_metadata_visible( + metadata: Mapping[str, Any] | None, + *, + detail_level: TranscriptDetailLevel | str = "summary", +) -> bool: + """Return whether a persisted transcript row belongs to a detail view. + + ``company_final_turn`` deliberately overrides the kind classification: a + company role's final reply is the durable user-visible result even when its + transport kind is normally reserved for the full execution transcript. + """ + + if normalize_transcript_detail_level(detail_level) == "full": + return True + normalized_metadata = dict(metadata or {}) + if normalized_metadata.get("company_final_turn") is True: + return True + kind = str(normalized_metadata.get("kind", "") or "").strip() + return kind not in FULL_DETAIL_ONLY_TRANSCRIPT_KINDS + + +def transcript_visibility_sql( + *, + detail_level: TranscriptDetailLevel | str, + metadata_column: str = "metadata", +) -> tuple[str, tuple[str, ...]]: + """Build the SQLite predicate equivalent of ``transcript_metadata_visible``. + + ``metadata_column`` is supplied only by internal, static query construction; + callers must not pass user-controlled identifiers. + """ + + if normalize_transcript_detail_level(detail_level) == "full": + return "", () + placeholders = ",".join("?" for _ in FULL_DETAIL_ONLY_TRANSCRIPT_KINDS) + predicate = ( + "AND (COALESCE(json_extract(" + f"{metadata_column}, '$.company_final_turn'), 0) = 1 " + "OR COALESCE(json_extract(" + f"{metadata_column}, '$.kind'), '') NOT IN ({placeholders})) " + ) + return predicate, tuple(sorted(FULL_DETAIL_ONLY_TRANSCRIPT_KINDS)) + + +def rendered_transcript_metadata_visible( + metadata: Mapping[str, Any] | None, + *, + detail_level: TranscriptDetailLevel | str = "summary", +) -> bool: + """Apply the visibility marker written by the transcript renderer.""" + + if normalize_transcript_detail_level(detail_level) == "full": + return True + visibility = str(dict(metadata or {}).get("detail_visibility", "summary") or "summary") + return visibility.strip().lower() != "full" + + +def rendered_transcript_visibility_sql( + *, + detail_level: TranscriptDetailLevel | str, + metadata_column: str = "metadata", +) -> str: + """SQLite predicate equivalent of ``rendered_transcript_metadata_visible``.""" + + if normalize_transcript_detail_level(detail_level) == "full": + return "" + return ( + " AND lower(COALESCE(json_extract(" + f"{metadata_column}, '$.detail_visibility'), 'summary')) != 'full'" + ) diff --git a/opc/database/store.py b/opc/database/store.py index 4d53d35..68247d9 100644 --- a/opc/database/store.py +++ b/opc/database/store.py @@ -65,6 +65,10 @@ from opc.core.models import ( normalize_role_runtime_status, ) from opc.core.models import Phase +from opc.core.transcript_visibility import ( + normalize_transcript_detail_level, + transcript_visibility_sql, +) from opc.layer2_organization.phase import ( DONE_PHASES, IN_PROGRESS_PHASES, @@ -6192,20 +6196,17 @@ class OPCStore: ) -> dict[str, Any]: assert self._db normalized_limit = max(1, min(int(limit), 500)) - normalized_detail_level = str(detail_level or "summary").strip().lower() - hidden_kinds = () if normalized_detail_level == "full" else ( - "runtime_v2_user_turn", - "runtime_v2_assistant", + normalized_detail_level = normalize_transcript_detail_level(detail_level) + visibility_sql, visibility_params = transcript_visibility_sql( + detail_level=normalized_detail_level, ) query = ( "SELECT * FROM session_messages " "WHERE session_id = ? AND summary_flag = 0 " ) params: list[Any] = [session_id] - if hidden_kinds: - placeholders = ",".join("?" for _ in hidden_kinds) - query += f"AND COALESCE(json_extract(metadata, '$.kind'), '') NOT IN ({placeholders}) " - params.extend(hidden_kinds) + query += visibility_sql + params.extend(visibility_params) normalized_before_id = str(before_message_id or "").strip() if before_created_at is not None: before_iso = before_created_at.isoformat() @@ -6246,10 +6247,8 @@ class OPCStore: "WHERE session_id = ? AND summary_flag = 0 " ) count_params: list[Any] = [session_id] - if hidden_kinds: - placeholders = ",".join("?" for _ in hidden_kinds) - count_query += f"AND COALESCE(json_extract(metadata, '$.kind'), '') NOT IN ({placeholders})" - count_params.extend(hidden_kinds) + count_query += visibility_sql + count_params.extend(visibility_params) async with self._db.execute(count_query, count_params) as cursor: row = await cursor.fetchone() total_count = int(row[0] or 0) if row else 0 diff --git a/opc/plugins/office_ui/chat_store.py b/opc/plugins/office_ui/chat_store.py index 85b7af7..3a1d855 100644 --- a/opc/plugins/office_ui/chat_store.py +++ b/opc/plugins/office_ui/chat_store.py @@ -7,14 +7,19 @@ Channel/message format uses snake_case to match what collabSync.ts expects. from __future__ import annotations import asyncio +import heapq import json +import math import re import sqlite3 +import struct import time import uuid +from dataclasses import dataclass from typing import Any, Awaitable, Callable import aiosqlite +from opc.core.transcript_visibility import rendered_transcript_visibility_sql from opc.layer3_agent.adapters.codex_adapter import CodexAdapter _LOCKED_ERROR_MARKERS = ("database is locked", "database table is locked") @@ -28,6 +33,505 @@ def _is_locked_error(exc: BaseException) -> bool: ) +@dataclass(frozen=True) +class _MessageMatchState: + """Prepared fields used by semantic message de-duplication. + + Transcript rows can contain several kilobytes of Markdown. Preparing the + normalized content once prevents every candidate comparison from repeating + that work. + """ + + channel_id: str + identity_keys: frozenset[str] + role_bucket: str + normalized_content: str + reply_to_id: str + is_result_surface: bool + has_engine_source: bool + timestamp: float + + @classmethod + def from_message( + cls, + owner: Any, + message: dict[str, Any], + ) -> _MessageMatchState: + return cls( + channel_id=str(message.get("channel_id", "") or ""), + identity_keys=frozenset(owner._message_identity_keys(message)), + role_bucket=owner._message_role_bucket(message), + normalized_content=owner._normalize_duplicate_content(message.get("content", "")), + reply_to_id=str(message.get("reply_to_id", "") or ""), + is_result_surface=owner._message_is_result_surface(message), + has_engine_source=owner._message_has_engine_source(message), + timestamp=owner._message_timestamp(message), + ) + + def matches(self, candidate: _MessageMatchState, *, duplicate_window: float) -> bool: + if self.channel_id != candidate.channel_id: + return False + if self.identity_keys & candidate.identity_keys: + return True + if self.role_bucket != candidate.role_bucket: + return False + if self.normalized_content != candidate.normalized_content: + return False + both_result_surfaces = self.is_result_surface and candidate.is_result_surface + if not both_result_surfaces and self.reply_to_id != candidate.reply_to_id: + return False + if not (self.has_engine_source or candidate.has_engine_source): + return False + if ( + not both_result_surfaces + and self.timestamp + and candidate.timestamp + and abs(self.timestamp - candidate.timestamp) > duplicate_window + ): + return False + return True + + +@dataclass +class _TimestampRangeNode: + """Treap node augmented with the greatest timeline index below it.""" + + key: tuple[float, int] + priority: int + left: _TimestampRangeNode | None = None + right: _TimestampRangeNode | None = None + max_index: int = -1 + + def __post_init__(self) -> None: + self.max_index = self.key[1] + + +class _TimestampRangeTree: + """Dynamic timestamp range -> latest timeline index map. + + A deterministic treap avoids depending on insertion order while supporting + insert, delete, and inclusive range maximum in expected O(log n). + """ + + _MASK_64 = (1 << 64) - 1 + + def __init__(self) -> None: + self._root: _TimestampRangeNode | None = None + + @classmethod + def _priority(cls, index: int) -> int: + # SplitMix64 is a bijective mixer for the practical index range, giving + # deterministic pseudo-random treap priorities without global RNG state. + value = (index + 0x9E3779B97F4A7C15) & cls._MASK_64 + value = ((value ^ (value >> 30)) * 0xBF58476D1CE4E5B9) & cls._MASK_64 + value = ((value ^ (value >> 27)) * 0x94D049BB133111EB) & cls._MASK_64 + return value ^ (value >> 31) + + @staticmethod + def _refresh(node: _TimestampRangeNode | None) -> None: + if node is None: + return + node.max_index = max( + node.key[1], + node.left.max_index if node.left is not None else -1, + node.right.max_index if node.right is not None else -1, + ) + + @classmethod + def _split( + cls, + node: _TimestampRangeNode | None, + key: tuple[float, float | int], + ) -> tuple[_TimestampRangeNode | None, _TimestampRangeNode | None]: + if node is None: + return None, None + if node.key < key: + node.right, right = cls._split(node.right, key) + cls._refresh(node) + return node, right + left, node.left = cls._split(node.left, key) + cls._refresh(node) + return left, node + + @classmethod + def _merge( + cls, + left: _TimestampRangeNode | None, + right: _TimestampRangeNode | None, + ) -> _TimestampRangeNode | None: + if left is None: + return right + if right is None: + return left + if left.priority > right.priority: + left.right = cls._merge(left.right, right) + cls._refresh(left) + return left + right.left = cls._merge(left, right.left) + cls._refresh(right) + return right + + @classmethod + def _insert( + cls, + root: _TimestampRangeNode | None, + node: _TimestampRangeNode, + ) -> _TimestampRangeNode: + if root is None: + return node + if node.key == root.key: + return root + if node.priority > root.priority: + node.left, node.right = cls._split(root, node.key) + cls._refresh(node) + return node + if node.key < root.key: + root.left = cls._insert(root.left, node) + else: + root.right = cls._insert(root.right, node) + cls._refresh(root) + return root + + @classmethod + def _remove( + cls, + root: _TimestampRangeNode | None, + key: tuple[float, int], + ) -> _TimestampRangeNode | None: + if root is None: + return None + if key == root.key: + return cls._merge(root.left, root.right) + if key < root.key: + root.left = cls._remove(root.left, key) + else: + root.right = cls._remove(root.right, key) + cls._refresh(root) + return root + + def add(self, timestamp: float, index: int) -> None: + self._root = self._insert( + self._root, + _TimestampRangeNode( + key=(timestamp, index), + priority=self._priority(index), + ), + ) + + def remove(self, timestamp: float, index: int) -> None: + self._root = self._remove(self._root, (timestamp, index)) + + def latest(self) -> int | None: + return self._root.max_index if self._root is not None else None + + def latest_in_range(self, lower: float, upper: float) -> int | None: + left, middle_and_right = self._split(self._root, (lower, -1)) + middle, right = self._split(middle_and_right, (upper, math.inf)) + result = middle.max_index if middle is not None else None + self._root = self._merge(left, self._merge(middle, right)) + return result + + +class _MessageMatchIndex: + """Versioned indexes for finding the latest semantic duplicate. + + The legacy implementation scanned every previously emitted row backwards. + Identity and result-surface matches use max-heaps. Ordinary matches use an + exact timestamp range tree, so backfilling old history cannot repeatedly + scan newer same-content rows outside the duplicate window. Replacing a + merged row bumps its heap version and moves its timestamp-tree entry. + """ + + def __init__( + self, + owner: Any, + messages: list[dict[str, Any]], + ) -> None: + self._owner = owner + self._messages = messages + self._versions: list[int] = [0 for _ in messages] + self._states = [ + _MessageMatchState.from_message(owner, message) + for message in messages + ] + self._identity_heaps: dict[tuple[str, str], list[tuple[int, int]]] = {} + self._timed_trees: dict[tuple[str, str, str, str], _TimestampRangeTree] = {} + self._timed_engine_trees: dict[tuple[str, str, str, str], _TimestampRangeTree] = {} + self._timed_unbounded_heaps: dict[tuple[str, str, str, str], list[tuple[int, int]]] = {} + self._timed_engine_unbounded_heaps: dict[tuple[str, str, str, str], list[tuple[int, int]]] = {} + self._result_heaps: dict[tuple[str, str, str], list[tuple[int, int]]] = {} + self._result_engine_heaps: dict[tuple[str, str, str], list[tuple[int, int]]] = {} + for index in range(len(messages)): + self._push(index) + + @staticmethod + def _push_heap( + heaps: dict[Any, list[tuple[int, int]]], + key: Any, + index: int, + version: int, + ) -> None: + heapq.heappush(heaps.setdefault(key, []), (-index, version)) + + @staticmethod + def _semantic_key(state: _MessageMatchState) -> tuple[str, str, str]: + return (state.channel_id, state.role_bucket, state.normalized_content) + + @classmethod + def _timed_key(cls, state: _MessageMatchState) -> tuple[str, str, str, str]: + return (*cls._semantic_key(state), state.reply_to_id) + + @staticmethod + def _timestamp_is_unbounded(timestamp: float) -> bool: + # The legacy predicate deliberately skipped its window check for zero; + # NaN also made ``abs(delta) > window`` false and must stay equivalent. + return timestamp == 0 or math.isnan(timestamp) + + @staticmethod + def _float_to_ordered_int(value: float) -> int: + """Map an IEEE-754 double to an integer with numeric sort order.""" + bits = struct.unpack(">Q", struct.pack(">d", value))[0] + if bits & (1 << 63): + return (~bits) & ((1 << 64) - 1) + return bits | (1 << 63) + + @staticmethod + def _ordered_int_to_float(value: int) -> float: + if value & (1 << 63): + bits = value & ((1 << 63) - 1) + else: + bits = (~value) & ((1 << 64) - 1) + return struct.unpack(">d", struct.pack(">Q", bits))[0] + + @classmethod + def _finite_timestamp_match_bounds( + cls, + candidate_timestamp: float, + window: float, + ) -> tuple[float, float]: + """Exact finite-float bounds accepted by the legacy delta predicate. + + Computing ``candidate +/- window`` is subtly insufficient around a + rounding boundary (for example ``2.0 - (-1e-300)`` rounds to exactly + ``2.0``). Binary searching the ordered double domain preserves the + old IEEE-754 comparison exactly. The domain is fixed at 64 bits, so + this adds constant work before the tree's O(log n) range query. + """ + candidate_order = cls._float_to_ordered_int(candidate_timestamp) + + lower_rejected = cls._float_to_ordered_int(-math.inf) + lower_accepted = candidate_order + while lower_rejected + 1 < lower_accepted: + middle = (lower_rejected + lower_accepted) // 2 + value = cls._ordered_int_to_float(middle) + if abs(value - candidate_timestamp) <= window: + lower_accepted = middle + else: + lower_rejected = middle + + upper_accepted = candidate_order + upper_rejected = cls._float_to_ordered_int(math.inf) + while upper_accepted + 1 < upper_rejected: + middle = (upper_accepted + upper_rejected) // 2 + value = cls._ordered_int_to_float(middle) + if abs(value - candidate_timestamp) <= window: + upper_accepted = middle + else: + upper_rejected = middle + + return ( + cls._ordered_int_to_float(lower_accepted), + cls._ordered_int_to_float(upper_accepted), + ) + + @staticmethod + def _add_to_tree( + trees: dict[tuple[str, str, str, str], _TimestampRangeTree], + key: tuple[str, str, str, str], + timestamp: float, + index: int, + ) -> None: + trees.setdefault(key, _TimestampRangeTree()).add(timestamp, index) + + def _push(self, index: int) -> None: + state = self._states[index] + version = self._versions[index] + for identity_key in state.identity_keys: + self._push_heap( + self._identity_heaps, + (state.channel_id, identity_key), + index, + version, + ) + + semantic_key = self._semantic_key(state) + timed_key = self._timed_key(state) + if self._timestamp_is_unbounded(state.timestamp): + self._push_heap( + self._timed_unbounded_heaps, + timed_key, + index, + version, + ) + if state.has_engine_source: + self._push_heap( + self._timed_engine_unbounded_heaps, + timed_key, + index, + version, + ) + else: + self._add_to_tree( + self._timed_trees, + timed_key, + state.timestamp, + index, + ) + if state.has_engine_source: + self._add_to_tree( + self._timed_engine_trees, + timed_key, + state.timestamp, + index, + ) + if state.is_result_surface: + self._push_heap(self._result_heaps, semantic_key, index, version) + if state.has_engine_source: + self._push_heap(self._result_engine_heaps, semantic_key, index, version) + + def prepare(self, message: dict[str, Any]) -> _MessageMatchState: + return _MessageMatchState.from_message(self._owner, message) + + def append( + self, + message: dict[str, Any], + *, + prepared_state: _MessageMatchState | None = None, + ) -> int: + index = len(self._messages) + self._messages.append(message) + self._versions.append(0) + self._states.append(prepared_state or self.prepare(message)) + self._push(index) + return index + + def replace(self, index: int, message: dict[str, Any]) -> None: + old_state = self._states[index] + if not self._timestamp_is_unbounded(old_state.timestamp): + timed_key = self._timed_key(old_state) + tree = self._timed_trees.get(timed_key) + if tree is not None: + tree.remove(old_state.timestamp, index) + if old_state.has_engine_source: + engine_tree = self._timed_engine_trees.get(timed_key) + if engine_tree is not None: + engine_tree.remove(old_state.timestamp, index) + self._messages[index] = message + self._versions[index] += 1 + self._states[index] = _MessageMatchState.from_message(self._owner, message) + self._push(index) + + def _latest_from_heap( + self, + heap: list[tuple[int, int]] | None, + candidate: _MessageMatchState, + excluded_message_ids: set[str], + ) -> int | None: + if not heap: + return None + while heap: + negative_index, version = heap[0] + index = -negative_index + if version != self._versions[index]: + heapq.heappop(heap) + continue + message_id = str(self._messages[index].get("message_id", "") or "") + if message_id in excluded_message_ids: + heapq.heappop(heap) + continue + existing = self._states[index] + if existing.matches( + candidate, + duplicate_window=self._owner._DUPLICATE_WINDOW_SECONDS, + ): + return index + # Identity/result/unbounded timed buckets are exact. A current + # non-match therefore cannot become valid for this bucket later. + heapq.heappop(heap) + return None + + def _latest_from_time_tree( + self, + tree: _TimestampRangeTree | None, + candidate: _MessageMatchState, + excluded_message_ids: set[str], + ) -> int | None: + if tree is None: + return None + while True: + if self._timestamp_is_unbounded(candidate.timestamp): + index = tree.latest() + else: + window = self._owner._DUPLICATE_WINDOW_SECONDS + if math.isfinite(candidate.timestamp): + lower, upper = self._finite_timestamp_match_bounds( + candidate.timestamp, + window, + ) + else: + lower = upper = candidate.timestamp + index = tree.latest_in_range(lower, upper) + if index is None: + return None + existing = self._states[index] + message_id = str(self._messages[index].get("message_id", "") or "") + if message_id not in excluded_message_ids and existing.matches( + candidate, + duplicate_window=self._owner._DUPLICATE_WINDOW_SECONDS, + ): + return index + # Consumed entries never become eligible again during this index's + # lifetime. Signature changes use ``replace`` and reinsert exactly. + tree.remove(existing.timestamp, index) + + def latest_match( + self, + candidate_message: dict[str, Any], + *, + excluded_message_ids: set[str] | None = None, + prepared_state: _MessageMatchState | None = None, + ) -> int | None: + candidate = prepared_state or self.prepare(candidate_message) + excluded = excluded_message_ids or set() + heaps: list[list[tuple[int, int]] | None] = [] + for identity_key in candidate.identity_keys: + heaps.append(self._identity_heaps.get((candidate.channel_id, identity_key))) + + semantic_key = self._semantic_key(candidate) + timed_key = self._timed_key(candidate) + if candidate.has_engine_source: + timed_tree = self._timed_trees.get(timed_key) + heaps.append(self._timed_unbounded_heaps.get(timed_key)) + else: + timed_tree = self._timed_engine_trees.get(timed_key) + heaps.append(self._timed_engine_unbounded_heaps.get(timed_key)) + if candidate.is_result_surface: + if candidate.has_engine_source: + heaps.append(self._result_heaps.get(semantic_key)) + else: + heaps.append(self._result_engine_heaps.get(semantic_key)) + + matches: list[int] = [ + index + for heap in heaps + if (index := self._latest_from_heap(heap, candidate, excluded)) is not None + ] + timed_index = self._latest_from_time_tree(timed_tree, candidate, excluded) + if timed_index is not None: + matches.append(timed_index) + return max(matches) if matches else None + + class ChatStore: """Chat channels + messages in ui_state.db. @@ -167,29 +671,10 @@ class ChatStore: existing: dict[str, Any], candidate: dict[str, Any], ) -> bool: - if str(existing.get("channel_id", "") or "") != str(candidate.get("channel_id", "") or ""): - return False - if cls._message_identity_keys(existing) & cls._message_identity_keys(candidate): - return True - if cls._message_role_bucket(existing) != cls._message_role_bucket(candidate): - return False - if cls._normalize_duplicate_content(existing.get("content", "")) != cls._normalize_duplicate_content(candidate.get("content", "")): - return False - both_result_surfaces = cls._message_is_result_surface(existing) and cls._message_is_result_surface(candidate) - if not both_result_surfaces and str(existing.get("reply_to_id", "") or "") != str(candidate.get("reply_to_id", "") or ""): - return False - if not (cls._message_has_engine_source(existing) or cls._message_has_engine_source(candidate)): - return False - existing_ts = cls._message_timestamp(existing) - candidate_ts = cls._message_timestamp(candidate) - if ( - not both_result_surfaces - and existing_ts - and candidate_ts - and abs(existing_ts - candidate_ts) > cls._DUPLICATE_WINDOW_SECONDS - ): - return False - return True + return _MessageMatchState.from_message(cls, existing).matches( + _MessageMatchState.from_message(cls, candidate), + duplicate_window=cls._DUPLICATE_WINDOW_SECONDS, + ) @classmethod def _merge_duplicate_messages( @@ -266,16 +751,23 @@ class ChatStore: def _dedupe_messages(self, messages: list[dict[str, Any]]) -> list[dict[str, Any]]: deduped: list[dict[str, Any]] = [] + match_index = _MessageMatchIndex( + self, + deduped, + ) for message in sorted(messages, key=self._message_timestamp): - match_index: int | None = None - for index in range(len(deduped) - 1, -1, -1): - if self._messages_semantically_match(deduped[index], message): - match_index = index - break - if match_index is None: - deduped.append(message) + prepared_state = match_index.prepare(message) + duplicate_index = match_index.latest_match( + message, + prepared_state=prepared_state, + ) + if duplicate_index is None: + match_index.append(message, prepared_state=prepared_state) continue - deduped[match_index] = self._merge_duplicate_messages(deduped[match_index], message) + match_index.replace( + duplicate_index, + self._merge_duplicate_messages(deduped[duplicate_index], message), + ) return deduped async def _message_scope(self, message_id: str) -> tuple[str, str] | None: @@ -1060,6 +1552,14 @@ class ChatStore: existing_rows = await cursor.fetchall() existing_messages = [self._row_to_message_dict(row) for row in existing_rows] existing_ids = {message["message_id"] for message in existing_messages} + existing_positions = { + message["message_id"]: index + for index, message in enumerate(existing_messages) + } + semantic_index = _MessageMatchIndex( + self, + existing_messages, + ) consumed_existing_ids: set[str] = set() inserted_messages: list[dict[str, Any]] = [] changed_existing = False @@ -1078,11 +1578,9 @@ class ChatStore: } mid = normalized_message["message_id"] if mid in existing_ids: - existing_match = next( - (existing for existing in existing_messages if existing["message_id"] == mid), - None, - ) - if existing_match is not None: + existing_index = existing_positions.get(mid) + if existing_index is not None: + existing_match = existing_messages[existing_index] merged_existing = self._merge_duplicate_messages(existing_match, normalized_message) if not self._message_persisted_equal(existing_match, merged_existing): merged_timestamp = self._message_timestamp(merged_existing) or time.time() @@ -1102,13 +1600,10 @@ class ChatStore: project_id, ), ) - for idx, existing in enumerate(existing_messages): - if existing["message_id"] == mid: - existing_messages[idx] = { - **merged_existing, - "created_at": merged_timestamp, - } - break + semantic_index.replace(existing_index, { + **merged_existing, + "created_at": merged_timestamp, + }) inserted_messages.append({ **merged_existing, "channel_id": channel_id, @@ -1131,7 +1626,7 @@ class ChatStore: ) if merged is not None: existing_ids.add(mid) - existing_messages.append(merged) + existing_positions[mid] = semantic_index.append(merged) continue if existing_scope and existing_scope != (channel_id, project_id): metadata = dict(normalized_message.get("metadata", {}) or {}) @@ -1144,17 +1639,14 @@ class ChatStore: ) normalized_message["message_id"] = mid - duplicate_existing = next( - ( - existing - for existing in reversed(existing_messages) - if existing["message_id"] not in consumed_existing_ids - and self._messages_semantically_match(existing, normalized_message) - ), - None, + duplicate_index = semantic_index.latest_match( + normalized_message, + excluded_message_ids=consumed_existing_ids, ) - if duplicate_existing is not None: - consumed_existing_ids.add(duplicate_existing["message_id"]) + if duplicate_index is not None: + consumed_existing_ids.add( + existing_messages[duplicate_index]["message_id"] + ) continue try: @@ -1184,8 +1676,9 @@ class ChatStore: candidate=normalized_message, ) if merged is not None: - existing_ids.add(normalized_message["message_id"]) - existing_messages.append(merged) + merged_id = normalized_message["message_id"] + existing_ids.add(merged_id) + existing_positions[merged_id] = semantic_index.append(merged) continue metadata = dict(normalized_message.get("metadata", {}) or {}) metadata.setdefault("ui_message_id", normalized_message["message_id"]) @@ -1216,7 +1709,7 @@ class ChatStore: ) inserted_messages.append(normalized_message) existing_ids.add(mid) - existing_messages.append({ + existing_positions[mid] = semantic_index.append({ **normalized_message, "created_at": normalized_message["timestamp"], }) @@ -1253,49 +1746,124 @@ class ChatStore: limit: int = 100, before_timestamp: float | None = None, before_message_id: str | None = None, + detail_level: str = "full", project_id: str = "default", ) -> list[dict[str, Any]]: - """Return a paginated, de-duplicated channel slice in chronological order.""" - fetch_limit = max(limit * 8, limit + 1, 1) + """Return the message slice from :meth:`get_channel_messages_page_info`. + + This compatibility wrapper intentionally delegates cursor handling to + the exact pager so callers cannot accidentally paginate raw rows before + renderer visibility and semantic de-duplication have been applied. + """ + page = await self.get_channel_messages_page_info( + channel_id, + limit=limit, + before_timestamp=before_timestamp, + before_message_id=before_message_id, + detail_level=detail_level, + project_id=project_id, + ) + return page["messages"] + + async def _get_channel_visible_messages( + self, + channel_id: str, + *, + detail_level: str, + project_id: str, + ) -> list[dict[str, Any]]: + """Load the final UI-visible, de-duplicated channel timeline. + + The cache stores both transcript backfill and UI-only rows such as + approval cards and legacy notices. SQL can exclude detail-only rows, + but only the message formatter's semantic merge can determine the + final rows. Consequently the merge must happen across the complete + visible set before a page boundary is chosen. + """ query = ( "SELECT message_id, channel_id, sender, sender_name, content, " "timestamp, reply_to_id, mentions, metadata " "FROM messages WHERE channel_id = ? AND project_id = ?" ) - params: list[Any] = [channel_id, project_id] + query += rendered_transcript_visibility_sql( + detail_level=detail_level, + ) + query += " ORDER BY timestamp ASC, message_id ASC" + cursor = await self._db.execute(query, (channel_id, project_id)) + rows = await cursor.fetchall() + messages = [self._row_to_message_dict(row) for row in rows] + deduped = self._dedupe_messages(messages) + return sorted( + deduped, + key=lambda message: ( + self._message_timestamp(message), + str(message.get("message_id", "") or ""), + ), + ) + + async def get_channel_messages_page_info( + self, + channel_id: str, + *, + limit: int = 100, + before_timestamp: float | None = None, + before_message_id: str | None = None, + detail_level: str = "full", + project_id: str = "default", + ) -> dict[str, Any]: + """Return an exact final-visible page and its pagination metadata. + + ``total_count`` counts the de-duplicated UI rows for the whole channel; + ``has_more`` describes rows older than the returned page for the given + cursor. Both values include UI-only messages that have no transcript + counterpart. + """ + messages = await self._get_channel_visible_messages( + channel_id, + detail_level=detail_level, + project_id=project_id, + ) + total_count = len(messages) + candidates = messages normalized_before_id = str(before_message_id or "").strip() if before_timestamp is not None: + normalized_before_timestamp = float(before_timestamp) if normalized_before_id: - query += " AND (timestamp < ? OR (timestamp = ? AND message_id < ?))" - params.extend([before_timestamp, before_timestamp, normalized_before_id]) + candidates = [ + message + for message in messages + if ( + self._message_timestamp(message), + str(message.get("message_id", "") or ""), + ) < (normalized_before_timestamp, normalized_before_id) + ] else: - query += " AND timestamp < ?" - params.append(before_timestamp) - query += " ORDER BY timestamp DESC, message_id DESC LIMIT ?" - params.append(fetch_limit) + candidates = [ + message + for message in messages + if self._message_timestamp(message) < normalized_before_timestamp + ] + normalized_limit = max(int(limit), 1) + return { + "messages": candidates[-normalized_limit:], + "has_more": len(candidates) > normalized_limit, + "total_count": total_count, + } - cursor = await self._db.execute(query, tuple(params)) - rows = await cursor.fetchall() - messages = [self._row_to_message_dict(row) for row in rows] - messages.reverse() - messages = self._dedupe_messages(messages) - if len(messages) > limit: - messages = messages[-limit:] - return messages - - async def get_channel_visible_message_count(self, channel_id: str, project_id: str = "default") -> int: + async def get_channel_visible_message_count( + self, + channel_id: str, + project_id: str = "default", + *, + detail_level: str = "full", + ) -> int: """Return the de-duplicated visible message count for a channel.""" - cursor = await self._db.execute( - "SELECT message_id, channel_id, sender, sender_name, content, " - "timestamp, reply_to_id, mentions, metadata " - "FROM messages WHERE channel_id = ? AND project_id = ? ORDER BY timestamp ASC", - (channel_id, project_id), + messages = await self._get_channel_visible_messages( + channel_id, + detail_level=detail_level, + project_id=project_id, ) - rows = await cursor.fetchall() - if not rows: - return 0 - messages = [self._row_to_message_dict(row) for row in rows] - return len(self._dedupe_messages(messages)) + return len(messages) async def get_unresolved_checkpoint_messages( self, @@ -1646,6 +2214,9 @@ class ChatStore: preview = " ".join(detail.split()) folded = dict(target) folded.update(entry) + # The folded stream is one UI timeline row. Preserve its creation + # timestamp so reconnect snapshots cannot move it around tools. + folded["timestamp"] = target.get("timestamp", entry.get("timestamp")) folded["detail"] = detail folded["summary"] = preview[:120].rstrip() + ("..." if len(preview) > 120 else "") merged[index_by_key[key]] = folded diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js b/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js new file mode 100644 index 0000000..fab544b --- /dev/null +++ b/opc/plugins/office_ui/frontend_dist/assets/index-02tfsorH.js @@ -0,0 +1,155 @@ +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>>1,q=H[Q];if(0>>1;Qi(P,Y))Ki(ee,P)?(H[Q]=ee,H[K]=Y,Q=K):(H[Q]=P,H[J]=Y,Q=J);else if(Ki(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()-DH&&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||125Q?(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"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(1q||(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)":-1_||re[y]!==ye[_]){var we=` +`+re[y].replace(" at new "," at ");return s.displayName&&we.includes("")&&(we=we.replace("",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"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;_"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=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)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>=F,_-=F,Yi=1<<32-Ze(l)+_|f<<_|y,Xi=E+s}else Yi=1<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(;AtAt?(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;sE?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<\/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 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;Xwn&&(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;Xf?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;0X)break;var we=re.transferSize,Te=re.initiatorType;we&&V_(Te)&&(re=re.responseEnd,F+=we*(re"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 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),0rg?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"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{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{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;r0)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;n0?e[e.length-1].offsetCol+Kn:Kn,n=[];for(let r=0;rt.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;peT*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(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;peK&&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}Kw-T*5.4&&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;$ew-T;for(let et=0;et=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;pA.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","#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=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=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 bw?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);jM;0<=M?D++:D--)I.push(D);return I}).apply(this).reverse(),L=[],N=0,O=R.length;NA;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;Np[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"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.x0&&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.x0&&(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[...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=0&&t=0&&n=0&&t=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=i&&e=o&&tVM(`${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=0&&v({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{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{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&&vthis.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.xm.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{$()},[$]);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{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()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.enda.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;g1){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.getVirtualIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let o=0,a=n.length;othis.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(or)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(;c1){const d=Array(r).fill(0);for(;ch=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.timestampxu(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;dd,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;ie(...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{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 ");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({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.tope.bottom,m=r.lefte.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 od?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{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]{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{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.leftt.left&&e.topt.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?dc});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{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&&hS[a.start]-d+w&&mS[a.start]+d+w&&hS[a.start]+w&&m{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{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]{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({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(;++ri?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);o0?(mi(e,e.length,0,t),e):t}const mw={}.hasOwnProperty;function LN(e){const t={};let n=-1;for(;++n13&&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(;++n55295&&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++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;Rj;){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(;++i1&&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;++n0&&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=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-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=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)):h999||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=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-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(;++n0){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;++He0&&(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(;++c1}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);++i0){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(;++d0,!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(;++d0&&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":""))+")"})}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&&k0&&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={});Sa.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(;++t0&&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(a2){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(;++n0){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(;++a0?{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?\]}]+$/.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(;++hm&&(m=e[h].length);++bd[b])&&(d[b]=j)}k.push(w)}a[h]=k,c[h]=S}let p=-1;if(typeof r=="object"&&"length"in r)for(;++pd[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 "),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(;++ra&&(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\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-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(;++b0&&!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(;++d1?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-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(;++nn[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=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;i12&&/^[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)]}),Sc.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;id.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=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.timestamp0),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{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";enRt+.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{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{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._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=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{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:re.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{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:rT0(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;gyt(()=>[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;me._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{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{}};function ep(){for(var e=0,t=arguments.length,n={},r;e=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(;++o0)for(var n=new Array(i),r=0,i,o;r=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=j&&(j=w+1);!(O=S[j])&&++j=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;ot?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;t1?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=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()=>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>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+(n0&&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;in&&(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 n180?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=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]):+hSv&&r.state=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()=>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"[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)=>en?-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=n0}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.xMath.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]=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.xn.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.x0||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.width0){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||(g1){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{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:seUe.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>1,!(r[o].priority1;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);b0&&(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;Si.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);v0;){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;pD.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;Ag){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=>WDA[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{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){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)),pc.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)!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).maxRankm||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;dr(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;ax)),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{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.barycentera.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{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{M=O[A],S.node(M).dummy&&S.predecessors(M).forEach($=>{let W=S.node($);W.dummy&&(W.orderD)&&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&&IMath.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{["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{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&&DL.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!!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.length0&&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='

Root element not found

',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=`

React Error: ${e}

`} diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-CMqG6mW8.css b/opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.css similarity index 51% rename from opc/plugins/office_ui/frontend_dist/assets/index-CMqG6mW8.css rename to opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.css index 9a90a97..df70cee 100644 --- a/opc/plugins/office_ui/frontend_dist/assets/index-CMqG6mW8.css +++ b/opc/plugins/office_ui/frontend_dist/assets/index-BCWwLlJm.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{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;overflow-anchor:none;position:relative}.msg-end-anchor{height:1px;flex-shrink:0;overflow-anchor:none}.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-pending-section{margin-top:10px;padding:12px 16px 0;border-top:1px solid var(--border);background:linear-gradient(180deg,transparent 0%,var(--bg-elevated) 28px)}.msg-pending-header{font-size:10px;font-weight:700;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;margin:0 8px 10px}.msg-pending-stack{display:flex;flex-direction:column;gap:10px;padding-bottom:8px}.msg-row-pending{animation:msg-enter .2s ease-out}.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{min-height:0}.ctx-work-item-progress{flex-shrink:0;padding:12px 12px 0;overflow-y:auto;overflow-x:hidden;max-height:50vh;position:relative;z-index:1;background:var(--bg-elevated)}.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{max-height:400px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;padding:4px 0;background:var(--bg)}.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}}.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} diff --git a/opc/plugins/office_ui/frontend_dist/assets/index-D7a_jL_7.js b/opc/plugins/office_ui/frontend_dist/assets/index-D7a_jL_7.js deleted file mode 100644 index 843a3a1..0000000 --- a/opc/plugins/office_ui/frontend_dist/assets/index-D7a_jL_7.js +++ /dev/null @@ -1,155 +0,0 @@ -import{g as ta,r as A3}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 rg={exports:{}},Cc={};var pk;function M3(){if(pk)return Cc;pk=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 u in i)u!=="key"&&(o[u]=i[u])}else o=i;return i=o.ref,{$$typeof:e,type:r,key:a,ref:i!==void 0?i:null,props:o}}return Cc.Fragment=t,Cc.jsx=n,Cc.jsxs=n,Cc}var gk;function D3(){return gk||(gk=1,rg.exports=M3()),rg.exports}var c=D3(),ig={exports:{}},_t={};var xk;function O3(){if(xk)return _t;xk=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"),u=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),h=Symbol.for("react.activity"),g=Symbol.iterator;function y(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 _(G,J,P){this.props=G,this.context=J,this.refs=S,this.updater=P||v}_.prototype.isReactComponent={},_.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")},_.prototype.forceUpdate=function(G){this.updater.enqueueForceUpdate(this,G,"forceUpdate")};function w(){}w.prototype=_.prototype;function C(G,J,P){this.props=G,this.context=J,this.refs=S,this.updater=P||v}var N=C.prototype=new w;N.constructor=C,k(N,_.prototype),N.isPureReactComponent=!0;var O=Array.isArray;function I(){}var D={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function L(G,J,P){var X=P.ref;return{$$typeof:e,type:G,key:J,ref:X!==void 0?X:null,props:P}}function A(G,J){return L(G.type,J,G.props)}function M(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 U(G){switch(G.status){case"fulfilled":return G.value;case"rejected":throw G.reason;default:switch(typeof G.status=="string"?G.then(I,I):(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,X,ee){var te=typeof G;(te==="undefined"||te==="boolean")&&(G=null);var re=!1;if(G===null)re=!0;else switch(te){case"bigint":case"string":case"number":re=!0;break;case"object":switch(G.$$typeof){case e:case t:re=!0;break;case p:return re=G._init,H(re(G._payload),J,P,X,ee)}}if(re)return ee=ee(G),re=X===""?"."+B(G,0):X,O(ee)?(P="",re!=null&&(P=re.replace(W,"$&/")+"/"),H(ee,J,P,"",function(se){return se})):ee!=null&&(M(ee)&&(ee=A(ee,P+(ee.key==null||G&&G.key===ee.key?"":(""+ee.key).replace(W,"$&/")+"/")+re)),J.push(ee)),1;re=0;var oe=X===""?".":X+":";if(O(G))for(var de=0;de>>1,q=H[Q];if(0>>1;Qi(P,Y))Xi(ee,P)?(H[Q]=ee,H[X]=Y,Q=X):(H[Q]=P,H[J]=Y,Q=J);else if(Xi(ee,Y))H[Q]=ee,H[X]=Y,Q=X;else break e}}return V}function i(H,V){var Y=H.sortIndex-V.sortIndex;return Y!==0?Y:H.id-V.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,u=a.now();e.unstable_now=function(){return a.now()-u}}var d=[],m=[],p=1,h=null,g=3,y=!1,v=!1,k=!1,S=!1,_=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,C=typeof setImmediate<"u"?setImmediate:null;function N(H){for(var V=n(m);V!==null;){if(V.callback===null)r(m);else if(V.startTime<=H)r(m),V.sortIndex=V.expirationTime,t(d,V);else break;V=n(m)}}function O(H){if(k=!1,N(H),!v)if(n(d)!==null)v=!0,I||(I=!0,$());else{var V=n(m);V!==null&&U(O,V.startTime-H)}}var I=!1,D=-1,T=5,L=-1;function A(){return S?!0:!(e.unstable_now()-LH&&A());){var Q=h.callback;if(typeof Q=="function"){h.callback=null,g=h.priorityLevel;var q=Q(h.expirationTime<=H);if(H=e.unstable_now(),typeof q=="function"){h.callback=q,N(H),V=!0;break t}h===n(d)&&r(d),N(H)}else r(d);h=n(d)}if(h!==null)V=!0;else{var G=n(m);G!==null&&U(O,G.startTime-H),V=!1}}break e}finally{h=null,g=Y,y=!1}V=void 0}}finally{V?$():I=!1}}}var $;if(typeof C=="function")$=function(){C(M)};else if(typeof MessageChannel<"u"){var W=new MessageChannel,B=W.port2;W.port1.onmessage=M,$=function(){B.postMessage(null)}}else $=function(){_(M,0)};function U(H,V){D=_(function(){H(e.unstable_now())},V)}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||125Q?(H.sortIndex=Y,t(m,H),n(d)===null&&H===n(m)&&(k?(w(D),D=-1):k=!0,U(O,Y-Q))):(H.sortIndex=q,t(d,H),v||y||(v=!0,I||(I=!0,$()))),H},e.unstable_shouldYield=A,e.unstable_wrapCallback=function(H){var V=g;return function(){var Y=g;g=V;try{return H.apply(this,arguments)}finally{g=Y}}}})(ag)),ag}var bk;function z3(){return bk||(bk=1,og.exports=L3()),og.exports}var lg={exports:{}},_r={};var _k;function P3(){if(_k)return _r;_k=1;var e=El();function t(d){var m="https://react.dev/errors/"+d;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),lg.exports=P3(),lg.exports}var Sk;function B3(){if(Sk)return jc;Sk=1;var e=z3(),t=El(),n=Dj();function r(s){var l="https://react.dev/errors/"+s;if(1q||(s.current=Q[q],Q[q]=null,q--)}function P(s,l){q++,Q[q]=s.current,s.current=l}var X=G(null),ee=G(null),te=G(null),re=G(null);function oe(s,l){switch(P(te,l),P(ee,s),P(X,null),l.nodeType){case 9:case 11:s=(s=l.documentElement)&&(s=s.namespaceURI)?P_(s):0;break;default:if(s=l.tagName,l=l.namespaceURI)l=P_(l),s=B_(l,s);else switch(s){case"svg":s=1;break;case"math":s=2;break;default:s=0}}J(X),P(X,s)}function de(){J(X),J(ee),J(te)}function se(s){s.memoizedState!==null&&P(re,s);var l=X.current,f=B_(l,s.type);l!==f&&(P(ee,s),P(X,f))}function Ee(s){ee.current===s&&(J(X),J(ee)),re.current===s&&(J(re),_c._currentValue=Y)}var we,Ce;function Be(s){if(we===void 0)try{throw Error()}catch(f){var l=f.stack.trim().match(/\n( *(at )?)/);we=l&&l[1]||"",Ce=-1)":-1b||ie[x]!==ge[b]){var _e=` -`+ie[x].replace(" at new "," at ");return s.displayName&&_e.includes("")&&(_e=_e.replace("",s.displayName)),_e}while(1<=x&&0<=b);break}}}finally{Ge=!1,Error.prepareStackTrace=f}return(f=s?s.displayName||s.name:"")?Be(f):""}function yt(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 Ye(s.type,!1);case 11:return Ye(s.type.render,!1);case 1:return Ye(s.type,!0);case 31:return Be("Activity");default:return""}}function qt(s){try{var l="",f=null;do l+=yt(s,f),f=s,s=s.return;while(s);return l}catch(x){return` -Error generating stack: `+x.message+` -`+x.stack}}var bt=Object.prototype.hasOwnProperty,vt=e.unstable_scheduleCallback,me=e.unstable_cancelCallback,Oe=e.unstable_shouldYield,rt=e.unstable_requestPaint,Qe=e.unstable_now,Je=e.unstable_getCurrentPriorityLevel,fe=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Me=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,$e=e.unstable_IdlePriority,Wt=e.log,nn=e.unstable_setDisableYieldValue,ke=null,Te=null;function Pe(s){if(typeof Wt=="function"&&nn(s),Te&&typeof Te.setStrictMode=="function")try{Te.setStrictMode(ke,s)}catch{}}var Ve=Math.clz32?Math.clz32:Mn,qe=Math.log,et=Math.LN2;function Mn(s){return s>>>=0,s===0?32:31-(qe(s)/et|0)|0}var Tn=256,Dn=262144,yn=4194304;function Yt(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 Jt(s,l,f){var x=s.pendingLanes;if(x===0)return 0;var b=0,E=s.suspendedLanes,F=s.pingedLanes;s=s.warmLanes;var K=x&134217727;return K!==0?(x=K&~E,x!==0?b=Yt(x):(F&=K,F!==0?b=Yt(F):f||(f=K&~s,f!==0&&(b=Yt(f))))):(K=x&~E,K!==0?b=Yt(K):F!==0?b=Yt(F):f||(f=x&~s,f!==0&&(b=Yt(f)))),b===0?0:l!==0&&l!==b&&(l&E)===0&&(E=b&-b,f=l&-l,E>=f||E===32&&(f&4194048)!==0)?l:b}function Et(s,l){return(s.pendingLanes&~(s.suspendedLanes&~s.pingedLanes)&l)===0}function wt(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 tt(){var s=yn;return yn<<=1,(yn&62914560)===0&&(yn=4194304),s}function it(s){for(var l=[],f=0;31>f;f++)l.push(s);return l}function rn(s,l){s.pendingLanes|=l,l!==268435456&&(s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0)}function Xt(s,l,f,x,b,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 K=s.entanglements,ie=s.expirationTimes,ge=s.hiddenUpdates;for(f=F&~f;0"u")return null;try{return s.activeElement||s.body}catch{return s.body}}var br=/[\n"\\]/g;function Cn(s){return s.replace(br,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function Hn(s,l,f,x,b,E,F,K){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=""+ue(l)):s.value!==""+ue(l)&&(s.value=""+ue(l)):F!=="submit"&&F!=="reset"||s.removeAttribute("value"),l!=null?hn(s,F,ue(l)):f!=null?hn(s,F,ue(f)):x!=null&&s.removeAttribute("value"),b==null&&E!=null&&(s.defaultChecked=!!E),b!=null&&(s.checked=b&&typeof b!="function"&&typeof b!="symbol"),K!=null&&typeof K!="function"&&typeof K!="symbol"&&typeof K!="boolean"?s.name=""+ue(K):s.removeAttribute("name")}function Er(s,l,f,x,b,E,F,K){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)){ft(s);return}f=f!=null?""+ue(f):"",l=l!=null?""+ue(l):f,K||l===s.value||(s.value=l),s.defaultValue=l}x=x??b,x=typeof x!="function"&&typeof x!="symbol"&&!!x,s.checked=K?s.checked:!!x,s.defaultChecked=!!x,F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"&&(s.name=F),ft(s)}function hn(s,l,f){l==="number"&&An(s.ownerDocument)===s||s.defaultValue===""+f||(s.defaultValue=""+f)}function Mr(s,l,f,x){if(s=s.options,l){l={};for(var b=0;b"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ll=!1;if(Si)try{var rs={};Object.defineProperty(rs,"passive",{get:function(){Ll=!0}}),window.addEventListener("test",rs,rs),window.removeEventListener("test",rs,rs)}catch{Ll=!1}var ai=null,aa=null,vo=null;function zl(){if(vo)return vo;var s,l=aa,f=l.length,x,b="value"in ai?ai.value:ai.textContent,E=b.length;for(s=0;s=Fl),Gv=" ",qv=!1;function Wv(s,l){switch(s){case"keyup":return eA.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yv(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var fa=!1;function nA(s,l){switch(s){case"compositionend":return Yv(l);case"keypress":return l.which!==32?null:(qv=!0,Gv);case"textInput":return s=l.data,s===Gv&&qv?null:s;default:return null}}function rA(s,l){if(fa)return s==="compositionend"||!ch&&Wv(s,l)?(s=zl(),vo=aa=ai=null,fa=!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)return{node:f,offset:l-s};s=x}e:{for(;f;){if(f.nextSibling){f=f.nextSibling;break e}f=f.parentNode}f=void 0}f=nb(f)}}function ib(s,l){return s&&l?s===l?!0:s&&s.nodeType===3?!1:l&&l.nodeType===3?ib(s,l.parentNode):"contains"in s?s.contains(l):s.compareDocumentPosition?!!(s.compareDocumentPosition(l)&16):!1:!1}function sb(s){s=s!=null&&s.ownerDocument!=null&&s.ownerDocument.defaultView!=null?s.ownerDocument.defaultView:window;for(var l=An(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=An(s.document)}return l}function fh(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 dA=Si&&"documentMode"in document&&11>=document.documentMode,ma=null,mh=null,ql=null,hh=!1;function ob(s,l,f){var x=f.window===f?f.document:f.nodeType===9?f:f.ownerDocument;hh||ma==null||ma!==An(x)||(x=ma,"selectionStart"in x&&fh(x)?x={start:x.selectionStart,end:x.selectionEnd}:(x=(x.ownerDocument&&x.ownerDocument.defaultView||window).getSelection(),x={anchorNode:x.anchorNode,anchorOffset:x.anchorOffset,focusNode:x.focusNode,focusOffset:x.focusOffset}),ql&&Gl(ql,x)||(ql=x,x=Dd(mh,"onSelect"),0>=F,b-=F,Pi=1<<32-Ve(l)+b|f<Ct?(zt=nt,nt=null):zt=nt.sibling;var Qt=xe(ce,nt,pe[Ct],Ne);if(Qt===null){nt===null&&(nt=zt);break}s&&nt&&Qt.alternate===null&&l(ce,nt),le=E(Qt,le,Ct),Zt===null?lt=Qt:Zt.sibling=Qt,Zt=Qt,nt=zt}if(Ct===pe.length)return f(ce,nt),$t&&as(ce,Ct),lt;if(nt===null){for(;CtCt?(zt=nt,nt=null):zt=nt.sibling;var ro=xe(ce,nt,Qt.value,Ne);if(ro===null){nt===null&&(nt=zt);break}s&&nt&&ro.alternate===null&&l(ce,nt),le=E(ro,le,Ct),Zt===null?lt=ro:Zt.sibling=ro,Zt=ro,nt=zt}if(Qt.done)return f(ce,nt),$t&&as(ce,Ct),lt;if(nt===null){for(;!Qt.done;Ct++,Qt=pe.next())Qt=Ie(ce,Qt.value,Ne),Qt!==null&&(le=E(Qt,le,Ct),Zt===null?lt=Qt:Zt.sibling=Qt,Zt=Qt);return $t&&as(ce,Ct),lt}for(nt=x(nt);!Qt.done;Ct++,Qt=pe.next())Qt=ye(nt,ce,Ct,Qt.value,Ne),Qt!==null&&(s&&Qt.alternate!==null&&nt.delete(Qt.key===null?Ct:Qt.key),le=E(Qt,le,Ct),Zt===null?lt=Qt:Zt.sibling=Qt,Zt=Qt);return s&&nt.forEach(function(R3){return l(ce,R3)}),$t&&as(ce,Ct),lt}function fn(ce,le,pe,Ne){if(typeof pe=="object"&&pe!==null&&pe.type===k&&pe.key===null&&(pe=pe.props.children),typeof pe=="object"&&pe!==null){switch(pe.$$typeof){case y:e:{for(var lt=pe.key;le!==null;){if(le.key===lt){if(lt=pe.type,lt===k){if(le.tag===7){f(ce,le.sibling),Ne=b(le,pe.props.children),Ne.return=ce,ce=Ne;break e}}else if(le.elementType===lt||typeof lt=="object"&<!==null&<.$$typeof===T&&To(lt)===le.type){f(ce,le.sibling),Ne=b(le,pe.props),Ql(Ne,pe),Ne.return=ce,ce=Ne;break e}f(ce,le);break}else l(ce,le);le=le.sibling}pe.type===k?(Ne=Co(pe.props.children,ce.mode,Ne,pe.key),Ne.return=ce,ce=Ne):(Ne=Zu(pe.type,pe.key,pe.props,null,ce.mode,Ne),Ql(Ne,pe),Ne.return=ce,ce=Ne)}return F(ce);case v:e:{for(lt=pe.key;le!==null;){if(le.key===lt)if(le.tag===4&&le.stateNode.containerInfo===pe.containerInfo&&le.stateNode.implementation===pe.implementation){f(ce,le.sibling),Ne=b(le,pe.children||[]),Ne.return=ce,ce=Ne;break e}else{f(ce,le);break}else l(ce,le);le=le.sibling}Ne=_h(pe,ce.mode,Ne),Ne.return=ce,ce=Ne}return F(ce);case T:return pe=To(pe),fn(ce,le,pe,Ne)}if(U(pe))return Ze(ce,le,pe,Ne);if($(pe)){if(lt=$(pe),typeof lt!="function")throw Error(r(150));return pe=lt.call(pe),dt(ce,le,pe,Ne)}if(typeof pe.then=="function")return fn(ce,le,id(pe),Ne);if(pe.$$typeof===C)return fn(ce,le,ed(ce,pe),Ne);sd(ce,pe)}return typeof pe=="string"&&pe!==""||typeof pe=="number"||typeof pe=="bigint"?(pe=""+pe,le!==null&&le.tag===6?(f(ce,le.sibling),Ne=b(le,pe),Ne.return=ce,ce=Ne):(f(ce,le),Ne=bh(pe,ce.mode,Ne),Ne.return=ce,ce=Ne),F(ce)):f(ce,le)}return function(ce,le,pe,Ne){try{Zl=0;var lt=fn(ce,le,pe,Ne);return wa=null,lt}catch(nt){if(nt===Sa||nt===nd)throw nt;var Zt=Ur(29,nt,null,ce.mode);return Zt.lanes=Ne,Zt.return=ce,Zt}}}var Ao=Ib(!0),Tb=Ib(!1),$s=!1;function Mh(s){s.updateQueue={baseState:s.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Dh(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 Hs(s){return{lane:s,tag:0,payload:null,callback:null,next:null}}function Fs(s,l,f){var x=s.updateQueue;if(x===null)return null;if(x=x.shared,(en&2)!==0){var b=x.pending;return b===null?l.next=l:(l.next=b.next,b.next=l),x.pending=l,l=Ku(s),mb(s,null,f),l}return Xu(s,x,l,f),Ku(s)}function Jl(s,l,f){if(l=l.updateQueue,l!==null&&(l=l.shared,(f&4194048)!==0)){var x=l.lanes;x&=s.pendingLanes,f|=x,l.lanes=f,Ht(s,f)}}function Oh(s,l){var f=s.updateQueue,x=s.alternate;if(x!==null&&(x=x.updateQueue,f===x)){var b=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?b=E=F:E=E.next=F,f=f.next}while(f!==null);E===null?b=E=l:E=E.next=l}else b=E=l;f={baseState:x.baseState,firstBaseUpdate:b,lastBaseUpdate:E,shared:x.shared,callbacks:x.callbacks},s.updateQueue=f;return}s=f.lastBaseUpdate,s===null?f.firstBaseUpdate=l:s.next=l,f.lastBaseUpdate=l}var Lh=!1;function ec(){if(Lh){var s=ka;if(s!==null)throw s}}function tc(s,l,f,x){Lh=!1;var b=s.updateQueue;$s=!1;var E=b.firstBaseUpdate,F=b.lastBaseUpdate,K=b.shared.pending;if(K!==null){b.shared.pending=null;var ie=K,ge=ie.next;ie.next=null,F===null?E=ge:F.next=ge,F=ie;var _e=s.alternate;_e!==null&&(_e=_e.updateQueue,K=_e.lastBaseUpdate,K!==F&&(K===null?_e.firstBaseUpdate=ge:K.next=ge,_e.lastBaseUpdate=ie))}if(E!==null){var Ie=b.baseState;F=0,_e=ge=ie=null,K=E;do{var xe=K.lane&-536870913,ye=xe!==K.lane;if(ye?(Lt&xe)===xe:(x&xe)===xe){xe!==0&&xe===_a&&(Lh=!0),_e!==null&&(_e=_e.next={lane:0,tag:K.tag,payload:K.payload,callback:null,next:null});e:{var Ze=s,dt=K;xe=l;var fn=f;switch(dt.tag){case 1:if(Ze=dt.payload,typeof Ze=="function"){Ie=Ze.call(fn,Ie,xe);break e}Ie=Ze;break e;case 3:Ze.flags=Ze.flags&-65537|128;case 0:if(Ze=dt.payload,xe=typeof Ze=="function"?Ze.call(fn,Ie,xe):Ze,xe==null)break e;Ie=h({},Ie,xe);break e;case 2:$s=!0}}xe=K.callback,xe!==null&&(s.flags|=64,ye&&(s.flags|=8192),ye=b.callbacks,ye===null?b.callbacks=[xe]:ye.push(xe))}else ye={lane:xe,tag:K.tag,payload:K.payload,callback:K.callback,next:null},_e===null?(ge=_e=ye,ie=Ie):_e=_e.next=ye,F|=xe;if(K=K.next,K===null){if(K=b.shared.pending,K===null)break;ye=K,K=ye.next,ye.next=null,b.lastBaseUpdate=ye,b.shared.pending=null}}while(!0);_e===null&&(ie=Ie),b.baseState=ie,b.firstBaseUpdate=ge,b.lastBaseUpdate=_e,E===null&&(b.shared.lanes=0),Ws|=F,s.lanes=F,s.memoizedState=Ie}}function Rb(s,l){if(typeof s!="function")throw Error(r(191,s));s.call(l)}function Ab(s,l){var f=s.callbacks;if(f!==null)for(s.callbacks=null,s=0;sE?E:8;var F=H.T,K={};H.T=K,tp(s,!1,l,f);try{var ie=b(),ge=H.S;if(ge!==null&&ge(K,ie),ie!==null&&typeof ie=="object"&&typeof ie.then=="function"){var _e=bA(ie,x);ic(s,l,_e,Xr(s))}else ic(s,l,x,Xr(s))}catch(Ie){ic(s,l,{then:function(){},status:"rejected",reason:Ie},Xr())}finally{V.p=E,F!==null&&K.types!==null&&(F.types=K.types),H.T=F}}function jA(){}function Jh(s,l,f,x){if(s.tag!==5)throw Error(r(476));var b=u1(s).queue;c1(s,b,l,Y,f===null?jA:function(){return d1(s),f(x)})}function u1(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:ds,lastRenderedState:Y},next:null};var f={};return l.next={memoizedState:f,baseState:f,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ds,lastRenderedState:f},next:null},s.memoizedState=l,s=s.alternate,s!==null&&(s.memoizedState=l),l}function d1(s){var l=u1(s);l.next===null&&(l=s.alternate.memoizedState),ic(s,l.next.queue,{},Xr())}function ep(){return hr(_c)}function f1(){return Vn().memoizedState}function m1(){return Vn().memoizedState}function EA(s){for(var l=s.return;l!==null;){switch(l.tag){case 24:case 3:var f=Xr();s=Hs(f);var x=Fs(l,s,f);x!==null&&(Pr(x,l,f),Jl(x,l,f)),l={cache:Ih()},s.payload=l;return}l=l.return}}function NA(s,l,f){var x=Xr();f={lane:x,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null},pd(s)?p1(l,f):(f=yh(s,l,f,x),f!==null&&(Pr(f,s,x),g1(f,l,x)))}function h1(s,l,f){var x=Xr();ic(s,l,f,x)}function ic(s,l,f,x){var b={lane:x,revertLane:0,gesture:null,action:f,hasEagerState:!1,eagerState:null,next:null};if(pd(s))p1(l,b);else{var E=s.alternate;if(s.lanes===0&&(E===null||E.lanes===0)&&(E=l.lastRenderedReducer,E!==null))try{var F=l.lastRenderedState,K=E(F,f);if(b.hasEagerState=!0,b.eagerState=K,Vr(K,F))return Xu(s,l,b,0),pn===null&&Yu(),!1}catch{}if(f=yh(s,l,b,x),f!==null)return Pr(f,s,x),g1(f,l,x),!0}return!1}function tp(s,l,f,x){if(x={lane:2,revertLane:Mp(),gesture:null,action:x,hasEagerState:!1,eagerState:null,next:null},pd(s)){if(l)throw Error(r(479))}else l=yh(s,f,x,2),l!==null&&Pr(l,s,2)}function pd(s){var l=s.alternate;return s===kt||l!==null&&l===kt}function p1(s,l){ja=ld=!0;var f=s.pending;f===null?l.next=l:(l.next=f.next,f.next=l),s.pending=l}function g1(s,l,f){if((f&4194048)!==0){var x=l.lanes;x&=s.pendingLanes,f|=x,l.lanes=f,Ht(s,f)}}var sc={readContext:hr,use:dd,useCallback:Ln,useContext:Ln,useEffect:Ln,useImperativeHandle:Ln,useLayoutEffect:Ln,useInsertionEffect:Ln,useMemo:Ln,useReducer:Ln,useRef:Ln,useState:Ln,useDebugValue:Ln,useDeferredValue:Ln,useTransition:Ln,useSyncExternalStore:Ln,useId:Ln,useHostTransitionStatus:Ln,useFormState:Ln,useActionState:Ln,useOptimistic:Ln,useMemoCache:Ln,useCacheRefresh:Ln};sc.useEffectEvent=Ln;var x1={readContext:hr,use:dd,useCallback:function(s,l){return Nr().memoizedState=[s,l===void 0?null:l],s},useContext:hr,useEffect:e1,useImperativeHandle:function(s,l,f){f=f!=null?f.concat([s]):null,md(4194308,4,i1.bind(null,l,s),f)},useLayoutEffect:function(s,l){return md(4194308,4,s,l)},useInsertionEffect:function(s,l){md(4,2,s,l)},useMemo:function(s,l){var f=Nr();l=l===void 0?null:l;var x=s();if(Mo){Pe(!0);try{s()}finally{Pe(!1)}}return f.memoizedState=[x,l],x},useReducer:function(s,l,f){var x=Nr();if(f!==void 0){var b=f(l);if(Mo){Pe(!0);try{f(l)}finally{Pe(!1)}}}else b=l;return x.memoizedState=x.baseState=b,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:b},x.queue=s,s=s.dispatch=NA.bind(null,kt,s),[x.memoizedState,s]},useRef:function(s){var l=Nr();return s={current:s},l.memoizedState=s},useState:function(s){s=Yh(s);var l=s.queue,f=h1.bind(null,kt,l);return l.dispatch=f,[s.memoizedState,f]},useDebugValue:Zh,useDeferredValue:function(s,l){var f=Nr();return Qh(f,s,l)},useTransition:function(){var s=Yh(!1);return s=c1.bind(null,kt,s.queue,!0,!1),Nr().memoizedState=s,[!1,s]},useSyncExternalStore:function(s,l,f){var x=kt,b=Nr();if($t){if(f===void 0)throw Error(r(407));f=f()}else{if(f=l(),pn===null)throw Error(r(349));(Lt&127)!==0||Pb(x,l,f)}b.memoizedState=f;var E={value:f,getSnapshot:l};return b.queue=E,e1($b.bind(null,x,E,s),[s]),x.flags|=2048,Na(9,{destroy:void 0},Bb.bind(null,x,E,f,l),null),f},useId:function(){var s=Nr(),l=pn.identifierPrefix;if($t){var f=Bi,x=Pi;f=(x&~(1<<32-Ve(x)-1)).toString(32)+f,l="_"+l+"R_"+f,f=cd++,0<\/script>",E=E.removeChild(E.firstChild);break;case"select":E=typeof x.is=="string"?F.createElement("select",{is:x.is}):F.createElement("select"),x.multiple?E.multiple=!0:x.size&&(E.size=x.size);break;default:E=typeof x.is=="string"?F.createElement(b,{is:x.is}):F.createElement(b)}}E[He]=l,E[Tt]=x;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(gr(E,b,x),b){case"button":case"input":case"select":case"textarea":x=!!x.autoFocus;break e;case"img":x=!0;break e;default:x=!1}x&&ms(l)}}return _n(l),pp(l,l.type,s===null?null:s.memoizedProps,l.pendingProps,f),null;case 6:if(s&&l.stateNode!=null)s.memoizedProps!==x&&ms(l);else{if(typeof x!="string"&&l.stateNode===null)throw Error(r(166));if(s=te.current,va(l)){if(s=l.stateNode,f=l.memoizedProps,x=null,b=mr,b!==null)switch(b.tag){case 27:case 5:x=b.memoizedProps}s[He]=l,s=!!(s.nodeValue===f||x!==null&&x.suppressHydrationWarning===!0||L_(s.nodeValue,f)),s||Ps(l,!0)}else s=Od(s).createTextNode(x),s[He]=l,l.stateNode=s}return _n(l),null;case 31:if(f=l.memoizedState,s===null||s.memoizedState!==null){if(x=va(l),f!==null){if(s===null){if(!x)throw Error(r(318));if(s=l.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(r(557));s[He]=l}else jo(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;_n(l),s=!1}else f=Ch(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=f),s=!0;if(!s)return l.flags&256?(qr(l),l):(qr(l),null);if((l.flags&128)!==0)throw Error(r(558))}return _n(l),null;case 13:if(x=l.memoizedState,s===null||s.memoizedState!==null&&s.memoizedState.dehydrated!==null){if(b=va(l),x!==null&&x.dehydrated!==null){if(s===null){if(!b)throw Error(r(318));if(b=l.memoizedState,b=b!==null?b.dehydrated:null,!b)throw Error(r(317));b[He]=l}else jo(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;_n(l),b=!1}else b=Ch(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=b),b=!0;if(!b)return l.flags&256?(qr(l),l):(qr(l),null)}return qr(l),(l.flags&128)!==0?(l.lanes=f,l):(f=x!==null,s=s!==null&&s.memoizedState!==null,f&&(x=l.child,b=null,x.alternate!==null&&x.alternate.memoizedState!==null&&x.alternate.memoizedState.cachePool!==null&&(b=x.alternate.memoizedState.cachePool.pool),E=null,x.memoizedState!==null&&x.memoizedState.cachePool!==null&&(E=x.memoizedState.cachePool.pool),E!==b&&(x.flags|=2048)),f!==s&&f&&(l.child.flags|=8192),bd(l,l.updateQueue),_n(l),null);case 4:return de(),s===null&&zp(l.stateNode.containerInfo),_n(l),null;case 10:return cs(l.type),_n(l),null;case 19:if(J(Fn),x=l.memoizedState,x===null)return _n(l),null;if(b=(l.flags&128)!==0,E=x.rendering,E===null)if(b)ac(x,!1);else{if(zn!==0||s!==null&&(s.flags&128)!==0)for(s=l.child;s!==null;){if(E=ad(s),E!==null){for(l.flags|=128,ac(x,!1),s=E.updateQueue,l.updateQueue=s,bd(l,s),l.subtreeFlags=0,s=f,f=l.child;f!==null;)hb(f,s),f=f.sibling;return P(Fn,Fn.current&1|2),$t&&as(l,x.treeForkCount),l.child}s=s.sibling}x.tail!==null&&Qe()>Cd&&(l.flags|=128,b=!0,ac(x,!1),l.lanes=4194304)}else{if(!b)if(s=ad(E),s!==null){if(l.flags|=128,b=!0,s=s.updateQueue,l.updateQueue=s,bd(l,s),ac(x,!0),x.tail===null&&x.tailMode==="hidden"&&!E.alternate&&!$t)return _n(l),null}else 2*Qe()-x.renderingStartTime>Cd&&f!==536870912&&(l.flags|=128,b=!0,ac(x,!1),l.lanes=4194304);x.isBackwards?(E.sibling=l.child,l.child=E):(s=x.last,s!==null?s.sibling=E:l.child=E,x.last=E)}return x.tail!==null?(s=x.tail,x.rendering=s,x.tail=s.sibling,x.renderingStartTime=Qe(),s.sibling=null,f=Fn.current,P(Fn,b?f&1|2:f&1),$t&&as(l,x.treeForkCount),s):(_n(l),null);case 22:case 23:return qr(l),Ph(),x=l.memoizedState!==null,s!==null?s.memoizedState!==null!==x&&(l.flags|=8192):x&&(l.flags|=8192),x?(f&536870912)!==0&&(l.flags&128)===0&&(_n(l),l.subtreeFlags&6&&(l.flags|=8192)):_n(l),f=l.updateQueue,f!==null&&bd(l,f.retryQueue),f=null,s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(f=s.memoizedState.cachePool.pool),x=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(x=l.memoizedState.cachePool.pool),x!==f&&(l.flags|=2048),s!==null&&J(Io),null;case 24:return f=null,s!==null&&(f=s.memoizedState.cache),l.memoizedState.cache!==f&&(l.flags|=2048),cs(Un),_n(l),null;case 25:return null;case 30:return null}throw Error(r(156,l.tag))}function MA(s,l){switch(Sh(l),l.tag){case 1:return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 3:return cs(Un),de(),s=l.flags,(s&65536)!==0&&(s&128)===0?(l.flags=s&-65537|128,l):null;case 26:case 27:case 5:return Ee(l),null;case 31:if(l.memoizedState!==null){if(qr(l),l.alternate===null)throw Error(r(340));jo()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 13:if(qr(l),s=l.memoizedState,s!==null&&s.dehydrated!==null){if(l.alternate===null)throw Error(r(340));jo()}return s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 19:return J(Fn),null;case 4:return de(),null;case 10:return cs(l.type),null;case 22:case 23:return qr(l),Ph(),s!==null&&J(Io),s=l.flags,s&65536?(l.flags=s&-65537|128,l):null;case 24:return cs(Un),null;case 25:return null;default:return null}}function H1(s,l){switch(Sh(l),l.tag){case 3:cs(Un),de();break;case 26:case 27:case 5:Ee(l);break;case 4:de();break;case 31:l.memoizedState!==null&&qr(l);break;case 13:qr(l);break;case 19:J(Fn);break;case 10:cs(l.type);break;case 22:case 23:qr(l),Ph(),s!==null&&J(Io);break;case 24:cs(Un)}}function lc(s,l){try{var f=l.updateQueue,x=f!==null?f.lastEffect:null;if(x!==null){var b=x.next;f=b;do{if((f.tag&s)===s){x=void 0;var E=f.create,F=f.inst;x=E(),F.destroy=x}f=f.next}while(f!==b)}}catch(K){ln(l,l.return,K)}}function Gs(s,l,f){try{var x=l.updateQueue,b=x!==null?x.lastEffect:null;if(b!==null){var E=b.next;x=E;do{if((x.tag&s)===s){var F=x.inst,K=F.destroy;if(K!==void 0){F.destroy=void 0,b=l;var ie=f,ge=K;try{ge()}catch(_e){ln(b,ie,_e)}}}x=x.next}while(x!==E)}}catch(_e){ln(l,l.return,_e)}}function F1(s){var l=s.updateQueue;if(l!==null){var f=s.stateNode;try{Ab(l,f)}catch(x){ln(s,s.return,x)}}}function V1(s,l,f){f.props=Do(s.type,s.memoizedProps),f.state=s.memoizedState;try{f.componentWillUnmount()}catch(x){ln(s,l,x)}}function cc(s,l){try{var f=s.ref;if(f!==null){switch(s.tag){case 26:case 27:case 5:var x=s.stateNode;break;case 30:x=s.stateNode;break;default:x=s.stateNode}typeof f=="function"?s.refCleanup=f(x):f.current=x}}catch(b){ln(s,l,b)}}function $i(s,l){var f=s.ref,x=s.refCleanup;if(f!==null)if(typeof x=="function")try{x()}catch(b){ln(s,l,b)}finally{s.refCleanup=null,s=s.alternate,s!=null&&(s.refCleanup=null)}else if(typeof f=="function")try{f(null)}catch(b){ln(s,l,b)}else f.current=null}function U1(s){var l=s.type,f=s.memoizedProps,x=s.stateNode;try{e:switch(l){case"button":case"input":case"select":case"textarea":f.autoFocus&&x.focus();break e;case"img":f.src?x.src=f.src:f.srcSet&&(x.srcset=f.srcSet)}}catch(b){ln(s,s.return,b)}}function gp(s,l,f){try{var x=s.stateNode;t3(x,s.type,f,l),x[Tt]=l}catch(b){ln(s,s.return,b)}}function G1(s){return s.tag===5||s.tag===3||s.tag===26||s.tag===27&&Qs(s.type)||s.tag===4}function xp(s){e:for(;;){for(;s.sibling===null;){if(s.return===null||G1(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&&Qs(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 yp(s,l,f){var x=s.tag;if(x===5||x===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=oi));else if(x!==4&&(x===27&&Qs(s.type)&&(f=s.stateNode,l=null),s=s.child,s!==null))for(yp(s,l,f),s=s.sibling;s!==null;)yp(s,l,f),s=s.sibling}function _d(s,l,f){var x=s.tag;if(x===5||x===6)s=s.stateNode,l?f.insertBefore(s,l):f.appendChild(s);else if(x!==4&&(x===27&&Qs(s.type)&&(f=s.stateNode),s=s.child,s!==null))for(_d(s,l,f),s=s.sibling;s!==null;)_d(s,l,f),s=s.sibling}function q1(s){var l=s.stateNode,f=s.memoizedProps;try{for(var x=s.type,b=l.attributes;b.length;)l.removeAttributeNode(b[0]);gr(l,x,f),l[He]=s,l[Tt]=f}catch(E){ln(s,s.return,E)}}var hs=!1,Wn=!1,vp=!1,W1=typeof WeakSet=="function"?WeakSet:Set,ir=null;function DA(s,l){if(s=s.containerInfo,$p=Fd,s=sb(s),fh(s)){if("selectionStart"in s)var f={start:s.selectionStart,end:s.selectionEnd};else e:{f=(f=s.ownerDocument)&&f.defaultView||window;var x=f.getSelection&&f.getSelection();if(x&&x.rangeCount!==0){f=x.anchorNode;var b=x.anchorOffset,E=x.focusNode;x=x.focusOffset;try{f.nodeType,E.nodeType}catch{f=null;break e}var F=0,K=-1,ie=-1,ge=0,_e=0,Ie=s,xe=null;t:for(;;){for(var ye;Ie!==f||b!==0&&Ie.nodeType!==3||(K=F+b),Ie!==E||x!==0&&Ie.nodeType!==3||(ie=F+x),Ie.nodeType===3&&(F+=Ie.nodeValue.length),(ye=Ie.firstChild)!==null;)xe=Ie,Ie=ye;for(;;){if(Ie===s)break t;if(xe===f&&++ge===b&&(K=F),xe===E&&++_e===x&&(ie=F),(ye=Ie.nextSibling)!==null)break;Ie=xe,xe=Ie.parentNode}Ie=ye}f=K===-1||ie===-1?null:{start:K,end:ie}}else f=null}f=f||{start:0,end:0}}else f=null;for(Hp={focusedElem:s,selectionRange:f},Fd=!1,ir=l;ir!==null;)if(l=ir,s=l.child,(l.subtreeFlags&1028)!==0&&s!==null)s.return=l,ir=s;else for(;ir!==null;){switch(l=ir,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 title"))),gr(E,x,f),E[He]=s,Pt(E),x=E;break e;case"link":var F=J_("link","href",b).get(x+(f.href||""));if(F){for(var K=0;Kfn&&(F=fn,fn=dt,dt=F);var ce=rb(K,dt),le=rb(K,fn);if(ce&&le&&(ye.rangeCount!==1||ye.anchorNode!==ce.node||ye.anchorOffset!==ce.offset||ye.focusNode!==le.node||ye.focusOffset!==le.offset)){var pe=Ie.createRange();pe.setStart(ce.node,ce.offset),ye.removeAllRanges(),dt>fn?(ye.addRange(pe),ye.extend(le.node,le.offset)):(pe.setEnd(le.node,le.offset),ye.addRange(pe))}}}}for(Ie=[],ye=K;ye=ye.parentNode;)ye.nodeType===1&&Ie.push({element:ye,left:ye.scrollLeft,top:ye.scrollTop});for(typeof K.focus=="function"&&K.focus(),K=0;Kf?32:f,H.T=null,f=jp,jp=null;var E=Xs,F=vs;if(er=0,Ma=Xs=null,vs=0,(en&6)!==0)throw Error(r(331));var K=en;if(en|=4,i_(E.current),t_(E,E.current,F,f),en=K,pc(0,!1),Te&&typeof Te.onPostCommitFiberRoot=="function")try{Te.onPostCommitFiberRoot(ke,E)}catch{}return!0}finally{V.p=b,H.T=x,k_(s,l)}}function w_(s,l,f){l=ci(f,l),l=sp(s.stateNode,l,2),s=Fs(s,l,2),s!==null&&(rn(s,2),Hi(s))}function ln(s,l,f){if(s.tag===3)w_(s,s,f);else for(;l!==null;){if(l.tag===3){w_(l,s,f);break}else if(l.tag===1){var x=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof x.componentDidCatch=="function"&&(Ys===null||!Ys.has(x))){s=ci(f,s),f=C1(2),x=Fs(l,f,2),x!==null&&(j1(f,x,l,s),rn(x,2),Hi(x));break}}l=l.return}}function Tp(s,l,f){var x=s.pingCache;if(x===null){x=s.pingCache=new zA;var b=new Set;x.set(l,b)}else b=x.get(l),b===void 0&&(b=new Set,x.set(l,b));b.has(f)||(kp=!0,b.add(f),s=FA.bind(null,s,l,f),l.then(s,s))}function FA(s,l,f){var x=s.pingCache;x!==null&&x.delete(l),s.pingedLanes|=s.suspendedLanes&f,s.warmLanes&=~f,pn===s&&(Lt&f)===f&&(zn===4||zn===3&&(Lt&62914560)===Lt&&300>Qe()-wd?(en&2)===0&&Da(s,0):Sp|=f,Aa===Lt&&(Aa=0)),Hi(s)}function C_(s,l){l===0&&(l=tt()),s=wo(s,l),s!==null&&(rn(s,l),Hi(s))}function VA(s){var l=s.memoizedState,f=0;l!==null&&(f=l.retryLane),C_(s,f)}function UA(s,l){var f=0;switch(s.tag){case 31:case 13:var x=s.stateNode,b=s.memoizedState;b!==null&&(f=b.retryLane);break;case 19:x=s.stateNode;break;case 22:x=s.stateNode._retryCache;break;default:throw Error(r(314))}x!==null&&x.delete(l),C_(s,f)}function GA(s,l){return vt(s,l)}var Rd=null,La=null,Rp=!1,Ad=!1,Ap=!1,Zs=0;function Hi(s){s!==La&&s.next===null&&(La===null?Rd=La=s:La=La.next=s),Ad=!0,Rp||(Rp=!0,WA())}function pc(s,l){if(!Ap&&Ad){Ap=!0;do for(var f=!1,x=Rd;x!==null;){if(s!==0){var b=x.pendingLanes;if(b===0)var E=0;else{var F=x.suspendedLanes,K=x.pingedLanes;E=(1<<31-Ve(42|s)+1)-1,E&=b&~(F&~K),E=E&201326741?E&201326741|1:E?E|2:0}E!==0&&(f=!0,I_(x,E))}else E=Lt,E=Jt(x,x===pn?E:0,x.cancelPendingCommit!==null||x.timeoutHandle!==-1),(E&3)===0||Et(x,E)||(f=!0,I_(x,E));x=x.next}while(f);Ap=!1}}function qA(){j_()}function j_(){Ad=Rp=!1;var s=0;Zs!==0&&r3()&&(s=Zs);for(var l=Qe(),f=null,x=Rd;x!==null;){var b=x.next,E=E_(x,l);E===0?(x.next=null,f===null?Rd=b:f.next=b,b===null&&(La=f)):(f=x,(s!==0||(E&3)!==0)&&(Ad=!0)),x=b}er!==0&&er!==5||pc(s),Zs!==0&&(Zs=0)}function E_(s,l){for(var f=s.suspendedLanes,x=s.pingedLanes,b=s.expirationTimes,E=s.pendingLanes&-62914561;0K)break;var _e=ie.transferSize,Ie=ie.initiatorType;_e&&z_(Ie)&&(ie=ie.responseEnd,F+=_e*(ie"u"?null:document;function X_(s,l,f){var x=za;if(x&&typeof l=="string"&&l){var b=Cn(l);b='link[rel="'+s+'"][href="'+b+'"]',typeof f=="string"&&(b+='[crossorigin="'+f+'"]'),Y_.has(b)||(Y_.add(b),s={rel:s,crossOrigin:f,href:l},x.querySelector(b)===null&&(l=x.createElement("link"),gr(l,"link",s),Pt(l),x.head.appendChild(l)))}}function f3(s){bs.D(s),X_("dns-prefetch",s,null)}function m3(s,l){bs.C(s,l),X_("preconnect",s,l)}function h3(s,l,f){bs.L(s,l,f);var x=za;if(x&&s&&l){var b='link[rel="preload"][as="'+Cn(l)+'"]';l==="image"&&f&&f.imageSrcSet?(b+='[imagesrcset="'+Cn(f.imageSrcSet)+'"]',typeof f.imageSizes=="string"&&(b+='[imagesizes="'+Cn(f.imageSizes)+'"]')):b+='[href="'+Cn(s)+'"]';var E=b;switch(l){case"style":E=Pa(s);break;case"script":E=Ba(s)}pi.has(E)||(s=h({rel:"preload",href:l==="image"&&f&&f.imageSrcSet?void 0:s,as:l},f),pi.set(E,s),x.querySelector(b)!==null||l==="style"&&x.querySelector(vc(E))||l==="script"&&x.querySelector(bc(E))||(l=x.createElement("link"),gr(l,"link",s),Pt(l),x.head.appendChild(l)))}}function p3(s,l){bs.m(s,l);var f=za;if(f&&s){var x=l&&typeof l.as=="string"?l.as:"script",b='link[rel="modulepreload"][as="'+Cn(x)+'"][href="'+Cn(s)+'"]',E=b;switch(x){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":E=Ba(s)}if(!pi.has(E)&&(s=h({rel:"modulepreload",href:s},l),pi.set(E,s),f.querySelector(b)===null)){switch(x){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(f.querySelector(bc(E)))return}x=f.createElement("link"),gr(x,"link",s),Pt(x),f.head.appendChild(x)}}}function g3(s,l,f){bs.S(s,l,f);var x=za;if(x&&s){var b=mn(x).hoistableStyles,E=Pa(s);l=l||"default";var F=b.get(E);if(!F){var K={loading:0,preload:null};if(F=x.querySelector(vc(E)))K.loading=5;else{s=h({rel:"stylesheet",href:s,"data-precedence":l},f),(f=pi.get(E))&&Yp(s,f);var ie=F=x.createElement("link");Pt(ie),gr(ie,"link",s),ie._p=new Promise(function(ge,_e){ie.onload=ge,ie.onerror=_e}),ie.addEventListener("load",function(){K.loading|=1}),ie.addEventListener("error",function(){K.loading|=2}),K.loading|=4,zd(F,l,x)}F={type:"stylesheet",instance:F,count:1,state:K},b.set(E,F)}}}function x3(s,l){bs.X(s,l);var f=za;if(f&&s){var x=mn(f).hoistableScripts,b=Ba(s),E=x.get(b);E||(E=f.querySelector(bc(b)),E||(s=h({src:s,async:!0},l),(l=pi.get(b))&&Xp(s,l),E=f.createElement("script"),Pt(E),gr(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},x.set(b,E))}}function y3(s,l){bs.M(s,l);var f=za;if(f&&s){var x=mn(f).hoistableScripts,b=Ba(s),E=x.get(b);E||(E=f.querySelector(bc(b)),E||(s=h({src:s,async:!0,type:"module"},l),(l=pi.get(b))&&Xp(s,l),E=f.createElement("script"),Pt(E),gr(E,"link",s),f.head.appendChild(E)),E={type:"script",instance:E,count:1,state:null},x.set(b,E))}}function K_(s,l,f,x){var b=(b=te.current)?Ld(b):null;if(!b)throw Error(r(446));switch(s){case"meta":case"title":return null;case"style":return typeof f.precedence=="string"&&typeof f.href=="string"?(l=Pa(f.href),f=mn(b).hoistableStyles,x=f.get(l),x||(x={type:"style",instance:null,count:0,state:null},f.set(l,x)),x):{type:"void",instance:null,count:0,state:null};case"link":if(f.rel==="stylesheet"&&typeof f.href=="string"&&typeof f.precedence=="string"){s=Pa(f.href);var E=mn(b).hoistableStyles,F=E.get(s);if(F||(b=b.ownerDocument||b,F={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},E.set(s,F),(E=b.querySelector(vc(s)))&&!E._p&&(F.instance=E,F.state.loading=5),pi.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},pi.set(s,f),E||v3(b,s,f,F.state))),l&&x===null)throw Error(r(528,""));return F}if(l&&x!==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=Ba(f),f=mn(b).hoistableScripts,x=f.get(l),x||(x={type:"script",instance:null,count:0,state:null},f.set(l,x)),x):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,s))}}function Pa(s){return'href="'+Cn(s)+'"'}function vc(s){return'link[rel="stylesheet"]['+s+"]"}function Z_(s){return h({},s,{"data-precedence":s.precedence,precedence:null})}function v3(s,l,f,x){s.querySelector('link[rel="preload"][as="style"]['+l+"]")?x.loading=1:(l=s.createElement("link"),x.preload=l,l.addEventListener("load",function(){return x.loading|=1}),l.addEventListener("error",function(){return x.loading|=2}),gr(l,"link",f),Pt(l),s.head.appendChild(l))}function Ba(s){return'[src="'+Cn(s)+'"]'}function bc(s){return"script[async]"+s}function Q_(s,l,f){if(l.count++,l.instance===null)switch(l.type){case"style":var x=s.querySelector('style[data-href~="'+Cn(f.href)+'"]');if(x)return l.instance=x,Pt(x),x;var b=h({},f,{"data-href":f.href,"data-precedence":f.precedence,href:null,precedence:null});return x=(s.ownerDocument||s).createElement("style"),Pt(x),gr(x,"style",b),zd(x,f.precedence,s),l.instance=x;case"stylesheet":b=Pa(f.href);var E=s.querySelector(vc(b));if(E)return l.state.loading|=4,l.instance=E,Pt(E),E;x=Z_(f),(b=pi.get(b))&&Yp(x,b),E=(s.ownerDocument||s).createElement("link"),Pt(E);var F=E;return F._p=new Promise(function(K,ie){F.onload=K,F.onerror=ie}),gr(E,"link",x),l.state.loading|=4,zd(E,f.precedence,s),l.instance=E;case"script":return E=Ba(f.src),(b=s.querySelector(bc(E)))?(l.instance=b,Pt(b),b):(x=f,(b=pi.get(E))&&(x=h({},f),Xp(x,b)),s=s.ownerDocument||s,b=s.createElement("script"),Pt(b),gr(b,"link",x),s.head.appendChild(b),l.instance=b);case"void":return null;default:throw Error(r(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(x=l.instance,l.state.loading|=4,zd(x,f.precedence,s));return l.instance}function zd(s,l,f){for(var x=f.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),b=x.length?x[x.length-1]:null,E=b,F=0;F title"):null)}function b3(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 tk(s){return!(s.type==="stylesheet"&&(s.state.loading&3)===0)}function _3(s,l,f,x){if(f.type==="stylesheet"&&(typeof x.media!="string"||matchMedia(x.media).matches!==!1)&&(f.state.loading&4)===0){if(f.instance===null){var b=Pa(x.href),E=l.querySelector(vc(b));if(E){l=E._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(s.count++,s=Bd.bind(s),l.then(s,s)),f.state.loading|=4,f.instance=E,Pt(E);return}E=l.ownerDocument||l,x=Z_(x),(b=pi.get(b))&&Yp(x,b),E=E.createElement("link"),Pt(E);var F=E;F._p=new Promise(function(K,ie){F.onload=K,F.onerror=ie}),gr(E,"link",x),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=Bd.bind(s),l.addEventListener("load",f),l.addEventListener("error",f))}}var Kp=0;function k3(s,l){return s.stylesheets&&s.count===0&&Hd(s,s.stylesheets),0Kp?50:800)+l);return s.unsuspend=f,function(){s.unsuspend=null,clearTimeout(x),clearTimeout(b)}}:null}function Bd(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Hd(this,this.stylesheets);else if(this.unsuspend){var s=this.unsuspend;this.unsuspend=null,s()}}}var $d=null;function Hd(s,l){s.stylesheets=null,s.unsuspend!==null&&(s.count++,$d=new Map,l.forEach(S3,s),$d=null,Bd.call(s))}function S3(s,l){if(!(l.state.loading&4)){var f=$d.get(s);if(f)var x=f.get(null);else{f=new Map,$d.set(s,f);for(var b=s.querySelectorAll("link[data-precedence],style[data-precedence]"),E=0;E"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),sg.exports=B3(),sg.exports}var H3=$3();const F3=2e3,V3=3e4,U3=20,G3=100,q3=3e4,W3=1e4,Y3=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"]);class X3{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}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.handlers.onStatus?.("disconnected"),this.ws=null,this.closedByUser||this.scheduleReconnect()}}disconnect(){this.closedByUser=!0,this.stopHeartbeat(),this.reconnectTimer!==null&&(window.clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws?.close(),this.ws=null}send(t){if(!this.ensureProjectScope(t))return;const n=JSON.stringify(t);if(!this.ws||this.ws.readyState!==WebSocket.OPEN){this.pendingQueue.length{!this.ws||this.ws.readyState!==WebSocket.OPEN||(this.ws.send(JSON.stringify({type:"ping"})),this.pongTimer=window.setTimeout(()=>{this.pongTimer=null,this.ws?.close()},W3))},q3)}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>=U3){this.handlers.onStatus?.("error","max reconnect attempts reached");return}const t=Math.min(F3*Math.pow(2,this.reconnectAttempt),V3);this.reconnectAttempt++,this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}}var K3=A3();const $r=ta(K3),R=32,Pn=20,Qr=25,E0=2,Ck=3,Z3=Pn*Ck+E0*(Ck-1),Q3=Qr,cg=Z3,Ec=Q3,Wc=R*8,el=R*4,rl=R*20,Oj=1.8,J3=Oj,eM=Oj,tM=30,nM=8,rM=-2,iM=.22,sM=5,oM=23;function aM(){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 Yc(e=new Date){if(typeof window<"u")try{const n=aM();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>=sM&&t<=oM}const jk=11064556,Ek=3228986,lM=200,cM=100,uM=60,Sf=2,wf=20,Lj=3,zj=6,Ha=2.5,dM=8,fM=15,Nk=5,Ik=10,mM=5,Tk=3,Rk=2;function hM(e,t,n){const r=t||e.clientWidth||window.innerWidth-380,i=n||e.clientHeight||window.innerHeight-48,o=Yc()?"#a8d4ec":"#31453a";return{type:$r.CANVAS,parent:e,width:r,height:i,pixelArt:!0,backgroundColor:o,physics:{default:"arcade",arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:$r.Scale.RESIZE,autoCenter:$r.Scale.NONE,parent:e},render:{antialias:!1,pixelArt:!0}}}const pM=16,gM=32,Ak=6;class xM extends $r.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{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;r0)return t}}catch{}return Bj()}function km(e){localStorage.setItem(Pj,JSON.stringify(e))}function yM(e,t){const n=Bn(),r=n.find(i=>i.id===e);r&&(r.name=t,km(n))}function ug(e,t){const n=Bn();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),km(n)}function vM(e){const t=Bn();for(const n of t)n.assignedAgents=n.assignedAgents.filter(r=>r!==e);km(t)}function bM(e){return Bn().find(t=>t.assignedAgents.includes(e))}function _M(e,t,n){const r=Bn(),i=r.find(o=>o.id===e);i&&(i.mapStr=t,i.seats=n,km(r))}function $j(e){const t=[];for(let n=0;n0?e[e.length-1].offsetCol+Pn:Pn,n=[];for(let r=0;rt.map(n=>n===0?".":"#").join(""))}function kr(e,t,n,r,i=t+r){return{x:Math.round(e*R),y:Math.round(t*R),w:Math.round(n*R),h:Math.round(r*R),depthY:Math.round(i*R)}}const kM=[kr(8,4,4.3,3.35,7.15),kr(2.3,8.65,5.35,1.95,10.55),kr(11.1,8.55,3.1,1.7,10.45),kr(14.15,8.55,4.95,2,10.95),kr(2.1,11.45,3.05,1.8,12.95),kr(5.25,11.45,3.05,1.8,12.95),kr(8.45,11.45,3.05,1.8,12.95),kr(2.1,14.55,3.05,1.85,16.1),kr(5.25,14.55,3.05,1.85,16.1),kr(8.45,14.55,3.05,1.85,16.1),kr(14,12.15,4.85,3,15.3),kr(1,19.55,3.05,1.15,20.7),kr(4.45,20.45,3.35,1.35,21.8),kr(14.1,20.5,3.15,1.85,22.3),kr(8.05,23.1,4.2,1,24.1),kr(17,23.1,2.1,1,24.1)];class zf{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*R;for(const i of kM){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",u="10px"){const d=t.add.text(n,r,i,{fontSize:u,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+R*10.1,i=R*4.1,o=r+i+R*.15,a=o+R*1.1;return{gateCenterX:t/2,roadY:r,roadHeight:i,waterTopY:o,dockY:a,bottomY:n+rl}}paintStylizedParkingCar(t,n,r,i,o,a){const u=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=(y,v,k,S,_,w=1)=>{t.fillStyle(_,w);const C=i?-y-k:y;t.fillRect(Math.round(n+C),Math.round(r+v),k,S)};t.fillStyle(988175,.28),t.fillEllipse(n,r+36,36,9),d(-16,-38,32,76,u.outline),d(-15,-37,30,74,u.body),d(-14,2,28,35,u.bodyDark),d(-14,-4,28,10,u.bodyMid),d(-13,8,26,22,u.body),d(-13,8,26,7,u.bonnetHi,.92),d(-13,-35,26,32,u.cabin),d(-13,-35,26,4,u.cabinHi),d(-13,-8,26,5,u.cabinLo),d(-11,-7,22,11,u.glassDeep),d(-11,-7,22,5,u.glass),d(-10,-6,8,3,u.glassHi),d(-1,-6,6,2,u.glassHi,.75),d(-16,-2,3,8,u.bodyDark),d(13,-2,3,8,u.bodyDark);const m=22,p=-30,h=7,g=9;for(const y of[m,p])d(-22,y,h,g,u.tire),d(15,y,h,g,u.tire),d(-22,y,1,g,u.tireOuter),d(15+h-1,y,1,g,u.tireOuter);for(const y of[m,p])d(-18,y+1,4,g-2,u.bodyDark),d(14,y+1,4,g-2,u.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,u.cabinHi,.45),d(-14,28,28,1,0,.12)}buildOutdoorBackdrop(t,n,r,i,o,a){const u=t.add.graphics();u.setDepth(-320);const d=-Wc,m=-el,p=n+Wc*2,h=r+el+rl,g=d+p,y=r+rl,v=m+R*6.2,k=r+R*.35,S=r+R*4.25,_=r+R*5.9,{gateCenterX:w,roadY:C,roadHeight:N,waterTopY:O,dockY:I}=this.getOutdoorMetrics(n,r),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(u.fillStyle(D.skyTop,1),u.fillRect(d,m,p,R*8.2),u.fillStyle(D.skyBand,1),u.fillRect(d,m+R*6.15,p,R*2.05),o){u.fillStyle(16775400,.45);for(let me=0;me<5;me++){const Oe=d+p*(.12+me*.19)+me*17%40,rt=m+R*(1.4+me%3*.35);u.fillEllipse(Oe,rt,R*2.2,R*.95)}u.fillStyle(16773808,.92),u.fillCircle(g-R*2.4,m+R*1.25,R*.85),u.fillStyle(16776432,.35),u.fillCircle(g-R*2.4,m+R*1.25,R*1.45)}u.fillStyle(D.towerFar,1);for(let me=d-R;meR*1.9&&u.fillRect(me+Je-8,Me+4,3,3));u.fillStyle(D.facadeColor,D.facadeAlpha),u.fillRect(me+Je*.5,be+R*.4,2,fe-R*.8),u.fillStyle(D.towerNear,1)}u.fillStyle(D.bridgeColor,D.bridgeAlpha);for(let me=d+R*6;me(me.offsetCol+2.95)*R),A=R*.9,M=n-R*1.8,$=6,W=R*1.7,B=r+R*.08,U=R*2.05,H=B+U,V=R*9.4,Y=w-V/2,Q=H-2,q=R*3.1,G=Q+q,J=R*2.3;u.fillStyle(12428667,1),u.fillRect(w-R*4.25,G,R*8.5,C-G),u.fillStyle(14141089,.95);for(let me=G+R*.35;meX&&u.fillRect(X,B,Oe-X,$),u.fillStyle(8415310,1),u.fillRect(Oe-4,B,4,R*.62),u.fillRect(Oe+W,B,4,R*.62),u.fillStyle(11045217,1),u.fillRect(Oe,B,W,4),u.fillStyle(15920612,1),X=Oe+W}Xw-R*5.4&&me=0&&this.decor.splice(me,1),this.outdoorParking.destroy(),this.outdoorParking=null}const Ce=t.add.graphics();Ce.setDepth(-300);const Be=4080460,Ge=15262424,Ye=[{x:d+R*2.2,count:5},{x:g-R*11.4,count:5}];Ce.lineStyle(0,0,0),Ce.fillStyle(Be,1);for(const me of Ye)Ce.fillRect(me.x,_,R*12.8,R*3.8);Ce.lineStyle(1,Ge,.95);for(const me of Ye)for(let Oe=0;Oew-R;for(let rt=0;rt=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)+Pn)*R,u=Qr*R,d=Pn*R,m=R*2,p=R*20;this.buildOutdoorBackdrop(t,a,u,n,r),i.fillStyle(2498844,1),i.fillRect(-R,0,a+R*2,u),i.fillStyle(3221794,1),i.fillRect(0,0,a,u),i.fillStyle(6048831,1),i.fillRect(0,0,a,8),i.fillRect(0,u-8,a,8),i.fillRect(0,0,8,u),i.fillRect(a-8,0,8,u),i.fillStyle(2367001,1),i.fillRect(8,8,a-16,3),i.fillRect(8,u-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,u-m),i.fillStyle(4865588,1),i.fillRect(0,R*8,a,R*4),i.fillStyle(3813416,1),i.fillRect(0,p,a,u-p),i.lineStyle(1,5917503,.32);for(let h=0;h<=a;h+=R)i.beginPath(),i.moveTo(h,m),i.lineTo(h,u),i.strokePath();for(let h=m;h<=u;h+=R)i.beginPath(),i.moveTo(0,h),i.lineTo(a,h),i.strokePath();for(let h=R*3;hM.id===h.id);i.fillStyle(5785659,1),i.fillRect(g-10,0,d+20,u),i.fillStyle(2301208,1),i.fillRect(g-4,0,d+8,u),i.lineStyle(2,8087640,.9),i.strokeRect(g-10,0,d+20,u),i.lineStyle(2,10982014,.34),i.strokeRect(g-4,0,d+8,u),i.fillStyle(1578259,1),i.fillRect(g-4,0,d+8,R),i.fillStyle(7166796,1),i.fillRect(g+R*5.5,R*.55,R*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,u-8,8,8),i.fillRect(g+d+2,u-8,8,8),i.fillStyle(3221536,1),i.fillRect(g-4,p,d+8,6);const v=g+R*.7,k=g+R*14.65,S=R*1.05,_=R*4.45,w=R*6.4,C=S+w+R*.35,N=R*.55,O=y%2===0?6115909:5069382,I=y%2===0?4609113:5984070,D=y%2===0?5205640:7297908,T=y%2===0?5666919:9073231,L=y%2===0?7045045:10119803,A=y%2===0?6196089:10979160;i.fillStyle(2827295,1),i.fillRect(g+R*.58,C,d-R*1.16,R*.44),i.fillStyle(7692879,1),i.fillRect(g+R*.92,C+2,d-R*1.84,2),i.fillRect(g+R*4.3,C-R*.2,4,R*.84),i.fillRect(g+d-R*4.3,C-R*.2,4,R*.84),o.fillStyle(1906966,1),o.fillRect(v,S,_,w),o.fillRect(k,S,_,w),o.fillStyle(3090722,1),o.fillRect(v+4,S+4,_-8,w-8),o.fillRect(k+4,S+4,_-8,w-8),o.fillStyle(O,1),o.fillRect(v+4,S+4,_-8,R*.7),o.fillStyle(I,1),o.fillRect(k+4,S+4,_-8,R*.7),o.fillStyle(D,.95),o.fillRect(v+4,S+R*1.15,_-8,w-R*1.45),o.fillStyle(T,.95),o.fillRect(k+4,S+R*1.15,_-8,w-R*1.45),o.fillStyle(15127204,.16),o.fillRect(v+10,S+10,_-20,2),o.fillRect(k+10,S+10,_-20,2),o.lineStyle(1,6181444,.28);for(let M=v+12;M","#2d241c","#e8d5b6","8px"),this.decor.push(i,o)}buildMap(t,n=Yc()){this.clearSceneDecor();const r=Bn(),i=((r[r.length-1]?.offsetCol??0)+Pn)*R,o=Qr*R,a=this.getOutdoorMetrics(i,o);this.buildBoundaryDecor(t,r,n);for(const m of r){const p=(m.offsetCol+Pn/2)*R,h=t.add.image(m.offsetCol*R,0,"office-bg");h.setOrigin(0,0),h.setDepth(-100),this.bgSprites.push(h),this.addForegroundOccluders(t,m);const g=t.add.text(p,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 u=Hj(r),d=zf.buildWallBodies(t,u);return console.log("[OfficeMapBuilder] Composite map ready —",r.length,"offices"),{wallBodies:d,collisionGrid:u,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=0){const p=d-u,h=t.add.rectangle(u*R+p*R/2,a*R+R/2,p*R,R);h.setVisible(!1),o.add(h),u=-1}}}return o}static buildWallBodiesForRegion(t,n,r,i){const o=n.length,a=o>0?n[0].length:0;for(let u=0;u=0){const h=m-d,g=t.add.rectangle((i+d)*R+h*R/2,u*R+R/2,h*R,R);g.setVisible(!1),r.add(g),d=-1}}}}}const ot={IDLE:"idle",WALK:"walk",TYPE:"type",THINK:"think",CELEBRATE:"celebrate",COFFEE:"coffee",CHAT:"chat",PRACTICE:"practice",REFLECT:"reflect",SLEEP:"sleep",PRESENT:"present"},Fa={DOWN:"down",LEFT:"left",RIGHT:"right",UP:"up"};function Iy(e,t){return e+Math.random()*(t-e)}function SM(e,t){return Math.floor(Iy(e,t+1))}class wM extends $r.GameObjects.Container{constructor(t,n,r,i,o,a){const u=o*R+R/2,d=a*R+R/2;super(t,u,d),this.officeId="office-0",this.agentState=ot.IDLE,this.dir=Fa.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=Iy(.5,2.5),this.wanderLimit=SM(Lj,zj);const m=`char_${this.palette}`;this.shadow=t.add.ellipse(0,rM,tM,nM,1382432,iM),this.shadow.setOrigin(.5,.5),this.add(this.shadow),this.sprite=t.add.sprite(0,0,m),this.sprite.setScale(J3,eM),this.sprite.setOrigin(.5,1),this.add(this.sprite),t.add.existing(this),t.physics.world.enable(this);const p=Math.min(12,R-4),h=Math.min(6,R/2);this.body.setSize(p,h),this.body.setOffset(-p/2,-h),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/R),y:Math.floor(this.y/R)}}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===Fa.LEFT;this.sprite.setFlipX(r);const i=r?"right":n;switch(this.agentState){case ot.WALK:this.sprite.play(`${t}_walk_${i}`,!0);break;case ot.CELEBRATE:this.sprite.play(`${t}_celebrate_${i}`,!0);break;case ot.TYPE:case ot.PRESENT:case ot.PRACTICE:this.sprite.play(`${t}_type_${i}`,!0);break;case ot.THINK:case ot.REFLECT:this.sprite.play(`${t}_read_${i}`,!0);break;case ot.COFFEE:case ot.CHAT:this.sprite.play(`${t}_coffee_${i}`,!0);break;case ot.SLEEP:case ot.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(ot.WALK),!0)}stopMovement(){this.currentPath=[],this.pathIndex=0,this.arrivalCallback=null,this.body?.setVelocity(0,0)}get isMoving(){return this.agentState===ot.WALK&&this.currentPath.length>0}getWalkSpeed(){switch(this.urgency){case"urgent":return lM;case"normal":return cM;default:return uM}}showBubble(t,n=mM){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===ot.CELEBRATE&&this.setAgentState(ot.IDLE),this.agentState===ot.COFFEE&&(this.setAgentState(ot.IDLE),this.wanderTimer=Iy(Sf,wf)),this.agentState===ot.CHAT&&this.setAgentState(ot.IDLE))),this.agentState===ot.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*R+R/2,i=n.y*R+R/2,o=r-this.x,a=i-this.y,u=Math.sqrt(o*o+a*a),m=this.getWalkSpeed()*t;if(u<=m+.5){this.x=r,this.y=i,this.pathIndex++,this.pathIndex>=this.currentPath.length&&this.arriveAtDestination();return}this.x+=o/u*m,this.y+=a/u*m,Math.abs(o)>Math.abs(a)?this.setDirection(o>0?Fa.RIGHT:Fa.LEFT):this.setDirection(a>0?Fa.DOWN:Fa.UP)}arriveAtDestination(){this.currentPath=[],this.pathIndex=0,this.body.setVelocity(0,0);const t=this.arrivalCallback;this.arrivalCallback=null,t?t():this.agentState===ot.WALK&&this.setAgentState(ot.IDLE)}destroy(t){this.clearBubble(),super.destroy(t)}}var fg,Dk;function CM(){return Dk||(Dk=1,fg=function(){this.pointsToAvoid={},this.startX,this.callback,this.startY,this.endX,this.endY,this.nodeHash={},this.openList}),fg}var mg,Ok;function jM(){return Ok||(Ok=1,mg=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}}),mg}var Cf={exports:{}},EM=Cf.exports,Lk;function NM(){return Lk||(Lk=1,(function(e,t){(function(){var n,r,i,o,a,u,d,m,p,h,g,y,v,k,S;i=Math.floor,h=Math.min,r=function(_,w){return _w?1:0},p=function(_,w,C,N,O){var I;if(C==null&&(C=0),O==null&&(O=r),C<0)throw new Error("lo must be non-negative");for(N==null&&(N=_.length);CA;0<=A?L++:L--)T.push(L);return T}).apply(this).reverse(),D=[],N=0,O=I.length;NM;0<=M?++T:--T)$.push(a(_,C));return $},k=function(_,w,C,N){var O,I,D;for(N==null&&(N=r),O=_[C];C>w;){if(D=C-1>>1,I=_[D],N(O,I)<0){_[C]=I,C=D;continue}break}return _[C]=O},S=function(_,w,C){var N,O,I,D,T;for(C==null&&(C=r),O=_.length,T=w,I=_[w],N=2*w+1;Nh[0].length-1||W>h.length-1||B>h[0].length-1||U>h.length-1)throw new Error("Your start or end point is outside the scope of your grid.");if($===B&&W===U){V([]);return}for(var Y=h[U][B],Q=!1,q=0;q"u"){w.shift();continue}if(W.openList.size()===0){W.callback(null),delete _[$],w.shift();continue}var B=W.openList.pop();if(W.endX===B.x&&W.endY===B.y){var U=[];U.push({x:B.x,y:B.y});for(var H=B.parent;H!=null;)U.push({x:H.x,y:H.y}),H=H.parent;U.reverse();var V=U;W.callback(V),delete _[$],w.shift();continue}B.list=i,B.y>0&&I(W,B,0,-1,u*L(B.x,B.y-1)),B.x0&&I(W,B,-1,0,u*L(B.x-1,B.y)),O&&(B.x>0&&B.y>0&&(k||D(h,N,B.x,B.y-1,B)&&D(h,N,B.x-1,B.y,B))&&I(W,B,-1,-1,d*L(B.x-1,B.y-1)),B.x0&&(k||D(h,N,B.x,B.y-1,B)&&D(h,N,B.x+1,B.y,B))&&I(W,B,1,-1,d*L(B.x+1,B.y-1)),B.x>0&&B.y[...n]),this.gridRows=this.grid.length,this.gridCols=this.gridRows>0?this.grid[0].length:0,this.easystar=new RM.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=0&&t=0&&n=0&&t=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=i&&e=o&&tMM(`${e.id}-${u.id}`,u.localX+t,u.localY,u.type)),doorways:o.doorways.map(u=>({id:`${e.id}-${u.id}`,tileX:u.localX+t,tileY:u.localY}))}}const r={};for(const[i,o]of e.seats){const a=OM(i,o),u=`${e.id}-${a}`;if(!n[u])continue;r[u]=(r[u]??0)+1;const d=r[u],m=a==="workspace"?"desk":a==="meetingRoom"?"meeting":a==="breakRoom"?"break":a==="leaderOffice"?"leader":"lobby",p=DM(i,o,a);n[u].seats.push(AM(`${e.id}-${m}-${d}`,i+t,o,p))}return n}function Vj(e){const t=e??Bn(),n={};for(const r of t)Object.assign(n,LM(r));return n}let po=Vj();function zM(e){po=Vj(e)}function Uj(e){const t=po[`${e}-workspace`]?.seats??[],n=po[`${e}-leaderOffice`]?.seats??[];return[...t,...n]}function $k(){return Object.values(po).flatMap(e=>e.seats)}function PM(e){const t=po[e];if(!t)return null;const{x:n,y:r,w:i,h:o}=t.bounds,a=e.split("-").slice(0,2).join("-"),d=Bn().find(g=>g.id===a);if(!d)return{x:n+1,y:r+1};const m=$j(d.mapStr),p=d.offsetCol,h=[];for(let g=r;g=0&&v({x:n.tileX,y:n.tileY})):[]}function $o(e,t){return e+Math.random()*(t-e)}function BM(e,t){return Math.floor($o(e,t+1))}function Fi(e,t){return e.length>t?e.slice(0,t)+"...":e}function Fk(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 $M{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,u=this.scene.ensureAgent(r,a,i,o);switch(u.lastEventAt=Date.now(),typeof n.task_preview=="string"&&(u.taskSummary=n.task_preview),typeof n.result_preview=="string"&&(u.taskSummary=n.result_preview),t.type){case"tool_start":this.onToolStart(u,n);break;case"tool_done":this.onToolDone(u,n);break;case"agent_active":this.onAgentActive(u);break;case"waiting":this.onWaiting(u);break;case"reflect_start":this.onReflectStart(u);break;case"reflect_done":this.onReflectDone(u);break;case"skill_synthesized":this.onSkillSynthesized(u,n);break;case"subagent_spawn":this.onSubagentSpawn(u,r,o);break;case"subagent_done":this.onSubagentDone(u,r);break;case"message_in":this.onMessageIn(u,n);break;case"message_out":this.onMessageOut(u,n);break;case"practice_start":this.onPracticeStart(u,n);break;case"practice_done":this.onPracticeDone(u);break;case"task_routed":this.onTaskRouted(u,n);break;case"task_delegated":this.onTaskDelegated(u,r,n);break;case"delegation_done":this.onDelegationDone(u,n);break;case"agent_spawned":this.onAgentSpawned(u,r,n);break;case"agent_removed":this.onAgentRemoved(u,r);break;case"collab_started":this.onCollabStarted(u);break;case"collab_ended":this.onCollabEnded(u);break;case"skill_published":this.onSkillPublished(u,n);break;case"skill_adopted":this.onSkillAdopted(u,n);break;case"mycelium_transport":this.onMyceliumTransport(u,r,n);break;case"mycelium_crystallize":this.onMyceliumCrystallize(u,r,n);break;case"mycelium_spore":this.onMyceliumSpore(u,r,n);break;case"mycelium_decompose":this.onMyceliumDecompose(u,r,n);break;case"mycelium_unit_created":this.onMyceliumUnitCreated(u,n);break;case"mycelium_germinate":this.onMyceliumGerminate(u,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=Fk(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=Fk(r);t.currentTool=null,t.setAgentState(ot.CELEBRATE),t.stateTimer=Ha,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",ot.COFFEE);n||t.setAgentState(ot.IDLE),n&&(t.stateTimer=$o(dM,fM))}onReflectStart(t){t.urgency="normal",t.isActive=!1,t.currentTool="Reflect",this.moveToZone(t,"meetingRoom",ot.REFLECT)||t.setAgentState(ot.REFLECT),t.stateTimer=30,t.showBubble("Reflecting...")}onReflectDone(t){t.currentTool=null,t.setAgentState(ot.CELEBRATE),t.stateTimer=Ha,t.showBubble("Insight!")}onSkillSynthesized(t,n){const r=Fi(String(n.skill_name??"new"),20);t.setAgentState(ot.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?Fi(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?Fi(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: ${Fi(r,20)}`),t.isActive=!1,t.currentTool="Practice",this.moveToZone(t,"meetingRoom",ot.PRACTICE)||t.setAgentState(ot.PRACTICE)}onPracticeDone(t){t.currentTool=null,t.setAgentState(ot.CELEBRATE),t.stateTimer=Ha,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=$o(Nk,Ik);const i=typeof r.target=="string"?r.target:"?";t.setAgentState(ot.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(ot.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=$o(Nk,Ik),this.moveToZone(t,"meetingRoom",ot.CHAT),t.showBubble("Collaborating...")}onCollabEnded(t){t.stateTimer=Ha,t.setAgentState(ot.CELEBRATE),t.showBubble("Collaboration done!")}onSkillPublished(t,n){const r=Fi(String(n.skill_name??"skill"),20);t.setAgentState(ot.CELEBRATE),t.stateTimer=Ha,t.showBubble(`Published: ${r}`)}onSkillAdopted(t,n){const r=Fi(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"?Fi(r.domain,15):"?",u=this.scene.ensureAgent(i);if(u.myceliumEffect="transport_send",u.myceliumEffectTimer=3,u.showBubble(`-> [${a}]`),o){const d=this.scene.ensureAgent(o);d.myceliumEffect="transport_recv",d.myceliumEffectTimer=2,d.showBubble("Receiving...");const m=d.getTilePos();u.walkTo(m.x,m.y+1)}}onMyceliumCrystallize(t,n,r){const i=Array.isArray(r.corroborating_agents)?r.corroborating_agents:[],o=Fi(String(r.content_preview??"Knowledge"),22),a=Array.from(new Set([n,...i])),u=`${t.officeId}-meetingRoom`,d=po[u]?.seats??[];for(let m=0;m{h.setDirection(y.facing),h.setAgentState(ot.CHAT)}),h.showBubble(p===n?`Crystal: ${o}`:"Crystal!")}}onMyceliumSpore(t,n,r){const i=Fi(String(r.content_preview??"Breakthrough"),20);t.myceliumEffect="spore_send",t.myceliumEffectTimer=4,t.setAgentState(ot.PRESENT),t.showBubble(`Breakthrough! ${i}`),this.moveToZone(t,"breakRoom")}onMyceliumDecompose(t,n,r){const i=Fi(String(r.humus_preview??"Lesson learned"),22);t.myceliumEffect="decompose",t.myceliumEffectTimer=4,t.setAgentState(ot.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(ot.CELEBRATE),o.stateTimer=Ha,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===ot.TYPE&&!n.isActive){n.seatTimer>0?(n.seatTimer-=t,n.seatTimer<=0&&(n.seatTimer=0,n.setAgentState(ot.IDLE),n.wanderCount=0,n.wanderLimit=BM(Lj,zj),n.wanderTimer=$o(Sf,wf))):n.setAgentState(ot.IDLE);continue}if(n.agentState===ot.IDLE){if(n.isActive){if(n.urgency="urgent",!n.seatId){n.setAgentState(ot.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=$o(Sf,wf);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=$o(Sf,wf)}}}}sendToSeat(t){if(!t.seatId)return;const n=this.scene.getSeatById(t.seatId);n&&t.walkTo(n.tileX,n.tileY,()=>{t.setAgentState(ot.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Tk+Math.random()*Rk)}).then(r=>{r||(t.setAgentState(ot.TYPE),t.setDirection(n.facing),t.isActive||(t.seatTimer=Tk+Math.random()*Rk))})}moveToZone(t,n,r){const i=`${t.officeId}-${n}`,o=po[i];if(!o)return!1;if(o.seats.length>0){const u=new Set;for(const m of this.scene.agents.values()){if(m===t||m.isMoving)continue;const p=m.getTilePos();u.add(`${p.x},${p.y}`)}for(const m of this.scene.agents.values()){if(m===t||!m.isMoving)continue;const p=m.currentPath;if(p?.length){const h=p[p.length-1];u.add(`${h.x},${h.y}`)}}const d=o.seats.find(m=>!u.has(`${m.tileX},${m.tileY}`));if(d)return t.walkTo(d.tileX,d.tileY,()=>{t.setDirection(d.facing),r?t.setAgentState(r):t.setAgentState(ot.IDLE)}),!0}const a=PM(i);return a?(t.walkTo(a.x,a.y,()=>{r?t.setAgentState(r):t.setAgentState(ot.IDLE)}),!0):!1}moveToDoorway(t){const n=Hk(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=Hk(t.officeId);if(n.length>0){const r=n[Math.floor(Math.random()*n.length)];t.setPosition(r.x*R+R/2,r.y*R+R/2)}}}class HM extends $r.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=Yc();this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?jk:Ek),this.mapBuilder=new zf,this.mapData=this.mapBuilder.buildMap(this,t),this.pathfinder=new Bk(this.mapData.collisionGrid),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),this.seats=$k().map(d=>({...d})),this.behavior=new $M(this);const n=cg*R,r=Ec*R,i=-Wc,o=-el,a=n+Wc*2,u=r+el+rl;this.physics.world.setBounds(i,o,a,u),this.cameras.main.setBounds(i,o,a,u),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,p=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 h=this.cameras.main;h.stopFollow(),h.scrollX-=m/h.zoom,h.scrollY-=p/h.zoom,this.dragState.lastX=d.x,this.dragState.lastY=d.y}),this.input.on("wheel",(d,m,p,h)=>{const g=this.cameras.main,y=this.input.activePointer,v=g.getWorldPoint(y.x,y.y),k=this.getMinCameraZoom(g),S=$r.Math.Clamp(g.zoom-h*.0015,k,3);g.setZoom(S);const _=g.getWorldPoint(y.x,y.y);g.scrollX+=v.x-_.x,g.scrollY+=v.y-_.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{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 p=this.cameras.main.getWorldPoint(d.x,d.y);let h=null,g=1/0;for(const y of this.agents.values()){const v=$r.Math.Distance.Between(p.x,p.y,y.x,y.y);v<24&&vthis.add.circle(Y,5,2.1,14284031,.95));U.add(H),U.setDepth(-250),U.setAlpha(0),U.setRotation(-.04),U.setScale(o),this.tweens.add({targets:[h,g,y],scaleX:{from:.85,to:1.2},alpha:{from:.5,to:.2},duration:900,yoyo:!0,repeat:-1});const V=()=>{U.setPosition(u,a),U.setAlpha(0),U.setRotation(-.04),h.setAlpha(.55),g.setAlpha(.42),y.setAlpha(.24),this.tweens.add({targets:U,x:d,alpha:1,rotation:.015,duration:7200,ease:"Sine.InOut",onComplete:()=>{h.setAlpha(.22),g.setAlpha(.14),y.setAlpha(.08),this.tweens.add({targets:U,x:d+4,y:a+R*.12,duration:1400,yoyo:!0,repeat:2,ease:"Sine.InOut"}),this.time.delayedCall(3600,()=>{h.setAlpha(.48),g.setAlpha(.32),y.setAlpha(.18),this.tweens.add({targets:U,x:m,alpha:0,rotation:-.055,duration:7600,ease:"Sine.InOut",onComplete:()=>{this.time.delayedCall(2400,V)}})})}})};V()}buildWalkableTilesByOffice(){this.walkableTilesByOffice.clear();const t=Bn();for(const n of t){const r=[];for(const i of this.walkableTiles)i.x>=n.offsetCol&&i.xm.id===t);if(!r)return;const i=(r.offsetCol+Pn/2)*R,o=Ec/2*R,a=this.cameras.main,u=this.getMinCameraZoom(a),d=$r.Math.Clamp(Math.min(this.scale.width/((Pn+4)*R),this.scale.height/((Ec-4)*R)),u,Math.max(1.5,u));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=bM(t);if(n)return n.id;const r=Bn();let i=null,o=-1;for(const u of r){const d=Uj(u.id),m=u.assignedAgents.length,p=d.length-m;p>o&&(i=u,o=p)}const a=i?.id??r[0]?.id??"office-0";return ug(a,t),a}addAgent(t,n,r=!1,i=null,o,a,u){if(this.agents.has(t))return this.agents.get(t);const d=n??t,m=a??this.agents.size%6,p=o?(ug(o,t),o):this.resolveOfficeForAgent(t),h=u?this.seats.find(C=>C.id===u&&!C.assigned)??this.findFreeSeatInOffice(p):this.findFreeSeatInOffice(p),v=(Bn().find(C=>C.id===p)?.offsetCol??0)+5,k=20;let S=v,_=k;h&&(S=h.tileX,_=h.tileY,h.assigned=!0,h.assignedTo=t);const w=new wM(this,t,d,m,S,_);return w.officeId=p,w.setPathfinder(this.pathfinder),w.seatId=h?.id??null,w.isSubagent=r,w.parentAgentId=i,h&&(w.setAgentState(ot.TYPE),w.setDirection(h.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,u){const d=this.agents.get(t);return d?(o&&d.officeId!==o&&this.reassignAgent(t,o),u&&d.seatId!==u&&this.changeAgentSeat(t,u),d):this.addAgent(t,n,r,i,o,a,u)}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(p=>p.id===r.seatId);m&&(m.assigned=!1,m.assignedTo=null)}r.stopMovement(),ug(n,t),r.officeId=n;const i=this.findFreeSeatInOffice(n),u=(Bn().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*R+R/2,i.tileY*R+R/2),r.setAgentState(ot.TYPE),r.setDirection(i.facing),r.seatTimer=10):(r.seatId=null,r.setPosition(u*R+R/2,d*R+R/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*R+R/2,i.tileY*R+R/2),r.setAgentState(ot.TYPE),r.setDirection(i.facing),r.seatTimer=10)}rebuildOfficeCollision(t,n,r){_M(t,n,r),this.mapData.wallBodies&&this.mapData.wallBodies.clear(!0,!0);const i=Bn(),o=Hj(i),a=zf.buildWallBodies(this,o);this.mapData={...this.mapData,wallBodies:a,collisionGrid:o},this.pathfinder=new Bk(o),this.walkableTiles=this.pathfinder.getWalkableTiles(),this.buildWalkableTilesByOffice(),zM(i),this.seats=$k().map(u=>({...u}));for(const u of this.agents.values())u.setPathfinder(this.pathfinder),u.stopMovement();console.log("[OfficeScene] Office collision rebuilt —",t,"walkable:",this.walkableTiles.length)}renameOffice(t,n){yM(t,n),this.mapBuilder.updateLabel(t,n)}checkOutdoorDayNight(){this.applyOutdoorLighting(Yc())}syncOutdoorLighting(){this.applyOutdoorLighting(Yc())}applyOutdoorLighting(t){t!==this.outdoorIsDay&&(this.outdoorIsDay=t,this.cameras.main.setBackgroundColor(t?jk:Ek),this.mapBuilder.refreshOutdoorDayNight(this,t))}getWorldSize(){const t=cg*R,n=Ec*R;return{worldW:t+Wc*2,worldH:n+el+rl}}getMinCameraZoom(t){const{worldW:n,worldH:r}=this.getWorldSize();return Math.max(t.width/n,t.height/r)}}function FM({bridge:e,active:t=!0}){const n=j.useRef(null),r=j.useRef(null),i=j.useRef(null),o=j.useRef(t);return o.current=t,j.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]),j.useEffect(()=>{if(!n.current||!r.current)return;const a=n.current,u=r.current,d=(p,h)=>{console.log("[PhaserGame] Creating Phaser game",p,"×",h);const g=hM(u,p,h);g.scene=[xM,HM];const y=new $r.Game(g);y.registry.set("bridge",e),y.events.once($r.Core.Events.READY,()=>{!o.current&&y.loop.running&&y.loop.sleep()}),i.current=y};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(p=>{const h=p[p.length-1].contentRect,g=Math.floor(h.width),y=Math.floor(h.height);if(!(g<1||y<1))if(!i.current)d(g,y);else{const v=i.current.scale;v.getParentBounds(),v.refresh()}});return m.observe(a),()=>{m.disconnect(),i.current?.destroy(!0),i.current=null}},[e]),c.jsx("div",{ref:n,style:{width:"100%",height:"100%"},children:c.jsx("div",{ref:r,style:{width:"100%",height:"100%"}})})}class VM extends $r.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 Bn()}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 u=a,d=u.name||u.role_name||o,m=u.office_id,p=u.appearance?.palette,h=u.appearance?.desk_id;try{const g=this.scene.ensureAgent(o,d,!1,null,m,p,h),y=u.runtime_status||u.status;y==="tool_active"?(g.currentTool=u.current_tool??null,g.isActive=!0,g.setAgentState(ot.TYPE)):y==="reflecting"&&(g.currentTool=u.current_tool??"Reflect",g.isActive=!1,g.setAgentState(ot.REFLECT)),console.log(`[GameBridge] ✓ ensured ${o} in ${m} palette=${p}`)}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 UM="assets/office-bg.png";function GM({bridge:e}){const t=j.useRef(null),n=j.useRef(null),r=j.useRef(!1),[i,o]=j.useState(()=>Bn()),[a,u]=j.useState(()=>Bn()[0]?.id??"office-0"),d=i.find(te=>te.id===a)??i[0],[m,p]=j.useState(()=>dg(d?.mapStr??Xc,Pn,Qr)),[h,g]=j.useState(()=>[...d?.seats??Kc]),[y,v]=j.useState("wall"),[k,S]=j.useState(!1),[_,w]=j.useState(!1),[C,N]=j.useState(!1),[O,I]=j.useState(1),[D,T]=j.useState(!0),L=Pn,A=Qr,M=te=>{const re=Bn();o(re),u(te);const oe=re.find(de=>de.id===te);oe&&(p(dg(oe.mapStr,Pn,Qr)),g([...oe.seats])),N(!1)};j.useEffect(()=>{const te=new Image;te.crossOrigin="anonymous",te.onload=()=>{n.current=te,S(!0)},te.onerror=()=>{n.current=null,S(!0)},te.src=UM},[]);const $=j.useCallback(()=>{const te=t.current;if(!te)return;const re=te.getContext("2d");if(!re)return;const oe=L*R,de=A*R;te.width=oe,te.height=de,re.clearRect(0,0,oe,de),n.current?re.drawImage(n.current,0,0,oe,de):(re.fillStyle="#3d3d3d",re.fillRect(0,0,oe,de));for(let se=0;se{$()},[$]);const W=te=>{const re=t.current;if(!re)return null;const oe=re.getBoundingClientRect(),de=re.width/oe.width,se=re.height/oe.height,Ee=Math.floor((te.clientX-oe.left)*de/R),we=Math.floor((te.clientY-oe.top)*se/R);return Ee<0||Ee>=L||we<0||we>=A?null:{c:Ee,r:we}},B=j.useCallback((te,re)=>{if(N(!1),y==="seat")g(oe=>{const de=oe.findIndex(([se,Ee])=>se===te&&Ee===re);return de>=0?oe.filter((se,Ee)=>Ee!==de):[...oe,[te,re]]}),p(oe=>{if(oe[re]?.[te]===1){const de=oe.map(se=>[...se]);return de[re][te]=0,de}return oe});else{const oe=y==="wall"?1:0;p(de=>{if(de[re]?.[te]===oe)return de;const se=de.map(Ee=>[...Ee]);return se[re][te]=oe,se}),y==="wall"&&g(de=>de.filter(([se,Ee])=>!(se===te&&Ee===re)))}},[y]),U=te=>{if(te.button!==0)return;r.current=!0;const re=W(te);re&&B(re.c,re.r)},H=te=>{if(!r.current||y==="seat")return;const re=W(te);re&&B(re.c,re.r)},V=()=>{r.current=!1},Y=()=>{const te=Mk(m);e.rebuildOfficeCollision(a,te,h),N(!0),o(Bn()),setTimeout(()=>N(!1),2e3)},Q=()=>w(te=>!te),q=()=>{p(dg(Xc,Pn,Qr)),g([...Kc]),N(!1)},G=(()=>{const re=Mk(m).map((de,se)=>` '${de}', // ${se}`).join(` -`),oe=h.map(([de,se])=>` [${de}, ${se}],`).join(` -`);return`const MAP_STR: string[] = [ -${re} -] - -const SEATS: [number, number][] = [ -${oe} -]`})(),J=()=>I(te=>Math.min(te+.25,3)),P=()=>I(te=>Math.max(te-.25,.5)),X=m.flat().filter(te=>te===1).length,ee=m.flat().filter(te=>te===0).length;return c.jsxs("div",{className:"collision-editor",children:[c.jsxs("div",{className:"ce-toolbar",children:[c.jsxs("div",{className:"ce-toolbar-group",children:[c.jsx("span",{className:"ce-title",children:"Map Editor"}),c.jsx("select",{className:"ce-office-select",value:a,onChange:te=>M(te.target.value),children:i.map(te=>c.jsx("option",{value:te.id,children:te.name},te.id))})]}),c.jsxs("div",{className:"ce-toolbar-group",children:[c.jsxs("button",{className:`ce-mode-btn ${y==="wall"?"active wall":""}`,onClick:()=>v("wall"),children:[c.jsx("span",{className:"ce-mode-dot wall"})," Wall"]}),c.jsxs("button",{className:`ce-mode-btn ${y==="floor"?"active floor":""}`,onClick:()=>v("floor"),children:[c.jsx("span",{className:"ce-mode-dot floor"})," Floor"]}),c.jsxs("button",{className:`ce-mode-btn ${y==="seat"?"active seat":""}`,onClick:()=>v("seat"),children:[c.jsx("span",{className:"ce-mode-dot seat"})," Seat"]})]}),c.jsxs("div",{className:"ce-toolbar-group",children:[c.jsx("button",{className:"ce-btn",onClick:P,children:"-"}),c.jsxs("span",{className:"ce-zoom-label",children:[Math.round(O*100),"%"]}),c.jsx("button",{className:"ce-btn",onClick:J,children:"+"}),c.jsx("button",{className:`ce-btn${D?" active":""}`,onClick:()=>T(te=>!te),children:"Grid"})]}),c.jsxs("div",{className:"ce-toolbar-group",children:[c.jsx("button",{className:`ce-btn apply${C?" success":""}`,onClick:Y,children:C?"Applied":"Apply"}),c.jsx("button",{className:`ce-btn${_?" active":""}`,onClick:Q,children:"Export"}),c.jsx("button",{className:"ce-btn danger",onClick:q,children:"Reset"})]}),c.jsxs("div",{className:"ce-toolbar-group ce-stats",children:[c.jsxs("span",{children:["Walls: ",X]}),c.jsxs("span",{children:["Floor: ",ee]}),c.jsxs("span",{children:["Seats: ",h.length]})]})]}),c.jsxs("div",{className:"ce-body",children:[c.jsx("div",{className:"ce-canvas-wrap",style:{overflow:"auto"},children:c.jsx("canvas",{ref:t,style:{width:L*R*O,height:A*R*O,imageRendering:"pixelated",cursor:y==="seat"?"crosshair":"cell"},onMouseDown:U,onMouseMove:H,onMouseUp:V,onMouseLeave:V})}),_&&c.jsxs("div",{className:"ce-export-panel",children:[c.jsxs("div",{className:"ce-export-header",children:[c.jsx("span",{children:"Export — copy to source code"}),c.jsx("button",{className:"ce-btn",onClick:()=>navigator.clipboard.writeText(G),children:"Copy"})]}),c.jsx("textarea",{className:"ce-export-textarea",value:G,readOnly:!0,rows:20})]})]})]})}let qM=0;function tr(e,t,n={}){return{event_id:`test-${++qM}`,type:e,agent_id:t,data:n,timestamp:Date.now()/1e3}}function En(e){return new Promise(t=>setTimeout(t,e))}async function WM(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 M of[...n.agents.keys()])n.removeAgent(M);await En(100);const r=Bn();t.push({name:"offices-loaded",pass:r.length>=3,detail:`${r.length} offices loaded: ${r.map(M=>M.name).join(", ")}`});const i=["agent-A","agent-B","agent-C","agent-D","agent-E","agent-F"];for(const M of i)e.pushEvent(tr("agent_active",M));await En(300);const o=new Set;let a=!1;for(const M of i){const $=n.getAgent(M);$&&$.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 u=i.every(M=>n.getAgent(M)?.officeId!=null);t.push({name:"agents-have-officeId",pass:u,detail:i.map(M=>`${M}=${n.getAgent(M)?.officeId}`).join(", ")}),e.pushEvent(tr("tool_start","agent-A",{tool_name:"shell"})),await En(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(tr("tool_done","agent-A",{tool_name:"shell"})),await En(100),t.push({name:"tool_done-celebrate",pass:d.agentState==="celebrate",detail:`state=${d.agentState}`});for(let M=0;M<20&&d.agentState==="celebrate";M++)await En(500);t.push({name:"celebrate-to-idle",pass:d.agentState!=="celebrate",detail:`state=${d.agentState}`}),e.pushEvent(tr("waiting","agent-B")),await En(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(tr("reflect_start","agent-C")),await En(200);const p=n.getAgent("agent-C");t.push({name:"reflect_start-state",pass:p.currentTool==="Reflect"&&(p.agentState==="walk"||p.agentState==="reflect"),detail:`currentTool=${p.currentTool}, state=${p.agentState}`}),e.pushEvent(tr("reflect_done","agent-C")),await En(100),t.push({name:"reflect_done-celebrate",pass:p.agentState==="celebrate",detail:`state=${p.agentState}`});const h=["agent-A","agent-B","agent-C","agent-D"];for(const M of h)e.pushEvent(tr("collab_started",M));await En(4e3);const g=new Map;let y=!1;for(const M of h){const $=n.getAgent(M);if(!$)continue;const W=$.getTilePos(),B=`${W.x},${W.y}`;g.has(B)&&(y=!0),g.set(B,M)}t.push({name:"collab-no-overlap",pass:!y,detail:`${h.length} agents, ${g.size} unique positions`});for(const M of h)e.pushEvent(tr("collab_ended",M));await En(100);const v=h.every(M=>n.getAgent(M)?.agentState==="celebrate");t.push({name:"collab_ended-celebrate",pass:v,detail:h.map(M=>`${M}=${n.getAgent(M)?.agentState}`).join(", ")}),await En(3e3),e.pushEvent(tr("practice_start","agent-E",{target_domain:"TypeScript"})),await En(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(tr("practice_done","agent-E")),await En(100),t.push({name:"practice_done-celebrate",pass:k.agentState==="celebrate",detail:`state=${k.agentState}`}),await En(3e3),e.pushEvent(tr("task_delegated","agent-A",{target:"agent-B"})),await En(100),t.push({name:"task_delegated-chat",pass:d.agentState==="chat",detail:`state=${d.agentState}`}),e.pushEvent(tr("delegation_done","agent-A",{target:"agent-B"})),await En(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(tr("message_in","agent-F",{content_preview:"Hello test"})),await En(200),t.push({name:"message_in-active",pass:S.isActive===!0,detail:`isActive=${S.isActive}, state=${S.agentState}`}),e.pushEvent(tr("message_out","agent-F",{content_preview:"Reply test"})),await En(100),t.push({name:"message_out-bubble",pass:S.bubbleText?.includes("Reply")===!0,detail:`bubble="${S.bubbleText}"`}),e.pushEvent(tr("subagent_spawn","subagent-test-1",{parent_agent_id:"agent-A"})),await En(200);const _=n.getAgent("subagent-test-1");t.push({name:"subagent_spawn-created",pass:_!=null&&_.isSubagent===!0,detail:`created=${!!_}, isSubagent=${_?.isSubagent}`}),e.pushEvent(tr("subagent_done","subagent-test-1")),await En(5e3),t.push({name:"subagent_done-removed",pass:n.getAgent("subagent-test-1")==null,detail:`still exists=${!!n.getAgent("subagent-test-1")}`}),e.pushEvent(tr("task_routed","agent-E",{method:"auto"})),await En(200),t.push({name:"task_routed-active",pass:k.isActive===!0,detail:`isActive=${k.isActive}, state=${k.agentState}`}),e.pushEvent(tr("agent_removed","agent-F")),await En(5e3),t.push({name:"agent_removed-destroyed",pass:n.getAgent("agent-F")==null,detail:`still exists=${!!n.getAgent("agent-F")}`}),e.pushEvent(tr("mycelium_crystallize","agent-A",{corroborating_agents:["agent-B","agent-C"],content_preview:"Shared knowledge"})),await En(4e3);const w=new Map;let C=!1;for(const M of["agent-A","agent-B","agent-C"]){const $=n.getAgent(M);if(!$)continue;const W=$.getTilePos(),B=`${W.x},${W.y}`;w.has(B)&&(C=!0),w.set(B,M)}t.push({name:"crystal-no-overlap",pass:!C,detail:`3 agents, ${w.size} unique positions`});const N=new Map;let O=!1;for(const M of n.agents.values())M.seatId&&(N.has(M.seatId)&&(O=!0),N.set(M.seatId,M.agentId));t.push({name:"desk-seat-no-conflict",pass:!O,detail:`${N.size} desk seats assigned, conflict=${O}`});const I=n.getAgent("agent-D");if(I){const M=I.officeId,$=r.find(B=>B.id!==M)??r[1];e.assignAgentToOffice("agent-D",$.id),await En(300);const W=I.officeId;t.push({name:"reassign-office",pass:W===$.id&&W!==M,detail:`${M} → ${W} (expected ${$.id})`})}else t.push({name:"reassign-office",pass:!1,detail:"agent-D not found"});const D=new Map;let T=!1;for(const M of n.agents.values())M.seatId&&(D.has(M.seatId)&&(T=!0),D.set(M.seatId,M.agentId));t.push({name:"cross-office-seat-unique",pass:!T,detail:`${D.size} seats, conflict=${T}`});const L=t.filter(M=>M.pass).length,A=t.filter(M=>!M.pass).length;console.log(""),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold"),console.log(`%c[EventTest] Results: ${L} passed, ${A} failed, ${t.length} total`,`color: ${A>0?"#f87171":"#34d399"}; font-weight: bold`),console.log("%c[EventTest] ═══════════════════════════════════════","color: #6366f1; font-weight: bold");for(const M of t){const $=M.pass?"✅":"❌",W=M.pass?"color: #34d399":"color: #f87171; font-weight: bold";console.log(`%c ${$} ${M.name}: ${M.detail}`,W)}return t}function YM(e){window.__runEventTests=()=>WM(e),window.__bridge=e,console.log("%c[EventTest] Test runner ready. Run: window.__runEventTests()","color: #fbbf24; font-weight: bold")}const XM={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 KM(e){return e?XM[e]??"todo":"todo"}function ZM(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}function QM(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 JM(e,t){return t.type==="SET"?t.columns:e}function e4(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 t4(){const[e,t]=j.useReducer(QM,[]),[n,r]=j.useReducer(JM,[]),[i,o]=j.useReducer(e4,[]),[a,u]=j.useState(null),[d,m]=j.useState("default"),p=j.useMemo(()=>e.find(D=>D.id===a)??null,[e,a]),h=j.useMemo(()=>n.filter(D=>D.boardId===a).sort((D,T)=>D.sortOrder-T.sortOrder),[n,a]),g=j.useMemo(()=>{const D=i.filter(L=>L.boardId===a),T={};for(const L of h)T[L.id]=[];for(const L of D){const A=L.phase?KM(L.phase):L.columnId;T[A]&&T[A].push(L)}for(const L of Object.keys(T))T[L].sort((A,M)=>A.sortOrder-M.sortOrder);return T},[i,a,h]),y=j.useCallback(D=>{const T=e.find($=>$.id===D.boardId),L=T?.nextTaskNum??1,A=T?.prefix??"T",M={id:D.taskId??`task-${ZM()}`,displayId:D.displayId??`${A}-${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:M}),M},[e]),v=j.useCallback((D,T)=>o({type:"UPDATE",id:D,partial:T}),[]),k=j.useCallback(D=>o({type:"DELETE",id:D}),[]),S=j.useCallback((D,T,L)=>o({type:"MOVE",id:D,columnId:T,sortOrder:L}),[]),_=j.useCallback((D,T)=>o({type:"ASSIGN",taskId:D,agentIds:T}),[]),w=j.useCallback(()=>{const D=new Set(n.filter(T=>T.isTerminal).map(T=>T.id));return i.filter(T=>!D.has(T.columnId)).length},[i,n]),C=j.useCallback(D=>{o({type:"REMOVE_ASSIGNEE",agentId:D})},[]),N=j.useCallback((D,T,L,A,M)=>{const $=D||"default",W=$!==d,B=!W&&!!M?.preserveTasksWhenIncomingEmpty&&A.length===0;m($),t({type:"SET",boards:T}),r({type:"SET",columns:L}),o({type:"SET",tasks:B?i:A}),u(U=>!W&&U&&T.some(H=>H.id===U)?U:null)},[d,i]),O=j.useCallback(D=>{u(D)},[]),I=j.useCallback((D,T)=>{t({type:"UPDATE_NAME",boardId:D,name:T})},[]);return j.useMemo(()=>({scopeProjectId:d,boards:e,columns:n,tasks:i,activeBoardId:a,activeBoard:p,activeBoardColumns:h,tasksByColumn:g,setActiveBoard:O,createTask:y,updateTask:v,deleteTask:k,moveTask:S,assignTask:_,dispatchTask:o,getOpenTaskCount:w,removeAssignee:C,initFromBackend:N,updateBoardName:I}),[d,e,n,i,a,p,h,g,O,y,v,k,S,_,o,w,C,N,I])}const Vk={done:"✓",failed:"✗",pending:"○",blocked:"■",cancelled:"—",running:"▶"},Uk={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 n4({data:e,onResume:t,onCancel:n}){const[r,i]=j.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:c.jsx("div",{className:"wfr-panel",children:o.map(a=>{const u=e.active_recoveries.includes(a.parent_task_id),d=a.work_items.filter(p=>p.status==="done").length,m=a.work_items.filter(p=>p.interrupted||p.status==="failed").length;return c.jsxs("div",{className:"wfr-card",children:[c.jsxs("div",{className:"wfr-header",children:[c.jsx("span",{className:"wfr-icon",children:"⚠"}),c.jsxs("div",{className:"wfr-header-text",children:[c.jsxs("span",{className:"wfr-title",children:["Interrupted: ",a.title]}),c.jsxs("span",{className:"wfr-subtitle",children:[d,"/",a.work_items.length," work items done, ",m," interrupted",a.profile&&c.jsxs(c.Fragment,{children:[" · ",a.profile]})]})]})]}),c.jsx("div",{className:"wfr-work-items",children:a.work_items.map(p=>c.jsxs("div",{className:`wfr-work-item wfr-work-item--${p.status}`,children:[c.jsx("span",{className:"wfr-work-item-icon",style:{color:Uk[p.status]||Uk.pending},children:Vk[p.status]||Vk.pending}),c.jsx("span",{className:"wfr-work-item-title",children:p.title}),p.interrupted&&c.jsx("span",{className:"wfr-work-item-badge",children:"interrupted"})]},p.work_item_projection_id))}),c.jsx("div",{className:"wfr-actions",children:u?c.jsxs("span",{className:"wfr-recovering",children:[c.jsx("span",{className:"spinner-inline"})," Recovering..."]}):c.jsxs(c.Fragment,{children:[c.jsx("button",{className:"wfr-btn wfr-btn--resume",onClick:()=>t(a.parent_task_id),children:"Resume"}),c.jsx("button",{className:"wfr-btn wfr-btn--cancel",onClick:()=>n(a.parent_task_id),children:"Cancel"}),c.jsx("button",{className:"wfr-btn wfr-btn--dismiss",onClick:()=>i(p=>new Set(p).add(a.parent_task_id)),children:"Dismiss"})]})})]},a.parent_task_id)})})}var Sm=Dj();const r4=ta(Sm);function Va(e,t,n){let r=n.initialDeps??[],i,o=!0;function a(){var u,d,m;let p;n.key&&((u=n.debug)!=null&&u.call(n))&&(p=Date.now());const h=e();if(!(h.length!==r.length||h.some((v,k)=>r[k]!==v)))return i;r=h;let y;if(n.key&&((d=n.debug)!=null&&d.call(n))&&(y=Date.now()),i=t(...h),n.key&&((m=n.debug)!=null&&m.call(n))){const v=Math.round((Date.now()-p)*100)/100,k=Math.round((Date.now()-y)*100)/100,S=k/16,_=(w,C)=>{for(w=String(w);w.length{r=u},a}function Gk(e,t){if(e===void 0)throw new Error("Unexpected undefined");return e}const i4=(e,t)=>Math.abs(e-t)<1.01,s4=(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}},o4=e=>e,a4=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},l4=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;const i=a=>{const{width:u,height:d}=a;t({width:Math.round(u),height:Math.round(d)})};if(i(qk(n)),!r.ResizeObserver)return()=>{};const o=new r.ResizeObserver(a=>{const u=()=>{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(u):u()});return o.observe(n,{box:"border-box"}),()=>{o.unobserve(n)}},Wk={passive:!0},Yk=typeof window>"u"?!0:"onscrollend"in window,c4=(e,t)=>{const n=e.scrollElement;if(!n)return;const r=e.targetWindow;if(!r)return;let i=0;const o=e.options.useScrollendEvent&&Yk?()=>{}:s4(r,()=>{t(i,!1)},e.options.isScrollingResetDelay),a=p=>()=>{const{horizontal:h,isRtl:g}=e.options;i=h?n.scrollLeft*(g&&-1||1):n.scrollTop,o(),t(i,p)},u=a(!0),d=a(!1);n.addEventListener("scroll",u,Wk);const m=e.options.useScrollendEvent&&Yk;return m&&n.addEventListener("scrollend",d,Wk),()=>{n.removeEventListener("scroll",u),m&&n.removeEventListener("scrollend",d)}},u4=(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"]},d4=(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 f4{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 u=o.target,d=this.indexFromElement(u);if(!u.isConnected){this.observer.unobserve(u);return}this.shouldMeasureDuringScroll(d)&&this.resizeItem(d,this.options.measureElement(u,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:o4,rangeExtractor:a4,onChange:()=>{},measureElement:u4,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=Va(()=>(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()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 u=n[a];if(i.has(u.lane))continue;const d=o.get(u.lane);if(d==null||u.end>d.end?o.set(u.lane,u):u.enda.end===u.end?a.index-u.index:a.end-u.end)[0]:void 0},this.getMeasurementOptions=Va(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(n,r,i,o,a,u)=>(this.prevLanes!==void 0&&this.prevLanes!==u&&(this.lanesChangedFlag=!0),this.prevLanes=u,this.pendingMeasuredCacheIndexes=[],{count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a,lanes:u}),{key:!1}),this.getMeasurements=Va(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:n,paddingStart:r,scrollMargin:i,getItemKey:o,enabled:a,lanes:u},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 p=this.measurementsCache.slice(0,m),h=new Array(u).fill(void 0);for(let g=0;g1){k=v;const N=h[k],O=N!==void 0?p[N]:void 0;S=O?O.end+this.options.gap:r+i}else{const N=this.options.lanes===1?p[g-1]:this.getFurthestMeasurement(p,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 _=d.get(y),w=typeof _=="number"?_:this.options.estimateSize(g),C=S+w;p[g]={index:g,start:S,size:w,end:C,key:y,lane:k},h[k]=g}return this.measurementsCache=p,p},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Va(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(n,r,i,o)=>this.range=n.length>0&&r>0?m4({measurements:n,outerSize:r,scrollOffset:i,lanes:o}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=Va(()=>{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),u=Math.min(this.options.count-1,i+o);return n>=a&&n<=u}return!0},this.measureElement=n=>{if(!n){this.elementsCache.forEach((a,u)=>{a.isConnected||(this.observer.unobserve(a),this.elementsCache.delete(u))});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,u=r-a;u!==0&&(((i=this.scrollState)==null?void 0:i.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(o,u,this):o.start[this.getVirtualIndexes(),this.getMeasurements()],(n,r)=>{const i=[];for(let o=0,a=n.length;othis.options.debug}),this.getVirtualItemForOffset=n=>{const r=this.getMeasurements();if(r.length!==0)return Gk(r[Gj(0,r.length-1,i=>Gk(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 u=this.getMaxScrollOffset();return Math.max(Math.min(u,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 u=r==="end"?a.end+this.options.scrollPaddingEnd:a.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(u,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,u]=o,d=this.now();this.scrollState={index:n,align:u,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(u=>u===null);){const u=r[a];o[u.lane]===null&&(o[u.lane]=u.end),a--}i=Math.max(...o.filter(u=>u!==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&&i4(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 Gj=(e,t,n,r)=>{for(;e<=t;){const i=(e+t)/2|0,o=n(i);if(or)t=i-1;else return i}return e>0?e-1:0};function m4({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=Gj(0,i,o,n),u=a;if(r===1)for(;u1){const d=Array(r).fill(0);for(;up=0&&m.some(p=>p>=n);){const p=e[a];m[p.lane]=p.start,a--}a=Math.max(0,a-a%r),u=Math.min(i,u+(r-1-u%r))}return{startIndex:a,endIndex:u}}const Xk=typeof document<"u"?j.useLayoutEffect:j.useEffect;function h4({useFlushSync:e=!0,...t}){const n=j.useReducer(()=>({}),{})[1],r={...t,onChange:(o,a)=>{var u;e&&a?Sm.flushSync(n):n(),(u=t.onChange)==null||u.call(t,o,a)}},[i]=j.useState(()=>new f4(r));return i.setOptions(r),Xk(()=>i._didMount(),[]),Xk(()=>i._willUpdate()),i}function qj(e){return h4({observeElementRect:l4,observeElementOffset:c4,scrollToFn:d4,...e})}function p4(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M12 2V8M8 6H16M12 14V18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function wm(){return c.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:c.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 Wj(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("rect",{x:"4",y:"4",width:"16",height:"16",rx:"3",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("rect",{x:"8",y:"8",width:"8",height:"8",rx:"1.5",fill:"currentColor"})]})}function g4(){return c.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M5 12L3 3L21 12L3 21L5 12ZM5 12H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Cm(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",stroke:"currentColor",strokeWidth:"1.5"}),c.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 Nl(){return c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M20 6L9 17L4 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function x4(){return c.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M13 8H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M17 12H7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function y4(){return c.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:c.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 Yi({down:e}){return c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{transition:"transform 200ms",transform:e?"rotate(90deg)":"none"},children:c.jsx("path",{d:"M9 18L15 12L9 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function v4(){return c.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M12 5V19M5 12H19",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}function N0(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("circle",{cx:"11",cy:"11",r:"8",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("path",{d:"M21 21L16.65 16.65",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function b4(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M3 6H5H21",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.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 _4(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1.5",stroke:"currentColor",strokeWidth:"1.5"})]})}function Yj(){return c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M22 12H18L15 21L9 3L6 12H2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function au(){return c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:c.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 co(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Xj(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M5 12h14",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"m12 5 7 7-7 7",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function k4(){return c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M9 11L12 14L22 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.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 Kk(){return c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M13 2L3 14H12L11 22L21 10H12L13 2Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function jm(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M4 18H10V14H4V18Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M8 14H14V10H8V14Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M12 10H18V6H12V10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M18 8L21 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function S4(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M9 12L11 14L15 10",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}function w4(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M15 9L9 15M9 9L15 15",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Nc(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("path",{d:"M12 6V12L16 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Pf(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M7 17L2 12L7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M17 7L22 12L17 17",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M2 12H22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function dl(){return c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:[c.jsx("path",{d:"M12 2V22",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("circle",{cx:"12",cy:"6",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("circle",{cx:"12",cy:"12",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("circle",{cx:"12",cy:"18",r:"2",stroke:"currentColor",strokeWidth:"1.5"}),c.jsx("path",{d:"M14 6H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("path",{d:"M14 12H18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),c.jsx("path",{d:"M14 18H20",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function Em(){return c.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",children:c.jsx("path",{d:"M18 6L6 18M6 6L18 18",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Zk({size:e=12}={}){return c.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[c.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function C4({size:e=14}={}){return c.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[c.jsx("circle",{cx:"12",cy:"8",r:"5",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M20 21a8 8 0 0 0-16 0",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round"})]})}function j4({size:e=14}={}){return c.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.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"}),c.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"}),c.jsx("path",{d:"M10 6h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M10 10h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M10 14h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M10 18h4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}function E4({size:e=14}={}){return c.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",children:[c.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"}),c.jsx("path",{d:"M20 3v4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M22 5h-4",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M4 17v2",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"}),c.jsx("path",{d:"M5 18H3",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})]})}const Za=new Set(["done","failed","cancelled"]),N4=new Set(["company","org","custom"]),I4=new Set(["idle","done","failed","cancelled"]);function Nm(e){return Za.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 Ki(e){return Nm(e)!=="idle"}function T4(e){if(!e)return!1;const t=String(e.execMode??"").trim().toLowerCase(),n=t==="task";return N4.has(t)||!!e.isCompanyRuntime||!!e.parentSessionId||!!e.orgId||!!e.workItemProjectionId||!!e.roleWorkItems||!!e.executorRoleWorkItems||!!e.companyProfile&&!n}function R4(e,t){if(!T4(e))return{};const n=String(t??"").trim().toLowerCase();if(n==="running")return{runtimeControlState:"running",canStop:!0,canResume:!1};if(I4.has(n)){const r=e?.runtimeControlState;return r==="suspending"||r==="suspended"?{}:{runtimeControlState:"idle",canStop:!1,canResume:!1}}return{}}function gg(e){if(!(typeof e!="number"||!Number.isFinite(e)))return e}function Qk(e){return Math.max(0,Math.min(Math.round(e),100))}function Kj(e){const t=gg(e?.contextTokens),n=gg(e?.contextWindow),r=gg(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"?Qk(r):void 0;if(typeof i=="number"&&typeof o=="number"){const u=Math.min(i,o),d=Qk(u/o*100);return{usedPct:d,remainingPct:100-d,usedTokens:u,windowTokens:o}}if(typeof a=="number"&&typeof o=="number"){const u=100-a;return{usedPct:u,remainingPct:a,usedTokens:Math.round(u/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}:{}}const A4=/(\d[\d,]*)\s*\/\s*(\d[\d,]*)\s+tokens/i,M4=/(\d{1,3})%\s*used/i,D4=/(\d{1,3})%\s*remaining/i;function O4(e){return e.replace(/\s+/g," ").trim()}function L4(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 Ty(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 z4(e){if(Ty(e)<=0)return"";const t=O4(L4(e.content)).slice(0,2e3);return t?`result:${t}`:""}function Xd(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 Jk(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,Math.min(Math.round(e),100))}function fl(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 P4(e){const t={};for(const n of e??[]){const r=`${n.summary??""} ${n.detail??""}`.trim();if(!r)continue;const i=A4.exec(r);if(i){const u=Xd(i[1]),d=Xd(i[2]);typeof u=="number"&&(t.contextTokens=u),typeof d=="number"&&d>0&&(t.contextWindow=d)}const o=D4.exec(r);if(o){t.contextRemainingPct=Jk(Xd(o[1]));continue}const a=M4.exec(r);if(a){const u=Jk(Xd(a[1]));typeof u=="number"&&(t.contextRemainingPct=100-u)}}return t}function Bf(e){const t=P4(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 Zj(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 B4(e){return!!(String(e?.workItemRoleId??"").trim()||String(e?.workItemRoleName??"").trim())}function jf(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 u of e.workItemLog??[]){const d=u.executionTurnId||u.runtimeTaskId;d&&!i.has(d)&&i.set(d,i.size)}const o=new Set;return t.filter(u=>{if(u.taskId===e.taskId||o.has(u.taskId))return!1;const d=!!u.parentSessionId&&n.has(u.parentSessionId),m=i.has(u.taskId),p=!!r&&String(u.originTaskId??"").trim()===r;return!d&&!m&&!p?!1:(o.add(u.taskId),!0)}).sort((u,d)=>{const m=i.get(u.taskId),p=i.get(d.taskId);return m!=null&&p!=null&&m!==p?m-p:m!=null&&p==null?-1:m==null&&p!=null?1:d.updatedAt-u.updatedAt})}function eS(e,t){const n=jf(e,t);return!e||e.mode==="child"||!B4(e)?n:Zj([e,...n])}function $f(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 $4(e){const t=String(e?.execMode??"").trim();return t==="company"||t==="org"||t==="custom"}function tS(e){const t=Ki(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 nS(e){const t=Kj(e),n=Ki(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,u=(e.progressLog?.length??0)*100;return n+r+i+o+a+u}function Hf(e,t){if(!e)return{timelineSessions:[],displaySession:null,runtimeSession:null,projectedFromChild:!1};const n=Bf(e);if(e.mode==="child"||t.length===0)return{timelineSessions:[n],displaySession:n,runtimeSession:n,projectedFromChild:!1};const r=t.map(Bf),i=r.filter(h=>h.status!=="cancelled"),o=i.length>0?i:r,a=Zj([n,...o]),u=$4(e),d=[...a].sort((h,g)=>tS(g)-tS(h))[0]??n,m=u?n:d,p=[...a].sort((h,g)=>nS(g)-nS(h))[0]??m;return{timelineSessions:a,displaySession:m,runtimeSession:p,projectedFromChild:!u&&m.taskId!==e.taskId}}function rS(e,t,n){if(!e)return null;const r=Bf(e),i=t??r,o=fl(i)??fl(r),a=Ff(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 H4(e,t,n){if(!e)return null;const r=Bf(e),i=t??r,o=fl(i)??fl(r),a=Ff(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 iS(e){const t=new Set,n=new Map,r=[];for(const i of e)for(const o of i){const a=o.metadata??{},u=typeof a.ui_message_id=="string"?a.ui_message_id.trim():"",d=z4(o);if(d){const p=n.get(d);if(p!==void 0){Ty(o)>Ty(r[p])&&(r[p]=o);continue}n.set(d,r.length)}const m=d||u||`${o.sender}:${o.replyToId??""}:${o.timestamp}:${o.content.trim()}`;t.has(m)||(t.add(m),r.push(o))}return r.sort((i,o)=>i.timestamp===o.timestamp?i.id.localeCompare(o.id):i.timestamp-o.timestamp)}function sS(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 Ff(e){return e.reduce((t,n)=>t+Math.max(0,n.messageCount??0),0)}const F4={idle:"status-idle",done:"status-done",pending:"status-pending",failed:"status-failed",cancelled:"status-cancelled",blocked:"status-blocked"};function V4(e){const t=fl(e)??e.status,n=Nm({...e,status:t});return n==="tool_active"?"status-tool-active":n==="reflecting"?"status-reflecting":t==="running"?"status-running-idle":F4[t]??"status-pending"}function U4(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 G4(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 q4(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 Kd({session:e,isActive:t,isChild:n,isLast:r,unreadCount:i,onSelect:o,onDelete:a}){const[u,d]=j.useState(!1),[m,p]=j.useState(!1),h=e.assigneeIds.length>0?e.assigneeIds[0].replace(/^agent-/,""):null,g=fl(e)??e.status;return j.useEffect(()=>{if(!m)return;const y=setTimeout(()=>p(!1),3e3);return()=>clearTimeout(y)},[m]),c.jsxs("button",{className:`session-item${t?" active":""}${n?" session-item-child":""}`,onClick:o,onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[n&&c.jsx("span",{className:`session-tree-line${r?" last":""}`}),c.jsx("span",{className:`session-dot ${V4(e)}`}),c.jsxs("div",{className:"session-item-content",children:[c.jsxs("span",{className:"session-item-title",children:[n&&h&&c.jsx("span",{className:"session-agent-tag",children:h}),!n&&e.isCompanyRuntime&&c.jsx("span",{className:"session-runtime-badge",title:"Company runtime",children:c.jsx(jm,{})}),e.title]}),c.jsxs("span",{className:"session-item-meta",children:[g," · ",U4(e.updatedAt)]})]}),!!i&&i>0&&c.jsx("span",{className:"session-unread-badge",children:i>99?"99+":i}),u&&!n&&!m&&c.jsx("button",{className:"session-delete-btn",onClick:y=>{y.stopPropagation(),p(!0)},title:"Delete",children:c.jsx(b4,{})}),m&&c.jsxs("span",{className:"session-confirm-delete",onClick:y=>y.stopPropagation(),children:[c.jsx("button",{className:"session-confirm-yes",onClick:()=>{p(!1),a()},children:"Delete"}),c.jsx("button",{className:"session-confirm-no",onClick:()=>p(!1),children:"Cancel"})]})]})}function W4({sessions:e,activeSessionId:t,activeChannel:n,secretaryChannelId:r,unreadCounts:i,onSelect:o,onCreateSession:a,onDeleteSession:u,onSelectSecretary:d}){const[m,p]=j.useState(""),[h,g]=j.useState(new Set),y=e.some(T=>T.isCompanyRuntime||T.mode==="child"||T.execMode==="company"||T.execMode==="org"||T.execMode==="custom"),v=j.useCallback(T=>{g(L=>{const A=new Set(L);return A.has(T)?A.delete(T):A.add(T),A})},[]),k=j.useMemo(()=>{if(!m.trim())return e;const T=m.toLowerCase();return e.filter(L=>L.title.toLowerCase().includes(T))},[e,m]),S=j.useMemo(()=>q4(k),[k]),_=j.useMemo(()=>{const T={Today:[],Yesterday:[],Earlier:[]};for(const L of S){const A=G4(L.session.createdAt);T[A]?.push(L)}return T},[S]),w=j.useMemo(()=>{const T=[];for(const L of["Today","Yesterday","Earlier"]){const A=_[L];if(!(!A||A.length===0)){T.push({kind:"group",group:L});for(const M of A){T.push({kind:"primary",node:M});const $=M.children.length>0,W=h.has(M.session.taskId);$&&W?T.push({kind:"child-count",node:M}):$&&M.children.forEach((B,U)=>{T.push({kind:"child",parentTaskId:M.session.taskId,child:B,childIndex:U,childCount:M.children.length})})}}}return T},[h,_]),C=w.length>120,N=j.useRef(null),O=qj({count:w.length,getScrollElement:()=>N.current,estimateSize:T=>{const L=w[T];return L?.kind==="group"?26:L?.kind==="child-count"?30:54},overscan:8}),I=j.useCallback(T=>{const L=T.children.length>0,A=h.has(T.session.taskId);return c.jsx("div",{className:"session-tree-node",children:c.jsxs("div",{className:"session-tree-primary",children:[L&&c.jsx("button",{className:`session-expand-btn${A?" collapsed":""}`,onClick:M=>{M.stopPropagation(),v(T.session.taskId)},"aria-label":A?"Expand":"Collapse"}),c.jsx(Kd,{session:T.session,isActive:T.session.taskId===t,unreadCount:i?.[T.session.channelId],onSelect:()=>o(T.session.taskId),onDelete:()=>u(T.session.taskId)})]})})},[t,h,u,o,v,i]),D=j.useCallback(T=>T.kind==="group"?c.jsx("div",{className:"session-group-label",children:y?`${T.group} Runtime Sessions`:T.group}):T.kind==="primary"?I(T.node):T.kind==="child-count"?c.jsxs("button",{className:"session-child-count",onClick:()=>v(T.node.session.taskId),children:[T.node.children.length," sub-task",T.node.children.length>1?"s":""]}):c.jsx("div",{className:"session-children",children:c.jsx(Kd,{session:T.child,isActive:T.child.taskId===t,isChild:!0,isLast:T.childIndex===T.childCount-1,unreadCount:i?.[T.child.channelId],onSelect:()=>o(T.child.taskId),onDelete:()=>u(T.child.taskId)})}),[t,y,u,o,I,v,i]);return c.jsxs("div",{className:"session-sidebar",children:[c.jsxs("button",{className:"session-new-btn",onClick:a,children:[c.jsx(v4,{}),c.jsx("span",{children:"New Chat"})]}),d&&c.jsxs("button",{className:`session-nav-btn${n===r?" active":""}`,onClick:d,children:[c.jsx(au,{}),c.jsx("span",{children:"Secretary"}),!!(r&&i?.[r])&&i[r]>0&&c.jsx("span",{className:"session-unread-badge",children:i[r]>99?"99+":i[r]})]}),c.jsxs("div",{className:"session-search-wrap",children:[c.jsx(N0,{}),c.jsx("input",{className:"session-search",placeholder:"Search...",value:m,onChange:T=>p(T.target.value)})]}),c.jsxs("div",{ref:N,className:`session-list${C?" session-list-virtualized":""}`,children:[C?c.jsx("div",{style:{height:O.getTotalSize(),width:"100%",position:"relative"},children:O.getVirtualItems().map(T=>c.jsx("div",{"data-index":T.index,ref:O.measureElement,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${T.start}px)`},children:D(w[T.index])},T.key))}):["Today","Yesterday","Earlier"].map(T=>{const L=_[T];return!L||L.length===0?null:c.jsxs("div",{className:"session-group",children:[c.jsx("div",{className:"session-group-label",children:y?`${T} Runtime Sessions`:T}),L.map(A=>{const M=A.children.length>0,$=h.has(A.session.taskId);return c.jsxs("div",{className:"session-tree-node",children:[c.jsxs("div",{className:"session-tree-primary",children:[M&&c.jsx("button",{className:`session-expand-btn${$?" collapsed":""}`,onClick:W=>{W.stopPropagation(),v(A.session.taskId)},"aria-label":$?"Expand":"Collapse"}),c.jsx(Kd,{session:A.session,isActive:A.session.taskId===t,unreadCount:i?.[A.session.channelId],onSelect:()=>o(A.session.taskId),onDelete:()=>u(A.session.taskId)})]}),M&&!$&&c.jsx("div",{className:"session-children",children:A.children.map((W,B)=>c.jsx(Kd,{session:W,isActive:W.taskId===t,isChild:!0,isLast:B===A.children.length-1,unreadCount:i?.[W.channelId],onSelect:()=>o(W.taskId),onDelete:()=>u(W.taskId)},W.taskId))}),M&&$&&c.jsxs("button",{className:"session-child-count",onClick:()=>v(A.session.taskId),children:[A.children.length," sub-task",A.children.length>1?"s":""]})]},A.session.taskId)})]},T)}),k.length===0&&c.jsx("div",{className:"session-empty",children:"No sessions yet"})]}),c.jsxs("button",{className:`session-nav-btn session-activity-btn${t===null&&n!==r?" active":""}`,onClick:()=>o(null),children:[c.jsx(Yj,{}),c.jsx("span",{children:"Activity"})]})]})}const Y4=new Set(["company_work_item_gate","company_delivery_feedback","company_staffing_selection","company_recruitment_confirmation","company_reorg_pending","human_escalation","task_user_input"]),X4=new Set(["responded","resolved","timeout","timed_out","expired","stale","superseded","ignored","cancelled","canceled","invalid"]);function K4(e){return Y4.has(String(e??"").trim())}function lu(e){return!(!K4(e?.checkpoint_type)||e?.self_evolution_completed||String(e?.kind??"").trim()==="company_self_evolution_result")}function Z4(e){const t=String(e?.checkpoint_status??"").trim().toLowerCase();return X4.has(t)?!0:!!String(e?.checkpoint_response_message_id??"").trim()}function I0(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 Qj(e){const t=String(e?.response_to_checkpoint_type??"").trim();if(!(t==="company_delivery_feedback"||t==="human_escalation"))return e}function T0(e){const t=new Set,n=new Set,r=new Set;let i;const o=new Map,a=new Map,u=new Set;for(let d=0;dd,k=g==="human_escalation"&&!!y&&(a.get(y)??-1)>d;if(Z4(p)||v||k){n.add(m.id);continue}t.add(m.id),i=I0(p)??i}return{pendingMessageIds:t,respondedMessageIds:n,duplicateMessageIds:r,latestPendingReplyMetadata:i}}function Tr(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 Q4=typeof Symbol=="function"&&Symbol.observable||"@@observable",oS=Q4,aS=()=>Math.random().toString(36).substring(7).split("").join("."),J4={INIT:`@@redux/INIT${aS()}`,REPLACE:`@@redux/REPLACE${aS()}`},lS=J4;function e5(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 Jj(e,t,n){if(typeof e!="function")throw new Error(Tr(2));if(typeof t=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Tr(0));if(typeof t=="function"&&typeof n>"u"&&(n=t,t=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Tr(1));return n(Jj)(e,t)}let r=e,i=t,o=new Map,a=o,u=0,d=!1;function m(){a===o&&(a=new Map,o.forEach((S,_)=>{a.set(_,S)}))}function p(){if(d)throw new Error(Tr(3));return i}function h(S){if(typeof S!="function")throw new Error(Tr(4));if(d)throw new Error(Tr(5));let _=!0;m();const w=u++;return a.set(w,S),function(){if(_){if(d)throw new Error(Tr(6));_=!1,m(),a.delete(w),o=null}}}function g(S){if(!e5(S))throw new Error(Tr(7));if(typeof S.type>"u")throw new Error(Tr(8));if(typeof S.type!="string")throw new Error(Tr(17));if(d)throw new Error(Tr(9));try{d=!0,i=r(i,S)}finally{d=!1}return(o=a).forEach(w=>{w()}),S}function y(S){if(typeof S!="function")throw new Error(Tr(10));r=S,g({type:lS.REPLACE})}function v(){const S=h;return{subscribe(_){if(typeof _!="object"||_===null)throw new Error(Tr(11));function w(){const N=_;N.next&&N.next(p())}return w(),{unsubscribe:S(w)}},[oS](){return this}}}return g({type:lS.INIT}),{dispatch:g,subscribe:h,getState:p,replaceReducer:y,[oS]:v}}function cS(e,t){return function(...n){return t(e.apply(this,n))}}function uS(e,t){if(typeof e=="function")return cS(e,t);if(typeof e!="object"||e===null)throw new Error(Tr(16));const n={};for(const r in e){const i=e[r];typeof i=="function"&&(n[r]=cS(i,t))}return n}function eE(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...r)=>t(n(...r)))}function t5(...e){return t=>(n,r)=>{const i=t(n,r);let o=()=>{throw new Error(Tr(15))};const a={getState:i.getState,dispatch:(d,...m)=>o(d,...m)},u=e.map(d=>d(a));return o=eE(...u)(i.dispatch),{...i,dispatch:o}}}var xg={exports:{}},yg={};var dS;function n5(){if(dS)return yg;dS=1;var e=El();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,u=e.useDebugValue;return yg.useSyncExternalStoreWithSelector=function(d,m,p,h,g){var y=i(null);if(y.current===null){var v={hasValue:!1,value:null};y.current=v}else v=y.current;y=a(function(){function S(O){if(!_){if(_=!0,w=O,O=h(O),g!==void 0&&v.hasValue){var I=v.value;if(g(I,O))return C=I}return C=O}if(I=C,n(w,O))return I;var D=h(O);return g!==void 0&&g(I,D)?(w=O,I):(w=O,C=D)}var _=!1,w,C,N=p===void 0?null:p;return[function(){return S(m())},N===null?void 0:function(){return S(N())}]},[m,p,h,g]);var k=r(d,y[0],y[1]);return o(function(){v.hasValue=!0,v.value=k},[k]),u(k),k},yg}var fS;function r5(){return fS||(fS=1,xg.exports=n5()),xg.exports}r5();var i5=j.version.startsWith("19"),s5=Symbol.for(i5?"react.transitional.element":"react.element"),o5=Symbol.for("react.portal"),a5=Symbol.for("react.fragment"),l5=Symbol.for("react.strict_mode"),c5=Symbol.for("react.profiler"),u5=Symbol.for("react.consumer"),d5=Symbol.for("react.context"),tE=Symbol.for("react.forward_ref"),f5=Symbol.for("react.suspense"),m5=Symbol.for("react.suspense_list"),R0=Symbol.for("react.memo"),h5=Symbol.for("react.lazy"),p5=tE,g5=R0;function x5(e){if(typeof e=="object"&&e!==null){const{$$typeof:t}=e;switch(t){case s5:switch(e=e.type,e){case a5:case c5:case l5:case f5:case m5:return e;default:switch(e=e&&e.$$typeof,e){case d5:case tE:case h5:case R0:return e;case u5:return e;default:return t}}case o5:return t}}}function y5(e){return x5(e)===R0}function v5(e,t,n,r,{areStatesEqual:i,areOwnPropsEqual:o,areStatePropsEqual:a}){let u=!1,d,m,p,h,g;function y(w,C){return d=w,m=C,p=e(d,m),h=t(r,m),g=n(p,h,m),u=!0,g}function v(){return p=e(d,m),t.dependsOnOwnProps&&(h=t(r,m)),g=n(p,h,m),g}function k(){return e.dependsOnOwnProps&&(p=e(d,m)),t.dependsOnOwnProps&&(h=t(r,m)),g=n(p,h,m),g}function S(){const w=e(d,m),C=!a(w,p);return p=w,C&&(g=n(p,h,m)),g}function _(w,C){const N=!o(C,m),O=!i(w,d,C,m);return d=w,m=C,N&&O?v():N?k():O?S():g}return function(C,N){return u?_(C,N):y(C,N)}}function b5(e,{initMapStateToProps:t,initMapDispatchToProps:n,initMergeProps:r,...i}){const o=t(e,i),a=n(e,i),u=r(e,i);return v5(o,a,u,e,i)}function _5(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 Ry(e){return function(n){const r=e(n);function i(){return r}return i.dependsOnOwnProps=!1,i}}function mS(e){return e.dependsOnOwnProps?!!e.dependsOnOwnProps:e.length!==1}function nE(e,t){return function(r,{displayName:i}){const o=function(u,d){return o.dependsOnOwnProps?o.mapToProps(u,d):o.mapToProps(u,void 0)};return o.dependsOnOwnProps=!0,o.mapToProps=function(u,d){o.mapToProps=e,o.dependsOnOwnProps=mS(e);let m=o(u,d);return typeof m=="function"&&(o.mapToProps=m,o.dependsOnOwnProps=mS(m),m=o(u,d)),m},o}}function A0(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function k5(e){return e&&typeof e=="object"?Ry(t=>_5(e,t)):e?typeof e=="function"?nE(e):A0(e,"mapDispatchToProps"):Ry(t=>({dispatch:t}))}function S5(e){return e?typeof e=="function"?nE(e):A0(e,"mapStateToProps"):Ry(()=>({}))}function w5(e,t,n){return{...n,...e,...t}}function C5(e){return function(n,{displayName:r,areMergedPropsEqual:i}){let o=!1,a;return function(d,m,p){const h=e(d,m,p);return o?i(h,a)||(a=h):(o=!0,a=h),a}}}function j5(e){return e?typeof e=="function"?C5(e):A0(e,"mergeProps"):()=>w5}function E5(e){e()}function N5(){let e=null,t=null;return{clear(){e=null,t=null},notify(){E5(()=>{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 hS={notify(){},get:()=>[]};function rE(e,t){let n,r=hS,i=0,o=!1;function a(k){p();const S=r.subscribe(k);let _=!1;return()=>{_||(_=!0,S(),h())}}function u(){r.notify()}function d(){v.onStateChange&&v.onStateChange()}function m(){return o}function p(){i++,n||(n=t?t.addNestedSub(d):e.subscribe(d),r=N5())}function h(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=hS)}function g(){o||(o=!0,p())}function y(){o&&(o=!1,h())}const v={addNestedSub:a,notifyNestedSubs:u,handleChangeWrapper:d,isSubscribed:m,trySubscribe:g,tryUnsubscribe:y,getListeners:()=>r};return v}var I5=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",T5=I5(),R5=()=>typeof navigator<"u"&&navigator.product==="ReactNative",A5=R5(),M5=()=>T5||A5?j.useLayoutEffect:j.useEffect,Vf=M5();function pS(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function vg(e,t){if(pS(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;ie(...t),n)}function W5(e,t,n,r,i,o){e.current=r,n.current=!1,i.current&&(i.current=null,o())}function Y5(e,t,n,r,i,o,a,u,d,m,p){if(!e)return()=>{};let h=!1,g=null;const y=()=>{if(h||!u.current)return;const k=t.getState();let S,_;try{S=r(k,i.current)}catch(w){_=w,g=w}_||(g=null),S===o.current?a.current||m():(o.current=S,d.current=S,a.current=!0,p())};return n.onStateChange=y,n.trySubscribe(),y(),()=>{if(h=!0,n.tryUnsubscribe(),n.onStateChange=null,g)throw g}}function X5(e,t){return e===t}function K5(e,t,n,{pure:r,areStatesEqual:i=X5,areOwnPropsEqual:o=vg,areStatePropsEqual:a=vg,areMergedPropsEqual:u=vg,forwardRef:d=!1,context:m=sE}={}){const p=m,h=S5(e),g=k5(t),y=j5(n),v=!!e;return S=>{const _=S.displayName||S.name||"Component",w=`Connect(${_})`,C={shouldHandleStateChanges:v,displayName:w,wrappedComponentName:_,WrappedComponent:S,initMapStateToProps:h,initMapDispatchToProps:g,initMergeProps:y,areStatesEqual:i,areStatePropsEqual:a,areOwnPropsEqual:o,areMergedPropsEqual:u};function N(D){const[T,L,A]=j.useMemo(()=>{const{reactReduxForwardedRef:we,...Ce}=D;return[D.context,we,Ce]},[D]),M=j.useMemo(()=>{let we=p;return T?.Consumer,we},[T,p]),$=j.useContext(M),W=!!D.store&&!!D.store.getState&&!!D.store.dispatch,B=!!$&&!!$.store,U=W?D.store:$.store,H=B?$.getServerState:U.getState,V=j.useMemo(()=>b5(U.dispatch,C),[U]),[Y,Q]=j.useMemo(()=>{if(!v)return G5;const we=rE(U,W?void 0:$.subscription),Ce=we.notifyNestedSubs.bind(we);return[we,Ce]},[U,W,$]),q=j.useMemo(()=>W?$:{...$,subscription:Y},[W,$,Y]),G=j.useRef(void 0),J=j.useRef(A),P=j.useRef(void 0),X=j.useRef(!1),ee=j.useRef(!1),te=j.useRef(void 0);Vf(()=>(ee.current=!0,()=>{ee.current=!1}),[]);const re=j.useMemo(()=>()=>P.current&&A===J.current?P.current:V(U.getState(),A),[U,A]),oe=j.useMemo(()=>Ce=>Y?Y5(v,U,Y,V,J,G,X,ee,P,Q,Ce):()=>{},[Y]);q5(W5,[J,G,X,A,P,Q]);let de;try{de=j.useSyncExternalStore(oe,re,H?()=>V(H(),A):re)}catch(we){throw te.current&&(we.message+=` -The error may be correlated with this previous error: -${te.current.stack} - -`),we}Vf(()=>{te.current=void 0,P.current=void 0,G.current=de});const se=j.useMemo(()=>j.createElement(S,{...de,ref:L}),[L,S,de]);return j.useMemo(()=>v?j.createElement(M.Provider,{value:q},se):se,[M,se,q])}const I=j.memo(N);if(I.WrappedComponent=S,I.displayName=N.displayName=w,d){const T=j.forwardRef(function(A,M){return j.createElement(I,{...A,reactReduxForwardedRef:M})});return T.displayName=w,T.WrappedComponent=S,Ay(T,S)}return Ay(I,S)}}var oE=K5;function Z5(e){const{children:t,context:n,serverState:r,store:i}=e,o=j.useMemo(()=>{const d=rE(i);return{store:i,subscription:d,getServerState:r?()=>r:void 0}},[i,r]),a=j.useMemo(()=>i.getState(),[i]);Vf(()=>{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 u=n||sE;return j.createElement(u.Provider,{value:o},t)}var Q5=Z5,J5="Invariant failed";function eD(e,t){throw new Error(J5)}var Ti=function(t){var n=t.top,r=t.right,i=t.bottom,o=t.left,a=r-o,u=i-n,d={top:n,right:r,bottom:i,left:o,width:a,height:u,x:o,y:n,center:{x:(r+o)/2,y:(i+n)/2}};return d},M0=function(t,n){return{top:t.top-n.top,left:t.left-n.left,bottom:t.bottom+n.bottom,right:t.right+n.right}},vS=function(t,n){return{top:t.top+n.top,left:t.left+n.left,bottom:t.bottom-n.bottom,right:t.right-n.right}},tD=function(t,n){return{top:t.top+n.y,left:t.left+n.x,bottom:t.bottom+n.y,right:t.right+n.x}},bg={top:0,right:0,bottom:0,left:0},D0=function(t){var n=t.borderBox,r=t.margin,i=r===void 0?bg:r,o=t.border,a=o===void 0?bg:o,u=t.padding,d=u===void 0?bg:u,m=Ti(M0(n,i)),p=Ti(vS(n,a)),h=Ti(vS(p,d));return{marginBox:m,borderBox:Ti(n),paddingBox:p,contentBox:h,margin:i,border:a,padding:d}},gi=function(t){var n=t.slice(0,-2),r=t.slice(-2);if(r!=="px")return 0;var i=Number(n);return isNaN(i)&&eD(),i},nD=function(){return{x:window.pageXOffset,y:window.pageYOffset}},Uf=function(t,n){var r=t.borderBox,i=t.border,o=t.margin,a=t.padding,u=tD(r,n);return D0({borderBox:u,border:i,margin:o,padding:a})},Gf=function(t,n){return n===void 0&&(n=nD()),Uf(t,n)},aE=function(t,n){var r={top:gi(n.marginTop),right:gi(n.marginRight),bottom:gi(n.marginBottom),left:gi(n.marginLeft)},i={top:gi(n.paddingTop),right:gi(n.paddingRight),bottom:gi(n.paddingBottom),left:gi(n.paddingLeft)},o={top:gi(n.borderTopWidth),right:gi(n.borderRightWidth),bottom:gi(n.borderBottomWidth),left:gi(n.borderLeftWidth)};return D0({borderBox:t,margin:r,padding:i,border:o})},lE=function(t){var n=t.getBoundingClientRect(),r=window.getComputedStyle(t);return aE(n,r)},cu=function(t){var n=[],r=null,i=function(){for(var a=arguments.length,u=new Array(a),d=0;d{const o=rD(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 iD="Invariant failed";class Wf extends Error{}Wf.prototype.toString=function(){return this.message};function Le(e,t){throw new Wf(iD)}let sD=class extends St.Component{constructor(...t){super(...t),this.callbacks=null,this.unbind=fo,this.onWindowError=n=>{const r=this.getCallbacks();r.isDragging()&&r.tryAbort(),n.error instanceof Wf&&n.preventDefault()},this.getCallbacks=()=>{if(!this.callbacks)throw new Error("Unable to find AppCallbacks in ");return this.callbacks},this.setCallbacks=n=>{this.callbacks=n}}componentDidMount(){this.unbind=bi(window,[{eventName:"error",fn:this.onWindowError}])}componentDidCatch(t){if(t instanceof Wf){this.setState({});return}throw t}componentWillUnmount(){this.unbind()}render(){return this.props.children(this.setCallbacks)}};const oD=` - 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 -`,Yf=e=>e+1,aD=e=>` - You have lifted an item in position ${Yf(e.source.index)} -`,uE=(e,t)=>{const n=e.droppableId===t.droppableId,r=Yf(e.index),i=Yf(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} - `},dE=(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} - `,lD=e=>{const t=e.destination;if(t)return uE(e.source,t);const n=e.combine;return n?dE(e.draggableId,e.source,n):"You are over an area that cannot be dropped on"},bS=e=>` - The item has returned to its starting position - of ${Yf(e.index)} -`,cD=e=>{if(e.reason==="CANCEL")return` - Movement cancelled. - ${bS(e.source)} - `;const t=e.destination,n=e.combine;return t?` - You have dropped the item. - ${uE(e.source,t)} - `:n?` - You have dropped the item. - ${dE(e.draggableId,e.source,n)} - `:` - The item has been dropped while not over a drop area. - ${bS(e.source)} - `},Ef={dragHandleUsageInstructions:oD,onDragStart:aD,onDragUpdate:lD,onDragEnd:cD};function uD(e,t){return!!(e===t||Number.isNaN(e)&&Number.isNaN(t))}function fE(e,t){if(e.length!==t.length)return!1;for(let n=0;n({inputs:t,result:e()}))[0],r=j.useRef(!0),i=j.useRef(n),a=r.current||!!(t&&i.current.inputs&&fE(t,i.current.inputs))?i.current:{inputs:t,result:e()};return j.useEffect(()=>{r.current=!1,i.current=a},[a]),a.result}function st(e,t){return Vt(()=>e,t)}const ar={x:0,y:0},xr=(e,t)=>({x:e.x+t.x,y:e.y+t.y}),Jr=(e,t)=>({x:e.x-t.x,y:e.y-t.y}),mo=(e,t)=>e.x===t.x&&e.y===t.y,Il=e=>({x:e.x!==0?-e.x:0,y:e.y!==0?-e.y:0}),qo=(e,t,n=0)=>e==="x"?{x:t,y:n}:{x:n,y:t},uu=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2),_S=(e,t)=>Math.min(...t.map(n=>uu(e,n))),mE=e=>t=>({x:e(t.x),y:e(t.y)});var dD=(e,t)=>{const n=Ti({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 Iu=(e,t)=>({top:e.top+t.y,left:e.left+t.x,bottom:e.bottom+t.y,right:e.right+t.x}),kS=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}],fD={top:0,right:0,bottom:0,left:0},mD=(e,t)=>t?Iu(e,t.scroll.diff.displacement):e,hD=(e,t,n)=>n&&n.increasedBy?{...e,[t.end]:e[t.end]+n.increasedBy[t.line]}:e,pD=(e,t)=>t&&t.shouldClipSubject?dD(t.pageMarginBox,e):Ti(e);var ml=({page:e,withPlaceholder:t,axis:n,frame:r})=>{const i=mD(e.marginBox,r),o=hD(i,n,t),a=pD(o,r);return{page:e,withPlaceholder:t,active:a}},O0=(e,t)=>{e.frame||Le();const n=e.frame,r=Jr(t,n.scroll.initial),i=Il(r),o={...n,scroll:{initial:n.scroll.initial,current:t,diff:{value:r,displacement:i},max:n.scroll.max}},a=ml({page:e.subject.page,withPlaceholder:e.subject.withPlaceholder,axis:e.axis,frame:o});return{...e,frame:o,subject:a}};function or(e,t=fE){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 hE=or(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),pE=or(e=>e.reduce((t,n)=>(t[n.descriptor.id]=n,t),{})),Im=or(e=>Object.values(e)),gD=or(e=>Object.values(e));var Tl=or((e,t)=>gD(t).filter(r=>e===r.descriptor.droppableId).sort((r,i)=>r.descriptor.index-i.descriptor.index));function L0(e){return e.at&&e.at.type==="REORDER"?e.at.destination:null}function Tm(e){return e.at&&e.at.type==="COMBINE"?e.at.combine:null}var Rm=or((e,t)=>t.filter(n=>n.descriptor.id!==e.descriptor.id)),xD=({isMovingForward:e,draggable:t,destination:n,insideDestination:r,previousImpact:i})=>{if(!n.isCombineEnabled||!L0(i))return null;function a(y){const v={type:"COMBINE",combine:{draggableId:y,droppableId:n.descriptor.id}};return{...i,at:v}}const u=i.displaced.all,d=u.length?u[0]:null;if(e)return d?a(d):null;const m=Rm(t,r);if(!d){if(!m.length)return null;const y=m[m.length-1];return a(y.descriptor.id)}const p=m.findIndex(y=>y.descriptor.id===d);p===-1&&Le();const h=p-1;if(h<0)return null;const g=m[h];return a(g.descriptor.id)},Rl=(e,t)=>e.descriptor.droppableId===t.descriptor.id;const gE={point:ar,value:0},du={invisible:{},visible:{},all:[]},yD={displaced:du,displacedBy:gE,at:null};var _i=(e,t)=>n=>e<=n&&n<=t,xE=e=>{const t=_i(e.top,e.bottom),n=_i(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.tope.bottom,m=r.lefte.right;return d&&m?!0:d&&a||m&&o}},vD=e=>{const t=_i(e.top,e.bottom),n=_i(e.left,e.right);return r=>t(r.top)&&t(r.bottom)&&n(r.left)&&n(r.right)};const z0={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},yE={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"};var bD=e=>t=>{const n=_i(t.top,t.bottom),r=_i(t.left,t.right);return i=>e===z0?n(i.top)&&n(i.bottom):r(i.left)&&r(i.right)};const _D=(e,t)=>{const n=t.frame?t.frame.scroll.diff.displacement:ar;return Iu(e,n)},kD=(e,t,n)=>t.subject.active?n(t.subject.active)(e):!1,SD=(e,t,n)=>n(t)(e),P0=({target:e,destination:t,viewport:n,withDroppableDisplacement:r,isVisibleThroughFrameFn:i})=>{const o=r?_D(e,t):e;return kD(o,t,i)&&SD(o,n,i)},wD=e=>P0({...e,isVisibleThroughFrameFn:xE}),vE=e=>P0({...e,isVisibleThroughFrameFn:vD}),CD=e=>P0({...e,isVisibleThroughFrameFn:bD(e.destination.axis)}),jD=(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 ED(e,t){const n=e.page.marginBox,r={top:t.point.y,right:0,bottom:0,left:t.point.x};return Ti(M0(n,r))}function fu({afterDragging:e,destination:t,displacedBy:n,viewport:r,forceShouldAnimate:i,last:o}){return e.reduce(function(u,d){const m=ED(d,n),p=d.descriptor.id;if(u.all.push(p),!wD({target:m,destination:t,viewport:r,withDroppableDisplacement:!0}))return u.invisible[d.descriptor.id]=!0,u;const g=jD(p,o,i),y={draggableId:p,shouldAnimate:g};return u.visible[p]=y,u},{all:[],visible:{},invisible:{}})}function ND(e,t){if(!e.length)return 0;const n=e[e.length-1].descriptor.index;return t.inHomeList?n:n+1}function SS({insideDestination:e,inHomeList:t,displacedBy:n,destination:r}){const i=ND(e,{inHomeList:t});return{displaced:du,displacedBy:n,at:{type:"REORDER",destination:{droppableId:r.descriptor.id,index:i}}}}function Xf({draggable:e,insideDestination:t,destination:n,viewport:r,displacedBy:i,last:o,index:a,forceShouldAnimate:u}){const d=Rl(e,n);if(a==null)return SS({insideDestination:t,inHomeList:d,displacedBy:i,destination:n});const m=t.find(v=>v.descriptor.index===a);if(!m)return SS({insideDestination:t,inHomeList:d,displacedBy:i,destination:n});const p=Rm(e,t),h=t.indexOf(m),g=p.slice(h);return{displaced:fu({afterDragging:g,destination:n,displacedBy:i,last:o,viewport:r.frame,forceShouldAnimate:u}),displacedBy:i,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:a}}}}function go(e,t){return!!t.effected[e]}var ID=({isMovingForward:e,destination:t,draggables:n,combine:r,afterCritical:i})=>{if(!t.isCombineEnabled)return null;const o=r.draggableId,u=n[o].descriptor.index;return go(o,i)?e?u:u-1:e?u+1:u},TD=({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,u=n[n.length-1].descriptor.index,d=t?u:u+1;return od?null:o},RD=({isMovingForward:e,isInHomeList:t,draggable:n,draggables:r,destination:i,insideDestination:o,previousImpact:a,viewport:u,afterCritical:d})=>{const m=a.at;if(m||Le(),m.type==="REORDER"){const h=TD({isMovingForward:e,isInHomeList:t,location:m.destination,insideDestination:o});return h==null?null:Xf({draggable:n,insideDestination:o,destination:i,viewport:u,last:a.displaced,displacedBy:a.displacedBy,index:h})}const p=ID({isMovingForward:e,destination:i,displaced:a.displaced,draggables:r,combine:m.combine,afterCritical:d});return p==null?null:Xf({draggable:n,insideDestination:o,destination:i,viewport:u,last:a.displaced,displacedBy:a.displacedBy,index:p})},AD=({displaced:e,afterCritical:t,combineWith:n,displacedBy:r})=>{const i=!!(e.visible[n]||e.invisible[n]);return go(n,t)?i?ar:Il(r.point):i?r.point:ar},MD=({afterCritical:e,impact:t,draggables:n})=>{const r=Tm(t);r||Le();const i=r.draggableId,o=n[i].page.borderBox.center,a=AD({displaced:t.displaced,afterCritical:e,combineWith:i,displacedBy:t.displacedBy});return xr(o,a)};const bE=(e,t)=>t.margin[e.start]+t.borderBox[e.size]/2,DD=(e,t)=>t.margin[e.end]+t.borderBox[e.size]/2,B0=(e,t,n)=>t[e.crossAxisStart]+n.margin[e.crossAxisStart]+n.borderBox[e.crossAxisSize]/2,wS=({axis:e,moveRelativeTo:t,isMoving:n})=>qo(e.line,t.marginBox[e.end]+bE(e,n),B0(e,t.marginBox,n)),CS=({axis:e,moveRelativeTo:t,isMoving:n})=>qo(e.line,t.marginBox[e.start]-DD(e,n),B0(e,t.marginBox,n)),OD=({axis:e,moveInto:t,isMoving:n})=>qo(e.line,t.contentBox[e.start]+bE(e,n),B0(e,t.contentBox,n));var LD=({impact:e,draggable:t,draggables:n,droppable:r,afterCritical:i})=>{const o=Tl(r.descriptor.id,n),a=t.page,u=r.axis;if(!o.length)return OD({axis:u,moveInto:r.page,isMoving:a});const{displaced:d,displacedBy:m}=e,p=d.all[0];if(p){const g=n[p];if(go(p,i))return CS({axis:u,moveRelativeTo:g.page,isMoving:a});const y=Uf(g.page,m.point);return CS({axis:u,moveRelativeTo:y,isMoving:a})}const h=o[o.length-1];if(h.descriptor.id===t.descriptor.id)return a.borderBox.center;if(go(h.descriptor.id,i)){const g=Uf(h.page,Il(i.displacedBy.point));return wS({axis:u,moveRelativeTo:g,isMoving:a})}return wS({axis:u,moveRelativeTo:h.page,isMoving:a})},My=(e,t)=>{const n=e.frame;return n?xr(t,n.scroll.diff.displacement):t};const zD=({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"?LD({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:i}):MD({impact:e,draggables:r,afterCritical:i})};var Am=e=>{const t=zD(e),n=e.droppable;return n?My(n,t):t},_E=(e,t)=>{const n=Jr(t,e.scroll.initial),r=Il(n);return{frame:Ti({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 jS(e,t){return e.map(n=>t[n])}function PD(e,t){for(let n=0;n{const o=_E(t,xr(t.scroll.current,i)),a=n.frame?O0(n,xr(n.frame.scroll.current,i)):n,u=e.displaced,d=fu({afterDragging:jS(u.all,r),destination:n,displacedBy:e.displacedBy,viewport:o.frame,last:u,forceShouldAnimate:!1}),m=fu({afterDragging:jS(u.all,r),destination:a,displacedBy:e.displacedBy,viewport:t.frame,last:u,forceShouldAnimate:!1}),p={},h={},g=[u,d,m];return u.all.forEach(v=>{const k=PD(v,g);if(k){h[v]=k;return}p[v]=!0}),{...e,displaced:{all:u.all,invisible:p,visible:h}}},$D=(e,t)=>xr(e.scroll.diff.displacement,t),$0=({pageBorderBoxCenter:e,draggable:t,viewport:n})=>{const r=$D(n,e),i=Jr(r,t.page.borderBox.center);return xr(t.client.borderBox.center,i)},kE=({draggable:e,destination:t,newPageBorderBoxCenter:n,viewport:r,withDroppableDisplacement:i,onlyOnMainAxis:o=!1})=>{const a=Jr(n,e.page.borderBox.center),d={target:Iu(e.page.borderBox,a),destination:t,withDroppableDisplacement:i,viewport:r};return o?CD(d):vE(d)},HD=({isMovingForward:e,draggable:t,destination:n,draggables:r,previousImpact:i,viewport:o,previousPageBorderBoxCenter:a,previousClientSelection:u,afterCritical:d})=>{if(!n.isEnabled)return null;const m=Tl(n.descriptor.id,r),p=Rl(t,n),h=xD({isMovingForward:e,draggable:t,destination:n,insideDestination:m,previousImpact:i})||RD({isMovingForward:e,isInHomeList:p,draggable:t,draggables:r,destination:n,insideDestination:m,previousImpact:i,viewport:o,afterCritical:d});if(!h)return null;const g=Am({impact:h,draggable:t,droppable:n,draggables:r,afterCritical:d});if(kE({draggable:t,destination:n,newPageBorderBoxCenter:g,viewport:o.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0}))return{clientSelection:$0({pageBorderBoxCenter:g,draggable:t,viewport:o}),impact:h,scrollJumpRequest:null};const v=Jr(g,a),k=BD({impact:h,viewport:o,destination:n,draggables:r,maxScrollChange:v});return{clientSelection:u,impact:k,scrollJumpRequest:v}};const Ir=e=>{const t=e.subject.active;return t||Le(),t};var FD=({isMovingForward:e,pageBorderBoxCenter:t,source:n,droppables:r,viewport:i})=>{const o=n.subject.active;if(!o)return null;const a=n.axis,u=_i(o[a.start],o[a.end]),d=Im(r).filter(p=>p!==n).filter(p=>p.isEnabled).filter(p=>!!p.subject.active).filter(p=>xE(i.frame)(Ir(p))).filter(p=>{const h=Ir(p);return e?o[a.crossAxisEnd]{const h=Ir(p),g=_i(h[a.start],h[a.end]);return u(h[a.start])||u(h[a.end])||g(o[a.start])||g(o[a.end])}).sort((p,h)=>{const g=Ir(p)[a.crossAxisStart],y=Ir(h)[a.crossAxisStart];return e?g-y:y-g}).filter((p,h,g)=>Ir(p)[a.crossAxisStart]===Ir(g[0])[a.crossAxisStart]);if(!d.length)return null;if(d.length===1)return d[0];const m=d.filter(p=>_i(Ir(p)[a.start],Ir(p)[a.end])(t[a.line]));return m.length===1?m[0]:m.length>1?m.sort((p,h)=>Ir(p)[a.start]-Ir(h)[a.start])[0]:d.sort((p,h)=>{const g=_S(t,kS(Ir(p))),y=_S(t,kS(Ir(h)));return g!==y?g-y:Ir(p)[a.start]-Ir(h)[a.start]})[0]};const ES=(e,t)=>{const n=e.page.borderBox.center;return go(e.descriptor.id,t)?Jr(n,t.displacedBy.point):n},VD=(e,t)=>{const n=e.page.borderBox;return go(e.descriptor.id,t)?Iu(n,Il(t.displacedBy.point)):n};var UD=({pageBorderBoxCenter:e,viewport:t,destination:n,insideDestination:r,afterCritical:i})=>r.filter(a=>vE({target:VD(a,i),destination:n,viewport:t.frame,withDroppableDisplacement:!0})).sort((a,u)=>{const d=uu(e,My(n,ES(a,i))),m=uu(e,My(n,ES(u,i)));return d{const r=e.axis;if(e.descriptor.mode==="virtual")return qo(r.line,t[r.line]);const i=e.subject.page.contentBox[r.size],d=Tl(e.descriptor.id,n).reduce((m,p)=>m+p.client.marginBox[r.size],0)+t[r.line]-i;return d<=0?null:qo(r.line,d)},SE=(e,t)=>({...e,scroll:{...e.scroll,max:t}}),wE=(e,t,n)=>{const r=e.frame;Rl(t,e)&&Le(),e.subject.withPlaceholder&&Le();const i=Tu(e.axis,t.displaceBy).point,o=GD(e,i,n),a={placeholderSize:i,increasedBy:o,oldFrameMaxScroll:e.frame?e.frame.scroll.max:null};if(!r){const p=ml({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:e.frame});return{...e,subject:p}}const u=o?xr(r.scroll.max,o):r.scroll.max,d=SE(r,u),m=ml({page:e.subject.page,withPlaceholder:a,axis:e.axis,frame:d});return{...e,subject:m,frame:d}},qD=e=>{const t=e.subject.withPlaceholder;t||Le();const n=e.frame;if(!n){const a=ml({page:e.subject.page,axis:e.axis,frame:null,withPlaceholder:null});return{...e,subject:a}}const r=t.oldFrameMaxScroll;r||Le();const i=SE(n,r),o=ml({page:e.subject.page,axis:e.axis,frame:i,withPlaceholder:null});return{...e,subject:o,frame:i}};var WD=({previousPageBorderBoxCenter:e,moveRelativeTo:t,insideDestination:n,draggable:r,draggables:i,destination:o,viewport:a,afterCritical:u})=>{if(!t){if(n.length)return null;const h={displaced:du,displacedBy:gE,at:{type:"REORDER",destination:{droppableId:o.descriptor.id,index:0}}},g=Am({impact:h,draggable:r,droppable:o,draggables:i,afterCritical:u}),y=Rl(r,o)?o:wE(o,r,i);return kE({draggable:r,destination:y,newPageBorderBoxCenter:g,viewport:a.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})?h:null}const d=e[o.axis.line]<=t.page.borderBox.center[o.axis.line],m=(()=>{const h=t.descriptor.index;return t.descriptor.id===r.descriptor.id||d?h:h+1})(),p=Tu(o.axis,r.displaceBy);return Xf({draggable:r,insideDestination:n,destination:o,viewport:a,displacedBy:p,last:du,index:m})},YD=({isMovingForward:e,previousPageBorderBoxCenter:t,draggable:n,isOver:r,draggables:i,droppables:o,viewport:a,afterCritical:u})=>{const d=FD({isMovingForward:e,pageBorderBoxCenter:t,source:r,droppables:o,viewport:a});if(!d)return null;const m=Tl(d.descriptor.id,i),p=UD({pageBorderBoxCenter:t,viewport:a,destination:d,insideDestination:m,afterCritical:u}),h=WD({previousPageBorderBoxCenter:t,destination:d,draggable:n,draggables:i,moveRelativeTo:p,insideDestination:m,viewport:a,afterCritical:u});if(!h)return null;const g=Am({impact:h,draggable:n,droppable:d,draggables:i,afterCritical:u});return{clientSelection:$0({pageBorderBoxCenter:g,draggable:n,viewport:a}),impact:h,scrollJumpRequest:null}},ei=e=>{const t=e.at;return t?t.type==="REORDER"?t.destination.droppableId:t.combine.droppableId:null};const XD=(e,t)=>{const n=ei(e);return n?t[n]:null};var KD=({state:e,type:t})=>{const n=XD(e.impact,e.dimensions.droppables),r=!!n,i=e.dimensions.droppables[e.critical.droppable.id],o=n||i,a=o.axis.direction,u=a==="vertical"&&(t==="MOVE_UP"||t==="MOVE_DOWN")||a==="horizontal"&&(t==="MOVE_LEFT"||t==="MOVE_RIGHT");if(u&&!r)return null;const d=t==="MOVE_DOWN"||t==="MOVE_RIGHT",m=e.dimensions.draggables[e.critical.draggable.id],p=e.current.page.borderBoxCenter,{draggables:h,droppables:g}=e.dimensions;return u?HD({isMovingForward:d,previousPageBorderBoxCenter:p,draggable:m,destination:o,draggables:h,viewport:e.viewport,previousClientSelection:e.current.client.selection,previousImpact:e.impact,afterCritical:e.afterCritical}):YD({isMovingForward:d,previousPageBorderBoxCenter:p,draggable:m,isOver:o,draggables:h,droppables:g,viewport:e.viewport,afterCritical:e.afterCritical})};function Ho(e){return e.phase==="DRAGGING"||e.phase==="COLLECTING"}function CE(e){const t=_i(e.top,e.bottom),n=_i(e.left,e.right);return function(i){return t(i.y)&&n(i.x)}}function ZD(e,t){return e.leftt.left&&e.topt.top}function QD({pageBorderBox:e,draggable:t,candidates:n}){const r=t.page.borderBox.center,i=n.map(o=>{const a=o.axis,u=qo(o.axis.line,e.center[a.line],o.page.borderBox.center[a.crossAxisLine]);return{id:o.descriptor.id,distance:uu(r,u)}}).sort((o,a)=>a.distance-o.distance);return i[0]?i[0].id:null}function JD({pageBorderBox:e,draggable:t,droppables:n}){const r=Im(n).filter(i=>{if(!i.isEnabled)return!1;const o=i.subject.active;if(!o||!ZD(e,o))return!1;if(CE(o)(e.center))return!0;const a=i.axis,u=o.center[a.crossAxisLine],d=e[a.crossAxisStart],m=e[a.crossAxisEnd],p=_i(o[a.crossAxisStart],o[a.crossAxisEnd]),h=p(d),g=p(m);return!h&&!g?!0:h?du});return r.length?r.length===1?r[0].descriptor.id:QD({pageBorderBox:e,draggable:t,candidates:r}):null}const jE=(e,t)=>Ti(Iu(e,t));var eO=(e,t)=>{const n=e.frame;return n?jE(t,n.scroll.diff.value):t};function EE({displaced:e,id:t}){return!!(e.visible[t]||e.invisible[t])}function tO({draggable:e,closest:t,inHomeList:n}){return t?n&&t.descriptor.index>e.descriptor.index?t.descriptor.index-1:t.descriptor.index:null}var nO=({pageBorderBoxWithDroppableScroll:e,draggable:t,destination:n,insideDestination:r,last:i,viewport:o,afterCritical:a})=>{const u=n.axis,d=Tu(n.axis,t.displaceBy),m=d.value,p=e[u.start],h=e[u.end],y=Rm(t,r).find(k=>{const S=k.descriptor.id,_=k.page.borderBox.center[u.line],w=go(S,a),C=EE({displaced:i,id:S});return w?C?h<=_:p<_-m:C?h<=_+m:p<_})||null,v=tO({draggable:t,closest:y,inHomeList:Rl(t,n)});return Xf({draggable:t,insideDestination:r,destination:n,viewport:o,last:i,displacedBy:d,index:v})};const rO=4;var iO=({draggable:e,pageBorderBoxWithDroppableScroll:t,previousImpact:n,destination:r,insideDestination:i,afterCritical:o})=>{if(!r.isCombineEnabled)return null;const a=r.axis,u=Tu(r.axis,e.displaceBy),d=u.value,m=t[a.start],p=t[a.end],g=Rm(e,i).find(v=>{const k=v.descriptor.id,S=v.page.borderBox,w=S[a.size]/rO,C=go(k,o),N=EE({displaced:n.displaced,id:k});return C?N?p>S[a.start]+w&&pS[a.start]-d+w&&mS[a.start]+d+w&&pS[a.start]+w&&m{const u=jE(t.page.borderBox,e),d=JD({pageBorderBox:u,draggable:t,droppables:r});if(!d)return yD;const m=r[d],p=Tl(m.descriptor.id,n),h=eO(m,u);return iO({pageBorderBoxWithDroppableScroll:h,draggable:t,previousImpact:i,destination:m,insideDestination:p,afterCritical:a})||nO({pageBorderBoxWithDroppableScroll:h,draggable:t,destination:m,insideDestination:p,last:i.displaced,viewport:o,afterCritical:a})},H0=(e,t)=>({...e,[t.descriptor.id]:t});const sO=({previousImpact:e,impact:t,droppables:n})=>{const r=ei(e),i=ei(t);if(!r||r===i)return n;const o=n[r];if(!o.subject.withPlaceholder)return n;const a=qD(o);return H0(n,a)};var oO=({draggable:e,draggables:t,droppables:n,previousImpact:r,impact:i})=>{const o=sO({previousImpact:r,impact:i,droppables:n}),a=ei(i);if(!a)return o;const u=n[a];if(Rl(e,u)||u.subject.withPlaceholder)return o;const d=wE(u,e,t);return H0(o,d)},Zc=({state:e,clientSelection:t,dimensions:n,viewport:r,impact:i,scrollJumpRequest:o})=>{const a=r||e.viewport,u=n||e.dimensions,d=t||e.current.client.selection,m=Jr(d,e.initial.client.selection),p={offset:m,selection:d,borderBoxCenter:xr(e.initial.client.borderBoxCenter,m)},h={selection:xr(p.selection,a.scroll.current),borderBoxCenter:xr(p.borderBoxCenter,a.scroll.current),offset:xr(p.offset,a.scroll.diff.value)},g={client:p,page:h};if(e.phase==="COLLECTING")return{...e,dimensions:u,viewport:a,current:g};const y=u.draggables[e.critical.draggable.id],v=i||NE({pageOffset:h.offset,draggable:y,draggables:u.draggables,droppables:u.droppables,previousImpact:e.impact,viewport:a,afterCritical:e.afterCritical}),k=oO({draggable:y,impact:v,previousImpact:e.impact,draggables:u.draggables,droppables:u.droppables});return{...e,current:g,dimensions:{draggables:u.draggables,droppables:k},impact:v,viewport:a,scrollJumpRequest:o||null,forceShouldAnimate:o?!1:null}};function aO(e,t){return e.map(n=>t[n])}var IE=({impact:e,viewport:t,draggables:n,destination:r,forceShouldAnimate:i})=>{const o=e.displaced,a=aO(o.all,n),u=fu({afterDragging:a,destination:r,displacedBy:e.displacedBy,viewport:t.frame,forceShouldAnimate:i,last:o});return{...e,displaced:u}},TE=({impact:e,draggable:t,droppable:n,draggables:r,viewport:i,afterCritical:o})=>{const a=Am({impact:e,draggable:t,draggables:r,droppable:n,afterCritical:o});return $0({pageBorderBoxCenter:a,draggable:t,viewport:i})},RE=({state:e,dimensions:t,viewport:n})=>{e.movementMode!=="SNAP"&&Le();const r=e.impact,i=n||e.viewport,o=t||e.dimensions,{draggables:a,droppables:u}=o,d=a[e.critical.draggable.id],m=ei(r);m||Le();const p=u[m],h=IE({impact:r,viewport:i,destination:p,draggables:a}),g=TE({impact:h,draggable:d,droppable:p,draggables:a,viewport:i,afterCritical:e.afterCritical});return Zc({impact:h,clientSelection:g,state:e,dimensions:o,viewport:i})},lO=e=>({index:e.index,droppableId:e.droppableId}),AE=({draggable:e,home:t,draggables:n,viewport:r})=>{const i=Tu(t.axis,e.displaceBy),o=Tl(t.descriptor.id,n),a=o.indexOf(e);a===-1&&Le();const u=o.slice(a+1),d=u.reduce((g,y)=>(g[y.descriptor.id]=!0,g),{}),m={inVirtualList:t.descriptor.mode==="virtual",displacedBy:i,effected:d};return{impact:{displaced:fu({afterDragging:u,destination:t,displacedBy:i,last:null,viewport:r.frame,forceShouldAnimate:!1}),displacedBy:i,at:{type:"REORDER",destination:lO(e.descriptor)}},afterCritical:m}},cO=(e,t)=>({draggables:e.draggables,droppables:H0(e.droppables,t)}),uO=({draggable:e,offset:t,initialWindowScroll:n})=>{const r=Uf(e.client,t),i=Gf(r,n);return{...e,placeholder:{...e.placeholder,client:r},client:r,page:i}},dO=e=>{const t=e.frame;return t||Le(),t},fO=({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=dO(a).scroll.diff.value,m=xr(r,d);return uO({draggable:i,offset:m,initialWindowScroll:n.scroll.initial})})},mO=({state:e,published:t})=>{const n=t.modified.map(_=>{const w=e.dimensions.droppables[_.droppableId];return O0(w,_.scroll)}),r={...e.dimensions.droppables,...hE(n)},i=pE(fO({additions:t.additions,updatedDroppables:r,viewport:e.viewport})),o={...e.dimensions.draggables,...i};t.removals.forEach(_=>{delete o[_]});const a={droppables:r,draggables:o},u=ei(e.impact),d=u?a.droppables[u]:null,m=a.draggables[e.critical.draggable.id],p=a.droppables[e.critical.droppable.id],{impact:h,afterCritical:g}=AE({draggable:m,home:p,draggables:o,viewport:e.viewport}),y=d&&d.isCombineEnabled?e.impact:h,v=NE({pageOffset:e.current.page.offset,draggable:a.draggables[e.critical.draggable.id],draggables:a.draggables,droppables:a.droppables,previousImpact:y,viewport:e.viewport,afterCritical:g}),k={...e,phase:"DRAGGING",impact:v,onLiftImpact:h,dimensions:a,afterCritical:g,forceShouldAnimate:!1};return e.phase==="COLLECTING"?k:{...k,phase:"DROP_PENDING",reason:e.reason,isWaiting:!1}};const Dy=e=>e.movementMode==="SNAP",_g=(e,t,n)=>{const r=cO(e.dimensions,t);return!Dy(e)||n?Zc({state:e,dimensions:r}):RE({state:e,dimensions:r})};function kg(e){return e.isDragging&&e.movementMode==="SNAP"?{...e,scrollJumpRequest:null}:e}const NS={phase:"IDLE",completed:null,shouldFlush:!1};var hO=(e=NS,t)=>{if(t.type==="FLUSH")return{...NS,shouldFlush:!0};if(t.type==="INITIAL_PUBLISH"){e.phase!=="IDLE"&&Le();const{critical:n,clientSelection:r,viewport:i,dimensions:o,movementMode:a}=t.payload,u=o.draggables[n.draggable.id],d=o.droppables[n.droppable.id],m={selection:r,borderBoxCenter:u.client.borderBox.center,offset:ar},p={client:m,page:{selection:xr(m.selection,i.scroll.initial),borderBoxCenter:xr(m.selection,i.scroll.initial),offset:xr(m.selection,i.scroll.diff.value)}},h=Im(o.droppables).every(k=>!k.isFixedOnPage),{impact:g,afterCritical:y}=AE({draggable:u,home:d,draggables:o.draggables,viewport:i});return{phase:"DRAGGING",isDragging:!0,critical:n,movementMode:a,dimensions:o,initial:p,current:p,isWindowScrollAllowed:h,impact:g,afterCritical:y,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"&&Le(),{...e,phase:"COLLECTING"});if(t.type==="PUBLISH_WHILE_DRAGGING")return e.phase==="COLLECTING"||e.phase==="DROP_PENDING"||Le(),mO({state:e,published:t.payload});if(t.type==="MOVE"){if(e.phase==="DROP_PENDING")return e;Ho(e)||Le();const{client:n}=t.payload;return mo(n,e.current.client.selection)?e:Zc({state:e,clientSelection:n,impact:Dy(e)?e.impact:null})}if(t.type==="UPDATE_DROPPABLE_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="COLLECTING")return kg(e);Ho(e)||Le();const{id:n,newScroll:r}=t.payload,i=e.dimensions.droppables[n];if(!i)return e;const o=O0(i,r);return _g(e,o,!1)}if(t.type==="UPDATE_DROPPABLE_IS_ENABLED"){if(e.phase==="DROP_PENDING")return e;Ho(e)||Le();const{id:n,isEnabled:r}=t.payload,i=e.dimensions.droppables[n];i||Le(),i.isEnabled===r&&Le();const o={...i,isEnabled:r};return _g(e,o,!0)}if(t.type==="UPDATE_DROPPABLE_IS_COMBINE_ENABLED"){if(e.phase==="DROP_PENDING")return e;Ho(e)||Le();const{id:n,isCombineEnabled:r}=t.payload,i=e.dimensions.droppables[n];i||Le(),i.isCombineEnabled===r&&Le();const o={...i,isCombineEnabled:r};return _g(e,o,!0)}if(t.type==="MOVE_BY_WINDOW_SCROLL"){if(e.phase==="DROP_PENDING"||e.phase==="DROP_ANIMATING")return e;Ho(e)||Le(),e.isWindowScrollAllowed||Le();const n=t.payload.newScroll;if(mo(e.viewport.scroll.current,n))return kg(e);const r=_E(e.viewport,n);return Dy(e)?RE({state:e,viewport:r}):Zc({state:e,viewport:r})}if(t.type==="UPDATE_VIEWPORT_MAX_SCROLL"){if(!Ho(e))return e;const n=t.payload.maxScroll;if(mo(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"&&Le();const n=KD({state:e,type:t.type});return n?Zc({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"&&Le(),{...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"||Le(),{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 tn(e,t){return e instanceof Object&&"type"in e&&e.type===t}const pO=e=>({type:"BEFORE_INITIAL_CAPTURE",payload:e}),gO=e=>({type:"LIFT",payload:e}),xO=e=>({type:"INITIAL_PUBLISH",payload:e}),yO=e=>({type:"PUBLISH_WHILE_DRAGGING",payload:e}),vO=()=>({type:"COLLECTION_STARTING",payload:null}),bO=e=>({type:"UPDATE_DROPPABLE_SCROLL",payload:e}),_O=e=>({type:"UPDATE_DROPPABLE_IS_ENABLED",payload:e}),kO=e=>({type:"UPDATE_DROPPABLE_IS_COMBINE_ENABLED",payload:e}),ME=e=>({type:"MOVE",payload:e}),SO=e=>({type:"MOVE_BY_WINDOW_SCROLL",payload:e}),wO=e=>({type:"UPDATE_VIEWPORT_MAX_SCROLL",payload:e}),CO=()=>({type:"MOVE_UP",payload:null}),jO=()=>({type:"MOVE_DOWN",payload:null}),EO=()=>({type:"MOVE_RIGHT",payload:null}),NO=()=>({type:"MOVE_LEFT",payload:null}),F0=()=>({type:"FLUSH",payload:null}),IO=e=>({type:"DROP_ANIMATE",payload:e}),V0=e=>({type:"DROP_COMPLETE",payload:e}),DE=e=>({type:"DROP",payload:e}),TO=e=>({type:"DROP_PENDING",payload:e}),OE=()=>({type:"DROP_ANIMATION_FINISHED",payload:null});var RO=e=>({getState:t,dispatch:n})=>r=>i=>{if(!tn(i,"LIFT")){r(i);return}const{id:o,clientSelection:a,movementMode:u}=i.payload,d=t();d.phase==="DROP_ANIMATING"&&n(V0({completed:d.completed})),t().phase!=="IDLE"&&Le(),n(F0()),n(pO({draggableId:o,movementMode:u}));const p={draggableId:o,scrollOptions:{shouldPublishImmediately:u==="SNAP"}},{critical:h,dimensions:g,viewport:y}=e.startPublishing(p);n(xO({critical:h,dimensions:g,clientSelection:a,movementMode:u,viewport:y}))},AO=e=>()=>t=>n=>{tn(n,"INITIAL_PUBLISH")&&e.dragging(),tn(n,"DROP_ANIMATE")&&e.dropping(n.payload.completed.result.reason),(tn(n,"FLUSH")||tn(n,"DROP_COMPLETE"))&&e.resting(),t(n)};const U0={outOfTheWay:"cubic-bezier(0.2, 0, 0, 1)",drop:"cubic-bezier(.2,1,.1,1)"},mu={opacity:{drop:0,combining:.7},scale:{drop:.75}},LE={outOfTheWay:.2,minDropTime:.33,maxDropTime:.55},zo=`${LE.outOfTheWay}s ${U0.outOfTheWay}`,Qc={fluid:`opacity ${zo}`,snap:`transform ${zo}, opacity ${zo}`,drop:e=>{const t=`${e}s ${U0.drop}`;return`transform ${t}, opacity ${t}`},outOfTheWay:`transform ${zo}`,placeholder:`height ${zo}, width ${zo}, margin ${zo}`},IS=e=>mo(e,ar)?void 0:`translate(${e.x}px, ${e.y}px)`,Oy={moveTo:IS,drop:(e,t)=>{const n=IS(e);if(n)return t?`${n} scale(${mu.scale.drop})`:n}},{minDropTime:Ly,maxDropTime:zE}=LE,MO=zE-Ly,TS=1500,DO=.6;var OO=({current:e,destination:t,reason:n})=>{const r=uu(e,t);if(r<=0)return Ly;if(r>=TS)return zE;const i=r/TS,o=Ly+MO*i,a=n==="CANCEL"?o*DO:o;return Number(a.toFixed(2))},LO=({impact:e,draggable:t,dimensions:n,viewport:r,afterCritical:i})=>{const{draggables:o,droppables:a}=n,u=ei(e),d=u?a[u]:null,m=a[t.descriptor.droppableId],p=TE({impact:e,draggable:t,draggables:o,afterCritical:i,droppable:d||m,viewport:r});return Jr(p,t.client.borderBox.center)},zO=({draggables:e,reason:t,lastImpact:n,home:r,viewport:i,onLiftImpact:o})=>!n.at||t!=="DROP"?{impact:IE({draggables:e,impact:o,destination:r,viewport:i,forceShouldAnimate:!0}),didDropInsideDroppable:!1}:n.at.type==="REORDER"?{impact:n,didDropInsideDroppable:!0}:{impact:{...n,displaced:du},didDropInsideDroppable:!0};const PO=({getState:e,dispatch:t})=>n=>r=>{if(!tn(r,"DROP")){n(r);return}const i=e(),o=r.payload.reason;if(i.phase==="COLLECTING"){t(TO({reason:o}));return}if(i.phase==="IDLE")return;i.phase==="DROP_PENDING"&&i.isWaiting&&Le(),i.phase==="DRAGGING"||i.phase==="DROP_PENDING"||Le();const u=i.critical,d=i.dimensions,m=d.draggables[i.critical.draggable.id],{impact:p,didDropInsideDroppable:h}=zO({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=h?L0(p):null,y=h?Tm(p):null,v={index:u.draggable.index,droppableId:u.droppable.id},k={draggableId:m.descriptor.id,type:m.descriptor.type,source:v,reason:o,mode:i.movementMode,destination:g,combine:y},S=LO({impact:p,draggable:m,dimensions:d,viewport:i.viewport,afterCritical:i.afterCritical}),_={critical:i.critical,afterCritical:i.afterCritical,result:k,impact:p};if(!(!mo(i.current.client.offset,S)||!!k.combine)){t(V0({completed:_}));return}const C=OO({current:i.current.client.offset,destination:S,reason:o});t(IO({newHomeClientOffset:S,dropDuration:C,completed:_}))};var PE=()=>({x:window.pageXOffset,y:window.pageYOffset});function BO(e){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:t=>{t.target!==window&&t.target!==window.document||e()}}}function $O({onWindowScroll:e}){function t(){e(PE())}const n=cu(t),r=BO(n);let i=fo;function o(){return i!==fo}function a(){o()&&Le(),i=bi(window,[r])}function u(){o()||Le(),n.cancel(),i(),i=fo}return{start:a,stop:u,isActive:o}}const HO=e=>tn(e,"DROP_COMPLETE")||tn(e,"DROP_ANIMATE")||tn(e,"FLUSH"),FO=e=>{const t=$O({onWindowScroll:n=>{e.dispatch(SO({newScroll:n}))}});return n=>r=>{!t.isActive()&&tn(r,"INITIAL_PUBLISH")&&t.start(),t.isActive()&&HO(r)&&t.stop(),n(r)}};var VO=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},UO=()=>{const e=[],t=i=>{const o=e.findIndex(u=>u.timerId===i);o===-1&&Le();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 GO=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.droppableId===t.droppableId&&e.index===t.index,qO=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.draggableId===t.draggableId&&e.droppableId===t.droppableId,WO=(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},Ic=(e,t)=>{t()},Zd=(e,t)=>({draggableId:e.draggable.id,type:e.droppable.type,source:{droppableId:e.droppable.id,index:e.draggable.index},mode:t});function Sg(e,t,n,r){if(!e){n(r(t));return}const i=VO(n);e(t,{announce:i}),i.wasCalled()||n(r(t))}var YO=(e,t)=>{const n=UO();let r=null;const i=(h,g)=>{r&&Le(),Ic("onBeforeCapture",()=>{const y=e().onBeforeCapture;y&&y({draggableId:h,mode:g})})},o=(h,g)=>{r&&Le(),Ic("onBeforeDragStart",()=>{const y=e().onBeforeDragStart;y&&y(Zd(h,g))})},a=(h,g)=>{r&&Le();const y=Zd(h,g);r={mode:g,lastCritical:h,lastLocation:y.source,lastCombine:null},n.add(()=>{Ic("onDragStart",()=>Sg(e().onDragStart,y,t,Ef.onDragStart))})},u=(h,g)=>{const y=L0(g),v=Tm(g);r||Le();const k=!WO(h,r.lastCritical);k&&(r.lastCritical=h);const S=!GO(r.lastLocation,y);S&&(r.lastLocation=y);const _=!qO(r.lastCombine,v);if(_&&(r.lastCombine=v),!k&&!S&&!_)return;const w={...Zd(h,r.mode),combine:v,destination:y};n.add(()=>{Ic("onDragUpdate",()=>Sg(e().onDragUpdate,w,t,Ef.onDragUpdate))})},d=()=>{r||Le(),n.flush()},m=h=>{r||Le(),r=null,Ic("onDragEnd",()=>Sg(e().onDragEnd,h,t,Ef.onDragEnd))};return{beforeCapture:i,beforeStart:o,start:a,update:u,flush:d,drop:m,abort:()=>{if(!r)return;const h={...Zd(r.lastCritical,r.mode),combine:null,destination:null,reason:"CANCEL"};m(h)}}},XO=(e,t)=>{const n=YO(e,t);return r=>i=>o=>{if(tn(o,"BEFORE_INITIAL_CAPTURE")){n.beforeCapture(o.payload.draggableId,o.payload.movementMode);return}if(tn(o,"INITIAL_PUBLISH")){const u=o.payload.critical;n.beforeStart(u,o.payload.movementMode),i(o),n.start(u,o.payload.movementMode);return}if(tn(o,"DROP_COMPLETE")){const u=o.payload.completed.result;n.flush(),i(o),n.drop(u);return}if(i(o),tn(o,"FLUSH")){n.abort();return}const a=r.getState();a.phase==="DRAGGING"&&n.update(a.critical,a.impact)}};const KO=e=>t=>n=>{if(!tn(n,"DROP_ANIMATION_FINISHED")){t(n);return}const r=e.getState();r.phase!=="DROP_ANIMATING"&&Le(),e.dispatch(V0({completed:r.completed}))},ZO=e=>{let t=null,n=null;function r(){n&&(cancelAnimationFrame(n),n=null),t&&(t(),t=null)}return i=>o=>{if((tn(o,"FLUSH")||tn(o,"DROP_COMPLETE")||tn(o,"DROP_ANIMATION_FINISHED"))&&r(),i(o),!tn(o,"DROP_ANIMATE"))return;const a={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){e.getState().phase==="DROP_ANIMATING"&&e.dispatch(OE())}};n=requestAnimationFrame(()=>{n=null,t=bi(window,[a])})}};var QO=e=>()=>t=>n=>{(tn(n,"DROP_COMPLETE")||tn(n,"FLUSH")||tn(n,"DROP_ANIMATE"))&&e.stopPublishing(),t(n)},JO=e=>{let t=!1;return()=>n=>r=>{if(tn(r,"INITIAL_PUBLISH")){t=!0,e.tryRecordFocus(r.payload.critical.draggable.id),n(r),e.tryRestoreFocusRecorded();return}if(n(r),!!t){if(tn(r,"FLUSH")){t=!1,e.tryRestoreFocusRecorded();return}if(tn(r,"DROP_COMPLETE")){t=!1;const i=r.payload.completed.result;i.combine&&e.tryShiftRecord(i.draggableId,i.combine.draggableId),e.tryRestoreFocusRecorded()}}}};const eL=e=>tn(e,"DROP_COMPLETE")||tn(e,"DROP_ANIMATE")||tn(e,"FLUSH");var tL=e=>t=>n=>r=>{if(eL(r)){e.stop(),n(r);return}if(tn(r,"INITIAL_PUBLISH")){n(r);const i=t.getState();i.phase!=="DRAGGING"&&Le(),e.start(i);return}n(r),e.scroll(t.getState())};const nL=e=>t=>n=>{if(t(n),!tn(n,"PUBLISH_WHILE_DRAGGING"))return;const r=e.getState();r.phase==="DROP_PENDING"&&(r.isWaiting||e.dispatch(DE({reason:r.reason})))},rL=eE;var iL=({dimensionMarshal:e,focusMarshal:t,styleMarshal:n,getResponders:r,announce:i,autoScroller:o})=>Jj(hO,rL(t5(AO(n),QO(e),RO(e),PO,KO,ZO,nL,tL(o),FO,JO(t),XO(r,i))));const wg=()=>({additions:{},removals:{},modified:{}});function sL({registry:e,callbacks:t}){let n=wg(),r=null;const i=()=>{r||(t.collectionStarting(),r=requestAnimationFrame(()=>{r=null;const{additions:d,removals:m,modified:p}=n,h=Object.keys(d).map(v=>e.draggable.getById(v).getDimension(ar)).sort((v,k)=>v.descriptor.index-k.descriptor.index),g=Object.keys(p).map(v=>{const S=e.droppable.getById(v).callbacks.getScrollWhileDragging();return{droppableId:v,scroll:S}}),y={additions:h,removals:Object.keys(m),modified:g};n=wg(),t.publish(y)}))};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=wg())}}}var BE=({scrollHeight:e,scrollWidth:t,height:n,width:r})=>{const i=Jr({x:t,y:e},{x:r,y:n});return{x:Math.max(0,i.x),y:Math.max(0,i.y)}},$E=()=>{const e=document.documentElement;return e||Le(),e},HE=()=>{const e=$E();return BE({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,width:e.clientWidth,height:e.clientHeight})},oL=()=>{const e=PE(),t=HE(),n=e.y,r=e.x,i=$E(),o=i.clientWidth,a=i.clientHeight,u=r+o,d=n+a;return{frame:Ti({top:n,left:r,right:u,bottom:d}),scroll:{initial:e,current:e,max:t,diff:{value:ar,displacement:ar}}}},aL=({critical:e,scrollOptions:t,registry:n})=>{const r=oL(),i=r.scroll.current,o=e.droppable,a=n.droppable.getAllByType(o.type).map(p=>p.callbacks.getDimensionAndWatchScroll(i,t)),u=n.draggable.getAllByType(e.draggable.type).map(p=>p.getDimension(i));return{dimensions:{draggables:pE(u),droppables:hE(a)},critical:e,viewport:r}};function RS(e,t,n){return!(n.descriptor.id===t.id||n.descriptor.type!==t.type||e.droppable.getById(n.descriptor.droppableId).descriptor.mode!=="virtual")}var lL=(e,t)=>{let n=null;const r=sL({callbacks:{publish:t.publishWhileDragging,collectionStarting:t.collectionStarting},registry:e}),i=(g,y)=>{e.droppable.exists(g)||Le(),n&&t.updateDroppableIsEnabled({id:g,isEnabled:y})},o=(g,y)=>{n&&(e.droppable.exists(g)||Le(),t.updateDroppableIsCombineEnabled({id:g,isCombineEnabled:y}))},a=(g,y)=>{n&&(e.droppable.exists(g)||Le(),t.updateDroppableScroll({id:g,newScroll:y}))},u=(g,y)=>{n&&e.droppable.getById(g).callbacks.scroll(y)},d=()=>{if(!n)return;r.stop();const g=n.critical.droppable;e.droppable.getAllByType(g.type).forEach(y=>y.callbacks.dragStopped()),n.unsubscribe(),n=null},m=g=>{n||Le();const y=n.critical.draggable;g.type==="ADDITION"&&RS(e,y,g.value)&&r.add(g.value),g.type==="REMOVAL"&&RS(e,y,g.value)&&r.remove(g.value)};return{updateDroppableIsEnabled:i,updateDroppableIsCombineEnabled:o,scrollDroppable:u,updateDroppableScroll:a,startPublishing:g=>{n&&Le();const y=e.draggable.getById(g.draggableId),v=e.droppable.getById(y.descriptor.droppableId),k={draggable:y.descriptor,droppable:v.descriptor},S=e.subscribe(m);return n={critical:k,unsubscribe:S},aL({critical:k,registry:e,scrollOptions:g.scrollOptions})},stopPublishing:d}},FE=(e,t)=>e.phase==="IDLE"?!0:e.phase!=="DROP_ANIMATING"||e.completed.result.draggableId===t?!1:e.completed.result.reason==="DROP",cL=e=>{window.scrollBy(e.x,e.y)};const uL=or(e=>Im(e).filter(t=>!(!t.isEnabled||!t.frame))),dL=(e,t)=>uL(t).find(r=>(r.frame||Le(),CE(r.frame.pageMarginBox)(e)))||null;var fL=({center:e,destination:t,droppables:n})=>{if(t){const i=n[t];return i.frame?i:null}return dL(e,n)};const hu={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:e=>e**2,durationDampening:{stopDampeningAt:1200,accelerateAt:360},disabled:!1};var mL=(e,t,n=()=>hu)=>{const r=n(),i=e[t.size]*r.startFromPercentage,o=e[t.size]*r.maxScrollAtPercentage;return{startScrollingFrom:i,maxScrollValueAt:o}},VE=({startOfRange:e,endOfRange:t,current:n})=>{const r=t-e;return r===0?0:(n-e)/r},G0=1,hL=(e,t,n=()=>hu)=>{const r=n();if(e>t.startScrollingFrom)return 0;if(e<=t.maxScrollValueAt)return r.maxPixelScroll;if(e===t.startScrollingFrom)return G0;const o=1-VE({startOfRange:t.maxScrollValueAt,endOfRange:t.startScrollingFrom,current:e}),a=r.maxPixelScroll*r.ease(o);return Math.ceil(a)},pL=(e,t,n)=>{const r=n(),i=r.durationDampening.accelerateAt,o=r.durationDampening.stopDampeningAt,a=t,u=o,m=Date.now()-a;if(m>=o)return e;if(m{const o=hL(e,t,i);return o===0?0:r?Math.max(pL(o,n,i),G0):o},MS=({container:e,distanceToEdges:t,dragStartTime:n,axis:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=mL(e,r,o);return t[r.end]{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 xL=mE(e=>e===0?0:e);var UE=({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},u=MS({container:t,distanceToEdges:a,dragStartTime:e,axis:z0,shouldUseTimeDampening:i,getAutoScrollerOptions:o}),d=MS({container:t,distanceToEdges:a,dragStartTime:e,axis:yE,shouldUseTimeDampening:i,getAutoScrollerOptions:o}),m=xL({x:d,y:u});if(mo(m,ar))return null;const p=gL({container:t,subject:n,proposedScroll:m});return p?mo(p,ar)?null:p:null};const yL=mE(e=>e===0?0:e>0?1:-1),q0=(()=>{const e=(t,n)=>t<0?t:t>n?t-n:0;return({current:t,max:n,change:r})=>{const i=xr(t,r),o={x:e(i.x,n.x),y:e(i.y,n.y)};return mo(o,ar)?null:o}})(),GE=({max:e,current:t,change:n})=>{const r={x:Math.max(t.x,e.x),y:Math.max(t.y,e.y)},i=yL(n),o=q0({max:r,current:t,change:i});return!o||i.x!==0&&o.x===0||i.y!==0&&o.y===0},W0=(e,t)=>GE({current:e.scroll.current,max:e.scroll.max,change:t}),vL=(e,t)=>{if(!W0(e,t))return null;const n=e.scroll.max,r=e.scroll.current;return q0({current:r,max:n,change:t})},Y0=(e,t)=>{const n=e.frame;return n?GE({current:n.scroll.current,max:n.scroll.max,change:t}):!1},bL=(e,t)=>{const n=e.frame;return!n||!Y0(e,t)?null:q0({current:n.scroll.current,max:n.scroll.max,change:t})};var _L=({viewport:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=UE({dragStartTime:r,container:e.frame,subject:t,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o});return a&&W0(e,a)?a:null},kL=({droppable:e,subject:t,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:o})=>{const a=e.frame;if(!a)return null;const u=UE({dragStartTime:r,container:a.pageMarginBox,subject:t,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:o});return u&&Y0(e,u)?u:null},DS=({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 h=e.viewport,g=_L({dragStartTime:t,viewport:h,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});if(g){r(g);return}}const m=fL({center:a,destination:ei(e.impact),droppables:e.dimensions.droppables});if(!m)return;const p=kL({dragStartTime:t,droppable:m,subject:d,center:a,shouldUseTimeDampening:n,getAutoScrollerOptions:o});p&&i(m.descriptor.id,p)},SL=({scrollWindow:e,scrollDroppable:t,getAutoScrollerOptions:n=()=>hu})=>{const r=cu(e),i=cu(t);let o=null;const a=m=>{o||Le();const{shouldUseTimeDampening:p,dragStartTime:h}=o;DS({state:m,scrollWindow:r,scrollDroppable:i,dragStartTime:h,shouldUseTimeDampening:p,getAutoScrollerOptions:n})};return{start:m=>{o&&Le();const p=Date.now();let h=!1;const g=()=>{h=!0};DS({state:m,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:g,scrollDroppable:g,getAutoScrollerOptions:n}),o={dragStartTime:p,shouldUseTimeDampening:h},h&&a(m)},stop:()=>{o&&(r.cancel(),i.cancel(),o=null)},scroll:a}},wL=({move:e,scrollDroppable:t,scrollWindow:n})=>{const r=(u,d)=>{const m=xr(u.current.client.selection,d);e({client:m})},i=(u,d)=>{if(!Y0(u,d))return d;const m=bL(u,d);if(!m)return t(u.descriptor.id,d),null;const p=Jr(d,m);return t(u.descriptor.id,p),Jr(d,p)},o=(u,d,m)=>{if(!u||!W0(d,m))return m;const p=vL(d,m);if(!p)return n(m),null;const h=Jr(m,p);return n(h),Jr(m,h)};return u=>{const d=u.scrollJumpRequest;if(!d)return;const m=ei(u.impact);m||Le();const p=i(u.dimensions.droppables[m],d);if(!p)return;const h=u.viewport,g=o(u.isWindowScrollAllowed,h,p);g&&r(u,g)}},CL=({scrollDroppable:e,scrollWindow:t,move:n,getAutoScrollerOptions:r})=>{const i=SL({scrollWindow:t,scrollDroppable:e,getAutoScrollerOptions:r}),o=wL({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 hl="data-rfd",pl=(()=>{const e=`${hl}-drag-handle`;return{base:e,draggableId:`${e}-draggable-id`,contextId:`${e}-context-id`}})(),zy=(()=>{const e=`${hl}-draggable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),jL=(()=>{const e=`${hl}-droppable`;return{base:e,contextId:`${e}-context-id`,id:`${e}-id`}})(),OS={contextId:`${hl}-scroll-container-context-id`},EL=e=>t=>`[${t}="${e}"]`,Tc=(e,t)=>e.map(n=>{const r=n.styles[t];return r?`${n.selector} { ${r} }`:""}).join(" "),NL="pointer-events: none;";var IL=e=>{const t=EL(e),n=(()=>{const u=` - cursor: -webkit-grab; - cursor: grab; - `;return{selector:t(pl.contextId),styles:{always:` - -webkit-touch-callout: none; - -webkit-tap-highlight-color: rgba(0,0,0,0); - touch-action: manipulation; - `,resting:u,dragging:NL,dropAnimating:u}}})(),r=(()=>{const u=` - transition: ${Qc.outOfTheWay}; - `;return{selector:t(zy.contextId),styles:{dragging:u,dropAnimating:u,userCancel:u}}})(),i={selector:t(jL.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:Tc(a,"always"),resting:Tc(a,"resting"),dragging:Tc(a,"dragging"),dropAnimating:Tc(a,"dropAnimating"),userCancel:Tc(a,"userCancel")}};const ti=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?j.useLayoutEffect:j.useEffect,Cg=()=>{const e=document.querySelector("head");return e||Le(),e},LS=e=>{const t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.type="text/css",t};function TL(e,t){const n=Vt(()=>IL(e),[e]),r=j.useRef(null),i=j.useRef(null),o=st(or(h=>{const g=i.current;g||Le(),g.textContent=h}),[]),a=st(h=>{const g=r.current;g||Le(),g.textContent=h},[]);ti(()=>{!r.current&&!i.current||Le();const h=LS(t),g=LS(t);return r.current=h,i.current=g,h.setAttribute(`${hl}-always`,e),g.setAttribute(`${hl}-dynamic`,e),Cg().appendChild(h),Cg().appendChild(g),a(n.always),o(n.resting),()=>{const y=v=>{const k=v.current;k||Le(),Cg().removeChild(k),v.current=null};y(r),y(i)}},[t,a,o,n.always,n.resting,e]);const u=st(()=>o(n.dragging),[o,n.dragging]),d=st(h=>{if(h==="DROP"){o(n.dropAnimating);return}o(n.userCancel)},[o,n.dropAnimating,n.userCancel]),m=st(()=>{i.current&&o(n.resting)},[o,n.resting]);return Vt(()=>({dragging:u,dropping:d,resting:m}),[u,d,m])}function qE(e,t){return Array.from(e.querySelectorAll(t))}var WE=e=>e&&e.ownerDocument&&e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;function Mm(e){return e instanceof WE(e).HTMLElement}function RL(e,t){const n=`[${pl.contextId}="${e}"]`,r=qE(document,n);if(!r.length)return null;const i=r.find(o=>o.getAttribute(pl.draggableId)===t);return!i||!Mm(i)?null:i}function AL(e){const t=j.useRef({}),n=j.useRef(null),r=j.useRef(null),i=j.useRef(!1),o=st(function(g,y){const v={id:g,focus:y};return t.current[g]=v,function(){const S=t.current;S[g]!==v&&delete S[g]}},[]),a=st(function(g){const y=RL(e,g);y&&y!==document.activeElement&&y.focus()},[e]),u=st(function(g,y){n.current===g&&(n.current=y)},[]),d=st(function(){r.current||i.current&&(r.current=requestAnimationFrame(()=>{r.current=null;const g=n.current;g&&a(g)}))},[a]),m=st(function(g){n.current=null;const y=document.activeElement;y&&y.getAttribute(pl.draggableId)===g&&(n.current=g)},[]);return ti(()=>(i.current=!0,function(){i.current=!1;const g=r.current;g&&cancelAnimationFrame(g)}),[]),Vt(()=>({register:o,tryRecordFocus:m,tryRestoreFocusRecorded:d,tryShiftRecord:u}),[o,m,d,u])}function ML(){const e={draggables:{},droppables:{}},t=[];function n(h){return t.push(h),function(){const y=t.indexOf(h);y!==-1&&t.splice(y,1)}}function r(h){t.length&&t.forEach(g=>g(h))}function i(h){return e.draggables[h]||null}function o(h){const g=i(h);return g||Le(),g}const a={register:h=>{e.draggables[h.descriptor.id]=h,r({type:"ADDITION",value:h})},update:(h,g)=>{const y=e.draggables[g.descriptor.id];y&&y.uniqueId===h.uniqueId&&(delete e.draggables[g.descriptor.id],e.draggables[h.descriptor.id]=h)},unregister:h=>{const g=h.descriptor.id,y=i(g);y&&h.uniqueId===y.uniqueId&&(delete e.draggables[g],e.droppables[h.descriptor.droppableId]&&r({type:"REMOVAL",value:h}))},getById:o,findById:i,exists:h=>!!i(h),getAllByType:h=>Object.values(e.draggables).filter(g=>g.descriptor.type===h)};function u(h){return e.droppables[h]||null}function d(h){const g=u(h);return g||Le(),g}const m={register:h=>{e.droppables[h.descriptor.id]=h},unregister:h=>{const g=u(h.descriptor.id);g&&h.uniqueId===g.uniqueId&&delete e.droppables[h.descriptor.id]},getById:d,findById:u,exists:h=>!!u(h),getAllByType:h=>Object.values(e.droppables).filter(g=>g.descriptor.type===h)};function p(){e.draggables={},e.droppables={},t.length=0}return{draggable:a,droppable:m,subscribe:n,clean:p}}function DL(){const e=Vt(ML,[]);return j.useEffect(()=>function(){e.clean()},[e]),e}var X0=St.createContext(null),Kf=()=>{const e=document.body;return e||Le(),e};const OL={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"},LL=e=>`rfd-announcement-${e}`;function zL(e){const t=Vt(()=>LL(e),[e]),n=j.useRef(null);return j.useEffect(function(){const o=document.createElement("div");return n.current=o,o.id=t,o.setAttribute("aria-live","assertive"),o.setAttribute("aria-atomic","true"),qf(o.style,OL),Kf().appendChild(o),function(){setTimeout(function(){const d=Kf();d.contains(o)&&d.removeChild(o),o===n.current&&(n.current=null)})}},[t]),st(i=>{const o=n.current;if(o){o.textContent=i;return}},[])}const PL={separator:"::"};function K0(e,t=PL){const n=St.useId();return Vt(()=>`${e}${t.separator}${n}`,[t.separator,e,n])}function BL({contextId:e,uniqueId:t}){return`rfd-hidden-text-${e}-${t}`}function $L({contextId:e,text:t}){const n=K0("hidden-text",{separator:"-"}),r=Vt(()=>BL({contextId:e,uniqueId:n}),[n,e]);return j.useEffect(function(){const o=document.createElement("div");return o.id=r,o.textContent=t,o.style.display="none",Kf().appendChild(o),function(){const u=Kf();u.contains(o)&&u.removeChild(o)}},[r,t]),r}var Dm=St.createContext(null);function YE(e){const t=j.useRef(e);return j.useEffect(()=>{t.current=e}),t}function HL(){let e=null;function t(){return!!e}function n(a){return a===e}function r(a){e&&Le();const u={abandon:a};return e=u,u}function i(){e||Le(),e=null}function o(){e&&(e.abandon(),i())}return{isClaimed:t,isActive:n,claim:r,release:i,tryAbandon:o}}function pu(e){return e.phase==="IDLE"||e.phase==="DROP_ANIMATING"?!1:e.isDragging}const FL=9,VL=13,Z0=27,XE=32,UL=33,GL=34,qL=35,WL=36,YL=37,XL=38,KL=39,ZL=40,QL={[VL]:!0,[FL]:!0};var KE=e=>{QL[e.keyCode]&&e.preventDefault()};const Om=(()=>{const e="visibilitychange";return typeof document>"u"?e:[e,`ms${e}`,`webkit${e}`,`moz${e}`,`o${e}`].find(r=>`on${r}`in document)||e})(),ZE=0,zS=5;function JL(e,t){return Math.abs(t.x-e.x)>=zS||Math.abs(t.y-e.y)>=zS}const PS={type:"IDLE"};function e6({cancel:e,completed:t,getPhase:n,setPhase:r}){return[{eventName:"mousemove",fn:i=>{const{button:o,clientX:a,clientY:u}=i;if(o!==ZE)return;const d={x:a,y:u},m=n();if(m.type==="DRAGGING"){i.preventDefault(),m.actions.move(d);return}m.type!=="PENDING"&&Le();const p=m.point;if(!JL(p,d))return;i.preventDefault();const h=m.actions.fluidLift(d);r({type:"DRAGGING",actions:h})}},{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===Z0){i.preventDefault(),e();return}KE(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"&&Le(),o.actions.shouldRespectForcePress()){e();return}i.preventDefault()}},{eventName:Om,fn:e}]}function t6(e){const t=j.useRef(PS),n=j.useRef(fo),r=Vt(()=>({eventName:"mousedown",fn:function(h){if(h.defaultPrevented||h.button!==ZE||h.ctrlKey||h.metaKey||h.shiftKey||h.altKey)return;const g=e.findClosestDraggableId(h);if(!g)return;const y=e.tryGetLock(g,a,{sourceEvent:h});if(!y)return;h.preventDefault();const v={x:h.clientX,y:h.clientY};n.current(),m(y,v)}}),[e]),i=Vt(()=>({eventName:"webkitmouseforcewillbegin",fn:p=>{if(p.defaultPrevented)return;const h=e.findClosestDraggableId(p);if(!h)return;const g=e.findOptionsForDraggable(h);g&&(g.shouldRespectForcePress||e.canGetLock(h)&&p.preventDefault())}}),[e]),o=st(function(){const h={passive:!1,capture:!0};n.current=bi(window,[i,r],h)},[i,r]),a=st(()=>{t.current.type!=="IDLE"&&(t.current=PS,n.current(),o())},[o]),u=st(()=>{const p=t.current;a(),p.type==="DRAGGING"&&p.actions.cancel({shouldBlockNextClick:!0}),p.type==="PENDING"&&p.actions.abort()},[a]),d=st(function(){const h={capture:!0,passive:!1},g=e6({cancel:u,completed:a,getPhase:()=>t.current,setPhase:y=>{t.current=y}});n.current=bi(window,g,h)},[u,a]),m=st(function(h,g){t.current.type!=="IDLE"&&Le(),t.current={type:"PENDING",point:g,actions:h},d()},[d]);ti(function(){return o(),function(){n.current()}},[o])}function n6(){}const r6={[GL]:!0,[UL]:!0,[WL]:!0,[qL]:!0};function i6(e,t){function n(){t(),e.cancel()}function r(){t(),e.drop()}return[{eventName:"keydown",fn:i=>{if(i.keyCode===Z0){i.preventDefault(),n();return}if(i.keyCode===XE){i.preventDefault(),r();return}if(i.keyCode===ZL){i.preventDefault(),e.moveDown();return}if(i.keyCode===XL){i.preventDefault(),e.moveUp();return}if(i.keyCode===KL){i.preventDefault(),e.moveRight();return}if(i.keyCode===YL){i.preventDefault(),e.moveLeft();return}if(r6[i.keyCode]){i.preventDefault();return}KE(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:Om,fn:n}]}function s6(e){const t=j.useRef(n6),n=Vt(()=>({eventName:"keydown",fn:function(o){if(o.defaultPrevented||o.keyCode!==XE)return;const a=e.findClosestDraggableId(o);if(!a)return;const u=e.tryGetLock(a,p,{sourceEvent:o});if(!u)return;o.preventDefault();let d=!0;const m=u.snapLift();t.current();function p(){d||Le(),d=!1,t.current(),r()}t.current=bi(window,i6(m,p),{capture:!0,passive:!1})}}),[e]),r=st(function(){const o={passive:!1,capture:!0};t.current=bi(window,[n],o)},[n]);ti(function(){return r(),function(){t.current()}},[r])}const jg={type:"IDLE"},o6=120,a6=.15;function l6({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===Z0&&n.preventDefault(),e()}},{eventName:Om,fn:e}]}function c6({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],u={x:o,y:a};r.preventDefault(),i.actions.move(u)}},{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"&&Le();const o=r.touches[0];if(!o||!(o.force>=a6))return;const u=i.actions.shouldRespectForcePress();if(i.type==="PENDING"){u&&e();return}if(u){if(i.hasMoved){r.preventDefault();return}e();return}r.preventDefault()}},{eventName:Om,fn:e}]}function u6(e){const t=j.useRef(jg),n=j.useRef(fo),r=st(function(){return t.current},[]),i=st(function(y){t.current=y},[]),o=Vt(()=>({eventName:"touchstart",fn:function(y){if(y.defaultPrevented)return;const v=e.findClosestDraggableId(y);if(!v)return;const k=e.tryGetLock(v,u,{sourceEvent:y});if(!k)return;const S=y.touches[0],{clientX:_,clientY:w}=S,C={x:_,y:w};n.current(),h(k,C)}}),[e]),a=st(function(){const y={capture:!0,passive:!1};n.current=bi(window,[o],y)},[o]),u=st(()=>{const g=t.current;g.type!=="IDLE"&&(g.type==="PENDING"&&clearTimeout(g.longPressTimerId),i(jg),n.current(),a())},[a,i]),d=st(()=>{const g=t.current;u(),g.type==="DRAGGING"&&g.actions.cancel({shouldBlockNextClick:!0}),g.type==="PENDING"&&g.actions.abort()},[u]),m=st(function(){const y={capture:!0,passive:!1},v={cancel:d,completed:u,getPhase:r},k=bi(window,c6(v),y),S=bi(window,l6(v),y);n.current=function(){k(),S()}},[d,r,u]),p=st(function(){const y=r();y.type!=="PENDING"&&Le();const v=y.actions.fluidLift(y.point);i({type:"DRAGGING",actions:v,hasMoved:!1})},[r,i]),h=st(function(y,v){r().type!=="IDLE"&&Le();const k=setTimeout(p,o6);i({type:"PENDING",point:v,actions:y,longPressTimerId:k}),m()},[m,r,i,p]);ti(function(){return a(),function(){n.current();const v=r();v.type==="PENDING"&&(clearTimeout(v.longPressTimerId),i(jg))}},[r,a,i]),ti(function(){return bi(window,[{eventName:"touchmove",fn:()=>{},options:{capture:!1,passive:!1}}])},[])}const d6=["input","button","textarea","select","option","optgroup","video","audio"];function QE(e,t){if(t==null)return!1;if(d6.includes(t.tagName.toLowerCase()))return!0;const r=t.getAttribute("contenteditable");return r==="true"||r===""?!0:t===e?!1:QE(e,t.parentElement)}function f6(e,t){const n=t.target;return Mm(n)?QE(e,n):!1}var m6=e=>Ti(e.getBoundingClientRect()).center;function h6(e){return e instanceof WE(e).Element}const p6=(()=>{const e="matches";return typeof document>"u"?e:[e,"msMatchesSelector","webkitMatchesSelector"].find(r=>r in Element.prototype)||e})();function JE(e,t){return e==null?null:e[p6](t)?e:JE(e.parentElement,t)}function g6(e,t){return e.closest?e.closest(t):JE(e,t)}function x6(e){return`[${pl.contextId}="${e}"]`}function y6(e,t){const n=t.target;if(!h6(n))return null;const r=x6(e),i=g6(n,r);return!i||!Mm(i)?null:i}function v6(e,t){const n=y6(e,t);return n?n.getAttribute(pl.draggableId):null}function b6(e,t){const n=`[${zy.contextId}="${e}"]`,i=qE(document,n).find(o=>o.getAttribute(zy.id)===t);return!i||!Mm(i)?null:i}function _6(e){e.preventDefault()}function Qd({expected:e,phase:t,isLockActive:n,shouldWarn:r}){return!(!n()||e!==t)}function eN({lockAPI:e,store:t,registry:n,draggableId:r}){if(e.isClaimed())return!1;const i=n.draggable.findById(r);return!(!i||!i.options.isEnabled||!FE(t.getState(),r))}function k6({lockAPI:e,contextId:t,store:n,registry:r,draggableId:i,forceSensorStop:o,sourceEvent:a}){if(!eN({lockAPI:e,store:n,registry:r,draggableId:i}))return null;const d=r.draggable.getById(i),m=b6(t,d.descriptor.id);if(!m||a&&!d.options.canDragInteractiveElements&&f6(m,a))return null;const p=e.claim(o||fo);let h="PRE_DRAG";function g(){return d.options.shouldRespectForcePress}function y(){return e.isActive(p)}function v(O,I){Qd({expected:O,phase:h,isLockActive:y,shouldWarn:!0})&&n.dispatch(I())}const k=v.bind(null,"DRAGGING");function S(O){function I(){e.release(),h="COMPLETED"}h!=="PRE_DRAG"&&(I(),Le()),n.dispatch(gO(O.liftActionArgs)),h="DRAGGING";function D(T,L={shouldBlockNextClick:!1}){if(O.cleanup(),L.shouldBlockNextClick){const A=bi(window,[{eventName:"click",fn:_6,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(A)}I(),n.dispatch(DE({reason:T}))}return{isActive:()=>Qd({expected:"DRAGGING",phase:h,isLockActive:y,shouldWarn:!1}),shouldRespectForcePress:g,drop:T=>D("DROP",T),cancel:T=>D("CANCEL",T),...O.actions}}function _(O){const I=cu(T=>{k(()=>ME({client:T}))});return{...S({liftActionArgs:{id:i,clientSelection:O,movementMode:"FLUID"},cleanup:()=>I.cancel(),actions:{move:I}}),move:I}}function w(){const O={moveUp:()=>k(CO),moveRight:()=>k(EO),moveDown:()=>k(jO),moveLeft:()=>k(NO)};return S({liftActionArgs:{id:i,clientSelection:m6(m),movementMode:"SNAP"},cleanup:fo,actions:O})}function C(){Qd({expected:"PRE_DRAG",phase:h,isLockActive:y,shouldWarn:!0})&&e.release()}return{isActive:()=>Qd({expected:"PRE_DRAG",phase:h,isLockActive:y,shouldWarn:!1}),shouldRespectForcePress:g,fluidLift:_,snapLift:w,abort:C}}const S6=[t6,s6,u6];function w6({contextId:e,store:t,registry:n,customSensors:r,enableDefaultSensors:i}){const o=[...i?S6:[],...r||[]],a=j.useState(()=>HL())[0],u=st(function(S,_){pu(S)&&!pu(_)&&a.tryAbandon()},[a]);ti(function(){let S=t.getState();return t.subscribe(()=>{const w=t.getState();u(S,w),S=w})},[a,t,u]),ti(()=>a.tryAbandon,[a.tryAbandon]);const d=st(k=>eN({lockAPI:a,registry:n,store:t,draggableId:k}),[a,n,t]),m=st((k,S,_)=>k6({lockAPI:a,registry:n,contextId:e,store:t,draggableId:k,forceSensorStop:S||null,sourceEvent:_&&_.sourceEvent?_.sourceEvent:null}),[e,a,n,t]),p=st(k=>v6(e,k),[e]),h=st(k=>{const S=n.draggable.findById(k);return S?S.options:null},[n.draggable]),g=st(function(){a.isClaimed()&&(a.tryAbandon(),t.getState().phase!=="IDLE"&&t.dispatch(F0()))},[a,t]),y=st(()=>a.isClaimed(),[a]),v=Vt(()=>({canGetLock:d,tryGetLock:m,findClosestDraggableId:p,findOptionsForDraggable:h,tryReleaseLock:g,isLockClaimed:y}),[d,m,p,h,g,y]);for(let k=0;k({onBeforeCapture:t=>{const n=()=>{e.onBeforeCapture&&e.onBeforeCapture(t)};Sm.flushSync(n)},onBeforeDragStart:e.onBeforeDragStart,onDragStart:e.onDragStart,onDragEnd:e.onDragEnd,onDragUpdate:e.onDragUpdate}),j6=e=>({...hu,...e.autoScrollerOptions,durationDampening:{...hu.durationDampening,...e.autoScrollerOptions}});function Rc(e){return e.current||Le(),e.current}function E6(e){const{contextId:t,setCallbacks:n,sensors:r,nonce:i,dragHandleUsageInstructions:o}=e,a=j.useRef(null),u=YE(e),d=st(()=>C6(u.current),[u]),m=st(()=>j6(u.current),[u]),p=zL(t),h=$L({contextId:t,text:o}),g=TL(t,i),y=st(A=>{Rc(a).dispatch(A)},[]),v=Vt(()=>uS({publishWhileDragging:yO,updateDroppableScroll:bO,updateDroppableIsEnabled:_O,updateDroppableIsCombineEnabled:kO,collectionStarting:vO},y),[y]),k=DL(),S=Vt(()=>lL(k,v),[k,v]),_=Vt(()=>CL({scrollWindow:cL,scrollDroppable:S.scrollDroppable,getAutoScrollerOptions:m,...uS({move:ME},y)}),[S.scrollDroppable,y,m]),w=AL(t),C=Vt(()=>iL({announce:p,autoScroller:_,dimensionMarshal:S,focusMarshal:w,getResponders:d,styleMarshal:g}),[p,_,S,w,d,g]);a.current=C;const N=st(()=>{const A=Rc(a);A.getState().phase!=="IDLE"&&A.dispatch(F0())},[]),O=st(()=>{const A=Rc(a).getState();return A.phase==="DROP_ANIMATING"?!0:A.phase==="IDLE"?!1:A.isDragging},[]),I=Vt(()=>({isDragging:O,tryAbort:N}),[O,N]);n(I);const D=st(A=>FE(Rc(a).getState(),A),[]),T=st(()=>Ho(Rc(a).getState()),[]),L=Vt(()=>({marshal:S,focus:w,contextId:t,canLift:D,isMovementAllowed:T,dragHandleUsageInstructionsId:h,registry:k}),[t,S,h,w,D,T,k]);return w6({contextId:t,store:C,registry:k,customSensors:r||null,enableDefaultSensors:e.enableDefaultSensors!==!1}),j.useEffect(()=>N,[N]),St.createElement(Dm.Provider,{value:L},St.createElement(Q5,{context:X0,store:C},e.children))}function N6(){return St.useId()}function I6(e){const t=N6(),n=e.dragHandleUsageInstructions||Ef.dragHandleUsageInstructions;return St.createElement(sD,null,r=>St.createElement(E6,{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 BS={dragging:5e3,dropAnimating:4500},T6=(e,t)=>t?Qc.drop(t.duration):e?Qc.snap:Qc.fluid,R6=(e,t)=>{if(e)return t?mu.opacity.drop:mu.opacity.combining},A6=e=>e.forceShouldAnimate!=null?e.forceShouldAnimate:e.mode==="SNAP";function M6(e){const n=e.dimension.client,{offset:r,combineWith:i,dropping:o}=e,a=!!i,u=A6(e),d=!!o,m=d?Oy.drop(r,a):Oy.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:T6(u,o),transform:m,opacity:R6(a,d),zIndex:d?BS.dropAnimating:BS.dragging,pointerEvents:"none"}}function D6(e){return{transform:Oy.moveTo(e.offset),transition:e.shouldAnimateDisplacement?void 0:"none"}}function O6(e){return e.type==="DRAGGING"?M6(e):D6(e)}function L6(e,t,n=ar){const r=window.getComputedStyle(t),i=t.getBoundingClientRect(),o=aE(i,r),a=Gf(o,n),u={client:o,tagName:t.tagName.toLowerCase(),display:r.display},d={x:o.marginBox.width,y:o.marginBox.height};return{descriptor:e,placeholder:u,displaceBy:d,client:o,page:a}}function z6(e){const t=K0("draggable"),{descriptor:n,registry:r,getDraggableRef:i,canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:u}=e,d=Vt(()=>({canDragInteractiveElements:o,shouldRespectForcePress:a,isEnabled:u}),[o,u,a]),m=st(y=>{const v=i();return v||Le(),L6(n,v,y)},[n,i]),p=Vt(()=>({uniqueId:t,descriptor:n,options:d,getDimension:m}),[n,m,d,t]),h=j.useRef(p),g=j.useRef(!0);ti(()=>(r.draggable.register(h.current),()=>r.draggable.unregister(h.current)),[r.draggable]),ti(()=>{if(g.current){g.current=!1;return}const y=h.current;h.current=p,r.draggable.update(p,y)},[p,r.draggable])}var Q0=St.createContext(null);function Zf(e){const t=j.useContext(e);return t||Le(),t}function P6(e){e.preventDefault()}const B6=e=>{const t=j.useRef(null),n=st((I=null)=>{t.current=I},[]),r=st(()=>t.current,[]),{contextId:i,dragHandleUsageInstructionsId:o,registry:a}=Zf(Dm),{type:u,droppableId:d}=Zf(Q0),m=Vt(()=>({id:e.draggableId,index:e.index,type:u,droppableId:d}),[e.draggableId,e.index,u,d]),{children:p,draggableId:h,isEnabled:g,shouldRespectForcePress:y,canDragInteractiveElements:v,isClone:k,mapped:S,dropAnimationFinished:_}=e;if(!k){const I=Vt(()=>({descriptor:m,registry:a,getDraggableRef:r,canDragInteractiveElements:v,shouldRespectForcePress:y,isEnabled:g}),[m,a,r,v,y,g]);z6(I)}const w=Vt(()=>g?{tabIndex:0,role:"button","aria-describedby":o,"data-rfd-drag-handle-draggable-id":h,"data-rfd-drag-handle-context-id":i,draggable:!1,onDragStart:P6}:null,[i,o,h,g]),C=st(I=>{S.type==="DRAGGING"&&S.dropping&&I.propertyName==="transform"&&Sm.flushSync(_)},[_,S]),N=Vt(()=>{const I=O6(S),D=S.type==="DRAGGING"&&S.dropping?C:void 0;return{innerRef:n,draggableProps:{"data-rfd-draggable-context-id":i,"data-rfd-draggable-id":h,style:I,onTransitionEnd:D},dragHandleProps:w}},[i,w,h,S,C,n]),O=Vt(()=>({draggableId:m.id,type:m.type,source:{index:m.index,droppableId:m.droppableId}}),[m.droppableId,m.id,m.index,m.type]);return St.createElement(St.Fragment,null,p(N,S.snapshot,O))};var tN=(e,t)=>e===t,nN=e=>{const{combine:t,destination:n}=e;return n?n.droppableId:t?t.droppableId:null};const $6=e=>e.combine?e.combine.draggableId:null,H6=e=>e.at&&e.at.type==="COMBINE"?e.at.combine.draggableId:null;function F6(){const e=or((i,o)=>({x:i,y:o})),t=or((i,o,a=null,u=null,d=null)=>({isDragging:!0,isClone:o,isDropAnimating:!!d,dropAnimation:d,mode:i,draggingOver:a,combineWith:u,combineTargetFor:null})),n=or((i,o,a,u,d=null,m=null,p=null)=>({mapped:{type:"DRAGGING",dropping:null,draggingOver:d,combineWith:m,mode:o,offset:i,dimension:a,forceShouldAnimate:p,snapshot:t(o,u,d,m,null)}}));return(i,o)=>{if(pu(i)){if(i.critical.draggable.id!==o.draggableId)return null;const a=i.current.client.offset,u=i.dimensions.draggables[o.draggableId],d=ei(i.impact),m=H6(i.impact),p=i.forceShouldAnimate;return n(e(a.x,a.y),i.movementMode,u,o.isClone,d,m,p)}if(i.phase==="DROP_ANIMATING"){const a=i.completed;if(a.result.draggableId!==o.draggableId)return null;const u=o.isClone,d=i.dimensions.draggables[o.draggableId],m=a.result,p=m.mode,h=nN(m),g=$6(m),v={duration:i.dropDuration,curve:U0.drop,moveTo:i.newHomeClientOffset,opacity:g?mu.opacity.drop:null,scale:g?mu.scale.drop:null};return{mapped:{type:"DRAGGING",offset:i.newHomeClientOffset,dimension:d,dropping:v,draggingOver:h,combineWith:g,mode:p,forceShouldAnimate:null,snapshot:t(p,u,h,g,v)}}}return null}}function rN(e=null){return{isDragging:!1,isDropAnimating:!1,isClone:!1,dropAnimation:null,mode:null,draggingOver:null,combineTargetFor:e,combineWith:null}}const V6={mapped:{type:"SECONDARY",offset:ar,combineTargetFor:null,shouldAnimateDisplacement:!0,snapshot:rN(null)}};function U6(){const e=or((a,u)=>({x:a,y:u})),t=or(rN),n=or((a,u=null,d)=>({mapped:{type:"SECONDARY",offset:a,combineTargetFor:u,shouldAnimateDisplacement:d,snapshot:t(u)}})),r=a=>a?n(ar,a,!0):null,i=(a,u,d,m)=>{const p=d.displaced.visible[a],h=!!(m.inVirtualList&&m.effected[a]),g=Tm(d),y=g&&g.draggableId===a?u:null;if(!p){if(!h)return r(y);if(d.displaced.invisible[a])return null;const S=Il(m.displacedBy.point),_=e(S.x,S.y);return n(_,y,!0)}if(h)return r(y);const v=d.displacedBy.point,k=e(v.x,v.y);return n(k,y,p.shouldAnimate)};return(a,u)=>{if(pu(a))return a.critical.draggable.id===u.draggableId?null:i(u.draggableId,a.critical.draggable.id,a.impact,a.afterCritical);if(a.phase==="DROP_ANIMATING"){const d=a.completed;return d.result.draggableId===u.draggableId?null:i(u.draggableId,d.result.draggableId,d.impact,d.afterCritical)}return null}}const G6=()=>{const e=F6(),t=U6();return(r,i)=>e(r,i)||t(r,i)||V6},q6={dropAnimationFinished:OE},W6=oE(G6,q6,null,{context:X0,areStatePropsEqual:tN})(B6);function iN(e){return Zf(Q0).isUsingCloneFor===e.draggableId&&!e.isClone?null:St.createElement(W6,e)}function Y6(e){const t=typeof e.isDragDisabled=="boolean"?!e.isDragDisabled:!0,n=!!e.disableInteractiveElementBlocking,r=!!e.shouldRespectForcePress;return St.createElement(iN,qf({},e,{isClone:!1,isEnabled:t,canDragInteractiveElements:n,shouldRespectForcePress:r}))}const sN=e=>t=>e===t,X6=sN("scroll"),K6=sN("auto"),$S=(e,t)=>t(e.overflowX)||t(e.overflowY),Z6=e=>{const t=window.getComputedStyle(e),n={overflowX:t.overflowX,overflowY:t.overflowY};return $S(n,X6)||$S(n,K6)},Q6=()=>!1,oN=e=>e==null?null:e===document.body?Q6()?e:null:e===document.documentElement?null:Z6(e)?e:oN(e.parentElement);var Py=e=>({x:e.scrollLeft,y:e.scrollTop});const aN=e=>e?window.getComputedStyle(e).position==="fixed"?!0:aN(e.parentElement):!1;var J6=e=>{const t=oN(e),n=aN(e);return{closestScrollable:t,isFixedOnPage:n}},e8=({descriptor:e,isEnabled:t,isCombineEnabled:n,isFixedOnPage:r,direction:i,client:o,page:a,closest:u})=>{const d=(()=>{if(!u)return null;const{scrollSize:g,client:y}=u,v=BE({scrollHeight:g.scrollHeight,scrollWidth:g.scrollWidth,height:y.paddingBox.height,width:y.paddingBox.width});return{pageMarginBox:u.page.marginBox,frameClient:y,scrollSize:g,shouldClipSubject:u.shouldClipSubject,scroll:{initial:u.scroll,current:u.scroll,max:v,diff:{value:ar,displacement:ar}}}})(),m=i==="vertical"?z0:yE,p=ml({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:p}};const t8=(e,t)=>{const n=lE(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=M0({top:r,right:a,bottom:o,left:i},n.border);return D0({borderBox:d,margin:n.margin,border:n.border,padding:n.padding})};var n8=({ref:e,descriptor:t,env:n,windowScroll:r,direction:i,isDropDisabled:o,isCombineEnabled:a,shouldClipSubject:u})=>{const d=n.closestScrollable,m=t8(e,d),p=Gf(m,r),h=(()=>{if(!d)return null;const y=lE(d),v={scrollHeight:d.scrollHeight,scrollWidth:d.scrollWidth};return{client:y,page:Gf(y,r),scroll:Py(d),scrollSize:v,shouldClipSubject:u}})();return e8({descriptor:t,isEnabled:!o,isCombineEnabled:a,isFixedOnPage:n.isFixedOnPage,direction:i,client:m,page:p,closest:h})};const r8={passive:!1},i8={passive:!0};var HS=e=>e.shouldPublishImmediately?r8:i8;const Jd=e=>e&&e.env.closestScrollable||null;function s8(e){const t=j.useRef(null),n=Zf(Dm),r=K0("droppable"),{registry:i,marshal:o}=n,a=YE(e),u=Vt(()=>({id:e.droppableId,type:e.type,mode:e.mode}),[e.droppableId,e.mode,e.type]),d=j.useRef(u),m=Vt(()=>or((N,O)=>{t.current||Le();const I={x:N,y:O};o.updateDroppableScroll(u.id,I)}),[u.id,o]),p=st(()=>{const N=t.current;return!N||!N.env.closestScrollable?ar:Py(N.env.closestScrollable)},[]),h=st(()=>{const N=p();m(N.x,N.y)},[p,m]),g=Vt(()=>cu(h),[h]),y=st(()=>{const N=t.current,O=Jd(N);if(N&&O||Le(),N.scrollOptions.shouldPublishImmediately){h();return}g()},[g,h]),v=st((N,O)=>{t.current&&Le();const I=a.current,D=I.getDroppableRef();D||Le();const T=J6(D),L={ref:D,descriptor:u,env:T,scrollOptions:O};t.current=L;const A=n8({ref:D,descriptor:u,env:T,windowScroll:N,direction:I.direction,isDropDisabled:I.isDropDisabled,isCombineEnabled:I.isCombineEnabled,shouldClipSubject:!I.ignoreContainerClipping}),M=T.closestScrollable;return M&&(M.setAttribute(OS.contextId,n.contextId),M.addEventListener("scroll",y,HS(L.scrollOptions))),A},[n.contextId,u,y,a]),k=st(()=>{const N=t.current,O=Jd(N);return N&&O||Le(),Py(O)},[]),S=st(()=>{const N=t.current;N||Le();const O=Jd(N);t.current=null,O&&(g.cancel(),O.removeAttribute(OS.contextId),O.removeEventListener("scroll",y,HS(N.scrollOptions)))},[y,g]),_=st(N=>{const O=t.current;O||Le();const I=Jd(O);I||Le(),I.scrollTop+=N.y,I.scrollLeft+=N.x},[]),w=Vt(()=>({getDimensionAndWatchScroll:v,getScrollWhileDragging:k,dragStopped:S,scroll:_}),[S,v,k,_]),C=Vt(()=>({uniqueId:r,descriptor:u,callbacks:w}),[w,u,r]);ti(()=>(d.current=C.descriptor,i.droppable.register(C),()=>{t.current&&S(),i.droppable.unregister(C)}),[w,u,S,C,o,i.droppable]),ti(()=>{t.current&&o.updateDroppableIsEnabled(d.current.id,!e.isDropDisabled)},[e.isDropDisabled,o]),ti(()=>{t.current&&o.updateDroppableIsCombineEnabled(d.current.id,e.isCombineEnabled)},[e.isCombineEnabled,o])}function Eg(){}const FS={width:0,height:0,margin:fD},o8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>e||n==="close"?FS:{height:t.client.borderBox.height,width:t.client.borderBox.width,margin:t.client.margin},a8=({isAnimatingOpenOnMount:e,placeholder:t,animate:n})=>{const r=o8({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"?Qc.placeholder:null}},l8=e=>{const t=j.useRef(null),n=st(()=>{t.current&&(clearTimeout(t.current),t.current=null)},[]),{animate:r,onTransitionEnd:i,onClose:o,contextId:a}=e,[u,d]=j.useState(e.animate==="open");j.useEffect(()=>u?r!=="open"?(n(),d(!1),Eg):t.current?Eg:(t.current=setTimeout(()=>{t.current=null,d(!1)}),n):Eg,[r,u,n]);const m=st(h=>{h.propertyName==="height"&&(i(),r==="close"&&o())},[r,o,i]),p=a8({isAnimatingOpenOnMount:u,animate:e.animate,placeholder:e.placeholder});return St.createElement(e.placeholder.tagName,{style:p,"data-rfd-placeholder-context-id":a,onTransitionEnd:m,ref:e.innerRef})};var c8=St.memo(l8);class u8 extends St.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 d8=e=>{const t=j.useContext(Dm);t||Le();const{contextId:n,isMovementAllowed:r}=t,i=j.useRef(null),o=j.useRef(null),{children:a,droppableId:u,type:d,mode:m,direction:p,ignoreContainerClipping:h,isDropDisabled:g,isCombineEnabled:y,snapshot:v,useClone:k,updateViewportMaxScroll:S,getContainerForClone:_}=e,w=st(()=>i.current,[]),C=st((M=null)=>{i.current=M},[]);st(()=>o.current,[]);const N=st((M=null)=>{o.current=M},[]),O=st(()=>{r()&&S({maxScroll:HE()})},[r,S]);s8({droppableId:u,type:d,mode:m,direction:p,isDropDisabled:g,isCombineEnabled:y,ignoreContainerClipping:h,getDroppableRef:w});const I=Vt(()=>St.createElement(u8,{on:e.placeholder,shouldAnimate:e.shouldAnimatePlaceholder},({onClose:M,data:$,animate:W})=>St.createElement(c8,{placeholder:$,onClose:M,innerRef:N,animate:W,contextId:n,onTransitionEnd:O})),[n,O,e.placeholder,e.shouldAnimatePlaceholder,N]),D=Vt(()=>({innerRef:C,placeholder:I,droppableProps:{"data-rfd-droppable-id":u,"data-rfd-droppable-context-id":n}}),[n,u,I,C]),T=k?k.dragging.draggableId:null,L=Vt(()=>({droppableId:u,type:d,isUsingCloneFor:T}),[u,T,d]);function A(){if(!k)return null;const{dragging:M,render:$}=k,W=St.createElement(iN,{draggableId:M.draggableId,index:M.source.index,isClone:!0,isEnabled:!0,shouldRespectForcePress:!1,canDragInteractiveElements:!0},(B,U)=>$(B,U,M));return r4.createPortal(W,_())}return St.createElement(Q0.Provider,{value:L},a(D,v),A())};function f8(){return document.body||Le(),document.body}const VS={mode:"standard",type:"DEFAULT",direction:"vertical",isDropDisabled:!1,isCombineEnabled:!1,ignoreContainerClipping:!1,renderClone:null,getContainerForClone:f8},lN=e=>{let t={...e},n;for(n in VS)e[n]===void 0&&(t={...t,[n]:VS[n]});return t},Ng=(e,t)=>e===t.droppable.type,US=(e,t)=>t.draggables[e.draggable.id],m8=()=>{const e={placeholder:null,shouldAnimatePlaceholder:!0,snapshot:{isDraggingOver:!1,draggingOverWith:null,draggingFromThisWith:null,isUsingPlaceholder:!1},useClone:null},t={...e,shouldAnimatePlaceholder:!1},n=or(o=>({draggableId:o.id,type:o.type,source:{index:o.index,droppableId:o.droppableId}})),r=or((o,a,u,d,m,p)=>{const h=m.descriptor.id;if(m.descriptor.droppableId===o){const v=p?{render:p,dragging:n(m.descriptor)}:null,k={isDraggingOver:u,draggingOverWith:u?h:null,draggingFromThisWith:h,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!1,snapshot:k,useClone:v}}if(!a)return t;if(!d)return e;const y={isDraggingOver:u,draggingOverWith:h,draggingFromThisWith:null,isUsingPlaceholder:!0};return{placeholder:m.placeholder,shouldAnimatePlaceholder:!0,snapshot:y,useClone:null}});return(o,a)=>{const u=lN(a),d=u.droppableId,m=u.type,p=!u.isDropDisabled,h=u.renderClone;if(pu(o)){const g=o.critical;if(!Ng(m,g))return t;const y=US(g,o.dimensions),v=ei(o.impact)===d;return r(d,p,v,v,y,h)}if(o.phase==="DROP_ANIMATING"){const g=o.completed;if(!Ng(m,g.critical))return t;const y=US(g.critical,o.dimensions);return r(d,p,nN(g.result)===d,ei(g.impact)===d,y,h)}if(o.phase==="IDLE"&&o.completed&&!o.shouldFlush){const g=o.completed;if(!Ng(m,g.critical))return t;const y=ei(g.impact)===d,v=!!(g.impact.at&&g.impact.at.type==="COMBINE"),k=g.critical.droppable.id===d;return y?v?e:t:k?e:t}return t}},h8={updateViewportMaxScroll:wO},p8=oE(m8,h8,(e,t,n)=>({...lN(n),...e,...t}),{context:X0,areStatePropsEqual:tN})(d8),Qf={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:"▽"}},Jf={idle:"Idle",reflecting:"Thinking...",tool_active:"Running tool"};function J0(e){const t=(e??"").trim();return t?t.replace(/[_-]+/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function gl(e){const t=(e.workItemRoleName??"").trim();return t||J0(e.workItemRoleId)}function g8(e){return(e.employeeAssignment?.name??"").trim()}function Ig(e){const t=gl(e),n=g8(e);return t&&n?`${t} · ${n}`:t||n}function il(e){return typeof e=="string"?e.trim():""}function ao(e){if(!e)return"";const t=e;return il(t.executionTurnId)||il(t.runtimeTaskId)||il(t.taskId)}function Lm(e){return il(e?.workItemId)?il(e?.executionTurnId)||il(e?.runtimeTaskId):""}const x8={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 y8({task:e,index:t,agents:n,officeMap:r,companyMode:i,isSelected:o,onClick:a,onStart:u}){const d=e.assigneeIds.map(I=>n.find(D=>D.agent_id===I)).filter(Boolean),m=e.priority?Qf[e.priority]:null,p=r&&d.length>1&&new Set(d.map(I=>r[I.agent_id]).filter(Boolean)).size>1,h=e.agentStatus&&e.agentStatus!=="idle",g=e.dependencies?.length??0,y=e.phase,v=!h&&y&&y!=="ready"?x8[y]??null:null,k=e.employeeAssignment,S=gl(e),_=e.workItemGate,w=J0(e.managerRoleId),C=(e.blockedReason??"").trim(),N=(e.reworkFeedback??"").trim(),O=Lm(e);return c.jsx(Y6,{draggableId:e.id,index:t,isDragDisabled:!!i,children:(I,D)=>c.jsxs("div",{ref:I.innerRef,...I.draggableProps,...I.dragHandleProps,className:`kanban-card${D.isDragging?" is-dragging":""}${h?" is-active":""}${o?" is-selected":""}`,"data-task-id":e.id,onMouseUp:T=>{T.button===0&&!D.isDragging&&a(e)},children:[c.jsxs("div",{className:"kanban-card-top",children:[c.jsx("span",{className:"kanban-card-id",children:e.displayId}),v&&c.jsxs("span",{className:"kanban-status-badge",style:{color:v.color},children:[c.jsx("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:v.color,marginRight:3}}),v.label]}),g>0&&c.jsxs("span",{className:"kanban-dep-badge",title:`${g} upstream dep(s)`,children:[g," dep"]}),p&&c.jsx("span",{className:"kanban-cross-badge",title:"Cross-office",children:"⇄"}),u&&c.jsx("button",{className:"kanban-start-btn",title:i?"Start Work Item":"Start task",onClick:T=>{T.stopPropagation(),u(e.id)},children:"▶"})]}),c.jsx("p",{className:"kanban-card-title",children:e.title}),(S||k?.name||_?.type||e.originChannel||e.workItemProjectionId)&&c.jsxs("div",{className:"kanban-card-meta-row",children:[S&&c.jsx("span",{className:"kanban-meta-badge kanban-role-badge",title:`Role: ${S}`,children:S}),k?.name&&c.jsxs("span",{className:"kanban-meta-badge kanban-employee-badge",title:`Employee: ${k.name}${k.category?` (${k.category})`:""}`,children:[c.jsx("span",{className:"kanban-meta-icon",children:"👤"}),k.name]}),e.workItemProjectionId&&c.jsx("span",{className:"kanban-meta-badge kanban-projection-badge",title:`Projection: ${e.workItemProjectionId}`,children:e.workItemProjectionId}),_?.type&&c.jsxs("span",{className:`kanban-meta-badge kanban-gate-badge kanban-gate-${_.type}`,title:`Gate: ${_.type}${_.reviewerRole?` by ${_.reviewerRole}`:""}`,children:[_.type==="review"?"✉":_.type==="approval"?"✓":"✋",_.type]}),e.originChannel&&c.jsxs("span",{className:"kanban-meta-badge kanban-origin-badge",title:`Origin: ${e.originChannel}`,children:["#",e.originChannel]}),w&&c.jsx("span",{className:"kanban-meta-badge",title:`Manager: ${w}`,children:w})]}),(C||N||O)&&c.jsxs("div",{className:"kanban-card-tags",children:[C&&c.jsx("span",{className:"kanban-tag",children:C}),N&&c.jsx("span",{className:"kanban-tag",children:N}),O&&c.jsx("span",{className:"kanban-tag",title:`Execution Turn: ${O}`,children:"Runtime"})]}),h&&c.jsxs("div",{className:`kanban-card-runtime status-${e.agentStatus}`,children:[c.jsx("span",{className:"kanban-runtime-dot"}),c.jsx("span",{className:"kanban-runtime-label",children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:Jf[e.agentStatus]??e.agentStatus})]}),e.tags.length>0&&c.jsx("div",{className:"kanban-card-tags",children:e.tags.slice(0,3).map(T=>c.jsx("span",{className:"kanban-tag",children:T},T))}),(m||d.length>0)&&c.jsxs("div",{className:"kanban-card-footer",children:[c.jsx("div",{className:"kanban-card-footer-left",children:m&&c.jsx("span",{className:"kanban-priority",style:{color:m.color},title:m.label,children:m.symbol})}),c.jsxs("div",{className:"kanban-assignee-group",children:[d.slice(0,3).map(T=>c.jsx("span",{className:"kanban-assignee-badge",title:T.name,children:T.name.charAt(0).toUpperCase()},T.agent_id)),d.length>3&&c.jsxs("span",{className:"kanban-assignee-badge kanban-assignee-more",children:["+",d.length-3]})]})]})]})})}function v8({column:e,tasks:t,agents:n,officeMap:r,companyMode:i,selectedTaskId:o,onCardClick:a,onStartTask:u,onQuickCreate:d}){const[m,p]=j.useState(!1),[h,g]=j.useState(""),y=j.useRef(!1),v=j.useCallback(()=>{if(y.current)return;y.current=!0;const k=h.trim();k&&d&&d(k),g(""),p(!1)},[h,d]);return c.jsxs("div",{className:"kanban-column",children:[c.jsxs("div",{className:"kanban-column-header",children:[c.jsx("span",{className:"kanban-col-dot",style:{background:e.color}}),c.jsx("span",{className:"kanban-col-label",children:e.name}),c.jsx("span",{className:"kanban-col-count",children:t.length}),d&&c.jsx("button",{className:"kanban-col-add",title:"Add task",onClick:()=>{y.current=!1,p(!0)},children:"+"})]}),m&&c.jsx("div",{className:"kanban-quick-add",children:c.jsx("input",{className:"kanban-quick-input",value:h,onChange:k=>g(k.target.value),onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),v()),k.key==="Escape"&&(y.current=!0,g(""),p(!1))},onBlur:v,placeholder:"Task title...",autoFocus:!0})}),c.jsx(p8,{droppableId:e.id,isDropDisabled:!!i,children:k=>c.jsxs("div",{ref:k.innerRef,...k.droppableProps,className:"kanban-col-body",children:[t.length===0&&!m&&c.jsx("div",{className:"kanban-empty",children:c.jsx("span",{className:"kanban-empty-icon",children:"·"})}),t.map((S,_)=>c.jsx(y8,{task:S,index:_,agents:n,officeMap:r,companyMode:i,isSelected:S.id===o,onClick:a,onStart:u},S.id)),k.placeholder]})})]})}function b8({columns:e,tasksByColumn:t,agents:n,officeMap:r,store:i,companyMode:o,selectedTaskId:a,onCardClick:u,onStartTask:d,onQuickCreate:m,onMoveTask:p}){const h=g=>{if(o||!g.destination)return;const y=g.source.droppableId,v=g.destination.droppableId;if(y!==v)return;const k=g.destination.index,S=g.draggableId,_=[...t[v]??[]].filter(C=>C.id!==S),w=(t[v]??[]).find(C=>C.id===S);w&&_.splice(k,0,w),_.forEach((C,N)=>{i.moveTask(C.id,v,N)})};return c.jsx(I6,{onDragEnd:h,children:c.jsx("div",{className:"kanban-board",children:e.map(g=>c.jsx(v8,{column:g,tasks:t[g.id]??[],agents:n,officeMap:r,companyMode:o,selectedTaskId:a,onCardClick:u,onStartTask:!o&&g.name==="Todo"?d:void 0,onQuickCreate:!o&&g.name==="Todo"?m:void 0},g.id))})})}function _8({agents:e,tasks:t}){const n=j.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"),u=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??u?.displayId}})},[e,t]);if(e.length===0)return null;const r=n.filter(i=>i.status!=="idle").length;return c.jsxs("div",{className:"agent-status-bar",children:[c.jsx("span",{className:"agent-status-summary",children:r>0?`${r}/${e.length} active`:`${e.length} agent${e.length!==1?"s":""}`}),c.jsx("div",{className:"agent-status-chips",children:n.map(({agent:i,status:o,currentTool:a,taskDisplayId:u})=>c.jsxs("div",{className:`agent-status-chip status-${o}`,title:`${i.name}: ${o==="tool_active"&&a?a:Jf[o]}${u?` (${u})`:""}`,children:[c.jsx("span",{className:"agent-status-avatar",children:i.name.charAt(0).toUpperCase()}),c.jsx("span",{className:"agent-status-name",children:i.name}),o!=="idle"&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"kanban-runtime-dot"}),c.jsx("span",{className:"agent-status-detail",children:o==="tool_active"&&a?a:Jf[o]})]}),u&&c.jsx("span",{className:"agent-status-task",children:u})]},i.agent_id))})]})}function k8({boards:e,activeBoardId:t,onSelect:n}){return c.jsx("div",{className:"board-selector",children:c.jsx("div",{className:"board-tabs",children:e.map(r=>c.jsxs("button",{className:`board-tab${r.id===t?" active":""}`,style:{"--board-color":r.color},onClick:()=>n(r.id),children:[c.jsx("span",{className:"board-tab-dot",style:{background:r.color}}),r.name]},r.id))})})}function yr(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ws(e){return Array.isArray(e)?e.filter(yr):[]}function xl(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function S8(e){return yr(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 w8(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:xl(e.member_role_ids),seat_ids:xl(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 C8(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:xl(e.background_work_item_ids),manager_role_ids:xl(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:yr(e.latest_notification)?e.latest_notification:void 0,manager_digest:yr(e.manager_digest)?e.manager_digest:void 0,status:String(e.status??"cold")}}function j8(e){const t=yr(e.metadata)?e.metadata:void 0,n=yr(e.adaptive)?e.adaptive:t&&yr(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 E8(e){if(yr(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:yr(e.recovery_pointer)?e.recovery_pointer:void 0}}function N8(e){if(yr(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:ws(e.architecture_decisions),completed_work_items:ws(e.completed_work_items),open_issues:xl(e.open_issues),verification_summary:typeof e.verification_summary=="string"?e.verification_summary:void 0,artifact_index:ws(e.artifact_index),handoff_summaries:ws(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 I8(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:yr(e.current_work_item)?e.current_work_item:void 0,latest_notification:yr(e.latest_notification)?e.latest_notification:void 0,manager_digest:yr(e.manager_digest)?e.manager_digest:void 0}}function T8(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:yr(e.metadata)?e.metadata:void 0,created_at:typeof e.created_at=="string"?e.created_at:void 0}}function cN(e){const t=yr(e)?e:{},n=ws(t.runtime_teams).map(w8),r=ws(t.runtime_seats).map(C8),i=ws(t.work_items).map(j8);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:xl(t.top_level_role_ids),runtime_teams:n,runtime_seats:r,work_items:i,frontier:S8(t.frontier),project_run:E8(t.project_run),project_dossier:N8(t.project_dossier),seat_digests:ws(t.seat_digests).map(I8),revision_links:ws(t.revision_links).map(T8),project_recovery:yr(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:yr(t.runtime_policy)?t.runtime_policy:void 0}}function zm(e){const t=cN(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 R8({state:e,message:t,onRefresh:n,onReadMessage:r,pollIntervalMs:i=3e4,embedded:o=!1}){const[a,u]=j.useState(null),d=j.useRef(n);d.current=n,j.useEffect(()=>{if(!i)return;d.current();const g=window.setInterval(()=>d.current(),i);return()=>window.clearInterval(g)},[i]);const m=j.useMemo(()=>e?.roles?e.roles.reduce((g,y)=>g+y.unread_count,0):0,[e?.roles]),p=g=>{u(g),r(g)},h=o?{fontSize:13,color:"var(--text)"}:{border:"1px solid var(--border, #333)",borderRadius:6,background:"var(--bg-primary, #1e1e1e)",fontSize:13};return c.jsxs("div",{className:"comms-panel",style:h,children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",borderBottom:"1px solid var(--border, #333)"},children:[c.jsx("span",{style:{fontWeight:600,fontSize:13,flex:1},children:"Agent Communications"}),m>0&&c.jsxs(gu,{color:"var(--accent, #3498db)",children:[m," unread"]}),c.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?c.jsx(Nf,{children:"No communications yet. They will appear once agents start collaborating."}):c.jsx(A8,{state:e,selectedPath:a,onSelectMessage:p}):c.jsxs(Nf,{children:["Not available",e.reason?`: ${e.reason}`:""]}):c.jsx(Nf,{children:"Loading communications..."}),t&&c.jsx(O8,{message:t,onClose:()=>u(null)})]})}function A8({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 c.jsxs("div",{style:{padding:"4px 0"},children:[o&&c.jsx(Tg,{title:"Failures",children:(e.recent_failures||[]).map((a,u)=>c.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:[c.jsxs("div",{style:{fontWeight:600,fontSize:12},children:[a.operation," · ",a.from_role," → ",a.to_role]}),c.jsx("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:2},children:a.reason})]},`${a.recorded_at||"f"}-${u}`))}),r&&c.jsx(Tg,{title:`Inboxes (${e.roles.length})`,children:e.roles.map(a=>c.jsx(M8,{role:a,selectedPath:t,onSelectMessage:n},a.role_id))}),i&&c.jsx(Tg,{title:"Meetings",children:(e.meetings||[]).map(a=>c.jsxs("div",{style:{padding:"6px 12px",marginBottom:4,borderLeft:`3px solid ${a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)"}`},children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[c.jsx(gu,{color:a.status==="open"?"var(--accent, #3498db)":"var(--text-dim, #555)",children:a.status}),c.jsx("strong",{style:{fontSize:12,flex:1},children:a.topic}),c.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #888)"},children:[a.entry_count," entries"]})]}),c.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginTop:3},children:["by ",a.organizer," · ",a.participants.join(", ")]}),a.decision&&c.jsxs("div",{style:{fontSize:11,marginTop:3,color:"var(--green, #27ae60)"},children:["Decision: ",a.decision]})]},a.meeting_id))}),!r&&!i&&!o&&c.jsx(Nf,{children:"No communication activity yet."})]})}function M8({role:e,selectedPath:t,onSelectMessage:n}){const[r,i]=j.useState(!0),o=e.unread_count>0||(e.recent_seen?.length??0)>0||(e.recent_outbox?.length??0)>0,[a,u]=j.useState(e.unread_count>0?"unread":"history"),d=j.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,p=>p.toUpperCase());return c.jsxs("div",{style:{marginBottom:2},children:[c.jsxs("div",{onClick:()=>i(p=>!p),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:[c.jsx("span",{style:{fontSize:10,width:10},children:r?"▼":"▶"}),c.jsx("span",{style:{flex:1,fontWeight:600,fontSize:12},children:m}),e.has_blocking&&c.jsx(gu,{color:"var(--red, #e74c3c)",children:"BLOCKING"}),e.unread_count>0&&c.jsxs(gu,{color:"var(--accent, #3498db)",children:[e.unread_count," new"]}),c.jsxs("span",{style:{fontSize:11,color:"var(--text-dim, #666)"},children:[e.seen_count," read · ",e.outbox_count," sent"]})]}),r&&o&&c.jsxs("div",{style:{paddingLeft:12},children:[c.jsxs("div",{style:{display:"flex",gap:2,padding:"4px 0",borderBottom:"1px solid var(--border, #333)",marginBottom:4},children:[c.jsxs(Rg,{active:a==="unread",onClick:()=>u("unread"),children:["Unread (",e.unread_count,")"]}),c.jsxs(Rg,{active:a==="history",onClick:()=>u("history"),children:["Read (",e.recent_seen?.length??0,")"]}),c.jsxs(Rg,{active:a==="sent",onClick:()=>u("sent"),children:["Sent (",e.recent_outbox?.length??0,")"]})]}),d.length===0?c.jsx("div",{style:{padding:"8px 0",fontSize:11,color:"var(--text-dim, #666)"},children:"No messages."}):c.jsx("div",{style:{maxHeight:280,overflow:"auto"},children:d.map(p=>c.jsx(D8,{message:p,selected:p.path===t,onClick:()=>n(p.path)},p.message_id))})]})]})}function D8({message:e,selected:t,onClick:n}){const i=e.bucket==="sent"?`To: ${e.to||"?"}`:`From: ${e.from}`;return c.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:c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[c.jsxs("span",{style:{fontSize:11,color:"var(--text-secondary, #aaa)",minWidth:0,flex:1},children:[c.jsx("strong",{children:i})," ",c.jsx("span",{style:{color:"var(--text, #ddd)"},children:e.subject})]}),e.blocking&&c.jsx("span",{style:{fontSize:9,color:"var(--red, #e74c3c)",fontWeight:700},children:"BLK"}),c.jsx("span",{style:{fontSize:10,color:"var(--text-dim, #666)",flexShrink:0},children:e.sent_at?.slice(11,19)||""})]})})}function O8({message:e,onClose:t}){return c.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:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[c.jsx("strong",{style:{flex:1,fontSize:13},children:e.header.subject||"(no subject)"}),c.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"})]}),c.jsxs("div",{style:{fontSize:11,color:"var(--text-secondary, #999)",marginBottom:8,display:"flex",gap:8,flexWrap:"wrap"},children:[c.jsxs("span",{children:["From: ",c.jsx("strong",{children:e.header.from||"?"})]}),c.jsxs("span",{children:["To: ",c.jsx("strong",{children:e.header.to||"?"})]}),c.jsx("span",{children:e.header.sent_at||""}),e.header.blocking&&c.jsx(gu,{color:"var(--red, #e74c3c)",children:"BLOCKING"})]}),c.jsx("pre",{style:{margin:0,fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"var(--text, #ddd)",lineHeight:1.5},children:e.body})]})}function Tg({title:e,children:t}){return c.jsxs("div",{style:{marginBottom:4},children:[c.jsx("div",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:.6,fontWeight:700,color:"var(--text-dim, #777)",padding:"8px 12px 4px"},children:e}),t]})}function gu({color:e,children:t}){return c.jsx("span",{style:{background:e,color:"white",borderRadius:10,padding:"1px 7px",fontSize:10,fontWeight:600,whiteSpace:"nowrap"},children:t})}function Rg({active:e,onClick:t,children:n}){return c.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 Nf({children:e}){return c.jsx("div",{style:{padding:"20px 16px",fontSize:12,color:"var(--text-secondary, #888)",textAlign:"center"},children:e})}function Ua(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Ga(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object"&&!Array.isArray(t)):[]}function yi(e,t="Pending"){return String(e??"").trim()||t}function Ac(e,t="Team"){const n=String(e??"").trim();return n?n.replace(/[_-]+/g," ").replace(/\b\w/g,r=>r.toUpperCase()):t}function GS(e){return yi(e,"idle").toLowerCase().replace(/[\s_]+/g,"-")}function L8({orgInfoData:e,recoveryStatus:t,commsState:n,onStopRun:r,embedded:i=!1}){const o=j.useMemo(()=>zm(e??null),[e]),a=o.projectRun,u=o.seatDigests,d=u.reduce((_,w)=>{const C=Ua(w.manager_digest);return _+Ga(C.pending_decisions).length},0),m=u.reduce((_,w)=>_+Ga(Ua(w.manager_digest).actionable_chat).length,0),p=u.reduce((_,w)=>_+Ga(Ua(w.manager_digest).protocol_backlog).length,0),h=u.reduce((_,w)=>_+Ga(Ua(w.manager_digest).notification_backlog).length,0),g=m+p+h,y=Array.isArray(t?.interrupted)?t.interrupted.length:0,v=[{label:"Actionable",value:m},{label:"Protocol",value:p},{label:"Notifications",value:h},{label:"Meetings",value:n?.meetings?.length??0},{label:"Failures",value:n?.recent_failures?.length??0}],k=j.useMemo(()=>{const _=new Map;for(const N of u){const O=String(N.seat_id??"").trim();O&&_.set(O,Ua(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),I=o.runtimeSeats.filter(L=>O.includes(String(L.team_id??"").trim())||O.includes(String(L.team_instance_id??"").trim())),D=I.reduce((L,A)=>{const M=_.get(String(A.seat_id??"").trim())??{};return L+Ga(M.pending_decisions).length},0),T=I.map(L=>yi(L.latest_notification?.subject??L.latest_notification?.summary,"")).find(Boolean);return{key:String(N.cell_id??N.team_id??N.team_instance_id??N.manager_role_id??"team"),label:Ac(N.team_id??N.cell_id,"Team"),managerLabel:Ac(N.manager_role_id,"Unassigned manager"),status:yi(N.status,"idle"),seatCount:I.length||N.member_role_ids.length,pendingApprovals:D,latestAlert:T,seats:I.map(L=>({key:String(L.seat_id??L.role_session_id??L.role_id),roleLabel:Ac(L.role_id,"Seat"),seatLabel:yi(L.seat_id??L.role_session_id,"Seat"),status:yi(L.resident_status??L.status,"idle")}))}}),C=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||C.has(O))continue;const I=String(N.team_id??N.team_instance_id??"unassigned").trim()||"unassigned";let D=w.find(L=>L.key===I);D||(D={key:I,label:Ac(I,"Unassigned Team"),managerLabel:"Unassigned manager",status:yi(N.status,"idle"),seatCount:0,pendingApprovals:0,seats:[]},w.push(D));const T=_.get(String(N.seat_id??"").trim())??{};D.pendingApprovals+=Ga(T.pending_decisions).length,D.latestAlert||(D.latestAlert=yi(N.latest_notification?.subject??N.latest_notification?.summary,"")),D.seats.push({key:O,roleLabel:Ac(N.role_id,"Seat"),seatLabel:yi(N.seat_id??N.role_session_id,"Seat"),status:yi(N.resident_status??N.status,"idle")}),D.seatCount=D.seats.length}return w.sort((N,O)=>N.label.localeCompare(O.label))},[o.runtimeTeams,o.runtimeSeats,u]),S=k.map(_=>_.latestAlert).find(Boolean)||"No current alerts";return!a?.run_id&&k.length===0?null:c.jsxs("section",{className:`project-cockpit${i?" embedded":""}`,"aria-label":"Team",children:[c.jsxs("div",{className:"project-cockpit-overview",children:[c.jsxs("div",{className:"project-cockpit-title",children:[c.jsx("span",{className:"project-cockpit-label",children:"Team"}),c.jsx("strong",{children:yi(a?.run_id,"Runtime Team Status")}),r&&c.jsx("button",{className:"project-cockpit-stop-btn",onClick:r,title:"Stop this run",children:"Stop"})]}),c.jsxs("div",{className:"project-cockpit-metrics",children:[c.jsx("span",{children:yi(a?.lifecycle_status,"active")}),c.jsxs("span",{children:["Teams ",k.length]}),c.jsxs("span",{children:["Seats ",o.runtimeSeats.length]}),c.jsxs("span",{children:["Approvals ",d]}),c.jsxs("span",{children:["Unread ",g]}),c.jsxs("span",{children:["Recovery ",y>0?`${y} interrupted`:yi(Ua(a?.recovery_pointer).status,"clean")]})]})]}),c.jsxs("div",{className:"project-cockpit-grid project-cockpit-grid--team",children:[c.jsxs("section",{className:"project-cockpit-panel",children:[c.jsxs("header",{children:[c.jsx("h3",{children:"Communication"}),c.jsx("span",{children:v.length})]}),c.jsxs("div",{className:"project-cockpit-summary",children:[v.map(_=>c.jsxs("span",{children:[_.label," ",_.value]},_.label)),c.jsx("div",{className:"project-cockpit-inline-text",children:S})]})]}),c.jsxs("section",{className:"project-cockpit-panel project-cockpit-panel--wide",children:[c.jsxs("header",{children:[c.jsx("h3",{children:"Teams"}),c.jsx("span",{children:k.length})]}),c.jsx("div",{className:"project-cockpit-team-grid",children:k.map(_=>c.jsxs("article",{className:"project-cockpit-team-card",children:[c.jsxs("div",{className:"project-cockpit-team-head",children:[c.jsxs("div",{className:"project-cockpit-team-title",children:[c.jsx("strong",{children:_.label}),c.jsx("span",{children:_.managerLabel})]}),c.jsx("span",{className:`project-cockpit-team-status status-${GS(_.status)}`,children:_.status})]}),c.jsxs("div",{className:"project-cockpit-team-meta",children:[c.jsxs("span",{children:["Seats ",_.seatCount]}),c.jsxs("span",{children:["Approvals ",_.pendingApprovals]}),_.latestAlert&&c.jsx("span",{children:_.latestAlert})]}),c.jsx("div",{className:"project-cockpit-seat-list",children:_.seats.length>0?_.seats.map(w=>c.jsxs("div",{className:"project-cockpit-seat-row",children:[c.jsx("span",{className:"project-cockpit-seat-role",children:w.roleLabel}),c.jsx("span",{className:"project-cockpit-seat-id",children:w.seatLabel}),c.jsx("span",{className:`project-cockpit-seat-status status-${GS(w.status)}`,children:w.status})]},w.key)):c.jsx("div",{className:"project-cockpit-inline-text",children:"No seats assigned yet"})})]},_.key))})]})]})]})}function z8(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"}},P8=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]),WS={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function B8({session:e,agents:t,onTitleChange:n,onViewOnBoard:r,onStop:i,onComplete:o,onResume:a}){const[u,d]=j.useState(!1),[m,p]=j.useState(e.title),h=j.useRef(null);j.useEffect(()=>{u||p(e.title)},[e.title,u]);const g=j.useCallback(()=>{const G=m.trim();G&&G!==e.title?n(e.taskId,G):p(e.title),d(!1)},[m,e.title,e.taskId,n]),y=j.useCallback(()=>{p(e.title),d(!0),setTimeout(()=>h.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,_=v.length>0&&!S,w=e.runtimeControlState??(e.status==="running"?"running":"idle"),C=w==="suspending",N=w==="resuming",O=w==="suspended",I=e.status==="running"&&!C&&!O&&!N,D=P8.has(e.status),T=(e.canStop??e.status==="running")&&!C&&!O&&!N,L=(e.canResume??(O||!D&&!I&&e.status!=="done"&&e.status!=="pending"))&&!C&&!N,A=qS[e.status]??qS.pending,M=C?"Stopping":O?"Suspended":N?"Resuming":A.label,$=gl(e),W=Nm(e),B=Ki(e),U=e.displayTool||e.currentTool,[H,V]=j.useState(U||void 0);j.useEffect(()=>{if(!I){V(void 0);return}U&&V(U)},[I,U]);const Y=typeof e.pendingPermissionCount=="number"&&e.pendingPermissionCount>0,Q=Y,q=C?"var(--yellow)":O?"var(--text-secondary)":W==="tool_active"?"var(--green)":W==="reflecting"?"var(--yellow)":A.color;return c.jsxs("div",{className:"task-header-shell",children:[c.jsxs("div",{className:"task-header-bar",children:[c.jsxs("div",{className:"task-header-left",children:[u?c.jsx("input",{ref:h,className:"task-title-input",value:m,onChange:G=>p(G.target.value),onBlur:g,onKeyDown:G=>{G.key==="Enter"&&g(),G.key==="Escape"&&(p(e.title),d(!1))}}):c.jsx("span",{className:"task-title",onClick:y,title:"Click to edit",children:e.title}),c.jsxs("span",{className:"task-status-pill","data-status":e.status,"data-working":B?"true":"false",children:[c.jsx("span",{className:"task-status-dot",style:{background:q}}),M]}),I&&H&&c.jsxs("span",{className:"task-tool-pill",children:[c.jsx(wm,{}),c.jsx("code",{children:H}),e.currentTool&&typeof e.toolElapsedMs=="number"&&e.toolElapsedMs>0&&c.jsxs("span",{children:[e.toolElapsedMs,"ms"]})]}),e.lastToolSummary&&c.jsx("span",{className:"task-projection-pill",title:e.lastToolSummary,children:e.lastToolSummary.slice(0,48)}),$&&c.jsx("span",{className:"task-role-pill",title:`Role: ${$}`,children:$}),e.employeeAssignment?.name&&c.jsxs("span",{className:"task-employee-pill",title:`Employee: ${e.employeeAssignment.name}${e.employeeAssignment.category?` (${e.employeeAssignment.category})`:""}`,children:[c.jsx("span",{className:"task-employee-icon",children:"👤"}),e.employeeAssignment.name]}),e.selectedExecutionAgent&&c.jsxs("span",{className:"task-agent-pill",title:`Execution Agent: ${WS[e.selectedExecutionAgent]??e.selectedExecutionAgent}`,children:[c.jsx("span",{className:"task-agent-icon",children:"⚙"}),WS[e.selectedExecutionAgent]??e.selectedExecutionAgent]})]}),c.jsxs("div",{className:"task-header-right",children:[_&&c.jsx("div",{className:"task-header-avatars",children:v.slice(0,3).map(G=>c.jsx("span",{className:"task-header-avatar",title:G.name,children:G.name.charAt(0).toUpperCase()},G.agent_id))}),c.jsx("span",{className:"task-header-time",title:new Date(e.createdAt).toLocaleString(),children:z8(e.createdAt)}),(T||C)&&i&&c.jsxs("button",{className:"task-stop-btn",onClick:i,title:"Stop task",disabled:!T,children:[c.jsx(Wj,{}),c.jsx("span",{children:C?"Stopping...":"Stop"})]}),L&&a&&e.status!=="done"&&c.jsx("button",{className:"task-resume-btn",onClick:a,title:"Resume prior runtime (re-awaken original team, no new plan)",children:c.jsx("span",{children:"Continue"})}),o&&c.jsxs("button",{className:"task-done-btn",onClick:o,title:"Mark task as done",children:[c.jsx(Nl,{}),c.jsx("span",{children:"Done"})]}),r&&c.jsx("button",{className:"task-board-btn",onClick:r,title:"View on Board",children:c.jsx(_4,{})})]})]}),Q&&c.jsx("div",{className:"task-header-metrics",children:Y&&c.jsxs("div",{className:"task-runtime-metric task-runtime-metric-approval",title:"Pending approvals",children:[c.jsx("span",{className:"task-runtime-metric-label",children:"Approvals"}),c.jsx("span",{className:"task-runtime-metric-value",children:e.pendingPermissionCount})]})})]})}function Ei(e){return String(e??"").trim().replace(/\s+/g," ").slice(0,96)}function uN(e,t=0){const n=e.itemId||e.streamId||e.toolCallId||e.permissionGroupKey;return n?`${e.type}:${Ei(e.turnId)}:${Ei(n)}`:e.type==="thinking"?`thinking:${Ei(e.turnId)||Ei(e.executionMode)||Ei(e.summary)||"stream"}:${t}`:e.type==="tool_call"&&e.turnId?`tool:${Ei(e.turnId)}:${Ei(e.summary)||"tool"}:${t}`:e.turnId&&typeof e.seq=="number"?`${e.type}:${Ei(e.turnId)}:seq:${e.seq}`:[e.type,Ei(e.turnId),Number.isFinite(e.timestamp)?e.timestamp:"",Ei(e.summary),Ei(e.detail),t].join(":")}const $8=new Set(["done","failed","cancelled"]),YS=new Set(["thinking","tool_call","autonomy","needs_input","verification"]),em={thinking:{icon:c.jsx(p4,{}),color:"var(--accent)",label:"Thinking"},assistant:{icon:c.jsx(co,{}),color:"var(--accent)",label:"Reply"},tool_call:{icon:c.jsx(wm,{}),color:"var(--green)",label:"Tool"},autonomy:{icon:c.jsx(au,{}),color:"var(--yellow)",label:"Autonomy"},handoff:{icon:c.jsx(Xj,{}),color:"var(--accent)",label:"Handoff"},gate_result:{icon:c.jsx(k4,{}),color:"var(--green)",label:"Gate"},status_change:{icon:c.jsx(Kk,{}),color:"var(--text-secondary)",label:"Status"},work_item_started:{icon:c.jsx(jm,{}),color:"var(--accent)",label:"Work item"},gate_approved:{icon:c.jsx(S4,{}),color:"var(--green)",label:"Gate Passed"},gate_rejected:{icon:c.jsx(w4,{}),color:"var(--red)",label:"Rejected"},awaiting_manager_review:{icon:c.jsx(Nc,{}),color:"var(--yellow)",label:"Awaiting Manager Review"},awaiting_human:{icon:c.jsx(Nc,{}),color:"var(--yellow)",label:"Awaiting Human Review"},awaiting_review:{icon:c.jsx(Nc,{}),color:"var(--yellow)",label:"Awaiting Review"},awaiting_peer:{icon:c.jsx(Nc,{}),color:"var(--yellow)",label:"Awaiting Peer"},work_item_failed:{icon:c.jsx(Kk,{}),color:"var(--red)",label:"Failed"},deadlock:{icon:c.jsx(Pf,{}),color:"var(--red)",label:"Deadlock"},needs_input:{icon:c.jsx(Nc,{}),color:"var(--yellow)",label:"Needs Input"},verification:{icon:c.jsx(au,{}),color:"var(--accent)",label:"Verification"}},Ag=5;function Mc(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 If(e){if(typeof e=="string"){const t=e.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{return If(JSON.parse(t))}catch{return e}return e}return Array.isArray(e)?e.map(If):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,If(n)])):e}function H8(e){const t=e.trim();if(!t||!t.startsWith("{")&&!t.startsWith("["))return e;try{return JSON.stringify(If(JSON.parse(t)),null,2)}catch{return e}}function Wo({entries:e,agentStatus:t,currentTool:n,toolElapsedMs:r,lastToolSummary:i,sessionStatus:o,expandedByDefault:a}){const[u,d]=j.useState(!!a),m=!!o&&$8.has(o),p=!m&&t==="reflecting",h=!m&&t==="tool_active",g=p||h,y=j.useMemo(()=>e,[e]),v=j.useMemo(()=>u||y.length<=Ag?y:y.slice(-Ag),[y,u]),k=y.length-v.length;return y.length===0&&!g&&!m?null:c.jsxs("div",{className:"ptl-block",children:[g&&c.jsxs("div",{className:`ptl-live ${h?"ptl-live-tool":"ptl-live-think"}`,children:[c.jsx("span",{className:"ptl-live-icon",children:h?c.jsx(wm,{}):c.jsx(co,{})}),c.jsx("span",{className:"ptl-live-text",children:h?"Running":"Thinking"}),h&&n&&c.jsx("code",{className:"ptl-live-tool-name",children:n}),h&&typeof r=="number"&&r>0&&c.jsx("span",{className:"ptl-live-elapsed",children:r<1e3?`${r}ms`:`${(r/1e3).toFixed(1)}s`}),c.jsx("span",{className:"ptl-live-shimmer"})]}),i&&!h&&c.jsxs("div",{className:"ptl-last-tool-summary",children:[c.jsx("span",{className:"ptl-last-tool-label",children:"Last tool result:"}),c.jsx("span",{className:"ptl-last-tool-text",children:i})]}),k>0&&c.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[c.jsx(Yi,{}),c.jsxs("span",{children:[k," earlier step",k>1?"s":""]})]}),v.length>0&&c.jsx("div",{className:"ptl-timeline",children:v.map((S,_)=>{const w=_===v.length-1,C=em[S.type]||em.status_change;return c.jsxs("div",{className:`ptl-entry${w?" ptl-entry-last":""}`,children:[c.jsxs("div",{className:"ptl-connector",children:[c.jsx("div",{className:"ptl-dot",style:{color:C.color},children:C.icon}),!w&&c.jsx("div",{className:"ptl-line"})]}),c.jsx("div",{className:"ptl-content",children:c.jsx(dN,{entry:S})})]},uN(S,k+_))})}),m&&!g&&c.jsxs("div",{className:`ptl-completion ptl-completion-${o}`,children:[c.jsx("span",{className:"ptl-completion-icon",children:o==="done"?"✓":o==="failed"?"✗":"—"}),c.jsx("span",{className:"ptl-completion-text",children:o==="done"?"Completed":o==="failed"?"Failed":"Cancelled"})]}),u&&y.length>Ag&&c.jsxs("button",{className:"ptl-expand",onClick:()=>d(!1),children:[c.jsx(Yi,{down:!0}),c.jsx("span",{children:"Show less"})]}),!u&&k>0&&c.jsxs("button",{className:"ptl-expand",onClick:()=>d(!0),children:[c.jsx(Yi,{}),c.jsxs("span",{children:["Show more (",k," earlier step",k>1?"s":"",")"]})]})]})}const dN=St.memo(function({entry:t}){const[n,r]=j.useState(!1),i=em[t.type]||em.status_change,o=t.type==="tool_call"&&!!t.detail;if(t.type==="tool_call")return c.jsxs("div",{className:`ptl-tool-card${n?" expanded":""}`,children:[c.jsxs("button",{className:`ptl-row ptl-tool-toggle${o?" clickable":""}`,onClick:()=>{o&&r(a=>!a)},type:"button",children:[c.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),c.jsx("code",{className:"ptl-tool-badge",children:t.summary}),c.jsx("span",{className:"ptl-time",children:Mc(t.timestamp)}),o&&c.jsx("span",{className:"ptl-tool-chevron",children:c.jsx(Yi,{down:n})})]}),n&&t.detail&&c.jsx("pre",{className:"ptl-tool-card-detail",children:H8(t.detail)})]});if(t.type==="autonomy"){const a=!!t.detail;return c.jsxs("div",{className:`ptl-tool-card ptl-autonomy-card${n?" expanded":""}`,children:[c.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&r(u=>!u)},type:"button",children:[c.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),c.jsx("code",{className:"ptl-tool-badge",children:t.summary}),c.jsx("span",{className:"ptl-time",children:Mc(t.timestamp)}),a&&c.jsx("span",{className:"ptl-tool-chevron",children:c.jsx(Yi,{down:n})})]}),n&&t.detail&&c.jsx("div",{className:"ptl-tool-card-detail ptl-autonomy-detail",children:t.detail})]})}if(t.type==="thinking"||t.type==="assistant")return c.jsxs("div",{className:"ptl-tool-card",children:[c.jsxs("button",{className:"ptl-row ptl-tool-toggle clickable",onClick:()=>r(a=>!a),type:"button",children:[c.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),c.jsx("span",{className:"ptl-summary",children:t.summary}),c.jsx("span",{className:"ptl-time",children:Mc(t.timestamp)}),c.jsx("span",{className:"ptl-tool-chevron",children:c.jsx(Yi,{down:n})})]}),n&&c.jsx("div",{className:"ptl-tool-card-detail ptl-thinking-detail",children:t.detail||t.summary})]});if(t.type==="verification"){const a=!!t.detail;return c.jsxs("div",{className:`ptl-tool-card ptl-verification-card${n?" expanded":""}`,children:[c.jsxs("button",{className:`ptl-row ptl-tool-toggle${a?" clickable":""}`,onClick:()=>{a&&r(u=>!u)},type:"button",children:[c.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),c.jsx("span",{className:"ptl-summary",children:t.summary||"Verification"}),c.jsx("span",{className:"ptl-time",children:Mc(t.timestamp)}),a&&c.jsx("span",{className:"ptl-tool-chevron",children:c.jsx(Yi,{down:n})})]}),n&&t.detail&&c.jsx("div",{className:"ptl-tool-card-detail ptl-verification-detail",children:t.detail})]})}return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"ptl-row",children:[c.jsx("span",{className:"ptl-label",style:{color:i.color},children:i.label}),c.jsx("span",{className:"ptl-summary",children:t.summary}),c.jsx("span",{className:"ptl-time",children:Mc(t.timestamp)})]}),t.detail&&c.jsx("div",{className:"ptl-detail",children:t.detail})]})});function F8(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const V8=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,U8=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,G8={};function XS(e,t){return(G8.jsx?U8:V8).test(e)}const q8=/[ \t\n\f\r]/g;function W8(e){return typeof e=="object"?e.type==="text"?KS(e.value):!1:KS(e)}function KS(e){return e.replace(q8,"")===""}class Ru{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}}Ru.prototype.normal={};Ru.prototype.property={};Ru.prototype.space=void 0;function fN(e,t){const n={},r={};for(const i of e)Object.assign(n,i.property),Object.assign(r,i.normal);return new Ru(n,r,t)}function By(e){return e.toLowerCase()}class Fr{constructor(t,n){this.attribute=n,this.property=t}}Fr.prototype.attribute="";Fr.prototype.booleanish=!1;Fr.prototype.boolean=!1;Fr.prototype.commaOrSpaceSeparated=!1;Fr.prototype.commaSeparated=!1;Fr.prototype.defined=!1;Fr.prototype.mustUseProperty=!1;Fr.prototype.number=!1;Fr.prototype.overloadedBoolean=!1;Fr.prototype.property="";Fr.prototype.spaceSeparated=!1;Fr.prototype.space=void 0;let Y8=0;const jt=na(),Yn=na(),$y=na(),De=na(),xn=na(),sl=na(),Kr=na();function na(){return 2**++Y8}const Hy=Object.freeze(Object.defineProperty({__proto__:null,boolean:jt,booleanish:Yn,commaOrSpaceSeparated:Kr,commaSeparated:sl,number:De,overloadedBoolean:$y,spaceSeparated:xn},Symbol.toStringTag,{value:"Module"})),Mg=Object.keys(Hy);class ev extends Fr{constructor(t,n,r,i){let o=-1;if(super(t,n),ZS(this,"space",i),typeof r=="number")for(;++o4&&n.slice(0,4)==="data"&&J8.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(QS,nz);r="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!QS.test(o)){let a=o.replace(Q8,tz);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}i=ev}return new i(r,t)}function tz(e){return"-"+e.toLowerCase()}function nz(e){return e.charAt(1).toUpperCase()}const rz=fN([mN,X8,gN,xN,yN],"html"),tv=fN([mN,K8,gN,xN,yN],"svg");function iz(e){return e.join(" ").trim()}var qa={},Dg,JS;function sz(){if(JS)return Dg;JS=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,n=/^\s*/,r=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,u=/^\s+|\s+$/g,d=` -`,m="/",p="*",h="",g="comment",y="declaration";function v(S,_){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];_=_||{};var w=1,C=1;function N(B){var U=B.match(t);U&&(w+=U.length);var H=B.lastIndexOf(d);C=~H?B.length-H:C+B.length}function O(){var B={line:w,column:C};return function(U){return U.position=new I(B),L(),U}}function I(B){this.start=B,this.end={line:w,column:C},this.source=_.source}I.prototype.content=S;function D(B){var U=new Error(_.source+":"+w+":"+C+": "+B);if(U.reason=B,U.filename=_.source,U.line=w,U.column=C,U.source=S,!_.silent)throw U}function T(B){var U=B.exec(S);if(U){var H=U[0];return N(H),S=S.slice(H.length),U}}function L(){T(n)}function A(B){var U;for(B=B||[];U=M();)U!==!1&&B.push(U);return B}function M(){var B=O();if(!(m!=S.charAt(0)||p!=S.charAt(1))){for(var U=2;h!=S.charAt(U)&&(p!=S.charAt(U)||m!=S.charAt(U+1));)++U;if(U+=2,h===S.charAt(U-1))return D("End of comment missing");var H=S.slice(2,U-2);return C+=2,N(H),S=S.slice(U),C+=2,B({type:g,comment:H})}}function $(){var B=O(),U=T(r);if(U){if(M(),!T(i))return D("property missing ':'");var H=T(o),V=B({type:y,property:k(U[0].replace(e,h)),value:H?k(H[0].replace(e,h)):h});return T(a),V}}function W(){var B=[];A(B);for(var U;U=$();)U!==!1&&(B.push(U),A(B));return B}return L(),W()}function k(S){return S?S.replace(u,h):h}return Dg=v,Dg}var ew;function oz(){if(ew)return qa;ew=1;var e=qa&&qa.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(qa,"__esModule",{value:!0}),qa.default=n;const t=e(sz());function n(r,i){let o=null;if(!r||typeof r!="string")return o;const a=(0,t.default)(r),u=typeof i=="function";return a.forEach(d=>{if(d.type!=="declaration")return;const{property:m,value:p}=d;u?i(m,p,d):p&&(o=o||{},o[m]=p)}),o}return qa}var Dc={},tw;function az(){if(tw)return Dc;tw=1,Object.defineProperty(Dc,"__esModule",{value:!0}),Dc.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,p){return p.toUpperCase()},u=function(m,p){return"".concat(p,"-")},d=function(m,p){return p===void 0&&(p={}),o(m)?m:(m=m.toLowerCase(),p.reactCompat?m=m.replace(i,u):m=m.replace(r,u),m.replace(t,a))};return Dc.camelCase=d,Dc}var Oc,nw;function lz(){if(nw)return Oc;nw=1;var e=Oc&&Oc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}},t=e(oz()),n=az();function r(i,o){var a={};return!i||typeof i!="string"||(0,t.default)(i,function(u,d){u&&d&&(a[(0,n.camelCase)(u,o)]=d)}),a}return r.default=r,Oc=r,Oc}var cz=lz();const uz=ta(cz),vN=bN("end"),nv=bN("start");function bN(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 dz(e){const t=nv(e),n=vN(e);if(t&&n)return{start:t,end:n}}function Jc(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?rw(e.position):"start"in e||"end"in e?rw(e):"line"in e||"column"in e?Fy(e):""}function Fy(e){return iw(e&&e.line)+":"+iw(e&&e.column)}function rw(e){return Fy(e&&e.start)+"-"+Fy(e&&e.end)}function iw(e){return e&&typeof e=="number"?e:1}class Cr 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 u=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=u?u.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=u?u.line:void 0,this.name=Jc(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}}Cr.prototype.file="";Cr.prototype.name="";Cr.prototype.reason="";Cr.prototype.message="";Cr.prototype.stack="";Cr.prototype.column=void 0;Cr.prototype.line=void 0;Cr.prototype.ancestors=void 0;Cr.prototype.cause=void 0;Cr.prototype.fatal=void 0;Cr.prototype.place=void 0;Cr.prototype.ruleId=void 0;Cr.prototype.source=void 0;const rv={}.hasOwnProperty,fz=new Map,mz=/[A-Z]/g,hz=new Set(["table","tbody","thead","tfoot","tr"]),pz=new Set(["td","th"]),_N="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function gz(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=wz(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=Sz(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"?tv:rz,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=kN(i,e,void 0);return o&&typeof o!="string"?o:i.create(e,i.Fragment,{children:o||void 0},void 0)}function kN(e,t,n){if(t.type==="element")return xz(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return yz(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return bz(e,t,n);if(t.type==="mdxjsEsm")return vz(e,t);if(t.type==="root")return _z(e,t,n);if(t.type==="text")return kz(e,t)}function xz(e,t,n){const r=e.schema;let i=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(i=tv,e.schema=i),e.ancestors.push(t);const o=wN(e,t.tagName,!1),a=Cz(e,t);let u=sv(e,t);return hz.has(t.tagName)&&(u=u.filter(function(d){return typeof d=="string"?!W8(d):!0})),SN(e,a,o,t),iv(a,u),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function yz(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)}xu(e,t.position)}function vz(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);xu(e,t.position)}function bz(e,t,n){const r=e.schema;let i=r;t.name==="svg"&&r.space==="html"&&(i=tv,e.schema=i),e.ancestors.push(t);const o=t.name===null?e.Fragment:wN(e,t.name,!0),a=jz(e,t),u=sv(e,t);return SN(e,a,o,t),iv(a,u),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function _z(e,t,n){const r={};return iv(r,sv(e,t)),e.create(t,e.Fragment,r,n)}function kz(e,t){return t.value}function SN(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function iv(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function Sz(e,t,n){return r;function r(i,o,a,u){const m=Array.isArray(a.children)?n:t;return u?m(o,a,u):m(o,a)}}function wz(e,t){return n;function n(r,i,o,a){const u=Array.isArray(o.children),d=nv(r);return t(i,o,a,u,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function Cz(e,t){const n={};let r,i;for(i in t.properties)if(i!=="children"&&rv.call(t.properties,i)){const o=Ez(e,i,t.properties[i]);if(o){const[a,u]=o;e.tableCellAlignToStyle&&a==="align"&&typeof u=="string"&&pz.has(t.tagName)?r=u:n[a]=u}}if(r){const o=n.style||(n.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function jz(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 u=a.properties[0];u.type,Object.assign(n,e.evaluater.evaluateExpression(u.argument))}else xu(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 u=r.value.data.estree.body[0];u.type,o=e.evaluater.evaluateExpression(u.expression)}else xu(e,t.position);else o=r.value===null?!0:r.value;n[i]=o}return n}function sv(e,t){const n=[];let r=-1;const i=e.passKeys?new Map:fz;for(;++ri?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);o0?(ni(e,e.length,0,t),e):t}const aw={}.hasOwnProperty;function jN(e){const t={};let n=-1;for(;++n13&&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 Mi(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Rr=yo(/[A-Za-z]/),wr=yo(/[\dA-Za-z]/),Lz=yo(/[#-'*+\--9=?A-Z^-~]/);function tm(e){return e!==null&&(e<32||e===127)}const Vy=yo(/\d/),zz=yo(/[\dA-Fa-f]/),Pz=yo(/[!-/:-@[-`{-~]/);function ut(e){return e!==null&&e<-2}function gn(e){return e!==null&&(e<0||e===32)}function Mt(e){return e===-2||e===-1||e===32}const Pm=yo(new RegExp("\\p{P}|\\p{S}","u")),Yo=yo(/\s/);function yo(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Ml(e){const t=[];let n=-1,r=0,i=0;for(;++n55295&&o<57344){const u=e.charCodeAt(n+1);o<56320&&u>56319&&u<57344?(a=String.fromCharCode(o,u),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 Ut(e,t,n,r){const i=r?r-1:Number.POSITIVE_INFINITY;let o=0;return a;function a(d){return Mt(d)?(e.enter(n),u(d)):t(d)}function u(d){return Mt(d)&&o++a))return;const D=t.events.length;let T=D,L,A;for(;T--;)if(t.events[T][0]==="exit"&&t.events[T][1].type==="chunkFlow"){if(L){A=t.events[T][1].end;break}L=!0}for(_(r),I=D;IC;){const O=n[N];t.containerState=O[1],O[0].exit.call(t,e)}n.length=C}function w(){i.write([null]),o=void 0,i=void 0,t.containerState._closeFlow=void 0}}function Vz(e,t,n){return Ut(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function yl(e){if(e===null||gn(e)||Yo(e))return 1;if(Pm(e))return 2}function Bm(e,t,n){const r=[];let i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const h={...e[r][1].end},g={...e[n][1].start};cw(h,-d),cw(g,d),a={type:d>1?"strongSequence":"emphasisSequence",start:h,end:{...e[r][1].end}},u={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:{...u.end}},e[r][1].end={...a.start},e[n][1].start={...u.end},m=[],e[r][1].end.offset-e[r][1].start.offset&&(m=vi(m,[["enter",e[r][1],t],["exit",e[r][1],t]])),m=vi(m,[["enter",i,t],["enter",a,t],["exit",a,t],["enter",o,t]]),m=vi(m,Bm(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),m=vi(m,[["exit",o,t],["enter",u,t],["exit",u,t],["exit",i,t]]),e[n][1].end.offset-e[n][1].start.offset?(p=2,m=vi(m,[["enter",e[n][1],t],["exit",e[n][1],t]])):p=0,ni(e,r-1,n-r+3,m),n=r+m.length-p-2;break}}for(n=-1;++n0&&Mt(I)?Ut(e,w,"linePrefix",o+1)(I):w(I)}function w(I){return I===null||ut(I)?e.check(uw,k,N)(I):(e.enter("codeFlowValue"),C(I))}function C(I){return I===null||ut(I)?(e.exit("codeFlowValue"),w(I)):(e.consume(I),C)}function N(I){return e.exit("codeFenced"),t(I)}function O(I,D,T){let L=0;return A;function A(U){return I.enter("lineEnding"),I.consume(U),I.exit("lineEnding"),M}function M(U){return I.enter("codeFencedFence"),Mt(U)?Ut(I,$,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(U):$(U)}function $(U){return U===u?(I.enter("codeFencedFenceSequence"),W(U)):T(U)}function W(U){return U===u?(L++,I.consume(U),W):L>=a?(I.exit("codeFencedFenceSequence"),Mt(U)?Ut(I,B,"whitespace")(U):B(U)):T(U)}function B(U){return U===null||ut(U)?(I.exit("codeFencedFence"),D(U)):T(U)}}}function tP(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 Lg={name:"codeIndented",tokenize:rP},nP={partial:!0,tokenize:iP};function rP(e,t,n){const r=this;return i;function i(m){return e.enter("codeIndented"),Ut(e,o,"linePrefix",5)(m)}function o(m){const p=r.events[r.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?a(m):n(m)}function a(m){return m===null?d(m):ut(m)?e.attempt(nP,a,d)(m):(e.enter("codeFlowValue"),u(m))}function u(m){return m===null||ut(m)?(e.exit("codeFlowValue"),a(m)):(e.consume(m),u)}function d(m){return e.exit("codeIndented"),t(m)}}function iP(e,t,n){const r=this;return i;function i(a){return r.parser.lazy[r.now().line]?n(a):ut(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i):Ut(e,o,"linePrefix",5)(a)}function o(a){const u=r.events[r.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?t(a):ut(a)?i(a):n(a)}}const sP={name:"codeText",previous:aP,resolve:oP,tokenize:lP};function oP(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=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-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&&Lc(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),Lc(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Lc(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(a):e.interrupt(r.parser.constructs.flow,n,t)(a)}}function AN(e,t,n,r,i,o,a,u,d){const m=d||Number.POSITIVE_INFINITY;let p=0;return h;function h(_){return _===60?(e.enter(r),e.enter(i),e.enter(o),e.consume(_),e.exit(o),g):_===null||_===32||_===41||tm(_)?n(_):(e.enter(r),e.enter(a),e.enter(u),e.enter("chunkString",{contentType:"string"}),k(_))}function g(_){return _===62?(e.enter(o),e.consume(_),e.exit(o),e.exit(i),e.exit(r),t):(e.enter(u),e.enter("chunkString",{contentType:"string"}),y(_))}function y(_){return _===62?(e.exit("chunkString"),e.exit(u),g(_)):_===null||_===60||ut(_)?n(_):(e.consume(_),_===92?v:y)}function v(_){return _===60||_===62||_===92?(e.consume(_),y):y(_)}function k(_){return!p&&(_===null||_===41||gn(_))?(e.exit("chunkString"),e.exit(u),e.exit(a),e.exit(r),t(_)):p999||y===null||y===91||y===93&&!d||y===94&&!u&&"_hiddenFootnoteSupport"in a.parser.constructs?n(y):y===93?(e.exit(o),e.enter(i),e.consume(y),e.exit(i),e.exit(r),t):ut(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),p):(e.enter("chunkString",{contentType:"string"}),h(y))}function h(y){return y===null||y===91||y===93||ut(y)||u++>999?(e.exit("chunkString"),p(y)):(e.consume(y),d||(d=!Mt(y)),y===92?g:h)}function g(y){return y===91||y===92||y===93?(e.consume(y),u++,h):h(y)}}function DN(e,t,n,r,i,o){let a;return u;function u(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):ut(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),Ut(e,m,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),p(g))}function p(g){return g===a||g===null||ut(g)?(e.exit("chunkString"),m(g)):(e.consume(g),g===92?h:p)}function h(g){return g===a||g===92?(e.consume(g),p):p(g)}}function eu(e,t){let n;return r;function r(i){return ut(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):Mt(i)?Ut(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}const gP={name:"definition",tokenize:yP},xP={partial:!0,tokenize:vP};function yP(e,t,n){const r=this;let i;return o;function o(y){return e.enter("definition"),a(y)}function a(y){return MN.call(r,e,u,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(y)}function u(y){return i=Mi(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),y===58?(e.enter("definitionMarker"),e.consume(y),e.exit("definitionMarker"),d):n(y)}function d(y){return gn(y)?eu(e,m)(y):m(y)}function m(y){return AN(e,p,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(y)}function p(y){return e.attempt(xP,h,h)(y)}function h(y){return Mt(y)?Ut(e,g,"whitespace")(y):g(y)}function g(y){return y===null||ut(y)?(e.exit("definition"),r.parser.defined.push(i),t(y)):n(y)}}function vP(e,t,n){return r;function r(u){return gn(u)?eu(e,i)(u):n(u)}function i(u){return DN(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(u)}function o(u){return Mt(u)?Ut(e,a,"whitespace")(u):a(u)}function a(u){return u===null||ut(u)?t(u):n(u)}}const bP={name:"hardBreakEscape",tokenize:_P};function _P(e,t,n){return r;function r(o){return e.enter("hardBreakEscape"),e.consume(o),i}function i(o){return ut(o)?(e.exit("hardBreakEscape"),t(o)):n(o)}}const kP={name:"headingAtx",resolve:SP,tokenize:wP};function SP(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"},ni(e,r,n-r+1,[["enter",i,t],["enter",o,t],["exit",o,t],["exit",i,t]])),e}function wP(e,t,n){let r=0;return i;function i(p){return e.enter("atxHeading"),o(p)}function o(p){return e.enter("atxHeadingSequence"),a(p)}function a(p){return p===35&&r++<6?(e.consume(p),a):p===null||gn(p)?(e.exit("atxHeadingSequence"),u(p)):n(p)}function u(p){return p===35?(e.enter("atxHeadingSequence"),d(p)):p===null||ut(p)?(e.exit("atxHeading"),t(p)):Mt(p)?Ut(e,u,"whitespace")(p):(e.enter("atxHeadingText"),m(p))}function d(p){return p===35?(e.consume(p),d):(e.exit("atxHeadingSequence"),u(p))}function m(p){return p===null||p===35||gn(p)?(e.exit("atxHeadingText"),u(p)):(e.consume(p),m)}}const CP=["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"],fw=["pre","script","style","textarea"],jP={concrete:!0,name:"htmlFlow",resolveTo:IP,tokenize:TP},EP={partial:!0,tokenize:AP},NP={partial:!0,tokenize:RP};function IP(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 TP(e,t,n){const r=this;let i,o,a,u,d;return m;function m(P){return p(P)}function p(P){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(P),h}function h(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):Rr(P)?(e.consume(P),a=String.fromCharCode(P),S):n(P)}function g(P){return P===45?(e.consume(P),i=2,y):P===91?(e.consume(P),i=5,u=0,v):Rr(P)?(e.consume(P),i=4,r.interrupt?t:q):n(P)}function y(P){return P===45?(e.consume(P),r.interrupt?t:q):n(P)}function v(P){const X="CDATA[";return P===X.charCodeAt(u++)?(e.consume(P),u===X.length?r.interrupt?t:$:v):n(P)}function k(P){return Rr(P)?(e.consume(P),a=String.fromCharCode(P),S):n(P)}function S(P){if(P===null||P===47||P===62||gn(P)){const X=P===47,ee=a.toLowerCase();return!X&&!o&&fw.includes(ee)?(i=1,r.interrupt?t(P):$(P)):CP.includes(a.toLowerCase())?(i=6,X?(e.consume(P),_):r.interrupt?t(P):$(P)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(P):o?w(P):C(P))}return P===45||wr(P)?(e.consume(P),a+=String.fromCharCode(P),S):n(P)}function _(P){return P===62?(e.consume(P),r.interrupt?t:$):n(P)}function w(P){return Mt(P)?(e.consume(P),w):A(P)}function C(P){return P===47?(e.consume(P),A):P===58||P===95||Rr(P)?(e.consume(P),N):Mt(P)?(e.consume(P),C):A(P)}function N(P){return P===45||P===46||P===58||P===95||wr(P)?(e.consume(P),N):O(P)}function O(P){return P===61?(e.consume(P),I):Mt(P)?(e.consume(P),O):C(P)}function I(P){return P===null||P===60||P===61||P===62||P===96?n(P):P===34||P===39?(e.consume(P),d=P,D):Mt(P)?(e.consume(P),I):T(P)}function D(P){return P===d?(e.consume(P),d=null,L):P===null||ut(P)?n(P):(e.consume(P),D)}function T(P){return P===null||P===34||P===39||P===47||P===60||P===61||P===62||P===96||gn(P)?O(P):(e.consume(P),T)}function L(P){return P===47||P===62||Mt(P)?C(P):n(P)}function A(P){return P===62?(e.consume(P),M):n(P)}function M(P){return P===null||ut(P)?$(P):Mt(P)?(e.consume(P),M):n(P)}function $(P){return P===45&&i===2?(e.consume(P),H):P===60&&i===1?(e.consume(P),V):P===62&&i===4?(e.consume(P),G):P===63&&i===3?(e.consume(P),q):P===93&&i===5?(e.consume(P),Q):ut(P)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(EP,J,W)(P)):P===null||ut(P)?(e.exit("htmlFlowData"),W(P)):(e.consume(P),$)}function W(P){return e.check(NP,B,J)(P)}function B(P){return e.enter("lineEnding"),e.consume(P),e.exit("lineEnding"),U}function U(P){return P===null||ut(P)?W(P):(e.enter("htmlFlowData"),$(P))}function H(P){return P===45?(e.consume(P),q):$(P)}function V(P){return P===47?(e.consume(P),a="",Y):$(P)}function Y(P){if(P===62){const X=a.toLowerCase();return fw.includes(X)?(e.consume(P),G):$(P)}return Rr(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||ut(P)?(e.exit("htmlFlowData"),J(P)):(e.consume(P),G)}function J(P){return e.exit("htmlFlow"),t(P)}}function RP(e,t,n){const r=this;return i;function i(a){return ut(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 AP(e,t,n){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(Au,t,n)}}const MP={name:"htmlText",tokenize:DP};function DP(e,t,n){const r=this;let i,o,a;return u;function u(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),C):Rr(q)?(e.consume(q),T):n(q)}function m(q){return q===45?(e.consume(q),p):q===91?(e.consume(q),o=0,v):Rr(q)?(e.consume(q),w):n(q)}function p(q){return q===45?(e.consume(q),y):n(q)}function h(q){return q===null?n(q):q===45?(e.consume(q),g):ut(q)?(a=h,V(q)):(e.consume(q),h)}function g(q){return q===45?(e.consume(q),y):h(q)}function y(q){return q===62?H(q):q===45?g(q):h(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):ut(q)?(a=k,V(q)):(e.consume(q),k)}function S(q){return q===93?(e.consume(q),_):k(q)}function _(q){return q===62?H(q):q===93?(e.consume(q),_):k(q)}function w(q){return q===null||q===62?H(q):ut(q)?(a=w,V(q)):(e.consume(q),w)}function C(q){return q===null?n(q):q===63?(e.consume(q),N):ut(q)?(a=C,V(q)):(e.consume(q),C)}function N(q){return q===62?H(q):C(q)}function O(q){return Rr(q)?(e.consume(q),I):n(q)}function I(q){return q===45||wr(q)?(e.consume(q),I):D(q)}function D(q){return ut(q)?(a=D,V(q)):Mt(q)?(e.consume(q),D):H(q)}function T(q){return q===45||wr(q)?(e.consume(q),T):q===47||q===62||gn(q)?L(q):n(q)}function L(q){return q===47?(e.consume(q),H):q===58||q===95||Rr(q)?(e.consume(q),A):ut(q)?(a=L,V(q)):Mt(q)?(e.consume(q),L):H(q)}function A(q){return q===45||q===46||q===58||q===95||wr(q)?(e.consume(q),A):M(q)}function M(q){return q===61?(e.consume(q),$):ut(q)?(a=M,V(q)):Mt(q)?(e.consume(q),M):L(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):ut(q)?(a=$,V(q)):Mt(q)?(e.consume(q),$):(e.consume(q),B)}function W(q){return q===i?(e.consume(q),i=void 0,U):q===null?n(q):ut(q)?(a=W,V(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||gn(q)?L(q):(e.consume(q),B)}function U(q){return q===47||q===62||gn(q)?L(q):n(q)}function H(q){return q===62?(e.consume(q),e.exit("htmlTextData"),e.exit("htmlText"),t):n(q)}function V(q){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(q),e.exit("lineEnding"),Y}function Y(q){return Mt(q)?Ut(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 lv={name:"labelEnd",resolveAll:PP,resolveTo:BP,tokenize:$P},OP={tokenize:HP},LP={tokenize:FP},zP={tokenize:VP};function PP(e){let t=-1;const n=[];for(;++t=3&&(m===null||ut(m))?(e.exit("thematicBreak"),t(m)):n(m)}function d(m){return m===i?(e.consume(m),r++,d):(e.exit("thematicBreakSequence"),Mt(m)?Ut(e,u,"whitespace")(m):u(m))}}const Br={continuation:{tokenize:JP},exit:tB,name:"list",tokenize:QP},KP={partial:!0,tokenize:nB},ZP={partial:!0,tokenize:eB};function QP(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 u;function u(y){const v=r.containerState.type||(y===42||y===43||y===45?"listUnordered":"listOrdered");if(v==="listUnordered"?!r.containerState.marker||y===r.containerState.marker:Vy(y)){if(r.containerState.type||(r.containerState.type=v,e.enter(v,{_container:!0})),v==="listUnordered")return e.enter("listItemPrefix"),y===42||y===45?e.check(Tf,n,m)(y):m(y);if(!r.interrupt||y===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(y)}return n(y)}function d(y){return Vy(y)&&++a<10?(e.consume(y),d):(!r.interrupt||a<2)&&(r.containerState.marker?y===r.containerState.marker:y===41||y===46)?(e.exit("listItemValue"),m(y)):n(y)}function m(y){return e.enter("listItemMarker"),e.consume(y),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||y,e.check(Au,r.interrupt?n:p,e.attempt(KP,g,h))}function p(y){return r.containerState.initialBlankLine=!0,o++,g(y)}function h(y){return Mt(y)?(e.enter("listItemPrefixWhitespace"),e.consume(y),e.exit("listItemPrefixWhitespace"),g):n(y)}function g(y){return r.containerState.size=o+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(y)}}function JP(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(Au,i,o);function i(u){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Ut(e,t,"listItemIndent",r.containerState.size+1)(u)}function o(u){return r.containerState.furtherBlankLines||!Mt(u)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,a(u)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ZP,t,a)(u))}function a(u){return r.containerState._closeFlow=!0,r.interrupt=void 0,Ut(e,e.attempt(Br,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(u)}}function eB(e,t,n){const r=this;return Ut(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 tB(e){e.exit(this.containerState.type)}function nB(e,t,n){const r=this;return Ut(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!Mt(o)&&a&&a[1].type==="listItemPrefixWhitespace"?t(o):n(o)}}const mw={name:"setextUnderline",resolveTo:rB,tokenize:iB};function rB(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 iB(e,t,n){const r=this;let i;return o;function o(m){let p=r.events.length,h;for(;p--;)if(r.events[p][1].type!=="lineEnding"&&r.events[p][1].type!=="linePrefix"&&r.events[p][1].type!=="content"){h=r.events[p][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||h)?(e.enter("setextHeadingLine"),i=m,a(m)):n(m)}function a(m){return e.enter("setextHeadingLineSequence"),u(m)}function u(m){return m===i?(e.consume(m),u):(e.exit("setextHeadingLineSequence"),Mt(m)?Ut(e,d,"lineSuffix")(m):d(m))}function d(m){return m===null||ut(m)?(e.exit("setextHeadingLine"),t(m)):n(m)}}const sB={tokenize:oB};function oB(e){const t=this,n=e.attempt(Au,r,e.attempt(this.parser.constructs.flowInitial,i,Ut(e,e.attempt(this.parser.constructs.flow,i,e.attempt(dP,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 aB={resolveAll:LN()},lB=ON("string"),cB=ON("text");function ON(e){return{resolveAll:LN(e==="text"?uB:void 0),tokenize:t};function t(n){const r=this,i=this.parser.constructs[e],o=n.attempt(i,a,u);return a;function a(p){return m(p)?o(p):u(p)}function u(p){if(p===null){n.consume(p);return}return n.enter("data"),n.consume(p),d}function d(p){return m(p)?(n.exit("data"),o(p)):(n.consume(p),d)}function m(p){if(p===null)return!0;const h=i[p];let g=-1;if(h)for(;++g-1){const u=a[0];typeof u=="string"?a[0]=u.slice(r):a.shift()}o>0&&a.push(e[i].slice(0,o))}return a}function SB(e,t){let n=-1;const r=[];let i;for(;++n0){const Wt=Me.tokenStack[Me.tokenStack.length-1];(Wt[1]||pw).call(Me,void 0,Wt[0])}for(be.position={start:io(fe.length>0?fe[0][1].start:{line:1,column:1,offset:0}),end:io(fe.length>0?fe[fe.length-2][1].end:{line:1,column:1,offset:0})},$e=-1;++$e0&&(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 zB(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function PB(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function BB(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),i=Ml(r.toLowerCase()),o=e.footnoteOrder.indexOf(r);let a,u=e.footnoteCounts.get(r);u===void 0?(u=0,e.footnoteOrder.push(r),a=e.footnoteOrder.length):a=o+1,u+=1,e.footnoteCounts.set(r,u);const d={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+i,id:n+"fnref-"+i+(u>1?"-"+u:""),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 $B(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 HB(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function BN(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 FB(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return BN(e,t);const i={src:Ml(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 VB(e,t){const n={src:Ml(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 UB(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 GB(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return BN(e,t);const i={href:Ml(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 qB(e,t){const n={href:Ml(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 WB(e,t,n){const r=e.all(t),i=n?YB(n):$N(t),o={},a=[];if(typeof t.checked=="boolean"){const p=r[0];let h;p&&p.type==="element"&&p.tagName==="p"?h=p:(h={type:"element",tagName:"p",properties:{},children:[]},r.unshift(h)),h.children.length>0&&h.children.unshift({type:"text",value:" "}),h.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let u=-1;for(;++u1}function XB(e,t){const n={},r=e.all(t);let i=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++i0){const a={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},u=nv(t.children[1]),d=vN(t.children[t.children.length-1]);u&&d&&(a.position={start:u,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 e9(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,u=a?a.length:t.children.length;let d=-1;const m=[];for(;++d0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return o.push(yw(t.slice(i),i>0,!1)),o.join("")}function yw(e,t,n){let r=0,i=e.length;if(t){let o=e.codePointAt(r);for(;o===gw||o===xw;)r++,o=e.codePointAt(r)}if(n){let o=e.codePointAt(i-1);for(;o===gw||o===xw;)i--,o=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}function r9(e,t){const n={type:"text",value:n9(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function i9(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const s9={blockquote:DB,break:OB,code:LB,delete:zB,emphasis:PB,footnoteReference:BB,heading:$B,html:HB,imageReference:FB,image:VB,inlineCode:UB,linkReference:GB,link:qB,listItem:WB,list:XB,paragraph:KB,root:ZB,strong:QB,table:JB,tableCell:t9,tableRow:e9,text:r9,thematicBreak:i9,toml:ef,yaml:ef,definition:ef,footnoteDefinition:ef};function ef(){}const HN=-1,$m=0,tu=1,nm=2,cv=3,uv=4,dv=5,fv=6,FN=7,VN=8,vw=typeof self=="object"?self:globalThis,o9=(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 $m:case HN:return n(a,i);case tu:{const u=n([],i);for(const d of a)u.push(r(d));return u}case nm:{const u=n({},i);for(const[d,m]of a)u[r(d)]=r(m);return u}case cv:return n(new Date(a),i);case uv:{const{source:u,flags:d}=a;return n(new RegExp(u,d),i)}case dv:{const u=n(new Map,i);for(const[d,m]of a)u.set(r(d),r(m));return u}case fv:{const u=n(new Set,i);for(const d of a)u.add(r(d));return u}case FN:{const{name:u,message:d}=a;return n(new vw[u](d),i)}case VN: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:u}=new Uint8Array(a);return n(new DataView(u),a)}}return n(new vw[o](a),i)};return r},bw=e=>o9(new Map,e)(0),Wa="",{toString:a9}={},{keys:l9}=Object,zc=e=>{const t=typeof e;if(t!=="object"||!e)return[$m,t];const n=a9.call(e).slice(8,-1);switch(n){case"Array":return[tu,Wa];case"Object":return[nm,Wa];case"Date":return[cv,Wa];case"RegExp":return[uv,Wa];case"Map":return[dv,Wa];case"Set":return[fv,Wa];case"DataView":return[tu,n]}return n.includes("Array")?[tu,n]:n.includes("Error")?[FN,n]:[nm,n]},tf=([e,t])=>e===$m&&(t==="function"||t==="symbol"),c9=(e,t,n,r)=>{const i=(a,u)=>{const d=r.push(a)-1;return n.set(u,d),d},o=a=>{if(n.has(a))return n.get(a);let[u,d]=zc(a);switch(u){case $m:{let p=a;switch(d){case"bigint":u=VN,p=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);p=null;break;case"undefined":return i([HN],a)}return i([u,p],a)}case tu:{if(d){let g=a;return d==="DataView"?g=new Uint8Array(a.buffer):d==="ArrayBuffer"&&(g=new Uint8Array(a)),i([d,[...g]],a)}const p=[],h=i([u,p],a);for(const g of a)p.push(o(g));return h}case nm:{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 p=[],h=i([u,p],a);for(const g of l9(a))(e||!tf(zc(a[g])))&&p.push([o(g),o(a[g])]);return h}case cv:return i([u,a.toISOString()],a);case uv:{const{source:p,flags:h}=a;return i([u,{source:p,flags:h}],a)}case dv:{const p=[],h=i([u,p],a);for(const[g,y]of a)(e||!(tf(zc(g))||tf(zc(y))))&&p.push([o(g),o(y)]);return h}case fv:{const p=[],h=i([u,p],a);for(const g of a)(e||!tf(zc(g)))&&p.push(o(g));return h}}const{message:m}=a;return i([u,{name:d,message:m}],a)};return o},_w=(e,{json:t,lossy:n}={})=>{const r=[];return c9(!(t||n),!!t,new Map,r)(e),r},rm=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?bw(_w(e,t)):structuredClone(e):(e,t)=>bw(_w(e,t));function u9(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 d9(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function f9(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||u9,r=e.options.footnoteBackLabel||d9,i=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},u=[];let d=-1;for(;++d0&&v.push({type:"text",value:" "});let w=typeof n=="string"?n:n(d,y);typeof w=="string"&&(w={type:"text",value:w}),v.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(y>1?"-"+y:""),dataFootnoteBackref:"",ariaLabel:typeof r=="string"?r:r(d,y),className:["data-footnote-backref"]},children:Array.isArray(w)?w:[w]})}const S=p[p.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 p.push(...v);const _={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(p,!0)};e.patch(m,_),u.push(_)}if(u.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...rm(a),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(u,!0)},{type:"text",value:` -`}]}}const Hm=(function(e){if(e==null)return g9;if(typeof e=="function")return Fm(e);if(typeof e=="object")return Array.isArray(e)?m9(e):h9(e);if(typeof e=="string")return p9(e);throw new Error("Expected function, string, or object as test")});function m9(e){const t=[];let n=-1;for(;++n":""))+")"})}return g;function g(){let y=UN,v,k,S;if((!t||o(d,m,p[p.length-1]||void 0))&&(y=b9(n(d,p)),y[0]===Gy))return y;if("children"in d&&d.children){const _=d;if(_.children&&y[0]!==v9)for(k=(r?_.children.length:-1)+a,S=p.concat(_);k>-1&&k<_.children.length;){const w=_.children[k];if(v=u(w,k,S)(),v[0]===Gy)return v;k=typeof v[1]=="number"?v[1]:k+a}}return y}}}function b9(e){return Array.isArray(e)?e:typeof e=="number"?[y9,e]:e==null?UN:[e]}function mv(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),GN(e,o,u,i);function u(d,m){const p=m[m.length-1],h=p?p.children.indexOf(d):void 0;return a(d,h,p)}}const qy={}.hasOwnProperty,_9={};function k9(e,t){const n=t||_9,r=new Map,i=new Map,o=new Map,a={...s9,...n.handlers},u={all:m,applyData:w9,definitionById:r,footnoteById:i,footnoteCounts:o,footnoteOrder:[],handlers:a,one:d,options:n,patch:S9,wrap:j9};return mv(e,function(p){if(p.type==="definition"||p.type==="footnoteDefinition"){const h=p.type==="definition"?r:i,g=String(p.identifier).toUpperCase();h.has(g)||h.set(g,p)}}),u;function d(p,h){const g=p.type,y=u.handlers[g];if(qy.call(u.handlers,g)&&y)return y(u,p,h);if(u.options.passThrough&&u.options.passThrough.includes(g)){if("children"in p){const{children:k,...S}=p,_=rm(S);return _.children=u.all(p),_}return rm(p)}return(u.options.unknownHandler||C9)(u,p,h)}function m(p){const h=[];if("children"in p){const g=p.children;let y=-1;for(;++y0&&n.push({type:"text",value:` -`}),n}function kw(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Sw(e,t){const n=k9(e,t),r=n.one(e,void 0),i=f9(n),o=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return i&&o.children.push({type:"text",value:` -`},i),o}function E9(e,t){return e&&"run"in e?async function(n,r){const i=Sw(n,{file:r,...t});await e.run(i,r)}:function(n,r){return Sw(n,{file:r,...e||t})}}function ww(e){if(e)throw e}var Pg,Cw;function N9(){if(Cw)return Pg;Cw=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 p=e.call(m,"constructor"),h=m.constructor&&m.constructor.prototype&&e.call(m.constructor.prototype,"isPrototypeOf");if(m.constructor&&!p&&!h)return!1;var g;for(g in m);return typeof g>"u"||e.call(m,g)},a=function(m,p){n&&p.name==="__proto__"?n(m,p.name,{enumerable:!0,configurable:!0,value:p.newValue,writable:!0}):m[p.name]=p.newValue},u=function(m,p){if(p==="__proto__")if(e.call(m,p)){if(r)return r(m,p).value}else return;return m[p]};return Pg=function d(){var m,p,h,g,y,v,k=arguments[0],S=1,_=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<_;++S)if(m=arguments[S],m!=null)for(p in m)h=u(k,p),g=u(m,p),k!==g&&(w&&g&&(o(g)||(y=i(g)))?(y?(y=!1,v=h&&i(h)?h:[]):v=h&&o(h)?h:{},a(k,{name:p,newValue:d(w,v,g)})):typeof g<"u"&&a(k,{name:p,newValue:g}));return k},Pg}var I9=N9();const Bg=ta(I9);function Wy(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 T9(){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);u(null,...i);function u(d,...m){const p=e[++o];let h=-1;if(d){a(d);return}for(;++ha.length;let d;u&&a.push(i);try{d=e.apply(this,a)}catch(m){const p=m;if(u&&n)throw p;return i(p)}u||(d&&d.then&&typeof d.then=="function"?d.then(o,i):d instanceof Error?i(d):o(d))}function i(a,...u){n||(n=!0,t(a,...u))}function o(a){i(null,a)}}const Vi={basename:A9,dirname:M9,extname:D9,join:O9,sep:"/"};function A9(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Mu(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,u=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else a<0&&(o=!0,a=i+1),u>-1&&(e.codePointAt(i)===t.codePointAt(u--)?u<0&&(r=i):(u=-1,r=a));return n===r?r=a:r<0&&(r=e.length),e.slice(n,r)}function M9(e){if(Mu(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 D9(e){Mu(e);let t=e.length,n=-1,r=0,i=-1,o=0,a;for(;t--;){const u=e.codePointAt(t);if(u===47){if(a){r=t+1;break}continue}n<0&&(a=!0,n=t+1),u===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 O9(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function z9(e,t){let n="",r=0,i=-1,o=0,a=-1,u,d;for(;++a<=e.length;){if(a2){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 u===46&&o>-1?o++:o=-1}return n}function Mu(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const P9={cwd:B9};function B9(){return"/"}function Yy(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function $9(e){if(typeof e=="string")e=new URL(e);else if(!Yy(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 H9(e)}function H9(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(;++n0){let[y,...v]=p;const k=r[g][1];Wy(k)&&Wy(y)&&(y=Bg(!0,k,y)),r[g]=[m,y,...v]}}}}const G9=new hv().freeze();function Vg(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Ug(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Gg(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 Ew(e){if(!Wy(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Nw(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function nf(e){return q9(e)?e:new qN(e)}function q9(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function W9(e){return typeof e=="string"||Y9(e)}function Y9(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const X9="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Iw=[],Tw={allowDangerousHtml:!0},K9=/^(https?|ircs?|mailto|xmpp)$/i,Z9=[{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 Q9(e){const t=J9(e),n=e$(e);return t$(t.runSync(t.parse(n),n),e)}function J9(e){const t=e.rehypePlugins||Iw,n=e.remarkPlugins||Iw,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Tw}:Tw;return G9().use(MB).use(n).use(E9,r).use(t)}function e$(e){const t=e.children||"",n=new qN;return typeof t=="string"&&(n.value=t),n}function t$(e,t){const n=t.allowedElements,r=t.allowElement,i=t.components,o=t.disallowedElements,a=t.skipHtml,u=t.unwrapDisallowed,d=t.urlTransform||n$;for(const p of Z9)Object.hasOwn(t,p.from)&&(""+p.from+(p.to?"use `"+p.to+"` instead":"remove it")+X9+p.id,void 0);return mv(e,m),gz(e,{Fragment:c.Fragment,components:i,ignoreInvalidStyle:!0,jsx:c.jsx,jsxs:c.jsxs,passKeys:!0,passNode:!0});function m(p,h,g){if(p.type==="raw"&&g&&typeof h=="number")return a?g.children.splice(h,1):g.children[h]={type:"text",value:p.value},h;if(p.type==="element"){let y;for(y in Og)if(Object.hasOwn(Og,y)&&Object.hasOwn(p.properties,y)){const v=p.properties[y],k=Og[y];(k===null||k.includes(p.tagName))&&(p.properties[y]=d(String(v||""),y,p))}}if(p.type==="element"){let y=n?!n.includes(p.tagName):o?o.includes(p.tagName):!1;if(!y&&r&&typeof h=="number"&&(y=!r(p,h,g)),y&&g&&typeof h=="number")return u&&p.children?g.children.splice(h,1,...p.children):g.children.splice(h,1),h}}}function n$(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||K9.test(e.slice(0,t))?e:""}function Rw(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 r$(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function i$(e,t,n){const i=Hm((n||{}).ignore||[]),o=s$(t);let a=-1;for(;++a0?{type:"text",value:I}:void 0),I===!1?g.lastIndex=N+1:(v!==N&&w.push({type:"text",value:m.value.slice(v,N)}),Array.isArray(I)?w.push(...I):I&&w.push(I),v=N+C[0].length,_=!0),!g.global)break;C=g.exec(m.value)}return _?(v?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const i=Rw(e,"(");let o=Rw(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 WN(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||Yo(n)||Pm(n))&&(!t||n!==47)}YN.peek=N$;function b$(){this.buffer()}function _$(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function k$(){this.buffer()}function S$(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function w$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Mi(this.sliceSerialize(e)).toLowerCase(),n.label=t}function C$(e){this.exit(e)}function j$(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=Mi(this.sliceSerialize(e)).toLowerCase(),n.label=t}function E$(e){this.exit(e)}function N$(){return"["}function YN(e,t,n,r){const i=n.createTracker(r);let o=i.move("[^");const a=n.enter("footnoteReference"),u=n.enter("reference");return o+=i.move(n.safe(n.associationId(e),{after:"]",before:o})),u(),a(),o+=i.move("]"),o}function I$(){return{enter:{gfmFootnoteCallString:b$,gfmFootnoteCall:_$,gfmFootnoteDefinitionLabelString:k$,gfmFootnoteDefinition:S$},exit:{gfmFootnoteCallString:w$,gfmFootnoteCall:C$,gfmFootnoteDefinitionLabelString:j$,gfmFootnoteDefinition:E$}}}function T$(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:YN},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(r,i,o,a){const u=o.createTracker(a);let d=u.move("[^");const m=o.enter("footnoteDefinition"),p=o.enter("label");return d+=u.move(o.safe(o.associationId(r),{before:d,after:"]"})),p(),d+=u.move("]:"),r.children&&r.children.length>0&&(u.shift(4),d+=u.move((t?` -`:" ")+o.indentLines(o.containerFlow(r,u.current()),t?XN:R$))),m(),d}}function R$(e,t,n){return t===0?e:XN(e,t,n)}function XN(e,t,n){return(n?"":" ")+e}const A$=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];KN.peek=z$;function M$(){return{canContainEols:["delete"],enter:{strikethrough:O$},exit:{strikethrough:L$}}}function D$(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:A$}],handlers:{delete:KN}}}function O$(e){this.enter({type:"delete",children:[]},e)}function L$(e){this.exit(e)}function KN(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 z$(){return"~"}function P$(e){return e.length}function B$(e,t){const n=t||{},r=(n.align||[]).concat(),i=n.stringLength||P$,o=[],a=[],u=[],d=[];let m=0,p=-1;for(;++pm&&(m=e[p].length);++_d[_])&&(d[_]=C)}k.push(w)}a[p]=k,u[p]=S}let h=-1;if(typeof r=="object"&&"length"in r)for(;++hd[h]&&(d[h]=w),y[h]=w),g[h]=C}a.splice(1,0,g),u.splice(1,0,y),p=-1;const v=[];for(;++p "),o.shift(2);const a=n.indentLines(n.containerFlow(e,o.current()),F$);return i(),a}function F$(e,t,n){return">"+(n?"":" ")+e}function V$(e,t){return Mw(e,t.inConstruct,!0)&&!Mw(e,t.notInConstruct,!1)}function Mw(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ra&&(a=o):o=1,i=r+t.length,r=n.indexOf(t,i);return a}function G$(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 q$(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 W$(e,t,n,r){const i=q$(n),o=e.value||"",a=i==="`"?"GraveAccent":"Tilde";if(G$(e,n)){const h=n.enter("codeIndented"),g=n.indentLines(o,Y$);return h(),g}const u=n.createTracker(r),d=i.repeat(Math.max(U$(o,i)+1,3)),m=n.enter("codeFenced");let p=u.move(d);if(e.lang){const h=n.enter(`codeFencedLang${a}`);p+=u.move(n.safe(e.lang,{before:p,after:" ",encode:["`"],...u.current()})),h()}if(e.lang&&e.meta){const h=n.enter(`codeFencedMeta${a}`);p+=u.move(" "),p+=u.move(n.safe(e.meta,{before:p,after:` -`,encode:["`"],...u.current()})),h()}return p+=u.move(` -`),o&&(p+=u.move(o+` -`)),p+=u.move(d),m(),p}function Y$(e,t,n){return(n?"":" ")+e}function pv(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 X$(e,t,n,r){const i=pv(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("definition");let u=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("]: "),u(),!e.url||/[\0- \u007F]/.test(e.url)?(u=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(u=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":` -`,...d.current()}))),u(),e.title&&(u=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),u()),a(),m}function K$(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 yu(e){return"&#x"+e.toString(16).toUpperCase()+";"}function im(e,t,n){const r=yl(e),i=yl(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}}ZN.peek=Z$;function ZN(e,t,n,r){const i=K$(n),o=n.enter("emphasis"),a=n.createTracker(r),u=a.move(i);let d=a.move(n.containerPhrasing(e,{after:i,before:u,...a.current()}));const m=d.charCodeAt(0),p=im(r.before.charCodeAt(r.before.length-1),m,i);p.inside&&(d=yu(m)+d.slice(1));const h=d.charCodeAt(d.length-1),g=im(r.after.charCodeAt(0),h,i);g.inside&&(d=d.slice(0,-1)+yu(h));const y=a.move(i);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:p.outside},u+d+y}function Z$(e,t,n){return n.options.emphasis||"*"}function Q$(e,t){let n=!1;return mv(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return n=!0,Gy}),!!((!e.depth||e.depth<3)&&ov(e)&&(t.options.setext||n))}function J$(e,t,n,r){const i=Math.max(Math.min(6,e.depth||1),1),o=n.createTracker(r);if(Q$(e,n)){const p=n.enter("headingSetext"),h=n.enter("phrasing"),g=n.containerPhrasing(e,{...o.current(),before:` -`,after:` -`});return h(),p(),g+` -`+(i===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(` -`))+1))}const a="#".repeat(i),u=n.enter("headingAtx"),d=n.enter("phrasing");o.move(a+" ");let m=n.containerPhrasing(e,{before:"# ",after:` -`,...o.current()});return/^[\t ]/.test(m)&&(m=yu(m.charCodeAt(0))+m.slice(1)),m=m?a+" "+m:a,n.options.closeAtx&&(m+=" "+a),d(),u(),m}QN.peek=e7;function QN(e){return e.value||""}function e7(){return"<"}JN.peek=t7;function JN(e,t,n,r){const i=pv(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("image");let u=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("]("),u(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(u=n.enter("destinationLiteral"),m+=d.move("<"),m+=d.move(n.safe(e.url,{before:m,after:">",...d.current()})),m+=d.move(">")):(u=n.enter("destinationRaw"),m+=d.move(n.safe(e.url,{before:m,after:e.title?" ":")",...d.current()}))),u(),e.title&&(u=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),u()),m+=d.move(")"),a(),m}function t7(){return"!"}eI.peek=n7;function eI(e,t,n,r){const i=e.referenceType,o=n.enter("imageReference");let a=n.enter("label");const u=n.createTracker(r);let d=u.move("![");const m=n.safe(e.alt,{before:d,after:"]",...u.current()});d+=u.move(m+"]["),a();const p=n.stack;n.stack=[],a=n.enter("reference");const h=n.safe(n.associationId(e),{before:d,after:"]",...u.current()});return a(),n.stack=p,o(),i==="full"||!m||m!==h?d+=u.move(h+"]"):i==="shortcut"?d=d.slice(0,-1):d+=u.move("]"),d}function n7(){return"!"}tI.peek=r7;function tI(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\u007F]/.test(e.url))}rI.peek=i7;function rI(e,t,n,r){const i=pv(n),o=i==='"'?"Quote":"Apostrophe",a=n.createTracker(r);let u,d;if(nI(e,n)){const p=n.stack;n.stack=[],u=n.enter("autolink");let h=a.move("<");return h+=a.move(n.containerPhrasing(e,{before:h,after:">",...a.current()})),h+=a.move(">"),u(),n.stack=p,h}u=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(")"),u(),m}function i7(e,t,n){return nI(e,n)?"<":"["}iI.peek=s7;function iI(e,t,n,r){const i=e.referenceType,o=n.enter("linkReference");let a=n.enter("label");const u=n.createTracker(r);let d=u.move("[");const m=n.containerPhrasing(e,{before:d,after:"]",...u.current()});d+=u.move(m+"]["),a();const p=n.stack;n.stack=[],a=n.enter("reference");const h=n.safe(n.associationId(e),{before:d,after:"]",...u.current()});return a(),n.stack=p,o(),i==="full"||!m||m!==h?d+=u.move(h+"]"):i==="shortcut"?d=d.slice(0,-1):d+=u.move("]"),d}function s7(){return"["}function gv(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 o7(e){const t=gv(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 a7(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 sI(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 l7(e,t,n,r){const i=n.enter("list"),o=n.bulletCurrent;let a=e.ordered?a7(n):gv(n);const u=e.ordered?a==="."?")":".":o7(n);let d=t&&n.bulletLastUsed?a===n.bulletLastUsed:!1;if(!e.ordered){const p=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&p&&(!p.children||!p.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),sI(n)===a&&p){let h=-1;for(;++h-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 u=n.createTracker(r);u.move(o+" ".repeat(a-o.length)),u.shift(a);const d=n.enter("listItem"),m=n.indentLines(n.containerFlow(e,u.current()),p);return d(),m;function p(h,g,y){return g?(y?"":" ".repeat(a))+h:(y?o:o+" ".repeat(a-o.length))+h}}function d7(e,t,n,r){const i=n.enter("paragraph"),o=n.enter("phrasing"),a=n.containerPhrasing(e,r);return o(),i(),a}const f7=Hm(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function m7(e,t,n,r){return(e.children.some(function(a){return f7(a)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function h7(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}oI.peek=p7;function oI(e,t,n,r){const i=h7(n),o=n.enter("strong"),a=n.createTracker(r),u=a.move(i+i);let d=a.move(n.containerPhrasing(e,{after:i,before:u,...a.current()}));const m=d.charCodeAt(0),p=im(r.before.charCodeAt(r.before.length-1),m,i);p.inside&&(d=yu(m)+d.slice(1));const h=d.charCodeAt(d.length-1),g=im(r.after.charCodeAt(0),h,i);g.inside&&(d=d.slice(0,-1)+yu(h));const y=a.move(i+i);return o(),n.attentionEncodeSurroundingInfo={after:g.outside,before:p.outside},u+d+y}function p7(e,t,n){return n.options.strong||"*"}function g7(e,t,n,r){return n.safe(e.value,r)}function x7(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 y7(e,t,n){const r=(sI(n)+(n.options.ruleSpaces?" ":"")).repeat(x7(n));return n.options.ruleSpaces?r.slice(0,-1):r}const aI={blockquote:H$,break:Dw,code:W$,definition:X$,emphasis:ZN,hardBreak:Dw,heading:J$,html:QN,image:JN,imageReference:eI,inlineCode:tI,link:rI,linkReference:iI,list:l7,listItem:u7,paragraph:d7,root:m7,strong:oI,text:g7,thematicBreak:y7};function v7(){return{enter:{table:b7,tableData:Ow,tableHeader:Ow,tableRow:k7},exit:{codeText:S7,table:_7,tableData:Xg,tableHeader:Xg,tableRow:Xg}}}function b7(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 _7(e){this.exit(e),this.data.inTable=void 0}function k7(e){this.enter({type:"tableRow",children:[]},e)}function Xg(e){this.exit(e)}function Ow(e){this.enter({type:"tableCell",children:[]},e)}function S7(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,w7));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function w7(e,t){return t==="|"?t:e}function C7(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:u}};function a(y,v,k,S){return m(p(y,k,S),y.align)}function u(y,v,k,S){const _=h(y,k,S),w=m([_]);return w.slice(0,w.indexOf(` -`))}function d(y,v,k,S){const _=k.enter("tableCell"),w=k.enter("phrasing"),C=k.containerPhrasing(y,{...S,before:o,after:o});return w(),_(),C}function m(y,v){return B$(y,{align:v,alignDelimiters:r,padding:n,stringLength:i})}function p(y,v,k){const S=y.children;let _=-1;const w=[],C=v.enter("table");for(;++_0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const V7={tokenize:Z7,partial:!0};function U7(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:Y7,continuation:{tokenize:X7},exit:K7}},text:{91:{name:"gfmFootnoteCall",tokenize:W7},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:G7,resolveTo:q7}}}}function G7(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 u;function u(d){if(!a||!a._balanced)return n(d);const m=Mi(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 q7(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)},u=[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,...u),e}function W7(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o=0,a;return u;function u(h){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),d}function d(h){return h!==94?n(h):(e.enter("gfmFootnoteCallMarker"),e.consume(h),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(h){if(o>999||h===93&&!a||h===null||h===91||gn(h))return n(h);if(h===93){e.exit("chunkString");const g=e.exit("gfmFootnoteCallString");return i.includes(Mi(r.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(h)}return gn(h)||(a=!0),o++,e.consume(h),h===92?p:m}function p(h){return h===91||h===92||h===93?(e.consume(h),o++,m):m(h)}}function Y7(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o,a=0,u;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",p):n(v)}function p(v){if(a>999||v===93&&!u||v===null||v===91||gn(v))return n(v);if(v===93){e.exit("chunkString");const k=e.exit("gfmFootnoteDefinitionLabelString");return o=Mi(r.sliceSerialize(k)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return gn(v)||(u=!0),a++,e.consume(v),v===92?h:p}function h(v){return v===91||v===92||v===93?(e.consume(v),a++,p):p(v)}function g(v){return v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),i.includes(o)||i.push(o),Ut(e,y,"gfmFootnoteDefinitionWhitespace")):n(v)}function y(v){return t(v)}}function X7(e,t,n){return e.check(Au,t,e.attempt(V7,t,n))}function K7(e){e.exit("gfmFootnoteDefinition")}function Z7(e,t,n){const r=this;return Ut(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 Q7(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,u){let d=-1;for(;++d1?d(v):(a.consume(v),h++,y);if(h<2&&!n)return d(v);const S=a.exit("strikethroughSequenceTemporary"),_=yl(v);return S._open=!_||_===2&&!!k,S._close=!k||k===2&&!!_,u(v)}}}class J7{constructor(){this.map=[]}add(t,n,r){eH(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 eH(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){const B=r.events[M][1].type;if(B==="lineEnding"||B==="linePrefix")M--;else break}const $=M>-1?r.events[M][1].type:null,W=$==="tableHead"||$==="tableRow"?I:d;return W===I&&r.parser.lazy[r.now().line]?n(A):W(A)}function d(A){return e.enter("tableHead"),e.enter("tableRow"),m(A)}function m(A){return A===124||(a=!0,o+=1),p(A)}function p(A){return A===null?n(A):ut(A)?o>1?(o=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),y):n(A):Mt(A)?Ut(e,p,"whitespace")(A):(o+=1,a&&(a=!1,i+=1),A===124?(e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),a=!0,p):(e.enter("data"),h(A)))}function h(A){return A===null||A===124||gn(A)?(e.exit("data"),p(A)):(e.consume(A),A===92?g:h)}function g(A){return A===92||A===124?(e.consume(A),h):h(A)}function y(A){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(A):(e.enter("tableDelimiterRow"),a=!1,Mt(A)?Ut(e,v,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(A):v(A))}function v(A){return A===45||A===58?S(A):A===124?(a=!0,e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),k):O(A)}function k(A){return Mt(A)?Ut(e,S,"whitespace")(A):S(A)}function S(A){return A===58?(o+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(A),e.exit("tableDelimiterMarker"),_):A===45?(o+=1,_(A)):A===null||ut(A)?N(A):O(A)}function _(A){return A===45?(e.enter("tableDelimiterFiller"),w(A)):O(A)}function w(A){return A===45?(e.consume(A),w):A===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(A),e.exit("tableDelimiterMarker"),C):(e.exit("tableDelimiterFiller"),C(A))}function C(A){return Mt(A)?Ut(e,N,"whitespace")(A):N(A)}function N(A){return A===124?v(A):A===null||ut(A)?!a||i!==o?O(A):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(A)):O(A)}function O(A){return n(A)}function I(A){return e.enter("tableRow"),D(A)}function D(A){return A===124?(e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),D):A===null||ut(A)?(e.exit("tableRow"),t(A)):Mt(A)?Ut(e,D,"whitespace")(A):(e.enter("data"),T(A))}function T(A){return A===null||A===124||gn(A)?(e.exit("data"),D(A)):(e.consume(A),A===92?L:T)}function L(A){return A===92||A===124?(e.consume(A),T):T(A)}}function iH(e,t){let n=-1,r=!0,i=0,o=[0,0,0,0],a=[0,0,0,0],u=!1,d=0,m,p,h;const g=new J7;for(;++nn[2]+1){const v=n[2]+1,k=n[3]-n[2]-1;e.add(v,k,[])}}e.add(n[3]+1,0,[["exit",h,t]])}return i!==void 0&&(o.end=Object.assign({},Qa(t.events,i)),e.add(i,0,[["exit",o,t]]),o=void 0),o}function zw(e,t,n,r,i){const o=[],a=Qa(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 Qa(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const sH={name:"tasklistCheck",tokenize:aH};function oH(){return{text:{91:sH}}}function aH(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 gn(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"),u):n(d)}function u(d){return ut(d)?t(d):Mt(d)?e.check({tokenize:lH},t,n)(d):n(d)}}function lH(e,t,n){return Ut(e,r,"whitespace");function r(i){return i===null?n(i):t(i)}}function cH(e){return jN([D7(),U7(),Q7(e),nH(),oH()])}const uH={};function dH(e){const t=this,n=e||uH,r=t.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),o=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),a=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(cH(n)),o.push(T7()),a.push(R7(n))}const fH=30,Kg=10;function mH({className:e,children:t}){const[n,r]=j.useState(!1),[i,o]=j.useState(!1),a=String(t).replace(/\n$/,""),u=e?.replace("language-","")||"",d=a.split(` -`),m=d.length>fH,p=m?d.length-Kg*2:0,h=j.useCallback(()=>{navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),1500)},[a]);return c.jsxs("div",{className:"code-block-wrap",children:[c.jsxs("div",{className:"code-block-header",children:[c.jsxs("span",{className:"code-block-lang",children:[u||"code",m?` (${d.length} lines)`:""]}),c.jsx("button",{className:"code-block-copy",onClick:h,children:n?c.jsxs(c.Fragment,{children:[c.jsx(Nl,{})," ",c.jsx("span",{children:"Copied"})]}):c.jsxs(c.Fragment,{children:[c.jsx(Cm,{})," ",c.jsx("span",{children:"Copy"})]})})]}),c.jsx("pre",{children:c.jsx("code",{className:e,children:m&&!i?c.jsxs(c.Fragment,{children:[d.slice(0,Kg).join(` -`)+` -`,c.jsxs("span",{className:"code-block-omitted",onClick:()=>o(!0),children:["... +",p," lines (click to expand)"]}),` -`+d.slice(-Kg).join(` -`)]}):a})}),m&&i&&c.jsxs("button",{className:"code-block-collapse-btn",onClick:()=>o(!1),children:["Collapse (",d.length," lines)"]})]})}const hH={code({className:e,children:t,...n}){return e?.startsWith("language-")?c.jsx(mH,{className:e,children:t}):c.jsx("code",{className:e,...n,children:t})}},pH=3e3,gH=60,Zg=800;function Pw(e){if(e.length>pH)return!0;let t=0;for(let n=0;n=gH)return!0;return!1}function xH(e){const t=e.lastIndexOf(` -`,Zg);return e.slice(0,t>Zg/2?t:Zg)}const sr=St.memo(function({content:t,className:n="msg-content-agent",collapseMode:r="auto"}){const i=r!=="never"&&Pw(t),[o,a]=j.useState(i);j.useEffect(()=>{a(r!=="never"&&Pw(t))},[r,t]);const u=o?xH(t):t,d=t.split(` -`).length,m=t.length;return c.jsxs("div",{className:n,children:[c.jsx(Q9,{remarkPlugins:[dH],components:hH,children:u}),i&&o&&c.jsxs("button",{className:"msg-collapse-toggle",onClick:()=>a(!1),children:["Show more (",d," lines, ",(m/1e3).toFixed(1),"k chars)"]}),i&&!o&&c.jsx("button",{className:"msg-collapse-toggle",onClick:()=>a(!0),children:"Show less"})]})}),Bw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},vu="codex",Qg="native",yH=["codex","native","claude_code","cursor","opencode"],vH=["native","codex","claude_code","cursor","opencode"];function gI(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 xI(e){const t=gI(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(m=>String(m??"").trim()).filter(Boolean)),u=t.map(m=>{const p=String(m.employee_id??"").trim(),h=String(m.employee_name??p).trim()||p,g=String(m.role_id??"").trim(),y=String(m.category??"").trim(),v=[g,y].filter(Boolean).join(" · ")||p;return{kind:"employee",id:p,name:h,subtitle:v,category:y,searchText:`${p} ${h} ${g} ${y} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(p)||g===r?0:2}}).filter(m=>m.id).sort((m,p)=>m.rank-p.rank||m.name.localeCompare(p.name)),d=n.map(m=>{const p=String(m.template_id??"").trim(),h=String(m.template_name??p).trim()||p,g=String(m.category??"").trim(),y=[g,p].filter(Boolean).join(" · ")||p,v=`${p} ${h} ${g} ${(m.domains??[]).join(" ")} ${(m.tags??[]).join(" ")}`.toLowerCase(),k=o.split(/[^a-z0-9]+/).filter(S=>S.length>=3).reduce((S,_)=>S+(v.includes(_)?1:0),0);return{kind:"template",id:p,name:h,subtitle:y,category:g,searchText:v,rank:k}}).filter(m=>m.id).sort((m,p)=>p.rank-m.rank||m.name.localeCompare(p.name));return[...u,...d,{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=xI(t);return e.find(r=>`${r.kind}:${r.id}`===n)??e[0]}function kH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(r=>e.searchText.includes(r))}function SH(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??vu,selected_agent:t.selected_agent??t.default_agent??vu,default_source:"recruitment"}}).filter(t=>t.role_id)}function wH(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 $w(e,t){const n={},r=e.staffing_selections??{};for(const i of t){const o=String(i.role_id??"").trim();o&&(n[o]=gI(r[o]??i.default_selection))}return n}function Hw(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??vu)}return r}function CH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.checkpoint_reply_kind??"").trim())}const yI=St.memo(function({meta:t,onReply:n,responded:r}){const i=t.proposals??[],o=j.useMemo(()=>{const L={};for(const A of i){const M=String(A.role_id??"").trim();M&&(L[M]=A)}return L},[i]),a=j.useMemo(()=>t.staffing_roles?.length?t.staffing_roles:SH(i),[t.staffing_roles,i]),u=t.staffing_pool?.employees??[],d=t.staffing_pool?.templates??[],m=t.recruitment_rationales??[],p=j.useMemo(()=>{const L={};for(const A of a){const M=String(A.role_id??"").trim();M&&(L[M]=bH(A,u,d))}return L},[u,a,d]),[h,g]=j.useState({}),[y,v]=j.useState(""),[k,S]=j.useState(()=>$w(t,a)),[_,w]=j.useState(()=>Hw(t,a)),[C,N]=j.useState(t.recruitment_agent??Qg),O=r;j.useEffect(()=>{!O||!CH(t)||(S($w(t,a)),w(Hw(t,a)),N(t.recruitment_agent??Qg))},[O,t,a]),j.useEffect(()=>{N(t.recruitment_agent??Qg)},[t.recruitment_agent]);const I=j.useCallback(L=>{const A=String(t.checkpoint_id??"").trim();if(!A)throw new Error("Recruitment checkpoint reply requires checkpoint_id metadata.");const M=String(t.checkpoint_type??"").trim();return{response_to_checkpoint_id:A,response_to_checkpoint_type:M||"company_recruitment_confirmation",checkpoint_reply_kind:L,staffing_selections:k,recruitment_agent:C,recruitment_role_agents:a.reduce(($,W)=>{const B=String(W.role_id??"").trim();return B&&($[B]=_[B]??W.selected_agent??W.default_agent??vu),$},{})}},[t.checkpoint_id,t.checkpoint_type,C,_,a,k]),D=j.useCallback(()=>{O||n("approve",I("approve"))},[I,O,n]),T=j.useCallback(()=>{O||!y.trim()||(n(y.trim(),I("feedback")),v(""))},[I,O,y,n]);return c.jsxs("div",{className:"ckpt-panel ckpt-recruitment",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-recruit",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.jsx("circle",{cx:"6",cy:"5",r:"3"}),c.jsx("path",{d:"M2 14c0-2.2 1.8-4 4-4s4 1.8 4 4"}),c.jsx("path",{d:"M12 5v4M10 7h4"})]})}),c.jsx("div",{className:"ckpt-title",children:"Recruitment Review"}),c.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),O&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&c.jsx("div",{className:"ckpt-summary",children:t.summary}),c.jsxs("div",{className:"ckpt-recruiter-agent",children:[c.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruitment-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),c.jsx("select",{id:`recruitment-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:C,onChange:L=>N(L.target.value),disabled:O,children:vH.map(L=>c.jsx("option",{value:L,children:Bw[L]},L))})]}),m.length>0&&c.jsx("div",{className:"ckpt-recruitment-reasons",children:m.map(L=>c.jsxs("div",{className:"ckpt-recruitment-reason",children:[c.jsxs("div",{className:"ckpt-proposal-header",children:[c.jsx("span",{className:"ckpt-role-name",children:L.role_id}),L.role_label&&L.role_label!==L.role_id&&c.jsx("span",{className:"ckpt-field-tag",children:L.role_label}),L.selection_label&&c.jsx("span",{className:"ckpt-badge ckpt-badge-template",children:L.selection_label})]}),L.rationale&&c.jsx("div",{className:"ckpt-rationale",children:L.rationale})]},L.role_id))}),c.jsx("div",{className:"ckpt-staffing-grid",children:a.map(L=>{const A=String(L.role_id??"").trim(),M=p[A]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],$=_H(M,k[A]),W=o[A],B=h[A]??"",U=M.filter(H=>kH(H,B)).slice(0,8);return c.jsxs("div",{className:"ckpt-staffing-card",children:[c.jsxs("div",{className:"ckpt-proposal-header",children:[c.jsx("span",{className:"ckpt-role-name",children:A}),c.jsx("span",{className:`ckpt-badge ckpt-badge-${$.kind}`,children:$.kind})]}),L.role_label&&L.role_label!==A&&c.jsx("div",{className:"ckpt-role-labels",children:c.jsx("span",{className:"ckpt-field-tag",children:L.role_label})}),c.jsxs("div",{className:"ckpt-staffing-selected",children:[c.jsx("div",{className:"ckpt-cand-name",children:wH(W,$)}),c.jsxs("div",{className:"ckpt-cand-meta",children:[c.jsx("span",{className:"ckpt-cand-category",children:$.category}),c.jsx("span",{className:"ckpt-domain-tag",children:$.subtitle})]})]}),c.jsx("input",{className:"ckpt-staffing-search",value:B,onChange:H=>g(V=>({...V,[A]:H.target.value})),placeholder:"Search employees or templates...",disabled:O}),c.jsx("div",{className:"ckpt-staffing-options",children:U.map(H=>{const V=`${H.kind}:${H.id}`===xI(k[A]);return c.jsxs("button",{className:`ckpt-staffing-option${V?" active":""}`,onClick:()=>S(Y=>({...Y,[A]:{kind:H.kind,id:H.id}})),disabled:O,title:H.subtitle,children:[c.jsx("span",{className:"ckpt-staffing-option-kind",children:H.kind}),c.jsx("span",{className:"ckpt-staffing-option-name",children:H.name})]},`${H.kind}:${H.id}`)})}),c.jsxs("div",{className:"ckpt-agent-picker",children:[c.jsx("label",{className:"ckpt-agent-label",htmlFor:`recruit-agent-${t.checkpoint_id}-${A}`,children:"Execution Agent"}),c.jsx("select",{id:`recruit-agent-${t.checkpoint_id}-${A}`,className:"ckpt-agent-select",value:_[A]??L.selected_agent??L.default_agent??vu,onChange:H=>w(V=>({...V,[A]:H.target.value})),disabled:O,children:yH.map(H=>c.jsx("option",{value:H,children:Bw[H]},H))})]})]},A)})}),!O&&c.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:D,children:"Approve"}),c.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback to refine recruitment...",value:y,onChange:L=>v(L.target.value),rows:2}),c.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:T,disabled:!y.trim(),children:"Send Feedback"})]})]})}),Fw={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},Ky="codex",Jg="native",jH=["codex","native","claude_code","cursor","opencode"],EH=["native","codex","claude_code","cursor","opencode"];function vI(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 bI(e){const t=vI(e);return t.kind==="fallback"?"fallback:":`${t.kind}:${t.id??""}`}function NH(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(p=>String(p??"").trim()).filter(Boolean)),u=p=>{const h=`${p.template_id??""} ${p.template_name??""} ${p.category??""} ${(p.domains??[]).join(" ")} ${(p.tags??[]).join(" ")}`.toLowerCase(),g=String(p.category??"").toLowerCase();let y=0;for(const v of o.split(/[^a-z0-9]+/).filter(k=>k.length>=3))(h.includes(v)||g&&v.includes(g))&&(y+=1);return(h.includes(r.replace(/_/g,"-"))||h.includes(r.replace(/_/g," ")))&&(y+=2),y},d=t.map(p=>{const h=String(p.employee_id??"").trim(),g=String(p.employee_name??h).trim()||h,y=String(p.role_id??"").trim(),v=String(p.category??"").trim(),k=[y,v].filter(Boolean).join(" · ")||h;return{kind:"employee",id:h,name:g,subtitle:k,category:v,searchText:`${h} ${g} ${y} ${v} ${(p.domains??[]).join(" ")} ${(p.tags??[]).join(" ")}`.toLowerCase(),rank:a.has(h)||y===r?0:2}}).filter(p=>p.id).sort((p,h)=>p.rank-h.rank||p.name.localeCompare(h.name)),m=n.map(p=>{const h=String(p.template_id??"").trim(),g=String(p.template_name??h).trim()||h,y=String(p.category??"").trim(),v=[y,h].filter(Boolean).join(" · ")||h;return{kind:"template",id:h,name:g,subtitle:v,category:y,searchText:`${h} ${g} ${y} ${(p.domains??[]).join(" ")} ${(p.tags??[]).join(" ")}`.toLowerCase(),rank:u(p)}}).filter(p=>p.id).sort((p,h)=>h.rank-p.rank||p.name.localeCompare(h.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 IH(e,t){const n=bI(t);return e.find(r=>`${r.kind}:${r.id}`===n)??e[0]}function TH(e,t){const n=t.toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?!0:n.every(r=>e.searchText.includes(r))}function Vw(e,t){const n={},r=e.staffing_selections??{};for(const i of t){const o=String(i.role_id??"").trim();o&&(n[o]=vI(r[o]??i.default_selection))}return n}function Uw(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??Ky)}return r}function RH(e){return!!(String(e.checkpoint_response_message_id??"").trim()||String(e.checkpoint_responded_at??"").trim()||String(e.staffing_action??"").trim())}const _I=St.memo(function({meta:t,onReply:n,responded:r}){const i=j.useMemo(()=>t.staffing_roles??[],[t.staffing_roles]),o=t.staffing_pool?.employees??[],a=t.staffing_pool?.templates??[],u=j.useMemo(()=>{const O={};for(const I of i){const D=String(I.role_id??"").trim();D&&(O[D]=NH(I,o,a))}return O},[o,i,a]),[d,m]=j.useState({}),[p,h]=j.useState(()=>Vw(t,i)),[g,y]=j.useState(()=>Uw(t,i)),[v,k]=j.useState(t.recruitment_agent??Jg),S=r,_=t.recommended_action==="auto_recruit"&&a.length>0;j.useEffect(()=>{!S||!RH(t)||(h(Vw(t,i)),y(Uw(t,i)),k(t.recruitment_agent??Jg))},[S,t,i]),j.useEffect(()=>{k(t.recruitment_agent??Jg)},[t.recruitment_agent]);const w=j.useCallback(O=>{const I=String(t.checkpoint_id??"").trim();if(!I)throw new Error("Staffing checkpoint reply requires checkpoint_id metadata.");return{response_to_checkpoint_id:I,response_to_checkpoint_type:"company_staffing_selection",staffing_action:O,staffing_selections:p,recruitment_agent:v,recruitment_role_agents:i.reduce((D,T)=>{const L=String(T.role_id??"").trim();return L&&(D[L]=g[L]??T.selected_agent??T.default_agent??Ky),D},{})}},[t.checkpoint_id,v,g,i,p]),C=j.useCallback(()=>{S||n("approve",w("manual_approve"))},[w,S,n]),N=j.useCallback(()=>{S||n("auto recruit",w("auto_recruit"))},[w,S,n]);return c.jsxs("div",{className:"ckpt-panel ckpt-staffing",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-staffing",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.jsx("path",{d:"M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"}),c.jsx("path",{d:"M1.5 14c.6-2.5 2.2-4 4.5-4s3.9 1.5 4.5 4"}),c.jsx("path",{d:"M12.5 3.5v5M10 6h5"})]})}),c.jsx("div",{className:"ckpt-title",children:"Manual Staffing"}),c.jsx("span",{className:"ckpt-badge ckpt-badge-profile",children:t.company_profile||"corporate"}),_&&!S&&c.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"Recruit recommended"}),S&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),t.summary&&c.jsx("div",{className:"ckpt-summary",children:t.summary}),c.jsxs("div",{className:"ckpt-recruiter-agent",children:[c.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-recruiter-agent-${t.checkpoint_id}`,children:"Recruiter Agent"}),c.jsx("select",{id:`staffing-recruiter-agent-${t.checkpoint_id}`,className:"ckpt-agent-select",value:v,onChange:O=>k(O.target.value),disabled:S,children:EH.map(O=>c.jsx("option",{value:O,children:Fw[O]},O))})]}),c.jsx("div",{className:"ckpt-staffing-grid",children:i.map(O=>{const I=String(O.role_id??"").trim(),D=u[I]??[{kind:"fallback",id:"",name:"Fallback role-only",subtitle:"No employee override",category:"fallback",searchText:"fallback role only no employee override"}],T=IH(D,p[I]),L=d[I]??"",A=D.filter(M=>TH(M,L)).slice(0,8);return c.jsxs("div",{className:"ckpt-staffing-card",children:[c.jsxs("div",{className:"ckpt-proposal-header",children:[c.jsx("span",{className:"ckpt-role-name",children:I}),c.jsx("span",{className:`ckpt-badge ckpt-badge-${T.kind}`,children:T.kind})]}),O.role_label&&O.role_label!==I&&c.jsx("div",{className:"ckpt-role-labels",children:c.jsx("span",{className:"ckpt-field-tag",children:O.role_label})}),c.jsxs("div",{className:"ckpt-staffing-selected",children:[c.jsx("div",{className:"ckpt-cand-name",children:T.name}),c.jsxs("div",{className:"ckpt-cand-meta",children:[c.jsx("span",{className:"ckpt-cand-category",children:T.category}),c.jsx("span",{className:"ckpt-domain-tag",children:T.subtitle})]})]}),c.jsx("input",{className:"ckpt-staffing-search",value:L,onChange:M=>m($=>({...$,[I]:M.target.value})),placeholder:"Search employees or templates...",disabled:S}),c.jsx("div",{className:"ckpt-staffing-options",children:A.map(M=>{const $=`${M.kind}:${M.id}`===bI(p[I]);return c.jsxs("button",{className:`ckpt-staffing-option${$?" active":""}`,onClick:()=>h(W=>({...W,[I]:{kind:M.kind,id:M.id}})),disabled:S,title:M.subtitle,children:[c.jsx("span",{className:"ckpt-staffing-option-kind",children:M.kind}),c.jsx("span",{className:"ckpt-staffing-option-name",children:M.name})]},`${M.kind}:${M.id}`)})}),c.jsxs("div",{className:"ckpt-agent-picker",children:[c.jsx("label",{className:"ckpt-agent-label",htmlFor:`staffing-agent-${t.checkpoint_id}-${I}`,children:"Execution Agent"}),c.jsx("select",{id:`staffing-agent-${t.checkpoint_id}-${I}`,className:"ckpt-agent-select",value:g[I]??O.selected_agent??O.default_agent??Ky,onChange:M=>y($=>({...$,[I]:M.target.value})),disabled:S,children:jH.map(M=>c.jsx("option",{value:M,children:Fw[M]},M))})]})]},I)})}),!S&&c.jsx("div",{className:"ckpt-actions",children:_?c.jsxs(c.Fragment,{children:[c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:N,children:"Auto Recruit"}),c.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:C,children:"Approve Selections"})]}):c.jsxs(c.Fragment,{children:[c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:C,children:"Approve Selections"}),a.length>0&&c.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:N,children:"Auto Recruit"})]})})]})}),AH={task_adjustment:"Task Adjustment",runtime_replan:"Runtime Replan",org_mutation:"Org Mutation"},Gw={low:"var(--green)",medium:"var(--yellow)",high:"var(--red)"},kI=St.memo(function({meta:t,onReply:n,responded:r}){const i=r,o=j.useCallback(()=>{i||n("approve")},[i,n]),a=j.useCallback(()=>{i||n("deny")},[i,n]),u=t.role_changes??[],d=t.work_item_projection_changes??[],m=t.scope||"org_mutation",p=t.risk_level||"medium",h=t.impact_summary||{};return c.jsxs("div",{className:"ckpt-panel ckpt-reorg",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-reorg",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.jsx("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1"}),c.jsx("rect",{x:"10",y:"1",width:"5",height:"5",rx:"1"}),c.jsx("rect",{x:"5.5",y:"10",width:"5",height:"5",rx:"1"}),c.jsx("path",{d:"M3.5 6v2.5a1 1 0 001 1h7a1 1 0 001-1V6"}),c.jsx("path",{d:"M8 9.5V10"})]})}),c.jsx("div",{className:"ckpt-title",children:t.title||"Company Reorg"}),i&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),c.jsxs("div",{className:"ckpt-reorg-badges",children:[c.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:AH[m]||m}),c.jsxs("span",{className:"ckpt-badge",style:{color:Gw[p]||"var(--text-secondary)",borderColor:Gw[p]||"var(--border)"},children:["Risk: ",p.charAt(0).toUpperCase()+p.slice(1)]})]}),t.summary&&c.jsx("div",{className:"ckpt-summary",children:t.summary}),t.rationale&&c.jsx("div",{className:"ckpt-rationale",children:t.rationale}),u.length>0&&c.jsxs("div",{className:"ckpt-changes-section",children:[c.jsx("div",{className:"ckpt-changes-title",children:"Role Changes"}),u.map((g,y)=>c.jsxs("div",{className:"ckpt-change-row",children:[c.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),c.jsx("span",{className:"ckpt-change-id",children:g.role_id}),g.replacement_role_id&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"ckpt-change-arrow",children:"→"}),c.jsx("span",{className:"ckpt-change-id",children:g.replacement_role_id})]}),g.reason&&c.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},y))]}),d.length>0&&c.jsxs("div",{className:"ckpt-changes-section",children:[c.jsx("div",{className:"ckpt-changes-title",children:"Work Item Projection Changes"}),d.map((g,y)=>c.jsxs("div",{className:"ckpt-change-row",children:[c.jsx("span",{className:`ckpt-change-action ckpt-action-${g.action}`,children:g.action}),c.jsx("span",{className:"ckpt-change-id",children:g.work_item_projection_id}),g.replacement_work_item_projection_id&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"ckpt-change-arrow",children:"→"}),c.jsx("span",{className:"ckpt-change-id",children:g.replacement_work_item_projection_id})]}),g.reason&&c.jsx("span",{className:"ckpt-change-reason",children:g.reason})]},y))]}),Object.keys(h).length>0&&c.jsxs("div",{className:"ckpt-impact",children:[h.affected_tasks!=null&&c.jsxs("span",{children:["Tasks affected: ",h.affected_tasks]}),h.affected_roles!=null&&c.jsxs("span",{children:["Roles affected: ",h.affected_roles]}),h.migration_count!=null&&c.jsxs("span",{children:["Migrations: ",h.migration_count]})]}),!i&&c.jsxs("div",{className:"ckpt-actions",children:[c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:o,children:"Approve Reorg"}),c.jsx("button",{className:"ckpt-btn ckpt-btn-deny",onClick:a,children:"Deny"})]})]})}),MH=3e4;function DH(e){return e.split(` -`).map(t=>t.trim()).find(Boolean)??e}function OH(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 sm=St.memo(function({meta:t,onReply:n,responded:r}){const i=r,o=String(t.checkpoint_status??"").trim().toLowerCase(),a=OH(o),u=String(t.prompt??t.summary??""),d=j.useMemo(()=>u.split(` -`).map(O=>O.trim()).filter(Boolean),[u]),m=DH(u).replace(/^\[[^\]]+\]\s*/,"")||"Action Required",p=d.slice(1).join(` -`).trim(),h=String(t.summary??"").trim(),g=(t.options??[]).filter(O=>!!O?.id),y=j.useMemo(()=>(t.active_subagents??[]).filter(O=>!!O&&typeof O=="object"),[t.active_subagents]),v=j.useMemo(()=>(t.permission_requests??[]).filter(O=>!!O&&typeof O=="object"),[t.permission_requests]),k=String(t.worktree_path??"").trim(),S=y.length>0||v.length>0||!!k,[_,w]=j.useState(""),C=!!_&&!i;j.useEffect(()=>{if(!C)return;const O=window.setTimeout(()=>w(""),MH);return()=>window.clearTimeout(O)},[C,_]);const N=j.useCallback(O=>{i||C||(w(O.id),n(O.label||O.id))},[i,C,n]);return c.jsxs("div",{className:"ckpt-panel ckpt-escalation",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-escalation",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.jsx("path",{d:"M8 1.5L14.5 13H1.5L8 1.5Z"}),c.jsx("path",{d:"M8 5.5V9"}),c.jsx("circle",{cx:"8",cy:"11.5",r:"0.75",fill:"currentColor",stroke:"none"})]})}),c.jsx("div",{className:"ckpt-title",children:m}),c.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.escalation_type??"decision_needed").replace(/_/g," ")}),i&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:a})]}),h&&h!==m&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Summary"}),c.jsx(sr,{content:h,className:"ckpt-markdown"})]}),p&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Request"}),c.jsx(sr,{content:p,className:"ckpt-markdown"})]}),S&&c.jsxs("details",{className:"ckpt-runtime-details",children:[c.jsx("summary",{children:"Runtime State"}),c.jsxs("div",{className:"ckpt-runtime-body",children:[k&&c.jsxs("div",{children:["Worktree: ",c.jsx("code",{children:k})]}),y.length>0&&c.jsxs("div",{children:["Active subagents: ",y.length]}),v.length>0&&c.jsxs("div",{children:["Pending permission records: ",v.length]})]})]}),!i&&g.length>0&&c.jsx("div",{className:"ckpt-actions ckpt-escalation-actions",children:g.map(O=>c.jsx("button",{className:`ckpt-btn ${O.id.includes("deny")?"ckpt-btn-deny":"ckpt-btn-approve"}${C?" ckpt-btn-submitting":""}`,onClick:()=>N(O),disabled:C,children:C&&_===O.id?"Submitting…":O.label||O.id},O.id))}),C&&c.jsx("div",{className:"ckpt-escalation-hint",children:"Decision sent — waiting for server confirmation…"}),!i&&t.default_action&&c.jsxs("div",{className:"ckpt-escalation-hint",children:["Default on timeout: ",c.jsx("code",{children:t.default_action})]})]})});function LH(e){return e.split(` -`).map(t=>t.trim()).find(Boolean)??e}function zH(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 SI=St.memo(function({meta:t,onReply:n,responded:r}){const i=r,[o,a]=j.useState(""),[u,d]=j.useState(null),m=String(t.checkpoint_status??"").trim().toLowerCase(),p=zH(m),h=String(t.prompt??t.summary??"").trim(),y=`${String(t.work_item_projection_title??LH(h)??"Human Review").trim()||"Human Review"} (for self-evolution)`,v=String(t.summary??"").trim(),k=j.useMemo(()=>(t.active_subagents??[]).filter(T=>!!T&&typeof T=="object"),[t.active_subagents]),S=j.useMemo(()=>(t.permission_requests??[]).filter(T=>!!T&&typeof T=="object"),[t.permission_requests]),_=String(t.worktree_path??"").trim(),w=k.length>0||S.length>0||!!_,C=i||u!==null,N=j.useCallback((T,L="")=>{const A=String(t.checkpoint_id??"").trim();if(!A)throw new Error("Delivery self-evolution reply requires checkpoint_id metadata.");const M={response_to_checkpoint_id:A,response_to_checkpoint_type:"company_delivery_feedback",checkpoint_reply_kind:T};return(T==="approve"||T==="feedback")&&(M.self_evolution_trigger=!0,M.human_feedback_text=L),M},[t.checkpoint_id]),O=j.useCallback(()=>{if(C)return;const T=N("approve");d("approve"),n("I fully agree with this delivery.",T)},[C,N,n]),I=j.useCallback(()=>{const T=o.trim();if(C||!T)return;const L=N("feedback",T);d("feedback"),n(T,L),a("")},[C,N,o,n]),D=j.useCallback(()=>{if(C)return;const T=N("ignore");d("ignore"),n("Ignore this self-evolution review.",T)},[C,N,n]);return c.jsxs("div",{className:"ckpt-panel ckpt-delivery-feedback",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.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"}),c.jsx("path",{d:"M5.5 8.25L7.25 10l3.25-4"})]})}),c.jsx("div",{className:"ckpt-title",children:y}),c.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:String(t.feedback_scope??"final").replace(/_/g," ")}),i&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:p})]}),v&&v!==y&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Summary"}),c.jsx(sr,{content:v,className:"ckpt-markdown"})]}),h&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Review Request"}),c.jsx(sr,{content:h,className:"ckpt-markdown"})]}),w&&c.jsxs("details",{className:"ckpt-runtime-details",children:[c.jsx("summary",{children:"Runtime State"}),c.jsxs("div",{className:"ckpt-runtime-body",children:[_&&c.jsxs("div",{children:["Worktree: ",c.jsx("code",{children:_})]}),k.length>0&&c.jsxs("div",{children:["Active subagents: ",k.length]}),S.length>0&&c.jsxs("div",{children:["Pending permission records: ",S.length]})]})]}),!i&&c.jsxs("div",{className:"ckpt-actions ckpt-actions-inline-feedback",children:[c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:O,disabled:C,children:"Fully Agree"}),c.jsx("button",{className:"ckpt-btn ckpt-btn-cancel",onClick:D,disabled:C,children:"Ignore"}),c.jsx("textarea",{className:"ckpt-feedback-input ckpt-feedback-inline-input",placeholder:"Feedback for self-evolution...",value:o,onChange:T=>a(T.target.value),disabled:C,rows:2}),c.jsx("button",{className:"ckpt-btn ckpt-btn-feedback",onClick:I,disabled:C||!o.trim(),children:"Send Feedback"})]})]})}),sf="__other__",PH=["A","B","C"];function Ui(e){return String(e??"").trim()}function BH(e,t){const n=Ui(e.question),r=Ui(e.header);if(!n&&!r)return null;const i=(e.options??[]).slice(0,3).map((o,a)=>({id:Ui(o.id)||String.fromCharCode(97+a),label:Ui(o.label),description:Ui(o.description)})).filter(o=>o.label);return{id:Ui(e.id)||`question_${t+1}`,header:r,question:n||r,options:i,allow_freeform:e.allow_freeform!==!1,required:e.required!==!1}}const wI=St.memo(function({meta:t,onReply:n,responded:r}){const[i,o]=j.useState(""),[a,u]=j.useState({}),d=r,m=String(t.work_item_projection_title??t.work_item_projection_id??"Input Needed").trim()||"Input Needed",p=String(t.summary??"").trim(),h=String(t.prompt??"").trim(),g=String(t.context_note??"").trim(),y=String(t.resume_hint??"").trim(),v=j.useMemo(()=>(t.questions??[]).map(V=>String(V).trim()).filter(Boolean),[t.questions]),k=j.useMemo(()=>(t.input_questions??[]).map((V,Y)=>BH(V,Y)).filter(V=>V!==null),[t.input_questions]),S=k.some(V=>(V.options??[]).length>0),_=j.useMemo(()=>(t.required_fields??[]).map(V=>String(V).trim()).filter(Boolean),[t.required_fields]),w=j.useMemo(()=>(t.active_subagents??[]).filter(V=>!!V&&typeof V=="object"),[t.active_subagents]),C=j.useMemo(()=>(t.permission_requests??[]).filter(V=>!!V&&typeof V=="object"),[t.permission_requests]),N=String(t.worktree_path??"").trim(),O=String(t.requesting_role_id??"").trim(),I=String(t.requesting_task_id??"").trim(),D=String(t.requesting_work_item_id??"").trim(),T=String(t.seat_id??"").trim(),A=!!O||!!I||!!D||!!T||w.length>0||C.length>0||!!N,M=j.useCallback((V,Y)=>{u(Q=>({...Q,[V]:{freeformText:Q[V]?.freeformText??"",selectedOptionId:Y}}))},[]),$=j.useCallback((V,Y)=>{u(Q=>({...Q,[V]:{selectedOptionId:Q[V]?.selectedOptionId,freeformText:Y}}))},[]),W=j.useCallback(V=>{if(V.required===!1)return!0;const Y=a[V.id],Q=Y?.selectedOptionId;return!!(Q&&Q!==sf||V.allow_freeform!==!1&&Ui(Y?.freeformText))},[a]),B=S&&k.every(W),U=j.useCallback(()=>{const V=i.trim();d||!V||n(V)},[d,n,i]),H=j.useCallback(()=>{if(d||!B)return;const V={},Y=[];k.forEach(Q=>{const q=a[Q.id]??{freeformText:""},G=(Q.options??[]).find(te=>te.id===q.selectedOptionId),J=Ui(q.freeformText),X=[G?.label??"",J].filter(Boolean).join("; ");V[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:X};const ee=Ui(Q.header)||Ui(Q.question)||Q.id;Y.push(`- ${ee}: ${X||"(no answer)"}`)}),n(Y.join(` -`),{user_input_answers:V})},[a,B,k,d,n]);return c.jsxs("div",{className:"ckpt-panel ckpt-user-input",children:[c.jsxs("div",{className:"ckpt-header",children:[c.jsx("div",{className:"ckpt-icon ckpt-icon-user-input",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[c.jsx("path",{d:"M3 3.5h10v6H6.5L3 13V3.5Z"}),c.jsx("path",{d:"M5.5 6h5"}),c.jsx("path",{d:"M5.5 8h3.5"})]})}),c.jsx("div",{className:"ckpt-title",children:m}),c.jsx("span",{className:"ckpt-badge ckpt-badge-scope",children:"awaiting input"}),d&&c.jsx("span",{className:"ckpt-badge ckpt-badge-responded",children:"Responded"})]}),p&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Summary"}),c.jsx(sr,{content:p,className:"ckpt-markdown"})]}),h&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Request"}),c.jsx(sr,{content:h,className:"ckpt-markdown"})]}),S?c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Questions"}),c.jsx("div",{className:"ckpt-choice-list",children:k.map(V=>{const Y=a[V.id]??{freeformText:""},Q=V.options??[],q=V.allow_freeform!==!1,G=q&&(Q.length===0||Y.selectedOptionId===sf);return c.jsxs("div",{className:"ckpt-choice-question",children:[V.header&&c.jsx("div",{className:"ckpt-question-header",children:V.header}),c.jsx(sr,{content:V.question,className:"ckpt-markdown"}),Q.length>0&&c.jsxs("div",{className:"ckpt-choice-grid",children:[Q.map((J,P)=>{const X=Y.selectedOptionId===J.id;return c.jsxs("button",{className:`ckpt-choice-option${X?" is-selected":""}`,onClick:()=>M(V.id,J.id),children:[c.jsx("span",{className:"ckpt-choice-letter",children:PH[P]??"?"}),c.jsxs("span",{className:"ckpt-choice-copy",children:[c.jsx("span",{className:"ckpt-choice-label",children:J.label}),J.description&&c.jsx("span",{className:"ckpt-choice-desc",children:J.description})]})]},J.id)}),q&&c.jsxs("button",{className:`ckpt-choice-option${Y.selectedOptionId===sf?" is-selected":""}`,onClick:()=>M(V.id,sf),children:[c.jsx("span",{className:"ckpt-choice-letter",children:"D"}),c.jsxs("span",{className:"ckpt-choice-copy",children:[c.jsx("span",{className:"ckpt-choice-label",children:"Other"}),c.jsx("span",{className:"ckpt-choice-desc",children:"Enter a custom answer"})]})]})]}),G&&c.jsx("textarea",{className:"ckpt-feedback-input ckpt-other-field",placeholder:"Type your answer...",value:Y.freeformText,onChange:J=>$(V.id,J.target.value),rows:3})]},V.id)})})]}):v.length>0&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Questions"}),c.jsx("ul",{className:"ckpt-task-list",children:v.map(V=>c.jsx("li",{children:V},V))})]}),_.length>0&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Required Fields"}),c.jsx("div",{className:"ckpt-task-tags",children:_.map(V=>c.jsx("span",{className:"ckpt-field-tag",children:V},V))})]}),g&&c.jsxs("div",{className:"ckpt-section",children:[c.jsx("div",{className:"ckpt-section-title",children:"Context"}),c.jsx(sr,{content:g,className:"ckpt-markdown ckpt-markdown-muted"})]}),y&&c.jsx("div",{className:"ckpt-escalation-hint",children:y}),A&&c.jsxs("details",{className:"ckpt-runtime-details",children:[c.jsx("summary",{children:"Runtime State"}),c.jsxs("div",{className:"ckpt-runtime-body",children:[O&&c.jsxs("div",{children:["Requester: ",c.jsx("code",{children:O})]}),D&&c.jsxs("div",{children:["Work item: ",c.jsx("code",{children:D})]}),I&&c.jsxs("div",{children:["Task: ",c.jsx("code",{children:I})]}),T&&c.jsxs("div",{children:["Seat: ",c.jsx("code",{children:T})]}),N&&c.jsxs("div",{children:["Worktree: ",c.jsx("code",{children:N})]}),w.length>0&&c.jsxs("div",{children:["Active subagents: ",w.length]}),C.length>0&&c.jsxs("div",{children:["Pending permission records: ",C.length]})]})]}),!d&&c.jsxs("div",{className:"ckpt-feedback-area",children:[S?null:c.jsx("textarea",{className:"ckpt-feedback-input",placeholder:"Reply with the missing input to continue...",value:i,onChange:V=>o(V.target.value),rows:3}),c.jsx("div",{className:"ckpt-feedback-btns",children:c.jsx("button",{className:"ckpt-btn ckpt-btn-approve",onClick:S?H:U,disabled:S?!B:!i.trim(),children:"Send Reply"})})]})]})}),Zy={todo:"To do",in_progress:"In progress",in_review:"In review",done:"Done"};function ex(e,t){if(t&&t in Zy)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 of(e){return Zy[e]??Zy.todo}const qw={active:0,waiting:1,failed:2,done:3,pending:4};function $H(e){if(e.length===0)return"pending";let t=e[0],n=qw[t]??99;for(const r of e){const i=qw[r]??99;i12&&/^[0-9a-f-]+$/i.test(e.replace(/_/g,""))}function ol(e){return typeof e=="string"?e.trim():""}function tx(...e){for(const t of e){const n=ol(t);if(n)return n}return""}function FH(e){const t=ol(e);return t?HH[t]??J0(t):""}function VH(e){return e==="done"?c.jsx("span",{className:"wi-projection-icon",children:"✓"}):e==="active"?c.jsx("span",{className:"wi-projection-icon wi-projection-pulse",children:"●"}):e==="failed"?c.jsx("span",{className:"wi-projection-icon",children:"✗"}):e==="waiting"?c.jsx("span",{className:"wi-projection-icon",children:"●"}):null}const UH={active:"active",waiting:"waiting",pending:"pending",done:"done",failed:"failed"};function GH(e){return e?e==="in-progress"?"in_progress":e==="in-review"?"in_review":e:"todo"}function qH(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 WH(e){const t=ol(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 Qy({workItemLog:e,roleWorkItems:t,executorRoleWorkItems:n,childSessions:r,isCompanyRuntime:i=!1,onWorkItemClick:o}){const a=j.useMemo(()=>{const v=new Map;for(const k of r??[]){v.set(k.taskId,k);const S=ao(k);S&&v.set(S,k)}return v},[r]),u=j.useMemo(()=>{const v=new Map,k=[];for(const S of e){const _=ao(S),w=S.workItemProjectionId??_??"";if(!w)continue;if(!v.has(w)){k.push(w);const N=S.workItemProjectionTitle??w,O=S.roleName||(Ww(N)?"Agent":N);v.set(w,{projectionId:w,title:O,roleName:S.roleName,status:"pending",executionTurnId:_})}const C=v.get(w);switch(S.roleName?(C.roleName=S.roleName,C.title=S.roleName):S.workItemProjectionTitle&&!Ww(S.workItemProjectionTitle)&&(C.title=S.workItemProjectionTitle),_&&(C.executionTurnId=_),S.type){case"work_item_started":C.status="active";break;case"gate_approved":C.status="done";break;case"gate_rejected":C.status="active";break;case"awaiting_manager_review":case"awaiting_human":case"awaiting_review":case"awaiting_peer":C.status="waiting";break;case"work_item_failed":case"deadlock":C.status="failed";break}}for(const S of v.values()){if(!S.executionTurnId)continue;const _=a.get(S.executionTurnId);if(!_)continue;const w=Ig(_);w&&(S.title=w),_.workItemRoleName&&(S.roleName=_.workItemRoleName),_.status==="done"?S.status="done":_.status==="failed"&&(S.status="failed")}return k.map(S=>v.get(S))},[e,a]),d=j.useMemo(()=>{const v=new Map;for(const k of e){const S=ao(k);S&&!v.has(S)&&v.set(S,v.size)}return v},[e]),m=n??t,p=j.useMemo(()=>{if(!m)return[];const v=[];for(const k of Object.values(m)){if(!k||!Array.isArray(k.workItems)||k.workItems.length===0)continue;const _=[...k.workItems].sort((I,D)=>I.createdAt-D.createdAt).map(I=>{const D=GH(I.kanbanColumn),T=qH(I.phase);return{executionTurnId:I.executionTurnId??"",title:ol(I.title)||ol(I.executorRoleName)||ol(I.executorRoleId)||"Work item",status:T,statusLabel:of(D),columnId:D,updatedAt:I.updatedAt,workItemId:I.workItemId,progressLog:I.progressLog,activitySections:I.activitySections??[],isReviewTarget:I.isReviewTarget}}),w=UH[k.aggregatedStatus]??"pending",C=ex(w),N=_[_.length-1],O=[..._].reverse().find(I=>!!I.executionTurnId)?.executionTurnId??"";v.push({roleKey:k.roleKey,executionTurnId:N.executionTurnId||O,title:k.roleName||k.roleId,status:w,statusLabel:of(C),roleName:k.roleName,updatedAt:_.reduce((I,D)=>Math.max(I,D.updatedAt),0),turns:_,runtimeStatus:k.runtimeStatus})}return v.sort((k,S)=>{const _=k.turns[0]?.updatedAt??Number.POSITIVE_INFINITY,w=S.turns[0]?.updatedAt??Number.POSITIVE_INFINITY;return _-w}),v},[m]),h=j.useMemo(()=>{const v=[...r??[]];if(v.length===0)return[];const k=new Map,S=[];for(const w of v){const C=tx(w.workItemRoleId,w.assigneeIds[0],w.taskId);k.has(C)||(k.set(C,[]),S.push(C)),k.get(C).push(w)}S.sort((w,C)=>{const N=k.get(w)??[],O=k.get(C)??[],I=Math.min(...N.map(A=>d.get(ao(A)||A.taskId)??Number.POSITIVE_INFINITY)),D=Math.min(...O.map(A=>d.get(ao(A)||A.taskId)??Number.POSITIVE_INFINITY));if(I!==D)return I-D;const T=Math.min(...N.map(A=>A.updatedAt)),L=Math.min(...O.map(A=>A.updatedAt));return T-L});const _=[];for(const w of S){const C=k.get(w)??[];if(C.length===0)continue;const N=C.slice().sort((A,M)=>A.updatedAt-M.updatedAt).map(A=>{const M=WH(A),$=ao(A),W=ex(M,String(A.columnId??"").trim()||void 0);return{executionTurnId:$||A.taskId,title:tx(Ig(A),A.title,A.workItemRoleName,A.workItemRoleId,"Turn"),status:M,statusLabel:of(W),columnId:W,updatedAt:A.updatedAt}}),O=N[N.length-1],I=$H(N.map(A=>A.status)),D=ex(I),T=C[0],L=tx(T.workItemRoleName,T.workItemRoleId,T.assigneeIds[0],Ig(T),T.title,"Agent");_.push({roleKey:w,executionTurnId:O.executionTurnId,title:L,status:I,statusLabel:of(D),executionAgent:FH(T.selectedExecutionAgent??T.preferredAgent),roleName:T.workItemRoleName,updatedAt:Math.max(...C.map(A=>A.updatedAt)),turns:N})}return _},[r,d]),g=j.useMemo(()=>p.length>0?p:i?[]:h,[i,p,h]),y=j.useMemo(()=>g.length>0?g.map(v=>({projectionId:v.roleKey,title:v.title,roleName:v.roleName,status:v.status,executionTurnId:v.executionTurnId})):i?[]:u,[i,g,u]);return i&&g.length===0||e.length===0&&y.length===0&&g.length===0?null:c.jsxs("div",{className:"wi-progress-card",children:[c.jsxs("div",{className:"wi-progress-header",children:[c.jsx(jm,{}),c.jsx("span",{children:"Execution Progress"})]}),y.length>0&&c.jsx("div",{className:"wi-progress-pipeline",children:y.map((v,k)=>c.jsxs("div",{className:"wi-projection-group",children:[c.jsxs("button",{type:"button",className:`wi-projection-chip wi-projection-${v.status}`,onClick:()=>o?.(v.executionTurnId||""),title:`Open Runtime Session${v.roleName?`: ${v.title} (${v.roleName})`:`: ${v.title}`}`,children:[c.jsx("span",{className:"wi-projection-label",children:v.title}),VH(v.status)]}),ku.mime_type?.startsWith("image/")),r=e.filter(u=>u.mime_type?.startsWith("video/")),i=e.filter(u=>!u.mime_type?.startsWith("image/")&&!u.mime_type?.startsWith("video/")),o=n.length===1?"":(n.length<=3," cols-2"),a=r.length===1?"":(r.length<=3," cols-2");return c.jsxs("div",{className:"msg-attachments",children:[n.length>0&&c.jsx("div",{className:`msg-attachment-grid${o}`,children:n.map(u=>{const d=`/api/attachments/${u.attachment_id}/${u.filename}`;return c.jsx("img",{className:"msg-attachment-image",src:d,alt:u.filename,loading:"lazy",onClick:()=>t?.(d)},u.attachment_id)})}),r.length>0&&c.jsx("div",{className:`msg-attachment-grid${a}`,children:r.map(u=>{const d=`/api/attachments/${u.attachment_id}/${u.filename}`;return c.jsx("video",{className:"msg-attachment-video",src:d,controls:!0,preload:"metadata",playsInline:!0},u.attachment_id)})}),i.length>0&&c.jsx("div",{className:"msg-attachment-files",children:i.map(u=>c.jsxs("a",{className:"msg-attachment-file-chip",href:`/api/attachments/${u.attachment_id}/${u.filename}`,download:!0,title:u.filename,children:["📎 ",u.filename,c.jsx("span",{className:"msg-attachment-file-size",children:u.size_bytes<1024?`${u.size_bytes}B`:u.size_bytes<1048576?`${(u.size_bytes/1024).toFixed(0)}KB`:`${(u.size_bytes/1048576).toFixed(1)}MB`})]},u.attachment_id))})]})}const Yw=["#F59E0B","#10B981","#3B82F6","#8B5CF6","#EC4899","#06B6D4","#F97316","#6366F1"],Xw=new Map;function yv(e){const t=Xw.get(e);if(t)return t;let n=0;for(let i=0;id.toUpperCase());let a="●",u="active";return i.includes("gate passed")||i.includes("approved")||i.includes("completed")?(a="✓",u="passed"):i.includes("rejected")||i.includes("reworking")?(a="↻",u="rejected"):i.includes("failed")||i.includes("timed out")?(a="✗",u="failed"):i.includes("awaiting")&&(a="⏳",u="waiting"),{projectionId:n,workItemName:o,action:r,icon:a,statusClass:u}}const ZH={session:{icon:c.jsx(x4,{}),title:"New Conversation",hint:"Send a message to start working with your OPC system"},activity:{icon:c.jsx(Yj,{}),title:"Activity Feed",hint:"Agent activity across all sessions will appear here."},secretary:{icon:c.jsx(au,{}),title:"Secretary",hint:"Manage policies, rules, and preferences for your agents."}},QH=5*6e4,Kw=200,nx=200,JH=96,eF=1,tF=700;function Zw(e){return e.scrollHeight-e.scrollTop-e.clientHeight"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 iF(e,t){return t==="full"?!0:String(e.metadata?.detail_visibility??"summary").trim()!=="full"}function sF(e){return String(e.metadata?.transcript_kind??"").trim()==="runtime_v2_user_turn"}function nu(e){return e.replace(/\s+/g," ").trim()}function oF(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 aF(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 Qw(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 lF(e){const t=String(e||"").trim();if(!t)return null;if(t.startsWith("{")&&t.endsWith("}")){const u=Qw(t);return u?{obj:u}: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=Qw(t.slice(n,r+1));return a?{obj:a,title:o||void 0}:null}function al(e){return typeof e=="string"?e.trim():""}function Jw(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?al(r.summary):"";if(i&&n.push(i),n.length>=t)break}return n}function cF(e){if(!Array.isArray(e))return[];const t=[];for(const n of e){if(!n||typeof n!="object")continue;const r=n,i=al(r.path),o=al(r.name)||i.split("/").filter(Boolean).pop()||"Artifact";t.push({name:o,path:i,status:al(r.status)||void 0})}return t}function uF(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 CI(e){const t=lF(e);if(!t)return null;const{obj:n,title:r}=t,i=al(n.summary),o=al(n.review_verdict),a=cF(n.deliverables),u=Jw(n.risks),d=Jw(n.next_actions),m=uF(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:u,nextActions:d,acceptanceSummary:m}}const dF=St.memo(function({entry:t,showDate:n,dateStr:r,compact:i=!1}){return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("div",{className:`msg-row agent msg-row-inline-progress${i?" compact":""}`,children:[c.jsx("div",{className:"msg-avatar agent-avatar",children:c.jsx(co,{})}),c.jsx("div",{className:"msg-body msg-inline-progress-body",children:c.jsx("div",{className:"msg-inline-progress-shell",children:c.jsx(dN,{entry:t})})})]})]})}),fF=St.memo(function({msg:t,showDate:n,dateStr:r}){const i=KH(t.content);return i?c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("div",{className:`work-item-divider work-item-divider-${i.statusClass}`,children:[c.jsx("div",{className:"work-item-divider-line"}),c.jsxs("span",{className:"work-item-divider-label",children:[c.jsx("span",{className:"work-item-divider-icon",children:i.icon}),i.workItemName,c.jsx("span",{className:"work-item-divider-action",children:i.action})]}),c.jsx("div",{className:"work-item-divider-line"})]})]}):null}),mF=St.memo(function({msg:t,showDate:n,dateStr:r}){return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsx("div",{className:"msg-system",children:c.jsx("span",{children:t.content})})]})}),hF=St.memo(function({msg:t,showDate:n,dateStr:r}){return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("div",{className:"msg-row agent msg-row-context",children:[c.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-context",children:c.jsx(au,{})}),c.jsx("div",{className:"msg-body",children:c.jsxs("div",{className:"msg-content-agent-card msg-context-card",children:[c.jsx("div",{className:"msg-context-label",children:"Execution Context"}),c.jsx(sr,{content:t.content})]})})]})]})}),pF=St.memo(function({text:t,timestamp:n,iteration:r,showDate:i,dateStr:o}){return c.jsxs("div",{children:[i&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:o})}),c.jsxs("div",{className:"msg-row agent msg-row-draft",children:[c.jsx("div",{className:"msg-avatar agent-avatar msg-avatar-draft",children:c.jsx(co,{})}),c.jsxs("div",{className:"msg-body",children:[c.jsxs("div",{className:"msg-agent-header",children:[c.jsx("span",{className:"msg-sender",children:"Live Reply"}),c.jsx("span",{className:"msg-time",title:Zi(n),children:Es(n)})]}),c.jsxs("div",{className:"msg-content-agent-card msg-draft-card",children:[r?c.jsxs("div",{className:"msg-draft-label",children:["Turn ",r]}):null,c.jsx(sr,{content:t,collapseMode:"never"})]})]})]})]})}),gF=St.memo(function({msg:t,showDate:n,dateStr:r,isGrouped:i,isCopied:o,onCopy:a,onImageClick:u,renderUserMarkdown:d}){return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsx("div",{className:`msg-row user${i?" grouped":""}`,children:c.jsxs("div",{className:"msg-body msg-body-user",children:[c.jsx("div",{className:"msg-content-user",children:d?c.jsx(sr,{content:t.content,className:"msg-content-user-markdown"}):t.content}),c.jsx(YH,{refs:t.metadata?.attachment_refs,onImageClick:u}),c.jsxs("div",{className:"msg-meta-user",children:[c.jsx("span",{className:"msg-time",title:Zi(t.timestamp),children:Es(t.timestamp)}),c.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy",children:o?c.jsx(Nl,{}):c.jsx(Cm,{})})]})]})})]})});function jI(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=([^|]+?)(?:\||$)/),p=m?m[1].trim():"";return{kind:"delegation",label:`Delegating to ${d}`,summary:p,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:nu(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",p=o[2].trim(),h=p.toLowerCase(),g=h.includes("completed")||h.includes("done")?"success":h.includes("blocked")||h.includes("failed")?"warning":"info";return{kind:"company_event",label:`${m.toUpperCase()} · ${d[1]??""}`.replace(/ · $/,""),summary:p,tone:g}}const a=t.match(/^(Review needed|Status digest|Blocked|Completion):\s*(.+)$/i);if(a){const d=a[1].replace(/\b\w/g,p=>p.toUpperCase()),m=nu(a[2]);return{kind:"company_event",label:d,summary:m,tone:/^Blocked$/i.test(a[1])?"warning":"info"}}const u=t.match(/^NO_DELEGATION_JUSTIFICATION:\s*(.+)$/i);return u?{kind:"company_event",label:"Delegation check",summary:nu(u[1]).slice(0,180),tone:"info"}:null}function xF(e,t){const{isCompanyRuntime:n,detailMode:r}=t;if(!n||r==="full"||lu(e.metadata))return null;const i=jI(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 yF(e,t={}){const{isCompanyRuntime:n=!1,detailMode:r="summary"}=t,i=[];let o=[],a=0;const u=new Set,d=new Set,m=()=>{if(o.length===0)return;const p=o[0].msg,h=o[o.length-1].msg;i.push({kind:"ops-bundle",id:`ops:${p.id}:${o.length}:${h.id}`,timestamp:p.timestamp,events:o,sortOrder:a}),o=[]};return e.forEach((p,h)=>{const g=h*2+1,y=xF(p,{isCompanyRuntime:n,detailMode:r});if(y){o.length===0&&(a=g),o.push(y);return}const v=r==="summary"?CI(p.content):null;if(v){const k=[p.sender,Math.round(p.timestamp/1e3),v.kind,nu(v.summary||v.acceptanceSummary||"").slice(0,500),v.verdict??"",v.deliverables.map(S=>`${S.name}:${S.path}`).join("|").slice(0,800)].join("");if(u.has(k))return;u.add(k)}if(r==="summary"){const k=nu(oF(p.content)).slice(0,1200);if(k){const S=aF(p)?["result",k].join(""):[p.sender,Math.round(p.timestamp/1e3),k].join("");if(d.has(S))return;d.add(S)}}m(),i.push({kind:"message",id:p.id,timestamp:p.timestamp,msg:p,sortOrder:g})}),m(),i}const vF=St.memo(function({msg:t,showDate:n,dateStr:r,classification:i}){const[o,a]=j.useState(!1),u=t.content.trim()!==`[${i.label}] ${i.summary}`.trim()&&t.content.trim().length>i.summary.length+4;return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("div",{className:`msg-ops-row msg-ops-tone-${i.tone}${o?" expanded":""}`,onClick:u?()=>a(d=>!d):void 0,role:u?"button":void 0,tabIndex:u?0:-1,children:[c.jsx("span",{className:"msg-ops-dot","aria-hidden":"true"}),c.jsx("span",{className:"msg-ops-label",children:i.label}),i.summary&&c.jsx("span",{className:"msg-ops-summary",title:i.summary,children:i.summary}),c.jsx("span",{className:"msg-ops-time",title:Zi(t.timestamp),children:Es(t.timestamp)}),u&&c.jsx("span",{className:`msg-ops-chevron${o?" open":""}`,"aria-hidden":"true",children:c.jsx(Yi,{down:o})})]}),u&&o&&c.jsx("div",{className:"msg-ops-details",children:c.jsx("pre",{className:"msg-ops-details-pre",children:t.content})})]})}),bF=St.memo(function({events:t,showDate:n,dateStr:r}){const[i,o]=j.useState(!1);if(t.length===0)return null;const a=t[0].msg,u=t[t.length-1].msg,d=t.reduce((h,g)=>{const y=g.classification.kind==="company_event"?"company":g.classification.kind.startsWith("external")?"runtime":"delegation";return h[y]=(h[y]??0)+1,h},{}),m=Object.entries(d).map(([h,g])=>`${g} ${h}`).join(" · "),p=`${t.length} technical event${t.length===1?"":"s"} hidden`;return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("button",{type:"button",className:`msg-ops-bundle${i?" expanded":""}`,onClick:()=>o(h=>!h),title:`${Zi(a.timestamp)} - ${Zi(u.timestamp)}`,children:[c.jsx("span",{className:"msg-ops-bundle-dot"}),c.jsx("span",{className:"msg-ops-bundle-title",children:p}),c.jsx("span",{className:"msg-ops-bundle-summary",children:m}),c.jsx("span",{className:"msg-ops-bundle-time",children:Es(a.timestamp)}),c.jsx("span",{className:"msg-ops-bundle-chevron",children:c.jsx(Yi,{down:i})})]}),i&&c.jsx("div",{className:"msg-ops-bundle-details",children:t.map(({msg:h,classification:g})=>c.jsxs("div",{className:`msg-ops-bundle-event msg-ops-tone-${g.tone}`,children:[c.jsx("span",{className:"msg-ops-dot"}),c.jsx("span",{className:"msg-ops-label",children:g.label}),c.jsx("span",{className:"msg-ops-summary",children:g.summary}),c.jsx("span",{className:"msg-ops-time",title:Zi(h.timestamp),children:Es(h.timestamp)})]},h.id))})]})});function _F(e){return e.kind==="review"?`Review · ${e.verdict?e.verdict.replace(/_/g," "):"review"}`:e.kind==="report"?"Report":"Update"}const kF=St.memo(function({msg:t,payload:n,showDate:r,dateStr:i,isCopied:o,onCopy:a}){const u=yv(t.sender==="system"?t.senderName||"OPC":t.sender),d=t.senderDeleted?"[Deleted]":t.senderName,m=_F(n),p=n.summary||n.acceptanceSummary||m;return c.jsxs("div",{children:[r&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:i})}),c.jsxs("div",{className:"msg-row agent msg-row-project-update",children:[c.jsx("div",{className:"msg-avatar agent-avatar",style:{background:u},children:d.charAt(0).toUpperCase()}),c.jsxs("div",{className:"msg-body",children:[c.jsxs("div",{className:"msg-agent-header",children:[c.jsx("span",{className:"msg-sender",style:{color:u},children:d}),c.jsx("span",{className:"msg-time",title:Zi(t.timestamp),children:Es(t.timestamp)})]}),c.jsxs("div",{className:`msg-project-update-card msg-project-update-${n.kind}`,children:[c.jsxs("div",{className:"msg-project-update-head",children:[c.jsx("span",{className:"msg-project-update-label",children:m}),n.acceptanceSummary&&c.jsx("span",{className:"msg-project-update-chip",children:n.acceptanceSummary})]}),n.title&&c.jsx("div",{className:"msg-project-update-title",children:n.title}),c.jsx(sr,{content:p,className:"msg-project-update-summary"}),n.deliverables.length>0&&c.jsxs("div",{className:"msg-project-update-section",children:[c.jsx("div",{className:"msg-project-update-section-label",children:"Outputs"}),c.jsx("div",{className:"msg-project-update-artifacts",children:n.deliverables.slice(0,6).map((h,g)=>c.jsxs("div",{className:"msg-project-update-artifact",children:[c.jsx("span",{className:"msg-project-update-artifact-name",children:h.name}),h.status&&c.jsx("span",{className:"msg-project-update-artifact-status",children:h.status}),h.path&&c.jsx("code",{className:"msg-project-update-artifact-path",children:h.path})]},`${h.path||h.name}-${g}`))})]}),(n.risks.length>0||n.nextActions.length>0)&&c.jsxs("div",{className:"msg-project-update-grid",children:[n.risks.length>0&&c.jsxs("div",{className:"msg-project-update-section",children:[c.jsx("div",{className:"msg-project-update-section-label",children:"Caveats"}),c.jsx("ul",{className:"msg-project-update-list",children:n.risks.map((h,g)=>c.jsx("li",{children:h},`risk-${g}`))})]}),n.nextActions.length>0&&c.jsxs("div",{className:"msg-project-update-section",children:[c.jsx("div",{className:"msg-project-update-section-label",children:"Next"}),c.jsx("ul",{className:"msg-project-update-list",children:n.nextActions.map((h,g)=>c.jsx("li",{children:h},`next-${g}`))})]})]}),c.jsx("div",{className:"msg-card-actions",children:c.jsx("button",{className:"msg-action-btn",onClick:()=>a(t.id,t.content),title:"Copy raw update",children:o?c.jsxs(c.Fragment,{children:[c.jsx(Nl,{})," ",c.jsx("span",{children:"Copied"})]}):c.jsxs(c.Fragment,{children:[c.jsx(Cm,{})," ",c.jsx("span",{children:"Copy raw"})]})})})]})]})]})]})}),SF=St.memo(function({msg:t,showDate:n,dateStr:r,isGrouped:i,isCopied:o,isCheckpointResponded:a,suppressCheckpointPanel:u,onCopy:d,onSend:m}){const p=!!t.senderDeleted,h=p?"[Deleted]":t.senderName,g=yv(t.sender==="system"?t.senderName||"OPC":t.sender),y=t.channelId.startsWith("session:")?t.channelId.slice(8):t.metadata?.taskId??t.metadata?.task_id,v=String(t.metadata?.checkpoint_type??"").trim(),k=I0(t.metadata),S=lu(t.metadata)&&!u;return c.jsxs("div",{children:[n&&c.jsx("div",{className:"msg-date-sep",children:c.jsx("span",{children:r})}),c.jsxs("div",{className:`msg-row agent${i?" grouped":""}${p?" deleted-sender":""}`,children:[i?c.jsx("div",{className:"msg-avatar-spacer"}):c.jsx("div",{className:"msg-avatar agent-avatar",style:{background:g},children:h.charAt(0).toUpperCase()}),c.jsxs("div",{className:"msg-body",children:[!i&&c.jsxs("div",{className:"msg-agent-header",children:[c.jsx("span",{className:`msg-sender${p?" deleted":""}`,style:{color:g},children:h}),c.jsx("span",{className:"msg-time",title:Zi(t.timestamp),children:Es(t.timestamp)})]}),t.replyToId&&c.jsx("div",{className:"msg-reply-indicator",children:"Replying to previous message"}),S?c.jsxs(c.Fragment,{children:[v==="company_recruitment_confirmation"&&c.jsx(yI,{meta:t.metadata,onReply:(_,w)=>m?.(_,y,w),responded:a}),v==="company_staffing_selection"&&c.jsx(_I,{meta:t.metadata,onReply:(_,w)=>m?.(_,y,w),responded:a}),v==="company_work_item_gate"&&c.jsx(sm,{meta:t.metadata,onReply:_=>m?.(_,y,k),responded:a}),v==="company_delivery_feedback"&&c.jsx(SI,{meta:t.metadata,onReply:(_,w)=>m?.(_,y,w??k),responded:a}),v==="company_reorg_pending"&&c.jsx(kI,{meta:t.metadata,onReply:_=>m?.(_,y,k),responded:a}),v==="human_escalation"&&c.jsx(sm,{meta:t.metadata,onReply:_=>m?.(_,y,k),responded:a}),v==="task_user_input"&&c.jsx(wI,{meta:t.metadata,onReply:(_,w)=>m?.(_,y,{...k,...w}),responded:a})]}):c.jsxs("div",{className:"msg-content-agent-card",style:{borderLeftColor:g},children:[c.jsx(sr,{content:t.content}),c.jsxs("div",{className:"msg-card-actions",children:[c.jsx("button",{className:"msg-action-btn",onClick:()=>d(t.id,t.content),title:"Copy message",children:o?c.jsxs(c.Fragment,{children:[c.jsx(Nl,{})," ",c.jsx("span",{children:"Copied"})]}):c.jsxs(c.Fragment,{children:[c.jsx(Cm,{})," ",c.jsx("span",{children:"Copy"})]})}),i&&c.jsx("span",{className:"msg-time msg-time-inline",title:Zi(t.timestamp),children:Es(t.timestamp)})]})]})]})]})]})}),Ja=St.memo(function({messages:t,channelName:n,viewKind:r="session",detailMode:i="summary",agentStatus:o,currentTool:a,toolElapsedMs:u,lastToolSummary:d,progressLog:m,draftAssistantText:p,draftUpdatedAt:h,draftIteration:g,draftTurnId:y,isCompanyRuntime:v,workItemLog:k,childSessions:S,roleWorkItems:_,executorRoleWorkItems:w,onSend:C,onWorkItemClick:N,onWorkItemOpenSession:O,onMarkRead:I,hasOlderHistory:D=!1,totalMessageCount:T,onLoadOlderHistory:L,loadingOlderHistory:A=!1,autoScroll:M=!0,initialScrollToBottom:$=!0,showWorkItemRuntimeCard:W=!0,showRuntimeProgress:B=!0,renderUserMarkdown:U=!1}){const H=j.useRef(null),[V,Y]=j.useState(null),[Q,q]=j.useState(null),[G,J]=j.useState(Kw),P=j.useRef(o),X=j.useRef(M),ee=j.useRef($),te=j.useRef(!1),re=j.useRef(null),oe=j.useRef(!1),de=j.useRef(null),se=j.useRef(0),Ee=j.useRef(0),we=j.useRef(null),Ce=j.useRef(null),Be=j.useRef(null),Ge=j.useRef(!1),Ye=j.useRef(!1);j.useEffect(()=>{const ve=H.current;if(!ve)return;se.current=ve.scrollTop;const Re=()=>{te.current=!0,re.current&&clearTimeout(re.current),re.current=setTimeout(()=>{te.current=!1},1500)},Xe=He=>{Re(),He.deltaY<0&&ve.scrollTop>0?X.current=!1:Zw(ve)&&(X.current=M)};return ve.addEventListener("wheel",Xe,{passive:!0}),ve.addEventListener("pointerdown",Re),ve.addEventListener("touchstart",Re,{passive:!0}),()=>{ve.removeEventListener("wheel",Xe),ve.removeEventListener("pointerdown",Re),ve.removeEventListener("touchstart",Re),re.current&&clearTimeout(re.current)}},[M]),j.useEffect(()=>()=>{de.current&&clearTimeout(de.current)},[]);const yt=j.useCallback(()=>{const ve=H.current;if(!ve)return;const Re=se.current,Xe=ve.scrollTop;se.current=Xe;const He=Zw(ve);if(oe.current){He&&I?.();return}if(nF({previousScrollTop:Re,nextScrollTop:Xe,atBottom:He,userScrolling:te.current,programmaticScroll:!1})){X.current=!1;return}if(te.current){X.current=He,He&&I?.();return}He&&(X.current=M,I?.())},[M,I]),bt=(k?.length??0)+(S?.length??0),vt=j.useMemo(()=>{const ve=t.filter(Re=>iF(Re,i));return v?ve.filter(Re=>!(Re.metadata?.type==="system"&&Re.content.startsWith("[Company:")||!B&&Re.content.startsWith("[Company:"))):ve},[i,v,t,B]),me=r==="session"&&!!C,Oe=j.useMemo(()=>T0(vt),[vt]),rt=j.useMemo(()=>me?vt.filter(ve=>Oe.pendingMessageIds.has(ve.id)):[],[Oe.pendingMessageIds,vt,me]),Qe=j.useMemo(()=>me?vt.filter(ve=>!Oe.pendingMessageIds.has(ve.id)):vt,[Oe.pendingMessageIds,vt,me]),Je=j.useMemo(()=>{const ve=new Set;for(const Re of m??[]){if(Re.type!=="thinking")continue;const Xe=String(Re.turnId??"").trim();Xe&&ve.add(Xe)}return ve},[m]),fe=j.useMemo(()=>{const ve=[];for(const Re of Qe){const Xe=String(Re.metadata?.runtime_thinking??"").trim();if(!Xe)continue;const He=String(Re.metadata?.canonical_turn_id??Re.metadata?.turn_id??"").trim();He&&Je.has(He)||ve.push({type:"thinking",summary:"Thinking",detail:Xe,timestamp:Math.max(0,Re.timestamp-1),turnId:He||void 0,itemId:He?`${He}:thinking`:`thinking:${Re.id}`,streamId:He?`${He}:thinking`:`thinking:${Re.id}`,executionMode:String(Re.metadata?.execution_mode??"").trim()||void 0})}return ve},[Je,Qe]),be=j.useMemo(()=>B?[...(m??[]).filter(ve=>YS.has(ve.type)),...fe].sort((ve,Re)=>ve.timestamp-Re.timestamp):[],[m,B,fe]),Me=j.useMemo(()=>B?(m??[]).filter(ve=>!YS.has(ve.type)):[],[m,B]),Fe=j.useMemo(()=>B?i==="full"?m??[]:be:[],[i,be,m,B]),$e=j.useMemo(()=>Me,[Me]),Wt=j.useMemo(()=>{const ve=String(p??"").trim();return ve?{kind:"draft",id:`draft-${y??g??"active"}`,timestamp:h??Date.now(),text:ve,iteration:g,sortOrder:Number.MAX_SAFE_INTEGER}:null},[p,g,y,h]),nn=!!o&&o!=="idle",ke=$e.length>0,Te=B&&i!=="full"&&(nn||ke),Pe=j.useMemo(()=>{const ve=[...yF(Qe,{isCompanyRuntime:v,detailMode:i}),...Fe.map((Re,Xe)=>({kind:"progress",id:`progress-${uN(Re,Xe)}`,timestamp:Re.timestamp,entry:Re,sortOrder:Xe*2}))];return Wt&&ve.push(Wt),ve.sort((Re,Xe)=>Re.timestamp-Xe.timestamp||Re.sortOrder-Xe.sortOrder)},[i,Wt,v,Qe,Fe]),Ve=Math.max(0,Pe.length-G),qe=j.useMemo(()=>Ve>0?Pe.slice(-G):Pe,[Ve,Pe,G]);j.useEffect(()=>{J(Kw)},[n,r]),j.useEffect(()=>{X.current=M,ee.current=$},[n,r,M,$]);const et=j.useMemo(()=>{let ve="";return qe.map((Re,Xe)=>{const He=new Date(Re.timestamp).toLocaleDateString(),Tt=He!==ve;Tt&&(ve=He);const ht=Xe>0?qe[Xe-1]:null,$n=Re.kind==="message"&&ht?.kind==="message"&&!Tt&&ht.msg.sender===Re.msg.sender&&ht.msg.senderName===Re.msg.senderName&&Re.msg.metadata?.type!=="system"&&ht.msg.metadata?.type!=="system"&&!Re.msg.metadata?.is_work_item_event&&!ht.msg.metadata?.is_work_item_event&&Re.msg.timestamp-ht.msg.timestamp{rF(Re).then(Xe=>{Xe&&(Y(ve),setTimeout(()=>Y(null),1500))})},[]),Tn=j.useCallback(async()=>{if(Ve>0){J(ve=>Math.min(Pe.length,ve+nx));return}!D||A||!L||(await L(vt[0]),J(ve=>ve+nx))},[vt,D,Ve,A,L,Pe.length]),Dn=ZH[r],yn=!!(i!=="full"&&W&&v&&bt>0),Yt=rt.length>0,Jt=j.useMemo(()=>{const ve=[];(Ve>0||D)&&ve.push({kind:"history-hint"});for(let Re=0;ReH.current,estimateSize:ve=>{const Re=Jt[ve];if(Re.kind==="end-anchor")return 1;if(Re.kind==="history-hint")return 48;if(Re.kind==="work-item-runtime-card")return 120;if(Re.kind==="progress-block")return 80;if(Re.kind==="pending-section")return 200;const Xe=et[Re.idx];if(Xe?.item.kind==="message"){const He=Xe.item.msg.content.length;return He<100?72:He<500?120:He<2e3?200:300}return Xe?.item.kind==="draft"?Xe.item.text.length<400?120:200:Xe?.item.kind==="ops-bundle"?Xe.item.events.length>8?92:48:80},overscan:15,getItemKey:ve=>{const Re=Jt[ve];return Re.kind==="timeline"?et[Re.idx]?.item.id??`tl-${Re.idx}`:Re.kind}}),wt=j.useRef(Et);wt.current=Et;const tt=j.useRef(Jt.length);tt.current=Jt.length;const it=j.useCallback(()=>{oe.current=!0,de.current&&clearTimeout(de.current),de.current=setTimeout(()=>{oe.current=!1},tF)},[]),rn=j.useCallback(()=>{Ce.current!==null&&(window.cancelAnimationFrame(Ce.current),Ce.current=null),Be.current!==null&&(window.cancelAnimationFrame(Be.current),Be.current=null),Ge.current=!1,Ye.current=!1},[]),Xt=j.useCallback(()=>{const ve=tt.current;it(),ve>0&&wt.current.scrollToIndex(ve-1,{align:"end"});const Re=H.current;Re&&(Re.scrollTop=Math.max(0,Re.scrollHeight-Re.clientHeight),se.current=Re.scrollTop)},[it]),mt=j.useCallback((ve=!1,Re=!1)=>{Ge.current||=ve,Ye.current||=Re,!(Ce.current!==null||Be.current!==null)&&(Ce.current=window.requestAnimationFrame(()=>{if(Ce.current=null,!Ye.current&&(!X.current||te.current)){Ge.current=!1,Ye.current=!1;return}Xt(),Be.current=window.requestAnimationFrame(()=>{Be.current=null;const Xe=Ge.current,He=Ye.current;Ge.current=!1,Ye.current=!1,!(!He&&(!X.current||te.current))&&(Xt(),Xe&&I?.())})}))},[I,Xt]);j.useEffect(()=>rn,[rn]),j.useEffect(()=>{if(!M||typeof ResizeObserver>"u")return;const ve=we.current;if(!ve)return;const Re=new ResizeObserver(()=>{ee.current||!X.current||mt(!1)});return Re.observe(ve),()=>Re.disconnect()},[M,mt,Jt.length]);const Ht=Qe.length,On=j.useMemo(()=>{const ve=Pe[Pe.length-1],Re=ve?.kind==="message"?`message:${ve.id}:${ve.msg.content.length}:${ve.timestamp}`:ve?.kind==="draft"?`draft:${ve.id}:${ve.text.length}:${ve.timestamp}`:ve?.kind==="progress"?`progress:${ve.id}:${ve.entry.summary.length}:${ve.entry.detail?.length??0}:${ve.timestamp}`:ve?.kind==="ops-bundle"?`ops:${ve.id}:${ve.events.length}:${ve.timestamp}`:"empty",Xe=$e[$e.length-1],He=Xe?`${Xe.type}:${Xe.summary.length}:${Xe.detail?.length??0}:${Xe.timestamp}`:"none";return[Jt.length,Ht,Re,$e.length,He,rt.length,bt,Te?`${o??""}:${a??""}`:""].join("|")},[o,$e,a,Ht,rt.length,Te,Pe,Jt.length,bt]);j.useLayoutEffect(()=>{const ve=Pe.length>0||rt.length>0||bt>0||Te;!ee.current||!ve||(ee.current=!1,Ee.current=Ht,mt(M,!0))},[Pe.length>0,Te]),j.useEffect(()=>{!M||ee.current||X.current&&(Ht<=Ee.current||(Ee.current=Ht,mt(!0)))},[Ht,M,mt]),j.useEffect(()=>{const ve=P.current==="idle"&&!!o&&o!=="idle";P.current=o,!(!M||ee.current||!X.current||!ve)&&mt(!0)},[o,M,mt]),j.useEffect(()=>{!M||ee.current||!X.current||Wt&&mt(!0)},[M,Wt,mt]),j.useLayoutEffect(()=>{!M||ee.current||!X.current||mt(!1)},[M,mt,On]);const vn=j.useCallback(ve=>{if(ve.kind==="history-hint")return c.jsxs("div",{className:"msg-history-hint",children:[c.jsx("button",{className:"msg-history-load-btn",onClick:()=>{Tn()},disabled:A,children:A?"Loading older messages...":Ve>0?`Load ${Math.min(nx,Ve)} older messages`:"Load older messages"}),c.jsxs("span",{className:"msg-history-meta",children:["Showing latest ",qe.length," of ",T??Pe.length]})]});if(ve.kind==="work-item-runtime-card")return c.jsxs("div",{className:"msg-row agent",children:[c.jsx("div",{className:"msg-avatar agent-avatar",children:c.jsx(co,{})}),c.jsx("div",{className:"msg-body",children:c.jsx(Qy,{workItemLog:k??[],roleWorkItems:_,executorRoleWorkItems:w,childSessions:S,isCompanyRuntime:v,onWorkItemClick:N})})]});if(ve.kind==="progress-block")return c.jsxs("div",{className:"msg-row agent agent-working-row",children:[c.jsx("div",{className:"msg-avatar agent-avatar",children:c.jsx(co,{})}),c.jsx("div",{className:"msg-body",children:c.jsx(Wo,{entries:$e,agentStatus:o,currentTool:a,toolElapsedMs:u,lastToolSummary:d,expandedByDefault:!0})})]});if(ve.kind==="pending-section")return c.jsxs("div",{className:"msg-pending-section",children:[c.jsx("div",{className:"msg-pending-header",children:"Pending Actions"}),c.jsx("div",{className:"msg-pending-stack",children:rt.map(We=>{const lr=We.senderDeleted?"[Deleted]":We.senderName,cr=yv(We.sender==="system"?We.senderName||"OPC":We.sender),mn=We.channelId.startsWith("session:")?We.channelId.slice(8):We.metadata?.taskId??We.metadata?.task_id,Pt=String(We.metadata?.checkpoint_type??"").trim(),Zn=I0(We.metadata);return c.jsxs("div",{className:`msg-row agent msg-row-pending${We.senderDeleted?" deleted-sender":""}`,children:[c.jsx("div",{className:"msg-avatar agent-avatar",style:{background:cr},children:lr.charAt(0).toUpperCase()}),c.jsxs("div",{className:"msg-body",children:[c.jsxs("div",{className:"msg-agent-header",children:[c.jsx("span",{className:`msg-sender${We.senderDeleted?" deleted":""}`,style:{color:cr},children:lr}),c.jsx("span",{className:"msg-time",title:Zi(We.timestamp),children:Es(We.timestamp)})]}),Pt==="company_recruitment_confirmation"&&c.jsx(yI,{meta:We.metadata,onReply:(wn,pt)=>C?.(wn,mn,pt),responded:!1}),Pt==="company_staffing_selection"&&c.jsx(_I,{meta:We.metadata,onReply:(wn,pt)=>C?.(wn,mn,pt),responded:!1}),Pt==="company_work_item_gate"&&c.jsx(sm,{meta:We.metadata,onReply:wn=>C?.(wn,mn,Zn),responded:!1}),Pt==="company_delivery_feedback"&&c.jsx(SI,{meta:We.metadata,onReply:(wn,pt)=>C?.(wn,mn,pt??Zn),responded:!1}),Pt==="company_reorg_pending"&&c.jsx(kI,{meta:We.metadata,onReply:wn=>C?.(wn,mn,Zn),responded:!1}),Pt==="human_escalation"&&c.jsx(sm,{meta:We.metadata,onReply:wn=>C?.(wn,mn,Zn),responded:!1}),Pt==="task_user_input"&&c.jsx(wI,{meta:We.metadata,onReply:(wn,pt)=>C?.(wn,mn,{...Zn,...pt}),responded:!1})]})]},`pending-${We.id}`)})})]});if(ve.kind==="end-anchor")return c.jsx("div",{className:"msg-end-anchor"});const{item:Re,showDate:Xe,dateStr:He,isGrouped:Tt}=et[ve.idx];if(Re.kind==="progress")return c.jsx(dF,{entry:Re.entry,showDate:Xe,dateStr:He,compact:i!=="full"});if(Re.kind==="draft")return c.jsx(pF,{text:Re.text,timestamp:Re.timestamp,iteration:Re.iteration,showDate:Xe,dateStr:He});if(Re.kind==="ops-bundle")return c.jsx(bF,{events:Re.events,showDate:Xe,dateStr:He});const{msg:ht}=Re,$n=ht.metadata?.type==="system",Ae=sF(ht),Dt=!!ht.metadata?.is_work_item_event||ht.content.startsWith("[Company:"),kn=lu(ht.metadata),nr=ht.sender==="user",Sn=!nr&&!kn?CI(ht.content):null;if(Dt&&!kn)return c.jsx(fF,{msg:ht,showDate:Xe,dateStr:He});if(Sn)return c.jsx(kF,{msg:ht,payload:Sn,showDate:Xe,dateStr:He,isCopied:V===ht.id,onCopy:Mn});if(Ae&&!kn)return c.jsx(hF,{msg:ht,showDate:Xe,dateStr:He});if($n&&!kn)return c.jsx(mF,{msg:ht,showDate:Xe,dateStr:He});if(nr)return c.jsx(gF,{msg:ht,showDate:Xe,dateStr:He,isGrouped:Tt,isCopied:V===ht.id,onCopy:Mn,onImageClick:q,renderUserMarkdown:U});if(ht.sender==="system"&&(String(ht.metadata?.checkpoint_type??"").trim(),!lu(ht.metadata))){const We=jI(ht.content);if(We)return c.jsx(vF,{msg:ht,showDate:Xe,dateStr:He,isGrouped:Tt,classification:We})}return c.jsx(SF,{msg:ht,showDate:Xe,dateStr:He,isGrouped:Tt,isCopied:V===ht.id,isCheckpointResponded:Oe.respondedMessageIds.has(ht.id),suppressCheckpointPanel:Oe.duplicateMessageIds.has(ht.id),onCopy:Mn,onSend:C})},[et,V,Mn,U,Oe,C,Tn,A,Ve,qe.length,T,Pe.length,k,_,w,S,t,N,O,$e,o,a,u,d,rt,Te,i]);if(Pe.length===0&&rt.length===0)return c.jsxs("div",{className:"msg-list",ref:H,onScroll:yt,children:[c.jsxs("div",{className:"msg-welcome",children:[c.jsx("div",{className:"msg-welcome-icon",children:Dn.icon}),c.jsx("div",{className:"msg-welcome-title",children:n||Dn.title}),c.jsx("div",{className:"msg-welcome-hint",children:Dn.hint})]}),yn&&c.jsxs("div",{className:"msg-row agent",children:[c.jsx("div",{className:"msg-avatar agent-avatar",children:c.jsx(co,{})}),c.jsx("div",{className:"msg-body",children:c.jsx(Qy,{workItemLog:k??[],roleWorkItems:_,executorRoleWorkItems:w,childSessions:S,isCompanyRuntime:v,onWorkItemClick:N})})]}),Te&&c.jsxs("div",{className:"msg-row agent",children:[c.jsx("div",{className:"msg-avatar agent-avatar",children:c.jsx(co,{})}),c.jsx("div",{className:"msg-body",children:c.jsx(Wo,{entries:$e,agentStatus:o,currentTool:a,toolElapsedMs:u,lastToolSummary:d,expandedByDefault:!0})})]}),c.jsx("div",{className:"msg-end-anchor"})]});const Rn=Et.getVirtualItems();return c.jsxs("div",{className:"msg-list",ref:H,onScroll:yt,children:[c.jsx("div",{ref:we,style:{height:Et.getTotalSize(),width:"100%",position:"relative"},children:c.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${Rn[0]?.start??0}px)`},children:Rn.map(ve=>c.jsx("div",{"data-index":ve.index,ref:Et.measureElement,children:vn(Jt[ve.index])},ve.key))})}),Q&&c.jsx("div",{className:"lightbox-overlay",onClick:()=>q(null),children:c.jsx("img",{className:"lightbox-img",src:Q,alt:"Preview"})})]})}),wF=10*1024*1024,CF=20*1024*1024,jF="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",af={native:"OpenOPC Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"};function EF(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 eC(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(0)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}function EI(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 NF(e,t){const n=EI(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 IF({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 c.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:[c.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[c.jsx("circle",{className:"attachment-progress-track",cx:"14",cy:"14",r:11}),c.jsx("circle",{className:"attachment-progress-value",cx:"14",cy:"14",r:11,strokeDasharray:i,strokeDashoffset:a})]}),c.jsx("span",{className:"attachment-progress-center",children:n?"!":t==="ready"?c.jsx(Nl,{}):o})]})}function TF({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),u=o>=80,d=o>=90,m=typeof t=="number"&&typeof n=="number"?`${o}% used (${t.toLocaleString()}/${n.toLocaleString()})`:`${o}% used`;return c.jsxs("span",{className:`composer-context-ring${u?" low":""}${d?" critical":""}`,title:`Context window: ${m}`,"aria-label":`Context window ${m}`,role:"img",children:[c.jsxs("svg",{viewBox:"0 0 28 28","aria-hidden":"true",children:[c.jsx("circle",{className:"composer-context-ring-track",cx:"14",cy:"14",r:11}),c.jsx("circle",{className:"composer-context-ring-value",cx:"14",cy:"14",r:11,strokeDasharray:i,strokeDashoffset:a})]}),c.jsx("span",{className:"composer-context-ring-label",children:o})]})}function rx(e){return e.organization_name?.trim()||e.name}function ix({disabled:e,placeholder:t,channelId:n,execMode:r,companyProfile:i,taskPreferredAgent:o="native",agentStatus:a,currentTool:u,displayTool:d,activeAgentCount:m,runtimeControlState:p,canStop:h,autoFocus:g=!0,contextTokens:y,contextWindow:v,contextRemainingPct:k,savedOrgs:S,activeSavedOrg:_,selectedOrgId:w,lockedMode:C=!1,onSend:N,onModeChange:O,onTaskAgentChange:I,onSavedOrgsRefresh:D,onSavedOrgLoad:T,onStop:L,onContinueInNewChat:A}){const[M,$]=j.useState(""),[W,B]=j.useState(!1),[U,H]=j.useState([]),[V,Y]=j.useState(null),Q=j.useRef(null),q=j.useRef(null),G=p==="suspending",J=p==="running"||p==="suspending"||p==="resuming",P=p==="suspended",X=p!=null,ee=J||!X&&a!=null&&a!=="idle",te=(h??!0)&&!G&&!P,re=j.useMemo(()=>Kj({contextTokens:y,contextWindow:v,contextRemainingPct:k}),[k,y,v]);j.useEffect(()=>{const ke=Q.current;ke&&(ke.style.height="auto",ke.style.height=`${Math.min(ke.scrollHeight,200)}px`)},[M]),j.useEffect(()=>{$(""),H(ke=>(ke.forEach(Te=>{Te.preview_url&&URL.revokeObjectURL(Te.preview_url)}),[])),!e&&g&&setTimeout(()=>Q.current?.focus(),50)},[n,e,g]);const oe=j.useCallback((ke,Te)=>{H(Pe=>Pe.map(Ve=>Ve.id===ke?Te(Ve):Ve))},[]),de=j.useCallback(async(ke,Te)=>{try{const Pe=await EF(Te,Ve=>{oe(ke,qe=>({...qe,progress_percent:Ve,transfer_state:"reading"}))});oe(ke,Ve=>({...Ve,base64_data:Pe,progress_percent:100,transfer_state:"ready"}))}catch{oe(ke,Pe=>({...Pe,error:"Failed to prepare file",progress_percent:0,transfer_state:"error"}))}},[oe]),se=j.useCallback(ke=>{const Te=Array.from(ke);let Pe=U.reduce((qe,et)=>qe+et.size_bytes,0);const Ve=Te.map(qe=>{let et;return qe.size>wF?et=`Too large (${eC(qe.size)})`:Pe+qe.size>CF?et="Total size exceeds 20MB":Pe+=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:et?"error":"reading",error:et}});H(qe=>[...qe,...Ve]),Ve.filter(qe=>!qe.error).forEach(qe=>{de(qe.id,qe.file)})},[U,de]),Ee=j.useCallback(ke=>{H(Te=>{const Pe=Te.find(Ve=>Ve.id===ke);return Pe?.preview_url&&URL.revokeObjectURL(Pe.preview_url),Te.filter(Ve=>Ve.id!==ke)})},[]),we=j.useCallback(()=>{if(e||ee)return;const ke=M.trim(),Te=U.filter(qe=>!qe.error&&qe.transfer_state==="reading"),Pe=U.filter(qe=>!qe.error&&!!qe.base64_data);if(Te.length>0||!ke&&Pe.length===0)return;const Ve=Pe.map(qe=>({filename:qe.filename,data:qe.base64_data,mime_type:qe.mime_type}));N(ke||"Sent with attachments",Ve.length?Ve:void 0),$(""),U.forEach(qe=>{qe.preview_url&&URL.revokeObjectURL(qe.preview_url)}),H([])},[e,ee,M,U,N]),Ce=j.useCallback(ke=>{const Te=ke.clipboardData?.files;Te&&Te.length>0&&(ke.preventDefault(),se(Te))},[se]),Be=String(i??"").trim().toLowerCase(),Ge=r==="company"?"company":r==="org"||r==="custom"||Be==="custom"?"org":"task",Ye=j.useMemo(()=>(S??[]).filter(ke=>!!ke.name&&ke.name!=="corporate"),[S]),yt=_?Ye.find(ke=>ke.name===_):void 0,qt=w?Ye.find(ke=>ke.name===w):void 0,bt=yt?rx(yt):_||"",vt=qt?rx(qt):w||bt,me=qt?.name||w||yt?.name||"",Oe=Ge==="task"?"task":"company",rt=Ge==="org"?me?`org:${me}`:"":"corporate",Qe=Ge==="org"?vt?`Company / ${vt}`:"Company / Saved org":"Company / Corporate",Je=Oe==="task"?"Task":Qe,fe=!!r&&!!O,be=Ge==="task"&&!!I,Me=j.useMemo(()=>{const ke=Ge==="task"?"task":Ge==="org"?`org:${me||"selected"}`:"company:corporate",Te=me||yt?.name||"",Pe=vt||bt||Te,Ve=[{key:"task",mode:"task",label:"Task",description:"A single agent handles the request",icon:c.jsx(C4,{})},{key:"company:corporate",mode:"company",profile:"corporate",label:"Company / Corporate",description:"A team of roles collaborates",icon:c.jsx(j4,{})}];return Te&&Ve.push({key:`org:${Te}`,mode:"org",profile:"custom",orgId:Te,label:`Company / ${Pe}`,description:"A saved company architecture collaborates",icon:c.jsx(E4,{})}),Ve.filter(qe=>qe.key!==ke)},[bt,yt?.name,Ge,vt,me]),Fe=U.filter(ke=>!ke.error&&ke.transfer_state==="reading").length,$e=U.filter(ke=>!ke.error&&ke.transfer_state==="ready").length,Wt=d||u,nn=ee?G?"Stopping...":m&&m>1?`${m} agents working`:Wt?`Running ${Wt}`:a==="reflecting"?"Thinking...":"Working...":null;return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:`msg-composer${W?" focused":""}${ee?" working":""}`,children:[ee&&nn&&c.jsxs("div",{className:"composer-status",children:[c.jsx("div",{className:"composer-status-indicator"}),c.jsx("span",{className:"composer-status-text",children:nn}),c.jsxs("button",{className:"composer-stop-btn",onClick:L,title:"Stop",disabled:!te||!L,children:[c.jsx(Wj,{}),c.jsx("span",{children:G?"Stopping...":"Stop"})]})]}),U.length>0&&c.jsx("div",{className:"composer-attachments",children:U.map(ke=>c.jsxs("div",{className:`attachment-chip${ke.error?" error":""}`,children:[ke.preview_url?c.jsx("img",{className:"attachment-thumb",src:ke.preview_url,alt:ke.filename,onClick:()=>Y(ke.preview_url)}):c.jsx("span",{className:`attachment-file-icon tone-${NF(ke.mime_type,ke.filename)}`,children:EI(ke.mime_type,ke.filename)}),c.jsxs("span",{className:"attachment-chip-info",children:[c.jsx("span",{className:"attachment-chip-name",children:ke.filename}),c.jsx("span",{className:"attachment-chip-size",children:ke.error?ke.error:ke.transfer_state==="reading"?`Preparing ${ke.progress_percent}%`:`${eC(ke.size_bytes)} - Ready`})]}),c.jsx(IF,{progress:ke.progress_percent,state:ke.transfer_state,error:ke.error}),c.jsx("button",{className:"attachment-chip-remove",onClick:()=>Ee(ke.id),title:"Remove",children:c.jsx(Em,{})})]},ke.id))}),c.jsxs("div",{className:"composer-input-area",children:[c.jsx("textarea",{ref:Q,value:M,onChange:ke=>$(ke.target.value),onFocus:()=>B(!0),onBlur:()=>B(!1),onPaste:Ce,onKeyDown:ke=>{ke.key==="Enter"&&!ke.shiftKey&&(ke.preventDefault(),we())},placeholder:t??"Message...",rows:1,disabled:e}),c.jsxs("div",{className:"composer-bottom",children:[c.jsx("button",{className:"composer-attach-btn",onClick:()=>q.current?.click(),title:"Attach files",disabled:e,children:c.jsx(y4,{})}),c.jsx("input",{ref:q,type:"file",multiple:!0,accept:jF,style:{display:"none"},onChange:ke=>{ke.target.files&&se(ke.target.files),ke.target.value=""}}),(fe||r)&&c.jsxs("div",{className:"composer-config-group","data-locked":C?"true":void 0,children:[fe&&!C?c.jsxs("label",{className:"composer-mode-inline","data-kind":"mode",title:"Execution mode for this chat and new work started from it",children:[c.jsx("span",{className:"composer-mode-inline-label",children:"Mode"}),c.jsx("span",{className:"composer-mode-select-wrap",children:c.jsxs("select",{className:"composer-mode-select",value:Oe,onChange:ke=>{if(ke.target.value==="task"){O?.("task");return}O?.("company","corporate")},onFocus:()=>D?.(),onPointerDown:()=>D?.(),disabled:e,"aria-label":"Execution mode",children:[c.jsx("option",{value:"task",children:"Task"}),c.jsx("option",{value:"company",children:"Company"})]})})]}):fe&&C?c.jsxs("div",{className:"composer-mode-chip","data-kind":"mode",tabIndex:0,role:"group","aria-label":`Mode locked to ${Je}.${A?" Use the menu to start a new chat in a different mode.":" Start a new chat to use a different mode."}`,children:[c.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:c.jsx(Zk,{})}),c.jsx("span",{className:"composer-mode-chip-label",children:Je}),c.jsxs("div",{className:"composer-mode-chip-popover",role:"dialog","aria-label":"Mode info",children:[c.jsx("div",{className:"composer-mode-chip-popover-title",children:"Mode is fixed for this chat"}),c.jsxs("div",{className:"composer-mode-chip-popover-body",children:["Once the first message is sent, this chat is committed to"," ",c.jsx("strong",{children:Je}),"."]}),A&&Me.length>0&&c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"composer-mode-chip-popover-divider","aria-hidden":"true"}),c.jsx("div",{className:"composer-mode-chip-popover-action-title",children:"Continue in a new chat"}),c.jsx("div",{className:"composer-mode-chip-popover-actions",children:Me.map(ke=>c.jsxs("button",{type:"button",className:"composer-mode-chip-popover-action",onClick:()=>A(ke.mode,ke.profile,ke.orgId),"aria-label":`Start a new chat in ${ke.label}`,children:[c.jsx("span",{className:"composer-mode-chip-popover-action-icon","aria-hidden":"true",children:ke.icon}),c.jsxs("span",{className:"composer-mode-chip-popover-action-text",children:[c.jsx("span",{className:"composer-mode-chip-popover-action-label",children:ke.label}),c.jsx("span",{className:"composer-mode-chip-popover-action-desc",children:ke.description})]}),c.jsx("span",{className:"composer-mode-chip-popover-action-arrow","aria-hidden":"true",children:c.jsx(Xj,{})})]},ke.key))})]})]})]}):c.jsx("span",{className:"composer-mode","data-kind":"mode",children:Je}),Oe==="company"&&fe&&!C&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),c.jsxs("label",{className:"composer-mode-inline","data-kind":"org",title:"Company architecture for this chat",children:[c.jsx("span",{className:"composer-mode-inline-label",children:"Company"}),c.jsx("span",{className:"composer-mode-select-wrap",children:c.jsxs("select",{className:"composer-mode-select",value:rt,onChange:ke=>{const Te=ke.target.value;if(Te==="corporate"){O?.("company","corporate");return}if(Te.startsWith("org:")){const Pe=Te.slice(4);Pe&&O?.("org","custom",Pe)}},onFocus:()=>D?.(),onPointerDown:()=>D?.(),disabled:e,"aria-label":"Company architecture",children:[c.jsx("option",{value:"corporate",children:"Corporate"}),!rt&&c.jsx("option",{value:"",disabled:!0,children:"Select saved org"}),rt&&rt!=="corporate"&&!Ye.some(ke=>`org:${ke.name}`===rt)&&c.jsx("option",{value:rt,children:vt||me}),Ye.length===0?c.jsx("option",{value:"",disabled:!0,children:"No saved orgs"}):Ye.map(ke=>c.jsx("option",{value:`org:${ke.name}`,children:rx(ke)},ke.name))]})})]})]}),Ge==="task"&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"composer-config-divider","aria-hidden":"true"}),be&&!C?c.jsxs("label",{className:"composer-mode-inline","data-kind":"agent",title:"Execution agent for this task-mode chat",children:[c.jsx("span",{className:"composer-mode-inline-label",children:"Agent"}),c.jsx("span",{className:"composer-mode-select-wrap",children:c.jsx("select",{className:"composer-mode-select",value:o,onChange:ke=>I?.(ke.target.value),disabled:e,"aria-label":"Task mode agent",children:Object.entries(af).map(([ke,Te])=>c.jsx("option",{value:ke,children:Te},ke))})})]}):be&&C?c.jsxs("span",{className:"composer-mode-chip","data-kind":"agent",tabIndex:0,role:"status","aria-label":`Agent locked to ${af[o]}. Start a new chat to use a different agent.`,children:[c.jsx("span",{className:"composer-mode-chip-icon","aria-hidden":"true",children:c.jsx(Zk,{})}),c.jsx("span",{className:"composer-mode-chip-label",children:af[o]}),c.jsxs("span",{className:"composer-mode-chip-popover",role:"tooltip",children:[c.jsx("span",{className:"composer-mode-chip-popover-title",children:"Agent is fixed for this chat"}),c.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."})]})]}):c.jsx("span",{className:"composer-mode","data-kind":"agent",children:af[o]})]})]}),c.jsx("span",{className:"composer-hint",children:Fe>0?`Preparing ${Fe} attachment${Fe>1?"s":""}`:$e>0?`${$e} attachment${$e>1?"s":""} ready`:"Shift+Enter for new line"}),typeof re.usedPct=="number"&&c.jsx(TF,{usedPct:re.usedPct,usedTokens:re.usedTokens,windowTokens:re.windowTokens}),c.jsx("button",{className:"composer-send-btn",onClick:we,disabled:e||Fe>0||!M.trim()&&$e===0||ee,children:c.jsx(g4,{})})]})]})]}),V&&c.jsx("div",{className:"lightbox-overlay",onClick:()=>Y(null),children:c.jsx("img",{className:"lightbox-img",src:V,alt:"Preview"})})]})}function vv(e){return Nm(e)}function tC(e){const t=vv(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 bv(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 RF(e){return e.length===0?"—":bv(e[e.length-1].timestamp)}function AF(e){if(e.status==="done")return"Completed";if(e.status==="failed")return"Failed";if(e.status==="cancelled")return"Cancelled";const t=vv(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 nC(e){return e==="done"?"✓":e==="failed"?"✗":e==="cancelled"?"—":null}function rC(e){return e==="done"?"awp-terminal-done":e==="failed"?"awp-terminal-failed":e==="cancelled"?"awp-terminal-cancelled":""}const MF={native:"Native",codex:"Codex",claude_code:"Claude Code",cursor:"Cursor",opencode:"OpenCode"},sx={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"}},Jy={active:"Working",waiting:"Waiting",pending:"Pending",done:"Completed",failed:"Failed"},iC={active:0,waiting:1,pending:2,done:3,failed:4};function DF(e){if(e.runtimeStatus==="tool_active")return"Running tool…";if(e.runtimeStatus==="reflecting")return"Thinking…";const t=Jy[e.aggregatedStatus]??"Pending";return e.aggregatedStatus==="done"?`${t} · ${e.workItems.length} work item${e.workItems.length===1?"":"s"}`:t}function OF(e){if(e.workItems.length===0)return"—";const t=e.workItems.reduce((n,r)=>Math.max(n,r.updatedAt),0);return t?bv(t):"—"}function LF(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function zF({sections:e,fallbackEntries:t,sessionStatus:n}){const r=(e??[]).filter(i=>(i.entries?.length??0)>0||!!i.runtimeTaskId);return r.length>0?c.jsx("div",{className:"wf-role-turn-activity-sections",children:r.map((i,o)=>{const a=i.entries??[],u=`${i.runtimeTaskId||i.kind}:${o}`;return c.jsxs("section",{className:"wf-role-turn-activity-section",children:[c.jsxs("div",{className:"wf-role-turn-activity-section-head",children:[c.jsx("span",{className:"wf-role-turn-activity-section-title",children:i.title}),i.roleName&&c.jsx("span",{className:"wf-role-turn-activity-section-role",children:i.roleName}),a.length>0&&c.jsx("span",{className:"wf-role-turn-activity-section-count",children:a.length})]}),a.length>0?c.jsx(Wo,{entries:a,sessionStatus:n,expandedByDefault:!0}):c.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"})]},u)})}):!t||t.length===0?c.jsx("div",{className:"wf-role-turn-empty-activity",children:"No runtime activity yet"}):c.jsx(Wo,{entries:t,sessionStatus:n,expandedByDefault:!0})}function PF({roleWorkItems:e,onOpenChildDetail:t,onOpenExecutionPanel:n}){const[r,i]=j.useState(null),[o,a]=j.useState(null),[u,d]=j.useState("all"),[m,p]=j.useState(""),[h,g]=j.useState(!1),y=j.useMemo(()=>Object.values(e),[e]),v=j.useMemo(()=>{let w=y.slice();if(u==="active"?w=w.filter(C=>C.aggregatedStatus==="active"):u==="idle"?w=w.filter(C=>C.aggregatedStatus==="done"||C.aggregatedStatus==="failed"):u==="pending"&&(w=w.filter(C=>C.aggregatedStatus==="pending"||C.aggregatedStatus==="waiting")),m.trim()){const C=m.toLowerCase();w=w.filter(N=>N.roleName.toLowerCase().includes(C)||N.roleId.toLowerCase().includes(C)||N.workItems.some(O=>O.title.toLowerCase().includes(C)))}return w.sort((C,N)=>{const O=iC[C.aggregatedStatus]??99,I=iC[N.aggregatedStatus]??99;return O!==I?O-I:C.roleName.localeCompare(N.roleName)}),w},[y,u,m]);j.useEffect(()=>{r&&!y.some(w=>w.roleKey===r)&&(i(null),a(null))},[y,r]);const k=y.filter(w=>w.aggregatedStatus==="active").length,S=r?e[r]??null:null,_=S&&o?S.workItems.find(w=>w.workItemId===o)??null:null;return y.length===0?null:c.jsxs("div",{className:"awp",children:[c.jsxs("div",{className:"awp-header",children:[c.jsxs("span",{className:"awp-title",children:["Agents",c.jsx("span",{className:"awp-count",children:k>0?`${k}/${y.length} active`:`${y.length}`})]}),c.jsxs("div",{className:"awp-controls",children:[c.jsxs("select",{className:"awp-filter",value:u,onChange:w=>d(w.target.value),children:[c.jsx("option",{value:"all",children:"All"}),c.jsx("option",{value:"active",children:"Active"}),c.jsx("option",{value:"idle",children:"Idle / Done"}),c.jsx("option",{value:"pending",children:"Pending"})]}),c.jsx("button",{className:`awp-search-toggle${h?" active":""}`,onClick:()=>g(w=>!w),title:"Search agents",children:c.jsx(N0,{})})]})]}),h&&c.jsx("div",{className:"awp-search-bar",children:c.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents or work items...",value:m,onChange:w=>p(w.target.value),autoFocus:!0})}),c.jsxs("div",{className:"awp-list",children:[v.map(w=>{const C=r===w.roleKey,N=w.aggregatedStatus==="active",O=w.runtimeStatus==="reflecting"||w.runtimeStatus==="tool_active",I=w.aggregatedStatus==="done"||w.aggregatedStatus==="failed";return c.jsxs("button",{className:`awp-row${C?" awp-row-selected":""}${N?" awp-row-active":""}${I?` awp-row-terminal awp-terminal-${w.aggregatedStatus}`:""}`,onClick:()=>{i(D=>D===w.roleKey?null:w.roleKey),a(null)},title:`${w.roleName} — ${Jy[w.aggregatedStatus]}`,children:[c.jsx("span",{className:`awp-dot${O?" awp-dot-active":""} awp-dot-${w.aggregatedStatus}`}),c.jsxs("div",{className:"awp-row-info",children:[c.jsx("span",{className:"awp-row-name",children:w.roleName}),c.jsxs("span",{className:"awp-row-projection",children:[w.workItems.length," work item",w.workItems.length===1?"":"s"]})]}),c.jsx("span",{className:"awp-row-activity",children:DF(w)}),c.jsx("span",{className:"awp-row-time",children:OF(w)})]},w.roleKey)}),v.length===0&&c.jsx("div",{className:"awp-empty",children:m?"No matching agents":"No agents in this filter"})]}),S&&c.jsxs("div",{className:"awp-detail",children:[c.jsxs("div",{className:"awp-detail-header",children:[c.jsxs("div",{className:"awp-detail-identity",children:[c.jsx("div",{className:"awp-detail-avatar",children:S.roleName.charAt(0).toUpperCase()}),c.jsxs("div",{className:"awp-detail-meta",children:[c.jsx("span",{className:"awp-detail-name",children:S.roleName}),c.jsx("span",{className:"awp-detail-role",children:Jy[S.aggregatedStatus]})]})]}),c.jsx("div",{className:"awp-detail-actions",children:c.jsx("button",{className:"awp-detail-close",onClick:()=>{i(null),a(null)},title:"Close detail",children:c.jsx(Em,{})})})]}),c.jsxs("div",{className:"awp-detail-body",children:[c.jsxs("div",{className:"awp-detail-section",children:[c.jsxs("div",{className:"awp-detail-section-label",children:[c.jsx(dl,{}),c.jsx("span",{children:"Work items"})]}),c.jsx("ul",{className:"wf-role-turns",children:S.workItems.map(w=>{const C=o===w.workItemId,N=w.kanbanColumn==="in-progress"?"in_progress":w.kanbanColumn==="in-review"?"in_review":w.kanbanColumn;return c.jsxs("li",{className:`wf-role-turn${C?" wf-role-turn-expanded":""}`,children:[c.jsxs("button",{type:"button",className:"wf-role-turn-button",onClick:()=>a(O=>O===w.workItemId?null:w.workItemId),children:[c.jsx("span",{className:`wf-role-turn-column wf-role-turn-column-${N}`,children:w.kanbanColumn.replace("-"," ").replace(/^./,O=>O.toUpperCase())}),c.jsxs("span",{className:"wf-role-turn-title",children:[w.isReviewTarget&&c.jsx("span",{className:"wf-role-turn-tag",children:"Review"}),w.title]}),c.jsx("span",{className:"wf-role-turn-time",children:bv(w.updatedAt)}),c.jsx("span",{className:"wf-role-turn-chevron",children:c.jsx(Yi,{down:C})})]}),C&&c.jsxs("div",{className:"wf-role-turn-activity",children:[c.jsx(zF,{sections:w.activitySections,fallbackEntries:w.progressLog,sessionStatus:LF(w)}),w.executionTurnId&&c.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)})})]}),_===null&&S.workItems.length===0&&c.jsx("div",{className:"awp-detail-empty",children:"No work items yet"})]})]})]})}function BF({sessions:e,agents:t,onOpenChildDetail:n,onOpenExecutionPanel:r}){const[i,o]=j.useState(null),[a,u]=j.useState("all"),[d,m]=j.useState(""),[p,h]=j.useState(!1);j.useEffect(()=>{i&&!e.some(_=>_.taskId===i)&&o(null)},[e,i]);const g=j.useMemo(()=>{let _=[...e];if(a==="active"?_=_.filter(Ki):a==="idle"?_=_.filter(w=>Za.has(w.status)||vv(w)==="idle"&&w.status!=="pending"):a==="pending"&&(_=_.filter(w=>w.status==="pending")),d.trim()){const w=d.toLowerCase();_=_.filter(C=>(C.assigneeIds[0]??C.title).toLowerCase().includes(w)||C.title.toLowerCase().includes(w))}return _.sort((w,C)=>tC(w)-tC(C)),_},[e,a,d]),y=e.filter(Ki).length,v=j.useMemo(()=>i?e.find(_=>_.taskId===i)??null:null,[e,i]),k=j.useMemo(()=>{if(!v)return;const _=v.assigneeIds[0];return _?t.find(w=>w.agent_id===_):void 0},[v,t]),S=j.useCallback(_=>{o(w=>w===_?(n?.(_),w):_)},[n]);return e.length===0?null:c.jsxs("div",{className:"awp",children:[c.jsxs("div",{className:"awp-header",children:[c.jsxs("span",{className:"awp-title",children:["Agents",c.jsx("span",{className:"awp-count",children:y>0?`${y}/${e.length} active`:`${e.length}`})]}),c.jsxs("div",{className:"awp-controls",children:[c.jsxs("select",{className:"awp-filter",value:a,onChange:_=>u(_.target.value),children:[c.jsx("option",{value:"all",children:"All"}),c.jsx("option",{value:"active",children:"Active"}),c.jsx("option",{value:"idle",children:"Idle / Done"}),c.jsx("option",{value:"pending",children:"Pending"})]}),c.jsx("button",{className:`awp-search-toggle${p?" active":""}`,onClick:()=>h(_=>!_),title:"Search agents",children:c.jsx(N0,{})})]})]}),p&&c.jsx("div",{className:"awp-search-bar",children:c.jsx("input",{className:"awp-search-input",type:"text",placeholder:"Search agents...",value:d,onChange:_=>m(_.target.value),autoFocus:!0})}),c.jsxs("div",{className:"awp-list",children:[g.map(_=>{const w=Ki(_),C=Za.has(_.status),N=i===_.taskId,O=_.assigneeIds[0]?.replace(/_/g," ").replace(/\b\w/g,L=>L.toUpperCase())??_.title,I=_.workItemProjectionId?.replace(/_/g," ")??"",D=nC(_.status),T=rC(_.status);return c.jsxs("button",{className:`awp-row${N?" awp-row-selected":""}${w?" awp-row-active":""}${C?` awp-row-terminal ${T}`:""}`,onClick:()=>S(_.taskId),onDoubleClick:()=>n?.(_.taskId),title:n?"Click to inspect, click again or double-click to open full context":void 0,children:[D?c.jsx("span",{className:`awp-terminal-icon ${T}`,children:D}):c.jsx("span",{className:`awp-dot${w?" awp-dot-active":""}`}),c.jsxs("div",{className:"awp-row-info",children:[c.jsx("span",{className:"awp-row-name",children:O}),I&&c.jsx("span",{className:"awp-row-projection",children:I})]}),c.jsx("span",{className:"awp-row-activity",children:AF(_)}),c.jsx("span",{className:"awp-row-time",children:RF(_.progressLog)})]},_.taskId)}),g.length===0&&c.jsx("div",{className:"awp-empty",children:d?"No matching agents":"No agents in this filter"})]}),v&&c.jsxs("div",{className:"awp-detail",children:[c.jsxs("div",{className:"awp-detail-header",children:[c.jsxs("div",{className:"awp-detail-identity",children:[c.jsx("div",{className:`awp-detail-avatar${Za.has(v.status)?` ${rC(v.status)}`:""}`,children:(k?.name??v.assigneeIds[0]??"?").charAt(0).toUpperCase()}),c.jsxs("div",{className:"awp-detail-meta",children:[c.jsx("span",{className:"awp-detail-name",children:k?.name??v.assigneeIds[0]??v.title}),gl(v)&&c.jsx("span",{className:"awp-detail-role",children:gl(v)}),v.employeeAssignment?.name&&c.jsx("span",{className:"awp-detail-employee",children:v.employeeAssignment.name}),v.selectedExecutionAgent&&c.jsxs("span",{className:"awp-detail-employee",children:["Agent: ",MF[v.selectedExecutionAgent]??v.selectedExecutionAgent]}),v.workItemProjectionId&&c.jsx("span",{className:"awp-detail-projection",children:v.workItemProjectionId.replace(/_/g," ")})]})]}),c.jsxs("div",{className:"awp-detail-actions",children:[n&&c.jsx("button",{className:"awp-detail-expand",onClick:()=>n(v.taskId),title:"Open full context",children:c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:[c.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"}),c.jsx("path",{d:"M4.5 5.5h5M4.5 7.5h3.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]})}),r&&c.jsx("button",{className:"awp-detail-expand",onClick:()=>r(v.taskId),title:"Open execution panel",children:c.jsx(dl,{})}),c.jsx("button",{className:"awp-detail-close",onClick:()=>o(null),title:"Close detail",children:c.jsx(Em,{})})]})]}),c.jsxs("div",{className:"awp-detail-body",children:[v.handoffContext&&c.jsxs("div",{className:"awp-detail-section",children:[c.jsxs("div",{className:"awp-detail-section-label",children:[c.jsx(Pf,{}),c.jsx("span",{children:"Handoff"})]}),c.jsx("div",{className:"msg-content-agent-card",children:c.jsx(sr,{content:v.handoffContext,className:"awp-detail-handoff awp-detail-handoff-markdown"})})]}),c.jsxs("div",{className:"awp-detail-section",children:[c.jsxs("div",{className:"awp-detail-section-label",children:[c.jsx(dl,{}),c.jsx("span",{children:"Activity"})]}),c.jsx(Wo,{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&&!Za.has(v.status)&&c.jsx("div",{className:"awp-detail-empty",children:"No activity recorded yet"})]}),Za.has(v.status)&&sx[v.status]&&c.jsxs("div",{className:`awp-result-banner ${sx[v.status].cls}`,children:[c.jsx("span",{className:"awp-result-icon",children:nC(v.status)}),c.jsx("span",{children:sx[v.status].text})]})]})]})]})}function $F({sessions:e,roleWorkItems:t,isCompanyRuntime:n=!1,agents:r,onOpenChildDetail:i,onOpenExecutionPanel:o}){return t&&Object.keys(t).length>0?c.jsx(PF,{roleWorkItems:t,onOpenChildDetail:i,onOpenExecutionPanel:o}):n?null:c.jsx(BF,{sessions:e,agents:r,onOpenChildDetail:i,onOpenExecutionPanel:o})}function NI(e){try{return JSON.stringify(e,null,2)}catch{return String(e??"")}}function ox(e){return(e??[]).map(t=>t.trim()).filter(Boolean)}function sC(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,NI(n)]:[t,String(n)]):[]}function HF({task:e,linkedSession:t,linkedSessionMessages:n,agents:r,onBack:i,onOpenLinkedSession:o,onOpenExecutionPanel:a}){const u=j.useMemo(()=>e.assigneeIds.map(I=>r.find(D=>D.agent_id===I)).filter(Boolean),[r,e.assigneeIds]),d=e.priority?Qf[e.priority]:null,m=e.residentAssignment??{},p=e.memberSessionState??{},h=e.ownershipContract??{},g=!!(e.agentStatus&&e.agentStatus!=="idle"),y=ox(e.deliverables),v=ox(e.acceptanceCriteria),k=ox(e.dependencies),S=sC({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}),_=sC({status:p.status,current_turn_mode:p.current_turn_mode,manager_role_id:p.manager_role_id,actionable_inbox_count:p.actionable_inbox_count,protocol_backlog_count:p.protocol_backlog_count,notification_backlog_count:p.notification_backlog_count}),w=String(e.employeeAssignment?.promptContext??"").trim(),C=String(e.employeeAssignment?.deltaContext??"").trim(),N=Lm(e),O=!!(e.workItemId||e.workItemProjectionId||N);return c.jsxs("div",{className:"ctx-child-detail",children:[c.jsxs("div",{className:"ctx-child-topbar",children:[c.jsxs("button",{className:"ctx-back-btn",onClick:i,children:["←"," Back to board"]}),N&&(o||a)&&c.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>{if(o){o(N);return}a?.(N)},children:"Open Runtime Session"})]}),c.jsxs("div",{className:"ctx-child-header",children:[c.jsx("div",{className:"ctx-child-avatar",children:(e.workItemRoleName??e.title).charAt(0).toUpperCase()}),c.jsxs("div",{className:"ctx-child-meta",children:[c.jsx("span",{className:"ctx-child-name",children:e.title}),c.jsx("span",{className:"ctx-child-work-item",children:[e.workItemRoleName,e.phase].filter(Boolean).join(" · ")})]})]}),g&&c.jsxs("div",{className:`task-detail-runtime status-${e.agentStatus}`,children:[c.jsx("span",{className:"kanban-runtime-dot"}),c.jsx("span",{children:e.agentStatus==="tool_active"&&e.currentTool?e.currentTool:Jf[e.agentStatus]??e.agentStatus}),u.length>0&&c.jsx("span",{className:"task-detail-runtime-agent",children:u.map(I=>I.name).join(", ")})]}),c.jsxs("div",{className:"task-detail-body",children:[c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:O?"Work Item":"Task"}),c.jsxs("div",{className:"ctx-task-chip-row",children:[c.jsx("span",{className:"task-detail-dep-id",children:e.displayId}),d&&c.jsx("span",{className:"kanban-tag",children:d.label}),e.workItemRoleName&&c.jsx("span",{className:"kanban-tag",children:e.workItemRoleName}),e.managerRoleId&&c.jsxs("span",{className:"kanban-tag",children:["Manager: ",e.managerRoleId]}),e.scopeKey&&c.jsx("span",{className:"kanban-tag",children:e.scopeKey})]}),e.description&&c.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:c.jsx(sr,{content:e.description})})]}),e.originalMessage&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Session Goal"}),c.jsx("pre",{className:"task-detail-handoff",children:e.originalMessage})]}),e.planningContext&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Planning Context"}),c.jsx("pre",{className:"task-detail-handoff",children:e.planningContext})]}),y.length>0&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Deliverables"}),c.jsx("ul",{className:"task-detail-dep-list",children:y.map(I=>c.jsx("li",{className:"task-detail-dep-item",children:I},I))})]}),v.length>0&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Acceptance Criteria"}),c.jsx("ul",{className:"task-detail-dep-list",children:v.map(I=>c.jsx("li",{className:"task-detail-dep-item",children:I},I))})]}),(e.delegationRationale||e.nonOverlapGuard||e.coordinationNotes)&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Delegation Notes"}),e.delegationRationale&&c.jsx("pre",{className:"task-detail-handoff",children:e.delegationRationale}),e.nonOverlapGuard&&c.jsx("pre",{className:"task-detail-handoff",children:e.nonOverlapGuard}),e.coordinationNotes&&c.jsx("pre",{className:"task-detail-handoff",children:e.coordinationNotes})]}),k.length>0&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Dependencies"}),c.jsx("ul",{className:"task-detail-dep-list",children:k.map(I=>c.jsx("li",{className:"task-detail-dep-item",children:c.jsx("span",{className:"task-detail-dep-id",children:I})},I))})]}),(S.length>0||_.length>0||t)&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Role Runtime Context"}),t&&c.jsxs("div",{className:"ctx-task-chip-row",children:[c.jsxs("span",{className:"kanban-tag",children:["Runtime Session: ",t.title]}),c.jsxs("span",{className:"kanban-tag",children:["Status: ",t.status]})]}),S.length>0&&c.jsx("div",{className:"ctx-task-kv-grid",children:S.map(([I,D])=>c.jsxs("div",{className:"ctx-task-kv-item",children:[c.jsx("span",{className:"ctx-task-kv-label",children:I}),c.jsx("span",{className:"ctx-task-kv-value",children:D})]},I))}),_.length>0&&c.jsx("div",{className:"ctx-task-kv-grid",children:_.map(([I,D])=>c.jsxs("div",{className:"ctx-task-kv-item",children:[c.jsx("span",{className:"ctx-task-kv-label",children:I}),c.jsx("span",{className:"ctx-task-kv-value",children:D})]},I))})]}),e.handoffContext&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Handoff Context"}),c.jsx("pre",{className:"task-detail-handoff",children:e.handoffContext})]}),w&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Role Prompt Context"}),c.jsx("div",{className:"msg-content-agent-card ctx-task-detail-card",children:c.jsx(sr,{content:w})})]}),C&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Role Delta Context"}),c.jsx("pre",{className:"task-detail-handoff",children:C})]}),Object.keys(h).length>0&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Ownership Contract"}),c.jsx("pre",{className:"task-detail-handoff",children:NI(h)})]}),e.progressLog&&e.progressLog.length>0&&c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Activity"}),c.jsx("ul",{className:"task-detail-progress",children:e.progressLog.map((I,D)=>c.jsxs("li",{className:`progress-entry type-${I.type}`,children:[c.jsx("span",{className:"progress-time",children:new Date(I.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),c.jsx("span",{className:"progress-summary",children:I.summary})]},`${I.timestamp}-${D}`))})]}),c.jsxs("div",{className:"task-detail-section",children:[c.jsx("h4",{className:"task-detail-section-title",children:"Runtime Session Activity"}),t&&n&&n.length>0?c.jsx("div",{className:"task-detail-linked-messages",children:c.jsx(Ja,{messages:n,channelName:t.title??"Runtime Session",detailMode:"summary"})}):t?c.jsx("p",{className:"task-detail-empty-hint",children:"Runtime session has no visible messages yet."}):c.jsx("p",{className:"task-detail-empty-hint",children:"No Runtime Session linked yet."})]})]})]})}function FF(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 VF(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 UF(e){if(!(!e||Object.keys(e).length===0))return Object.values(e).filter(t=>t.aggregatedStatus==="active").length}function GF(e){return new Set(e.filter(Ki).map(n=>String(n.workItemRoleId??n.assigneeIds[0]??n.taskId).trim()).filter(Boolean)).size}function oC(e,t){const n=UF(e);return n!==void 0?n||void 0:GF(t)||void 0}function qF(e){const t=e0(e);return t==="org"||t==="custom"?`company/${e.orgId??"org"}`:t==="company"?`company/${e.companyProfile??"corporate"}`:t}function II(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function WF(e){return!!(e.isCompanyRuntime||e.parentSessionId||e.workItemProjectionId||e.roleWorkItems||e.executorRoleWorkItems)}function YF(e){const t=String(e.execMode??"").trim().toLowerCase(),n=II(e.execMode),r=String(e.companyProfile??"").trim().toLowerCase();return n==="company"?!1:n==="org"?!0:t?!1:r==="custom"||!!e.orgId}function ax(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 e0(e,t){const r=String(e.execMode??"").trim().toLowerCase().length>0,i=II(e.execMode);return YF(e)?"org":!r&&i==="task"&&WF(e)?"company":e.execMode??t??"task"}function aC(e,t,n){return t&&e.selectedExecutionAgent&&e.selectedExecutionAgent!=="native"?e.selectedExecutionAgent:e.preferredAgent??e.selectedExecutionAgent??n}function Pc(e,t){const n=!!t?.childDetail;return e?n?"full":e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}const XF=new Set(["awaiting_human","awaiting_manager_review","awaiting_review","awaiting_peer"]);function lC(e){const t=String(e.status??"").trim(),n=e.runtimeControlState==="suspended"||!XF.has(t)&&t!=="running"&&t!=="done";return!!(e.canResume??n)}function KF({task:e,agents:t,roleLabel:n}){const[r,i]=j.useState(!1),o=e.priority,a=o&&e.priority in Qf?Qf[o]:null,u=e.assigneeIds.map(h=>t.find(g=>g.agent_id===h)?.name??h).filter(Boolean),d=new Date(e.createdAt),m=e.employeeAssignment?.name?`${e.employeeAssignment.name}${e.employeeAssignment.category?` · ${e.employeeAssignment.category}`:""}`:null,p=({label:h,value:g})=>c.jsxs("div",{className:"ctx-info-fact",children:[c.jsx("span",{className:"ctx-info-fact-label",children:h}),c.jsx("span",{className:"ctx-info-fact-value",children:g})]});return c.jsxs("div",{className:"ctx-info-v2",children:[c.jsxs("section",{className:"ctx-info-section",children:[c.jsx("h4",{className:"ctx-info-section-title",children:"Status"}),c.jsxs("div",{className:"ctx-info-card",children:[c.jsxs("div",{className:"ctx-info-status-row",children:[c.jsxs("span",{className:`ctx-info-status-pill status-${e.status}`,children:[c.jsx("span",{className:"ctx-info-status-dot"}),e.status]}),a&&c.jsxs("span",{className:"ctx-info-priority-pill",style:{color:a.color},children:[c.jsx("span",{"aria-hidden":"true",children:a.symbol}),a.label]})]}),e.tags&&e.tags.length>0&&c.jsx("div",{className:"ctx-info-chips",children:e.tags.map(h=>c.jsx("span",{className:"ctx-info-chip",children:h},h))})]})]}),c.jsxs("section",{className:"ctx-info-section",children:[c.jsx("h4",{className:"ctx-info-section-title",children:"People & agent"}),c.jsxs("div",{className:"ctx-info-card",children:[u.length>0&&c.jsx(p,{label:"Assignees",value:c.jsx("div",{className:"ctx-info-chips",children:u.map(h=>c.jsx("span",{className:"ctx-info-chip",children:h},h))})}),n&&c.jsx(p,{label:"Role",value:n}),m&&c.jsx(p,{label:"Employee",value:m}),e.selectedExecutionAgent&&c.jsx(p,{label:"Execution agent",value:c.jsx("span",{className:"ctx-info-mono",children:e.selectedExecutionAgent})})]})]}),c.jsxs("section",{className:"ctx-info-section",children:[c.jsx("h4",{className:"ctx-info-section-title",children:"Timing"}),c.jsx("div",{className:"ctx-info-card",children:c.jsx(p,{label:"Created",value:c.jsx("span",{children:d.toLocaleString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})})})]}),c.jsxs("section",{className:"ctx-info-section ctx-info-dev-section",children:[c.jsxs("button",{className:`ctx-info-dev-toggle${r?" expanded":""}`,type:"button",onClick:()=>i(h=>!h),"aria-expanded":r,children:[c.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",children:c.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"})}),c.jsx("span",{children:"Developer details"})]}),r&&c.jsxs("div",{className:"ctx-info-card ctx-info-dev-card",children:[e.workItemProjectionId&&c.jsx(p,{label:"Projection",value:c.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.workItemProjectionId})}),c.jsx(p,{label:"Task ID",value:c.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.taskId})}),c.jsx(p,{label:"Channel",value:c.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.channelId})}),e.sessionId&&c.jsx(p,{label:"Session",value:c.jsx("span",{className:"ctx-info-mono ctx-info-mono-break",children:e.sessionId})})]})]})]})}function ZF({panelState:e,width:t,onResizeMouseDown:n,isResizing:r,activeView:i,activeSession:o,activeTask:a,linkedTaskSession:u,linkedTaskSessionMessages:d,childDetailSession:m,messages:p,childDetailMessages:h,allSessions:g,openSessions:y,openSessionMessages:v,openSessionChildren:k,agents:S,childSessions:_,execMode:w,taskPreferredAgent:C,savedOrgsList:N,activeSavedOrg:O,onSavedOrgsList:I,onSavedOrgLoad:D,canShowAgentsTab:T=!1,channelId:L,channelName:A,secretaryChannelId:M,unreadCounts:$,multiSessionView:W=!1,panelTab:B,onPanelTabChange:U,commsState:H,commsMessage:V,onCommsRefresh:Y,onCommsReadMessage:Q,orgInfoData:q,recoveryStatus:G,canShowTeamTab:J=!1,onTeamStopRun:P,onTitleChange:X,onSessionConfigChange:ee,onSessionTaskAgentChange:te,onContinueInNewChat:re,onStop:oe,onComplete:de,onResume:se,onResumeTask:Ee,onStopTask:we,onCompleteTask:Ce,onLocateOnBoard:Be,onBackToParent:Ge,onCloseTaskDetail:Ye,onOpenChildDetail:yt,onOpenExecutionPanel:qt,onSelectSessionTab:bt,onCloseSessionTab:vt,onToggleMultiSessionView:me,onCollapse:Oe,onExpand:rt,onMaximize:Qe,onComposerSend:Je,onMessageSend:fe,onSessionSend:be,onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:$e,onSessionMarkRead:Wt,onLoadSessionHistory:nn,isSessionHistoryLoading:ke}){const Te=i.kind==="secretary",Pe=i.kind==="activity",Ve=i.kind==="child-detail",qe=i.kind==="task-detail",et=!!(o&&(o.isCompanyRuntime||_.length>0)),Mn=i.kind==="session"&&o,Tn=Te?!0:!!o,Dn=!Ve&&y.length>0,yn=y.length>1,Yt=!!(W&&i.kind==="session"&&o&&yn&&B==="chat"),Jt=j.useRef(null),Et=j.useMemo(()=>{const Ae=$f(o,g);return Hf(o,[...Ae,..._])},[o,_,g]),wt=Et.displaySession??o,tt=Pc(wt),it=j.useMemo(()=>rS(o,Et.runtimeSession,Et.timelineSessions),[o,Et.runtimeSession,Et.timelineSessions]),rn=j.useMemo(()=>H4(o,Et.runtimeSession,Et.timelineSessions),[o,Et.runtimeSession,Et.timelineSessions]),Xt=j.useMemo(()=>sS(Et.timelineSessions),[Et.timelineSessions]),mt=j.useMemo(()=>it?.workItemLog??o?.workItemLog??[],[it?.workItemLog,o?.workItemLog]),Ht=j.useMemo(()=>eS(it??o,g),[it,o,g]),On=j.useMemo(()=>it?.roleWorkItems??o?.roleWorkItems,[it?.roleWorkItems,o?.roleWorkItems]),vn=j.useMemo(()=>it?.executorRoleWorkItems??o?.executorRoleWorkItems,[it?.executorRoleWorkItems,o?.executorRoleWorkItems]),Rn=!!(On&&Object.keys(On).length>0||vn&&Object.keys(vn).length>0),ve=Ht.length>0?Ht:_,Re=j.useMemo(()=>Ff(Et.timelineSessions),[Et.timelineSessions]),Xe=j.useMemo(()=>Et.timelineSessions.some(Ae=>ke?.(Ae.taskId)??!1),[Et.timelineSessions,ke]),He=j.useCallback(Ae=>{if(Ae){const Dt=Et.timelineSessions.find(kn=>kn.channelId===Ae.channelId);if(Dt)return Dt}return wt??o},[Et.timelineSessions,wt,o]),Tt=j.useMemo(()=>{if(!m)return;const Ae=m.assigneeIds[0];return Ae?S.find(Dt=>Dt.agent_id===Ae):void 0},[m,S]),ht=u??(()=>{const Ae=Lm(a);return Ae?g.find(Dt=>Dt.taskId===Ae||Dt.runtimeTaskId===Ae||Dt.executionTurnId===Ae)??null:null})();j.useEffect(()=>{!Ve||!m||Jt.current?.scrollTo({top:0,behavior:"auto"})},[Ve,m?.taskId]);const $n=o;return e==="collapsed"?c.jsx("div",{className:"ctx-collapse-strip",onClick:()=>rt(),title:"Open panel",children:"◀"}):c.jsxs(c.Fragment,{children:[c.jsx("div",{className:`ctx-resize-handle${r?" active":""}`,onMouseDown:n}),c.jsx("div",{className:`ctx-panel${e==="maximized"?" maximized":""}`,style:e!=="maximized"?{width:t}:void 0,children:qe&&a?c.jsx(HF,{task:a,linkedSession:ht,linkedSessionMessages:d,agents:S,onBack:Ye??Oe,onOpenLinkedSession:bt,onOpenExecutionPanel:qt}):Ve&&m?c.jsxs("div",{className:"ctx-child-detail",ref:Jt,children:[c.jsxs("div",{className:"ctx-child-topbar",children:[c.jsx("button",{className:"ctx-back-btn",onClick:Ge,children:"← Back to parent"}),(m.canStop??m.status==="running")&&m.runtimeControlState!=="suspending"&&we&&c.jsx("button",{className:"ctx-child-stop-btn",onClick:()=>we(m.taskId),title:"Stop this agent",children:"Stop"}),m.runtimeControlState==="suspending"&&c.jsx("button",{className:"ctx-child-stop-btn",disabled:!0,title:"Stopping this agent",children:"Stopping..."}),lC(m)&&Ee&&c.jsx("button",{className:"ctx-child-resume-btn",onClick:()=>Ee(m.taskId),title:"Continue this agent's runtime",children:"Continue"})]}),c.jsxs("div",{className:"ctx-child-header",children:[Tt&&c.jsx("div",{className:"ctx-child-avatar",children:Tt.name.charAt(0).toUpperCase()}),c.jsxs("div",{className:"ctx-child-meta",children:[c.jsx("span",{className:"ctx-child-name",children:Tt?.name??m.title}),m.workItemRoleName&&c.jsx("span",{className:"ctx-child-work-item",children:m.workItemRoleName}),!m.workItemRoleName&&m.workItemProjectionId&&c.jsx("span",{className:"ctx-child-work-item",children:m.workItemProjectionId.replace(/_/g," ")})]})]}),m.handoffContext&&c.jsxs("div",{className:"exec-section ctx-child-markdown-section",children:[c.jsxs("div",{className:"exec-section-header",children:[c.jsx(Pf,{}),c.jsx("span",{children:"Received From"})]}),c.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:c.jsx(sr,{content:m.handoffContext})})]}),c.jsxs("div",{className:"ctx-child-transcript",children:[c.jsxs("div",{className:"ctx-child-transcript-header",children:[c.jsx(dl,{}),c.jsx("span",{children:"Transcript"})]}),c.jsx(Ja,{messages:h,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:$e,hasOlderHistory:!Ki(m)&&m.messageCount>h.length,totalMessageCount:m.messageCount,onLoadOlderHistory:Ae=>nn?.(m.taskId,Ae,"full"),loadingOlderHistory:ke?.(m.taskId)??!1,autoScroll:!1,initialScrollToBottom:!0,showRuntimeProgress:!0,renderUserMarkdown:!0},m.channelId)]}),m.artifacts&&m.artifacts.length>0&&c.jsxs("div",{className:"ctx-child-artifacts",children:[c.jsxs("div",{className:"ctx-child-section-header",children:[c.jsx(wm,{}),c.jsx("span",{children:"Artifacts"})]}),c.jsx("ul",{className:"ctx-child-artifact-list",children:m.artifacts.map((Ae,Dt)=>c.jsx("li",{children:Ae},Dt))})]}),m.handoffTo&&c.jsxs("div",{className:"ctx-child-markdown-section ctx-child-passed-to",children:[c.jsxs("div",{className:"ctx-child-section-header",children:[c.jsx(Pf,{}),c.jsx("span",{children:"Passed To"})]}),c.jsx("div",{className:"msg-content-agent-card ctx-child-markdown-card",children:c.jsx(sr,{content:m.handoffTo})})]})]}):c.jsxs(c.Fragment,{children:[Dn&&c.jsxs("div",{className:"ctx-session-strip",children:[c.jsx("div",{className:"ctx-session-strip-scroll",children:y.map(Ae=>{const Dt=$?.[Ae.channelId]??0,kn=o?.taskId===Ae.taskId;return c.jsxs("div",{className:`ctx-session-chip${kn?" active":""}`,children:[c.jsxs("button",{className:"ctx-session-chip-main",onClick:()=>bt?.(Ae.taskId),title:Ae.title,children:[c.jsx("span",{className:`ctx-session-chip-status status-${Ae.status}`}),c.jsx("span",{className:"ctx-session-chip-title",children:Ae.title}),Dt>0&&c.jsx("span",{className:"ctx-session-chip-unread",children:Dt>99?"99+":Dt})]}),c.jsx("button",{className:"ctx-session-chip-close",onClick:()=>vt?.(Ae.taskId),title:"Close tab",children:"×"})]},Ae.taskId)})}),yn&&c.jsx("button",{className:`ctx-session-view-btn${W?" active":""}`,onClick:me,children:W?"Single View":"Multi View"})]}),c.jsxs("div",{className:"ctx-header",children:[Yt?c.jsx("span",{className:"ctx-header-title",children:et?"Open Runtime Sessions":"Open Sessions"}):Mn?c.jsxs("div",{className:"ctx-header-tabs",role:"tablist","aria-label":"Session view",children:[c.jsx("button",{role:"tab","aria-selected":B==="chat",className:`ctx-tab${B==="chat"?" active":""}`,onClick:()=>U("chat"),children:"Chat"}),T&&c.jsx("button",{role:"tab","aria-selected":B==="agents",className:`ctx-tab${B==="agents"?" active":""}`,onClick:()=>U("agents"),children:"Agents"}),c.jsx("button",{role:"tab","aria-selected":B==="info",className:`ctx-tab${B==="info"?" active":""}`,onClick:()=>U("info"),children:"Info"}),Y&&c.jsx("button",{role:"tab","aria-selected":B==="comms",className:`ctx-tab${B==="comms"?" active":""}`,onClick:()=>U("comms"),children:"Comms"}),J&&c.jsx("button",{role:"tab","aria-selected":B==="team",className:`ctx-tab${B==="team"?" active":""}`,onClick:()=>U("team"),children:"Team"})]}):Te?c.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Secretary"}):c.jsx("span",{style:{fontSize:13,fontWeight:600,padding:"0 4px"},children:"Activity"}),c.jsxs("div",{className:"ctx-header-actions",children:[e==="open"&&c.jsx("button",{onClick:Qe,title:"Maximize",children:c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:c.jsx("rect",{x:"2",y:"2",width:"10",height:"10",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"})})}),e==="maximized"&&c.jsx("button",{onClick:rt,title:"Restore",children:c.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:[c.jsx("rect",{x:"1",y:"3",width:"8",height:"8",rx:"1.5",stroke:"currentColor",strokeWidth:"1.3"}),c.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"})]})}),c.jsx("button",{onClick:Oe,title:"Close panel",children:c.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:c.jsx("path",{d:"M3 3l8 8M11 3l-8 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})})})]})]}),c.jsxs("div",{className:"ctx-body",children:[!o&&!Te&&!Pe&&c.jsxs("div",{className:"ctx-empty",children:[c.jsx("span",{className:"ctx-empty-icon",children:"📋"}),c.jsx("span",{children:et?"Select a Work Item to see details":"Select a task to see details"})]}),Yt&&c.jsx("div",{className:"ctx-multi-grid",children:y.map(Ae=>{const Dt=v[Ae.taskId]??[],kn=k[Ae.taskId]??[],nr=$f(Ae,g),Sn=Hf(Ae,[...nr,...kn]),We=rS(Ae,Sn.runtimeSession,Sn.timelineSessions),lr=eS(We??Ae,g),cr=We?.roleWorkItems??Ae.roleWorkItems,mn=oC(cr,kn)??0,Pt=Ae.assigneeIds.map(cn=>S.find(sn=>sn.agent_id===cn)?.name??cn).filter(Boolean),Zn=VF(We??Ae,mn),wn=!!(Ae.isCompanyRuntime||kn.length>0),pt=Sn.displaySession??Ae,Ar=sS(Sn.timelineSessions),jr=Ff(Sn.timelineSessions),Qn=ax(We??pt,Math.max(jr,Dt.length)),ct=Sn.timelineSessions.some(cn=>ke?.(cn.taskId)??!1);return c.jsxs("section",{className:`ctx-multi-card${o?.taskId===Ae.taskId?" focused":""}`,children:[c.jsxs("div",{className:"ctx-multi-card-header",children:[c.jsxs("button",{className:"ctx-multi-card-main",onClick:()=>bt?.(Ae.taskId),title:"Focus session",children:[c.jsx("span",{className:`ctx-multi-card-status status-${Ae.status}`}),c.jsx("span",{className:"ctx-multi-card-title",children:Ae.title})]}),c.jsxs("div",{className:"ctx-multi-card-actions",children:[((We??Ae).canStop??(We??Ae).status==="running")&&(We??Ae).runtimeControlState!=="suspending"&&we&&c.jsx("button",{onClick:()=>we(Sn.runtimeSession?.taskId??Ae.taskId),children:"Stop"}),(We??Ae).runtimeControlState==="suspending"&&c.jsx("button",{disabled:!0,children:"Stopping..."}),lC(We??Ae)&&Ee&&c.jsx("button",{onClick:()=>Ee(Ae.taskId),children:"Continue"}),(We??Ae).status!=="done"&&(We??Ae).status!=="cancelled"&&Ce&&c.jsx("button",{onClick:()=>Ce(Ae.taskId),children:"Done"}),c.jsx("button",{onClick:()=>bt?.(Ae.taskId),children:"Focus"}),c.jsx("button",{onClick:()=>vt?.(Ae.taskId),title:"Close tab",children:"×"})]})]}),c.jsxs("div",{className:"ctx-multi-card-meta",children:[c.jsx("span",{children:qF(Ae)}),c.jsx("span",{children:Ae.status}),Zn&&c.jsx("span",{children:Zn}),Pt.length>0&&c.jsx("span",{children:Pt.join(", ")}),c.jsx("span",{children:FF(Ae.updatedAt)})]}),c.jsx("div",{className:"ctx-multi-card-body",children:c.jsx(Ja,{messages:Dt,channelName:pt?.title??Ae.title,viewKind:"session",detailMode:Pc(pt),agentStatus:We?.agentStatus??pt?.agentStatus,currentTool:We?.currentTool??pt?.currentTool,toolElapsedMs:We?.toolElapsedMs??pt?.toolElapsedMs,lastToolSummary:We?.lastToolSummary??pt?.lastToolSummary,progressLog:Ar,draftAssistantText:We?.draftAssistantText??pt?.draftAssistantText,draftUpdatedAt:We?.draftUpdatedAt??pt?.draftUpdatedAt,draftIteration:We?.draftIteration??pt?.draftIteration,draftTurnId:We?.draftTurnId??pt?.draftTurnId,isCompanyRuntime:We?.isCompanyRuntime??wn,workItemLog:We?.workItemLog??Ae.workItemLog,childSessions:lr,onSend:(cn,sn,Nt)=>be?.(Ae.taskId,cn,void 0,Nt),onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:()=>Wt?.(Ae.taskId),hasOlderHistory:!Sn.timelineSessions.some(Ki)&&jr>Dt.length,totalMessageCount:jr,onLoadOlderHistory:cn=>{const sn=Sn.timelineSessions.find(Nt=>Nt.channelId===cn?.channelId)??pt??Ae;return nn?.(sn.taskId,cn,Pc(sn,{childDetail:sn.mode==="child"}))},loadingOlderHistory:ct,showRuntimeProgress:Pc(pt)==="full"},pt?.channelId??Ae.channelId)}),c.jsx(ix,{disabled:!1,channelId:We?.channelId??Ae.channelId,execMode:e0(Ae,w),companyProfile:Ae.companyProfile,taskPreferredAgent:aC(Ae,Qn,C),agentStatus:We?.agentStatus??pt?.agentStatus,currentTool:We?.currentTool??pt?.currentTool,displayTool:We?.displayTool??pt?.displayTool,activeAgentCount:mn||void 0,runtimeControlState:(We??pt)?.runtimeControlState,canStop:(We??pt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:Ae.orgId??O??null,lockedMode:Qn,autoFocus:!1,contextTokens:We?.contextTokens??pt?.contextTokens,contextWindow:We?.contextWindow??pt?.contextWindow,contextRemainingPct:We?.contextRemainingPct??pt?.contextRemainingPct??100,onSend:(cn,sn)=>be?.(Ae.taskId,cn,sn,Qj(T0(Dt).latestPendingReplyMetadata)),onModeChange:(cn,sn,Nt)=>ee?.(Ae.taskId,cn,sn,Nt),onTaskAgentChange:cn=>te?.(Ae.taskId,cn),onContinueInNewChat:re,onSavedOrgsRefresh:I,onSavedOrgLoad:D,onStop:()=>we?.(Sn.runtimeSession?.taskId??Ae.taskId)})]},Ae.taskId)})}),Pe&&c.jsxs(c.Fragment,{children:[c.jsx("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-secondary)",borderBottom:"1px solid var(--border)"},children:"Recent activity across all sessions"}),c.jsx(Ja,{messages:p,channelName:"Activity",viewKind:"activity",detailMode:"summary",onSend:fe,onMarkRead:$e},L)]}),Te&&c.jsxs(c.Fragment,{children:[c.jsx(Ja,{messages:p,channelName:"Secretary",viewKind:"secretary",detailMode:"summary",onSend:fe,onMarkRead:$e},M),c.jsx(ix,{disabled:!1,channelId:M,placeholder:"Talk to Secretary about policies, rules, preferences...",onSend:Je})]}),o&&!Te&&!Pe&&!Yt&&B==="chat"&&c.jsxs(c.Fragment,{children:[c.jsx(B8,{session:rn??o,agents:S,onTitleChange:X,onViewOnBoard:Be?()=>Be(o.taskId):void 0,onStop:oe,onComplete:(rn??o).status!=="done"&&(rn??o).status!=="cancelled"?de:void 0,onResume:se}),et&&(Rn||mt.length>0||Ht.length>0)&&c.jsx("div",{className:"ctx-work-item-progress",children:c.jsx(Qy,{workItemLog:mt,roleWorkItems:On,executorRoleWorkItems:vn,childSessions:Ht,isCompanyRuntime:et,onWorkItemClick:Me})}),c.jsx(Ja,{messages:p,channelName:A,viewKind:"session",detailMode:tt,agentStatus:it?.agentStatus??wt?.agentStatus,currentTool:it?.currentTool??wt?.currentTool,toolElapsedMs:it?.toolElapsedMs??wt?.toolElapsedMs,lastToolSummary:it?.lastToolSummary??wt?.lastToolSummary,progressLog:Xt,draftAssistantText:it?.draftAssistantText??wt?.draftAssistantText,draftUpdatedAt:it?.draftUpdatedAt??wt?.draftUpdatedAt,draftIteration:it?.draftIteration??wt?.draftIteration,draftTurnId:it?.draftTurnId??wt?.draftTurnId,isCompanyRuntime:it?.isCompanyRuntime??et,workItemLog:mt,roleWorkItems:On,executorRoleWorkItems:vn,childSessions:Ht,onSend:fe,onWorkItemClick:Me,onWorkItemOpenSession:Fe,onMarkRead:$e,hasOlderHistory:!Et.timelineSessions.some(Ki)&&Re>p.length,totalMessageCount:Re,onLoadOlderHistory:Ae=>{const Dt=He(Ae);if(Dt)return nn?.(Dt.taskId,Ae,Pc(Dt,{childDetail:Dt.mode==="child"}))},loadingOlderHistory:Xe,showWorkItemRuntimeCard:!1,showRuntimeProgress:tt==="full"},L),c.jsx(ix,{disabled:!Tn,channelId:it?.channelId??L,execMode:e0(o,w),companyProfile:o.companyProfile,taskPreferredAgent:aC(o,ax(it??wt??o,Math.max(Re,p.length)),C),agentStatus:it?.agentStatus??wt?.agentStatus,currentTool:it?.currentTool??wt?.currentTool,displayTool:it?.displayTool??wt?.displayTool,runtimeControlState:(it??wt)?.runtimeControlState,canStop:(it??wt)?.canStop,savedOrgs:N??null,activeSavedOrg:O??null,selectedOrgId:o.orgId??O??null,lockedMode:ax(it??wt??o,Math.max(Re,p.length)),activeAgentCount:oC(On,ve),contextTokens:it?.contextTokens??wt?.contextTokens,contextWindow:it?.contextWindow??wt?.contextWindow,contextRemainingPct:it?.contextRemainingPct??wt?.contextRemainingPct??100,onSend:Je,onModeChange:(Ae,Dt,kn)=>ee?.(o.taskId,Ae,Dt,kn),onTaskAgentChange:Ae=>te?.(o.taskId,Ae),onContinueInNewChat:re,onSavedOrgsRefresh:I,onSavedOrgLoad:D,onStop:oe})]}),o&&!Te&&!Yt&&B==="agents"&&T&&(ve.length>0||Rn?c.jsx($F,{sessions:ve,roleWorkItems:On,isCompanyRuntime:et,agents:S,onOpenChildDetail:yt,onOpenExecutionPanel:qt}):c.jsxs("div",{className:"ctx-empty",children:[c.jsx("span",{className:"ctx-empty-icon",children:"🧠"}),c.jsx("span",{children:"No child agents have started for this session yet"})]})),o&&!Te&&!Yt&&B==="info"&&$n&&c.jsx(KF,{task:$n,agents:S,roleLabel:gl($n)}),B==="comms"&&Y&&Q&&c.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:c.jsx(R8,{state:H??null,message:V??null,onRefresh:Y,onReadMessage:Q,embedded:!0})}),B==="team"&&J&&c.jsx("div",{style:{flex:1,overflow:"auto",minHeight:0},children:c.jsx(L8,{orgInfoData:q??null,recoveryStatus:G??null,commsState:H??null,onStopRun:P,embedded:!0})})]})]})})]})}function QF({initialWidth:e,minWidth:t,maxWidth:n,onCollapse:r}){const[i,o]=j.useState(e),[a,u]=j.useState(!1),d=j.useRef(0),m=j.useRef(0),p=j.useRef(e);p.current=i;const h=j.useCallback(g=>{g.preventDefault(),d.current=g.clientX,m.current=p.current,u(!0)},[]);return j.useEffect(()=>{if(!a)return;const g=v=>{const k=d.current-v.clientX,S=m.current+k;if(S{u(!1)};return document.body.style.userSelect="none",document.body.style.cursor="col-resize",document.addEventListener("mousemove",g),document.addEventListener("mouseup",y),()=>{document.body.style.userSelect="",document.body.style.cursor="",document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",y)}},[a,t,n,r]),{width:i,isResizing:a,handleMouseDown:h}}const JF=200;function cC(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?`ui-${e.randomUUID()}`:`ui-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function eV(e,t,n){if(e!=="org"&&e!=="custom"||!t)return!0;const{roles:r,employees:i}=t,o=zm(t),a=t.top_level_role_ids??[],u=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&&!u)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(y=>y.role_id));o.runtimeTeams.filter(y=>y.member_role_ids.some(v=>m.has(v))||y.manager_role_id&&m.has(y.manager_role_id)).length===0&&d.push("No runtime teams defined — the system will auto-generate from your roles");const h=new Set(i.map(y=>y.role_id)),g=r.filter(y=>!h.has(y.role_id));if(g.length>0){const y=g.map(v=>v.name).join(", ");d.push(`${g.length} role(s) have no employees: ${y}`)}return d.length>0?confirm(`Before running this task: - -`+d.map(y=>"• "+y).join(` -`)+` - -Run anyway?`):!0}function tV(e){if(!e)return!1;const t=zm(e);return!!(t.projectRun?.run_id||t.runtimeTeams.length>0||t.runtimeSeats.length>0)}function uC(e,t){const n=!!t?.childDetail;return e?n?"full":e.execMode==="company"||e.execMode==="org"||e.execMode==="custom"?"summary":"full":"summary"}function dC(e){return String(e?.originTaskId??e?.taskId??"").trim()||null}function nV({boardColor:e,title:t,onCommit:n}){const[r,i]=j.useState(!1),[o,a]=j.useState(t),u=j.useRef(null);j.useEffect(()=>{r||a(t)},[t,r]);const d=j.useCallback(()=>{const p=o.trim();p&&p!==t?n(p):a(t),i(!1)},[o,t,n]),m=j.useCallback(()=>{a(t),i(!0),setTimeout(()=>u.current?.select(),0)},[t]);return c.jsx("div",{className:"board-selector",children:c.jsx("div",{className:"board-tabs",children:c.jsxs("span",{className:"board-tab active board-tab-editable",style:{"--board-color":e},children:[c.jsx("span",{className:"board-tab-dot",style:{background:e}}),r?c.jsx("input",{ref:u,className:"board-tab-title-input",value:o,onChange:p=>a(p.target.value),onBlur:d,onKeyDown:p=>{p.key==="Enter"&&d(),p.key==="Escape"&&(a(t),i(!1))}}):c.jsx("span",{className:"board-tab-title",onClick:m,title:"Click to edit session title",children:t})]})})})}function rV({boardStore:e,agents:t,officeMap:n,execMode:r,companyProfile:i,taskPreferredAgent:o,chatStore:a,sessionStore:u,projectId:d,onRunTask:m,onCreateTask:p,onMoveTask:h,onCreateSession:g,onSessionSend:y,onSecretarySend:v,onDeleteSession:k,onTitleChange:S,onSessionConfigChange:_,onSessionTaskAgentChange:w,onContinueInNewChat:C,onSessionStop:N,onSessionResume:O,onSessionComplete:I,onLoadSessionDetail:D,onOpenExecutionPanel:T,onCollabSync:L,orgInfoData:A,onNavigateToOrg:M,recoveryStatus:$,onRecoveryResume:W,onRecoveryCancel:B,commsState:U,commsMessage:H,onCommsRefresh:V,onCommsReadMessage:Y,savedOrgsList:Q,activeSavedOrg:q,onSavedOrgsList:G,onSavedOrgLoad:J}){const{sessions:P,activeSessionId:X,activeSession:ee}=u,[te,re]=j.useState("collapsed"),{width:oe,isResizing:de,handleMouseDown:se}=QF({initialWidth:380,minWidth:300,maxWidth:600,onCollapse:()=>re("collapsed")}),[Ee,we]=j.useState("chat"),[Ce,Be]=j.useState(null),[Ge,Ye]=j.useState({kind:"activity"}),[yt,qt]=j.useState([]),[bt,vt]=j.useState(!1),[me,Oe]=j.useState({}),rt=j.useRef(D),Qe=j.useRef({active:null,child:null}),Je=r==="company"||r==="org"||r==="custom",fe=`secretary:${d}`,be=`activity:${d}`,Me=j.useMemo(()=>Ce?P.find(ue=>ue.taskId===Ce)??null:null,[P,Ce]),Fe=j.useMemo(()=>Ge.kind!=="task-detail"?null:e.tasks.find(ue=>ue.id===Ge.taskId)??null,[Ge,e.tasks]),$e=j.useMemo(()=>{const ue=Lm(Fe);return ue?P.find(Se=>Se.taskId===ue||Se.runtimeTaskId===ue||Se.executionTurnId===ue)??null:null},[P,Fe]),Wt=j.useMemo(()=>$e?a.getChannelMessages($e.channelId):[],[a.messages,a.getChannelMessages,$e]),nn=j.useMemo(()=>jf(ee,P),[P,ee]),ke=j.useMemo(()=>$f(ee,P),[P,ee]),Te=j.useMemo(()=>Hf(ee,[...ke,...nn]),[ee,nn,ke]);j.useEffect(()=>{rt.current=D},[D]);const Pe=j.useCallback((ue,Se,Ue="summary")=>{const ft=rt.current;!ft||!ue||(Oe(Kt=>Kt[ue]?Kt:{...Kt,[ue]:!0}),ft(ue,{limit:JF,beforeCreatedAt:Se?.timestamp,beforeMessageId:Se?.id,detailLevel:Ue}),window.setTimeout(()=>{Oe(Kt=>Kt[ue]?{...Kt,[ue]:!1}:Kt)},800))},[]),Ve=j.useCallback(ue=>!!me[ue],[me]);j.useEffect(()=>{Qe.current={active:null,child:null}},[d]),j.useEffect(()=>{Ce&&!Me&&Be(null)},[Ce,Me]),j.useEffect(()=>{Ge.kind==="task-detail"&&!Fe&&Ye({kind:"activity"})},[Ge,Fe]);const qe=j.useRef(null);j.useEffect(()=>{if(!$e){qe.current=null;return}qe.current!==$e.taskId&&(qe.current=$e.taskId,Pe($e.taskId,void 0,"full"))},[$e,Pe]),j.useEffect(()=>{if(!Ce){Qe.current.child=null;return}Qe.current.child!==Ce&&(Qe.current.child=Ce,Pe(Ce,void 0,"full"))},[Ce,Pe]),j.useEffect(()=>{if(!X){Qe.current.active=null;return}const ue=Te.timelineSessions.length>0?Te.timelineSessions:P.find(Ue=>Ue.taskId===X)?[P.find(Ue=>Ue.taskId===X)]:[];if(ue.length===0){Qe.current.active=null;return}const Se=ue.map(Ue=>`${Ue.taskId}:${uC(Ue,{childDetail:Ue.mode==="child"})}`).join("|");if(Qe.current.active!==Se){Qe.current.active=Se;for(const Ue of ue)Pe(Ue.taskId,void 0,uC(Ue,{childDetail:Ue.mode==="child"}))}},[Te.timelineSessions,X,Pe,P]);const et=j.useMemo(()=>Ce?{kind:"child-detail"}:Ge.kind==="task-detail"||Ge.kind==="secretary"?Ge:X?{kind:"session",taskId:X}:{kind:"activity"},[Ge,X,Ce]),Mn=j.useMemo(()=>et.kind==="secretary"?fe:et.kind==="child-detail"&&Me?Me.channelId:et.kind==="session"&&Te.displaySession?Te.displaySession.channelId:et.kind==="session"&&ee?ee.channelId:be,[et,Te.displaySession,ee,Me,fe,be]),Tn=j.useMemo(()=>{if(et.kind==="activity")return[be];if(et.kind==="secretary")return[fe];if(et.kind==="child-detail"&&Me)return[Me.channelId];if(et.kind==="session"){const ue=Te.timelineSessions.map(Se=>Se.channelId).filter((Se,Ue,ft)=>!!Se&&ft.indexOf(Se)===Ue);if(ue.length>0)return ue}return Mn?[Mn]:[]},[et.kind,Te.timelineSessions,Me,be,fe,Mn]),Dn=j.useMemo(()=>{const ue=new Set;for(const Se of P)Se.status!=="cancelled"&&ue.add(Se.channelId);return ue.add(be),ue.add(fe),ue},[P,be,fe]),yn=j.useMemo(()=>et.kind==="activity"?a.messages.filter(ue=>ue.sender!=="user"&&Dn.has(ue.channelId)).sort((ue,Se)=>Se.timestamp-ue.timestamp).slice(0,50).reverse():et.kind==="session"&&Tn.length>1?iS(Tn.map(ue=>a.getChannelMessages(ue))):a.getChannelMessages(Mn),[a.messages,a.getChannelMessages,Mn,et.kind,Dn,Tn]),Yt=j.useMemo(()=>Me?a.getChannelMessages(Me.channelId):[],[a.messages,a.getChannelMessages,Me]),Jt=j.useMemo(()=>{if(et.kind==="session")return Qj(T0(yn).latestPendingReplyMetadata)},[yn,et.kind]),Et=j.useMemo(()=>[...Je?P.filter(Se=>Se.mode!=="child"):P].sort((Se,Ue)=>Ue.updatedAt-Se.updatedAt),[P,Je]),wt=j.useMemo(()=>{if(!Je)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,Je]),tt=j.useMemo(()=>{if(!wt)return e.tasksByColumn;const ue={};for(const[Se,Ue]of Object.entries(e.tasksByColumn))ue[Se]=Ue.filter(ft=>!wt.has(ft.id));return ue},[e.tasksByColumn,wt]),it=!!(ee&&(ee.isCompanyRuntime||nn.length>0)),rn=!!(ee&&(Je||it)),Xt=!!(ee&&Je&&tV(A));j.useEffect(()=>{Ee==="agents"&&!rn&&we("chat"),Ee==="comms"&&!V&&we("chat"),Ee==="team"&&!Xt&&we("chat")},[Ee,rn,Xt,V]);const mt=j.useMemo(()=>{const ue={};for(const Se of P)ue[Se.channelId]=a.getUnreadCount(Se.channelId);return ue[fe]=a.getUnreadCount(fe),ue},[P,a.getUnreadCount,fe]),Ht=j.useMemo(()=>yt.map(ue=>P.find(Se=>Se.taskId===ue)).filter(ue=>!!ue&&ue.mode!=="child"),[yt,P]),On=j.useMemo(()=>{const ue={};for(const Se of Ht){const Ue=jf(Se,P),ft=$f(Se,P),Kt=Hf(Se,[...ft,...Ue]);ue[Se.taskId]=iS(Kt.timelineSessions.map(An=>a.getChannelMessages(An.channelId)))}return ue},[Ht,P,a.getChannelMessages]),vn=j.useMemo(()=>{const ue={};for(const Se of Ht)ue[Se.taskId]=jf(Se,P);return ue},[Ht,P]),Rn=j.useCallback(ue=>{qt(Se=>Se.includes(ue)?Se:[...Se,ue])},[]),ve=j.useRef(null);j.useEffect(()=>{X&&!ve.current&&te==="collapsed"&&(re("open"),we("chat")),ve.current=X},[X,te]),j.useEffect(()=>{X&&Rn(X)},[X,Rn]),j.useEffect(()=>{const ue=new Set(P.map(Se=>Se.taskId));qt(Se=>Se.filter(Ue=>ue.has(Ue))),Oe(Se=>Object.fromEntries(Object.entries(Se).filter(([Ue])=>ue.has(Ue))))},[P]),j.useEffect(()=>{bt&&Ht.length<2&&vt(!1)},[bt,Ht.length]),j.useEffect(()=>{const ue=Se=>{if(Se.key==="Escape"&&te!=="collapsed"){const Ue=Se.target?.tagName;if(Ue==="INPUT"||Ue==="TEXTAREA"||Ue==="SELECT")return;re("collapsed")}};return document.addEventListener("keydown",ue),()=>document.removeEventListener("keydown",ue)},[te]),j.useEffect(()=>{if(te!=="collapsed")for(const ue of Tn)a.markRead(ue)},[Tn,a,te]);const Re=j.useCallback(()=>{for(const ue of Tn)a.markRead(ue)},[Tn,a]),Xe=j.useCallback(ue=>{const Se=P.find(Ue=>Ue.taskId===ue);Se&&a.markRead(Se.channelId)},[P,a]),He=j.useCallback(ue=>{const Se=P.find(Ue=>Ue.taskId===ue);Se&&(Rn(ue),u.setActiveSession(ue),Ye({kind:"session",taskId:ue}),re("open"),we("chat"),Be(null),a.markRead(Se.channelId))},[P,Rn,u,a]),Tt=j.useCallback(ue=>{const Se=yt.filter(ft=>ft!==ue);if(qt(Se),Ce===ue&&Be(null),X!==ue)return;const Ue=Se[Se.length-1]??null;if(u.setActiveSession(Ue),Ue){const ft=P.find(Kt=>Kt.taskId===Ue);Ye({kind:"session",taskId:Ue}),we("chat"),ft&&a.markRead(ft.channelId);return}Ye({kind:"activity"})},[yt,Ce,X,u,P,a]),ht=j.useCallback(ue=>{if(!ue){Ye({kind:"activity"}),u.setActiveSession(null),Be(null);return}const Se=P.find(Ue=>Ue.taskId===ue);if(Je&&Se?.mode==="child"){Be(ue),re("open");return}He(ue)},[P,u,Je,He]),$n=j.useCallback(()=>{Ye({kind:"secretary"}),u.setActiveSession(null),Be(null),re("open"),a.markRead(fe)},[u,a,fe]),Ae=j.useCallback(ue=>{const Se=e.tasks.find(ft=>ft.id===ue.id);if(Je&&Se){Be(null),Ye({kind:"task-detail",taskId:Se.id}),re("open"),we("info");return}P.find(ft=>ft.taskId===ue.id)?He(ue.id):Se&&Se.phase!=="cancelled"&&(u.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:[]}),Rn(ue.id),u.setActiveSession(ue.id),Ye({kind:"session",taskId:ue.id}),re("open"),we("chat"),L?.())},[P,e.tasks,u,He,Rn,L,Je]),Dt=j.useCallback(ue=>{if(!e.activeBoardId)return;const Se=e.activeBoardColumns.find(ft=>ft.name==="Todo");if(!Se)return;const Ue=e.createTask({boardId:e.activeBoardId,columnId:Se.id,title:ue});p(ue,e.activeBoardId,Se.id,Ue.id)},[e,p]),kn=j.useCallback(ue=>{e.setActiveBoard(ue);const Se=P.find(Ue=>Ue.mode!=="child"&&dC(Ue)===ue);if(Se){He(Se.taskId);return}Be(null),Ye({kind:"activity"}),u.setActiveSession(null)},[e,P,He,u]),nr=j.useMemo(()=>new Set(e.boards.map(ue=>ue.id)),[e.boards]);j.useEffect(()=>{if(Je){const ue=Fe?.boardId??dC(ee)??null;if(!ue||!nr.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)},[Je,Fe?.boardId,ee,nr,e.activeBoardId,e.boards,e.setActiveBoard]);const Sn=j.useCallback(ue=>{const Se=e.tasks.find(Cn=>Cn.id===ue);if(!Se)return;const Ue=P.find(Cn=>Cn.taskId===ue),ft=Ue?.execMode??r,Kt=Ue?.companyProfile??i,An=ft==="org"||ft==="custom"?"custom":ft==="company"?Kt:void 0;if(!eV(ft,A,M))return;m(ue,Se.title,Se.description??"",ft,An);const br=e.activeBoardColumns.find(Cn=>Cn.name==="In Progress");br&&e.moveTask(ue,br.id,0)},[e,m,P,r,i,A,M]),We=j.useCallback((ue,Se,Ue,ft)=>{_?.(ue,Se,Ue,ft)},[_]),lr=j.useCallback(ue=>{te==="maximized"&&re("open"),setTimeout(()=>{document.querySelector(`[data-task-id="${ue}"]`)?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},100)},[te]),cr=j.useCallback(()=>{const Se=(Te.runtimeSession??Te.displaySession??ee)?.taskId??X;Se&&N?.(Se)},[Te.runtimeSession,Te.displaySession,ee,X,N]),mn=j.useCallback(()=>{Ce||X&&I?.(X)},[X,Ce,I]),Pt=j.useCallback(ue=>{N?.(ue)},[N]),Zn=j.useCallback(()=>{const ue=Te.runtimeSession??Te.displaySession??ee,Se=ue?.resumeParentTaskId??ue?.taskId??X;Se&&O?.(Se)},[Te.runtimeSession,Te.displaySession,ee,X,O]),wn=j.useCallback(ue=>{const Se=P.find(Ue=>Ue.taskId===ue);O?.(Se?.resumeParentTaskId??ue)},[P,O]),pt=j.useCallback(ue=>{I?.(ue)},[I]),Ar=j.useCallback(()=>{if(!bt&&et.kind!=="session"){const ue=X??Ht[Ht.length-1]?.taskId??null;ue&&He(ue)}vt(ue=>!ue)},[bt,et.kind,X,Ht,He]),jr=j.useCallback((ue,Se,Ue,ft)=>{const Kt=ft?.ui_message_id?ft:{...ft??{},ui_message_id:cC()};y(ue,Se,Ue,Kt)},[y]),Qn=j.useCallback((ue,Se)=>{if(et.kind==="secretary"){v?.(ue);return}const Ue=X;if(!Ue)return;const ft=String(Jt?.response_to_checkpoint_id??"").trim();let Kt=Jt;if(!ft){const An=cC();Kt={...Jt??{},ui_message_id:An};const br=Te.displaySession??ee;a.sendMessage({channelId:br?.channelId??`session:${Ue}`,sender:"user",senderName:"You",content:ue,metadata:{ui_message_id:An}})}jr(Ue,ue,Se,Kt)},[et.kind,X,Te.displaySession,ee,Jt,a,jr,v]),ct=j.useCallback((ue,Se,Ue)=>{const ft=Se??X;ft&&jr(ft,ue,void 0,Ue)},[X,jr]),cn=j.useCallback(ue=>{const Se=P.find(Ue=>Ue.taskId===ue||Ue.runtimeTaskId===ue||Ue.executionTurnId===ue);Se&&(Be(Se.taskId),re("open"),we("chat"),a.markRead(Se.channelId))},[P,a]),sn=j.useCallback(ue=>{if(T){T(ue);return}cn(ue)},[cn,T]),Nt=et.kind==="secretary",vr=Nt?"Secretary":ee?ee.title:"Activity";return c.jsxs("div",{className:`workspace-page${te==="maximized"?" panel-maximized":""}`,children:[c.jsx(W4,{sessions:Et,activeSessionId:Nt?null:X,activeChannel:Nt?fe:null,secretaryChannelId:fe,unreadCounts:mt,onSelect:ht,onCreateSession:g,onDeleteSession:k,onSelectSecretary:v?$n:void 0}),te!=="maximized"&&c.jsxs("div",{className:"workspace-board",children:[$&&W&&B&&c.jsx(n4,{data:$,onResume:W,onCancel:B}),t.length>0&&c.jsx(_8,{agents:t,tasks:e.tasks}),Je?e.activeBoard&&ee&&c.jsx(nV,{boardColor:e.activeBoard.color,title:e.activeBoard.name,onCommit:ue=>S(ee.taskId,ue)},ee.taskId):e.boards.length>1&&c.jsx(k8,{boards:e.boards,activeBoardId:e.activeBoardId,onSelect:kn}),Je&&!e.activeBoard?c.jsx("div",{className:"kanban-empty-state",children:c.jsx("p",{children:"Select a Runtime Session on the left to view its Work Item board."})}):c.jsxs(c.Fragment,{children:[c.jsx(b8,{columns:e.activeBoardColumns,tasksByColumn:tt,agents:t,officeMap:n,store:e,companyMode:Je,selectedTaskId:et.kind==="task-detail"?et.taskId:X,onCardClick:Ae,onStartTask:Sn,onQuickCreate:Dt,onMoveTask:h}),Je&&e.activeBoard&&e.tasks.filter(ue=>ue.boardId===e.activeBoardId).length===0&&c.jsx("div",{className:"kanban-empty-state kanban-empty-state-inline",children:c.jsx("p",{children:"No work items yet — start delegation to populate this board."})})]})]}),c.jsx(ZF,{panelState:te,width:oe,onResizeMouseDown:se,isResizing:de,activeView:et,activeSession:ee,activeTask:Fe,linkedTaskSession:$e,linkedTaskSessionMessages:Wt,childDetailSession:Me,messages:yn,childDetailMessages:Yt,allSessions:P,openSessions:Ht,openSessionMessages:On,openSessionChildren:vn,agents:t,childSessions:nn,execMode:r,taskPreferredAgent:o,savedOrgsList:Q??null,activeSavedOrg:q??null,onSavedOrgsList:G,onSavedOrgLoad:J,canShowAgentsTab:rn,channelId:Mn,channelName:vr,secretaryChannelId:fe,unreadCounts:mt,multiSessionView:bt,panelTab:Ee,onPanelTabChange:we,commsState:U??null,commsMessage:H??null,onCommsRefresh:V?()=>V({session_id:ee?.sessionId||void 0,project_id:d||void 0}):void 0,onCommsReadMessage:Y,orgInfoData:A??null,recoveryStatus:$??null,canShowTeamTab:Xt,onTeamStopRun:X?()=>N?.(X):void 0,onTitleChange:S,onSessionConfigChange:We,onSessionTaskAgentChange:w,onContinueInNewChat:C,onStop:cr,onComplete:mn,onResume:Zn,onResumeTask:wn,onStopTask:Pt,onCompleteTask:pt,onLocateOnBoard:lr,onBackToParent:()=>Be(null),onCloseTaskDetail:()=>Ye({kind:"activity"}),onOpenChildDetail:cn,onOpenExecutionPanel:T,onSelectSessionTab:He,onCloseSessionTab:Tt,onToggleMultiSessionView:Ar,onCollapse:()=>re("collapsed"),onExpand:()=>re("open"),onMaximize:()=>re(ue=>ue==="maximized"?"open":"maximized"),onComposerSend:Qn,onMessageSend:ct,onSessionSend:jr,onWorkItemClick:sn,onWorkItemOpenSession:cn,onMarkRead:Re,onSessionMarkRead:Xe,onLoadSessionHistory:Pe,isSessionHistoryLoading:Ve})]})}function iV(){return`${Date.now()}-${Math.random().toString(36).slice(2,7)}`}const _v=2e3,fC={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 Xo(e){return e.metadata??{}}function om(e){const t=String(e??"").replace(/\r\n/g,` -`).replace(/\r/g,` -`).split(` -`).map(i=>i.trimEnd()).join(` -`).replace(/\n{3,}/g,` - -`).trim(),n=sV(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 sV(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 Ko(e){const t=Xo(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 oV(e){return e.startsWith("checkpoint:")}function Xi(e){return typeof e.timestamp=="number"?e.timestamp:0}function mC(e){const t=String(e.sender??"").trim().toLowerCase(),n=Xo(e),r=typeof n.role=="string"?n.role.trim().toLowerCase():"";return t==="user"||r==="user"?"user":"assistant"}function hC(e){const t=Xo(e),n=String(e.sender??"").trim().toLowerCase();let r=0;const i=TI(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 pC(e){return String(Xo(e).source??"").trim().toLowerCase()==="engine"}function TI(e){const t=Xo(e),n=String(t.transcript_kind??"").trim();if(n)return fC[n]??0;const r=String(t.kind??"").trim();return fC[r]??0}function am(e){return TI(e)>0}function RI(e,t){if(e.channelId!==t.channelId)return!1;const n=Ko(e),r=Ko(t);for(const i of n)if(r.has(i))return!0;return!1}function t0(e,t){if(RI(e,t))return!0;if(e.channelId!==t.channelId||mC(e)!==mC(t)||om(e.content)!==om(t.content))return!1;const n=am(e)&&am(t);if(!n&&String(e.replyToId??"")!==String(t.replyToId??"")||!(pC(e)||pC(t)))return!1;const r=Xi(e),i=Xi(t);return!(!n&&r&&i&&Math.abs(r-i)>_v)}function n0(e,t,n=!1){let r=e,i=t;(n||hC(t)>hC(e))&&(r=t,i=e);const o=[];for(const h of[i.mentions,r.mentions])for(const g of h??[])o.includes(g)||o.push(g);const a=Ko(e),u=Ko(t);let d="";for(const h of a)if(u.has(h)&&!oV(h)){d=h;break}const m=om(r.content),p=m&&m===om(i.content)?m:r.content;return{...i,...r,...d?{id:d}:{},content:p,metadata:{...Xo(i),...Xo(r)},mentions:o,timestamp:Xi(r)||Xi(i)}}function lx(e){const t=[],n=new Map;for(const r of[...e].sort((i,o)=>Xi(i)-Xi(o))){const i=Ko(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=Xi(r),m=am(r);for(let p=t.length-1;p>=0;p--){const h=Xi(t[p]);if(!m&&d>0&&h>0&&d-h>_v)break;if(t0(t[p],r)){o=p;break}}}const u=o===-1?t.length:o;o===-1?t.push(r):t[o]=n0(t[o],r,a);for(const d of Ko(t[u]))n.has(d)||n.set(d,u)}return t}function aV(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 lV(e,t){switch(t.type){case"SET":{const n=lx(t.messages);if(e.length===0)return n;const r=e.filter(i=>typeof i.id=="string"&&i.id.startsWith("msg-")&&!n.some(o=>t0(i,o)));return r.length===0?n:lx([...n,...r])}case"CLEAR":return[];case"ADD":{const n=Xi(t.message);Ko(t.message);let r=!1;for(let i=e.length-1;i>=0;i--){const o=Xi(e[i]);if(!r&&n>0&&o>0&&n-o>_v&&(r=!0),RI(e[i],t.message)){const a=[...e];return a[i]=n0(e[i],t.message,e[i].id===t.message.id),a}if((am(t.message)||!r)&&t0(e[i],t.message)){const a=[...e];return a[i]=n0(e[i],t.message),a}}return[...e,t.message]}case"MERGE":return t.messages.length===0?e:lx([...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 cV(){const[e,t]=j.useReducer(aV,[]),[n,r]=j.useReducer(lV,[]),[i,o]=j.useState({}),[a,u]=j.useState("default"),d=j.useMemo(()=>{const I={};for(const D of n)I[D.channelId]||(I[D.channelId]=[]),I[D.channelId].push(D);return I},[n]),m=j.useMemo(()=>{const I={};for(const D of n){if(D.sender==="user")continue;const T=i[D.channelId]??0;D.timestamp<=T||(I[D.channelId]=(I[D.channelId]??0)+1)}return I},[n,i]),p=j.useCallback(I=>{const D={id:`msg-${iV()}`,channelId:I.channelId,sender:I.sender,senderName:I.senderName,content:I.content,timestamp:Date.now(),replyToId:I.replyToId,mentions:[],metadata:I.metadata};return r({type:"ADD",message:D}),D},[]),h=j.useCallback(I=>d[I]??[],[d]),g=j.useCallback(I=>m[I]??0,[m]),y=j.useCallback(I=>{o(D=>({...D,[I]:Date.now()}))},[]),v=j.useCallback(I=>{r({type:"MARK_SENDER_DELETED",senderId:I})},[]),k=j.useCallback(I=>{t({type:"REMOVE_PARTICIPANT",agentId:I})},[]),S=j.useCallback(I=>{t({type:"REMOVE",channelId:`session:${I}`}),r({type:"REMOVE_BY_TASK_ID",taskId:I})},[]),_=j.useCallback(()=>{t({type:"CLEAR"}),r({type:"CLEAR"}),o({})},[]),w=j.useCallback((I,D,T)=>{const L=I||"default",A=L!==a;u(L),t({type:"SET",channels:D}),r(A?{type:"SET",messages:T}:{type:"MERGE",messages:T});const M={};for(const $ of T)(!M[$.channelId]||$.timestamp>M[$.channelId])&&(M[$.channelId]=$.timestamp);o($=>A?M:{...$,...M})},[a]),C=j.useCallback(I=>{r({type:"ADD",message:I})},[]),N=j.useCallback(I=>{r({type:"MERGE",messages:I})},[]),O=j.useCallback(I=>{t({type:"ADD",channel:I})},[]);return j.useMemo(()=>({scopeProjectId:a,channels:e,messages:n,sendMessage:p,getChannelMessages:h,getUnreadCount:g,markRead:y,markSenderDeleted:v,removeParticipant:k,removeSessionData:S,clear:_,initFromBackend:w,addMessageFromBackend:C,mergeMessagesFromBackend:N,addChannelFromBackend:O}),[a,e,n,p,h,g,y,v,k,S,_,w,C,N,O])}const Vm=4e3;function ll(e,t){return e.length>t?e.slice(-t):e}function r0(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 uV(e,t){const n=e.trim().replace(/\s+/g," ");return n?n.length>120?`${n.slice(0,120).trimEnd()}...`:n:t||"Thinking"}function dV(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 lm(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 fV(e,t){const n=lm(e),r=lm(t);return n&&r?n===r:t.timestamp-e.timestamp>Vm||e.type!==t.type?!1:e.type==="thinking"||e.type==="assistant"?!0:e.type==="tool_call"?e.summary===t.summary:!1}function mV(e,t){return t.timestamp-e.timestamp<=Vm&&e.type===t.type&&e.summary===t.summary&&(e.detail??"")===(t.detail??"")}function hV(e,t){if(e.type==="thinking"||e.type==="assistant"){const n=r0(e.detail??"",t.detail??"","thinking");return{timestamp:t.timestamp,type:e.type,summary:uV(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=r0(e.detail??"",t.detail??"","tool_call");return{timestamp:t.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 AI(e,t,n=100){const r=dV(t),i=lm(r),o=i?[...e].reverse().findIndex(d=>lm(d)===i):-1,a=o>=0?e.length-1-o:e.length-1,u=e[a];return u?i&&o>=0&&typeof u.seq=="number"&&typeof r.seq=="number"&&r.seq<=u.seq?e:mV(u,r)?ll([...e.slice(0,a),{...u,timestamp:r.timestamp},...e.slice(a+1)],n):fV(u,r)?ll([...e.slice(0,a),hV(u,r),...e.slice(a+1)],n):ll([...e,r],n):[r]}function MI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,r)=>AI(n,r,t),[])}function pV(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 DI(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 gV(e,t){return t.timestamp-e.timestamp<=Vm&&DI(e,t)&&(e.type==="thinking"||e.type==="tool_call")}function xV(e,t){return DI(e,t)&&(e.detail??"")===(t.detail??"")&&t.timestamp-e.timestamp<=Vm}function yV(e,t){const n=t.type==="tool_call"?"tool_call":"thinking";return{...e,...t,timestamp:t.timestamp,detail:r0(e.detail??"",t.detail??"",n)||void 0}}function OI(e,t,n=100){const r=pV(t),i=e[e.length-1];return i?xV(i,r)?ll([...e.slice(0,-1),{...i,timestamp:r.timestamp}],n):gV(i,r)?ll([...e.slice(0,-1),yV(i,r)],n):ll([...e,r],n):[r]}function LI(e,t=100){return(Array.isArray(e)?e:[]).reduce((n,r)=>OI(n,r,t),[])}function i0(e){const t=String(e??"").trim().toLowerCase();return t==="company"?"company":t==="org"||t==="custom"?"org":"task"}function vV(e){return String(e??"").trim().toLowerCase()==="custom"?"custom":"corporate"}function zI(e){const t=String(e.execMode??"").trim().toLowerCase(),n=String(e.companyProfile??"").trim().toLowerCase(),r=String(e.orgId??"").trim(),o=t.length>0?i0(t):n==="custom"||r?"org":i0(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 lf=100,bV=new Set(["done","failed","cancelled"]);function _V(e,t,n){const r=n,i=new Map(t.filter(u=>u.projectId===r).map(u=>[u.taskId,u])),o=new Set,a=[];for(const u of e){if(u.projectId!==r)continue;const d=i.get(u.taskId);d?(a.push(d),o.add(u.taskId)):a.push(u)}for(const u of t)u.projectId!==r||o.has(u.taskId)||(a.push(u),o.add(u.taskId));return a}function kV(e,t){const n=g=>zI({...g,progressLog:MI(g.progressLog??[],lf),workItemLog:LI(g.workItemLog??[],lf)}),r=g=>{const y=String(g.execMode??"").trim().toLowerCase();return y==="company"||y==="org"||y==="custom"||!!g.isCompanyRuntime||!!g.parentSessionId||!!g.workItemProjectionId||!!g.roleWorkItems||!!g.executorRoleWorkItems||!!g.orgId},i=g=>{const y=String(g.execMode??"").trim().toLowerCase(),v=String(g.companyProfile??"").trim().toLowerCase(),k=String(g.orgId??"").trim();return y==="task"&&(!v||v==="corporate")&&!k&&!g.isCompanyRuntime&&!g.parentSessionId&&!g.workItemProjectionId&&!g.workItemRoleId&&!g.roleWorkItems&&!g.executorRoleWorkItems},o=(g,y)=>{const v=g.execMode,k=y.execMode;return!v||v==="task"&&k&&k!=="task"&&!i(g)&&(r(g)||r(y))?k:v},a=(g,y,v)=>{const k=g[v],S=y[v];return!k||k==="native"&&S&&S!=="native"?S:k},u=(g,y)=>Object.prototype.hasOwnProperty.call(g,y),d=(g,y,v)=>u(g,v)?g[v]:y[v],m=(g,y)=>{const v=typeof g.updatedAt=="number"&&Number.isFinite(g.updatedAt)?g.updatedAt:void 0,k=typeof y.updatedAt=="number"&&Number.isFinite(y.updatedAt)?y.updatedAt:void 0;return v===void 0?k??Date.now():k===void 0?v:Math.max(k,v)},p=(g,y)=>g.runtimeControlState==="suspending"&&y.runtimeControlState==="running"?{...y,runtimeControlState:"suspending",canStop:!1,canResume:g.canResume??!1,pendingRuntimeCheckpointId:g.pendingRuntimeCheckpointId??y.pendingRuntimeCheckpointId,stopIntentId:g.stopIntentId??y.stopIntentId}:y,h=(g,y,v)=>{const k=g[v];if(k!=null)return k;if(!(bV.has(g.status)||g.status!=="running"&&g.runtimeControlState!=="running"&&g.runtimeControlState!=="suspending"&&g.runtimeControlState!=="resuming"))return y[v]};switch(t.type){case"SET":{if(t.reset)return t.sessions.map(n);const y=new Map(e.map(v=>[v.taskId,v]));return t.sessions.map(v=>{const k=y.get(v.taskId);if(!k)return n(v);const S=p(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:h(v,k,"agentStatus"),currentTool:h(v,k,"currentTool"),displayTool:h(v,k,"displayTool"),toolElapsedMs:h(v,k,"toolElapsedMs"),lastToolSummary:h(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,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(y=>y.taskId===t.session.taskId)?e.map(y=>y.taskId===t.session.taskId?n({...y,...g,progressLog:g.progressLog.length>0?g.progressLog:y.progressLog,workItemLog:(g.workItemLog??[]).length>0?g.workItemLog:y.workItemLog,messageCount:Math.max(y.messageCount??0,g.messageCount??0),updatedAt:Math.max(y.updatedAt??0,g.updatedAt??0),execMode:o(g,y),preferredAgent:a(g,y,"preferredAgent"),workItemProjectionId:g.workItemProjectionId??y.workItemProjectionId,workItemTurnType:g.workItemTurnType??y.workItemTurnType,companyProfile:d(g,y,"companyProfile"),orgId:d(g,y,"orgId"),workItemRoleId:g.workItemRoleId??y.workItemRoleId,workItemRoleName:g.workItemRoleName??y.workItemRoleName,workItemGate:g.workItemGate??y.workItemGate,roleWorkItems:g.roleWorkItems??y.roleWorkItems,executorRoleWorkItems:g.executorRoleWorkItems??y.executorRoleWorkItems,employeeAssignment:g.employeeAssignment??y.employeeAssignment,selectedExecutionAgent:a(g,y,"selectedExecutionAgent"),handoffContext:g.handoffContext??y.handoffContext,handoffTo:g.handoffTo??y.handoffTo,latestPreview:g.latestPreview??y.latestPreview,latestSender:g.latestSender??y.latestSender,latestMessageId:g.latestMessageId??y.latestMessageId,indexLoaded:g.indexLoaded??y.indexLoaded,detailLoaded:g.detailLoaded??y.detailLoaded,fullLoaded:g.fullLoaded??y.fullLoaded,hasMore:g.hasMore??y.hasMore,detailLoading:g.detailLoading??y.detailLoading,detailError:g.detailError??y.detailError,viewGeneration:g.viewGeneration??y.viewGeneration}):y):[g,...e];case"UPDATE":return e.map(y=>y.taskId===t.taskId?(()=>{const v=p(y,t.partial);return n({...y,...v,updatedAt:m(v,y),runtimeControlState:v.runtimeControlState??y.runtimeControlState,canStop:v.canStop??y.canStop,canResume:v.canResume??y.canResume,resumeParentTaskId:v.resumeParentTaskId??y.resumeParentTaskId,resumeParentSessionId:v.resumeParentSessionId??y.resumeParentSessionId,pendingRuntimeCheckpointId:v.pendingRuntimeCheckpointId??y.pendingRuntimeCheckpointId,stopIntentId:v.stopIntentId??y.stopIntentId,roleWorkItems:v.roleWorkItems??y.roleWorkItems,executorRoleWorkItems:v.executorRoleWorkItems??y.executorRoleWorkItems,execMode:d(v,y,"execMode"),companyProfile:d(v,y,"companyProfile"),orgId:d(v,y,"orgId"),isCompanyRuntime:v.isCompanyRuntime??y.isCompanyRuntime,workItemProjectionId:v.workItemProjectionId??y.workItemProjectionId,workItemTurnType:v.workItemTurnType??y.workItemTurnType,workItemRoleId:v.workItemRoleId??y.workItemRoleId,workItemRoleName:v.workItemRoleName??y.workItemRoleName,workItemGate:v.workItemGate??y.workItemGate,employeeAssignment:v.employeeAssignment??y.employeeAssignment,selectedExecutionAgent:v.selectedExecutionAgent??y.selectedExecutionAgent,activeSubagents:v.activeSubagents??y.activeSubagents,permissionRequests:v.permissionRequests??y.permissionRequests,contextTokens:v.contextTokens??y.contextTokens,contextWindow:v.contextWindow??y.contextWindow,contextRemainingPct:v.contextRemainingPct??y.contextRemainingPct,inputTokens:v.inputTokens??y.inputTokens,outputTokens:v.outputTokens??y.outputTokens,totalTokens:v.totalTokens??y.totalTokens,turnCostUsd:v.turnCostUsd??y.turnCostUsd,sessionCostUsd:v.sessionCostUsd??y.sessionCostUsd,...t.partial.progressLog?{progressLog:t.partial.progressLog}:{},...t.partial.workItemLog?{workItemLog:t.partial.workItemLog}:{}})})():y);case"DELETE":return e.filter(y=>y.taskId!==t.taskId);case"APPEND_PROGRESS":return e.map(y=>y.taskId!==t.taskId?y:{...y,progressLog:AI(y.progressLog,t.entry,lf),updatedAt:Math.max(y.updatedAt,t.entry.timestamp)});case"APPEND_DRAFT":return e.map(y=>{if(y.taskId!==t.taskId)return y;const v=t.turnId??y.draftTurnId,k=!!t.turnId&&!!y.draftTurnId&&t.turnId!==y.draftTurnId;return{...y,draftAssistantText:`${k?"":y.draftAssistantText??""}${t.text}`,draftUpdatedAt:t.timestamp,draftIteration:t.iteration??y.draftIteration,draftTurnId:v,updatedAt:Math.max(y.updatedAt,t.timestamp)}});case"CLEAR_DRAFT":return e.map(y=>y.taskId===t.taskId?{...y,draftAssistantText:void 0,draftUpdatedAt:void 0,draftIteration:void 0,draftTurnId:void 0}:y);case"CLEAR_PROGRESS":return e.map(y=>y.taskId===t.taskId?{...y,progressLog:[]}:y);case"APPEND_WORK_ITEM_PROGRESS":return e.map(y=>y.taskId!==t.taskId?y:{...y,workItemLog:OI(y.workItemLog??[],t.entry,lf)});case"SET_COMPANY_RUNTIME":return e.map(y=>y.taskId===t.taskId?{...y,isCompanyRuntime:t.isCompanyRuntime}:y);default:return e}}function SV(){const[e,t]=j.useReducer(kV,[]),[n,r]=j.useState(null),[i,o]=j.useState("default"),a=j.useMemo(()=>e.find(w=>w.taskId===n)??null,[e,n]),u=j.useCallback(w=>{w.projectId===i&&t({type:"ADD",session:w})},[i]),d=j.useCallback(w=>{t({type:"DELETE",taskId:w})},[]),m=j.useCallback(w=>{r(w)},[]),p=j.useCallback((w,C)=>{t({type:"UPDATE",taskId:w,partial:C})},[]),h=j.useCallback((w,C)=>{t({type:"APPEND_PROGRESS",taskId:w,entry:C})},[]),g=j.useCallback((w,C,N,O)=>{t({type:"APPEND_DRAFT",taskId:w,text:C,iteration:N,turnId:O,timestamp:Date.now()})},[]),y=j.useCallback(w=>{t({type:"CLEAR_DRAFT",taskId:w})},[]),v=j.useCallback(w=>{t({type:"CLEAR_PROGRESS",taskId:w})},[]),k=j.useCallback((w,C)=>{t({type:"APPEND_WORK_ITEM_PROGRESS",taskId:w,entry:C})},[]),S=j.useCallback((w,C)=>{t({type:"SET_COMPANY_RUNTIME",taskId:w,isCompanyRuntime:C})},[]),_=j.useCallback((w,C,N)=>{const O=w||"default",I=O!==i,D=N?.preserveExistingWhenIncomingPartial&&!I?_V(e,C,O):C.filter(T=>T.projectId===O);o(O),t({type:"SET",sessions:D,reset:I}),r(T=>!I&&T&&(D.some(L=>L.taskId===T)||N?.preserveActiveWhenMissing)?T:null)},[i,e]);return j.useMemo(()=>({scopeProjectId:i,sessions:e,activeSessionId:n,activeSession:a,createSession:u,deleteSession:d,setActiveSession:m,updateSession:p,appendProgress:h,appendDraft:g,clearDraft:y,clearProgress:v,appendWorkItemProgress:k,setCompanyRuntime:S,initFromBackend:_}),[i,e,n,a,u,d,m,p,h,g,y,v,k,S,_])}function gC(e){return e.trim()||"default"}function wV(e,t){switch(t.type){case"SET":return{projects:t.projects,activeProjectId:gC(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:gC(t.id)};default:return e}}function CV(){const[e,t]=j.useReducer(wV,{projects:[{id:"default",name:"default"}],activeProjectId:"default"}),n=j.useCallback((a,u)=>{t({type:"SET",projects:a,activeId:u})},[]),r=j.useCallback(a=>{t({type:"ADD",project:a})},[]),i=j.useCallback(a=>{t({type:"REMOVE",id:a})},[]),o=j.useCallback(a=>{t({type:"SET_ACTIVE",id:a})},[]);return j.useMemo(()=>({projects:e.projects,activeProjectId:e.activeProjectId,initFromBackend:n,addProject:r,removeProject:i,setActiveProject:o}),[e,n,r,i,o])}const xC={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"}},cf={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 jV(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 cx(e){const t=String(e??"").trim();return t?t.replace(/[_-]/g," ").replace(/\b\w/g,n=>n.toUpperCase()):""}function EV(e){return e.phase==="failed"?cf.failed:e.phase==="cancelled"?cf.cancelled:cf[e.kanbanColumn]??cf.todo}function NV(e){if(e.phase==="failed")return"failed";if(e.phase==="cancelled")return"cancelled";if(e.kanbanColumn==="done")return"done"}function IV(e){const t=e.activitySections??[];return t.length>0?t.reduce((n,r)=>n+(r.entries?.length??0),0):e.progressLog.length}function TV({sections:e,fallbackEntries:t,sessionStatus:n}){const r=(e??[]).filter(i=>(i.entries?.length??0)>0||!!i.runtimeTaskId);return r.length>0?c.jsx("div",{className:"exec-activity-sections",children:r.map((i,o)=>{const a=i.entries??[],u=`${i.runtimeTaskId||i.kind}:${o}`;return c.jsxs("section",{className:"exec-activity-section",children:[c.jsxs("div",{className:"exec-activity-section-head",children:[c.jsx("span",{className:"exec-activity-section-title",children:i.title}),i.roleName&&c.jsx("span",{className:"exec-activity-section-role",children:i.roleName}),a.length>0&&c.jsx("span",{className:"exec-section-count",children:a.length})]}),a.length>0?c.jsx(Wo,{entries:a,sessionStatus:n,expandedByDefault:!0}):c.jsx("div",{className:"exec-section-empty",children:"No runtime activity yet"})]},u)})}):!t||t.length===0?c.jsx("div",{className:"exec-section-empty",children:"No activity recorded yet"}):c.jsx(Wo,{entries:t,sessionStatus:n,expandedByDefault:!0})}function yC({role:e,focusedWorkItemId:t,focusedExecutionTurnId:n,agents:r,onClose:i}){const o=j.useMemo(()=>e.workItems.slice().sort((w,C)=>w.createdAt-C.createdAt),[e.workItems]),u=j.useMemo(()=>o.find(w=>!!t&&w.workItemId===t||!!n&&w.executionTurnId===n)??o[o.length-1]??null,[n,t,o])?.workItemId,[d,m]=j.useState(()=>{const w=new Set;return u&&w.add(u),w}),p=j.useRef(new Set);j.useEffect(()=>{!u||p.current.has(u)||(p.current.add(u),m(w=>{if(w.has(u))return w;const C=new Set(w);return C.add(u),C}))},[u]);const h=j.useCallback(w=>{m(C=>{const N=new Set(C);return N.has(w)?N.delete(w):N.add(w),N})},[]),g=j.useRef(null),y=j.useRef(null);j.useEffect(()=>{!u||y.current===u||(y.current=u,g.current?.scrollIntoView({behavior:"smooth",block:"nearest"}))},[u]);const v=j.useCallback(w=>{w.key==="Escape"&&i()},[i]);j.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||cx(e.roleId)||"Role",_=xC[e.aggregatedStatus]??xC.pending;return c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"exec-panel-backdrop",onClick:i}),c.jsxs("div",{className:"exec-panel",children:[c.jsxs("div",{className:"exec-panel-header",children:[c.jsxs("div",{className:"exec-panel-title-row",children:[c.jsx(dl,{}),c.jsx("h3",{className:"exec-panel-title",children:S}),c.jsx("span",{className:`exec-badge ${_.cls}`,children:_.label}),c.jsxs("span",{className:"exec-panel-task-count",children:[o.length," Work Item",o.length===1?"":"s"]})]}),c.jsx("button",{className:"exec-panel-close",onClick:i,title:"Close (Esc)",children:c.jsx(Em,{})})]}),c.jsxs("div",{className:"exec-panel-identity",children:[c.jsx("div",{className:"exec-panel-avatar",children:S.charAt(0).toUpperCase()}),c.jsxs("div",{className:"exec-panel-agent-info",children:[c.jsx("span",{className:"exec-panel-agent-name",children:S}),c.jsx("span",{className:"exec-panel-agent-role",children:cx(e.roleId)}),e.roleSessionId&&c.jsx("span",{className:"exec-panel-employee",children:e.roleSessionId})]})]}),c.jsxs("div",{className:"exec-panel-body",children:[o.length===0&&c.jsx("div",{className:"exec-section-empty",children:"No work items yet"}),o.map((w,C)=>{const N=w.workItemId===u,O=d.has(w.workItemId),I=EV(w),D=IV(w);return c.jsxs("div",{ref:N?g:null,className:`exec-task-card${N?" exec-task-card-focused":""}`,children:[c.jsxs("button",{type:"button",className:"exec-task-card-header",onClick:()=>h(w.workItemId),title:O?"Collapse":"Expand",children:[c.jsxs("span",{className:"exec-task-card-index",children:["Work item #",C+1]}),c.jsx("span",{className:"exec-task-card-title",children:w.title||w.workItemId}),c.jsx("span",{className:`exec-badge ${I.cls}`,children:I.label}),c.jsx("span",{className:"exec-task-card-time",children:jV(w.updatedAt)}),c.jsx("span",{className:`exec-task-card-chevron${O?" open":""}`,"aria-hidden":"true",children:"▸"})]}),O&&c.jsxs("div",{className:"exec-task-card-body",children:[c.jsxs("div",{className:"exec-task-card-projection",children:[c.jsx(jm,{}),c.jsx("span",{children:cx(w.kind)||"Work item"}),w.workItemProjectionId&&c.jsx("code",{children:w.workItemProjectionId}),w.executionTurnId&&c.jsx("span",{className:"exec-inline-tag",children:"Execution Turn"}),w.isReviewTarget&&c.jsx("span",{className:"exec-inline-tag",children:"Review target"}),w.executorRoleName&&c.jsx("span",{children:w.executorRoleName})]}),c.jsxs("div",{className:"exec-section",children:[c.jsxs("div",{className:"exec-section-header",children:[c.jsx(dl,{}),c.jsx("span",{children:"Activity"}),c.jsx("span",{className:"exec-section-count",children:D})]}),c.jsx("div",{className:"exec-section-content exec-activity-scroll",children:c.jsx(TV,{sections:w.activitySections,fallbackEntries:w.progressLog,sessionStatus:NV(w)})})]})]})]},w.workItemId)})]})]})]})}function RV({projects:e,activeId:t,onSelect:n,onCreate:r,onDelete:i}){const[o,a]=j.useState(!1),[u,d]=j.useState(""),[m,p]=j.useState(null),h=j.useCallback(()=>{const y=u.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-|-$/g,"");y&&(r(y),d(""),a(!1))},[u,r]),g=j.useCallback(()=>{!m||!i||(i(m),p(null))},[m,i]);return c.jsxs("div",{className:"project-selector",style:{display:"flex",alignItems:"center",gap:6},children:[c.jsx("select",{className:"theme-select",value:t,onChange:y=>n(y.target.value),title:"Switch project",children:e.map(y=>c.jsx("option",{value:y.id,children:y.name},y.id))}),o?c.jsxs("form",{onSubmit:y=>{y.preventDefault(),h()},style:{display:"flex",gap:4},children:[c.jsx("input",{autoFocus:!0,className:"theme-select",value:u,placeholder:"project-name",onChange:y=>d(y.target.value),onKeyDown:y=>{y.key==="Escape"&&a(!1)},style:{width:120}}),c.jsx("button",{type:"submit",className:"pill-btn",style:{fontSize:11,padding:"2px 8px"},children:"+"})]}):c.jsx("button",{className:"pill-btn",onClick:()=>a(!0),title:"New project",style:{fontSize:11,padding:"2px 8px"},children:"+"}),i&&t!=="default"&&!m&&c.jsx("button",{className:"pill-btn",onClick:()=>p(t),title:"Delete project",style:{fontSize:11,padding:"2px 8px",color:"#ef4444"},children:"Del"}),m&&c.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:c.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:[c.jsxs("p",{style:{margin:"0 0 8px",fontWeight:600,fontSize:15},children:['Delete project "',m,'"?']}),c.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."}),c.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"center"},children:[c.jsx("button",{className:"pill-btn",onClick:()=>p(null),style:{padding:"6px 18px",fontSize:13},children:"Cancel"}),c.jsx("button",{className:"pill-btn",onClick:g,style:{padding:"6px 18px",fontSize:13,background:"#ef4444",color:"#fff"},children:"Delete"})]})]})})]})}const AV=80;function MV(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 vC(e){return(e.organization_name||e.name).trim()||e.name}function DV(e){const t=e.trim();return t.length>0&&t.length<=AV&&!/[\\/]/.test(t)&&!/[\u0000-\u001f]/.test(t)}function OV(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 LV({className:e}){return c.jsxs("svg",{className:e,width:"12",height:"12",viewBox:"0 0 16 16",fill:"none","aria-hidden":!0,children:[c.jsx("path",{d:"M8 1.5L1.5 4.5L8 7.5L14.5 4.5L8 1.5Z",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round"}),c.jsx("path",{d:"M2 8L8 10.8L14 8",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.6"}),c.jsx("path",{d:"M2 11.5L8 14.2L14 11.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinejoin:"round",opacity:"0.35"})]})}function zV({className:e}){return c.jsx("svg",{className:e,width:"10",height:"10",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:c.jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}function PV({className:e}){return c.jsxs("svg",{className:e,width:"11",height:"11",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:[c.jsx("circle",{cx:"5",cy:"5",r:"3.2",stroke:"currentColor",strokeWidth:"1.3"}),c.jsx("path",{d:"M7.5 7.5L10 10",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]})}function BV({savedOrgs:e,activeName:t,isDirty:n,onRefresh:r,onSaveAs:i,onLoad:o,onDelete:a}){const[u,d]=j.useState(!1),[m,p]=j.useState(""),[h,g]=j.useState(0),[y,v]=j.useState(!1),[k,S]=j.useState(""),[_,w]=j.useState(null),[C,N]=j.useState(null),O=j.useRef(null),I=j.useRef(null);j.useEffect(()=>{N(null)},[t,e]);const D=(e??[]).filter(Y=>!m.trim()||Y.name.toLowerCase().includes(m.trim().toLowerCase())),T=j.useRef(!1);j.useEffect(()=>{u&&!T.current&&(T.current=!0,r())},[u,r]),j.useEffect(()=>{y&&I.current?.focus()},[y]),j.useEffect(()=>{g(Y=>Math.min(Y,Math.max(0,D.length-1)))},[D.length]),j.useEffect(()=>{if(!u)return;const Y=Q=>{O.current&&!O.current.contains(Q.target)&&L()};return document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[u]);const L=j.useCallback(()=>{d(!1),p(""),g(0),v(!1),S(""),w(null)},[]),A=j.useCallback(Y=>{if(Y===t){L();return}N(Y),o(Y),L()},[o,L,t]),M=j.useCallback(Y=>{a(Y),w(null)},[a]),$=k.trim(),W=DV($),B=OV($),U=(e??[]).some(Y=>Y.name===B||vC(Y).toLowerCase()===$.toLowerCase()),H=j.useCallback(()=>{W&&(i($,U),v(!1),S(""),L())},[W,$,U,i,L]),V=Y=>{if(Y.key==="Escape"){Y.preventDefault(),L();return}if(y){Y.key==="Enter"&&(Y.preventDefault(),H());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[h];Q&&A(Q.name)}else if((Y.key==="Backspace"||Y.key==="Delete")&&(Y.metaKey||Y.ctrlKey)){const Q=D[h];Q&&(Y.preventDefault(),w(Q.name))}};return c.jsxs("div",{className:"sos-wrap",ref:O,children:[c.jsxs("button",{type:"button",className:"sos-pill","data-open":u?"true":"false",onClick:()=>d(Y=>!Y),"aria-haspopup":"listbox","aria-expanded":u,title:t?`Active saved architecture: ${t}`:"No saved architecture loaded",children:[c.jsx(LV,{className:"sos-pill-glyph"}),t?c.jsx("span",{className:"sos-pill-name",children:t}):c.jsx("span",{className:"sos-pill-name sos-pill-name--placeholder",children:"draft"}),n&&c.jsx("span",{className:"sos-pill-dirty","aria-label":"Modified since opened"}),c.jsx(zV,{className:"sos-pill-caret"})]}),u&&c.jsxs("div",{className:"sos-popover",role:"listbox",onKeyDown:V,tabIndex:-1,children:[c.jsxs("div",{className:"sos-search-row",children:[c.jsx(PV,{className:"sos-search-glyph"}),c.jsx("input",{type:"text",className:"sos-search-input",placeholder:"Search architectures…",value:m,onChange:Y=>{p(Y.target.value),g(0)},autoFocus:!0,onKeyDown:V}),c.jsx("kbd",{className:"sos-search-hint",children:"↑↓ ↵"})]}),c.jsx("div",{className:"sos-list",children:e===null?c.jsx("div",{className:"sos-empty",children:"Loading…"}):D.length===0?c.jsx("div",{className:"sos-empty",children:(e??[]).length===0?"No saved architectures.":"No matches."}):D.map((Y,Q)=>{const q=t===Y.name,G=h===Q,J=vC(Y);return c.jsxs("div",{className:`sos-row${q?" sos-row--active":""}`,"data-highlighted":G?"true":"false",onMouseEnter:()=>g(Q),onClick:()=>A(Y.name),role:"option","aria-selected":q,children:[c.jsxs("div",{className:"sos-row-meta",children:[c.jsx("span",{className:"sos-row-name",children:J}),c.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"," · ",MV(Y.saved_at)]})]}),C===Y.name?c.jsx("span",{className:"sos-row-loading",children:"loading…"}):q?c.jsx("span",{className:"sos-row-active-chip",children:"active"}):_===Y.name?c.jsx("button",{type:"button",className:"sos-row-delete sos-row-delete--confirm",onClick:P=>{P.stopPropagation(),M(Y.name)},children:"confirm"}):c.jsx("button",{type:"button",className:"sos-row-delete",onClick:P=>{P.stopPropagation(),w(Y.name)},title:"Delete",children:"delete"})]},Y.name)})}),c.jsxs("div",{className:"sos-save-as",children:[y?c.jsxs("div",{className:"sos-save-as-form",children:[c.jsx("input",{ref:I,type:"text",className:"sos-save-as-input",placeholder:"Organization name",value:k,onChange:Y=>S(Y.target.value),onKeyDown:V}),c.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:H,disabled:!W,children:U?"Overwrite copy":"Save as copy"}),c.jsx("button",{type:"button",className:"btn btn-ghost btn-sm",onClick:()=>{v(!1),S("")},children:"Cancel"})]}):c.jsx("button",{type:"button",className:"sos-save-as-trigger",onClick:()=>v(!0),children:"+ Save as copy..."}),y&&k&&!W&&c.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Use up to 80 characters. Slashes are not allowed."}),y&&W&&U&&c.jsx("div",{className:"sos-save-as-hint sos-save-as-hint--warn",children:"Name exists - this will overwrite that copy."})]})]})]})}const $V=["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"],ru={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 Du(e){return e?e.startsWith("data:")?e:ru[e]??ru.generic:ru.generic}const Bc=["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"],HV=[{label:"Files",prefix:"file_",tools:Bc.filter(e=>e.startsWith("file_"))},{label:"Shell",prefix:"shell_",tools:Bc.filter(e=>e==="shell_exec")},{label:"Web",prefix:"web_",tools:Bc.filter(e=>e.startsWith("web_"))},{label:"TODOs",prefix:"todo_",tools:Bc.filter(e=>e.startsWith("todo_"))},{label:"Browser",prefix:"browser_",tools:Bc.filter(e=>e.startsWith("browser_"))}],FV=["codex","cursor","claude_code","opencode"],VV=[{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 UV({role:e,allRoles:t,employees:n,readOnly:r,onUpdateRole:i,onDeleteRole:o,onClose:a}){const[u,d]=j.useState(e.name),[m,p]=j.useState(e.responsibility),[h,g]=j.useState(e.reports_to),[y,v]=j.useState(e.icon??null),[k,S]=j.useState(()=>new Set(e.can_spawn)),[_,w]=j.useState(()=>new Set(e.tools)),[C,N]=j.useState(e.runtime_policy?.execution_strategy??"auto"),[O,I]=j.useState(e.preferred_external_agent??null),[D,T]=j.useState((e.prompt_refs??[]).join(` -`)),[L,A]=j.useState(!1),M=j.useRef(e.role_id);j.useEffect(()=>{M.current!==e.role_id&&(M.current=e.role_id,d(e.name),p(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"),I(e.preferred_external_agent??null),T((e.prompt_refs??[]).join(` -`)),A(!1))},[e]);const $=j.useRef({}),W=j.useRef(null),B=j.useRef(e.role_id);j.useEffect(()=>{B.current=e.role_id},[e.role_id]);const U=j.useCallback(()=>{W.current&&(clearTimeout(W.current),W.current=null);const se=$.current;$.current={},Object.keys(se).length!==0&&i(B.current,se)},[i]),H=j.useCallback(se=>{r||($.current={...$.current,...se},W.current&&clearTimeout(W.current),W.current=setTimeout(U,500))},[U,r]);j.useEffect(()=>()=>{W.current&&(clearTimeout(W.current),W.current=null);const se=$.current;Object.keys(se).length>0&&($.current={},i(B.current,se))},[i]);const V=se=>{d(se),H({name:se})},Y=se=>{p(se),H({responsibility:se})},Q=se=>{g(se),H({reports_to:se})},q=se=>{v(se),H({icon:se})},G=se=>{N(se),H({execution_strategy:se})},J=se=>{I(se),H({preferred_external_agent:se})},P=se=>{T(se);const Ee=se.split(` -`).map(we=>we.trim()).filter(Boolean);H({prompt_refs:Ee})},X=se=>{const Ee=new Set(k);Ee.has(se)?Ee.delete(se):Ee.add(se),S(Ee),H({can_spawn:Array.from(Ee)})},ee=se=>{const Ee=new Set(_);Ee.has(se)?Ee.delete(se):Ee.add(se),w(Ee),H({tools:Array.from(Ee)})},te=j.useMemo(()=>t.filter(se=>se.role_id!==e.role_id),[t,e.role_id]),re=j.useMemo(()=>n.filter(se=>(se.role_ids?.length?se.role_ids:[se.role_id]).includes(e.role_id)).length,[n,e.role_id]),oe=j.useMemo(()=>D.split(` -`).filter(se=>se.trim()).length,[D]),de=()=>{if(!L){A(!0);return}U(),o(e.role_id)};return c.jsxs("aside",{className:"ri-panel","aria-label":`Inspector for role ${e.name}`,children:[c.jsxs("header",{className:"ri-panel-header",children:[c.jsx("img",{src:Du(y),alt:"",className:"ri-panel-icon"}),c.jsxs("div",{className:"ri-panel-title-wrap",children:[c.jsx("h3",{className:"ri-panel-title",children:u||"(unnamed)"}),c.jsx("code",{className:"ri-panel-id",children:e.role_id})]}),c.jsx("button",{className:"btn btn-ghost btn-sm ri-panel-close",onClick:a,title:"Close (Esc)",children:"✕"})]}),c.jsxs("div",{className:"ri-panel-body",children:[c.jsxs(Ya,{title:"Identity",defaultExpanded:!0,children:[c.jsx(xi,{label:"Name",children:c.jsx("input",{className:"ri-text-input",value:u,onChange:se=>V(se.target.value),disabled:r})}),c.jsx(xi,{label:"Responsibility",children:c.jsx("textarea",{className:"ri-textarea",rows:3,value:m,onChange:se=>Y(se.target.value),disabled:r})}),c.jsx(xi,{label:"Icon",children:c.jsx(GV,{value:y,onChange:q,readOnly:r})})]}),c.jsxs(Ya,{title:"Hierarchy",defaultExpanded:!0,children:[c.jsx(xi,{label:"Reports to",children:c.jsxs("select",{className:"ri-select",value:h,onChange:se=>Q(se.target.value),disabled:r,children:[c.jsx("option",{value:"owner",children:"You (Owner)"}),te.map(se=>c.jsx("option",{value:se.role_id,children:se.name},se.role_id))]})}),c.jsx(xi,{label:"Can delegate to",children:c.jsx(qV,{allIds:te.map(se=>se.role_id),labelFor:se=>te.find(Ee=>Ee.role_id===se)?.name??se,selected:k,onToggle:X,readOnly:r})}),c.jsx(xi,{label:"Employees assigned",children:c.jsx("span",{className:"ri-meta-value",children:re})})]}),c.jsx(Ya,{title:`Tools (${_.size})`,children:c.jsx(WV,{tools:_,onToggle:ee,readOnly:r})}),c.jsx(Ya,{title:`Prompts (${oe})`,children:c.jsx(xi,{label:"Prompt refs / inline",children:c.jsx("textarea",{className:"ri-textarea ri-textarea-mono",rows:5,placeholder:"One prompt ref or inline instruction per line",value:D,onChange:se=>P(se.target.value),disabled:r})})}),c.jsxs(Ya,{title:"Runtime policy",children:[c.jsx(xi,{label:"Execution strategy",children:c.jsx("div",{className:"ri-radio-group",children:VV.map(se=>c.jsxs("label",{className:"ri-radio",title:se.hint,children:[c.jsx("input",{type:"radio",name:`exec-strategy-${e.role_id}`,value:se.value,checked:C===se.value,onChange:()=>G(se.value),disabled:r}),se.label]},se.value))})}),C==="external"&&c.jsx(xi,{label:"Preferred external agent",children:c.jsxs("select",{className:"ri-select",value:O??"",onChange:se=>J(se.target.value||null),disabled:r,children:[c.jsx("option",{value:"",children:"(any)"}),FV.map(se=>c.jsx("option",{value:se,children:se},se))]})})]}),c.jsxs(Ya,{title:"Advanced",children:[c.jsx(xi,{label:"Role type",children:c.jsx("span",{className:"ri-meta-value",children:e.role_type??"worker"})}),c.jsx(xi,{label:"Skills",children:c.jsx("span",{className:"ri-meta-value",children:e.skill_refs&&e.skill_refs.length>0?e.skill_refs.join(", "):"(none)"})}),c.jsx(xi,{label:"Artifact contract",children:c.jsx("span",{className:"ri-meta-value",children:e.artifact_contract_ref??"(none)"})})]})]}),!r&&c.jsx("footer",{className:"ri-panel-footer",children:c.jsx("button",{className:`btn btn-sm ${L?"btn-danger":"btn-ghost"}`,onClick:de,onBlur:()=>A(!1),children:L?"Confirm delete?":"Delete role"})})]})}function Ya({title:e,defaultExpanded:t=!1,children:n}){const[r,i]=j.useState(t);return c.jsxs("section",{className:`ri-group${r?" is-expanded":""}`,children:[c.jsxs("button",{className:"ri-group-header",onClick:()=>i(o=>!o),children:[c.jsx("span",{className:"ri-group-caret",children:r?"▾":"▸"}),c.jsx("span",{className:"ri-group-title",children:e})]}),r&&c.jsx("div",{className:"ri-group-body",children:n})]})}function xi({label:e,children:t}){return c.jsxs("div",{className:"ri-field",children:[c.jsx("label",{className:"ri-field-label",children:e}),c.jsx("div",{className:"ri-field-control",children:t})]})}function GV({value:e,onChange:t,readOnly:n}){const[r,i]=j.useState(!1);return c.jsxs("div",{className:"ri-icon-picker",children:[c.jsxs("button",{className:"ri-icon-picker-trigger",onClick:()=>!n&&i(o=>!o),disabled:n,children:[c.jsx("img",{src:Du(e),alt:"",className:"ri-icon-picker-current"}),c.jsx("span",{className:"ri-icon-picker-label",children:e??"generic"})]}),r&&c.jsxs("div",{className:"ri-icon-picker-popover",children:[c.jsx("button",{className:`ri-icon-option${e===null?" is-active":""}`,onClick:()=>{t(null),i(!1)},title:"Default icon",children:c.jsx("img",{src:ru.generic,alt:""})}),$V.filter(o=>o!=="generic").map(o=>c.jsx("button",{className:`ri-icon-option${e===o?" is-active":""}`,onClick:()=>{t(o),i(!1)},title:o,children:c.jsx("img",{src:ru[o],alt:o})},o))]})]})}function qV({allIds:e,labelFor:t,selected:n,onToggle:r,readOnly:i}){const[o,a]=j.useState(!1),u=e.filter(d=>!n.has(d));return c.jsxs("div",{className:"ri-multiselect",children:[c.jsxs("div",{className:"ri-chips",children:[Array.from(n).map(d=>c.jsxs("span",{className:"ri-chip",children:[t(d),!i&&c.jsx("button",{className:"ri-chip-x",onClick:()=>r(d),title:"Remove",children:"×"})]},d)),!i&&u.length>0&&c.jsx("button",{className:"ri-chip-add",onClick:()=>a(d=>!d),children:"+ Add"}),n.size===0&&i&&c.jsx("span",{className:"ri-meta-value",children:"(none)"})]}),o&&!i&&c.jsx("div",{className:"ri-multiselect-popover",children:u.map(d=>c.jsx("button",{className:"ri-multiselect-option",onClick:()=>{r(d),a(!1)},children:t(d)},d))})]})}function WV({tools:e,onToggle:t,readOnly:n}){return c.jsx("div",{className:"ri-toolcheck",children:HV.map(r=>c.jsxs("fieldset",{className:"ri-toolcheck-group",children:[c.jsx("legend",{className:"ri-toolcheck-legend",children:r.label}),c.jsx("div",{className:"ri-toolcheck-items",children:r.tools.map(i=>c.jsxs("label",{className:"ri-toolcheck-item",children:[c.jsx("input",{type:"checkbox",checked:e.has(i),onChange:()=>t(i),disabled:n}),c.jsx("span",{className:"ri-toolcheck-name",children:i.replace(r.prefix,"")||i})]},i))})]},r.prefix))})}function uo(e,t){return typeof e=="function"?e(t):e}function ri(e,t){return n=>{t.setState(r=>({...r,[e]:uo(n,r[e])}))}}function Um(e){return e instanceof Function}function YV(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function XV(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 gt(e,t,n){let r=[],i;return o=>{let a;n.key&&n.debug&&(a=Date.now());const u=e(o);if(!(u.length!==r.length||u.some((p,h)=>r[h]!==p)))return i;r=u;let m;if(n.key&&n.debug&&(m=Date.now()),i=t(...u),n==null||n.onChange==null||n.onChange(i),n.key&&n.debug&&n!=null&&n.debug()){const p=Math.round((Date.now()-a)*100)/100,h=Math.round((Date.now()-m)*100)/100,g=h/16,y=(v,k)=>{for(v=String(v);v.length{var i;return(i=e?.debugAll)!=null?i:e[t]},key:!1,onChange:r}}function KV(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:gt(()=>[e,n,t,o],(a,u,d,m)=>({table:a,column:u,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 ZV(e,t,n,r){var i,o;const u={...e._getDefaultColumnDef(),...t},d=u.accessorKey;let m=(i=(o=u.id)!=null?o:d?typeof String.prototype.replaceAll=="function"?d.replaceAll(".","_"):d.replace(/\./g,"_"):void 0)!=null?i:typeof u.header=="string"?u.header:void 0,p;if(u.accessorFn?p=u.accessorFn:d&&(d.includes(".")?p=g=>{let y=g;for(const k of d.split(".")){var v;y=(v=y)==null?void 0:v[k]}return y}:p=g=>g[u.accessorKey]),!m)throw new Error;let h={id:`${String(m)}`,accessorFn:p,parent:r,depth:n,columnDef:u,columns:[],getFlatColumns:gt(()=>[!0],()=>{var g;return[h,...(g=h.columns)==null?void 0:g.flatMap(y=>y.getFlatColumns())]},xt(e.options,"debugColumns")),getLeafColumns:gt(()=>[e._getOrderColumnsFn()],g=>{var y;if((y=h.columns)!=null&&y.length){let v=h.columns.flatMap(k=>k.getLeafColumns());return g(v)}return[h]},xt(e.options,"debugColumns"))};for(const g of e._features)g.createColumn==null||g.createColumn(h,e);return h}const Sr="debugHeaders";function bC(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=[],u=d=>{d.subHeaders&&d.subHeaders.length&&d.subHeaders.map(u),a.push(d)};return u(o),a},getContext:()=>({table:e,header:o,column:t})};return e._features.forEach(a=>{a.createHeader==null||a.createHeader(o,e)}),o}const QV={createTable:e=>{e.getHeaderGroups=gt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,i)=>{var o,a;const u=(o=r?.map(h=>n.find(g=>g.id===h)).filter(Boolean))!=null?o:[],d=(a=i?.map(h=>n.find(g=>g.id===h)).filter(Boolean))!=null?a:[],m=n.filter(h=>!(r!=null&&r.includes(h.id))&&!(i!=null&&i.includes(h.id)));return uf(t,[...u,...m,...d],e)},xt(e.options,Sr)),e.getCenterHeaderGroups=gt(()=>[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))),uf(t,n,e,"center")),xt(e.options,Sr)),e.getLeftHeaderGroups=gt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var i;const o=(i=r?.map(a=>n.find(u=>u.id===a)).filter(Boolean))!=null?i:[];return uf(t,o,e,"left")},xt(e.options,Sr)),e.getRightHeaderGroups=gt(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var i;const o=(i=r?.map(a=>n.find(u=>u.id===a)).filter(Boolean))!=null?i:[];return uf(t,o,e,"right")},xt(e.options,Sr)),e.getFooterGroups=gt(()=>[e.getHeaderGroups()],t=>[...t].reverse(),xt(e.options,Sr)),e.getLeftFooterGroups=gt(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),xt(e.options,Sr)),e.getCenterFooterGroups=gt(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),xt(e.options,Sr)),e.getRightFooterGroups=gt(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),xt(e.options,Sr)),e.getFlatHeaders=gt(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Sr)),e.getLeftFlatHeaders=gt(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Sr)),e.getCenterFlatHeaders=gt(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Sr)),e.getRightFlatHeaders=gt(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),xt(e.options,Sr)),e.getCenterLeafHeaders=gt(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Sr)),e.getLeftLeafHeaders=gt(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Sr)),e.getRightLeafHeaders=gt(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),xt(e.options,Sr)),e.getLeafHeaders=gt(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var i,o,a,u,d,m;return[...(i=(o=t[0])==null?void 0:o.headers)!=null?i:[],...(a=(u=n[0])==null?void 0:u.headers)!=null?a:[],...(d=(m=r[0])==null?void 0:m.headers)!=null?d:[]].map(p=>p.getLeafHeaders()).flat()},xt(e.options,Sr))}};function uf(e,t,n,r){var i,o;let a=0;const u=function(g,y){y===void 0&&(y=1),a=Math.max(a,y),g.filter(v=>v.getIsVisible()).forEach(v=>{var k;(k=v.columns)!=null&&k.length&&u(v.columns,y+1)},0)};u(e);let d=[];const m=(g,y)=>{const v={depth:y,id:[r,`${y}`].filter(Boolean).join("_"),headers:[]},k=[];g.forEach(S=>{const _=[...k].reverse()[0],w=S.column.depth===v.depth;let C,N=!1;if(w&&S.column.parent?C=S.column.parent:(C=S.column,N=!0),_&&_?.column===C)_.subHeaders.push(S);else{const O=bC(n,C,{id:[r,y,C.id,S?.id].filter(Boolean).join("_"),isPlaceholder:N,placeholderId:N?`${k.filter(I=>I.column===C).length}`:void 0,depth:y,index:k.length});O.subHeaders.push(S),k.push(O)}v.headers.push(S),S.headerGroup=v}),d.push(v),y>0&&m(k,y-1)},p=t.map((g,y)=>bC(n,g,{depth:a,index:y}));m(p,a-1),d.reverse();const h=g=>g.filter(v=>v.column.getIsVisible()).map(v=>{let k=0,S=0,_=[0];v.subHeaders&&v.subHeaders.length?(_=[],h(v.subHeaders).forEach(C=>{let{colSpan:N,rowSpan:O}=C;k+=N,_.push(O)})):k=1;const w=Math.min(..._);return S=S+w,v.colSpan=k,v.rowSpan=S,{colSpan:k,rowSpan:S}});return h((i=(o=d[0])==null?void 0:o.headers)!=null?i:[]),d}const JV=(e,t,n,r,i,o,a)=>{let u={id:t,index:r,original:n,depth:i,parentId:a,_valuesCache:{},_uniqueValuesCache:{},getValue:d=>{if(u._valuesCache.hasOwnProperty(d))return u._valuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return u._valuesCache[d]=m.accessorFn(u.original,r),u._valuesCache[d]},getUniqueValues:d=>{if(u._uniqueValuesCache.hasOwnProperty(d))return u._uniqueValuesCache[d];const m=e.getColumn(d);if(m!=null&&m.accessorFn)return m.columnDef.getUniqueValues?(u._uniqueValuesCache[d]=m.columnDef.getUniqueValues(u.original,r),u._uniqueValuesCache[d]):(u._uniqueValuesCache[d]=[u.getValue(d)],u._uniqueValuesCache[d])},renderValue:d=>{var m;return(m=u.getValue(d))!=null?m:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>XV(u.subRows,d=>d.subRows),getParentRow:()=>u.parentId?e.getRow(u.parentId,!0):void 0,getParentRows:()=>{let d=[],m=u;for(;;){const p=m.getParentRow();if(!p)break;d.push(p),m=p}return d.reverse()},getAllCells:gt(()=>[e.getAllLeafColumns()],d=>d.map(m=>KV(e,u,m,m.id)),xt(e.options,"debugRows")),_getAllCellsByColumnId:gt(()=>[u.getAllCells()],d=>d.reduce((m,p)=>(m[p.column.id]=p,m),{}),xt(e.options,"debugRows"))};for(let d=0;d{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()}}},PI=(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))};PI.autoRemove=e=>Di(e);const BI=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};BI.autoRemove=e=>Di(e);const $I=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};$I.autoRemove=e=>Di(e);const HI=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};HI.autoRemove=e=>Di(e);const FI=(e,t,n)=>!n.some(r=>{var i;return!((i=e.getValue(t))!=null&&i.includes(r))});FI.autoRemove=e=>Di(e)||!(e!=null&&e.length);const VI=(e,t,n)=>n.some(r=>{var i;return(i=e.getValue(t))==null?void 0:i.includes(r)});VI.autoRemove=e=>Di(e)||!(e!=null&&e.length);const UI=(e,t,n)=>e.getValue(t)===n;UI.autoRemove=e=>Di(e);const GI=(e,t,n)=>e.getValue(t)==n;GI.autoRemove=e=>Di(e);const kv=(e,t,n)=>{let[r,i]=n;const o=e.getValue(t);return o>=r&&o<=i};kv.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 u=o;o=a,a=u}return[o,a]};kv.autoRemove=e=>Di(e)||Di(e[0])&&Di(e[1]);const Ss={includesString:PI,includesStringSensitive:BI,equalsString:$I,arrIncludes:HI,arrIncludesAll:FI,arrIncludesSome:VI,equals:UI,weakEquals:GI,inNumberRange:kv};function Di(e){return e==null||e===""}const tU={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:ri("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"?Ss.includesString:typeof r=="number"?Ss.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?Ss.equals:Array.isArray(r)?Ss.arrIncludes:Ss.weakEquals},e.getFilterFn=()=>{var n,r;return Um(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:Ss[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(p=>p.id===e.id),a=uo(n,o?o.value:void 0);if(_C(i,a,e)){var u;return(u=r?.filter(p=>p.id!==e.id))!=null?u:[]}const d={id:e.id,value:a};if(o){var m;return(m=r?.map(p=>p.id===e.id?d:p))!=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=uo(t,i))==null?void 0:o.filter(a=>{const u=n.find(d=>d.id===a.id);if(u){const d=u.getFilterFn();if(_C(d,a.value,u))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 _C(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const nU=(e,t,n)=>n.reduce((r,i)=>{const o=i.getValue(e);return r+(typeof o=="number"?o:0)},0),rU=(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},iU=(e,t,n)=>{let r;return n.forEach(i=>{const o=i.getValue(e);o!=null&&(r=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{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},aU=(e,t)=>{if(!t.length)return;const n=t.map(o=>o.getValue(e));if(!YV(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},lU=(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),cU=(e,t)=>new Set(t.map(n=>n.getValue(e))).size,uU=(e,t)=>t.length,ux={sum:nU,min:rU,max:iU,extent:sU,mean:oU,median:aU,unique:lU,uniqueCount:cU,count:uU},dU={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:ri("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 ux.sum;if(Object.prototype.toString.call(r)==="[object Date]")return ux.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return Um(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:ux[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 fU(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 mU={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:ri("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=gt(n=>[iu(t,n)],n=>n.findIndex(r=>r.id===e.id),xt(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=iu(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const i=iu(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=gt(()=>[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],u=[...i];for(;u.length&&a.length;){const d=a.shift(),m=u.findIndex(p=>p.id===d);m>-1&&o.push(u.splice(m,1)[0])}o=[...o,...u]}return fU(o,n,r)},xt(e.options,"debugTable"))}},dx=()=>({left:[],right:[]}),hU={getInitialState:e=>({columnPinning:dx(),...e}),getDefaultOptions:e=>({onColumnPinningChange:ri("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 u,d;return{left:((u=i?.left)!=null?u:[]).filter(h=>!(r!=null&&r.includes(h))),right:[...((d=i?.right)!=null?d:[]).filter(h=>!(r!=null&&r.includes(h))),...r]}}if(n==="left"){var m,p;return{left:[...((m=i?.left)!=null?m:[]).filter(h=>!(r!=null&&r.includes(h))),...r],right:((p=i?.right)!=null?p:[]).filter(h=>!(r!=null&&r.includes(h)))}}return{left:((o=i?.left)!=null?o:[]).filter(h=>!(r!=null&&r.includes(h))),right:((a=i?.right)!=null?a:[]).filter(h=>!(r!=null&&r.includes(h)))}})},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(u=>u.id),{left:r,right:i}=t.getState().columnPinning,o=n.some(u=>r?.includes(u)),a=n.some(u=>i?.includes(u));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=gt(()=>[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=gt(()=>[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=gt(()=>[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?dx():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:dx())},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=gt(()=>[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=gt(()=>[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=gt(()=>[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 pU(e){return e||(typeof document<"u"?document:null)}const df={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},fx=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),gU={getDefaultColumnDef:()=>df,getInitialState:e=>({columnSizing:{},columnSizingInfo:fx(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:ri("columnSizing",e),onColumnSizingInfoChange:ri("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:df.minSize,(r=o??e.columnDef.size)!=null?r:df.size),(i=e.columnDef.maxSize)!=null?i:df.maxSize)},e.getStart=gt(n=>[n,iu(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=gt(n=>[n,iu(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(),mx(o)&&o.touches&&o.touches.length>1))return;const a=e.getSize(),u=e?e.getLeafHeaders().map(_=>[_.column.id,_.column.getSize()]):[[r.id,r.getSize()]],d=mx(o)?Math.round(o.touches[0].clientX):o.clientX,m={},p=(_,w)=>{typeof w=="number"&&(t.setColumnSizingInfo(C=>{var N,O;const I=t.options.columnResizeDirection==="rtl"?-1:1,D=(w-((N=C?.startOffset)!=null?N:0))*I,T=Math.max(D/((O=C?.startSize)!=null?O:0),-.999999);return C.columnSizingStart.forEach(L=>{let[A,M]=L;m[A]=Math.round(Math.max(M+M*T,0)*100)/100}),{...C,deltaOffset:D,deltaPercentage:T}}),(t.options.columnResizeMode==="onChange"||_==="end")&&t.setColumnSizing(C=>({...C,...m})))},h=_=>p("move",_),g=_=>{p("end",_),t.setColumnSizingInfo(w=>({...w,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},y=pU(n),v={moveHandler:_=>h(_.clientX),upHandler:_=>{y?.removeEventListener("mousemove",v.moveHandler),y?.removeEventListener("mouseup",v.upHandler),g(_.clientX)}},k={moveHandler:_=>(_.cancelable&&(_.preventDefault(),_.stopPropagation()),h(_.touches[0].clientX),!1),upHandler:_=>{var w;y?.removeEventListener("touchmove",k.moveHandler),y?.removeEventListener("touchend",k.upHandler),_.cancelable&&(_.preventDefault(),_.stopPropagation()),g((w=_.touches[0])==null?void 0:w.clientX)}},S=xU()?{passive:!1}:!1;mx(o)?(y?.addEventListener("touchmove",k.moveHandler,S),y?.addEventListener("touchend",k.upHandler,S)):(y?.addEventListener("mousemove",v.moveHandler,S),y?.addEventListener("mouseup",v.upHandler,S)),t.setColumnSizingInfo(_=>({..._,startOffset:d,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:u,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?fx():(n=e.initialState.columnSizingInfo)!=null?n:fx())},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 ff=null;function xU(){if(typeof ff=="boolean")return ff;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 ff=e,ff}function mx(e){return e.type==="touchstart"}const yU={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:ri("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=gt(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),xt(t.options,"debugRows")),e.getVisibleCells=gt(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,i)=>[...n,...r,...i],xt(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>gt(()=>[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 iu(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const vU={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()}}},bU={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:ri("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=()=>Ss.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return Um(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:Ss[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},_U={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:ri("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(u=>{a[u]=!0}):a=r,n=(i=n)!=null?i:!o,!o&&n)return{...a,[e.id]:!0};if(o&&!n){const{[e.id]:u,...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()}}}},s0=0,o0=10,hx=()=>({pageIndex:s0,pageSize:o0}),kU={getInitialState:e=>({...e,pagination:{...hx(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:ri("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=>uo(r,o);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(i)},e.resetPagination=r=>{var i;e.setPagination(r?hx():(i=e.initialState.pagination)!=null?i:hx())},e.setPageIndex=r=>{e.setPagination(i=>{let o=uo(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?s0:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageIndex)!=null?i:s0)},e.resetPageSize=r=>{var i,o;e.setPageSize(r?o0:(i=(o=e.initialState)==null||(o=o.pagination)==null?void 0:o.pageSize)!=null?i:o0)},e.setPageSize=r=>{e.setPagination(i=>{const o=Math.max(1,uo(r,i.pageSize)),a=i.pageSize*i.pageIndex,u=Math.floor(a/o);return{...i,pageIndex:u,pageSize:o}})},e.setPageCount=r=>e.setPagination(i=>{var o;let a=uo(r,(o=e.options.pageCount)!=null?o:-1);return typeof a=="number"&&(a=Math.max(-1,a)),{...i,pageCount:a}}),e.getPageOptions=gt(()=>[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:re.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}}},px=()=>({top:[],bottom:[]}),SU={getInitialState:e=>({rowPinning:px(),...e}),getDefaultOptions:e=>({onRowPinningChange:ri("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}):[],u=new Set([...a,e.id,...o]);t.setRowPinning(d=>{var m,p;if(n==="bottom"){var h,g;return{top:((h=d?.top)!=null?h:[]).filter(k=>!(u!=null&&u.has(k))),bottom:[...((g=d?.bottom)!=null?g:[]).filter(k=>!(u!=null&&u.has(k))),...Array.from(u)]}}if(n==="top"){var y,v;return{top:[...((y=d?.top)!=null?y:[]).filter(k=>!(u!=null&&u.has(k))),...Array.from(u)],bottom:((v=d?.bottom)!=null?v:[]).filter(k=>!(u!=null&&u.has(k)))}}return{top:((m=d?.top)!=null?m:[]).filter(k=>!(u!=null&&u.has(k))),bottom:((p=d?.bottom)!=null?p:[]).filter(k=>!(u!=null&&u.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(u=>r?.includes(u)),a=n.some(u=>i?.includes(u));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:u}=a;return u});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?px():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:px())},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 u=e.getRow(a,!0);return u.getIsAllParentsExpanded()?u:null}):(n??[]).map(a=>t.find(u=>u.id===a))).filter(Boolean).map(a=>({...a,position:r}))},e.getTopRows=gt(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),xt(e.options,"debugRows")),e.getBottomRows=gt(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),xt(e.options,"debugRows")),e.getCenterRows=gt(()=>[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"))}},wU={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:ri("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=>{a0(i,o.id,r,!0,e)}),i}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=gt(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?gx(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getFilteredSelectedRowModel=gt(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?gx(e,n):{rows:[],flatRows:[],rowsById:{}},xt(e.options,"debugTable")),e.getGroupedSelectedRowModel=gt(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?gx(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{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 u={...o};return a0(u,e.id,n,(a=r?.selectChildren)!=null?a:!0,t),u})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return Sv(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return l0(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return l0(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)}}}},a0=(e,t,n,r,i)=>{var o;const a=i.getRow(t,!0);n?(a.getCanMultiSelect()||Object.keys(e).forEach(u=>delete e[u]),a.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(o=a.subRows)!=null&&o.length&&a.getCanSelectSubRows()&&a.subRows.forEach(u=>a0(e,u.id,n,r,i))};function gx(e,t){const n=e.getState().rowSelection,r=[],i={},o=function(a,u){return a.map(d=>{var m;const p=Sv(d,n);if(p&&(r.push(d),i[d.id]=d),(m=d.subRows)!=null&&m.length&&(d={...d,subRows:o(d.subRows)}),p)return d}).filter(Boolean)};return{rows:o(t.rows),flatRows:r,rowsById:i}}function Sv(e,t){var n;return(n=t[e.id])!=null?n:!1}function l0(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()&&(Sv(a,t)?o=!0:i=!1),a.subRows&&a.subRows.length)){const u=l0(a,t);u==="all"?o=!0:(u==="some"&&(o=!0),i=!1)}}),i?"all":o?"some":!1}const c0=/([0-9]+)/gm,CU=(e,t,n)=>qI(xo(e.getValue(n)).toLowerCase(),xo(t.getValue(n)).toLowerCase()),jU=(e,t,n)=>qI(xo(e.getValue(n)),xo(t.getValue(n))),EU=(e,t,n)=>wv(xo(e.getValue(n)).toLowerCase(),xo(t.getValue(n)).toLowerCase()),NU=(e,t,n)=>wv(xo(e.getValue(n)),xo(t.getValue(n))),IU=(e,t,n)=>{const r=e.getValue(n),i=t.getValue(n);return r>i?1:rwv(e.getValue(n),t.getValue(n));function wv(e,t){return e===t?0:e>t?1:-1}function xo(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function qI(e,t){const n=e.split(c0).filter(Boolean),r=t.split(c0).filter(Boolean);for(;n.length&&r.length;){const i=n.shift(),o=r.shift(),a=parseInt(i,10),u=parseInt(o,10),d=[a,u].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>u)return 1;if(u>a)return-1}return n.length-r.length}const $c={alphanumeric:CU,alphanumericCaseSensitive:jU,text:EU,textCaseSensitive:NU,datetime:IU,basic:TU},RU={getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:ri("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 $c.datetime;if(typeof o=="string"&&(r=!0,o.split(c0).length>1))return $c.alphanumeric}return r?$c.text:$c.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 Um(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:$c[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const i=e.getNextSortingOrder(),o=typeof n<"u"&&n!==null;t.setSorting(a=>{const u=a?.find(y=>y.id===e.id),d=a?.findIndex(y=>y.id===e.id);let m=[],p,h=o?n:i==="desc";if(a!=null&&a.length&&e.getCanMultiSort()&&r?u?p="toggle":p="add":a!=null&&a.length&&d!==a.length-1?p="replace":u?p="toggle":p="replace",p==="toggle"&&(o||i||(p="remove")),p==="add"){var g;m=[...a,{id:e.id,desc:h}],m.splice(0,m.length-((g=t.options.maxMultiSortColCount)!=null?g:Number.MAX_SAFE_INTEGER))}else p==="toggle"?m=a.map(y=>y.id===e.id?{...y,desc:h}:y):p==="remove"?m=a.filter(y=>y.id!==e.id):m=[{id:e.id,desc:h}];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())}},AU=[QV,yU,mU,hU,eU,tU,vU,bU,RU,dU,_U,kU,SU,wU,gU];function MU(e){var t,n;const r=[...AU,...(t=e._features)!=null?t:[]];let i={_features:r};const o=i._features.reduce((g,y)=>Object.assign(g,y.getDefaultOptions==null?void 0:y.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 y;d=(y=g.getInitialState==null?void 0:g.getInitialState(d))!=null?y:d});const m=[];let p=!1;const h={_features:r,options:{...o,...e},initialState:d,_queue:g=>{m.push(g),p||(p=!0,Promise.resolve().then(()=>{for(;m.length;)m.shift()();p=!1}).catch(y=>setTimeout(()=>{throw y})))},reset:()=>{i.setState(i.initialState)},setOptions:g=>{const y=uo(g,i.options);i.options=a(y)},getState:()=>i.options.state,setState:g=>{i.options.onStateChange==null||i.options.onStateChange(g)},_getRowId:(g,y,v)=>{var k;return(k=i.options.getRowId==null?void 0:i.options.getRowId(g,y,v))!=null?k:`${v?[v.id,y].join("."):y}`},getCoreRowModel:()=>(i._getCoreRowModel||(i._getCoreRowModel=i.options.getCoreRowModel(i)),i._getCoreRowModel()),getRowModel:()=>i.getPaginationRowModel(),getRow:(g,y)=>{let v=(y?i.getPrePaginationRowModel():i.getRowModel()).rowsById[g];if(!v&&(v=i.getCoreRowModel().rowsById[g],!v))throw new Error;return v},_getDefaultColumnDef:gt(()=>[i.options.defaultColumn],g=>{var y;return g=(y=g)!=null?y:{},{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:gt(()=>[i._getColumnDefs()],g=>{const y=function(v,k,S){return S===void 0&&(S=0),v.map(_=>{const w=ZV(i,_,S,k),C=_;return w.columns=C.columns?y(C.columns,w,S+1):[],w})};return y(g)},xt(e,"debugColumns")),getAllFlatColumns:gt(()=>[i.getAllColumns()],g=>g.flatMap(y=>y.getFlatColumns()),xt(e,"debugColumns")),_getAllFlatColumnsById:gt(()=>[i.getAllFlatColumns()],g=>g.reduce((y,v)=>(y[v.id]=v,y),{}),xt(e,"debugColumns")),getAllLeafColumns:gt(()=>[i.getAllColumns(),i._getOrderColumnsFn()],(g,y)=>{let v=g.flatMap(k=>k.getLeafColumns());return y(v)},xt(e,"debugColumns")),getColumn:g=>i._getAllFlatColumnsById()[g]};Object.assign(i,h);for(let g=0;ggt(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(i,o,a){o===void 0&&(o=0);const u=[];for(let m=0;me._autoResetPageIndex()))}function OU(){return e=>gt(()=>[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 u=d=>{const m=d.map(p=>({...p}));return m.sort((p,h)=>{for(let y=0;y{var h;i.push(p),(h=p.subRows)!=null&&h.length&&(p.subRows=u(p.subRows))}),m};return{rows:u(n.rows),flatRows:i,rowsById:n.rowsById}},xt(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}function kC(e,t){return e?LU(e)?j.createElement(e,t):e:null}function LU(e){return zU(e)||typeof e=="function"||PU(e)}function zU(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function PU(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function BU(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=j.useState(()=>({current:MU(t)})),[r,i]=j.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 SC=["codex","cursor","claude_code","opencode"];function $U({roles:e,employees:t,selectedIds:n,onSelectRow:r,onUpdateRole:i,onDeleteRole:o,readOnly:a}){const[u,d]=j.useState([]),[m,p]=j.useState({}),[h,g]=j.useState(null),[y,v]=j.useState(""),k=j.useMemo(()=>{const T=new Map;for(const L of t){const A=L.role_ids?.length?L.role_ids:[L.role_id];for(const M of A)M&&T.set(M,(T.get(M)??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:T.get(L.role_id)??0}))},[e,t]),S=j.useMemo(()=>[{id:"owner",name:"Owner"},...e.map(T=>({id:T.role_id,name:T.name}))],[e]),_=T=>{const L=y.trim();L&&L!==e.find(A=>A.role_id===T)?.name&&i(T,{name:L}),g(null),v("")},w=j.useMemo(()=>[{id:"select",header:({table:T})=>c.jsx("input",{type:"checkbox",checked:T.getIsAllRowsSelected(),ref:L=>{L&&(L.indeterminate=T.getIsSomeRowsSelected()&&!T.getIsAllRowsSelected())},onChange:T.getToggleAllRowsSelectedHandler(),disabled:a,"aria-label":"Select all"}),cell:({row:T})=>c.jsx("input",{type:"checkbox",checked:T.getIsSelected(),onChange:T.getToggleSelectedHandler(),disabled:a,"aria-label":`Select ${T.original.role_id}`,onClick:L=>L.stopPropagation()}),size:32,enableSorting:!1},{id:"icon",header:"",cell:({row:T})=>c.jsx("img",{src:Du(T.original.icon),alt:"",className:"rt-cell-icon"}),size:32,enableSorting:!1},{id:"name",header:"Name",accessorKey:"name",cell:({row:T})=>{const L=T.original;return h?.rowId===L.role_id&&h.col==="name"?c.jsx("input",{autoFocus:!0,className:"rt-inline-input",value:y,onChange:M=>v(M.target.value),onBlur:()=>_(L.role_id),onKeyDown:M=>{M.key==="Enter"?_(L.role_id):M.key==="Escape"&&(g(null),v(""))},onClick:M=>M.stopPropagation()}):c.jsx("span",{className:"rt-cell-name",onDoubleClick:M=>{a||(M.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:T})=>c.jsx("code",{className:"rt-cell-id",children:T.original.role_id})},{id:"reports_to",header:"Reports to",accessorKey:"reports_to",cell:({row:T})=>{const L=T.original;return c.jsx("select",{className:"rt-cell-select",value:L.reports_to,onChange:A=>i(L.role_id,{reports_to:A.target.value}),disabled:a,onClick:A=>A.stopPropagation(),children:S.filter(A=>A.id!==L.role_id).map(A=>c.jsx("option",{value:A.id,children:A.name},A.id))})}},{id:"toolCount",header:"Tools",accessorKey:"toolCount",cell:({row:T})=>c.jsx("span",{className:"rt-cell-count",children:T.original.toolCount}),size:64},{id:"agent",header:"Agent",accessorKey:"agent",cell:({row:T})=>{const L=T.original;return c.jsxs("select",{className:"rt-cell-select",value:L.agent??"",onChange:A=>i(L.role_id,{preferred_external_agent:A.target.value||null}),disabled:a,onClick:A=>A.stopPropagation(),children:[c.jsx("option",{value:"",children:"(auto)"}),SC.map(A=>c.jsx("option",{value:A,children:A},A))]})}},{id:"employeeCount",header:"People",accessorKey:"employeeCount",cell:({row:T})=>c.jsx("span",{className:"rt-cell-count",children:T.original.employeeCount}),size:64},{id:"actions",header:"",cell:({row:T})=>c.jsx("button",{className:"rt-cell-action",onClick:L=>{L.stopPropagation(),!a&&confirm(`Delete role "${T.original.name}"?`)&&o(T.original.role_id)},disabled:a,title:"Delete",children:"✕"}),size:40,enableSorting:!1}],[h,y,a,S,i,o]),C=BU({data:k,columns:w,state:{sorting:u,rowSelection:m},onSortingChange:d,onRowSelectionChange:p,enableRowSelection:!0,getRowId:T=>T.role_id,getCoreRowModel:DU(),getSortedRowModel:OU()}),N=Object.values(m).filter(Boolean).length,O=Object.keys(m).filter(T=>m[T]),I=T=>{a||(O.forEach(L=>i(L,{preferred_external_agent:T})),p({}))},D=()=>{a||confirm(`Delete ${N} roles? This cannot be undone.`)&&(O.forEach(T=>o(T)),p({}))};return c.jsxs("div",{className:"rt-container",children:[N>0&&!a&&c.jsxs("div",{className:"rt-bulk-bar",children:[c.jsxs("span",{className:"rt-bulk-count",children:[N," selected"]}),c.jsxs("select",{className:"rt-bulk-select",defaultValue:"",onChange:T=>{const L=T.target.value;L&&I(L==="__auto__"?null:L)},children:[c.jsx("option",{value:"",disabled:!0,children:"Change agent…"}),c.jsx("option",{value:"__auto__",children:"(auto)"}),SC.map(T=>c.jsx("option",{value:T,children:T},T))]}),c.jsx("button",{className:"btn btn-danger btn-sm",onClick:D,children:"Delete selected"}),c.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>p({}),children:"Clear"})]}),c.jsx("div",{className:"rt-table-wrap",children:c.jsxs("table",{className:"rt-table",children:[c.jsx("thead",{children:C.getHeaderGroups().map(T=>c.jsx("tr",{children:T.headers.map(L=>c.jsxs("th",{style:{width:L.getSize()},className:L.column.getCanSort()?"rt-th-sortable":"",onClick:L.column.getToggleSortingHandler(),children:[kC(L.column.columnDef.header,L.getContext()),L.column.getIsSorted()==="asc"&&c.jsx("span",{className:"rt-sort-caret",children:" ▲"}),L.column.getIsSorted()==="desc"&&c.jsx("span",{className:"rt-sort-caret",children:" ▼"})]},L.id))},T.id))}),c.jsxs("tbody",{children:[C.getRowModel().rows.length===0&&c.jsx("tr",{children:c.jsx("td",{colSpan:9,className:"rt-empty",children:'No roles. Add one via the "+ Add role" button.'})}),C.getRowModel().rows.map(T=>{const L=n.includes(T.original.role_id);return c.jsx("tr",{className:`rt-row${T.getIsSelected()?" rt-row-checked":""}${L?" rt-row-active":""}`,onClick:()=>r(T.original.role_id),children:T.getVisibleCells().map(A=>c.jsx("td",{style:{width:A.column.getSize()},children:kC(A.column.columnDef.cell,A.getContext())},A.id))},T.id)})]})]})})]})}function Kn(e){if(typeof e=="string"||typeof e=="number")return""+e;let t="";if(Array.isArray(e))for(let n=0,r;n{}};function Gm(){for(var e=0,t=arguments.length,n={},r;e=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}})}Rf.prototype=Gm.prototype={constructor:Rf,on:function(e,t){var n=this._,r=FU(e+"",n),i,o=-1,a=r.length;if(arguments.length<2){for(;++o0)for(var n=new Array(i),r=0,i,o;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),CC.hasOwnProperty(t)?{space:CC[t],local:e}:e}function UU(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===u0&&t.documentElement.namespaceURI===u0?t.createElement(e):t.createElementNS(n,e)}}function GU(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function WI(e){var t=qm(e);return(t.local?GU:UU)(t)}function qU(){}function Cv(e){return e==null?qU:function(){return this.querySelector(e)}}function WU(e){typeof e!="function"&&(e=Cv(e));for(var t=this._groups,n=t.length,r=new Array(n),i=0;i=C&&(C=w+1);!(O=S[C])&&++C=0;)(a=r[i])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function yG(e){e||(e=vG);function t(h,g){return h&&g?e(h.__data__,g.__data__):!h-!g}for(var n=this._groups,r=n.length,i=new Array(r),o=0;ot?1:e>=t?0:NaN}function bG(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function _G(){return Array.from(this)}function kG(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?MG:typeof t=="function"?OG:DG)(e,t,n??"")):vl(this.node(),e)}function vl(e,t){return e.style.getPropertyValue(t)||QI(e).getComputedStyle(e,null).getPropertyValue(t)}function zG(e){return function(){delete this[e]}}function PG(e,t){return function(){this[e]=t}}function BG(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function $G(e,t){return arguments.length>1?this.each((t==null?zG:typeof t=="function"?BG:PG)(e,t)):this.node()[e]}function JI(e){return e.trim().split(/^|\s+/)}function jv(e){return e.classList||new eT(e)}function eT(e){this._node=e,this._names=JI(e.getAttribute("class")||"")}eT.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 tT(e,t){for(var n=jv(e),r=-1,i=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function hq(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,o;n()=>e;function d0(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:o,x:a,y:u,dx:d,dy:m,dispatch:p}){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:u,enumerable:!0,configurable:!0},dx:{value:d,enumerable:!0,configurable:!0},dy:{value:m,enumerable:!0,configurable:!0},_:{value:p}})}d0.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function wq(e){return!e.ctrlKey&&!e.button}function Cq(){return this.parentNode}function jq(e,t){return t??{x:e.x,y:e.y}}function Eq(){return navigator.maxTouchPoints||"ontouchstart"in this}function aT(){var e=wq,t=Cq,n=jq,r=Eq,i={},o=Gm("start","drag","end"),a=0,u,d,m,p,h=0;function g(N){N.on("mousedown.drag",y).filter(r).on("touchstart.drag",S).on("touchmove.drag",_,Sq).on("touchend.drag touchcancel.drag",w).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function y(N,O){if(!(p||!e.call(this,N,O))){var I=C(this,t.call(this,N,O),N,O,"mouse");I&&(Zr(N.view).on("mousemove.drag",v,bu).on("mouseup.drag",k,bu),sT(N.view),xx(N),m=!1,u=N.clientX,d=N.clientY,I("start",N))}}function v(N){if(cl(N),!m){var O=N.clientX-u,I=N.clientY-d;m=O*O+I*I>h}i.mouse("drag",N)}function k(N){Zr(N.view).on("mousemove.drag mouseup.drag",null),oT(N.view,m),cl(N),i.mouse("end",N)}function S(N,O){if(e.call(this,N,O)){var I=N.changedTouches,D=t.call(this,N,O),T=I.length,L,A;for(L=0;L>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?hf(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?hf(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=Iq.exec(e))?new Hr(t[1],t[2],t[3],1):(t=Tq.exec(e))?new Hr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Rq.exec(e))?hf(t[1],t[2],t[3],t[4]):(t=Aq.exec(e))?hf(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Mq.exec(e))?AC(t[1],t[2]/100,t[3]/100,1):(t=Dq.exec(e))?AC(t[1],t[2]/100,t[3]/100,t[4]):jC.hasOwnProperty(e)?IC(jC[e]):e==="transparent"?new Hr(NaN,NaN,NaN,0):null}function IC(e){return new Hr(e>>16&255,e>>8&255,e&255,1)}function hf(e,t,n,r){return r<=0&&(e=t=n=NaN),new Hr(e,t,n,r)}function zq(e){return e instanceof Lu||(e=Zo(e)),e?(e=e.rgb(),new Hr(e.r,e.g,e.b,e.opacity)):new Hr}function f0(e,t,n,r){return arguments.length===1?zq(e):new Hr(e,t,n,r??1)}function Hr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}Ev(Hr,f0,lT(Lu,{brighter(e){return e=e==null?um:Math.pow(um,e),new Hr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?_u:Math.pow(_u,e),new Hr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Hr(Uo(this.r),Uo(this.g),Uo(this.b),dm(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:TC,formatHex:TC,formatHex8:Pq,formatRgb:RC,toString:RC}));function TC(){return`#${Vo(this.r)}${Vo(this.g)}${Vo(this.b)}`}function Pq(){return`#${Vo(this.r)}${Vo(this.g)}${Vo(this.b)}${Vo((isNaN(this.opacity)?1:this.opacity)*255)}`}function RC(){const e=dm(this.opacity);return`${e===1?"rgb(":"rgba("}${Uo(this.r)}, ${Uo(this.g)}, ${Uo(this.b)}${e===1?")":`, ${e})`}`}function dm(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Uo(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Vo(e){return e=Uo(e),(e<16?"0":"")+e.toString(16)}function AC(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Ii(e,t,n,r)}function cT(e){if(e instanceof Ii)return new Ii(e.h,e.s,e.l,e.opacity);if(e instanceof Lu||(e=Zo(e)),!e)return new Ii;if(e instanceof Ii)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,u=o-i,d=(o+i)/2;return u?(t===o?a=(n-r)/u+(n0&&d<1?0:a,new Ii(a,u,d,e.opacity)}function Bq(e,t,n,r){return arguments.length===1?cT(e):new Ii(e,t,n,r??1)}function Ii(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Ev(Ii,Bq,lT(Lu,{brighter(e){return e=e==null?um:Math.pow(um,e),new Ii(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?_u:Math.pow(_u,e),new Ii(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 Hr(yx(e>=240?e-240:e+120,i,r),yx(e,i,r),yx(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Ii(MC(this.h),pf(this.s),pf(this.l),dm(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=dm(this.opacity);return`${e===1?"hsl(":"hsla("}${MC(this.h)}, ${pf(this.s)*100}%, ${pf(this.l)*100}%${e===1?")":`, ${e})`}`}}));function MC(e){return e=(e||0)%360,e<0?e+360:e}function pf(e){return Math.max(0,Math.min(1,e||0))}function yx(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 Nv=e=>()=>e;function $q(e,t){return function(n){return e+n*t}}function Hq(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 Fq(e){return(e=+e)==1?uT:function(t,n){return n-t?Hq(t,n,e):Nv(isNaN(t)?n:t)}}function uT(e,t){var n=t-e;return n?$q(e,n):Nv(isNaN(e)?t:e)}const fm=(function e(t){var n=Fq(t);function r(i,o){var a=n((i=f0(i)).r,(o=f0(o)).r),u=n(i.g,o.g),d=n(i.b,o.b),m=uT(i.opacity,o.opacity);return function(p){return i.r=a(p),i.g=u(p),i.b=d(p),i.opacity=m(p),i+""}}return r.gamma=e,r})(1);function Vq(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(o){for(i=0;in&&(o=t.slice(n,o),u[a]?u[a]+=o:u[++a]=o),(r=r[0])===(i=i[0])?u[a]?u[a]+=i:u[++a]=i:(u[++a]=null,d.push({i:a,x:Gi(r,i)})),n=vx.lastIndex;return n180?p+=360:p-m>180&&(m+=360),g.push({i:h.push(i(h)+"rotate(",null,r)-2,x:Gi(m,p)})):p&&h.push(i(h)+"rotate("+p+r)}function u(m,p,h,g){m!==p?g.push({i:h.push(i(h)+"skewX(",null,r)-2,x:Gi(m,p)}):p&&h.push(i(h)+"skewX("+p+r)}function d(m,p,h,g,y,v){if(m!==h||p!==g){var k=y.push(i(y)+"scale(",null,",",null,")");v.push({i:k-4,x:Gi(m,h)},{i:k-2,x:Gi(p,g)})}else(h!==1||g!==1)&&y.push(i(y)+"scale("+h+","+g+")")}return function(m,p){var h=[],g=[];return m=e(m),p=e(p),o(m.translateX,m.translateY,p.translateX,p.translateY,h,g),a(m.rotate,p.rotate,h,g),u(m.skewX,p.skewX,h,g),d(m.scaleX,m.scaleY,p.scaleX,p.scaleY,h,g),m=p=null,function(y){for(var v=-1,k=g.length,S;++v=0&&e._call.call(void 0,t),e=e._next;--bl}function LC(){Qo=(hm=Su.now())+Wm,bl=Gc=0;try{iW()}finally{bl=0,oW(),Qo=0}}function sW(){var e=Su.now(),t=e-hm;t>hT&&(Wm-=t,hm=e)}function oW(){for(var e,t=mm,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:mm=n);qc=e,p0(r)}function p0(e){if(!bl){Gc&&(Gc=clearTimeout(Gc));var t=e-Qo;t>24?(e<1/0&&(Gc=setTimeout(LC,e-Su.now()-Wm)),Hc&&(Hc=clearInterval(Hc))):(Hc||(hm=Su.now(),Hc=setInterval(sW,hT)),bl=1,pT(LC))}}function zC(e,t,n){var r=new pm;return t=t==null?0:+t,r.restart(i=>{r.stop(),e(i+t)},t,n),r}var aW=Gm("start","end","cancel","interrupt"),lW=[],xT=0,PC=1,g0=2,Mf=3,BC=4,x0=5,Df=6;function Ym(e,t,n,r,i,o){var a=e.__transition;if(!a)e.__transition={};else if(n in a)return;cW(e,n,{name:t,index:r,group:i,on:aW,tween:lW,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:xT})}function Tv(e,t){var n=Li(e,t);if(n.state>xT)throw new Error("too late; already scheduled");return n}function ts(e,t){var n=Li(e,t);if(n.state>Mf)throw new Error("too late; already running");return n}function Li(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function cW(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=gT(o,0,n.time);function o(m){n.state=PC,n.timer.restart(a,n.delay,n.time),n.delay<=m&&a(m-n.delay)}function a(m){var p,h,g,y;if(n.state!==PC)return d();for(p in r)if(y=r[p],y.name===n.name){if(y.state===Mf)return zC(a);y.state===BC?(y.state=Df,y.timer.stop(),y.on.call("interrupt",e,e.__data__,y.index,y.group),delete r[p]):+pg0&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function BW(e,t,n){var r,i,o=PW(t)?Tv:ts;return function(){var a=o(this,e),u=a.on;u!==r&&(i=(r=u).copy()).on(t,n),a.on=i}}function $W(e,t){var n=this._id;return arguments.length<2?Li(this.node(),n).on.on(e):this.each(BW(n,e,t))}function HW(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function FW(){return this.on("end.remove",HW(this._id))}function VW(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Cv(e));for(var r=this._groups,i=r.length,o=new Array(i),a=0;a()=>e;function hY(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 js(e,t,n){this.k=e,this.x=t,this.y=n}js.prototype={constructor:js,scale:function(e){return e===1?this:new js(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new js(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 Xm=new js(1,0,0);_T.prototype=js.prototype;function _T(e){for(;!e.__zoom;)if(!(e=e.parentNode))return Xm;return e.__zoom}function bx(e){e.stopImmediatePropagation()}function Fc(e){e.preventDefault(),e.stopImmediatePropagation()}function pY(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function gY(){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 $C(){return this.__zoom||Xm}function xY(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function yY(){return navigator.maxTouchPoints||"ontouchstart"in this}function vY(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 kT(){var e=pY,t=gY,n=vY,r=xY,i=yY,o=[0,1/0],a=[[-1/0,-1/0],[1/0,1/0]],u=250,d=Af,m=Gm("start","zoom","end"),p,h,g,y=500,v=150,k=0,S=10;function _(B){B.property("__zoom",$C).on("wheel.zoom",T,{passive:!1}).on("mousedown.zoom",L).on("dblclick.zoom",A).filter(i).on("touchstart.zoom",M).on("touchmove.zoom",$).on("touchend.zoom touchcancel.zoom",W).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}_.transform=function(B,U,H,V){var Y=B.selection?B.selection():B;Y.property("__zoom",$C),B!==Y?O(B,U,H,V):Y.interrupt().each(function(){I(this,arguments).event(V).start().zoom(null,typeof U=="function"?U.apply(this,arguments):U).end()})},_.scaleBy=function(B,U,H,V){_.scaleTo(B,function(){var Y=this.__zoom.k,Q=typeof U=="function"?U.apply(this,arguments):U;return Y*Q},H,V)},_.scaleTo=function(B,U,H,V){_.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 U=="function"?U.apply(this,arguments):U;return n(C(w(Q,J),q,G),Y,a)},H,V)},_.translateBy=function(B,U,H,V){_.transform(B,function(){return n(this.__zoom.translate(typeof U=="function"?U.apply(this,arguments):U,typeof H=="function"?H.apply(this,arguments):H),t.apply(this,arguments),a)},null,V)},_.translateTo=function(B,U,H,V,Y){_.transform(B,function(){var Q=t.apply(this,arguments),q=this.__zoom,G=V==null?N(Q):typeof V=="function"?V.apply(this,arguments):V;return n(Xm.translate(G[0],G[1]).scale(q.k).translate(typeof U=="function"?-U.apply(this,arguments):-U,typeof H=="function"?-H.apply(this,arguments):-H),Q,a)},V,Y)};function w(B,U){return U=Math.max(o[0],Math.min(o[1],U)),U===B.k?B:new js(U,B.x,B.y)}function C(B,U,H){var V=U[0]-H[0]*B.k,Y=U[1]-H[1]*B.k;return V===B.x&&Y===B.y?B:new js(B.k,V,Y)}function N(B){return[(+B[0][0]+ +B[1][0])/2,(+B[0][1]+ +B[1][1])/2]}function O(B,U,H,V){B.on("start.zoom",function(){I(this,arguments).event(V).start()}).on("interrupt.zoom end.zoom",function(){I(this,arguments).event(V).end()}).tween("zoom",function(){var Y=this,Q=arguments,q=I(Y,Q).event(V),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]),X=Y.__zoom,ee=typeof U=="function"?U.apply(Y,Q):U,te=d(X.invert(J).concat(P/X.k),ee.invert(J).concat(P/ee.k));return function(re){if(re===1)re=ee;else{var oe=te(re),de=P/oe[2];re=new js(de,J[0]-oe[0]*de,J[1]-oe[1]*de)}q.zoom(null,re)}})}function I(B,U,H){return!H&&B.__zooming||new D(B,U)}function D(B,U){this.that=B,this.args=U,this.active=0,this.sourceEvent=null,this.extent=t.apply(B,U),this.taps=0}D.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,U){return this.mouse&&B!=="mouse"&&(this.mouse[1]=U.invert(this.mouse[0])),this.touch0&&B!=="touch"&&(this.touch0[1]=U.invert(this.touch0[0])),this.touch1&&B!=="touch"&&(this.touch1[1]=U.invert(this.touch1[0])),this.that.__zoom=U,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(B){var U=Zr(this.that).datum();m.call(B,this.that,new hY(B,{sourceEvent:this.sourceEvent,target:_,transform:this.that.__zoom,dispatch:m}),U)}};function T(B,...U){if(!e.apply(this,arguments))return;var H=I(this,U).event(B),V=this.__zoom,Y=Math.max(o[0],Math.min(o[1],V.k*Math.pow(2,r.apply(this,arguments)))),Q=Ni(B);if(H.wheel)(H.mouse[0][0]!==Q[0]||H.mouse[0][1]!==Q[1])&&(H.mouse[1]=V.invert(H.mouse[0]=Q)),clearTimeout(H.wheel);else{if(V.k===Y)return;H.mouse=[Q,V.invert(Q)],Of(this),H.start()}Fc(B),H.wheel=setTimeout(q,v),H.zoom("mouse",n(C(w(V,Y),H.mouse[0],H.mouse[1]),H.extent,a));function q(){H.wheel=null,H.end()}}function L(B,...U){if(g||!e.apply(this,arguments))return;var H=B.currentTarget,V=I(this,U,!0).event(B),Y=Zr(B.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",P,!0),Q=Ni(B,H),q=B.clientX,G=B.clientY;sT(B.view),bx(B),V.mouse=[Q,this.__zoom.invert(Q)],Of(this),V.start();function J(X){if(Fc(X),!V.moved){var ee=X.clientX-q,te=X.clientY-G;V.moved=ee*ee+te*te>k}V.event(X).zoom("mouse",n(C(V.that.__zoom,V.mouse[0]=Ni(X,H),V.mouse[1]),V.extent,a))}function P(X){Y.on("mousemove.zoom mouseup.zoom",null),oT(X.view,V.moved),Fc(X),V.event(X).end()}}function A(B,...U){if(e.apply(this,arguments)){var H=this.__zoom,V=Ni(B.changedTouches?B.changedTouches[0]:B,this),Y=H.invert(V),Q=H.k*(B.shiftKey?.5:2),q=n(C(w(H,Q),V,Y),t.apply(this,U),a);Fc(B),u>0?Zr(this).transition().duration(u).call(O,q,V,B):Zr(this).call(_.transform,q,V,B)}}function M(B,...U){if(e.apply(this,arguments)){var H=B.touches,V=H.length,Y=I(this,U,B.changedTouches.length===V).event(B),Q,q,G,J;for(bx(B),q=0;q"[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."},wu=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],ST=["Enter"," ","Escape"],wT={"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 _l;(function(e){e.Strict="strict",e.Loose="loose"})(_l||(_l={}));var Go;(function(e){e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal"})(Go||(Go={}));var Cu;(function(e){e.Partial="partial",e.Full="full"})(Cu||(Cu={}));const CT={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var lo;(function(e){e.Bezier="default",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e.SimpleBezier="simplebezier"})(lo||(lo={}));var gm;(function(e){e.Arrow="arrow",e.ArrowClosed="arrowclosed"})(gm||(gm={}));var at;(function(e){e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom"})(at||(at={}));const HC={[at.Left]:at.Right,[at.Right]:at.Left,[at.Top]:at.Bottom,[at.Bottom]:at.Top};function jT(e){return e===null?null:e?"valid":"invalid"}const ET=e=>"id"in e&&"source"in e&&"target"in e,bY=e=>"id"in e&&"position"in e&&!("source"in e)&&!("target"in e),Av=e=>"id"in e&&"internals"in e&&!("source"in e)&&!("target"in e),zu=(e,t=[0,0])=>{const{width:n,height:r}=Ts(e),i=e.origin??t,o=n*i[0],a=r*i[1];return{x:e.position.x-o,y:e.position.y-a}},_Y=(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):Av(i)?i:t.nodeLookup.get(i.id));const u=a?xm(a,t.nodeOrigin):{x:0,y:0,x2:0,y2:0};return Km(r,u)},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return Zm(n)},Pu=(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=Km(n,xm(i)),r=!0)}),r?Zm(n):{x:0,y:0,width:0,height:0}},Mv=(e,t,[n,r,i]=[0,0,1],o=!1,a=!1)=>{const u={...$u(t,[n,r,i]),width:t.width/i,height:t.height/i},d=[];for(const m of e.values()){const{measured:p,selectable:h=!0,hidden:g=!1}=m;if(a&&!h||g)continue;const y=p.width??m.width??m.initialWidth??null,v=p.height??m.height??m.initialHeight??null,k=ju(u,Sl(m)),S=(y??0)*(v??0),_=o&&k>0;(!m.internals.handleBounds||_||k>=S||m.dragging)&&d.push(m)}return d},kY=(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 SY(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 wY({nodes:e,width:t,height:n,panZoom:r,minZoom:i,maxZoom:o},a){if(e.size===0)return Promise.resolve(!0);const u=SY(e,a),d=Pu(u),m=Dv(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 NT({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:r=[0,0],nodeExtent:i,onError:o}){const a=n.get(e),u=a.parentId?n.get(a.parentId):void 0,{x:d,y:m}=u?u.internals.positionAbsolute:{x:0,y:0},p=a.origin??r;let h=a.extent||i;if(a.extent==="parent"&&!a.expandParent)if(!u)o?.("005",Ji.error005());else{const y=u.measured.width,v=u.measured.height;y&&v&&(h=[[d,m],[d+y,m+v]])}else u&&wl(a.extent)&&(h=[[a.extent[0][0]+d,a.extent[0][1]+m],[a.extent[1][0]+d,a.extent[1][1]+m]]);const g=wl(h)?Jo(t,h,a.measured):t;return(a.measured.width===void 0||a.measured.height===void 0)&&o?.("015",Ji.error015()),{position:{x:g.x-d+(a.measured.width??0)*p[0],y:g.y-m+(a.measured.height??0)*p[1]},positionAbsolute:g}}async function CY({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 y=o.has(g.id),v=!y&&g.parentId&&a.find(k=>k.id===g.parentId);(y||v)&&a.push(g)}const u=new Set(t.map(g=>g.id)),d=r.filter(g=>g.deletable!==!1),p=kY(a,d);for(const g of d)u.has(g.id)&&!p.find(v=>v.id===g.id)&&p.push(g);if(!i)return{edges:p,nodes:a};const h=await i({nodes:a,edges:p});return typeof h=="boolean"?h?{edges:p,nodes:a}:{edges:[],nodes:[]}:h}const kl=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),Jo=(e={x:0,y:0},t,n)=>({x:kl(e.x,t[0][0],t[1][0]-(n?.width??0)),y:kl(e.y,t[0][1],t[1][1]-(n?.height??0))});function IT(e,t,n){const{width:r,height:i}=Ts(n),{x:o,y:a}=n.internals.positionAbsolute;return Jo(e,[[o,a],[o+r,a+i]],t)}const FC=(e,t,n)=>en?-kl(Math.abs(e-n),1,t)/t:0,TT=(e,t,n=15,r=40)=>{const i=FC(e.x,r,t.width-r)*n,o=FC(e.y,r,t.height-r)*n;return[i,o]},Km=(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)}),y0=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),Zm=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),Sl=(e,t=[0,0])=>{const{x:n,y:r}=Av(e)?e.internals.positionAbsolute:zu(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}},xm=(e,t=[0,0])=>{const{x:n,y:r}=Av(e)?e.internals.positionAbsolute:zu(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)}},RT=(e,t)=>Zm(Km(y0(e),y0(t))),ju=(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)},VC=e=>Ri(e.width)&&Ri(e.height)&&Ri(e.x)&&Ri(e.y),Ri=e=>!isNaN(e)&&isFinite(e),jY=(e,t)=>{},Bu=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),$u=({x:e,y:t},[n,r,i],o=!1,a=[1,1])=>{const u={x:(e-n)/i,y:(t-r)/i};return o?Bu(u,a):u},ym=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r});function Xa(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 EY(e,t,n){if(typeof e=="string"||typeof e=="number"){const r=Xa(e,n),i=Xa(e,t);return{top:r,right:i,bottom:r,left:i,x:i*2,y:r*2}}if(typeof e=="object"){const r=Xa(e.top??e.y??0,n),i=Xa(e.bottom??e.y??0,n),o=Xa(e.left??e.x??0,t),a=Xa(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 NY(e,t,n,r,i,o){const{x:a,y:u}=ym(e,[t,n,r]),{x:d,y:m}=ym({x:e.x+e.width,y:e.y+e.height},[t,n,r]),p=i-d,h=o-m;return{left:Math.floor(a),top:Math.floor(u),right:Math.floor(p),bottom:Math.floor(h)}}const Dv=(e,t,n,r,i,o)=>{const a=EY(o,t,n),u=(t-a.x)/e.width,d=(n-a.y)/e.height,m=Math.min(u,d),p=kl(m,r,i),h=e.x+e.width/2,g=e.y+e.height/2,y=t/2-h*p,v=n/2-g*p,k=NY(e,y,v,p,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:y-S.left+S.right,y:v-S.top+S.bottom,zoom:p}},Eu=()=>typeof navigator<"u"&&navigator?.userAgent?.indexOf("Mac")>=0;function wl(e){return e!=null&&e!=="parent"}function Ts(e){return{width:e.measured?.width??e.width??e.initialWidth??0,height:e.measured?.height??e.height??e.initialHeight??0}}function AT(e){return(e.measured?.width??e.width??e.initialWidth)!==void 0&&(e.measured?.height??e.height??e.initialHeight)!==void 0}function MT(e,t={width:0,height:0},n,r,i){const o={...e},a=r.get(n);if(a){const u=a.origin||i;o.x+=a.internals.positionAbsolute.x-(t.width??0)*u[0],o.y+=a.internals.positionAbsolute.y-(t.height??0)*u[1]}return o}function UC(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function IY(){let e,t;return{promise:new Promise((r,i)=>{e=r,t=i}),resolve:e,reject:t}}function TY(e){return{...wT,...e||{}}}function ou(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:r,containerBounds:i}){const{x:o,y:a}=Ai(e),u=$u({x:o-(i?.left??0),y:a-(i?.top??0)},r),{x:d,y:m}=n?Bu(u,t):u;return{xSnapped:d,ySnapped:m,...u}}const Ov=e=>({width:e.offsetWidth,height:e.offsetHeight}),DT=e=>e?.getRootNode?.()||window?.document,RY=["INPUT","SELECT","TEXTAREA"];function OT(e){const t=e.composedPath?.()?.[0]||e.target;return t?.nodeType!==1?!1:RY.includes(t.nodeName)||t.hasAttribute("contenteditable")||!!t.closest(".nokey")}const LT=e=>"clientX"in e,Ai=(e,t)=>{const n=LT(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)}},GC=(e,t,n,r,i)=>{const o=t.querySelectorAll(`.${e}`);return!o||!o.length?null:Array.from(o).map(a=>{const u=a.getBoundingClientRect();return{id:a.getAttribute("data-handleid"),type:e,nodeId:i,position:a.getAttribute("data-handlepos"),x:(u.left-n.left)/r,y:(u.top-n.top)/r,...Ov(a)}})};function zT({sourceX:e,sourceY:t,targetX:n,targetY:r,sourceControlX:i,sourceControlY:o,targetControlX:a,targetControlY:u}){const d=e*.125+i*.375+a*.375+n*.125,m=t*.125+o*.375+u*.375+r*.125,p=Math.abs(d-e),h=Math.abs(m-t);return[d,m,p,h]}function yf(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function qC({pos:e,x1:t,y1:n,x2:r,y2:i,c:o}){switch(e){case at.Left:return[t-yf(t-r,o),n];case at.Right:return[t+yf(r-t,o),n];case at.Top:return[t,n-yf(n-i,o)];case at.Bottom:return[t,n+yf(i-n,o)]}}function PT({sourceX:e,sourceY:t,sourcePosition:n=at.Bottom,targetX:r,targetY:i,targetPosition:o=at.Top,curvature:a=.25}){const[u,d]=qC({pos:n,x1:e,y1:t,x2:r,y2:i,c:a}),[m,p]=qC({pos:o,x1:r,y1:i,x2:e,y2:t,c:a}),[h,g,y,v]=zT({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:u,sourceControlY:d,targetControlX:m,targetControlY:p});return[`M${e},${t} C${u},${d} ${m},${p} ${r},${i}`,h,g,y,v]}function BT({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e)/2,o=n0}const DY=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`xy-edge__${e}${t||""}-${n}${r||""}`,OY=(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)),LY=(e,t,n={})=>{if(!e.source||!e.target)return t;const r=n.getEdgeId||DY;let i;return ET(e)?i={...e}:i={...e,id:r(e)},OY(i,t)?t:(i.sourceHandle===null&&delete i.sourceHandle,i.targetHandle===null&&delete i.targetHandle,t.concat(i))};function $T({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[i,o,a,u]=BT({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,o,a,u]}const WC={[at.Left]:{x:-1,y:0},[at.Right]:{x:1,y:0},[at.Top]:{x:0,y:-1},[at.Bottom]:{x:0,y:1}},zY=({source:e,sourcePosition:t=at.Bottom,target:n})=>t===at.Left||t===at.Right?e.xMath.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function PY({source:e,sourcePosition:t=at.Bottom,target:n,targetPosition:r=at.Top,center:i,offset:o,stepPosition:a}){const u=WC[t],d=WC[r],m={x:e.x+u.x*o,y:e.y+u.y*o},p={x:n.x+d.x*o,y:n.y+d.y*o},h=zY({source:m,sourcePosition:t,target:p}),g=h.x!==0?"x":"y",y=h[g];let v=[],k,S;const _={x:0,y:0},w={x:0,y:0},[,,C,N]=BT({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(u[g]*d[g]===-1){g==="x"?(k=i.x??m.x+(p.x-m.x)*a,S=i.y??(m.y+p.y)/2):(k=i.x??(m.x+p.x)/2,S=i.y??m.y+(p.y-m.y)*a);const T=[{x:k,y:m.y},{x:k,y:p.y}],L=[{x:m.x,y:S},{x:p.x,y:S}];u[g]===y?v=g==="x"?T:L:v=g==="x"?L:T}else{const T=[{x:m.x,y:p.y}],L=[{x:p.x,y:m.y}];if(g==="x"?v=u.x===y?L:T:v=u.y===y?T:L,t===r){const B=Math.abs(e[g]-n[g]);if(B<=o){const U=Math.min(o-1,o-B);u[g]===y?_[g]=(m[g]>e[g]?-1:1)*U:w[g]=(p[g]>n[g]?-1:1)*U}}if(t!==r){const B=g==="x"?"y":"x",U=u[g]===d[B],H=m[B]>p[B],V=m[B]=W?(k=(A.x+M.x)/2,S=v[0].y):(k=v[0].x,S=(A.y+M.y)/2)}const O={x:m.x+_.x,y:m.y+_.y},I={x:p.x+w.x,y:p.y+w.y};return[[e,...O.x!==v[0].x||O.y!==v[0].y?[O]:[],...v,...I.x!==v[v.length-1].x||I.y!==v[v.length-1].y?[I]:[],n],k,S,C,N]}function BY(e,t,n,r){const i=Math.min(YC(e,t)/2,YC(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.xn.id===t):e[0])||null}function b0(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`:""}function HY(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:i}){const o=new Set;return e.reduce((a,u)=>([u.markerStart||r,u.markerEnd||i].forEach(d=>{if(d&&typeof d=="object"){const m=b0(d,t);o.has(m)||(a.push({id:m,color:d.color||n,...d}),o.add(m))}}),a),[]).sort((a,u)=>a.id.localeCompare(u.id))}const HT=1e3,FY=10,Lv={nodeOrigin:[0,0],nodeExtent:wu,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},VY={...Lv,checkEquality:!0};function zv(e,t){const n={...e};for(const r in t)t[r]!==void 0&&(n[r]=t[r]);return n}function UY(e,t,n){const r=zv(Lv,n);for(const i of e.values())if(i.parentId)Bv(i,e,t,r);else{const o=zu(i,r.nodeOrigin),a=wl(i.extent)?i.extent:r.nodeExtent,u=Jo(o,a,Ts(i));i.internals.positionAbsolute=u}}function GY(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 Pv(e){return e==="manual"}function _0(e,t,n,r={}){const i=zv(VY,r),o={i:0},a=new Map(t),u=i?.elevateNodesOnSelect&&!Pv(i.zIndexMode)?HT:0;let d=e.length>0,m=!1;t.clear(),n.clear();for(const p of e){let h=a.get(p.id);if(i.checkEquality&&p===h?.internals.userNode)t.set(p.id,h);else{const g=zu(p,i.nodeOrigin),y=wl(p.extent)?p.extent:i.nodeExtent,v=Jo(g,y,Ts(p));h={...i.defaults,...p,measured:{width:p.measured?.width,height:p.measured?.height},internals:{positionAbsolute:v,handleBounds:GY(p,h),z:FT(p,u,i.zIndexMode),userNode:p}},t.set(p.id,h)}(h.measured===void 0||h.measured.width===void 0||h.measured.height===void 0)&&!h.hidden&&(d=!1),p.parentId&&Bv(h,t,n,r,o),m||=p.selected??!1}return{nodesInitialized:d,hasSelectedNodes:m}}function qY(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 Bv(e,t,n,r,i){const{elevateNodesOnSelect:o,nodeOrigin:a,nodeExtent:u,zIndexMode:d}=zv(Lv,r),m=e.parentId,p=t.get(m);if(!p){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}qY(e,n),i&&!p.parentId&&p.internals.rootParentIndex===void 0&&d==="auto"&&(p.internals.rootParentIndex=++i.i,p.internals.z=p.internals.z+i.i*FY),i&&p.internals.rootParentIndex!==void 0&&(i.i=p.internals.rootParentIndex);const h=o&&!Pv(d)?HT:0,{x:g,y,z:v}=WY(e,p,a,u,h,d),{positionAbsolute:k}=e.internals,S=g!==k.x||y!==k.y;(S||v!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:S?{x:g,y}:k,z:v}})}function FT(e,t,n){const r=Ri(e.zIndex)?e.zIndex:0;return Pv(n)?r:r+(e.selected?t:0)}function WY(e,t,n,r,i,o){const{x:a,y:u}=t.internals.positionAbsolute,d=Ts(e),m=zu(e,n),p=wl(e.extent)?Jo(m,e.extent,d):m;let h=Jo({x:a+p.x,y:u+p.y},r,d);e.extent==="parent"&&(h=IT(h,d,t));const g=FT(e,i,o),y=t.internals.z??0;return{x:h.x,y:h.y,z:y>=g?y+1:g}}function $v(e,t,n,r=[0,0]){const i=[],o=new Map;for(const a of e){const u=t.get(a.parentId);if(!u)continue;const d=o.get(a.parentId)?.expandedRect??Sl(u),m=RT(d,a.rect);o.set(a.parentId,{expandedRect:m,parent:u})}return o.size>0&&o.forEach(({expandedRect:a,parent:u},d)=>{const m=u.internals.positionAbsolute,p=Ts(u),h=u.origin??r,g=a.x0||y>0||S||_)&&(i.push({id:d,type:"position",position:{x:u.position.x-g+S,y:u.position.y-y+_}}),n.get(d)?.forEach(w=>{e.some(C=>C.id===w.id)||i.push({id:w.id,type:"position",position:{x:w.position.x+g,y:w.position.y+y}})})),(p.width0){const y=$v(g,t,n,i);m.push(...y)}return{changes:m,updatedInternals:d}}async function XY({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),u=!!a&&(a.x!==n[0]||a.y!==n[1]||a.k!==n[2]);return Promise.resolve(u)}function QC(e,t,n,r,i,o){let a=i;const u=r.get(a)||new Map;r.set(a,u.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 VT(e,t,n){e.clear(),t.clear();for(const r of n){const{source:i,target:o,sourceHandle:a=null,targetHandle:u=null}=r,d={edgeId:r.id,source:i,target:o,sourceHandle:a,targetHandle:u},m=`${i}-${a}--${o}-${u}`,p=`${o}-${u}--${i}-${a}`;QC("source",d,p,e,i,a),QC("target",d,m,e,o,u),t.set(r.id,r)}}function UT(e,t){if(!e.parentId)return!1;const n=t.get(e.parentId);return n?n.selected?!0:UT(n,t):!1}function JC(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 KY(e,t,n,r){const i=new Map;for(const[o,a]of e)if((a.selected||a.id===r)&&(!a.parentId||!UT(a,e))&&(a.draggable||t&&typeof a.draggable>"u")){const u=e.get(o);u&&i.set(o,{id:o,position:u.position||{x:0,y:0},distance:{x:n.x-u.internals.positionAbsolute.x,y:n.y-u.internals.positionAbsolute.y},extent:u.extent,parentId:u.parentId,origin:u.origin,expandParent:u.expandParent,internals:{positionAbsolute:u.internals.positionAbsolute||{x:0,y:0}},measured:{width:u.measured.width??0,height:u.measured.height??0}})}return i}function _x({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){const i=[];for(const[a,u]of t){const d=n.get(a)?.internals.userNode;d&&i.push({...d,position:u.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 ZY({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=Bu(o,t);return{x:a.x-o.x,y:a.y-o.y}}function QY({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:i}){let o={x:null,y:null},a=0,u=new Map,d=!1,m={x:0,y:0},p=null,h=!1,g=null,y=!1,v=!1,k=null;function S({noDragClassName:w,handleSelector:C,domNode:N,isSelectable:O,nodeId:I,nodeClickDistance:D=0}){g=Zr(N);function T({x:$,y:W}){const{nodeLookup:B,nodeExtent:U,snapGrid:H,snapToGrid:V,nodeOrigin:Y,onNodeDrag:Q,onSelectionDrag:q,onError:G,updateNodePositions:J}=t();o={x:$,y:W};let P=!1;const X=u.size>1,ee=X&&U?y0(Pu(u)):null,te=X&&V?ZY({dragItems:u,snapGrid:H,x:$,y:W}):null;for(const[re,oe]of u){if(!B.has(re))continue;let de={x:$-oe.distance.x,y:W-oe.distance.y};V&&(de=te?{x:Math.round(de.x+te.x),y:Math.round(de.y+te.y)}:Bu(de,H));let se=null;if(X&&U&&!oe.extent&&ee){const{positionAbsolute:Ce}=oe.internals,Be=Ce.x-ee.x+U[0][0],Ge=Ce.x+oe.measured.width-ee.x2+U[1][0],Ye=Ce.y-ee.y+U[0][1],yt=Ce.y+oe.measured.height-ee.y2+U[1][1];se=[[Be,Ye],[Ge,yt]]}const{position:Ee,positionAbsolute:we}=NT({nodeId:re,nextPosition:de,nodeLookup:B,nodeExtent:se||U,nodeOrigin:Y,onError:G});P=P||oe.position.x!==Ee.x||oe.position.y!==Ee.y,oe.position=Ee,oe.internals.positionAbsolute=we}if(v=v||P,!!P&&(J(u,!0),k&&(r||Q||!I&&q))){const[re,oe]=_x({nodeId:I,dragItems:u,nodeLookup:B});r?.(k,u,re,oe),Q?.(k,re,oe),I||q?.(k,oe)}}async function L(){if(!p)return;const{transform:$,panBy:W,autoPanSpeed:B,autoPanOnNodeDrag:U}=t();if(!U){d=!1,cancelAnimationFrame(a);return}const[H,V]=TT(m,p,B);(H!==0||V!==0)&&(o.x=(o.x??0)-H/$[2],o.y=(o.y??0)-V/$[2],await W({x:H,y:V})&&T(o)),a=requestAnimationFrame(L)}function A($){const{nodeLookup:W,multiSelectionActive:B,nodesDraggable:U,transform:H,snapGrid:V,snapToGrid:Y,selectNodesOnDrag:Q,onNodeDragStart:q,onSelectionDragStart:G,unselectNodesAndEdges:J}=t();h=!0,(!Q||!O)&&!B&&I&&(W.get(I)?.selected||J()),O&&Q&&I&&e?.(I);const P=ou($.sourceEvent,{transform:H,snapGrid:V,snapToGrid:Y,containerBounds:p});if(o=P,u=KY(W,U,P,I),u.size>0&&(n||q||!I&&G)){const[X,ee]=_x({nodeId:I,dragItems:u,nodeLookup:W});n?.($.sourceEvent,u,X,ee),q?.($.sourceEvent,X,ee),I||G?.($.sourceEvent,ee)}}const M=aT().clickDistance(D).on("start",$=>{const{domNode:W,nodeDragThreshold:B,transform:U,snapGrid:H,snapToGrid:V}=t();p=W?.getBoundingClientRect()||null,y=!1,v=!1,k=$.sourceEvent,B===0&&A($),o=ou($.sourceEvent,{transform:U,snapGrid:H,snapToGrid:V,containerBounds:p}),m=Ai($.sourceEvent,p)}).on("drag",$=>{const{autoPanOnNodeDrag:W,transform:B,snapGrid:U,snapToGrid:H,nodeDragThreshold:V,nodeLookup:Y}=t(),Q=ou($.sourceEvent,{transform:B,snapGrid:U,snapToGrid:H,containerBounds:p});if(k=$.sourceEvent,($.sourceEvent.type==="touchmove"&&$.sourceEvent.touches.length>1||I&&!Y.has(I))&&(y=!0),!y){if(!d&&W&&h&&(d=!0,L()),!h){const q=Ai($.sourceEvent,p),G=q.x-m.x,J=q.y-m.y;Math.sqrt(G*G+J*J)>V&&A($)}(o.x!==Q.xSnapped||o.y!==Q.ySnapped)&&u&&h&&(m=Ai($.sourceEvent,p),T(Q))}}).on("end",$=>{if(!(!h||y)&&(d=!1,h=!1,cancelAnimationFrame(a),u.size>0)){const{nodeLookup:W,updateNodePositions:B,onNodeDragStop:U,onSelectionDragStop:H}=t();if(v&&(B(u,!1),v=!1),i||U||!I&&H){const[V,Y]=_x({nodeId:I,dragItems:u,nodeLookup:W,dragging:!1});i?.($.sourceEvent,u,V,Y),U?.($.sourceEvent,V,Y),I||H?.($.sourceEvent,Y)}}}).filter($=>{const W=$.target;return!$.button&&(!w||!JC(W,`.${w}`,N))&&(!C||JC(W,C,N))});g.call(M)}function _(){g?.on(".drag",null)}return{update:S,destroy:_}}function JY(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())ju(i,Sl(o))>0&&r.push(o);return r}const eX=250;function tX(e,t,n,r){let i=[],o=1/0;const a=JY(e,n,t+eX);for(const u of a){const d=[...u.internals.handleBounds?.source??[],...u.internals.handleBounds?.target??[]];for(const m of d){if(r.nodeId===m.nodeId&&r.type===m.type&&r.id===m.id)continue;const{x:p,y:h}=ea(u,m,m.position,!0),g=Math.sqrt(Math.pow(p-e.x,2)+Math.pow(h-e.y,2));g>t||(g1){const u=r.type==="source"?"target":"source";return i.find(d=>d.type===u)??i[0]}return i[0]}function GT(e,t,n,r,i,o=!1){const a=r.get(e);if(!a)return null;const u=i==="strict"?a.internals.handleBounds?.[t]:[...a.internals.handleBounds?.source??[],...a.internals.handleBounds?.target??[]],d=(n?u?.find(m=>m.id===n):u?.[0])??null;return d&&o?{...d,...ea(a,d,d.position,!0)}:d}function qT(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function nX(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}const WT=()=>!0;function rX(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:i,edgeUpdaterType:o,isTarget:a,domNode:u,nodeLookup:d,lib:m,autoPanOnConnect:p,flowId:h,panBy:g,cancelConnection:y,onConnectStart:v,onConnect:k,onConnectEnd:S,isValidConnection:_=WT,onReconnectEnd:w,updateConnection:C,getTransform:N,getFromHandle:O,autoPanSpeed:I,dragThreshold:D=1,handleDomNode:T}){const L=DT(e.target);let A=0,M;const{x:$,y:W}=Ai(e),B=qT(o,T),U=u?.getBoundingClientRect();let H=!1;if(!U||!B)return;const V=GT(i,B,r,d,t);if(!V)return;let Y=Ai(e,U),Q=!1,q=null,G=!1,J=null;function P(){if(!p||!U)return;const[Ee,we]=TT(Y,U,I);g({x:Ee,y:we}),A=requestAnimationFrame(P)}const X={...V,nodeId:i,type:B,position:V.position},ee=d.get(i);let re={inProgress:!0,isValid:null,from:ea(ee,X,at.Left,!0),fromHandle:X,fromPosition:X.position,fromNode:ee,to:Y,toHandle:null,toPosition:HC[X.position],toNode:null,pointer:Y};function oe(){H=!0,C(re),v?.(e,{nodeId:i,handleId:r,handleType:B})}D===0&&oe();function de(Ee){if(!H){const{x:yt,y:qt}=Ai(Ee),bt=yt-$,vt=qt-W;if(!(bt*bt+vt*vt>D*D))return;oe()}if(!O()||!X){se(Ee);return}const we=N();Y=Ai(Ee,U),M=tX($u(Y,we,!1,[1,1]),n,d,X),Q||(P(),Q=!0);const Ce=YT(Ee,{handle:M,connectionMode:t,fromNodeId:i,fromHandleId:r,fromType:a?"target":"source",isValidConnection:_,doc:L,lib:m,flowId:h,nodeLookup:d});J=Ce.handleDomNode,q=Ce.connection,G=nX(!!M,Ce.isValid);const Be=d.get(i),Ge=Be?ea(Be,X,at.Left,!0):re.from,Ye={...re,from:Ge,isValid:G,to:Ce.toHandle&&G?ym({x:Ce.toHandle.x,y:Ce.toHandle.y},we):Y,toHandle:Ce.toHandle,toPosition:G&&Ce.toHandle?Ce.toHandle.position:HC[X.position],toNode:Ce.toHandle?d.get(Ce.toHandle.nodeId):null,pointer:Y};C(Ye),re=Ye}function se(Ee){if(!("touches"in Ee&&Ee.touches.length>0)){if(H){(M||J)&&q&&G&&k?.(q);const{inProgress:we,...Ce}=re,Be={...Ce,toPosition:re.toHandle?re.toPosition:null};S?.(Ee,Be),o&&w?.(Ee,Be)}y(),cancelAnimationFrame(A),Q=!1,G=!1,q=null,J=null,L.removeEventListener("mousemove",de),L.removeEventListener("mouseup",se),L.removeEventListener("touchmove",de),L.removeEventListener("touchend",se)}}L.addEventListener("mousemove",de),L.addEventListener("mouseup",se),L.addEventListener("touchmove",de),L.addEventListener("touchend",se)}function YT(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:i,fromType:o,doc:a,lib:u,flowId:d,isValidConnection:m=WT,nodeLookup:p}){const h=o==="target",g=t?a.querySelector(`.${u}-flow__handle[data-id="${d}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x:y,y:v}=Ai(e),k=a.elementFromPoint(y,v),S=k?.classList.contains(`${u}-flow__handle`)?k:g,_={handleDomNode:S,isValid:!1,connection:null,toHandle:null};if(S){const w=qT(void 0,S),C=S.getAttribute("data-nodeid"),N=S.getAttribute("data-handleid"),O=S.classList.contains("connectable"),I=S.classList.contains("connectableend");if(!C||!w)return _;const D={source:h?C:r,sourceHandle:h?N:i,target:h?r:C,targetHandle:h?i:N};_.connection=D;const L=O&&I&&(n===_l.Strict?h&&w==="source"||!h&&w==="target":C!==r||N!==i);_.isValid=L&&m(D),_.toHandle=GT(C,w,N,p,n,!0)}return _}const k0={onPointerDown:rX,isValid:YT};function iX({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){const i=Zr(e);function o({translateExtent:u,width:d,height:m,zoomStep:p=1,pannable:h=!0,zoomable:g=!0,inversePan:y=!1}){const v=C=>{if(C.sourceEvent.type!=="wheel"||!t)return;const N=n(),O=C.sourceEvent.ctrlKey&&Eu()?10:1,I=-C.sourceEvent.deltaY*(C.sourceEvent.deltaMode===1?.05:C.sourceEvent.deltaMode?1:.002)*p,D=N[2]*Math.pow(2,I*O);t.scaleTo(D)};let k=[0,0];const S=C=>{(C.sourceEvent.type==="mousedown"||C.sourceEvent.type==="touchstart")&&(k=[C.sourceEvent.clientX??C.sourceEvent.touches[0].clientX,C.sourceEvent.clientY??C.sourceEvent.touches[0].clientY])},_=C=>{const N=n();if(C.sourceEvent.type!=="mousemove"&&C.sourceEvent.type!=="touchmove"||!t)return;const O=[C.sourceEvent.clientX??C.sourceEvent.touches[0].clientX,C.sourceEvent.clientY??C.sourceEvent.touches[0].clientY],I=[O[0]-k[0],O[1]-k[1]];k=O;const D=r()*Math.max(N[2],Math.log(N[2]))*(y?-1:1),T={x:N[0]-I[0]*D,y:N[1]-I[1]*D},L=[[0,0],[d,m]];t.setViewportConstrained({x:T.x,y:T.y,zoom:N[2]},L,u)},w=kT().on("start",S).on("zoom",h?_:null).on("zoom.wheel",g?v:null);i.call(w,{})}function a(){i.on("zoom",null)}return{update:o,destroy:a,pointer:Ni}}const Qm=e=>({x:e.x,y:e.y,zoom:e.k}),kx=({x:e,y:t,zoom:n})=>Xm.translate(e,t).scale(n),tl=(e,t)=>e.target.closest(`.${t}`),XT=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),sX=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Sx=(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},KT=e=>{const t=e.ctrlKey&&Eu()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function oX({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:i,panOnScrollSpeed:o,zoomOnPinch:a,onPanZoomStart:u,onPanZoom:d,onPanZoomEnd:m}){return p=>{if(tl(p,t))return p.ctrlKey&&p.preventDefault(),!1;p.preventDefault(),p.stopImmediatePropagation();const h=n.property("__zoom").k||1;if(p.ctrlKey&&a){const S=Ni(p),_=KT(p),w=h*Math.pow(2,_);r.scaleTo(n,w,S,p);return}const g=p.deltaMode===1?20:1;let y=i===Go.Vertical?0:p.deltaX*g,v=i===Go.Horizontal?0:p.deltaY*g;!Eu()&&p.shiftKey&&i!==Go.Vertical&&(y=p.deltaY*g,v=0),r.translateBy(n,-(y/h)*o,-(v/h)*o,{internal:!0});const k=Qm(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(d?.(p,k),e.panScrollTimeout=setTimeout(()=>{m?.(p,k),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,u?.(p,k))}}function aX({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,i){const o=r.type==="wheel",a=!t&&o&&!r.ctrlKey,u=tl(r,e);if(r.ctrlKey&&o&&u&&r.preventDefault(),a||u)return null;r.preventDefault(),n.call(this,r,i)}}function lX({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{if(r.sourceEvent?.internal)return;const i=Qm(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 cX({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:i}){return o=>{e.usedRightMouseButton=!!(n&&XT(t,e.mouseButton??0)),o.sourceEvent?.sync||r([o.transform.x,o.transform.y,o.transform.k]),i&&!o.sourceEvent?.internal&&i?.(o.sourceEvent,Qm(o.transform))}}function uX({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:i,onPaneContextMenu:o}){return a=>{if(!a.sourceEvent?.internal&&(e.isZoomingOrPanning=!1,o&&XT(t,e.mouseButton??0)&&!e.usedRightMouseButton&&a.sourceEvent&&o(a.sourceEvent),e.usedRightMouseButton=!1,r(!1),i)){const u=Qm(a.transform);e.prevViewport=u,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{i?.(a.sourceEvent,u)},n?150:0)}}}function dX({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:n,panOnDrag:r,panOnScroll:i,zoomOnDoubleClick:o,userSelectionActive:a,noWheelClassName:u,noPanClassName:d,lib:m,connectionInProgress:p}){return h=>{const g=e||t,y=n&&h.ctrlKey,v=h.type==="wheel";if(h.button===1&&h.type==="mousedown"&&(tl(h,`${m}-flow__node`)||tl(h,`${m}-flow__edge`)))return!0;if(!r&&!g&&!i&&!o&&!n||a||p&&!v||tl(h,u)&&v||tl(h,d)&&(!v||i&&v&&!e)||!n&&h.ctrlKey&&v)return!1;if(!n&&h.type==="touchstart"&&h.touches?.length>1)return h.preventDefault(),!1;if(!g&&!i&&!y&&v||!r&&(h.type==="mousedown"||h.type==="touchstart")||Array.isArray(r)&&!r.includes(h.button)&&h.type==="mousedown")return!1;const k=Array.isArray(r)&&r.includes(h.button)||!h.button||h.button<=1;return(!h.ctrlKey||v)&&k}}function fX({domNode:e,minZoom:t,maxZoom:n,translateExtent:r,viewport:i,onPanZoom:o,onPanZoomStart:a,onPanZoomEnd:u,onDraggingChange:d}){const m={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},p=e.getBoundingClientRect(),h=kT().scaleExtent([t,n]).translateExtent(r),g=Zr(e).call(h);w({x:i.x,y:i.y,zoom:kl(i.zoom,t,n)},[[0,0],[p.width,p.height]],r);const y=g.on("wheel.zoom"),v=g.on("dblclick.zoom");h.wheelDelta(KT);function k(M,$){return g?new Promise(W=>{h?.interpolate($?.interpolate==="linear"?su:Af).transform(Sx(g,$?.duration,$?.ease,()=>W(!0)),M)}):Promise.resolve(!1)}function S({noWheelClassName:M,noPanClassName:$,onPaneContextMenu:W,userSelectionActive:B,panOnScroll:U,panOnDrag:H,panOnScrollMode:V,panOnScrollSpeed:Y,preventScrolling:Q,zoomOnPinch:q,zoomOnScroll:G,zoomOnDoubleClick:J,zoomActivationKeyPressed:P,lib:X,onTransformChange:ee,connectionInProgress:te,paneClickDistance:re,selectionOnDrag:oe}){B&&!m.isZoomingOrPanning&&_();const de=U&&!P&&!B;h.clickDistance(oe?1/0:!Ri(re)||re<0?0:re);const se=de?oX({zoomPanValues:m,noWheelClassName:M,d3Selection:g,d3Zoom:h,panOnScrollMode:V,panOnScrollSpeed:Y,zoomOnPinch:q,onPanZoomStart:a,onPanZoom:o,onPanZoomEnd:u}):aX({noWheelClassName:M,preventScrolling:Q,d3ZoomHandler:y});if(g.on("wheel.zoom",se,{passive:!1}),!B){const we=lX({zoomPanValues:m,onDraggingChange:d,onPanZoomStart:a});h.on("start",we);const Ce=cX({zoomPanValues:m,panOnDrag:H,onPaneContextMenu:!!W,onPanZoom:o,onTransformChange:ee});h.on("zoom",Ce);const Be=uX({zoomPanValues:m,panOnDrag:H,panOnScroll:U,onPaneContextMenu:W,onPanZoomEnd:u,onDraggingChange:d});h.on("end",Be)}const Ee=dX({zoomActivationKeyPressed:P,panOnDrag:H,zoomOnScroll:G,panOnScroll:U,zoomOnDoubleClick:J,zoomOnPinch:q,userSelectionActive:B,noPanClassName:$,noWheelClassName:M,lib:X,connectionInProgress:te});h.filter(Ee),J?g.on("dblclick.zoom",v):g.on("dblclick.zoom",null)}function _(){h.on("zoom",null)}async function w(M,$,W){const B=kx(M),U=h?.constrain()(B,$,W);return U&&await k(U),new Promise(H=>H(U))}async function C(M,$){const W=kx(M);return await k(W,$),new Promise(B=>B(W))}function N(M){if(g){const $=kx(M),W=g.property("__zoom");(W.k!==M.zoom||W.x!==M.x||W.y!==M.y)&&h?.transform(g,$,null,{sync:!0})}}function O(){const M=g?_T(g.node()):{x:0,y:0,k:1};return{x:M.x,y:M.y,zoom:M.k}}function I(M,$){return g?new Promise(W=>{h?.interpolate($?.interpolate==="linear"?su:Af).scaleTo(Sx(g,$?.duration,$?.ease,()=>W(!0)),M)}):Promise.resolve(!1)}function D(M,$){return g?new Promise(W=>{h?.interpolate($?.interpolate==="linear"?su:Af).scaleBy(Sx(g,$?.duration,$?.ease,()=>W(!0)),M)}):Promise.resolve(!1)}function T(M){h?.scaleExtent(M)}function L(M){h?.translateExtent(M)}function A(M){const $=!Ri(M)||M<0?0:M;h?.clickDistance($)}return{update:S,destroy:_,setViewport:C,setViewportConstrained:w,getViewport:O,scaleTo:I,scaleBy:D,setScaleExtent:T,setTranslateExtent:L,syncViewport:N,setClickDistance:A}}var Cl;(function(e){e.Line="line",e.Handle="handle"})(Cl||(Cl={}));function mX({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:i,affectsY:o}){const a=e-t,u=n-r,d=[a>0?1:a<0?-1:0,u>0?1:u<0?-1:0];return a&&i&&(d[0]=d[0]*-1),u&&o&&(d[1]=d[1]*-1),d}function e2(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 so(e,t){return Math.max(0,t-e)}function oo(e,t){return Math.max(0,e-t)}function vf(e,t,n){return Math.max(0,t-e,e-n)}function t2(e,t){return e?!t:t}function hX(e,t,n,r,i,o,a,u){let{affectsX:d,affectsY:m}=t;const{isHorizontal:p,isVertical:h}=t,g=p&&h,{xSnapped:y,ySnapped:v}=n,{minWidth:k,maxWidth:S,minHeight:_,maxHeight:w}=r,{x:C,y:N,width:O,height:I,aspectRatio:D}=e;let T=Math.floor(p?y-e.pointerX:0),L=Math.floor(h?v-e.pointerY:0);const A=O+(d?-T:T),M=I+(m?-L:L),$=-o[0]*O,W=-o[1]*I;let B=vf(A,k,S),U=vf(M,_,w);if(a){let Y=0,Q=0;d&&T<0?Y=so(C+T+$,a[0][0]):!d&&T>0&&(Y=oo(C+A+$,a[1][0])),m&&L<0?Q=so(N+L+W,a[0][1]):!m&&L>0&&(Q=oo(N+M+W,a[1][1])),B=Math.max(B,Y),U=Math.max(U,Q)}if(u){let Y=0,Q=0;d&&T>0?Y=oo(C+T,u[0][0]):!d&&T<0&&(Y=so(C+A,u[1][0])),m&&L>0?Q=oo(N+L,u[0][1]):!m&&L<0&&(Q=so(N+M,u[1][1])),B=Math.max(B,Y),U=Math.max(U,Q)}if(i){if(p){const Y=vf(A/D,_,w)*D;if(B=Math.max(B,Y),a){let Q=0;!d&&!m||d&&!m&&g?Q=oo(N+W+A/D,a[1][1])*D:Q=so(N+W+(d?T:-T)/D,a[0][1])*D,B=Math.max(B,Q)}if(u){let Q=0;!d&&!m||d&&!m&&g?Q=so(N+A/D,u[1][1])*D:Q=oo(N+(d?T:-T)/D,u[0][1])*D,B=Math.max(B,Q)}}if(h){const Y=vf(M*D,k,S)/D;if(U=Math.max(U,Y),a){let Q=0;!d&&!m||m&&!d&&g?Q=oo(C+M*D+$,a[1][0])/D:Q=so(C+(m?L:-L)*D+$,a[0][0])/D,U=Math.max(U,Q)}if(u){let Q=0;!d&&!m||m&&!d&&g?Q=so(C+M*D,u[1][0])/D:Q=oo(C+(m?L:-L)*D,u[0][0])/D,U=Math.max(U,Q)}}}L=L+(L<0?U:-U),T=T+(T<0?B:-B),i&&(g?A>M*D?L=(t2(d,m)?-T:T)/D:T=(t2(d,m)?-L:L)*D:p?(L=T/D,m=d):(T=L*D,d=m));const H=d?C+T:C,V=m?N+L:N;return{width:O+(d?-T:T),height:I+(m?-L:L),x:o[0]*T*(d?-1:1)+H,y:o[1]*L*(m?-1:1)+V}}const ZT={width:0,height:0,x:0,y:0},pX={...ZT,pointerX:0,pointerY:0,aspectRatio:1};function gX(e){return[[0,0],[e.measured.width,e.measured.height]]}function xX(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,u=n[0]*o,d=n[1]*a;return[[r-u,i-d],[r+o-u,i+a-d]]}function yX({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:i}){const o=Zr(e);let a={controlDirection:e2("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function u({controlPosition:m,boundaries:p,keepAspectRatio:h,resizeDirection:g,onResizeStart:y,onResize:v,onResizeEnd:k,shouldResize:S}){let _={...ZT},w={...pX};a={boundaries:p,resizeDirection:g,keepAspectRatio:h,controlDirection:e2(m)};let C,N=null,O=[],I,D,T,L=!1;const A=aT().on("start",M=>{const{nodeLookup:$,transform:W,snapGrid:B,snapToGrid:U,nodeOrigin:H,paneDomNode:V}=n();if(C=$.get(t),!C)return;N=V?.getBoundingClientRect()??null;const{xSnapped:Y,ySnapped:Q}=ou(M.sourceEvent,{transform:W,snapGrid:B,snapToGrid:U,containerBounds:N});_={width:C.measured.width??0,height:C.measured.height??0,x:C.position.x??0,y:C.position.y??0},w={..._,pointerX:Y,pointerY:Q,aspectRatio:_.width/_.height},I=void 0,C.parentId&&(C.extent==="parent"||C.expandParent)&&(I=$.get(C.parentId),D=I&&C.extent==="parent"?gX(I):void 0),O=[],T=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=xX(G,C,G.origin??H);T?T=[[Math.min(J[0][0],T[0][0]),Math.min(J[0][1],T[0][1])],[Math.max(J[1][0],T[1][0]),Math.max(J[1][1],T[1][1])]]:T=J}y?.(M,{..._})}).on("drag",M=>{const{transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:U}=n(),H=ou(M.sourceEvent,{transform:$,snapGrid:W,snapToGrid:B,containerBounds:N}),V=[];if(!C)return;const{x:Y,y:Q,width:q,height:G}=_,J={},P=C.origin??U,{width:X,height:ee,x:te,y:re}=hX(w,a.controlDirection,H,a.boundaries,a.keepAspectRatio,P,D,T),oe=X!==q,de=ee!==G,se=te!==Y&&oe,Ee=re!==Q&&de;if(!se&&!Ee&&!oe&&!de)return;if((se||Ee||P[0]===1||P[1]===1)&&(J.x=se?te:_.x,J.y=Ee?re:_.y,_.x=J.x,_.y=J.y,O.length>0)){const Ge=te-Y,Ye=re-Q;for(const yt of O)yt.position={x:yt.position.x-Ge+P[0]*(X-q),y:yt.position.y-Ye+P[1]*(ee-G)},V.push(yt)}if((oe||de)&&(J.width=oe&&(!a.resizeDirection||a.resizeDirection==="horizontal")?X:_.width,J.height=de&&(!a.resizeDirection||a.resizeDirection==="vertical")?ee:_.height,_.width=J.width,_.height=J.height),I&&C.expandParent){const Ge=P[0]*(J.width??0);J.x&&J.x{L&&(k?.(M,{..._}),i?.({..._}),L=!1)});o.call(A)}function d(){o.on(".drag",null)}return{update:u,destroy:d}}var wx={exports:{}},Cx={},jx={exports:{}},Ex={};var n2;function vX(){if(n2)return Ex;n2=1;var e=El();function t(h,g){return h===g&&(h!==0||1/h===1/g)||h!==h&&g!==g}var n=typeof Object.is=="function"?Object.is:t,r=e.useState,i=e.useEffect,o=e.useLayoutEffect,a=e.useDebugValue;function u(h,g){var y=g(),v=r({inst:{value:y,getSnapshot:g}}),k=v[0].inst,S=v[1];return o(function(){k.value=y,k.getSnapshot=g,d(k)&&S({inst:k})},[h,y,g]),i(function(){return d(k)&&S({inst:k}),h(function(){d(k)&&S({inst:k})})},[h]),a(y),y}function d(h){var g=h.getSnapshot;h=h.value;try{var y=g();return!n(h,y)}catch{return!0}}function m(h,g){return g()}var p=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?m:u;return Ex.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:p,Ex}var r2;function bX(){return r2||(r2=1,jx.exports=vX()),jx.exports}var i2;function _X(){if(i2)return Cx;i2=1;var e=El(),t=bX();function n(m,p){return m===p&&(m!==0||1/m===1/p)||m!==m&&p!==p}var r=typeof Object.is=="function"?Object.is:n,i=t.useSyncExternalStore,o=e.useRef,a=e.useEffect,u=e.useMemo,d=e.useDebugValue;return Cx.useSyncExternalStoreWithSelector=function(m,p,h,g,y){var v=o(null);if(v.current===null){var k={hasValue:!1,value:null};v.current=k}else k=v.current;v=u(function(){function _(I){if(!w){if(w=!0,C=I,I=g(I),y!==void 0&&k.hasValue){var D=k.value;if(y(D,I))return N=D}return N=I}if(D=N,r(C,I))return D;var T=g(I);return y!==void 0&&y(D,T)?(C=I,D):(C=I,N=T)}var w=!1,C,N,O=h===void 0?null:h;return[function(){return _(p())},O===null?void 0:function(){return _(O())}]},[p,h,g,y]);var S=i(m,v[0],v[1]);return a(function(){k.hasValue=!0,k.value=S},[S]),d(S),S},Cx}var s2;function kX(){return s2||(s2=1,wx.exports=_X()),wx.exports}var SX=kX();const wX=ta(SX),CX={},o2=e=>{let t;const n=new Set,r=(p,h)=>{const g=typeof p=="function"?p(t):p;if(!Object.is(g,t)){const y=t;t=h??(typeof g!="object"||g===null)?g:Object.assign({},t,g),n.forEach(v=>v(t,y))}},i=()=>t,d={setState:r,getState:i,getInitialState:()=>m,subscribe:p=>(n.add(p),()=>n.delete(p)),destroy:()=>{(CX?"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},jX=e=>e?o2(e):o2,{useDebugValue:EX}=St,{useSyncExternalStoreWithSelector:NX}=wX,IX=e=>e;function QT(e,t=IX,n){const r=NX(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return EX(r),r}const a2=(e,t)=>{const n=jX(e),r=(i,o=t)=>QT(n,i,o);return Object.assign(r,n),r},TX=(e,t)=>e?a2(e,t):a2;function Nn(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 Jm=j.createContext(null),RX=Jm.Provider,JT=Ji.error001();function Gt(e,t){const n=j.useContext(Jm);if(n===null)throw new Error(JT);return QT(n,e,t)}function In(){const e=j.useContext(Jm);if(e===null)throw new Error(JT);return j.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const l2={display:"none"},AX={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},eR="react-flow__node-desc",tR="react-flow__edge-desc",MX="react-flow__aria-live",DX=e=>e.ariaLiveMessage,OX=e=>e.ariaLabelConfig;function LX({rfId:e}){const t=Gt(DX);return c.jsx("div",{id:`${MX}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:AX,children:t})}function zX({rfId:e,disableKeyboardA11y:t}){const n=Gt(OX);return c.jsxs(c.Fragment,{children:[c.jsx("div",{id:`${eR}-${e}`,style:l2,children:t?n["node.a11yDescription.default"]:n["node.a11yDescription.keyboardDisabled"]}),c.jsx("div",{id:`${tR}-${e}`,style:l2,children:n["edge.a11yDescription.default"]}),!t&&c.jsx(LX,{rfId:e})]})}const eh=j.forwardRef(({position:e="top-left",children:t,className:n,style:r,...i},o)=>{const a=`${e}`.split("-");return c.jsx("div",{className:Kn(["react-flow__panel",n,...a]),style:r,ref:o,...i,children:t})});eh.displayName="Panel";function PX({proOptions:e,position:t="bottom-right"}){return e?.hideAttribution?null:c.jsx(eh,{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:c.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const BX=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}},bf=e=>e.id;function $X(e,t){return Nn(e.selectedNodes.map(bf),t.selectedNodes.map(bf))&&Nn(e.selectedEdges.map(bf),t.selectedEdges.map(bf))}function HX({onSelectionChange:e}){const t=In(),{selectedNodes:n,selectedEdges:r}=Gt(BX,$X);return j.useEffect(()=>{const i={nodes:n,edges:r};e?.(i),t.getState().onSelectionChangeHandlers.forEach(o=>o(i))},[n,r,e]),null}const FX=e=>!!e.onSelectionChangeHandlers;function VX({onSelectionChange:e}){const t=Gt(FX);return e||t?c.jsx(HX,{onSelectionChange:e}):null}const S0=typeof window<"u"?j.useLayoutEffect:j.useEffect,nR=[0,0],UX={x:0,y:0,zoom:1},GX=["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"],c2=[...GX,"rfId"],qX=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}),u2={translateExtent:wu,nodeOrigin:nR,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function WX(e){const{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:i,setTranslateExtent:o,setNodeExtent:a,reset:u,setDefaultNodesAndEdges:d}=Gt(qX,Nn),m=In();S0(()=>(d(e.defaultNodes,e.defaultEdges),()=>{p.current=u2,u()}),[]);const p=j.useRef(u2);return S0(()=>{for(const h of c2){const g=e[h],y=p.current[h];g!==y&&(typeof e[h]>"u"||(h==="nodes"?t(g):h==="edges"?n(g):h==="minZoom"?r(g):h==="maxZoom"?i(g):h==="translateExtent"?o(g):h==="nodeExtent"?a(g):h==="ariaLabelConfig"?m.setState({ariaLabelConfig:TY(g)}):h==="fitView"?m.setState({fitViewQueued:g}):h==="fitViewOptions"?m.setState({fitViewOptions:g}):m.setState({[h]:g})))}p.current=e},c2.map(h=>e[h])),null}function d2(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function YX(e){const[t,n]=j.useState(e==="system"?null:e);return j.useEffect(()=>{if(e!=="system"){n(e);return}const r=d2(),i=()=>n(r?.matches?"dark":"light");return i(),r?.addEventListener("change",i),()=>{r?.removeEventListener("change",i)}},[e]),t!==null?t:d2()?.matches?"dark":"light"}const f2=typeof document<"u"?document:null;function Nu(e=null,t={target:f2,actInsideInputWithModifier:!0}){const[n,r]=j.useState(!1),i=j.useRef(!1),o=j.useRef(new Set([])),[a,u]=j.useMemo(()=>{if(e!==null){const m=(Array.isArray(e)?e:[e]).filter(h=>typeof h=="string").map(h=>h.replace("+",` -`).replace(` - -`,` -+`).split(` -`)),p=m.reduce((h,g)=>h.concat(...g),[]);return[m,p]}return[[],[]]},[e]);return j.useEffect(()=>{const d=t?.target??f2,m=t?.actInsideInputWithModifier??!0;if(e!==null){const p=y=>{if(i.current=y.ctrlKey||y.metaKey||y.shiftKey||y.altKey,(!i.current||i.current&&!m)&&OT(y))return!1;const k=h2(y.code,u);if(o.current.add(y[k]),m2(a,o.current,!1)){const S=y.composedPath?.()?.[0]||y.target,_=S?.nodeName==="BUTTON"||S?.nodeName==="A";t.preventDefault!==!1&&(i.current||!_)&&y.preventDefault(),r(!0)}},h=y=>{const v=h2(y.code,u);m2(a,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(y[v]),y.key==="Meta"&&o.current.clear(),i.current=!1},g=()=>{o.current.clear(),r(!1)};return d?.addEventListener("keydown",p),d?.addEventListener("keyup",h),window.addEventListener("blur",g),window.addEventListener("contextmenu",g),()=>{d?.removeEventListener("keydown",p),d?.removeEventListener("keyup",h),window.removeEventListener("blur",g),window.removeEventListener("contextmenu",g)}}},[e,r]),n}function m2(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function h2(e,t){return t.includes(e)?"code":"key"}const XX=()=>{const e=In();return j.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:u}=e.getState(),d=Dv(t,r,i,o,a,n?.padding??.1);return u?(await u.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:u,y:d}=a.getBoundingClientRect(),m={x:t.x-u,y:t.y-d},p=n.snapGrid??i,h=n.snapToGrid??o;return $u(m,r,h,p)},flowToScreenPosition:t=>{const{transform:n,domNode:r}=e.getState();if(!r)return t;const{x:i,y:o}=r.getBoundingClientRect(),a=ym(t,n);return{x:a.x+i,y:a.y+o}}}),[])};function rR(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 u={...o};for(const d of a)KX(d,u);n.push(u)}return i.length&&i.forEach(o=>{o.index!==void 0?n.splice(o.index,0,{...o.item}):n.push({...o.item})}),n}function KX(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 iR(e,t){return rR(e,t)}function ZX(e,t){return rR(e,t)}function Fo(e,t){return{id:e,type:"select",selected:t}}function nl(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(Fo(o.id,a)))}return r}function p2({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),u=a?.internals?.userNode??a;u!==void 0&&u!==o&&n.push({id:o.id,item:o,type:"replace"}),u===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 g2(e){return{id:e.id,type:"remove"}}const x2=e=>bY(e),QX=e=>ET(e);function sR(e){return j.forwardRef(e)}function y2(e){const[t,n]=j.useState(BigInt(0)),[r]=j.useState(()=>JX(()=>n(i=>i+BigInt(1))));return S0(()=>{const i=r.get();i.length&&(e(i),r.reset())},[t]),r}function JX(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const oR=j.createContext(null);function eK({children:e}){const t=In(),n=j.useCallback(u=>{const{nodes:d=[],setNodes:m,hasDefaultNodes:p,onNodesChange:h,nodeLookup:g,fitViewQueued:y,onNodesChangeMiddlewareMap:v}=t.getState();let k=d;for(const _ of u)k=typeof _=="function"?_(k):_;let S=p2({items:k,lookup:g});for(const _ of v.values())S=_(S);p&&m(k),S.length>0?h?.(S):y&&window.requestAnimationFrame(()=>{const{fitViewQueued:_,nodes:w,setNodes:C}=t.getState();_&&C(w)})},[]),r=y2(n),i=j.useCallback(u=>{const{edges:d=[],setEdges:m,hasDefaultEdges:p,onEdgesChange:h,edgeLookup:g}=t.getState();let y=d;for(const v of u)y=typeof v=="function"?v(y):v;p?m(y):h&&h(p2({items:y,lookup:g}))},[]),o=y2(i),a=j.useMemo(()=>({nodeQueue:r,edgeQueue:o}),[]);return c.jsx(oR.Provider,{value:a,children:e})}function tK(){const e=j.useContext(oR);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const nK=e=>!!e.panZoom;function Hv(){const e=XX(),t=In(),n=tK(),r=Gt(nK),i=j.useMemo(()=>{const o=h=>t.getState().nodeLookup.get(h),a=h=>{n.nodeQueue.push(h)},u=h=>{n.edgeQueue.push(h)},d=h=>{const{nodeLookup:g,nodeOrigin:y}=t.getState(),v=x2(h)?h:g.get(h.id),k=v.parentId?MT(v.position,v.measured,v.parentId,g,y):v.position,S={...v,position:k,width:v.measured?.width??v.width,height:v.measured?.height??v.height};return Sl(S)},m=(h,g,y={replace:!1})=>{a(v=>v.map(k=>{if(k.id===h){const S=typeof g=="function"?g(k):g;return y.replace&&x2(S)?S:{...k,...S}}return k}))},p=(h,g,y={replace:!1})=>{u(v=>v.map(k=>{if(k.id===h){const S=typeof g=="function"?g(k):g;return y.replace&&QX(S)?S:{...k,...S}}return k}))};return{getNodes:()=>t.getState().nodes.map(h=>({...h})),getNode:h=>o(h)?.internals.userNode,getInternalNode:o,getEdges:()=>{const{edges:h=[]}=t.getState();return h.map(g=>({...g}))},getEdge:h=>t.getState().edgeLookup.get(h),setNodes:a,setEdges:u,addNodes:h=>{const g=Array.isArray(h)?h:[h];n.nodeQueue.push(y=>[...y,...g])},addEdges:h=>{const g=Array.isArray(h)?h:[h];n.edgeQueue.push(y=>[...y,...g])},toObject:()=>{const{nodes:h=[],edges:g=[],transform:y}=t.getState(),[v,k,S]=y;return{nodes:h.map(_=>({..._})),edges:g.map(_=>({..._})),viewport:{x:v,y:k,zoom:S}}},deleteElements:async({nodes:h=[],edges:g=[]})=>{const{nodes:y,edges:v,onNodesDelete:k,onEdgesDelete:S,triggerNodeChanges:_,triggerEdgeChanges:w,onDelete:C,onBeforeDelete:N}=t.getState(),{nodes:O,edges:I}=await CY({nodesToRemove:h,edgesToRemove:g,nodes:y,edges:v,onBeforeDelete:N}),D=I.length>0,T=O.length>0;if(D){const L=I.map(g2);S?.(I),w(L)}if(T){const L=O.map(g2);k?.(O),_(L)}return(T||D)&&C?.({nodes:O,edges:I}),{deletedNodes:O,deletedEdges:I}},getIntersectingNodes:(h,g=!0,y)=>{const v=VC(h),k=v?h:d(h),S=y!==void 0;return k?(y||t.getState().nodes).filter(_=>{const w=t.getState().nodeLookup.get(_.id);if(w&&!v&&(_.id===h.id||!w.internals.positionAbsolute))return!1;const C=Sl(S?_:w),N=ju(C,k);return g&&N>0||N>=C.width*C.height||N>=k.width*k.height}):[]},isNodeIntersecting:(h,g,y=!0)=>{const k=VC(h)?h:d(h);if(!k)return!1;const S=ju(k,g);return y&&S>0||S>=g.width*g.height||S>=k.width*k.height},updateNode:m,updateNodeData:(h,g,y={replace:!1})=>{m(h,v=>{const k=typeof g=="function"?g(v):g;return y.replace?{...v,data:k}:{...v,data:{...v.data,...k}}},y)},updateEdge:p,updateEdgeData:(h,g,y={replace:!1})=>{p(h,v=>{const k=typeof g=="function"?g(v):g;return y.replace?{...v,data:k}:{...v,data:{...v.data,...k}}},y)},getNodesBounds:h=>{const{nodeLookup:g,nodeOrigin:y}=t.getState();return _Y(h,{nodeLookup:g,nodeOrigin:y})},getHandleConnections:({type:h,id:g,nodeId:y})=>Array.from(t.getState().connectionLookup.get(`${y}-${h}${g?`-${g}`:""}`)?.values()??[]),getNodeConnections:({type:h,handleId:g,nodeId:y})=>Array.from(t.getState().connectionLookup.get(`${y}${h?g?`-${h}-${g}`:`-${h}`:""}`)?.values()??[]),fitView:async h=>{const g=t.getState().fitViewResolver??IY();return t.setState({fitViewQueued:!0,fitViewOptions:h,fitViewResolver:g}),n.nodeQueue.push(y=>[...y]),g.promise}}},[]);return j.useMemo(()=>({...i,...e,viewportInitialized:r}),[r])}const v2=e=>e.selected,rK=typeof window<"u"?window:void 0;function iK({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=In(),{deleteElements:r}=Hv(),i=Nu(e,{actInsideInputWithModifier:!1}),o=Nu(t,{target:rK});j.useEffect(()=>{if(i){const{edges:a,nodes:u}=n.getState();r({nodes:u.filter(v2),edges:a.filter(v2)}),n.setState({nodesSelectionActive:!1})}},[i]),j.useEffect(()=>{n.setState({multiSelectionActive:o})},[o])}function sK(e){const t=In();j.useEffect(()=>{const n=()=>{if(!e.current||!(e.current.checkVisibility?.()??!0))return!1;const r=Ov(e.current);(r.height===0||r.width===0)&&t.getState().onError?.("004",Ji.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 th={position:"absolute",width:"100%",height:"100%",top:0,left:0},oK=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function aK({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panOnScrollSpeed:i=.5,panOnScrollMode:o=Go.Free,zoomOnDoubleClick:a=!0,panOnDrag:u=!0,defaultViewport:d,translateExtent:m,minZoom:p,maxZoom:h,zoomActivationKeyCode:g,preventScrolling:y=!0,children:v,noWheelClassName:k,noPanClassName:S,onViewportChange:_,isControlledViewport:w,paneClickDistance:C,selectionOnDrag:N}){const O=In(),I=j.useRef(null),{userSelectionActive:D,lib:T,connectionInProgress:L}=Gt(oK,Nn),A=Nu(g),M=j.useRef();sK(I);const $=j.useCallback(W=>{_?.({x:W[0],y:W[1],zoom:W[2]}),w||O.setState({transform:W})},[_,w]);return j.useEffect(()=>{if(I.current){M.current=fX({domNode:I.current,minZoom:p,maxZoom:h,translateExtent:m,viewport:d,onDraggingChange:H=>O.setState(V=>V.paneDragging===H?V:{paneDragging:H}),onPanZoomStart:(H,V)=>{const{onViewportChangeStart:Y,onMoveStart:Q}=O.getState();Q?.(H,V),Y?.(V)},onPanZoom:(H,V)=>{const{onViewportChange:Y,onMove:Q}=O.getState();Q?.(H,V),Y?.(V)},onPanZoomEnd:(H,V)=>{const{onViewportChangeEnd:Y,onMoveEnd:Q}=O.getState();Q?.(H,V),Y?.(V)}});const{x:W,y:B,zoom:U}=M.current.getViewport();return O.setState({panZoom:M.current,transform:[W,B,U],domNode:I.current.closest(".react-flow")}),()=>{M.current?.destroy()}}},[]),j.useEffect(()=>{M.current?.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panOnScrollSpeed:i,panOnScrollMode:o,zoomOnDoubleClick:a,panOnDrag:u,zoomActivationKeyPressed:A,preventScrolling:y,noPanClassName:S,userSelectionActive:D,noWheelClassName:k,lib:T,onTransformChange:$,connectionInProgress:L,selectionOnDrag:N,paneClickDistance:C})},[e,t,n,r,i,o,a,u,A,y,S,D,k,T,$,L,N,C]),c.jsx("div",{className:"react-flow__renderer",ref:I,style:th,children:v})}const lK=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function cK(){const{userSelectionActive:e,userSelectionRect:t}=Gt(lK,Nn);return e&&t?c.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 Nx=(e,t)=>n=>{n.target===t.current&&e?.(n)},uK=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function dK({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Cu.Full,panOnDrag:r,paneClickDistance:i,selectionOnDrag:o,onSelectionStart:a,onSelectionEnd:u,onPaneClick:d,onPaneContextMenu:m,onPaneScroll:p,onPaneMouseEnter:h,onPaneMouseMove:g,onPaneMouseLeave:y,children:v}){const k=In(),{userSelectionActive:S,elementsSelectable:_,dragging:w,connectionInProgress:C}=Gt(uK,Nn),N=_&&(e||S),O=j.useRef(null),I=j.useRef(),D=j.useRef(new Set),T=j.useRef(new Set),L=j.useRef(!1),A=Y=>{if(L.current||C){L.current=!1;return}d?.(Y),k.getState().resetSelectedElements(),k.setState({nodesSelectionActive:!1})},M=Y=>{if(Array.isArray(r)&&r?.includes(2)){Y.preventDefault();return}m?.(Y)},$=p?Y=>p(Y):void 0,W=Y=>{L.current&&(Y.stopPropagation(),L.current=!1)},B=Y=>{const{domNode:Q}=k.getState();if(I.current=Q?.getBoundingClientRect(),!I.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),L.current=!1;const{x:P,y:X}=Ai(Y.nativeEvent,I.current);k.setState({userSelectionRect:{width:0,height:0,startX:P,startY:X,x:P,y:X}}),q||(Y.stopPropagation(),Y.preventDefault())},U=Y=>{const{userSelectionRect:Q,transform:q,nodeLookup:G,edgeLookup:J,connectionLookup:P,triggerNodeChanges:X,triggerEdgeChanges:ee,defaultEdgeOptions:te,resetSelectedElements:re}=k.getState();if(!I.current||!Q)return;const{x:oe,y:de}=Ai(Y.nativeEvent,I.current),{startX:se,startY:Ee}=Q;if(!L.current){const Ye=t?0:i;if(Math.hypot(oe-se,de-Ee)<=Ye)return;re(),a?.(Y)}L.current=!0;const we={startX:se,startY:Ee,x:oeYe.id)),T.current=new Set;const Ge=te?.selectable??!0;for(const Ye of D.current){const yt=P.get(Ye);if(yt)for(const{edgeId:qt}of yt.values()){const bt=J.get(qt);bt&&(bt.selectable??Ge)&&T.current.add(qt)}}if(!UC(Ce,D.current)){const Ye=nl(G,D.current,!0);X(Ye)}if(!UC(Be,T.current)){const Ye=nl(J,T.current);ee(Ye)}k.setState({userSelectionRect:we,userSelectionActive:!0,nodesSelectionActive:!1})},H=Y=>{Y.button===0&&(Y.target?.releasePointerCapture?.(Y.pointerId),!S&&Y.target===O.current&&k.getState().userSelectionRect&&A?.(Y),k.setState({userSelectionActive:!1,userSelectionRect:null}),L.current&&(u?.(Y),k.setState({nodesSelectionActive:D.current.size>0})))},V=r===!0||Array.isArray(r)&&r.includes(0);return c.jsxs("div",{className:Kn(["react-flow__pane",{draggable:V,dragging:w,selection:e}]),onClick:N?void 0:Nx(A,O),onContextMenu:Nx(M,O),onWheel:Nx($,O),onPointerEnter:N?void 0:h,onPointerMove:N?U:g,onPointerUp:N?H:void 0,onPointerDownCapture:N?B:void 0,onClickCapture:N?W:void 0,onPointerLeave:y,ref:O,style:th,children:[v,c.jsx(cK,{})]})}function w0({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:o,multiSelectionActive:a,nodeLookup:u,onError:d}=t.getState(),m=u.get(e);if(!m){d?.("012",Ji.error012(e));return}t.setState({nodesSelectionActive:!1}),m.selected?(n||m.selected&&a)&&(o({nodes:[m],edges:[]}),requestAnimationFrame(()=>r?.current?.blur())):i([e])}function aR({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,nodeClickDistance:a}){const u=In(),[d,m]=j.useState(!1),p=j.useRef();return j.useEffect(()=>{p.current=QY({getStoreItems:()=>u.getState(),onNodeMouseDown:h=>{w0({id:h,store:u,nodeRef:e})},onDragStart:()=>{m(!0)},onDragStop:()=>{m(!1)}})},[]),j.useEffect(()=>{if(!(t||!e.current||!p.current))return p.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:o,nodeId:i,nodeClickDistance:a}),()=>{p.current?.destroy()}},[n,r,t,o,e,i,a]),d}const fK=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function lR(){const e=In();return j.useCallback(n=>{const{nodeExtent:r,snapToGrid:i,snapGrid:o,nodesDraggable:a,onError:u,updateNodePositions:d,nodeLookup:m,nodeOrigin:p}=e.getState(),h=new Map,g=fK(a),y=i?o[0]:5,v=i?o[1]:5,k=n.direction.x*y*n.factor,S=n.direction.y*v*n.factor;for(const[,_]of m){if(!g(_))continue;let w={x:_.internals.positionAbsolute.x+k,y:_.internals.positionAbsolute.y+S};i&&(w=Bu(w,o));const{position:C,positionAbsolute:N}=NT({nodeId:_.id,nextPosition:w,nodeLookup:m,nodeExtent:r,nodeOrigin:p,onError:u});_.position=C,_.internals.positionAbsolute=N,h.set(_.id,_)}d(h)},[])}const Fv=j.createContext(null),mK=Fv.Provider;Fv.Consumer;const cR=()=>j.useContext(Fv),hK=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),pK=(e,t,n)=>r=>{const{connectionClickStartHandle:i,connectionMode:o,connection:a}=r,{fromHandle:u,toHandle:d,isValid:m}=a,p=d?.nodeId===e&&d?.id===t&&d?.type===n;return{connectingFrom:u?.nodeId===e&&u?.id===t&&u?.type===n,connectingTo:p,clickConnecting:i?.nodeId===e&&i?.id===t&&i?.type===n,isPossibleEndHandle:o===_l.Strict?u?.type!==n:e!==u?.nodeId||t!==u?.id,connectionInProcess:!!u,clickConnectionInProcess:!!i,valid:p&&m}};function gK({type:e="source",position:t=at.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,id:a,onConnect:u,children:d,className:m,onMouseDown:p,onTouchStart:h,...g},y){const v=a||null,k=e==="target",S=In(),_=cR(),{connectOnClick:w,noPanClassName:C,rfId:N}=Gt(hK,Nn),{connectingFrom:O,connectingTo:I,clickConnecting:D,isPossibleEndHandle:T,connectionInProcess:L,clickConnectionInProcess:A,valid:M}=Gt(pK(_,v,e),Nn);_||S.getState().onError?.("010",Ji.error010());const $=U=>{const{defaultEdgeOptions:H,onConnect:V,hasDefaultEdges:Y}=S.getState(),Q={...H,...U};if(Y){const{edges:q,setEdges:G}=S.getState();G(LY(Q,q))}V?.(Q),u?.(Q)},W=U=>{if(!_)return;const H=LT(U.nativeEvent);if(i&&(H&&U.button===0||!H)){const V=S.getState();k0.onPointerDown(U.nativeEvent,{handleDomNode:U.currentTarget,autoPanOnConnect:V.autoPanOnConnect,connectionMode:V.connectionMode,connectionRadius:V.connectionRadius,domNode:V.domNode,nodeLookup:V.nodeLookup,lib:V.lib,isTarget:k,handleId:v,nodeId:_,flowId:V.rfId,panBy:V.panBy,cancelConnection:V.cancelConnection,onConnectStart:V.onConnectStart,onConnectEnd:(...Y)=>S.getState().onConnectEnd?.(...Y),updateConnection:V.updateConnection,onConnect:$,isValidConnection:n||((...Y)=>S.getState().isValidConnection?.(...Y)??!0),getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,autoPanSpeed:V.autoPanSpeed,dragThreshold:V.connectionDragThreshold})}H?p?.(U):h?.(U)},B=U=>{const{onClickConnectStart:H,onClickConnectEnd:V,connectionClickStartHandle:Y,connectionMode:Q,isValidConnection:q,lib:G,rfId:J,nodeLookup:P,connection:X}=S.getState();if(!_||!Y&&!i)return;if(!Y){H?.(U.nativeEvent,{nodeId:_,handleId:v,handleType:e}),S.setState({connectionClickStartHandle:{nodeId:_,type:e,id:v}});return}const ee=DT(U.target),te=n||q,{connection:re,isValid:oe}=k0.isValid(U.nativeEvent,{handle:{nodeId:_,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});oe&&re&&$(re);const de=structuredClone(X);delete de.inProgress,de.toPosition=de.toHandle?de.toHandle.position:null,V?.(U,de),S.setState({connectionClickStartHandle:null})};return c.jsx("div",{"data-handleid":v,"data-nodeid":_,"data-handlepos":t,"data-id":`${N}-${_}-${v}-${e}`,className:Kn(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",C,m,{source:!k,target:k,connectable:r,connectablestart:i,connectableend:o,clickconnecting:D,connectingfrom:O,connectingto:I,valid:M,connectionindicator:r&&(!L||T)&&(L||A?o:i)}]),onMouseDown:W,onTouchStart:W,onClick:w?B:void 0,ref:y,...g,children:d})}const jl=j.memo(sR(gK));function xK({data:e,isConnectable:t,sourcePosition:n=at.Bottom}){return c.jsxs(c.Fragment,{children:[e?.label,c.jsx(jl,{type:"source",position:n,isConnectable:t})]})}function yK({data:e,isConnectable:t,targetPosition:n=at.Top,sourcePosition:r=at.Bottom}){return c.jsxs(c.Fragment,{children:[c.jsx(jl,{type:"target",position:n,isConnectable:t}),e?.label,c.jsx(jl,{type:"source",position:r,isConnectable:t})]})}function vK(){return null}function bK({data:e,isConnectable:t,targetPosition:n=at.Top}){return c.jsxs(c.Fragment,{children:[c.jsx(jl,{type:"target",position:n,isConnectable:t}),e?.label]})}const vm={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},b2={input:xK,default:yK,output:bK,group:vK};function _K(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 kK=e=>{const{width:t,height:n,x:r,y:i}=Pu(e.nodeLookup,{filter:o=>!!o.selected});return{width:Ri(t)?t:null,height:Ri(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 SK({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=In(),{width:i,height:o,transformString:a,userSelectionActive:u}=Gt(kK,Nn),d=lR(),m=j.useRef(null);j.useEffect(()=>{n||m.current?.focus({preventScroll:!0})},[n]);const p=!u&&i!==null&&o!==null;if(aR({nodeRef:m,disabled:!p}),!p)return null;const h=e?y=>{const v=r.getState().nodes.filter(k=>k.selected);e(y,v)}:void 0,g=y=>{Object.prototype.hasOwnProperty.call(vm,y.key)&&(y.preventDefault(),d({direction:vm[y.key],factor:y.shiftKey?4:1}))};return c.jsx("div",{className:Kn(["react-flow__nodesselection","react-flow__container",t]),style:{transform:a},children:c.jsx("div",{ref:m,className:"react-flow__nodesselection-rect",onContextMenu:h,tabIndex:n?void 0:-1,onKeyDown:n?void 0:g,style:{width:i,height:o}})})}const _2=typeof window<"u"?window:void 0,wK=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function uR({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:a,paneClickDistance:u,deleteKeyCode:d,selectionKeyCode:m,selectionOnDrag:p,selectionMode:h,onSelectionStart:g,onSelectionEnd:y,multiSelectionKeyCode:v,panActivationKeyCode:k,zoomActivationKeyCode:S,elementsSelectable:_,zoomOnScroll:w,zoomOnPinch:C,panOnScroll:N,panOnScrollSpeed:O,panOnScrollMode:I,zoomOnDoubleClick:D,panOnDrag:T,defaultViewport:L,translateExtent:A,minZoom:M,maxZoom:$,preventScrolling:W,onSelectionContextMenu:B,noWheelClassName:U,noPanClassName:H,disableKeyboardA11y:V,onViewportChange:Y,isControlledViewport:Q}){const{nodesSelectionActive:q,userSelectionActive:G}=Gt(wK,Nn),J=Nu(m,{target:_2}),P=Nu(k,{target:_2}),X=P||T,ee=P||N,te=p&&X!==!0,re=J||G||te;return iK({deleteKeyCode:d,multiSelectionKeyCode:v}),c.jsx(aK,{onPaneContextMenu:o,elementsSelectable:_,zoomOnScroll:w,zoomOnPinch:C,panOnScroll:ee,panOnScrollSpeed:O,panOnScrollMode:I,zoomOnDoubleClick:D,panOnDrag:!J&&X,defaultViewport:L,translateExtent:A,minZoom:M,maxZoom:$,zoomActivationKeyCode:S,preventScrolling:W,noWheelClassName:U,noPanClassName:H,onViewportChange:Y,isControlledViewport:Q,paneClickDistance:u,selectionOnDrag:te,children:c.jsxs(dK,{onSelectionStart:g,onSelectionEnd:y,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:o,onPaneScroll:a,panOnDrag:X,isSelecting:!!re,selectionMode:h,selectionKeyPressed:J,paneClickDistance:u,selectionOnDrag:te,children:[e,q&&c.jsx(SK,{onSelectionContextMenu:B,noPanClassName:H,disableKeyboardA11y:V})]})})}uR.displayName="FlowRenderer";const CK=j.memo(uR),jK=e=>t=>e?Mv(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 EK(e){return Gt(j.useCallback(jK(e),[e]),Nn)}const NK=e=>e.updateNodeInternals;function IK(){const e=Gt(NK),[t]=j.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 j.useEffect(()=>()=>{t?.disconnect()},[t]),t}function TK({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){const i=In(),o=j.useRef(null),a=j.useRef(null),u=j.useRef(e.sourcePosition),d=j.useRef(e.targetPosition),m=j.useRef(t),p=n&&!!e.internals.handleBounds;return j.useEffect(()=>{o.current&&!e.hidden&&(!p||a.current!==o.current)&&(a.current&&r?.unobserve(a.current),r?.observe(o.current),a.current=o.current)},[p,e.hidden]),j.useEffect(()=>()=>{a.current&&(r?.unobserve(a.current),a.current=null)},[]),j.useEffect(()=>{if(o.current){const h=m.current!==t,g=u.current!==e.sourcePosition,y=d.current!==e.targetPosition;(h||g||y)&&(m.current=t,u.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 RK({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:i,onContextMenu:o,onDoubleClick:a,nodesDraggable:u,elementsSelectable:d,nodesConnectable:m,nodesFocusable:p,resizeObserver:h,noDragClassName:g,noPanClassName:y,disableKeyboardA11y:v,rfId:k,nodeTypes:S,nodeClickDistance:_,onError:w}){const{node:C,internals:N,isParent:O}=Gt(oe=>{const de=oe.nodeLookup.get(e),se=oe.parentLookup.has(e);return{node:de,internals:de.internals,isParent:se}},Nn);let I=C.type||"default",D=S?.[I]||b2[I];D===void 0&&(w?.("003",Ji.error003(I)),I="default",D=S?.default||b2.default);const T=!!(C.draggable||u&&typeof C.draggable>"u"),L=!!(C.selectable||d&&typeof C.selectable>"u"),A=!!(C.connectable||m&&typeof C.connectable>"u"),M=!!(C.focusable||p&&typeof C.focusable>"u"),$=In(),W=AT(C),B=TK({node:C,nodeType:I,hasDimensions:W,resizeObserver:h}),U=aR({nodeRef:B,disabled:C.hidden||!T,noDragClassName:g,handleSelector:C.dragHandle,nodeId:e,isSelectable:L,nodeClickDistance:_}),H=lR();if(C.hidden)return null;const V=Ts(C),Y=_K(C),Q=L||T||t||n||r||i,q=n?oe=>n(oe,{...N.userNode}):void 0,G=r?oe=>r(oe,{...N.userNode}):void 0,J=i?oe=>i(oe,{...N.userNode}):void 0,P=o?oe=>o(oe,{...N.userNode}):void 0,X=a?oe=>a(oe,{...N.userNode}):void 0,ee=oe=>{const{selectNodesOnDrag:de,nodeDragThreshold:se}=$.getState();L&&(!de||!T||se>0)&&w0({id:e,store:$,nodeRef:B}),t&&t(oe,{...N.userNode})},te=oe=>{if(!(OT(oe.nativeEvent)||v)){if(ST.includes(oe.key)&&L){const de=oe.key==="Escape";w0({id:e,store:$,unselect:de,nodeRef:B})}else if(T&&C.selected&&Object.prototype.hasOwnProperty.call(vm,oe.key)){oe.preventDefault();const{ariaLabelConfig:de}=$.getState();$.setState({ariaLiveMessage:de["node.a11yDescription.ariaLiveMessage"]({direction:oe.key.replace("Arrow","").toLowerCase(),x:~~N.positionAbsolute.x,y:~~N.positionAbsolute.y})}),H({direction:vm[oe.key],factor:oe.shiftKey?4:1})}}},re=()=>{if(v||!B.current?.matches(":focus-visible"))return;const{transform:oe,width:de,height:se,autoPanOnNodeFocus:Ee,setCenter:we}=$.getState();if(!Ee)return;Mv(new Map([[e,C]]),{x:0,y:0,width:de,height:se},oe,!0).length>0||we(C.position.x+V.width/2,C.position.y+V.height/2,{zoom:oe[2]})};return c.jsx("div",{className:Kn(["react-flow__node",`react-flow__node-${I}`,{[y]:T},C.className,{selected:C.selected,selectable:L,parent:O,draggable:T,dragging:U}]),ref:B,style:{zIndex:N.z,transform:`translate(${N.positionAbsolute.x}px,${N.positionAbsolute.y}px)`,pointerEvents:Q?"all":"none",visibility:W?"visible":"hidden",...C.style,...Y},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:q,onMouseMove:G,onMouseLeave:J,onContextMenu:P,onClick:ee,onDoubleClick:X,onKeyDown:M?te:void 0,tabIndex:M?0:void 0,onFocus:M?re:void 0,role:C.ariaRole??(M?"group":void 0),"aria-roledescription":"node","aria-describedby":v?void 0:`${eR}-${k}`,"aria-label":C.ariaLabel,...C.domAttributes,children:c.jsx(mK,{value:e,children:c.jsx(D,{id:e,data:C.data,type:I,positionAbsoluteX:N.positionAbsolute.x,positionAbsoluteY:N.positionAbsolute.y,selected:C.selected??!1,selectable:L,draggable:T,deletable:C.deletable??!0,isConnectable:A,sourcePosition:C.sourcePosition,targetPosition:C.targetPosition,dragging:U,dragHandle:C.dragHandle,zIndex:N.z,parentId:C.parentId,...V})})})}var AK=j.memo(RK);const MK=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function dR(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,onError:o}=Gt(MK,Nn),a=EK(e.onlyRenderVisibleElements),u=IK();return c.jsx("div",{className:"react-flow__nodes",style:th,children:a.map(d=>c.jsx(AK,{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:u,nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,nodeClickDistance:e.nodeClickDistance,onError:o},d))})}dR.displayName="NodeRenderer";const DK=j.memo(dR);function OK(e){return Gt(j.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&&MY({sourceNode:o,targetNode:a,width:n.width,height:n.height,transform:n.transform})&&r.push(i.id)}return r},[e]),Nn)}const LK=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e}};return c.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},zK=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e,fill:e}};return c.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},k2={[gm.Arrow]:LK,[gm.ArrowClosed]:zK};function PK(e){const t=In();return j.useMemo(()=>Object.prototype.hasOwnProperty.call(k2,e)?k2[e]:(t.getState().onError?.("009",Ji.error009(e)),null),[e])}const BK=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:o="strokeWidth",strokeWidth:a,orient:u="auto-start-reverse"})=>{const d=PK(t);return d?c.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:o,orient:u,refX:"0",refY:"0",children:c.jsx(d,{color:n,strokeWidth:a})}):null},fR=({defaultColor:e,rfId:t})=>{const n=Gt(o=>o.edges),r=Gt(o=>o.defaultEdgeOptions),i=j.useMemo(()=>HY(n,{id:t,defaultColor:e,defaultMarkerStart:r?.markerStart,defaultMarkerEnd:r?.markerEnd}),[n,r,t,e]);return i.length?c.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:c.jsx("defs",{children:i.map(o=>c.jsx(BK,{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};fR.displayName="MarkerDefinitions";var $K=j.memo(fR);function mR({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:o,labelBgPadding:a=[2,4],labelBgBorderRadius:u=2,children:d,className:m,...p}){const[h,g]=j.useState({x:1,y:0,width:0,height:0}),y=Kn(["react-flow__edge-textwrapper",m]),v=j.useRef(null);return j.useEffect(()=>{if(v.current){const k=v.current.getBBox();g({x:k.x,y:k.y,width:k.width,height:k.height})}},[n]),n?c.jsxs("g",{transform:`translate(${e-h.width/2} ${t-h.height/2})`,className:y,visibility:h.width?"visible":"hidden",...p,children:[i&&c.jsx("rect",{width:h.width+2*a[0],x:-a[0],y:-a[1],height:h.height+2*a[1],className:"react-flow__edge-textbg",style:o,rx:u,ry:u}),c.jsx("text",{className:"react-flow__edge-text",y:h.height/2,dy:"0.3em",ref:v,style:r,children:n}),d]}):null}mR.displayName="EdgeText";const HK=j.memo(mR);function nh({path:e,labelX:t,labelY:n,label:r,labelStyle:i,labelShowBg:o,labelBgStyle:a,labelBgPadding:u,labelBgBorderRadius:d,interactionWidth:m=20,...p}){return c.jsxs(c.Fragment,{children:[c.jsx("path",{...p,d:e,fill:"none",className:Kn(["react-flow__edge-path",p.className])}),m?c.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:m,className:"react-flow__edge-interaction"}):null,r&&Ri(t)&&Ri(n)?c.jsx(HK,{x:t,y:n,label:r,labelStyle:i,labelShowBg:o,labelBgStyle:a,labelBgPadding:u,labelBgBorderRadius:d}):null]})}function S2({pos:e,x1:t,y1:n,x2:r,y2:i}){return e===at.Left||e===at.Right?[.5*(t+r),n]:[t,.5*(n+i)]}function hR({sourceX:e,sourceY:t,sourcePosition:n=at.Bottom,targetX:r,targetY:i,targetPosition:o=at.Top}){const[a,u]=S2({pos:n,x1:e,y1:t,x2:r,y2:i}),[d,m]=S2({pos:o,x1:r,y1:i,x2:e,y2:t}),[p,h,g,y]=zT({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:a,sourceControlY:u,targetControlX:d,targetControlY:m});return[`M${e},${t} C${a},${u} ${d},${m} ${r},${i}`,p,h,g,y]}function pR(e){return j.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:a,targetPosition:u,label:d,labelStyle:m,labelShowBg:p,labelBgStyle:h,labelBgPadding:g,labelBgBorderRadius:y,style:v,markerEnd:k,markerStart:S,interactionWidth:_})=>{const[w,C,N]=hR({sourceX:n,sourceY:r,sourcePosition:a,targetX:i,targetY:o,targetPosition:u}),O=e.isInternal?void 0:t;return c.jsx(nh,{id:O,path:w,labelX:C,labelY:N,label:d,labelStyle:m,labelShowBg:p,labelBgStyle:h,labelBgPadding:g,labelBgBorderRadius:y,style:v,markerEnd:k,markerStart:S,interactionWidth:_})})}const FK=pR({isInternal:!1}),gR=pR({isInternal:!0});FK.displayName="SimpleBezierEdge";gR.displayName="SimpleBezierEdgeInternal";function xR(e){return j.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:a,labelStyle:u,labelShowBg:d,labelBgStyle:m,labelBgPadding:p,labelBgBorderRadius:h,style:g,sourcePosition:y=at.Bottom,targetPosition:v=at.Top,markerEnd:k,markerStart:S,pathOptions:_,interactionWidth:w})=>{const[C,N,O]=v0({sourceX:n,sourceY:r,sourcePosition:y,targetX:i,targetY:o,targetPosition:v,borderRadius:_?.borderRadius,offset:_?.offset,stepPosition:_?.stepPosition}),I=e.isInternal?void 0:t;return c.jsx(nh,{id:I,path:C,labelX:N,labelY:O,label:a,labelStyle:u,labelShowBg:d,labelBgStyle:m,labelBgPadding:p,labelBgBorderRadius:h,style:g,markerEnd:k,markerStart:S,interactionWidth:w})})}const yR=xR({isInternal:!1}),vR=xR({isInternal:!0});yR.displayName="SmoothStepEdge";vR.displayName="SmoothStepEdgeInternal";function bR(e){return j.memo(({id:t,...n})=>{const r=e.isInternal?void 0:t;return c.jsx(yR,{...n,id:r,pathOptions:j.useMemo(()=>({borderRadius:0,offset:n.pathOptions?.offset}),[n.pathOptions?.offset])})})}const VK=bR({isInternal:!1}),_R=bR({isInternal:!0});VK.displayName="StepEdge";_R.displayName="StepEdgeInternal";function kR(e){return j.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:a,labelStyle:u,labelShowBg:d,labelBgStyle:m,labelBgPadding:p,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:v,interactionWidth:k})=>{const[S,_,w]=$T({sourceX:n,sourceY:r,targetX:i,targetY:o}),C=e.isInternal?void 0:t;return c.jsx(nh,{id:C,path:S,labelX:_,labelY:w,label:a,labelStyle:u,labelShowBg:d,labelBgStyle:m,labelBgPadding:p,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:v,interactionWidth:k})})}const UK=kR({isInternal:!1}),SR=kR({isInternal:!0});UK.displayName="StraightEdge";SR.displayName="StraightEdgeInternal";function wR(e){return j.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:a=at.Bottom,targetPosition:u=at.Top,label:d,labelStyle:m,labelShowBg:p,labelBgStyle:h,labelBgPadding:g,labelBgBorderRadius:y,style:v,markerEnd:k,markerStart:S,pathOptions:_,interactionWidth:w})=>{const[C,N,O]=PT({sourceX:n,sourceY:r,sourcePosition:a,targetX:i,targetY:o,targetPosition:u,curvature:_?.curvature}),I=e.isInternal?void 0:t;return c.jsx(nh,{id:I,path:C,labelX:N,labelY:O,label:d,labelStyle:m,labelShowBg:p,labelBgStyle:h,labelBgPadding:g,labelBgBorderRadius:y,style:v,markerEnd:k,markerStart:S,interactionWidth:w})})}const GK=wR({isInternal:!1}),CR=wR({isInternal:!0});GK.displayName="BezierEdge";CR.displayName="BezierEdgeInternal";const w2={default:CR,straight:SR,step:_R,smoothstep:vR,simplebezier:gR},C2={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},qK=(e,t,n)=>n===at.Left?e-t:n===at.Right?e+t:e,WK=(e,t,n)=>n===at.Top?e-t:n===at.Bottom?e+t:e,j2="react-flow__edgeupdater";function E2({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:o,onMouseOut:a,type:u}){return c.jsx("circle",{onMouseDown:i,onMouseEnter:o,onMouseOut:a,className:Kn([j2,`${j2}-${u}`]),cx:qK(t,r,e),cy:WK(n,r,e),r,stroke:"transparent",fill:"transparent"})}function YK({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:i,targetX:o,targetY:a,sourcePosition:u,targetPosition:d,onReconnect:m,onReconnectStart:p,onReconnectEnd:h,setReconnecting:g,setUpdateHover:y}){const v=In(),k=(N,O)=>{if(N.button!==0)return;const{autoPanOnConnect:I,domNode:D,connectionMode:T,connectionRadius:L,lib:A,onConnectStart:M,cancelConnection:$,nodeLookup:W,rfId:B,panBy:U,updateConnection:H}=v.getState(),V=O.type==="target",Y=(G,J)=>{g(!1),h?.(G,n,O.type,J)},Q=G=>m?.(n,G),q=(G,J)=>{g(!0),p?.(N,n,O.type),M?.(G,J)};k0.onPointerDown(N.nativeEvent,{autoPanOnConnect:I,connectionMode:T,connectionRadius:L,domNode:D,handleId:O.id,nodeId:O.nodeId,nodeLookup:W,isTarget:V,edgeUpdaterType:O.type,lib:A,flowId:B,cancelConnection:$,panBy:U,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"}),_=N=>k(N,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),w=()=>y(!0),C=()=>y(!1);return c.jsxs(c.Fragment,{children:[(e===!0||e==="source")&&c.jsx(E2,{position:u,centerX:r,centerY:i,radius:t,onMouseDown:S,onMouseEnter:w,onMouseOut:C,type:"source"}),(e===!0||e==="target")&&c.jsx(E2,{position:d,centerX:o,centerY:a,radius:t,onMouseDown:_,onMouseEnter:w,onMouseOut:C,type:"target"})]})}function XK({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:i,onDoubleClick:o,onContextMenu:a,onMouseEnter:u,onMouseMove:d,onMouseLeave:m,reconnectRadius:p,onReconnect:h,onReconnectStart:g,onReconnectEnd:y,rfId:v,edgeTypes:k,noPanClassName:S,onError:_,disableKeyboardA11y:w}){let C=Gt(we=>we.edgeLookup.get(e));const N=Gt(we=>we.defaultEdgeOptions);C=N?{...N,...C}:C;let O=C.type||"default",I=k?.[O]||w2[O];I===void 0&&(_?.("011",Ji.error011(O)),O="default",I=k?.default||w2.default);const D=!!(C.focusable||t&&typeof C.focusable>"u"),T=typeof h<"u"&&(C.reconnectable||n&&typeof C.reconnectable>"u"),L=!!(C.selectable||r&&typeof C.selectable>"u"),A=j.useRef(null),[M,$]=j.useState(!1),[W,B]=j.useState(!1),U=In(),{zIndex:H,sourceX:V,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J}=Gt(j.useCallback(we=>{const Ce=we.nodeLookup.get(C.source),Be=we.nodeLookup.get(C.target);if(!Ce||!Be)return{zIndex:C.zIndex,...C2};const Ge=$Y({id:e,sourceNode:Ce,targetNode:Be,sourceHandle:C.sourceHandle||null,targetHandle:C.targetHandle||null,connectionMode:we.connectionMode,onError:_});return{zIndex:AY({selected:C.selected,zIndex:C.zIndex,sourceNode:Ce,targetNode:Be,elevateOnSelect:we.elevateEdgesOnSelect,zIndexMode:we.zIndexMode}),...Ge||C2}},[C.source,C.target,C.sourceHandle,C.targetHandle,C.selected,C.zIndex]),Nn),P=j.useMemo(()=>C.markerStart?`url('#${b0(C.markerStart,v)}')`:void 0,[C.markerStart,v]),X=j.useMemo(()=>C.markerEnd?`url('#${b0(C.markerEnd,v)}')`:void 0,[C.markerEnd,v]);if(C.hidden||V===null||Y===null||Q===null||q===null)return null;const ee=we=>{const{addSelectedEdges:Ce,unselectNodesAndEdges:Be,multiSelectionActive:Ge}=U.getState();L&&(U.setState({nodesSelectionActive:!1}),C.selected&&Ge?(Be({nodes:[],edges:[C]}),A.current?.blur()):Ce([e])),i&&i(we,C)},te=o?we=>{o(we,{...C})}:void 0,re=a?we=>{a(we,{...C})}:void 0,oe=u?we=>{u(we,{...C})}:void 0,de=d?we=>{d(we,{...C})}:void 0,se=m?we=>{m(we,{...C})}:void 0,Ee=we=>{if(!w&&ST.includes(we.key)&&L){const{unselectNodesAndEdges:Ce,addSelectedEdges:Be}=U.getState();we.key==="Escape"?(A.current?.blur(),Ce({edges:[C]})):Be([e])}};return c.jsx("svg",{style:{zIndex:H},children:c.jsxs("g",{className:Kn(["react-flow__edge",`react-flow__edge-${O}`,C.className,S,{selected:C.selected,animated:C.animated,inactive:!L&&!i,updating:M,selectable:L}]),onClick:ee,onDoubleClick:te,onContextMenu:re,onMouseEnter:oe,onMouseMove:de,onMouseLeave:se,onKeyDown:D?Ee:void 0,tabIndex:D?0:void 0,role:C.ariaRole??(D?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":C.ariaLabel===null?void 0:C.ariaLabel||`Edge from ${C.source} to ${C.target}`,"aria-describedby":D?`${tR}-${v}`:void 0,ref:A,...C.domAttributes,children:[!W&&c.jsx(I,{id:e,source:C.source,target:C.target,type:C.type,selected:C.selected,animated:C.animated,selectable:L,deletable:C.deletable??!0,label:C.label,labelStyle:C.labelStyle,labelShowBg:C.labelShowBg,labelBgStyle:C.labelBgStyle,labelBgPadding:C.labelBgPadding,labelBgBorderRadius:C.labelBgBorderRadius,sourceX:V,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J,data:C.data,style:C.style,sourceHandleId:C.sourceHandle,targetHandleId:C.targetHandle,markerStart:P,markerEnd:X,pathOptions:"pathOptions"in C?C.pathOptions:void 0,interactionWidth:C.interactionWidth}),T&&c.jsx(YK,{edge:C,isReconnectable:T,reconnectRadius:p,onReconnect:h,onReconnectStart:g,onReconnectEnd:y,sourceX:V,sourceY:Y,targetX:Q,targetY:q,sourcePosition:G,targetPosition:J,setUpdateHover:$,setReconnecting:B})]})})}var KK=j.memo(XK);const ZK=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function jR({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:i,onReconnect:o,onEdgeContextMenu:a,onEdgeMouseEnter:u,onEdgeMouseMove:d,onEdgeMouseLeave:m,onEdgeClick:p,reconnectRadius:h,onEdgeDoubleClick:g,onReconnectStart:y,onReconnectEnd:v,disableKeyboardA11y:k}){const{edgesFocusable:S,edgesReconnectable:_,elementsSelectable:w,onError:C}=Gt(ZK,Nn),N=OK(t);return c.jsxs("div",{className:"react-flow__edges",children:[c.jsx($K,{defaultColor:e,rfId:n}),N.map(O=>c.jsx(KK,{id:O,edgesFocusable:S,edgesReconnectable:_,elementsSelectable:w,noPanClassName:i,onReconnect:o,onContextMenu:a,onMouseEnter:u,onMouseMove:d,onMouseLeave:m,onClick:p,reconnectRadius:h,onDoubleClick:g,onReconnectStart:y,onReconnectEnd:v,rfId:n,onError:C,edgeTypes:r,disableKeyboardA11y:k},O))]})}jR.displayName="EdgeRenderer";const QK=j.memo(jR),JK=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function eZ({children:e}){const t=Gt(JK);return c.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function tZ(e){const t=Hv(),n=j.useRef(!1);j.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const nZ=e=>e.panZoom?.syncViewport;function rZ(e){const t=Gt(nZ),n=In();return j.useEffect(()=>{e&&(t?.(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function iZ(e){return e.connection.inProgress?{...e.connection,to:$u(e.connection.to,e.transform)}:{...e.connection}}function sZ(e){return iZ}function oZ(e){const t=sZ();return Gt(t,Nn)}const aZ=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function lZ({containerStyle:e,style:t,type:n,component:r}){const{nodesConnectable:i,width:o,height:a,isValid:u,inProgress:d}=Gt(aZ,Nn);return!(o&&i&&d)?null:c.jsx("svg",{style:e,width:o,height:a,className:"react-flow__connectionline react-flow__container",children:c.jsx("g",{className:Kn(["react-flow__connection",jT(u)]),children:c.jsx(ER,{style:t,type:n,CustomComponent:r,isValid:u})})})}const ER=({style:e,type:t=lo.Bezier,CustomComponent:n,isValid:r})=>{const{inProgress:i,from:o,fromNode:a,fromHandle:u,fromPosition:d,to:m,toNode:p,toHandle:h,toPosition:g,pointer:y}=oZ();if(!i)return;if(n)return c.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:a,fromHandle:u,fromX:o.x,fromY:o.y,toX:m.x,toY:m.y,fromPosition:d,toPosition:g,connectionStatus:jT(r),toNode:p,toHandle:h,pointer:y});let v="";const k={sourceX:o.x,sourceY:o.y,sourcePosition:d,targetX:m.x,targetY:m.y,targetPosition:g};switch(t){case lo.Bezier:[v]=PT(k);break;case lo.SimpleBezier:[v]=hR(k);break;case lo.Step:[v]=v0({...k,borderRadius:0});break;case lo.SmoothStep:[v]=v0(k);break;default:[v]=$T(k)}return c.jsx("path",{d:v,fill:"none",className:"react-flow__connection-path",style:e})};ER.displayName="ConnectionLine";const cZ={};function N2(e=cZ){j.useRef(e),In(),j.useEffect(()=>{},[e])}function uZ(){In(),j.useRef(!1),j.useEffect(()=>{},[])}function NR({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:o,onEdgeDoubleClick:a,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:p,onSelectionContextMenu:h,onSelectionStart:g,onSelectionEnd:y,connectionLineType:v,connectionLineStyle:k,connectionLineComponent:S,connectionLineContainerStyle:_,selectionKeyCode:w,selectionOnDrag:C,selectionMode:N,multiSelectionKeyCode:O,panActivationKeyCode:I,zoomActivationKeyCode:D,deleteKeyCode:T,onlyRenderVisibleElements:L,elementsSelectable:A,defaultViewport:M,translateExtent:$,minZoom:W,maxZoom:B,preventScrolling:U,defaultMarkerColor:H,zoomOnScroll:V,zoomOnPinch:Y,panOnScroll:Q,panOnScrollSpeed:q,panOnScrollMode:G,zoomOnDoubleClick:J,panOnDrag:P,onPaneClick:X,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:re,onPaneScroll:oe,onPaneContextMenu:de,paneClickDistance:se,nodeClickDistance:Ee,onEdgeContextMenu:we,onEdgeMouseEnter:Ce,onEdgeMouseMove:Be,onEdgeMouseLeave:Ge,reconnectRadius:Ye,onReconnect:yt,onReconnectStart:qt,onReconnectEnd:bt,noDragClassName:vt,noWheelClassName:me,noPanClassName:Oe,disableKeyboardA11y:rt,nodeExtent:Qe,rfId:Je,viewport:fe,onViewportChange:be}){return N2(e),N2(t),uZ(),tZ(n),rZ(fe),c.jsx(CK,{onPaneClick:X,onPaneMouseEnter:ee,onPaneMouseMove:te,onPaneMouseLeave:re,onPaneContextMenu:de,onPaneScroll:oe,paneClickDistance:se,deleteKeyCode:T,selectionKeyCode:w,selectionOnDrag:C,selectionMode:N,onSelectionStart:g,onSelectionEnd:y,multiSelectionKeyCode:O,panActivationKeyCode:I,zoomActivationKeyCode:D,elementsSelectable:A,zoomOnScroll:V,zoomOnPinch:Y,zoomOnDoubleClick:J,panOnScroll:Q,panOnScrollSpeed:q,panOnScrollMode:G,panOnDrag:P,defaultViewport:M,translateExtent:$,minZoom:W,maxZoom:B,onSelectionContextMenu:h,preventScrolling:U,noDragClassName:vt,noWheelClassName:me,noPanClassName:Oe,disableKeyboardA11y:rt,onViewportChange:be,isControlledViewport:!!fe,children:c.jsxs(eZ,{children:[c.jsx(QK,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:a,onReconnect:yt,onReconnectStart:qt,onReconnectEnd:bt,onlyRenderVisibleElements:L,onEdgeContextMenu:we,onEdgeMouseEnter:Ce,onEdgeMouseMove:Be,onEdgeMouseLeave:Ge,reconnectRadius:Ye,defaultMarkerColor:H,noPanClassName:Oe,disableKeyboardA11y:rt,rfId:Je}),c.jsx(lZ,{style:k,type:v,component:S,containerStyle:_}),c.jsx("div",{className:"react-flow__edgelabel-renderer"}),c.jsx(DK,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:o,onNodeMouseEnter:u,onNodeMouseMove:d,onNodeMouseLeave:m,onNodeContextMenu:p,nodeClickDistance:Ee,onlyRenderVisibleElements:L,noPanClassName:Oe,noDragClassName:vt,disableKeyboardA11y:rt,nodeExtent:Qe,rfId:Je}),c.jsx("div",{className:"react-flow__viewport-portal"})]})})}NR.displayName="GraphView";const dZ=j.memo(NR),I2=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:a,fitViewOptions:u,minZoom:d=.5,maxZoom:m=2,nodeOrigin:p,nodeExtent:h,zIndexMode:g="basic"}={})=>{const y=new Map,v=new Map,k=new Map,S=new Map,_=r??t??[],w=n??e??[],C=p??[0,0],N=h??wu;VT(k,S,_);const{nodesInitialized:O}=_0(w,y,v,{nodeOrigin:C,nodeExtent:N,zIndexMode:g});let I=[0,0,1];if(a&&i&&o){const D=Pu(y,{filter:M=>!!((M.width||M.initialWidth)&&(M.height||M.initialHeight))}),{x:T,y:L,zoom:A}=Dv(D,i,o,d,m,u?.padding??.1);I=[T,L,A]}return{rfId:"1",width:i??0,height:o??0,transform:I,nodes:w,nodesInitialized:O,nodeLookup:y,parentLookup:v,edges:_,edgeLookup:S,connectionLookup:k,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:d,maxZoom:m,translateExtent:wu,nodeExtent:N,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:_l.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:C,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:u,fitViewResolver:null,connection:{...CT},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:jY,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:wT,zIndexMode:g,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},fZ=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:a,fitViewOptions:u,minZoom:d,maxZoom:m,nodeOrigin:p,nodeExtent:h,zIndexMode:g})=>TX((y,v)=>{async function k(){const{nodeLookup:S,panZoom:_,fitViewOptions:w,fitViewResolver:C,width:N,height:O,minZoom:I,maxZoom:D}=v();_&&(await wY({nodes:S,width:N,height:O,panZoom:_,minZoom:I,maxZoom:D},w),C?.resolve(!0),y({fitViewResolver:null}))}return{...I2({nodes:e,edges:t,width:i,height:o,fitView:a,fitViewOptions:u,minZoom:d,maxZoom:m,nodeOrigin:p,nodeExtent:h,defaultNodes:n,defaultEdges:r,zIndexMode:g}),setNodes:S=>{const{nodeLookup:_,parentLookup:w,nodeOrigin:C,elevateNodesOnSelect:N,fitViewQueued:O,zIndexMode:I,nodesSelectionActive:D}=v(),{nodesInitialized:T,hasSelectedNodes:L}=_0(S,_,w,{nodeOrigin:C,nodeExtent:h,elevateNodesOnSelect:N,checkEquality:!0,zIndexMode:I}),A=D&&L;O&&T?(k(),y({nodes:S,nodesInitialized:T,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:A})):y({nodes:S,nodesInitialized:T,nodesSelectionActive:A})},setEdges:S=>{const{connectionLookup:_,edgeLookup:w}=v();VT(_,w,S),y({edges:S})},setDefaultNodesAndEdges:(S,_)=>{if(S){const{setNodes:w}=v();w(S),y({hasDefaultNodes:!0})}if(_){const{setEdges:w}=v();w(_),y({hasDefaultEdges:!0})}},updateNodeInternals:S=>{const{triggerNodeChanges:_,nodeLookup:w,parentLookup:C,domNode:N,nodeOrigin:O,nodeExtent:I,debug:D,fitViewQueued:T,zIndexMode:L}=v(),{changes:A,updatedInternals:M}=YY(S,w,C,N,O,I,L);M&&(UY(w,C,{nodeOrigin:O,nodeExtent:I,zIndexMode:L}),T?(k(),y({fitViewQueued:!1,fitViewOptions:void 0})):y({}),A?.length>0&&(D&&console.log("React Flow: trigger node changes",A),_?.(A)))},updateNodePositions:(S,_=!1)=>{const w=[];let C=[];const{nodeLookup:N,triggerNodeChanges:O,connection:I,updateConnection:D,onNodesChangeMiddlewareMap:T}=v();for(const[L,A]of S){const M=N.get(L),$=!!(M?.expandParent&&M?.parentId&&A?.position),W={id:L,type:"position",position:$?{x:Math.max(0,A.position.x),y:Math.max(0,A.position.y)}:A.position,dragging:_};if(M&&I.inProgress&&I.fromNode.id===M.id){const B=ea(M,I.fromHandle,at.Left,!0);D({...I,from:B})}$&&M.parentId&&w.push({id:L,parentId:M.parentId,rect:{...A.internals.positionAbsolute,width:A.measured.width??0,height:A.measured.height??0}}),C.push(W)}if(w.length>0){const{parentLookup:L,nodeOrigin:A}=v(),M=$v(w,N,L,A);C.push(...M)}for(const L of T.values())C=L(C);O(C)},triggerNodeChanges:S=>{const{onNodesChange:_,setNodes:w,nodes:C,hasDefaultNodes:N,debug:O}=v();if(S?.length){if(N){const I=iR(S,C);w(I)}O&&console.log("React Flow: trigger node changes",S),_?.(S)}},triggerEdgeChanges:S=>{const{onEdgesChange:_,setEdges:w,edges:C,hasDefaultEdges:N,debug:O}=v();if(S?.length){if(N){const I=ZX(S,C);w(I)}O&&console.log("React Flow: trigger edge changes",S),_?.(S)}},addSelectedNodes:S=>{const{multiSelectionActive:_,edgeLookup:w,nodeLookup:C,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(_){const I=S.map(D=>Fo(D,!0));N(I);return}N(nl(C,new Set([...S]),!0)),O(nl(w))},addSelectedEdges:S=>{const{multiSelectionActive:_,edgeLookup:w,nodeLookup:C,triggerNodeChanges:N,triggerEdgeChanges:O}=v();if(_){const I=S.map(D=>Fo(D,!0));O(I);return}O(nl(w,new Set([...S]))),N(nl(C,new Set,!0))},unselectNodesAndEdges:({nodes:S,edges:_}={})=>{const{edges:w,nodes:C,nodeLookup:N,triggerNodeChanges:O,triggerEdgeChanges:I}=v(),D=S||C,T=_||w,L=[];for(const M of D){if(!M.selected)continue;const $=N.get(M.id);$&&($.selected=!1),L.push(Fo(M.id,!1))}const A=[];for(const M of T)M.selected&&A.push(Fo(M.id,!1));O(L),I(A)},setMinZoom:S=>{const{panZoom:_,maxZoom:w}=v();_?.setScaleExtent([S,w]),y({minZoom:S})},setMaxZoom:S=>{const{panZoom:_,minZoom:w}=v();_?.setScaleExtent([w,S]),y({maxZoom:S})},setTranslateExtent:S=>{v().panZoom?.setTranslateExtent(S),y({translateExtent:S})},resetSelectedElements:()=>{const{edges:S,nodes:_,triggerNodeChanges:w,triggerEdgeChanges:C,elementsSelectable:N}=v();if(!N)return;const O=_.reduce((D,T)=>T.selected?[...D,Fo(T.id,!1)]:D,[]),I=S.reduce((D,T)=>T.selected?[...D,Fo(T.id,!1)]:D,[]);w(O),C(I)},setNodeExtent:S=>{const{nodes:_,nodeLookup:w,parentLookup:C,nodeOrigin:N,elevateNodesOnSelect:O,nodeExtent:I,zIndexMode:D}=v();S[0][0]===I[0][0]&&S[0][1]===I[0][1]&&S[1][0]===I[1][0]&&S[1][1]===I[1][1]||(_0(_,w,C,{nodeOrigin:N,nodeExtent:S,elevateNodesOnSelect:O,checkEquality:!1,zIndexMode:D}),y({nodeExtent:S}))},panBy:S=>{const{transform:_,width:w,height:C,panZoom:N,translateExtent:O}=v();return XY({delta:S,panZoom:N,transform:_,translateExtent:O,width:w,height:C})},setCenter:async(S,_,w)=>{const{width:C,height:N,maxZoom:O,panZoom:I}=v();if(!I)return Promise.resolve(!1);const D=typeof w?.zoom<"u"?w.zoom:O;return await I.setViewport({x:C/2-S*D,y:N/2-_*D,zoom:D},{duration:w?.duration,ease:w?.ease,interpolate:w?.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{y({connection:{...CT}})},updateConnection:S=>{y({connection:S})},reset:()=>y({...I2()})}},Object.is);function IR({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:i,initialHeight:o,initialMinZoom:a,initialMaxZoom:u,initialFitViewOptions:d,fitView:m,nodeOrigin:p,nodeExtent:h,zIndexMode:g,children:y}){const[v]=j.useState(()=>fZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:o,fitView:m,minZoom:a,maxZoom:u,fitViewOptions:d,nodeOrigin:p,nodeExtent:h,zIndexMode:g}));return c.jsx(RX,{value:v,children:c.jsx(eK,{children:y})})}function mZ({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:i,width:o,height:a,fitView:u,fitViewOptions:d,minZoom:m,maxZoom:p,nodeOrigin:h,nodeExtent:g,zIndexMode:y}){return j.useContext(Jm)?c.jsx(c.Fragment,{children:e}):c.jsx(IR,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:i,initialWidth:o,initialHeight:a,fitView:u,initialFitViewOptions:d,initialMinZoom:m,initialMaxZoom:p,nodeOrigin:h,nodeExtent:g,zIndexMode:y,children:e})}const hZ={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function pZ({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:o,edgeTypes:a,onNodeClick:u,onEdgeClick:d,onInit:m,onMove:p,onMoveStart:h,onMoveEnd:g,onConnect:y,onConnectStart:v,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:_,onNodeMouseEnter:w,onNodeMouseMove:C,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:I,onNodeDragStart:D,onNodeDrag:T,onNodeDragStop:L,onNodesDelete:A,onEdgesDelete:M,onDelete:$,onSelectionChange:W,onSelectionDragStart:B,onSelectionDrag:U,onSelectionDragStop:H,onSelectionContextMenu:V,onSelectionStart:Y,onSelectionEnd:Q,onBeforeDelete:q,connectionMode:G,connectionLineType:J=lo.Bezier,connectionLineStyle:P,connectionLineComponent:X,connectionLineContainerStyle:ee,deleteKeyCode:te="Backspace",selectionKeyCode:re="Shift",selectionOnDrag:oe=!1,selectionMode:de=Cu.Full,panActivationKeyCode:se="Space",multiSelectionKeyCode:Ee=Eu()?"Meta":"Control",zoomActivationKeyCode:we=Eu()?"Meta":"Control",snapToGrid:Ce,snapGrid:Be,onlyRenderVisibleElements:Ge=!1,selectNodesOnDrag:Ye,nodesDraggable:yt,autoPanOnNodeFocus:qt,nodesConnectable:bt,nodesFocusable:vt,nodeOrigin:me=nR,edgesFocusable:Oe,edgesReconnectable:rt,elementsSelectable:Qe=!0,defaultViewport:Je=UX,minZoom:fe=.5,maxZoom:be=2,translateExtent:Me=wu,preventScrolling:Fe=!0,nodeExtent:$e,defaultMarkerColor:Wt="#b1b1b7",zoomOnScroll:nn=!0,zoomOnPinch:ke=!0,panOnScroll:Te=!1,panOnScrollSpeed:Pe=.5,panOnScrollMode:Ve=Go.Free,zoomOnDoubleClick:qe=!0,panOnDrag:et=!0,onPaneClick:Mn,onPaneMouseEnter:Tn,onPaneMouseMove:Dn,onPaneMouseLeave:yn,onPaneScroll:Yt,onPaneContextMenu:Jt,paneClickDistance:Et=1,nodeClickDistance:wt=0,children:tt,onReconnect:it,onReconnectStart:rn,onReconnectEnd:Xt,onEdgeContextMenu:mt,onEdgeDoubleClick:Ht,onEdgeMouseEnter:On,onEdgeMouseMove:vn,onEdgeMouseLeave:Rn,reconnectRadius:ve=10,onNodesChange:Re,onEdgesChange:Xe,noDragClassName:He="nodrag",noWheelClassName:Tt="nowheel",noPanClassName:ht="nopan",fitView:$n,fitViewOptions:Ae,connectOnClick:Dt,attributionPosition:kn,proOptions:nr,defaultEdgeOptions:Sn,elevateNodesOnSelect:We=!0,elevateEdgesOnSelect:lr=!1,disableKeyboardA11y:cr=!1,autoPanOnConnect:mn,autoPanOnNodeDrag:Pt,autoPanSpeed:Zn,connectionRadius:wn,isValidConnection:pt,onError:Ar,style:jr,id:Qn,nodeDragThreshold:ct,connectionDragThreshold:cn,viewport:sn,onViewportChange:Nt,width:vr,height:ue,colorMode:Se="light",debug:Ue,onScroll:ft,ariaLabelConfig:Kt,zIndexMode:An="basic",...br},Cn){const Hn=Qn||"1",Er=YX(Se),hn=j.useCallback(Mr=>{Mr.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),ft?.(Mr)},[ft]);return c.jsx("div",{"data-testid":"rf__wrapper",...br,onScroll:hn,style:{...jr,...hZ},ref:Cn,className:Kn(["react-flow",i,Er]),id:Qn,role:"application",children:c.jsxs(mZ,{nodes:e,edges:t,width:vr,height:ue,fitView:$n,fitViewOptions:Ae,minZoom:fe,maxZoom:be,nodeOrigin:me,nodeExtent:$e,zIndexMode:An,children:[c.jsx(WX,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:y,onConnectStart:v,onConnectEnd:k,onClickConnectStart:S,onClickConnectEnd:_,nodesDraggable:yt,autoPanOnNodeFocus:qt,nodesConnectable:bt,nodesFocusable:vt,edgesFocusable:Oe,edgesReconnectable:rt,elementsSelectable:Qe,elevateNodesOnSelect:We,elevateEdgesOnSelect:lr,minZoom:fe,maxZoom:be,nodeExtent:$e,onNodesChange:Re,onEdgesChange:Xe,snapToGrid:Ce,snapGrid:Be,connectionMode:G,translateExtent:Me,connectOnClick:Dt,defaultEdgeOptions:Sn,fitView:$n,fitViewOptions:Ae,onNodesDelete:A,onEdgesDelete:M,onDelete:$,onNodeDragStart:D,onNodeDrag:T,onNodeDragStop:L,onSelectionDrag:U,onSelectionDragStart:B,onSelectionDragStop:H,onMove:p,onMoveStart:h,onMoveEnd:g,noPanClassName:ht,nodeOrigin:me,rfId:Hn,autoPanOnConnect:mn,autoPanOnNodeDrag:Pt,autoPanSpeed:Zn,onError:Ar,connectionRadius:wn,isValidConnection:pt,selectNodesOnDrag:Ye,nodeDragThreshold:ct,connectionDragThreshold:cn,onBeforeDelete:q,debug:Ue,ariaLabelConfig:Kt,zIndexMode:An}),c.jsx(dZ,{onInit:m,onNodeClick:u,onEdgeClick:d,onNodeMouseEnter:w,onNodeMouseMove:C,onNodeMouseLeave:N,onNodeContextMenu:O,onNodeDoubleClick:I,nodeTypes:o,edgeTypes:a,connectionLineType:J,connectionLineStyle:P,connectionLineComponent:X,connectionLineContainerStyle:ee,selectionKeyCode:re,selectionOnDrag:oe,selectionMode:de,deleteKeyCode:te,multiSelectionKeyCode:Ee,panActivationKeyCode:se,zoomActivationKeyCode:we,onlyRenderVisibleElements:Ge,defaultViewport:Je,translateExtent:Me,minZoom:fe,maxZoom:be,preventScrolling:Fe,zoomOnScroll:nn,zoomOnPinch:ke,zoomOnDoubleClick:qe,panOnScroll:Te,panOnScrollSpeed:Pe,panOnScrollMode:Ve,panOnDrag:et,onPaneClick:Mn,onPaneMouseEnter:Tn,onPaneMouseMove:Dn,onPaneMouseLeave:yn,onPaneScroll:Yt,onPaneContextMenu:Jt,paneClickDistance:Et,nodeClickDistance:wt,onSelectionContextMenu:V,onSelectionStart:Y,onSelectionEnd:Q,onReconnect:it,onReconnectStart:rn,onReconnectEnd:Xt,onEdgeContextMenu:mt,onEdgeDoubleClick:Ht,onEdgeMouseEnter:On,onEdgeMouseMove:vn,onEdgeMouseLeave:Rn,reconnectRadius:ve,defaultMarkerColor:Wt,noDragClassName:He,noWheelClassName:Tt,noPanClassName:ht,rfId:Hn,disableKeyboardA11y:cr,nodeExtent:$e,viewport:sn,onViewportChange:Nt}),c.jsx(VX,{onSelectionChange:W}),tt,c.jsx(PX,{proOptions:nr,position:kn}),c.jsx(zX,{rfId:Hn,disableKeyboardA11y:cr})]})})}var gZ=sR(pZ);function xZ({dimensions:e,lineWidth:t,variant:n,className:r}){return c.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:Kn(["react-flow__background-pattern",n,r])})}function yZ({radius:e,className:t}){return c.jsx("circle",{cx:e,cy:e,r:e,className:Kn(["react-flow__background-pattern","dots",t])})}var ho;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(ho||(ho={}));const vZ={[ho.Dots]:1,[ho.Lines]:1,[ho.Cross]:6},bZ=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function TR({id:e,variant:t=ho.Dots,gap:n=20,size:r,lineWidth:i=1,offset:o=0,color:a,bgColor:u,style:d,className:m,patternClassName:p}){const h=j.useRef(null),{transform:g,patternId:y}=Gt(bZ,Nn),v=r||vZ[t],k=t===ho.Dots,S=t===ho.Cross,_=Array.isArray(n)?n:[n,n],w=[_[0]*g[2]||1,_[1]*g[2]||1],C=v*g[2],N=Array.isArray(o)?o:[o,o],O=S?[C,C]:w,I=[N[0]*g[2]||1+O[0]/2,N[1]*g[2]||1+O[1]/2],D=`${y}${e||""}`;return c.jsxs("svg",{className:Kn(["react-flow__background",m]),style:{...d,...th,"--xy-background-color-props":u,"--xy-background-pattern-color-props":a},ref:h,"data-testid":"rf__background",children:[c.jsx("pattern",{id:D,x:g[0]%w[0],y:g[1]%w[1],width:w[0],height:w[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`,children:k?c.jsx(yZ,{radius:C/2,className:p}):c.jsx(xZ,{dimensions:O,lineWidth:i,variant:t,className:p})}),c.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${D})`})]})}TR.displayName="Background";const _Z=j.memo(TR);function kZ(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:c.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function SZ(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:c.jsx("path",{d:"M0 0h32v4.2H0z"})})}function wZ(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:c.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 CZ(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:c.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 jZ(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:c.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 _f({children:e,className:t,...n}){return c.jsx("button",{type:"button",className:Kn(["react-flow__controls-button",t]),...n,children:e})}const EZ=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function RR({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:o,onZoomOut:a,onFitView:u,onInteractiveChange:d,className:m,children:p,position:h="bottom-left",orientation:g="vertical","aria-label":y}){const v=In(),{isInteractive:k,minZoomReached:S,maxZoomReached:_,ariaLabelConfig:w}=Gt(EZ,Nn),{zoomIn:C,zoomOut:N,fitView:O}=Hv(),I=()=>{C(),o?.()},D=()=>{N(),a?.()},T=()=>{O(i),u?.()},L=()=>{v.setState({nodesDraggable:!k,nodesConnectable:!k,elementsSelectable:!k}),d?.(!k)},A=g==="horizontal"?"horizontal":"vertical";return c.jsxs(eh,{className:Kn(["react-flow__controls",A,m]),position:h,style:e,"data-testid":"rf__controls","aria-label":y??w["controls.ariaLabel"],children:[t&&c.jsxs(c.Fragment,{children:[c.jsx(_f,{onClick:I,className:"react-flow__controls-zoomin",title:w["controls.zoomIn.ariaLabel"],"aria-label":w["controls.zoomIn.ariaLabel"],disabled:_,children:c.jsx(kZ,{})}),c.jsx(_f,{onClick:D,className:"react-flow__controls-zoomout",title:w["controls.zoomOut.ariaLabel"],"aria-label":w["controls.zoomOut.ariaLabel"],disabled:S,children:c.jsx(SZ,{})})]}),n&&c.jsx(_f,{className:"react-flow__controls-fitview",onClick:T,title:w["controls.fitView.ariaLabel"],"aria-label":w["controls.fitView.ariaLabel"],children:c.jsx(wZ,{})}),r&&c.jsx(_f,{className:"react-flow__controls-interactive",onClick:L,title:w["controls.interactive.ariaLabel"],"aria-label":w["controls.interactive.ariaLabel"],children:k?c.jsx(jZ,{}):c.jsx(CZ,{})}),p]})}RR.displayName="Controls";const NZ=j.memo(RR);function IZ({id:e,x:t,y:n,width:r,height:i,style:o,color:a,strokeColor:u,strokeWidth:d,className:m,borderRadius:p,shapeRendering:h,selected:g,onClick:y}){const{background:v,backgroundColor:k}=o||{},S=a||v||k;return c.jsx("rect",{className:Kn(["react-flow__minimap-node",{selected:g},m]),x:t,y:n,rx:p,ry:p,width:r,height:i,style:{fill:S,stroke:u,strokeWidth:d},shapeRendering:h,onClick:y?_=>y(_,e):void 0})}const TZ=j.memo(IZ),RZ=e=>e.nodes.map(t=>t.id),Ix=e=>e instanceof Function?e:()=>e;function AZ({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:o=TZ,onClick:a}){const u=Gt(RZ,Nn),d=Ix(t),m=Ix(e),p=Ix(n),h=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return c.jsx(c.Fragment,{children:u.map(g=>c.jsx(DZ,{id:g,nodeColorFunc:d,nodeStrokeColorFunc:m,nodeClassNameFunc:p,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:o,onClick:a,shapeRendering:h},g))})}function MZ({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:o,shapeRendering:a,NodeComponent:u,onClick:d}){const{node:m,x:p,y:h,width:g,height:y}=Gt(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:_,y:w}=k.internals.positionAbsolute,{width:C,height:N}=Ts(S);return{node:S,x:_,y:w,width:C,height:N}},Nn);return!m||m.hidden||!AT(m)?null:c.jsx(u,{x:p,y:h,width:g,height:y,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 DZ=j.memo(MZ);var OZ=j.memo(AZ);const LZ=200,zZ=150,PZ=e=>!e.hidden,BZ=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?RT(Pu(e.nodeLookup,{filter:PZ}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},$Z="react-flow__minimap-desc";function AR({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:i="",nodeBorderRadius:o=5,nodeStrokeWidth:a,nodeComponent:u,bgColor:d,maskColor:m,maskStrokeColor:p,maskStrokeWidth:h,position:g="bottom-right",onClick:y,onNodeClick:v,pannable:k=!1,zoomable:S=!1,ariaLabel:_,inversePan:w,zoomStep:C=1,offsetScale:N=5}){const O=In(),I=j.useRef(null),{boundingRect:D,viewBB:T,rfId:L,panZoom:A,translateExtent:M,flowWidth:$,flowHeight:W,ariaLabelConfig:B}=Gt(BZ,Nn),U=e?.width??LZ,H=e?.height??zZ,V=D.width/U,Y=D.height/H,Q=Math.max(V,Y),q=Q*U,G=Q*H,J=N*Q,P=D.x-(q-D.width)/2-J,X=D.y-(G-D.height)/2-J,ee=q+J*2,te=G+J*2,re=`${$Z}-${L}`,oe=j.useRef(0),de=j.useRef();oe.current=Q,j.useEffect(()=>{if(I.current&&A)return de.current=iX({domNode:I.current,panZoom:A,getTransform:()=>O.getState().transform,getViewScale:()=>oe.current}),()=>{de.current?.destroy()}},[A]),j.useEffect(()=>{de.current?.update({translateExtent:M,width:$,height:W,inversePan:w,pannable:k,zoomStep:C,zoomable:S})},[k,S,w,C,M,$,W]);const se=y?Ce=>{const[Be,Ge]=de.current?.pointer(Ce)||[0,0];y(Ce,{x:Be,y:Ge})}:void 0,Ee=v?j.useCallback((Ce,Be)=>{const Ge=O.getState().nodeLookup.get(Be).internals.userNode;v(Ce,Ge)},[]):void 0,we=_??B["minimap.ariaLabel"];return c.jsx(eh,{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 p=="string"?p:void 0,"--xy-minimap-mask-stroke-width-props":typeof h=="number"?h*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:Kn(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:c.jsxs("svg",{width:U,height:H,viewBox:`${P} ${X} ${ee} ${te}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":re,ref:I,onClick:se,children:[we&&c.jsx("title",{id:re,children:we}),c.jsx(OZ,{onClick:Ee,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:i,nodeStrokeWidth:a,nodeComponent:u}),c.jsx("path",{className:"react-flow__minimap-mask",d:`M${P-J},${X-J}h${ee+J*2}v${te+J*2}h${-ee-J*2}z - M${T.x},${T.y}h${T.width}v${T.height}h${-T.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}AR.displayName="MiniMap";const HZ=j.memo(AR),FZ=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,VZ={[Cl.Line]:"right",[Cl.Handle]:"bottom-right"};function UZ({nodeId:e,position:t,variant:n=Cl.Handle,className:r,style:i=void 0,children:o,color:a,minWidth:u=10,minHeight:d=10,maxWidth:m=Number.MAX_VALUE,maxHeight:p=Number.MAX_VALUE,keepAspectRatio:h=!1,resizeDirection:g,autoScale:y=!0,shouldResize:v,onResizeStart:k,onResize:S,onResizeEnd:_}){const w=cR(),C=typeof e=="string"?e:w,N=In(),O=j.useRef(null),I=n===Cl.Handle,D=Gt(j.useCallback(FZ(I&&y),[I,y]),Nn),T=j.useRef(null),L=t??VZ[n];j.useEffect(()=>{if(!(!O.current||!C))return T.current||(T.current=yX({domNode:O.current,nodeId:C,getStoreItems:()=>{const{nodeLookup:M,transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:U,domNode:H}=N.getState();return{nodeLookup:M,transform:$,snapGrid:W,snapToGrid:B,nodeOrigin:U,paneDomNode:H}},onChange:(M,$)=>{const{triggerNodeChanges:W,nodeLookup:B,parentLookup:U,nodeOrigin:H}=N.getState(),V=[],Y={x:M.x,y:M.y},Q=B.get(C);if(Q&&Q.expandParent&&Q.parentId){const q=Q.origin??H,G=M.width??Q.measured.width??0,J=M.height??Q.measured.height??0,P={id:Q.id,parentId:Q.parentId,rect:{width:G,height:J,...MT({x:M.x??Q.position.x,y:M.y??Q.position.y},{width:G,height:J},Q.parentId,B,q)}},X=$v([P],B,U,H);V.push(...X),Y.x=M.x?Math.max(q[0]*G,M.x):void 0,Y.y=M.y?Math.max(q[1]*J,M.y):void 0}if(Y.x!==void 0&&Y.y!==void 0){const q={id:C,type:"position",position:{...Y}};V.push(q)}if(M.width!==void 0&&M.height!==void 0){const G={id:C,type:"dimensions",resizing:!0,setAttributes:g?g==="horizontal"?"width":"height":!0,dimensions:{width:M.width,height:M.height}};V.push(G)}for(const q of $){const G={...q,type:"position"};V.push(G)}W(V)},onEnd:({width:M,height:$})=>{const W={id:C,type:"dimensions",resizing:!1,dimensions:{width:M,height:$}};N.getState().triggerNodeChanges([W])}})),T.current.update({controlPosition:L,boundaries:{minWidth:u,minHeight:d,maxWidth:m,maxHeight:p},keepAspectRatio:h,resizeDirection:g,onResizeStart:k,onResize:S,onResizeEnd:_,shouldResize:v}),()=>{T.current?.destroy()}},[L,u,d,m,p,h,k,S,_,v]);const A=L.split("-");return c.jsx("div",{className:Kn(["react-flow__resize-control","nodrag",...A,n,r]),ref:O,style:{...i,scale:D,...a&&{[I?"backgroundColor":"borderColor"]:a}},children:o})}j.memo(UZ);const GZ=j.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=Du(t.icon);return c.jsxs("div",{className:n,children:[c.jsx(jl,{type:"target",position:at.Top,className:"oc-canvas-handle"}),c.jsxs("div",{className:"oc-canvas-node-row",children:[c.jsx("div",{className:"oc-canvas-node-chip",children:c.jsx("span",{className:"oc-canvas-node-chip-icon",style:{WebkitMaskImage:`url("${r}")`,maskImage:`url("${r}")`},"aria-hidden":!0})}),c.jsxs("div",{className:"oc-canvas-node-text",children:[c.jsx("span",{className:"oc-canvas-node-name",children:t.name}),c.jsxs("div",{className:"oc-canvas-node-meta",children:[t.employeeNames.length>0?c.jsxs("span",{className:"oc-canvas-node-person",title:t.employeeNames.join(", "),children:[t.employeeNames[0],t.employeeNames.length>1?` +${t.employeeNames.length-1}`:""]}):c.jsx("span",{className:"oc-canvas-node-id",children:t.roleId}),t.employeeCount>0&&c.jsx("span",{className:"oc-canvas-node-badge",children:t.employeeCount})]})]})]}),c.jsx(jl,{type:"source",position:at.Bottom,className:"oc-canvas-handle"})]})});var Tx,T2;function Vv(){if(T2)return Tx;T2=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(p){p&&(this._isDirected=Object.hasOwn(p,"directed")?p.directed:!0,this._isMultigraph=Object.hasOwn(p,"multigraph")?p.multigraph:!1,this._isCompound=Object.hasOwn(p,"compound")?p.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[t]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(p){return this._label=p,this}graph(){return this._label}setDefaultNodeLabel(p){return this._defaultNodeLabelFn=p,typeof p!="function"&&(this._defaultNodeLabelFn=()=>p),this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){var p=this;return this.nodes().filter(h=>Object.keys(p._in[h]).length===0)}sinks(){var p=this;return this.nodes().filter(h=>Object.keys(p._out[h]).length===0)}setNodes(p,h){var g=arguments,y=this;return p.forEach(function(v){g.length>1?y.setNode(v,h):y.setNode(v)}),this}setNode(p,h){return Object.hasOwn(this._nodes,p)?(arguments.length>1&&(this._nodes[p]=h),this):(this._nodes[p]=arguments.length>1?h:this._defaultNodeLabelFn(p),this._isCompound&&(this._parent[p]=t,this._children[p]={},this._children[t][p]=!0),this._in[p]={},this._preds[p]={},this._out[p]={},this._sucs[p]={},++this._nodeCount,this)}node(p){return this._nodes[p]}hasNode(p){return Object.hasOwn(this._nodes,p)}removeNode(p){var h=this;if(Object.hasOwn(this._nodes,p)){var g=y=>h.removeEdge(h._edgeObjs[y]);delete this._nodes[p],this._isCompound&&(this._removeFromParentsChildList(p),delete this._parent[p],this.children(p).forEach(function(y){h.setParent(y)}),delete this._children[p]),Object.keys(this._in[p]).forEach(g),delete this._in[p],delete this._preds[p],Object.keys(this._out[p]).forEach(g),delete this._out[p],delete this._sucs[p],--this._nodeCount}return this}setParent(p,h){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(h===void 0)h=t;else{h+="";for(var g=h;g!==void 0;g=this.parent(g))if(g===p)throw new Error("Setting "+h+" as parent of "+p+" would create a cycle");this.setNode(h)}return this.setNode(p),this._removeFromParentsChildList(p),this._parent[p]=h,this._children[h][p]=!0,this}_removeFromParentsChildList(p){delete this._children[this._parent[p]][p]}parent(p){if(this._isCompound){var h=this._parent[p];if(h!==t)return h}}children(p=t){if(this._isCompound){var h=this._children[p];if(h)return Object.keys(h)}else{if(p===t)return this.nodes();if(this.hasNode(p))return[]}}predecessors(p){var h=this._preds[p];if(h)return Object.keys(h)}successors(p){var h=this._sucs[p];if(h)return Object.keys(h)}neighbors(p){var h=this.predecessors(p);if(h){const y=new Set(h);for(var g of this.successors(p))y.add(g);return Array.from(y.values())}}isLeaf(p){var h;return this.isDirected()?h=this.successors(p):h=this.neighbors(p),h.length===0}filterNodes(p){var h=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});h.setGraph(this.graph());var g=this;Object.entries(this._nodes).forEach(function([k,S]){p(k)&&h.setNode(k,S)}),Object.values(this._edgeObjs).forEach(function(k){h.hasNode(k.v)&&h.hasNode(k.w)&&h.setEdge(k,g.edge(k))});var y={};function v(k){var S=g.parent(k);return S===void 0||h.hasNode(S)?(y[k]=S,S):S in y?y[S]:v(S)}return this._isCompound&&h.nodes().forEach(k=>h.setParent(k,v(k))),h}setDefaultEdgeLabel(p){return this._defaultEdgeLabelFn=p,typeof p!="function"&&(this._defaultEdgeLabelFn=()=>p),this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(p,h){var g=this,y=arguments;return p.reduce(function(v,k){return y.length>1?g.setEdge(v,k,h):g.setEdge(v,k),k}),this}setEdge(){var p,h,g,y,v=!1,k=arguments[0];typeof k=="object"&&k!==null&&"v"in k?(p=k.v,h=k.w,g=k.name,arguments.length===2&&(y=arguments[1],v=!0)):(p=k,h=arguments[1],g=arguments[3],arguments.length>2&&(y=arguments[2],v=!0)),p=""+p,h=""+h,g!==void 0&&(g=""+g);var S=a(this._isDirected,p,h,g);if(Object.hasOwn(this._edgeLabels,S))return v&&(this._edgeLabels[S]=y),this;if(g!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(p),this.setNode(h),this._edgeLabels[S]=v?y:this._defaultEdgeLabelFn(p,h,g);var _=u(this._isDirected,p,h,g);return p=_.v,h=_.w,Object.freeze(_),this._edgeObjs[S]=_,i(this._preds[h],p),i(this._sucs[p],h),this._in[h][S]=_,this._out[p][S]=_,this._edgeCount++,this}edge(p,h,g){var y=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,p,h,g);return this._edgeLabels[y]}edgeAsObj(){const p=this.edge(...arguments);return typeof p!="object"?{label:p}:p}hasEdge(p,h,g){var y=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,p,h,g);return Object.hasOwn(this._edgeLabels,y)}removeEdge(p,h,g){var y=arguments.length===1?d(this._isDirected,arguments[0]):a(this._isDirected,p,h,g),v=this._edgeObjs[y];return v&&(p=v.v,h=v.w,delete this._edgeLabels[y],delete this._edgeObjs[y],o(this._preds[h],p),o(this._sucs[p],h),delete this._in[h][y],delete this._out[p][y],this._edgeCount--),this}inEdges(p,h){var g=this._in[p];if(g){var y=Object.values(g);return h?y.filter(v=>v.v===h):y}}outEdges(p,h){var g=this._out[p];if(g){var y=Object.values(g);return h?y.filter(v=>v.w===h):y}}nodeEdges(p,h){var g=this.inEdges(p,h);if(g)return g.concat(this.outEdges(p,h))}}function i(m,p){m[p]?m[p]++:m[p]=1}function o(m,p){--m[p]||delete m[p]}function a(m,p,h,g){var y=""+p,v=""+h;if(!m&&y>v){var k=y;y=v,v=k}return y+n+v+n+(g===void 0?e:g)}function u(m,p,h,g){var y=""+p,v=""+h;if(!m&&y>v){var k=y;y=v,v=k}var S={v:y,w:v};return g&&(S.name=g),S}function d(m,p){return a(m,p.v,p.w,p.name)}return Tx=r,Tx}var Rx,R2;function qZ(){return R2||(R2=1,Rx="2.2.4"),Rx}var Ax,A2;function WZ(){return A2||(A2=1,Ax={Graph:Vv(),version:qZ()}),Ax}var Mx,M2;function YZ(){if(M2)return Mx;M2=1;var e=Vv();Mx={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 u=o.node(a),d=o.parent(a),m={v:a};return u!==void 0&&(m.value=u),d!==void 0&&(m.parent=d),m})}function r(o){return o.edges().map(function(a){var u=o.edge(a),d={v:a.v,w:a.w};return a.name!==void 0&&(d.name=a.name),u!==void 0&&(d.value=u),d})}function i(o){var a=new e(o.options).setGraph(o.value);return o.nodes.forEach(function(u){a.setNode(u.v,u.value),u.parent&&a.setParent(u.v,u.parent)}),o.edges.forEach(function(u){a.setEdge({v:u.v,w:u.w,name:u.name},u.value)}),a}return Mx}var Dx,D2;function XZ(){if(D2)return Dx;D2=1,Dx=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 Dx}var Ox,O2;function MR(){if(O2)return Ox;O2=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>1,!(r[o].priority1;function n(i,o,a,u){return r(i,String(o),a||t,u||function(d){return i.outEdges(d)})}function r(i,o,a,u){var d={},m=new e,p,h,g=function(y){var v=y.v!==p?y.v:y.w,k=d[v],S=a(y),_=h.distance+S;if(S<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+y+" Weight: "+S);_0&&(p=m.removeMin(),h=d[p],h.distance!==Number.POSITIVE_INFINITY);)u(p).forEach(g);return d}return Lx}var zx,z2;function KZ(){if(z2)return zx;z2=1;var e=DR();zx=t;function t(n,r,i){return n.nodes().reduce(function(o,a){return o[a]=e(n,a,r,i),o},{})}return zx}var Px,P2;function OR(){if(P2)return Px;P2=1,Px=e;function e(t){var n=0,r=[],i={},o=[];function a(u){var d=i[u]={onStack:!0,lowlink:n,index:n++};if(r.push(u),t.successors(u).forEach(function(h){Object.hasOwn(i,h)?i[h].onStack&&(d.lowlink=Math.min(d.lowlink,i[h].index)):(a(h),d.lowlink=Math.min(d.lowlink,i[h].lowlink))}),d.lowlink===d.index){var m=[],p;do p=r.pop(),i[p].onStack=!1,m.push(p);while(u!==p);o.push(m)}}return t.nodes().forEach(function(u){Object.hasOwn(i,u)||a(u)}),o}return Px}var Bx,B2;function ZZ(){if(B2)return Bx;B2=1;var e=OR();Bx=t;function t(n){return e(n).filter(function(r){return r.length>1||r.length===1&&n.hasEdge(r[0],r[0])})}return Bx}var $x,$2;function QZ(){if($2)return $x;$2=1,$x=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={},u=r.nodes();return u.forEach(function(d){a[d]={},a[d][d]={distance:0},u.forEach(function(m){d!==m&&(a[d][m]={distance:Number.POSITIVE_INFINITY})}),o(d).forEach(function(m){var p=m.v===d?m.w:m.v,h=i(m);a[d][p]={distance:h,predecessor:d}})}),u.forEach(function(d){var m=a[d];u.forEach(function(p){var h=a[p];u.forEach(function(g){var y=h[d],v=m[g],k=h[g],S=y.distance+v.distance;Si.successors(h):h=>i.neighbors(h),d=a==="post"?t:n,m=[],p={};return o.forEach(h=>{if(!i.hasNode(h))throw new Error("Graph does not have node: "+h);d(h,u,p,m)}),m}function t(i,o,a,u){for(var d=[[i,!1]];d.length>0;){var m=d.pop();m[1]?u.push(m[0]):Object.hasOwn(a,m[0])||(a[m[0]]=!0,d.push([m[0],!0]),r(o(m[0]),p=>d.push([p,!1])))}}function n(i,o,a,u){for(var d=[i];d.length>0;){var m=d.pop();Object.hasOwn(a,m)||(a[m]=!0,u.push(m),r(o(m),p=>d.push(p)))}}function r(i,o){for(var a=i.length;a--;)o(i[a],a,i);return i}return Vx}var Ux,U2;function eQ(){if(U2)return Ux;U2=1;var e=zR();Ux=t;function t(n,r){return e(n,r,"post")}return Ux}var Gx,G2;function tQ(){if(G2)return Gx;G2=1;var e=zR();Gx=t;function t(n,r){return e(n,r,"pre")}return Gx}var qx,q2;function nQ(){if(q2)return qx;q2=1;var e=Vv(),t=MR();qx=n;function n(r,i){var o=new e,a={},u=new t,d;function m(h){var g=h.v===d?h.w:h.v,y=u.priority(g);if(y!==void 0){var v=i(h);v0;){if(d=u.removeMin(),Object.hasOwn(a,d))o.setEdge(d,a[d]);else{if(p)throw new Error("Input graph is not connected: "+r);p=!0}r.nodeEdges(d).forEach(m)}return o}return qx}var Wx,W2;function rQ(){return W2||(W2=1,Wx={components:XZ(),dijkstra:DR(),dijkstraAll:KZ(),findCycles:ZZ(),floydWarshall:QZ(),isAcyclic:JZ(),postorder:eQ(),preorder:tQ(),prim:nQ(),tarjan:OR(),topsort:LR()}),Wx}var Yx,Y2;function Oi(){if(Y2)return Yx;Y2=1;var e=WZ();return Yx={Graph:e.Graph,json:YZ(),alg:rQ(),version:e.version},Yx}var Xx,X2;function iQ(){if(X2)return Xx;X2=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 Xx=e,Xx}var Kx,K2;function sQ(){if(K2)return Kx;K2=1;let e=Oi().Graph,t=iQ();Kx=r;let n=()=>1;function r(m,p){if(m.nodeCount()<=1)return[];let h=a(m,p||n);return i(h.graph,h.buckets,h.zeroIdx).flatMap(y=>m.outEdges(y.v,y.w))}function i(m,p,h){let g=[],y=p[p.length-1],v=p[0],k;for(;m.nodeCount();){for(;k=v.dequeue();)o(m,p,h,k);for(;k=y.dequeue();)o(m,p,h,k);if(m.nodeCount()){for(let S=p.length-2;S>0;--S)if(k=p[S].dequeue(),k){g=g.concat(o(m,p,h,k,!0));break}}}return g}function o(m,p,h,g,y){let v=y?[]:void 0;return m.inEdges(g.v).forEach(k=>{let S=m.edge(k),_=m.node(k.v);y&&v.push({v:k.v,w:k.w}),_.out-=S,u(p,h,_)}),m.outEdges(g.v).forEach(k=>{let S=m.edge(k),_=k.w,w=m.node(_);w.in-=S,u(p,h,w)}),m.removeNode(g.v),v}function a(m,p){let h=new e,g=0,y=0;m.nodes().forEach(S=>{h.setNode(S,{v:S,in:0,out:0})}),m.edges().forEach(S=>{let _=h.edge(S.v,S.w)||0,w=p(S),C=_+w;h.setEdge(S.v,S.w,C),y=Math.max(y,h.node(S.v).out+=w),g=Math.max(g,h.node(S.w).in+=w)});let v=d(y+g+3).map(()=>new t),k=g+1;return h.nodes().forEach(S=>{u(v,k,h.node(S))}),{graph:h,buckets:v,zeroIdx:k}}function u(m,p,h){h.out?h.in?m[h.out-h.in+p].enqueue(h):m[m.length-1].enqueue(h):m[0].enqueue(h)}function d(m){const p=[];for(let h=0;hL.setNode(A,T.node(A))),T.edges().forEach(A=>{let M=L.edge(A.v,A.w)||{weight:0,minlen:1},$=T.edge(A);L.setEdge(A.v,A.w,{weight:M.weight+$.weight,minlen:Math.max(M.minlen,$.minlen)})}),L}function r(T){let L=new e({multigraph:T.isMultigraph()}).setGraph(T.graph());return T.nodes().forEach(A=>{T.children(A).length||L.setNode(A,T.node(A))}),T.edges().forEach(A=>{L.setEdge(A,T.edge(A))}),L}function i(T){let L=T.nodes().map(A=>{let M={};return T.outEdges(A).forEach($=>{M[$.w]=(M[$.w]||0)+T.edge($).weight}),M});return D(T.nodes(),L)}function o(T){let L=T.nodes().map(A=>{let M={};return T.inEdges(A).forEach($=>{M[$.v]=(M[$.v]||0)+T.edge($).weight}),M});return D(T.nodes(),L)}function a(T,L){let A=T.x,M=T.y,$=L.x-A,W=L.y-M,B=T.width/2,U=T.height/2;if(!$&&!W)throw new Error("Not possible to find intersection inside of the rectangle");let H,V;return Math.abs(W)*B>Math.abs($)*U?(W<0&&(U=-U),H=U*$/W,V=U):($<0&&(B=-B),H=B,V=B*W/$),{x:A+H,y:M+V}}function u(T){let L=N(v(T)+1).map(()=>[]);return T.nodes().forEach(A=>{let M=T.node(A),$=M.rank;$!==void 0&&(L[$][M.order]=A)}),L}function d(T){let L=T.nodes().map(M=>{let $=T.node(M).rank;return $===void 0?Number.MAX_VALUE:$}),A=y(Math.min,L);T.nodes().forEach(M=>{let $=T.node(M);Object.hasOwn($,"rank")&&($.rank-=A)})}function m(T){let L=T.nodes().map(B=>T.node(B).rank),A=y(Math.min,L),M=[];T.nodes().forEach(B=>{let U=T.node(B).rank-A;M[U]||(M[U]=[]),M[U].push(B)});let $=0,W=T.graph().nodeRankFactor;Array.from(M).forEach((B,U)=>{B===void 0&&U%W!==0?--$:B!==void 0&&$&&B.forEach(H=>T.node(H).rank+=$)})}function p(T,L,A,M){let $={width:0,height:0};return arguments.length>=4&&($.rank=A,$.order=M),t(T,"border",$,L)}function h(T,L=g){const A=[];for(let M=0;Mg){const A=h(L);return T.apply(null,A.map(M=>T.apply(null,M)))}else return T.apply(null,L)}function v(T){const A=T.nodes().map(M=>{let $=T.node(M).rank;return $===void 0?Number.MIN_VALUE:$});return y(Math.max,A)}function k(T,L){let A={lhs:[],rhs:[]};return T.forEach(M=>{L(M)?A.lhs.push(M):A.rhs.push(M)}),A}function S(T,L){let A=Date.now();try{return L()}finally{console.log(T+" time: "+(Date.now()-A)+"ms")}}function _(T,L){return L()}let w=0;function C(T){var L=++w;return T+(""+L)}function N(T,L,A=1){L==null&&(L=T,T=0);let M=W=>WLM[L]),Object.entries(T).reduce((M,[$,W])=>(M[$]=A(W,$),M),{})}function D(T,L){return T.reduce((A,M,$)=>(A[M]=L[$],A),{})}return Zx}var Qx,Q2;function oQ(){if(Q2)return Qx;Q2=1;let e=sQ(),t=Xn().uniqueId;Qx={run:n,undo:i};function n(o){(o.graph().acyclicer==="greedy"?e(o,u(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 u(d){return m=>d.edge(m).weight}}function r(o){let a=[],u={},d={};function m(p){Object.hasOwn(d,p)||(d[p]=!0,u[p]=!0,o.outEdges(p).forEach(h=>{Object.hasOwn(u,h.w)?a.push(h):m(h.w)}),delete u[p])}return o.nodes().forEach(m),a}function i(o){o.edges().forEach(a=>{let u=o.edge(a);if(u.reversed){o.removeEdge(a);let d=u.forwardName;delete u.reversed,delete u.forwardName,o.setEdge(a.w,a.v,u,d)}})}return Qx}var Jx,J2;function aQ(){if(J2)return Jx;J2=1;let e=Xn();Jx={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,u=i.node(a).rank,d=o.w,m=i.node(d).rank,p=o.name,h=i.edge(o),g=h.labelRank;if(m===u+1)return;i.removeEdge(o);let y,v,k;for(k=0,++u;u{let a=i.node(o),u=a.edgeLabel,d;for(i.setEdge(a.edgeObj,u);a.dummy;)d=i.successors(o)[0],i.removeNode(o),u.points.push({x:a.x,y:a.y}),a.dummy==="edge-label"&&(u.x=a.x,u.y=a.y,u.width=a.width,u.height=a.height),o=d,a=i.node(o)})}return Jx}var ey,ej;function bm(){if(ej)return ey;ej=1;const{applyWithChunking:e}=Xn();ey={longestPath:t,slack:n};function t(r){var i={};function o(a){var u=r.node(a);if(Object.hasOwn(i,a))return u.rank;i[a]=!0;let d=r.outEdges(a).map(p=>p==null?Number.POSITIVE_INFINITY:o(p.w)-r.edge(p).minlen);var m=e(Math.min,d);return m===Number.POSITIVE_INFINITY&&(m=0),u.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 ey}var ty,tj;function PR(){if(tj)return ty;tj=1;var e=Oi().Graph,t=bm().slack;ty=n;function n(a){var u=new e({directed:!1}),d=a.nodes()[0],m=a.nodeCount();u.setNode(d,{});for(var p,h;r(u,a){var h=p.v,g=m===h?p.w:h;!a.hasNode(g)&&!t(u,p)&&(a.setNode(g,{}),a.setEdge(m,g,{}),d(g))})}return a.nodes().forEach(d),a.nodeCount()}function i(a,u){return u.edges().reduce((m,p)=>{let h=Number.POSITIVE_INFINITY;return a.hasNode(p.v)!==a.hasNode(p.w)&&(h=t(u,p)),hu.node(m).rank+=d)}return ty}var ny,nj;function lQ(){if(nj)return ny;nj=1;var e=PR(),t=bm().slack,n=bm().longestPath,r=Oi().alg.preorder,i=Oi().alg.postorder,o=Xn().simplify;ny=a,a.initLowLimValues=p,a.initCutValues=u,a.calcCutValue=m,a.leaveEdge=g,a.enterEdge=y,a.exchangeEdges=v;function a(w){w=o(w),n(w);var C=e(w);p(C),u(C,w);for(var N,O;N=g(C);)O=y(C,w,N),v(C,w,N,O)}function u(w,C){var N=i(w,w.nodes());N=N.slice(0,N.length-1),N.forEach(O=>d(w,C,O))}function d(w,C,N){var O=w.node(N),I=O.parent;w.edge(N,I).cutvalue=m(w,C,N)}function m(w,C,N){var O=w.node(N),I=O.parent,D=!0,T=C.edge(N,I),L=0;return T||(D=!1,T=C.edge(I,N)),L=T.weight,C.nodeEdges(N).forEach(A=>{var M=A.v===N,$=M?A.w:A.v;if($!==I){var W=M===D,B=C.edge(A).weight;if(L+=W?B:-B,S(w,N,$)){var U=w.edge(N,$).cutvalue;L+=W?-U:U}}}),L}function p(w,C){arguments.length<2&&(C=w.nodes()[0]),h(w,{},1,C)}function h(w,C,N,O,I){var D=N,T=w.node(O);return C[O]=!0,w.neighbors(O).forEach(L=>{Object.hasOwn(C,L)||(N=h(w,C,N,L,O))}),T.low=D,T.lim=N++,I?T.parent=I:delete T.parent,N}function g(w){return w.edges().find(C=>w.edge(C).cutvalue<0)}function y(w,C,N){var O=N.v,I=N.w;C.hasEdge(O,I)||(O=N.w,I=N.v);var D=w.node(O),T=w.node(I),L=D,A=!1;D.lim>T.lim&&(L=T,A=!0);var M=C.edges().filter($=>A===_(w,w.node($.v),L)&&A!==_(w,w.node($.w),L));return M.reduce(($,W)=>t(C,W)!C.node(I).parent),O=r(w,N);O=O.slice(1),O.forEach(I=>{var D=w.node(I).parent,T=C.edge(I,D),L=!1;T||(T=C.edge(D,I),L=!0),C.node(I).rank=C.node(D).rank+(L?T.minlen:-T.minlen)})}function S(w,C,N){return w.hasEdge(C,N)}function _(w,C,N){return N.low<=C.lim&&C.lim<=N.lim}return ny}var ry,rj;function cQ(){if(rj)return ry;rj=1;var e=bm(),t=e.longestPath,n=PR(),r=lQ();ry=i;function i(d){var m=d.graph().ranker;if(m instanceof Function)return m(d);switch(d.graph().ranker){case"network-simplex":u(d);break;case"tight-tree":a(d);break;case"longest-path":o(d);break;case"none":break;default:u(d)}}var o=t;function a(d){t(d),n(d)}function u(d){r(d)}return ry}var iy,ij;function uQ(){if(ij)return iy;ij=1,iy=e;function e(r){let i=n(r);r.graph().dummyChains.forEach(o=>{let a=r.node(o),u=a.edgeObj,d=t(r,i,u.v,u.w),m=d.path,p=d.lca,h=0,g=m[h],y=!0;for(;o!==u.w;){if(a=r.node(o),y){for(;(g=m[h])!==p&&r.node(g).maxRankm||p>i[h].lim));for(g=h,h=a;(h=r.parent(h))!==g;)d.push(h);return{path:u.concat(d.reverse()),lca:g}}function n(r){let i={},o=0;function a(u){let d=o;r.children(u).forEach(a),i[u]={low:d,lim:o++}}return r.children().forEach(a),i}return iy}var sy,sj;function dQ(){if(sj)return sy;sj=1;let e=Xn();sy={run:t,cleanup:o};function t(a){let u=e.addDummyNode(a,"root",{},"_root"),d=r(a),m=Object.values(d),p=e.applyWithChunking(Math.max,m)-1,h=2*p+1;a.graph().nestingRoot=u,a.edges().forEach(y=>a.edge(y).minlen*=h);let g=i(a)+1;a.children().forEach(y=>n(a,u,h,g,p,d,y)),a.graph().nodeRankFactor=h}function n(a,u,d,m,p,h,g){let y=a.children(g);if(!y.length){g!==u&&a.setEdge(u,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,y.forEach(_=>{n(a,u,d,m,p,h,_);let w=a.node(_),C=w.borderTop?w.borderTop:_,N=w.borderBottom?w.borderBottom:_,O=w.borderTop?m:2*m,I=C!==N?1:p-h[g]+1;a.setEdge(v,C,{weight:O,minlen:I,nestingEdge:!0}),a.setEdge(N,k,{weight:O,minlen:I,nestingEdge:!0})}),a.parent(g)||a.setEdge(u,v,{weight:0,minlen:p+h[g]})}function r(a){var u={};function d(m,p){var h=a.children(m);h&&h.length&&h.forEach(g=>d(g,p+1)),u[m]=p}return a.children().forEach(m=>d(m,1)),u}function i(a){return a.edges().reduce((u,d)=>u+a.edge(d).weight,0)}function o(a){var u=a.graph();a.removeNode(u.nestingRoot),delete u.nestingRoot,a.edges().forEach(d=>{var m=a.edge(d);m.nestingEdge&&a.removeEdge(d)})}return sy}var oy,oj;function fQ(){if(oj)return oy;oj=1;let e=Xn();oy=t;function t(r){function i(o){let a=r.children(o),u=r.node(o);if(a.length&&a.forEach(i),Object.hasOwn(u,"minRank")){u.borderLeft=[],u.borderRight=[];for(let d=u.minRank,m=u.maxRank+1;dr(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 p=d.edge(m);p.points.forEach(o),Object.hasOwn(p,"y")&&o(p)})}function o(d){d.y=-d.y}function a(d){d.nodes().forEach(m=>u(d.node(m))),d.edges().forEach(m=>{let p=d.edge(m);p.points.forEach(u),Object.hasOwn(p,"x")&&u(p)})}function u(d){let m=d.x;d.x=d.y,d.y=m}return ay}var ly,lj;function hQ(){if(lj)return ly;lj=1;let e=Xn();ly=t;function t(n){let r={},i=n.nodes().filter(p=>!n.children(p).length),o=i.map(p=>n.node(p).rank),a=e.applyWithChunking(Math.max,o),u=e.range(a+1).map(()=>[]);function d(p){if(r[p])return;r[p]=!0;let h=n.node(p);u[h.rank].push(p),n.successors(p).forEach(d)}return i.sort((p,h)=>n.node(p).rank-n.node(h).rank).forEach(d),u}return ly}var cy,cj;function pQ(){if(cj)return cy;cj=1;let e=Xn().zipObject;cy=t;function t(r,i){let o=0;for(let a=1;ay)),u=i.flatMap(g=>r.outEdges(g).map(y=>({pos:a[y.w],weight:r.edge(y).weight})).sort((y,v)=>y.pos-v.pos)),d=1;for(;d{let y=g.pos+d;p[y]+=g.weight;let v=0;for(;y>0;)y%2&&(v+=p[y+1]),y=y-1>>1,p[y]+=g.weight;h+=g.weight*v}),h}return cy}var uy,uj;function gQ(){if(uj)return uy;uj=1,uy=e;function e(t,n=[]){return n.map(r=>{let i=t.inEdges(r);if(i.length){let o=i.reduce((a,u)=>{let d=t.edge(u),m=t.node(u.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 uy}var dy,dj;function xQ(){if(dj)return dy;dj=1;let e=Xn();dy=t;function t(i,o){let a={};i.forEach((d,m)=>{let p=a[d.v]={indegree:0,in:[],out:[],vs:[d.v],i:m};d.barycenter!==void 0&&(p.barycenter=d.barycenter,p.weight=d.weight)}),o.edges().forEach(d=>{let m=a[d.v],p=a[d.w];m!==void 0&&p!==void 0&&(p.indegree++,m.out.push(a[d.w]))});let u=Object.values(a).filter(d=>!d.indegree);return n(u)}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 u(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(u(d))}return o.filter(d=>!d.merged).map(d=>e.pick(d,["vs","i","barycenter","weight"]))}function r(i,o){let a=0,u=0;i.weight&&(a+=i.barycenter*i.weight,u+=i.weight),o.weight&&(a+=o.barycenter*o.weight,u+=o.weight),i.vs=o.vs.concat(i.vs),i.barycenter=a/u,i.weight=u,i.i=Math.min(o.i,i.i),o.merged=!0}return dy}var fy,fj;function yQ(){if(fj)return fy;fj=1;let e=Xn();fy=t;function t(i,o){let a=e.partition(i,v=>Object.hasOwn(v,"barycenter")),u=a.lhs,d=a.rhs.sort((v,k)=>k.i-v.i),m=[],p=0,h=0,g=0;u.sort(r(!!o)),g=n(m,d,g),u.forEach(v=>{g+=v.vs.length,m.push(v.vs),p+=v.barycenter*v.weight,h+=v.weight,g=n(m,d,g)});let y={vs:m.flat(!0)};return h&&(y.barycenter=p/h,y.weight=h),y}function n(i,o,a){let u;for(;o.length&&(u=o[o.length-1]).i<=a;)o.pop(),i.push(u.vs),a++;return a}function r(i){return(o,a)=>o.barycentera.barycenter?1:i?a.i-o.i:o.i-a.i}return fy}var my,mj;function vQ(){if(mj)return my;mj=1;let e=gQ(),t=xQ(),n=yQ();my=r;function r(a,u,d,m){let p=a.children(u),h=a.node(u),g=h?h.borderLeft:void 0,y=h?h.borderRight:void 0,v={};g&&(p=p.filter(w=>w!==g&&w!==y));let k=e(a,p);k.forEach(w=>{if(a.children(w.v).length){let C=r(a,w.v,d,m);v[w.v]=C,Object.hasOwn(C,"barycenter")&&o(w,C)}});let S=t(k,d);i(S,v);let _=n(S,m);if(g&&(_.vs=[g,_.vs,y].flat(!0),a.predecessors(g).length)){let w=a.node(a.predecessors(g)[0]),C=a.node(a.predecessors(y)[0]);Object.hasOwn(_,"barycenter")||(_.barycenter=0,_.weight=0),_.barycenter=(_.barycenter*_.weight+w.order+C.order)/(_.weight+2),_.weight+=2}return _}function i(a,u){a.forEach(d=>{d.vs=d.vs.flatMap(m=>u[m]?u[m].vs:m)})}function o(a,u){a.barycenter!==void 0?(a.barycenter=(a.barycenter*a.weight+u.barycenter*u.weight)/(a.weight+u.weight),a.weight+=u.weight):(a.barycenter=u.barycenter,a.weight=u.weight)}return my}var hy,hj;function bQ(){if(hj)return hy;hj=1;let e=Oi().Graph,t=Xn();hy=n;function n(i,o,a,u){u||(u=i.nodes());let d=r(i),m=new e({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(p=>i.node(p));return u.forEach(p=>{let h=i.node(p),g=i.parent(p);(h.rank===o||h.minRank<=o&&o<=h.maxRank)&&(m.setNode(p),m.setParent(p,g||d),i[a](p).forEach(y=>{let v=y.v===p?y.w:y.v,k=m.edge(v,p),S=k!==void 0?k.weight:0;m.setEdge(v,p,{weight:i.edge(y).weight+S})}),Object.hasOwn(h,"minRank")&&m.setNode(p,{borderLeft:h.borderLeft[o],borderRight:h.borderRight[o]}))}),m}function r(i){for(var o;i.hasNode(o=t.uniqueId("_root")););return o}return hy}var py,pj;function _Q(){if(pj)return py;pj=1,py=e;function e(t,n,r){let i={},o;r.forEach(a=>{let u=t.parent(a),d,m;for(;u;){if(d=t.parent(u),d?(m=i[d],i[d]=u):(m=o,o=u),m&&m!==u){n.setEdge(m,u);return}u=d}})}return py}var gy,gj;function kQ(){if(gj)return gy;gj=1;let e=hQ(),t=pQ(),n=vQ(),r=bQ(),i=_Q(),o=Oi().Graph,a=Xn();gy=u;function u(h,g){if(g&&typeof g.customOrder=="function"){g.customOrder(h,u);return}let y=a.maxRank(h),v=d(h,a.range(1,y+1),"inEdges"),k=d(h,a.range(y-1,-1,-1),"outEdges"),S=e(h);if(p(h,S),g&&g.disableOptimalOrderHeuristic)return;let _=Number.POSITIVE_INFINITY,w;for(let C=0,N=0;N<4;++C,++N){m(C%2?v:k,C%4>=2),S=a.buildLayerMatrix(h);let O=t(h,S);O<_&&(N=0,w=Object.assign({},S),_=O)}p(h,w)}function d(h,g,y){const v=new Map,k=(S,_)=>{v.has(S)||v.set(S,[]),v.get(S).push(_)};for(const S of h.nodes()){const _=h.node(S);if(typeof _.rank=="number"&&k(_.rank,S),typeof _.minRank=="number"&&typeof _.maxRank=="number")for(let w=_.minRank;w<=_.maxRank;w++)w!==_.rank&&k(w,S)}return g.map(function(S){return r(h,S,y,v.get(S)||[])})}function m(h,g){let y=new o;h.forEach(function(v){let k=v.graph().root,S=n(v,k,y,g);S.vs.forEach((_,w)=>v.node(_).order=w),i(v,y,S.vs)})}function p(h,g){Object.values(g).forEach(y=>y.forEach((v,k)=>h.node(v).order=k))}return gy}var xy,xj;function SQ(){if(xj)return xy;xj=1;let e=Oi().Graph,t=Xn();xy={positionX:y,findType1Conflicts:n,findType2Conflicts:r,addConflict:o,hasConflict:a,verticalAlignment:u,horizontalCompaction:d,alignCoordinates:h,findSmallestWidthAlignment:p,balance:g};function n(S,_){let w={};function C(N,O){let I=0,D=0,T=N.length,L=O[O.length-1];return O.forEach((A,M)=>{let $=i(S,A),W=$?S.node($).order:T;($||A===L)&&(O.slice(D,M+1).forEach(B=>{S.predecessors(B).forEach(U=>{let H=S.node(U),V=H.order;(V{A=O[M],S.node(A).dummy&&S.predecessors(A).forEach($=>{let W=S.node($);W.dummy&&(W.orderL)&&o(w,$,A)})})}function N(O,I){let D=-1,T,L=0;return I.forEach((A,M)=>{if(S.node(A).dummy==="border"){let $=S.predecessors(A);$.length&&(T=S.node($[0]).order,C(I,L,M,D,T),L=M,D=T)}C(I,L,I.length,T,O.length)}),I}return _.length&&_.reduce(N),w}function i(S,_){if(S.node(_).dummy)return S.predecessors(_).find(w=>S.node(w).dummy)}function o(S,_,w){if(_>w){let N=_;_=w,w=N}let C=S[_];C||(S[_]=C={}),C[w]=!0}function a(S,_,w){if(_>w){let C=_;_=w,w=C}return!!S[_]&&Object.hasOwn(S[_],w)}function u(S,_,w,C){let N={},O={},I={};return _.forEach(D=>{D.forEach((T,L)=>{N[T]=T,O[T]=T,I[T]=L})}),_.forEach(D=>{let T=-1;D.forEach(L=>{let A=C(L);if(A.length){A=A.sort(($,W)=>I[$]-I[W]);let M=(A.length-1)/2;for(let $=Math.floor(M),W=Math.ceil(M);$<=W;++$){let B=A[$];O[L]===L&&TMath.max($,O[W.v]+I.edge(W)),0)}function A(M){let $=I.outEdges(M).reduce((B,U)=>Math.min(B,O[U.w]-I.edge(U)),Number.POSITIVE_INFINITY),W=S.node(M);$!==Number.POSITIVE_INFINITY&&W.borderType!==D&&(O[M]=Math.max(O[M],$))}return T(L,I.predecessors.bind(I)),T(A,I.successors.bind(I)),Object.keys(C).forEach(M=>O[M]=O[w[M]]),O}function m(S,_,w,C){let N=new e,O=S.graph(),I=v(O.nodesep,O.edgesep,C);return _.forEach(D=>{let T;D.forEach(L=>{let A=w[L];if(N.setNode(A),T){var M=w[T],$=N.edge(M,A);N.setEdge(M,A,Math.max(I(S,L,T),$||0))}T=L})}),N}function p(S,_){return Object.values(_).reduce((w,C)=>{let N=Number.NEGATIVE_INFINITY,O=Number.POSITIVE_INFINITY;Object.entries(C).forEach(([D,T])=>{let L=k(S,D)/2;N=Math.max(T+L,N),O=Math.min(T-L,O)});const I=N-O;return I{["l","r"].forEach(I=>{let D=O+I,T=S[D];if(T===_)return;let L=Object.values(T),A=C-t.applyWithChunking(Math.min,L);I!=="l"&&(A=N-t.applyWithChunking(Math.max,L)),A&&(S[D]=t.mapValues(T,M=>M+A))})})}function g(S,_){return t.mapValues(S.ul,(w,C)=>{if(_)return S[_.toLowerCase()][C];{let N=Object.values(S).map(O=>O[C]).sort((O,I)=>O-I);return(N[1]+N[2])/2}})}function y(S){let _=t.buildLayerMatrix(S),w=Object.assign(n(S,_),r(S,_)),C={},N;["u","d"].forEach(I=>{N=I==="u"?_:Object.values(_).reverse(),["l","r"].forEach(D=>{D==="r"&&(N=N.map(M=>Object.values(M).reverse()));let T=(I==="u"?S.predecessors:S.successors).bind(S),L=u(S,N,w,T),A=d(S,N,L.root,L.align,D==="r");D==="r"&&(A=t.mapValues(A,M=>-M)),C[I+D]=A})});let O=p(S,C);return h(C,O),g(C,S.graph().align)}function v(S,_,w){return(C,N,O)=>{let I=C.node(N),D=C.node(O),T=0,L;if(T+=I.width/2,Object.hasOwn(I,"labelpos"))switch(I.labelpos.toLowerCase()){case"l":L=-I.width/2;break;case"r":L=I.width/2;break}if(L&&(T+=w?L:-L),L=0,T+=(I.dummy?_:S)/2,T+=(D.dummy?_:S)/2,T+=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&&(T+=w?L:-L),L=0,T}}function k(S,_){return S.node(_).width}return xy}var yy,yj;function wQ(){if(yj)return yy;yj=1;let e=Xn(),t=SQ().positionX;yy=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,u=0;o.forEach(d=>{const m=d.reduce((p,h)=>{const g=i.node(h).height;return p>g?p:g},0);d.forEach(p=>i.node(p).y=u+m/2),u+=m+a})}return yy}var vy,vj;function CQ(){if(vj)return vy;vj=1;let e=oQ(),t=aQ(),n=cQ(),r=Xn().normalizeRanks,i=uQ(),o=Xn().removeEmptyRanks,a=dQ(),u=fQ(),d=mQ(),m=kQ(),p=wQ(),h=Xn(),g=Oi().Graph;vy=y;function y(P,X){let ee=X&&X.debugTiming?h.time:h.notime;ee("layout",()=>{let te=ee(" buildLayoutGraph",()=>T(P));ee(" runLayout",()=>v(te,ee,X)),ee(" updateInputGraph",()=>k(P,te))})}function v(P,X,ee){X(" makeSpaceForEdgeLabels",()=>L(P)),X(" removeSelfEdges",()=>Y(P)),X(" acyclic",()=>e.run(P)),X(" nestingGraph.run",()=>a.run(P)),X(" rank",()=>n(h.asNonCompoundGraph(P))),X(" injectEdgeLabelProxies",()=>A(P)),X(" removeEmptyRanks",()=>o(P)),X(" nestingGraph.cleanup",()=>a.cleanup(P)),X(" normalizeRanks",()=>r(P)),X(" assignRankMinMax",()=>M(P)),X(" removeEdgeLabelProxies",()=>$(P)),X(" normalize.run",()=>t.run(P)),X(" parentDummyChains",()=>i(P)),X(" addBorderSegments",()=>u(P)),X(" order",()=>m(P,ee)),X(" insertSelfEdges",()=>Q(P)),X(" adjustCoordinateSystem",()=>d.adjust(P)),X(" position",()=>p(P)),X(" positionSelfEdges",()=>q(P)),X(" removeBorderNodes",()=>V(P)),X(" normalize.undo",()=>t.undo(P)),X(" fixupEdgeLabelCoords",()=>U(P)),X(" undoCoordinateSystem",()=>d.undo(P)),X(" translateGraph",()=>W(P)),X(" assignNodeIntersects",()=>B(P)),X(" reversePoints",()=>H(P)),X(" acyclic.undo",()=>e.undo(P))}function k(P,X){P.nodes().forEach(ee=>{let te=P.node(ee),re=X.node(ee);te&&(te.x=re.x,te.y=re.y,te.rank=re.rank,X.children(ee).length&&(te.width=re.width,te.height=re.height))}),P.edges().forEach(ee=>{let te=P.edge(ee),re=X.edge(ee);te.points=re.points,Object.hasOwn(re,"x")&&(te.x=re.x,te.y=re.y)}),P.graph().width=X.graph().width,P.graph().height=X.graph().height}let S=["nodesep","edgesep","ranksep","marginx","marginy"],_={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},w=["acyclicer","ranker","rankdir","align"],C=["width","height","rank"],N={width:0,height:0},O=["minlen","weight","width","height","labeloffset"],I={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},D=["labelpos"];function T(P){let X=new g({multigraph:!0,compound:!0}),ee=J(P.graph());return X.setGraph(Object.assign({},_,G(ee,S),h.pick(ee,w))),P.nodes().forEach(te=>{let re=J(P.node(te));const oe=G(re,C);Object.keys(N).forEach(de=>{oe[de]===void 0&&(oe[de]=N[de])}),X.setNode(te,oe),X.setParent(te,P.parent(te))}),P.edges().forEach(te=>{let re=J(P.edge(te));X.setEdge(te,Object.assign({},I,G(re,O),h.pick(re,D)))}),X}function L(P){let X=P.graph();X.ranksep/=2,P.edges().forEach(ee=>{let te=P.edge(ee);te.minlen*=2,te.labelpos.toLowerCase()!=="c"&&(X.rankdir==="TB"||X.rankdir==="BT"?te.width+=te.labeloffset:te.height+=te.labeloffset)})}function A(P){P.edges().forEach(X=>{let ee=P.edge(X);if(ee.width&&ee.height){let te=P.node(X.v),oe={rank:(P.node(X.w).rank-te.rank)/2+te.rank,e:X};h.addDummyNode(P,"edge-proxy",oe,"_ep")}})}function M(P){let X=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,X=Math.max(X,te.maxRank))}),P.graph().maxRank=X}function $(P){P.nodes().forEach(X=>{let ee=P.node(X);ee.dummy==="edge-proxy"&&(P.edge(ee.e).labelRank=ee.rank,P.removeNode(X))})}function W(P){let X=Number.POSITIVE_INFINITY,ee=0,te=Number.POSITIVE_INFINITY,re=0,oe=P.graph(),de=oe.marginx||0,se=oe.marginy||0;function Ee(we){let Ce=we.x,Be=we.y,Ge=we.width,Ye=we.height;X=Math.min(X,Ce-Ge/2),ee=Math.max(ee,Ce+Ge/2),te=Math.min(te,Be-Ye/2),re=Math.max(re,Be+Ye/2)}P.nodes().forEach(we=>Ee(P.node(we))),P.edges().forEach(we=>{let Ce=P.edge(we);Object.hasOwn(Ce,"x")&&Ee(Ce)}),X-=de,te-=se,P.nodes().forEach(we=>{let Ce=P.node(we);Ce.x-=X,Ce.y-=te}),P.edges().forEach(we=>{let Ce=P.edge(we);Ce.points.forEach(Be=>{Be.x-=X,Be.y-=te}),Object.hasOwn(Ce,"x")&&(Ce.x-=X),Object.hasOwn(Ce,"y")&&(Ce.y-=te)}),oe.width=ee-X+de,oe.height=re-te+se}function B(P){P.edges().forEach(X=>{let ee=P.edge(X),te=P.node(X.v),re=P.node(X.w),oe,de;ee.points?(oe=ee.points[0],de=ee.points[ee.points.length-1]):(ee.points=[],oe=re,de=te),ee.points.unshift(h.intersectRect(te,oe)),ee.points.push(h.intersectRect(re,de))})}function U(P){P.edges().forEach(X=>{let ee=P.edge(X);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(X=>{let ee=P.edge(X);ee.reversed&&ee.points.reverse()})}function V(P){P.nodes().forEach(X=>{if(P.children(X).length){let ee=P.node(X),te=P.node(ee.borderTop),re=P.node(ee.borderBottom),oe=P.node(ee.borderLeft[ee.borderLeft.length-1]),de=P.node(ee.borderRight[ee.borderRight.length-1]);ee.width=Math.abs(de.x-oe.x),ee.height=Math.abs(re.y-te.y),ee.x=oe.x+ee.width/2,ee.y=te.y+ee.height/2}}),P.nodes().forEach(X=>{P.node(X).dummy==="border"&&P.removeNode(X)})}function Y(P){P.edges().forEach(X=>{if(X.v===X.w){var ee=P.node(X.v);ee.selfEdges||(ee.selfEdges=[]),ee.selfEdges.push({e:X,label:P.edge(X)}),P.removeEdge(X)}})}function Q(P){var X=h.buildLayerMatrix(P);X.forEach(ee=>{var te=0;ee.forEach((re,oe)=>{var de=P.node(re);de.order=oe+te,(de.selfEdges||[]).forEach(se=>{h.addDummyNode(P,"selfedge",{width:se.label.width,height:se.label.height,rank:de.rank,order:oe+ ++te,e:se.e,label:se.label},"_se")}),delete de.selfEdges})})}function q(P){P.nodes().forEach(X=>{var ee=P.node(X);if(ee.dummy==="selfedge"){var te=P.node(ee.e.v),re=te.x+te.width/2,oe=te.y,de=ee.x-re,se=te.height/2;P.setEdge(ee.e,ee.label),P.removeNode(X),ee.label.points=[{x:re+2*de/3,y:oe-se},{x:re+5*de/6,y:oe-se},{x:re+de,y:oe},{x:re+5*de/6,y:oe+se},{x:re+2*de/3,y:oe+se}],ee.label.x=ee.x,ee.label.y=ee.y}})}function G(P,X){return h.mapValues(h.pick(P,X),Number)}function J(P){var X={};return P&&Object.entries(P).forEach(([ee,te])=>{typeof ee=="string"&&(ee=ee.toLowerCase()),X[ee]=te}),X}return vy}var by,bj;function jQ(){if(bj)return by;bj=1;let e=Xn(),t=Oi().Graph;by={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,u)=>{let d="layer"+u;o.setNode(d,{rank:"same"}),a.reduce((m,p)=>(o.setEdge(m,p,{style:"invis"}),p))}),o}return by}var _y,_j;function EQ(){return _j||(_j=1,_y="1.1.8"),_y}var ky,kj;function NQ(){return kj||(kj=1,ky={graphlib:Oi(),layout:CQ(),debug:jQ(),util:{time:Xn().time,notime:Xn().notime},version:EQ()}),ky}var IQ=NQ();const Sj=ta(IQ);function TQ(e,t,n={}){const r=new Sj.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)),Sj.layout(r),e.map(a=>{const{x:u,y:d}=r.node(a.id);return{...a,position:{x:u-i/2,y:d-o/2}}})}const RQ={roleNode:GZ},AQ=j.forwardRef(function(t,n){return c.jsx(IR,{children:c.jsx(MQ,{...t,forwardedRef:n})})});function MQ({roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:r,onSelectRole:i,onReparent:o,readOnly:a,forwardedRef:u}){const d=j.useMemo(()=>{const A=new Map;for(const M of t){const $=M.role_ids?.length?M.role_ids:[M.role_id];for(const W of $){if(!W)continue;const B=A.get(W)??[];B.push(M),A.set(W,B)}}return A},[t]),m=j.useCallback(A=>n?n[A]??[]:(d.get(A)??[]).filter(M=>!M.is_default_employee).map(M=>M.name).filter(Boolean),[d,n]),[p,h]=j.useState(0),g=j.useMemo(()=>e.map(A=>A.role_id).sort().join("|"),[e]),y=j.useRef(g);j.useEffect(()=>{y.current!==g&&(y.current=g,h(A=>A+1))},[g]),j.useImperativeHandle(u,()=>({autoLayout:()=>h(A=>A+1)}),[]);const[v,k]=j.useState(null),[S,_]=j.useState({});j.useEffect(()=>{_({})},[p]);const w=j.useMemo(()=>{const A={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}},M=e.map(U=>({id:U.role_id,type:"roleNode",position:{x:0,y:0},draggable:!0,data:{roleId:U.role_id,name:U.name,responsibility:U.responsibility,icon:U.icon??null,employeeCount:m(U.role_id).length,employeeNames:m(U.role_id),isOwner:!1,isSelected:!1,isDropTarget:!1}})),$=[A,...M],W=e.map(U=>({id:`e-${U.reports_to}-${U.role_id}`,source:U.reports_to,target:U.role_id,type:"smoothstep"}));return{nodes:TQ($,W),edges:W}},[p,a]),C=j.useMemo(()=>w.nodes.map(A=>{if(A.id==="owner")return A;const M=e.find(W=>W.role_id===A.id);if(!M)return A;const $=S[A.id];return{...A,position:$??A.position,draggable:!0,data:{...A.data,name:M.name,responsibility:M.responsibility,icon:M.icon??null,employeeCount:m(M.role_id).length,employeeNames:m(M.role_id),isSelected:M.role_id===r,isDropTarget:M.role_id===v}}}),[w.nodes,e,d,m,r,v,a,S]),[N,O]=j.useState(C);j.useEffect(()=>{O(C)},[C]);const I=j.useCallback(A=>{O(M=>iR(A,M))},[]),D=j.useCallback((A,M)=>{if(a)return;const $=220,W=80,B={x:M.position.x+$/2,y:M.position.y+W/2},U=N.find(H=>H.id===M.id?!1:B.x>=H.position.x&&B.x<=H.position.x+$&&B.y>=H.position.y&&B.y<=H.position.y+W);k(U?.id??null)},[N,a]),T=j.useCallback((A,M)=>{const $=v;k(null);const W=()=>_(B=>({...B,[M.id]:{x:M.position.x,y:M.position.y}}));if(a||!$||$===M.id||BR(e,M.id,$)){W();return}o(M.id,$),h(B=>B+1)},[v,e,a,o]),L=j.useCallback((A,M)=>{i(M.id==="owner"?null:M.id)},[i]);return c.jsx("div",{style:{width:"100%",height:"100%"},children:c.jsxs(gZ,{nodes:N,edges:w.edges,nodeTypes:RQ,onNodesChange:I,onNodeDrag:D,onNodeDragStop:T,onNodeClick:L,fitView:!0,fitViewOptions:{padding:.32,minZoom:.45,maxZoom:1.2},nodesConnectable:!1,edgesFocusable:!1,style:{width:"100%",height:"100%"},children:[c.jsx(_Z,{gap:28,size:1,color:"rgba(240, 237, 232, 0.10)"}),c.jsx(NZ,{showInteractive:!1}),c.jsx(HZ,{pannable:!0,nodeStrokeWidth:0,maskColor:"rgba(12, 17, 27, 0.6)"})]})})}function BR(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||BR(e,i,n))return!0;return!1}function DQ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onUpdateRole:o,onDeleteRole:a,savedOrgsList:u,activeSavedOrg:d,currentOrgVersion:m,versionAtLoad:p,onSavedOrgsList:h,onSavedOrgSaveAs:g,onSavedOrgLoad:y,onSavedOrgDelete:v}){const[k,S]=j.useState("canvas"),[_,w]=j.useState(null),C=j.useRef(null),N=j.useMemo(()=>e.find(A=>A.role_id===_)??null,[e,_]),O=j.useCallback((A,M)=>{r&&o(A,{reports_to:M})},[o,r]),I=j.useCallback(()=>{C.current?.autoLayout()},[]),D=j.useCallback(()=>{if(!r)return;const A=new Set(e.map(W=>W.role_id));let M="new_role",$=1;for(;A.has(M);)$+=1,M=`new_role_${$}`;i(M,"New Role","","owner",null),w(M)},[e,i,r]),T=j.useCallback(()=>{if(!r||!N)return;const A=new Set(e.map(W=>W.role_id));let M=`${N.role_id}_copy`,$=1;for(;A.has(M);)$+=1,M=`${N.role_id}_copy_${$}`;i(M,`${N.name} (copy)`,N.responsibility,N.reports_to,N.icon),w(M)},[e,i,N,r]),L=j.useRef(null);return j.useEffect(()=>{const A=M=>{const $=M.target;if(!($&&($.tagName==="INPUT"||$.tagName==="TEXTAREA"||$.tagName==="SELECT"||$.isContentEditable))&&!(L.current&&!L.current.contains($))){if(M.key==="Escape"&&_){w(null),M.preventDefault();return}if(M.key==="Delete"&&_&&r){a(_),w(null),M.preventDefault();return}if((M.metaKey||M.ctrlKey)&&M.key.toLowerCase()==="d"&&_&&r){T(),M.preventDefault();return}if(M.key.toLowerCase()==="f"&&k==="canvas"){I(),M.preventDefault();return}}};return window.addEventListener("keydown",A),()=>window.removeEventListener("keydown",A)},[_,r,k,a,I,T]),c.jsxs("div",{className:"se-container",ref:L,children:[c.jsxs("div",{className:"se-toolbar",children:[c.jsxs("div",{className:"se-view-switcher",role:"tablist","aria-label":"Editor view",children:[c.jsx("button",{role:"tab","aria-selected":k==="canvas",className:`se-view-btn${k==="canvas"?" is-active":""}`,onClick:()=>S("canvas"),children:"Canvas"}),c.jsx("button",{role:"tab","aria-selected":k==="table",className:`se-view-btn${k==="table"?" is-active":""}`,onClick:()=>S("table"),children:"Table"})]}),c.jsxs("div",{className:`se-toolbar-actions${r?"":" se-toolbar-actions--readonly"}`,children:[r?c.jsxs("div",{className:"se-saved-org-control",children:[c.jsx("span",{className:"se-toolbar-label",children:"Saved org"}),c.jsx(BV,{savedOrgs:u??null,activeName:d??null,isDirty:p!=null&&(m??0)!==p,onRefresh:h??(()=>{}),onSaveAs:g??(()=>{}),onLoad:y??(()=>{}),onDelete:v??(()=>{})})]}):c.jsx("span",{className:"se-readonly-pill",children:"Read-only corporate"}),c.jsx("div",{className:"se-toolbar-divider","aria-hidden":!0}),k==="canvas"&&c.jsx("button",{className:"btn btn-ghost btn-sm",onClick:I,children:"Auto-layout"}),r&&c.jsx("button",{className:"btn btn-primary btn-sm",onClick:D,children:"+ Add role"})]})]}),c.jsxs("div",{className:"se-body",children:[k==="canvas"?c.jsx(AQ,{ref:C,roles:e,employees:t,sessionRecruitmentByRole:n,selectedRoleId:_,onSelectRole:w,onReparent:O,readOnly:!r}):c.jsx($U,{roles:e,employees:t,selectedIds:_?[_]:[],onSelectRow:A=>w(A),onUpdateRole:o,onDeleteRole:a,readOnly:!r}),N&&c.jsx(UV,{role:N,allRoles:e,employees:t,readOnly:!r,onUpdateRole:o,onDeleteRole:A=>{a(A),w(null)},onClose:()=>w(null)})]})]})}const Wi={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 OQ({onComplete:e,onSwitchToTab:t}){const[n,r]=j.useState(1),[i,o]=j.useState([{name:"",resp:"",parent:"owner"}]),a=()=>o([...i,{name:"",resp:"",parent:"owner"}]),u=(g,y,v)=>{const k=[...i];k[g][y]=v,o(k)},d=g=>{i.length<=1||o(i.filter((y,v)=>v!==g))},m=i.filter(g=>g.name.trim()),p=m.map(g=>g.name.trim()).filter(Boolean),h=()=>{e(m.map(g=>({name:g.name.trim(),responsibility:g.resp.trim(),reportsTo:g.parent})))};return c.jsxs("div",{className:"qs-wizard",children:[c.jsxs("div",{className:"qs-header",children:[c.jsx("img",{src:Wi.rocket,alt:"",className:"qs-header-icon"}),c.jsxs("div",{children:[c.jsx("h3",{className:"qs-header-title",children:"Build Your Team"}),c.jsxs("p",{className:"qs-header-sub",children:["Create an org team in a few steps, or ",c.jsx("button",{className:"qs-link-btn",onClick:()=>t("architecture"),children:"use a template"})]})]})]}),c.jsx("div",{className:"qs-progress",children:[{n:1,icon:Wi.people,label:"Team Members"},{n:2,icon:Wi.check,label:"Preview"}].map(g=>c.jsxs("div",{className:`qs-step${n===g.n?" qs-step-active":n>g.n?" qs-step-done":""}`,children:[c.jsx("img",{src:g.icon,alt:"",className:"qs-step-icon"}),c.jsx("span",{children:g.label})]},g.n))}),n===1&&c.jsxs("div",{className:"qs-panel",children:[c.jsx("h4",{children:"Who's on your team?"}),c.jsx("p",{className:"qs-hint",children:"Add each team member with their name and what they do."}),c.jsx("div",{className:"qs-members",children:i.map((g,y)=>c.jsxs("div",{className:"qs-member-row",children:[c.jsx("input",{className:"qs-member-name",value:g.name,placeholder:"Role name (e.g. Engineer)",onChange:v=>u(y,"name",v.target.value)}),c.jsx("input",{className:"qs-member-resp",value:g.resp,placeholder:"What do they do?",onChange:v=>u(y,"resp",v.target.value)}),c.jsxs("select",{className:"qs-member-parent",value:g.parent,onChange:v=>u(y,"parent",v.target.value),children:[c.jsx("option",{value:"owner",children:"Reports to you"}),p.filter(v=>v!==g.name.trim()).map(v=>c.jsx("option",{value:v,children:`Managed by ${v}`},v))]}),i.length>1&&c.jsx("button",{className:"qs-remove-btn",onClick:()=>d(y),title:"Remove",children:c.jsx("img",{src:Wi.trash,alt:"",className:"qs-remove-icon"})})]},y))}),c.jsxs("button",{className:"qs-add-member",onClick:a,children:[c.jsx("img",{src:Wi.addPerson,alt:"",className:"qs-add-icon"})," Add another member"]}),c.jsxs("div",{className:"qs-nav",children:[c.jsx("span",{}),c.jsx("button",{className:"oc-btn-primary",onClick:()=>r(2),disabled:m.length===0,children:"Next: Preview →"})]})]}),n===2&&c.jsxs("div",{className:"qs-panel",children:[c.jsx("h4",{children:"Your team at a glance"}),c.jsxs("div",{className:"qs-preview",children:[c.jsxs("div",{className:"qs-preview-section",children:[c.jsxs("h5",{children:["Team (",m.length," members)"]}),m.map((g,y)=>c.jsxs("div",{className:"qs-preview-member",children:[c.jsx("strong",{children:g.name}),g.resp&&c.jsxs("span",{className:"qs-preview-resp",children:[" — ",g.resp]}),c.jsx("span",{className:"qs-preview-parent",children:g.parent==="owner"?" (reports to you)":` (managed by ${g.parent})`})]},y))]}),c.jsxs("div",{className:"qs-preview-section",children:[c.jsx("h5",{children:"Actor Runtime"}),c.jsx("p",{children:"Seat routing and delegation will be derived from your reporting structure and any team seats you configure later."})]})]}),c.jsxs("div",{className:"qs-nav",children:[c.jsx("button",{className:"oc-btn-ghost",onClick:()=>r(1),children:"← Back"}),c.jsx("button",{className:"oc-btn-primary qs-create-btn",onClick:h,children:"Create Team"})]})]})]})}function LQ({roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onBulkAddRoles:o,onUpdateRole:a,onDeleteRole:u,onExport:d,onImportEmployee:m,onResetArchitecture:p,onSwitchToTab:h,savedOrgsList:g,activeSavedOrg:y,currentOrgVersion:v,versionAtLoad:k,onSavedOrgsList:S,onSavedOrgSaveAs:_,onSavedOrgLoad:w,onSavedOrgDelete:C}){const[N,O]=j.useState(!1),[I,D]=j.useState(!1),[T,L]=j.useState(""),[A,M]=j.useState(""),[$,W]=j.useState(""),[B,U]=j.useState("1.0.0"),H=j.useMemo(()=>{const X=new Map;for(const ee of t){const te=ee.role_ids?.length?ee.role_ids:[ee.role_id];for(const re of te){if(!re)continue;const oe=X.get(re)||[];oe.push(ee),X.set(re,oe)}}return X},[t]),V=()=>{!T.trim()||!A.trim()||(d({package_id:T.trim(),name:A.trim(),description:$,version:B}),D(!1),L(""),M(""),W(""),U("1.0.0"))},Y=j.useRef(null);j.useEffect(()=>{N&&e.length>0&&(O(!1),Y.current&&(clearTimeout(Y.current),Y.current=null))},[e.length,N]),j.useEffect(()=>{if(N)return Y.current=setTimeout(()=>O(!1),1e4),()=>{Y.current&&clearTimeout(Y.current)}},[N]);const Q=X=>{const ee=new Map,te=new Set,re=[];for(const oe of X){let de=oe.name.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/^-+|-+$/g,"");if(!de)continue;let se=de,Ee=2;for(;te.has(se);)se=`${de}-${Ee++}`;te.add(se),ee.set(oe.name,se);const we=oe.reportsTo==="owner"?"owner":ee.get(oe.reportsTo)||"owner";re.push({role_id:se,name:oe.name,responsibility:oe.responsibility,reports_to:we})}if(re.length!==0)if(o)O(!0),o(re);else{for(const oe of re)i(oe.role_id,oe.name,oe.responsibility,oe.reports_to);O(!0)}},q=()=>{confirm("This will remove all org roles, employees, and work-item templates. Continue?")&&p?.()},G=j.useMemo(()=>{let X=0;for(const ee of e)(H.get(ee.role_id)??[]).length>0&&(X+=1);return X},[e,H]),J=j.useMemo(()=>t.filter(X=>X.linked_agent_id).length,[t]),P=Math.max(0,e.length-G);return r&&e.length===0?c.jsx("div",{className:"team-view",children:N?c.jsx("div",{className:"qs-wizard",children:c.jsxs("div",{className:"qs-loading",children:[c.jsx("span",{className:"spinner-inline"})," Setting up your team..."]})}):c.jsx(OQ,{onComplete:Q,onSwitchToTab:h})}):c.jsxs("div",{className:"team-view",children:[c.jsxs("div",{className:`team-command-bar${r?" team-command-bar--editable":" team-command-bar--readonly"}`,children:[c.jsxs("div",{className:"team-command-copy",children:[c.jsx("span",{className:"team-command-eyebrow",children:r?"Saved org workspace":"Corporate baseline"}),c.jsx("span",{className:"team-command-title",children:r?"Editable company architecture":"Built-in company architecture"})]}),c.jsxs("div",{className:"team-command-metrics",children:[c.jsxs("span",{children:[c.jsx("b",{children:G})," staffed roles"]}),c.jsxs("span",{children:[c.jsx("b",{children:P})," vacant"]}),c.jsxs("span",{children:[c.jsx("b",{children:J})," in office"]})]}),r&&c.jsxs("div",{className:"team-command-actions",children:[c.jsxs("button",{className:"myorg-inline-btn",onClick:()=>h("employees"),children:[c.jsx("img",{src:Wi.addPerson,alt:"",className:"myorg-inline-icon"})," Hire Talent"]}),c.jsx("button",{className:"btn btn-ghost btn-sm",onClick:()=>D(!0),children:"Export Package"}),p&&c.jsxs("button",{className:"myorg-reset-btn",onClick:q,children:[c.jsx("img",{src:Wi.trash,alt:"",className:"myorg-reset-icon"})," Reset"]})]})]}),!r&&c.jsx("div",{className:"team-readonly-strip",children:"Corporate is fixed and read-only; saved company architectures are edited separately."}),c.jsx(DQ,{roles:e,employees:t,sessionRecruitmentByRole:n,isCustomMode:r,onAddRole:i,onUpdateRole:a,onDeleteRole:u,savedOrgsList:g??null,activeSavedOrg:y??null,currentOrgVersion:v??0,versionAtLoad:k??null,onSavedOrgsList:S,onSavedOrgSaveAs:_,onSavedOrgLoad:w,onSavedOrgDelete:C}),I&&c.jsxs("div",{className:"myorg-form",children:[c.jsx("h4",{className:"myorg-form-title",children:"Export as .opcpkg"}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Package ID"}),c.jsx("input",{value:T,onChange:X=>L(X.target.value),placeholder:"my-architecture"})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Name"}),c.jsx("input",{value:A,onChange:X=>M(X.target.value),placeholder:"My Architecture"})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Description"}),c.jsx("input",{value:$,onChange:X=>W(X.target.value),placeholder:"An org team structure"})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Version"}),c.jsx("input",{value:B,onChange:X=>U(X.target.value)})]}),c.jsxs("div",{className:"oc-form-actions",children:[c.jsx("button",{className:"oc-btn-primary",onClick:V,disabled:!T.trim()||!A.trim(),children:"Export"}),c.jsx("button",{className:"oc-btn-ghost",onClick:()=>D(!1),children:"Cancel"})]})]}),c.jsxs("div",{className:"myorg-section",children:[c.jsxs("div",{className:"myorg-section-header",children:[c.jsx("img",{src:Wi.team,alt:"",className:"myorg-section-icon"}),c.jsx("h3",{className:"myorg-section-title",children:"Team Roster"}),c.jsxs("span",{className:"myorg-section-count",children:[t.length," members"]}),c.jsx("span",{className:"myorg-section-spacer"}),c.jsxs("span",{className:"myorg-section-note",children:[G,"/",e.length," staffed"]})]}),c.jsx("div",{className:"team-roster-grid",children:e.map(X=>{const ee=H.get(X.role_id)||[];return c.jsxs("div",{className:"team-roster-card",children:[c.jsxs("div",{className:"team-roster-card-header",children:[c.jsx("img",{src:Du(X.icon),alt:"",className:"team-roster-card-icon"}),c.jsx("span",{className:"team-roster-role-name",children:X.name}),c.jsx("span",{className:"team-roster-count",children:ee.length||"vacant"})]}),ee.length>0?ee.map(te=>c.jsxs("div",{className:"team-roster-emp",children:[c.jsx("img",{src:Wi.person,alt:"",className:"team-roster-emp-avatar"}),c.jsxs("div",{className:"team-roster-emp-info",children:[c.jsx("span",{className:"team-roster-emp-name",children:te.name}),c.jsx("span",{className:`team-roster-seniority team-roster-seniority--${te.seniority}`,children:te.seniority})]}),te.linked_agent_id?c.jsx("span",{className:"team-roster-badge team-roster-badge--active",children:"In Office"}):m&&te.role_id?c.jsxs("button",{className:"team-roster-deploy-btn",onClick:()=>m(te.employee_id),title:"Add this employee to the office workspace",children:[c.jsx("img",{src:Wi.deploy,alt:"",className:"team-roster-deploy-icon"})," Deploy"]}):null]},te.employee_id)):c.jsxs("div",{className:"team-roster-vacant",children:[c.jsx("span",{className:"team-roster-vacant-text",children:"No members yet"}),r&&c.jsx("button",{className:"team-roster-hire-btn",onClick:()=>h("employees"),children:"Hire"})]})]},X.role_id)})})]})]})}function rh(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 zQ(e){const t=rh(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 PQ(e){const n=rh(e)?.work_item_profile;return n&&typeof n=="object"?String(n.gate_owner_role_id??"").trim():""}function BQ(e){const t=rh(e),n=typeof t?.confidence=="number"?t.confidence:void 0;return typeof n=="number"?`${Math.round(n*100)}%`:""}function $Q({roles:e,runtimeTeams:t,runtimeSeats:n,workItems:r,frontier:i,companyProfile:o,runtimePolicy:a,finalDeciderRoleId:u,topLevelRoleIds:d,readOnly:m=!1,onUpdateOrgStrategy:p,onUpdateRuntimePolicy:h}){const g=e.filter(S=>(d??[]).includes(S.role_id)),y=u||(g.length===1?g[0]?.role_id:""),v=g.length>1&&!y,k=new Map(e.map(S=>[S.role_id,S.name]));return c.jsxs("div",{className:"wfe-container",children:[c.jsxs("div",{className:"wfe-header",children:[c.jsx("h3",{className:"wfe-title",children:"Actor Runtime"}),c.jsx("span",{className:"wfe-profile-badge",children:o})]}),c.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:c.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Final decider"}),c.jsxs("select",{value:y,disabled:m,onChange:S=>{m||p?.({final_decider_role_id:S.target.value||null})},children:[c.jsx("option",{value:"",children:g.length>1?"Select top-level role":"Auto-select only top-level role"}),g.map(S=>c.jsx("option",{value:S.role_id,children:S.name},S.role_id))]})]}),c.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:"Runtime wakeups, delegation, approvals, and recovery are seat-scoped."}),v&&c.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?c.jsx("div",{className:"myorg-collapsible",style:{margin:"0 0 8px"},children:c.jsxs("div",{className:"myorg-collapsible-body",style:{display:"block"},children:[c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Runtime"}),c.jsxs("div",{children:[i.status||"running",i.run_id?` (${i.run_id.slice(0,8)})`:""]})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Frontier"}),c.jsxs("div",{children:[i.running_count??0," running, ",i.ready_count??0," ready, ",i.blocked_count??0," blocked, ",i.waiting_count??0," waiting"]})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Teams"}),c.jsx("div",{children:t.length})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Seats"}),c.jsx("div",{children:n.length})]}),c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Work items"}),c.jsx("div",{children:r.length})]}),r.length>0&&c.jsx("div",{style:{fontSize:12,color:"var(--text-secondary)"},children:r.slice(0,6).map(S=>{const _=rh(S),w=typeof _?.normalized_state=="string"?_.normalized_state:"",C=typeof _?.blocked_reason=="string"?_.blocked_reason:S.blocked_reason??"",N=PQ(S),O=zQ(S),I=BQ(S),D=[C?`waiting ${C}`:"",N?`gate ${k.get(N)??N}`:"",O.length?`signals ${O.join(", ")}`:"",I?`confidence ${I}`:"",w==="invalidated"?"invalidated":""].filter(Boolean);return c.jsxs("div",{style:{marginBottom:6},children:[c.jsxs("div",{children:[k.get(S.role_id)??S.role_id,": ",S.title," [",S.phase,"]",S.kanban_column&&c.jsxs("span",{style:{opacity:.5},children:[" · ",S.kanban_column]}),S.batch_id&&c.jsxs("span",{style:{opacity:.5},children:[" batch:",S.batch_id]}),w&&w!==S.phase&&c.jsxs("span",{style:{opacity:.7},children:[" state:",w]})]}),D.length>0&&c.jsx("div",{style:{marginLeft:12,opacity:.85},children:D.join(" • ")})]},S.work_item_id)})})]})}):null]})}function HQ({pkg:e,onUninstall:t,uninstallingId:n}){const r=n===e.package_id;return c.jsxs("div",{className:"pkg-card",children:[c.jsxs("div",{className:"pkg-card-header",children:[c.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"}),c.jsxs("div",{className:"pkg-card-title-wrap",children:[c.jsx("span",{className:"pkg-card-name",children:e.name||e.package_id}),c.jsxs("span",{className:"pkg-card-version",children:["v",e.version]})]})]}),c.jsxs("div",{className:"pkg-card-stats",children:[c.jsxs("span",{className:"pkg-card-stat",children:[c.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"]}),c.jsxs("span",{className:"pkg-card-stat",children:[c.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&&c.jsxs("div",{className:"pkg-card-date",children:["Installed ",new Date(e.installed_at).toLocaleDateString()]}),t&&c.jsx("div",{className:"pkg-card-actions",children:c.jsx("button",{className:"pkg-btn pkg-btn-danger",disabled:r,onClick:i=>{i.stopPropagation(),t(e.package_id)},children:r?"Removing...":"Uninstall"})})]})}function Sy({icon:e,title:t,count:n,extra:r,children:i,defaultExpanded:o=!1}){const[a,u]=j.useState(o);return c.jsxs("div",{className:"myorg-collapsible",children:[c.jsxs("button",{className:"myorg-collapsible-toggle",onClick:()=>u(!a),children:[c.jsx("span",{className:"myorg-toggle-icon",children:a?"▾":"▸"}),c.jsx("img",{src:e,alt:"",className:"myorg-section-icon"}),c.jsx("span",{className:"myorg-collapsible-title",children:t}),c.jsx("span",{className:"myorg-collapsible-count",children:n}),r&&c.jsx("span",{className:"myorg-collapsible-extra",onClick:d=>d.stopPropagation(),children:r})]}),a&&c.jsx("div",{className:"myorg-collapsible-body",children:i})]})}const qi={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"},C0={pipeline:"Pipeline",hub_spoke:"Hub & Spoke",review_loop:"Review Loop",hierarchical:"Hierarchical",flat:"Flat Team"};function FQ({presets:e,installedIds:t,previewData:n,applyingPresetId:r,readOnly:i,onPreview:o,onApplyPreset:a,onClearPreview:u,installedPackages:d,channels:m,reorgProposals:p,isCustomMode:h,onReorgDecide:g,onMarketInstall:y,onMarketUninstall:v}){const[k,S]=j.useState(""),[_,w]=j.useState(null),[C,N]=j.useState(null),[O,I]=j.useState(!1),[D,T]=j.useState(""),[L,A]=j.useState(null),M=j.useMemo(()=>{const H=new Set;for(const V of e)V.category&&H.add(V.category);return Array.from(H).sort()},[e]),$=j.useMemo(()=>{const H=new Set;for(const V of e)V.collaboration_pattern&&H.add(V.collaboration_pattern);return Array.from(H).sort()},[e]),W=j.useMemo(()=>{let H=e;if(_&&(H=H.filter(V=>V.category===_)),C&&(H=H.filter(V=>V.collaboration_pattern===C)),k.trim()){const V=k.trim().toLowerCase();H=H.filter(Y=>Y.name.toLowerCase().includes(V)||Y.description.toLowerCase().includes(V)||Y.tags.some(Q=>Q.toLowerCase().includes(V))||(C0[Y.collaboration_pattern]||"").toLowerCase().includes(V))}return H},[e,_,C,k]),B=()=>{D.trim()&&(y(D.trim(),"namespace"),I(!1),T(""))},U=H=>{confirm("Uninstall this package? Roles and work-item templates from this package will be removed.")&&(A(H),v(H),setTimeout(()=>A(null),3e3))};return c.jsxs("div",{className:"mkt-container","data-testid":"architecture-marketplace",children:[c.jsxs("div",{className:"mkt-toolbar",children:[c.jsxs("div",{className:"mkt-search-wrap",children:[c.jsx("img",{src:qi.search,alt:"",className:"mkt-search-icon"}),c.jsx("input",{className:"mkt-search",placeholder:"Search architectures...",value:k,onChange:H=>S(H.target.value)})]}),c.jsxs("span",{className:"mkt-count",children:[W.length," architectures"]})]}),c.jsxs("div",{className:"mkt-filters",children:[M.length>0&&c.jsxs("div",{className:"mkt-pill-row",children:[c.jsx("button",{className:`mkt-pill${_?"":" active"}`,onClick:()=>w(null),children:"All"}),M.map(H=>c.jsx("button",{className:`mkt-pill${_===H?" active":""}`,onClick:()=>w(_===H?null:H),children:H},H))]}),$.length>0&&c.jsxs("div",{className:"mkt-pill-row",children:[c.jsx("button",{className:`mkt-pill mkt-pill-pattern${C?"":" active"}`,onClick:()=>N(null),children:"All Patterns"}),$.map(H=>c.jsx("button",{className:`mkt-pill mkt-pill-pattern${C===H?" active":""}`,onClick:()=>N(C===H?null:H),children:C0[H]||H},H))]})]}),W.length>0?c.jsxs("div",{className:"mkt-section",children:[c.jsxs("div",{className:"mkt-section-header",children:[c.jsx("img",{src:qi.arch,alt:"",className:"mkt-section-icon"}),c.jsx("h3",{className:"mkt-section-title",children:"Architecture Blueprints"}),c.jsx("span",{className:"mkt-section-count",children:W.length})]}),c.jsx("div",{className:"mkt-arch-grid",children:W.map(H=>c.jsx(VQ,{preset:H,isInstalled:t.has(H.id),isApplying:r===H.id,readOnly:i,onPreview:()=>o(H.id),onApply:()=>a(H.id,"namespace")},H.id))})]}):c.jsx("div",{className:"mkt-empty",children:c.jsx("p",{children:"No architectures match your search."})}),c.jsxs(Sy,{icon:qi.packages,title:"Installed Packages",count:d.length,extra:h?c.jsxs("button",{className:"myorg-inline-btn",onClick:()=>I(!O),children:[c.jsx("img",{src:qi.importPkg,alt:"",className:"myorg-inline-icon"})," Import"]}):void 0,children:[h&&O&&c.jsxs("div",{className:"myorg-form",children:[c.jsxs("div",{className:"oc-form-row",children:[c.jsx("label",{children:"Path"}),c.jsx("input",{value:D,onChange:H=>T(H.target.value),placeholder:"/path/to/package.opcpkg"})]}),c.jsxs("div",{className:"oc-form-actions",children:[c.jsx("button",{className:"oc-btn-primary",onClick:B,disabled:!D.trim(),children:"Install"}),c.jsx("button",{className:"oc-btn-ghost",onClick:()=>I(!1),children:"Cancel"})]})]}),d.length>0?c.jsx("div",{className:"pkg-grid",children:d.map(H=>c.jsx(HQ,{pkg:H,onUninstall:h?U:void 0,uninstallingId:L},H.package_id))}):c.jsx("div",{className:"myorg-empty-hint",children:"No packages installed."})]}),c.jsx(Sy,{icon:qi.channels,title:"Channels & Connectors",count:m.length,children:m.length>0?c.jsx("div",{className:"org-channels-grid",children:m.map(H=>c.jsxs("div",{className:`org-channel-card${H.running?" org-ch-running":""}${H.enabled?"":" org-ch-disabled"}`,children:[c.jsxs("div",{className:"org-ch-header",children:[c.jsx("span",{className:`org-ch-dot${H.running?" running":H.ready?" ready":H.configured?" configured":""}`}),c.jsx("span",{className:"org-ch-name",children:H.name})]}),c.jsxs("div",{className:"org-ch-status-row",children:[H.enabled&&c.jsx("span",{className:"org-ch-badge org-ch-enabled",children:"enabled"}),H.running&&c.jsx("span",{className:"org-ch-badge org-ch-running-badge",children:"running"}),!H.enabled&&c.jsx("span",{className:"org-ch-badge org-ch-off",children:"disabled"})]})]},H.name))}):c.jsx("div",{className:"myorg-empty-hint",children:"No channels configured."})}),p.length>0&&c.jsx(Sy,{icon:qi.reorg,title:"Reorg Proposals",count:p.length,children:c.jsx("div",{className:"org-reorg-list",children:p.map(H=>{const V=H.status==="proposed";return c.jsxs("div",{className:`org-reorg-card org-reorg-${H.status}`,children:[c.jsxs("div",{className:"org-reorg-header",children:[c.jsx("span",{className:"org-reorg-title",children:H.title||H.summary||"Untitled"}),c.jsx("span",{className:"org-reorg-status",children:H.status})]}),H.summary&&c.jsx("div",{className:"org-reorg-summary",children:H.summary}),V&&h&&c.jsxs("div",{className:"org-reorg-actions",children:[c.jsx("button",{className:"org-reorg-approve",onClick:()=>g(H.proposal_id,!0),children:"Approve"}),c.jsx("button",{className:"org-reorg-deny",onClick:()=>g(H.proposal_id,!1),children:"Deny"})]})]},H.proposal_id)})})}),n&&c.jsx(UQ,{data:n,isInstalled:t.has(n.id),isApplying:r===n.id,onApply:()=>a(n.id,"namespace"),onClose:u})]})}function VQ({preset:e,isInstalled:t,isApplying:n,readOnly:r,onPreview:i,onApply:o}){const a=C0[e.collaboration_pattern]||e.collaboration_pattern;return c.jsxs("div",{className:"mkt-arch-card",style:{borderLeftColor:e.color||"var(--accent)"},onClick:i,children:[c.jsxs("div",{className:"mkt-arch-header",children:[c.jsx("span",{className:"mkt-arch-emoji",children:e.emoji}),c.jsxs("div",{className:"mkt-arch-title-wrap",children:[c.jsx("span",{className:"mkt-arch-name",children:e.name}),c.jsxs("div",{className:"mkt-arch-badges",children:[c.jsx("span",{className:"mkt-arch-category",children:e.category}),e.collaboration_pattern&&c.jsx("span",{className:"mkt-arch-pattern",children:a})]})]})]}),e.dag_summary&&c.jsx("div",{className:"mkt-arch-dag-summary",children:e.dag_summary}),c.jsx("div",{className:"mkt-arch-desc",children:e.description}),c.jsxs("div",{className:"mkt-arch-stats",children:[c.jsxs("span",{className:"mkt-arch-stat",children:[e.roles_count," roles"]}),c.jsxs("span",{className:"mkt-arch-stat",children:[e.work_item_templates_count," templates"]}),e.gates_count>0&&c.jsxs("span",{className:"mkt-arch-stat",children:[e.gates_count," checkpoints"]}),e.team_size&&c.jsxs("span",{className:"mkt-arch-stat",children:[e.team_size," people"]})]}),e.tags.length>0&&c.jsx("div",{className:"mkt-arch-tags",children:e.tags.slice(0,4).map(u=>c.jsx("span",{className:"mkt-tag",children:u},u))}),c.jsxs("div",{className:"mkt-arch-actions",children:[t?c.jsx("span",{className:"mkt-installed-badge",children:"Installed"}):r?null:c.jsx("button",{className:"mkt-btn mkt-btn-primary mkt-btn-sm",disabled:n,onClick:u=>{u.stopPropagation(),o()},children:n?"Applying...":"Use This"}),c.jsx("button",{className:"mkt-btn mkt-btn-ghost mkt-btn-sm",onClick:u=>{u.stopPropagation(),i()},children:"Preview"})]})]})}function UQ({data:e,isInstalled:t,isApplying:n,onApply:r,onClose:i}){return c.jsx("div",{className:"mkt-modal-overlay",onClick:i,children:c.jsxs("div",{className:"mkt-modal",onClick:o=>o.stopPropagation(),children:[c.jsxs("div",{className:"mkt-modal-header",style:{borderBottomColor:e.color||"var(--border)"},children:[c.jsx("span",{className:"mkt-modal-emoji",children:e.emoji}),c.jsxs("div",{children:[c.jsx("h2",{className:"mkt-modal-name",children:e.name}),c.jsx("span",{className:"mkt-modal-category",children:e.category})]}),c.jsx("button",{className:"mkt-modal-close",onClick:i,children:"×"})]}),c.jsxs("div",{className:"mkt-modal-body",children:[c.jsx("p",{className:"mkt-modal-desc",children:e.description}),e.tags.length>0&&c.jsxs("div",{className:"mkt-modal-section",children:[c.jsx("div",{className:"mkt-modal-label",children:"Tags"}),c.jsx("div",{className:"mkt-modal-tags",children:e.tags.map(o=>c.jsx("span",{className:"mkt-tag",children:o},o))})]}),c.jsxs("div",{className:"mkt-modal-section",children:[c.jsxs("div",{className:"mkt-modal-label",children:["Roles (",e.roles.length,")"]}),c.jsx("div",{className:"mkt-role-list",children:e.roles.map(o=>c.jsxs("div",{className:"mkt-role-item",children:[c.jsxs("div",{className:"mkt-role-name",children:[o.name," ",c.jsx("code",{children:o.id})]}),c.jsx("div",{className:"mkt-role-resp",children:o.responsibility}),c.jsxs("div",{className:"mkt-role-meta",children:["reports to: ",c.jsx("code",{children:o.reports_to}),o.can_spawn&&o.can_spawn.length>0&&c.jsxs(c.Fragment,{children:[" · spawns: ",o.can_spawn.map(a=>c.jsx("code",{children:a},a))]})]})]},o.id))})]}),c.jsxs("div",{className:"mkt-modal-section",children:[c.jsxs("div",{className:"mkt-modal-label",children:["Work item templates (",e.work_item_templates.length," templates)"]}),c.jsx("div",{className:"mkt-dag-wrap",children:c.jsx(GQ,{templates:e.work_item_templates})})]})]}),c.jsx("div",{className:"mkt-modal-footer",children:t?c.jsx("span",{className:"mkt-installed-badge",children:"Already Installed"}):c.jsx("button",{className:"mkt-btn mkt-btn-primary",disabled:n,onClick:r,children:n?"Applying...":"Use This Architecture"})})]})})}function GQ({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}),c.jsx("div",{className:"org-dag",children:t.map((i,o)=>c.jsxs("div",{className:"org-dag-group-wrap",children:[o>0&&c.jsx("div",{className:"org-dag-arrow",children:c.jsx("img",{src:qi.arrow,alt:"→",className:"org-dag-arrow-icon"})}),c.jsxs("div",{className:`org-dag-group${i.templates.length>1?" org-dag-parallel":""}`,children:[i.templates.length>1&&c.jsx("div",{className:"org-dag-parallel-label",children:"parallel"}),i.templates.map(a=>c.jsxs("div",{className:"org-dag-node",children:[c.jsxs("div",{className:"org-dag-node-header",children:[c.jsx("span",{className:"org-dag-node-title",children:a.title}),c.jsx("span",{className:"org-dag-node-role",children:a.role_id})]}),c.jsx("div",{className:"org-dag-node-id",children:a.id}),a.gate&&c.jsxs("div",{className:`org-dag-gate org-gate-${a.gate.type}`,children:[c.jsx("img",{src:a.gate.type==="review"?qi.gateReview:a.gate.type==="approval"?qi.gateApproval:qi.gateHold,alt:"",className:"org-gate-icon"}),c.jsx("span",{children:a.gate.type}),a.gate.reviewer_role&&c.jsxs("span",{className:"org-gate-reviewer",children:["by ",a.gate.reviewer_role]})]})]},a.id))]})]},o))})}function qQ(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 WQ({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=[],u=new Set;for(const p of[...e.tags,...e.domains])u.has(p)||(u.add(p),a.push(p));const d=a.slice(0,3),m=a.length-d.length;return c.jsxs("div",{className:"tm-card",onClick:()=>r(e),children:[c.jsxs("div",{className:"tm-card-head",children:[c.jsx("div",{className:"tm-card-avatar",style:o,"aria-hidden":!0,children:e.emoji?c.jsx("span",{className:"tm-card-avatar-emoji",children:e.emoji}):c.jsx("span",{className:"tm-card-avatar-mono",children:qQ(e.name)})}),c.jsxs("div",{className:"tm-card-head-text",children:[c.jsxs("div",{className:"tm-card-name-row",children:[c.jsx("span",{className:"tm-card-name",title:e.name,children:e.name}),e.preferred_external_agent&&c.jsx("span",{className:"tm-card-agent-badge",title:`Agent: ${e.preferred_external_agent}`,children:e.preferred_external_agent})]}),e.category&&c.jsx("span",{className:"tm-card-category",children:e.category})]})]}),c.jsxs("div",{className:"tm-card-body",children:[e.vibe&&c.jsxs("div",{className:"tm-card-vibe",children:['"',e.vibe,'"']}),e.description&&c.jsx("div",{className:"tm-card-desc",children:e.description})]}),d.length>0&&c.jsxs("div",{className:"tm-card-chips",children:[d.map(p=>c.jsx("span",{className:"tm-card-chip",children:p},p)),m>0&&c.jsxs("span",{className:"tm-card-chip tm-card-chip-more",children:["+",m]})]}),c.jsx("div",{className:"tm-card-footer",children:c.jsx("button",{className:"tm-card-hire-btn",disabled:i,onClick:p=>{p.stopPropagation(),n(e.template_id)},children:i?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"spinner-inline"})," Hiring"]}):"Hire →"})})]})}const $R=e=>e,HR=e=>e;function YQ({template:e,vacantRoles:t,hiringId:n,readOnly:r,onHire:i,onClose:o}){const[a,u]=j.useState(""),d=n===e.template_id,m=t.length===0,p=!r&&!d&&!m&&a!=="";j.useEffect(()=>{u("")},[e.template_id]);const h=()=>{p&&i(HR(e.template_id),$R(a))};return c.jsx("div",{className:"tm-detail-overlay",onClick:o,children:c.jsxs("div",{className:"tm-detail-modal",onClick:g=>g.stopPropagation(),children:[c.jsxs("div",{className:"tm-detail-header",style:{borderBottomColor:e.color||"var(--border)"},children:[e.emoji&&c.jsx("span",{className:"tm-detail-emoji",children:e.emoji}),c.jsxs("div",{children:[c.jsx("h2",{className:"tm-detail-name",children:e.name}),c.jsx("span",{className:"tm-detail-category",children:e.category})]}),c.jsx("button",{className:"tm-detail-close",onClick:o,children:"×"})]}),c.jsxs("div",{className:"tm-detail-body",children:[e.vibe&&c.jsxs("blockquote",{className:"tm-detail-vibe",children:['"',e.vibe,'"']}),e.description&&c.jsx("p",{className:"tm-detail-desc",children:e.description}),e.domains.length>0&&c.jsxs("div",{className:"tm-detail-section",children:[c.jsx("div",{className:"tm-detail-label",children:"Domains"}),c.jsx("div",{className:"tm-detail-tags",children:e.domains.map(g=>c.jsx("span",{className:"org-domain-tag",children:g},g))})]}),e.tags.length>0&&c.jsxs("div",{className:"tm-detail-section",children:[c.jsx("div",{className:"tm-detail-label",children:"Tags"}),c.jsx("div",{className:"tm-detail-tags",children:e.tags.map(g=>c.jsx("span",{className:"org-tool-tag",children:g},g))})]}),e.preferred_external_agent&&c.jsxs("div",{className:"tm-detail-section",children:[c.jsx("div",{className:"tm-detail-label",children:"Recommended Agent"}),c.jsx("span",{className:"tm-card-agent-badge",children:e.preferred_external_agent})]}),!r&&c.jsxs("div",{className:"tm-detail-section",children:[c.jsx("div",{className:"tm-detail-label",children:"Hire into role"}),m?c.jsx("p",{className:"tm-detail-vacancy-empty",children:"No vacant roles. Create a role in the Team tab first."}):c.jsx("div",{className:"tm-detail-role-list",role:"listbox","aria-label":"Vacant roles",children:t.map(g=>{const y=g.role_id===a;return c.jsxs("button",{type:"button",role:"option","aria-selected":y,className:`tm-detail-role-row${y?" is-selected":""}`,onClick:()=>u(g.role_id),children:[c.jsx("span",{className:"tm-detail-role-name",children:g.name}),g.responsibility&&c.jsx("span",{className:"tm-detail-role-resp",children:g.responsibility})]},g.role_id)})})]})]}),!r&&c.jsx("div",{className:"tm-detail-footer",children:c.jsx("button",{className:"tm-detail-hire-btn",disabled:!p,onClick:h,children:d?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"spinner-inline"})," Hiring..."]}):"Hire to selected role"})})]})})}function XQ({open:e,template:t,vacantRoles:n,onConfirm:r,onClose:i}){const[o,a]=j.useState("");if(j.useEffect(()=>{e&&a("")},[e,t?.template_id]),j.useEffect(()=>{if(!e)return;const p=h=>{h.key==="Escape"&&i()};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[e,i]),!e||!t)return null;const u=n.length===0,d=!u&&o!=="",m=()=>{d&&r(HR(t.template_id),$R(o))};return c.jsx("div",{className:"htr-overlay",role:"dialog","aria-modal":"true",onMouseDown:i,children:c.jsxs("div",{className:"htr-modal",onMouseDown:p=>p.stopPropagation(),children:[c.jsxs("header",{className:"htr-header",children:[c.jsxs("div",{children:[c.jsxs("h3",{className:"htr-title",children:["Hire ",t.name]}),c.jsx("p",{className:"htr-subtitle",children:"Pick the role to fill with this employee."})]}),c.jsx("button",{className:"htr-close",type:"button",onClick:i,"aria-label":"Close",children:"x"})]}),c.jsx("div",{className:"htr-body",children:u?c.jsxs("div",{className:"htr-empty",children:[c.jsx("p",{className:"htr-empty-title",children:"No vacant roles."}),c.jsx("p",{className:"htr-empty-hint",children:"Add a role in the Team tab first, then come back to hire."})]}):c.jsx("div",{className:"htr-role-list",role:"listbox","aria-label":"Vacant roles",children:n.map(p=>{const h=p.role_id===o;return c.jsxs("button",{type:"button",role:"option","aria-selected":h,className:`htr-role-row${h?" is-selected":""}`,onClick:()=>a(p.role_id),children:[c.jsx("span",{className:"htr-role-name",children:p.name}),p.responsibility&&c.jsx("span",{className:"htr-role-resp",children:p.responsibility})]},p.role_id)})})}),c.jsxs("footer",{className:"htr-footer",children:[c.jsx("button",{type:"button",className:"btn btn-ghost",onClick:i,children:u?"Close":"Cancel"}),!u&&c.jsx("button",{type:"button",className:"btn btn-primary",onClick:m,disabled:!d,children:"Hire to selected role"})]})]})})}const wj={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 KQ({templates:e,vacantRoles:t,hiringTemplateId:n,readOnly:r,onHireTalent:i}){const[o,a]=j.useState(""),[u,d]=j.useState(null),[m,p]=j.useState(null),[h,g]=j.useState(null),y=j.useMemo(()=>{const S=new Set;for(const _ of e)_.category&&S.add(_.category);return Array.from(S).sort()},[e]),v=j.useMemo(()=>{let S=e;if(u&&(S=S.filter(_=>_.category===u)),o.trim()){const _=o.trim().toLowerCase();S=S.filter(w=>w.name.toLowerCase().includes(_)||w.description.toLowerCase().includes(_)||w.domains.some(C=>C.toLowerCase().includes(_))||w.tags.some(C=>C.toLowerCase().includes(_))||(w.vibe??"").toLowerCase().includes(_))}return S},[e,u,o]),k=S=>{if(r)return;const _=e.find(w=>w.template_id===S);_&&g(_)};return c.jsxs("div",{className:"mkt-container","data-testid":"employees-marketplace",children:[c.jsxs("div",{className:"mkt-toolbar",children:[c.jsxs("div",{className:"mkt-search-wrap",children:[c.jsx("img",{src:wj.search,alt:"",className:"mkt-search-icon"}),c.jsx("input",{className:"mkt-search",placeholder:"Search talent templates...",value:o,onChange:S=>a(S.target.value)})]}),c.jsxs("span",{className:"mkt-count",children:[v.length," employees",t.length>0&&c.jsxs(c.Fragment,{children:[" · ",t.length," vacant role",t.length===1?"":"s"]})]})]}),y.length>0&&c.jsx("div",{className:"mkt-filters",children:c.jsxs("div",{className:"mkt-pill-row",children:[c.jsx("button",{className:`mkt-pill${u?"":" active"}`,onClick:()=>d(null),children:"All"}),y.map(S=>c.jsx("button",{className:`mkt-pill${u===S?" active":""}`,onClick:()=>d(u===S?null:S),children:S},S))]})}),v.length>0?c.jsxs("div",{className:"mkt-section",children:[c.jsxs("div",{className:"mkt-section-header",children:[c.jsx("img",{src:wj.talent,alt:"",className:"mkt-section-icon"}),c.jsx("h3",{className:"mkt-section-title",children:"Talent Templates"}),c.jsx("span",{className:"mkt-section-count",children:v.length})]}),c.jsx("div",{className:"tm-grid",children:v.map(S=>c.jsx(WQ,{template:S,hiringId:n,onHire:k,onClick:p},S.template_id))})]}):c.jsx("div",{className:"mkt-empty",children:c.jsx("p",{children:e.length===0?"No talent templates available.":"No employees match your search."})}),m&&c.jsx(YQ,{template:m,vacantRoles:t,hiringId:n,readOnly:r,onHire:(S,_)=>{r||(i(S,_),p(null))},onClose:()=>p(null)}),c.jsx(XQ,{open:h!==null,template:h,vacantRoles:t,onConfirm:(S,_)=>{i(S,_),g(null)},onClose:()=>g(null)})]})}const Vc={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 ZQ({onExport:e,onImport:t,configExportYaml:n,importPreview:r,importError:i}){const[o,a]=j.useState(""),[u,d]=j.useState(null),[m,p]=j.useState(!1),h=j.useRef(!1),g=j.useRef(null);j.useEffect(()=>{if(!h.current||!n||n===g.current)return;g.current=n,h.current=!1;const w=new Blob([n],{type:"application/x-yaml"}),C=URL.createObjectURL(w),N=document.createElement("a");N.href=C;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(C)},[n]),j.useEffect(()=>{p(!1)},[o]),j.useEffect(()=>{r&&!i&&p(!0)},[r,i]);const y=()=>{h.current=!0,e()},v=w=>{const C=w.target.files?.[0];if(!C)return;d(C.name);const N=new FileReader;N.onload=()=>{const O=N.result;typeof O=="string"&&a(O)},N.readAsText(C),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),p(!1),a(""),d(null))},_=()=>{a(""),d(null),p(!1)};return c.jsxs("div",{className:"cfg-io-panel","data-testid":"config-import-export-panel",children:[c.jsxs("div",{className:"cfg-io-header",children:[c.jsx("h3",{className:"cfg-io-title",children:"Config Import / Export"}),c.jsx("p",{className:"cfg-io-subtitle",children:"Download the current company architecture as YAML, or upload one to replace it."})]}),c.jsxs("div",{className:"cfg-io-section",children:[c.jsxs("div",{className:"cfg-io-section-header",children:[c.jsx("img",{src:Vc.download,alt:"",className:"cfg-io-section-icon"}),c.jsx("span",{className:"cfg-io-section-title",children:"Download current config"})]}),c.jsxs("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:y,children:[c.jsx("img",{src:Vc.download,alt:"",className:"cfg-io-btn-icon"})," Download YAML"]})]}),c.jsxs("div",{className:"cfg-io-section",children:[c.jsxs("div",{className:"cfg-io-section-header",children:[c.jsx("img",{src:Vc.upload,alt:"",className:"cfg-io-section-icon"}),c.jsx("span",{className:"cfg-io-section-title",children:"Upload config"})]}),c.jsx("div",{className:"cfg-io-upload-row",children:c.jsxs("label",{className:"cfg-io-file-label",children:[c.jsx("input",{type:"file",accept:".yaml,.yml",onChange:v,className:"cfg-io-file-input"}),c.jsx("span",{className:"cfg-io-file-btn",children:"Choose file…"}),c.jsx("span",{className:"cfg-io-file-name",children:u??"no file selected"})]})}),c.jsx("textarea",{className:"cfg-io-textarea",placeholder:"…or paste YAML here",value:o,onChange:w=>a(w.target.value),spellCheck:!1,rows:10}),c.jsxs("div",{className:"cfg-io-actions",children:[c.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:k,disabled:!o.trim(),children:"Dry run"}),c.jsx("button",{className:"cfg-io-btn cfg-io-btn-primary",onClick:S,disabled:!m||!o.trim(),children:"Apply"}),o&&c.jsx("button",{className:"cfg-io-btn cfg-io-btn-ghost",onClick:_,children:"Clear"})]}),r&&!i&&c.jsxs("div",{className:"cfg-io-preview",children:[c.jsx("img",{src:Vc.check,alt:"",className:"cfg-io-preview-icon"}),c.jsxs("div",{className:"cfg-io-preview-body",children:[c.jsx("div",{className:"cfg-io-preview-title",children:"Dry run OK — ready to apply"}),c.jsxs("div",{className:"cfg-io-preview-stats",children:[c.jsxs("span",{className:"cfg-io-preview-stat",children:[c.jsx("span",{className:"cfg-io-stat-label",children:"Roles added"}),c.jsx("span",{className:"cfg-io-stat-value",children:r.roles_added})]}),c.jsxs("span",{className:"cfg-io-preview-stat",children:[c.jsx("span",{className:"cfg-io-stat-label",children:"Roles removed"}),c.jsx("span",{className:"cfg-io-stat-value",children:r.roles_removed})]}),c.jsxs("span",{className:"cfg-io-preview-stat",children:[c.jsx("span",{className:"cfg-io-stat-label",children:"Employees changed"}),c.jsx("span",{className:"cfg-io-stat-value",children:r.employees_changed})]})]})]})]}),i&&c.jsxs("div",{className:"cfg-io-error",children:[c.jsx("img",{src:Vc.warn,alt:"",className:"cfg-io-error-icon"}),c.jsxs("div",{className:"cfg-io-error-body",children:[c.jsx("div",{className:"cfg-io-error-title",children:"Validation failed"}),c.jsx("pre",{className:"cfg-io-error-text",children:i})]})]})]})]})}const Cj=[{name:"",responsibility:"",prompt:"",reportsToIndex:null},{name:"",responsibility:"",prompt:"",reportsToIndex:0}];function wy(e){return e.trim()||"Member"}function QQ({open:e,pending:t,result:n,onClose:r,onCreate:i}){const[o,a]=j.useState(1),[u,d]=j.useState(""),[m,p]=j.useState(Cj),[h,g]=j.useState("");j.useEffect(()=>{e&&(a(1),d(""),p(Cj),g(""))},[e]),j.useEffect(()=>{if(!(!e||!n)){if(n.ok){r();return}g(n.error||"Failed to create organization")}},[e,n,r]);const y=u.trim().length>0,v=j.useMemo(()=>m.map((D,T)=>({member:D,index:T})).filter(D=>D.member.name.trim()),[m]),k=j.useMemo(()=>new Map(v.map((D,T)=>[D.index,T])),[v]),S=v.length>=2,_=y&&S&&!t,w=j.useMemo(()=>v.map(({member:D,index:T},L)=>{const A=D.reportsToIndex==null?null:k.get(D.reportsToIndex);return{...D,roleName:wy(D.name),managerName:A!=null&&A{p(L=>L.map((A,M)=>M===D?{...A,...T}:A))},N=()=>{p(D=>[...D,{name:"",responsibility:"",prompt:"",reportsToIndex:0}])},O=D=>{p(T=>T.filter((A,M)=>M!==D).map((A,M)=>({...A,reportsToIndex:A.reportsToIndex==null?null:A.reportsToIndex>=D?Math.max(0,A.reportsToIndex-1):A.reportsToIndex})).map((A,M)=>M===0?{...A,reportsToIndex:null}:A))},I=()=>{_&&(g(""),i(u.trim(),v.map(({member:D},T)=>{const L=D.reportsToIndex==null?null:k.get(D.reportsToIndex);return{name:D.name.trim(),responsibility:D.responsibility.trim(),prompt:D.prompt.trim(),reports_to_index:L!=null&&LD.stopPropagation(),children:[c.jsxs("div",{className:"org-create-header",children:[c.jsxs("div",{children:[c.jsx("span",{className:"org-create-eyebrow",children:"New organization"}),c.jsx("h3",{id:"org-create-title",className:"org-create-title",children:"Create a saved org"})]}),c.jsx("button",{type:"button",className:"org-create-close",onClick:r,"aria-label":"Close",children:"x"})]}),c.jsx("div",{className:"org-create-steps","aria-label":"Create organization steps",children:[["1","Name"],["2","Members"],["3","Review"]].map(([D,T])=>c.jsxs("span",{className:`org-create-step${o===Number(D)?" org-create-step--active":o>Number(D)?" org-create-step--done":""}`,children:[c.jsx("span",{children:D}),T]},D))}),o===1&&c.jsx("div",{className:"org-create-panel",children:c.jsxs("label",{className:"org-create-field",children:[c.jsx("span",{children:"Organization name"}),c.jsx("input",{value:u,onChange:D=>d(D.target.value),placeholder:"HKU Research Lab",autoFocus:!0})]})}),o===2&&c.jsxs("div",{className:"org-create-panel",children:[c.jsx("div",{className:"org-create-member-list",children:m.map((D,T)=>c.jsxs("div",{className:"org-create-member-row",children:[c.jsx("input",{value:D.name,onChange:L=>C(T,{name:L.target.value}),placeholder:T===0?"Lead role":"Member role"}),c.jsx("input",{value:D.responsibility,onChange:L=>C(T,{responsibility:L.target.value}),placeholder:"Responsibility"}),c.jsxs("select",{value:D.reportsToIndex==null?"owner":String(D.reportsToIndex),onChange:L=>C(T,{reportsToIndex:L.target.value==="owner"?null:Number(L.target.value)}),disabled:T===0,"aria-label":"Reports to",children:[c.jsx("option",{value:"owner",children:"Owner"}),m.slice(0,T).map((L,A)=>c.jsx("option",{value:A,children:wy(L.name)},A))]}),c.jsx("button",{type:"button",className:"org-create-icon-btn",onClick:()=>O(T),disabled:m.length<=2,title:"Remove member","aria-label":"Remove member",children:"-"}),c.jsx("textarea",{value:D.prompt,onChange:L=>C(T,{prompt:L.target.value}),placeholder:"Prompt optional","aria-label":`${T===0?"Lead role":"Member role"} prompt optional`})]},T))}),c.jsx("button",{type:"button",className:"org-create-add",onClick:N,children:"+ Add member"})]}),o===3&&c.jsx("div",{className:"org-create-panel",children:c.jsxs("div",{className:"org-create-review",children:[c.jsxs("div",{className:"org-create-review-head",children:[c.jsx("span",{children:u.trim()}),c.jsxs("b",{children:[v.length," members"]})]}),w.map(D=>c.jsxs("div",{className:"org-create-review-row",children:[c.jsx("strong",{children:D.roleName}),c.jsxs("span",{children:[D.managerName,D.prompt.trim()?c.jsx("em",{children:"Prompt"}):null]})]},D.index))]})}),h&&c.jsx("div",{className:"org-create-error",children:h}),c.jsxs("div",{className:"org-create-actions",children:[c.jsx("button",{type:"button",className:"btn btn-ghost",onClick:o===1?r:()=>a(o-1),children:o===1?"Cancel":"Back"}),o<3?c.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>a(o+1),disabled:o===1?!y:!S,children:"Next"}):c.jsx("button",{type:"button",className:"btn btn-primary",onClick:I,disabled:!_,children:t?"Creating...":"Create organization"})]})]})})}const Ka={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"},jj={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 JQ(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 eJ({data:e,sessionRecruitmentByRole:t,talents:n,employeeDetail:r,reorgProposals:i,isCustomMode:o,onRequestData:a,onRequestTalents:u,onRequestEmployeeDetail:d,onHireTalent:m,hiringTemplateId:p,onImportEmployee:h,onRequestReorgList:g,onReorgDecide:y,onMarketExport:v,onMarketInstall:k,onMarketUninstall:S,marketPresets:_,marketPreviewData:w,onMarketBrowse:C,onMarketPreview:N,onMarketApplyPreset:O,onMarketClearPreview:I,onAddRole:D,onBulkAddRoles:T,onUpdateRole:L,onDeleteRole:A,onUpdateOrgStrategy:M,onUpdateRuntimePolicy:$,onResetArchitecture:W,onConfigExport:B,onConfigImport:U,configExportYaml:H,configImportPreview:V,configImportError:Y,onSavedOrgsList:Q,onSavedOrgSaveAs:q,onSavedOrgCreate:G,onSavedOrgLoad:J,onSavedOrgDelete:P,savedOrgsList:X,activeSavedOrg:ee,activeSavedOrgVersionAtLoad:te,orgCreatePending:re,orgCreateResult:oe,onSelectCorporate:de}){const[se,Ee]=j.useState("team"),[we,Ce]=j.useState(!1),Be=j.useCallback(tt=>{Ee(tt)},[]),[Ge,Ye]=j.useState(null),yt=j.useRef(-1),[qt,bt]=j.useState(null),vt=j.useRef(null),me=j.useCallback((tt,it="info")=>{bt({msg:tt,type:it}),vt.current&&clearTimeout(vt.current),vt.current=setTimeout(()=>bt(null),3e3)},[]);j.useEffect(()=>()=>{vt.current&&clearTimeout(vt.current)},[]);const Oe=j.useRef(a),rt=j.useRef(u),Qe=j.useRef(g),Je=j.useRef(C),fe=j.useRef(Q);Oe.current=a,rt.current=u,Qe.current=g,Je.current=C,fe.current=Q,j.useEffect(()=>{Oe.current(),rt.current(),Qe.current(),Je.current?.(),fe.current?.()},[]),j.useEffect(()=>{!oe||!oe.ok||(Ce(!1),Ee("team"),me(`Created ${oe.organization_name||oe.name} and saved automatically`))},[oe,me]);const be=e?.roles??[],Me=j.useMemo(()=>o?be.filter(tt=>!tt.is_builtin):be,[be,o]),Fe=j.useMemo(()=>e?.employees??[],[e?.employees]),$e=j.useMemo(()=>zm(e),[e]),Wt=j.useMemo(()=>Fe.filter(tt=>tt.linked_agent_id),[Fe]),ke=e?.organization_name?.trim()||JQ(ee)||(o?"Custom org":"Corporate company"),Te=(o?e?.organization_id||ee:"corporate")||"",Pe=o?"Saved org":"Corporate",Ve=o?ee?"Editable saved architecture":"Editable draft architecture":"Built-in read-only architecture",qe=$e.frontier.status||$e.projectRun?.status||$e.projectRun?.lifecycle_status||"ready",et=j.useMemo(()=>{const tt=new Set;for(const it of Fe){if(it.is_default_employee)continue;const rn=it.role_ids?.length?it.role_ids:[it.role_id];for(const Xt of rn)Xt&&tt.add(Xt)}return tt},[Fe]),Mn=j.useMemo(()=>Me.filter(tt=>!et.has(tt.role_id)),[Me,et]),Tn=j.useMemo(()=>new Set((e?.installed_packages??[]).map(tt=>tt.package_id)),[e?.installed_packages]),Dn=e?.org_version??0;j.useEffect(()=>{Ge&&yt.current>=0&&Dn!==yt.current&&(Ye(null),yt.current=-1,Ee("team"),me("Architecture applied successfully"))},[Dn,Ge,me]);const yn=(tt,it)=>{yt.current=Dn,Ye(tt),O?.(tt,it)},Yt=tt=>{if(tt==="corporate"){de?.();return}if(tt.startsWith("org:")){const it=tt.slice(4);it&&J?.(it)}};if(!e)return c.jsx("div",{className:"org-tab",children:c.jsx("div",{className:"org-loading",children:"Loading organization data..."})});const Jt=e.installed_packages??[],Et=X??[],wt=o&&ee?`org:${ee}`:"corporate";return c.jsxs("div",{className:"org-tab",children:[c.jsxs("div",{className:`org-header${o?" org-header--custom":" org-header--corporate"}`,children:[c.jsxs("div",{className:"org-header-main",children:[c.jsxs("div",{className:"org-eyebrow",children:[c.jsx("span",{children:"Company"}),c.jsx("span",{className:"org-eyebrow-separator",children:"/"}),c.jsx("span",{children:Pe})]}),c.jsxs("div",{className:"org-title-row",children:[c.jsx("h2",{className:"org-title",children:ke}),c.jsxs("span",{className:"org-version-badge",children:["v",e.org_version]}),c.jsx("span",{className:`org-state-badge${o?" org-state-badge--editable":" org-state-badge--readonly"}`,children:Ve})]}),c.jsxs("div",{className:"org-header-meta",children:[c.jsx("span",{className:"org-meta-pill",children:e.company_profile||(o?"custom":"corporate")}),Te&&c.jsx("code",{className:"org-meta-code",children:Te}),c.jsx("span",{className:"org-meta-pill org-meta-pill--runtime",children:qe}),c.jsx("span",{className:"org-meta-pill org-meta-pill--saved",children:"Auto-saved"})]})]}),c.jsxs("div",{className:"org-control-panel",children:[c.jsxs("label",{className:"org-switcher",children:[c.jsx("span",{className:"org-switcher-label",children:"Organization"}),c.jsx("span",{className:"org-switcher-select-wrap",children:c.jsxs("select",{className:"org-switcher-select",value:wt,onChange:tt=>Yt(tt.target.value),onFocus:()=>Q?.(),onPointerDown:()=>Q?.(),"aria-label":"Organization",children:[c.jsx("option",{value:"corporate",children:"Corporate"}),Et.map(tt=>c.jsx("option",{value:`org:${tt.name}`,children:(tt.organization_name||tt.name).trim()||tt.name},tt.name))]})})]}),c.jsxs("button",{type:"button",className:"org-create-trigger",onClick:()=>Ce(!0),children:[c.jsx("span",{className:"org-create-trigger-icon","aria-hidden":!0,children:"+"}),"New organization"]})]}),c.jsxs("div",{className:"org-stats-strip",children:[c.jsxs("span",{className:"org-stat",children:[c.jsx("img",{src:jj.agents,alt:"",className:"org-stat-icon"}),c.jsx("b",{children:Me.length})," roles"]}),c.jsxs("span",{className:"org-stat",children:[c.jsx("img",{src:Ka.employees,alt:"",className:"org-stat-icon"}),c.jsx("b",{children:Fe.length})," employees"]}),c.jsxs("span",{className:"org-stat",children:[c.jsx("img",{src:Ka.runtime,alt:"",className:"org-stat-icon"}),c.jsx("b",{children:$e.runtimeTeams.length})," runtime teams"]}),c.jsxs("span",{className:"org-stat",children:[c.jsx("img",{src:jj.active,alt:"",className:"org-stat-icon"}),c.jsx("b",{children:Wt.length})," active"]})]})]}),c.jsx("div",{className:"org-subtabs",children:[{id:"team",icon:Ka.team,label:"Team",count:Me.length},{id:"runtime",icon:Ka.runtime,label:"Runtime",count:$e.runtimeTeams.length},{id:"architecture",icon:Ka.architecture,label:"Architecture",count:_?.length??0},{id:"employees",icon:Ka.employees,label:"Employees",count:n.length}].map(tt=>c.jsxs("button",{className:`org-subtab${se===tt.id?" org-subtab--active":""}`,onClick:()=>Be(tt.id),children:[c.jsx("img",{src:tt.icon,alt:"",className:"org-subtab-icon"}),c.jsx("span",{className:"org-subtab-label",children:tt.label}),c.jsx("span",{className:"org-subtab-count",children:tt.count})]},tt.id))}),qt&&c.jsx("div",{className:`org-toast org-toast--${qt.type}`,onClick:()=>bt(null),children:qt.msg}),c.jsxs("div",{className:"org-tab-content",children:[se==="team"&&c.jsx(LQ,{roles:Me,employees:Fe,sessionRecruitmentByRole:t,isCustomMode:o,onAddRole:D??(()=>{}),onBulkAddRoles:T,onUpdateRole:L??(()=>{}),onDeleteRole:A??(()=>{}),onExport:v??(()=>{}),onImportEmployee:h,onResetArchitecture:W,onSwitchToTab:tt=>Ee(tt),savedOrgsList:X,activeSavedOrg:ee??null,currentOrgVersion:e?.org_version??0,versionAtLoad:te??null,onSavedOrgsList:Q,onSavedOrgSaveAs:q,onSavedOrgLoad:J,onSavedOrgDelete:P}),se==="runtime"&&c.jsx($Q,{roles:Me,runtimeTeams:$e.runtimeTeams,runtimeSeats:$e.runtimeSeats,workItems:$e.workItems,frontier:$e.frontier,companyProfile:e.company_profile,runtimePolicy:e.runtime_policy,finalDeciderRoleId:e.final_decider_role_id,topLevelRoleIds:e.top_level_role_ids,readOnly:!o,onUpdateOrgStrategy:M,onUpdateRuntimePolicy:$}),se==="architecture"&&c.jsxs(c.Fragment,{children:[c.jsx(FQ,{presets:_??[],installedIds:Tn,previewData:w??null,applyingPresetId:Ge,readOnly:!o,onPreview:N??(()=>{}),onApplyPreset:yn,onClearPreview:I??(()=>{}),installedPackages:Jt,channels:e.channels,reorgProposals:i,isCustomMode:!!o,onReorgDecide:y,onMarketInstall:(tt,it)=>k?.(tt,it),onMarketUninstall:tt=>S?.(tt)}),o&&c.jsx(ZQ,{onExport:B??(()=>{}),onImport:U??(()=>{}),configExportYaml:H??null,importPreview:V??null,importError:Y??null})]}),se==="employees"&&c.jsx(KQ,{templates:n,vacantRoles:Mn,hiringTemplateId:p??null,readOnly:!o,onHireTalent:m})]}),c.jsx(QQ,{open:we,pending:re,result:oe??null,onClose:()=>Ce(!1),onCreate:(tt,it)=>G?.(tt,it)})]})}function tJ(e,t,n,r){const i=n.join(", "),o=`session:${t.id}`,a=e.channels.find(u=>u.id===o)??e.channels.find(u=>u.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 nJ=1e12,rJ=/^\[Company:([^\]]+)\]\s*(.*)$/,iJ=/^\[Company\]\s*(.*)$/;function FR(e,t){return t==="idle"||t==="reflecting"||t==="tool_active"?t:e==="running"?"reflecting":void 0}function _m(e){const t=typeof e=="string"?Number(e):e;return typeof t!="number"||!Number.isFinite(t)?Date.now():t!!t&&typeof t=="object").map(t=>({timestamp:_m(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,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 sJ(e){return Array.isArray(e)?LI(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:_m(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 oJ(e){return e.replace(/[_-]/g," ").replace(/\b\w/g,t=>t.toUpperCase())}function Ej(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 aJ(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=rJ.exec(t);if(o){const[,u,d]=o,m=d.trim();return{timestamp:e.timestamp,type:Ej(m),workItemProjectionId:u,workItemProjectionTitle:oJ(u),roleName:r,detail:m||void 0,runtimeTaskId:i,executionTurnId:i}}const a=iJ.exec(t);if(a){const u=a[1].trim();return{timestamp:e.timestamp,type:Ej(u),workItemProjectionId:"company_runtime",workItemProjectionTitle:"Company Runtime",roleName:r,detail:u||void 0,runtimeTaskId:i,executionTurnId:i}}return null}function lJ(e){return e.map(aJ).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 r of t){const i=n.get(r.channelId);i?i.push(r):n.set(r.channelId,[r])}return e.map(r=>{const i=lJ(n.get(r.channelId)??[]),o=r.workItemLog&&r.workItemLog.length>0?r.workItemLog:i,a=[...o].reverse().find(m=>{const p=m.workItemProjectionId;return p&&p!=="company_runtime"}),u=r.mode==="primary"?a?.workItemProjectionId??r.workItemProjectionId:r.workItemProjectionId??a?.workItemProjectionId,d=r.isCompanyRuntime||r.mode==="primary"&&o.length>0;return o.length===0&&u===r.workItemProjectionId&&d===r.isCompanyRuntime?r:{...r,isCompanyRuntime:d,workItemProjectionId:u,...o.length>0?{workItemLog:o}:{}}})}function uJ(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,u=i.workItemRoleId??r.workItemRoleId,d=i.workItemRoleName??r.workItemRoleName;return o===r.workItemProjectionId&&a===r.companyProfile&&u===r.workItemRoleId&&d===r.workItemRoleName?r:{...r,workItemProjectionId:o,companyProfile:a,workItemRoleId:u,workItemRoleName:d}})}function VR(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 Lf(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 UR(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 GR(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 qR(e){const t=FR(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,u=e.work_item_projection_id??e.workItemProjectionId,d=a==="task_mode"||u==="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:u,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:YR(e.work_item_gate??e.workItemGate),employeeAssignment:WR(e.employee_assignment??e.employeeAssignment),selectedExecutionAgent:e.selected_execution_agent??e.selectedExecutionAgent,originChannel:e.origin_channel??e.originChannel,dependencies:e.dependencies,progressLog:ih(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 WR(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 YR(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 dJ=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"]),fJ=new Set(["active","waiting","pending","done","failed"]);function mJ(e){return typeof e=="string"&&dJ.has(e)?e:"queued"}function hJ(e){return typeof e=="string"&&fJ.has(e)?e:"pending"}function pJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function gJ(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:ih(e.entries)}}function xJ(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:mJ(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:_m(e.created_at??e.createdAt),updatedAt:_m(e.updated_at??e.updatedAt),executionTurnId:e.execution_turn_id??e.executionTurnId??void 0,activitySections:t.filter(n=>!!n&&typeof n=="object").map(gJ),progressLog:ih(e.progress_log??e.progressLog)}}function Nj(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(xJ).sort((d,m)=>d.createdAt-m.createdAt),u=typeof i.role_key=="string"?i.role_key:typeof i.roleKey=="string"?i.roleKey:n;t[n]={roleKey:u,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:pJ(i.runtime_status??i.runtimeStatus),aggregatedStatus:hJ(i.aggregated_status??i.aggregatedStatus),workItems:a}}return Object.keys(t).length>0?t:void 0}function XR(e){const t=FR(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(),u=e.work_item_projection_id??e.workItemProjectionId,d=a==="task"||a==="project"||a==="single"||o==="task_mode"||u==="task_mode_execution",m=d?void 0:e.parent_session_id??e.parentSessionId,p={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:ih(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,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:u,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:YR(e.work_item_gate??e.workItemGate),employeeAssignment:WR(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?[]:sJ(e.work_item_log??e.workItemLog),roleWorkItems:d?void 0:Nj(e.role_work_items??e.roleWorkItems),executorRoleWorkItems:d?void 0:Nj(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 zI(p)}function Ij(e){const t=(e.channels??[]).map(VR),n=(e.messages??[]).map(Lf),r=(e.boards??[]).map(UR),i=(e.columns??[]).map(GR),o=cJ((e.sessions??[]).map(XR),n),a=uJ((e.tasks??[]).map(qR),o);return{channels:t,messages:n,boards:r,columns:i,tasks:a,sessions:o}}function yJ(e){return`session:${e}`}const vJ=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||!vJ.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 u=String(o??"").trim(),d=String(a??"").trim();if(!u||!d)return;const m=r[u]??(r[u]=[]);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 Tj=80,kJ=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"]),SJ=new Set(["member_inbox_updated"]);function wJ(){return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.hostname}:${window.location.port||"8765"}/ws`}function CJ(e){return e==="connected"?"ok":e==="connecting"?"warn":e==="error"?"error":"off"}function Uc(e){return vV(e)}function ks(e){return i0(e)}function Cy(e,t){if(e!=="task")return e==="org"?"custom":"corporate"}function Bo(e,t){return e!=="org"?void 0:String(t??"").trim()||void 0}function Cs(e){const t=String(e??"").trim().toLowerCase().replace("-","_");return t==="codex"||t==="claude_code"||t==="cursor"||t==="opencode"?t:"native"}function jJ(e,t=120){const n=JSON.stringify(e)??"";return n.length<=t?n:n.slice(0,t)+"…"}function EJ(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 Rj(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 EJ(r,n.get(i))}).filter(r=>!!r.agent_id)}function Aj(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 kf(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function NJ(e){const t=String(e??"").trim().toLowerCase();return t==="idle"||t==="done"||t==="failed"||t==="cancelled"}function jy(e){const t={};if((typeof e.execution_mode=="string"?e.execution_mode:"")==="task_mode"||e.work_item_projection_id==="task_mode_execution"){const o=Aj(e.employee_assignment??e.employeeAssignment);return o&&(t.employeeAssignment=o),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Cs(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Cs(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=Aj(e.employee_assignment??e.employeeAssignment);return i&&(t.employeeAssignment=i),typeof e.selected_execution_agent=="string"?t.selectedExecutionAgent=Cs(e.selected_execution_agent):typeof e.selectedExecutionAgent=="string"&&(t.selectedExecutionAgent=Cs(e.selectedExecutionAgent)),t}function Ey(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 Ny(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 Mj(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(u=>u.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 IJ(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 TJ(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 RJ(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 AJ(e){return e==="reflecting"||e==="tool_active"||e==="idle"?e:"idle"}function MJ(e){const t=ao(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=IJ(e.status);return{roleKey:n,roleId:n,roleName:r,runtimeStatus:AJ(e.agentStatus),aggregatedStatus:RJ(e.status),workItems:[{workItemId:e.workItemProjectionId||t,workItemProjectionId:e.workItemProjectionId,phase:i,kanbanColumn:TJ(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 DJ({taskId:e,sessions:t,agents:n,onClose:r}){if(!e)return null;for(const a of t){const u=a.roleWorkItems;if(u)for(const d of Object.values(u)){const m=d.workItems.find(p=>p.executionTurnId===e);if(m)return c.jsx(yC,{role:d,focusedWorkItemId:m.workItemId,focusedExecutionTurnId:m.executionTurnId,agents:n,onClose:r})}}const i=t.find(a=>a.taskId===e||ao(a)===e);if(!i)return null;const o=MJ(i);return c.jsx(yC,{role:o,focusedExecutionTurnId:e,agents:n,onClose:r})}function OJ(){const e=j.useRef(new VM);j.useMemo(()=>YM(e.current),[]);const t=j.useRef(null),n=wJ(),[r,i]=j.useState(n),[o,a]=j.useState(n),[u,d]=j.useState("disconnected"),[m,p]=j.useState(""),[h,g]=j.useState(null),[y,v]=j.useState([]),[k,S]=j.useState(0),[_,w]=j.useState(null),[C,N]=j.useState("openopc"),[O,I]=j.useState(!0),[D,T]=j.useState(()=>{try{return localStorage.getItem("opc_office_sidebar_collapsed")==="1"}catch{return!1}}),L=()=>T(Z=>{const z=!Z;try{localStorage.setItem("opc_office_sidebar_collapsed",z?"1":"0")}catch{}return z}),[A,M]=j.useState("all"),[$,W]=j.useState("workspace"),[B,U]=j.useState([]),[H,V]=j.useState(!1),[Y,Q]=j.useState(null),[q,G]=j.useState("task"),[J,P]=j.useState("corporate"),[X,ee]=j.useState("native"),[te,re]=j.useState(null),[oe,de]=j.useState(null),[se,Ee]=j.useState(null),[we,Ce]=j.useState(null),[Be,Ge]=j.useState([]),[Ye,yt]=j.useState(""),[qt,bt]=j.useState(null),[vt,me]=j.useState([]),[Oe,rt]=j.useState([]),[Qe,Je]=j.useState(null),[fe,be]=j.useState(null),[Me,Fe]=j.useState(null),[$e,Wt]=j.useState(null),[nn,ke]=j.useState(null),[Te,Pe]=j.useState(null),[Ve,qe]=j.useState(null),[et,Mn]=j.useState(!1),[Tn,Dn]=j.useState(null),[yn,Yt]=j.useState(null),Jt=j.useRef(new Set),Et=j.useRef(new Set),wt=j.useRef([]),tt=j.useRef("task"),it=j.useRef(null),rn=j.useRef(null),Xt=j.useRef(null),mt=j.useRef(null),Ht=j.useRef(null),On=j.useRef("default"),vn=j.useRef(null),Rn=j.useRef(""),ve=j.useRef(0),Re=j.useRef(!1),Xe=j.useRef(!1),He=j.useRef(0),Tt=j.useRef(!1),ht=j.useRef(null),$n=j.useRef(null),Ae=j.useRef(new Map),[Dt,kn]=j.useState(null),[nr,Sn]=j.useState(null),[We,lr]=j.useState("success"),[cr,mn]=j.useState(null),[Pt,Zn]=j.useState(null),[wn,pt]=j.useState(null),[Ar,jr]=j.useState(()=>_J()),Qn=j.useCallback(Z=>(typeof Z=="string"?Z.trim():"")||"default",[]),ct=j.useCallback(()=>Qn(On.current),[Qn]),cn=j.useCallback(()=>`${Date.now()}-${Math.random().toString(36).slice(2,9)}`,[]),sn=j.useCallback(Z=>{if(!Z||typeof Z!="object")return"";for(const ne of["project_id","projectId","active_project_id","activeProjectId"]){const ae=Z[ne];if(typeof ae=="string"&&ae.trim())return ae.trim()}const z=Z.data;if(z&&typeof z=="object")for(const ne of["project_id","projectId"]){const ae=z[ne];if(typeof ae=="string"&&ae.trim())return ae.trim()}return""},[]),Nt=j.useCallback((Z,z=!1)=>{const ne=sn(Z);return ne?ne===ct():z},[ct,sn]),vr=j.useCallback(Z=>{if(!Z||typeof Z!="object")return"";const z=Z.switch_seq??Z.switchSeq;return typeof z=="string"?z.trim():""},[]),ue=j.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},[]),Se=j.useCallback(Z=>{const z=sn(Z);if(!z)return!1;const ne=vn.current;if(z!==ct()&&z!==ne)return!1;const ae=ue(Z);if(ae!==null&&ae!==ve.current)return!1;const he=vr(Z);return!he||!Rn.current||he===Rn.current},[ct,vr,ue,sn]),Ue=j.useCallback(Z=>{if(!Z||Z.error!=="task_not_found")return!1;if(!Nt(Z,!1))return!0;if((typeof Z.action=="string"?Z.action:"")!=="session_detail")return!1;const ne=ue(Z);if(ne!==null&&ne!==ve.current)return!0;const ae=typeof Z.task_id=="string"?Z.task_id:"";return ae?!(mt.current?.sessions??[]).some(je=>je.taskId===ae):!0},[Nt,ue]),ft=j.useCallback(()=>{for(const Z of Ae.current.values())clearTimeout(Z);Ae.current.clear()},[]),Kt=j.useCallback((Z,z="full",ne=!1,ae)=>{if(!Z)return;const he=ae||ct(),je=ve.current;if(!ne&&!Mj(Z,mt.current))return;const Ke=`${he}:${je}:${Z}`,ze=Ae.current.get(Ke);ze&&(clearTimeout(ze),Ae.current.delete(Ke));const Bt=setTimeout(()=>{Ae.current.delete(Ke),he===ct()&&je===ve.current&&(!ne&&!Mj(Z,mt.current)||(mt.current?.updateSession(Z,{detailLoading:!0,detailError:void 0,viewGeneration:je}),t.current?.sessionDetail(he,Z,{limit:200,detailLevel:z,include:z==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:je})))},180);Ae.current.set(Ke,Bt)},[ct]),An=j.useCallback((Z,z="success")=>{Sn(Z),lr(z),setTimeout(()=>Sn(null),3e3)},[]),br=j.useCallback(()=>{$n.current&&(clearTimeout($n.current),$n.current=null),Tt.current=!1,ht.current=null},[]),Cn=j.useCallback(Z=>{br(),Tt.current=!0,ht.current=Z,$n.current=setTimeout(()=>{!Tt.current||ht.current!==Z||(br(),p("create_session_timeout"),An("Session creation timed out. Please try again.","error"))},3e4)},[br,An]),Hn=t4(),Er=cV(),hn=SV(),Mr=CV(),ra=hn.activeSessionId,Hu=j.useMemo(()=>ra?bJ(Er.getChannelMessages(yJ(ra))):null,[ra,Er]);j.useCallback(Z=>{const z=Qn(Z);On.current=z,ft(),Er.initFromBackend(z,[],[]),Hn.initFromBackend(z,[],[],[]),hn.initFromBackend(z,[]),br(),pt(null),Ee(null),Ce(null)},[Hn,Er,br,ft,Qn,hn]);const Rs=j.useCallback(Z=>{const z=Qn(Z),ne=cn();return Re.current=!0,Rn.current=ne,ve.current+=1,vn.current=z,ft(),p(`Switching to ${z}...`),ne},[ft,cn,Qn]),sh=j.useRef(!1);j.useLayoutEffect(()=>{rn.current=Er,Xt.current=Hn,mt.current=hn,Ht.current=Mr,it.current=Z=>{if(!Hn.activeBoardId||Hn.activeBoardColumns.length===0)return;const ne=Hn.activeBoardColumns.find(ae=>ae.name==="Todo")?.id??Hn.activeBoardColumns[0].id;Hn.createTask({boardId:Hn.activeBoardId,columnId:ne,title:Z.title,priority:Z.priority,assigneeIds:Z.assignee_id?[Z.assignee_id]:[]})},sh.current=!0}),j.useEffect(()=>{wt.current=B},[B]),j.useEffect(()=>{tt.current=q},[q]),j.useEffect(()=>{const Z=e.current,z=ne=>{w(ne),S(ae=>ae+1)};return Z.on("agentSelected",z),()=>{Z.off("agentSelected",z)}},[]);const ia=j.useRef(new Map),si=j.useRef(null),As=j.useCallback(Z=>{const z=ia.current;if(z.size===0)return;const ne=Z?[Z]:Array.from(z.keys());for(const ae of ne){const he=z.get(ae);if(!he)continue;z.delete(ae);const je=mt.current;he.draftText&&je?.appendDraft(ae,he.draftText,he.draftIteration,he.draftTurnId),je?.updateSession(ae,he.sessionPatch),Object.keys(he.kanbanPatch).length>0&&Xt.current?.updateTask(ae,he.kanbanPatch)}z.size===0&&si.current!==null&&(window.clearTimeout(si.current),si.current=null)},[]),oh=j.useCallback(()=>{si.current===null&&(si.current=window.setTimeout(()=>{si.current=null,As()},80))},[As]),Ms=j.useRef(null),sa=j.useCallback(()=>{Ms.current===null&&(Ms.current=window.setTimeout(()=>{Ms.current=null,S(Z=>Z+1)},300))},[]);j.useEffect(()=>{const Z=new X3(r,{onSnapshot:z=>{if(!Se(z))return;g(z);const ne=z.timeline.slice(-Tj);v(ne);const ae=new Set;for(const je of ne)ae.add(je.event_id);Et.current=ae,e.current.pushSnapshot(z);const he=Object.entries(z.agents??{});if(he.length>0){const je=Rj(he.map(([Ke,ze])=>({...ze&&typeof ze=="object"?ze:{},agent_id:Ke})),wt.current);wt.current=je,U(je)}z.exec_mode&&G(ks(z.exec_mode)),z.company_profile&&P(Uc(z.company_profile)),z.task_preferred_agent&&ee(Cs(z.task_preferred_agent)),S(je=>je+1)},onEvent:z=>{try{if(!Nt(z,!1))return;if(Et.current.has(z.event_id)){Et.current.delete(z.event_id);return}if(v(ne=>[...ne.slice(-Tj+1),z]),e.current.pushEvent(z),z.type==="task_routed"&&z.agent_id){if(tt.current==="company"||tt.current==="org")return;const ne=z.data?.task_id;if(ne&&!Xt.current?.tasks.find(ae=>ae.id===ne)){const ae=typeof z.data?.content_preview=="string"?z.data.content_preview.slice(0,80):"Task";it.current?.({title:ae,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,ae=typeof ne.task_id=="string"?ne.task_id:"";if(ae){const he=z.type==="assistant_delta"||z.type==="thinking_delta";he||As(ae);const je=mt.current,Ke=Xt.current,ze=je?.sessions.find(da=>da.taskId===ae),Bt=typeof ne.work_item_projection_id=="string"?ne.work_item_projection_id:"",Ft=(typeof ne.execution_mode=="string"?ne.execution_mode:"")==="task_mode"||Bt==="task_mode_execution",It=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,Ot=!!Bt&&Bt!=="task_mode_execution"&&!Ft;Ot&&!he&&ze?.isCompanyRuntime!==!0&&je?.setCompanyRuntime(ae,!0);const dr={lastRuntimeEventType:z.type,...z.type==="member_inbox_updated"?{}:{updatedAt:Date.now()},...Ey(ne)},fr=typeof ne.tool_name=="string"?ne.tool_name:void 0,ua={...Ny(ne),...fr!==void 0?{currentTool:fr||void 0}:{},...fr?{displayTool:fr}:{}};if(he){const da=ia.current;let rr=da.get(ae);const Hl=z.type==="assistant_delta"&&typeof ne.text=="string"?ne.text:"";rr&&Hl&&rr.draftText&&rr.draftTurnId!==void 0&&It!==void 0&&rr.draftTurnId!==It&&(As(ae),rr=void 0),rr||(rr={draftText:"",sessionPatch:{},kanbanPatch:{}},da.set(ae,rr)),Hl&&(rr.draftText+=Hl,rr.draftIteration=typeof ne.iteration=="number"?ne.iteration:rr.draftIteration??ze?.draftIteration,It!==void 0&&(rr.draftTurnId=It)),rr.sessionPatch={...rr.sessionPatch,...dr,...Ot?{isCompanyRuntime:!0}:{}},rr.kanbanPatch={...rr.kanbanPatch,...ua},oh()}else(z.type==="turn_started"||z.type==="turn_completed"||z.type==="turn_failed"||z.type==="checkpoint_saved")&&je?.clearDraft(ae),je?.updateSession(ae,dr),Ke?.updateTask(ae,ua);const Gu=Ft&&kJ.has(z.type)||SJ.has(z.type);z.type!=="assistant_delta"&&!Gu&&Kt(ae)}}if(z.type==="agent_removed"&&z.agent_id){const ne=z.agent_id;vM(ne);const ae=rn.current;ae&&(ae.markSenderDeleted(ne),ae.removeParticipant(ne))}sa()}catch(ne){console.error("[onEvent] Error:",ne,z)}},onAck:z=>{try{if(z.ok===!1){if(z.action==="create_session"&&br(),Ue(z))return;z.action==="session_detail"&&typeof z.task_id=="string"&&mt.current?.updateSession(z.task_id,{detailLoading:!1,detailError:String(z.error??"request_failed")}),p(String(z.error??"request_failed")),Zn(null),mn(null),An(String(z.error??"Request failed"),"error")}if(z.ok&&z.action==="employee_imported"&&An("Employee deployed to office!"),z.ok&&z.action==="talent_imported"&&An(`Imported ${z.count??0} templates!`),z.ok&&z.action==="talent_hired"&&(kn(null),An(`${z.name??"Agent"} hired and added to office!`)),z.ok&&z.action==="architecture_reset"&&(Pe(null),qe(null)),z.ok&&z.action==="session_detail"){if(!Nt(z,!1))return;const ne=ue(z);if(ne!==null&&ne!==ve.current)return;const ae=typeof z.task_id=="string"?z.task_id:"",he=Array.isArray(z.messages)?z.messages.map(Lf):[],je=typeof z.message_count=="number"?z.message_count:he.length,Ke=rn.current;Ke&&he.length>0&&Ke.mergeMessagesFromBackend(he);const ze=mt.current;if(ze&&ae){const Bt=ze.sessions.find(dr=>dr.taskId===ae),on=String(Bt?.draftTurnId??"").trim();on&&he.some(dr=>{if(dr.sender==="user")return!1;const fr=dr.metadata??{};return String(fr.transcript_kind??fr.kind??"").trim()!=="runtime_v2_assistant"?!1:String(fr.canonical_turn_id??fr.turn_id??"").trim()===on})&&ze.clearDraft(ae);const It=z.session_state,Ot=It&&typeof It=="object"?XR(It):null;ze.updateSession(ae,{...Ot??{},...typeof z.handoff_context=="string"?{handoffContext:z.handoff_context}:{},...typeof z.handoff_to=="string"?{handoffTo:z.handoff_to}:{},messageCount:je,detailLoaded:!0,fullLoaded:z.detail_level==="full"&&z.has_more!==!0,hasMore:z.has_more===!0,detailLoading:!1,detailError:void 0,viewGeneration:ne??ve.current})}}if(Array.isArray(z.agents)){const ne=Rj(z.agents,wt.current);wt.current=ne,U(ne);for(const ae of ne)e.current.ensureAgent(ae.agent_id,ae.name,ae.office_id,ae.appearance?.palette,ae.appearance?.desk_id);S(ae=>ae+1)}if(z.ok&&(z.agent_id||z.deleted)&&(z.deleted&&(Zn(null),mn(null),An("Agent removed")),z.agent_id&&!z.deleted&&An("Agent created!"),t.current?.listAgents()),z.ok&&Array.isArray(z.projects)){const ne=Ht.current;if(ne){const ae=ct(),he=!Xe.current,je=!Xe.current&&!Re.current,Ke=typeof z.active_project_id=="string"?z.active_project_id.trim():"",ze=z.action==="create_project"&&typeof z.project_id=="string"?z.project_id.trim():"",Bt=je?Qn(ze||Ke||On.current):ze?Qn(ze):ct();if(ze&&(Re.current=!0),Xe.current=!0,On.current=Bt,ne.initFromBackend(z.projects,Bt),Bt!==ae||he){const on=cn();Rn.current=on,vn.current=Bt,ve.current+=1,p(`Switching to ${Bt}...`),t.current?.switchProject(Bt,on)}}}if(z.ok&&Array.isArray(z.channels)){if(!Se(z))return;const ne=Ij(z),ae=sn(z);if(!ae)return;const he=vn.current===ae||ct()!==ae;On.current=ae,vn.current=null,Ht.current?.setActiveProject(ae),he&&(ft(),pt(null),Ee(null),Ce(null)),p("");const je=rn.current;je&&je.initFromBackend(ae,ne.channels,ne.messages);const Ke=Xt.current;Ke&&Ke.initFromBackend(ae,ne.boards,ne.columns,ne.tasks);const ze=mt.current;if(ze){ze.initFromBackend(ae,ne.sessions);const Bt=ze.activeSessionId;Bt&&Kt(Bt,"full",!0)}}}catch(ne){console.error("[onAck] Error:",ne)}},onStatus:(z,ne)=>{if(d(z),p(ne??""),z==="connected"){const ae=ct();Z.listProjects(),Z.orgInfo(),Z.orgSavedList(),Z.collabSync(ae,void 0,ve.current)}},onCollabMessage:(z,ne)=>{try{if(z==="project_index_push"){if(!Se(ne))return}else if(!Nt(ne,!1))return;const ae=rn.current;if(z==="chat_new_message")ae&&ae.addMessageFromBackend(Lf(ne));else if(z==="chat_channel_created")ae&&ae.addChannelFromBackend(VR(ne));else if(z==="session_runtime_control"){const he=mt.current;if(he){const je=Array.isArray(ne.task_ids)?ne.task_ids.map(String).filter(Boolean):[],Ke={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 ze of je)he.updateSession(ze,Ke)}}else if(z==="board_task_status_changed"){const he=String(ne.task_id??""),je=String(ne.column_id??""),Ke=String(ne.status??""),ze=["done","failed","cancelled"].includes(Ke);if(he&&je){const Bt=Xt.current;if(Bt){const Ft=Bt.tasks.find(It=>It.id===he);if(Ft){const It={};Ft.columnId!==je&&Bt.moveTask(he,je,0),Ke==="running"?(!Ft.agentStatus||Ft.agentStatus==="idle")&&(It.agentStatus="reflecting"):(Ft.agentStatus||Ft.currentTool||Ft.displayTool)&&(It.agentStatus=void 0,It.currentTool=void 0,It.displayTool=void 0),Object.keys(It).length>0&&Bt.updateTask(he,It)}}const on=mt.current;if(on){const Ft=on.sessions.find(Ot=>Ot.taskId===he),It={columnId:je,status:Ke||je};Ke==="running"?(!Ft?.agentStatus||Ft.agentStatus==="idle")&&(It.agentStatus="reflecting"):(Ft?.agentStatus||Ft?.currentTool||Ft?.displayTool||ze)&&(It.agentStatus=void 0,It.currentTool=void 0,It.displayTool=void 0),Object.assign(It,R4(Ft,Ke)),on.updateSession(he,{...It})}}}else if(z==="execution_mode_resolved"){const he=String(ne.mode??""),je=String(ne.profile??"");if(he){const Ke=ks(he);G(Ke),P(Ke==="org"?"custom":Ke==="company"?Uc(je):"corporate")}else je&&P(Uc(je))}else if(z==="project_run_updated"||z==="seat_digest_updated"||z==="work_item_batch_updated")t.current?.collabSync(ct(),void 0,ve.current);else if(z==="collab_sync_push"||z==="project_index_push"){const he=String(ne.sync_scope??ne.syncScope??"").toLowerCase(),je=z==="project_index_push"||he==="index";if(!Se(ne))return;const Ke=Ij(ne),ze=sn(ne);if(!ze)return;const Bt=vn.current===ze||ct()!==ze;if(On.current=ze,vn.current=null,Ht.current?.setActiveProject(ze),Bt&&(ft(),pt(null),Ee(null),Ce(null)),p(""),je){const Ot=mt.current;Ot&&Ot.initFromBackend(ze,Ke.sessions,{preserveExistingWhenIncomingPartial:!0,preserveActiveWhenMissing:!0}),t.current?.collabSync(ze,void 0,ve.current);return}const on=rn.current;on&&on.initFromBackend(ze,Ke.channels,Ke.messages);const Ft=Xt.current;Ft&&Ft.initFromBackend(ze,Ke.boards,Ke.columns,Ke.tasks);const It=mt.current;if(It){It.initFromBackend(ze,Ke.sessions);const Ot=It.activeSessionId;Ot&&Kt(Ot,"full",!0)}}}catch(ae){console.error("[onCollabMessage] Error:",ae)}},onAgentRuntimeUpdate:z=>{if(!Nt(z,!1))return;z.agent_id&&U(ae=>{const he=ae.map(je=>je.agent_id===z.agent_id?{...je,status:z.status,runtime_status:z.status,current_tool:z.current_tool??void 0,current_task_id:z.task_id??void 0}:je);return wt.current=he,he});const ne=Xt.current;if(ne&&z.task_id){const ae=z,he=Ny(ae),je=Ey(ae);if(kf(ae,"current_tool")){const ze=typeof ae.current_tool=="string"&&ae.current_tool.trim()?ae.current_tool:void 0;he.currentTool=ze,je.currentTool=ze,ze&&(he.displayTool=ze,je.displayTool=ze)}if(kf(ae,"display_tool")){const ze=typeof ae.display_tool=="string"&&ae.display_tool.trim()?ae.display_tool:void 0;ze&&(he.displayTool=ze,je.displayTool=ze)}if(NJ(z.status)&&(he.displayTool=void 0,je.displayTool=void 0),kf(ae,"tool_elapsed_ms")){const ze=typeof ae.tool_elapsed_ms=="number"?ae.tool_elapsed_ms:void 0;he.toolElapsedMs=ze,je.toolElapsedMs=ze}if(kf(ae,"last_tool_summary")){const ze=typeof ae.last_tool_summary=="string"?ae.last_tool_summary:void 0;he.lastToolSummary=ze,je.lastToolSummary=ze}typeof z.iteration=="number"&&(he.iterationCount=z.iteration),ne.updateTask(z.task_id,{agentStatus:z.status,...he});const Ke=mt.current;Ke&&Ke.updateSession(z.task_id,{agentStatus:z.status,...je,updatedAt:Date.now()}),Kt(z.task_id)}},onWorkerNotification:z=>{if(!Nt(z,!1))return;const ne=z,ae=typeof z.task_id=="string"?z.task_id:"";if(!ae)return;const he=ne;mt.current?.updateSession(ae,{...Ey(ne),latestNotification:he,updatedAt:Date.now()}),Xt.current?.updateTask(ae,{...Ny(ne),latestNotification:he}),Kt(ae)},onKanbanViewData:z=>{if(!Nt(z,!1))return;const ne=Xt.current;ne&&ne.initFromBackend(sn(z)||ct(),(z.boards??[]).map(UR),(z.columns??[]).map(GR),(z.tasks??[]).map(qR))},onSessionProgress:z=>{if(!Nt(z,!1))return;const ne=mt.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 ae=String(z.entry.summary??"").trim();ne.updateSession(z.task_id,{...ae?{currentTool:ae,displayTool:ae}:{},updatedAt:z.entry.timestamp*1e3})}z.entry.type!=="thinking"&&z.entry.type!=="verification"&&Kt(z.task_id)}},onBoardEvent:z=>{if(!Nt(z,!1))return;const ne=Xt.current;if(!ne)return;const ae=String(z.task_id??"");if(!ae)return;const he=mt.current;if(he&&he.sessions.find(dr=>dr.taskId===ae)?.mode==="child")return;const je=Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):[],Ke=jy(z);if(ne.tasks.find(Ot=>Ot.id===ae)){const Ot={};z.title&&(Ot.title=String(z.title)),z.display_id&&(Ot.displayId=String(z.display_id)),je.length>0&&(Ot.assigneeIds=je),Object.assign(Ot,Ke),Object.keys(Ot).length>0&&ne.updateTask(ae,Ot);return}const Bt=String(z.board_id??ne.activeBoardId??"default"),on=ne.columns.filter(Ot=>Ot.boardId===Bt),It=on.find(Ot=>Ot.name==="Todo")?.id??on[0]?.id??"";It&&(ne.createTask({boardId:Bt,columnId:It,title:String(z.title??"Untitled"),taskId:ae,displayId:z.display_id?String(z.display_id):void 0,assigneeIds:je}),Object.keys(Ke).length>0&&ne.updateTask(ae,Ke))},onSessionCreated:z=>{try{if(!Nt(z,!1))return;const ne=mt.current;if(!ne)return;const ae=String(z.task_id??"");if(!ae)return;const he=sn(z);if(!he)return;const je=ae?ne.sessions.find(Ot=>Ot.taskId===ae):void 0,Ke=jy(z),ze=ks(z.exec_mode??je?.execMode),Bt=Cy(ze,z.company_profile??je?.companyProfile),on=Bo(ze,z.org_id??z.organization_id??je?.orgId);ze==="org"&&on&&Pe(on),ne.createSession({projectId:he,taskId:ae,channelId:z.channel_id,sessionId:z.session_id,parentSessionId:z.parent_session_id,originTaskId:z.origin_task_id??je?.originTaskId??ae,mode:z.parent_session_id?"child":"primary",execMode:ze,companyProfile:Bt,orgId:on,preferredAgent:Cs(z.preferred_agent??je?.preferredAgent),title:z.title,status:z.status,columnId:je?.columnId??"todo",assigneeIds:Array.isArray(z.assignee_ids)?z.assignee_ids.map(String):je?.assigneeIds??[],priority:je?.priority??null,tags:je?.tags??[],progressLog:je?.progressLog??[],createdAt:typeof z.created_at=="number"?z.created_at*1e3:je?.createdAt??Date.now(),updatedAt:Date.now(),messageCount:0,...Ke});const Ft=Xt.current;if(Ft&&ze==="task"&&!z.parent_session_id&&ae&&!Ft.tasks.find(Ot=>Ot.id===ae)&&Ft.activeBoardId){const dr=Ft.columns.filter(fr=>fr.boardId===Ft.activeBoardId).find(fr=>fr.name==="Todo");dr&&Ft.createTask({boardId:Ft.activeBoardId,columnId:dr.id,title:z.title,taskId:ae,assigneeIds:je?.assigneeIds??[]})}if(Tt.current){if(ht.current!==he)return;br(),ne.setActiveSession(z.task_id),Kt(z.task_id,"full",!0)}}catch(ne){console.error("[onSessionCreated] Error:",ne)}},onSessionUpdated:z=>{try{if(!Nt(z,!1))return;const ne=mt.current;if(!ne||!z.task_id)return;const ae=ks(z.exec_mode??ne.sessions.find(he=>he.taskId===z.task_id)?.execMode);ne.updateSession(z.task_id,{...z.exec_mode?{execMode:ae}:{},...z.exec_mode||z.company_profile?{companyProfile:Cy(ae,z.company_profile)}:{},..."org_id"in z||"organization_id"in z?{orgId:Bo(ae,z.org_id??z.organization_id)}:{},...z.preferred_agent?{preferredAgent:Cs(z.preferred_agent)}:{},...z.selected_execution_agent?{selectedExecutionAgent:Cs(z.selected_execution_agent)}:{}}),(z.exec_mode==="org"||z.exec_mode==="custom")&&(z.org_id||z.organization_id)&&Pe(String(z.org_id??z.organization_id))}catch(ne){console.error("[onSessionUpdated] Error:",ne)}},onSessionMessage:z=>{try{if(!Nt(z,!1))return;const ne=rn.current;if(!ne)return;const ae=Lf(z);console.debug("[onSessionMessage]",ae.sender,ae.channelId,ae.content?.slice(0,60)),ne.addMessageFromBackend(ae);const he=ae.channelId.startsWith("session:")?ae.channelId.slice(8):"";he&&ae.sender!=="user"&&(mt.current?.clearDraft(he),Kt(he,"full",!0))}catch(ne){console.error("[onSessionMessage] Error:",ne)}},onSessionTitleUpdated:z=>{try{if(!Nt(z,!1))return;const ne=mt.current;ne&&ne.updateSession(z.task_id,{title:z.title});const ae=Xt.current;if(ae){const je=ne?.sessions.find(ze=>ze.taskId===z.task_id)?.originTaskId??z.task_id,Ke=ae.boards.find(ze=>ze.id===je);Ke&&Ke.name!==z.title&&ae.updateBoardName(je,z.title)}}catch(ne){console.error("[onSessionTitleUpdated] Error:",ne)}},onSessionDeleted:z=>{try{if(!Nt(z,!1))return;const ne=mt.current;if(!ne)return;ne.activeSessionId===z.task_id&&ne.setActiveSession(null),ne.deleteSession(z.task_id);const ae=Xt.current;ae&&ae.deleteTask(z.task_id);const he=rn.current;he&&he.removeSessionData(z.task_id)}catch(ne){console.error("[onSessionDeleted] Error:",ne)}},onProjectSwitched:z=>{if(!Se(z))return;const ne=typeof z.project_id=="string"?z.project_id.trim():"";ne&&(vn.current=ne,p(`Switching to ${ne}...`))},onProjectDeleted:z=>{const ne=Ht.current;ne&&ne.removeProject(z.project_id)},onOrgInfo:z=>{const ne=cN(z);re(ne),qe(ae=>ae===null?ne?.org_version??0:ae),(z?.project_run?.execution_model==="multi_team_org"||Array.isArray(z?.work_items)&&z.work_items.length>0)&&t.current?.collabSync(ct(),void 0,ve.current)},onRecoveryStatus:z=>{Nt(z,!1)&&de(z)},onCommsState:z=>{Nt(z,!1)&&Ee(z)},onCommsMessage:z=>{Nt(z,!0)&&Ce(z)},onRecoveryResult:z=>{Nt(z,!1)&&(z?.status==="completed"||z?.status==="cancelled")&&t.current?.recoveryAction(ct(),"scan")},onTalentList:z=>{Ge(z.templates??[]),z.talent_dir&&yt(z.talent_dir)},onEmployeeDetail:z=>{bt(z)},onReorgList:z=>{me(z.proposals??[])},onOrgConfigExport:z=>{be(z.yaml??"")},onOrgConfigImport:z=>{z.ok?(Fe(z.preview??null),Wt(null),z.dry_run||(Pe(null),qe(null))):(Wt(z.error??"Import failed"),Fe(null))},onOrgSavedList:z=>{ke(z.orgs??[]),"active_name"in z&&Pe(z.active_name??null)},onOrgSavedSaveAs:z=>{z.ok?(t.current?.orgSavedList(),Pe(z.name),qe(null),Yt({kind:"ok",text:`Saved "${z.name}"`})):Yt({kind:"error",text:`Save failed: ${z.error??"unknown"}`})},onOrgSavedCreate:z=>{if(Mn(!1),Dn({...z,nonce:Date.now()}),z.ok){const ne=z.organization_id||z.name;Pe(ne),G("org"),P("custom"),t.current?.orgSavedList(),t.current?.orgInfo(),qe(null),Yt({kind:"ok",text:`Created "${z.organization_name||ne}"`})}else Yt({kind:"error",text:`Create failed: ${z.error??"unknown"}`})},onOrgSavedLoad:z=>{z.ok?(Pe(z.name),G("org"),P("custom"),t.current?.orgSavedList(),qe(null),Yt({kind:"ok",text:`Loaded "${z.name}"`})):Yt({kind:"error",text:`Load failed: ${z.error??"unknown"}`})},onOrgSavedDelete:z=>{z.ok?(t.current?.orgSavedList(),Pe(ne=>ne===z.name?(qe(null),null):ne),Yt({kind:"ok",text:`Deleted "${z.name}"`})):Yt({kind:"error",text:`Delete failed: ${z.error??"unknown"}`})},onMarketBrowse:z=>{rt(z.presets??[])},onMarketPreview:z=>{Je(z)},onChildSessionCreated:z=>{if(!Nt(z,!1))return;const ne=mt.current;if(!ne)return;const ae=jy(z),he=sn(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:[],...ae}),z.parent_session_id)){const je=ne.sessions.find(Ke=>Ke.sessionId===z.parent_session_id||Ke.taskId===z.parent_session_id);je&&!je.isCompanyRuntime&&ne.setCompanyRuntime(je.taskId,!0)}},onWorkItemProgress:z=>{if(!Nt(z,!1))return;const ne=mt.current;if(!ne||!z.task_id||!z.entry)return;const ae=typeof z.entry.work_item_projection_id=="string"?z.entry.work_item_projection_id:"",he=ae&&ae!=="company_runtime"?ae:void 0,je=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,Ke=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:je;ne.updateSession(z.task_id,{isCompanyRuntime:!0,...he?{workItemProjectionId:he}:{}});const ze=Xt.current;ze&&he&&ze.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:je,executionTurnId:Ke,roleName:z.entry.role_name,detail:z.entry.detail})}});return t.current=Z,Z.connect(),()=>{Z.disconnect();for(const z of Jt.current)clearTimeout(z);Jt.current.clear();for(const z of Ae.current.values())clearTimeout(z);Ae.current.clear(),si.current!==null&&(window.clearTimeout(si.current),si.current=null),ia.current.clear(),Ms.current!==null&&(window.clearTimeout(Ms.current),Ms.current=null)}},[r]),j.useEffect(()=>{const Z=()=>{if(typeof document<"u"&&document.visibilityState==="hidden")return;const ne=Date.now();ne-He.current<1500||(He.current=ne,t.current?.collabSync(ct(),void 0,ve.current))},z=()=>{document.visibilityState==="visible"&&Z()};return window.addEventListener("focus",Z),document.addEventListener("visibilitychange",z),()=>{window.removeEventListener("focus",Z),document.removeEventListener("visibilitychange",z)}},[ct]),j.useEffect(()=>{if(!yn)return;const Z=setTimeout(()=>Yt(null),3e3);return()=>clearTimeout(Z)},[yn]);const oi=j.useCallback(()=>{t.current?.orgSavedList()},[]),Dl=j.useCallback((Z,z)=>{t.current?.orgSavedSaveAs(Z,z)},[]),Ol=j.useCallback((Z,z)=>{Mn(!0),Dn(null),t.current?.orgSavedCreate(Z,z)},[]),ns=j.useCallback(Z=>{t.current?.orgSavedLoad(Z)},[]),Ds=j.useCallback(Z=>{t.current?.orgSavedDelete(Z)},[]),Fu=j.useCallback(()=>{G("company"),P("corporate"),qe(null),t.current?.setExecutionMode("company","corporate",X),t.current?.orgInfo()},[X]);j.useEffect(()=>{if(!Y)return;const Z=Y;e.current.setAgentBubble(Z,"Done!");const z=setTimeout(()=>{Jt.current.delete(z),e.current.setAgentBubble(Z,null)},3e3);Jt.current.add(z),Q(null)},[Y]),j.useCallback((Z,z,ne)=>{const ae=Hn.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(ct(),Z,he,ne);if(ae){const he=z.map(je=>B.find(Ke=>Ke.agent_id===je)?.name??je);tJ(Er,ae,he)}S(he=>he+1)},[Hn.tasks,Er,B,ct]);const oa=j.useMemo(()=>{const Z=h?Object.keys(h.agents).length:0,z=h?.skills.total??0;return{totalAgents:Z,totalSkills:z}},[h]),ki=j.useMemo(()=>{const Z=e.current.getCharacterCards();return(O?Z:Z.filter(ne=>!ne.isSubagent)).slice().sort((ne,ae)=>ne.displayName.localeCompare(ae.displayName))},[O,k]),zi=j.useMemo(()=>Bn(),[k]),Si=j.useMemo(()=>{const Z={};for(const z of ki)z.officeId&&(Z[z.id]=z.officeId);return Z},[ki]),[Ll,rs]=j.useState(null),[ai,aa]=j.useState(""),vo=Z=>{ai.trim()&&(e.current.renameOffice(Z,ai.trim()),S(z=>z+1)),rs(null)},zl=(Z,z)=>{e.current.assignAgentToOffice(z,Z),t.current?.moveAgent(z,Z),S(ne=>ne+1)},la=(Z,z)=>{e.current.changeAgentSeat(Z,z),S(ne=>ne+1)},Jn=ki.find(Z=>Z.id===_)??null,Vu=j.useMemo(()=>Jn?e.current.getSeatsForOffice(Jn.officeId):[],[Jn?.officeId,k]),ur=j.useMemo(()=>{const Z=y.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")}},[y]),is=j.useMemo(()=>["all",...Array.from(new Set(y.map(z=>z.type)))],[y]),ca=j.useMemo(()=>(A==="all"?y:y.filter(z=>z.type===A)).slice().reverse(),[A,y]),bo=()=>{const Z=o.trim();!Z||Z===r||i(Z)},Pl=j.useCallback(Z=>{w(Z),S(z=>z+1)},[]),Bl=j.useCallback((Z,z,ne,ae)=>{const he=hn.sessions.find(fr=>fr.taskId===Z),je=ks(z),Ke=Uc(he?.companyProfile??J),ze=je==="org"?"custom":"corporate",Bt=String(he?.orgId??Te??"").trim(),on=Bo(je,ae??he?.orgId??Te),Ft=ks(he?.execMode),It=Uc(J);if(Ft===je&&Ke===ze&&Bt===String(on??"").trim()&&q===je&&It===ze)return;hn.updateSession(Z,{execMode:je,companyProfile:ze,orgId:on,preferredAgent:he?.preferredAgent??X}),G(je),P(ze),je==="org"&&on&&Pe(on);const Ot=he?.preferredAgent??X,dr=je==="task"?void 0:ze;t.current?.sessionUpdateConfig(ct(),Z,je,dr,Ot,on),t.current?.setExecutionMode(je,dr,Ot,on)},[hn,q,J,X,Te,ct]),$l=j.useCallback((Z,z)=>{const ne=hn.sessions.find(Bt=>Bt.taskId===Z),ae=Cs(z),he=ks(ne?.execMode),je=he==="org"?"custom":"corporate";hn.updateSession(Z,{preferredAgent:ae,selectedExecutionAgent:ae}),ee(ae);const Ke=he==="task"?void 0:je,ze=Bo(he,ne?.orgId??Te);t.current?.sessionUpdateConfig(ct(),Z,he,Ke,ae,ze),t.current?.setExecutionMode(he,Ke,ae,ze)},[hn,J,Te,ct]),_o=j.useCallback((Z,z,ne)=>{if(vn.current||Tt.current)return;const ae=ct();Cn(ae);const he=ks(Z),je=he==="org"?"custom":he==="company"?"corporate":void 0;t.current?.createSession(ae,void 0,he,je,X,Bo(he,ne??Te)),W("workspace")},[ct,Cn,X,Te]),ss=j.useCallback((Z,z)=>{const ne=hn.sessions.find(je=>je.taskId===Z),ae=ne?.resumeParentSessionId??ne?.parentSessionId??ne?.sessionId,he=ne?.resumeParentTaskId??(ae?hn.sessions.find(je=>je.sessionId===ae&&!je.parentSessionId)?.taskId:void 0)??Z;for(const je of hn.sessions)(je.taskId===Z||je.taskId===he||ae&&(je.parentSessionId===ae||je.sessionId===ae))&&hn.updateSession(je.taskId,{...z,resumeParentTaskId:he,resumeParentSessionId:ae})},[hn]),Uu=j.useCallback(Z=>{const z=hn.sessions.find(ae=>ae.taskId===Z);(z?.execMode==="company"||z?.execMode==="org"||z?.execMode==="custom"||z?.isCompanyRuntime||z?.parentSessionId||z?.companyProfile)&&ss(Z,{runtimeControlState:"suspending",canStop:!1,canResume:!1}),t.current?.sessionStop(ct(),Z)},[hn.sessions,ss,ct]),ah=j.useCallback(Z=>{const z=hn.sessions.find(ae=>ae.taskId===Z);(z?.execMode==="company"||z?.execMode==="org"||z?.execMode==="custom"||z?.isCompanyRuntime||z?.parentSessionId||z?.companyProfile)&&ss(Z,{runtimeControlState:"resuming",canStop:!1,canResume:!1}),t.current?.sessionResume(ct(),Z)},[hn.sessions,ss,ct]);j.useCallback((Z,z,ne)=>{const ae=ks(Z),he=ae==="org"?"custom":"corporate",je=Bo(ae,ne??Te);G(ae),P(he),je&&Pe(je),t.current?.setExecutionMode(ae,ae==="task"?void 0:he,X,je)},[J,X,Te]);const Os=q==="org",lh=q==="task"?"task":q==="org"?`company/${Te??"org"}`:`company/${J}`;return c.jsxs("div",{className:`app-shell theme-${C}`,children:[yn&&c.jsx("div",{className:`org-toast org-toast--${yn.kind}`,role:"status","aria-live":"polite",children:yn.text}),c.jsxs("header",{className:"topbar",children:[c.jsxs("div",{className:"topbar-left",children:[c.jsxs("span",{className:"logo-text",children:["Open",c.jsx("span",{className:"logo-accent",children:"OPC"})]}),c.jsx("div",{className:`conn-dot ${CJ(u)}`,title:`${u}${m?` — ${m}`:""} -${r}`}),c.jsx(RV,{projects:Mr.projects,activeId:Mr.activeProjectId,onSelect:Z=>{const z=Rs(Z);t.current?.switchProject(Z,z)},onCreate:Z=>{t.current?.createProject(Z)},onDelete:Z=>t.current?.deleteProject(Z)})]}),c.jsxs("div",{className:"topbar-center",children:[c.jsxs("div",{className:"page-nav",children:[c.jsxs("button",{className:`page-nav-btn${$==="workspace"?" active":""}`,onClick:()=>W("workspace"),children:["Workspace",(()=>{const Z=Er.channels.reduce((z,ne)=>z+Er.getUnreadCount(ne.id),0);return Z>0?c.jsx("span",{className:"nav-unread-badge",children:Z>99?"99+":Z}):null})()]}),c.jsx("button",{className:`page-nav-btn${$==="office"?" active":""}`,onClick:()=>W("office"),children:"Office"}),c.jsx("button",{className:`page-nav-btn${$==="org"?" active":""}`,onClick:()=>W("org"),children:"Org"})]}),c.jsxs("div",{className:"stat-chips",children:[c.jsxs("span",{className:"stat-chip",children:[c.jsx("b",{children:oa.totalAgents})," agents"]}),c.jsxs("span",{className:"stat-chip",children:[c.jsx("b",{children:oa.totalSkills})," skills"]}),c.jsxs("span",{className:"stat-chip",children:[c.jsx("b",{children:Hn.getOpenTaskCount()})," tasks"]})]})]}),c.jsxs("div",{className:"topbar-right",children:[c.jsxs("select",{className:"theme-select",value:Ar,title:"Outdoor lighting override",onChange:Z=>{const z=Z.target.value;jr(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:[c.jsx("option",{value:"auto",children:"Outdoor auto"}),c.jsx("option",{value:"day",children:"Outdoor day"}),c.jsx("option",{value:"night",children:"Outdoor night"})]}),c.jsxs("select",{className:"theme-select",value:C,onChange:Z=>N(Z.target.value),children:[c.jsx("option",{value:"midnight",children:"Midnight"}),c.jsx("option",{value:"neon",children:"Neon"}),c.jsx("option",{value:"paper",children:"Paper"}),c.jsx("option",{value:"retro",children:"Retro"}),c.jsx("option",{value:"terminal",children:"Terminal"}),c.jsx("option",{value:"cozy",children:"Cozy"}),c.jsx("option",{value:"openopc",children:"OpenOPC"})]}),c.jsx("button",{className:`icon-btn ${H?"active":""}`,onClick:()=>V(Z=>!Z),title:"Developer Tools",children:c.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[c.jsx("path",{d:"M5.5 2L2 5.5 5.5 9",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),c.jsx("path",{d:"M10.5 7L14 10.5 10.5 14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})})]})]}),$==="workspace"&&c.jsx(rV,{boardStore:Hn,chatStore:Er,sessionStore:hn,agents:B,officeMap:Si,execMode:q,companyProfile:J,taskPreferredAgent:X,projectId:Mr.activeProjectId,orgInfoData:te,onNavigateToOrg:()=>W("org"),savedOrgsList:nn,activeSavedOrg:Te,onSavedOrgsList:oi,onSavedOrgLoad:ns,recoveryStatus:oe,onRecoveryResume:Z=>t.current?.recoveryAction(ct(),"resume",Z),onRecoveryCancel:Z=>t.current?.recoveryAction(ct(),"cancel",Z),commsState:se,commsMessage:we,onCommsRefresh:Z=>{const{project_id:z,...ne}=Z??{};t.current?.commsState(ct(),ne)},onCommsReadMessage:Z=>t.current?.commsReadMessage(ct(),Z),onRunTask:(Z,z,ne,ae,he)=>{t.current?.send({type:"run_task",project_id:ct(),task_id:Z,title:z,description:ne,mode:ae,profile:he})},onCreateTask:(Z,z,ne,ae)=>{t.current?.send({type:"kanban_create_task",project_id:ct(),title:Z,board_id:z,column_id:ne,task_id:ae})},onMoveTask:(Z,z)=>{t.current?.send({type:"kanban_move_task",project_id:ct(),task_id:Z,column_id:z})},onCreateSession:()=>{if(vn.current||Tt.current)return;const Z=ct();Cn(Z),t.current?.createSession(Z,void 0,q,Cy(q),X,Bo(q,Te))},onSessionSend:(Z,z,ne,ae)=>t.current?.sessionSend(ct(),Z,z,ne,ae),onSecretarySend:Z=>t.current?.secretarySend(ct(),Z),onDeleteSession:Z=>t.current?.deleteSession(ct(),Z),onTitleChange:(Z,z)=>t.current?.sessionUpdateTitle(ct(),Z,z),onSessionConfigChange:Bl,onSessionTaskAgentChange:$l,onContinueInNewChat:_o,onSessionStop:Uu,onSessionResume:ah,onSessionComplete:Z=>t.current?.sessionComplete(ct(),Z),onLoadSessionDetail:(Z,z)=>t.current?.sessionDetail(ct(),Z,{...z,include:z?.detailLevel==="full"?["messages","session_state","progress","work_items","runtime_context"]:["messages","session_state"],viewGeneration:ve.current}),onOpenExecutionPanel:Z=>pt(Z),onCollabSync:()=>t.current?.collabSync(ct(),void 0,ve.current)}),$==="org"&&c.jsx("div",{className:"org-page",children:c.jsx(eJ,{data:te,sessionRecruitmentByRole:Hu,talents:Be,employeeDetail:qt,reorgProposals:vt,isCustomMode:Os,onRequestData:()=>t.current?.orgInfo(),onRequestTalents:()=>t.current?.talentList(),onRequestEmployeeDetail:Z=>t.current?.employeeDetail(Z),onHireTalent:(Z,z)=>{kn(Z),t.current?.talentHire(Z,z,void 0,te?.organization_id||Te||void 0)},hiringTemplateId:Dt,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:Oe,marketPreviewData:Qe,onMarketBrowse:()=>t.current?.marketBrowse(),onMarketPreview:Z=>t.current?.marketPreview(Z),onMarketApplyPreset:(Z,z)=>t.current?.marketApplyPreset(Z,z),onMarketClearPreview:()=>Je(null),onAddRole:(Z,z,ne,ae,he)=>t.current?.addRole(Z,z,ne,ae,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:fe,configImportPreview:Me,configImportError:$e,onSavedOrgsList:oi,onSavedOrgSaveAs:Dl,onSavedOrgCreate:Ol,onSavedOrgLoad:ns,onSavedOrgDelete:Ds,savedOrgsList:nn,activeSavedOrg:Te,activeSavedOrgVersionAtLoad:Ve,orgCreatePending:et,orgCreateResult:Tn,onSelectCorporate:Fu})}),$==="mapEditor"&&c.jsx("div",{className:"editor-page",children:c.jsx(GM,{bridge:e.current})}),c.jsxs("main",{className:`main-grid${$!=="office"?" hidden":""}${D?" sidebar-collapsed":""}`,children:[c.jsxs("section",{className:"canvas-wrap",children:[c.jsx(FM,{bridge:e.current,active:$==="office"}),c.jsx("button",{className:"canvas-float-btn",onClick:()=>I(Z=>!Z),title:O?"Hide sub-agents":"Show sub-agents",children:O?"👥":"👤"}),c.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:c.jsx("span",{className:"collapse-glyph",children:D?"❮":"❯"})})]}),c.jsx("aside",{className:"sidebar",children:c.jsx("div",{className:"sidebar-body",children:c.jsxs("div",{className:"team-panel",children:[c.jsxs("div",{className:"mode-info-bar",children:[c.jsx("span",{className:"mode-badge",children:q==="company"?`${q}/${J}`:lh}),Os?c.jsxs("span",{className:"mode-hint",children:["Manage your team in the ",c.jsx("b",{children:"Org"})," tab"]}):c.jsxs("span",{className:"mode-hint",children:["Switch to ",c.jsx("b",{children:"Org"})," mode to create or manage agents"]})]}),c.jsxs("div",{className:"section-label",children:["Offices ",c.jsx("span",{className:"count-badge",children:zi.length})]}),c.jsx("div",{className:"office-cards",children:zi.map(Z=>{const z=Uj(Z.id).length,ne=ki.filter(he=>he.officeId===Z.id),ae=ki.filter(he=>he.officeId!==Z.id&&!he.isSubagent);return c.jsxs("div",{className:"office-card",onClick:()=>e.current.panToOffice(Z.id),children:[c.jsxs("div",{className:"office-card-header",children:[Ll===Z.id?c.jsx("input",{className:"office-name-input",value:ai,onChange:he=>aa(he.target.value),onBlur:()=>vo(Z.id),onKeyDown:he=>{he.key==="Enter"&&vo(Z.id),he.key==="Escape"&&rs(null)},autoFocus:!0,onClick:he=>he.stopPropagation()}):c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"office-name",children:Z.name}),c.jsx("button",{className:"office-edit-btn",title:"Rename",onClick:he=>{he.stopPropagation(),rs(Z.id),aa(Z.name)},children:"✎"})]}),c.jsxs("span",{className:"office-capacity",children:[ne.length,"/",z]})]}),c.jsxs("div",{className:"office-agents",children:[ne.map(he=>c.jsx("span",{className:"office-agent-chip",title:`${he.displayName} — ${he.seatId??"no seat"}`,onClick:je=>{je.stopPropagation(),Pl(he.id)},children:he.displayName.slice(0,8)},he.id)),Os&&ne.length0&&c.jsxs("select",{className:"assign-dropdown",value:"",onClick:he=>he.stopPropagation(),onChange:he=>{he.target.value&&zl(Z.id,he.target.value)},children:[c.jsx("option",{value:"",children:"+ Move here"}),ae.map(he=>c.jsxs("option",{value:he.id,children:[he.displayName," (",zi.find(je=>je.id===ki.find(Ke=>Ke.id===he.id)?.officeId)?.name??"?",")"]},he.id))]})]})]},Z.id)})}),c.jsxs("div",{className:"section-label",children:["Active Agents ",c.jsx("span",{className:"count-badge",children:B.length})]}),c.jsxs("div",{className:"agent-list",children:[B.map(Z=>c.jsxs("div",{className:`agent-row ${_===Z.agent_id?"selected":""}`,children:[c.jsxs("button",{className:"agent-row-main",onClick:()=>Pl(Z.agent_id),children:[c.jsx("span",{className:`dot ${Z.status}`}),c.jsxs("div",{className:"agent-info",children:[c.jsx("span",{className:"agent-name",children:Z.name}),c.jsx("span",{className:"agent-spec",children:Z.specialties.slice(0,2).join(" · ")||"general"})]})]}),Os&&(Pt===Z.agent_id?c.jsx("span",{className:"agent-del",style:{pointerEvents:"none"},children:c.jsx("span",{className:"spinner-inline"})}):cr===Z.agent_id?c.jsxs("span",{className:"del-confirm",children:[c.jsx("span",{className:"del-confirm-label",children:"Delete?"}),c.jsx("button",{className:"del-confirm-yes",onClick:()=>{Zn(Z.agent_id),mn(null),t.current?.deleteAgent(Z.agent_id)},children:"Yes"}),c.jsx("button",{className:"del-confirm-no",onClick:()=>mn(null),children:"No"})]}):c.jsx("button",{className:"agent-del",title:`Remove ${Z.name}`,onClick:()=>mn(Z.agent_id),children:"×"}))]},Z.agent_id)),B.length===0&&c.jsx("div",{className:"empty-state",children:"No agents yet — click a template above to spawn one."})]}),Jn&&c.jsxs("div",{className:"agent-detail",children:[c.jsx("div",{className:"agent-detail-name",children:Jn.displayName}),c.jsxs("div",{className:"agent-detail-row",children:[c.jsx("span",{className:"detail-label",children:"State"}),c.jsx("span",{className:"detail-value",children:Jn.state})]}),c.jsxs("div",{className:"agent-detail-row",children:[c.jsx("span",{className:"detail-label",children:"Tool"}),c.jsx("span",{className:"detail-value",children:Jn.currentTool??"—"})]}),c.jsxs("div",{className:"agent-detail-row",children:[c.jsx("span",{className:"detail-label",children:"Task"}),c.jsx("span",{className:"detail-value",children:Jn.taskSummary??"—"})]}),c.jsxs("div",{className:"agent-detail-row",children:[c.jsx("span",{className:"detail-label",children:"Office"}),c.jsx("select",{className:"detail-select",value:Jn.officeId,onChange:Z=>{zl(Z.target.value,Jn.id)},disabled:!Os,children:zi.map(Z=>c.jsx("option",{value:Z.id,children:Z.name},Z.id))})]}),c.jsxs("div",{className:"agent-detail-row",children:[c.jsx("span",{className:"detail-label",children:"Seat"}),c.jsxs("select",{className:"detail-select",value:Jn.seatId??"",onChange:Z=>{Z.target.value&&la(Jn.id,Z.target.value)},disabled:!Os,children:[c.jsx("option",{value:"",children:"—"}),Vu.map(Z=>{const z=Z.id.replace(/^office-\d+-/,"").replace("-"," ").replace(/\b\w/g,ae=>ae.toUpperCase()),ne=Z.assigned&&Z.assignedTo!==Jn.id;return c.jsxs("option",{value:Z.id,disabled:ne,children:[z,ne?` (${Z.assignedTo})`:Z.assignedTo===Jn.id?" ✓":""]},Z.id)})]})]})]}),ki.length>B.length&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"section-label",children:["Characters",c.jsx("button",{className:"inline-btn",onClick:()=>I(Z=>!Z),children:O?"hide sub":"show sub"})]}),c.jsx("div",{className:"agent-list",children:ki.filter(Z=>!B.some(z=>z.agent_id===Z.id)).map(Z=>c.jsxs("button",{className:`agent-row-simple ${_===Z.id?"selected":""}`,onClick:()=>Pl(Z.id),children:[Z.isSubagent&&c.jsx("span",{className:"sub-badge",children:"SUB"}),c.jsx("span",{className:"agent-name",children:Z.displayName}),c.jsxs("span",{className:"agent-spec",children:[Z.state,Z.currentTool?` · ${Z.currentTool}`:""]})]},Z.id))})]})]})})})]}),H&&c.jsxs("div",{className:"dev-overlay",children:[c.jsxs("div",{className:"dev-header",children:[c.jsx("span",{className:"dev-title",children:"Developer Tools"}),c.jsx("button",{className:"icon-btn",onClick:()=>V(!1),children:"✕"})]}),c.jsxs("div",{className:"dev-group",children:[c.jsx("div",{className:"dev-label",children:"Connection"}),c.jsxs("div",{className:"input-row",children:[c.jsx("input",{value:o,onChange:Z=>a(Z.target.value),placeholder:"ws://..."}),c.jsx("button",{className:"send-btn",onClick:bo,children:"↩"})]})]}),c.jsxs("div",{className:"dev-group",children:[c.jsx("div",{className:"dev-label",children:"Evolution Pipeline"}),c.jsx("div",{className:"evo-pipeline",children:["Trace","Reflect","Synthesize","Practice","Lifecycle"].map((Z,z)=>{const ne=Z.toLowerCase(),ae=ne in ur?ur[ne]:!1;return c.jsxs("div",{className:"evo-phase-group",children:[z>0&&c.jsx("div",{className:"evo-connector"}),c.jsxs("div",{className:`evo-node ${ae?"active":""}`,children:[c.jsx("div",{className:"evo-dot"}),c.jsx("span",{className:"evo-label",children:Z})]})]},Z)})}),c.jsx("div",{className:"list",children:(h?.skills.recent??[]).slice(-6).reverse().map((Z,z)=>c.jsxs("div",{className:"list-row",children:[c.jsx("span",{children:Z.skill_name}),c.jsx("span",{className:"muted mono",children:Z.version})]},`${Z.skill_name}-${Z.timestamp}-${z}`))})]}),c.jsxs("div",{className:"dev-group",children:[c.jsxs("div",{className:"dev-label",children:["Events",c.jsx("select",{className:"inline-select",value:A,onChange:Z=>M(Z.target.value),children:is.map(Z=>c.jsx("option",{value:Z,children:Z},Z))})]}),c.jsx("div",{className:"event-log",children:ca.slice(0,30).map(Z=>c.jsxs("div",{className:"log-row",children:[c.jsx("span",{className:"log-time",children:new Date(Z.timestamp*1e3).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),c.jsx("span",{className:"log-type",children:Z.type}),c.jsx("span",{className:"log-agent",children:Z.agent_id}),c.jsx("span",{className:"log-data",children:jJ(Z.data)})]},Z.event_id))})]}),Object.keys(h?.channels??{}).length>0&&c.jsxs("div",{className:"dev-group",children:[c.jsx("div",{className:"dev-label",children:"Channels"}),Object.entries(h?.channels??{}).map(([Z,z])=>c.jsxs("div",{className:"list-row",children:[c.jsx("span",{children:Z}),c.jsx("span",{className:"muted",children:String(z.last_type??"idle")})]},Z))]})]}),nr&&c.jsx("div",{className:We==="error"?"toast-error":"toast-success",children:nr}),c.jsx(DJ,{taskId:wn,sessions:hn.sessions,agents:B,onClose:()=>pt(null)})]})}class LJ extends St.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?c.jsxs("div",{style:{padding:32,color:"#ff6b6b",background:"#1a1a2e",minHeight:"100vh",fontFamily:"monospace"},children:[c.jsx("h2",{children:"UI Error — React crashed"}),c.jsx("pre",{style:{whiteSpace:"pre-wrap",fontSize:13},children:this.state.error.message}),c.jsxs("details",{open:!0,style:{marginTop:12,fontSize:12,color:"#ccc"},children:[c.jsx("summary",{children:"Stack trace"}),c.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.error.stack})]}),this.state.info&&c.jsxs("details",{style:{marginTop:12,fontSize:12,color:"#888"},children:[c.jsx("summary",{children:"Component stack"}),c.jsx("pre",{style:{whiteSpace:"pre-wrap"},children:this.state.info})]}),c.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 j0=document.getElementById("root");if(!j0)throw document.body.innerHTML='

Root element not found

',new Error("Root element #root not found");try{H3.createRoot(j0).render(c.jsx(LJ,{children:c.jsx(OJ,{})}))}catch(e){console.error("React render error:",e),j0.innerHTML=`

React Error: ${e}

`} diff --git a/opc/plugins/office_ui/frontend_dist/index.html b/opc/plugins/office_ui/frontend_dist/index.html index 45ee1b3..e76013d 100644 --- a/opc/plugins/office_ui/frontend_dist/index.html +++ b/opc/plugins/office_ui/frontend_dist/index.html @@ -5,9 +5,9 @@ OpenOPC Pixel Office - + - +
diff --git a/opc/plugins/office_ui/frontend_src/App.test.tsx b/opc/plugins/office_ui/frontend_src/App.test.tsx index f67aea2..27659eb 100644 --- a/opc/plugins/office_ui/frontend_src/App.test.tsx +++ b/opc/plugins/office_ui/frontend_src/App.test.tsx @@ -139,4 +139,17 @@ assert.match( 'session_detail backfill of the final runtime assistant turn must clear matching Live Reply drafts', ) +// 9. Summary/full pagination and transport-local failures have independent +// lifecycle state. A locally failed Promise never reaches onAck. +assert.match( + src, + /void client\.sessionDetail\([\s\S]*?\.then\(\(payload\) => \{[\s\S]*?payload\.ok !== false[\s\S]*?detailLoading: false/, + 'debounced session_detail refresh must clear loading on transport-local failure', +) +assert.match( + src, + /mergeSessionDetailHasMore\([\s\S]*?payload\.client_history_page === true[\s\S]*?fullHasMore: detailHasMore[\s\S]*?summaryHasMore: detailHasMore/, + 'session_detail ACK must persist pagination state under its detail policy', +) + console.log('App.test.tsx: OK (org handlers + snapshot boundary + runtime displayTool/draft contract)') diff --git a/opc/plugins/office_ui/frontend_src/App.tsx b/opc/plugins/office_ui/frontend_src/App.tsx index 5af432e..8abad21 100644 --- a/opc/plugins/office_ui/frontend_src/App.tsx +++ b/opc/plugins/office_ui/frontend_src/App.tsx @@ -18,7 +18,7 @@ import { ExecutionPanel } from './kanban/ExecutionPanel' import { ProjectSelector } from './components/ProjectSelector' import { OrgTab } from './org/OrgTab' import { notifyTaskAssigned } from './lib/taskChatBridge' -import { mapCollabSyncPayload, mapBackendMessage, mapBackendChannel, mapBackendSession, mapBackendBoard, mapBackendColumn, mapBackendTask } from './lib/collabSync' +import { mapCollabSyncPayload, mapBackendMessage, mapBackendChannel, mapBackendSession, mapBackendBoard, mapBackendColumn, mapBackendTask, mergeSessionDetailHasMore } from './lib/collabSync' import { normalizeOrgInfoPayload } from './lib/runtimeOrg' import { companyRuntimeControlPatchForBoardStatus } from './lib/sessionRuntime' import { getExecutionTurnId } from './lib/workItemRuntimeIds' @@ -621,18 +621,36 @@ export default function App() { if (generation !== projectViewGenerationRef.current) return // Re-check liveness at fire time (ref may have been updated by now) if (!force && !shouldRefreshLiveSession(taskId, sessionStoreRef.current)) return + const client = clientRef.current sessionStoreRef.current?.updateSession(taskId, { detailLoading: true, detailError: undefined, viewGeneration: generation, }) - clientRef.current?.sessionDetail(scopedProjectId, taskId, { + if (!client) { + sessionStoreRef.current?.updateSession(taskId, { + detailLoading: false, + detailError: 'connection_unavailable', + }) + return + } + void client.sessionDetail(scopedProjectId, taskId, { limit: 200, detailLevel, include: detailLevel === 'full' ? ['messages', 'session_state', 'progress', 'work_items', 'runtime_context'] : ['messages', 'session_state'], viewGeneration: generation, + }).then((payload) => { + // Transport-local failures resolve the request Promise without + // producing a websocket ACK. + if (payload.ok !== false) return + if (scopedProjectId !== getActiveProjectId()) return + if (generation !== projectViewGenerationRef.current) return + sessionStoreRef.current?.updateSession(taskId, { + detailLoading: false, + detailError: String(payload.error ?? 'request_failed'), + }) }) }, 180) pendingSessionDetailRefreshRef.current.set(timerKey, tid) @@ -1050,6 +1068,7 @@ export default function App() { const totalMessageCount = typeof payload.message_count === 'number' ? payload.message_count : detailMessages.length + const detailLevel = payload.detail_level === 'full' ? 'full' : 'summary' const cs = chatStoreRef.current if (cs && detailMessages.length > 0) { cs.mergeMessagesFromBackend(detailMessages) @@ -1057,6 +1076,14 @@ export default function App() { const ss = sessionStoreRef.current if (ss && detailTaskId) { const existingSession = ss.sessions.find(session => session.taskId === detailTaskId) + const previousHasMore = detailLevel === 'full' + ? existingSession?.fullHasMore + : existingSession?.summaryHasMore + const detailHasMore = mergeSessionDetailHasMore( + previousHasMore, + payload.has_more === true, + payload.client_history_page === true, + ) const draftTurnId = String(existingSession?.draftTurnId ?? '').trim() const detailHasFinalForDraft = !!draftTurnId && detailMessages.some((message) => { if (message.sender === 'user') return false @@ -1079,8 +1106,11 @@ export default function App() { ...(typeof payload.handoff_to === 'string' ? { handoffTo: payload.handoff_to } : {}), messageCount: totalMessageCount, detailLoaded: true, - fullLoaded: payload.detail_level === 'full' && payload.has_more !== true, - hasMore: payload.has_more === true, + ...(detailLevel === 'full' ? { fullLoaded: !detailHasMore } : {}), + hasMore: detailHasMore, + ...(detailLevel === 'full' + ? { fullHasMore: detailHasMore } + : { summaryHasMore: detailHasMore }), detailLoading: false, detailError: undefined, viewGeneration: detailGeneration ?? projectViewGenerationRef.current, @@ -2438,17 +2468,25 @@ export default function App() { onSessionStop={handleSessionStop} onSessionResume={handleSessionResume} onSessionComplete={(taskId) => clientRef.current?.sessionComplete(getActiveProjectId(), taskId)} - onLoadSessionDetail={(taskId, opts) => clientRef.current?.sessionDetail( - getActiveProjectId(), - taskId, - { - ...opts, - include: opts?.detailLevel === 'full' - ? ['messages', 'session_state', 'progress', 'work_items', 'runtime_context'] - : ['messages', 'session_state'], - viewGeneration: projectViewGenerationRef.current, - }, - )} + onLoadSessionDetail={(taskId, opts) => { + const client = clientRef.current + if (!client) return + return client.sessionDetail( + getActiveProjectId(), + taskId, + { + ...opts, + include: opts?.detailLevel === 'full' + ? ['messages', 'session_state', 'progress', 'work_items', 'runtime_context'] + : ['messages', 'session_state'], + viewGeneration: projectViewGenerationRef.current, + }, + ).then((payload) => { + if (payload.ok === false) { + throw new Error(String(payload.error ?? 'session_detail failed')) + } + }) + }} onOpenExecutionPanel={(taskId) => setExecutionPanelTaskId(taskId)} onCollabSync={() => clientRef.current?.collabSync(getActiveProjectId(), undefined, projectViewGenerationRef.current)} /> diff --git a/opc/plugins/office_ui/frontend_src/chat/AgentProgressBlock.tsx b/opc/plugins/office_ui/frontend_src/chat/AgentProgressBlock.tsx index e100ad3..a64574e 100644 --- a/opc/plugins/office_ui/frontend_src/chat/AgentProgressBlock.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/AgentProgressBlock.tsx @@ -156,7 +156,7 @@ export function AgentProgressBlock({ entries, agentStatus, currentTool, toolElap const cfg = ENTRY_CONFIG[entry.type] || ENTRY_CONFIG.status_change return ( -
+
{cfg.icon} diff --git a/opc/plugins/office_ui/frontend_src/chat/ChatStore.test.ts b/opc/plugins/office_ui/frontend_src/chat/ChatStore.test.ts index 199e887..ef161c8 100644 --- a/opc/plugins/office_ui/frontend_src/chat/ChatStore.test.ts +++ b/opc/plugins/office_ui/frontend_src/chat/ChatStore.test.ts @@ -5,6 +5,58 @@ import { mapBackendMessage } from '../lib/collabSync' import { analyzeCheckpointMessages } from './checkpointUtils' import { __chatStoreTestUtils } from './ChatStore' +const persistentTimestamps = __chatStoreTestUtils.latestPersistentMessageTimestamps([ + { + id: 'db-assistant-1', + channelId: 'session:read-test', + sender: 'assistant', + senderName: 'OPC', + content: 'First persisted reply', + timestamp: 10, + mentions: [], + }, + { + id: 'msg-local-only', + channelId: 'session:read-test', + sender: 'user', + senderName: 'You', + content: 'Optimistic message', + timestamp: 30, + mentions: [], + metadata: { ui_message_id: 'ui-local-only' }, + }, + { + id: 'db-assistant-2', + channelId: 'session:read-test', + sender: 'assistant', + senderName: 'OPC', + content: 'Latest persisted reply', + timestamp: 20, + mentions: [], + }, +]) + +assert.equal(persistentTimestamps['session:read-test'], 20) + +const unreadState = { 'session:read-test': 10 } +const advancedReadState = __chatStoreTestUtils.advanceReadTimestamp( + unreadState, + 'session:read-test', + persistentTimestamps['session:read-test'], +) +assert.notEqual(advancedReadState, unreadState) +assert.equal(advancedReadState['session:read-test'], 20) +assert.equal( + __chatStoreTestUtils.advanceReadTimestamp(advancedReadState, 'session:read-test', 20), + advancedReadState, + 'marking an already-read channel must preserve state identity', +) +assert.equal( + __chatStoreTestUtils.advanceReadTimestamp(advancedReadState, 'session:read-test', 15), + advancedReadState, + 'an older snapshot must not move the read cursor backwards', +) + const syntheticCheckpoint: ChatMessage = { id: 'checkpoint::cp-delivery', channelId: 'session:task-1', @@ -43,6 +95,7 @@ const mergedCheckpoint = __chatStoreTestUtils.dedupeMessages([ assert.equal(mergedCheckpoint.length, 1) assert.equal(mergedCheckpoint[0].id, 'db-message-1') +assert.equal(mergedCheckpoint[0].timestamp, 1, 'checkpoint status updates must keep their original timeline position') assert.equal(mergedCheckpoint[0].metadata?.checkpoint_status, 'ignored') assert.deepEqual([...analyzeCheckpointMessages(mergedCheckpoint).pendingMessageIds], []) assert.deepEqual([...analyzeCheckpointMessages(mergedCheckpoint).respondedMessageIds], ['db-message-1']) @@ -100,6 +153,42 @@ const mergedUserMessage = __chatStoreTestUtils.dedupeMessages([ assert.equal(mergedUserMessage.length, 1) assert.equal(mergedUserMessage[0].metadata?.ui_message_id, 'ui-1') +assert.equal(mergedUserMessage[0].timestamp, 4, 'backend acknowledgement must replace the optimistic client clock') + +const mirroredUserMessages = __chatStoreTestUtils.dedupeMessages([ + backendUserMessage, + { ...backendUserMessage, id: 'db-user-mirror', channelId: 'session:child-task' }, +]) +assert.equal( + mirroredUserMessages.length, + 2, + 'ui_message_id mirrors in different channels must remain available to each channel projection', +) + +assert.deepEqual( + __chatStoreTestUtils.unreadMessageCounts([ + { + id: 'msg-local-system', + channelId: 'session:task-1', + sender: 'system', + senderName: 'System', + content: 'Local task assignment notice', + timestamp: 100, + mentions: [], + }, + { + id: 'db-assistant-unread', + channelId: 'session:task-1', + sender: 'assistant', + senderName: 'OPC', + content: 'Persisted reply', + timestamp: 90, + mentions: [], + }, + ], {}), + { 'session:task-1': 1 }, + 'local-only system rows must not become unread entries that markRead can never cover', +) const nativeCompanyRawTurn: ChatMessage = { id: 'native-raw-1', @@ -137,6 +226,44 @@ const mergedNativeCompanyDuplicate = __chatStoreTestUtils.dedupeMessages([ assert.equal(mergedNativeCompanyDuplicate.length, 1) assert.equal(mergedNativeCompanyDuplicate[0].id, 'role-result-1') assert.equal(mergedNativeCompanyDuplicate[0].senderName, 'Chao') +assert.equal(mergedNativeCompanyDuplicate[0].timestamp, 5, 'semantic result replacement must retain its original timeline position') +assert.equal( + mergedNativeCompanyDuplicate[0].metadata?.ui_timeline_id, + 'message:native-raw-1', + 'semantic result replacement must retain the already-mounted row identity', +) +const repeatedNativeCompanySync = __chatStoreTestUtils.dedupeMessages([ + ...mergedNativeCompanyDuplicate, + nativeCompanyRawTurn, + companyRoleResult, +]) +assert.equal(repeatedNativeCompanySync.length, 1) +assert.equal(repeatedNativeCompanySync[0].metadata?.ui_timeline_id, 'message:native-raw-1') +assert.equal(repeatedNativeCompanySync[0].timestamp, 5) + +const mountedHighPriorityResult: ChatMessage = { + ...companyRoleResult, + id: 'mounted-high-result', + timestamp: 10, + metadata: { source: 'engine', transcript_kind: 'child_task_result' }, +} +const olderLowPrioritySurface: ChatMessage = { + ...nativeCompanyRawTurn, + id: 'older-low-result', + timestamp: 4, +} +const historyBackfillMerge = __chatStoreTestUtils.mergeMessagesIntoExisting( + [mountedHighPriorityResult], + [olderLowPrioritySurface], +) +assert.equal(historyBackfillMerge.length, 1) +assert.equal(historyBackfillMerge[0].id, 'mounted-high-result') +assert.equal(historyBackfillMerge[0].timestamp, 10, 'history backfill must not move an already-mounted result row') +assert.equal( + historyBackfillMerge[0].metadata?.ui_timeline_id, + 'message:mounted-high-result', + 'history backfill must retain the mounted high-priority result key', +) const mappedTaskGeneralistMessage = mapBackendMessage({ message_id: 'legacy-task-generalist', @@ -152,4 +279,4 @@ const mappedTaskGeneralistMessage = mapBackendMessage({ assert.equal(mappedTaskGeneralistMessage.senderName, 'OPC') -console.log('ChatStore.test.ts: OK (optimistic, checkpoint, and company result identity merging)') +console.log('ChatStore.test.ts: OK (read cursors, optimistic, checkpoint, and company result identity merging)') diff --git a/opc/plugins/office_ui/frontend_src/chat/ChatStore.ts b/opc/plugins/office_ui/frontend_src/chat/ChatStore.ts index 618f877..1272659 100644 --- a/opc/plugins/office_ui/frontend_src/chat/ChatStore.ts +++ b/opc/plugins/office_ui/frontend_src/chat/ChatStore.ts @@ -1,5 +1,6 @@ -import { useCallback, useMemo, useReducer, useState } from 'react' +import { useCallback, useMemo, useReducer, useRef, useState } from 'react' import type { ChatChannel, ChatMessage } from '../types/chat' +import { stableMessageTimelineKey } from '../lib/messageTimelineIdentity' function uid(): string { return `${Date.now()}-${Math.random().toString(36).slice(2, 7)}` @@ -73,6 +74,12 @@ function messageIdentityKeys(message: ChatMessage): Set { return keys } +function scopedMessageIdentityKeys(message: ChatMessage): Set { + return new Set( + [...messageIdentityKeys(message)].map(key => `${message.channelId}\u0000${key}`), + ) +} + function isDerivedIdentityKey(value: string): boolean { return value.startsWith('checkpoint:') } @@ -81,6 +88,52 @@ function messageTimestamp(message: ChatMessage): number { return typeof message.timestamp === 'number' ? message.timestamp : 0 } +function isOptimisticMessage(message: ChatMessage): boolean { + return String(message.id ?? '').startsWith('msg-') +} + +function isPersistentMessage(message: ChatMessage): boolean { + // sendMessage creates client-only optimistic rows with this prefix. Once the + // backend acknowledges one, message deduplication replaces its identity with + // the persistent ui_message_id / backend message id. + return !isOptimisticMessage(message) +} + +function latestPersistentMessageTimestamps(messages: ChatMessage[]): Record { + const latest: Record = {} + for (const message of messages) { + if (!isPersistentMessage(message)) continue + const timestamp = messageTimestamp(message) + if (timestamp > (latest[message.channelId] ?? 0)) { + latest[message.channelId] = timestamp + } + } + return latest +} + +function advanceReadTimestamp( + state: Record, + channelId: string, + timestamp: number, +): Record { + if (timestamp <= (state[channelId] ?? 0)) return state + return { ...state, [channelId]: timestamp } +} + +function unreadMessageCounts( + messages: ChatMessage[], + readTimestamps: Record, +): Record { + const counts: Record = {} + for (const message of messages) { + if (!isPersistentMessage(message) || message.sender === 'user') continue + const lastRead = readTimestamps[message.channelId] ?? 0 + if (messageTimestamp(message) <= lastRead) continue + counts[message.channelId] = (counts[message.channelId] ?? 0) + 1 + } + return counts +} + function messageRoleBucket(message: ChatMessage): 'user' | 'assistant' { const sender = String(message.sender ?? '').trim().toLowerCase() const metadata = messageMetadata(message) @@ -154,7 +207,12 @@ function mergeDuplicateMessages( let preferred = existing let secondary = candidate - if (preferCandidate) { + const existingOptimistic = isOptimisticMessage(existing) + const candidateOptimistic = isOptimisticMessage(candidate) + if (existingOptimistic !== candidateOptimistic) { + preferred = existingOptimistic ? candidate : existing + secondary = existingOptimistic ? existing : candidate + } else if (preferCandidate) { preferred = candidate secondary = existing } else if (messagePreferenceScore(candidate) > messagePreferenceScore(existing)) { @@ -184,14 +242,30 @@ function mergeDuplicateMessages( ? normalizedContent : preferred.content + const existingCheckpointId = String(messageMetadata(existing).checkpoint_id ?? '').trim() + const candidateCheckpointId = String(messageMetadata(candidate).checkpoint_id ?? '').trim() + const preservesCheckpointPosition = !!existingCheckpointId && existingCheckpointId === candidateCheckpointId + const replacesResultSurface = isResultSurface(existing) && isResultSurface(candidate) + const retainedTimelineId = replacesResultSurface + ? String( + messageMetadata(existing).ui_timeline_id + ?? messageMetadata(candidate).ui_timeline_id + ?? stableMessageTimelineKey(existing), + ).trim() + : '' + const mergedMetadata = { ...messageMetadata(secondary), ...messageMetadata(preferred) } + if (retainedTimelineId) mergedMetadata.ui_timeline_id = retainedTimelineId + return { ...secondary, ...preferred, ...(canonicalId ? { id: canonicalId } : {}), content, - metadata: { ...messageMetadata(secondary), ...messageMetadata(preferred) }, + metadata: mergedMetadata, mentions, - timestamp: messageTimestamp(preferred) || messageTimestamp(secondary), + timestamp: preservesCheckpointPosition || replacesResultSurface + ? messageTimestamp(existing) || messageTimestamp(candidate) + : messageTimestamp(preferred) || messageTimestamp(secondary), } } @@ -201,7 +275,7 @@ function dedupeMessages(messages: ChatMessage[]): ChatMessage[] { const identityKeyToIdx = new Map() for (const message of [...messages].sort((a, b) => messageTimestamp(a) - messageTimestamp(b))) { - const candidateIds = messageIdentityKeys(message) + const candidateIds = scopedMessageIdentityKeys(message) let matchIndex = -1 let preferCandidate = false @@ -242,7 +316,7 @@ function dedupeMessages(messages: ChatMessage[]): ChatMessage[] { } // Register all identity keys for the merged/inserted message for fast future lookups - for (const id of messageIdentityKeys(deduped[insertIdx])) { + for (const id of scopedMessageIdentityKeys(deduped[insertIdx])) { if (!identityKeyToIdx.has(id)) identityKeyToIdx.set(id, insertIdx) } } @@ -250,8 +324,63 @@ function dedupeMessages(messages: ChatMessage[]): ChatMessage[] { return deduped } +function mergeMessagesIntoExisting( + state: ChatMessage[], + incoming: ChatMessage[], +): ChatMessage[] { + const merged = [...state] + const identityKeyToIdx = new Map() + merged.forEach((message, index) => { + for (const key of scopedMessageIdentityKeys(message)) identityKeyToIdx.set(key, index) + }) + + for (const candidate of [...incoming].sort((a, b) => messageTimestamp(a) - messageTimestamp(b))) { + let matchIndex = -1 + for (const key of scopedMessageIdentityKeys(candidate)) { + const index = identityKeyToIdx.get(key) + if (index !== undefined) { + matchIndex = index + break + } + } + if (matchIndex < 0) { + for (let index = merged.length - 1; index >= 0; index -= 1) { + if (messagesSemanticallyMatch(merged[index], candidate)) { + matchIndex = index + break + } + } + } + + if (matchIndex < 0) { + matchIndex = merged.length + merged.push(candidate) + } else { + const mounted = merged[matchIndex] + merged[matchIndex] = mergeDuplicateMessages( + mounted, + candidate, + mounted.id === candidate.id, + ) + } + + for (const key of scopedMessageIdentityKeys(candidate)) identityKeyToIdx.set(key, matchIndex) + for (const key of scopedMessageIdentityKeys(merged[matchIndex])) identityKeyToIdx.set(key, matchIndex) + } + + return merged.sort((a, b) => ( + messageTimestamp(a) === messageTimestamp(b) + ? a.id.localeCompare(b.id) + : messageTimestamp(a) - messageTimestamp(b) + )) +} + export const __chatStoreTestUtils = { + advanceReadTimestamp, dedupeMessages, + latestPersistentMessageTimestamps, + mergeMessagesIntoExisting, + unreadMessageCounts, } type ChannelAction = @@ -335,7 +464,7 @@ function messageReducer(state: ChatMessage[], action: MessageAction): ChatMessag } case 'MERGE': { if (action.messages.length === 0) return state - return dedupeMessages([...state, ...action.messages]) + return mergeMessagesIntoExisting(state, action.messages) } case 'MARK_SENDER_DELETED': return state.map(m => m.sender === action.senderId ? { ...m, senderDeleted: true, senderName: '[已删除的 Agent]' } : m @@ -372,6 +501,14 @@ export function useChatStore(): ChatStoreState { const [messages, dispatchMsg] = useReducer(messageReducer, []) const [readTimestamps, setReadTimestamps] = useState>({}) const [scopeProjectId, setScopeProjectId] = useState('default') + const readBaselineProjectRef = useRef(null) + + const latestPersistentTimestamps = useMemo( + () => latestPersistentMessageTimestamps(messages), + [messages], + ) + const latestPersistentTimestampsRef = useRef(latestPersistentTimestamps) + latestPersistentTimestampsRef.current = latestPersistentTimestamps const messagesByChannel = useMemo>(() => { const buckets: Record = {} @@ -382,16 +519,10 @@ export function useChatStore(): ChatStoreState { return buckets }, [messages]) - const unreadCounts = useMemo>(() => { - const counts: Record = {} - for (const message of messages) { - if (message.sender === 'user') continue - const lastRead = readTimestamps[message.channelId] ?? 0 - if (message.timestamp <= lastRead) continue - counts[message.channelId] = (counts[message.channelId] ?? 0) + 1 - } - return counts - }, [messages, readTimestamps]) + const unreadCounts = useMemo( + () => unreadMessageCounts(messages, readTimestamps), + [messages, readTimestamps], + ) const sendMessage = useCallback((opts: { channelId: string; sender: string; senderName: string; content: string; @@ -421,7 +552,9 @@ export function useChatStore(): ChatStoreState { }, [unreadCounts]) const markRead = useCallback((channelId: string) => { - setReadTimestamps(prev => ({ ...prev, [channelId]: Date.now() })) + const latestTimestamp = latestPersistentTimestampsRef.current[channelId] ?? 0 + if (latestTimestamp <= 0) return + setReadTimestamps(prev => advanceReadTimestamp(prev, channelId, latestTimestamp)) }, []) const markSenderDeleted = useCallback((agentId: string) => { @@ -440,12 +573,15 @@ export function useChatStore(): ChatStoreState { const clear = useCallback(() => { dispatchCh({ type: 'CLEAR' }) dispatchMsg({ type: 'CLEAR' }) + readBaselineProjectRef.current = null setReadTimestamps({}) }, []) const initFromBackend = useCallback((projectId: string, chs: ChatChannel[], msgs: ChatMessage[]) => { const nextProjectId = projectId || 'default' const projectChanged = nextProjectId !== scopeProjectId + const shouldResetReadBaseline = readBaselineProjectRef.current !== nextProjectId + readBaselineProjectRef.current = nextProjectId setScopeProjectId(nextProjectId) dispatchCh({ type: 'SET', channels: chs }) // Backend `collab_sync` / `collab_sync_push` payloads carry the @@ -462,14 +598,11 @@ export function useChatStore(): ChatStoreState { } else { dispatchMsg({ type: 'MERGE', messages: msgs }) } - // Mark all loaded messages as read so they don't show as unread (#17) - const latest: Record = {} - for (const m of msgs) { - if (!latest[m.channelId] || m.timestamp > latest[m.channelId]) { - latest[m.channelId] = m.timestamp - } + // Establish one read baseline when entering a project. Repeated full-sync + // payloads must not advance it behind the viewport controller's back. + if (shouldResetReadBaseline) { + setReadTimestamps(latestPersistentMessageTimestamps(msgs)) } - setReadTimestamps(prev => projectChanged ? latest : ({ ...prev, ...latest })) }, [scopeProjectId]) const addMessageFromBackend = useCallback((msg: ChatMessage) => { diff --git a/opc/plugins/office_ui/frontend_src/chat/MessageList.test.tsx b/opc/plugins/office_ui/frontend_src/chat/MessageList.test.tsx index 36bb937..d87b655 100644 --- a/opc/plugins/office_ui/frontend_src/chat/MessageList.test.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/MessageList.test.tsx @@ -1,54 +1,38 @@ import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' -import { buildNarrativeMessageItems, copyTextToClipboard, parseProjectUpdatePayload, shouldReleaseStickToBottomOnScroll } from './MessageList' +import { buildNarrativeMessageItems, copyTextToClipboard, messageTimelineKey, parseProjectUpdatePayload } from './MessageList' +import type { MessageScrollPolicy } from './MessageList' import type { ChatMessage } from '../types/chat' +import { progressEntryKey } from '../lib/progressEntryKey' -assert.equal( - shouldReleaseStickToBottomOnScroll({ - previousScrollTop: 1200, - nextScrollTop: 900, - atBottom: false, - userScrolling: false, - programmaticScroll: false, - }), - true, - 'scrollbar drag upward should release stick-to-bottom even without wheel/pointer events', +const messageListSource = readFileSync(new URL('./MessageList.tsx', import.meta.url), 'utf8') +const supportedScrollPolicies: MessageScrollPolicy[] = ['follow', 'initial-bottom', 'manual'] +assert.deepEqual(supportedScrollPolicies, ['follow', 'initial-bottom', 'manual']) +assert.match( + messageListSource, + /export type MessageScrollPolicy = 'follow' \| 'initial-bottom' \| 'manual'/, + 'MessageList must expose one unambiguous three-state scroll policy', ) +assert.match(messageListSource, /scrollPolicy = 'follow'/, 'main transcript behavior should default to follow mode') +assert.doesNotMatch(messageListSource, /useVirtualizer/, 'chat transcript must use stable normal DOM rows') +assert.doesNotMatch(messageListSource, /PROGRAMMATIC_SCROLL_GRACE_MS/, 'scroll behavior must not regress to timer-based intent guessing') +const progressWithoutServerId = { + type: 'status_change' as const, + summary: 'Waiting for reviewer', + detail: 'Gate entered', + timestamp: 1234, +} assert.equal( - shouldReleaseStickToBottomOnScroll({ - previousScrollTop: 1200, - nextScrollTop: 900, - atBottom: false, - userScrolling: false, - programmaticScroll: true, - }), - false, - 'programmatic scrolls should not release stick-to-bottom', + progressEntryKey(progressWithoutServerId), + progressEntryKey({ ...progressWithoutServerId }), + 'progress identity must derive from stable event fields rather than its array position', ) - -assert.equal( - shouldReleaseStickToBottomOnScroll({ - previousScrollTop: 900, - nextScrollTop: 900, - atBottom: false, - userScrolling: true, - programmaticScroll: false, - }), - true, - 'explicit user scroll state should release stick-to-bottom while away from bottom', -) - -assert.equal( - shouldReleaseStickToBottomOnScroll({ - previousScrollTop: 900, - nextScrollTop: 1200, - atBottom: true, - userScrolling: true, - programmaticScroll: false, - }), - false, - 'scrolling back to bottom should keep follow mode available', +assert.doesNotMatch( + progressEntryKey(progressWithoutServerId), + /:0$/, + 'progress fallback identity must not carry a shifting array index', ) const parsedUpdate = parseProjectUpdatePayload(JSON.stringify({ @@ -90,6 +74,81 @@ const baseMessage = (id: string, content: string, timestamp: number, sender = 's metadata: {}, }) +assert.equal( + messageTimelineKey({ + ...baseMessage('checkpoint-message', 'Approval needed', 10), + metadata: { + checkpoint_id: 'checkpoint-42', + canonical_turn_id: 'turn-ignored', + ui_message_id: 'ui-ignored', + }, + }), + 'checkpoint:checkpoint-42', + 'checkpoint identity must win so pending/resolved updates reuse one row', +) +assert.equal( + messageTimelineKey({ + ...baseMessage('assistant-final', 'Final answer', 20, 'assistant'), + metadata: { canonical_turn_id: 'turn-7', transcript_kind: 'runtime_v2_assistant' }, + }), + 'turn:assistant:turn-7', + 'assistant draft and final surfaces must share the canonical turn key', +) +assert.equal( + messageTimelineKey({ + ...baseMessage('user-message', 'Question', 30, 'user'), + metadata: { canonical_turn_id: 'turn-8', ui_message_id: 'ui-8' }, + }), + 'ui:ui-8', + 'a persisted user turn must retain the optimistic ui_message_id key', +) +assert.equal( + messageTimelineKey({ + ...baseMessage('optimistic-message', 'Local echo', 40, 'user'), + metadata: { ui_message_id: 'ui-9' }, + }), + 'ui:ui-9', + 'optimistic and persisted user echoes must share ui_message_id identity', +) +assert.equal( + messageTimelineKey(baseMessage('persistent-message', 'Stored message', 50, 'assistant')), + 'message:persistent-message', + 'messages without stronger runtime identity must fall back to the persistent id', +) +assert.equal( + messageTimelineKey({ + ...baseMessage('higher-priority-result', 'Final answer', 55, 'assistant'), + metadata: { + canonical_turn_id: 'turn-7', + transcript_kind: 'child_task_result', + ui_timeline_id: 'turn:assistant:turn-7', + }, + }), + 'turn:assistant:turn-7', + 'a semantic result replacement must keep the mounted native-final/draft slot', +) + +const sharedCompanyTurn = 'company-turn-1' +const companyTurnKeys = [ + messageTimelineKey({ + ...baseMessage('runtime-context', 'Execution context', 60), + metadata: { kind: 'runtime_v2_user_turn', canonical_turn_id: sharedCompanyTurn }, + }), + messageTimelineKey({ + ...baseMessage('company-stream-1', 'First company surface', 61, 'assistant'), + metadata: { kind: 'runtime_v2_company_assistant', canonical_turn_id: sharedCompanyTurn }, + }), + messageTimelineKey({ + ...baseMessage('company-stream-2', 'Second company surface', 62, 'assistant'), + metadata: { kind: 'runtime_v2_company_assistant', canonical_turn_id: sharedCompanyTurn }, + }), + messageTimelineKey({ + ...baseMessage('role-result', 'Role result', 63, 'assistant'), + metadata: { kind: 'company_role_result', canonical_turn_id: sharedCompanyTurn }, + }), +] +assert.equal(new Set(companyTurnKeys).size, companyTurnKeys.length, 'distinct company rows sharing a turn need unique DOM keys') + const narrativeItems = buildNarrativeMessageItems([ baseMessage('m1', '[Company:cto::execute::abc] starting Research source reliability', 1000), baseMessage('m2', '[Delegating to codex] task=Research source reliability | cmd=codex exec ...', 1100), @@ -194,4 +253,4 @@ if (originalDocument) { delete (globalThis as any).document } -console.log('MessageList.test.tsx: OK (scroll + narrative timeline helpers)') +console.log('MessageList.test.tsx: OK (scroll contract + stable timeline identity + narrative helpers)') diff --git a/opc/plugins/office_ui/frontend_src/chat/MessageList.tsx b/opc/plugins/office_ui/frontend_src/chat/MessageList.tsx index cbfd318..93b10d5 100644 --- a/opc/plugins/office_ui/frontend_src/chat/MessageList.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/MessageList.tsx @@ -1,8 +1,9 @@ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' -import { useVirtualizer } from '@tanstack/react-virtual' import type { AttachmentRefMeta, ChatMessage, CheckpointReplyMetadata } from '../types/chat' import type { ProgressEntry, RoleWorkItemSummary, Session, WorkItemProgressEntry } from '../types/kanban' import { progressEntryKey } from '../lib/progressEntryKey' +import { stableMessageTimelineKey } from '../lib/messageTimelineIdentity' +import { isMessageVisibleAtDetailLevel, resultSurfaceDedupeKey } from '../lib/workItemSessions' import { IconCopy, IconCheck, IconChat, IconSparkle, IconShield, IconActivity, IconChevron } from './SvgIcons' import { AgentProgressBlock, AgentProgressEntryCard, INLINE_PROGRESS_ENTRY_TYPES } from './AgentProgressBlock' import { MarkdownBody } from './MarkdownBody' @@ -107,6 +108,7 @@ function AttachmentBlock({ refs, onImageClick }: { refs: AttachmentRefMeta[]; on type ViewKind = 'session' | 'activity' | 'secretary' type DetailMode = 'summary' | 'full' +export type MessageScrollPolicy = 'follow' | 'initial-bottom' | 'manual' interface MessageListProps { messages: ChatMessage[] @@ -141,8 +143,9 @@ interface MessageListProps { totalMessageCount?: number onLoadOlderHistory?: (oldestMessage?: ChatMessage) => Promise | void loadingOlderHistory?: boolean - autoScroll?: boolean - initialScrollToBottom?: boolean + scrollPolicy?: MessageScrollPolicy + /** Stable identity for the scroll state owned by this list instance. */ + scrollScope?: string showWorkItemRuntimeCard?: boolean showRuntimeProgress?: boolean renderUserMarkdown?: boolean @@ -154,6 +157,87 @@ type TimelineItem = | { kind: 'draft'; id: string; timestamp: number; text: string; iteration?: number; sortOrder: number } | { kind: 'ops-bundle'; id: string; timestamp: number; events: SystemOpsBundleEvent[]; sortOrder: number } +type TimelineItemSemanticToken = readonly unknown[] +const semanticObjectTokenCache = new WeakMap() + +function semanticObjectToken(value: unknown): string { + if (!value || typeof value !== 'object') return '' + const cached = semanticObjectTokenCache.get(value) + if (cached !== undefined) return cached + const serialized = JSON.stringify(value) ?? '' + semanticObjectTokenCache.set(value, serialized) + return serialized +} + +function timelineItemSemanticToken(item: TimelineItem): TimelineItemSemanticToken { + if (item.kind === 'message') { + const { msg } = item + return [ + item.kind, + item.id, + item.timestamp, + msg.sender, + msg.senderName, + msg.senderDeleted, + msg.content, + msg.replyToId, + semanticObjectToken(msg.mentions), + semanticObjectToken(msg.metadata), + ] + } + if (item.kind === 'progress') { + const { entry } = item + return [ + item.kind, + item.id, + item.timestamp, + entry.type, + entry.summary, + entry.detail, + entry.turnId, + entry.itemId, + entry.streamId, + entry.toolCallId, + entry.permissionGroupKey, + entry.seq, + entry.executionMode, + ] + } + if (item.kind === 'draft') { + return [item.kind, item.id, item.timestamp, item.text, item.iteration] + } + const token: unknown[] = [ + item.kind, + item.id, + item.timestamp, + ] + for (const { msg, classification } of item.events) { + token.push( + msg.id, + msg.timestamp, + msg.content, + semanticObjectToken(msg.metadata), + classification.kind, + classification.label, + classification.summary, + classification.tone, + ) + } + return token +} + +function semanticTokenArraysEqual( + left: TimelineItemSemanticToken[] | null, + right: TimelineItemSemanticToken[], +): boolean { + if (!left || left.length !== right.length) return false + return right.every((token, itemIndex) => { + const previous = left[itemIndex] + return previous.length === token.length + && token.every((value, valueIndex) => value === previous[valueIndex]) + }) +} + interface ProjectUpdatePayload { kind: 'report' | 'review' | 'update' title?: string @@ -244,30 +328,28 @@ const WELCOME: Record { } } -function messageVisibleInDetailMode(message: ChatMessage, detailMode: DetailMode): boolean { - if (detailMode === 'full') return true - return String(message.metadata?.detail_visibility ?? 'summary').trim() !== 'full' -} - function isExecutionContextMessage(message: ChatMessage): boolean { return String(message.metadata?.transcript_kind ?? '').trim() === 'runtime_v2_user_turn' } @@ -759,10 +836,9 @@ export function buildNarrativeMessageItems( const flushBundle = () => { if (bundle.length === 0) return const first = bundle[0].msg - const last = bundle[bundle.length - 1].msg items.push({ kind: 'ops-bundle', - id: `ops:${first.id}:${bundle.length}:${last.id}`, + id: `ops:${messageTimelineKey(first)}`, timestamp: first.timestamp, events: bundle, sortOrder: bundleSortOrder, @@ -791,7 +867,7 @@ export function buildNarrativeMessageItems( if (seenProjectUpdates.has(dedupeKey)) return seenProjectUpdates.add(dedupeKey) } - if (detailMode === 'summary') { + if (detailMode === 'summary' && !isCheckpointCardMetadata(msg.metadata)) { const canonicalContent = compactWhitespace(stripNarrativeTitlePrefix(msg.content)).slice(0, 1200) if (canonicalContent) { const dedupeKey = isResultSurfaceMessage(msg) @@ -808,7 +884,7 @@ export function buildNarrativeMessageItems( flushBundle() items.push({ kind: 'message', - id: msg.id, + id: messageTimelineKey(msg), timestamp: msg.timestamp, msg, sortOrder, @@ -1016,10 +1092,11 @@ interface AgentRowProps { isCopied: boolean isCheckpointResponded: boolean suppressCheckpointPanel: boolean + keepExpanded?: boolean onCopy: (id: string, content: string) => void onSend?: (text: string, taskId?: string, metadata?: CheckpointReplyMetadata) => void } -const AgentRow = React.memo(function AgentRow({ msg, showDate, dateStr, isGrouped, isCopied, isCheckpointResponded, suppressCheckpointPanel, onCopy, onSend }: AgentRowProps) { +const AgentRow = React.memo(function AgentRow({ msg, showDate, dateStr, isGrouped, isCopied, isCheckpointResponded, suppressCheckpointPanel, keepExpanded, onCopy, onSend }: AgentRowProps) { const isDeleted = !!msg.senderDeleted const displayName = isDeleted ? '[Deleted]' : msg.senderName const color = agentColor(msg.sender === 'system' ? (msg.senderName || 'OPC') : msg.sender) @@ -1105,7 +1182,7 @@ const AgentRow = React.memo(function AgentRow({ msg, showDate, dateStr, isGroupe ) : (
- +
- - Showing latest {visibleTimelineItems.length} of {totalMessageCount ?? timelineItems.length} - -
- ) - } - - if (vItem.kind === 'work-item-runtime-card') { - return ( -
-
-
- -
-
- ) - } - - if (vItem.kind === 'progress-block') { - return ( -
-
-
- -
-
- ) - } - - if (vItem.kind === 'pending-section') { - return ( -
-
Pending Actions
-
- {pendingCheckpointMessages.map((msg) => { - const displayName = msg.senderDeleted ? '[Deleted]' : msg.senderName - const color = agentColor(msg.sender === 'system' ? (msg.senderName || 'OPC') : msg.sender) - const replyTaskId = msg.channelId.startsWith('session:') - ? msg.channelId.slice('session:'.length) - : (msg.metadata?.taskId ?? msg.metadata?.task_id) - const cpType = String(msg.metadata?.checkpoint_type ?? '').trim() - const cpReplyMeta = toCheckpointReplyMetadata(msg.metadata) - - return ( -
-
- {displayName.charAt(0).toUpperCase()} -
-
-
- {displayName} - {formatTime(msg.timestamp)} -
- {cpType === 'company_recruitment_confirmation' && ( - onSend?.(text, replyTaskId, extraMetadata)} - responded={false} - /> - )} - {cpType === 'company_staffing_selection' && ( - onSend?.(text, replyTaskId, extraMetadata)} - responded={false} - /> - )} - {cpType === 'company_work_item_gate' && ( - onSend?.(text, replyTaskId, cpReplyMeta)} responded={false} /> - )} - {cpType === 'company_delivery_feedback' && ( - onSend?.(text, replyTaskId, extraMetadata ?? cpReplyMeta)} responded={false} /> - )} - {cpType === 'company_reorg_pending' && ( - onSend?.(text, replyTaskId, cpReplyMeta)} responded={false} /> - )} - {cpType === 'human_escalation' && ( - onSend?.(text, replyTaskId, cpReplyMeta)} responded={false} /> - )} - {cpType === 'task_user_input' && ( - onSend?.(text, replyTaskId, { ...cpReplyMeta, ...extraMetadata } as CheckpointReplyMetadata)} - responded={false} - /> - )} -
-
- ) - })} -
-
- ) - } - - if (vItem.kind === 'end-anchor') { - return
- } - - // Timeline item - const { item, showDate, dateStr, isGrouped } = processed[vItem.idx] + const focusPendingCheckpoint = useCallback(() => { + const pending = pendingCheckpointMessages[0] + if (!pending) return + enterBrowsing() + anchorRestorePendingRef.current = false + const key = messageTimelineKey(pending) + if (centerTimelineRow(key)) return + const itemIndex = timelineItems.findIndex(item => item.id === key) + if (itemIndex < 0) return + pendingFocusKeyRef.current = key + const nextStartIndex = Math.max(0, itemIndex - 2) + setWindowState({ scope: scrollScope, startKey: timelineItems[nextStartIndex]?.id ?? key }) + }, [centerTimelineRow, enterBrowsing, pendingCheckpointMessages, scrollScope, timelineItems]) + const renderProcessedRow = useCallback((row: typeof processed[number]) => { + const { item, showDate, dateStr, isGrouped } = row if (item.kind === 'progress') { - return ( - - ) + return } - if (item.kind === 'draft') { - return ( - - ) + return } - if (item.kind === 'ops-bundle') { - return ( - - ) + return } const { msg } = item + const keepExpanded = streamedTurnKeysRef.current.scope === scrollScope + && streamedTurnKeysRef.current.keys.has(item.id) const isSystem = msg.metadata?.type === 'system' const isExecutionContext = isExecutionContextMessage(msg) - const isWorkItemEvent = !!(msg.metadata as any)?.is_work_item_event || msg.content.startsWith('[Company:') + const isWorkItemEvent = !keepExpanded && ( + !!(msg.metadata as any)?.is_work_item_event || msg.content.startsWith('[Company:') + ) const hasCpPanel = isCheckpointCardMetadata(msg.metadata) const isUser = msg.sender === 'user' - const projectUpdate = !isUser && !hasCpPanel ? parseProjectUpdatePayload(msg.content) : null - - if (isWorkItemEvent && !hasCpPanel) { - return - } + const projectUpdate = !keepExpanded && !isUser && !hasCpPanel + ? parseProjectUpdatePayload(msg.content) + : null + if (isWorkItemEvent && !hasCpPanel) return if (projectUpdate) { - return ( - - ) - } - if (isExecutionContext && !hasCpPanel) { - return - } - if (isSystem && !hasCpPanel) { - return + return } + if (isExecutionContext && !hasCpPanel) return + if (isSystem && !hasCpPanel) return if (isUser) { return ( ) } - // System-ops compaction: messages like "[Delegating to codex] ..." or - // "[External resume] codex restored prior session →…" become a one-line - // collapsed log row, with full content tucked behind a chevron. This - // keeps the conversation readable instead of dumping the raw command. - if (msg.sender === 'system') { - const checkpointType = String(msg.metadata?.checkpoint_type ?? '').trim() - if (!isCheckpointCardMetadata(msg.metadata)) { - const ops = classifySystemOps(msg.content) - if (ops) { - return ( - - ) - } - } + if (msg.sender === 'system' && !isCheckpointCardMetadata(msg.metadata)) { + const ops = classifySystemOps(msg.content) + if (ops) return } return ( ) - }, [ - processed, copiedId, copyMsg, renderUserMarkdown, checkpointAnalysis, - onSend, handleLoadOlder, loadingOlderHistory, hiddenTimelineCount, - visibleTimelineItems.length, totalMessageCount, timelineItems.length, - workItemLog, roleWorkItems, executorRoleWorkItems, childSessions, messages, onWorkItemClick, onWorkItemOpenSession, bottomProgressEntries, - agentStatus, currentTool, toolElapsedMs, lastToolSummary, - pendingCheckpointMessages, showProgressBlock, detailMode, - ]) + }, [checkpointAnalysis, copiedId, copyMsg, detailMode, onSend, renderUserMarkdown, scrollScope]) - if (timelineItems.length === 0 && pendingCheckpointMessages.length === 0) { - return ( -
-
-
{welcome.icon}
-
{channelName || welcome.title}
-
{welcome.hint}
-
- {hasWorkItemRuntimeCard && ( -
-
-
- -
-
- )} - {showProgressBlock && ( -
-
-
- -
-
- )} -
-
- ) - } - - const virtualRows = virtualizer.getVirtualItems() + const welcome = WELCOME[viewKind] return ( -
- {/* Spacer before visible items — pushes content down to correct scroll position */} -
-
- {virtualRows.map((virtualRow) => ( -
- {renderVirtualRow(virtualItems[virtualRow.index])} +
+
+
+ {!hasRenderableContent && ( +
+
{welcome.icon}
+
{channelName || welcome.title}
+
{welcome.hint}
+
+ )} + + {(hiddenTimelineCount > 0 || hasOlderHistory) && ( +
+ + + Showing {visibleTimelineItems.length} of {totalMessageCount ?? timelineItems.length} + +
+ )} + + {processed.map(row => ( +
+ {renderProcessedRow(row)}
))} + + {hasWorkItemRuntimeCard && ( +
+
+
+ +
+
+ )} + + {showProgressBlock && ( +
+
+
+ +
+
+ )} +
+ {(pendingCheckpointMessages.length > 0 || (viewportMode === 'browsing' && !atStrictBottom)) && ( +
+ {pendingCheckpointMessages.length > 0 && ( + + )} + {viewportMode === 'browsing' && !atStrictBottom && ( + + )} +
+ )} + {lightboxUrl && (
setLightboxUrl(null)}> Preview diff --git a/opc/plugins/office_ui/frontend_src/chat/TaskUserInputPanel.test.tsx b/opc/plugins/office_ui/frontend_src/chat/TaskUserInputPanel.test.tsx index 6279aed..ad63beb 100644 --- a/opc/plugins/office_ui/frontend_src/chat/TaskUserInputPanel.test.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/TaskUserInputPanel.test.tsx @@ -85,11 +85,16 @@ assert.doesNotMatch(src, /localResponded|setLocalResponded/, 'panel must wait fo assert.match(src, /user_input_answers/, 'structured answers must be forwarded to the backend') const messageListSrc = readFileSync(join(here, 'MessageList.tsx'), 'utf8') -const progressIndex = messageListSrc.indexOf("items.push({ kind: 'progress-block' })") -const pendingIndex = messageListSrc.indexOf("items.push({ kind: 'pending-section' })") -const endIndex = messageListSrc.indexOf("items.push({ kind: 'end-anchor' })") -assert.ok(progressIndex !== -1 && pendingIndex !== -1 && endIndex !== -1) -assert.ok(progressIndex < pendingIndex, 'pending checkpoint cards should render after the progress block') -assert.ok(pendingIndex < endIndex, 'pending checkpoint cards should render before the end anchor') +const timelineIndex = messageListSrc.indexOf('{processed.map(row => (') +const progressIndex = messageListSrc.indexOf('{showProgressBlock && (') +const endIndex = messageListSrc.indexOf('
') +assert.ok(timelineIndex !== -1 && progressIndex !== -1 && endIndex !== -1) +assert.ok(timelineIndex < progressIndex && progressIndex < endIndex) +assert.doesNotMatch(messageListSrc, /kind: 'pending-section'/, 'pending cards must not be moved into a second tail section') +assert.match( + messageListSrc, + /Checkpoint cards never leave the chronological transcript/, + 'task-user-input cards must remain at their creation position', +) console.log('TaskUserInputPanel.test.tsx: OK (markdown and choice checkpoint panel)') diff --git a/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.test.tsx b/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.test.tsx index 3a04e8e..ddfaf41 100644 --- a/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.test.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.test.tsx @@ -81,4 +81,15 @@ const fallbackMarkup = renderToStaticMarkup( assert.match(fallbackMarkup, /CTO/) assert.doesNotMatch(fallbackMarkup, /Engineer/) +const preparingMarkup = renderToStaticMarkup( + React.createElement(WorkItemProgressCard, { + workItemLog: [], + isCompanyRuntime: true, + }), +) + +assert.match(preparingMarkup, /Execution Progress/) +assert.match(preparingMarkup, /Preparing company roles/) +assert.match(preparingMarkup, /role="status"/) + console.log('WorkItemProgressCard.test.tsx: OK (executor rollup preferred with current-owner fallback)') diff --git a/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.tsx b/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.tsx index 6444874..4b98145 100644 --- a/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.tsx +++ b/opc/plugins/office_ui/frontend_src/chat/WorkItemProgressCard.tsx @@ -542,8 +542,8 @@ export function WorkItemProgressCard({ return isCompanyRuntime ? [] : workItemLogWorkItems }, [isCompanyRuntime, roleSummaries, workItemLogWorkItems]) - if (isCompanyRuntime && roleSummaries.length === 0) return null - if (workItemLog.length === 0 && workItems.length === 0 && roleSummaries.length === 0) return null + const isPreparingCompanyRuntime = isCompanyRuntime && roleSummaries.length === 0 + if (!isCompanyRuntime && workItemLog.length === 0 && workItems.length === 0 && roleSummaries.length === 0) return null return (
@@ -571,6 +571,12 @@ export function WorkItemProgressCard({
)} + {isPreparingCompanyRuntime && ( +
+ Preparing company roles… +
+ )} +
) } diff --git a/opc/plugins/office_ui/frontend_src/chat/chat.css b/opc/plugins/office_ui/frontend_src/chat/chat.css index 8fed648..0becbd9 100644 --- a/opc/plugins/office_ui/frontend_src/chat/chat.css +++ b/opc/plugins/office_ui/frontend_src/chat/chat.css @@ -794,6 +794,16 @@ /* ══════════════════════════════════════════════════════════════════════════ Message List ══════════════════════════════════════════════════════════════════════════ */ +.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; @@ -803,16 +813,82 @@ scrollbar-gutter: stable; scrollbar-color: var(--border) transparent; overscroll-behavior-y: contain; - overflow-anchor: none; 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: translateX(-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 rgba(0, 0, 0, 0.28); + 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; @@ -849,33 +925,6 @@ color: var(--text-secondary); } -.msg-pending-section { - margin-top: 10px; - padding: 12px 16px 0; - border-top: 1px solid var(--border); - background: linear-gradient(180deg, transparent 0%, var(--bg-elevated) 28px); -} - -.msg-pending-header { - font-size: 10px; - font-weight: 700; - color: var(--text-secondary); - text-transform: uppercase; - letter-spacing: 0.08em; - margin: 0 8px 10px; -} - -.msg-pending-stack { - display: flex; - flex-direction: column; - gap: 10px; - padding-bottom: 8px; -} - -.msg-row-pending { - animation: msg-enter 200ms ease-out; -} - /* ── Welcome ──────────────────────────────────────────────────────────── */ .msg-welcome { display: flex; diff --git a/opc/plugins/office_ui/frontend_src/lib/collabSync.ts b/opc/plugins/office_ui/frontend_src/lib/collabSync.ts index 897cb78..182036d 100644 --- a/opc/plugins/office_ui/frontend_src/lib/collabSync.ts +++ b/opc/plugins/office_ui/frontend_src/lib/collabSync.ts @@ -15,6 +15,17 @@ const UNIX_MS_THRESHOLD = 1_000_000_000_000 const WORK_ITEM_EVENT_RE = /^\[Company:([^\]]+)\]\s*(.*)$/ const COMPANY_RUNTIME_EVENT_RE = /^\[Company\]\s*(.*)$/ +export function mergeSessionDetailHasMore( + previous: boolean | undefined, + incoming: boolean, + isHistoryPage: boolean, +): boolean { + // A latest-page refresh only describes that 200-row response. It must not + // reopen an older-history cursor that the user already exhausted. + if (!isHistoryPage && previous === false) return false + return incoming +} + function normalizeAgentRuntimeStatus(rawStatus: unknown, rawAgentStatus: unknown): AgentAnimStatus | undefined { if (rawAgentStatus === 'idle' || rawAgentStatus === 'reflecting' || rawAgentStatus === 'tool_active') { return rawAgentStatus @@ -52,6 +63,16 @@ function mapBackendProgressLog(raw: any): ProgressEntry[] { : typeof entry.streamId === 'string' ? entry.streamId : undefined, + toolCallId: typeof entry.tool_call_id === 'string' + ? entry.tool_call_id + : typeof entry.toolCallId === 'string' + ? entry.toolCallId + : undefined, + permissionGroupKey: typeof entry.permission_group_key === 'string' + ? entry.permission_group_key + : typeof entry.permissionGroupKey === 'string' + ? entry.permissionGroupKey + : undefined, seq: typeof entry.seq === 'number' && Number.isFinite(entry.seq) ? entry.seq : undefined, executionMode: typeof entry.execution_mode === 'string' ? entry.execution_mode @@ -633,6 +654,8 @@ export function mapBackendSession(raw: any): Session { detailLoaded: raw.detail_loaded ?? raw.detailLoaded, fullLoaded: raw.full_loaded ?? raw.fullLoaded, hasMore: raw.has_more ?? raw.hasMore, + summaryHasMore: raw.summary_has_more ?? raw.summaryHasMore, + fullHasMore: raw.full_has_more ?? raw.fullHasMore, detailLoading: raw.detail_loading ?? raw.detailLoading, detailError: raw.detail_error ?? raw.detailError, viewGeneration: raw.view_generation ?? raw.viewGeneration, diff --git a/opc/plugins/office_ui/frontend_src/lib/messageTimelineIdentity.ts b/opc/plugins/office_ui/frontend_src/lib/messageTimelineIdentity.ts new file mode 100644 index 0000000..2db06d9 --- /dev/null +++ b/opc/plugins/office_ui/frontend_src/lib/messageTimelineIdentity.ts @@ -0,0 +1,30 @@ +import type { ChatMessage } from '../types/chat' + +export function stableMessageTimelineKey(message: ChatMessage): string { + const metadata = message.metadata ?? {} + const checkpointId = String(metadata.checkpoint_id ?? '').trim() + if (checkpointId) return `checkpoint:${checkpointId}` + + const uiMessageId = String(metadata.ui_message_id ?? '').trim() + const transcriptKind = String(metadata.transcript_kind ?? metadata.kind ?? '').trim() + const metadataRole = String((metadata as Record).role ?? '').trim().toLowerCase() + const isUserTurn = message.sender === 'user' + || metadataRole === 'user' + || transcriptKind === 'runtime_v2_user_turn' + || transcriptKind === 'top_level_user_turn' + // The optimistic and persisted user surfaces share one client identity. + if (isUserTurn && uiMessageId) return `ui:${uiMessageId}` + + // ChatStore attaches this only when one semantic result surface replaces + // another. It preserves the already-mounted row without entering protocol + // or persistence data. + const retainedTimelineId = String(metadata.ui_timeline_id ?? '').trim() + if (retainedTimelineId) return retainedTimelineId + + const turnId = String(metadata.canonical_turn_id ?? metadata.turn_id ?? '').trim() + if (!isUserTurn && turnId && transcriptKind === 'runtime_v2_assistant') { + return `turn:assistant:${turnId}` + } + + return `message:${message.id}` +} diff --git a/opc/plugins/office_ui/frontend_src/lib/progressEntryKey.ts b/opc/plugins/office_ui/frontend_src/lib/progressEntryKey.ts index fcc571b..cfde4df 100644 --- a/opc/plugins/office_ui/frontend_src/lib/progressEntryKey.ts +++ b/opc/plugins/office_ui/frontend_src/lib/progressEntryKey.ts @@ -7,30 +7,39 @@ function compact(value: unknown): string { .slice(0, 96) } -export function progressEntryKey(entry: ProgressEntry, fallbackIndex = 0): string { +export function progressEntryKey(entry: ProgressEntry): string { const stableId = entry.itemId || entry.streamId || entry.toolCallId || entry.permissionGroupKey if (stableId) { return `${entry.type}:${compact(entry.turnId)}:${compact(stableId)}` } - if (entry.type === 'thinking') { - return `thinking:${compact(entry.turnId) || compact(entry.executionMode) || compact(entry.summary) || 'stream'}:${fallbackIndex}` + if (entry.type === 'thinking' || entry.type === 'assistant') { + return `${entry.type}:${compact(entry.turnId) || compact(entry.executionMode) || 'stream'}:${ + Number.isFinite(entry.timestamp) ? entry.timestamp : '' + }` } - if (entry.type === 'tool_call' && entry.turnId) { - return `tool:${compact(entry.turnId)}:${compact(entry.summary) || 'tool'}:${fallbackIndex}` + if (entry.type === 'tool_call') { + return `tool:${compact(entry.turnId) || 'turnless'}:${compact(entry.summary) || 'tool'}:${ + Number.isFinite(entry.timestamp) ? entry.timestamp : '' + }` } if (entry.turnId && typeof entry.seq === 'number') { return `${entry.type}:${compact(entry.turnId)}:seq:${entry.seq}` } - return [ + const fallbackParts: Array = [ entry.type, compact(entry.turnId), + ] + if (typeof entry.seq === 'number' && Number.isFinite(entry.seq)) { + fallbackParts.push(`seq-${entry.seq}`) + } + fallbackParts.push( Number.isFinite(entry.timestamp) ? entry.timestamp : '', compact(entry.summary), compact(entry.detail), - fallbackIndex, - ].join(':') + ) + return fallbackParts.join(':') } diff --git a/opc/plugins/office_ui/frontend_src/lib/progressLog.test.ts b/opc/plugins/office_ui/frontend_src/lib/progressLog.test.ts index a663a5d..5b8502a 100644 --- a/opc/plugins/office_ui/frontend_src/lib/progressLog.test.ts +++ b/opc/plugins/office_ui/frontend_src/lib/progressLog.test.ts @@ -1,5 +1,8 @@ import assert from 'node:assert/strict' -import { appendProgressEntry } from './progressLog' +import type { ProgressEntry } from '../types/kanban' +import { mapBackendSession } from './collabSync' +import { progressEntryKey } from './progressEntryKey' +import { appendProgressEntry, normalizeProgressLog } from './progressLog' let log = appendProgressEntry([], { timestamp: 1, @@ -149,3 +152,144 @@ assert.equal(assistantLog.length, 2) assert.equal(assistantLog[0]?.detail, '文件已成功写入(278 行)。') assert.equal(assistantLog[0]?.summary, '文件已成功写入(278 行)。') assert.equal(assistantLog[1]?.detail, '采集完成报告') + +// A live client receives these as individual deltas. A reconnect receives the +// same rows as a full snake_case snapshot. Both paths must produce identical +// row identities: otherwise React remounts progress rows and browser anchoring +// sees a false remove/insert pair during every full sync. +const snapshotSeconds = 1_700_000_000 +const snapshotRows = [ + { + timestamp: snapshotSeconds, + type: 'status_change', + summary: 'Running', + detail: 'phase=running', + }, + { + timestamp: snapshotSeconds + 0.1, + type: 'status_change', + summary: 'Running', + detail: 'phase=running', + }, + { + timestamp: snapshotSeconds + 1, + type: 'thinking', + summary: 'Thinking', + detail: 'Need ', + }, + { + timestamp: snapshotSeconds + 1.1, + type: 'thinking', + summary: 'Thinking', + detail: 'context', + }, + { + timestamp: snapshotSeconds + 2, + type: 'assistant', + summary: 'Answer', + detail: 'Answer ', + }, + { + timestamp: snapshotSeconds + 2.1, + type: 'assistant', + summary: 'ready', + detail: 'ready', + }, + { + timestamp: snapshotSeconds + 3, + type: 'tool_call', + summary: 'file_read', + detail: '{"path":', + }, + { + timestamp: snapshotSeconds + 3.1, + type: 'tool_call', + summary: 'file_read', + detail: '"README.md"}', + }, +] as const + +const liveDeltas: ProgressEntry[] = snapshotRows.map(entry => ({ + timestamp: entry.timestamp * 1000, + type: entry.type, + summary: entry.summary, + detail: entry.detail, +})) +const liveSnapshot = liveDeltas.reduce( + (entries, entry) => appendProgressEntry(entries, entry), + [], +) +const normalizedSnapshot = normalizeProgressLog(liveDeltas) +const mappedSnapshot = mapBackendSession({ + task_id: 'progress-snapshot', + channel_id: 'session:progress-snapshot', + progress_log: snapshotRows, +}).progressLog + +assert.equal(liveSnapshot.length, 4) +assert.deepEqual( + liveSnapshot.map(entry => entry.type), + ['status_change', 'thinking', 'assistant', 'tool_call'], +) +assert.deepEqual( + normalizedSnapshot.map(entry => ({ key: progressEntryKey(entry), timestamp: entry.timestamp })), + liveSnapshot.map(entry => ({ key: progressEntryKey(entry), timestamp: entry.timestamp })), +) +assert.deepEqual( + mappedSnapshot.map(entry => ({ key: progressEntryKey(entry), timestamp: entry.timestamp })), + liveSnapshot.map(entry => ({ key: progressEntryKey(entry), timestamp: entry.timestamp })), +) +assert.deepEqual( + liveSnapshot.map(entry => entry.timestamp), + [ + snapshotSeconds * 1000, + (snapshotSeconds + 1) * 1000, + (snapshotSeconds + 2) * 1000, + (snapshotSeconds + 3) * 1000, + ], +) +assert.deepEqual( + liveSnapshot.map(progressEntryKey), + [ + 'status_change::1700000000000:Running:phase=running', + 'thinking:stream:1700000001000', + 'assistant:stream:1700000002000', + 'tool:turnless:file_read:1700000003000', + ], +) +assert.ok(liveSnapshot.every(entry => ( + !entry.itemId + && !entry.streamId + && !entry.toolCallId + && !entry.permissionGroupKey +))) + +// Persisted snake_case identifiers must survive the full-sync bridge. These +// identifiers take precedence over mutable summaries and timestamps when the +// UI derives a row key. +const mappedStableIds = mapBackendSession({ + task_id: 'progress-stable-ids', + channel_id: 'session:progress-stable-ids', + progress_log: [ + { + timestamp: snapshotSeconds + 10, + type: 'tool_call', + summary: 'shell_exec', + tool_call_id: 'call-42', + }, + { + timestamp: snapshotSeconds + 11, + type: 'autonomy', + summary: 'shell_exec: ask', + permission_group_key: 'tool:shell_exec/python:domain:example.com', + }, + ], +}).progressLog + +assert.equal(mappedStableIds[0]?.toolCallId, 'call-42') +assert.equal(mappedStableIds[1]?.permissionGroupKey, 'tool:shell_exec/python:domain:example.com') +assert.equal(progressEntryKey(mappedStableIds[0]!), 'tool_call::call-42') +assert.equal( + progressEntryKey(mappedStableIds[1]!), + 'autonomy::tool:shell_exec/python:domain:example.com', +) diff --git a/opc/plugins/office_ui/frontend_src/lib/progressLog.ts b/opc/plugins/office_ui/frontend_src/lib/progressLog.ts index 388c5cd..ca4bc80 100644 --- a/opc/plugins/office_ui/frontend_src/lib/progressLog.ts +++ b/opc/plugins/office_ui/frontend_src/lib/progressLog.ts @@ -90,7 +90,9 @@ function mergeProgress(left: ProgressEntry, right: ProgressEntry): ProgressEntry // the same way as thinking streams. const detail = mergeText(left.detail ?? '', right.detail ?? '', 'thinking') return { - timestamp: right.timestamp, + // A stream occupies the timeline slot where it began. Deltas update the + // row in place instead of repeatedly re-sorting it around tool events. + timestamp: left.timestamp, type: left.type, summary: summarizeThinking(detail, right.summary || left.summary), detail: detail || undefined, @@ -107,7 +109,7 @@ function mergeProgress(left: ProgressEntry, right: ProgressEntry): ProgressEntry if (left.type === 'tool_call') { const mergedDetail = mergeText(left.detail ?? '', right.detail ?? '', 'tool_call') return { - timestamp: right.timestamp, + timestamp: left.timestamp, type: 'tool_call', summary: right.summary || left.summary, detail: mergedDetail || undefined, @@ -152,7 +154,7 @@ export function appendProgressEntry( if (isDuplicateProgress(last, normalized)) { return clampEntries([ ...log.slice(0, actualIndex), - { ...last, timestamp: normalized.timestamp }, + last, ...log.slice(actualIndex + 1), ], maxEntries) } diff --git a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.test.ts b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.test.ts index df5d7d9..7ab93ba 100644 --- a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.test.ts +++ b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.test.ts @@ -1,9 +1,9 @@ import assert from 'node:assert/strict' import type { ChatMessage } from '../types/chat' import type { Session } from '../types/kanban' -import { mapBackendSession } from './collabSync' +import { mapBackendSession, mergeSessionDetailHasMore } from './collabSync' import { canonicalizeSessionExecutionIdentity } from './sessionIdentity' -import { deriveCompanyRuntimeDisplayStatus, getConversationHeaderSession, getConversationSessionView, getWorkItemChildSessions, getWorkItemRoleSessions, mergeConversationMessages, projectSessionConversation } from './workItemSessions' +import { deriveCompanyRuntimeDisplayStatus, getConversationHeaderSession, getConversationSessionView, getWorkItemChildSessions, getWorkItemRoleSessions, mergeConversationMessages, projectSessionConversation, selectCompanySummaryMessages } from './workItemSessions' function makeSession(overrides: Partial & Pick): Session { return { @@ -189,6 +189,161 @@ const mergedDeliveryMessages = mergeConversationMessages([ assert.equal(mergedDeliveryMessages.length, 1) assert.equal(mergedDeliveryMessages[0]?.id, 'child-direct') + +const earlierResult = { + ...resultMessage( + 'earlier-parent-result', + 'session:company-root', + finalBody, + { source: 'engine', transcript_kind: 'child_result' }, + ), + timestamp: 900, +} +const authoritativeResult = { + ...resultMessage( + 'later-authoritative-result', + 'session:company-child', + finalBody, + { source: 'engine', transcript_kind: 'child_task_result' }, + ), + timestamp: 1_100, +} +for (const groups of [ + [[earlierResult], [authoritativeResult]], + [[authoritativeResult], [earlierResult]], +]) { + const result = mergeConversationMessages(groups) + assert.equal(result.length, 1) + assert.equal(result[0]?.id, 'later-authoritative-result') + assert.equal(result[0]?.timestamp, 900, 'result chronology must not depend on channel traversal order') +} + +const pendingCheckpoint = { + ...resultMessage( + 'pending-checkpoint-surface', + 'session:company-root', + 'Approval required.', + { checkpoint_id: 'shared-checkpoint', checkpoint_type: 'human_escalation', status: 'pending' }, + 'system', + ), + timestamp: 1_200, +} +const resolvedCheckpoint = { + ...resultMessage( + 'resolved-checkpoint-surface', + 'session:company-child', + 'Approval required.', + { checkpoint_id: 'shared-checkpoint', checkpoint_type: 'human_escalation', status: 'resolved' }, + 'system', + ), + timestamp: 1_300, +} +const mergedCheckpoint = mergeConversationMessages([[pendingCheckpoint], [resolvedCheckpoint]]) +assert.equal(mergedCheckpoint.length, 1) +assert.equal(mergedCheckpoint[0]?.id, 'pending-checkpoint-surface') +assert.equal(mergedCheckpoint[0]?.timestamp, 1_200) +assert.equal(mergedCheckpoint[0]?.metadata?.status, 'resolved') + +const companySummaryMessages = selectCompanySummaryMessages([ + resultMessage( + 'parent-user', + 'session:company-root', + 'Please investigate the issue.', + { source: 'ui' }, + 'user', + ), + resultMessage( + 'child-transient', + 'session:company-child', + 'A child draft or internal assistant turn must stay out of the parent transcript.', + { source: 'runtime_event', transcript_kind: 'runtime_v2_assistant' }, + 'assistant', + ), + resultMessage( + 'canonical-role-result', + 'session:company-child', + 'The canonical role delivery remains visible in the company summary.', + { source: 'engine', transcript_kind: 'company_role_result' }, + 'assistant', + ), + resultMessage( + 'summary-company-final', + 'session:company-child', + 'A summary-visible company final remains when no canonical role mirror exists.', + { source: 'engine', kind: 'runtime_v2_company_assistant', detail_visibility: 'summary' }, + 'assistant', + ), + { + ...resultMessage( + 'parent-full-only-terminal', + 'session:company-root', + 'A full-only parent surface must neither render nor suppress the committed child summary.', + { + source: 'engine', + transcript_kind: 'runtime_v2_assistant', + detail_visibility: 'full', + canonical_turn_id: 'shared-terminal-turn', + }, + 'assistant', + ), + timestamp: 1400, + }, + { + ...resultMessage( + 'summary-terminal-a', + 'session:company-child', + 'First authoritative terminal for one shared canonical turn.', + { + source: 'engine', + transcript_kind: 'runtime_v2_assistant', + detail_visibility: 'summary', + canonical_turn_id: 'shared-terminal-turn', + }, + 'assistant', + ), + timestamp: 1200, + }, + { + ...resultMessage( + 'summary-terminal-b', + 'session:company-sibling', + 'A second terminal surface with different content must not duplicate the turn.', + { + source: 'engine', + transcript_kind: 'runtime_v2_assistant', + detail_visibility: 'summary', + canonical_turn_id: 'shared-terminal-turn', + }, + 'assistant', + ), + timestamp: 1300, + }, + resultMessage( + 'child-checkpoint', + 'session:company-child', + 'Approval is required.', + { checkpoint_id: 'checkpoint-child', checkpoint_type: 'company_work_item_gate' }, + 'assistant', + ), + resultMessage( + 'child-checkpoint-response', + 'session:company-child', + 'Approved.', + { response_to_checkpoint_id: 'checkpoint-child', ui_message_id: 'ui-checkpoint-response' }, + 'user', + ), +], 'session:company-root') +assert.deepEqual( + companySummaryMessages.map(message => message.id).sort(), + [ + 'parent-user', + 'canonical-role-result', + 'summary-company-final', + 'summary-terminal-b', + 'child-checkpoint', + 'child-checkpoint-response', + ].sort(), +) assert.equal(companyHeaderView?.status, 'running') assert.equal(companyHeaderView?.contextTokens, 0) assert.equal(companyHeaderView?.contextWindow, 128000) @@ -369,4 +524,15 @@ assert.equal(mappedCompanySession.execMode, 'company') assert.equal(mappedCompanySession.companyProfile, 'corporate') assert.equal(mappedCompanySession.orgId, undefined) +assert.equal( + mergeSessionDetailHasMore(false, true, false), + false, + 'a cursorless live refresh must not reopen an exhausted history boundary', +) +assert.equal( + mergeSessionDetailHasMore(false, true, true), + true, + 'a real cursor page may advance the scoped history boundary', +) + console.log('workItemSessions origin-task linking checks passed') diff --git a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts index 5e7a3aa..0596de0 100644 --- a/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts +++ b/opc/plugins/office_ui/frontend_src/lib/workItemSessions.ts @@ -2,11 +2,20 @@ import type { ChatMessage } from '../types/chat' import type { ProgressEntry, Session } from '../types/kanban' import { getContextUsageMetrics } from './contextUsage' import { isSessionWorking } from './sessionRuntime' +import { stableMessageTimelineKey } from './messageTimelineIdentity' const CONTEXT_TOKENS_RE = /(\d[\d,]*)\s*\/\s*(\d[\d,]*)\s+tokens/i const USED_PCT_RE = /(\d{1,3})%\s*used/i const REMAINING_PCT_RE = /(\d{1,3})%\s*remaining/i +export function isMessageVisibleAtDetailLevel( + message: ChatMessage, + detailLevel: 'summary' | 'full', +): boolean { + if (detailLevel === 'full') return true + return String(message.metadata?.detail_visibility ?? 'summary').trim() !== 'full' +} + function compactWhitespace(value: string): string { return value.replace(/\s+/g, ' ').trim() } @@ -58,7 +67,7 @@ function resultSurfacePriority(message: ChatMessage): number { return 0 } -function resultSurfaceDedupeKey(message: ChatMessage): string { +export function resultSurfaceDedupeKey(message: ChatMessage): string { if (resultSurfacePriority(message) <= 0) return '' const content = compactWhitespace(stripNarrativeTitlePrefix(message.content)).slice(0, 2000) return content ? `result:${content}` : '' @@ -454,10 +463,29 @@ export function getConversationHeaderSession( export function mergeConversationMessages(messageGroups: ChatMessage[][]): ChatMessage[] { const seen = new Set() const resultKeyIndex = new Map() + const checkpointIndex = new Map() const merged: ChatMessage[] = [] for (const group of messageGroups) { for (const message of group) { const metadata = (message.metadata ?? {}) as Record + const checkpointId = String(metadata.checkpoint_id ?? '').trim() + if (checkpointId) { + const existingIndex = checkpointIndex.get(checkpointId) + if (existingIndex !== undefined) { + const existing = merged[existingIndex] + const latest = message.timestamp >= existing.timestamp ? message : existing + const earliest = message.timestamp < existing.timestamp ? message : existing + merged[existingIndex] = { + ...existing, + ...latest, + id: existing.id, + channelId: existing.channelId, + timestamp: earliest.timestamp, + metadata: { ...(existing.metadata ?? {}), ...(latest.metadata ?? {}) }, + } + continue + } + } const uiMessageId = typeof metadata.ui_message_id === 'string' ? metadata.ui_message_id.trim() : '' @@ -465,16 +493,32 @@ export function mergeConversationMessages(messageGroups: ChatMessage[][]): ChatM if (resultKey) { const existingIndex = resultKeyIndex.get(resultKey) if (existingIndex !== undefined) { - if (resultSurfacePriority(message) > resultSurfacePriority(merged[existingIndex])) { - merged[existingIndex] = message + const existing = merged[existingIndex] + const candidateWins = resultSurfacePriority(message) > resultSurfacePriority(existing) + const preferred = candidateWins ? message : existing + const secondary = candidateWins ? existing : message + merged[existingIndex] = { + ...secondary, + ...preferred, + // A result surface keeps the chronology of the first underlying + // delivery, independent of which related channel happened to be + // traversed first for this render. + timestamp: Math.min(existing.timestamp, message.timestamp), + metadata: { + ...(secondary.metadata ?? {}), + ...(preferred.metadata ?? {}), + ui_timeline_id: stableMessageTimelineKey(existing), + }, } continue } resultKeyIndex.set(resultKey, merged.length) } - const dedupeKey = resultKey || uiMessageId || `${message.sender}:${message.replyToId ?? ''}:${message.timestamp}:${message.content.trim()}` + const checkpointKey = checkpointId ? `checkpoint:${checkpointId}` : '' + const dedupeKey = resultKey || checkpointKey || uiMessageId || `${message.sender}:${message.replyToId ?? ''}:${message.timestamp}:${message.content.trim()}` if (seen.has(dedupeKey)) continue seen.add(dedupeKey) + if (checkpointId) checkpointIndex.set(checkpointId, merged.length) merged.push(message) } } @@ -485,6 +529,98 @@ export function mergeConversationMessages(messageGroups: ChatMessage[][]): ChatM )) } +/** + * Build the durable transcript shown by a company/org parent session. + * + * A parent conversation may observe every related runtime channel so that + * canonical role deliveries can be surfaced in one place. Those channels + * also contain transient child turns, however, and rendering all of them in + * the parent transcript makes the visible timeline change whenever the + * runtime projection selects a different child. Keep the parent's committed + * messages and only admit the canonical cross-channel result surfaces. + */ +export function selectCompanySummaryMessages( + messages: ChatMessage[], + parentChannelId: string, +): ChatMessage[] { + const terminalAssistantTurn = (message: ChatMessage): string => { + const metadata = (message.metadata ?? {}) as Record + const kind = String(metadata.transcript_kind ?? metadata.kind ?? '').trim() + if (kind !== 'runtime_v2_assistant' && kind !== 'runtime_v2_company_assistant') return '' + return String(metadata.canonical_turn_id ?? metadata.turn_id ?? '').trim() + } + const parentTerminalTurns = new Set( + messages + .filter(message => ( + message.channelId === parentChannelId + && isMessageVisibleAtDetailLevel(message, 'summary') + )) + .map(terminalAssistantTurn) + .filter(Boolean), + ) + const childTerminalByTurn = new Map() + const durableMessages: ChatMessage[] = [] + for (const message of messages) { + if (message.channelId === parentChannelId) { + if (isMessageVisibleAtDetailLevel(message, 'summary')) { + durableMessages.push(message) + } + continue + } + const metadata = (message.metadata ?? {}) as Record + const kind = String(metadata.transcript_kind ?? metadata.kind ?? '').trim() + const checkpointId = String(metadata.checkpoint_id ?? '').trim() + const checkpointType = String(metadata.checkpoint_type ?? '').trim() + const checkpointResponseId = String(metadata.response_to_checkpoint_id ?? '').trim() + const escalationResponseId = String(metadata.response_to_escalation_id ?? '').trim() + if ((checkpointId && checkpointType) || checkpointResponseId || escalationResponseId) { + durableMessages.push(message) + continue + } + if ([ + 'company_role_result', + 'company_role_result_retry', + 'child_task_result', + 'child_task_result_retry', + 'child_result', + 'top_level_reply', + ].includes(kind)) { + durableMessages.push(message) + continue + } + // Snapshot builder deliberately marks the final runtime surface as + // summary-visible. Preserve that durable contract instead of reusing the + // result-dedupe priority table as a visibility threshold. + const isSummaryTerminal = String(metadata.detail_visibility ?? '').trim() === 'summary' + && (kind === 'runtime_v2_assistant' || kind === 'runtime_v2_company_assistant') + if (!isSummaryTerminal) continue + const turnId = terminalAssistantTurn(message) + if (!turnId) { + durableMessages.push(message) + continue + } + if (parentTerminalTurns.has(turnId)) continue + const existing = childTerminalByTurn.get(turnId) + if (!existing) { + childTerminalByTurn.set(turnId, message) + continue + } + const existingPriority = resultSurfacePriority(existing) + const candidatePriority = resultSurfacePriority(message) + if (candidatePriority > existingPriority) { + childTerminalByTurn.set(turnId, message) + } else if ( + candidatePriority === existingPriority + && (message.timestamp > existing.timestamp + || (message.timestamp === existing.timestamp && message.id.localeCompare(existing.id) > 0)) + ) { + childTerminalByTurn.set(turnId, message) + } + } + durableMessages.push(...childTerminalByTurn.values()) + return mergeConversationMessages([durableMessages]) +} + export function mergeConversationProgressLog(timelineSessions: Session[]): ProgressEntry[] { const seen = new Set() const merged: ProgressEntry[] = [] diff --git a/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts b/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts new file mode 100644 index 0000000..7daaedb --- /dev/null +++ b/opc/plugins/office_ui/frontend_src/lib/wsClient.test.ts @@ -0,0 +1,217 @@ +import assert from 'node:assert/strict' + +import { VisualSocketClient } from './wsClient' + +type TestSocketClient = { + handleMessage: (raw: unknown) => void + pendingQueue: string[] + pendingSessionDetailRequests: Array<{ + queued: boolean + settled: boolean + timeout: ReturnType | null + }> + timeoutSessionDetailRequest: (index: number) => void +} + +const deliverAck = ( + client: VisualSocketClient, + payload: Record, +) => { + ;(client as unknown as TestSocketClient).handleMessage(JSON.stringify({ + type: 'ack', + payload, + })) +} + +const flushPromises = async () => { + await Promise.resolve() + await Promise.resolve() +} + +const client = new VisualSocketClient('ws://unit.test', {}) + +// 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' }) +const fullPromise = client.sessionDetail('project-a', 'task-1', { detailLevel: 'full' }) +const summarySettlements: Array> = [] +const fullSettlements: Array> = [] +void summaryPromise.then(payload => { summarySettlements.push(payload) }) +void fullPromise.then(payload => { fullSettlements.push(payload) }) + +await flushPromises() +assert.equal(summarySettlements.length, 0, 'summary Promise must remain pending before its ACK') +assert.equal(fullSettlements.length, 0, 'full Promise must remain pending before its ACK') + +deliverAck(client, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-1', + detail_level: 'full', + marker: 'full-ack', +}) +await flushPromises() +assert.equal(fullSettlements[0]?.marker, 'full-ack', 'the matching full ACK must settle the full request') +assert.equal(summarySettlements.length, 0, 'a full ACK must not settle the same task\'s summary request') + +deliverAck(client, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-1', + detail_level: 'summary', + marker: 'summary-ack', +}) +await flushPromises() +assert.equal(summarySettlements[0]?.marker, 'summary-ack', 'the matching summary ACK must settle the summary request') +assert.equal(summarySettlements[0]?.client_history_page, false, 'a request without a cursor is not a history page') + +const historyPagePromise = client.sessionDetail('project-a', 'task-history', { + detailLevel: 'summary', + beforeCreatedAt: 123, +}) +deliverAck(client, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-history', + detail_level: 'summary', +}) +assert.equal((await historyPagePromise).client_history_page, true, 'a cursor request must be identified as a history page') + +// Requests with the same correlation fields are settled in request order. +const firstPromise = client.sessionDetail('project-a', 'task-2', { detailLevel: 'summary' }) +const secondPromise = client.sessionDetail('project-a', 'task-2', { detailLevel: 'summary' }) +const firstSettlements: Array> = [] +const secondSettlements: Array> = [] +void firstPromise.then(payload => { firstSettlements.push(payload) }) +void secondPromise.then(payload => { secondSettlements.push(payload) }) + +deliverAck(client, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-2', + detail_level: 'summary', + marker: 'first-ack', +}) +await flushPromises() +assert.equal(firstSettlements[0]?.marker, 'first-ack', 'the first matching ACK must settle the oldest request') +assert.equal(secondSettlements.length, 0, 'the second same-scope request must remain pending after one ACK') + +deliverAck(client, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-2', + detail_level: 'summary', + marker: 'second-ack', +}) +await flushPromises() +assert.equal(secondSettlements[0]?.marker, 'second-ack', 'the next matching ACK must settle the next FIFO request') + +// The backend's early store-not-ready path cannot echo request fields. The +// client must still correlate and normalize that error instead of leaving the +// history single-flight Promise pending forever. +const storeNotReadyPromise = client.sessionDetail('project-a', 'task-store', { + detailLevel: 'summary', + viewGeneration: 9, +}) +const storeNotReadySettlements: Array> = [] +void storeNotReadyPromise.then(payload => { storeNotReadySettlements.push(payload) }) +deliverAck(client, { + ok: false, + action: 'create_session', + error: 'store_not_ready', + project_id: 'project-a', + view_generation: 9, +}) +await flushPromises() +assert.equal( + storeNotReadySettlements.length, + 0, + 'store_not_ready for another explicit action must not settle a session_detail request', +) +deliverAck(client, { + ok: false, + error: 'store_not_ready', + project_id: 'project-a', + view_generation: 9, +}) +const storeNotReady = await storeNotReadyPromise +assert.equal(storeNotReady.action, 'session_detail') +assert.equal(storeNotReady.task_id, 'task-store') +assert.equal(storeNotReady.detail_level, 'summary') + +// A sent request timeout releases its caller, but leaves a settled FIFO +// tombstone so a late ACK cannot be mis-correlated to a newer request. +const timeoutClient = new VisualSocketClient('ws://unit.test', {}) +const sentPromise = timeoutClient.sessionDetail('project-a', 'task-timeout', { + detailLevel: 'summary', +}) +const sentSettlements: Array> = [] +void sentPromise.then(payload => { sentSettlements.push(payload) }) +const timeoutInternals = timeoutClient as unknown as TestSocketClient +timeoutInternals.pendingSessionDetailRequests[0].queued = false +timeoutInternals.pendingQueue = [] +timeoutInternals.timeoutSessionDetailRequest(0) +await flushPromises() +assert.equal(sentSettlements[0]?.error, 'request_timeout', 'sent timeout must release the loading caller') +assert.equal(timeoutInternals.pendingSessionDetailRequests.length, 1, 'sent timeout must retain a FIFO tombstone') +assert.equal(timeoutInternals.pendingSessionDetailRequests[0].settled, true, 'the retained request must be a settled tombstone') +assert.equal(timeoutInternals.pendingSessionDetailRequests[0].timeout, null, 'sent request timer must be released') + +const afterTimeoutPromise = timeoutClient.sessionDetail('project-a', 'task-timeout', { + detailLevel: 'summary', +}) +const afterTimeoutSettlements: Array> = [] +void afterTimeoutPromise.then(payload => { afterTimeoutSettlements.push(payload) }) +deliverAck(timeoutClient, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-timeout', + detail_level: 'summary', + marker: 'old-request-ack', +}) +await flushPromises() +assert.equal(sentSettlements.length, 1, 'a late ACK must be consumed by the older tombstone') +assert.equal(sentSettlements[0]?.error, 'request_timeout', 'a late ACK cannot resettle the timed-out Promise') +assert.equal(afterTimeoutSettlements.length, 0, 'the first ACK must not settle the newer same-scope request') +assert.equal(timeoutInternals.pendingSessionDetailRequests.length, 1, 'the newer request must remain pending') + +deliverAck(timeoutClient, { + ok: true, + action: 'session_detail', + project_id: 'project-a', + task_id: 'task-timeout', + detail_level: 'summary', + marker: 'current-request-ack', +}) +await flushPromises() +assert.equal(afterTimeoutSettlements[0]?.marker, 'current-request-ack', 'the next ACK must settle the newer request') + +const queuedTimeoutClient = new VisualSocketClient('ws://unit.test', {}) +const queuedTimeout = queuedTimeoutClient.sessionDetail('project-a', 'task-queued-timeout', { + beforeMessageId: 'older-message', +}) +const queuedTimeoutInternals = queuedTimeoutClient as unknown as TestSocketClient +queuedTimeoutInternals.timeoutSessionDetailRequest(0) +const queuedTimeoutFailure = await queuedTimeout +assert.equal(queuedTimeoutFailure.error, 'request_timeout', 'a request still queued locally may time out') +assert.equal(queuedTimeoutFailure.client_history_page, true, 'synthetic failures must preserve history-page correlation') +assert.equal(queuedTimeoutInternals.pendingSessionDetailRequests.length, 0) +assert.equal(queuedTimeoutInternals.pendingQueue.length, 0) + +const disconnectClient = new VisualSocketClient('ws://unit.test', {}) +const disconnected = disconnectClient.sessionDetail('project-a', 'task-disconnect') +disconnectClient.disconnect() +assert.equal((await disconnected).error, 'disconnected', 'disconnect must settle every pending detail request') + +const saturatedClient = new VisualSocketClient('ws://unit.test', {}) +;(saturatedClient as unknown as TestSocketClient).pendingQueue = Array.from({ length: 100 }, () => '{}') +const saturated = await saturatedClient.sessionDetail('project-a', 'task-saturated') +assert.equal(saturated.error, 'send_queue_full', 'a saturated transport queue must fail immediately') + +console.log('wsClient.test.ts: OK (session_detail correlation and lifecycle cleanup)') diff --git a/opc/plugins/office_ui/frontend_src/lib/wsClient.ts b/opc/plugins/office_ui/frontend_src/lib/wsClient.ts index bf1b186..7d7a456 100644 --- a/opc/plugins/office_ui/frontend_src/lib/wsClient.ts +++ b/opc/plugins/office_ui/frontend_src/lib/wsClient.ts @@ -174,6 +174,9 @@ const PROJECT_SCOPED_MESSAGE_TYPES = new Set([ 'comms_read_message', ]) +const SESSION_DETAIL_REQUEST_TIMEOUT_MS = 30_000 +type SendDisposition = 'sent' | 'queued' | 'queue-full' | 'send-failed' + export class VisualSocketClient { private ws: WebSocket | null = null private reconnectTimer: number | null = null @@ -182,6 +185,18 @@ export class VisualSocketClient { private pendingQueue: string[] = [] private heartbeatTimer: number | null = null private pongTimer: number | null = null + private pendingSessionDetailRequests: Array<{ + projectId: string + taskId: string + detailLevel: 'summary' | 'full' + viewGeneration?: number + historyPage: boolean + wireData: string + queued: boolean + settled: boolean + timeout: ReturnType | null + resolve: (payload: Record) => void + }> = [] constructor( private url: string, @@ -211,6 +226,7 @@ export class VisualSocketClient { } this.ws.onclose = () => { this.stopHeartbeat() + this.failPendingSessionDetailRequests('connection_closed') this.handlers.onStatus?.('disconnected') this.ws = null if (!this.closedByUser) { @@ -222,6 +238,7 @@ export class VisualSocketClient { disconnect(): void { this.closedByUser = true this.stopHeartbeat() + this.failPendingSessionDetailRequests('disconnected') if (this.reconnectTimer !== null) { window.clearTimeout(this.reconnectTimer) this.reconnectTimer = null @@ -230,18 +247,24 @@ export class VisualSocketClient { this.ws = null } - send(payload: Record): void { + send(payload: Record): SendDisposition { if (!this.ensureProjectScope(payload)) { - return + return 'send-failed' } const data = JSON.stringify(payload) if (!this.ws || this.ws.readyState !== WebSocket.OPEN) { if (this.pendingQueue.length < PENDING_QUEUE_MAX) { this.pendingQueue.push(data) + return 'queued' } - return + return 'queue-full' + } + try { + this.ws.send(data) + return 'sent' + } catch { + return 'send-failed' } - this.ws.send(data) } // ── Agent management ─────────────────────────────────────────────────── @@ -411,18 +434,50 @@ export class VisualSocketClient { projectId: string, taskId: string, opts?: { limit?: number; beforeCreatedAt?: number; beforeMessageId?: string; detailLevel?: 'summary' | 'full'; include?: string[]; viewGeneration?: number }, - ): void { + ): Promise> { const pid = this.requireProjectId(projectId, 'session_detail') - this.send({ - type: 'session_detail', - project_id: pid, - task_id: taskId, - limit: opts?.limit, - before_created_at: opts?.beforeCreatedAt, - before_message_id: opts?.beforeMessageId, - detail_level: opts?.detailLevel, - include: opts?.include, - view_generation: opts?.viewGeneration, + const detailLevel = opts?.detailLevel ?? 'summary' + return new Promise((resolve) => { + const payload = { + type: 'session_detail', + project_id: pid, + task_id: taskId, + limit: opts?.limit, + before_created_at: opts?.beforeCreatedAt, + before_message_id: opts?.beforeMessageId, + detail_level: detailLevel, + include: opts?.include, + view_generation: opts?.viewGeneration, + } + const wireData = JSON.stringify(payload) + const request = { + projectId: pid, + taskId, + detailLevel, + viewGeneration: opts?.viewGeneration, + historyPage: opts?.beforeCreatedAt !== undefined || !!opts?.beforeMessageId, + wireData, + queued: false, + settled: false, + timeout: null as ReturnType | null, + resolve, + } + request.timeout = setTimeout(() => { + const index = this.pendingSessionDetailRequests.indexOf(request) + if (index >= 0) this.timeoutSessionDetailRequest(index) + }, SESSION_DETAIL_REQUEST_TIMEOUT_MS) + this.pendingSessionDetailRequests.push(request) + const disposition = this.send(payload) + request.queued = disposition === 'queued' + if (disposition === 'queue-full' || disposition === 'send-failed') { + const index = this.pendingSessionDetailRequests.indexOf(request) + if (index >= 0) { + this.failSessionDetailRequest( + index, + disposition === 'queue-full' ? 'send_queue_full' : 'send_failed', + ) + } + } }) } @@ -656,9 +711,13 @@ export class VisualSocketClient { case 'event': this.handlers.onEvent?.(parsed.payload) break - case 'ack': - this.handlers.onAck?.(parsed.payload) + case 'ack': { + const ackPayload = this.settleSessionDetailRequest( + parsed.payload as unknown as Record, + ) + this.handlers.onAck?.(ackPayload as typeof parsed.payload) break + } case 'channel_created': this.handlers.onChannelCreated?.(parsed.payload) break @@ -799,11 +858,109 @@ export class VisualSocketClient { } catch (e) { console.error('[wsClient] Error handling message:', parsed.type, e) } } + private settleSessionDetailRequest(payload: Record): Record { + const action = typeof payload.action === 'string' ? payload.action.trim() : '' + const isSessionDetailAck = action === 'session_detail' + || (!action && payload.error === 'store_not_ready') + if (!isSessionDetailAck) return payload + const projectId = this.normalizeProjectId(payload.project_id ?? payload.projectId) + const taskId = typeof payload.task_id === 'string' ? payload.task_id : '' + const detailLevel = payload.detail_level === 'full' ? 'full' : payload.detail_level === 'summary' ? 'summary' : '' + const viewGeneration = typeof payload.view_generation === 'number' ? payload.view_generation : undefined + const index = this.pendingSessionDetailRequests.findIndex(request => ( + (!projectId || request.projectId === projectId) + && (!taskId || request.taskId === taskId) + && (!detailLevel || request.detailLevel === detailLevel) + && (viewGeneration === undefined || request.viewGeneration === viewGeneration) + )) + if (index < 0) return payload + const [request] = this.pendingSessionDetailRequests.splice(index, 1) + if (request.timeout !== null) clearTimeout(request.timeout) + const normalizedPayload = { + ...payload, + action: 'session_detail', + project_id: projectId || request.projectId, + task_id: taskId || request.taskId, + detail_level: detailLevel || request.detailLevel, + client_history_page: request.historyPage, + } + if (!request.settled) { + request.settled = true + request.resolve(normalizedPayload) + } + return normalizedPayload + } + + private timeoutSessionDetailRequest(index: number): void { + const request = this.pendingSessionDetailRequests[index] + if (!request) return + if (request.queued) { + this.failSessionDetailRequest(index, 'request_timeout') + return + } + + if (request.timeout !== null) clearTimeout(request.timeout) + request.timeout = null + if (!request.settled) { + request.settled = true + request.resolve(this.sessionDetailFailurePayload(request, 'request_timeout')) + } + // Keep a settled tombstone in FIFO order until its ACK or connection + // cleanup. Removing it would let a late ACK settle a newer request with + // identical correlation fields; closing the shared socket would interrupt + // unrelated runtime events. + } + + private failSessionDetailRequest(index: number, error: string): void { + const [request] = this.pendingSessionDetailRequests.splice(index, 1) + if (!request) return + if (request.timeout !== null) clearTimeout(request.timeout) + if (request.queued) { + const queuedIndex = this.pendingQueue.indexOf(request.wireData) + if (queuedIndex >= 0) this.pendingQueue.splice(queuedIndex, 1) + } + if (!request.settled) request.resolve(this.sessionDetailFailurePayload(request, error)) + } + + private sessionDetailFailurePayload( + request: { + projectId: string + taskId: string + detailLevel: 'summary' | 'full' + historyPage: boolean + }, + error: string, + ): Record { + return { + ok: false, + action: 'session_detail', + error, + project_id: request.projectId, + task_id: request.taskId, + detail_level: request.detailLevel, + client_history_page: request.historyPage, + } + } + + private failPendingSessionDetailRequests(error: string): void { + while (this.pendingSessionDetailRequests.length > 0) { + this.failSessionDetailRequest(0, error) + } + } + private flushPendingQueue(): void { if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return const queued = this.pendingQueue.splice(0) for (const data of queued) { - this.ws.send(data) + const detailRequestIndex = this.pendingSessionDetailRequests.findIndex( + request => request.queued && request.wireData === data, + ) + try { + this.ws.send(data) + if (detailRequestIndex >= 0) this.pendingSessionDetailRequests[detailRequestIndex].queued = false + } catch { + if (detailRequestIndex >= 0) this.failSessionDetailRequest(detailRequestIndex, 'send_failed') + } } } diff --git a/opc/plugins/office_ui/frontend_src/package.json b/opc/plugins/office_ui/frontend_src/package.json index a819489..22d00b7 100644 --- a/opc/plugins/office_ui/frontend_src/package.json +++ b/opc/plugins/office_ui/frontend_src/package.json @@ -7,6 +7,7 @@ "dev": "vite", "build": "vite build", "typecheck": "tsc -b", + "test:scroll": "node --import tsx ./tests/message-list-scroll.spec.ts", "preview": "vite preview" }, "dependencies": { diff --git a/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts b/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts index e75dda8..18f1086 100644 --- a/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts +++ b/opc/plugins/office_ui/frontend_src/stores/SessionStore.ts @@ -260,6 +260,8 @@ function sessionReducer(state: Session[], action: SessionAction): Session[] { detailLoaded: existing.detailLoaded ?? incoming.detailLoaded, fullLoaded: existing.fullLoaded ?? incoming.fullLoaded, hasMore: incoming.hasMore ?? existing.hasMore, + summaryHasMore: incoming.summaryHasMore ?? existing.summaryHasMore, + fullHasMore: incoming.fullHasMore ?? existing.fullHasMore, detailLoading: incoming.detailLoading ?? existing.detailLoading, detailError: incoming.detailError ?? existing.detailError, viewGeneration: incoming.viewGeneration ?? existing.viewGeneration, @@ -314,6 +316,8 @@ function sessionReducer(state: Session[], action: SessionAction): Session[] { detailLoaded: nextSession.detailLoaded ?? s.detailLoaded, fullLoaded: nextSession.fullLoaded ?? s.fullLoaded, hasMore: nextSession.hasMore ?? s.hasMore, + summaryHasMore: nextSession.summaryHasMore ?? s.summaryHasMore, + fullHasMore: nextSession.fullHasMore ?? s.fullHasMore, detailLoading: nextSession.detailLoading ?? s.detailLoading, detailError: nextSession.detailError ?? s.detailError, viewGeneration: nextSession.viewGeneration ?? s.viewGeneration, diff --git a/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.html b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.html new file mode 100644 index 0000000..a0f3c8a --- /dev/null +++ b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.html @@ -0,0 +1,12 @@ + + + + + + MessageList scroll regression fixture + + +
+ + + diff --git a/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.spec.ts b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.spec.ts new file mode 100644 index 0000000..cd2d374 --- /dev/null +++ b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.spec.ts @@ -0,0 +1,734 @@ +import assert from 'node:assert/strict' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { chromium, type Browser, type Page } from 'playwright' +import { createServer, type ViteDevServer } from 'vite' + +// Run from frontend_src: +// node --import tsx ./tests/message-list-scroll.spec.ts + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const FRONTEND_ROOT = resolve(__dirname, '..') + +interface ScrollMetrics { + scrollTop: number + scrollHeight: number + clientHeight: number + bottomGap: number +} + +interface FixtureTelemetry { + markReadCalls: number + renders: number + scrollEvents: number + scrollTopWrites: number +} + +async function settle(page: Page, milliseconds = 80): Promise { + await page.evaluate(() => new Promise((resolveFrame) => { + requestAnimationFrame(() => requestAnimationFrame(() => resolveFrame())) + })) + await page.waitForTimeout(milliseconds) +} + +async function metrics(page: Page): Promise { + return page.locator('.msg-list').evaluate((element) => { + const list = element as HTMLElement + return { + scrollTop: list.scrollTop, + scrollHeight: list.scrollHeight, + clientHeight: list.clientHeight, + bottomGap: list.scrollHeight - list.clientHeight - list.scrollTop, + } + }) +} + +async function gotoFixture( + page: Page, + baseUrl: string, + policy: string, + extraQuery = '', +): Promise { + const suffix = extraQuery ? `&${extraQuery}` : '' + await page.goto(`${baseUrl}tests/message-list-scroll.html?policy=${policy}${suffix}`) + await page.waitForFunction(() => window.__messageListFixtureReady === true) + await page.waitForSelector('.msg-list') + await settle(page, 150) +} + +async function resetTelemetry(page: Page): Promise { + await page.evaluate(() => window.__messageListFixture?.resetTelemetry()) +} + +async function telemetry(page: Page): Promise { + return page.evaluate(() => { + const value = window.__messageListFixture?.telemetry() + if (!value) throw new Error('fixture telemetry is unavailable') + return value + }) +} + +async function appendMessages(page: Page, count: number): Promise { + await page.evaluate((amount) => window.__messageListFixture?.appendMessages(amount), count) + await page.waitForSelector(`text=fixture-marker-${String(225 + count - 1).padStart(4, '0')}`) + await settle(page) +} + +async function firstFullyVisibleMarker(page: Page): Promise<{ marker: string; top: number }> { + return page.locator('.msg-list').evaluate((element) => { + const list = element as HTMLElement + const listRect = list.getBoundingClientRect() + for (const row of Array.from(list.querySelectorAll('.msg-row'))) { + const rect = row.getBoundingClientRect() + const markerMatch = /fixture-marker-(\d+)/.exec(row.textContent || '') + const marker = markerMatch?.[0] + if (markerMatch && Number(markerMatch[1]) % 5 === 0) continue + if (marker && rect.top >= listRect.top + 1 && rect.bottom <= listRect.bottom - 1) { + return { marker, top: rect.top } + } + } + throw new Error('no fully visible fixture row found') + }) +} + +async function markerTop(page: Page, marker: string): Promise { + return page.locator('.msg-list').evaluate((element, expectedMarker) => { + const row = Array.from(element.querySelectorAll('.msg-row')) + .find((candidate) => candidate.textContent?.includes(expectedMarker)) + if (!row) throw new Error(`marker row not found: ${expectedMarker}`) + return row.getBoundingClientRect().top + }, marker) +} + +async function markerViewportOffset(page: Page, marker: string): Promise { + return page.locator('.msg-list').evaluate((element, expectedMarker) => { + const list = element as HTMLElement + const row = Array.from(list.querySelectorAll('.msg-row')) + .find((candidate) => candidate.textContent?.includes(expectedMarker)) + if (!row) throw new Error(`marker row not found: ${expectedMarker}`) + return row.getBoundingClientRect().top - list.getBoundingClientRect().top + }, marker) +} + +async function nearestMarkerAbove(page: Page, anchorMarker: string): Promise<{ marker: string; index: number }> { + return page.locator('.msg-list').evaluate((element, expectedAnchor) => { + const rows = Array.from(element.querySelectorAll('.msg-row')) + const anchor = rows.find((row) => row.textContent?.includes(expectedAnchor)) + if (!anchor) throw new Error(`anchor row not found: ${expectedAnchor}`) + const anchorTop = anchor.getBoundingClientRect().top + for (let index = rows.length - 1; index >= 0; index -= 1) { + const row = rows[index] + if (row.getBoundingClientRect().bottom > anchorTop - 1) continue + const marker = /fixture-marker-(\d+)/.exec(row.textContent || '') + if (marker) return { marker: marker[0], index: Number(marker[1]) } + } + throw new Error('no rendered fixture row exists above the viewport anchor') + }, anchorMarker) +} + +async function clickHistoryWithoutScrolling(page: Page): Promise { + await page.locator('.msg-history-load-btn').evaluate((element) => { + ;(element as HTMLButtonElement).click() + }) +} + +async function runFollowAndBrowsingCases(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow') + + const initial = await metrics(page) + assert.ok(initial.scrollHeight > initial.clientHeight * 8, 'fixture must exercise a long, 200+ row transcript') + assert.ok(Math.abs(initial.bottomGap) <= 2, `follow policy should initially settle at bottom; gap=${initial.bottomGap}`) + + // Regression for scrollToEnd -> onMarkRead -> state -> changed callback -> + // layout effect -> scrollToEnd. Once settled, an idle transcript must not + // keep invoking markRead, re-rendering itself, or even assigning scrollTop. + await resetTelemetry(page) + await page.waitForTimeout(2_000) + const idle = await telemetry(page) + assert.equal(idle.markReadCalls, 0, 'idle bottom transcript must not run a markRead feedback loop') + assert.equal(idle.renders, 0, 'idle bottom transcript must not re-render from markRead feedback') + assert.equal(idle.scrollEvents, 0, 'idle bottom transcript must not keep writing its scroll position') + assert.equal(idle.scrollTopWrites, 0, 'idle bottom transcript must perform zero direct scrollTop writes for two seconds') + + await resetTelemetry(page) + await appendMessages(page, 5) + const afterAppend = await metrics(page) + const followTelemetry = await telemetry(page) + assert.ok(Math.abs(afterAppend.bottomGap) <= 2, `follow policy must stay at bottom after append; gap=${afterAppend.bottomGap}`) + assert.ok(followTelemetry.markReadCalls <= 1, `one append batch may mark read at most once; calls=${followTelemetry.markReadCalls}`) + assert.ok(followTelemetry.scrollEvents <= 1, `one append batch may scroll at most once; events=${followTelemetry.scrollEvents}`) + assert.ok(followTelemetry.scrollTopWrites <= 1, `one append batch may assign scrollTop at most once; writes=${followTelemetry.scrollTopWrites}`) + + await page.evaluate(() => window.__messageListFixture?.growDraft(4_000)) + await page.waitForSelector('.msg-row-draft') + await settle(page, 150) + const afterDraftGrowth = await metrics(page) + assert.ok( + Math.abs(afterDraftGrowth.bottomGap) <= 2, + `follow policy must absorb a large live-reply height change; gap=${afterDraftGrowth.bottomGap}`, + ) + + // Use a real browser wheel input, not a synthetic scrollTop-only change, to + // transition from FOLLOWING to BROWSING. + const list = page.locator('.msg-list') + await list.hover() + await page.mouse.wheel(0, -1_100) + await settle(page) + const detached = await metrics(page) + assert.ok(detached.bottomGap > 400, `wheel-up must detach from bottom immediately; gap=${detached.bottomGap}`) + const anchorBefore = await firstFullyVisibleMarker(page) + + await resetTelemetry(page) + await page.evaluate(() => { + window.__messageListFixture?.appendMessages(15) + window.__messageListFixture?.growDraft(5_000) + }) + await page.waitForSelector('text=fixture-marker-0244') + await settle(page, 150) + const anchorAfterTop = await markerTop(page, anchorBefore.marker) + const browsingTelemetry = await telemetry(page) + assert.ok( + Math.abs(anchorAfterTop - anchorBefore.top) <= 1, + `browsing anchor moved by ${anchorAfterTop - anchorBefore.top}px during append storm`, + ) + assert.equal(browsingTelemetry.markReadCalls, 0, 'browsing updates must not mark the detached transcript read') + assert.equal(browsingTelemetry.scrollEvents, 0, 'browsing updates must not write the transcript scroll position') + + // A Markdown row which grows above the anchor is the same geometry change + // produced by an image load or an expanded approval card. Native anchoring + // plus the single controller must hold the visible row exactly in place. + const rowAbove = await nearestMarkerAbove(page, anchorBefore.marker) + await page.evaluate(({ index }) => window.__messageListFixture?.growMessage(index, 6_000), rowAbove) + await settle(page, 150) + const anchorAfterHeightChange = await markerTop(page, anchorBefore.marker) + const afterHeightChange = await metrics(page) + assert.ok( + Math.abs(anchorAfterHeightChange - anchorBefore.top) <= 1, + `browsing anchor moved by ${anchorAfterHeightChange - anchorBefore.top}px when ${rowAbove.marker} grew above it`, + ) + assert.ok(afterHeightChange.bottomGap > 400, 'height growth above a browsing anchor must not pull the transcript to bottom') + assert.equal( + await page.locator('.msg-list').getAttribute('data-viewport-mode'), + 'browsing', + 'height growth must retain browsing mode', + ) + + // Result surfaces can be replaced by a higher-priority durable projection + // and full-sync payloads rebuild every message object. Neither operation may + // give JavaScript permission to write the browsing scroll position. + await resetTelemetry(page) + await page.locator('.msg-list').evaluate((element, marker) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes(marker)) + if (!row) throw new Error(`result anchor row is missing: ${marker}`) + row.dataset.identityProbe = 'stable-result-row' + }, anchorBefore.marker) + const anchorIndex = Number(anchorBefore.marker.slice('fixture-marker-'.length)) + await page.evaluate((index) => window.__messageListFixture?.upgradeResultSurface(index), anchorIndex) + await settle(page, 120) + const resultReplacement = await page.locator('.msg-list').evaluate((element, marker) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes(marker)) + if (!row) throw new Error(`replaced result anchor row is missing: ${marker}`) + return { + top: row.getBoundingClientRect().top, + probe: row.dataset.identityProbe, + key: row.dataset.timelineKey, + } + }, anchorBefore.marker) + assert.ok(Math.abs(resultReplacement.top - anchorBefore.top) <= 1, 'result-surface replacement must preserve the browsing anchor') + assert.equal(resultReplacement.probe, 'stable-result-row', 'result-surface replacement must reuse the anchored DOM node') + assert.equal(resultReplacement.key, `turn:assistant:fixture-turn-${anchorIndex}`, 'result replacement must retain the first surface timeline key') + await page.evaluate(() => window.__messageListFixture?.repeatFullSync()) + await settle(page, 120) + assert.ok( + Math.abs(await markerTop(page, anchorBefore.marker) - anchorBefore.top) <= 1, + 'repeated full sync must preserve the browsing anchor', + ) + const syncTelemetry = await telemetry(page) + assert.equal(syncTelemetry.scrollTopWrites, 0, 'result upgrade and repeated full sync must not directly write browsing scrollTop') + + // Resizing the panel changes the viewport rather than the message content. + // The controller restores the same row offset through its sole observer. + const offsetBeforeResize = await markerViewportOffset(page, anchorBefore.marker) + await page.setViewportSize({ width: 1280, height: 620 }) + await settle(page, 150) + const offsetAfterResize = await markerViewportOffset(page, anchorBefore.marker) + assert.ok( + Math.abs(offsetAfterResize - offsetBeforeResize) <= 1, + `panel resize moved the browsing anchor by ${offsetAfterResize - offsetBeforeResize}px`, + ) + await page.setViewportSize({ width: 1280, height: 800 }) + await settle(page, 150) + + // First expose the 25 locally-windowed rows, then exercise the real remote + // history callback which prepends 40 rows. DOM clicks avoid Playwright + // scrolling the history button into view before the assertion. + await clickHistoryWithoutScrolling(page) + await settle(page, 120) + const anchorAfterLocalHistory = await markerTop(page, anchorBefore.marker) + assert.ok( + Math.abs(anchorAfterLocalHistory - anchorBefore.top) <= 1, + `browsing anchor moved by ${anchorAfterLocalHistory - anchorBefore.top}px when the local window expanded`, + ) + await clickHistoryWithoutScrolling(page) + await page.waitForSelector('text=history-marker-00-039') + await settle(page, 150) + const anchorAfterPrepend = await markerTop(page, anchorBefore.marker) + const afterPrepend = await metrics(page) + assert.ok( + Math.abs(anchorAfterPrepend - anchorBefore.top) <= 1, + `browsing anchor moved by ${anchorAfterPrepend - anchorBefore.top}px after history prepend`, + ) + assert.ok(afterPrepend.bottomGap > 400, 'history prepend must not pull a browsing transcript to bottom') + assert.equal( + await page.locator('.msg-list').getAttribute('data-viewport-mode'), + 'browsing', + 'history prepend must retain browsing mode', + ) + + const jumpToLatest = page.getByRole('button', { name: /(?:latest|最新)/i }) + await jumpToLatest.waitFor({ state: 'visible' }) + await jumpToLatest.click() + await settle(page) + const resumed = await metrics(page) + assert.ok(Math.abs(resumed.bottomGap) <= 2, `jump-to-latest must resume follow mode; gap=${resumed.bottomGap}`) +} + +async function runInputIntentCases(page: Page, baseUrl: string): Promise { + const list = page.locator('.msg-list') + + await gotoFixture(page, baseUrl, 'follow') + await list.focus() + await page.keyboard.press('PageUp') + await settle(page) + assert.equal(await list.getAttribute('data-viewport-mode'), 'browsing', 'PageUp must immediately enter browsing mode') + assert.ok((await metrics(page)).bottomGap > 100, 'PageUp must detach the transcript from the tail') + + await gotoFixture(page, baseUrl, 'follow') + const listBox = await list.boundingBox() + if (!listBox) throw new Error('scrollbar fixture has no bounding box') + const beforeDrag = await metrics(page) + const scrollbarWidth = await list.evaluate((element) => { + const viewport = element as HTMLElement + return viewport.offsetWidth - viewport.clientWidth + }) + const scrollbarX = listBox.x + listBox.width - Math.max(2, scrollbarWidth / 2) + const scrollbarTrackY = listBox.y + beforeDrag.clientHeight / 2 + await page.mouse.click(scrollbarX, scrollbarTrackY) + await settle(page) + const afterDrag = await metrics(page) + assert.equal( + await list.getAttribute('data-viewport-mode'), + 'browsing', + `scrollbar interaction must immediately enter browsing mode; width=${scrollbarWidth} before=${JSON.stringify(beforeDrag)} after=${JSON.stringify(afterDrag)}`, + ) + assert.ok(afterDrag.bottomGap > 100, 'scrollbar interaction must detach the transcript from the tail') + + // Some assistive/native scroll paths expose only the resulting scroll + // event. A downward move while already browsing must replace the stored + // anchor so a later resize cannot restore an older viewport position. + await gotoFixture(page, baseUrl, 'follow') + await list.hover() + await page.mouse.wheel(0, -2_400) + await settle(page) + await list.evaluate((element) => { + const viewport = element as HTMLElement + viewport.scrollTop += 1_000 + }) + await settle(page) + const nativeDownAnchor = await firstFullyVisibleMarker(page) + const nativeDownOffset = await markerViewportOffset(page, nativeDownAnchor.marker) + await page.setViewportSize({ width: 1280, height: 650 }) + await settle(page, 150) + assert.ok( + Math.abs(await markerViewportOffset(page, nativeDownAnchor.marker) - nativeDownOffset) <= 1, + 'untagged downward browsing scroll must become the anchor used by a later viewport resize', + ) + await page.setViewportSize({ width: 1280, height: 800 }) + await settle(page, 120) +} + +async function runTouchIntentCase(browser: Browser, baseUrl: string): Promise { + const page = await browser.newPage({ viewport: { width: 1280, height: 800 }, hasTouch: true }) + try { + await gotoFixture(page, baseUrl, 'follow') + const list = page.locator('.msg-list') + const box = await list.boundingBox() + if (!box) throw new Error('touch fixture has no bounding box') + const cdp = await page.context().newCDPSession(page) + const x = box.x + box.width / 2 + const startY = box.y + box.height * 0.45 + await cdp.send('Input.dispatchTouchEvent', { + type: 'touchStart', + touchPoints: [{ x, y: startY }], + }) + for (const delta of [35, 75, 120, 170]) { + await cdp.send('Input.dispatchTouchEvent', { + type: 'touchMove', + touchPoints: [{ x, y: startY + delta }], + }) + } + await cdp.send('Input.dispatchTouchEvent', { type: 'touchEnd', touchPoints: [] }) + await settle(page, 150) + assert.equal(await list.getAttribute('data-viewport-mode'), 'browsing', 'native touch swipe must enter browsing mode') + assert.ok((await metrics(page)).bottomGap > 100, 'native touch swipe must detach the transcript from the tail') + } finally { + await page.close() + } +} + +async function runTimelineIdentityCases(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow') + await page.evaluate(() => window.__messageListFixture?.addSharedTurnCompanyRows([4])) + await page.waitForSelector('text=shared-company-row-4') + await settle(page) + await page.locator('.msg-list').evaluate((element) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes('shared-company-row-4')) + if (!row) throw new Error('mounted shared-turn owner is missing') + row.dataset.identityProbe = 'shared-turn-owner' + }) + await page.evaluate(() => window.__messageListFixture?.addSharedTurnCompanyRows([0, 1, 2, 3])) + await page.waitForSelector('text=shared-company-row-3') + await settle(page) + const sharedTurnKeys = await page.evaluate(() => [0, 1, 2, 3, 4].map((index) => { + const row = Array.from(document.querySelectorAll('.msg-timeline-row')) + .find((candidate) => candidate.textContent?.includes(`shared-company-row-${index}`)) + if (!row?.dataset.timelineKey) throw new Error(`shared company row ${index} is missing a timeline key`) + return row.dataset.timelineKey + })) + assert.equal(new Set(sharedTurnKeys).size, 5, `company rows sharing a canonical turn need unique DOM keys: ${sharedTurnKeys.join(', ')}`) + assert.equal( + await page.locator('.msg-list').evaluate((element) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes('shared-company-row-4')) + return row?.dataset.identityProbe + }), + 'shared-turn-owner', + 'inserting an older duplicate-turn row must not remount the existing owner', + ) + + await gotoFixture(page, baseUrl, 'follow') + const resultMarker = 'fixture-marker-0211' + const initialResultIdentity = await page.locator('.msg-list').evaluate((element, marker) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes(marker)) + if (!row) throw new Error('cross-channel result fixture row is missing') + row.dataset.identityProbe = 'cross-channel-result-owner' + return { key: row.dataset.timelineKey } + }, resultMarker) + await page.evaluate(() => window.__messageListFixture?.mergeResultGroupOrder(211, true)) + await settle(page, 120) + await page.evaluate(() => window.__messageListFixture?.mergeResultGroupOrder(211, false)) + await settle(page, 120) + const reorderedResult = await page.locator('.msg-list').evaluate((element, marker) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes(marker)) + if (!row) throw new Error('reordered cross-channel result row is missing') + return { key: row.dataset.timelineKey, probe: row.dataset.identityProbe } + }, resultMarker) + assert.equal(reorderedResult.key, initialResultIdentity.key, 'cross-channel result group order must not change its mounted timeline key') + assert.equal(reorderedResult.probe, 'cross-channel-result-owner', 'cross-channel result group order must reuse the mounted DOM row') + + await gotoFixture(page, baseUrl, 'follow') + await page.evaluate(() => window.__messageListFixture?.growDraft(9_000)) + await page.waitForSelector('.msg-row-draft') + await settle(page) + const draftGeometry = await page.evaluate(() => { + const list = document.querySelector('.msg-list') + window.__rememberedDraftTimelineRow = document.querySelector( + '[data-timeline-key="turn:assistant:fixture-live-turn"]', + ) + const row = window.__rememberedDraftTimelineRow as HTMLElement | null + if (!list || !row) throw new Error('live draft timeline wrapper is missing') + list.scrollTop = Math.max(0, row.offsetTop + row.offsetHeight / 2 - list.clientHeight / 2) + return { height: row.getBoundingClientRect().height } + }) + await settle(page, 120) + assert.equal( + await page.locator('.msg-list').getAttribute('data-viewport-mode'), + 'browsing', + 'moving into the middle of a long draft must enter browsing mode', + ) + const draftScrollTop = (await metrics(page)).scrollTop + await resetTelemetry(page) + await page.evaluate(() => window.__messageListFixture?.finalizeDraft()) + await page.waitForFunction(() => { + const row = document.querySelector('[data-timeline-key="turn:assistant:fixture-live-turn"]') + return !!row && !row.querySelector('.msg-row-draft') + }) + await settle(page) + const finalizedDraft = await page.evaluate(() => { + const list = document.querySelector('.msg-list') + const committed = document.querySelector('[data-timeline-key="turn:assistant:fixture-live-turn"]') + if (!list || !committed) throw new Error('committed live turn is missing') + return { + reused: committed === window.__rememberedDraftTimelineRow, + height: committed.getBoundingClientRect().height, + scrollTop: list.scrollTop, + mode: list.dataset.viewportMode, + collapsed: !!committed.querySelector('.msg-collapse-toggle'), + } + }) + assert.equal(finalizedDraft.reused, true, 'draft -> runtime_v2_assistant final must reuse the same outer timeline DOM node') + assert.equal(finalizedDraft.collapsed, false, 'a mounted expanded draft must not auto-collapse when its final arrives') + assert.ok( + finalizedDraft.height >= draftGeometry.height - 4, + `draft -> final must not collapse the long turn (${draftGeometry.height}px -> ${finalizedDraft.height}px)`, + ) + assert.ok(Math.abs(finalizedDraft.scrollTop - draftScrollTop) <= 1, 'draft -> final must preserve a browsing viewport inside the turn') + assert.equal(finalizedDraft.mode, 'browsing', 'draft -> final must not resume following while the user is browsing') + assert.equal((await telemetry(page)).scrollTopWrites, 0, 'draft -> final must not programmatically write browsing scrollTop') +} + +async function runProgressCapIdentityCase(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow', 'progress=1') + await page.waitForSelector('text=progress-marker-0099') + const list = page.locator('.msg-list') + const before = await list.evaluate((element) => { + const viewport = element as HTMLElement + const row = Array.from(viewport.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes('progress-marker-0040')) + if (!row) throw new Error('progress cap anchor row is missing') + viewport.scrollTop += row.getBoundingClientRect().top - viewport.getBoundingClientRect().top - 80 + row.dataset.identityProbe = 'stable-progress-row' + return { key: row.dataset.timelineKey } + }) + await settle(page, 120) + assert.equal(await list.getAttribute('data-viewport-mode'), 'browsing', 'scrolling to an old progress row must enter browsing mode') + const topBefore = await list.evaluate((element) => { + const row = Array.from(element.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes('progress-marker-0040')) + if (!row) throw new Error('progress cap anchor row disappeared before append') + return row.getBoundingClientRect().top + }) + + await resetTelemetry(page) + await page.evaluate(() => window.__messageListFixture?.appendProgressEntries(1)) + await page.waitForSelector('text=progress-marker-0100') + await settle(page, 150) + const after = await list.evaluate((element) => { + const viewport = element as HTMLElement + const row = Array.from(viewport.querySelectorAll('.msg-timeline-row')) + .find(candidate => candidate.textContent?.includes('progress-marker-0040')) + if (!row) throw new Error('progress cap anchor row disappeared after append') + return { + key: row.dataset.timelineKey, + probe: row.dataset.identityProbe, + top: row.getBoundingClientRect().top, + mode: viewport.dataset.viewportMode, + } + }) + assert.equal(after.key, before.key, 'progress key must survive the 100-entry window shift') + assert.equal(after.probe, 'stable-progress-row', 'React must retain the anchored progress DOM node') + assert.ok(Math.abs(after.top - topBefore) <= 1, `progress cap moved browsing anchor by ${after.top - topBefore}px`) + assert.equal(after.mode, 'browsing', 'progress cap append must retain browsing mode') + assert.equal((await telemetry(page)).scrollTopWrites, 0, 'progress cap append must not programmatically write browsing scrollTop') + assert.equal(await page.getByText('progress-marker-0000').count(), 0, 'the fixture must actually evict the oldest progress row') +} + +async function runExternalProgressGeometryCase(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow', 'externalProgress=1') + const list = page.locator('.msg-list') + await list.hover() + await page.mouse.wheel(0, -1_300) + await settle(page) + const anchor = await firstFullyVisibleMarker(page) + const offsetBefore = await markerViewportOffset(page, anchor.marker) + const heightBefore = await list.evaluate(element => (element as HTMLElement).clientHeight) + + await resetTelemetry(page) + await page.evaluate(() => window.__messageListFixture?.setExternalRoleCount(12)) + await page.waitForSelector('text=Fixture Role 11') + await settle(page, 150) + + const heightAfter = await list.evaluate(element => (element as HTMLElement).clientHeight) + const offsetAfter = await markerViewportOffset(page, anchor.marker) + const progressTelemetry = await telemetry(page) + assert.equal(heightAfter, heightBefore, 'role additions must not resize the message viewport') + assert.ok( + Math.abs(offsetAfter - offsetBefore) <= 1, + `external Execution Progress moved the browsing anchor by ${offsetAfter - offsetBefore}px`, + ) + assert.equal(progressTelemetry.scrollTopWrites, 0, 'external role additions must not write browsing scrollTop') + assert.equal( + await list.getAttribute('data-viewport-mode'), + 'browsing', + 'external role additions must retain browsing mode', + ) +} + +async function runHiddenPendingCase(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow') + const initiallyHidden = await page.evaluate(() => !Array.from(document.querySelectorAll('.ckpt-title')) + .some((element) => element.textContent?.trim() === 'Approval checkpoint 0')) + assert.equal(initiallyHidden, true, 'the oldest pending checkpoint must begin outside the 200-row DOM window') + + await page.getByRole('button', { name: /Pending actions/i }).click() + await page.waitForFunction(() => Array.from(document.querySelectorAll('.ckpt-title')) + .some((element) => element.textContent?.trim() === 'Approval checkpoint 0')) + await settle(page, 120) + const focused = await page.evaluate(() => { + const list = document.querySelector('.msg-list') + const row = document.querySelector('[data-timeline-key="checkpoint:fixture-checkpoint-0"]') + if (!list || !row) throw new Error('focused pending checkpoint row is missing') + const listRect = list.getBoundingClientRect() + const rowRect = row.getBoundingClientRect() + return { + mode: list.dataset.viewportMode, + visible: rowRect.bottom > listRect.top && rowRect.top < listRect.bottom, + bottomGap: list.scrollHeight - list.clientHeight - list.scrollTop, + } + }) + assert.equal(focused.mode, 'browsing', 'locating an old pending checkpoint must enter browsing mode') + assert.equal(focused.visible, true, 'pending reminder must locate the checkpoint outside the initial 200-row window') + assert.ok(focused.bottomGap > 100, 'locating an old pending checkpoint must not jump back to latest') +} + +async function runCheckpointCase(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'follow') + await page.waitForSelector('text=Approval checkpoint 110') + await page.waitForSelector('text=fixture-marker-0111') + + const chronological = await page.evaluate(() => { + const checkpointTitle = Array.from(document.querySelectorAll('.ckpt-title')) + .find((element) => element.textContent?.includes('Approval checkpoint 110')) + const checkpointRow = checkpointTitle?.closest('.msg-row') + const nextRow = Array.from(document.querySelectorAll('.msg-row')) + .find((element) => element.textContent?.includes('fixture-marker-0111')) + if (!checkpointRow || !nextRow) throw new Error('checkpoint chronology nodes are missing') + window.__rememberedCheckpointRow = checkpointRow + return !!(checkpointRow.compareDocumentPosition(nextRow) & Node.DOCUMENT_POSITION_FOLLOWING) + }) + assert.equal(chronological, true, 'pending checkpoint must remain before its chronological successor') + + await page.evaluate(() => window.__messageListFixture?.resolveCheckpoint()) + await page.waitForSelector('text=Approved fixture checkpoint') + await settle(page) + const retainedNode = await page.evaluate(() => { + const checkpointTitle = Array.from(document.querySelectorAll('.ckpt-title')) + .find((element) => element.textContent?.includes('Approval checkpoint 110')) + const currentRow = checkpointTitle?.closest('.msg-row') + return !!currentRow + && currentRow === window.__rememberedCheckpointRow + && document.contains(window.__rememberedCheckpointRow ?? null) + }) + assert.equal(retainedNode, true, 'resolving a checkpoint must update the same chronological DOM row') +} + +async function runPolicyCases(page: Page, baseUrl: string): Promise { + await gotoFixture(page, baseUrl, 'manual') + const manual = await metrics(page) + assert.ok(manual.scrollTop <= 2, `manual policy must not perform initial scrolling; scrollTop=${manual.scrollTop}`) + + await gotoFixture(page, baseUrl, 'initial-bottom') + const initial = await metrics(page) + assert.ok(Math.abs(initial.bottomGap) <= 2, `initial-bottom must initially reach bottom; gap=${initial.bottomGap}`) + await page.evaluate(() => window.__messageListFixture?.repeatFullSync()) + await settle(page, 100) + await page.evaluate(() => window.__messageListFixture?.growTailLayout(1_000)) + await settle(page, 150) + const afterEquivalentSyncLayout = await metrics(page) + assert.ok( + Math.abs(afterEquivalentSyncLayout.bottomGap) <= 2, + `equivalent full sync must not end initial-bottom late-layout following; gap=${afterEquivalentSyncLayout.bottomGap}`, + ) + await gotoFixture(page, baseUrl, 'initial-bottom') + await page.evaluate(() => window.__messageListFixture?.appendMessages(6)) + await page.waitForSelector('text=fixture-marker-0230') + await settle(page) + const afterAppend = await metrics(page) + assert.ok(afterAppend.bottomGap > 100, 'initial-bottom policy must not follow later appends') + + // initial-bottom remains a browsing policy after its first layout. The + // return affordance must exist even before new data, and reaching the tail + // through explicit keyboard input must mark the latest durable row once. + await gotoFixture(page, baseUrl, 'initial-bottom') + const list = page.locator('.msg-list') + await list.hover() + await page.mouse.wheel(0, -1_100) + await settle(page) + const latestButton = page.locator('.msg-list-latest-btn') + await latestButton.waitFor({ state: 'visible' }) + assert.equal((await latestButton.textContent())?.trim(), 'Back to latest', 'browsing needs a return control before new messages arrive') + await resetTelemetry(page) + await appendMessages(page, 1) + assert.equal((await telemetry(page)).markReadCalls, 0, 'detached initial-bottom append must remain unread') + assert.match((await latestButton.textContent()) ?? '', /1 new/, 'a durable tail append must increment the detached counter') + await list.focus() + await page.keyboard.press('End') + await settle(page, 120) + assert.ok(Math.abs((await metrics(page)).bottomGap) <= 2, 'End must reach the strict bottom under initial-bottom policy') + assert.equal((await telemetry(page)).markReadCalls, 1, 'user reaching strict bottom must mark the latest row exactly once') + await page.waitForFunction(() => !document.querySelector('.msg-list-latest-btn')) + + // Old history is earlier than the detach boundary and must never be counted + // as a new tail delivery, including after the local 200-row window expands. + await gotoFixture(page, baseUrl, 'initial-bottom') + await list.hover() + await page.mouse.wheel(0, -1_100) + await settle(page) + await clickHistoryWithoutScrolling(page) + await settle(page, 100) + await clickHistoryWithoutScrolling(page) + await page.waitForSelector('text=history-marker-00-039') + await settle(page, 120) + assert.equal( + (await page.locator('.msg-list-latest-btn').textContent())?.trim(), + 'Back to latest', + 'prepended history must not increment the detached new-message counter', + ) + + await gotoFixture(page, baseUrl, 'initial-bottom', 'empty=1') + assert.equal(await page.locator('.msg-timeline-row').count(), 0, 'empty-summary fixture must begin without a visible timeline row') + await page.getByRole('button', { name: 'Load older messages' }).click() + await page.waitForSelector('text=history-marker-00-039') + assert.ok(await page.locator('.msg-timeline-row').count() > 0, 'an empty filtered summary must still continue history pagination') +} + +async function main(): Promise { + let server: ViteDevServer | undefined + let browser: Browser | undefined + const pageErrors: string[] = [] + const consoleErrors: string[] = [] + + try { + server = await createServer({ + root: FRONTEND_ROOT, + logLevel: 'error', + server: { host: '127.0.0.1', port: 0, strictPort: false }, + }) + await server.listen() + const address = server.httpServer?.address() + if (!address || typeof address === 'string') throw new Error('Vite did not expose a TCP port') + const baseUrl = `http://127.0.0.1:${address.port}/` + + browser = await chromium.launch({ ignoreDefaultArgs: ['--hide-scrollbars'] }) + const page = await browser.newPage({ viewport: { width: 1280, height: 800 } }) + page.on('pageerror', (error) => pageErrors.push(error.message)) + page.on('console', (message) => { + if (message.type() === 'error') consoleErrors.push(message.text()) + }) + + await runFollowAndBrowsingCases(page, baseUrl) + await runInputIntentCases(page, baseUrl) + await runTouchIntentCase(browser, baseUrl) + await runTimelineIdentityCases(page, baseUrl) + await runProgressCapIdentityCase(page, baseUrl) + await runExternalProgressGeometryCase(page, baseUrl) + await runHiddenPendingCase(page, baseUrl) + await runCheckpointCase(page, baseUrl) + await runPolicyCases(page, baseUrl) + + assert.deepEqual(pageErrors, [], `browser page errors:\n${pageErrors.join('\n')}`) + assert.deepEqual(consoleErrors, [], `browser console errors:\n${consoleErrors.join('\n')}`) + console.log('message-list-scroll.spec.ts: OK (scroll writes, follow, browsing geometry/history, stable keys, checkpoints, policies)') + } finally { + await browser?.close() + await server?.close() + } +} + +await main() diff --git a/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.tsx b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.tsx new file mode 100644 index 0000000..a17be89 --- /dev/null +++ b/opc/plugins/office_ui/frontend_src/tests/message-list-scroll.tsx @@ -0,0 +1,534 @@ +import React, { useCallback, useMemo, useRef, useState } from 'react' +import { createRoot } from 'react-dom/client' + +import '../index.css' +import { MessageList } from '../chat/MessageList' +import { WorkItemProgressCard } from '../chat/WorkItemProgressCard' +import { __chatStoreTestUtils } from '../chat/ChatStore' +import { mergeConversationMessages } from '../lib/workItemSessions' +import type { ChatMessage } from '../types/chat' +import type { ProgressEntry, RoleWorkItemSummary } from '../types/kanban' + +type ScrollPolicy = 'follow' | 'initial-bottom' | 'manual' + +interface FixtureTelemetry { + markReadCalls: number + renders: number + scrollEvents: number + scrollTopWrites: number +} + +interface MessageListFixtureApi { + appendMessages(count: number): void + appendProgressEntries(count: number): void + addSharedTurnCompanyRows(indices?: number[]): void + finalizeDraft(): void + growDraft(characters: number): void + growMessage(index: number, characters: number): void + growTailLayout(pixels: number): void + mergeResultGroupOrder(index: number, parentFirst: boolean): void + repeatFullSync(): void + resolveCheckpoint(): void + resetTelemetry(): void + setExternalRoleCount(count: number): void + telemetry(): FixtureTelemetry + upgradeResultSurface(index: number): void +} + +declare global { + interface Window { + __messageListFixture?: MessageListFixtureApi + __messageListFixtureReady?: boolean + __rememberedCheckpointRow?: Element | null + __rememberedDraftTimelineRow?: Element | null + } +} + +const CHANNEL_ID = 'session:scroll-regression' +const BASE_TIMESTAMP = Date.UTC(2026, 6, 13, 8, 0, 0) +const INITIAL_MESSAGE_COUNT = 225 +const CHECKPOINT_INDEX = 110 +const CHECKPOINT_ID = 'fixture-checkpoint-110' +const CHECKPOINT_INDICES = new Set([0, 50, 70, 90, CHECKPOINT_INDEX, 130, 150, 170, 190]) +const SHARED_COMPANY_TURN_ID = 'fixture-shared-company-turn' +const LIVE_TURN_ID = 'fixture-live-turn' +const INITIAL_PROGRESS_COUNT = 100 + +// Count direct JS writes, including no-op writes which do not dispatch a +// scroll event. This catches the historical idle scrollToEnd feedback loop. +const scrollTopProbe = { writes: 0 } +const scrollTopDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, 'scrollTop') +if (scrollTopDescriptor?.get && scrollTopDescriptor.set && scrollTopDescriptor.configurable) { + Object.defineProperty(Element.prototype, 'scrollTop', { + ...scrollTopDescriptor, + set(value: number) { + if ((this as Element).classList?.contains('msg-list')) scrollTopProbe.writes += 1 + scrollTopDescriptor.set!.call(this, value) + }, + }) +} + +function messageContent(index: number): string { + const detail = index % 37 === 0 + ? `\n\n${'Long-form company result with citations, caveats, and acceptance evidence. '.repeat(85)}` + : index % 9 === 0 + ? '\n\nThis deliberately longer paragraph exercises dynamic Markdown height without relying on a simplified test-only row. '.repeat(3) + : '\n\nA stable production transcript row.' + return `fixture-marker-${String(index).padStart(4, '0')} ${detail}` +} + +function buildMessage(index: number): ChatMessage { + if (CHECKPOINT_INDICES.has(index)) { + const checkpointId = `fixture-checkpoint-${index}` + return { + id: `fixture-message-${index}`, + channelId: CHANNEL_ID, + sender: 'system', + senderName: 'OPC', + content: 'Checkpoint fixture payload', + timestamp: BASE_TIMESTAMP + index * 1_000, + mentions: [], + metadata: { + checkpoint_type: 'human_escalation', + checkpoint_id: checkpointId, + escalation_id: checkpointId, + escalation_type: 'decision_needed', + prompt: `Approval checkpoint ${index}\nKeep this card at its chronological position.`, + summary: 'Chronological checkpoint regression fixture', + options: [ + { id: 'approve', label: 'Approve' }, + { id: 'deny', label: 'Deny' }, + ], + }, + } + } + + const isUser = index % 5 === 0 + return { + id: `fixture-message-${index}`, + channelId: CHANNEL_ID, + sender: isUser ? 'user' : `fixture-agent-${index % 4}`, + senderName: isUser ? 'You' : `Fixture Agent ${index % 4}`, + content: messageContent(index), + timestamp: BASE_TIMESTAMP + index * 1_000, + mentions: [], + metadata: isUser + ? { ui_message_id: `fixture-ui-${index}` } + : { + source: 'engine', + canonical_turn_id: `fixture-turn-${index}`, + transcript_kind: 'runtime_v2_assistant', + }, + } +} + +function buildInitialMessages(): ChatMessage[] { + return Array.from({ length: INITIAL_MESSAGE_COUNT }, (_, index) => buildMessage(index)) +} + +function buildHistoryMessage(batch: number, offset: number): ChatMessage { + return { + id: `history-message-${batch}-${offset}`, + channelId: CHANNEL_ID, + sender: `history-agent-${offset % 3}`, + senderName: `History Agent ${offset % 3}`, + content: `history-marker-${String(batch).padStart(2, '0')}-${String(offset).padStart(3, '0')}\n\nA prepended historical row.`, + timestamp: BASE_TIMESTAMP - ((batch + 1) * 100_000) + offset * 1_000, + mentions: [], + metadata: { canonical_turn_id: `history-turn-${batch}-${offset}` }, + } +} + +function buildSharedTurnCompanyMessage(index: number, transcriptKind: string): ChatMessage { + return { + id: `shared-company-message-${index}`, + channelId: CHANNEL_ID, + sender: `company-role-${index}`, + senderName: `Company Role ${index}`, + content: `shared-company-row-${index} — independent committed company surface`, + timestamp: BASE_TIMESTAMP + 2_000_000 + index, + mentions: [], + metadata: { + canonical_turn_id: SHARED_COMPANY_TURN_ID, + transcript_kind: transcriptKind, + }, + } +} + +function buildProgressEntry(index: number): ProgressEntry { + return { + type: 'status_change', + summary: `progress-marker-${String(index).padStart(4, '0')}`, + detail: `Stable no-id status event ${index}`, + timestamp: BASE_TIMESTAMP + 4_000_000 + index * 1_000, + } +} + +function buildRoleWorkItems(count: number): Record { + return Object.fromEntries(Array.from({ length: count }, (_, index) => { + const roleId = `fixture-role-${index}` + return [roleId, { + roleKey: roleId, + roleId, + roleName: `Fixture Role ${index}`, + runtimeStatus: index % 3 === 0 ? 'reflecting' : 'idle', + aggregatedStatus: index % 3 === 0 ? 'active' : 'pending', + workItems: [{ + workItemId: `fixture-work-item-${index}`, + workItemProjectionId: `fixture-projection-${index}`, + phase: index % 3 === 0 ? 'running' : 'queued', + kanbanColumn: index % 3 === 0 ? 'in_progress' : 'todo', + title: `Fixture Work Item ${index}`, + executorRoleId: roleId, + executorRoleName: `Fixture Role ${index}`, + createdAt: BASE_TIMESTAMP + index, + updatedAt: BASE_TIMESTAMP + index, + executionTurnId: `fixture-role-turn-${index}`, + progressLog: [], + }], + } satisfies RoleWorkItemSummary] + })) +} + +function Fixture() { + const query = useMemo(() => new URLSearchParams(window.location.search), []) + const policy = (query.get('policy') || 'follow') as ScrollPolicy + const progressFixture = query.get('progress') === '1' + const externalProgressFixture = query.get('externalProgress') === '1' + const emptySummaryFixture = query.get('empty') === '1' + const [messages, setMessages] = useState(() => { + const initial = buildInitialMessages() + if (!emptySummaryFixture) return initial + return initial.map(message => ({ + ...message, + metadata: { ...(message.metadata ?? {}), detail_visibility: 'full' }, + })) + }) + const [progressLog, setProgressLog] = useState(() => ( + progressFixture + ? Array.from({ length: INITIAL_PROGRESS_COUNT }, (_, index) => buildProgressEntry(index)) + : [] + )) + const [externalRoleWorkItems, setExternalRoleWorkItems] = useState>({}) + const [draftText, setDraftText] = useState('') + const draftTextRef = useRef(draftText) + draftTextRef.current = draftText + const historyBatchRef = useRef(0) + // This state deliberately changes from markRead. The former implementation + // accidentally made that state update part of a scroll-to-bottom feedback + // loop; a correct MessageList must not care that this callback is recreated. + const [, setReadVersion] = useState(0) + const telemetryRef = useRef({ markReadCalls: 0, renders: 0, scrollEvents: 0, scrollTopWrites: 0 }) + telemetryRef.current.renders += 1 + + const appendMessages = useCallback((count: number) => { + setMessages((current) => { + const start = current.reduce((max, message) => { + const match = /^fixture-message-(\d+)$/.exec(message.id) + return match ? Math.max(max, Number(match[1]) + 1) : max + }, INITIAL_MESSAGE_COUNT) + return [ + ...current, + ...Array.from({ length: count }, (_, offset) => buildMessage(start + offset)), + ] + }) + }, []) + + const appendProgressEntries = useCallback((count: number) => { + setProgressLog((current) => { + const start = current.reduce((max, entry) => { + const match = /^progress-marker-(\d+)$/.exec(entry.summary) + return match ? Math.max(max, Number(match[1]) + 1) : max + }, INITIAL_PROGRESS_COUNT) + return [ + ...current, + ...Array.from({ length: count }, (_, offset) => buildProgressEntry(start + offset)), + ].slice(-INITIAL_PROGRESS_COUNT) + }) + }, []) + + const growDraft = useCallback((characters: number) => { + setDraftText((current) => `${current}${' live-reply-content'.repeat(Math.max(1, Math.ceil(characters / 19)))}`) + }, []) + + const growMessage = useCallback((index: number, characters: number) => { + setMessages((current) => current.map((message) => message.id === `fixture-message-${index}` + ? { + ...message, + content: `${message.content}\n\n${'Expanded content above the viewport anchor. '.repeat(Math.max(1, Math.ceil(characters / 44)))}`, + } + : message)) + }, []) + + const repeatFullSync = useCallback(() => { + setMessages((current) => current.map((message) => ({ + ...message, + metadata: message.metadata ? { ...message.metadata } : undefined, + }))) + }, []) + + const growTailLayout = useCallback((pixels: number) => { + const tail = Array.from(document.querySelectorAll('.msg-timeline-row')).at(-1) + if (!tail) throw new Error('tail timeline row is missing') + let spacer = tail.querySelector('[data-late-layout-spacer]') + if (!spacer) { + spacer = document.createElement('div') + spacer.dataset.lateLayoutSpacer = 'true' + tail.appendChild(spacer) + } + spacer.style.height = `${pixels}px` + }, []) + + const upgradeResultSurface = useCallback((index: number) => { + setMessages((current) => { + const existing = current.find(message => message.id === `fixture-message-${index}`) + if (!existing || existing.sender === 'user') return current + return __chatStoreTestUtils.dedupeMessages([ + ...current, + { + ...existing, + id: `fixture-upgraded-result-${index}`, + sender: 'fixture-company-role', + senderName: 'Fixture Company Role', + metadata: { + ...existing.metadata, + source: 'engine', + canonical_turn_id: `fixture-upgraded-turn-${index}`, + transcript_kind: 'child_task_result', + detail_visibility: 'summary', + }, + }, + ]) + }) + }, []) + + const mergeResultGroupOrder = useCallback((index: number, parentFirst: boolean) => { + const native = buildMessage(index) + if (native.sender === 'user') throw new Error('result group fixture needs an assistant row') + const authoritative: ChatMessage = { + ...native, + id: `fixture-cross-channel-result-${index}`, + channelId: 'session:scroll-regression-child', + sender: 'fixture-company-role', + senderName: 'Fixture Company Role', + timestamp: native.timestamp + 10, + metadata: { + ...native.metadata, + canonical_turn_id: `fixture-authoritative-turn-${index}`, + transcript_kind: 'child_task_result', + }, + } + const selected = mergeConversationMessages(parentFirst + ? [[authoritative], [native]] + : [[native], [authoritative]]) + setMessages((current) => [ + ...current.filter(message => ( + message.id !== native.id + && message.id !== authoritative.id + )), + ...selected, + ]) + }, []) + + const addSharedTurnCompanyRows = useCallback((indices = [0, 1, 2, 3, 4]) => { + const transcriptKinds = [ + 'company_role_result', + 'child_result', + 'runtime_v2_intermediate_assistant', + 'runtime_v2_assistant', + 'runtime_v2_assistant', + ] + setMessages((current) => { + const existingIds = new Set(current.map(message => message.id)) + return [ + ...current, + ...indices + .filter(index => !existingIds.has(`shared-company-message-${index}`)) + .map(index => buildSharedTurnCompanyMessage(index, transcriptKinds[index] ?? 'runtime_v2_assistant')), + ] + }) + }, []) + + const finalizeDraft = useCallback(() => { + const committedContent = draftTextRef.current.trim() || 'fixture-live-final-content — committed assistant response' + setDraftText('') + setMessages((current) => current.some((message) => message.id === 'fixture-live-final') + ? current + : [ + ...current, + { + id: 'fixture-live-final', + channelId: CHANNEL_ID, + sender: 'fixture-agent-final', + senderName: 'Fixture Final Agent', + content: committedContent, + timestamp: BASE_TIMESTAMP + 3_000_000, + mentions: [], + metadata: { + canonical_turn_id: LIVE_TURN_ID, + transcript_kind: 'runtime_v2_assistant', + }, + }, + ]) + }, []) + + const loadOlderHistory = useCallback(() => { + const batch = historyBatchRef.current + historyBatchRef.current += 1 + setMessages((current) => [ + ...Array.from({ length: 40 }, (_, offset) => buildHistoryMessage(batch, offset)), + ...current, + ]) + }, []) + + const resolveCheckpoint = useCallback(() => { + setMessages((current) => { + if (current.some((message) => message.id === 'fixture-checkpoint-response')) return current + return [ + ...current, + { + id: 'fixture-checkpoint-response', + channelId: CHANNEL_ID, + sender: 'user', + senderName: 'You', + content: 'Approved fixture checkpoint', + timestamp: BASE_TIMESTAMP + 1_000_000, + mentions: [], + metadata: { + ui_message_id: 'fixture-checkpoint-response-ui', + response_to_checkpoint_id: CHECKPOINT_ID, + response_to_checkpoint_type: 'human_escalation', + checkpoint_reply_kind: 'approve', + }, + }, + ] + }) + }, []) + + const resetTelemetry = useCallback(() => { + telemetryRef.current.markReadCalls = 0 + telemetryRef.current.renders = 0 + telemetryRef.current.scrollEvents = 0 + scrollTopProbe.writes = 0 + }, []) + + window.__messageListFixture = { + appendMessages, + appendProgressEntries, + addSharedTurnCompanyRows, + finalizeDraft, + growDraft, + growMessage, + growTailLayout, + mergeResultGroupOrder, + repeatFullSync, + resolveCheckpoint, + resetTelemetry, + setExternalRoleCount: (count: number) => setExternalRoleWorkItems(buildRoleWorkItems(count)), + telemetry: () => ({ ...telemetryRef.current, scrollTopWrites: scrollTopProbe.writes }), + upgradeResultSurface, + } + + const handleMarkRead = () => { + telemetryRef.current.markReadCalls += 1 + setReadVersion((value) => value + 1) + } + + // Use an intersection type so the fixture can be committed alongside the + // implementation change: the old component ignores scrollPolicy and fails + // these checks; the new public contract consumes it. + const ProductionMessageList = MessageList as React.ComponentType< + React.ComponentProps & { scrollPolicy: ScrollPolicy } + > + + React.useEffect(() => { + window.__messageListFixtureReady = true + return () => { + window.__messageListFixtureReady = false + delete window.__messageListFixture + } + }, []) + + React.useEffect(() => { + const list = document.querySelector('.msg-list') + const countScroll = () => { + telemetryRef.current.scrollEvents += 1 + } + list?.addEventListener('scroll', countScroll, { passive: true }) + return () => list?.removeEventListener('scroll', countScroll) + }, []) + + return ( +
+
+ Production MessageList fixture — {policy} +
+
+ {externalProgressFixture && ( +
+ +
+ )} + undefined} + onMarkRead={handleMarkRead} + hasOlderHistory + totalMessageCount={messages.length + 100} + onLoadOlderHistory={loadOlderHistory} + progressLog={progressLog} + showWorkItemRuntimeCard={false} + showRuntimeProgress={progressFixture} + /> +
+
+ ) +} + +const style = document.createElement('style') +style.textContent = ` + .message-list-scroll-fixture { + display: flex; + flex-direction: column; + width: 620px; + height: 720px; + max-height: 92vh; + margin: 4vh auto; + border: 1px solid var(--border); + border-radius: 12px; + } + .message-list-scroll-fixture-header { + flex: 0 0 44px; + display: flex; + align-items: center; + padding: 0 16px; + border-bottom: 1px solid var(--border); + background: var(--bg-elevated); + color: var(--text-secondary); + font-size: 12px; + } + .message-list-scroll-fixture-body { + flex: 1 1 0; + min-height: 0; + display: flex; + flex-direction: column; + overflow: hidden; + } +` +document.head.appendChild(style) + +const root = document.getElementById('root') +if (!root) throw new Error('MessageList fixture root is missing') +createRoot(root).render() diff --git a/opc/plugins/office_ui/frontend_src/types/chat.ts b/opc/plugins/office_ui/frontend_src/types/chat.ts index e4dee7b..b1dcd7f 100644 --- a/opc/plugins/office_ui/frontend_src/types/chat.ts +++ b/opc/plugins/office_ui/frontend_src/types/chat.ts @@ -338,6 +338,8 @@ export interface ChatMessageMeta { kind?: string ui_message_id?: string ui_created_at?: number + /** UI-only identity retained across semantic result-surface replacement. */ + ui_timeline_id?: string canonical_turn_id?: string turn_id?: string execution_mode?: string diff --git a/opc/plugins/office_ui/frontend_src/types/kanban.ts b/opc/plugins/office_ui/frontend_src/types/kanban.ts index 272c1bf..3d1381c 100644 --- a/opc/plugins/office_ui/frontend_src/types/kanban.ts +++ b/opc/plugins/office_ui/frontend_src/types/kanban.ts @@ -298,6 +298,10 @@ export interface Session { detailLoaded?: boolean fullLoaded?: boolean hasMore?: boolean + /** Pagination state for the committed company/task transcript. */ + summaryHasMore?: boolean + /** Pagination state for the full child/runtime transcript. */ + fullHasMore?: boolean detailLoading?: boolean detailError?: string viewGeneration?: number diff --git a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.test.ts b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.test.ts index 3c2709e..0ef777e 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.test.ts +++ b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.test.ts @@ -1,6 +1,10 @@ import assert from 'node:assert/strict' import type { Session } from '../types/kanban' -import { composerExecModeForSession } from './ContextPanel' +import { + composerExecModeForSession, + conversationHasOlderHistory, + sessionHasMoreForDetail, +} from './ContextPanel' function makeSession(overrides: Partial = {}): Session { return { @@ -49,4 +53,44 @@ assert.equal( 'org', ) +const independentlyPaged = makeSession({ + hasMore: false, + summaryHasMore: false, + fullHasMore: true, + messageCount: 400, +}) +assert.equal(sessionHasMoreForDetail(independentlyPaged, 'summary'), false) +assert.equal(sessionHasMoreForDetail(independentlyPaged, 'full'), true) +assert.equal( + conversationHasOlderHistory([independentlyPaged], 200, 'summary'), + false, + 'a full-detail ACK must not reopen summary history', +) +assert.equal( + conversationHasOlderHistory([independentlyPaged], 200, 'full'), + true, + 'full history must retain its own cursor state', +) +assert.equal( + conversationHasOlderHistory([independentlyPaged], 200, 'full', false), + true, + 'a known scoped cursor remains loadable while a company turn is running', +) + +const summaryOnlyState = makeSession({ + hasMore: false, + summaryHasMore: true, + messageCount: 400, +}) +assert.equal( + sessionHasMoreForDetail(summaryOnlyState, 'full'), + undefined, + 'generic hasMore is no longer authoritative after a scoped policy is known', +) +assert.equal( + conversationHasOlderHistory([makeSession({ messageCount: 400 })], 200, 'summary', false), + false, + 'only the racy message-count fallback is suppressed during active generation', +) + console.log('ContextPanel composer identity checks passed') diff --git a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx index 44a058d..fc7e2a5 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx +++ b/opc/plugins/office_ui/frontend_src/workspace/ContextPanel.tsx @@ -193,6 +193,45 @@ function hasCompanyRuntimeIdentity(session: Session): boolean { ) } +function isCompanyRuntimeSession( + session: Session | null | undefined, + relatedSessionCount = 0, +): boolean { + if (!session) return false + const mode = String(session.execMode ?? '').trim().toLowerCase() + return relatedSessionCount > 0 + || hasCompanyRuntimeIdentity(session) + || mode === 'company' + || mode === 'org' + || mode === 'custom' +} + +export function sessionHasMoreForDetail( + session: Session, + detailLevel: 'summary' | 'full', +): boolean | undefined { + const scoped = detailLevel === 'full' ? session.fullHasMore : session.summaryHasMore + if (scoped !== undefined) return scoped + // Old snapshots only expose the unscoped value. Once either scoped cursor + // has been observed, the generic field may describe the other policy. + if (session.summaryHasMore === undefined && session.fullHasMore === undefined) { + return session.hasMore + } + return undefined +} + +export function conversationHasOlderHistory( + sessions: Session[], + displayedMessageCount: number, + detailLevel: 'summary' | 'full', + allowMessageCountFallback = true, +): boolean { + const pagination = sessions.map(session => sessionHasMoreForDetail(session, detailLevel)) + if (pagination.some(hasMore => hasMore === true)) return true + if (sessions.length !== 1 || pagination[0] === false) return false + return allowMessageCountFallback && sessions[0].messageCount > displayedMessageCount +} + function hasCustomRuntimeIdentity(session: Session): boolean { const rawMode = String(session.execMode ?? '').trim().toLowerCase() const normalizedMode = normalizePanelExecMode(session.execMode) @@ -498,7 +537,7 @@ export function ContextPanel({ const isChildDetail = activeView.kind === 'child-detail' const isTaskDetail = activeView.kind === 'task-detail' - const isCompanyRuntime = !!(activeSession && (activeSession.isCompanyRuntime || childSessions.length > 0)) + const isCompanyRuntime = isCompanyRuntimeSession(activeSession, childSessions.length) const showTabs = activeView.kind === 'session' && activeSession const canSend = isSecretary ? true : !!activeSession const showSessionStrip = !isChildDetail && openSessions.length > 0 @@ -553,10 +592,14 @@ export function ContextPanel({ const matched = activeConversation.timelineSessions.find( (session) => session.channelId === oldestMessage.channelId, ) - if (matched) return matched + if (matched && sessionHasMoreForDetail(matched, activeDetailMode) !== false) return matched } + const knownTarget = activeConversation.timelineSessions.find( + session => sessionHasMoreForDetail(session, activeDetailMode) === true, + ) + if (knownTarget) return knownTarget return activeDisplaySession ?? activeSession - }, [activeConversation.timelineSessions, activeDisplaySession, activeSession]) + }, [activeConversation.timelineSessions, activeDetailMode, activeDisplaySession, activeSession]) // Child detail: find the agent for this session const childDetailAgent = useMemo(() => { @@ -706,24 +749,20 @@ export function ContextPanel({ draftTurnId={childDetailSession.draftTurnId} onMarkRead={onMarkRead} hasOlderHistory={ - // The `messageCount > loaded.length` race flashes the - // "Load older messages" hint every ~1s while the agent - // streams: backend bumps count, new message arrives - // at chatStore 1 tick later, hint appears then hides. - // The insertion/removal of the hint row also triggers - // auto-scroll, which pushes the user's own input off - // the top of the viewport. Suppress the hint while the - // session is actively working — any transient delta - // during active turns is almost always in-flight new - // messages, not an older-history gap. - !isSessionWorking(childDetailSession) - && childDetailSession.messageCount > childDetailMessages.length + // A scoped backend cursor remains actionable during live + // work. Only the racy messageCount fallback is suppressed. + conversationHasOlderHistory( + [childDetailSession], + childDetailMessages.length, + 'full', + !isSessionWorking(childDetailSession), + ) } totalMessageCount={childDetailSession.messageCount} onLoadOlderHistory={(oldestMessage) => onLoadSessionHistory?.(childDetailSession.taskId, oldestMessage, 'full')} loadingOlderHistory={isSessionHistoryLoading?.(childDetailSession.taskId) ?? false} - autoScroll={false} - initialScrollToBottom + scrollPolicy="initial-bottom" + scrollScope={childDetailSession.channelId} showRuntimeProgress renderUserMarkdown /> @@ -911,7 +950,7 @@ export function ContextPanel({ .map(id => agents.find(agent => agent.agent_id === id)?.name ?? id) .filter(Boolean) const runtimeLabel = sessionRuntimeLabel(sessionConversationSession ?? session, activeChildCount) - const sessionIsCompanyRuntime = !!(session.isCompanyRuntime || sessionChildren.length > 0) + const sessionIsCompanyRuntime = isCompanyRuntimeSession(session, sessionChildren.length) const sessionDisplaySession = sessionConversation.displaySession ?? session const sessionProgressLog = mergeConversationProgressLog(sessionConversation.timelineSessions) const sessionMessageCount = getConversationMessageCount(sessionConversation.timelineSessions) @@ -970,37 +1009,52 @@ export function ContextPanel({ channelName={sessionDisplaySession?.title ?? session.title} viewKind="session" detailMode={sessionDetailLevel(sessionDisplaySession)} - agentStatus={sessionConversationSession?.agentStatus ?? sessionDisplaySession?.agentStatus} - currentTool={sessionConversationSession?.currentTool ?? sessionDisplaySession?.currentTool} - toolElapsedMs={sessionConversationSession?.toolElapsedMs ?? sessionDisplaySession?.toolElapsedMs} - lastToolSummary={sessionConversationSession?.lastToolSummary ?? sessionDisplaySession?.lastToolSummary} - progressLog={sessionProgressLog} - draftAssistantText={sessionConversationSession?.draftAssistantText ?? sessionDisplaySession?.draftAssistantText} - draftUpdatedAt={sessionConversationSession?.draftUpdatedAt ?? sessionDisplaySession?.draftUpdatedAt} - draftIteration={sessionConversationSession?.draftIteration ?? sessionDisplaySession?.draftIteration} - draftTurnId={sessionConversationSession?.draftTurnId ?? sessionDisplaySession?.draftTurnId} - isCompanyRuntime={sessionConversationSession?.isCompanyRuntime ?? sessionIsCompanyRuntime} + agentStatus={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.agentStatus ?? sessionDisplaySession?.agentStatus)} + currentTool={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.currentTool ?? sessionDisplaySession?.currentTool)} + toolElapsedMs={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.toolElapsedMs ?? sessionDisplaySession?.toolElapsedMs)} + lastToolSummary={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.lastToolSummary ?? sessionDisplaySession?.lastToolSummary)} + progressLog={sessionIsCompanyRuntime ? undefined : sessionProgressLog} + draftAssistantText={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.draftAssistantText ?? sessionDisplaySession?.draftAssistantText)} + draftUpdatedAt={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.draftUpdatedAt ?? sessionDisplaySession?.draftUpdatedAt)} + draftIteration={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.draftIteration ?? sessionDisplaySession?.draftIteration)} + draftTurnId={sessionIsCompanyRuntime ? undefined : (sessionConversationSession?.draftTurnId ?? sessionDisplaySession?.draftTurnId)} + isCompanyRuntime={sessionIsCompanyRuntime} workItemLog={sessionConversationSession?.workItemLog ?? session.workItemLog} childSessions={sessionWorkItemRoleSessions} + showWorkItemRuntimeCard={!sessionIsCompanyRuntime} onSend={(content, _taskId, metadata) => onSessionSend?.(session.taskId, content, undefined, metadata)} onWorkItemClick={onWorkItemClick} onWorkItemOpenSession={onWorkItemOpenSession} onMarkRead={() => onSessionMarkRead?.(session.taskId)} + scrollScope={session.channelId} hasOlderHistory={ - // Suppress during active work — see note - // on the childDetailSession case above. - !sessionConversation.timelineSessions.some(isSessionWorking) - && sessionMessageCount > sessionMessages.length + // Keep known cursors available during live work; + // suppress only the count-based fallback. + conversationHasOlderHistory( + sessionConversation.timelineSessions, + sessionMessages.length, + sessionDetailLevel(sessionDisplaySession ?? session), + !sessionConversation.timelineSessions.some(isSessionWorking), + ) } totalMessageCount={sessionMessageCount} onLoadOlderHistory={(oldestMessage) => { - const targetSession = sessionConversation.timelineSessions.find( + const detailLevel = sessionDetailLevel(sessionDisplaySession ?? session) + const matchedSession = sessionConversation.timelineSessions.find( (timelineSession) => timelineSession.channelId === oldestMessage?.channelId, + ) + const targetSession = ( + matchedSession + && sessionHasMoreForDetail(matchedSession, detailLevel) !== false + ? matchedSession + : undefined + ) ?? sessionConversation.timelineSessions.find( + timelineSession => sessionHasMoreForDetail(timelineSession, detailLevel) === true, ) ?? sessionDisplaySession ?? session return onLoadSessionHistory?.( targetSession.taskId, oldestMessage, - sessionDetailLevel(targetSession, { childDetail: targetSession.mode === 'child' }), + detailLevel, ) }} loadingOlderHistory={sessionHistoryLoading} @@ -1062,6 +1116,7 @@ export function ContextPanel({ detailMode="summary" onSend={onMessageSend} onMarkRead={onMarkRead} + scrollScope={channelId} /> )} @@ -1077,6 +1132,7 @@ export function ContextPanel({ detailMode="summary" onSend={onMessageSend} onMarkRead={onMarkRead} + scrollScope={secretaryChannelId} /> - {isCompanyRuntime && (hasRoleWorkItems || activeWorkItemLog.length > 0 || activeWorkItemRoleSessions.length > 0) && ( + {isCompanyRuntime && (
messages.length + // Keep known cursors available during live work; + // suppress only the count-based fallback. + conversationHasOlderHistory( + activeConversation.timelineSessions, + messages.length, + activeDetailMode, + !activeConversation.timelineSessions.some(isSessionWorking), + ) } totalMessageCount={activeConversationMessageCount} onLoadOlderHistory={(oldestMessage) => { @@ -1148,7 +1209,7 @@ export function ContextPanel({ return onLoadSessionHistory?.( targetSession.taskId, oldestMessage, - sessionDetailLevel(targetSession, { childDetail: targetSession.mode === 'child' }), + activeDetailMode, ) }} loadingOlderHistory={activeConversationLoading} diff --git a/opc/plugins/office_ui/frontend_src/workspace/TaskDetailView.tsx b/opc/plugins/office_ui/frontend_src/workspace/TaskDetailView.tsx index 52a349e..d496111 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/TaskDetailView.tsx +++ b/opc/plugins/office_ui/frontend_src/workspace/TaskDetailView.tsx @@ -297,9 +297,11 @@ export function TaskDetailView({ {linkedSession && linkedSessionMessages && linkedSessionMessages.length > 0 ? (
) : linkedSession ? ( diff --git a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.test.ts b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.test.ts index 1b24f00..314ca58 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.test.ts +++ b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.test.ts @@ -10,10 +10,74 @@ assert.match(src, /makeOptimisticUserMessageId/, 'ordinary composer sends must c assert.match(src, /chatStore\.sendMessage/, 'ordinary composer sends must echo the user message locally before backend response') assert.match(src, /ui_message_id: uiMessageId/, 'optimistic local message and websocket metadata must share ui_message_id') assert.match(src, /checkpointReplyId/, 'checkpoint replies must be excluded from ordinary optimistic composer echo') +assert.match(src, /const \{ markRead \} = chatStore/, 'workspace must consume the stable markRead action directly') +assert.doesNotMatch(src, /chatStore\.markRead/, 'workspace mark-read callbacks must not depend on the aggregate chatStore object') +assert.equal( + [...src.matchAll(/\bmarkRead\(/g)].length, + 2, + 'markRead must only be invoked by the active viewport and per-session viewport callbacks', +) +assert.match( + src, + /const handleMarkRead = useCallback\(\(\) => \{\s*for \(const visibleChannelId of visibleChannelIds\) \{\s*markRead\(visibleChannelId\)\s*\}\s*\}, \[visibleChannelIds, markRead\]\)/, + 'the active transcript viewport must mark every channel represented by the visible company timeline', +) +assert.match( + src, + /const handleMarkSessionRead = useCallback\(\(taskId: string\) => \{[\s\S]*?if \(session\) markRead\(session\.channelId\)[\s\S]*?\}, \[sessions, markRead\]\)/, + 'each multi-session transcript viewport callback must own its channel markRead', +) +assert.match(src, /onMarkRead=\{handleMarkRead\}/, 'the active viewport must receive the markRead callback') +assert.match(src, /onSessionMarkRead=\{handleMarkSessionRead\}/, 'multi-session viewports must receive their scoped markRead callback') assert.match( src, /const outgoing = metadata\?\.ui_message_id\s*\?\s*metadata\s*:\s*\{ \.\.\.\(metadata \?\? \{\}\), ui_message_id: makeOptimisticUserMessageId\(\) \}/, 'every session send must carry a client-generated ui_message_id so the backend can deduplicate re-deliveries', ) -console.log('WorkspacePage.test.ts: OK (optimistic composer echo wiring)') +const requestHistoryStart = src.indexOf('const requestSessionHistory = useCallback') +const requestHistoryEnd = src.indexOf('const isSessionHistoryLoading = useCallback', requestHistoryStart) +assert.ok(requestHistoryStart >= 0 && requestHistoryEnd > requestHistoryStart, 'history request implementation must be present') +const requestHistorySrc = src.slice(requestHistoryStart, requestHistoryEnd) +assert.doesNotMatch( + requestHistorySrc, + /setTimeout/, + 'history single-flight completion must follow the transport Promise, not a fixed 800ms timer', +) +assert.match( + requestHistorySrc, + /Promise\.resolve\(request\)[\s\S]*?\.finally\(\(\) => \{[\s\S]*?historyRequestInFlightRef\.current\.delete\(requestKey\)/, + 'history single-flight state must be released only when the transport request settles', +) +assert.match( + requestHistorySrc, + /const generation = historyRequestGenerationRef\.current[\s\S]*?const requestKey = \[\s*generation,/, + 'history claims must be scoped to a project generation', +) +assert.match( + requestHistorySrc, + /historyRequestInFlightRef\.current\.delete\(requestKey\)\s*if \(historyRequestGenerationRef\.current !== generation\) return/, + 'an old project Promise must not clear loading state for a newer project generation', +) +assert.match( + requestHistorySrc, + /oldestMessage && targetChannelId && oldestMessage\.channelId !== targetChannelId[\s\S]*?getChannelMessagesRef\.current\(targetChannelId\)\.find\([\s\S]*?isMessageVisibleAtDetailLevel\(message, detailLevel\)/, + 'multi-channel history must use a selected target cursor visible to the requested detail policy', +) +assert.match( + src, + /if \(autoHistoryRequestRef\.current\.scope !== activeSessionId\) \{\s*autoHistoryRequestRef\.current\.scope = activeSessionId\s*autoHistoryRequestRef\.current\.active\.clear\(\)/, + 'switching the active transcript scope must clear prior auto-history claims', +) +assert.match( + src, + /const historyTargets = activeConversation\.timelineSessions\.length > 0\s*\? activeConversation\.timelineSessions/, + 'company history must enumerate the root and child timeline sessions', +) +assert.match( + src, + /const detailLevel = isCompanyConversation\(activeSession, childSessions\.length\)\s*\? 'summary'[\s\S]*?requestSessionHistory\(\s*session\.taskId,\s*undefined,\s*detailLevel/, + 'company root and child history requests must use summary detail independently', +) + +console.log('WorkspacePage.test.ts: OK (composer, mark-read, and history wiring)') diff --git a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx index f1517d5..7646108 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx +++ b/opc/plugins/office_ui/frontend_src/workspace/WorkspacePage.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +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' @@ -14,8 +14,10 @@ import { BoardSelector } from '../kanban/BoardSelector' import { getConversationPeerSessions, getWorkItemChildSessions, + isMessageVisibleAtDetailLevel, mergeConversationMessages, projectSessionConversation, + selectCompanySummaryMessages, } from '../lib/workItemSessions' import { getRuntimeOrgView } from '../lib/runtimeOrg' import { getLinkedRuntimeTaskId } from '../lib/workItemRuntimeIds' @@ -125,6 +127,18 @@ function sessionDetailLevel( return session.execMode === 'company' || session.execMode === 'org' || session.execMode === 'custom' ? 'summary' : 'full' } +function isCompanyConversation(session: Session | null | undefined, relatedSessionCount = 0): boolean { + if (!session) return false + const mode = String(session.execMode ?? '').trim().toLowerCase() + return relatedSessionCount > 0 + || !!session.isCompanyRuntime + || !!session.roleWorkItems + || !!session.executorRoleWorkItems + || mode === 'company' + || mode === 'org' + || mode === 'custom' +} + function sessionBoardId(session: Session | null | undefined): string | null { const boardId = String(session?.originTaskId ?? session?.taskId ?? '').trim() return boardId || null @@ -244,7 +258,7 @@ interface WorkspacePageProps { onLoadSessionDetail?: ( taskId: string, opts?: { beforeCreatedAt?: number; beforeMessageId?: string; limit?: number; detailLevel?: 'summary' | 'full'; include?: string[] }, - ) => void + ) => Promise | void onOpenExecutionPanel?: (taskId: string) => void onCollabSync?: () => void orgInfoData?: OrgInfoPayload | null @@ -304,6 +318,7 @@ export function WorkspacePage({ onSavedOrgLoad, }: WorkspacePageProps) { const { sessions, activeSessionId, activeSession } = sessionStore + const { markRead } = chatStore // ── Panel state ── const [panelState, setPanelState] = useState<'collapsed' | 'open' | 'maximized'>('collapsed') @@ -320,10 +335,18 @@ export function WorkspacePage({ const [multiSessionView, setMultiSessionView] = useState(false) const [sessionHistoryLoading, setSessionHistoryLoading] = useState>({}) const onLoadSessionDetailRef = useRef(onLoadSessionDetail) - const autoHistoryRequestRef = useRef<{ active: string | null; child: string | null }>({ - active: null, + const sessionsRef = useRef(sessions) + const getChannelMessagesRef = useRef(chatStore.getChannelMessages) + const autoHistoryRequestRef = useRef<{ scope: string | null; active: Set; child: string | null }>({ + scope: null, + active: new Set(), child: null, }) + const historyRequestInFlightRef = useRef>(new Set()) + const historyRequestGenerationRef = useRef(0) + + sessionsRef.current = sessions + getChannelMessagesRef.current = chatStore.getChannelMessages const isCompanyMode = execMode === 'company' || execMode === 'org' || execMode === 'custom' @@ -375,16 +398,58 @@ export function WorkspacePage({ ) => { const loadSessionDetail = onLoadSessionDetailRef.current if (!loadSessionDetail || !taskId) return - setSessionHistoryLoading(prev => prev[taskId] ? prev : { ...prev, [taskId]: true }) - loadSessionDetail(taskId, { - limit: SESSION_DETAIL_PAGE_SIZE, - beforeCreatedAt: oldestMessage?.timestamp, - beforeMessageId: oldestMessage?.id, + const generation = historyRequestGenerationRef.current + const targetSession = sessionsRef.current.find(session => session.taskId === taskId) + const targetChannelId = targetSession?.channelId + const cursorMessage = oldestMessage && targetChannelId && oldestMessage.channelId !== targetChannelId + ? getChannelMessagesRef.current(targetChannelId).find( + message => isMessageVisibleAtDetailLevel(message, detailLevel), + ) + : oldestMessage + const requestKey = [ + generation, + taskId, detailLevel, + cursorMessage?.timestamp ?? 'latest', + cursorMessage?.id ?? '', + ].join('|') + if (historyRequestInFlightRef.current.has(requestKey)) return + // Claim the cursor synchronously before invoking the transport. Loading + // state is asynchronous and cannot serve as a single-flight guard. + historyRequestInFlightRef.current.add(requestKey) + setSessionHistoryLoading(prev => prev[taskId] ? prev : { ...prev, [taskId]: true }) + let request: Promise | void + try { + request = loadSessionDetail(taskId, { + limit: SESSION_DETAIL_PAGE_SIZE, + beforeCreatedAt: cursorMessage?.timestamp, + beforeMessageId: cursorMessage?.id, + detailLevel, + }) + } catch (error) { + historyRequestInFlightRef.current.delete(requestKey) + if (historyRequestGenerationRef.current === generation) { + setSessionHistoryLoading(prev => prev[taskId] ? { ...prev, [taskId]: false } : prev) + autoHistoryRequestRef.current.active.delete(`${taskId}:${detailLevel}`) + if (autoHistoryRequestRef.current.child === taskId) autoHistoryRequestRef.current.child = null + } + return + } + return Promise.resolve(request).catch(() => { + if (historyRequestGenerationRef.current === generation) { + autoHistoryRequestRef.current.active.delete(`${taskId}:${detailLevel}`) + if (autoHistoryRequestRef.current.child === taskId) autoHistoryRequestRef.current.child = null + } + }).finally(() => { + historyRequestInFlightRef.current.delete(requestKey) + if (historyRequestGenerationRef.current !== generation) return + const taskPrefix = `${generation}|${taskId}|` + const taskStillLoading = [...historyRequestInFlightRef.current.keys()] + .some(key => key.startsWith(taskPrefix)) + if (!taskStillLoading) { + setSessionHistoryLoading(prev => prev[taskId] ? { ...prev, [taskId]: false } : prev) + } }) - window.setTimeout(() => { - setSessionHistoryLoading(prev => prev[taskId] ? { ...prev, [taskId]: false } : prev) - }, 800) }, []) const isSessionHistoryLoading = useCallback((taskId: string) => { @@ -392,10 +457,18 @@ export function WorkspacePage({ }, [sessionHistoryLoading]) // Auto-clear childDetailTaskId if session was deleted - useEffect(() => { - autoHistoryRequestRef.current = { active: null, child: null } + useLayoutEffect(() => { + historyRequestGenerationRef.current += 1 + historyRequestInFlightRef.current.clear() + autoHistoryRequestRef.current = { scope: null, active: new Set(), child: null } + setSessionHistoryLoading({}) }, [projectId]) + useEffect(() => () => { + historyRequestGenerationRef.current += 1 + historyRequestInFlightRef.current.clear() + }, []) + useEffect(() => { if (childDetailTaskId && !childDetailSession) { setChildDetailTaskId(null) @@ -432,31 +505,37 @@ export function WorkspacePage({ useEffect(() => { if (!activeSessionId) { - autoHistoryRequestRef.current.active = null + autoHistoryRequestRef.current.scope = null + autoHistoryRequestRef.current.active.clear() return } + if (autoHistoryRequestRef.current.scope !== activeSessionId) { + autoHistoryRequestRef.current.scope = activeSessionId + autoHistoryRequestRef.current.active.clear() + } const historyTargets = activeConversation.timelineSessions.length > 0 ? activeConversation.timelineSessions : (sessions.find(session => session.taskId === activeSessionId) ? [sessions.find(session => session.taskId === activeSessionId)!] : []) if (historyTargets.length === 0) { - autoHistoryRequestRef.current.active = null + autoHistoryRequestRef.current.active.clear() return } - const requestKey = historyTargets - .map((session) => `${session.taskId}:${sessionDetailLevel(session, { childDetail: session.mode === 'child' })}`) - .join('|') - if (autoHistoryRequestRef.current.active === requestKey) return - autoHistoryRequestRef.current.active = requestKey for (const session of historyTargets) { + const detailLevel = isCompanyConversation(activeSession, childSessions.length) + ? 'summary' + : sessionDetailLevel(session) + const requestKey = `${session.taskId}:${detailLevel}` + if (autoHistoryRequestRef.current.active.has(requestKey)) continue + autoHistoryRequestRef.current.active.add(requestKey) requestSessionHistory( session.taskId, undefined, - sessionDetailLevel(session, { childDetail: session.mode === 'child' }), + detailLevel, ) } - }, [activeConversation.timelineSessions, activeSessionId, requestSessionHistory, sessions]) + }, [activeConversation.timelineSessions, activeSession, activeSessionId, childSessions.length, requestSessionHistory, sessions]) // Sync activeView when activeSessionId changes externally const effectiveView: ActiveView = useMemo(() => { @@ -517,9 +596,13 @@ export function WorkspacePage({ .reverse() } if (effectiveView.kind === 'session' && visibleChannelIds.length > 1) { - return mergeConversationMessages( - visibleChannelIds.map((visibleChannelId) => chatStore.getChannelMessages(visibleChannelId)), + const messageGroups = visibleChannelIds.map( + (visibleChannelId) => chatStore.getChannelMessages(visibleChannelId), ) + if (isCompanyConversation(activeSession, childSessions.length) && activeSession) { + return selectCompanySummaryMessages(messageGroups.flat(), activeSession.channelId) + } + return mergeConversationMessages(messageGroups) } return chatStore.getChannelMessages(channelId) }, [ @@ -528,6 +611,8 @@ export function WorkspacePage({ channelId, effectiveView.kind, activeChannelIds, + activeSession, + childSessions.length, visibleChannelIds, ]) const childDetailMessages = useMemo(() => { @@ -607,11 +692,12 @@ export function WorkspacePage({ const sessionChildren = getWorkItemChildSessions(session, sessions) const sessionPeers = getConversationPeerSessions(session, sessions) const projection = projectSessionConversation(session, [...sessionPeers, ...sessionChildren]) - result[session.taskId] = mergeConversationMessages( - projection.timelineSessions.map((timelineSession) => ( - chatStore.getChannelMessages(timelineSession.channelId) - )), - ) + const messageGroups = projection.timelineSessions.map((timelineSession) => ( + chatStore.getChannelMessages(timelineSession.channelId) + )) + result[session.taskId] = isCompanyConversation(session, sessionChildren.length) + ? selectCompanySummaryMessages(messageGroups.flat(), session.channelId) + : mergeConversationMessages(messageGroups) } return result }, [openSessions, sessions, chatStore.getChannelMessages]) @@ -670,24 +756,16 @@ export function WorkspacePage({ return () => document.removeEventListener('keydown', handleKeyDown) }, [panelState]) - // Auto-mark channel as read - useEffect(() => { - if (panelState === 'collapsed') return - for (const visibleChannelId of visibleChannelIds) { - chatStore.markRead(visibleChannelId) - } - }, [visibleChannelIds, chatStore, panelState]) - const handleMarkRead = useCallback(() => { for (const visibleChannelId of visibleChannelIds) { - chatStore.markRead(visibleChannelId) + markRead(visibleChannelId) } - }, [visibleChannelIds, chatStore]) + }, [visibleChannelIds, markRead]) const handleMarkSessionRead = useCallback((taskId: string) => { const session = sessions.find(item => item.taskId === taskId) - if (session) chatStore.markRead(session.channelId) - }, [sessions, chatStore]) + if (session) markRead(session.channelId) + }, [sessions, markRead]) const focusSession = useCallback((taskId: string) => { const session = sessions.find(item => item.taskId === taskId) @@ -698,8 +776,7 @@ export function WorkspacePage({ setPanelState('open') setPanelTab('chat') setChildDetailTaskId(null) - chatStore.markRead(session.channelId) - }, [sessions, ensureSessionOpen, sessionStore, chatStore]) + }, [sessions, ensureSessionOpen, sessionStore]) const handleCloseSessionView = useCallback((taskId: string) => { const remaining = openSessionIds.filter(id => id !== taskId) @@ -711,14 +788,12 @@ export function WorkspacePage({ const nextActive = remaining[remaining.length - 1] ?? null sessionStore.setActiveSession(nextActive) if (nextActive) { - const nextSession = sessions.find(item => item.taskId === nextActive) setActiveView({ kind: 'session', taskId: nextActive }) setPanelTab('chat') - if (nextSession) chatStore.markRead(nextSession.channelId) return } setActiveView({ kind: 'activity' }) - }, [openSessionIds, childDetailTaskId, activeSessionId, sessionStore, sessions, chatStore]) + }, [openSessionIds, childDetailTaskId, activeSessionId, sessionStore]) // ── Session selection (sidebar click or board card click) ── const handleSelectSession = useCallback((taskId: string | null) => { @@ -746,8 +821,7 @@ export function WorkspacePage({ sessionStore.setActiveSession(null) setChildDetailTaskId(null) setPanelState('open') - chatStore.markRead(secretaryChannelId) - }, [sessionStore, chatStore, secretaryChannelId]) + }, [sessionStore]) // ── Board interactions ── const handleCardClick = useCallback((task: { id: string }) => { @@ -999,9 +1073,8 @@ export function WorkspacePage({ setChildDetailTaskId(session.taskId) setPanelState('open') setPanelTab('chat') - chatStore.markRead(session.channelId) } - }, [sessions, chatStore]) + }, [sessions]) const handleWorkItemClick = useCallback((executionTurnId: string) => { // Always forward to ExecutionPanel. The panel's lookup matches against diff --git a/opc/plugins/office_ui/frontend_src/workspace/workspace.css b/opc/plugins/office_ui/frontend_src/workspace/workspace.css index b7db862..972683b 100644 --- a/opc/plugins/office_ui/frontend_src/workspace/workspace.css +++ b/opc/plugins/office_ui/frontend_src/workspace/workspace.css @@ -665,21 +665,53 @@ overflow: hidden; } -.ctx-body > .msg-list { +.ctx-body > .msg-list, +.ctx-body > .msg-list-shell { min-height: 0; } .ctx-work-item-progress { - flex-shrink: 0; + flex: 0 0 84px; + height: 84px; + min-height: 84px; padding: 12px 12px 0; - overflow-y: auto; - overflow-x: hidden; - max-height: 50vh; + 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; @@ -1863,13 +1895,21 @@ TaskDetailView — linked session messages ═══════════════════════════════════════════════════════ */ .task-detail-linked-messages { - max-height: 400px; - overflow-y: auto; + 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; diff --git a/opc/plugins/office_ui/snapshot_builder.py b/opc/plugins/office_ui/snapshot_builder.py index 5e66d67..2d9449b 100644 --- a/opc/plugins/office_ui/snapshot_builder.py +++ b/opc/plugins/office_ui/snapshot_builder.py @@ -16,10 +16,16 @@ import json import re import time import uuid -from typing import Any, Literal, TYPE_CHECKING +from typing import Any, TYPE_CHECKING from loguru import logger from opc.core.models import normalize_role_runtime_status +from opc.core.transcript_visibility import ( + FULL_DETAIL_ONLY_TRANSCRIPT_KINDS, + TranscriptDetailLevel, + normalize_transcript_detail_level, + transcript_metadata_visible, +) from opc.layer2_organization.phase import ( DONE_PHASES, IN_PROGRESS_PHASES, @@ -118,14 +124,7 @@ def _session_message_ui_identity(message: Any) -> tuple[str, float, dict[str, An return canonical_id or str(getattr(message, "message_id", "") or ""), timestamp, ui_meta -TranscriptDetailLevel = Literal["summary", "full"] - -_FULL_DETAIL_ONLY_TRANSCRIPT_KINDS: frozenset[str] = frozenset({ - "runtime_v2_user_turn", - "runtime_v2_intermediate_assistant", - "runtime_v2_company_assistant", - "runtime_v2_tool_output", -}) +_FULL_DETAIL_ONLY_TRANSCRIPT_KINDS = FULL_DETAIL_ONLY_TRANSCRIPT_KINDS _TRANSCRIPT_DUPLICATE_KIND_GROUPS: tuple[frozenset[str], ...] = ( frozenset({ @@ -208,10 +207,7 @@ def _strip_narrative_title_prefix(content: str) -> str: def _normalize_transcript_detail_level(value: Any) -> TranscriptDetailLevel: - normalized = str(value or "").strip().lower() - if normalized == "full": - return "full" - return "summary" + return normalize_transcript_detail_level(value) def _transcript_message_kind(message: Any) -> str: @@ -229,13 +225,7 @@ def _transcript_message_hidden_from_ui( detail_level: TranscriptDetailLevel = "summary", ) -> bool: metadata = dict(getattr(message, "metadata", {}) or {}) - kind = str(metadata.get("kind", "") or "").strip() - if metadata.get("company_final_turn"): - # The role's final reply of a company turn is the user-visible result - # (intake/aggregate turns have no engine-recorded result surface, so - # hiding this would drop the reply from the chat entirely). - return False - return detail_level != "full" and kind in _FULL_DETAIL_ONLY_TRANSCRIPT_KINDS + return not transcript_metadata_visible(metadata, detail_level=detail_level) def _render_text_parts(parts: list[Any]) -> str: @@ -1168,7 +1158,14 @@ def _prefer_duplicate_message(left: dict[str, Any], right: dict[str, Any]) -> tu return right, left -def _collapse_adjacent_transcript_duplicates(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: +def collapse_adjacent_transcript_duplicates(messages: list[dict[str, Any]]) -> list[dict[str, Any]]: + """Collapse duplicate rendered result surfaces in chronological order. + + This is public within the Office UI package because transcript pagination + formats raw database chunks incrementally. Reusing the renderer's exact + collapse rule at chunk boundaries keeps pagination and full snapshots + identical. + """ collapsed: list[dict[str, Any]] = [] for message in messages: if not collapsed: @@ -1236,7 +1233,7 @@ def build_transcript_ui_messages( "metadata": dict(formatted.get("metadata", {}) or {}), }) - collapsed_messages = _collapse_adjacent_transcript_duplicates(formatted_messages) + collapsed_messages = collapse_adjacent_transcript_duplicates(formatted_messages) normalized_detail_level = _normalize_transcript_detail_level(detail_level) if normalized_detail_level == "full": return collapsed_messages diff --git a/opc/plugins/office_ui/ws_handler.py b/opc/plugins/office_ui/ws_handler.py index 3c04623..ffd7997 100644 --- a/opc/plugins/office_ui/ws_handler.py +++ b/opc/plugins/office_ui/ws_handler.py @@ -40,6 +40,7 @@ from opc.core.org_config import ( write_org_index, ) from opc.core.models import normalize_role_runtime_status +from opc.core.transcript_visibility import rendered_transcript_metadata_visible from opc.presentation.kanban import build_company_board_columns from opc.layer2_organization.phase import ( kanban_column, @@ -77,6 +78,7 @@ from opc.plugins.office_ui.services import ( from opc.plugins.office_ui.snapshot_builder import ( STATUS_TO_COLUMN, _build_company_runtime_control_by_task, + collapse_adjacent_transcript_duplicates, _build_session_context_preview, _extract_markdown_text, _sanitize_ui_message_dict, @@ -947,11 +949,8 @@ class WSHandler: @staticmethod def _message_visible_in_detail_level(message: dict[str, Any], detail_level: str) -> bool: - normalized_detail_level = _normalize_transcript_detail_level(detail_level) - if normalized_detail_level == "full": - return True metadata = dict(message.get("metadata", {}) or {}) - return str(metadata.get("detail_visibility", "summary")).strip() != "full" + return rendered_transcript_metadata_visible(metadata, detail_level=detail_level) @classmethod def _filter_ui_messages_for_detail_level( @@ -989,25 +988,86 @@ class WSHandler: channel_id = f"session:{task_id}" page_loader = getattr(store, "get_session_transcript_page", None) if callable(page_loader): - before_dt = datetime.fromtimestamp(before_timestamp) if before_timestamp is not None else None - raw_page = page_loader( - session_id, - limit=limit, - before_created_at=before_dt, - before_message_id=before_message_id, - detail_level=_normalize_transcript_detail_level(detail_level), + normalized_limit = max(1, min(int(limit), 500)) + normalized_detail_level = _normalize_transcript_detail_level(detail_level) + # A database-visible transcript row can still disappear when the + # renderer finds no content, and adjacent result surfaces can + # collapse to one UI row. Page raw rows in bounded chunks until + # we have one *rendered* look-ahead row or exhaust the transcript. + # This makes has_more describe the UI timeline rather than the SQL + # row set and prevents an empty raw page from stalling history. + chunk_limit = normalized_limit + raw_before_dt = ( + datetime.fromtimestamp(before_timestamp) + if before_timestamp is not None + else None ) - page = await raw_page if inspect.isawaitable(raw_page) else raw_page - transcript_page = list((page or {}).get("messages", []) or []) - formatted_page = build_transcript_ui_messages( - transcript_page, - channel_id=channel_id, - task_id=task_id, - detail_level=_normalize_transcript_detail_level(detail_level), + raw_before_id = before_message_id + seen_raw_cursors: set[tuple[datetime, str]] = set() + formatted_messages: list[dict[str, Any]] = [] + total_count = 0 + raw_has_more = False + + while True: + raw_page = page_loader( + session_id, + limit=chunk_limit, + before_created_at=raw_before_dt, + before_message_id=raw_before_id, + detail_level=normalized_detail_level, + ) + page = await raw_page if inspect.isawaitable(raw_page) else raw_page + transcript_chunk = list((page or {}).get("messages", []) or []) + total_count = max( + total_count, + int((page or {}).get("total_count", 0) or 0), + ) + raw_has_more = bool((page or {}).get("has_more", False)) + if not transcript_chunk: + break + + formatted_chunk = build_transcript_ui_messages( + transcript_chunk, + channel_id=channel_id, + task_id=task_id, + detail_level=normalized_detail_level, + ) + formatted_messages = collapse_adjacent_transcript_duplicates([ + *formatted_chunk, + *formatted_messages, + ]) + if len(formatted_messages) > normalized_limit: + return ( + formatted_messages[-normalized_limit:], + max(total_count, len(formatted_messages)), + True, + ) + if not raw_has_more: + break + + oldest_message = transcript_chunk[0].get("message") + oldest_created_at = getattr(oldest_message, "created_at", None) + oldest_message_id = str( + getattr(oldest_message, "message_id", "") or "" + ).strip() + if not isinstance(oldest_created_at, datetime) or not oldest_message_id: + break + next_cursor = (oldest_created_at, oldest_message_id) + if next_cursor in seen_raw_cursors: + break + seen_raw_cursors.add(next_cursor) + raw_before_dt, raw_before_id = next_cursor + # Small client pages should not require one SQL round-trip per + # empty row. Start at the requested size so duplicate/empty + # boundaries are exact, then grow only while looking through + # rows which did not fill the rendered page. + chunk_limit = min(500, max(chunk_limit + 1, chunk_limit * 2)) + + return ( + formatted_messages[-normalized_limit:], + max(total_count, len(formatted_messages)), + raw_has_more, ) - total_count = int((page or {}).get("total_count", len(formatted_page)) or 0) - has_more = bool((page or {}).get("has_more", False)) - return formatted_page, max(total_count, len(formatted_page)), has_more transcript_loader = getattr(store, "get_session_transcript", None) if not callable(transcript_loader): @@ -5497,38 +5557,28 @@ class WSHandler: ) try: - messages = await self.chat_store.get_channel_messages_page( + cache_page = await self.chat_store.get_channel_messages_page_info( channel_id, limit=request_limit, before_timestamp=before_timestamp, before_message_id=before_message_id, + detail_level=detail_level, project_id=project_id, ) + messages = list(cache_page.get("messages", []) or []) + visible_cache_count = int(cache_page.get("total_count", len(messages)) or 0) + cache_has_more = bool(cache_page.get("has_more", False)) messages = self._filter_ui_messages_for_detail_level(messages, detail_level) messages = [_sanitize_ui_message_dict(message) for message in messages] - except Exception: - messages = [] - try: - if transcript_total_count: - visible_cache_count = transcript_total_count - else: - visible_cache_count = len(self._filter_ui_messages_for_detail_level( - await self.chat_store.get_channel_messages( - channel_id, - limit=max(request_limit * 8, 500), - project_id=project_id, - ), - detail_level, - )) except Exception as exc: if self._is_expected_shutdown_error(exc): - logger.debug(f"session_detail: visible count skipped during shutdown for {task_id}") + logger.debug(f"session_detail: cache page skipped during shutdown for {task_id}") return + messages = [] visible_cache_count = len(messages) + cache_has_more = False total_message_count = max(transcript_total_count, visible_cache_count, len(messages)) - has_more = transcript_has_more or ( - before_timestamp is None and total_message_count > len(messages) - ) + has_more = transcript_has_more or cache_has_more task_meta = task.metadata if isinstance(getattr(task, "metadata", None), dict) else {} handoff_context = _extract_markdown_text(task_meta.get("handoff_context"), max_chars=None) diff --git a/tests/test_chat_store_progress_folding.py b/tests/test_chat_store_progress_folding.py new file mode 100644 index 0000000..08348ab --- /dev/null +++ b/tests/test_chat_store_progress_folding.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +import unittest + +from opc.plugins.office_ui.chat_store import ChatStore + + +class ChatStoreProgressFoldingTests(unittest.TestCase): + def test_stream_fold_preserves_first_timestamp(self) -> None: + first = { + "timestamp": 1_700_000_000.0, + "type": "thinking", + "summary": "Thinking", + "detail": "Need ", + "turn_id": "runtime-1:1", + "item_id": "runtime-1:1:thinking", + "seq": 1, + } + deltas = [ + { + "timestamp": 1_700_000_000.1, + "type": "thinking", + "summary": "Thinking", + "detail": "more ", + "turn_id": "runtime-1:1", + "item_id": "runtime-1:1:thinking", + "seq": 2, + }, + { + "timestamp": 1_700_000_000.2, + "type": "thinking", + "summary": "Thinking", + "detail": "context", + "turn_id": "runtime-1:1", + "item_id": "runtime-1:1:thinking", + "seq": 3, + }, + ] + + folded = ChatStore._fold_progress_entries([first], deltas) + + self.assertEqual(len(folded), 1) + self.assertEqual(folded[0]["timestamp"], first["timestamp"]) + self.assertEqual(folded[0]["detail"], "Need more context") + self.assertEqual(folded[0]["seq"], 3) + # Folding builds a replacement row and must not mutate the persisted + # value supplied by the caller. + self.assertEqual(first["detail"], "Need ") + + def test_stream_fold_within_one_batch_keeps_creation_timestamp(self) -> None: + folded = ChatStore._fold_progress_entries( + [], + [ + { + "timestamp": 10.0, + "type": "assistant", + "summary": "Part one", + "detail": "Part one ", + "turn_id": "runtime-2:1", + "stream_id": "runtime-2:1:assistant", + "seq": 1, + }, + { + "timestamp": 11.0, + "type": "assistant", + "summary": "part two", + "detail": "part two", + "turn_id": "runtime-2:1", + "stream_id": "runtime-2:1:assistant", + "seq": 2, + }, + ], + ) + + self.assertEqual(len(folded), 1) + self.assertEqual(folded[0]["timestamp"], 10.0) + self.assertEqual(folded[0]["detail"], "Part one part two") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_parallel_runtime_isolation.py b/tests/test_parallel_runtime_isolation.py index f1c3974..7db9f64 100644 --- a/tests/test_parallel_runtime_isolation.py +++ b/tests/test_parallel_runtime_isolation.py @@ -679,7 +679,11 @@ async def test_session_detail_routes_by_request_project_id() -> None: chat_store = SimpleNamespace( create_session_channel=AsyncMock(return_value={"channel_id": "session:task-b"}), backfill_messages=AsyncMock(return_value=[]), - get_channel_messages_page=AsyncMock(return_value=[]), + get_channel_messages_page_info=AsyncMock(return_value={ + "messages": [], + "has_more": False, + "total_count": 0, + }), get_channel_messages=AsyncMock(return_value=[]), ) handler = WSHandler(engine_a, MagicMock(), chat_store, _ui_event_adapter()) @@ -708,7 +712,8 @@ async def test_session_detail_routes_by_request_project_id() -> None: "Project B Session", project_id="project-b", ) - assert chat_store.get_channel_messages_page.await_args.kwargs["project_id"] == "project-b" + assert chat_store.get_channel_messages_page_info.await_args.kwargs["project_id"] == "project-b" + assert chat_store.get_channel_messages_page_info.await_args.kwargs["detail_level"] == "summary" @_async_test diff --git a/tests/test_session_integration.py b/tests/test_session_integration.py index 410bdb9..839671b 100644 --- a/tests/test_session_integration.py +++ b/tests/test_session_integration.py @@ -21,10 +21,9 @@ from types import SimpleNamespace from typing import Any from unittest.mock import ANY, AsyncMock, MagicMock, patch -import aiosqlite - from opc.core.attachment_store import AttachmentRef, AttachmentStore from opc.core.models import DelegationRun, ExecutionCheckpoint, Task, TaskStatus +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 @@ -207,8 +206,8 @@ def _make_engine(store: StubStore | None = None, memory: StubMemory | None = Non async def _make_chat_store() -> ChatStore: """Create an in-memory ChatStore for testing.""" - db = await aiosqlite.connect(":memory:") - cs = ChatStore(db) + db = _SQLiteConnectionAdapter(":memory:") + cs = ChatStore(db) # type: ignore[arg-type] await cs.initialize() return cs @@ -4444,6 +4443,97 @@ class TestWSHandlerSessionDetail(unittest.IsolatedAsyncioTestCase): ["oldest"], ) + async def test_session_detail_pages_transcript_and_ui_only_messages_together(self) -> None: + ws = MagicMock() + ws.send_json = AsyncMock() + base_time = datetime.now() + + task = Task( + id="mixed-page-task-1", + title="Mixed source page", + project_id="test-project", + session_id="mixed-page-session-1", + ) + await self.store.save_task(task) + self.store._transcripts["mixed-page-session-1"] = [ + { + "message": SimpleNamespace( + message_id="transcript-old", + role="assistant", + agent_id="agent-reviewer", + created_at=base_time, + summary_flag=False, + metadata={"kind": "top_level_reply"}, + ), + "parts": [SimpleNamespace(part_type="text", payload={"text": "Persisted reply"})], + }, + ] + channel_id = "session:mixed-page-task-1" + await self.chat_store.create_session_channel( + task.id, + task.title, + project_id="test-project", + ) + await self.chat_store.insert_message( + channel_id, + "system", + "OPC", + "Approval required", + metadata={ + "source": "ui", + "detail_visibility": "summary", + "kind": "ui_only_notice", + }, + message_id="ui-only-mid", + project_id="test-project", + created_at=base_time.timestamp() + 1, + ) + await self.chat_store.insert_message( + channel_id, + "system", + "OPC", + "Legacy execution notice", + metadata={"source": "ui", "detail_visibility": "summary"}, + message_id="ui-only-new", + project_id="test-project", + created_at=base_time.timestamp() + 2, + ) + + await self.handler._handle_session_detail( + ws, + {"project_id": "test-project", "task_id": task.id, "limit": 2}, + ) + + first_payload = ws.send_json.await_args_list[0].args[0]["payload"] + self.assertEqual(first_payload["message_count"], 3) + self.assertEqual(first_payload["loaded_count"], 2) + self.assertTrue(first_payload["has_more"]) + self.assertEqual( + [message["message_id"] for message in first_payload["messages"]], + ["ui-only-mid", "ui-only-new"], + ) + + oldest_loaded = first_payload["messages"][0] + await self.handler._handle_session_detail( + ws, + { + "project_id": "test-project", + "task_id": task.id, + "limit": 2, + "before_created_at": oldest_loaded["created_at"], + "before_message_id": oldest_loaded["message_id"], + }, + ) + + second_payload = ws.send_json.await_args_list[1].args[0]["payload"] + self.assertEqual(second_payload["message_count"], 3) + self.assertEqual(second_payload["loaded_count"], 1) + self.assertFalse(second_payload["has_more"]) + self.assertEqual( + [message["message_id"] for message in second_payload["messages"]], + ["transcript-old"], + ) + async def test_session_detail_returns_silently_when_shutdown_closes_chat_db(self) -> None: ws = MagicMock() ws.send_json = AsyncMock() diff --git a/tests/test_transcript_pagination.py b/tests/test_transcript_pagination.py new file mode 100644 index 0000000..1f4094d --- /dev/null +++ b/tests/test_transcript_pagination.py @@ -0,0 +1,691 @@ +from __future__ import annotations + +import asyncio +import random +import tempfile +import unittest +from datetime import datetime, timedelta +from pathlib import Path +from types import SimpleNamespace + +from opc.core.models import SessionMessageRecord, SessionPartRecord, SessionRecord +from opc.core.transcript_visibility import transcript_metadata_visible +from opc.database.store import OPCStore, _SQLiteConnectionAdapter +from opc.plugins.office_ui.chat_store import ( + ChatStore, + _MessageMatchIndex, + _MessageMatchState, +) +from opc.plugins.office_ui.snapshot_builder import build_transcript_ui_messages +from opc.plugins.office_ui.ws_handler import WSHandler + + +class TranscriptStorePaginationTests(unittest.IsolatedAsyncioTestCase): + async def test_summary_page_filters_full_detail_rows_before_limit(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + store = OPCStore(Path(tmpdir) / "tasks.db") + await store.initialize() + try: + session_id = "summary-pagination-session" + task_id = "summary-pagination-task" + base = datetime(2026, 7, 13, 12, 0, 0) + await store.save_session(SessionRecord( + session_id=session_id, + project_id="test-project", + title="Summary pagination", + created_at=base, + updated_at=base, + )) + + async def save( + message_id: str, + offset: int, + kind: str, + *, + company_final_turn: bool = False, + summary_flag: bool = False, + ) -> None: + metadata = {"kind": kind} + if company_final_turn: + metadata["company_final_turn"] = True + created_at = base + timedelta(seconds=offset) + await store.save_session_message(SessionMessageRecord( + message_id=message_id, + session_id=session_id, + task_id=task_id, + role="assistant", + agent_id="agent-reviewer", + summary_flag=summary_flag, + metadata=metadata, + created_at=created_at, + )) + await store.save_session_part(SessionPartRecord( + part_id=f"part-{message_id}", + message_id=message_id, + session_id=session_id, + part_type="text", + payload={"text": f"content:{message_id}"}, + created_at=created_at, + )) + + await save("summary-old", 0, "top_level_reply") + hidden_kinds = ( + "runtime_v2_user_turn", + "runtime_v2_intermediate_assistant", + "runtime_v2_company_assistant", + "runtime_v2_tool_output", + ) + # More than 8 * page size: post-LIMIT filtering used to return + # an empty page even though summary-old remained reachable. + for index in range(24): + await save(f"full-only-{index:02d}", index + 1, hidden_kinds[index % len(hidden_kinds)]) + await save("assistant-final", 25, "runtime_v2_assistant") + await save( + "company-final", + 26, + "runtime_v2_company_assistant", + company_final_turn=True, + ) + await save("canonical-result", 27, "child_result") + await save("compaction-summary", 28, "top_level_reply", summary_flag=True) + + latest = await store.get_session_transcript_page( + session_id, + limit=2, + detail_level="summary", + ) + self.assertEqual(latest["total_count"], 4) + self.assertTrue(latest["has_more"]) + self.assertEqual( + [item["message"].message_id for item in latest["messages"]], + ["company-final", "canonical-result"], + ) + self.assertEqual( + [message["message_id"] for message in build_transcript_ui_messages( + latest["messages"], + channel_id=f"session:{task_id}", + task_id=task_id, + detail_level="summary", + )], + ["company-final", "canonical-result"], + ) + + older = await store.get_session_transcript_page( + session_id, + limit=2, + before_created_at=base + timedelta(seconds=26), + before_message_id="company-final", + detail_level="summary", + ) + self.assertEqual(older["total_count"], 4) + self.assertFalse(older["has_more"]) + self.assertEqual( + [item["message"].message_id for item in older["messages"]], + ["summary-old", "assistant-final"], + ) + + full = await store.get_session_transcript_page( + session_id, + limit=2, + detail_level="full", + ) + self.assertEqual(full["total_count"], 28) + self.assertTrue(full["has_more"]) + finally: + await store.close() + + async def test_rendered_page_reads_past_empty_and_collapsed_raw_rows(self) -> None: + with tempfile.TemporaryDirectory() as tmpdir: + store = OPCStore(Path(tmpdir) / "tasks.db") + await store.initialize() + try: + session_id = "rendered-pagination-session" + task_id = "rendered-pagination-task" + base = datetime(2026, 7, 13, 13, 0, 0) + await store.save_session(SessionRecord( + session_id=session_id, + project_id="test-project", + title="Rendered pagination", + created_at=base, + updated_at=base, + )) + + async def save( + message_id: str, + offset: int, + kind: str, + content: str | None, + ) -> None: + created_at = base + timedelta(seconds=offset) + await store.save_session_message(SessionMessageRecord( + message_id=message_id, + session_id=session_id, + task_id=task_id, + role="assistant", + agent_id="agent-reviewer", + metadata={"kind": kind}, + created_at=created_at, + )) + if content is not None: + await store.save_session_part(SessionPartRecord( + part_id=f"part-{message_id}", + message_id=message_id, + session_id=session_id, + part_type="text", + payload={"text": content}, + created_at=created_at, + )) + + await save("visible-old", 0, "top_level_reply", "older unique") + await save("duplicate-low", 1, "top_level_reply", "same result") + await save("duplicate-high", 2, "child_result", "same result") + await save("empty-latest", 3, "top_level_reply", None) + + handler = WSHandler.__new__(WSHandler) + handler.engine = SimpleNamespace(store=store) + page, total_count, has_more = await handler._load_session_transcript_page( + SimpleNamespace(id=task_id, session_id=session_id), + limit=2, + detail_level="summary", + ) + + self.assertEqual( + [message["message_id"] for message in page], + ["visible-old", "duplicate-high"], + ) + self.assertEqual( + [message["content"] for message in page], + ["older unique", "same result"], + ) + self.assertGreaterEqual(total_count, 2) + self.assertFalse(has_more) + finally: + await store.close() + + def test_renderer_and_store_share_company_final_visibility(self) -> None: + self.assertFalse(transcript_metadata_visible( + {"kind": "runtime_v2_company_assistant"}, + detail_level="summary", + )) + self.assertTrue(transcript_metadata_visible( + {"kind": "runtime_v2_company_assistant", "company_final_turn": True}, + detail_level="summary", + )) + self.assertTrue(transcript_metadata_visible( + {"kind": "runtime_v2_assistant"}, + detail_level="summary", + )) + + +class ChatStorePaginationTests(unittest.TestCase): + @staticmethod + def _legacy_dedupe( + store: ChatStore, + messages: list[dict[str, object]], + ) -> list[dict[str, object]]: + """Reference implementation retained only for equivalence testing.""" + deduped: list[dict[str, object]] = [] + for message in sorted(messages, key=store._message_timestamp): + match_index = next( + ( + index + for index in range(len(deduped) - 1, -1, -1) + if store._messages_semantically_match(deduped[index], message) + ), + None, + ) + if match_index is None: + deduped.append(message) + else: + deduped[match_index] = store._merge_duplicate_messages( + deduped[match_index], + message, + ) + return deduped + + def test_indexed_dedupe_matches_legacy_semantics(self) -> None: + randomizer = random.Random(20260713) + messages: list[dict[str, object]] = [] + content_variants = ( + "Repeated result", + "Repeated result\n\nVerification: passed", + "Unique body ", + "**Narrative heading**: " + ("long body " * 20), + ) + result_kinds = ( + "child_result", + "company_role_result", + "top_level_reply", + "", + ) + for index in range(600): + metadata: dict[str, object] = {} + if randomizer.random() < 0.55: + metadata["source"] = "engine" + result_kind = randomizer.choice(result_kinds) + if result_kind: + metadata["transcript_kind"] = result_kind + # Exercise identity merges which can replace the semantic bucket of + # an already-indexed row. + if messages and randomizer.random() < 0.12: + identity_source = randomizer.choice(messages) + metadata["ui_message_id"] = identity_source["message_id"] + content = randomizer.choice(content_variants) + if content == "Unique body ": + content += str(index % 31) + messages.append({ + "message_id": f"random-{index:04d}", + "channel_id": f"session:{randomizer.randrange(2)}", + "sender": "user" if randomizer.random() < 0.18 else "assistant", + "sender_name": "OPC", + "content": content, + # Include zero/negative sentinel values because the historical + # matcher deliberately treats a zero timestamp as unbounded. + "created_at": float(randomizer.randrange(-6, 45)) / 3.0, + "reply_to_id": f"reply-{randomizer.randrange(4)}", + "mentions": [], + "metadata": metadata, + }) + randomizer.shuffle(messages) + + store = ChatStore(None) # type: ignore[arg-type] + expected = self._legacy_dedupe(store, messages) + actual = store._dedupe_messages(messages) + self.assertEqual(actual, expected) + + def test_indexed_dedupe_normalizes_long_content_once_per_row(self) -> None: + class CountingChatStore(ChatStore): + normalize_calls = 0 + + @classmethod + def _normalize_duplicate_content(cls, content: object) -> str: + cls.normalize_calls += 1 + return ChatStore._normalize_duplicate_content(content) + + store = CountingChatStore(None) # type: ignore[arg-type] + long_content = "x" * 8192 + message_count = 4000 + messages = [ + { + "message_id": f"scale-{index:05d}", + "channel_id": "session:scale", + "sender": "assistant", + "sender_name": "OPC", + "content": long_content, + "created_at": float(index), + "reply_to_id": None, + "mentions": [], + # Without an engine source these equal-content rows deliberately + # do not merge; the legacy reverse scan normalized O(n^2) pairs. + "metadata": {}, + } + for index in range(message_count) + ] + + deduped = store._dedupe_messages(messages) + self.assertEqual(len(deduped), message_count) + self.assertEqual(CountingChatStore.normalize_calls, message_count) + + def test_timed_backfill_index_does_not_scan_out_of_window_rows(self) -> None: + store = ChatStore(None) # type: ignore[arg-type] + row_count = 1000 + + def message(prefix: str, index: int, timestamp: float) -> dict[str, object]: + return { + "message_id": f"{prefix}-{index:04d}", + "channel_id": "session:timed-backfill-scale", + "sender": "assistant", + "sender_name": "OPC", + "content": "Ordinary engine update", + "created_at": timestamp, + "reply_to_id": "same-turn", + "mentions": [], + # Intentionally not a result surface: only the exact 2-second + # ordinary-message window may match these rows. + "metadata": {"source": "engine"}, + } + + existing = [ + message("existing", index, 100_001.0 + index * 10.0) + for index in range(row_count) + ] + incoming = [ + message("incoming", index, 1.0 + index * 10.0) + for index in range(row_count) + ] + + # Prepared-state reference of the former reversed scan. Every incoming + # row misses and is appended, causing 1000 + ... + 1999 comparisons. + legacy_rows = list(existing) + legacy_states = [ + _MessageMatchState.from_message(store, item) + for item in legacy_rows + ] + legacy_matches: list[int | None] = [] + legacy_checks = 0 + for item in incoming: + candidate = _MessageMatchState.from_message(store, item) + match_index: int | None = None + for index in range(len(legacy_states) - 1, -1, -1): + legacy_checks += 1 + if legacy_states[index].matches( + candidate, + duplicate_window=store._DUPLICATE_WINDOW_SECONDS, + ): + match_index = index + break + legacy_matches.append(match_index) + if match_index is None: + legacy_rows.append(item) + legacy_states.append(candidate) + + indexed_rows = list(existing) + timed_index = _MessageMatchIndex(store, indexed_rows) + indexed_matches: list[int | None] = [] + indexed_checks = 0 + original_matches = _MessageMatchState.matches + + def counted_matches( + existing_state: _MessageMatchState, + candidate_state: _MessageMatchState, + *, + duplicate_window: float, + ) -> bool: + nonlocal indexed_checks + indexed_checks += 1 + return original_matches( + existing_state, + candidate_state, + duplicate_window=duplicate_window, + ) + + _MessageMatchState.matches = counted_matches + try: + for item in incoming: + candidate = timed_index.prepare(item) + match_index = timed_index.latest_match( + item, + prepared_state=candidate, + ) + indexed_matches.append(match_index) + if match_index is None: + timed_index.append(item, prepared_state=candidate) + finally: + _MessageMatchState.matches = original_matches + + self.assertEqual(indexed_matches, legacy_matches) + self.assertEqual(legacy_checks, 1_499_500) + self.assertEqual(indexed_checks, 0) + + def test_timed_index_preserves_float_rounding_at_window_boundary(self) -> None: + store = ChatStore(None) # type: ignore[arg-type] + + def message(message_id: str, timestamp: float) -> dict[str, object]: + return { + "message_id": message_id, + "channel_id": "session:float-window-boundary", + "sender": "assistant", + "sender_name": "OPC", + "content": "Boundary update", + "created_at": timestamp, + "reply_to_id": "same-turn", + "mentions": [], + "metadata": {"source": "engine"}, + } + + existing = message("existing", -1e-300) + candidate = message("candidate", 2.0) + self.assertTrue(store._messages_semantically_match(existing, candidate)) + + rows = [existing] + index = _MessageMatchIndex(store, rows) + self.assertEqual(index.latest_match(candidate), 0) + + def test_backfill_semantic_matches_remain_one_to_one(self) -> None: + asyncio.run(self._exercise_backfill_semantic_matches_one_to_one()) + + async def _exercise_backfill_semantic_matches_one_to_one(self) -> None: + tmpdir = tempfile.TemporaryDirectory() + db = _SQLiteConnectionAdapter(str(Path(tmpdir.name) / "ui-state.db")) + store = ChatStore(db) # type: ignore[arg-type] + await store.initialize() + channel_id = "session:backfill-scale" + project_id = "test-project" + content = "Canonical result " + ("detail " * 1000) + try: + for index in range(200): + await store.insert_message( + channel_id, + "assistant", + "OPC", + content, + metadata={ + "source": "engine", + "transcript_kind": "child_result", + }, + message_id=f"existing-result-{index:03d}", + project_id=project_id, + created_at=float(index + 1), + ) + + backfill = [ + { + "message_id": f"backfill-result-{index:03d}", + "channel_id": channel_id, + "sender": "assistant", + "sender_name": "OPC", + "content": content, + "created_at": float(index + 1000), + "metadata": { + "source": "engine", + "transcript_kind": "child_result", + }, + } + for index in range(201) + ] + inserted = await store.backfill_messages( + channel_id, + backfill, + project_id=project_id, + ) + self.assertEqual( + [message["message_id"] for message in inserted], + ["backfill-result-200"], + ) + cursor = await db.execute( + "SELECT COUNT(*) FROM messages WHERE channel_id = ? AND project_id = ?", + (channel_id, project_id), + ) + self.assertEqual((await cursor.fetchone())[0], 201) + finally: + await db.close() + tmpdir.cleanup() + + def test_summary_cache_page_filters_before_raw_fetch_limit(self) -> None: + asyncio.run(self._exercise_summary_cache_page()) + + async def _exercise_summary_cache_page(self) -> None: + tmpdir = tempfile.TemporaryDirectory() + db = _SQLiteConnectionAdapter(str(Path(tmpdir.name) / "ui-state.db")) + store = ChatStore(db) # type: ignore[arg-type] + await store.initialize() + channel_id = "session:summary-cache-task" + project_id = "test-project" + + async def insert(message_id: str, timestamp: float, visibility: str) -> None: + await store.insert_message( + channel_id, + "agent-reviewer", + "Reviewer", + f"content:{message_id}", + metadata={"detail_visibility": visibility}, + message_id=message_id, + project_id=project_id, + created_at=timestamp, + ) + + try: + await insert("summary-old", 1.0, "summary") + for index in range(24): + await insert(f"full-only-{index:02d}", float(index + 2), "full") + await insert("summary-new", 26.0, "summary") + + page = await store.get_channel_messages_page( + channel_id, + limit=2, + detail_level="summary", + project_id=project_id, + ) + self.assertEqual( + [message["message_id"] for message in page], + ["summary-old", "summary-new"], + ) + self.assertEqual( + await store.get_channel_visible_message_count( + channel_id, + project_id=project_id, + detail_level="summary", + ), + 2, + ) + self.assertEqual( + await store.get_channel_visible_message_count( + channel_id, + project_id=project_id, + detail_level="full", + ), + 26, + ) + + older = await store.get_channel_messages_page( + channel_id, + limit=2, + before_timestamp=26.0, + before_message_id="summary-new", + detail_level="summary", + project_id=project_id, + ) + self.assertEqual([message["message_id"] for message in older], ["summary-old"]) + finally: + await db.close() + tmpdir.cleanup() + + def test_cache_page_dedupes_before_paging_and_keeps_ui_only_rows(self) -> None: + asyncio.run(self._exercise_cache_page_with_ui_only_rows()) + + async def _exercise_cache_page_with_ui_only_rows(self) -> None: + tmpdir = tempfile.TemporaryDirectory() + db = _SQLiteConnectionAdapter(str(Path(tmpdir.name) / "ui-state.db")) + store = ChatStore(db) # type: ignore[arg-type] + await store.initialize() + channel_id = "session:mixed-cache-task" + project_id = "test-project" + + async def insert( + message_id: str, + timestamp: float, + content: str, + metadata: dict[str, object], + ) -> None: + await store.insert_message( + channel_id, + "assistant", + "OPC", + content, + metadata=metadata, + message_id=message_id, + project_id=project_id, + created_at=timestamp, + ) + + try: + # These two UI-owned rows have no authoritative transcript row, but + # must still contribute to the page cursor, total, and has_more. + await insert( + "approval-card", + 1.0, + "", + { + "checkpoint_id": "checkpoint-1", + "checkpoint_type": "tool_approval", + "checkpoint_status": "pending", + }, + ) + await insert( + "legacy-notice", + 2.0, + "Legacy execution notice", + {"kind": "legacy_notice"}, + ) + + # More than the old ``limit * 8`` lookahead collapses to one final + # result surface. Raw-row pagination therefore used to hide both + # older UI-only rows and incorrectly report the end of history. + for index in range(24): + await insert( + f"result-surface-{index:02d}", + float(index + 3), + "Canonical child result", + { + "source": "engine", + "transcript_kind": "child_result", + "detail_visibility": "summary", + }, + ) + await insert( + "latest-message", + 27.0, + "Latest committed reply", + {"detail_visibility": "summary"}, + ) + for index in range(20): + await insert( + f"full-only-{index:02d}", + float(index + 28), + f"Runtime row {index}", + {"detail_visibility": "full"}, + ) + + page = await store.get_channel_messages_page_info( + channel_id, + limit=2, + detail_level="summary", + project_id=project_id, + ) + self.assertEqual(page["total_count"], 4) + self.assertTrue(page["has_more"]) + self.assertEqual( + [message["message_id"] for message in page["messages"]], + ["result-surface-00", "latest-message"], + ) + + result_message = page["messages"][0] + older = await store.get_channel_messages_page_info( + channel_id, + limit=2, + before_timestamp=result_message["created_at"], + before_message_id=result_message["message_id"], + detail_level="summary", + project_id=project_id, + ) + self.assertFalse(older["has_more"]) + self.assertEqual(older["total_count"], 4) + self.assertEqual( + [message["message_id"] for message in older["messages"]], + ["approval-card", "legacy-notice"], + ) + + compatible = await store.get_channel_messages_page( + channel_id, + limit=2, + detail_level="summary", + project_id=project_id, + ) + self.assertEqual(compatible, page["messages"]) + finally: + await db.close() + tmpdir.cleanup() + + +if __name__ == "__main__": + unittest.main()