diff --git a/clients/terminal/api.py b/clients/terminal/api.py index 741b130..f553558 100644 --- a/clients/terminal/api.py +++ b/clients/terminal/api.py @@ -81,6 +81,19 @@ return resp.json() +async def get_session_meta(session_id: str) -> dict: + """Cheap session head: counts and context size, no message bodies. + + Used to decide whether a ``session_sync`` needs a full history reload — + ``GET /sessions/{id}`` returns every message and must not be fetched just + to compare a count. + """ + client = _client() + resp = await client.get(f"/sessions/{session_id}/meta") + resp.raise_for_status() + return resp.json() + + async def get_todos(session_id: str) -> dict: """Fetch the session's current todo list (GET /sessions/{id}/todos). diff --git a/clients/terminal/tui/chat_model.py b/clients/terminal/tui/chat_model.py index 89190df..b8cf142 100644 --- a/clients/terminal/tui/chat_model.py +++ b/clients/terminal/tui/chat_model.py @@ -46,6 +46,11 @@ self._cap = cap self._current_assistant: ChatItem | None = None self._current_thinking: ChatItem | None = None + # Split point in ``items`` marking where the current turn's events land, + # set at stream_start. A socket that dies mid-turn leaves a half-written + # answer behind; on reconnect the server replays the run from scratch, + # so that tail must be dropped first. None = no turn in flight. + self._turn_start: int | None = None # Persistent terminals for the session (background dev servers, …), # updated by terminal_opened/output/closed WS events and seeded on # attach via REST. Not chat items — no bubble; the /terminals modal and @@ -86,6 +91,10 @@ excess = len(self.items) - cap if excess > 0: del self.items[:excess] + if self._turn_start is not None: + # Front-trimming shifts every index left; a turn start that fell + # off the front means the whole surviving tail is that turn. + self._turn_start = max(0, self._turn_start - excess) def _append(self, item: ChatItem) -> ChatItem: """Append an item and trim the front past the retention cap. @@ -98,10 +107,58 @@ self._trim() return item - def add_user_message(self, text: str) -> None: - self._append(ChatItem(kind="user_message", content=text)) + def add_user_message(self, text: str, client_id: str | None = None) -> None: + """Append the user's message. + + ``client_id`` ties the bubble to the server's delivery acknowledgement: + without one the server sends no ack at all, so the bubble cannot be + marked lost. + """ + meta = {"client_id": client_id} if client_id else {} + self._append(ChatItem(kind="user_message", content=text, meta=meta)) self._current_assistant = None + def mark_message_failed(self, client_id: str, reason: str) -> bool: + """Flag the user bubble sent as ``client_id`` as not delivered. + + Returns whether a bubble matched. The first reason wins: a message that + was already marked 'unconfirmed' is not rewritten as 'dropped' (dropped + is the more specific story, but the user has already been told one). + """ + for item in reversed(self.items): + if item.kind != "user_message" or item.meta.get("client_id") != client_id: + continue + item.meta.setdefault("fail_reason", reason) + item.meta["queued"] = False + return True + return False + + def mark_message_queued(self, client_id: str) -> bool: + """Show a queued message as waiting behind the active run.""" + for item in reversed(self.items): + if item.kind != "user_message" or item.meta.get("client_id") != client_id: + continue + if not item.meta.get("fail_reason"): + item.meta["queued"] = True + return True + return False + return False + + def drop_unfinished_turn(self) -> bool: + """Discard the items of a turn the dead socket never finished. + + Returns whether anything was dropped. Called on reconnect, before the + server's replay of a live run or its session_sync, so the turn is shown + exactly once. + """ + if self._turn_start is None: + return False + del self.items[self._turn_start:] + self._turn_start = None + self._current_assistant = None + self._current_thinking = None + return True + def load_history(self, messages: list[dict]) -> None: """Replace the item list with the session's stored messages. @@ -115,6 +172,7 @@ self.items.clear() self._current_assistant = None self._current_thinking = None + self._turn_start = None # tool_call_id -> tool arguments, so a later ``role=="tool"`` message can # recover the args the assistant sent (the persisted tool message only @@ -190,6 +248,9 @@ # reasoning together. self._current_assistant = None self._current_thinking = None + # Everything appended from here on belongs to this turn; a reconnect + # mid-turn truncates back to this point before the replay arrives. + self._turn_start = len(self.items) return None if msg_type == "thinking_delta": @@ -238,6 +299,12 @@ return item if msg_type == "error": + # A failed turn is over: nothing left to truncate if the socket + # drops afterwards, and a dangling pointer would make the next + # reconnect delete a completed exchange. + self._turn_start = None + self._current_assistant = None + self._current_thinking = None item = ChatItem(kind="error", content=msg.get("message", "")) self._append(item) return item @@ -289,6 +356,7 @@ if msg_type == "stream_stopped": self._current_assistant = None self._current_thinking = None + self._turn_start = None item = ChatItem(kind="status", content="Generation stopped by user") self._append(item) return item @@ -312,6 +380,7 @@ ) self._current_assistant = None self._current_thinking = None + self._turn_start = None return None if msg_type == "context_compressed": @@ -329,7 +398,22 @@ self._append(item) return item - if msg_type in ("heartbeat", "session_sync"): + if msg_type in ( + "heartbeat", + "session_sync", + "pong", + # Delivery/queue protocol frames: the app consumes them (it owns the + # ack timers and the bridge queue) — they are not chat items. Before + # this they fell through to the debug-status path and littered the + # transcript with raw JSON. + "message_accepted", + "message_queued", + "message_dropped", + # Replay brackets around a reattached run: the events between them + # are ordinary frames already handled above. + "replay_start", + "replay_end", + ): return None if msg_type == "terminal_opened": diff --git a/clients/terminal/tui/events.py b/clients/terminal/tui/events.py index bff7729..d9170e1 100644 --- a/clients/terminal/tui/events.py +++ b/clients/terminal/tui/events.py @@ -22,6 +22,42 @@ super().__init__() +class WsResumed(Message): + """A fresh socket replaced one that had already been connected. + + The server replays a still-live run from its start, so whatever the dead + socket left half-written in the transcript must be dropped before the + replay events arrive — otherwise the turn is shown twice. + """ + + +class MessageWritten(Message): + """A user message was written to a live socket. + + The delivery deadline starts here, not at submit: until the write there is + nothing for the server to acknowledge, and a payload parked in the bridge's + queue is not lost. + """ + + def __init__(self, client_id: str) -> None: + self.client_id = client_id + super().__init__() + + +class SessionUnavailable(Message): + """The server closed the socket with a code retrying cannot fix. + + ``4004`` means the session no longer exists; ``4003`` means access was + denied. Reconnecting only repeats the refusal, so the bridge stops and the + app tells the user what to do instead. + """ + + def __init__(self, code: int, reason: str = "") -> None: + self.code = code + self.reason = reason + super().__init__() + + class UserSubmitted(Message): """User pressed Enter in the input box.""" diff --git a/clients/terminal/tui/renderers/message.py b/clients/terminal/tui/renderers/message.py index 72c8f34..53d1a9c 100644 --- a/clients/terminal/tui/renderers/message.py +++ b/clients/terminal/tui/renderers/message.py @@ -20,7 +20,13 @@ class UserMessageRenderer(ContentRenderer): - """Render a user message bubble.""" + """Render a user message bubble. + + A bubble carries its delivery state: ``queued`` when the server parked it + behind an active run, ``fail_reason`` when it was never confirmed or was + evicted from the queue. Without that the message simply looks sent, which + is exactly the failure the ack protocol exists to expose. + """ def accepts(self, msg: dict) -> bool: return msg.get("type") == "user_message" @@ -28,11 +34,26 @@ def render(self, msg: dict) -> RenderableType: theme = get_active_theme() text = msg.get("content", "") + body = Text(text, style=_hex_style(theme.text)) + title = "You" + border = _hex_style(theme.user_bubble) + reason = msg.get("fail_reason") + if reason: + note = { + "dropped": "dropped from the server's queue — it was never run", + "unconfirmed": "the server never confirmed delivery", + }.get(reason, "delivery failed") + body.append("\n\n", style=_hex_style(theme.text)) + body.append(note, style=_hex_style(theme.error)) + title = "You · not delivered" + border = _hex_style(theme.error) + elif msg.get("queued"): + title = "You · queued" return Panel( - Text(text, style=_hex_style(theme.text)), - title="You", + body, + title=title, title_align="left", - border_style=_hex_style(theme.user_bubble), + border_style=border, box=ROUNDED, ) diff --git a/clients/terminal/tui/tui_app.py b/clients/terminal/tui/tui_app.py index 47e126e..25800b1 100644 --- a/clients/terminal/tui/tui_app.py +++ b/clients/terminal/tui/tui_app.py @@ -2,11 +2,13 @@ from __future__ import annotations +import uuid from pathlib import Path from textual.app import App, ComposeResult from textual.binding import Binding from textual.containers import Horizontal, Vertical +from textual.timer import Timer from clients.terminal import api from clients.terminal.config import settings @@ -14,8 +16,11 @@ from clients.terminal.tui.context import TuiContext from clients.terminal.tui.events import ( ConnectionStatusChanged, + MessageWritten, + SessionUnavailable, UserSubmitted, WsEvent, + WsResumed, ) from clients.terminal.tui.file_refs import FileRefResolver from clients.terminal.tui.shell_runner import run_shell_command @@ -26,6 +31,11 @@ from clients.terminal.tui.widgets import ChatPanel, InputBox, StatusBar, StatusPanel, TodoPanel from clients.terminal.tui.ws_bridge import WsBridge +# How long a written message may wait for the server's delivery ack. Writing to +# an open socket proves only that the socket accepted the bytes — the server may +# still have dropped the frame, and the close event can arrive much later. +ACK_TIMEOUT_SECONDS = 15.0 + class NaviCodeTui(App): """OpenCode-inspired terminal UI for Navi.""" @@ -111,6 +121,15 @@ self._requested_profile_id = profile_id self._force_new_session = new_session self._streaming = False + # client_id → Textual Timer that marks the bubble undelivered if no ack + # arrives. Armed when the message is written (MessageWritten), cancelled + # by message_accepted/message_queued. + self._pending_acks: dict[str, Timer] = {} + # (message_count, context_token_count) as of the transcript on screen. + # A session_sync whose meta differs means the server knows more than we + # show and a reload is due; matching values mean the reload is a no-op. + self._history_token: tuple | None = None + self._history_check_running = False def compose(self) -> ComposeResult: with Horizontal(): @@ -205,12 +224,24 @@ async def attach_session(self, session_id: str) -> None: self._ctx.session_id = session_id + # Delivery deadlines belong to bubbles in the transcript being replaced. + self._cancel_all_acks() + self._history_token = None # New session → fresh per-session message history (Up/Down recall is # in-memory per session; not synced to the server). if self._input_box: self._input_box.reset_history() history: list[dict] = [] session: dict = {} + # Baseline for the session_sync check. Read the cheap head BEFORE the + # transcript: in this order the token can only be older than what is on + # screen, so a row that lands between the two calls makes the first sync + # reload (safe) instead of hiding a message. + try: + meta = await api.get_session_meta(session_id) + self._history_token = (meta.get("message_count"), meta.get("context_token_count")) + except Exception: + self._history_token = None try: session = await api.get_session(session_id) self._ctx.profile_id = session.get("profile_id") or settings.default_profile_id @@ -284,7 +315,10 @@ return resolved = FileRefResolver().resolve(text) - self._chat_panel.add_user_message(resolved.prompt) + # A UUID lets the server tie its ack to this bubble. Without it the + # server sends no ack and a message that never arrived would look sent. + client_id = uuid.uuid4().hex + self._chat_panel.add_user_message(resolved.prompt, client_id=client_id) # Record the raw typed text in the per-session message history (recall # via Up/Down on an empty input). Plain messages only — slash commands # and !shell are handled above and not remembered. @@ -304,7 +338,13 @@ # is delivered after the socket comes back — not dropped. Only show the # "not connected" error when there is no bridge at all. if self._bridge: - self._bridge.client.enqueue(resolved.to_message()) + self._bridge.client.enqueue( + { + "type": "message", + "content": resolved.to_message(), + "client_id": client_id, + } + ) else: self._chat_panel.handle_ws_event( {"type": "error", "message": "Not connected to a session"} @@ -421,6 +461,29 @@ # locally-measured value. self._status_bar.elapsed_stop() self._update_footer_bindings() + elif msg_type == "message_accepted": + # The server owns the message now; its delivery deadline ends. + self._cancel_ack(payload.get("client_id")) + return + elif msg_type == "message_queued": + client_id = payload.get("client_id") + self._cancel_ack(client_id) + if client_id: + self._chat_panel.mark_message_queued(client_id) + return + elif msg_type == "message_dropped": + # Queue overflow evicted these messages — they will never run, so + # their bubbles must stop looking queued (or silently pending). + for client_id in payload.get("client_ids") or []: + self._cancel_ack(client_id) + self._chat_panel.mark_message_failed(client_id, "dropped") + return + elif msg_type == "session_sync": + # Sent on every connect and when a reattached run finishes. A full + # history fetch on every one of those is what made opening a + # session cost two transcripts; check the cheap head first. + self._schedule_history_check() + return elif msg_type == "model_info": # The model that actually served this turn (resolved by the backend, # may differ from the configured priority list when a model was down). @@ -497,8 +560,142 @@ # A dropped connection mid-turn will never deliver stream_end, so stop # the spinner here rather than leave it spinning forever. if not event.connected: + self._streaming = False + self._input_box.set_placeholder("Ask anything...") self._status_bar.activity_stop() self._status_bar.elapsed_stop() + self._update_footer_bindings() + + def on_message_written(self, event: MessageWritten) -> None: + """A user message reached a live socket — start its delivery deadline.""" + self._arm_ack(event.client_id) + + def on_ws_resumed(self, event: WsResumed) -> None: + """A new socket replaced one that had been connected. + + The server replays a still-live run from its start, so whatever the dead + socket left half-written in the transcript must go first — otherwise the + turn appears twice. + """ + if self._chat_panel.drop_unfinished_turn(): + self._streaming = False + self._input_box.set_placeholder("Ask anything...") + self._status_bar.activity_stop() + self._status_bar.elapsed_stop() + self._update_footer_bindings() + + def on_session_unavailable(self, event: SessionUnavailable) -> None: + """The server closed with a code retrying cannot fix.""" + if event.code == 4004: + hint = ( + "This session no longer exists. " + "Start a new one with /new or pick another with /sessions." + ) + elif event.code == 4003: + hint = ( + "Access denied for this session. " + "Sign in again, or pick another session with /sessions." + ) + else: + hint = f"The server closed the connection (code {event.code})." + if event.reason: + hint += f" Server said: {event.reason}" + self._chat_panel.handle_ws_event({"type": "error", "message": hint}) + self._streaming = False + self._input_box.set_placeholder("Ask anything...") + self._status_bar.activity_stop() + self._status_bar.elapsed_stop() + self._update_footer_bindings() + self._cancel_all_acks() + bridge, self._bridge = self._bridge, None + if bridge is not None: + # The supervisor already gave up. Stopping releases the input loop, + # which is otherwise parked forever on a socket that never returns. + self.run_worker(bridge.stop()) + + # ── delivery acknowledgement ───────────────────────────────────────────── + + def _arm_ack(self, client_id: str) -> None: + if not client_id: + return + self._cancel_ack(client_id) + self._pending_acks[client_id] = self.set_timer( + ACK_TIMEOUT_SECONDS, lambda: self._ack_expired(client_id) + ) + + def _cancel_ack(self, client_id: str | None) -> None: + if not client_id: + return + timer = self._pending_acks.pop(client_id, None) + if timer is not None: + timer.stop() + + def _cancel_all_acks(self) -> None: + for timer in self._pending_acks.values(): + timer.stop() + self._pending_acks.clear() + + def _ack_expired(self, client_id: str) -> None: + self._pending_acks.pop(client_id, None) + # The server reads a frame sent during an active run only after that run + # ends, so silence while a turn streams means parked, not lost. The same + # goes for a socket that just died: the message may still be on the + # server, and the reconnect either replays the run or syncs history. + disconnected = self._bridge is not None and not self._bridge.connected + if self._streaming or disconnected: + self._arm_ack(client_id) + return + self._chat_panel.mark_message_failed(client_id, "unconfirmed") + + # ── session_sync → cheap history check ─────────────────────────────────── + + def _schedule_history_check(self) -> None: + session_id = self._ctx.session_id + if self._history_check_running or not session_id or self._bridge is None: + return + # A reload replaces the transcript wholesale. It must not race a live + # turn, a message still waiting for its ack, or one still queued in the + # bridge — those own bubbles the server has not recorded yet. + if self._streaming or self._pending_acks or self._bridge.has_pending_input: + return + self.run_worker(self._check_history_worker(session_id), group="history-sync") + + async def _check_history_worker(self, session_id: str) -> None: + self._history_check_running = True + try: + try: + # One cheap head, no message bodies: the count is enough to + # decide whether the transcript on screen is still the truth. + meta = await api.get_session_meta(session_id) + except Exception: + return + token = (meta.get("message_count"), meta.get("context_token_count")) + if token == self._history_token: + return + # The await is a yield point: the user may have switched sessions, + # a turn may have started, or a message may be waiting for its ack. + if not self._reload_is_safe(session_id): + return + try: + session = await api.get_session(session_id) + except Exception: + return + if not self._reload_is_safe(session_id): + return + self._chat_panel.load_history(session.get("messages") or []) + self._history_token = token + self._status_bar.set_context( + session.get("context_token_count"), session.get("max_context_tokens") + ) + finally: + self._history_check_running = False + + def _reload_is_safe(self, session_id: str) -> bool: + return ( + self._ctx.session_id == session_id + and not self._streaming + and not self._pending_acks + ) def action_command_palette(self) -> None: registry = get_registry() @@ -564,10 +761,12 @@ self.refresh_bindings() async def action_quit(self) -> None: + self._cancel_all_acks() if self._bridge: await self._bridge.stop() self.exit() async def on_unmount(self) -> None: + self._cancel_all_acks() if self._bridge: await self._bridge.stop() diff --git a/clients/terminal/tui/widgets/chat_panel.py b/clients/terminal/tui/widgets/chat_panel.py index 7558ad5..d41d1b4 100644 --- a/clients/terminal/tui/widgets/chat_panel.py +++ b/clients/terminal/tui/widgets/chat_panel.py @@ -36,7 +36,12 @@ """Map a ChatItem to the msg dict its renderer expects.""" kind = item.kind if kind == "user_message": - return {"type": "user_message", "content": item.content} + return { + "type": "user_message", + "content": item.content, + "queued": item.meta.get("queued", False), + "fail_reason": item.meta.get("fail_reason"), + } if kind == "assistant_message": return {"type": "assistant_message", "content": item.content} if kind == "thinking_block": @@ -502,10 +507,30 @@ def compose(self) -> ComposeResult: yield self._hint_view - def add_user_message(self, text: str) -> None: - self._model.add_user_message(text) + def add_user_message(self, text: str, client_id: str | None = None) -> None: + self._model.add_user_message(text, client_id=client_id) self._sync() + def mark_message_failed(self, client_id: str, reason: str) -> bool: + """Mark the bubble sent as ``client_id`` as not delivered and repaint it.""" + found = self._model.mark_message_failed(client_id, reason) + if found: + self._sync() + return found + + def mark_message_queued(self, client_id: str) -> bool: + found = self._model.mark_message_queued(client_id) + if found: + self._sync() + return found + + def drop_unfinished_turn(self) -> bool: + """Drop the half-written turn a dead socket left behind.""" + dropped = self._model.drop_unfinished_turn() + if dropped: + self._sync() + return dropped + def load_history(self, messages: list[dict]) -> None: """Populate the chat panel with a session's stored messages on resume.""" self._model.load_history(messages) @@ -529,6 +554,7 @@ self._model.items.clear() self._model._current_assistant = None self._model._current_thinking = None + self._model._turn_start = None self._rebuild_all() def _max_visible_items(self) -> int: diff --git a/clients/terminal/tui/ws_bridge.py b/clients/terminal/tui/ws_bridge.py index 410cb0f..85ee807 100644 --- a/clients/terminal/tui/ws_bridge.py +++ b/clients/terminal/tui/ws_bridge.py @@ -6,6 +6,10 @@ the status panel flips to ``reconnecting…`` and the next message the user sends is held in the input queue until a fresh socket is live, so a brief blip doesn't eat their input. + +Two close codes end that loop instead of feeding it: 4004 (session gone) and +4003 (access denied) are answered by reconnecting with the same refusal, so the +bridge stops and posts ``SessionUnavailable`` for the app to explain. """ from __future__ import annotations @@ -14,19 +18,32 @@ import json from pathlib import Path +import websockets from textual.app import App -from clients.terminal.tui.events import ConnectionStatusChanged, WsEvent +from clients.terminal.tui.events import ( + ConnectionStatusChanged, + MessageWritten, + SessionUnavailable, + WsEvent, + WsResumed, +) from clients.terminal.ws_client import NaviWebSocketClient +# Application close codes retrying cannot fix: 4004 — the session does not +# exist (deleted, or the id is a typo); 4003 — access denied (anonymous, +# another user's session, admin-only profile). Reconnecting repeats the same +# refusal forever, so the supervisor stops and the app explains what to do. +_FATAL_CLOSE_CODES = frozenset({4003, 4004}) + class WsBridge: """Wraps NaviWebSocketClient and forwards events to a Textual App. ``start`` launches a supervisor that connects and runs the receive loop; - when the socket dies it backs off and reconnects indefinitely. ``stop`` - cancels everything promptly (it's the only thing that ends the supervisor — - a dropped connection just triggers another reconnect attempt). + when the socket dies it backs off and reconnects — unless the server closed + with a code that retrying cannot fix. ``stop`` cancels everything promptly + and is the normal way the supervisor ends. """ def __init__( @@ -62,6 +79,16 @@ def connected(self) -> bool: return self._connected + @property + def has_pending_input(self) -> bool: + """True while a submitted message is still waiting to be written. + + A history reload must not race it: replacing the transcript while a + message sits in this queue would drop any ack/delivery state keyed to + the bubbles it is about to produce. + """ + return not self._client._input_queue.empty() + async def start(self) -> None: """Launch the supervisor + input loop. The supervisor does the first connect (and retries on failure), so ``start`` itself never raises — @@ -126,15 +153,32 @@ self._attempt = 0 self._set_connected(True) self._notify(True, "") + # Whatever the dead socket left half-written is about to be + # contradicted: the server replays a live run from its start, or + # answers with session_sync for a finished one. Posted before the + # receive loop starts, so it reaches the app ahead of any frame. + self._post(WsResumed()) try: - await self._receive_until_closed() + code, reason = await self._receive_until_closed() except Exception: - pass + code, reason = None, "" if self._stopping: break self._set_connected(False) + + if code in _FATAL_CLOSE_CODES: + # The server has already said no, and will say it again: stop + # reconnecting and let the app tell the user what to do. + self._notify(False, "") + self._post(SessionUnavailable(code, reason)) + try: + await self._client.close() + except Exception: + pass + return + self._notify(False, "reconnecting…") # Drop the dead socket before reconnecting so connect() is clean. try: @@ -143,16 +187,31 @@ pass await self._backoff() - async def _receive_until_closed(self) -> None: + async def _receive_until_closed(self) -> tuple[int | None, str]: + """Forward frames until the socket ends; return its close code/reason. + + The code matters: only a handful mean "do not retry". A plain drop + (1006, 1001, network gone) returns ``None`` and the supervisor + reconnects as before. + """ ws = self._client._ws if ws is None: - return - async for raw in ws: - try: - msg = json.loads(raw) - except json.JSONDecodeError: - continue - self._post(WsEvent(msg)) + return None, "" + try: + async for raw in ws: + try: + msg = json.loads(raw) + except json.JSONDecodeError: + continue + self._post(WsEvent(msg)) + except websockets.exceptions.ConnectionClosed as exc: + rcvd = getattr(exc, "rcvd", None) + if rcvd is not None: + return getattr(rcvd, "code", None), getattr(rcvd, "reason", "") or "" + return getattr(ws, "close_code", None), getattr(ws, "close_reason", "") or "" + except Exception: + return None, "" + return getattr(ws, "close_code", None), getattr(ws, "close_reason", "") or "" async def _input_loop(self) -> None: """Drain the client's input queue into the live socket. @@ -186,6 +245,13 @@ await self._client.close() except Exception: pass + continue + # The bytes are on a live socket. That is the only moment at which a + # delivery deadline means anything: a payload still parked in this + # queue has not been handed over yet and must not time out. + client_id = content.get("client_id") if isinstance(content, dict) else None + if isinstance(client_id, str) and client_id: + self._post(MessageWritten(client_id)) async def _backoff(self) -> None: delay = min(self._backoff_max, self._backoff_min * (2 ** self._attempt)) diff --git a/docs/navi_code_cli.md b/docs/navi_code_cli.md index b203cff..b16e62d 100644 --- a/docs/navi_code_cli.md +++ b/docs/navi_code_cli.md @@ -96,6 +96,11 @@ - **Ограничение стоимости рендера.** Видимых элементов ограничено (`max_visible_items`); более старые сворачиваются в подсказку «… N earlier messages not shown». Рендер кэшируется по сигнатуре. - **История при resume.** При возобновлении/переключении сессии история сообщений подгружается в чат через REST. - **Auto-reconnect.** При обрыве WebSocket переподключается с экспоненциальным backoff (1с→30с); отправленные во время обрыва сообщения переотправляются, в `StatusPanel` показывается «reconnecting…». +- **Переподключение без дублей.** На каждом успешном connect мост шлёт `WsResumed`; приложение выбрасывает всё, что недописанный ход успел добавить (всё после `ChatModel._turn_start`), до прихода replay — иначе живой ран, который сервер переигрывает с начала, показался бы дважды. Завершённые ходы не трогаются. +- **Фатальные коды закрытия.** `4004` (сессии нет) и `4003` (доступ запрещён) не ретраятся: мост останавливается и шлёт `SessionUnavailable`, приложение пишет ошибку с подсказкой (`/new` или `/sessions`) и освобождает мост. Остальные коды (1006 и т.п.) ретраятся как раньше. +- **Подтверждение доставки.** Сообщение уходит с `client_id` (uuid). Дедлайн 15 с стартует в момент записи в живой сокет (`MessageWritten`), а не при отправке в очередь; `message_accepted` / `message_queued` его снимают. Если дедлайн истёк во время активного хода или пока сокет переподключается, он взводится заново — сервер читает такой кадр только после текущего хода, а сообщение на умершем сокете может ещё жить на сервере. Иначе пузырь помечается «not delivered». `message_dropped` (переполнение очереди) помечает вытесненные сообщения как потерянные, `message_queued` — как ожидающие. +- **`session_sync` без лишней загрузки.** Вместо полной истории (`GET /sessions/{id}`) сначала берётся дешёвый `GET /sessions/{id}/meta`; перезагрузка происходит только если изменились `message_count`/`context_token_count`, причём не во время стрима, не при ожидающих подтверждения сообщениях и не при непустой очереди моста. +- Служебные кадры (`message_accepted`, `message_queued`, `message_dropped`, `replay_start`, `replay_end`, `pong`) в чат не выводятся. ### Карточки в чате diff --git a/docs/websocket.md b/docs/websocket.md index c22e678..e10ce84 100644 --- a/docs/websocket.md +++ b/docs/websocket.md @@ -8,6 +8,8 @@ The session must exist before connecting (create via `POST /sessions`). If the session is not found, the WebSocket closes with code `4004`. Auth failures (anonymous denied in auth-enabled mode, or access denied to a session the user does not own) close with code `4003`. +Both codes are final: reconnecting against the same session cannot succeed, so a client must stop retrying and tell the user why (the web client shows a fatal banner and offers sign-in instead of the reconnect loop). + ### Authentication **Browser clients**: cookies are sent automatically during the WebSocket handshake. The server resolves the user from the `navi_auth_session` cookie. @@ -64,6 +66,7 @@ "type": "message", "content": "user text", "cwd": "/home/user/projects/my-app", + "client_id": "6f1c0b1e-…", "images": ["base64string", ...], "files": [{"name": "file.pdf", "path": "/abs/path"}] } @@ -71,6 +74,7 @@ - `type` is either `"message"` (a user turn) or `"compact"` (force context compression now — see [Forced compression](#forced-compression) below). Any other type returns an error frame. - `content` is required for `"message"` and must be non-empty. +- `client_id`: optional client-chosen id (the web client and the TUI send a UUID). The server echoes it in `message_accepted` (run started) or in the `client_id` field of `message_queued` (run queued behind another). Opt-in: without it the frames are unchanged, which is what older clients rely on. A write to a socket that looks open proves nothing about delivery — this echo is the only end-to-end confirmation, so a client that sent one can mark the bubble as not delivered when no answer arrives. - `cwd`: optional absolute path of the client's current working directory. Recommended for terminal clients; the server treats it as the project root and resolves relative paths in the file tools, `terminal`, and `code_exec` against it. Stored per-session in `session_metadata["cwd"]` and injected into the LLM system context. - `images`: optional list of base64-encoded images (data URIs accepted; the `data:...;base64,` prefix is stripped server-side). **Limits:** max 8 images per message, 50 MB total payload (across all images). Excess is rejected with a WebSocket error. - `files`: optional list of uploaded file references (appended to content as `[Uploaded files on disk: ...]`). @@ -97,7 +101,7 @@ The TUI binds this to `/compact` (`Ctrl+X C`). ### Concurrent run guard -Only one agent run may be active per session at a time. If a second message arrives while a run is already in progress (either a WebSocket run or a headless recall), the server **queues** it instead of erroring and replies with a `message_queued` frame (see below). Queued messages execute back-to-back on the same socket once the active run finishes (drained in submit order, each as a normal streaming turn); a max of `message_queue_max` (default 5) are retained — when full, the oldest queued message is dropped silently and `dropped_total` in the frame grows. If the socket disconnects while messages are still queued, the server runs them headlessly (turn-completion push still fires). +Only one agent run may be active per session at a time. If a second message arrives while a run is already in progress (either a WebSocket run or a headless recall), the server **queues** it instead of erroring and replies with a `message_queued` frame (see below). Queued messages execute back-to-back on the same socket once the active run finishes (drained in submit order, each as a normal streaming turn); a max of `message_queue_max` (default 5) are retained — when full, the oldest queued message is evicted and `dropped_total` in the frame grows. When the evicted message carried a `client_id`, every socket watching the session also gets `message_dropped` with that id, so its sender can mark the bubble as lost instead of leaving it queued forever. If the socket disconnects while messages are still queued, the server runs them headlessly (turn-completion push still fires). **When the guard is reachable.** The WebSocket read loop is sequential: the handler awaits the whole agent run before reading the next frame, so a message sent on the *same* socket during a run is read only after the run ends (it then executes immediately, without a queue hop or a `message_queued` frame — nothing is lost). The queue path is therefore reachable only when a run is started outside the socket's own read loop: a second socket/tab on the same session, or a headless recall running concurrently. Messages sent on the same socket during a run are executed back-to-back after it finishes. @@ -113,9 +117,11 @@ |---|---| | `{"type": "stream_start"}` | Before any agent output begins | | `{"type": "stream_end", "content": "...", "context_tokens": N, "max_context_tokens": N, "elapsed_seconds": N, "tool_call_count": N, "token_count": N, "message_index": N}` | After final text, before workers | -| `{"type": "stream_stopped"}` | If the user stopped generation | +| `{"type": "stream_stopped", "message_index": N}` | If the user stopped generation | | `{"type": "error", "message": "..."}` | On any unhandled error | +`message_index` (both end frames, nullable) is the **global display rank** of the turn's first assistant row — the same value `GET /sessions/{id}/messages/history` stamps as `metadata.display_index`. Clients build the assistant block's stable id (`h_`) and the message-feedback key from it, so the live turn and the same turn after a history reload agree. A store that cannot answer sends `null`; clients then fall back to counting assistant blocks locally. + ### Thinking (reasoning) | Frame | When | @@ -166,7 +172,9 @@ | `{"type": "terminal_output", "terminal_name": "...", "stream": "stdout\|stderr", "delta": "..."}` | Streamed stdout/stderr chunk from a background persistent terminal | | `{"type": "terminal_closed", "terminal_name": "...", "reason": "explicit\|idle_timeout\|error\|shutdown\|session_ended"}` | A persistent terminal session ended | | `{"type": "task_update", "task_id": "bt-...", "session_id": "...", "tool": "...", "status": "running\|completed\|failed\|cancelled", "result_preview": "...", "parent_tool_call_id": "...", "started_at": "...", "finished_at": "...", "subagent_tokens": N}` | A background task (tool call detached with `background: true`, see `docs/tasks.md`) changed state. Out-of-band: NOT part of the run's replay buffer. `parent_tool_call_id` links it to the tool card that spawned it. | -| `{"type": "message_queued", "position": N, "queue_len": N, "max": N, "dropped_total": N}` | The user's message arrived while a run was active and was queued (not an error). It will execute after the current run finishes; `dropped_total` counts messages dropped when the queue was full. | +| `{"type": "message_accepted", "client_id": "..."}` | The server took ownership of a message that carried `client_id` and is starting its run. Sent before the first event, so a slow turn never looks like a lost message. Absent for messages without `client_id`. | +| `{"type": "message_queued", "position": N, "queue_len": N, "max": N, "dropped_total": N, "client_id": "..."}` | The user's message arrived while a run was active and was queued (not an error). It will execute after the current run finishes; `dropped_total` counts messages dropped when the queue was full, and `client_id` echoes the sender's id (nullable). | +| `{"type": "message_dropped", "client_ids": ["..."]}` | The queue overflowed and these messages were evicted — they will never run. Broadcast to every socket watching the session, so the tab that sent one can mark its bubble as lost. | | `{"type": "heartbeat"}` | Periodic keepalive after 20 s of server silence — mid-run and on an idle socket alike. Also the client's liveness signal: silence past ~45 s means the socket is half-open | | `{"type": "pong", "ts": N}` | Answer to a client `ping`, `ts` echoed untouched | | `{"type": "session_sync", "session_id": "...", "profile_id": "..."}` | Client should reload session history from REST (`GET /sessions/{id}`) | @@ -220,7 +228,7 @@ If the client reconnects after the run has already finished, there is no active `_AgentRun`, so it receives only `session_sync` and must fetch history via REST. -**On the client side**, a socket that dies mid-stream leaves a half-written assistant message behind. That message must be dropped as soon as a new socket opens, before `session_sync` is handled: the server either replays the still-live run from scratch or answers with `session_sync` for a finished one, and a client that keeps the stale message (or treats itself as "still streaming") ignores both. The web client does exactly this in `useWebSocket.js` (`chat.dropStaleStream()` on `open`) and `chat.js` (`dropStaleStream`). +**On the client side**, a socket that dies mid-stream leaves a half-written assistant message behind. That message must be dropped as soon as a new socket opens, before `session_sync` is handled: the server either replays the still-live run from scratch or answers with `session_sync` for a finished one, and a client that keeps the stale message (or treats itself as "still streaming") ignores both. The web client does exactly this in `useWebSocket.js` (`chat.dropStaleStream()` on `open`) and `chat.js` (`dropStaleStream`); the TUI drops everything the in-flight turn had appended (everything after `ChatModel._turn_start`) when `WsBridge` posts `WsResumed` on a successful connect. --- diff --git a/navi/api/websocket.py b/navi/api/websocket.py index 3862111..750bcd9 100644 --- a/navi/api/websocket.py +++ b/navi/api/websocket.py @@ -1,7 +1,7 @@ """WebSocket endpoint for streaming agent responses. Protocol (client -> server): - {"type": "message", "content": "...", "cwd": "..."} + {"type": "message", "content": "...", "cwd": "...", "client_id": "..."} {"type": "compact"} # force context compression now {"type": "form_submit", "form_id": "...", "values": {...}} # navi_ui form submit {"type": "skill_proposal", "proposal_id": "...", "action": "accept"|"reject"} @@ -19,8 +19,10 @@ {"type": "stream_delta", "delta": "..."} {"type": "tool_started", "tool": "...", "args": {...}, "is_subagent": bool} {"type": "tool_call", "tool": "...", "args": {...}, "result": "...", "success": bool, "is_subagent": bool} - {"type": "stream_end", "content": "..."} - {"type": "message_queued", "position": int, "queue_len": int, "max": int, "dropped_total": int} + {"type": "stream_end", "content": "...", "message_index": int | null} + {"type": "message_accepted", "client_id": "..."} # only when the client sent one + {"type": "message_queued", "position": int, "queue_len": int, "max": int, "dropped_total": int, "client_id": str | null} + {"type": "message_dropped", "client_ids": ["..."]} # queue overflow: these will never run {"type": "context_compressed"} {"type": "skill_proposal_decided", "proposal_id": "...", "status": "...", "skill_id": null, "error": ""} {"type": "error", "message": "..."} @@ -118,6 +120,7 @@ session_store: SessionStore, user: User | None, cwd: str | None = None, + client_id: str | None = None, ) -> bool: """Start an agent run, stream its events, then drain queued messages. @@ -125,6 +128,11 @@ (``message_queued`` wire event) instead of erroring; once the active run finishes on this socket, queued messages execute back-to-back. + ``client_id`` is the client's own id for the message (opt-in). It is echoed + back in ``message_accepted`` / ``message_queued`` so the client can tell + "the server has it" from "it was lost on the way" — a write to a socket that + looks open proves nothing about delivery. + Returns True if the client stayed connected, False otherwise. """ connected, ran = await _run_single_message( @@ -139,6 +147,7 @@ session_store=session_store, user=user, cwd=cwd, + client_id=client_id, ) # Messages queued while the run(s) above were active — execute them in # order on the same socket. Entries carry the submitting user so each @@ -179,6 +188,7 @@ session_store: SessionStore, user: User | None, cwd: str | None = None, + client_id: str | None = None, ) -> tuple[bool, bool]: """Run one user message through the agent and stream it to the client. @@ -186,6 +196,12 @@ queued on a busy session instead of executing. When a run is already in progress the message is queued and ``message_queued`` is emitted (socket stays alive — caller keeps reading). + + When ``client_id`` is given the server acknowledges the message as soon as + it has taken ownership of it — ``message_accepted`` for a run, the + ``client_id`` field of ``message_queued`` for a queued one. The ack goes + out before the run starts (which can take minutes), so a client waiting for + it never mistakes a slow turn for a lost message. """ run = None queue: asyncio.Queue | None = None @@ -201,6 +217,7 @@ "hidden": hidden, "user": user, "cwd": cwd, + "client_id": client_id, "queued_at": datetime.now(timezone.utc).isoformat(), } qinfo = orchestrator.queue_message(session_id, entry) @@ -211,7 +228,16 @@ "queue_len": qinfo["queue_len"], "max": settings.message_queue_max, "dropped_total": qinfo["dropped_total"], + "client_id": client_id, }) + # The evicted oldest message may have been sent by another tab: tell + # every watcher, not just this socket, so that tab's bubble stops + # looking queued. It will never run. + if qinfo["dropped_client_ids"]: + await orchestrator.notify_session(session_id, { + "type": "message_dropped", + "client_ids": qinfo["dropped_client_ids"], + }) return (True, False) # socket alive; the active run will drain # Register run and subscribe before starting the task so we never @@ -222,6 +248,9 @@ run.owner_socket = websocket queue = run.subscribe() + if client_id: + await websocket.send_json({"type": "message_accepted", "client_id": client_id}) + # Set user context for tool sandboxing (inherited by the agent task) from navi.tools._internal.base import current_user_id as _uid_var, current_user_role as _role_var, current_user_info as _uinfo_var if user is not None: @@ -661,6 +690,13 @@ user_content = user_content + f"\n\n[Uploaded files on disk:\n{file_lines}]" client_cwd = data.get("cwd") + # Optional: the client's own id for this message. Echoed back in + # `message_accepted` so the client can distinguish "the server has + # it" from "the frame never arrived". Absent in older clients — the + # ack is opt-in and their stream is unchanged. + client_id = data.get("client_id") + if not isinstance(client_id, str) or not client_id: + client_id = None connected = await _start_agent_run( session_id=session_id, @@ -674,6 +710,7 @@ session_store=session_store, user=user, cwd=client_cwd, + client_id=client_id, ) if not connected: diff --git a/navi/core/agent/streaming.py b/navi/core/agent/streaming.py index b3bc48f..a4b714b 100644 --- a/navi/core/agent/streaming.py +++ b/navi/core/agent/streaming.py @@ -1,6 +1,7 @@ """The streaming turn loop: model rounds, tool dispatch and the final intercept.""" import asyncio +import inspect import time from datetime import datetime, timezone from pathlib import Path @@ -235,6 +236,11 @@ # nudge from the intercept site to the next turn's context). pending_final_nudge: Message | None = None + # First assistant row this turn wrote. Its global display rank is what + # the client id (`h_`) and the feedback key are built from, so it + # is reported in stream_end / stream_stopped. + turn_first_assistant: Message | None = None + ctx_task = asyncio.create_task(self._ctx_builder._collect_context_injections(profile)) mem_facts_task = asyncio.create_task( self._ctx_builder._memory_facts_msg( @@ -357,6 +363,8 @@ assistant_msg = Message(role="assistant", content=error_text) session.context.append(assistant_msg) session.messages.append(assistant_msg) + if turn_first_assistant is None: + turn_first_assistant = assistant_msg await self._sessions.save(session) yield TextDelta(delta=error_text) # This path was never exercised (the old chars//3 check never @@ -365,6 +373,9 @@ yield StreamEnd( full_content=error_text, max_context_tokens=self._window_for(profile), + message_index=await self._turn_message_index( + session_id, turn_first_assistant + ), ) return @@ -416,16 +427,21 @@ # Stopped mid-stream — save partial response and exit if stop_event and stop_event.is_set(): if state.accumulated_text: - session.messages.append( - Message( - role="assistant", - content=state.accumulated_text, - created_at=datetime.now(timezone.utc), - is_context=False, - ) + stopped_msg = Message( + role="assistant", + content=state.accumulated_text, + created_at=datetime.now(timezone.utc), + is_context=False, ) + session.messages.append(stopped_msg) + if turn_first_assistant is None: + turn_first_assistant = stopped_msg await self._sessions.save(session) - yield StreamStopped() + yield StreamStopped( + message_index=await self._turn_message_index( + session_id, turn_first_assistant + ) + ) return turn_tool_calls = state.turn_tool_calls @@ -446,6 +462,8 @@ ) session.messages.append(assistant_msg) session.context.append(assistant_msg) + if turn_first_assistant is None: + turn_first_assistant = assistant_msg if self._compressor.context_truncated: # A truncated prompt is reported as what the backend # evaluated — roughly half the window — while the context @@ -505,6 +523,9 @@ elapsed_seconds=_elapsed, tool_call_count=turn_ctx.tool_call_count, token_count=_net_tokens if _net_tokens else None, + message_index=await self._turn_message_index( + session_id, turn_first_assistant + ), ) for event in await self._run_workers( @@ -522,6 +543,8 @@ ) session.messages.append(assistant_msg) session.context.append(assistant_msg) + if turn_first_assistant is None: + turn_first_assistant = assistant_msg # Persist the assistant's tool-call decision before executing tools, so # a crash / CancelledError mid-tool-execution doesn't lose it. await self._sessions.save(session) @@ -574,7 +597,11 @@ _sid_var.reset(_sid_token) _mcp_scope_var.reset(_scope_token) _keyless_var.reset(_keyless_token) - yield StreamStopped() + yield StreamStopped( + message_index=await self._turn_message_index( + session_id, turn_first_assistant + ) + ) return # Update anti-stall counters @@ -614,6 +641,38 @@ _keyless_var.reset(_keyless_token) raise MaxIterationsReached(profile.max_iterations) + async def _turn_message_index( + self, session_id: str, msg: Message | None + ) -> int | None: + """Global display rank of the turn's first assistant row, or None. + + The web client keys its `h_` ids and the rating feedback on this + rank, and it is what a reload recomputes from ``metadata.display_index`` + — so a live turn and the same turn after a reload agree. Cosmetic + metadata: a store that cannot answer, a fake store in a test, or a + failed query must never break the turn; the client falls back to its own + approximation when this is None. + """ + if msg is None or msg.sequence_number is None or msg.sequence_number < 0: + return None + fn = getattr(self._sessions, "display_index_of", None) + if fn is None: + return None + try: + index = fn(session_id, msg.sequence_number) + if inspect.isawaitable(index): + index = await index + except Exception: # metadata, never fatal to the turn + log.warning( + "agent.message_index_failed", + session_id=session_id, + sequence_number=msg.sequence_number, + exc_info=True, + ) + return None + # A MagicMock store or an unexpected type counts as "cannot answer". + return index if isinstance(index, int) and not isinstance(index, bool) else None + async def _consume_stream( self, stream_gen, stop_event, turn_ctx: AgentTurnContext, state: StreamState ): diff --git a/navi/core/events.py b/navi/core/events.py index b59a6fb..5719823 100644 --- a/navi/core/events.py +++ b/navi/core/events.py @@ -87,7 +87,10 @@ elapsed_seconds: float | None = None tool_call_count: int = 0 token_count: int | None = None # completion tokens generated in this turn - message_index: int | None = None # raw index of the first assistant msg in this turn group + # Global display rank of the turn's first assistant row — the same value + # the history endpoint stamps as metadata.display_index. None when the + # store cannot answer; the client then counts assistant blocks locally. + message_index: int | None = None def to_wire(self) -> dict: return { @@ -106,8 +109,12 @@ class StreamStopped: """Emitted when the user stops generation mid-stream (cooperative stop).""" + # Global display rank of the turn's first assistant row — the id the client + # gives the block it keeps for this turn (see StreamEnd.message_index). + message_index: int | None = None + def to_wire(self) -> dict: - return {"type": "stream_stopped"} + return {"type": "stream_stopped", "message_index": self.message_index} @dataclass diff --git a/navi/core/orchestrator.py b/navi/core/orchestrator.py index 03af54b..3ac9d3d 100644 --- a/navi/core/orchestrator.py +++ b/navi/core/orchestrator.py @@ -183,20 +183,32 @@ def queue_message(self, session_id: str, entry: dict) -> dict: """Enqueue a user message that arrived during an active run. - Returns {position, queue_len, dropped_total}. The deque's maxlen drops - the oldest silently — tracked in dropped_queued_messages so the client - can be warned. + Returns {position, queue_len, dropped_total, dropped_client_ids}. The + deque's maxlen drops the oldest silently — tracked in + dropped_queued_messages, and the evicted entry's ``client_id`` comes + back so every tab can mark that bubble as lost instead of leaving it + looking queued forever. """ state = self._get_or_create_state(session_id) + dropped_client_ids: list[str] = [] if len(state.pending_user_messages) == state.pending_user_messages.maxlen: state.dropped_queued_messages += 1 + evicted = state.pending_user_messages[0] + client_id = evicted.get("client_id") if isinstance(evicted, dict) else None + if client_id: + dropped_client_ids.append(client_id) state.pending_user_messages.append(entry) return { "position": len(state.pending_user_messages), "queue_len": len(state.pending_user_messages), "dropped_total": state.dropped_queued_messages, + "dropped_client_ids": dropped_client_ids, } + async def notify_session(self, session_id: str, payload: dict) -> None: + """Send an out-of-band frame to every socket watching the session.""" + await self._notify_session(session_id, payload) + def has_pending(self, session_id: str) -> bool: state = self._sessions.get(session_id) return bool(state and state.pending_user_messages) diff --git a/navi/core/session.py b/navi/core/session.py index d578773..eacdd9d 100644 --- a/navi/core/session.py +++ b/navi/core/session.py @@ -108,6 +108,18 @@ would make the caller a second writer of the session's messages. """ + async def display_index_of( + self, session_id: str, sequence_number: int + ) -> int | None: + """0-based rank of a persisted display row in the session's full history. + + This is the same rank ``get_history_page`` stamps as + ``metadata.display_index``; clients key message ids and feedback on it. + A store that cannot answer returns None, and the client falls back to + its own approximation. + """ + return None + @abstractmethod async def find_reaction_session( self, diff --git a/navi/core/sessions/store.py b/navi/core/sessions/store.py index 8e97b2f..9c18941 100644 --- a/navi/core/sessions/store.py +++ b/navi/core/sessions/store.py @@ -485,6 +485,34 @@ last_known = di return msgs, has_more + async def display_index_of( + self, session_id: str, sequence_number: int + ) -> int | None: + """0-based rank of a display row — the same value `get_history_page` + stamps as ``metadata.display_index``. + + The client uses it as the stable id of the live turn's assistant block + (``h_``) and as the feedback key, so a live turn and the same + turn after a reload must agree. Counting display rows below the row is + the same ORDER BY the pagination query builds. + """ + pool = await self._get_pool() + async with pool.acquire() as conn: + return await conn.fetchval( + """ + WITH hist AS ( + SELECT sequence_number FROM session_messages + WHERE session_id = $1 AND is_display + UNION + SELECT sequence_number FROM session_messages_archive + WHERE session_id = $1 AND is_display + ) + SELECT COUNT(*) FROM hist WHERE sequence_number < $2 + """, + session_id, + sequence_number, + ) + async def set_pinned(self, session_id: str, pinned: bool) -> bool: pool = await self._get_pool() async with pool.acquire() as conn: diff --git a/tests/clients/test_tui_app.py b/tests/clients/test_tui_app.py index f362a1c..c5dfd37 100644 --- a/tests/clients/test_tui_app.py +++ b/tests/clients/test_tui_app.py @@ -42,6 +42,9 @@ async def fake_get_session(session_id: str) -> dict: return {"session_id": session_id, "profile_id": "navi_code"} + async def fake_get_session_meta(session_id: str) -> dict: + return {"session_id": session_id, "message_count": 0, "context_token_count": None} + async def fake_list_sessions() -> list[dict]: return [] @@ -53,6 +56,7 @@ monkeypatch.setattr(api_module, "create_session", fake_create_session) monkeypatch.setattr(api_module, "get_session", fake_get_session) + monkeypatch.setattr(api_module, "get_session_meta", fake_get_session_meta) monkeypatch.setattr(api_module, "list_sessions", fake_list_sessions) monkeypatch.setattr(api_module, "get_profile_model", fake_get_profile_model) monkeypatch.setattr(api_module, "list_terminals", fake_list_terminals) @@ -996,7 +1000,11 @@ await pilot.pause() chat = pilot.app.query_one("ChatPanel") assert bridge.client.enqueued, "message was enqueued for delivery" - assert "hello during reconnect" in bridge.client.enqueued[0] + payload = bridge.client.enqueued[0] + assert payload["type"] == "message" + assert payload["content"] == "hello during reconnect" + # The payload carries a client_id so the server can acknowledge it. + assert payload["client_id"] assert not any(it.kind == "error" for it in chat._model.items) @@ -1147,3 +1155,310 @@ assert right.styles.display != "none" assert input_box.styles.display != "none" assert status_bar.styles.display != "none" + + +# ─── protocol parity: replay, delivery acks, session_sync ──────────────────── + + +class _ParityBridge: + """Minimal bridge surface used by parity tests (no socket).""" + + def __init__(self, connected: bool = True, pending_input: bool = False) -> None: + self.connected = connected + self._pending_input = pending_input + self.client = None + self.stopped = False + + @property + def has_pending_input(self) -> bool: + return self._pending_input + + async def stop(self) -> None: + self.stopped = True + + +async def _settle_parity(pilot) -> None: + """Finish startup, silence the real bridge, and start from a clean chat. + + These tests drive the app's own state directly. A live WsBridge keeps + posting connection-status messages (there is no server in tests), and + ``on_connection_status_changed`` resets ``_streaming`` — enough to race + every assertion below. ``attach_session`` also leaves status lines in the + transcript, which ``clear()`` removes. + """ + await pilot.pause() + await pilot.app.workers.wait_for_complete() + bridge = pilot.app._bridge + if bridge is not None: + await bridge.stop() + pilot.app._bridge = None + await pilot.pause() + pilot.app._cancel_all_acks() + pilot.app.query_one("ChatPanel").clear() + pilot.app._streaming = False + + +@pytest.mark.anyio +async def test_replay_and_delivery_frames_do_not_litter_the_transcript() -> None: + """Protocol frames are not chat items (they used to render as debug JSON).""" + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + chat = pilot.app.query_one("ChatPanel") + for msg in ( + {"type": "replay_start", "count": 0}, + {"type": "replay_end"}, + {"type": "message_accepted", "client_id": "c1"}, + {"type": "message_queued", "position": 1, "queue_len": 1, "client_id": "c2"}, + {"type": "message_dropped", "client_ids": ["c3"]}, + {"type": "pong"}, + ): + chat.handle_ws_event(msg) + await pilot.pause() + assert chat._model.items == [] + + +@pytest.mark.anyio +async def test_resume_drops_the_half_written_turn() -> None: + """A reconnect replays the run from its start, so the partial answer must go.""" + from clients.terminal.tui.events import WsResumed + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + app.on_ws_event(WsEvent({"type": "stream_start"})) + app.on_ws_event(WsEvent({"type": "stream_delta", "delta": "half an ans"})) + await pilot.pause() + assert app._streaming is True + + app.on_ws_resumed(WsResumed()) + await pilot.pause() + + assert app._streaming is False + assert chat._model.items == [] + assert app.query_one("InputBox")._input.placeholder == "Ask anything..." + + +@pytest.mark.anyio +async def test_resume_keeps_completed_turns() -> None: + """Only the in-flight turn is dropped; finished exchanges survive.""" + from clients.terminal.tui.events import WsResumed + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + app.on_ws_event(WsEvent({"type": "stream_start"})) + app.on_ws_event(WsEvent({"type": "stream_delta", "delta": "a complete answer"})) + app.on_ws_event(WsEvent({"type": "stream_end", "content": "a complete answer"})) + await pilot.pause() + + app.on_ws_resumed(WsResumed()) + await pilot.pause() + + answers = [it.content for it in chat._model.items if it.kind == "assistant_message"] + assert answers == ["a complete answer"] + + +@pytest.mark.anyio +async def test_session_unavailable_explains_and_stops_the_bridge() -> None: + """A 4004 close tells the user what to do and releases the bridge.""" + from clients.terminal.tui.events import SessionUnavailable + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + bridge = _ParityBridge() + app._bridge = bridge + chat = app.query_one("ChatPanel") + + app.on_session_unavailable(SessionUnavailable(4004, "Session not found")) + await pilot.pause() + + errors = [it.content for it in chat._model.items if it.kind == "error"] + assert any("/new" in e and "/sessions" in e for e in errors) + assert app._bridge is None + assert bridge.stopped is True + + +@pytest.mark.anyio +async def test_message_accepted_cancels_the_delivery_deadline() -> None: + """An ack ends the wait; the bubble must not be flagged afterwards.""" + from clients.terminal.tui.events import MessageWritten + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + chat.add_user_message("hello", client_id="c-ok") + + app.on_message_written(MessageWritten("c-ok")) + assert "c-ok" in app._pending_acks + + app.on_ws_event(WsEvent({"type": "message_accepted", "client_id": "c-ok"})) + await pilot.pause() + + assert app._pending_acks == {} + assert chat._model.items[0].meta.get("fail_reason") is None + + +@pytest.mark.anyio +async def test_delivery_deadline_marks_an_unconfirmed_message() -> None: + """No ack, no stream: the bubble is marked as not delivered.""" + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + chat.add_user_message("hello", client_id="c-lost") + + app._ack_expired("c-lost") + await pilot.pause() + + assert chat._model.items[0].meta["fail_reason"] == "unconfirmed" + + +@pytest.mark.anyio +async def test_delivery_deadline_waits_out_an_active_run() -> None: + """The server reads a frame sent mid-run only after the run: not lost yet.""" + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + chat.add_user_message("hello", client_id="c-busy") + app.on_ws_event(WsEvent({"type": "stream_start"})) + + app._ack_expired("c-busy") + await pilot.pause() + + assert "c-busy" in app._pending_acks, "the deadline must be armed again" + assert chat._model.items[0].meta.get("fail_reason") is None + + +@pytest.mark.anyio +async def test_queue_overflow_marks_the_evicted_bubble() -> None: + """message_dropped says a queued message will never run.""" + from clients.terminal.tui.events import MessageWritten + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + chat.add_user_message("hello", client_id="c-evicted") + app.on_message_written(MessageWritten("c-evicted")) + + app.on_ws_event( + WsEvent({"type": "message_dropped", "client_ids": ["c-evicted", "other"]}) + ) + await pilot.pause() + + assert chat._model.items[0].meta["fail_reason"] == "dropped" + assert "c-evicted" not in app._pending_acks + + +@pytest.mark.anyio +async def test_message_queued_shows_the_bubble_as_waiting() -> None: + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + chat = app.query_one("ChatPanel") + chat.add_user_message("hello", client_id="c-q") + + app.on_ws_event( + WsEvent({"type": "message_queued", "position": 1, "queue_len": 1, "client_id": "c-q"}) + ) + await pilot.pause() + + assert chat._model.items[0].meta["queued"] is True + assert chat._model.items[0].meta.get("fail_reason") is None + + +@pytest.mark.anyio +async def test_session_sync_reloads_history_only_when_the_count_moved( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """One cheap /meta decides; the full transcript is fetched only on a change.""" + import clients.terminal.api as api_module + + calls = {"session": 0, "meta": 0} + + async def counting_get_session(sid: str) -> dict: + calls["session"] += 1 + return { + "session_id": sid, + "profile_id": "navi_code", + "messages": [ + {"role": "user", "content": "from another device", "is_display": True}, + {"role": "assistant", "content": "its answer", "is_display": True}, + ], + "context_token_count": 1234, + "max_context_tokens": 32000, + } + + async def meta_same(sid: str) -> dict: + calls["meta"] += 1 + return {"session_id": sid, "message_count": 0, "context_token_count": None} + + monkeypatch.setattr(api_module, "get_session", counting_get_session) + monkeypatch.setattr(api_module, "get_session_meta", meta_same) + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + app._bridge = _ParityBridge() + before = dict(calls) + + app.on_ws_event(WsEvent({"type": "session_sync"})) + await pilot.pause() + await app.workers.wait_for_complete() + + assert calls["meta"] == before["meta"] + 1 + assert calls["session"] == before["session"], "matching counts must not refetch" + + async def meta_changed(sid: str) -> dict: + calls["meta"] += 1 + return {"session_id": sid, "message_count": 2, "context_token_count": 1234} + + monkeypatch.setattr(api_module, "get_session_meta", meta_changed) + + app.on_ws_event(WsEvent({"type": "session_sync"})) + await pilot.pause() + await app.workers.wait_for_complete() + + assert calls["session"] == before["session"] + 1 + chat = app.query_one("ChatPanel") + contents = [it.content for it in chat._model.items] + assert "from another device" in contents + assert "its answer" in contents + # The reload is the new baseline — the next sync is a no-op. + assert app._history_token == (2, 1234) + + +@pytest.mark.anyio +async def test_session_sync_is_ignored_while_a_turn_streams( + monkeypatch: pytest.MonkeyPatch, +) -> None: + """A reload would wipe the answer being written; wait for the next sync.""" + import clients.terminal.api as api_module + + calls: list[str] = [] + + async def meta_changed(sid: str) -> dict: + calls.append("meta") + return {"session_id": sid, "message_count": 99, "context_token_count": None} + + monkeypatch.setattr(api_module, "get_session_meta", meta_changed) + + async with NaviCodeTui(new_session=True).run_test() as pilot: + await _settle_parity(pilot) + app = pilot.app + app._bridge = _ParityBridge() + app.on_ws_event(WsEvent({"type": "stream_start"})) + await pilot.pause() + # attach_session's own baseline call is already in the list. + before = len(calls) + + app.on_ws_event(WsEvent({"type": "session_sync"})) + await pilot.pause() + await app.workers.wait_for_complete() + + assert calls[before:] == [], "no meta check while a turn owns the transcript" diff --git a/tests/clients/test_ws_bridge.py b/tests/clients/test_ws_bridge.py index 4b70f5d..3e9f038 100644 --- a/tests/clients/test_ws_bridge.py +++ b/tests/clients/test_ws_bridge.py @@ -11,7 +11,13 @@ import pytest -from clients.terminal.tui.events import ConnectionStatusChanged, WsEvent +from clients.terminal.tui.events import ( + ConnectionStatusChanged, + MessageWritten, + SessionUnavailable, + WsEvent, + WsResumed, +) from clients.terminal.tui.ws_bridge import WsBridge @@ -35,10 +41,20 @@ for the input loop to send. """ - def __init__(self, frames: list[str] | None = None, *, idle: bool = False, send_fails: bool = False) -> None: + def __init__( + self, + frames: list[str] | None = None, + *, + idle: bool = False, + send_fails: bool = False, + close_exc: BaseException | None = None, + ) -> None: self._frames = list(frames or []) self.idle = idle self.send_fails = send_fails + # Raised instead of StopAsyncIteration — simulates a server close with + # an application code, which the real client sees as ConnectionClosed. + self.close_exc = close_exc self.sent: list[str] = [] self._closed = asyncio.Event() @@ -46,6 +62,8 @@ return self async def __anext__(self): + if self.close_exc is not None: + raise self.close_exc if self.idle: # Open socket, no incoming data: block until closed. await self._closed.wait() @@ -257,4 +275,94 @@ await bridge.stop() calls_after_stop = client.connect_calls await asyncio.sleep(0.05) - assert client.connect_calls == calls_after_stop, "stop() must end reconnect attempts" \ No newline at end of file + assert client.connect_calls == calls_after_stop, "stop() must end reconnect attempts" + +# ─── protocol parity: resume notice, writes, fatal close codes ─────────────── + + +def _messages_of(bridge: WsBridge, kind) -> list: + return [m for m in bridge.app.messages if isinstance(m, kind)] + + +@pytest.mark.anyio +async def test_each_successful_connect_announces_resume() -> None: + """Every open — first one included — lets the app drop a half-written turn. + + The server replays a live run from its start, so a client that keeps the + partial answer it saw on the dead socket would show the turn twice. + """ + client = _FakeClient() + client.push_ws(_FakeWs([])) # drops immediately + client.push_ws(_FakeWs(idle=True)) + bridge = _bridge(client) + + await bridge.start() + await asyncio.sleep(0.05) + await bridge.stop() + + assert client.connect_calls >= 2 + assert len(_messages_of(bridge, WsResumed)) >= 2 + + +@pytest.mark.anyio +async def test_a_written_message_with_client_id_reports_the_write() -> None: + """The delivery deadline starts at the write, so the bridge must say when + a payload actually reached the socket — and stay quiet for plain frames.""" + client = _FakeClient() + client.push_ws(_FakeWs(idle=True)) + bridge = _bridge(client) + + await bridge.start() + await asyncio.sleep(0.02) + client.enqueue({"type": "message", "content": "hi", "client_id": "c-1"}) + client.enqueue({"type": "ping"}) # no client_id — nothing to acknowledge + await asyncio.sleep(0.03) + await bridge.stop() + + written = _messages_of(bridge, MessageWritten) + assert [m.client_id for m in written] == ["c-1"] + + +@pytest.mark.anyio +@pytest.mark.parametrize("code", [4003, 4004]) +async def test_fatal_close_code_stops_retrying_and_is_reported(code: int) -> None: + """4003/4004 are refusals a reconnect only repeats: stop and report.""" + from websockets.exceptions import ConnectionClosedError + from websockets.frames import Close + + client = _FakeClient() + client.push_ws( + _FakeWs(close_exc=ConnectionClosedError(Close(code, "session refused"), None)) + ) + # Would be used if the supervisor retried — it must not. + client.push_ws(_FakeWs(idle=True)) + bridge = _bridge(client) + + await bridge.start() + await asyncio.sleep(0.08) + await bridge.stop() + + unavailable = _messages_of(bridge, SessionUnavailable) + assert len(unavailable) == 1 + assert unavailable[0].code == code + assert unavailable[0].reason == "session refused" + assert client.connect_calls == 1, "a fatal code must not be retried" + + +@pytest.mark.anyio +async def test_ordinary_close_code_still_reconnects() -> None: + """A transport drop carries no fatal code and reconnects as before.""" + from websockets.exceptions import ConnectionClosedError + from websockets.frames import Close + + client = _FakeClient() + client.push_ws(_FakeWs(close_exc=ConnectionClosedError(Close(1006, ""), None))) + client.push_ws(_FakeWs(idle=True)) + bridge = _bridge(client) + + await bridge.start() + await asyncio.sleep(0.05) + await bridge.stop() + + assert client.connect_calls >= 2 + assert _messages_of(bridge, SessionUnavailable) == [] diff --git a/tests/unit/api/test_websocket.py b/tests/unit/api/test_websocket.py index ebb1ca4..3a1159a 100644 --- a/tests/unit/api/test_websocket.py +++ b/tests/unit/api/test_websocket.py @@ -696,3 +696,102 @@ mock_websocket.send_json.assert_awaited() payload = mock_websocket.send_json.call_args_list[-1].args[0] assert payload["type"] == "session_sync" + + +# ── Delivery acknowledgement (client_id) ──────────────────────────────────── + + +@pytest.mark.anyio +async def test_message_accepted_precedes_the_run(mock_websocket, mock_user, monkeypatch): + """The client hears "the server has it" before the (possibly slow) run.""" + orchestrator = AgentSessionOrchestrator(MagicMock()) + + async def fake_run_agent(*a, **kw): + return "" + + monkeypatch.setattr(orchestrator, "run_agent", fake_run_agent) + monkeypatch.setattr(ws_mod, "_stream_to_client", AsyncMock(return_value=True)) + + connected, ran = await ws_mod._run_single_message( + session_id="s1", user_content="hi", raw_images=None, display_content="hi", + uploaded_files=[], hidden=False, websocket=mock_websocket, + orchestrator=orchestrator, session_store=MagicMock(), user=mock_user, + client_id="c1", + ) + + assert (connected, ran) == (True, True) + sent = [c.args[0] for c in mock_websocket.send_json.call_args_list] + assert sent[0] == {"type": "message_accepted", "client_id": "c1"} + assert sent[1] == {"type": "stream_start"} + + +@pytest.mark.anyio +async def test_no_ack_without_a_client_id(mock_websocket, mock_user, monkeypatch): + """Opt-in: clients that send no id keep the old, unchanged wire.""" + orchestrator = AgentSessionOrchestrator(MagicMock()) + + async def fake_run_agent(*a, **kw): + return "" + + monkeypatch.setattr(orchestrator, "run_agent", fake_run_agent) + monkeypatch.setattr(ws_mod, "_stream_to_client", AsyncMock(return_value=True)) + + await ws_mod._run_single_message( + session_id="s1", user_content="hi", raw_images=None, display_content="hi", + uploaded_files=[], hidden=False, websocket=mock_websocket, + orchestrator=orchestrator, session_store=MagicMock(), user=mock_user, + ) + + sent = [c.args[0] for c in mock_websocket.send_json.call_args_list] + assert [f["type"] for f in sent] == ["stream_start"] + + +@pytest.mark.anyio +async def test_queued_message_echoes_client_id(mock_websocket, mock_user): + """A queued message is acknowledged by its id in message_queued.""" + orchestrator = AgentSessionOrchestrator(MagicMock()) + orchestrator.create_run("s1") + + connected, ran = await ws_mod._run_single_message( + session_id="s1", user_content="second", raw_images=None, + display_content="second", uploaded_files=[], hidden=False, + websocket=mock_websocket, orchestrator=orchestrator, + session_store=MagicMock(), user=mock_user, client_id="c2", + ) + + assert (connected, ran) == (True, False) + payload = mock_websocket.send_json.call_args.args[0] + assert payload == { + "type": "message_queued", + "position": 1, + "queue_len": 1, + "max": ws_mod.settings.message_queue_max, + "dropped_total": 0, + "client_id": "c2", + } + orchestrator.clear_run("s1") + + +@pytest.mark.anyio +async def test_queue_overflow_broadcasts_message_dropped(mock_websocket, mock_user, monkeypatch): + """The evicted message may belong to another tab — tell every watcher.""" + orchestrator = AgentSessionOrchestrator(MagicMock()) + orchestrator.create_run("s1") + notes = [] + + async def fake_notify(session_id, payload): + notes.append((session_id, payload)) + + monkeypatch.setattr(orchestrator, "notify_session", fake_notify) + for i in range(ws_mod.settings.message_queue_max): + orchestrator.queue_message("s1", {"user_content": f"m{i}", "client_id": f"c{i}"}) + + await ws_mod._run_single_message( + session_id="s1", user_content="new", raw_images=None, + display_content="new", uploaded_files=[], hidden=False, + websocket=mock_websocket, orchestrator=orchestrator, + session_store=MagicMock(), user=mock_user, client_id="cnew", + ) + + assert notes == [("s1", {"type": "message_dropped", "client_ids": ["c0"]})] + orchestrator.clear_run("s1") diff --git a/tests/unit/core/test_agent.py b/tests/unit/core/test_agent.py index 62aa406..71a1640 100644 --- a/tests/unit/core/test_agent.py +++ b/tests/unit/core/test_agent.py @@ -1565,3 +1565,77 @@ assert ids[-1] == "c1" assert "old0" not in ids json.dumps(session.session_metadata) + + +class TestTurnMessageIndex: + """The rank sent with stream_end/stream_stopped must be safe to ask for.""" + + @pytest.mark.asyncio + async def test_reads_the_rank_from_the_store(self, agent): + class RankStore(InMemorySessionStore): + async def display_index_of(self, session_id, sequence_number): + assert (session_id, sequence_number) == ("s1", 42) + return 12 + + agent._sessions = RankStore() + msg = Message(role="assistant", content="x") + msg.sequence_number = 42 + + assert await agent._turn_message_index("s1", msg) == 12 + + @pytest.mark.asyncio + async def test_none_for_an_unsaved_message(self, agent): + # Default sequence_number is -1: the row is not in the store yet. + assert await agent._turn_message_index("s1", Message(role="assistant", content="x")) is None + assert await agent._turn_message_index("s1", None) is None + + @pytest.mark.asyncio + async def test_none_without_the_store_method(self, agent): + class BareStore: + pass + + agent._sessions = BareStore() + msg = Message(role="assistant", content="x") + msg.sequence_number = 1 + + assert await agent._turn_message_index("s1", msg) is None + + @pytest.mark.asyncio + async def test_a_failed_query_never_breaks_the_turn(self, agent): + class FailingStore(InMemorySessionStore): + async def display_index_of(self, session_id, sequence_number): + raise RuntimeError("db down") + + agent._sessions = FailingStore() + msg = Message(role="assistant", content="x") + msg.sequence_number = 1 + + assert await agent._turn_message_index("s1", msg) is None + + @pytest.mark.asyncio + async def test_a_non_int_result_counts_as_no_answer(self, agent): + # A MagicMock store answers with a mock; it must not ride the wire. + class MagicStore(InMemorySessionStore): + def display_index_of(self, session_id, sequence_number): + return MagicMock() + + agent._sessions = MagicStore() + msg = Message(role="assistant", content="x") + msg.sequence_number = 1 + + assert await agent._turn_message_index("s1", msg) is None + + @pytest.mark.asyncio + async def test_stream_end_carries_the_computed_rank(self, agent, session, monkeypatch): + # InMemorySessionStore keeps sequence_number at -1, so the rank lookup + # has nothing to ask about; stub it to check the wiring into the frame. + async def fake_index(session_id, msg): + return 5 + + monkeypatch.setattr(agent, "_turn_message_index", fake_index) + agent._backends.register("ollama", FakeLLMBackend(responses=["hello"])) + + events = [ev async for ev in agent.run_stream(session.id, "hi")] + + end = [ev for ev in events if isinstance(ev, StreamEnd)][-1] + assert end.message_index == 5 diff --git a/tests/unit/core/test_events.py b/tests/unit/core/test_events.py index 702bbfa..459fa3e 100644 --- a/tests/unit/core/test_events.py +++ b/tests/unit/core/test_events.py @@ -95,10 +95,28 @@ assert wire["context_tokens"] == 150 assert wire["tool_call_count"] == 2 + def test_to_wire_defaults_message_index_to_none(self): + assert StreamEnd(full_content="done").to_wire()["message_index"] is None + + def test_to_wire_carries_message_index(self): + ev = StreamEnd(full_content="done", message_index=7) + assert ev.to_wire()["message_index"] == 7 + class TestStreamStopped: def test_to_wire(self): - assert StreamStopped().to_wire() == {"type": "stream_stopped"} + # message_index stays on the wire (null when the store cannot answer) + # so the client always knows whether the rank is authoritative. + assert StreamStopped().to_wire() == { + "type": "stream_stopped", + "message_index": None, + } + + def test_to_wire_carries_message_index(self): + assert StreamStopped(message_index=3).to_wire() == { + "type": "stream_stopped", + "message_index": 3, + } class TestContextCompressed: diff --git a/tests/unit/core/test_orchestrator_queue.py b/tests/unit/core/test_orchestrator_queue.py index 3e791c0..83e33f6 100644 --- a/tests/unit/core/test_orchestrator_queue.py +++ b/tests/unit/core/test_orchestrator_queue.py @@ -18,8 +18,12 @@ def test_fifo_order_and_positions(self, orchestrator): r1 = orchestrator.queue_message("s1", {"user_content": "first"}) r2 = orchestrator.queue_message("s1", {"user_content": "second"}) - assert r1 == {"position": 1, "queue_len": 1, "dropped_total": 0} - assert r2 == {"position": 2, "queue_len": 2, "dropped_total": 0} + assert r1 == { + "position": 1, "queue_len": 1, "dropped_total": 0, "dropped_client_ids": [], + } + assert r2 == { + "position": 2, "queue_len": 2, "dropped_total": 0, "dropped_client_ids": [], + } assert orchestrator.pop_pending("s1")["user_content"] == "first" assert orchestrator.pop_pending("s1")["user_content"] == "second" @@ -31,6 +35,22 @@ info = orchestrator.queue_message("s1", {"user_content": "more"}) assert info["dropped_total"] == 2 + def test_overflow_reports_the_evicted_client_id(self, orchestrator): + # Five fit; the sixth evicts the first. The evicted sender must learn + # that its message will never run, so its id comes back. + for i in range(5): + orchestrator.queue_message("s1", {"user_content": f"m{i}", "client_id": f"c{i}"}) + info = orchestrator.queue_message("s1", {"user_content": "m5", "client_id": "c5"}) + assert info["dropped_total"] == 1 + assert info["dropped_client_ids"] == ["c0"] + + def test_overflow_without_client_id_reports_nobody(self, orchestrator): + # Non-web clients (TUI, headless) send no client_id; nothing is echoed. + for i in range(6): + info = orchestrator.queue_message("s1", {"user_content": f"m{i}"}) + assert info["dropped_total"] == 1 + assert info["dropped_client_ids"] == [] + def test_sessions_are_isolated(self, orchestrator): orchestrator.queue_message("s1", {"user_content": "a"}) assert not orchestrator.has_pending("s2") diff --git a/tests/unit/core/test_pg_session_store.py b/tests/unit/core/test_pg_session_store.py index b7b2835..374651d 100644 --- a/tests/unit/core/test_pg_session_store.py +++ b/tests/unit/core/test_pg_session_store.py @@ -782,3 +782,32 @@ store._initialized = True assert await store.delete("s1") is True + + +@pytest.mark.asyncio +async def test_display_index_of_counts_display_rows_below_the_row(): + """The rank a live turn stamps must equal what pagination recomputes. + + Both walk the union of hot and archived display rows in sequence order; + ``display_index_of`` only needs the count below one sequence number. + """ + store, conn = _make_store() + conn.enqueue(7) + + index = await store.display_index_of("sid-1", 42) + + assert index == 7 + kind, query, args = conn.calls[-1] + assert kind == "fetchval" + assert args == ("sid-1", 42) + assert "session_messages_archive" in query + assert "COUNT(*)" in query + assert "is_display" in query + + +@pytest.mark.asyncio +async def test_display_index_of_passes_none_through(): + # No matching row: the store cannot answer, and the caller falls back. + store, conn = _make_store() + conn.enqueue(None) + assert await store.display_index_of("sid-1", 1) is None diff --git a/webclient/dist/assets/index-BJPYEKSS.js b/webclient/dist/assets/index-BJPYEKSS.js new file mode 100644 index 0000000..a5e7eb5 --- /dev/null +++ b/webclient/dist/assets/index-BJPYEKSS.js @@ -0,0 +1,141 @@ +var Bg=Object.defineProperty;var Fg=(e,t,n)=>t in e?Bg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var mt=(e,t,n)=>Fg(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();/** +* @vue/shared v3.5.32 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Dl(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ht={},ga=[],qn=()=>{},zd=()=>!1,ho=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),vo=e=>e.startsWith("onUpdate:"),Ft=Object.assign,Pl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ug=Object.prototype.hasOwnProperty,lt=(e,t)=>Ug.call(e,t),Fe=Array.isArray,ma=e=>yi(e)==="[object Map]",Aa=e=>yi(e)==="[object Set]",wc=e=>yi(e)==="[object Date]",je=e=>typeof e=="function",Nt=e=>typeof e=="string",vn=e=>typeof e=="symbol",ct=e=>e!==null&&typeof e=="object",Kd=e=>(ct(e)||je(e))&&je(e.then)&&je(e.catch),qd=Object.prototype.toString,yi=e=>qd.call(e),Gg=e=>yi(e).slice(8,-1),Vd=e=>yi(e)==="[object Object]",bo=e=>Nt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Za=Dl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_o=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Hg=/-\w/g,rn=_o(e=>e.replace(Hg,t=>t.slice(1).toUpperCase())),zg=/\B([A-Z])/g,Ss=_o(e=>e.replace(zg,"-$1").toLowerCase()),yo=_o(e=>e.charAt(0).toUpperCase()+e.slice(1)),Wo=_o(e=>e?`on${yo(e)}`:""),zn=(e,t)=>!Object.is(e,t),Hi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ko=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Kg=e=>{const t=Nt(e)?Number(e):NaN;return isNaN(t)?e:t};let Sc;const wo=()=>Sc||(Sc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function bs(e){if(Fe(e)){const t={};for(let n=0;n{if(n){const s=n.split(Vg);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ce(e){let t="";if(Nt(e))t=e;else if(Fe(e))for(let n=0;nys(n,t))}const jd=e=>!!(e&&e.__v_isRef===!0),y=e=>Nt(e)?e:e==null?"":Fe(e)||ct(e)&&(e.toString===qd||!je(e.toString))?jd(e)?y(e.value):JSON.stringify(e,Zd,2):String(e),Zd=(e,t)=>jd(t)?Zd(e,t.value):ma(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,a],i)=>(n[Yo(s,i)+" =>"]=a,n),{})}:Aa(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Yo(n))}:vn(t)?Yo(t):ct(t)&&!Fe(t)&&!Vd(t)?String(t):t,Yo=(e,t="")=>{var n;return vn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.32 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let jt;class Xd{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=jt,!t&&jt&&(this.index=(jt.scopes||(jt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(jt=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Qa){let t=Qa;for(Qa=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Xa;){let t=Xa;for(Xa=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function sf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function af(e){let t,n=e.depsTail,s=n;for(;s;){const a=s.prevDep;s.version===-1?(s===n&&(n=a),Gl(s),Jg(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=a}e.deps=t,e.depsTail=n}function ol(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(of(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function of(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===li)||(e.globalVersion=li,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ol(e))))return;e.flags|=2;const t=e.dep,n=yt,s=Rn;yt=e,Rn=!0;try{sf(e);const a=e.fn(e._value);(t.version===0||zn(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{yt=n,Rn=s,af(e),e.flags&=-3}}function Gl(e,t=!1){const{dep:n,prevSub:s,nextSub:a}=e;if(s&&(s.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Gl(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Jg(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Rn=!0;const rf=[];function is(){rf.push(Rn),Rn=!1}function os(){const e=rf.pop();Rn=e===void 0?!0:e}function Ec(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=yt;yt=void 0;try{t()}finally{yt=n}}}let li=0;class em{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Hl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!yt||!Rn||yt===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==yt)n=this.activeLink=new em(yt,this),yt.deps?(n.prevDep=yt.depsTail,yt.depsTail.nextDep=n,yt.depsTail=n):yt.deps=yt.depsTail=n,lf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=yt.depsTail,n.nextDep=void 0,yt.depsTail.nextDep=n,yt.depsTail=n,yt.deps===n&&(yt.deps=s)}return n}trigger(t){this.version++,li++,this.notify(t)}notify(t){Fl();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ul()}}}function lf(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)lf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ji=new WeakMap,qs=Symbol(""),rl=Symbol(""),ci=Symbol("");function Zt(e,t,n){if(Rn&&yt){let s=ji.get(e);s||ji.set(e,s=new Map);let a=s.get(n);a||(s.set(n,a=new Hl),a.map=s,a.key=n),a.track()}}function Jn(e,t,n,s,a,i){const o=ji.get(e);if(!o){li++;return}const r=u=>{u&&u.trigger()};if(Fl(),t==="clear")o.forEach(r);else{const u=Fe(e),l=u&&bo(n);if(u&&n==="length"){const c=Number(s);o.forEach((f,p)=>{(p==="length"||p===ci||!vn(p)&&p>=c)&&r(f)})}else switch((n!==void 0||o.has(void 0))&&r(o.get(n)),l&&r(o.get(ci)),t){case"add":u?l&&r(o.get("length")):(r(o.get(qs)),ma(e)&&r(o.get(rl)));break;case"delete":u||(r(o.get(qs)),ma(e)&&r(o.get(rl)));break;case"set":ma(e)&&r(o.get(qs));break}}Ul()}function tm(e,t){const n=ji.get(e);return n&&n.get(t)}function ca(e){const t=st(e);return t===e?t:(Zt(t,"iterate",ci),hn(e)?t:t.map(In))}function So(e){return Zt(e=st(e),"iterate",ci),e}function Gn(e,t){return rs(e)?wa(as(e)?In(t):t):In(t)}const nm={__proto__:null,[Symbol.iterator](){return Zo(this,Symbol.iterator,e=>Gn(this,e))},concat(...e){return ca(this).concat(...e.map(t=>Fe(t)?ca(t):t))},entries(){return Zo(this,"entries",e=>(e[1]=Gn(this,e[1]),e))},every(e,t){return Zn(this,"every",e,t,void 0,arguments)},filter(e,t){return Zn(this,"filter",e,t,n=>n.map(s=>Gn(this,s)),arguments)},find(e,t){return Zn(this,"find",e,t,n=>Gn(this,n),arguments)},findIndex(e,t){return Zn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Zn(this,"findLast",e,t,n=>Gn(this,n),arguments)},findLastIndex(e,t){return Zn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Zn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Xo(this,"includes",e)},indexOf(...e){return Xo(this,"indexOf",e)},join(e){return ca(this).join(e)},lastIndexOf(...e){return Xo(this,"lastIndexOf",e)},map(e,t){return Zn(this,"map",e,t,void 0,arguments)},pop(){return Da(this,"pop")},push(...e){return Da(this,"push",e)},reduce(e,...t){return Tc(this,"reduce",e,t)},reduceRight(e,...t){return Tc(this,"reduceRight",e,t)},shift(){return Da(this,"shift")},some(e,t){return Zn(this,"some",e,t,void 0,arguments)},splice(...e){return Da(this,"splice",e)},toReversed(){return ca(this).toReversed()},toSorted(e){return ca(this).toSorted(e)},toSpliced(...e){return ca(this).toSpliced(...e)},unshift(...e){return Da(this,"unshift",e)},values(){return Zo(this,"values",e=>Gn(this,e))}};function Zo(e,t,n){const s=So(e),a=s[t]();return s!==e&&!hn(e)&&(a._next=a.next,a.next=()=>{const i=a._next();return i.done||(i.value=n(i.value)),i}),a}const sm=Array.prototype;function Zn(e,t,n,s,a,i){const o=So(e),r=o!==e&&!hn(e),u=o[t];if(u!==sm[t]){const f=u.apply(e,i);return r?In(f):f}let l=n;o!==e&&(r?l=function(f,p){return n.call(this,Gn(e,f),p,e)}:n.length>2&&(l=function(f,p){return n.call(this,f,p,e)}));const c=u.call(o,l,s);return r&&a?a(c):c}function Tc(e,t,n,s){const a=So(e),i=a!==e&&!hn(e);let o=n,r=!1;a!==e&&(i?(r=s.length===0,o=function(l,c,f){return r&&(r=!1,l=Gn(e,l)),n.call(this,l,Gn(e,c),f,e)}):n.length>3&&(o=function(l,c,f){return n.call(this,l,c,f,e)}));const u=a[t](o,...s);return r?Gn(e,u):u}function Xo(e,t,n){const s=st(e);Zt(s,"iterate",ci);const a=s[t](...n);return(a===-1||a===!1)&&Eo(n[0])?(n[0]=st(n[0]),s[t](...n)):a}function Da(e,t,n=[]){is(),Fl();const s=st(e)[t].apply(e,n);return Ul(),os(),s}const am=Dl("__proto__,__v_isRef,__isVue"),cf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(vn));function im(e){vn(e)||(e=String(e));const t=st(this);return Zt(t,"has",e),t.hasOwnProperty(e)}class uf{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const a=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(a?i?mm:gf:i?pf:ff).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=Fe(t);if(!a){let u;if(o&&(u=nm[n]))return u;if(n==="hasOwnProperty")return im}const r=Reflect.get(t,n,vt(t)?t:s);if((vn(n)?cf.has(n):am(n))||(a||Zt(t,"get",n),i))return r;if(vt(r)){const u=o&&bo(n)?r:r.value;return a&&ct(u)?cl(u):u}return ct(r)?a?cl(r):js(r):r}}class df extends uf{constructor(t=!1){super(!1,t)}set(t,n,s,a){let i=t[n];const o=Fe(t)&&bo(n);if(!this._isShallow){const l=rs(i);if(!hn(s)&&!rs(s)&&(i=st(i),s=st(s)),!o&&vt(i)&&!vt(s))return l||(i.value=s),!0}const r=o?Number(n)e,Ci=e=>Reflect.getPrototypeOf(e);function um(e,t,n){return function(...s){const a=this.__v_raw,i=st(a),o=ma(i),r=e==="entries"||e===Symbol.iterator&&o,u=e==="keys"&&o,l=a[e](...s),c=n?ll:t?wa:In;return!t&&Zt(i,"iterate",u?rl:qs),Ft(Object.create(l),{next(){const{value:f,done:p}=l.next();return p?{value:f,done:p}:{value:r?[c(f[0]),c(f[1])]:c(f),done:p}}})}}function Ri(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function dm(e,t){const n={get(a){const i=this.__v_raw,o=st(i),r=st(a);e||(zn(a,r)&&Zt(o,"get",a),Zt(o,"get",r));const{has:u}=Ci(o),l=t?ll:e?wa:In;if(u.call(o,a))return l(i.get(a));if(u.call(o,r))return l(i.get(r));i!==o&&i.get(a)},get size(){const a=this.__v_raw;return!e&&Zt(st(a),"iterate",qs),a.size},has(a){const i=this.__v_raw,o=st(i),r=st(a);return e||(zn(a,r)&&Zt(o,"has",a),Zt(o,"has",r)),a===r?i.has(a):i.has(a)||i.has(r)},forEach(a,i){const o=this,r=o.__v_raw,u=st(r),l=t?ll:e?wa:In;return!e&&Zt(u,"iterate",qs),r.forEach((c,f)=>a.call(i,l(c),l(f),o))}};return Ft(n,e?{add:Ri("add"),set:Ri("set"),delete:Ri("delete"),clear:Ri("clear")}:{add(a){const i=st(this),o=Ci(i),r=st(a),u=!t&&!hn(a)&&!rs(a)?r:a;return o.has.call(i,u)||zn(a,u)&&o.has.call(i,a)||zn(r,u)&&o.has.call(i,r)||(i.add(u),Jn(i,"add",u,u)),this},set(a,i){!t&&!hn(i)&&!rs(i)&&(i=st(i));const o=st(this),{has:r,get:u}=Ci(o);let l=r.call(o,a);l||(a=st(a),l=r.call(o,a));const c=u.call(o,a);return o.set(a,i),l?zn(i,c)&&Jn(o,"set",a,i):Jn(o,"add",a,i),this},delete(a){const i=st(this),{has:o,get:r}=Ci(i);let u=o.call(i,a);u||(a=st(a),u=o.call(i,a)),r&&r.call(i,a);const l=i.delete(a);return u&&Jn(i,"delete",a,void 0),l},clear(){const a=st(this),i=a.size!==0,o=a.clear();return i&&Jn(a,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(a=>{n[a]=um(a,e,t)}),n}function zl(e,t){const n=dm(e,t);return(s,a,i)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?s:Reflect.get(lt(n,a)&&a in s?n:s,a,i)}const fm={get:zl(!1,!1)},pm={get:zl(!1,!0)},gm={get:zl(!0,!1)};const ff=new WeakMap,pf=new WeakMap,gf=new WeakMap,mm=new WeakMap;function hm(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vm(e){return e.__v_skip||!Object.isExtensible(e)?0:hm(Gg(e))}function js(e){return rs(e)?e:Kl(e,!1,rm,fm,ff)}function bm(e){return Kl(e,!1,cm,pm,pf)}function cl(e){return Kl(e,!0,lm,gm,gf)}function Kl(e,t,n,s,a){if(!ct(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=vm(e);if(i===0)return e;const o=a.get(e);if(o)return o;const r=new Proxy(e,i===2?s:n);return a.set(e,r),r}function as(e){return rs(e)?as(e.__v_raw):!!(e&&e.__v_isReactive)}function rs(e){return!!(e&&e.__v_isReadonly)}function hn(e){return!!(e&&e.__v_isShallow)}function Eo(e){return e?!!e.__v_raw:!1}function st(e){const t=e&&e.__v_raw;return t?st(t):e}function ui(e){return!lt(e,"__v_skip")&&Object.isExtensible(e)&&Wd(e,"__v_skip",!0),e}const In=e=>ct(e)?js(e):e,wa=e=>ct(e)?cl(e):e;function vt(e){return e?e.__v_isRef===!0:!1}function F(e){return hf(e,!1)}function mf(e){return hf(e,!0)}function hf(e,t){return vt(e)?e:new _m(e,t)}class _m{constructor(t,n){this.dep=new Hl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:st(t),this._value=n?t:In(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||hn(t)||rs(t);t=s?t:st(t),zn(t,n)&&(this._rawValue=t,this._value=s?t:In(t),this.dep.trigger())}}function d(e){return vt(e)?e.value:e}const ym={get:(e,t,n)=>t==="__v_raw"?e:d(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const a=e[t];return vt(a)&&!vt(n)?(a.value=n,!0):Reflect.set(e,t,n,s)}};function vf(e){return as(e)?e:new Proxy(e,ym)}function km(e){const t=Fe(e)?new Array(e.length):{};for(const n in e)t[n]=Sm(e,n);return t}class wm{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=vn(n)?n:String(n),this._raw=st(t);let a=!0,i=t;if(!Fe(t)||vn(this._key)||!bo(this._key))do a=!Eo(i)||hn(i);while(a&&(i=i.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=d(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&vt(this._raw[this._key])){const n=this._object[this._key];if(vt(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return tm(this._raw,this._key)}}function Sm(e,t,n){return new wm(e,t,n)}class Em{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Hl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=li-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&yt!==this)return nf(this,!0),!0}get value(){const t=this.dep.track();return of(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Tm(e,t,n=!1){let s,a;return je(e)?s=e:(s=e.get,a=e.set),new Em(s,a,n)}const Ii={},Zi=new WeakMap;let Fs;function Am(e,t=!1,n=Fs){if(n){let s=Zi.get(n);s||Zi.set(n,s=[]),s.push(e)}}function xm(e,t,n=ht){const{immediate:s,deep:a,once:i,scheduler:o,augmentJob:r,call:u}=n,l=I=>a?I:hn(I)||a===!1||a===0?es(I,1):es(I);let c,f,p,b,_=!1,k=!1;if(vt(e)?(f=()=>e.value,_=hn(e)):as(e)?(f=()=>l(e),_=!0):Fe(e)?(k=!0,_=e.some(I=>as(I)||hn(I)),f=()=>e.map(I=>{if(vt(I))return I.value;if(as(I))return l(I);if(je(I))return u?u(I,2):I()})):je(e)?t?f=u?()=>u(e,2):e:f=()=>{if(p){is();try{p()}finally{os()}}const I=Fs;Fs=c;try{return u?u(e,3,[b]):e(b)}finally{Fs=I}}:f=qn,t&&a){const I=f,O=a===!0?1/0:a;f=()=>es(I(),O)}const L=Jd(),R=()=>{c.stop(),L&&L.active&&Pl(L.effects,c)};if(i&&t){const I=t;t=(...O)=>{I(...O),R()}}let x=k?new Array(e.length).fill(Ii):Ii;const S=I=>{if(!(!(c.flags&1)||!c.dirty&&!I))if(t){const O=c.run();if(a||_||(k?O.some((P,M)=>zn(P,x[M])):zn(O,x))){p&&p();const P=Fs;Fs=c;try{const M=[O,x===Ii?void 0:k&&x[0]===Ii?[]:x,b];x=O,u?u(t,3,M):t(...M)}finally{Fs=P}}}else c.run()};return r&&r(S),c=new ef(f),c.scheduler=o?()=>o(S,!1):S,b=I=>Am(I,!1,c),p=c.onStop=()=>{const I=Zi.get(c);if(I){if(u)u(I,4);else for(const O of I)O();Zi.delete(c)}},t?s?S(!0):x=c.run():o?o(S.bind(null,!0),!0):c.run(),R.pause=c.pause.bind(c),R.resume=c.resume.bind(c),R.stop=R,R}function es(e,t=1/0,n){if(t<=0||!ct(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,vt(e))es(e.value,t,n);else if(Fe(e))for(let s=0;s{es(s,t,n)});else if(Vd(e)){for(const s in e)es(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&es(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.32 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ki(e,t,n,s){try{return s?e(...s):e()}catch(a){To(a,t,n)}}function On(e,t,n,s){if(je(e)){const a=ki(e,t,n,s);return a&&Kd(a)&&a.catch(i=>{To(i,t,n)}),a}if(Fe(e)){const a=[];for(let i=0;i>>1,a=an[s],i=di(a);i=di(n)?an.push(e):an.splice(Cm(t),0,e),e.flags|=1,_f()}}function _f(){Xi||(Xi=bf.then(kf))}function Rm(e){Fe(e)?ha.push(...e):vs&&e.id===-1?vs.splice(fa+1,0,e):e.flags&1||(ha.push(e),e.flags|=1),_f()}function Ac(e,t,n=Fn+1){for(;ndi(n)-di(s));if(ha.length=0,vs){vs.push(...t);return}for(vs=t,fa=0;fae.id==null?e.flags&2?-1:1/0:e.id;function kf(e){try{for(Fn=0;Fn{s._d&&no(-1);const i=Qi(t);let o;try{o=e(...a)}finally{Qi(i),s._d&&no(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Gs(e,t){if(qt===null)return e;const n=Io(qt),s=e.dirs||(e.dirs=[]);for(let a=0;a1)return n&&je(t)?t.call(s&&s.proxy):t}}function Im(){return!!(xa()||Vs)}const Om=Symbol.for("v-scx"),Mm=()=>va(Om);function Lm(e,t){return Vl(e,null,t)}function Ge(e,t,n){return Vl(e,t,n)}function Vl(e,t,n=ht){const{immediate:s,deep:a,flush:i,once:o}=n,r=Ft({},n),u=t&&s||!t&&i!=="post";let l;if(mi){if(i==="sync"){const b=Mm();l=b.__watcherHandles||(b.__watcherHandles=[])}else if(!u){const b=()=>{};return b.stop=qn,b.resume=qn,b.pause=qn,b}}const c=Qt;r.call=(b,_,k)=>On(b,c,_,k);let f=!1;i==="post"?r.scheduler=b=>{sn(b,c&&c.suspense)}:i!=="sync"&&(f=!0,r.scheduler=(b,_)=>{_?b():ql(b)}),r.augmentJob=b=>{t&&(b.flags|=4),f&&(b.flags|=2,c&&(b.id=c.uid,b.i=c))};const p=xm(e,t,r);return mi&&(l?l.push(p):u&&p()),p}function $m(e,t,n){const s=this.proxy,a=Nt(e)?e.includes(".")?Ef(s,e):()=>s[e]:e.bind(s,s);let i;je(t)?i=t:(i=t.handler,n=t);const o=wi(this),r=Vl(a,i.bind(s),n);return o(),r}function Ef(e,t){const n=t.split(".");return()=>{let s=e;for(let a=0;ae.__isTeleport,Hs=e=>e&&(e.disabled||e.disabled===""),Dm=e=>e&&(e.defer||e.defer===""),xc=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Nc=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ul=(e,t)=>{const n=e&&e.to;return Nt(n)?t?t(n):null:n},Pm={name:"Teleport",__isTeleport:!0,process(e,t,n,s,a,i,o,r,u,l){const{mc:c,pc:f,pbc:p,o:{insert:b,querySelector:_,createText:k,createComment:L}}=l,R=Hs(t.props);let{dynamicChildren:x}=t;const S=(P,M,$)=>{P.shapeFlag&16&&c(P.children,M,$,a,i,o,r,u)},I=(P=t)=>{const M=Hs(P.props),$=P.target=ul(P.props,_),v=dl($,P,k,b);$&&(o!=="svg"&&xc($)?o="svg":o!=="mathml"&&Nc($)&&(o="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add($),M||(S(P,$,v),Va(P,!1)))},O=P=>{const M=()=>{$s.get(P)===M&&($s.delete(P),Hs(P.props)&&(S(P,n,P.anchor),Va(P,!0)),I(P))};$s.set(P,M),sn(M,i)};if(e==null){const P=t.el=k(""),M=t.anchor=k("");if(b(P,n,s),b(M,n,s),Dm(t.props)||i&&i.pendingBranch){O(t);return}R&&(S(t,n,M),Va(t,!0)),I()}else{t.el=e.el;const P=t.anchor=e.anchor,M=$s.get(e);if(M){M.flags|=8,$s.delete(e),O(t);return}t.targetStart=e.targetStart;const $=t.target=e.target,v=t.targetAnchor=e.targetAnchor,E=Hs(e.props),C=E?n:$,A=E?P:v;if(o==="svg"||xc($)?o="svg":(o==="mathml"||Nc($))&&(o="mathml"),x?(p(e.dynamicChildren,x,C,a,i,o,r),Zl(e,t,!0)):u||f(e,t,C,A,a,i,o,r,!1),R)E?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Oi(t,n,P,l,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const B=t.target=ul(t.props,_);B&&Oi(t,B,null,l,0)}else E&&Oi(t,$,v,l,1);Va(t,R)}},remove(e,t,n,{um:s,o:{remove:a}},i){const{shapeFlag:o,children:r,anchor:u,targetStart:l,targetAnchor:c,target:f,props:p}=e;let b=i||!Hs(p);const _=$s.get(e);if(_&&(_.flags|=8,$s.delete(e),b=!1),f&&(a(l),a(c)),i&&a(u),o&16)for(let k=0;k{e.isMounted=!0}),bn(()=>{e.isUnmounting=!0}),e}const wn=[Function,Array],Nf={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:wn,onEnter:wn,onAfterEnter:wn,onEnterCancelled:wn,onBeforeLeave:wn,onLeave:wn,onAfterLeave:wn,onLeaveCancelled:wn,onBeforeAppear:wn,onAppear:wn,onAfterAppear:wn,onAppearCancelled:wn},Cf=e=>{const t=e.subTree;return t.component?Cf(t.component):t},Fm={name:"BaseTransition",props:Nf,setup(e,{slots:t}){const n=xa(),s=xf();return()=>{const a=t.default&&Wl(t.default(),!0);if(!a||!a.length)return;const i=Rf(a),o=st(e),{mode:r}=o;if(s.isLeaving)return Qo(i);const u=Cc(i);if(!u)return Qo(i);let l=fi(u,o,s,n,f=>l=f);u.type!==Xt&&Zs(u,l);let c=n.subTree&&Cc(n.subTree);if(c&&c.type!==Xt&&!zs(c,u)&&Cf(n).type!==Xt){let f=fi(c,o,s,n);if(Zs(c,f),r==="out-in"&&u.type!==Xt)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},Qo(i);r==="in-out"&&u.type!==Xt?f.delayLeave=(p,b,_)=>{const k=If(s,c);k[String(c.key)]=c,p[Un]=()=>{b(),p[Un]=void 0,delete l.delayedLeave,c=void 0},l.delayedLeave=()=>{_(),delete l.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return i}}};function Rf(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Xt){t=n;break}}return t}const Um=Fm;function If(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function fi(e,t,n,s,a){const{appear:i,mode:o,persisted:r=!1,onBeforeEnter:u,onEnter:l,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:p,onLeave:b,onAfterLeave:_,onLeaveCancelled:k,onBeforeAppear:L,onAppear:R,onAfterAppear:x,onAppearCancelled:S}=t,I=String(e.key),O=If(n,e),P=(v,E)=>{v&&On(v,s,9,E)},M=(v,E)=>{const C=E[1];P(v,E),Fe(v)?v.every(A=>A.length<=1)&&C():v.length<=1&&C()},$={mode:o,persisted:r,beforeEnter(v){let E=u;if(!n.isMounted)if(i)E=L||u;else return;v[Un]&&v[Un](!0);const C=O[I];C&&zs(e,C)&&C.el[Un]&&C.el[Un](),P(E,[v])},enter(v){if(O[I]===e)return;let E=l,C=c,A=f;if(!n.isMounted)if(i)E=R||l,C=x||c,A=S||f;else return;let B=!1;v[Pa]=K=>{B||(B=!0,K?P(A,[v]):P(C,[v]),$.delayedLeave&&$.delayedLeave(),v[Pa]=void 0)};const z=v[Pa].bind(null,!1);E?M(E,[v,z]):z()},leave(v,E){const C=String(e.key);if(v[Pa]&&v[Pa](!0),n.isUnmounting)return E();P(p,[v]);let A=!1;v[Un]=z=>{A||(A=!0,E(),z?P(k,[v]):P(_,[v]),v[Un]=void 0,O[C]===e&&delete O[C])};const B=v[Un].bind(null,!1);O[C]=e,b?M(b,[v,B]):B()},clone(v){const E=fi(v,t,n,s,a);return a&&a(E),E}};return $}function Qo(e){if(xo(e))return e=ks(e),e.children=null,e}function Cc(e){if(!xo(e))return Af(e.type)&&e.children?Rf(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&je(n.default))return n.default()}}function Zs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Zs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Wl(e,t=!1,n){let s=[],a=0;for(let i=0;i1)for(let i=0;iJa(k,t&&(Fe(t)?t[L]:t),n,s,a));return}if(ba(s)&&!a){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ja(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Io(s.component):s.el,o=a?null:i,{i:r,r:u}=e,l=t&&t.r,c=r.refs===ht?r.refs={}:r.refs,f=r.setupState,p=st(f),b=f===ht?zd:k=>Rc(c,k)?!1:lt(p,k),_=(k,L)=>!(L&&Rc(c,L));if(l!=null&&l!==u){if(Ic(t),Nt(l))c[l]=null,b(l)&&(f[l]=null);else if(vt(l)){const k=t;_(l,k.k)&&(l.value=null),k.k&&(c[k.k]=null)}}if(je(u))ki(u,r,12,[o,c]);else{const k=Nt(u),L=vt(u);if(k||L){const R=()=>{if(e.f){const x=k?b(u)?f[u]:c[u]:_()||!e.k?u.value:c[e.k];if(a)Fe(x)&&Pl(x,i);else if(Fe(x))x.includes(i)||x.push(i);else if(k)c[u]=[i],b(u)&&(f[u]=c[u]);else{const S=[i];_(u,e.k)&&(u.value=S),e.k&&(c[e.k]=S)}}else k?(c[u]=o,b(u)&&(f[u]=o)):L&&(_(u,e.k)&&(u.value=o),e.k&&(c[e.k]=o))};if(o){const x=()=>{R(),Ji.delete(e)};x.id=-1,Ji.set(e,x),sn(x,n)}else Ic(e),R()}}}function Ic(e){const t=Ji.get(e);t&&(t.flags|=8,Ji.delete(e))}wo().requestIdleCallback;wo().cancelIdleCallback;const ba=e=>!!e.type.__asyncLoader,xo=e=>e.type.__isKeepAlive;function Gm(e,t){Mf(e,"a",t)}function Hm(e,t){Mf(e,"da",t)}function Mf(e,t,n=Qt){const s=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(No(t,s,n),n){let a=n.parent;for(;a&&a.parent;)xo(a.parent.vnode)&&zm(s,t,n,a),a=a.parent}}function zm(e,t,n,s){const a=No(t,e,s,!0);Nn(()=>{Pl(s[t],a)},n)}function No(e,t,n=Qt,s=!1){if(n){const a=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{is();const r=wi(n),u=On(t,n,e,o);return r(),os(),u});return s?a.unshift(i):a.push(i),i}}const ls=e=>(t,n=Qt)=>{(!mi||e==="sp")&&No(e,(...s)=>t(...s),n)},Km=ls("bm"),$t=ls("m"),qm=ls("bu"),Lf=ls("u"),bn=ls("bum"),Nn=ls("um"),Vm=ls("sp"),Wm=ls("rtg"),Ym=ls("rtc");function jm(e,t=Qt){No("ec",e,t)}const $f="components";function et(e,t){return Pf($f,e,!0,t)||e}const Df=Symbol.for("v-ndc");function eo(e){return Nt(e)?Pf($f,e,!1)||e:e||Df}function Pf(e,t,n=!0,s=!1){const a=qt||Qt;if(a){const i=a.type;{const r=Lh(i,!1);if(r&&(r===t||r===rn(t)||r===yo(rn(t))))return i}const o=Oc(a[e]||i[e],t)||Oc(a.appContext[e],t);return!o&&s?i:o}}function Oc(e,t){return e&&(e[t]||e[rn(t)]||e[yo(rn(t))])}function tt(e,t,n,s){let a;const i=n,o=Fe(e);if(o||Nt(e)){const r=o&&as(e);let u=!1,l=!1;r&&(u=!hn(e),l=rs(e),e=So(e)),a=new Array(e.length);for(let c=0,f=e.length;ct(r,u,void 0,i));else{const r=Object.keys(e);a=new Array(r.length);for(let u=0,l=r.length;u0;return t!=="default"&&(n.name=t),h(),ke(fe,null,[ee("slot",n,s&&s())],l?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),h();const o=i&&Bf(i(n)),r=n.key||o&&o.key,u=ke(fe,{key:(r&&!vn(r)?r:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return i&&i._c&&(i._d=!0),u}function Bf(e){return e.some(t=>gi(t)?!(t.type===Xt||t.type===fe&&!Bf(t.children)):!0)?e:null}const fl=e=>e?sp(e)?Io(e):fl(e.parent):null,ei=Ft(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>fl(e.parent),$root:e=>fl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Uf(e),$forceUpdate:e=>e.f||(e.f=()=>{ql(e.update)}),$nextTick:e=>e.n||(e.n=xt.bind(e.proxy)),$watch:e=>$m.bind(e)}),er=(e,t)=>e!==ht&&!e.__isScriptSetup&<(e,t),Zm={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:a,props:i,accessCache:o,type:r,appContext:u}=e;if(t[0]!=="$"){const p=o[t];if(p!==void 0)switch(p){case 1:return s[t];case 2:return a[t];case 4:return n[t];case 3:return i[t]}else{if(er(s,t))return o[t]=1,s[t];if(a!==ht&<(a,t))return o[t]=2,a[t];if(lt(i,t))return o[t]=3,i[t];if(n!==ht&<(n,t))return o[t]=4,n[t];pl&&(o[t]=0)}}const l=ei[t];let c,f;if(l)return t==="$attrs"&&Zt(e.attrs,"get",""),l(e);if((c=r.__cssModules)&&(c=c[t]))return c;if(n!==ht&<(n,t))return o[t]=4,n[t];if(f=u.config.globalProperties,lt(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:a,ctx:i}=e;return er(a,t)?(a[t]=n,!0):s!==ht&<(s,t)?(s[t]=n,!0):lt(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:a,props:i,type:o}},r){let u;return!!(n[r]||e!==ht&&r[0]!=="$"&<(e,r)||er(t,r)||lt(i,r)||lt(s,r)||lt(ei,r)||lt(a.config.globalProperties,r)||(u=o.__cssModules)&&u[r])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:lt(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Mc(e){return Fe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let pl=!0;function Xm(e){const t=Uf(e),n=e.proxy,s=e.ctx;pl=!1,t.beforeCreate&&Lc(t.beforeCreate,e,"bc");const{data:a,computed:i,methods:o,watch:r,provide:u,inject:l,created:c,beforeMount:f,mounted:p,beforeUpdate:b,updated:_,activated:k,deactivated:L,beforeDestroy:R,beforeUnmount:x,destroyed:S,unmounted:I,render:O,renderTracked:P,renderTriggered:M,errorCaptured:$,serverPrefetch:v,expose:E,inheritAttrs:C,components:A,directives:B,filters:z}=t;if(l&&Qm(l,s,null),o)for(const Q in o){const ce=o[Q];je(ce)&&(s[Q]=ce.bind(n))}if(a){const Q=a.call(n,n);ct(Q)&&(e.data=js(Q))}if(pl=!0,i)for(const Q in i){const ce=i[Q],Be=je(ce)?ce.bind(n,n):je(ce.get)?ce.get.bind(n,n):qn,Xe=!je(ce)&&je(ce.set)?ce.set.bind(n):qn,De=W({get:Be,set:Xe});Object.defineProperty(s,Q,{enumerable:!0,configurable:!0,get:()=>De.value,set:J=>De.value=J})}if(r)for(const Q in r)Ff(r[Q],s,n,Q);if(u){const Q=je(u)?u.call(n):u;Reflect.ownKeys(Q).forEach(ce=>{Sf(ce,Q[ce])})}c&&Lc(c,e,"c");function j(Q,ce){Fe(ce)?ce.forEach(Be=>Q(Be.bind(n))):ce&&Q(ce.bind(n))}if(j(Km,f),j($t,p),j(qm,b),j(Lf,_),j(Gm,k),j(Hm,L),j(jm,$),j(Ym,P),j(Wm,M),j(bn,x),j(Nn,I),j(Vm,v),Fe(E))if(E.length){const Q=e.exposed||(e.exposed={});E.forEach(ce=>{Object.defineProperty(Q,ce,{get:()=>n[ce],set:Be=>n[ce]=Be,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===qn&&(e.render=O),C!=null&&(e.inheritAttrs=C),A&&(e.components=A),B&&(e.directives=B),v&&Of(e)}function Qm(e,t,n=qn){Fe(e)&&(e=gl(e));for(const s in e){const a=e[s];let i;ct(a)?"default"in a?i=va(a.from||s,a.default,!0):i=va(a.from||s):i=va(a),vt(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Lc(e,t,n){On(Fe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ff(e,t,n,s){let a=s.includes(".")?Ef(n,s):()=>n[s];if(Nt(e)){const i=t[e];je(i)&&Ge(a,i)}else if(je(e))Ge(a,e.bind(n));else if(ct(e))if(Fe(e))e.forEach(i=>Ff(i,t,n,s));else{const i=je(e.handler)?e.handler.bind(n):t[e.handler];je(i)&&Ge(a,i,e)}}function Uf(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:a,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,r=i.get(t);let u;return r?u=r:!a.length&&!n&&!s?u=t:(u={},a.length&&a.forEach(l=>to(u,l,o,!0)),to(u,t,o)),ct(t)&&i.set(t,u),u}function to(e,t,n,s=!1){const{mixins:a,extends:i}=t;i&&to(e,i,n,!0),a&&a.forEach(o=>to(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const r=Jm[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const Jm={data:$c,props:Dc,emits:Dc,methods:Wa,computed:Wa,beforeCreate:nn,created:nn,beforeMount:nn,mounted:nn,beforeUpdate:nn,updated:nn,beforeDestroy:nn,beforeUnmount:nn,destroyed:nn,unmounted:nn,activated:nn,deactivated:nn,errorCaptured:nn,serverPrefetch:nn,components:Wa,directives:Wa,watch:th,provide:$c,inject:eh};function $c(e,t){return t?e?function(){return Ft(je(e)?e.call(this,this):e,je(t)?t.call(this,this):t)}:t:e}function eh(e,t){return Wa(gl(e),gl(t))}function gl(e){if(Fe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${rn(t)}Modifiers`]||e[`${Ss(t)}Modifiers`];function ih(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ht;let a=n;const i=t.startsWith("update:"),o=i&&ah(s,t.slice(7));o&&(o.trim&&(a=n.map(c=>Nt(c)?c.trim():c)),o.number&&(a=n.map(ko)));let r,u=s[r=Wo(t)]||s[r=Wo(rn(t))];!u&&i&&(u=s[r=Wo(Ss(t))]),u&&On(u,e,6,a);const l=s[r+"Once"];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,On(l,e,6,a)}}const oh=new WeakMap;function Hf(e,t,n=!1){const s=n?oh:t.emitsCache,a=s.get(e);if(a!==void 0)return a;const i=e.emits;let o={},r=!1;if(!je(e)){const u=l=>{const c=Hf(l,t,!0);c&&(r=!0,Ft(o,c))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!r?(ct(e)&&s.set(e,null),null):(Fe(i)?i.forEach(u=>o[u]=null):Ft(o,i),ct(e)&&s.set(e,o),o)}function Co(e,t){return!e||!ho(t)?!1:(t=t.slice(2).replace(/Once$/,""),lt(e,t[0].toLowerCase()+t.slice(1))||lt(e,Ss(t))||lt(e,t))}function Pc(e){const{type:t,vnode:n,proxy:s,withProxy:a,propsOptions:[i],slots:o,attrs:r,emit:u,render:l,renderCache:c,props:f,data:p,setupState:b,ctx:_,inheritAttrs:k}=e,L=Qi(e);let R,x;try{if(n.shapeFlag&4){const I=a||s,O=I;R=Hn(l.call(O,I,c,f,b,p,_)),x=r}else{const I=t;R=Hn(I.length>1?I(f,{attrs:r,slots:o,emit:u}):I(f,null)),x=t.props?r:rh(r)}}catch(I){ti.length=0,To(I,e,1),R=ee(Xt)}let S=R;if(x&&k!==!1){const I=Object.keys(x),{shapeFlag:O}=S;I.length&&O&7&&(i&&I.some(vo)&&(x=lh(x,i)),S=ks(S,x,!1,!0))}return n.dirs&&(S=ks(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Zs(S,n.transition),R=S,Qi(L),R}const rh=e=>{let t;for(const n in e)(n==="class"||n==="style"||ho(n))&&((t||(t={}))[n]=e[n]);return t},lh=(e,t)=>{const n={};for(const s in e)(!vo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ch(e,t,n){const{props:s,children:a,component:i}=e,{props:o,children:r,patchFlag:u}=t,l=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return s?Bc(s,o,l):!!o;if(u&8){const c=t.dynamicProps;for(let f=0;fObject.create(Kf),Vf=e=>Object.getPrototypeOf(e)===Kf;function dh(e,t,n,s=!1){const a={},i=qf();e.propsDefaults=Object.create(null),Wf(e,t,a,i);for(const o in e.propsOptions[0])o in a||(a[o]=void 0);n?e.props=s?a:bm(a):e.type.props?e.props=a:e.props=i,e.attrs=i}function fh(e,t,n,s){const{props:a,attrs:i,vnode:{patchFlag:o}}=e,r=st(a),[u]=e.propsOptions;let l=!1;if((s||o>0)&&!(o&16)){if(o&8){const c=e.vnode.dynamicProps;for(let f=0;f{u=!0;const[p,b]=Yf(f,t,!0);Ft(o,p),b&&r.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!i&&!u)return ct(e)&&s.set(e,ga),ga;if(Fe(i))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",jl=e=>Fe(e)?e.map(Hn):[Hn(e)],gh=(e,t,n)=>{if(t._n)return t;const s=ge((...a)=>jl(t(...a)),n);return s._c=!1,s},jf=(e,t,n)=>{const s=e._ctx;for(const a in e){if(Yl(a))continue;const i=e[a];if(je(i))t[a]=gh(a,i,s);else if(i!=null){const o=jl(i);t[a]=()=>o}}},Zf=(e,t)=>{const n=jl(t);e.slots.default=()=>n},Xf=(e,t,n)=>{for(const s in t)(n||!Yl(s))&&(e[s]=t[s])},mh=(e,t,n)=>{const s=e.slots=qf();if(e.vnode.shapeFlag&32){const a=t._;a?(Xf(s,t,n),n&&Wd(s,"_",a,!0)):jf(t,s)}else t&&Zf(e,t)},hh=(e,t,n)=>{const{vnode:s,slots:a}=e;let i=!0,o=ht;if(s.shapeFlag&32){const r=t._;r?n&&r===1?i=!1:Xf(a,t,n):(i=!t.$stable,jf(t,a)),o=t}else t&&(Zf(e,t),o={default:1});if(i)for(const r in a)!Yl(r)&&o[r]==null&&delete a[r]},sn=kh;function vh(e){return bh(e)}function bh(e,t){const n=wo();n.__VUE__=!0;const{insert:s,remove:a,patchProp:i,createElement:o,createText:r,createComment:u,setText:l,setElementText:c,parentNode:f,nextSibling:p,setScopeId:b=qn,insertStaticContent:_}=e,k=(D,U,q,Y=null,ne=null,X=null,pe=void 0,oe=null,ue=!!U.dynamicChildren)=>{if(D===U)return;D&&!zs(D,U)&&(Y=we(D),J(D,ne,X,!0),D=null),U.patchFlag===-2&&(ue=!1,U.dynamicChildren=null);const{type:re,ref:ye,shapeFlag:ve}=U;switch(re){case Ro:L(D,U,q,Y);break;case Xt:R(D,U,q,Y);break;case zi:D==null&&x(U,q,Y,pe);break;case fe:A(D,U,q,Y,ne,X,pe,oe,ue);break;default:ve&1?O(D,U,q,Y,ne,X,pe,oe,ue):ve&6?B(D,U,q,Y,ne,X,pe,oe,ue):(ve&64||ve&128)&&re.process(D,U,q,Y,ne,X,pe,oe,ue,Ke)}ye!=null&&ne?Ja(ye,D&&D.ref,X,U||D,!U):ye==null&&D&&D.ref!=null&&Ja(D.ref,null,X,D,!0)},L=(D,U,q,Y)=>{if(D==null)s(U.el=r(U.children),q,Y);else{const ne=U.el=D.el;U.children!==D.children&&l(ne,U.children)}},R=(D,U,q,Y)=>{D==null?s(U.el=u(U.children||""),q,Y):U.el=D.el},x=(D,U,q,Y)=>{[D.el,D.anchor]=_(D.children,U,q,Y,D.el,D.anchor)},S=({el:D,anchor:U},q,Y)=>{let ne;for(;D&&D!==U;)ne=p(D),s(D,q,Y),D=ne;s(U,q,Y)},I=({el:D,anchor:U})=>{let q;for(;D&&D!==U;)q=p(D),a(D),D=q;a(U)},O=(D,U,q,Y,ne,X,pe,oe,ue)=>{if(U.type==="svg"?pe="svg":U.type==="math"&&(pe="mathml"),D==null)P(U,q,Y,ne,X,pe,oe,ue);else{const re=D.el&&D.el._isVueCE?D.el:null;try{re&&re._beginPatch(),v(D,U,ne,X,pe,oe,ue)}finally{re&&re._endPatch()}}},P=(D,U,q,Y,ne,X,pe,oe)=>{let ue,re;const{props:ye,shapeFlag:ve,transition:Re,dirs:Ne}=D;if(ue=D.el=o(D.type,X,ye&&ye.is,ye),ve&8?c(ue,D.children):ve&16&&$(D.children,ue,null,Y,ne,tr(D,X),pe,oe),Ne&&Ls(D,null,Y,"created"),M(ue,D,D.scopeId,pe,Y),ye){for(const Ve in ye)Ve!=="value"&&!Za(Ve)&&i(ue,Ve,null,ye[Ve],X,Y);"value"in ye&&i(ue,"value",null,ye.value,X),(re=ye.onVnodeBeforeMount)&&Dn(re,Y,D)}Ne&&Ls(D,null,Y,"beforeMount");const Ie=_h(ne,Re);Ie&&Re.beforeEnter(ue),s(ue,U,q),((re=ye&&ye.onVnodeMounted)||Ie||Ne)&&sn(()=>{try{re&&Dn(re,Y,D),Ie&&Re.enter(ue),Ne&&Ls(D,null,Y,"mounted")}finally{}},ne)},M=(D,U,q,Y,ne)=>{if(q&&b(D,q),Y)for(let X=0;X{for(let re=ue;re{const oe=U.el=D.el;let{patchFlag:ue,dynamicChildren:re,dirs:ye}=U;ue|=D.patchFlag&16;const ve=D.props||ht,Re=U.props||ht;let Ne;if(q&&Ds(q,!1),(Ne=Re.onVnodeBeforeUpdate)&&Dn(Ne,q,U,D),ye&&Ls(U,D,q,"beforeUpdate"),q&&Ds(q,!0),(ve.innerHTML&&Re.innerHTML==null||ve.textContent&&Re.textContent==null)&&c(oe,""),re?E(D.dynamicChildren,re,oe,q,Y,tr(U,ne),X):pe||ce(D,U,oe,null,q,Y,tr(U,ne),X,!1),ue>0){if(ue&16)C(oe,ve,Re,q,ne);else if(ue&2&&ve.class!==Re.class&&i(oe,"class",null,Re.class,ne),ue&4&&i(oe,"style",ve.style,Re.style,ne),ue&8){const Ie=U.dynamicProps;for(let Ve=0;Ve{Ne&&Dn(Ne,q,U,D),ye&&Ls(U,D,q,"updated")},Y)},E=(D,U,q,Y,ne,X,pe)=>{for(let oe=0;oe{if(U!==q){if(U!==ht)for(const X in U)!Za(X)&&!(X in q)&&i(D,X,U[X],null,ne,Y);for(const X in q){if(Za(X))continue;const pe=q[X],oe=U[X];pe!==oe&&X!=="value"&&i(D,X,oe,pe,ne,Y)}"value"in q&&i(D,"value",U.value,q.value,ne)}},A=(D,U,q,Y,ne,X,pe,oe,ue)=>{const re=U.el=D?D.el:r(""),ye=U.anchor=D?D.anchor:r("");let{patchFlag:ve,dynamicChildren:Re,slotScopeIds:Ne}=U;Ne&&(oe=oe?oe.concat(Ne):Ne),D==null?(s(re,q,Y),s(ye,q,Y),$(U.children||[],q,ye,ne,X,pe,oe,ue)):ve>0&&ve&64&&Re&&D.dynamicChildren&&D.dynamicChildren.length===Re.length?(E(D.dynamicChildren,Re,q,ne,X,pe,oe),(U.key!=null||ne&&U===ne.subTree)&&Zl(D,U,!0)):ce(D,U,q,ye,ne,X,pe,oe,ue)},B=(D,U,q,Y,ne,X,pe,oe,ue)=>{U.slotScopeIds=oe,D==null?U.shapeFlag&512?ne.ctx.activate(U,q,Y,pe,ue):z(U,q,Y,ne,X,pe,ue):K(D,U,ue)},z=(D,U,q,Y,ne,X,pe)=>{const oe=D.component=Ch(D,Y,ne);if(xo(D)&&(oe.ctx.renderer=Ke),Rh(oe,!1,pe),oe.asyncDep){if(ne&&ne.registerDep(oe,j,pe),!D.el){const ue=oe.subTree=ee(Xt);R(null,ue,U,q),D.placeholder=ue.el}}else j(oe,D,U,q,ne,X,pe)},K=(D,U,q)=>{const Y=U.component=D.component;if(ch(D,U,q))if(Y.asyncDep&&!Y.asyncResolved){Q(Y,U,q);return}else Y.next=U,Y.update();else U.el=D.el,Y.vnode=U},j=(D,U,q,Y,ne,X,pe)=>{const oe=()=>{if(D.isMounted){let{next:ve,bu:Re,u:Ne,parent:Ie,vnode:Ve}=D;{const Ct=Qf(D);if(Ct){ve&&(ve.el=Ve.el,Q(D,ve,pe)),Ct.asyncDep.then(()=>{sn(()=>{D.isUnmounted||re()},ne)});return}}let Qe=ve,nt;Ds(D,!1),ve?(ve.el=Ve.el,Q(D,ve,pe)):ve=Ve,Re&&Hi(Re),(nt=ve.props&&ve.props.onVnodeBeforeUpdate)&&Dn(nt,Ie,ve,Ve),Ds(D,!0);const dt=Pc(D),Ot=D.subTree;D.subTree=dt,k(Ot,dt,f(Ot.el),we(Ot),D,ne,X),ve.el=dt.el,Qe===null&&uh(D,dt.el),Ne&&sn(Ne,ne),(nt=ve.props&&ve.props.onVnodeUpdated)&&sn(()=>Dn(nt,Ie,ve,Ve),ne)}else{let ve;const{el:Re,props:Ne}=U,{bm:Ie,m:Ve,parent:Qe,root:nt,type:dt}=D,Ot=ba(U);Ds(D,!1),Ie&&Hi(Ie),!Ot&&(ve=Ne&&Ne.onVnodeBeforeMount)&&Dn(ve,Qe,U),Ds(D,!0);{nt.ce&&nt.ce._hasShadowRoot()&&nt.ce._injectChildStyle(dt,D.parent?D.parent.type:void 0);const Ct=D.subTree=Pc(D);k(null,Ct,q,Y,D,ne,X),U.el=Ct.el}if(Ve&&sn(Ve,ne),!Ot&&(ve=Ne&&Ne.onVnodeMounted)){const Ct=U;sn(()=>Dn(ve,Qe,Ct),ne)}(U.shapeFlag&256||Qe&&ba(Qe.vnode)&&Qe.vnode.shapeFlag&256)&&D.a&&sn(D.a,ne),D.isMounted=!0,U=q=Y=null}};D.scope.on();const ue=D.effect=new ef(oe);D.scope.off();const re=D.update=ue.run.bind(ue),ye=D.job=ue.runIfDirty.bind(ue);ye.i=D,ye.id=D.uid,ue.scheduler=()=>ql(ye),Ds(D,!0),re()},Q=(D,U,q)=>{U.component=D;const Y=D.vnode.props;D.vnode=U,D.next=null,fh(D,U.props,Y,q),hh(D,U.children,q),is(),Ac(D),os()},ce=(D,U,q,Y,ne,X,pe,oe,ue=!1)=>{const re=D&&D.children,ye=D?D.shapeFlag:0,ve=U.children,{patchFlag:Re,shapeFlag:Ne}=U;if(Re>0){if(Re&128){Xe(re,ve,q,Y,ne,X,pe,oe,ue);return}else if(Re&256){Be(re,ve,q,Y,ne,X,pe,oe,ue);return}}Ne&8?(ye&16&&Z(re,ne,X),ve!==re&&c(q,ve)):ye&16?Ne&16?Xe(re,ve,q,Y,ne,X,pe,oe,ue):Z(re,ne,X,!0):(ye&8&&c(q,""),Ne&16&&$(ve,q,Y,ne,X,pe,oe,ue))},Be=(D,U,q,Y,ne,X,pe,oe,ue)=>{D=D||ga,U=U||ga;const re=D.length,ye=U.length,ve=Math.min(re,ye);let Re;for(Re=0;Reye?Z(D,ne,X,!0,!1,ve):$(U,q,Y,ne,X,pe,oe,ue,ve)},Xe=(D,U,q,Y,ne,X,pe,oe,ue)=>{let re=0;const ye=U.length;let ve=D.length-1,Re=ye-1;for(;re<=ve&&re<=Re;){const Ne=D[re],Ie=U[re]=ue?Qn(U[re]):Hn(U[re]);if(zs(Ne,Ie))k(Ne,Ie,q,null,ne,X,pe,oe,ue);else break;re++}for(;re<=ve&&re<=Re;){const Ne=D[ve],Ie=U[Re]=ue?Qn(U[Re]):Hn(U[Re]);if(zs(Ne,Ie))k(Ne,Ie,q,null,ne,X,pe,oe,ue);else break;ve--,Re--}if(re>ve){if(re<=Re){const Ne=Re+1,Ie=NeRe)for(;re<=ve;)J(D[re],ne,X,!0),re++;else{const Ne=re,Ie=re,Ve=new Map;for(re=Ie;re<=Re;re++){const wt=U[re]=ue?Qn(U[re]):Hn(U[re]);wt.key!=null&&Ve.set(wt.key,re)}let Qe,nt=0;const dt=Re-Ie+1;let Ot=!1,Ct=0;const Jt=new Array(dt);for(re=0;re=dt){J(wt,ne,X,!0);continue}let Rt;if(wt.key!=null)Rt=Ve.get(wt.key);else for(Qe=Ie;Qe<=Re;Qe++)if(Jt[Qe-Ie]===0&&zs(wt,U[Qe])){Rt=Qe;break}Rt===void 0?J(wt,ne,X,!0):(Jt[Rt-Ie]=re+1,Rt>=Ct?Ct=Rt:Ot=!0,k(wt,U[Rt],q,null,ne,X,pe,oe,ue),nt++)}const Vt=Ot?yh(Jt):ga;for(Qe=Vt.length-1,re=dt-1;re>=0;re--){const wt=Ie+re,Rt=U[wt],Cn=U[wt+1],St=wt+1{const{el:X,type:pe,transition:oe,children:ue,shapeFlag:re}=D;if(re&6){De(D.component.subTree,U,q,Y);return}if(re&128){D.suspense.move(U,q,Y);return}if(re&64){pe.move(D,U,q,Ke);return}if(pe===fe){s(X,U,q);for(let ve=0;veoe.enter(X),ne);else{const{leave:ve,delayLeave:Re,afterLeave:Ne}=oe,Ie=()=>{D.ctx.isUnmounted?a(X):s(X,U,q)},Ve=()=>{X._isLeaving&&X[Un](!0),ve(X,()=>{Ie(),Ne&&Ne()})};Re?Re(X,Ie,Ve):Ve()}else s(X,U,q)},J=(D,U,q,Y=!1,ne=!1)=>{const{type:X,props:pe,ref:oe,children:ue,dynamicChildren:re,shapeFlag:ye,patchFlag:ve,dirs:Re,cacheIndex:Ne,memo:Ie}=D;if(ve===-2&&(ne=!1),oe!=null&&(is(),Ja(oe,null,q,D,!0),os()),Ne!=null&&(U.renderCache[Ne]=void 0),ye&256){U.ctx.deactivate(D);return}const Ve=ye&1&&Re,Qe=!ba(D);let nt;if(Qe&&(nt=pe&&pe.onVnodeBeforeUnmount)&&Dn(nt,U,D),ye&6)Me(D.component,q,Y);else{if(ye&128){D.suspense.unmount(q,Y);return}Ve&&Ls(D,null,U,"beforeUnmount"),ye&64?D.type.remove(D,U,q,Ke,Y):re&&!re.hasOnce&&(X!==fe||ve>0&&ve&64)?Z(re,U,q,!1,!0):(X===fe&&ve&384||!ne&&ye&16)&&Z(ue,U,q),Y&&le(D)}const dt=Ie!=null&&Ne==null;(Qe&&(nt=pe&&pe.onVnodeUnmounted)||Ve||dt)&&sn(()=>{nt&&Dn(nt,U,D),Ve&&Ls(D,null,U,"unmounted"),dt&&(D.el=null)},q)},le=D=>{const{type:U,el:q,anchor:Y,transition:ne}=D;if(U===fe){_e(q,Y);return}if(U===zi){I(D);return}const X=()=>{a(q),ne&&!ne.persisted&&ne.afterLeave&&ne.afterLeave()};if(D.shapeFlag&1&&ne&&!ne.persisted){const{leave:pe,delayLeave:oe}=ne,ue=()=>pe(q,X);oe?oe(D.el,X,ue):ue()}else X()},_e=(D,U)=>{let q;for(;D!==U;)q=p(D),a(D),D=q;a(U)},Me=(D,U,q)=>{const{bum:Y,scope:ne,job:X,subTree:pe,um:oe,m:ue,a:re}=D;Uc(ue),Uc(re),Y&&Hi(Y),ne.stop(),X&&(X.flags|=8,J(pe,D,U,q)),oe&&sn(oe,U),sn(()=>{D.isUnmounted=!0},U)},Z=(D,U,q,Y=!1,ne=!1,X=0)=>{for(let pe=X;pe{if(D.shapeFlag&6)return we(D.component.subTree);if(D.shapeFlag&128)return D.suspense.next();const U=p(D.anchor||D.el),q=U&&U[Tf];return q?p(q):U};let se=!1;const He=(D,U,q)=>{let Y;D==null?U._vnode&&(J(U._vnode,null,null,!0),Y=U._vnode.component):k(U._vnode||null,D,U,null,null,null,q),U._vnode=D,se||(se=!0,Ac(Y),yf(),se=!1)},Ke={p:k,um:J,m:De,r:le,mt:z,mc:$,pc:ce,pbc:E,n:we,o:e};return{render:He,hydrate:void 0,createApp:sh(He)}}function tr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ds({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function _h(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Zl(e,t,n=!1){const s=e.children,a=t.children;if(Fe(s)&&Fe(a))for(let i=0;i>1,e[n[r]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Qf(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Qf(t)}function Uc(e){if(e)for(let t=0;te.__isSuspense;function kh(e,t){t&&t.pendingBranch?Fe(e)?t.effects.push(...e):t.effects.push(e):Rm(e)}const fe=Symbol.for("v-fgt"),Ro=Symbol.for("v-txt"),Xt=Symbol.for("v-cmt"),zi=Symbol.for("v-stc"),ti=[];let mn=null;function h(e=!1){ti.push(mn=e?null:[])}function wh(){ti.pop(),mn=ti[ti.length-1]||null}let pi=1;function no(e,t=!1){pi+=e,e<0&&mn&&t&&(mn.hasOnce=!0)}function tp(e){return e.dynamicChildren=pi>0?mn||ga:null,wh(),pi>0&&mn&&mn.push(e),e}function w(e,t,n,s,a,i){return tp(g(e,t,n,s,a,i,!0))}function ke(e,t,n,s,a){return tp(ee(e,t,n,s,a,!0))}function gi(e){return e?e.__v_isVNode===!0:!1}function zs(e,t){return e.type===t.type&&e.key===t.key}const np=({key:e})=>e??null,Ki=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Nt(e)||vt(e)||je(e)?{i:qt,r:e,k:t,f:!!n}:e:null);function g(e,t=null,n=null,s=0,a=null,i=e===fe?0:1,o=!1,r=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&np(t),ref:t&&Ki(t),scopeId:wf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:qt};return r?(Xl(u,n),i&128&&e.normalize(u)):n&&(u.shapeFlag|=Nt(n)?8:16),pi>0&&!o&&mn&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&mn.push(u),u}const ee=Sh;function Sh(e,t=null,n=null,s=0,a=null,i=!1){if((!e||e===Df)&&(e=Xt),gi(e)){const r=ks(e,t,!0);return n&&Xl(r,n),pi>0&&!i&&mn&&(r.shapeFlag&6?mn[mn.indexOf(e)]=r:mn.push(r)),r.patchFlag=-2,r}if($h(e)&&(e=e.__vccOpts),t){t=Eh(t);let{class:r,style:u}=t;r&&!Nt(r)&&(t.class=Ce(r)),ct(u)&&(Eo(u)&&!Fe(u)&&(u=Ft({},u)),t.style=bs(u))}const o=Nt(e)?1:ep(e)?128:Af(e)?64:ct(e)?4:je(e)?2:0;return g(e,t,n,s,a,o,i,!0)}function Eh(e){return e?Eo(e)||Vf(e)?Ft({},e):e:null}function ks(e,t,n=!1,s=!1){const{props:a,ref:i,patchFlag:o,children:r,transition:u}=e,l=t?Ah(a||{},t):a,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&np(l),ref:t&&t.ref?n&&i?Fe(i)?i.concat(Ki(t)):[i,Ki(t)]:Ki(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==fe?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ks(e.ssContent),ssFallback:e.ssFallback&&ks(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&s&&Zs(c,u.clone(c)),c}function ae(e=" ",t=0){return ee(Ro,null,e,t)}function Th(e,t){const n=ee(zi,null,e);return n.staticCount=t,n}function V(e="",t=!1){return t?(h(),ke(Xt,null,e)):ee(Xt,null,e)}function Hn(e){return e==null||typeof e=="boolean"?ee(Xt):Fe(e)?ee(fe,null,e.slice()):gi(e)?Qn(e):ee(Ro,null,String(e))}function Qn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ks(e)}function Xl(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Fe(t))n=16;else if(typeof t=="object")if(s&65){const a=t.default;a&&(a._c&&(a._d=!1),Xl(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!Vf(t)?t._ctx=qt:a===3&&qt&&(qt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else je(t)?(t={default:t,_ctx:qt},n=32):(t=String(t),s&64?(n=16,t=[ae(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ah(...e){const t={};for(let n=0;nQt||qt;let so,hl;{const e=wo(),t=(n,s)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(s),i=>{a.length>1?a.forEach(o=>o(i)):a[0](i)}};so=t("__VUE_INSTANCE_SETTERS__",n=>Qt=n),hl=t("__VUE_SSR_SETTERS__",n=>mi=n)}const wi=e=>{const t=Qt;return so(e),e.scope.on(),()=>{e.scope.off(),so(t)}},Gc=()=>{Qt&&Qt.scope.off(),so(null)};function sp(e){return e.vnode.shapeFlag&4}let mi=!1;function Rh(e,t=!1,n=!1){t&&hl(t);const{props:s,children:a}=e.vnode,i=sp(e);dh(e,s,i,t),mh(e,a,n||t);const o=i?Ih(e,t):void 0;return t&&hl(!1),o}function Ih(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Zm);const{setup:s}=n;if(s){is();const a=e.setupContext=s.length>1?Mh(e):null,i=wi(e),o=ki(s,e,0,[e.props,a]),r=Kd(o);if(os(),i(),(r||e.sp)&&!ba(e)&&Of(e),r){if(o.then(Gc,Gc),t)return o.then(u=>{Hc(e,u)}).catch(u=>{To(u,e,0)});e.asyncDep=o}else Hc(e,o)}else ap(e)}function Hc(e,t,n){je(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ct(t)&&(e.setupState=vf(t)),ap(e)}function ap(e,t,n){const s=e.type;e.render||(e.render=s.render||qn);{const a=wi(e);is();try{Xm(e)}finally{os(),a()}}}const Oh={get(e,t){return Zt(e,"get",""),e[t]}};function Mh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Oh),slots:e.slots,emit:e.emit,expose:t}}function Io(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(vf(ui(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ei)return ei[n](e)},has(t,n){return n in t||n in ei}})):e.proxy}function Lh(e,t=!0){return je(e)?e.displayName||e.name:e.name||t&&e.__name}function $h(e){return je(e)&&"__vccOpts"in e}const W=(e,t)=>Tm(e,t,mi);function N(e,t,n){try{no(-1);const s=arguments.length;return s===2?ct(t)&&!Fe(t)?gi(t)?ee(e,null,[t]):ee(e,t):ee(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&gi(n)&&(n=[n]),ee(e,t,n))}finally{no(1)}}const Dh="3.5.32";/** +* @vue/runtime-dom v3.5.32 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let vl;const zc=typeof window<"u"&&window.trustedTypes;if(zc)try{vl=zc.createPolicy("vue",{createHTML:e=>e})}catch{}const ip=vl?e=>vl.createHTML(e):e=>e,Ph="http://www.w3.org/2000/svg",Bh="http://www.w3.org/1998/Math/MathML",Xn=typeof document<"u"?document:null,Kc=Xn&&Xn.createElement("template"),Fh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const a=t==="svg"?Xn.createElementNS(Ph,e):t==="mathml"?Xn.createElementNS(Bh,e):n?Xn.createElement(e,{is:n}):Xn.createElement(e);return e==="select"&&s&&s.multiple!=null&&a.setAttribute("multiple",s.multiple),a},createText:e=>Xn.createTextNode(e),createComment:e=>Xn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,a,i){const o=n?n.previousSibling:t.lastChild;if(a&&(a===i||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===i||!(a=a.nextSibling)););else{Kc.innerHTML=ip(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const r=Kc.content;if(s==="svg"||s==="mathml"){const u=r.firstChild;for(;u.firstChild;)r.appendChild(u.firstChild);r.removeChild(u)}t.insertBefore(r,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},fs="transition",Ba="animation",Sa=Symbol("_vtc"),op={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},rp=Ft({},Nf,op),Uh=e=>(e.displayName="Transition",e.props=rp,e),Xs=Uh((e,{slots:t})=>N(Um,lp(e),t)),Ps=(e,t=[])=>{Fe(e)?e.forEach(n=>n(...t)):e&&e(...t)},qc=e=>e?Fe(e)?e.some(t=>t.length>1):e.length>1:!1;function lp(e){const t={};for(const A in e)A in op||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:s,duration:a,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:u=i,appearActiveClass:l=o,appearToClass:c=r,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,_=Gh(a),k=_&&_[0],L=_&&_[1],{onBeforeEnter:R,onEnter:x,onEnterCancelled:S,onLeave:I,onLeaveCancelled:O,onBeforeAppear:P=R,onAppear:M=x,onAppearCancelled:$=S}=t,v=(A,B,z,K)=>{A._enterCancelled=K,ms(A,B?c:r),ms(A,B?l:o),z&&z()},E=(A,B)=>{A._isLeaving=!1,ms(A,f),ms(A,b),ms(A,p),B&&B()},C=A=>(B,z)=>{const K=A?M:x,j=()=>v(B,A,z);Ps(K,[B,j]),Vc(()=>{ms(B,A?u:i),Pn(B,A?c:r),qc(K)||Wc(B,s,k,j)})};return Ft(t,{onBeforeEnter(A){Ps(R,[A]),Pn(A,i),Pn(A,o)},onBeforeAppear(A){Ps(P,[A]),Pn(A,u),Pn(A,l)},onEnter:C(!1),onAppear:C(!0),onLeave(A,B){A._isLeaving=!0;const z=()=>E(A,B);Pn(A,f),A._enterCancelled?(Pn(A,p),bl(A)):(bl(A),Pn(A,p)),Vc(()=>{A._isLeaving&&(ms(A,f),Pn(A,b),qc(I)||Wc(A,s,L,z))}),Ps(I,[A,z])},onEnterCancelled(A){v(A,!1,void 0,!0),Ps(S,[A])},onAppearCancelled(A){v(A,!0,void 0,!0),Ps($,[A])},onLeaveCancelled(A){E(A),Ps(O,[A])}})}function Gh(e){if(e==null)return null;if(ct(e))return[nr(e.enter),nr(e.leave)];{const t=nr(e);return[t,t]}}function nr(e){return Kg(e)}function Pn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Sa]||(e[Sa]=new Set)).add(t)}function ms(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Sa];n&&(n.delete(t),n.size||(e[Sa]=void 0))}function Vc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Hh=0;function Wc(e,t,n,s){const a=e._endId=++Hh,i=()=>{a===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:r,propCount:u}=cp(e,t);if(!o)return s();const l=o+"end";let c=0;const f=()=>{e.removeEventListener(l,p),i()},p=b=>{b.target===e&&++c>=u&&f()};setTimeout(()=>{c(n[_]||"").split(", "),a=s(`${fs}Delay`),i=s(`${fs}Duration`),o=Yc(a,i),r=s(`${Ba}Delay`),u=s(`${Ba}Duration`),l=Yc(r,u);let c=null,f=0,p=0;t===fs?o>0&&(c=fs,f=o,p=i.length):t===Ba?l>0&&(c=Ba,f=l,p=u.length):(f=Math.max(o,l),c=f>0?o>l?fs:Ba:null,p=c?c===fs?i.length:u.length:0);const b=c===fs&&/\b(?:transform|all)(?:,|$)/.test(s(`${fs}Property`).toString());return{type:c,timeout:f,propCount:p,hasTransform:b}}function Yc(e,t){for(;e.lengthjc(n)+jc(e[s])))}function jc(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function bl(e){return(e?e.ownerDocument:document).body.offsetHeight}function zh(e,t,n){const s=e[Sa];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Zc=Symbol("_vod"),Kh=Symbol("_vsh"),qh=Symbol(""),Vh=/(?:^|;)\s*display\s*:/;function Wh(e,t,n){const s=e.style,a=Nt(n);let i=!1;if(n&&!a){if(t)if(Nt(t))for(const o of t.split(";")){const r=o.slice(0,o.indexOf(":")).trim();n[r]==null&&qi(s,r,"")}else for(const o in t)n[o]==null&&qi(s,o,"");for(const o in n)o==="display"&&(i=!0),qi(s,o,n[o])}else if(a){if(t!==n){const o=s[qh];o&&(n+=";"+o),s.cssText=n,i=Vh.test(n)}}else t&&e.removeAttribute("style");Zc in e&&(e[Zc]=i?s.display:"",e[Kh]&&(s.display="none"))}const Xc=/\s*!important$/;function qi(e,t,n){if(Fe(n))n.forEach(s=>qi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Yh(e,t);Xc.test(n)?e.setProperty(Ss(s),n.replace(Xc,""),"important"):e[s]=n}}const Qc=["Webkit","Moz","ms"],sr={};function Yh(e,t){const n=sr[t];if(n)return n;let s=rn(t);if(s!=="filter"&&s in e)return sr[t]=s;s=yo(s);for(let a=0;aar||(Qh.then(()=>ar=0),ar=Date.now());function ev(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;On(tv(s,n.value),t,5,[s])};return n.value=e,n.attached=Jh(),n}function tv(e,t){if(Fe(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>a=>!a._stopped&&s&&s(a))}else return t}const au=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,nv=(e,t,n,s,a,i)=>{const o=a==="svg";t==="class"?zh(e,s,o):t==="style"?Wh(e,n,s):ho(t)?vo(t)||Zh(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):sv(e,t,s,o))?(tu(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&eu(e,t,s,o,i,t!=="value")):e._isVueCE&&(av(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Nt(s)))?tu(e,rn(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),eu(e,t,s,o))};function sv(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&au(t)&&je(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return au(t)&&Nt(n)?!1:t in e}function av(e,t){const n=e._def.props;if(!n)return!1;const s=rn(t);return Array.isArray(n)?n.some(a=>rn(a)===s):Object.keys(n).some(a=>rn(a)===s)}const up=new WeakMap,dp=new WeakMap,ao=Symbol("_moveCb"),iu=Symbol("_enterCb"),iv=e=>(delete e.props.mode,e),ov=iv({name:"TransitionGroup",props:Ft({},rp,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=xa(),s=xf();let a,i;return Lf(()=>{if(!a.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!dv(a[0].el,n.vnode.el,o)){a=[];return}a.forEach(lv),a.forEach(cv);const r=a.filter(uv);bl(n.vnode.el),r.forEach(u=>{const l=u.el,c=l.style;Pn(l,o),c.transform=c.webkitTransform=c.transitionDuration="";const f=l[ao]=p=>{p&&p.target!==l||(!p||p.propertyName.endsWith("transform"))&&(l.removeEventListener("transitionend",f),l[ao]=null,ms(l,o))};l.addEventListener("transitionend",f)}),a=[]}),()=>{const o=st(e),r=lp(o);let u=o.tag||fe;if(a=[],i)for(let l=0;l{r.split(/\s+/).forEach(u=>u&&s.classList.remove(u))}),n.split(/\s+/).forEach(r=>r&&s.classList.add(r)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=cp(s);return i.removeChild(s),o}const ws=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Fe(t)?n=>Hi(t,n):t};function fv(e){e.target.composing=!0}function ou(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const An=Symbol("_assign");function ru(e,t,n){return t&&(e=e.trim()),n&&(e=ko(e)),e}const hi={created(e,{modifiers:{lazy:t,trim:n,number:s}},a){e[An]=ws(a);const i=s||a.props&&a.props.type==="number";ts(e,t?"change":"input",o=>{o.target.composing||e[An](ru(e.value,n,i))}),(n||i)&&ts(e,"change",()=>{e.value=ru(e.value,n,i)}),t||(ts(e,"compositionstart",fv),ts(e,"compositionend",ou),ts(e,"change",ou))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:a,number:i}},o){if(e[An]=ws(o),e.composing)return;const r=(i||e.type==="number")&&!/^0\d/.test(e.value)?ko(e.value):e.value,u=t??"";if(r===u)return;const l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!=="range"&&(s&&t===n||a&&e.value.trim()===u)||(e.value=u)}},pp={deep:!0,created(e,t,n){e[An]=ws(n),ts(e,"change",()=>{const s=e._modelValue,a=Ea(e),i=e.checked,o=e[An];if(Fe(s)){const r=Bl(s,a),u=r!==-1;if(i&&!u)o(s.concat(a));else if(!i&&u){const l=[...s];l.splice(r,1),o(l)}}else if(Aa(s)){const r=new Set(s);i?r.add(a):r.delete(a),o(r)}else o(gp(e,i))})},mounted:lu,beforeUpdate(e,t,n){e[An]=ws(n),lu(e,t,n)}};function lu(e,{value:t,oldValue:n},s){e._modelValue=t;let a;if(Fe(t))a=Bl(t,s.props.value)>-1;else if(Aa(t))a=t.has(s.props.value);else{if(t===n)return;a=ys(t,gp(e,!0))}e.checked!==a&&(e.checked=a)}const pv={created(e,{value:t},n){e.checked=ys(t,n.props.value),e[An]=ws(n),ts(e,"change",()=>{e[An](Ea(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[An]=ws(s),t!==n&&(e.checked=ys(t,s.props.value))}},_l={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const a=Aa(t);ts(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?ko(Ea(o)):Ea(o));e[An](e.multiple?a?new Set(i):i:i[0]),e._assigning=!0,xt(()=>{e._assigning=!1})}),e[An]=ws(s)},mounted(e,{value:t}){cu(e,t)},beforeUpdate(e,t,n){e[An]=ws(n)},updated(e,{value:t}){e._assigning||cu(e,t)}};function cu(e,t){const n=e.multiple,s=Fe(t);if(!(n&&!s&&!Aa(t))){for(let a=0,i=e.options.length;aString(l)===String(r)):o.selected=Bl(t,r)>-1}else o.selected=t.has(r);else if(ys(Ea(o),t)){e.selectedIndex!==a&&(e.selectedIndex=a);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ea(e){return"_value"in e?e._value:e.value}function gp(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const gv={created(e,t,n){Mi(e,t,n,null,"created")},mounted(e,t,n){Mi(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Mi(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Mi(e,t,n,s,"updated")}};function mv(e,t){switch(e){case"SELECT":return _l;case"TEXTAREA":return hi;default:switch(t){case"checkbox":return pp;case"radio":return pv;default:return hi}}}function Mi(e,t,n,s,a){const o=mv(e.tagName,n.props&&n.props.type)[a];o&&o(e,t,n,s)}const hv=["ctrl","shift","alt","meta"],vv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>hv.some(n=>e[`${n}Key`]&&!t.includes(n))},Bt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((a,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(a=>{if(!("key"in a))return;const i=Ss(a.key);if(t.some(o=>o===i||bv[o]===i))return e(a)}))},_v=Ft({patchProp:nv},Fh);let uu;function yv(){return uu||(uu=vh(_v))}const kv=((...e)=>{const t=yv().createApp(...e),{mount:n}=t;return t.mount=s=>{const a=Sv(s);if(!a)return;const i=t._component;!je(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const o=n(a,!1,wv(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),o},t});function wv(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Sv(e){return Nt(e)?document.querySelector(e):e}/*! + * pinia v3.0.4 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let mp;const Oo=e=>mp=e,hp=Symbol();function yl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ni;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ni||(ni={}));function Ev(){const e=Qd(!0),t=e.run(()=>F({}));let n=[],s=[];const a=ui({install(i){Oo(a),a._a=i,i.provide(hp,a),i.config.globalProperties.$pinia=a,s.forEach(o=>n.push(o)),s=[]},use(i){return this._a?n.push(i):s.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return a}const vp=()=>{};function du(e,t,n,s=vp){e.add(t);const a=()=>{e.delete(t)&&s()};return!n&&Jd()&&Qg(a),a}function ua(e,...t){e.forEach(n=>{n(...t)})}const Tv=e=>e(),fu=Symbol(),ir=Symbol();function kl(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],a=e[n];yl(a)&&yl(s)&&e.hasOwnProperty(n)&&!vt(s)&&!as(s)?e[n]=kl(a,s):e[n]=s}return e}const Av=Symbol();function xv(e){return!yl(e)||!Object.prototype.hasOwnProperty.call(e,Av)}const{assign:hs}=Object;function Nv(e){return!!(vt(e)&&e.effect)}function Cv(e,t,n,s){const{state:a,actions:i,getters:o}=t,r=n.state.value[e];let u;function l(){r||(n.state.value[e]=a?a():{});const c=km(n.state.value[e]);return hs(c,i,Object.keys(o||{}).reduce((f,p)=>(f[p]=ui(W(()=>{Oo(n);const b=n._s.get(e);return o[p].call(b,b)})),f),{}))}return u=bp(e,l,t,n,s,!0),u}function bp(e,t,n={},s,a,i){let o;const r=hs({actions:{}},n),u={deep:!0};let l,c,f=new Set,p=new Set,b;const _=s.state.value[e];!i&&!_&&(s.state.value[e]={});let k;function L($){let v;l=c=!1,typeof $=="function"?($(s.state.value[e]),v={type:ni.patchFunction,storeId:e,events:b}):(kl(s.state.value[e],$),v={type:ni.patchObject,payload:$,storeId:e,events:b});const E=k=Symbol();xt().then(()=>{k===E&&(l=!0)}),c=!0,ua(f,v,s.state.value[e])}const R=i?function(){const{state:v}=n,E=v?v():{};this.$patch(C=>{hs(C,E)})}:vp;function x(){o.stop(),f.clear(),p.clear(),s._s.delete(e)}const S=($,v="")=>{if(fu in $)return $[ir]=v,$;const E=function(){Oo(s);const C=Array.from(arguments),A=new Set,B=new Set;function z(Q){A.add(Q)}function K(Q){B.add(Q)}ua(p,{args:C,name:E[ir],store:O,after:z,onError:K});let j;try{j=$.apply(this&&this.$id===e?this:O,C)}catch(Q){throw ua(B,Q),Q}return j instanceof Promise?j.then(Q=>(ua(A,Q),Q)).catch(Q=>(ua(B,Q),Promise.reject(Q))):(ua(A,j),j)};return E[fu]=!0,E[ir]=v,E},I={_p:s,$id:e,$onAction:du.bind(null,p),$patch:L,$reset:R,$subscribe($,v={}){const E=du(f,$,v.detached,()=>C()),C=o.run(()=>Ge(()=>s.state.value[e],A=>{(v.flush==="sync"?c:l)&&$({storeId:e,type:ni.direct,events:b},A)},hs({},u,v)));return E},$dispose:x},O=js(I);s._s.set(e,O);const M=(s._a&&s._a.runWithContext||Tv)(()=>s._e.run(()=>(o=Qd()).run(()=>t({action:S}))));for(const $ in M){const v=M[$];if(vt(v)&&!Nv(v)||as(v))i||(_&&xv(v)&&(vt(v)?v.value=_[$]:kl(v,_[$])),s.state.value[e][$]=v);else if(typeof v=="function"){const E=S(v,$);M[$]=E,r.actions[$]=v}}return hs(O,M),hs(st(O),M),Object.defineProperty(O,"$state",{get:()=>s.state.value[e],set:$=>{L(v=>{hs(v,$)})}}),s._p.forEach($=>{hs(O,o.run(()=>$({store:O,app:s._a,pinia:s,options:r})))}),_&&i&&n.hydrate&&n.hydrate(O.$state,_),l=!0,c=!0,O}/*! #__NO_SIDE_EFFECTS__ */function Es(e,t,n){let s;const a=typeof t=="function";s=a?n:t;function i(o,r){const u=Im();return o=o||(u?va(hp,null):null),o&&Oo(o),o=mp,o._s.has(e)||(a?bp(e,t,s,o):Cv(e,s,o)),o._s.get(e)}return i.$id=e,i}const Rv="modulepreload",Iv=function(e){return"/"+e},pu={},Ov=function(t,n,s){let a=Promise.resolve();if(n&&n.length>0){let o=function(l){return Promise.all(l.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),u=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));a=o(n.map(l=>{if(l=Iv(l),l in pu)return;pu[l]=!0;const c=l.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const p=document.createElement("link");if(p.rel=c?"stylesheet":Rv,c||(p.as="script"),p.crossOrigin="",p.href=l,u&&p.setAttribute("nonce",u),document.head.appendChild(p),c)return new Promise((b,_)=>{p.addEventListener("load",b),p.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(o){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=o,window.dispatchEvent(r),!r.defaultPrevented)throw o}return a.then(o=>{for(const r of o||[])r.status==="rejected"&&i(r.reason);return t().catch(i)})},_p="",Mv=3e4;window.addEventListener("unhandledrejection",e=>{console.error("[API] Unhandled rejection:",e.reason)});async function ze(e,t,n,{timeoutMs:s=Mv,signal:a}={}){const i={method:e,headers:{},credentials:"include"};n!==void 0&&(i.headers["Content-Type"]="application/json",i.body=JSON.stringify(n));const o=new AbortController,r=setTimeout(()=>{o.abort(new DOMException(`no answer in ${Math.round(s/1e3)}s`,"TimeoutError"))},s);let u=null;a&&(a.aborted?o.abort(a.reason):(u=()=>o.abort(a.reason),a.addEventListener("abort",u,{once:!0})));let l;try{l=await fetch(`${_p}${t}`,{...i,signal:o.signal})}catch(c){throw o.signal.aborted&&o.signal.reason?o.signal.reason:c}finally{clearTimeout(r),u&&a.removeEventListener("abort",u)}if(l.status===401){try{const{useAuthStore:f}=await Ov(async()=>{const{useAuthStore:b}=await Promise.resolve().then(()=>Yb);return{useAuthStore:b}},void 0),p=f();p.user=null}catch{}const c=await l.text().catch(()=>"");throw new Error(`${e} ${t} → 401: ${c}`)}if(!l.ok){const c=await l.text().catch(()=>"");throw new Error(`${e} ${t} → ${l.status}: ${c}`)}return l.status===204?null:l.json()}function Lv(){return ze("GET","/auth/me")}function $v(e){return ze("PATCH","/auth/me",e)}function Dv(){return ze("POST","/auth/logout")}function Pv(){return ze("GET","/agents/profiles")}function gu({limit:e=30,offset:t=0,profileId:n=null,search:s=null,special:a=null}={}){const i=new URLSearchParams({limit:String(e),offset:String(t)});return n&&i.set("profile_id",n),s&&i.set("search",s),a!=null&&i.set("special",String(a)),ze("GET",`/sessions?${i.toString()}`)}function or(e,t){return ze("GET",`/sessions/${e}/meta`,void 0,t)}function Bv(e){return ze("GET",`/sessions/${e}/info`)}function Fa(e,t=null,n=200,s){const a=new URLSearchParams({limit:String(n)});return t!=null&&a.set("before_seq",String(t)),ze("GET",`/sessions/${e}/messages/history?${a.toString()}`,void 0,s)}function Fv(e){return ze("POST","/sessions",{profile_id:e})}function Uv(e){return ze("DELETE",`/sessions/${e}`)}function Gv(e,t){return ze("PATCH",`/sessions/${e}/pin`,{pinned:t})}function Hv(e,t){return ze("PATCH",`/sessions/${e}/name`,{name:t})}function zv(e){return ze("POST",`/sessions/${e}/stop`)}function Kv(e){return ze("POST",`/sessions/${e}/generate-name`,void 0,{timeoutMs:12e4})}function qv(e){return ze("GET",`/sessions/${e}/content`)}function Vv(e){return ze("POST",`/sessions/${e}/share`)}function Wv(e){return ze("GET",`/shared/${encodeURIComponent(e)}`)}function Yv(e,t=null,n=150){const s=new URLSearchParams({limit:String(n)});return t!=null&&s.set("before_seq",String(t)),ze("GET",`/shared/${encodeURIComponent(e)}/messages?${s.toString()}`)}function jv(e){return ze("GET",`/sessions/${e}/tasks`)}function Zv(e){return ze("GET",`/eval/feedback/${e}`)}function Xv(e,t,n){return ze("POST","/eval/feedback",{session_id:e,message_index:t,rating:n})}function Qv(e){return ze("GET",`/sessions/${e}/files`)}async function Jv(e,t){const n=new FormData;n.append("file",t);const s=await fetch(`${_p}/sessions/${e}/files`,{method:"POST",credentials:"include",body:n});if(!s.ok){const a=await s.text().catch(()=>"");throw new Error(`Upload failed: ${s.status}: ${a}`)}return s.json()}function eb(e){return ze("GET",`/sessions/${e}/recall`)}function yp(e){return ze("DELETE",`/sessions/${e}/recall`)}function kp(e){return ze("POST",`/sessions/${e}/recall/skip`)}function tb(){return ze("GET","/api-tokens")}function nb(e){return ze("POST","/api-tokens",{name:e})}function sb(e){return ze("DELETE",`/api-tokens/${e}`)}function ab(){return ze("GET","/synapse-targets")}function ib(e,t){return ze("POST","/synapse-targets",{token_ref:e,secret:t})}function ob(e){return ze("DELETE",`/synapse-targets/${e}`)}function rb(){return ze("GET","/synapse-settings")}function lb(e){return ze("PUT","/synapse-settings",e)}function mu(e=20,t="reaction"){return ze("GET",`/synapse-settings/versions?limit=${e}&doc=${t}`)}function cb(){return ze("GET","/mcp-keys")}function ub(e,t){return ze("PUT",`/mcp-keys/${e}`,{key:t})}function db(e){return ze("DELETE",`/mcp-keys/${e}`)}function fb(){return ze("POST","/admin/tools/reload")}function pb(){return ze("GET","/push/vapid-key")}function gb(e){return ze("POST","/push/subscribe",e)}function mb(e){return ze("DELETE","/push/subscribe",{endpoint:e})}function hb({kind:e=null,q:t=null,area:n=null,tag:s=null}={}){const a=new URLSearchParams;e&&a.set("kind",e),t&&a.set("q",t),n&&a.set("area",n),s&&a.set("tag",s);const i=a.toString();return ze("GET",`/skills${i?`?${i}`:""}`)}function vb(e){return ze("GET",`/skills/${encodeURIComponent(e)}`)}function bb(e){return ze("POST","/skills",e)}function _b(e,t){return ze("PUT",`/skills/${encodeURIComponent(e)}`,t)}function yb(e){return ze("DELETE",`/skills/${encodeURIComponent(e)}`)}function kb(e,t=30){return ze("GET",`/skills/${encodeURIComponent(e)}/versions?limit=${t}`)}function wb(e){return ze("GET",`/skills/proposals/${encodeURIComponent(e)}`)}const xn=Es("sessions",()=>{const t=F([]),n=F(!1),s=F(!1),a=F(!0),i=F(0),o=F(null),r=F(""),u=F(!1),l=F(null),c=F(!1),f=F(!1),p=F({}),b=new Map;let _=0;const k=new Map;function L(K,j){K==null||!j||p.value[K]!==j&&(p.value[K]=j)}function R(K){for(const j of K)L(j.session_id,j.name)}async function x(K=null){const j={limit:30,offset:0,profileId:u.value?null:K,search:u.value?r.value:null,special:!!f.value},Q=JSON.stringify({profileId:K,...j}),ce=k.get(Q);if(ce)return ce;const Be=(async()=>{const Xe=++_;o.value=K,n.value=!0;try{const De=await gu(j),J=Array.isArray(De)?De:De.items,le=new Set(J.map(Z=>Z.session_id));for(const Z of le)b.delete(Z);const _e=new Map(t.value.map(Z=>[Z.session_id,Z])),Me=J.map(Z=>{const we=_e.get(Z.session_id);return we?(Object.assign(we,Z),we):Z});if(!u.value&&!f.value)for(const Z of t.value){const we=b.get(Z.session_id);if(we===void 0||le.has(Z.session_id)||Xe>we||K!=null&&Z.profile_id!==K)continue;const se=Me.findIndex(He=>!He.pinned);Me.splice(se===-1?Me.length:se,0,Z)}t.value=Me,R(t.value),a.value=Array.isArray(De)?!1:De.has_more,i.value=Array.isArray(De)?J.length:De.next_offset,u.value&&(l.value={query:r.value,items:[...J],hasMore:a.value,nextOffset:i.value})}finally{n.value=!1}})();k.set(Q,Be);try{await Be}finally{k.delete(Q)}}async function S(){if(!(n.value||s.value||!a.value)){s.value=!0;try{const K=await gu({limit:30,offset:i.value,profileId:u.value?null:o.value,search:u.value?r.value:null,special:!!f.value}),j=Array.isArray(K)?K:K.items,Q=new Set(t.value.map(ce=>ce.session_id));t.value=[...t.value,...j.filter(ce=>!Q.has(ce.session_id))],R(t.value),a.value=Array.isArray(K)?!1:K.has_more,i.value=Array.isArray(K)?t.value.length:K.next_offset,u.value&&(l.value={query:r.value,items:[...t.value],hasMore:a.value,nextOffset:i.value})}finally{s.value=!1}}}function I(K){r.value=K,u.value=K.length>0}function O(){r.value&&(u.value=!0,l.value&&l.value.query===r.value?(t.value=l.value.items,a.value=l.value.hasMore,i.value=l.value.nextOffset):x())}function P(){r.value="",u.value=!1,l.value=null}function M(){u.value=!1}async function $(K){const j=await Fv(K);b.set(j.session_id,_);const Q=t.value.findIndex(Be=>!Be.pinned),ce=Q===-1?t.value.length:Q;return t.value.splice(ce,0,{session_id:j.session_id,profile_id:j.profile_id,created_at:j.created_at,last_active:j.created_at,message_count:0,preview:"",pinned:!1}),i.value+=1,j}async function v(K){await Uv(K),b.delete(K),t.value=t.value.filter(j=>j.session_id!==K),i.value=Math.max(0,i.value-1)}async function E(K,j){await Gv(K,j);const Q=t.value.find(ce=>ce.session_id===K);Q&&(Q.pinned=j),t.value.sort((ce,Be)=>(Be.pinned?1:0)-(ce.pinned?1:0))}function C(K,j){const Q=t.value.find(ce=>ce.session_id===K);Q&&(Q.has_pending_recall=j)}function A(K,j){const Q=t.value.find(ce=>ce.session_id===K);Q&&(Q.preview=j)}function B(K,j){L(K,j);const Q=t.value.find(ce=>ce.session_id===K);Q&&(Q.name=j)}const z=W(()=>c.value?t.value.filter(K=>K.has_pending_recall):t.value);return{nameById:p,sessions:t,filteredSessions:z,loading:n,loadingMore:s,hasMore:a,currentProfileId:o,searchQuery:r,searchActive:u,hasPendingRecallFilter:c,showSpecial:f,fetchSessions:x,fetchMoreSessions:S,rememberName:L,createSession:$,deleteSession:v,pinSession:E,updatePreview:A,updateName:B,updateRecallStatus:C,setSearch:I,restoreSearch:O,clearSearch:P,exitSearch:M,searchCache:l}}),Si=Es("profiles",()=>{const e=F([]),t=F(null),n=F(!1);async function s(){n.value=!0;try{e.value=await Pv(),e.value.length&&!t.value&&(t.value=e.value[0].id)}finally{n.value=!1}}function a(i){return e.value.find(o=>o.id===i)??null}return{profiles:e,selectedProfileId:t,loading:n,fetchProfiles:s,getProfile:a}});function Sb(){return{currentId:F(null),currentProfileId:F(null),messages:F([]),streaming:F(!1),pendingImages:F([]),pendingFiles:F([]),artifacts:F([]),files:F([]),contextTokens:F(0),maxContextTokens:F(0),servedModel:F(null),servedTarget:F(null),servedFallback:F(!1),wsConnected:F(!1),wsReconnecting:F(!1),loading:F(!1),loadError:F(null),loadErrorSessionId:F(null),imagesProcessing:F(0),awaitingStream:F(!1),streamingMsg:mf(null),replayMode:F(!1),scrollToMessageIndex:F(null),recall:F(null),terminals:F({}),backgroundTasks:F({}),toolIndex:new Map,viewedImages:F([]),_viewedImageKeys:new Set,_terminalTaskIds:new Set,archiveLoading:F(!1),archiveHasMore:F(!1),archiveNextBefore:F(null),historyCount:F(0),archiveExtended:F(!1)}}function Eb(e){const{messages:t,viewedImages:n,_viewedImageKeys:s}=e;function a(l){for(const c of l)!c||s.has(c)||(s.add(c),n.value.push(c))}function i(l){var b,_,k,L,R,x,S;const c=[];let f=0;const p=I=>{var P;const O=l[I];return((P=O==null?void 0:O.metadata)==null?void 0:P.display_index)??I};for(;ftypeof M=="string"&&M.startsWith("data:")?M:`data:image/jpeg;base64,${String(M??"")}`);if((L=(k=I.content)==null?void 0:k.startsWith)!=null&&L.call(k,"[Image loaded via")&&P.length){a(P),f++;continue}c.push({id:`h_${O}`,role:"user",text:I.content??"",images:P,files:I.files??[],time:I.created_at??null,rawIndices:[O],isRecall:I.is_recall??!1}),f++;continue}if(I.role==="assistant"){const P=f,M=O,$=[];let v=null,E="",C=null;for(;f=l.length||l[f].role!=="assistant")break}}if(v||$.length||E){const A=`h_${M}`;let B=null,z=null,K=null;for(let j=P;jp(P+Q))})}continue}f++}return c}function o(l,c,f,{queued:p=!1,clientKey:b=null}={}){const _={id:`user_${Date.now()}`,role:"user",text:l,images:[...c],files:[...f],time:new Date().toISOString(),queued:p,clientKey:b,animate:!0};return t.value.push(_),t.value[t.value.length-1]}function r(l,c="queue_full"){if(!l)return!1;const f=t.value.find(p=>p.clientKey===l);return f?(f.failed=!0,f.queued=!1,f.failReason=f.failReason??c,!0):!1}function u(l){var c;if(l!=null&&l.proposal_id)for(const f of t.value)for(const p of f.tools||[])p.kind==="ui_component"&&p.component==="skill_proposal"&&((c=p.payload)==null?void 0:c.proposal_id)===l.proposal_id&&(p.payload.status=l.status,p.payload.skill_id=l.skill_id??null,p.payload.error=l.error||"")}return{_addViewedImage:a,buildMessageList:i,appendUserMessage:o,markMessageFailed:r,onProposalDecided:u}}function Tb(e){const{currentId:t}=e;function n(a){t.value&&(a?localStorage.setItem(`draft:${t.value}`,a):localStorage.removeItem(`draft:${t.value}`))}function s(a){return localStorage.getItem(`draft:${a}`)??""}return{saveDraft:n,loadDraft:s}}function Ab(e){const{currentId:t,artifacts:n,files:s,messages:a}=e;let i=null,o=null,r=null;async function u(b=t.value){if(!b){n.value=[];return}i=b;try{const{content:_=[]}=await qv(b);i===b&&(n.value=_)}catch{i===b&&(n.value=[])}}async function l(b=t.value){if(!b){s.value=[];return}o=b;try{const{files:_=[]}=await Qv(b);o===b&&(s.value=_)}catch{o===b&&(s.value=[])}}function c(b){if(!(b!=null&&b.filename))return;const _=b.id||b.filename,k=n.value.findIndex(R=>(R.id||R.filename)===_),L={...b};k===-1?n.value.unshift(L):n.value.splice(k,1,{...n.value[k],...L})}async function f(b){var k,L;const _=a.value;r=b;try{const{feedback:R=[]}=await Zv(b);if(r!==b||a.value!==_||!R.length)return;const x=new Map(R.map(S=>[S.message_index,S.rating]));for(const S of a.value){if(S.role!=="assistant")continue;const I=(L=(k=S.id)==null?void 0:k.startsWith)!=null&&L.call(k,"h_")?Number(S.id.slice(2)):NaN;Number.isInteger(I)&&x.has(I)&&(S.rating=x.get(I))}}catch{}}async function p(b,_){var x,S;if(!t.value||!b)return;const k=(S=(x=b.id)==null?void 0:x.startsWith)!=null&&S.call(x,"h_")?Number(b.id.slice(2)):NaN;if(!Number.isInteger(k))return;const L=b.rating===_?0:_,R=b.rating??0;b.rating=L;try{await Xv(t.value,k,L)}catch(I){throw b.rating=R,I}}return{fetchArtifacts:u,fetchFiles:l,upsertArtifact:c,mergeFeedback:f,rateMessage:p}}function xb(e){const{currentId:t,recall:n}=e;let s=null;async function a(u=t.value){if(!u){n.value=null;return}s=u;try{const l=await eb(u);s===u&&(n.value=(l==null?void 0:l.recall)??null)}catch{s===u&&(n.value=null)}}async function i(){if(!t.value)return!1;try{return await yp(t.value),n.value=null,xn().updateRecallStatus(t.value,!1),!0}catch(u){return console.error("cancel recall failed",u),!1}}async function o(){if(!t.value)return!1;try{return await kp(t.value),await a(),!0}catch(u){return console.error("skip recall failed",u),!1}}function r(u){if(!u.session_id)return;const l=xn(),c=u.status==="pending";l.updateRecallStatus(u.session_id,c),u.session_id===t.value&&(c?a(u.session_id):n.value=null)}return{loadRecall:a,cancelRecall:i,skipRecall:o,onRecallUpdate:r}}function Nb(e){const{currentId:t,backgroundTasks:n,_terminalTaskIds:s,toolIndex:a}=e;async function i(r=t.value){if(!r){n.value={};return}let u=[];try{u=(await jv(r)).tasks??[]}catch{return}if(t.value!==r)return;const l={};for(const c of u)l[c.task_id]={taskId:c.task_id,tool:c.tool,status:c.status,startedAt:c.started_at??null,finishedAt:c.finished_at??null,argsSummary:c.args_summary??"",preview:c.result_preview??"",subagentTokens:c.subagent_tokens??null},c.status!=="running"&&s.add(c.task_id);for(const c of Object.values(n.value))l[c.taskId]=c;n.value=l}function o(r){const u=r.task_id;if(u&&!(r.session_id&&t.value&&r.session_id!==t.value)){if(r.parent_tool_call_id){const l=a.get(r.parent_tool_call_id);if(l){const c=l.steps[l.steps.length-1];(c==null?void 0:c.kind)==="task_update"&&c.status===r.status&&c.preview===(r.result_preview??"")||l.steps.push({kind:"task_update",taskId:u,tool:r.tool,status:r.status,preview:r.result_preview??""}),r.subagent_tokens!=null&&(l.subagentTokens=r.subagent_tokens)}}if(r.status!=="running"){s.add(u);const l=n.value[u];l&&(n.value={...n.value,[u]:{...l,status:r.status,preview:r.result_preview??l.preview,finishedAt:r.finished_at??l.finishedAt??null,subagentTokens:r.subagent_tokens??l.subagentTokens??null}})}else!s.has(u)&&!n.value[u]&&(n.value={...n.value,[u]:{taskId:u,tool:r.tool,status:r.status,startedAt:r.started_at??null,finishedAt:null,argsSummary:r.args_summary??"",preview:"",subagentTokens:null}})}}return{fetchTasks:i,onTaskUpdate:o}}const Cb=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]),Rb=new Set(["write","append","edit","edit_lines","insert","mkdir","move","copy","delete","rm","cp","mv"]);function Ib({state:e,content:t,recall:n,messageHelpers:s}){const{messages:a,streamingMsg:i,toolIndex:o,terminals:r,currentId:u,recall:l}=e,{upsertArtifact:c,fetchFiles:f,fetchArtifacts:p}=t,{loadRecall:b}=n,{_addViewedImage:_}=s;function k(O){for(let P=O.tools.length-1;P>=0;P--){const M=O.tools[P];if(M.kind==="tool"&&M.name==="spawn_agent")return M}}function L(O){var $,v;const P=i.value;if(!P)return;const M={kind:"tool",id:`tool_${Date.now()}`,toolCallId:O.tool_call_id??null,name:O.tool,args:O.args,result:null,success:null,pending:!0,startedAt:Date.now(),isSubagent:O.is_subagent??!1,steps:[],terminalName:O.tool==="terminal"&&(($=O.args)==null?void 0:$.terminal_name)||null};if(M.parentMsg=P,O.is_subagent){const E=k(P);if(E){E.steps.push(M),M.toolCallId&&o.set(M.toolCallId,E.steps[E.steps.length-1]);return}}if(P.tools.push(M),M.toolCallId&&o.set(M.toolCallId,P.tools[P.tools.length-1]),O.tool==="terminal"&&((v=O.args)==null?void 0:v.action)==="open"){const E=O.args.terminal_name;if(E){const C=r.value[E]||{};r.value={...r.value,[E]:{...C,name:E,description:O.args.description||"",command:O.args.command||"",background:O.args.background||!1,output:C.output||"",closed:!1}}}}}function R(O){var M,$;if((M=O.metadata)!=null&&M.is_image&&(($=O.metadata)!=null&&$.base64)&&_([O.metadata.data_url??`data:image/jpeg;base64,${O.metadata.base64}`]),O.is_subagent&&!O.tool_call_id){const v=i.value??S(),E=v?k(v):null;if(E)for(let C=E.steps.length-1;C>=0;C--){const A=E.steps[C];if(A.kind==="tool"&&A.name===O.tool&&A.pending){x(A,O);return}}}let P=O.tool_call_id?o.get(O.tool_call_id)??null:null;if(!P&&!O.tool_call_id){const v=i.value;if(v)for(let E=v.tools.length-1;E>=0;E--){const C=v.tools[E];if(C.kind==="tool"&&C.name===O.tool&&C.pending){P=C;break}}}P||(P=I(O)),P&&x(P,O)}function x(O,P){var M,$,v,E,C;{if(O.result=P.result,O.success=P.success!==!1,O.pending=!1,P.metadata&&(O.metadata=P.metadata),O.success&&((M=P.metadata)!=null&&M.ui_component)){const A=O.parentMsg??i.value??S();A&&!O.isSubagent&&A.tools.push({kind:"ui_component",component:P.metadata.ui_component.component??"",payload:P.metadata.ui_component.payload??{}})}if(P.tool==="content_publish"&&O.success&&P.metadata&&c(P.metadata),Cb.has(P.tool)&&O.success&&u.value){const A=typeof O.args=="object"?($=O.args)==null?void 0:$.action:null;Rb.has(A)&&f(u.value),["write","edit","edit_lines"].includes(A)&&p(u.value)}if((P.tool==="terminal"||P.tool==="code_exec")&&O.success&&u.value&&f(u.value),P.tool==="terminal"&&O.success&&u.value){const A=typeof O.args=="object"?(v=O.args)==null?void 0:v.action:null,B=(E=O.args)==null?void 0:E.terminal_name;if(P.metadata){if(A==="open"||A==="status"){if(B){const z=r.value[B]||{};r.value={...r.value,[B]:{...z,...P.metadata,name:B,closed:!1}}}}else if(A==="list"&&Array.isArray(P.metadata.terminals))for(const z of P.metadata.terminals){if(!z.name)continue;const K=r.value[z.name]||{};r.value={...r.value,[z.name]:{...K,...z,closed:!1}}}else if(A==="close"&&B){const z=r.value[B]||{};r.value={...r.value,[B]:{...z,closed:!0,closeReason:"explicit"}}}}}if(P.tool==="schedule_recall"&&O.success&&u.value&&(b(u.value),xn().updateRecallStatus(u.value,!0)),P.tool==="manage_recall"&&O.success&&u.value){const A=(C=O.args)==null?void 0:C.action;A==="cancel"?(l.value=null,xn().updateRecallStatus(u.value,!1)):A==="skip"&&b(u.value)}}}function S(){for(let O=a.value.length-1;O>=0;O--){const P=a.value[O];if(P.role==="assistant"&&Array.isArray(P.tools))return P}return null}function I(O){const P=i.value??S();if(!P)return null;const M={kind:"tool",id:`tool_${Date.now()}`,toolCallId:O.tool_call_id??null,name:O.tool,args:null,result:null,success:null,pending:!1,isSubagent:O.is_subagent??!1,steps:[]};if(M.parentMsg=P,O.is_subagent){const v=k(P);if(v){v.steps.push(M);const E=v.steps[v.steps.length-1];return M.toolCallId&&o.set(M.toolCallId,E),E}}P.tools.push(M);const $=P.tools[P.tools.length-1];return M.toolCallId&&o.set(M.toolCallId,$),$}return{_lastSpawnCard:k,onToolStarted:L,onToolCall:R,_applyToolResult:x,_lastAssistantMsg:S,_synthesizeToolCard:I}}function Ob(e){const{terminals:t,streamingMsg:n}=e;function s(o){const r=o.terminal_name;if(!r)return;const u=t.value[r]||{};t.value={...t.value,[r]:{...u,name:r,closed:!1}}}function a(o){const r=o.terminal_name;if(!r)return;const u=t.value[r]||{output:""},l={...u,output:(u.output||"")+(o.delta||"")};t.value={...t.value,[r]:l};const c=n.value;if(c)for(let f=c.tools.length-1;f>=0;f--){const p=c.tools[f];if(p.kind==="tool"&&p.name==="terminal"&&p.terminalName===r){p.terminalOutput=l.output;break}}}function i(o){const r=o.terminal_name;if(!r)return;const l={...t.value[r]||{},closed:!0,closeReason:o.reason||"unknown"};t.value={...t.value,[r]:l};const c=n.value;if(c)for(let f=c.tools.length-1;f>=0;f--){const p=c.tools[f];if(p.kind==="tool"&&p.name==="terminal"&&p.terminalName===r&&p.pending){p.pending=!1,p.success=o.reason!=="error";break}}}return{onTerminalOpened:s,onTerminalOutput:a,onTerminalClosed:i}}const Mb={"app.titleSettings":"Navi — Settings","artifacts.panelLabel":"Session artifacts","artifacts.resize":"Resize artifacts","artifacts.close":"Close artifacts","artifacts.closeDetails":"Close details","artifacts.tabArtifacts":"Artifacts","artifacts.tabLinks":"Links","artifacts.tabFiles":"Files","artifacts.tabBackgrounds":"Backgrounds","artifacts.viewedImages":"Viewed images","artifacts.viewedImageAlt":"Image viewed by Navi {n}","artifacts.emptyArtifacts":"No published files","artifacts.emptyLinks":"No links found yet","artifacts.emptyFiles":"No files in session directory","artifacts.emptyBackgrounds":"No background tasks or terminals","artifacts.openPreview":"Open preview","artifacts.openFullscreen":"Open fullscreen","artifacts.loadingPreview":"Loading preview...","artifacts.textPreviewLimited":"Showing the first {size} — open the file to read the rest.","artifacts.openRaw":"Open raw file","artifacts.viewFile":"Open in viewer","artifacts.play":"Play","artifacts.pause":"Pause","artifacts.seek":"Playback position","artifacts.mute":"Mute","artifacts.unmute":"Unmute","artifacts.volume":"Volume","artifacts.audioFailed":"This file could not be played.","artifacts.showPreview":"Show preview","artifacts.showSource":"Show source","artifacts.copyFileLink":"Copy file link","artifacts.copyAllLinks":"Copy all links","artifacts.openAllLinks":"Open all links","artifacts.refreshFiles":"Refresh files","artifacts.linksInSession":{one:"{n} link in session",other:"{n} links in session"},"artifacts.loadingSource":"Loading source...","artifacts.previewUnavailable":"Preview unavailable","artifacts.sourceFailed":"Failed to load source: {error}","artifacts.latestProgress":"Latest progress","artifacts.noOutput":"No output yet — it arrives as a note next turn.","artifacts.terminal":"Terminal","artifacts.directory":"Directory","artifacts.toolAndAge":"{tool} · {age} ago","artifacts.statusRunning":"Running","artifacts.statusDone":"Done","artifacts.statusFailed":"Failed","artifacts.statusStopped":"Stopped","artifacts.statusBusy":"Busy","artifacts.statusIdle":"Idle","artifacts.statusClosed":"Closed","sidebar.newChat":"New Chat","sidebar.searchPlaceholder":"Search conversations...","sidebar.results":{one:"{n} result",other:"{n} results"},"sidebar.conversations":"Conversations","sidebar.serviceSessions":"Service sessions","sidebar.pendingRecallsOnly":"Pending recalls only","sidebar.serviceSessionsLabel":"Service (Synapse) sessions","sidebar.search":"Search","sidebar.refresh":"Refresh","sidebar.loadingConversations":"Loading conversations...","sidebar.noConversations":"No conversations yet","sidebar.noMatch":"No conversations match the current filter","sidebar.pinned":"Pinned","sidebar.recallPending":"Scheduled recall pending","sidebar.serviceSession":"Service session (Synapse reaction)","sidebar.cancelRecall":"Cancel recall","sidebar.skipNext":"Skip next","sidebar.pin":"Pin","sidebar.unpin":"Unpin","sidebar.noAuthTitle":"Authorization is disabled","sidebar.localMode":"Local mode","sidebar.localAvatar":"local","sidebar.admin":"Admin","sidebar.openProfile":"Open profile in gnexus-auth","sidebar.avatar":"avatar","sidebar.logout":"Logout","sidebar.login":"Login","common.error":"Something went wrong","common.menu":"Menu","common.save":"Save","common.cancel":"Cancel","common.close":"Close","common.create":"Create","common.add":"Add","common.done":"Done","common.never":"Never","common.always":"Always","common.you":"You","common.revoke":"Revoke","common.copyToClipboard":"Copy to clipboard","common.copy":"Copy","common.copied":"Copied!","common.task":"task","common.toolsCount":{one:"{n} tool",other:"{n} tools"},"common.download":"Download","common.yes":"Yes","common.no":"No","common.notAvailable":"N/A","common.result":"Result","common.liveOutput":"Live output","common.delete":"Delete","common.minutesAgo":{one:"{n}m ago",other:"{n}m ago"},"common.pullToRefresh":"Pull to refresh","common.releaseToRefresh":"Release to refresh","common.refreshing":"Refreshing...","common.justNow":"just now","messages.thinking":"Thinking","messages.thinkingStatus":"Thinking...","messages.plan":"Plan","messages.arguments":"Arguments","messages.running":"running","messages.toolInterrupted":"Interrupted — the run ended before this tool reported a result","messages.starting":"starting","messages.runningTool":"Running {tool}...","messages.preparingNext":"Preparing next action...","messages.showAllTools":"Show all tools","messages.hideOlderTools":"Hide older tools","messages.useful":"Useful","messages.notUseful":"Not useful","messages.scheduledRecall":"Scheduled recall","messages.synapseEvent":"Synapse event","messages.openFile":"Open file","messages.untitledContent":"Content","messages.unknownUiComponent":"Unknown UI component: {name}","messages.jsonItems":{one:"{n} item",other:"{n} items"},"messages.jsonKeys":{one:"{n} key",other:"{n} keys"},"messages.contextSummary":"Context summary","messages.compressingContext":"Compressing context…","messages.contextCompressed":"Context compressed","messages.compressionCounts":{one:"({before} → {after} message)",other:"({before} → {after} messages)"},"chat.rename":"Rename","chat.scheduledRecall":"Scheduled {type} recall at {time}","chat.recallOnce":"once","chat.recallRecurring":"recurring","chat.recallImmediate":"immediate","chat.recallDetailsHint":"Open recall details","chat.recallInfoTitle":"Scheduled recall","chat.recallType":"Type","chat.recallAt":"Scheduled for","chat.recallAdded":"Created","chat.recallWhen":"Fires","chat.recallIn":"in {interval}","chat.recallDueNow":"any moment now","chat.recallUnderAMinute":"in under a minute","chat.recallInterval":"Repeats","chat.recallComment":"Comment","chat.recallMessage":"System message","chat.recallGone":"This recall is no longer scheduled.","chat.recallCancel":"Cancel call","chat.recallCancelFailed":"Could not cancel the recall","chat.recallSkipFailed":"Could not skip the next recall","chat.backupModel":"Backup: {model}","chat.backupModelTitle":"The route's primary is unavailable — {model} on {target} is answering","chat.sessionInfo":"Session info","chat.moreActions":"More actions","chat.deleteSession":"Delete session","chat.infoLoading":"Loading…","chat.infoError":"Could not load session info","chat.infoRefresh":"Refresh","chat.infoModelSection":"Model and server","chat.infoSessionSection":"Session","chat.infoLiveSection":"Connection and generation","chat.infoRouteSection":"Route chain","chat.infoPrimary":"primary","chat.infoBackup":"backup","chat.infoNoRoute":"This deployment has no llm.json routes — the profile's model list is used.","chat.infoRoute":"Route","chat.infoWindow":"Context window","chat.infoTokens":"tokens","chat.infoConfiguredModels":"Configured models","chat.infoSessionId":"Session ID","chat.infoProfile":"Profile","chat.infoCreated":"Created","chat.infoLastActive":"Last active","chat.infoMessages":"Messages","chat.infoArchive":"Archive","chat.infoArchiveValue":"up to #{seq}","chat.infoContext":"Context","chat.infoCompression":"Compression","chat.infoCompressionValue":"at {pct}%, keep last {keep}, summary up to {max} tokens","chat.infoCompressionOff":"off","chat.infoRecall":"Scheduled recall","chat.infoRecallEvery":"every {interval}","chat.infoRecallMinutes":"{n} min","chat.infoRecallHours":"{n} h","chat.infoRecallDays":"{n} d","chat.infoRunning":"Generation","chat.infoRunningYes":"running","chat.infoRunningNo":"idle","chat.infoClients":"Connected clients","chat.infoWs":"WebSocket","chat.infoWsConnected":"connected","chat.infoWsReconnecting":"reconnecting…","chat.infoWsOffline":"not connected","chat.infoTasks":"Background tasks","chat.infoNone":"none","chat.infoStateOk":"ok","chat.infoStateDegraded":"degraded","chat.infoStateMissing":"missing","chat.connectionLost":"Connection lost. Retrying in background…","chat.retry":"Retry","chat.nothingOpen":"Nothing open","chat.startConversation":"Select a conversation or start a new one","chat.attachFiles":"Attach files","chat.messagePlaceholder":"Message Navi…","chat.stopGeneration":"Stop generation","chat.sendEnter":"Send (Enter)","chat.sending":"Sending…","chat.removeAttachment":"Remove","chat.attachment":"attachment","chat.loadingOlder":"Loading older messages…","chat.loadFailed":"Could not load the session: {error}","chat.loadTimeout":"the server did not answer in time","chat.sendFailed":"Not sent — the connection queue is full","chat.sendUnconfirmed":"Not delivered — the server never confirmed it","chat.sendDropped":"Lost — the server’s queue overflowed","chat.sessionGone":"This session no longer exists — it was deleted or moved.","chat.sessionAccessDenied":"You no longer have access to this session.","chat.signIn":"Sign in","chat.scrollToBottom":"Scroll to bottom","chat.queuedBadge":"Queued — will run after this turn","chat.sendQueued":"Send — it runs after the current turn","chat.messagePlaceholderBusy":"Navi is working…","ui.welcomeTitle":"Welcome to Navi","ui.tagline":"Your personal AI assistant","ui.loginWithGnexus":"Login with GNEXUS","ui.offline":"No network — the interface is open from cache, messages are not sent","ui.confirmTitle":"Requires confirmation","ui.photo":"Photo","ui.preview":"Preview","ui.loadImageFailed":"Failed to load image","ui.reply":"Reply","ui.replyToSelection":"Reply to selection","ui.overview":"Overview","ui.description":"Description","ui.details":"Details","ui.moreCards":"+{n} more","ui.submitted":"Submitted","ui.formOffline":"No connection — the form cannot be sent right now","ui.proposalNew":"New protocol","ui.proposalReplaces":"New version","ui.proposalAccept":"Add to catalog","ui.proposalReject":"Reject","ui.proposalAccepted":"Added to the catalog","ui.proposalRejected":"Rejected","ui.proposalInCatalog":"In the catalog","ui.proposalLoading":"Loading the proposal…","ui.proposalNotFound":"The proposal could not be loaded","ui.proposalOffline":"No connection — cannot decide right now","ui.proposalTriggers":"When to use it","ui.proposalPreconditions":"Preconditions","ui.proposalSteps":"Steps","ui.proposalPostChecks":"After each step","ui.proposalFallbacks":"If something goes wrong","ui.proposalContext":"Context","ui.proposalOnDeviation":"If the run goes off plan","ui.proposalOnBlocked":"If it cannot be completed","ui.proposalOnAlreadyDone":"If a step is already done","ui.submit":"Submit","ui.fieldRequired":"{field} is required","ui.invalidEmail":"Enter a valid email address","ui.invalidUrl":"Enter a valid http:// or https:// URL","ui.notANumber":"Must be a number","ui.minValue":"Minimum value is {n}","ui.maxValue":"Maximum value is {n}","ui.minLength":{one:"Minimum length is {n} character",other:"Minimum length is {n} characters"},"ui.maxLength":{one:"Maximum length is {n} character",other:"Maximum length is {n} characters"},"ui.invalidFormat":"Invalid format","ui.notificationsPromptTitle":"Turn on notifications","ui.notificationsPromptText":"Navi can let you know when a reply is ready — even if this tab is closed.","ui.notificationsPromptAllow":"Turn on","ui.notificationsPromptLater":"Not now","col.name":"Name","col.key":"Key","col.created":"Created","col.lastUsed":"Last used","col.tool":"Tool","col.status":"Status","col.started":"Started","col.finished":"Finished","col.subagentTokens":"Sub-agent tokens","col.pid":"PID","col.command":"Command","col.cwd":"CWD","col.uptime":"Uptime","col.background":"Background","col.reason":"Reason","confirm.revokeKey":'Revoke API key "{name}"? This cannot be undone.',"confirm.revokeTarget":'Revoke Synapse target "{target}"? This cannot be undone.',"confirm.mcpResetAdmin":'Reset the key for "{server}" to the shared default?',"confirm.deleteSession":"Delete this conversation?","confirm.mcpReset":'Remove your key for "{server}"? The server stops being connected for you.',"profile.languageAuto":"Auto (from account)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Language saved","toast.keyCreateFailed":"Failed to create key","toast.keyRevoked":"API key revoked","toast.keyRevokeFailed":"Failed to revoke key","toast.notificationsDenied":"Permission denied","toast.notificationsAllowApp":"Allow notifications in the system app settings.","toast.notificationsAllowBrowser":"Allow notifications in the browser site settings.","toast.notificationsUnavailable":"Push unavailable","toast.notificationsUnavailableText":"The server does not accept push subscriptions right now.","toast.notificationsFailed":"Push error","toast.mcpKeySaved":"Key saved for {server}","toast.mcpKeySaveFailed":"Failed to save key","toast.mcpKeyReset":"Key reset for {server}","toast.mcpKeyResetFailed":"Failed to reset key","toast.synapseTargetAdded":"Target added","toast.synapseTargetAddFailed":"Failed to add target","toast.synapseTargetRevoked":"Target revoked","toast.synapseTargetRevokeFailed":"Failed to revoke target","toast.reactionsLoadFailed":"Failed to load reaction settings","toast.bgTaskStarted":"Background task started","toast.bgTaskFinished":"Background task finished","toast.mcpConnected":"MCP server connected","toast.mcpDisconnected":"MCP server disconnected","toast.saveFailed":"Failed to save","toast.instructionsSaved":"Instructions saved","toast.instructionsFailed":"Failed to save instructions","toast.toolsReloaded":{one:"Reloaded {n} tool",other:"Reloaded {n} tools"},"toast.toolsReloadErrors":"Reload finished with errors — see the panel","toast.toolsReloadFailed":"Failed to reload tools","settings.title":"Settings","settings.sectionsLabel":"Settings sections","settings.tabApp":"App","settings.tabAccount":"Account","settings.tabNotifications":"Notifications","settings.tabSynapse":"Synapse","settings.tabSkills":"Skills","settings.tabProtocols":"Protocols","settings.tabMcp":"MCP","settings.languageToolbar":"Interface language","settings.languageDescription":"Navi follows the language of your gnexus-auth account by default; a choice here overrides it for Navi only. Auto goes back to the account language.","settings.languageDescriptionOpen":"Sign-in is switched off on this Navi, so the language is kept in this browser only.","settings.appTitle":"App","settings.appDescription":"Navi is a web app, but it can live on your device like a native one — either installed into this browser, or as the Android app, which wraps this same interface. They are not exclusive: the Android app is worth having on a phone, the installed web app everywhere else.","settings.appInstallTitle":"Install in this browser","settings.appInstallText":"Installing puts Navi in its own window with no address bar, adds an icon to your dock or home screen, and caches the interface so the app opens instantly and still shows your sessions offline. It also enables notifications for finished replies — including when the tab is closed.","settings.appAndroidAlert":"You are reading this inside the Android app, which is already installed. To update it, download the APK below and install it over the old one.","settings.appInstalledAlert":"Installed — Navi is running in its own window, not in a browser tab.","settings.appInstallAction":"Install","settings.appInstallHint":"Your browser will ask you to confirm.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"tap","settings.appIosShare":"Share, then","settings.appIosAddHome":"Add to Home Screen","settings.appIosNote":"Notifications there need iOS 16.4 or newer and work only in the installed app, not in a Safari tab.","settings.appBrowserChrome":"Chrome or Edge:","settings.appChromeClick":"click the install icon at the right end of the address bar, or open the","settings.appChromeMenu":"menu and choose","settings.appChromeInstall":"Install Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"open the","settings.appAndroidMenu":"menu and choose","settings.appAndroidInstall":"Install app","settings.appAndroidAlso":"(sometimes “Add to Home screen”)","settings.appHttpsBefore":"Browsers only offer this over HTTPS or on localhost — over a plain","settings.appHttpsAfter":"address the option never appears, and neither do offline mode and notifications.","settings.appAndroidTitle":"Android app","settings.appAndroidText":"The same Navi in a native shell. What a browser tab cannot give you: notifications while the phone is locked — a background service keeps the connection open — plus a native camera and photo picker, and links that open in your normal browser. Sessions, profiles and settings are the server's, so the app and the web client stay in step.","settings.appApkMissing":"The APK is not published on this server — build it with","settings.appVersion":"Version","settings.appSize":"Size","settings.appBuilt":"Built","settings.appDownloadApk":"Download APK","settings.appAndroidStep1":"Open the downloaded file on the phone. Android will ask whether to allow installing apps from this source — allow it.","settings.appAndroidStep2":"On first launch the app asks for your Navi address. Enter","settings.appAndroidStep2Tail":", then log in through the browser when it opens; the app returns on its own.","settings.appAndroidStep3":"A newer APK installs over the old one and keeps your settings. You would only have to uninstall first if the signing key ever changed.","settings.keysTitle":"API Keys","settings.keysCreate":"New Key","settings.keysDescription":"API keys allow headless clients (scripts, voice assistants, IoT devices) to authenticate without browser-based OAuth.","settings.keysNoAuthWarning":"Authorization is currently disabled. Any keys created here are tied to the local anonymous user and grant full access to this Navi instance.","settings.keysLoading":"Loading API keys","settings.keysEmpty":"No API keys yet. Create one to get started.","settings.keyCreateTitle":"Create API Key","settings.keyNamePlaceholder":"e.g. Smart Watch, Automation Script","settings.keyCreatedTitle":"API Key Created","settings.keyCopyNow":"Copy this token now — it will","settings.keyCopyNowStrong":"never be shown again","settings.notificationsTitle":"Notifications","settings.notificationsBridgeText":"The app keeps its connection open in the background and raises a native notification when a reply finishes while Navi is minimized. Notifications stop if you close the app itself.","settings.notificationsWebText":"Push notifications let Navi ping you when a reply is ready — even when the tab is closed. You get one notification per finished reply, but only when no Navi window is open on that session.","settings.notificationsUnsupported":"This browser does not support web push (needs HTTPS, a service worker and the Push API). Try Chrome or a recent Firefox.","settings.notificationsRowTitle":"Push notifications","settings.notificationsOnBackground":"Enabled — background mode holds the connection open when minimized.","settings.notificationsOn":"Enabled — this device is subscribed.","settings.notificationsBlockedApp":"Blocked in the system app settings.","settings.notificationsBlockedBrowser":"Blocked in browser site settings.","settings.notificationsOff":"Disabled.","settings.mcpTitle":"MCP servers","settings.mcpDescriptionAdmin":"Everything connected to your profiles. A server that offers a personal key slot runs under your own key — leave yours unset and it keeps using the shared key configured on this Navi.","settings.mcpDescription":"Everything connected to your profiles. A server that offers a personal key slot needs","settings.mcpDescriptionStrong":"your own key","settings.mcpDescriptionTail":"— until you save one it is not connected for you at all. Servers without a slot are shared and always available.","settings.mcpLoading":"Loading MCP servers","settings.mcpEmpty":"No MCP servers are connected to any profile on this Navi.","settings.mcpKeySet":"Personal key set {date} — used instead of the shared key ({location}).","settings.mcpKeyAbsentAdmin":"No personal key — the shared key from the config is used ({location}).","settings.mcpKeyAbsent":"No personal key — this server is not connected for you.","settings.mcpNoSlot":"No personal key slot — runs on the shared config.","settings.mcpKeyPlaceholder":"••• saved — enter a new key to replace","settings.mcpKeyPlaceholderNew":"Paste your key","settings.mcpReset":"Reset to default","settings.synapseTargetsTitle":"Synapse deliveries","settings.synapseTargetAdd":"Add Target","settings.synapseTargetsDescription":"Deliveries from the GNEXUS Synapse notification hub arrive at this Navi's webhook and are verified against a per-user target secret. Create the target in the Synapse admin panel, then register it here to let Navi accept its deliveries.","settings.synapseTargetsLoading":"Loading targets","settings.synapseTargetsEmpty":"No Synapse targets registered. Add one to start receiving deliveries.","settings.synapseTargetColRef":"Token ref","settings.synapseTargetAddTitle":"Add Synapse Target","settings.synapseTargetRefPlaceholder":"e.g. navi-main (as in the Synapse admin panel)","settings.synapseTargetSecret":"Delivery secret","settings.synapseTargetSecretPlaceholder":"s2s secret of the Synapse target","settings.synapseTargetHintBefore":"In the Synapse admin panel create a target pointing at","settings.synapseTargetHintAfter":"of this Navi and paste its secret here. Navi uses it to verify that deliveries really came from Synapse.","settings.reactionsTitle":"Synapse reactions","settings.reactionsDescription":'When a GNEXUS Synapse event is delivered, Navi can react to it on its own: a dispatcher picks a profile by your reaction instructions, the work runs in a hidden service session, and you can browse that session later via the sidebar "Service sessions" toggle.',"settings.reactionsNotConfigured":"Outgoing Synapse events are off: this navi is not configured as an event source. Options that send events to Synapse stay disabled — incoming events, reactions and app delivery keep working.","settings.reactionsLoading":"Loading reaction settings","settings.reactionsEnable":"Enable reactions","settings.reactionsOn":"Delivered events start a background reaction run.","settings.reactionsOff":"Events are accepted and logged, but Navi does nothing.","settings.reactionsNotify":"Notify me about finished reactions","settings.reactionsOnlyFailures":"Only failures","settings.reactionsPushAlways":"Push on every finished run.","settings.reactionsPushFailures":"Push only when a run ended with errors.","settings.reactionsPushNever":"No completion push.","settings.reactionsTarget":"Where notifications go","settings.reactionsTargetNote":"Applies to Navi's notify tool and to reaction-completion pushes.","settings.reactionsTargetApp":"App only","settings.reactionsTargetAppSynapse":"App + Synapse","settings.reactionsTargetSynapse":"Synapse only","settings.reactionsInstructions":"Reaction instructions","settings.reactionsInstructionsNote":"Guidance the dispatcher uses to pick a profile and to shape the task. Both you and Navi can edit it; every change is recorded in the history below.","settings.reactionsInstructionsPlaceholder":'e.g. "Todo events from gntodo go to the developer profile; junk mail goes nowhere."',"settings.reactionsInstructionsSave":"Save instructions","settings.reactionsHistory":"Edit history","settings.reactionsSessionTtl":"Continue a conversation","settings.reactionsSessionTtlNote":"When the dispatcher names a conversation in the event, Navi reuses that session instead of starting a new one — as long as it was active within this window. 0 turns continuation off.","settings.reactionsSessionTtlUnit":"minutes of inactivity","settings.dispatcherInstructions":"Route events to profiles","settings.dispatcherInstructionsNote":"Guidance for the dispatcher alone: which kind of event goes to which profile, and what counts as one conversation (the conversation key). It never reaches the session or the task.","settings.dispatcherInstructionsPlaceholder":'e.g. "tg.* → assistant, key = chat id; gntodo.* → developer, never continue."',"settings.dispatcherInstructionsSave":"Save dispatcher instructions","settings.adminToolsTitle":"Tools","settings.adminToolsReloading":"Reloading…","settings.adminToolsReload":"Reload tools","settings.adminToolsDescriptionBefore":"Re-reads the tools in","settings.adminToolsDescriptionAfter":", the context providers, and reconnects every MCP server — no restart, no downtime. New tools are callable from the next message of every session. Admin only: it swaps the toolset all profiles resolve against.","settings.adminToolsLoaded":{one:"{n} tool loaded",other:"{n} tools loaded"},"settings.adminToolsRegistry":"({n} in the registry)","settings.adminToolsMissing":"names {names} — no such tool exists, so it is dropped from every profile.","settings.adminToolsMcpFailed":"MCP reload failed: {error}","settings.adminToolsMcpTools":{one:"{n} MCP tool",other:"{n} MCP tools"},"settings.adminToolsProviders":{one:"{n} context provider",other:"{n} context providers"},"settings.skillsAddSkill":"New skill","settings.skillsAddProtocol":"New protocol","settings.skillsSearchHint":"Search","settings.skillsSearchLabel":"Search by name, trigger or tag","settings.skillsHintSkills":"What the agent knows how to do. It loads a skill when one of its triggers matches.","settings.skillsHintProtocols":"Step-by-step procedures with preconditions, checks after each step, and what to do when a step goes wrong.","settings.skillsCountSkills":{one:"{n} skill",other:"{n} skills"},"settings.skillsCountProtocols":{one:"{n} protocol",other:"{n} protocols"},"settings.skillsFilterArea":"Area","settings.skillsFilterAreaAll":"All areas","settings.skillsCatalog":"Catalog","settings.skillsLoading":"Loading","settings.skillsEmptySkills":"No skills yet. Tell the agent what it should remember how to do, or add one here.","settings.skillsEmptyProtocols":"No protocols yet. Ask the agent to propose one, or add one here.","settings.skillsPersonal":"personal","settings.skillsShared":"shared","settings.skillsAreaHome":"home","settings.skillsAreaInfrastructure":"infrastructure","settings.skillsAreaWorkflows":"workflows","settings.skillsAreaGeneral":"general","settings.skillsNewSkill":"New skill","settings.skillsNewProtocol":"New protocol","settings.skillsReadOnly":"read-only","settings.skillsEdit":"Edit","settings.skillsBack":"Back to the list","settings.skillsEditorLabel":"Document","settings.skillsEditorPlaceholder":"Markdown document with a YAML front matter block","settings.skillsVisibility":"Visibility","settings.skillsPlaceholder":"Pick an entry on the left to read it.","settings.skillsParseFailed":"The stored document cannot be parsed — showing its source.","settings.skillsUpdated":"updated {when}","settings.skillsHistory":"Edit history","settings.skillsHistoryEmpty":"No saved versions yet.","settings.skillsUnknownEditor":"unknown","settings.skillsCreated":"Created","settings.skillsSaved":"Saved","settings.skillsDeleted":"Deleted","settings.skillsDeleteConfirm":"Delete “{name}”? Its edit history goes with it.","share.title":"Share chat","share.intro":"A read-only link opens this chat exactly as it looks here — no account, no way to reply, no other chats and no artifacts.","share.creating":"Creating the link…","share.linkLabel":"Read-only link","share.warning":"The link never expires and cannot be revoked. Anyone who has it can read this chat.","share.killHint":"Deleting the chat closes the link for everyone.","share.notYet":"The link is created only when you ask for it.","share.create":"Create link","share.regenerate":"Show link","share.createFailed":"Could not create the link.","share.emptyChat":"There is nothing to share yet — send a message first.","share.readOnly":"Read-only","share.untitled":"Shared chat","share.notFoundTitle":"This chat is no longer available","share.notFoundText":"The link may be broken, or the chat was deleted.","share.loadOlder":"Load earlier messages","share.empty":"Nothing to show","share.footer":"Read-only copy of a Navi chat"},Lb={"app.titleSettings":"Navi — Налаштування","artifacts.panelLabel":"Артефакти сесії","artifacts.resize":"Змінити ширину панелі","artifacts.close":"Закрити артефакти","artifacts.closeDetails":"Закрити подробиці","artifacts.tabArtifacts":"Артефакти","artifacts.tabLinks":"Посилання","artifacts.tabFiles":"Файли","artifacts.tabBackgrounds":"Фонові","artifacts.viewedImages":"Переглянуті зображення","artifacts.viewedImageAlt":"Зображення, яке переглянув Navi {n}","artifacts.emptyArtifacts":"Немає опублікованих файлів","artifacts.emptyLinks":"Посилань поки не знайдено","artifacts.emptyFiles":"У каталозі сесії немає файлів","artifacts.emptyBackgrounds":"Немає фонових завдань і терміналів","artifacts.openPreview":"Відкрити перегляд","artifacts.openFullscreen":"Відкрити на весь екран","artifacts.loadingPreview":"Завантаження перегляду...","artifacts.textPreviewLimited":"Показано перші {size} — відкрийте файл, щоб прочитати решту.","artifacts.openRaw":"Відкрити вихідний файл","artifacts.viewFile":"Відкрити в переглядачі","artifacts.play":"Відтворити","artifacts.pause":"Пауза","artifacts.seek":"Позиція відтворення","artifacts.mute":"Вимкнути звук","artifacts.unmute":"Увімкнути звук","artifacts.volume":"Гучність","artifacts.audioFailed":"Не вдалося відтворити файл.","artifacts.showPreview":"Показати перегляд","artifacts.showSource":"Показати вихідний код","artifacts.copyFileLink":"Скопіювати посилання на файл","artifacts.copyAllLinks":"Скопіювати всі посилання","artifacts.openAllLinks":"Відкрити всі посилання","artifacts.refreshFiles":"Оновити файли","artifacts.linksInSession":{one:"{n} посилання в сесії",few:"{n} посилання в сесії",many:"{n} посилань у сесії"},"artifacts.loadingSource":"Завантаження вихідного коду...","artifacts.previewUnavailable":"Перегляд недоступний","artifacts.sourceFailed":"Не вдалося завантажити вихідний код: {error}","artifacts.latestProgress":"Хід виконання","artifacts.noOutput":"Виводу ще немає — він надійде нотаткою наступного ходу.","artifacts.terminal":"Термінал","artifacts.directory":"Каталог","artifacts.toolAndAge":"{tool} · {age} тому","artifacts.statusRunning":"Виконується","artifacts.statusDone":"Готово","artifacts.statusFailed":"Збій","artifacts.statusStopped":"Зупинено","artifacts.statusBusy":"Зайнятий","artifacts.statusIdle":"Вільний","artifacts.statusClosed":"Закрито","sidebar.newChat":"Новий чат","sidebar.searchPlaceholder":"Пошук за розмовами...","sidebar.results":{one:"{n} результат",few:"{n} результати",many:"{n} результатів"},"sidebar.conversations":"Розмови","sidebar.serviceSessions":"Службові сесії","sidebar.pendingRecallsOnly":"Лише із запланованим поверненням","sidebar.serviceSessionsLabel":"Службові сесії (Synapse)","sidebar.search":"Пошук","sidebar.refresh":"Оновити","sidebar.loadingConversations":"Завантаження розмов...","sidebar.noConversations":"Розмов ще немає","sidebar.noMatch":"Жодна розмова не відповідає фільтру","sidebar.pinned":"Закріплено","sidebar.recallPending":"Заплановано повернення до розмови","sidebar.serviceSession":"Службова сесія (реакція Synapse)","sidebar.cancelRecall":"Скасувати повернення","sidebar.skipNext":"Пропустити наступний","sidebar.pin":"Закріпити","sidebar.unpin":"Відкріпити","sidebar.noAuthTitle":"Авторизацію вимкнено","sidebar.localMode":"Локальний режим","sidebar.localAvatar":"локальний","sidebar.admin":"Адмін","sidebar.openProfile":"Відкрити профіль у gnexus-auth","sidebar.avatar":"аватар","sidebar.logout":"Вийти","sidebar.login":"Увійти","common.error":"Щось пішло не так","common.menu":"Меню","common.save":"Зберегти","common.cancel":"Скасувати","common.close":"Закрити","common.create":"Створити","common.add":"Додати","common.done":"Готово","common.never":"Ніколи","common.always":"Завжди","common.you":"Ви","common.revoke":"Відкликати","common.copyToClipboard":"Копіювати в буфер обміну","common.copy":"Копіювати","common.copied":"Скопійовано!","common.task":"завдання","common.toolsCount":{one:"{n} інструмент",few:"{n} інструменти",many:"{n} інструментів"},"common.download":"Завантажити","common.yes":"Так","common.no":"Ні","common.notAvailable":"Н/Д","common.result":"Результат","common.liveOutput":"Живий вивід","common.delete":"Видалити","common.minutesAgo":{one:"{n} хв тому",few:"{n} хв тому",many:"{n} хв тому"},"common.pullToRefresh":"Потягніть, щоб оновити","common.releaseToRefresh":"Відпустіть, щоб оновити","common.refreshing":"Оновлення...","common.justNow":"щойно","messages.thinking":"Роздум","messages.thinkingStatus":"Розмірковує…","messages.plan":"План","messages.arguments":"Аргументи","messages.running":"виконується","messages.toolInterrupted":"Перервано — прогін завершився, не дочекавшись результату інструмента","messages.starting":"запуск","messages.runningTool":"Виконується {tool}…","messages.preparingNext":"Готує наступну дію…","messages.showAllTools":"Показати всі інструменти","messages.hideOlderTools":"Сховати попередні інструменти","messages.useful":"Корисно","messages.notUseful":"Не корисно","messages.scheduledRecall":"Заплановане повернення","messages.synapseEvent":"Подія Synapse","messages.openFile":"Відкрити файл","messages.untitledContent":"Вміст","messages.unknownUiComponent":"Невідомий UI-компонент: {name}","messages.jsonItems":{one:"{n} елемент",few:"{n} елементи",many:"{n} елементів"},"messages.jsonKeys":{one:"{n} ключ",few:"{n} ключі",many:"{n} ключів"},"messages.contextSummary":"Підсумок контексту","messages.compressingContext":"Стискання контексту…","messages.contextCompressed":"Контекст стиснуто","messages.compressionCounts":{one:"({before} → {after} повідомлення)",few:"({before} → {after} повідомлення)",many:"({before} → {after} повідомлень)"},"chat.rename":"Перейменувати","chat.scheduledRecall":"Заплановано {type} повернення на {time}","chat.recallOnce":"разове","chat.recallRecurring":"повторюване","chat.recallImmediate":"негайне","chat.recallDetailsHint":"Подробиці про виклик","chat.recallInfoTitle":"Відкладений виклик","chat.recallType":"Тип","chat.recallAt":"Заплановано на","chat.recallAdded":"Створено","chat.recallWhen":"Спрацює","chat.recallIn":"через {interval}","chat.recallDueNow":"ось-ось","chat.recallUnderAMinute":"менше ніж за хвилину","chat.recallInterval":"Повтор","chat.recallComment":"Коментар","chat.recallMessage":"Системне повідомлення","chat.recallGone":"Цей виклик більше не запланований.","chat.recallCancel":"Скасувати виклик","chat.recallCancelFailed":"Не вдалося скасувати виклик","chat.recallSkipFailed":"Не вдалося пропустити наступний виклик","chat.backupModel":"Резерв: {model}","chat.backupModelTitle":"Основна модель недоступна — відповідає {model} на {target}","chat.sessionInfo":"Інформація про сесію","chat.moreActions":"Інші дії","chat.deleteSession":"Видалити сесію","chat.infoLoading":"Завантажую…","chat.infoError":"Не вдалося завантажити інформацію про сесію","chat.infoRefresh":"Оновити","chat.infoModelSection":"Модель і сервер","chat.infoSessionSection":"Сесія","chat.infoLiveSection":"З’єднання і генерація","chat.infoRouteSection":"Ланцюг маршруту","chat.infoPrimary":"основна","chat.infoBackup":"резерв","chat.infoNoRoute":"У цьому розгортанні немає маршрутів llm.json — використовується список моделей профілю.","chat.infoRoute":"Маршрут","chat.infoWindow":"Вікно контексту","chat.infoTokens":"ток.","chat.infoConfiguredModels":"Налаштовані моделі","chat.infoSessionId":"ID сесії","chat.infoProfile":"Профіль","chat.infoCreated":"Створена","chat.infoLastActive":"Остання активність","chat.infoMessages":"Повідомлень","chat.infoArchive":"Архів","chat.infoArchiveValue":"до #{seq}","chat.infoContext":"Контекст","chat.infoCompression":"Компресія","chat.infoCompressionValue":"поріг {pct}%, зберігати останніх {keep}, підсумок до {max} ток.","chat.infoCompressionOff":"вимкнена","chat.infoRecall":"Відкладений виклик","chat.infoRecallEvery":"кожні {interval}","chat.infoRecallMinutes":"{n} хв","chat.infoRecallHours":"{n} год","chat.infoRecallDays":"{n} дн","chat.infoRunning":"Генерація","chat.infoRunningYes":"триває","chat.infoRunningNo":"немає","chat.infoClients":"Підключень до сесії","chat.infoWs":"WebSocket","chat.infoWsConnected":"підключено","chat.infoWsReconnecting":"перепідключення…","chat.infoWsOffline":"не підключено","chat.infoTasks":"Фонові завдання","chat.infoNone":"немає","chat.infoStateOk":"ok","chat.infoStateDegraded":"збій","chat.infoStateMissing":"немає моделі","chat.connectionLost":"Зв’язок втрачено. Перепідключаюся у фоні…","chat.retry":"Повторити","chat.nothingOpen":"Нічого не відкрито","chat.startConversation":"Виберіть розмову або почніть нову","chat.attachFiles":"Прикріпити файли","chat.messagePlaceholder":"Повідомлення для Navi…","chat.stopGeneration":"Зупинити генерацію","chat.sendEnter":"Надіслати (Enter)","chat.sending":"Надсилання…","chat.removeAttachment":"Прибрати","chat.attachment":"вкладення","chat.loadingOlder":"Завантажую раніші повідомлення…","chat.loadFailed":"Не вдалося завантажити сесію: {error}","chat.loadTimeout":"сервер не відповів вчасно","chat.sendFailed":"Не надіслано — черга з’єднання переповнена","chat.sendUnconfirmed":"Не доставлено — сервер не підтвердив отримання","chat.sendDropped":"Втрачено — черга сервера переповнена","chat.sessionGone":"Цієї сесії більше немає — її видалено або переміщено.","chat.sessionAccessDenied":"У вас більше немає доступу до цієї сесії.","chat.signIn":"Увійти","chat.scrollToBottom":"Прокрутити вниз","chat.queuedBadge":"У черзі — виконається після цього ходу","chat.sendQueued":"Надіслати — виконається після поточного ходу","chat.messagePlaceholderBusy":"Наві працює…","ui.welcomeTitle":"Ласкаво просимо до Navi","ui.tagline":"Ваш персональний ШІ-асистент","ui.loginWithGnexus":"Увійти через GNEXUS","ui.offline":"Немає мережі — інтерфейс відкрито з кешу, повідомлення не надсилаються","ui.confirmTitle":"Потрібне підтвердження","ui.photo":"Фото","ui.preview":"Перегляд","ui.loadImageFailed":"Не вдалося завантажити зображення","ui.reply":"Відповісти","ui.replyToSelection":"Відповісти на виділене","ui.overview":"Огляд","ui.description":"Опис","ui.details":"Деталі","ui.moreCards":"+{n} ще","ui.submitted":"Надіслано","ui.formOffline":"Немає з’єднання — форму зараз не надіслати","ui.proposalNew":"Новий протокол","ui.proposalReplaces":"Нова версія","ui.proposalAccept":"Додати до каталогу","ui.proposalReject":"Відхилити","ui.proposalAccepted":"Додано до каталогу","ui.proposalRejected":"Відхилено","ui.proposalInCatalog":"У каталозі","ui.proposalLoading":"Завантаження пропозиції…","ui.proposalNotFound":"Не вдалося завантажити пропозицію","ui.proposalOffline":"Немає з’єднання — рішення зараз неможливе","ui.proposalTriggers":"Коли запускати","ui.proposalPreconditions":"Передумови","ui.proposalSteps":"Кроки","ui.proposalPostChecks":"Після кожного кроку","ui.proposalFallbacks":"Якщо щось піде не так","ui.proposalContext":"Контекст","ui.proposalOnDeviation":"Якщо план порушено","ui.proposalOnBlocked":"Якщо завершити неможливо","ui.proposalOnAlreadyDone":"Якщо крок уже виконано","ui.submit":"Надіслати","ui.fieldRequired":"Поле «{field}» обов’язкове","ui.invalidEmail":"Введіть коректну адресу електронної пошти","ui.invalidUrl":"Введіть коректну адресу http:// або https://","ui.notANumber":"Має бути числом","ui.minValue":"Мінімальне значення — {n}","ui.maxValue":"Максимальне значення — {n}","ui.minLength":{one:"Мінімальна довжина — {n} символ",few:"Мінімальна довжина — {n} символи",many:"Мінімальна довжина — {n} символів"},"ui.maxLength":{one:"Максимальна довжина — {n} символ",few:"Максимальна довжина — {n} символи",many:"Максимальна довжина — {n} символів"},"ui.invalidFormat":"Невірний формат","ui.notificationsPromptTitle":"Увімкнути сповіщення","ui.notificationsPromptText":"Navi може повідомляти, коли відповідь готова, — навіть якщо вкладку закрито.","ui.notificationsPromptAllow":"Увімкнути","ui.notificationsPromptLater":"Не зараз","col.name":"Назва","col.key":"Ключ","col.created":"Створено","col.lastUsed":"Останнє використання","col.tool":"Інструмент","col.status":"Статус","col.started":"Розпочато","col.finished":"Завершено","col.subagentTokens":"Токени під-агента","col.pid":"PID","col.command":"Команда","col.cwd":"Робочий каталог","col.uptime":"Час роботи","col.background":"Фоновий","col.reason":"Причина","confirm.revokeKey":"Відкликати API-ключ «{name}»? Це не можна скасувати.","confirm.revokeTarget":"Відкликати ціль Synapse «{target}»? Це не можна скасувати.","confirm.mcpResetAdmin":"Скинути ключ для «{server}» на спільний за замовчуванням?","confirm.deleteSession":"Видалити цю розмову?","confirm.mcpReset":"Видалити ваш ключ для «{server}»? Сервер перестане бути підключеним для вас.","profile.languageAuto":"Авто (з акаунта)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Мову збережено","toast.keyCreateFailed":"Не вдалося створити ключ","toast.keyRevoked":"API-ключ відкликано","toast.keyRevokeFailed":"Не вдалося відкликати ключ","toast.notificationsDenied":"Дозвіл не надано","toast.notificationsAllowApp":"Дозвольте сповіщення в системних налаштуваннях застосунку.","toast.notificationsAllowBrowser":"Дозвольте сповіщення в налаштуваннях сайту в браузері.","toast.notificationsUnavailable":"Push недоступний","toast.notificationsUnavailableText":"Сервер зараз не приймає підписки на push.","toast.notificationsFailed":"Помилка push","toast.mcpKeySaved":"Ключ збережено для {server}","toast.mcpKeySaveFailed":"Не вдалося зберегти ключ","toast.mcpKeyReset":"Ключ скинуто для {server}","toast.mcpKeyResetFailed":"Не вдалося скинути ключ","toast.synapseTargetAdded":"Ціль додано","toast.synapseTargetAddFailed":"Не вдалося додати ціль","toast.synapseTargetRevoked":"Ціль відкликано","toast.synapseTargetRevokeFailed":"Не вдалося відкликати ціль","toast.reactionsLoadFailed":"Не вдалося завантажити налаштування реакцій","toast.bgTaskStarted":"Фонове завдання запущено","toast.bgTaskFinished":"Фонове завдання завершено","toast.mcpConnected":"MCP-сервер підключено","toast.mcpDisconnected":"MCP-сервер відключено","toast.saveFailed":"Не вдалося зберегти","toast.instructionsSaved":"Інструкції збережено","toast.instructionsFailed":"Не вдалося зберегти інструкції","toast.toolsReloaded":{one:"Перезавантажено {n} інструмент",few:"Перезавантажено {n} інструменти",many:"Перезавантажено {n} інструментів"},"toast.toolsReloadErrors":"Перезавантаження завершилося помилками — дивіться панель","toast.toolsReloadFailed":"Не вдалося перезавантажити інструменти","settings.title":"Налаштування","settings.sectionsLabel":"Розділи налаштувань","settings.tabApp":"Застосунок","settings.tabAccount":"Акаунт","settings.tabNotifications":"Сповіщення","settings.tabSynapse":"Synapse","settings.tabSkills":"Скіли","settings.tabProtocols":"Протоколи","settings.tabMcp":"MCP","settings.languageToolbar":"Мова інтерфейсу","settings.languageDescription":"Стандартно Navi наслідує мову вашого акаунта gnexus-auth; вибір тут перекриває її лише для Navi. «Авто» повертає мову акаунта.","settings.languageDescriptionOpen":"Вхід у цей Navi вимкнено, тому мова зберігається лише в цьому браузері.","settings.appTitle":"Застосунок","settings.appDescription":"Navi — це вебзастосунок, але він може жити на пристрої як звичайний: або встановлений у цей браузер, або як Android-застосунок, що обгортає той самий інтерфейс. Це не взаємовиключні варіанти: на телефоні варто мати Android-застосунок, а всюди інде — встановлений вебзастосунок.","settings.appInstallTitle":"Встановлення в цей браузер","settings.appInstallText":"Встановлення розміщує Navi в окремому вікні без адресного рядка, додає значок у док або на початковий екран і кешує інтерфейс, тож застосунок відкривається миттєво й показує сесії навіть без мережі. Воно ж вмикає сповіщення про готові відповіді — зокрема коли вкладку закрито.","settings.appAndroidAlert":"Ви читаєте це всередині Android-застосунку, і він уже встановлений. Щоб оновити його, завантажте APK нижче й установіть поверх старого.","settings.appInstalledAlert":"Встановлено — Navi працює в окремому вікні, а не у вкладці браузера.","settings.appInstallAction":"Встановити","settings.appInstallHint":"Браузер попросить підтвердити.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"натисніть","settings.appIosShare":"«Поділитися», потім","settings.appIosAddHome":"На початковий екран","settings.appIosNote":"Сповіщення там потребують iOS 16.4 або новішої і працюють лише у встановленому застосунку, а не у вкладці Safari.","settings.appBrowserChrome":"Chrome або Edge:","settings.appChromeClick":"натисніть значок встановлення в правому кінці адресного рядка або відкрийте","settings.appChromeMenu":"меню і виберіть","settings.appChromeInstall":"Установити Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"відкрийте","settings.appAndroidMenu":"меню і виберіть","settings.appAndroidInstall":"Установити застосунок","settings.appAndroidAlso":"(іноді «На головний екран»)","settings.appHttpsBefore":"Браузери пропонують це лише через HTTPS або на localhost — за звичайною адресою","settings.appHttpsAfter":"такої можливості не з’явиться, як і офлайн-режиму зі сповіщеннями.","settings.appAndroidTitle":"Android-застосунок","settings.appAndroidText":"Той самий Navi у нативній оболонці. Те, чого не дасть вкладка браузера: сповіщення при заблокованому телефоні — фонова служба тримає з’єднання відкритим — плюс нативна камера й вибір фото, а посилання відкриваються у звичайному браузері. Сесії, профілі та налаштування живуть на сервері, тож застосунок і вебклієнт не розходяться.","settings.appApkMissing":"APK не опубліковано на цьому сервері — зберіть його командою","settings.appVersion":"Версія","settings.appSize":"Розмір","settings.appBuilt":"Збірка","settings.appDownloadApk":"Завантажити APK","settings.appAndroidStep1":"Відкрийте завантажений файл на телефоні. Android запитає, чи дозволити встановлення застосунків із цього джерела, — дозвольте.","settings.appAndroidStep2":"При першому запуску застосунок запитає адресу Navi. Введіть","settings.appAndroidStep2Tail":", потім увійдіть через браузер, коли він відкриється; застосунок повернеться сам.","settings.appAndroidStep3":"Новіший APK встановлюється поверх старого й зберігає налаштування. Видаляти попередню версію довелося б лише в разі зміни ключа підпису.","settings.keysTitle":"API-ключі","settings.keysCreate":"Новий ключ","settings.keysDescription":"API-ключі дозволяють безголовим клієнтам (скриптам, голосовим помічникам, пристроям IoT) автентифікуватися без OAuth у браузері.","settings.keysNoAuthWarning":"Авторизацію зараз вимкнено. Будь-які створені тут ключі прив’язані до локального анонімного користувача й дають повний доступ до цього примірника Navi.","settings.keysLoading":"Завантаження API-ключів","settings.keysEmpty":"API-ключів ще немає. Створіть перший, щоб почати.","settings.keyCreateTitle":"Створення API-ключа","settings.keyNamePlaceholder":"наприклад, Розумний годинник, Скрипт автоматизації","settings.keyCreatedTitle":"API-ключ створено","settings.keyCopyNow":"Скопіюйте цей токен зараз — він","settings.keyCopyNowStrong":"більше не буде показаний","settings.notificationsTitle":"Сповіщення","settings.notificationsBridgeText":"Застосунок тримає з’єднання відкритим у фоні й показує системне сповіщення, коли відповідь готова, а Navi згорнуто. Якщо закрити сам застосунок, сповіщення припиняться.","settings.notificationsWebText":"Push-сповіщення дають Navi змогу повідомити вас про готову відповідь — навіть коли вкладку закрито. На кожну готову відповідь надходить одне сповіщення, але лише якщо жодне вікно Navi не відкрите на цій сесії.","settings.notificationsUnsupported":"Цей браузер не підтримує web push (потрібні HTTPS, service worker і Push API). Спробуйте Chrome або свіжий Firefox.","settings.notificationsRowTitle":"Push-сповіщення","settings.notificationsOnBackground":"Увімкнено — фоновий режим тримає з’єднання, поки застосунок згорнуто.","settings.notificationsOn":"Увімкнено — цей пристрій підписано.","settings.notificationsBlockedApp":"Заблоковано в системних налаштуваннях застосунку.","settings.notificationsBlockedBrowser":"Заблоковано в налаштуваннях сайту в браузері.","settings.notificationsOff":"Вимкнено.","settings.mcpTitle":"MCP-сервери","settings.mcpDescriptionAdmin":"Усе, що підключено до ваших профілів. Сервер зі слотом особистого ключа працює під вашим ключем — не задавайте свій, і він далі використовуватиме спільний ключ, налаштований на цьому Navi.","settings.mcpDescription":"Усе, що підключено до ваших профілів. Серверу зі слотом особистого ключа потрібен","settings.mcpDescriptionStrong":"ваш власний ключ","settings.mcpDescriptionTail":"— доки ви його не збережете, для вас він не підключений узагалі. Сервери без слота спільні й доступні завжди.","settings.mcpLoading":"Завантаження MCP-серверів","settings.mcpEmpty":"До цього Navi не підключено жодного MCP-сервера в жодному профілі.","settings.mcpKeySet":"Особистий ключ збережено {date} — використовується замість спільного ({location}).","settings.mcpKeyAbsentAdmin":"Особистого ключа немає — використовується спільний ключ із конфігурації ({location}).","settings.mcpKeyAbsent":"Особистого ключа немає — цей сервер для вас не підключено.","settings.mcpNoSlot":"Слота особистого ключа немає — працює на спільній конфігурації.","settings.mcpKeyPlaceholder":"••• збережено — введіть новий ключ, щоб замінити","settings.mcpKeyPlaceholderNew":"Вставте ваш ключ","settings.mcpReset":"Скинути на спільний","settings.synapseTargetsTitle":"Доставки Synapse","settings.synapseTargetAdd":"Додати ціль","settings.synapseTargetsDescription":"Доставки з хаба сповіщень GNEXUS Synapse надходять на вебхук цього Navi й перевіряються за особистим секретом цілі. Створіть ціль в адмін-панелі Synapse, потім зареєструйте її тут, щоб Navi приймав її доставки.","settings.synapseTargetsLoading":"Завантаження цілей","settings.synapseTargetsEmpty":"Жодної цілі Synapse не зареєстровано. Додайте її, щоб почати приймати доставки.","settings.synapseTargetColRef":"Ідентифікатор цілі","settings.synapseTargetAddTitle":"Додавання цілі Synapse","settings.synapseTargetRefPlaceholder":"наприклад, navi-main (як в адмін-панелі Synapse)","settings.synapseTargetSecret":"Секрет доставки","settings.synapseTargetSecretPlaceholder":"s2s-секрет цілі Synapse","settings.synapseTargetHintBefore":"В адмін-панелі Synapse створіть ціль, що вказує на","settings.synapseTargetHintAfter":"цього Navi, і вставте її секрет тут. Navi використовує його, щоб переконатися, що доставки справді надійшли із Synapse.","settings.reactionsTitle":"Реакції Synapse","settings.reactionsDescription":"Коли надходить подія GNEXUS Synapse, Navi може відреагувати сам: диспетчер обирає профіль за вашими інструкціями, робота йде у прихованій службовій сесії, а переглянути її потім можна через перемикач «Службові сесії» в бічній панелі.","settings.reactionsNotConfigured":"Вихідні події до Synapse вимкнено: цей Navi не налаштований як джерело подій. Варіанти, що надсилають події до Synapse, недоступні — приймання подій, реакції та доставка в застосунок працюють.","settings.reactionsLoading":"Завантаження налаштувань реакцій","settings.reactionsEnable":"Увімкнути реакції","settings.reactionsOn":"Події, що надійшли, запускають фоновий прогін реакції.","settings.reactionsOff":"Події приймаються й записуються в журнал, але Navi нічого не робить.","settings.reactionsNotify":"Повідомляти про завершені реакції","settings.reactionsOnlyFailures":"Лише збої","settings.reactionsPushAlways":"Push після кожного завершеного прогону.","settings.reactionsPushFailures":"Push лише коли прогін закінчився помилками.","settings.reactionsPushNever":"Не надсилати push про завершення.","settings.reactionsTarget":"Куди йдуть сповіщення","settings.reactionsTargetNote":"Стосується інструмента notify у Navi та push про завершення реакцій.","settings.reactionsTargetApp":"Лише в застосунок","settings.reactionsTargetAppSynapse":"Застосунок + Synapse","settings.reactionsTargetSynapse":"Лише Synapse","settings.reactionsInstructions":"Інструкції для реакцій","settings.reactionsInstructionsNote":"Вказівки, за якими диспетчер обирає профіль і будує задачу. Їх можете правити і ви, і Navi; кожна зміна потрапляє в історію нижче.","settings.reactionsInstructionsPlaceholder":"наприклад, «Події todo з gntodo йдуть у профіль developer; спам-листи — нікуди».","settings.reactionsInstructionsSave":"Зберегти інструкції","settings.reactionsHistory":"Історія правок","settings.reactionsSessionTtl":"Продовжувати розмову","settings.reactionsSessionTtlNote":"Коли диспетчер називає розмову в події, Navi продовжує ту саму сесію замість нової — якщо вона була активна не пізніше цього строку. 0 вимикає продовження.","settings.reactionsSessionTtlUnit":"хвилин простою","settings.dispatcherInstructions":"Розподіл подій за профілями","settings.dispatcherInstructionsNote":"Вказівки лише для диспетчера: який тип події до якого профілю йде і що вважати однією розмовою (ключ розмови). У сесію та в задачу вони не потрапляють.","settings.dispatcherInstructionsPlaceholder":"наприклад, «tg.* → assistant, ключ = id чату; gntodo.* → developer, не продовжувати ніколи».","settings.dispatcherInstructionsSave":"Зберегти інструкції диспетчеру","settings.adminToolsTitle":"Інструменти","settings.adminToolsReloading":"Перезавантаження…","settings.adminToolsReload":"Перезавантажити інструменти","settings.adminToolsDescriptionBefore":"Перечитує інструменти з","settings.adminToolsDescriptionAfter":", провайдери контексту й перепідключає всі MCP-сервери — без перезапуску й простою. Нові інструменти можна викликати з наступного повідомлення в будь-якій сесії. Лише для адміна: підміняє набір інструментів, з яким працюють усі профілі.","settings.adminToolsLoaded":{one:"завантажено {n} інструмент",few:"завантажено {n} інструменти",many:"завантажено {n} інструментів"},"settings.adminToolsRegistry":"({n} у реєстрі)","settings.adminToolsMissing":"називає {names} — такого інструменту немає, його виключено з усіх профілів.","settings.adminToolsMcpFailed":"Перепідключення MCP не вдалося: {error}","settings.adminToolsMcpTools":{one:"{n} MCP-інструмент",few:"{n} MCP-інструменти",many:"{n} MCP-інструментів"},"settings.adminToolsProviders":{one:"{n} провайдер контексту",few:"{n} провайдери контексту",many:"{n} провайдерів контексту"},"settings.skillsAddSkill":"Новий скіл","settings.skillsAddProtocol":"Новий протокол","settings.skillsSearchHint":"Пошук","settings.skillsSearchLabel":"Пошук за назвою, тригером або тегом","settings.skillsHintSkills":"Те, що агент уміє: скіл завантажується, коли спрацьовує один із його тригерів.","settings.skillsHintProtocols":"Покрокові порядки дій: передумови, перевірки після кроків і що робити, якщо крок пішов не так.","settings.skillsCountSkills":{one:"{n} скіл",few:"{n} скіли",many:"{n} скілів"},"settings.skillsCountProtocols":{one:"{n} протокол",few:"{n} протоколи",many:"{n} протоколів"},"settings.skillsFilterArea":"Область","settings.skillsFilterAreaAll":"Усі області","settings.skillsCatalog":"Каталог","settings.skillsLoading":"Завантажуємо","settings.skillsEmptySkills":"Скілів поки немає. Розкажіть агенту, що він має вміти, або додайте скіл тут.","settings.skillsEmptyProtocols":"Протоколів поки немає. Попросіть агента запропонувати протокол або додайте його тут.","settings.skillsPersonal":"особистий","settings.skillsShared":"спільний","settings.skillsAreaHome":"дім","settings.skillsAreaInfrastructure":"інфраструктура","settings.skillsAreaWorkflows":"робочі процеси","settings.skillsAreaGeneral":"загальне","settings.skillsNewSkill":"Новий скіл","settings.skillsNewProtocol":"Новий протокол","settings.skillsReadOnly":"лише читання","settings.skillsEdit":"Змінити","settings.skillsBack":"До списку","settings.skillsEditorLabel":"Документ","settings.skillsEditorPlaceholder":"Markdown-документ із блоком YAML у фронтматері","settings.skillsVisibility":"Видимість","settings.skillsPlaceholder":"Виберіть запис ліворуч, щоб прочитати його.","settings.skillsParseFailed":"Збережений документ не розбирається — показую вихідний текст.","settings.skillsUpdated":"змінено {when}","settings.skillsHistory":"Історія змін","settings.skillsHistoryEmpty":"Збережених версій поки немає.","settings.skillsUnknownEditor":"невідомо","settings.skillsCreated":"Створено","settings.skillsSaved":"Збережено","settings.skillsDeleted":"Видалено","settings.skillsDeleteConfirm":"Видалити «{name}»? Історія змін зникне разом із записом.","share.title":"Поділитися чатом","share.intro":"Посилання відкриває чат лише для читання — саме в тому вигляді, як він тут. Без акаунта, без можливості відповісти, без списку чатів і артефактів.","share.creating":"Створюю посилання…","share.linkLabel":"Посилання лише для читання","share.warning":"Посилання не спливає, і відкликати його неможливо. Будь-хто, хто його має, прочитає цей чат.","share.killHint":"Видалення чату закриває посилання для всіх.","share.notYet":"Посилання з’явиться, коли ви його попросите.","share.create":"Створити посилання","share.regenerate":"Показати посилання","share.createFailed":"Не вдалося створити посилання.","share.emptyChat":"Поки немає що показати — спершу надішліть повідомлення.","share.readOnly":"Лише читання","share.untitled":"Спільний чат","share.notFoundTitle":"Цей чат більше недоступний","share.notFoundText":"Можливо, посилання хибне або чат видалено.","share.loadOlder":"Завантажити раніші","share.empty":"Тут порожньо","share.footer":"Копія чату Navi лише для читання"},$b={"app.titleSettings":"Navi — Настройки","artifacts.panelLabel":"Артефакты сессии","artifacts.resize":"Изменить ширину панели","artifacts.close":"Закрыть артефакты","artifacts.closeDetails":"Закрыть подробности","artifacts.tabArtifacts":"Артефакты","artifacts.tabLinks":"Ссылки","artifacts.tabFiles":"Файлы","artifacts.tabBackgrounds":"Фоновые","artifacts.viewedImages":"Просмотренные изображения","artifacts.viewedImageAlt":"Изображение, просмотренное Navi {n}","artifacts.emptyArtifacts":"Нет опубликованных файлов","artifacts.emptyLinks":"Ссылок пока не найдено","artifacts.emptyFiles":"В каталоге сессии нет файлов","artifacts.emptyBackgrounds":"Нет фоновых задач и терминалов","artifacts.openPreview":"Открыть просмотр","artifacts.openFullscreen":"Открыть на весь экран","artifacts.loadingPreview":"Загрузка просмотра...","artifacts.textPreviewLimited":"Показаны первые {size} — откройте файл, чтобы прочитать остальное.","artifacts.openRaw":"Открыть исходный файл","artifacts.viewFile":"Открыть в просмотрщике","artifacts.play":"Воспроизвести","artifacts.pause":"Пауза","artifacts.seek":"Позиция воспроизведения","artifacts.mute":"Выключить звук","artifacts.unmute":"Включить звук","artifacts.volume":"Громкость","artifacts.audioFailed":"Не удалось воспроизвести файл.","artifacts.showPreview":"Показать просмотр","artifacts.showSource":"Показать исходник","artifacts.copyFileLink":"Скопировать ссылку на файл","artifacts.copyAllLinks":"Скопировать все ссылки","artifacts.openAllLinks":"Открыть все ссылки","artifacts.refreshFiles":"Обновить файлы","artifacts.linksInSession":{one:"{n} ссылка в сессии",few:"{n} ссылки в сессии",many:"{n} ссылок в сессии"},"artifacts.loadingSource":"Загрузка исходника...","artifacts.previewUnavailable":"Просмотр недоступен","artifacts.sourceFailed":"Не удалось загрузить исходник: {error}","artifacts.latestProgress":"Ход выполнения","artifacts.noOutput":"Вывода пока нет — он придёт заметкой в следующем ходу.","artifacts.terminal":"Терминал","artifacts.directory":"Каталог","artifacts.toolAndAge":"{tool} · {age} назад","artifacts.statusRunning":"Выполняется","artifacts.statusDone":"Готово","artifacts.statusFailed":"Сбой","artifacts.statusStopped":"Остановлен","artifacts.statusBusy":"Занят","artifacts.statusIdle":"Свободен","artifacts.statusClosed":"Закрыт","sidebar.newChat":"Новый чат","sidebar.searchPlaceholder":"Поиск по разговорам...","sidebar.results":{one:"{n} результат",few:"{n} результата",many:"{n} результатов"},"sidebar.conversations":"Разговоры","sidebar.serviceSessions":"Служебные сессии","sidebar.pendingRecallsOnly":"Только с запланированным возвратом","sidebar.serviceSessionsLabel":"Служебные сессии (Synapse)","sidebar.search":"Поиск","sidebar.refresh":"Обновить","sidebar.loadingConversations":"Загрузка разговоров...","sidebar.noConversations":"Разговоров пока нет","sidebar.noMatch":"Ни один разговор не подходит под фильтр","sidebar.pinned":"Закреплён","sidebar.recallPending":"Запланирован возврат к разговору","sidebar.serviceSession":"Служебная сессия (реакция Synapse)","sidebar.cancelRecall":"Отменить возврат","sidebar.skipNext":"Пропустить следующий","sidebar.pin":"Закрепить","sidebar.unpin":"Открепить","sidebar.noAuthTitle":"Авторизация отключена","sidebar.localMode":"Локальный режим","sidebar.localAvatar":"локальный","sidebar.admin":"Админ","sidebar.openProfile":"Открыть профиль в gnexus-auth","sidebar.avatar":"аватар","sidebar.logout":"Выйти","sidebar.login":"Войти","common.error":"Что-то пошло не так","common.menu":"Меню","common.save":"Сохранить","common.cancel":"Отмена","common.close":"Закрыть","common.create":"Создать","common.add":"Добавить","common.done":"Готово","common.never":"Никогда","common.always":"Всегда","common.you":"Вы","common.revoke":"Отозвать","common.copyToClipboard":"Скопировать в буфер обмена","common.copy":"Копировать","common.copied":"Скопировано!","common.task":"задача","common.toolsCount":{one:"{n} инструмент",few:"{n} инструмента",many:"{n} инструментов"},"common.download":"Скачать","common.yes":"Да","common.no":"Нет","common.notAvailable":"Н/Д","common.result":"Результат","common.liveOutput":"Живой вывод","common.delete":"Удалить","common.minutesAgo":{one:"{n} мин назад",few:"{n} мин назад",many:"{n} мин назад"},"common.pullToRefresh":"Потяните, чтобы обновить","common.releaseToRefresh":"Отпустите, чтобы обновить","common.refreshing":"Обновление...","common.justNow":"только что","messages.thinking":"Размышление","messages.thinkingStatus":"Размышляет…","messages.plan":"План","messages.arguments":"Аргументы","messages.running":"выполняется","messages.toolInterrupted":"Прервано — прогон завершился, не дождавшись результата инструмента","messages.starting":"запуск","messages.runningTool":"Выполняется {tool}…","messages.preparingNext":"Готовит следующее действие…","messages.showAllTools":"Показать все инструменты","messages.hideOlderTools":"Скрыть ранние инструменты","messages.useful":"Полезно","messages.notUseful":"Не полезно","messages.scheduledRecall":"Запланированный возврат","messages.synapseEvent":"Событие Synapse","messages.openFile":"Открыть файл","messages.untitledContent":"Содержимое","messages.unknownUiComponent":"Неизвестный UI-компонент: {name}","messages.jsonItems":{one:"{n} элемент",few:"{n} элемента",many:"{n} элементов"},"messages.jsonKeys":{one:"{n} ключ",few:"{n} ключа",many:"{n} ключей"},"messages.contextSummary":"Сводка контекста","messages.compressingContext":"Сжатие контекста…","messages.contextCompressed":"Контекст сжат","messages.compressionCounts":{one:"({before} → {after} сообщение)",few:"({before} → {after} сообщения)",many:"({before} → {after} сообщений)"},"chat.rename":"Переименовать","chat.scheduledRecall":"Запланирован {type} возврат на {time}","chat.recallOnce":"разовый","chat.recallRecurring":"повторяющийся","chat.recallImmediate":"немедленный","chat.recallDetailsHint":"Подробности о вызове","chat.recallInfoTitle":"Отложенный вызов","chat.recallType":"Тип","chat.recallAt":"Запланирован на","chat.recallAdded":"Создан","chat.recallWhen":"Сработает","chat.recallIn":"через {interval}","chat.recallDueNow":"вот-вот","chat.recallUnderAMinute":"меньше чем через минуту","chat.recallInterval":"Повтор","chat.recallComment":"Комментарий","chat.recallMessage":"Системное сообщение","chat.recallGone":"Этот вызов больше не запланирован.","chat.recallCancel":"Отменить вызов","chat.recallCancelFailed":"Не удалось отменить вызов","chat.recallSkipFailed":"Не удалось пропустить следующий вызов","chat.backupModel":"Резерв: {model}","chat.backupModelTitle":"Основная модель недоступна — отвечает {model} на {target}","chat.sessionInfo":"Информация о сессии","chat.moreActions":"Другие действия","chat.deleteSession":"Удалить сессию","chat.infoLoading":"Загружаю…","chat.infoError":"Не удалось загрузить информацию о сессии","chat.infoRefresh":"Обновить","chat.infoModelSection":"Модель и сервер","chat.infoSessionSection":"Сессия","chat.infoLiveSection":"Соединение и генерация","chat.infoRouteSection":"Цепочка маршрута","chat.infoPrimary":"основная","chat.infoBackup":"резерв","chat.infoNoRoute":"В этом развёртывании нет маршрутов llm.json — используется список моделей профиля.","chat.infoRoute":"Маршрут","chat.infoWindow":"Окно контекста","chat.infoTokens":"ток.","chat.infoConfiguredModels":"Настроенные модели","chat.infoSessionId":"ID сессии","chat.infoProfile":"Профиль","chat.infoCreated":"Создана","chat.infoLastActive":"Последняя активность","chat.infoMessages":"Сообщений","chat.infoArchive":"Архив","chat.infoArchiveValue":"до #{seq}","chat.infoContext":"Контекст","chat.infoCompression":"Компрессия","chat.infoCompressionValue":"порог {pct}%, хранить последних {keep}, сводка до {max} ток.","chat.infoCompressionOff":"выключена","chat.infoRecall":"Отложенный вызов","chat.infoRecallEvery":"каждые {interval}","chat.infoRecallMinutes":"{n} мин","chat.infoRecallHours":"{n} ч","chat.infoRecallDays":"{n} дн","chat.infoRunning":"Генерация","chat.infoRunningYes":"идёт","chat.infoRunningNo":"нет","chat.infoClients":"Подключений к сессии","chat.infoWs":"WebSocket","chat.infoWsConnected":"подключён","chat.infoWsReconnecting":"переподключение…","chat.infoWsOffline":"не подключён","chat.infoTasks":"Фоновые задачи","chat.infoNone":"нет","chat.infoStateOk":"ok","chat.infoStateDegraded":"сбой","chat.infoStateMissing":"нет модели","chat.connectionLost":"Связь потеряна. Переподключаюсь в фоне…","chat.retry":"Повторить","chat.nothingOpen":"Ничего не открыто","chat.startConversation":"Выберите разговор или начните новый","chat.attachFiles":"Прикрепить файлы","chat.messagePlaceholder":"Сообщение для Navi…","chat.stopGeneration":"Остановить генерацию","chat.sendEnter":"Отправить (Enter)","chat.sending":"Отправка…","chat.removeAttachment":"Убрать","chat.attachment":"вложение","chat.loadingOlder":"Загружаю более ранние сообщения…","chat.loadFailed":"Не удалось загрузить сессию: {error}","chat.loadTimeout":"сервер не ответил вовремя","chat.sendFailed":"Не отправлено — очередь соединения переполнена","chat.sendUnconfirmed":"Не доставлено — сервер не подтвердил получение","chat.sendDropped":"Потеряно — очередь сервера переполнена","chat.sessionGone":"Этой сессии больше нет — она удалена или перемещена.","chat.sessionAccessDenied":"У вас больше нет доступа к этой сессии.","chat.signIn":"Войти","chat.scrollToBottom":"Прокрутить вниз","chat.queuedBadge":"В очереди — выполнится после этого хода","chat.sendQueued":"Отправить — выполнится после текущего хода","chat.messagePlaceholderBusy":"Нави работает…","ui.welcomeTitle":"Добро пожаловать в Navi","ui.tagline":"Ваш персональный ИИ-ассистент","ui.loginWithGnexus":"Войти через GNEXUS","ui.offline":"Нет сети — интерфейс открыт из кэша, сообщения не отправляются","ui.confirmTitle":"Требуется подтверждение","ui.photo":"Фото","ui.preview":"Просмотр","ui.loadImageFailed":"Не удалось загрузить изображение","ui.reply":"Ответить","ui.replyToSelection":"Ответить на выделенное","ui.overview":"Обзор","ui.description":"Описание","ui.details":"Детали","ui.moreCards":"+{n} ещё","ui.submitted":"Отправлено","ui.formOffline":"Нет соединения — форму сейчас не отправить","ui.proposalNew":"Новый протокол","ui.proposalReplaces":"Новая версия","ui.proposalAccept":"Добавить в каталог","ui.proposalReject":"Отклонить","ui.proposalAccepted":"Добавлено в каталог","ui.proposalRejected":"Отклонено","ui.proposalInCatalog":"В каталоге","ui.proposalLoading":"Загрузка предложения…","ui.proposalNotFound":"Не удалось загрузить предложение","ui.proposalOffline":"Нет соединения — решение сейчас невозможно","ui.proposalTriggers":"Когда запускать","ui.proposalPreconditions":"Предусловия","ui.proposalSteps":"Шаги","ui.proposalPostChecks":"После каждого шага","ui.proposalFallbacks":"Если что-то пойдёт не так","ui.proposalContext":"Контекст","ui.proposalOnDeviation":"Если план нарушен","ui.proposalOnBlocked":"Если завершить нельзя","ui.proposalOnAlreadyDone":"Если шаг уже выполнен","ui.submit":"Отправить","ui.fieldRequired":"Поле «{field}» обязательно","ui.invalidEmail":"Введите корректный адрес электронной почты","ui.invalidUrl":"Введите корректный адрес http:// или https://","ui.notANumber":"Должно быть числом","ui.minValue":"Минимальное значение — {n}","ui.maxValue":"Максимальное значение — {n}","ui.minLength":{one:"Минимальная длина — {n} символ",few:"Минимальная длина — {n} символа",many:"Минимальная длина — {n} символов"},"ui.maxLength":{one:"Максимальная длина — {n} символ",few:"Максимальная длина — {n} символа",many:"Максимальная длина — {n} символов"},"ui.invalidFormat":"Неверный формат","ui.notificationsPromptTitle":"Включить уведомления","ui.notificationsPromptText":"Navi сможет сообщать, когда ответ готов, — даже если вкладка закрыта.","ui.notificationsPromptAllow":"Включить","ui.notificationsPromptLater":"Не сейчас","col.name":"Название","col.key":"Ключ","col.created":"Создан","col.lastUsed":"Последнее использование","col.tool":"Инструмент","col.status":"Статус","col.started":"Начат","col.finished":"Завершён","col.subagentTokens":"Токены под-агента","col.pid":"PID","col.command":"Команда","col.cwd":"Рабочий каталог","col.uptime":"Время работы","col.background":"Фоновый","col.reason":"Причина","confirm.revokeKey":"Отозвать API-ключ «{name}»? Это нельзя отменить.","confirm.revokeTarget":"Отозвать цель Synapse «{target}»? Это нельзя отменить.","confirm.mcpResetAdmin":"Сбросить ключ для «{server}» на общий по умолчанию?","confirm.deleteSession":"Удалить этот разговор?","confirm.mcpReset":"Удалить ваш ключ для «{server}»? Сервер перестанет быть подключённым для вас.","profile.languageAuto":"Авто (из аккаунта)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Язык сохранён","toast.keyCreateFailed":"Не удалось создать ключ","toast.keyRevoked":"API-ключ отозван","toast.keyRevokeFailed":"Не удалось отозвать ключ","toast.notificationsDenied":"Разрешение не выдано","toast.notificationsAllowApp":"Разрешите уведомления в системных настройках приложения.","toast.notificationsAllowBrowser":"Разрешите уведомления в настройках сайта в браузере.","toast.notificationsUnavailable":"Push недоступен","toast.notificationsUnavailableText":"Сервер сейчас не принимает подписки на push.","toast.notificationsFailed":"Ошибка push","toast.mcpKeySaved":"Ключ сохранён для {server}","toast.mcpKeySaveFailed":"Не удалось сохранить ключ","toast.mcpKeyReset":"Ключ сброшен для {server}","toast.mcpKeyResetFailed":"Не удалось сбросить ключ","toast.synapseTargetAdded":"Цель добавлена","toast.synapseTargetAddFailed":"Не удалось добавить цель","toast.synapseTargetRevoked":"Цель отозвана","toast.synapseTargetRevokeFailed":"Не удалось отозвать цель","toast.reactionsLoadFailed":"Не удалось загрузить настройки реакций","toast.bgTaskStarted":"Фоновая задача запущена","toast.bgTaskFinished":"Фоновая задача завершена","toast.mcpConnected":"MCP-сервер подключён","toast.mcpDisconnected":"MCP-сервер отключён","toast.saveFailed":"Не удалось сохранить","toast.instructionsSaved":"Инструкции сохранены","toast.instructionsFailed":"Не удалось сохранить инструкции","toast.toolsReloaded":{one:"Перезагружен {n} инструмент",few:"Перезагружено {n} инструмента",many:"Перезагружено {n} инструментов"},"toast.toolsReloadErrors":"Перезагрузка завершилась ошибками — смотрите панель","toast.toolsReloadFailed":"Не удалось перезагрузить инструменты","settings.title":"Настройки","settings.sectionsLabel":"Разделы настроек","settings.tabApp":"Приложение","settings.tabAccount":"Аккаунт","settings.tabNotifications":"Уведомления","settings.tabSynapse":"Synapse","settings.tabSkills":"Скилы","settings.tabProtocols":"Протоколы","settings.tabMcp":"MCP","settings.languageToolbar":"Язык интерфейса","settings.languageDescription":"По умолчанию Navi следует языку вашего аккаунта gnexus-auth; выбор здесь перекрывает его только для Navi. «Авто» возвращает язык аккаунта.","settings.languageDescriptionOpen":"Вход в этот Navi отключён, поэтому язык сохраняется только в этом браузере.","settings.appTitle":"Приложение","settings.appDescription":"Navi — веб-приложение, но оно может жить на устройстве как обычное: либо установленное в этот браузер, либо как Android-приложение, которое оборачивает тот же интерфейс. Это не исключающие друг друга варианты: на телефоне стоит держать Android-приложение, а везде ещё — установленное веб-приложение.","settings.appInstallTitle":"Установка в этот браузер","settings.appInstallText":"Установка помещает Navi в отдельное окно без адресной строки, добавляет значок в док или на домашний экран и кэширует интерфейс, поэтому приложение открывается мгновенно и показывает сессии даже без сети. Она же включает уведомления о готовых ответах — в том числе когда вкладка закрыта.","settings.appAndroidAlert":"Вы читаете это внутри Android-приложения, и оно уже установлено. Чтобы обновить его, скачайте APK ниже и установите поверх старого.","settings.appInstalledAlert":"Установлено — Navi работает в отдельном окне, а не во вкладке браузера.","settings.appInstallAction":"Установить","settings.appInstallHint":"Браузер попросит подтвердить.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"нажмите","settings.appIosShare":"«Поделиться», затем","settings.appIosAddHome":"На экран «Домой»","settings.appIosNote":"Уведомления там требуют iOS 16.4 или новее и работают только в установленном приложении, а не во вкладке Safari.","settings.appBrowserChrome":"Chrome или Edge:","settings.appChromeClick":"нажмите значок установки в правом конце адресной строки или откройте","settings.appChromeMenu":"меню и выберите","settings.appChromeInstall":"Установить Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"откройте","settings.appAndroidMenu":"меню и выберите","settings.appAndroidInstall":"Установить приложение","settings.appAndroidAlso":"(иногда «На главный экран»)","settings.appHttpsBefore":"Браузеры предлагают это только по HTTPS или на localhost — по обычному адресу","settings.appHttpsAfter":"такая возможность не появляется, как и офлайн-режим с уведомлениями.","settings.appAndroidTitle":"Android-приложение","settings.appAndroidText":"Тот же Navi в нативной оболочке. То, чего не даст вкладка браузера: уведомления при заблокированном телефоне — фоновая служба держит соединение открытым — плюс нативная камера и выбор фото, а ссылки открываются в обычном браузере. Сессии, профили и настройки живут на сервере, поэтому приложение и веб-клиент не расходятся.","settings.appApkMissing":"APK не опубликован на этом сервере — соберите его командой","settings.appVersion":"Версия","settings.appSize":"Размер","settings.appBuilt":"Сборка","settings.appDownloadApk":"Скачать APK","settings.appAndroidStep1":"Откройте скачанный файл на телефоне. Android спросит, разрешить ли установку приложений из этого источника, — разрешите.","settings.appAndroidStep2":"При первом запуске приложение спросит адрес Navi. Введите","settings.appAndroidStep2Tail":", затем войдите через браузер, когда он откроется; приложение вернётся само.","settings.appAndroidStep3":"Более новый APK устанавливается поверх старого и сохраняет настройки. Удалять прежнюю версию пришлось бы только при смене ключа подписи.","settings.keysTitle":"API-ключи","settings.keysCreate":"Новый ключ","settings.keysDescription":"API-ключи позволяют безголовым клиентам (скриптам, голосовым помощникам, устройствам IoT) аутентифицироваться без OAuth в браузере.","settings.keysNoAuthWarning":"Авторизация сейчас отключена. Любые созданные здесь ключи привязаны к локальному анонимному пользователю и дают полный доступ к этому экземпляру Navi.","settings.keysLoading":"Загрузка API-ключей","settings.keysEmpty":"API-ключей пока нет. Создайте первый, чтобы начать.","settings.keyCreateTitle":"Создание API-ключа","settings.keyNamePlaceholder":"например, Умные часы, Скрипт автоматизации","settings.keyCreatedTitle":"API-ключ создан","settings.keyCopyNow":"Скопируйте этот токен сейчас — он","settings.keyCopyNowStrong":"больше не будет показан","settings.notificationsTitle":"Уведомления","settings.notificationsBridgeText":"Приложение держит соединение открытым в фоне и показывает системное уведомление, когда ответ готов, а Navi свёрнут. Если закрыть само приложение, уведомления прекратятся.","settings.notificationsWebText":"Push-уведомления позволяют Navi сообщить вам о готовом ответе — даже когда вкладка закрыта. На каждый готовый ответ приходит одно уведомление, но только если ни одно окно Navi не открыто на этой сессии.","settings.notificationsUnsupported":"Этот браузер не поддерживает web push (нужны HTTPS, service worker и Push API). Попробуйте Chrome или свежий Firefox.","settings.notificationsRowTitle":"Push-уведомления","settings.notificationsOnBackground":"Включены — фоновый режим держит соединение, пока приложение свёрнуто.","settings.notificationsOn":"Включены — это устройство подписано.","settings.notificationsBlockedApp":"Заблокированы в системных настройках приложения.","settings.notificationsBlockedBrowser":"Заблокированы в настройках сайта в браузере.","settings.notificationsOff":"Выключены.","settings.mcpTitle":"MCP-серверы","settings.mcpDescriptionAdmin":"Всё, что подключено к вашим профилям. Сервер со слотом личного ключа работает под вашим ключом — не задавайте свой, и он продолжит использовать общий ключ, настроенный на этом Navi.","settings.mcpDescription":"Всё, что подключено к вашим профилям. Серверу со слотом личного ключа нужен","settings.mcpDescriptionStrong":"ваш собственный ключ","settings.mcpDescriptionTail":"— пока вы его не сохраните, для вас он не подключён вовсе. Серверы без слота общие и доступны всегда.","settings.mcpLoading":"Загрузка MCP-серверов","settings.mcpEmpty":"К этому Navi не подключено ни одного MCP-сервера ни в одном профиле.","settings.mcpKeySet":"Личный ключ сохранён {date} — используется вместо общего ({location}).","settings.mcpKeyAbsentAdmin":"Личного ключа нет — используется общий ключ из конфигурации ({location}).","settings.mcpKeyAbsent":"Личного ключа нет — этот сервер для вас не подключён.","settings.mcpNoSlot":"Слота личного ключа нет — работает на общей конфигурации.","settings.mcpKeyPlaceholder":"••• сохранён — введите новый ключ, чтобы заменить","settings.mcpKeyPlaceholderNew":"Вставьте ваш ключ","settings.mcpReset":"Сбросить на общий","settings.synapseTargetsTitle":"Доставки Synapse","settings.synapseTargetAdd":"Добавить цель","settings.synapseTargetsDescription":"Доставки из хаба уведомлений GNEXUS Synapse приходят на вебхук этого Navi и проверяются по личному секрету цели. Создайте цель в админ-панели Synapse, затем зарегистрируйте её здесь, чтобы Navi принимал её доставки.","settings.synapseTargetsLoading":"Загрузка целей","settings.synapseTargetsEmpty":"Ни одной цели Synapse не зарегистрировано. Добавьте её, чтобы начать принимать доставки.","settings.synapseTargetColRef":"Идентификатор цели","settings.synapseTargetAddTitle":"Добавление цели Synapse","settings.synapseTargetRefPlaceholder":"например, navi-main (как в админ-панели Synapse)","settings.synapseTargetSecret":"Секрет доставки","settings.synapseTargetSecretPlaceholder":"s2s-секрет цели Synapse","settings.synapseTargetHintBefore":"В админ-панели Synapse создайте цель, указывающую на","settings.synapseTargetHintAfter":"этого Navi, и вставьте её секрет здесь. Navi использует его, чтобы убедиться, что доставки действительно пришли из Synapse.","settings.reactionsTitle":"Реакции Synapse","settings.reactionsDescription":"Когда приходит событие GNEXUS Synapse, Navi может отреагировать сам: диспетчер выбирает профиль по вашим инструкциям, работа идёт в скрытой служебной сессии, а посмотреть её потом можно через переключатель «Служебные сессии» в боковой панели.","settings.reactionsNotConfigured":"Исходящие события в Synapse отключены: этот Navi не настроен как источник событий. Варианты, отправляющие события в Synapse, недоступны — приём событий, реакции и доставка в приложение работают.","settings.reactionsLoading":"Загрузка настроек реакций","settings.reactionsEnable":"Включить реакции","settings.reactionsOn":"Пришедшие события запускают фоновый прогон реакции.","settings.reactionsOff":"События принимаются и пишутся в журнал, но Navi ничего не делает.","settings.reactionsNotify":"Сообщать о завершённых реакциях","settings.reactionsOnlyFailures":"Только сбои","settings.reactionsPushAlways":"Push после каждого завершённого прогона.","settings.reactionsPushFailures":"Push только когда прогон закончился ошибками.","settings.reactionsPushNever":"Не отправлять push о завершении.","settings.reactionsTarget":"Куда идут уведомления","settings.reactionsTargetNote":"Относится к инструменту notify в Navi и к push о завершении реакций.","settings.reactionsTargetApp":"Только в приложение","settings.reactionsTargetAppSynapse":"Приложение + Synapse","settings.reactionsTargetSynapse":"Только Synapse","settings.reactionsInstructions":"Инструкции для реакций","settings.reactionsInstructionsNote":"Указания, по которым диспетчер выбирает профиль и строит задачу. Их можете править и вы, и Navi; каждое изменение попадает в историю ниже.","settings.reactionsInstructionsPlaceholder":"например, «События todo из gntodo идут в профиль developer; спам-письма — никуда».","settings.reactionsInstructionsSave":"Сохранить инструкции","settings.reactionsHistory":"История правок","settings.reactionsSessionTtl":"Продолжать беседу","settings.reactionsSessionTtlNote":"Когда диспетчер называет беседу в событии, Navi продолжает ту же сессию вместо новой — если она была активна не позже этого срока. 0 отключает продолжение.","settings.reactionsSessionTtlUnit":"минут простоя","settings.dispatcherInstructions":"Распределение событий по профилям","settings.dispatcherInstructionsNote":"Указания только для диспетчера: какой тип события в какой профиль идёт и что считать одной беседой (ключ беседы). В сессию и в задачу они не попадают.","settings.dispatcherInstructionsPlaceholder":"например, «tg.* → assistant, ключ = id чата; gntodo.* → developer, не продолжать никогда».","settings.dispatcherInstructionsSave":"Сохранить инструкции распределителю","settings.adminToolsTitle":"Инструменты","settings.adminToolsReloading":"Перезагрузка…","settings.adminToolsReload":"Перезагрузить инструменты","settings.adminToolsDescriptionBefore":"Перечитывает инструменты из","settings.adminToolsDescriptionAfter":", провайдеры контекста и переподключает все MCP-серверы — без перезапуска и простоя. Новые инструменты можно вызывать со следующего сообщения в любой сессии. Только для админа: подменяет набор инструментов, с которым работают все профили.","settings.adminToolsLoaded":{one:"загружено {n} инструмент",few:"загружено {n} инструмента",many:"загружено {n} инструментов"},"settings.adminToolsRegistry":"({n} в реестре)","settings.adminToolsMissing":"называет {names} — такого инструмента нет, он исключён из всех профилей.","settings.adminToolsMcpFailed":"Переподключение MCP не удалось: {error}","settings.adminToolsMcpTools":{one:"{n} MCP-инструмент",few:"{n} MCP-инструмента",many:"{n} MCP-инструментов"},"settings.adminToolsProviders":{one:"{n} провайдер контекста",few:"{n} провайдера контекста",many:"{n} провайдеров контекста"},"settings.skillsAddSkill":"Новый скил","settings.skillsAddProtocol":"Новый протокол","settings.skillsSearchHint":"Поиск","settings.skillsSearchLabel":"Поиск по названию, триггеру или тегу","settings.skillsHintSkills":"То, что агент умеет: скил подгружается, когда срабатывает один из его триггеров.","settings.skillsHintProtocols":"Пошаговые порядки действий: предусловия, проверки после шагов и что делать, если шаг пошёл не так.","settings.skillsCountSkills":{one:"{n} скил",few:"{n} скила",many:"{n} скилов"},"settings.skillsCountProtocols":{one:"{n} протокол",few:"{n} протокола",many:"{n} протоколов"},"settings.skillsFilterArea":"Область","settings.skillsFilterAreaAll":"Все области","settings.skillsCatalog":"Каталог","settings.skillsLoading":"Загружаем","settings.skillsEmptySkills":"Скилов пока нет. Расскажите агенту, что он должен уметь, или добавьте скил здесь.","settings.skillsEmptyProtocols":"Протоколов пока нет. Попросите агента предложить протокол или добавьте его здесь.","settings.skillsPersonal":"личный","settings.skillsShared":"общий","settings.skillsAreaHome":"дом","settings.skillsAreaInfrastructure":"инфраструктура","settings.skillsAreaWorkflows":"рабочие процессы","settings.skillsAreaGeneral":"общее","settings.skillsNewSkill":"Новый скил","settings.skillsNewProtocol":"Новый протокол","settings.skillsReadOnly":"только чтение","settings.skillsEdit":"Изменить","settings.skillsBack":"К списку","settings.skillsEditorLabel":"Документ","settings.skillsEditorPlaceholder":"Markdown-документ с блоком YAML во фронтматтере","settings.skillsVisibility":"Видимость","settings.skillsPlaceholder":"Выберите запись слева, чтобы прочитать её.","settings.skillsParseFailed":"Сохранённый документ не разбирается — показываю исходный текст.","settings.skillsUpdated":"изменено {when}","settings.skillsHistory":"История изменений","settings.skillsHistoryEmpty":"Сохранённых версий пока нет.","settings.skillsUnknownEditor":"неизвестно","settings.skillsCreated":"Создано","settings.skillsSaved":"Сохранено","settings.skillsDeleted":"Удалено","settings.skillsDeleteConfirm":"Удалить «{name}»? История изменений удалится вместе с записью.","share.title":"Поделиться чатом","share.intro":"Ссылка открывает чат только для чтения — ровно в том виде, в каком он здесь. Без аккаунта, без возможности ответить, без списка чатов и артефактов.","share.creating":"Создаю ссылку…","share.linkLabel":"Ссылка только для чтения","share.warning":"Ссылка не истекает и отозвать её нельзя. Любой, у кого она есть, прочитает этот чат.","share.killHint":"Удаление чата закрывает ссылку для всех.","share.notYet":"Ссылка появится, когда вы её запросите.","share.create":"Создать ссылку","share.regenerate":"Показать ссылку","share.createFailed":"Не удалось создать ссылку.","share.emptyChat":"Пока нечего показать — сначала отправьте сообщение.","share.readOnly":"Только чтение","share.untitled":"Общий чат","share.notFoundTitle":"Этот чат больше недоступен","share.notFoundText":"Возможно, ссылка неверна или чат удалён.","share.loadOlder":"Загрузить более ранние","share.empty":"Здесь пусто","share.footer":"Копия чата Navi только для чтения"},io={en:Mb,uk:Lb,ru:$b},Db=Object.keys(io),wp="navi.locale",Lt=F("en");function Sp(e){const t=String(e||"").trim().toLowerCase().split(/[-_]/)[0];return io[t]?t:null}function oo(e){Lt.value=Sp(e)||"en"}function hu(){try{return Sp(localStorage.getItem(wp))}catch{return null}}function Pb(e){try{localStorage.setItem(wp,e)}catch{}}Ge(Lt,e=>{typeof document<"u"&&(document.documentElement.lang=e)});function Bb(e,t){const n=t%10,s=t%100;return e==="ru"||e==="uk"?n===1&&s!==11?"one":n>=2&&n<=4&&!(s>=12&&s<=14)?"few":"many":t===1?"one":"other"}function Fb(e,t){return e.replace(/\{(\w+)\}/g,(n,s)=>t&&s in t?String(t[s]):n)}function Ub(e){var t;return((t=io[Lt.value])==null?void 0:t[e])??io.en[e]}function m(e,t){let n=Ub(e);if(n!=null&&typeof n=="object"){const s=Number((t==null?void 0:t.n)??0);n=n[Bb(Lt.value,s)]??n.other}return n!=null?Fb(String(n),t):e}const Gb={once:"chat.recallOnce",recurring:"chat.recallRecurring",immediate:"chat.recallImmediate"};function Ql(e){return m(Gb[e]??"chat.recallOnce")}function ta(){return typeof window<"u"?window.NaviAndroid??null:null}function Jl(){const e=ta();return!!e&&typeof e.notify=="function"&&typeof e.enableBackgroundMode=="function"}const Ep="navi_push_android";function Hb(){try{return localStorage.getItem(Ep)==="1"}catch{return!1}}function zb(){var t;const e=ta();return!e||typeof e.requestNotificationPermission!="function"?Promise.resolve(!1):(t=e.hasNotificationPermission)!=null&&t.call(e)?Promise.resolve(!0):new Promise(n=>{const s=i=>{clearTimeout(a),window.removeEventListener("navi-perm-result",s),n(!!(i&&i.detail))},a=setTimeout(()=>{window.removeEventListener("navi-perm-result",s),n(!1)},3e4);window.addEventListener("navi-perm-result",s),e.requestNotificationPermission()})}function Kb(e,t,n){const s=ta();if(!s||typeof s.notify!="function"||typeof document<"u"&&!document.hidden)return;let a;try{a=localStorage.getItem(Ep)==="1"}catch{return}if(a)try{s.notify(String(e),String(t),String(n??"/"))}catch(i){console.warn("[nativeBridge] notify failed",i)}}async function qb(e){try{const t=xn(),n=t.sessions.find(a=>a.session_id===e);if(n!=null&&n.name)return;const{name:s}=await Kv(e);s&&t.updateName(e,s)}catch{}}function Vb({state:e,tools:t,messageHelpers:n}){const{messages:s,streaming:a,awaitingStream:i,streamingMsg:o,replayMode:r,currentId:u,contextTokens:l,maxContextTokens:c,servedModel:f,servedTarget:p,servedFallback:b,currentProfileId:_,toolIndex:k}=e,{_lastSpawnCard:L}=t,{markMessageFailed:R}=n;function x(J){const le=J==null?void 0:J.message_index;return Number.isInteger(le)&&le>=0?`h_${le}`:`h_${s.value.filter(_e=>_e.role==="assistant").length-1}`}function S(){if(o.value){const _e=s.value.indexOf(o.value);_e!==-1&&s.value.splice(_e,1),o.value=null}a.value=!0,i.value=!1;const J=s.value.find(_e=>_e.queued);J&&(J.queued=!1),k.clear();const le={id:`stream_${Date.now()}`,role:"assistant",type:"stream",thinking:null,tools:[],text:"",done:!1,time:new Date().toISOString(),animate:!r.value,statusLabel:null};s.value.push(le),o.value=s.value[s.value.length-1]}function I(){r.value=!0}function O(){r.value=!1,o.value&&(o.value.animate=!0)}function P(J){const le=o.value;le&&(le.thinking||(le.thinking={text:"",done:!1}),le.thinking.text+=J)}function M(){const J=o.value;J!=null&&J.thinking&&(J.thinking.done=!0)}function $(J){const le=o.value;if(!le)return;const _e={kind:"turn_thinking",isSubagent:J.is_subagent??!1,thinking:{text:J.thinking??"",done:!0}};if(J.is_subagent){const Me=L(le);if(Me){Me.steps.push(_e);return}}le.tools.push(_e)}function v(J){const le=o.value;if(le){if(J.is_subagent){const _e=L(le);_e&&(_e.planningLabel=J.label??"");return}le.statusLabel=J.label??""}}function E(J){const le=o.value;if(le){if(J.is_subagent){const _e=L(le);_e&&(_e.planningLabel=null,_e.steps.push({kind:"plan",text:J.plan??""}));return}le.statusLabel=null,le.tools.push({kind:"plan",text:J.plan??""})}}function C(){i.value=!1}function A(J){const le=(J==null?void 0:J.client_ids)??(J!=null&&J.client_id?[J.client_id]:[]);let _e=0;for(const Me of le)R(Me,"dropped")&&_e++;_e&&!a.value&&(i.value=!1)}function B(J){const le=o.value;le&&(le.statusLabel&&(le.statusLabel=null),le.text+=J)}function z(J){if(!J)return;const le=_e=>{!_e||_e.kind!=="tool"||!_e.pending||(_e.pending=!1,_e.success=!1,_e.result==null&&(_e.result=m("messages.toolInterrupted")))};for(const _e of J.tools??[]){le(_e);for(const Me of _e.steps??[])le(Me)}}function K(J){const le=o.value;le&&(le.done=!0,z(le),le.elapsed_seconds=(J==null?void 0:J.elapsed_seconds)??null,le.tool_call_count=(J==null?void 0:J.tool_call_count)??null,le.token_count=(J==null?void 0:J.token_count)??null,le.id=x(J),o.value=null,!le.thinking&&!le.tools.length&&!le.text&&(s.value=s.value.filter(_e=>_e!==le))),a.value=!1,i.value=!1,(J==null?void 0:J.context_tokens)!=null&&(l.value=J.context_tokens),(J==null?void 0:J.max_context_tokens)!=null&&(c.value=J.max_context_tokens),u.value&&(le!=null&&le.text)&&xn().updatePreview(u.value,le.text.slice(0,80)),le!=null&&le.text&&u.value&&Kb("Navi ответила",le.text.slice(0,140),`/#${u.value}`),u.value&&qb(u.value)}function j(J){const le=o.value;le&&(le.done=!0,z(le),le.id=x(J),o.value=null,!le.thinking&&!le.tools.length&&!le.text&&(s.value=s.value.filter(_e=>_e!==le))),a.value=!1,i.value=!1}function Q(J){_.value=J.profile_id,f.value=null,p.value=null,b.value=!1}function ce(J){J!=null&&J.model&&(f.value=J.model,p.value=J.target??null,b.value=!!J.fallback)}function Be(J){(J==null?void 0:J.context_tokens)!=null&&(l.value=J.context_tokens),(J==null?void 0:J.max_context_tokens)!=null&&(c.value=J.max_context_tokens),s.value.push({id:`compress_pending_${Date.now()}`,role:"system",type:"compression_pending"})}function Xe(J){(J==null?void 0:J.context_tokens)!=null&&(l.value=J.context_tokens),(J==null?void 0:J.max_context_tokens)!=null&&(c.value=J.max_context_tokens),s.value=s.value.filter(le=>le.type!=="compression_pending"),s.value.push({id:`compress_${Date.now()}`,role:"system",type:"compression_notice",before:J.messages_before,after:J.messages_after,summary:J.summary??""})}function De(J){const le=o.value;le&&(le.done=!0,z(le),!le.thinking&&!le.tools.length&&!le.text&&(s.value=s.value.filter(_e=>_e!==le))),a.value=!1,i.value=!1,o.value=null,s.value.push({id:`err_${Date.now()}`,role:"system",type:"error",text:J.message??"An error occurred"})}return{onStreamStart:S,onReplayStart:I,onReplayEnd:O,onThinkingDelta:P,onThinkingEnd:M,onTurnThinking:$,onPlanningStatus:v,onPlanReady:E,onMessageQueued:C,onMessageDropped:A,onStreamDelta:B,onStreamEnd:K,onStreamStopped:j,onProfileSwitched:Q,onModelInfo:ce,onCompressionStarted:Be,onContextCompressed:Xe,onError:De}}let Li=null,da=null,rr=0;function Wb({state:e,messageHelpers:t,content:n,tasks:s,sessionsStore:a}){const{currentId:i,currentProfileId:o,messages:r,artifacts:u,files:l,streaming:c,loading:f,loadError:p,loadErrorSessionId:b,awaitingStream:_,streamingMsg:k,contextTokens:L,maxContextTokens:R,servedModel:x,servedTarget:S,servedFallback:I,terminals:O,backgroundTasks:P,_terminalTaskIds:M,toolIndex:$,archiveLoading:v,archiveHasMore:E,archiveNextBefore:C,historyCount:A,archiveExtended:B,scrollToMessageIndex:z,viewedImages:K,_viewedImageKeys:j,replayMode:Q}=e,{buildMessageList:ce}=t,{mergeFeedback:Be,fetchArtifacts:Xe,fetchFiles:De}=n,{fetchTasks:J}=s;async function le(q,Y=null){if(i.value===q&&Y==null)return;const ne=++rr;Li=q,da&&da.abort();const X=new AbortController;da=X;const pe=()=>Li===q&&rr===ne&&!X.signal.aborted;f.value=!0,p.value=null,b.value=null,z.value=Y;try{const[oe,ue]=await Promise.all([or(q,{signal:X.signal}),Fa(q,null,200,{signal:X.signal})]);if(!pe())return;if(K.value=[],j.clear(),u.value=[],l.value=[],c.value=!1,_.value=!1,k.value=null,L.value=0,R.value=0,x.value=null,S.value=null,I.value=!1,O.value={},P.value={},M.clear(),$.clear(),B.value=!1,o.value=oe.profile_id??null,A.value=oe.message_count??0,a.rememberName(q,oe.name),r.value=ce(ue.items??[]),v.value=!1,E.value=ue.has_more??!1,C.value=ue.next_before_seq??null,oe.context_token_count&&(L.value=oe.context_token_count),oe.max_context_tokens&&(R.value=oe.max_context_tokens),Y!=null){let re=0;for(;!r.value.some(ye=>{var ve;return(ve=ye.rawIndices)==null?void 0:ve.includes(Y)})&&E.value&&re<20;){const ye=await Fa(q,C.value,200,{signal:X.signal});if(!pe())return;r.value=[...ce(ye.items??[]),...r.value],E.value=ye.has_more??!1,C.value=ye.next_before_seq??null,B.value=!0,re++}}if(await Promise.all([Be(q),Xe(q),De(q)]),!pe())return;i.value=q,location.hash=q,J(q)}catch(oe){if(X.signal.aborted||Li!==q)return;console.error("[chat] loadSession failed",oe);const ue=(oe==null?void 0:oe.name)==="TimeoutError"?m("chat.loadTimeout"):(oe==null?void 0:oe.message)||String(oe);p.value=m("chat.loadFailed",{error:ue}),b.value=q}finally{Li===q&&rr===ne&&(f.value=!1,da===X&&(da=null))}}function _e(){p.value=null,b.value=null}function Me(){i.value=null,o.value=null,p.value=null,b.value=null,r.value=[],K.value=[],j.clear(),u.value=[],l.value=[],c.value=!1,_.value=!1,k.value=null,L.value=0,R.value=0,x.value=null,S.value=null,I.value=!1,O.value={},P.value={},M.clear(),$.clear(),location.hash=""}async function Z(q){if(q&&!c.value&&!da)try{const[Y,ne]=await Promise.all([or(q),Fa(q,null,200)]);if(c.value||i.value!==q)return;o.value=Y.profile_id??null,A.value=Y.message_count??0;const X=ce(ne.items??[]);if(r.value=X,E.value=ne.has_more??!1,C.value=ne.next_before_seq??null,await Promise.all([Be(q),Xe(q),De(q),J(q)]),i.value!==q)return;Y.context_token_count&&(L.value=Y.context_token_count),Y.max_context_tokens&&(R.value=Y.max_context_tokens),k.value=null,c.value=!1,_.value=!1}catch{}}function we(){const q=k.value;if(q){const Y=r.value.indexOf(q);Y!==-1&&r.value.splice(Y,1)}k.value=null,c.value=!1,_.value=!1,Q.value=!1}async function se(q=i.value){if(!q||c.value||f.value)return!1;let Y;try{Y=await or(q)}catch{return!1}if(i.value!==q||c.value)return!1;const ne=Y.message_count??0;if(ne===A.value)return!1;if(B.value)try{return await at(q,ne)}catch(X){return console.error("[chat] catch-up failed",X),!1}return await Z(q),!0}const He=5;function Ke(q){let Y=1/0,ne=-1/0;for(const X of q)for(const pe of X.rawIndices??[])pene&&(ne=pe);return[Y,ne]}async function at(q,Y){const[,ne]=Ke(r.value);let X=[],pe=null;for(let ye=0;yene)return await Z(q),!0;const ue=r.value.filter(ye=>{const ve=ye.rawIndices??[];return ve.length>0&&Math.max(...ve)ye.queued&&!(ye.rawIndices??[]).length);return r.value=[...ue,...X,...re],A.value=Y,!0}async function D(){const q=i.value;if(!q||v.value||!E.value)return;v.value=!0,B.value=!0;const Y=r.value;try{const ne=await Fa(q,C.value);if(i.value!==q||r.value!==Y)return;const X=ce(ne.items??[]);r.value=[...X,...r.value],E.value=ne.has_more??!1,C.value=ne.next_before_seq??null}catch(ne){console.error("[chat] loadArchivedMessages failed",ne)}finally{v.value=!1}}function U(q=!1,Y=null){E.value=q,C.value=Y}return{loadSession:le,clearSession:Me,dismissLoadError:_e,reloadSession:Z,dropStaleStream:we,checkForUpdates:se,loadArchivedMessages:D,initArchiveState:U}}const Gt=Es("chat",()=>{const e=xn(),t=Sb(),n=Eb(t),s=Tb(t),a=Ab(t),i=xb(t),o=Nb(t),r=Ib({state:t,content:a,recall:i,messageHelpers:n}),u=Ob(t),l=Vb({state:t,tools:r,messageHelpers:n}),c=Wb({state:t,messageHelpers:n,content:a,tasks:o,sessionsStore:e}),f=W(()=>{let p=null;for(const b of t.messages.value){const _=b==null?void 0:b.tools;if(_!=null&&_.length)for(let k=0;k<_.length;k++){const L=_[k];L.kind==="tool"&&L.name==="content_publish"&&(p=`${b.id}:content:${k}`)}}return p});return{currentId:t.currentId,currentProfileId:t.currentProfileId,messages:t.messages,streaming:t.streaming,pendingImages:t.pendingImages,pendingFiles:t.pendingFiles,artifacts:t.artifacts,files:t.files,viewedImages:t.viewedImages,contextTokens:t.contextTokens,maxContextTokens:t.maxContextTokens,servedModel:t.servedModel,servedTarget:t.servedTarget,servedFallback:t.servedFallback,wsConnected:t.wsConnected,wsReconnecting:t.wsReconnecting,loading:t.loading,loadError:t.loadError,loadErrorSessionId:t.loadErrorSessionId,latestContentToolKey:f,imagesProcessing:t.imagesProcessing,awaitingStream:t.awaitingStream,streamingMsg:t.streamingMsg,scrollToMessageIndex:t.scrollToMessageIndex,recall:t.recall,terminals:t.terminals,backgroundTasks:t.backgroundTasks,archiveLoading:t.archiveLoading,archiveHasMore:t.archiveHasMore,archiveNextBefore:t.archiveNextBefore,loadSession:c.loadSession,clearSession:c.clearSession,dismissLoadError:c.dismissLoadError,reloadSession:c.reloadSession,dropStaleStream:c.dropStaleStream,checkForUpdates:c.checkForUpdates,fetchArtifacts:a.fetchArtifacts,fetchFiles:a.fetchFiles,fetchTasks:o.fetchTasks,rateMessage:a.rateMessage,saveDraft:s.saveDraft,loadDraft:s.loadDraft,appendUserMessage:n.appendUserMessage,markMessageFailed:n.markMessageFailed,buildMessageList:n.buildMessageList,onStreamStart:l.onStreamStart,onReplayStart:l.onReplayStart,onReplayEnd:l.onReplayEnd,onThinkingDelta:l.onThinkingDelta,onThinkingEnd:l.onThinkingEnd,onTurnThinking:l.onTurnThinking,onPlanningStatus:l.onPlanningStatus,onPlanReady:l.onPlanReady,onToolStarted:r.onToolStarted,onToolCall:r.onToolCall,onTerminalOutput:u.onTerminalOutput,onTerminalClosed:u.onTerminalClosed,onTerminalOpened:u.onTerminalOpened,onTaskUpdate:o.onTaskUpdate,onMessageQueued:l.onMessageQueued,onMessageDropped:l.onMessageDropped,onStreamDelta:l.onStreamDelta,onStreamEnd:l.onStreamEnd,onStreamStopped:l.onStreamStopped,onProfileSwitched:l.onProfileSwitched,onModelInfo:l.onModelInfo,onCompressionStarted:l.onCompressionStarted,onContextCompressed:l.onContextCompressed,onError:l.onError,loadRecall:i.loadRecall,cancelRecall:i.cancelRecall,skipRecall:i.skipRecall,onRecallUpdate:i.onRecallUpdate,onProposalDecided:n.onProposalDecided,loadArchivedMessages:c.loadArchivedMessages,initArchiveState:c.initArchiveState}}),Yn=Es("auth",()=>{const e=F(null),t=F(!1),n=F(!1),s=W(()=>e.value!==null),a=W(()=>{var p;return((p=e.value)==null?void 0:p.role)==="admin"});function i(p){return e.value?e.value.role==="admin"?!0:(e.value.permissions||[]).includes(p):!1}async function o(){var p;console.log("[auth] fetchMe start"),t.value=!0;try{e.value=await Lv(),console.log("[auth] fetchMe success",e.value)}catch(b){console.log("[auth] fetchMe error",b.message),(p=b.message)!=null&&p.includes("401")&&(e.value=null)}finally{t.value=!1,console.log("[auth] fetchMe loading=false")}}const r=F(!0);async function u(){console.log("[auth] fetchStatus start");try{const p=await fetch("/auth/status");if(console.log("[auth] fetchStatus response",p.status,p.ok),p.ok){const b=await p.json();console.log("[auth] fetchStatus data",b),r.value=b.enabled!==!1,n.value=!!b.configured,console.log("[auth] fetchStatus authEnabled set to",r.value),console.log("[auth] fetchStatus authConfigured set to",n.value)}else console.log("[auth] fetchStatus not ok"),r.value=!0,n.value=!1}catch(p){console.log("[auth] fetchStatus error",p),r.value=!0,n.value=!1}}function l(){const p=navigator.userAgent.includes("NaviAndroid"),b=new URLSearchParams;p&&b.set("platform","android"),b.set("return_to",location.pathname+location.search+location.hash),window.location.href="/auth/login?"+b.toString()}async function c(){try{await Dv()}catch{}e.value=null,window.location.reload()}const f=W(()=>!r.value);return{user:e,loading:t,authConfigured:n,authEnabled:r,isAuthenticated:s,isAdmin:a,isNoAuthMode:f,hasPermission:i,fetchMe:o,fetchStatus:u,login:l,logout:c}}),Yb=Object.freeze(Object.defineProperty({__proto__:null,useAuthStore:Yn},Symbol.toStringTag,{value:"Module"}));function jb(e){const t="=".repeat((4-e.length%4)%4),n=(e+t).replace(/-/g,"+").replace(/_/g,"/"),s=atob(n),a=new Uint8Array(s.length);for(let i=0;iJl()||Mo()&&tc()),Lo=W(()=>Jl()),_a=F(Zb()),_s=F(!1),En=F(!1);function Zb(){const e=ta();if(e&&typeof e.hasNotificationPermission=="function")try{return e.hasNotificationPermission()?"granted":"default"}catch{}return tc()?Notification.permission:"denied"}function Ap(){const e=ta();if(!e)return"denied";try{return e.hasNotificationPermission()?"granted":"default"}catch{return"default"}}async function xp(){if(!ec()||!Mo())return null;const e=await navigator.serviceWorker.getRegistration();return e?e.pushManager.getSubscription():null}async function Xb(){if(Lo.value){_s.value=Hb(),_a.value=Ap();return}if(!(!ec()||!Mo()))try{const e=await xp();_s.value=!!e,_a.value=tc()?Notification.permission:"denied"}catch{_s.value=!1}}async function Qb(){if(!(!Tp.value||En.value)){if(Lo.value){En.value=!0;try{if(Ap()!=="granted"&&!await zb())return!1;const e=ta();e.enableBackgroundMode(),typeof e.isIgnoringBatteryOptimizations=="function"&&!e.isIgnoringBatteryOptimizations()&&e.requestIgnoreBatteryOptimizations();try{localStorage.setItem("navi_push_android","1")}catch{}return _s.value=!0,_a.value="granted",!0}finally{En.value=!1}}En.value=!0;try{if(_a.value=await Notification.requestPermission(),_a.value!=="granted")return!1;const{public_key:e}=await pb();if(!e)return!1;const t=await navigator.serviceWorker.ready;let n=await t.pushManager.getSubscription();n||(n=await t.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:jb(e)}));const s=n.toJSON();return await gb({endpoint:s.endpoint,keys:s.keys,user_agent:navigator.userAgent}),_s.value=!0,!0}finally{En.value=!1}}}async function Jb(){var e,t;if(Lo.value){if(En.value)return;En.value=!0;try{(t=(e=ta())==null?void 0:e.disableBackgroundMode)==null||t.call(e);try{localStorage.removeItem("navi_push_android")}catch{}return _s.value=!1,!0}finally{En.value=!1}}if(!(!ec()||!Mo()||En.value)){En.value=!0;try{const n=await xp();if(n){try{await mb(n.endpoint)}catch{}await n.unsubscribe()}_s.value=!1}finally{En.value=!1}}}function Np(){return{supported:Tp,bridgeMode:Lo,permission:_a,subscribed:_s,busy:En,enable:Qb,disable:Jb,syncState:Xb}}const Ua="navi.notifications.promptBlocked",lr="navi.notifications.promptShown";function vu(e,t){try{return e.getItem(t)}catch{return null}}function $i(e,t,n){try{e.setItem(t,n)}catch{}}function bu(e,t){try{e.removeItem(t)}catch{}}function e_(){const{supported:e,bridgeMode:t,permission:n,subscribed:s,busy:a,enable:i,syncState:o}=Np(),r=F(!1);function u(){return vu(localStorage,Ua)==="1"}function l(){return vu(sessionStorage,lr)==="1"}function c(){return!e.value||a.value||u()||l()||n.value!=="default"?!1:!s.value}async function f(){try{await o()}catch{}return e.value&&!t.value&&n.value==="denied"&&$i(localStorage,Ua,"1"),c()?($i(sessionStorage,lr,"1"),r.value=!0,!0):!1}async function p(){if(await i()===!0){r.value=!1;return}(t.value||n.value==="denied")&&$i(localStorage,Ua,"1"),r.value=!1}function b(){r.value=!1}function _(){bu(localStorage,Ua),bu(sessionStorage,lr),r.value=!1}const k=W(()=>m("ui.notificationsPromptTitle")),L=W(()=>m("ui.notificationsPromptText")),R=W(()=>m("ui.notificationsPromptAllow")),x=W(()=>m("ui.notificationsPromptLater"));return{visible:r,busy:a,canPrompt:c,maybeShow:f,accept:p,decline:b,reset:_,title:k,text:L,acceptText:R,dismissText:x}}const Cp=/^#settings(?:\/([A-Za-z0-9_-]+))?$/;function Vi(e){return Cp.test(e||"")}function _u(e){var t;return((t=Cp.exec(e||""))==null?void 0:t[1])??null}function yu(e){return e?`#settings/${e}`:"#settings"}const t_=/^#share=([A-Za-z0-9_-]{16,})$/;function Di(e){var t;return((t=t_.exec(e||""))==null?void 0:t[1])??null}const nc="/images/logo.svg";function n_(e){if(!e)return"";const t=new Date(e);if(isNaN(t))return"";const n=Date.now()-t;return n<6e4?m("common.justNow"):n<36e5?m("common.minutesAgo",{n:Math.floor(n/6e4)}):n<864e5?t.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"}):t.toLocaleDateString(Lt.value)}const wl=F(Date.now());let Wi=null,si=0;function s_(){si++,si===1&&(wl.value=Date.now(),Wi=setInterval(()=>{wl.value=Date.now()},3e4))}function a_(){si=Math.max(0,si-1),si===0&&Wi&&(clearInterval(Wi),Wi=null)}function $o(e){const t=W(()=>(wl.value,n_(e.value)));return $t(s_),Nn(a_),t}const ro=F(!1),Rp=mf(""),Sl=[];function i_(){return{visible:ro,message:Rp}}function Na(){return function(t){return Rp.value=t,ro.value=!0,new Promise(n=>{Sl.push(n)})}}function ku(e){ro.value=!1;const t=Sl.shift();t==null||t(e),Sl.length===0&&(ro.value=!1)}const Ye=(e,t)=>{const n=e.__vccOpts||e;for(const[s,a]of t)n[s]=a;return n},o_={key:0,class:"session-icons"},r_=["title"],l_=["title"],c_=["title"],u_={class:"session-info"},d_={class:"session-name-row"},f_=["innerHTML"],p_=["innerHTML"],g_={key:1,class:"session-time"},m_=["title"],h_=["title"],v_=["title"],b_=["title"],__={__name:"SessionItem",props:{session:{type:Object,required:!0},active:{type:Boolean,default:!1},searchQuery:{type:String,default:""}},emits:["select","delete","pin","cancel-recall","skip-recall"],setup(e,{emit:t}){const n=e,s=t,a=Na(),i=W(()=>{const _=n.session.session_id??"";return n.session.name||_.slice(0,8)}),o=W(()=>n.searchQuery&&n.session.match_preview?n.session.match_preview:n.session.preview),r=W(()=>n.session.last_active),u=$o(r);function l(_){return typeof _!="string"?String(_??""):_.replace(/&/g,"&").replace(//g,">")}function c(_,k){if(!k||!_)return l(_);const L=k.toLowerCase(),R=_.toLowerCase(),x=[];let S=0;for(;;){const I=R.indexOf(L,S);if(I===-1)break;I>S&&x.push(l(_.slice(S,I))),x.push(`${l(_.slice(I,I+k.length))}`),S=I+k.length}return S<_.length&&x.push(l(_.slice(S))),x.join("")}const f=W(()=>c(i.value,n.searchQuery)),p=W(()=>c(o.value,n.searchQuery));async function b(){await a(m("confirm.deleteSession"))&&s("delete")}return(_,k)=>(h(),w("div",{class:Ce(["session-item",{"is-active":e.active,"is-pinned":e.session.pinned,"has-recall":e.session.has_pending_recall,"is-special":e.session.special}]),onClick:k[4]||(k[4]=L=>s("select"))},[e.session.pinned||e.session.has_pending_recall||e.session.special?(h(),w("div",o_,[e.session.pinned?(h(),w("i",{key:0,class:"ph ph-push-pin session-pin-icon",title:d(m)("sidebar.pinned")},null,8,r_)):V("",!0),e.session.has_pending_recall?(h(),w("i",{key:1,class:"ph ph-clock session-recall-icon",title:d(m)("sidebar.recallPending")},null,8,l_)):V("",!0),e.session.special?(h(),w("i",{key:2,class:"ph ph-robot session-special-icon",title:d(m)("sidebar.serviceSession")},null,8,c_)):V("",!0)])):V("",!0),g("div",u_,[g("div",d_,[g("span",{class:"session-name",innerHTML:f.value},null,8,f_)]),o.value?(h(),w("div",{key:0,class:"session-preview",innerHTML:p.value},null,8,p_)):V("",!0),d(u)?(h(),w("div",g_,y(d(u)),1)):V("",!0)]),g("div",{class:"session-actions",onClick:k[3]||(k[3]=Bt(()=>{},["stop"]))},[e.session.has_pending_recall?(h(),w("button",{key:0,class:"btn-icon",title:d(m)("sidebar.cancelRecall"),onClick:k[0]||(k[0]=L=>s("cancel-recall"))},[...k[5]||(k[5]=[g("i",{class:"ph ph-x-circle"},null,-1)])],8,m_)):V("",!0),e.session.has_pending_recall?(h(),w("button",{key:1,class:"btn-icon",title:d(m)("sidebar.skipNext"),onClick:k[1]||(k[1]=L=>s("skip-recall"))},[...k[6]||(k[6]=[g("i",{class:"ph ph-skip-forward"},null,-1)])],8,h_)):V("",!0),g("button",{class:"btn-icon",title:d(m)(e.session.pinned?"sidebar.unpin":"sidebar.pin"),onClick:k[2]||(k[2]=L=>s("pin"))},[g("i",{class:Ce(e.session.pinned?"ph ph-push-pin-slash":"ph ph-push-pin")},null,2)],8,v_),g("button",{class:"btn-icon",title:d(m)("common.delete"),onClick:b},[...k[7]||(k[7]=[g("i",{class:"ph ph-trash"},null,-1)])],8,b_)])],2))}},y_=Ye(__,[["__scopeId","data-v-213cc62b"]]),k_={class:"ptr-label"},w_={key:0,class:"sessions-loading"},S_={key:1,class:"empty-sessions"},E_={key:2,class:"empty-sessions"},T_={key:4,class:"sessions-loading sessions-loading-more"},wu=80,A_=120,x_={__name:"SessionList",emits:["select"],setup(e,{emit:t}){const n=t,s=xn(),a=Gt(),i=Si();Ge(()=>i.selectedProfileId,M=>{M&&M!==s.currentProfileId&&s.fetchSessions(M)});function o(M){n("select",M)}async function r(M){const $=M.session_id===a.currentId;await s.deleteSession(M.session_id),$&&a.clearSession()}async function u(M){await s.pinSession(M.session_id,!M.pinned)}async function l(M){try{await yp(M.session_id),s.updateRecallStatus(M.session_id,!1)}catch($){console.error("cancel recall failed",$)}}async function c(M){try{await kp(M.session_id)}catch($){console.error("skip recall failed",$)}}function f(M){const $=M.target;$.scrollHeight-$.scrollTop-$.clientHeight<160&&s.fetchMoreSessions()}const p=F(!1),b=F(0),_=F(!1),k=F(null),L=W(()=>({transform:`translateY(${Math.min(b.value,A_)}px)`,opacity:p.value?Math.min(b.value/wu,1):0})),R=W(()=>s.loading?m("common.refreshing"):_.value?m("common.releaseToRefresh"):m("common.pullToRefresh"));let x=0,S=0;function I(M){var v;const $=k.value;$&&(S=$.scrollTop||0,!(S>2)&&(x=((v=M.touches[0])==null?void 0:v.clientY)??0,p.value=!1,b.value=0,_.value=!1))}function O(M){var E;if(S>2||!x)return;const v=(((E=M.touches[0])==null?void 0:E.clientY)??0)-x;if(v<=0){p.value=!1;return}v>4&&M.preventDefault(),p.value=!0,b.value=v,_.value=v>=wu}function P(){_.value&&!s.loading&&s.fetchSessions(i.selectedProfileId),p.value=!1,b.value=0,_.value=!1,x=0,S=0}return(M,$)=>(h(),w("div",{class:"session-list-wrap",onTouchstart:I,onTouchmove:O,onTouchend:P},[g("div",{class:Ce(["ptr-indicator",{"ptr-active":p.value&&!d(s).loading}]),style:bs(L.value)},[g("span",{class:Ce(["ptr-spinner",{"ptr-spinning":_.value}])},null,2),g("span",k_,y(R.value),1)],6),d(s).loading&&!d(s).sessions.length?(h(),w("div",w_,[$[0]||($[0]=g("span",{class:"sessions-spinner"},null,-1)),g("p",null,y(d(m)("sidebar.loadingConversations")),1)])):d(s).sessions.length?d(s).filteredSessions.length?V("",!0):(h(),w("div",E_,[$[2]||($[2]=g("i",{class:"ph ph-faders"},null,-1)),g("p",null,y(d(m)("sidebar.noMatch")),1)])):(h(),w("div",S_,[$[1]||($[1]=g("i",{class:"ph ph-chat-dots"},null,-1)),g("p",null,y(d(m)("sidebar.noConversations")),1)])),d(s).filteredSessions.length?(h(),w("div",{key:3,ref_key:"scrollerRef",ref:k,class:Ce(["session-scroller",{"ptr-pulled":p.value}]),onScrollPassive:f},[(h(!0),w(fe,null,tt(d(s).filteredSessions,(v,E)=>(h(),ke(y_,{key:v.session_id,session:v,active:v.session_id===d(a).currentId,"search-query":d(s).searchActive?d(s).searchQuery:"",onSelect:C=>o(v),onDelete:C=>r(v),onPin:C=>u(v),onCancelRecall:C=>l(v),onSkipRecall:C=>c(v)},null,8,["session","active","search-query","onSelect","onDelete","onPin","onCancelRecall","onSkipRecall"]))),128))],34)):V("",!0),d(s).loadingMore?(h(),w("div",T_,[...$[3]||($[3]=[g("span",{class:"sessions-spinner"},null,-1)])])):V("",!0)],32))}},N_=Ye(x_,[["__scopeId","data-v-4d876f4d"]]),C_={class:"sidebar-header"},R_={class:"sidebar-logo-row"},I_={class:"sidebar-sessions"},O_={class:"sessions-header"},M_={class:"sessions-label"},L_={class:"sessions-header-actions"},$_={class:"sidebar-footer"},D_=["title"],P_={class:"user-name"},B_={class:"sidebar-footer-actions"},F_=["title"],U_=["href","title"],G_={class:"user-name"},H_={class:"sidebar-footer-actions"},z_=["title"],K_={__name:"AppSidebar",props:{mobileOpen:Boolean},emits:["close"],setup(e,{emit:t}){const n=e,s=t,a=Si(),i=xn(),o=Gt(),r=Yn(),u=F(!1),l=F(""),c=F(null);let f=null;Ge(()=>o.currentProfileId,$=>{$&&(a.selectedProfileId=$)}),Ge(()=>a.selectedProfileId,$=>{$&&(u.value&&(u.value=!1,i.exitSearch()),i.fetchSessions($),xt(()=>{var v,E;(E=(v=p.value)==null?void 0:v.querySelector(".chip-selected"))==null||E.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}))},{immediate:!0});const p=F(null);function b($){const v=p.value;v&&(v.scrollLeft+=Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY)}function _($,v){var E;a.selectedProfileId=$,(E=v==null?void 0:v.currentTarget)==null||E.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}function k(){i.showSpecial=!i.showSpecial,i.showSpecial&&u.value&&(u.value=!1,l.value="",i.clearSearch(),i.exitSearch()),i.fetchSessions(a.selectedProfileId)}function L(){var E;const $=((E=c.value)==null?void 0:E.$el)??c.value;if(!$)return;const v=$.querySelector("input");v==null||v.focus()}Ge(()=>o.currentProfileId,$=>{$&&(a.selectedProfileId=$)});function R(){u.value=!u.value,u.value&&(setTimeout(L,50),i.searchQuery&&(l.value=i.searchQuery,i.restoreSearch()))}function x(){u.value&&(u.value=!1,i.exitSearch(),i.fetchSessions(a.selectedProfileId))}function S(){u.value=!1,l.value="",i.clearSearch(),i.exitSearch(),i.fetchSessions(a.selectedProfileId)}Ge(l,$=>{if(f&&clearTimeout(f),!$){i.clearSearch(),i.fetchSessions(a.selectedProfileId);return}f=setTimeout(()=>{i.setSearch($),i.fetchSessions()},300)});function I(){o.clearSession(),s("close")}async function O($){var E;const v=i.searchActive;v&&$.profile_id&&(a.selectedProfileId=$.profile_id),await o.loadSession($.session_id,v?(E=$.match_indices)==null?void 0:E[0]:null),v&&(u.value=!1,i.exitSearch(),i.fetchSessions(a.selectedProfileId)),s("close")}function P(){location.hash="#settings",s("close")}function M($){($.ctrlKey||$.metaKey)&&$.key==="k"&&($.preventDefault(),R())}return $t(()=>window.addEventListener("keydown",M)),bn(()=>window.removeEventListener("keydown",M)),($,v)=>{var K,j,Q,ce,Be,Xe,De;const E=et("GnButton"),C=et("GnIconButton"),A=et("GnSearchField"),B=et("GnChip"),z=et("GnAvatar");return h(),w("aside",{class:Ce(["app-sidebar",{"is-mobile-open":n.mobileOpen}])},[g("div",C_,[g("div",R_,[v[4]||(v[4]=g("div",{class:"sidebar-logo"},[g("img",{src:nc,alt:"Navi"}),g("span",null,"Navi")],-1)),ee(E,{variant:"primary",icon:"ph ph-plus",onClick:I},{default:ge(()=>[ae(y(d(m)("sidebar.newChat")),1)]),_:1}),ee(C,{icon:"ph ph-x",label:d(m)("common.close"),class:"sidebar-close-btn",onClick:v[0]||(v[0]=J=>s("close"))},null,8,["label"])])]),g("div",{class:Ce(["sidebar-search",{"is-open":u.value}])},[g("div",{class:Ce(["sidebar-search-inner",{"is-loading":d(i).loading&&d(i).searchActive}])},[ee(A,{ref_key:"searchFieldEl",ref:c,modelValue:l.value,"onUpdate:modelValue":v[1]||(v[1]=J=>l.value=J),placeholder:d(m)("sidebar.searchPlaceholder"),compact:"",clearable:"",onClear:S,onKeydown:Wn(x,["esc"])},null,8,["modelValue","placeholder"])],2)],2),g("div",I_,[g("div",{ref_key:"profilesEl",ref:p,class:"sessions-profiles",onWheel:Bt(b,["prevent"])},[(h(!0),w(fe,null,tt(d(a).profiles,J=>(h(),ke(B,{key:J.id,clickable:"",selected:d(a).selectedProfileId===J.id,onClick:le=>_(J.id,le)},{default:ge(()=>[ae(y(J.name),1)]),_:2},1032,["selected","onClick"]))),128))],544),g("div",O_,[g("div",M_,[d(i).searchActive?(h(),w(fe,{key:0},[ae(y(d(m)("sidebar.results",{n:d(i).sessions.length})),1)],64)):(h(),w(fe,{key:1},[ae(y(d(m)(d(i).showSpecial?"sidebar.serviceSessions":"sidebar.conversations")),1)],64))]),g("div",L_,[ee(C,{icon:"ph ph-clock",label:d(m)("sidebar.pendingRecallsOnly"),class:Ce(["recall-filter-btn",{active:d(i).hasPendingRecallFilter}]),onClick:v[2]||(v[2]=J=>d(i).hasPendingRecallFilter=!d(i).hasPendingRecallFilter)},null,8,["label","class"]),ee(C,{icon:"ph ph-robot",label:d(m)("sidebar.serviceSessionsLabel"),class:Ce(["special-filter-btn",{active:d(i).showSpecial}]),onClick:k},null,8,["label","class"]),ee(C,{icon:"ph ph-magnifying-glass",label:d(m)("sidebar.search"),class:Ce(["search-toggle-btn",{active:u.value||d(i).searchActive}]),onClick:R},null,8,["label","class"]),ee(C,{icon:"ph ph-arrow-clockwise",label:d(m)("sidebar.refresh"),class:Ce(["sessions-refresh-btn",{"is-spinning":d(i).loading}]),onClick:v[3]||(v[3]=J=>d(i).fetchSessions(d(a).selectedProfileId))},null,8,["label","class"])])]),ee(N_,{onSelect:O})]),g("div",$_,[d(r).isNoAuthMode?(h(),w(fe,{key:0},[g("div",{class:"user-info",title:d(m)("sidebar.noAuthTitle")},[ee(z,{size:"sm",src:"",alt:d(m)("sidebar.localAvatar"),initials:"L"},null,8,["alt"]),g("span",P_,y(d(m)("sidebar.localMode")),1)],8,D_),g("div",B_,[ee(C,{icon:"ph ph-gear",label:d(m)("settings.title"),onClick:P},null,8,["label"]),g("a",{href:"/admin",target:"_blank",rel:"noopener noreferrer",class:"btn-icon admin-link",title:d(m)("sidebar.admin")},[...v[5]||(v[5]=[g("i",{class:"ph ph-shield-check"},null,-1)])],8,F_)])],64)):d(r).isAuthenticated?(h(),w(fe,{key:1},[g("a",{class:"user-info",href:(K=d(r).user)==null?void 0:K.profile_url,target:"_blank",rel:"noopener noreferrer",title:d(m)("sidebar.openProfile")},[ee(z,{size:"sm",src:((j=d(r).user)==null?void 0:j.avatar_url)||"",alt:((Q=d(r).user)==null?void 0:Q.display_name)||d(m)("sidebar.avatar"),initials:(((ce=d(r).user)==null?void 0:ce.display_name)||((Be=d(r).user)==null?void 0:Be.email)||"?").charAt(0).toUpperCase()},null,8,["src","alt","initials"]),g("span",G_,y(((Xe=d(r).user)==null?void 0:Xe.display_name)||((De=d(r).user)==null?void 0:De.email)),1)],8,U_),g("div",H_,[ee(C,{icon:"ph ph-gear",label:d(m)("settings.title"),onClick:P},null,8,["label"]),d(r).isAdmin?(h(),w("a",{key:0,href:"/admin",target:"_blank",rel:"noopener noreferrer",class:"btn-icon admin-link",title:d(m)("sidebar.admin")},[...v[6]||(v[6]=[g("i",{class:"ph ph-shield-check"},null,-1)])],8,z_)):V("",!0),ee(C,{icon:"ph ph-sign-out",label:d(m)("sidebar.logout"),onClick:d(r).logout},null,8,["label","onClick"])])],64)):(h(),ke(E,{key:2,variant:"primary",icon:"ph ph-sign-in",onClick:d(r).login},{default:ge(()=>[ae(y(d(m)("sidebar.login")),1)]),_:1},8,["onClick"]))])],2)}}},q_=Ye(K_,[["__scopeId","data-v-6361031f"]]),Ip={__name:"ConfirmDialog",setup(e){const{visible:t,message:n}=i_();function s(){ku(!0)}function a(){ku(!1)}return(i,o)=>{const r=et("GnConfirmDialog");return h(),ke(r,{open:d(t),"onUpdate:open":o[0]||(o[0]=u=>vt(t)?t.value=u:null),message:d(n),title:d(m)("ui.confirmTitle"),"cancel-text":d(m)("common.no"),"confirm-text":d(m)("common.yes"),"confirm-variant":"warning",onConfirm:s,onCancel:a},null,8,["open","message","title","cancel-text","confirm-text"])}}},V_=Object.freeze(Object.defineProperty({__proto__:null,default:Ip},Symbol.toStringTag,{value:"Module"})),Ks=F(null),W_=W(()=>{var e;return((e=Ks.value)==null?void 0:e.url)??null});function Y_(){Ks.value&&(Ks.value=null)}typeof window<"u"&&window.addEventListener("popstate",Y_);function Ca(){function e({url:s,type:a="image",title:i=""}={}){var o;s&&((o=history.state)!=null&&o.lightbox||history.pushState({lightbox:!0},""),Ks.value={url:s,type:a,title:i})}function t(s){e({url:s,type:"image"})}function n(){var s;Ks.value&&(Ks.value=null,(s=history.state)!=null&&s.lightbox&&history.back())}return{item:Ks,src:W_,open:t,openContent:e,close:n}}var Op={},j_=new Set(["primary","secondary","accent","success","warning","danger","error","info"]);function Ee(...e){return e.flatMap(t=>t?Array.isArray(t)?t:typeof t=="object"?Object.entries(t).filter(([,n])=>n).map(([n])=>n):[t]:[]).filter(Boolean).join(" ")}function cs(e,t="primary"){return j_.has(e)?e:t}function Je(e,t=""){if(!e)return null;const n=e.includes("ph ")||e.startsWith("ph-");n||typeof process<"u"&&Op&&console.warn(`[gnexus-ui-kit] Icon "${e}" is missing the required "ph-" prefix. Use "ph-${e}" instead.`);const s=n?e:`ph-${e}`;return N("i",{class:Ee("ph",s,t),"aria-hidden":"true"})}function Ra(e){const t=e.target;return t.type==="checkbox"?t.checked:t.value}var Z_=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");function Mp(e,t){if(e.key!=="Tab"||!t)return;const n=[...t.querySelectorAll(Z_)].filter(i=>!i.hasAttribute("disabled")&&i.offsetParent!==null);if(!n.length){e.preventDefault(),t.focus();return}const s=n[0],a=n[n.length-1];e.shiftKey&&document.activeElement===s?(e.preventDefault(),a.focus()):!e.shiftKey&&document.activeElement===a&&(e.preventDefault(),s.focus())}var X_=Le({name:"GnAccordion",props:{items:{type:Array,required:!0},modelValue:{type:[String,Array],default:""},multiple:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const s=F(e.multiple?[]:""),a=()=>e.modelValue||s.value,i=r=>e.multiple?a().includes(r):a()===r,o=r=>{let u;if(e.multiple){const l=[...a()];u=l.includes(r)?l.filter(c=>c!==r):[...l,r]}else u=i(r)?"":r;s.value=u,t("update:modelValue",u)};return()=>N("div",{class:"accordion"},e.items.map(r=>{var u;const l=i(r.id);return N("section",{class:"accordion-item",open:l?"":void 0},[N("button",{class:"accordion-summary",type:"button","aria-expanded":l?"true":"false",onClick:()=>o(r.id)},[N("span",{class:"accordion-summary-content"},[Je(r.icon),r.label]),N("i",{class:Ee("ph ph-caret-down accordion-icon",{"is-open":l}),"aria-hidden":"true"})]),l&&N("div",{class:"accordion-panel"},((u=n[r.id])==null?void 0:u.call(n,{item:r,open:l}))||r.content)])}))}}),Q_=Le({name:"GnActionCard",props:{kicker:{type:String,default:""},title:{type:String,required:!0},text:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,s,a;return N("article",{class:"card action-card"},[N("div",{class:"card-content"},[(e.kicker||t.kicker)&&N("span",{class:"action-card-kicker"},((n=t.kicker)==null?void 0:n.call(t))||e.kicker),N("h3",{class:"action-card-title"},((s=t.title)==null?void 0:s.call(t))||e.title),(e.text||t.default)&&N("p",{class:"action-card-text"},((a=t.default)==null?void 0:a.call(t))||e.text),t.actions&&N("div",{class:"action-card-actions"},t.actions())])])}}}),J_=Le({name:"GnActionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>N("ul",{...t,class:Ee("list list-actions",t.class)},e.items.map(s=>{var a,i;return N("li",{class:Ee("list-item",s.muted&&"list-item-muted")},[N("div",{class:"list-content"},[N("div",{class:"list-title"},((a=n.title)==null?void 0:a.call(n,{item:s}))||s.title||s.label||""),(s.subtitle||n.subtitle)&&N("div",{class:"list-subtitle"},((i=n.subtitle)==null?void 0:i.call(n,{item:s}))||s.subtitle)]),n.controls&&N("div",{class:"list-controls"},n.controls({item:s}))])}))}}),ey=Le({name:"GnActivityLog",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>N("div",{...t,class:Ee("activity-log",t.class)},e.items.map(s=>{var a;return N("div",{class:"activity-log-row"},[N("time",{class:"activity-log-time"},s.time),N("span",{class:"activity-log-title"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.title),n.actions&&N("span",{},n.actions({item:s}))])}))}}),Vn=Le({name:"GnAlert",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},role:{type:String,default:"status"}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=cs(e.variant);return N("div",{...t,role:e.role,class:Ee("alert",`alert-${a}`,t.class)},(s=n.default)==null?void 0:s.call(n))}}}),Do=Le({name:"GnAvatar",inheritAttrs:!1,props:{src:{type:String,default:""},alt:{type:String,default:""},initials:{type:String,default:""},icon:{type:String,default:""},size:{type:String,default:"md"},variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1},status:{type:String,default:""}},setup(e,{attrs:t}){return()=>{const n=cs(e.variant);return N("span",{...t,class:Ee("avatar",`avatar-${n}`,{"avatar-sm":e.size==="sm","avatar-lg":e.size==="lg","avatar-outline":e.outline,"is-online":e.status==="online","is-busy":e.status==="busy","is-offline":e.status==="offline"},t.class)},[e.src?N("img",{src:e.src,alt:e.alt}):Je(e.icon)||e.initials,e.status&&N("span",{class:"avatar-status","aria-hidden":"true"})])}}}),ty=Le({name:"GnAvatarStack",props:{items:{type:Array,default:()=>[]},count:{type:[Number,String],default:""}},setup(e,{slots:t}){return()=>{var n;return N("span",{class:"avatar-stack"},[e.items.map(s=>N(Do,{...s,size:s.size||"sm"})),(n=t.default)==null?void 0:n.call(t),e.count&&N("span",{class:"avatar-stack-count"},`+${e.count}`)])}}}),vi=Le({name:"GnBadge",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=cs(e.variant);return N("span",{...t,class:Ee("badge",e.outline&&a==="primary"?"badge-primary-outline":`badge-${a}`,t.class)},(s=n.default)==null?void 0:s.call(n))}}}),ot=Le({name:"GnButton",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},size:{type:String,default:"md"},icon:{type:String,default:""},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=!!(e.icon||e.loading),i=cs(e.variant);return N("button",{...t,type:e.type,disabled:e.disabled||e.loading,class:Ee("btn",`btn-${i}`,{"btn-small":e.size==="sm","btn-large":e.size==="lg","with-icon":a,"loading-state":e.loading},t.class)},[e.loading?Je("ph-bold ph-spinner"):Je(e.icon),(s=n.default)==null?void 0:s.call(n)])}}}),ny=Le({name:"GnCard",inheritAttrs:!1,props:{title:{type:String,default:""},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return N("article",{...t,class:Ee("card",e.variant&&`card-${e.variant}`,t.class)},[(e.title||n.title)&&N("header",{class:"card-title"},((s=n.title)==null?void 0:s.call(n))||e.title),N("div",{class:"card-content"},(a=n.default)==null?void 0:a.call(n)),n.footer&&N("footer",{class:"card-footer"},n.footer())])}}}),Lp=Le({name:"GnCheckbox",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return N("label",{class:Ee("checkbox",t.class)},[N("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:i=>n("update:modelValue",i.target.checked)}),N("span",{class:"checkbox-control","aria-hidden":"true"}),N("span",{class:"checkbox-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),$p=Le({name:"GnChip",inheritAttrs:!1,props:{variant:{type:String,default:""},icon:{type:String,default:""},selected:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},removable:{type:Boolean,default:!1},clickable:{type:Boolean,default:!1}},emits:["remove"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a,i,o,r;const u=e.clickable?"button":"span",l=e.variant?cs(e.variant):"",c=(o=(i=(a=s.default)==null?void 0:a.call(s))==null?void 0:i[0])==null?void 0:o.children;return N(u,{...t,type:u==="button"?"button":void 0,disabled:u==="button"?e.disabled:void 0,"aria-pressed":u==="button"?String(e.selected):void 0,class:Ee("chip",l&&`chip-${l}`,{"chip-selected":e.selected,"chip-disabled":e.disabled},t.class)},[Je(e.icon),(r=s.default)==null?void 0:r.call(s),e.removable&&N("button",{class:"chip-remove",type:"button","aria-label":c?`Remove ${c}`:"Remove",onClick:f=>{f.stopPropagation(),n("remove")}},[Je("ph-x")])])}}}),sy=Le({name:"GnChipGroup",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var s;return N("div",{...t,class:Ee("chip-group",t.class)},(s=n.default)==null?void 0:s.call(n))}}}),ay=0,iy=Le({name:"GnCombobox",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},options:{type:Array,default:()=>[]},placeholder:{type:String,default:"Search"},notFoundText:{type:String,default:"Nothing found"},state:{type:String,default:""},help:{type:String,default:""}},emits:["update:modelValue","select"],setup(e,{attrs:t,emit:n}){const s=`gn-combobox-${++ay}`,a=`${s}-listbox`,i=F(!1),o=F(-1),r=F(null),u=W(()=>e.options.map(_=>typeof _=="object"?_:{value:_,label:_})),l=W(()=>{var _;return String((_=e.modelValue)!=null?_:"").toLowerCase()}),c=W(()=>u.value.filter(_=>String(_.label).toLowerCase().includes(l.value))),f=_=>{_&&(n("update:modelValue",_.label),n("select",_),i.value=!1,o.value=-1)},p=_=>{c.value.length&&(i.value=!0,o.value=(o.value+_+c.value.length)%c.value.length,xt(()=>{var k,L,R;const x=(L=(k=r.value)==null?void 0:k.closest(".form-group"))==null?void 0:L.querySelector(".advanced-select");(R=x==null?void 0:x.querySelector(".option.focus"))==null||R.scrollIntoView({block:"nearest"})}))},b=_=>{_.key==="ArrowDown"?(_.preventDefault(),p(1)):_.key==="ArrowUp"?(_.preventDefault(),p(-1)):_.key==="Enter"?(_.preventDefault(),f(c.value[o.value])):_.key==="Escape"&&(i.value=!1,o.value=-1)};return()=>N("div",{class:"form-group"},[N("label",{class:Ee("label",e.state)},[e.label,Je(e.icon),N("input",{...t,ref:r,id:s,type:"text",value:e.modelValue,placeholder:e.placeholder,autocomplete:"off",role:"combobox","aria-autocomplete":"list","aria-expanded":i.value?"true":"false","aria-controls":a,"aria-activedescendant":o.value>=0?`${s}-option-${o.value}`:void 0,class:Ee("input",t.class),onFocus:()=>{i.value=!0},onBlur:()=>{setTimeout(()=>{i.value=!1},120)},onInput:_=>{o.value=-1,i.value=!0,n("update:modelValue",Ra(_))},onKeydown:b})]),N("div",{class:"advanced-select-container"},[N("div",{class:Ee("advanced-select",{"a-show":i.value})},[N("div",{class:"popup-options-container"},[N("div",{class:Ee("not-found",{show:!c.value.length})},e.notFoundText),N("div",{id:a,class:Ee("options",{show:c.value.length}),role:"listbox"},c.value.map((_,k)=>N("div",{id:`${s}-option-${k}`,class:Ee("option",{focus:k===o.value}),role:"option","aria-selected":_.label===e.modelValue?"true":"false","data-value":_.value,"data-display-value":_.label,onMousedown:L=>{L.preventDefault(),f(_)}},_.label)))])])]),e.help&&N("div",{class:Ee("input-info",e.state==="error"&&"error")},e.help)])}});function Dp({duration:e=300}={}){const t=F(!1),n=F(!1);let s=null;return{visible:t,closing:n,show:()=>{window.clearTimeout(s),n.value=!0,t.value=!0,xt(()=>{requestAnimationFrame(()=>{n.value=!1})})},hide:()=>{n.value=!0,s=window.setTimeout(()=>{t.value=!1,n.value=!1},e)},cancel:()=>{window.clearTimeout(s)}}}var oy=0,Ia=Le({name:"GnModal",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const s=`gn-modal-title-${++oy}`,a=F(null),{visible:i,closing:o,show:r,hide:u,cancel:l}=Dp();let c=null;const f=()=>{t("update:open",!1),t("close")},p=_=>{_.key==="Escape"?(_.preventDefault(),f()):Mp(_,a.value)},b=()=>{xt(()=>{var _;(_=a.value)==null||_.focus()})};return Ge(()=>e.open,_=>{var k;_?(r(),c=document.activeElement,document.addEventListener("keydown",p),b()):(u(),document.removeEventListener("keydown",p),(k=c==null?void 0:c.focus)==null||k.call(c),c=null)},{flush:"post",immediate:!0}),bn(()=>{document.removeEventListener("keydown",p),l()}),()=>{var _,k,L;return i.value?N(Ao,{to:"body"},[N("div",{class:Ee("modal",o.value?"a-hide":"a-show"),"aria-hidden":"false"},[N("div",{class:"modal-backdrop",onClick:()=>e.closeOnBackdrop&&f()}),N("div",{ref:a,class:"modal-dialog",role:"dialog","aria-modal":"true","aria-labelledby":s,tabindex:"-1"},[N("header",{class:"modal-header"},[N("h4",{class:"modal-title",id:s},((_=n.title)==null?void 0:_.call(n))||e.title),N("button",{class:"btn-icon modal-close",type:"button","aria-label":"Close",onClick:f},[Je("ph-x")])]),N("div",{class:"modal-panel"},[N("div",{class:"modal-body"},(k=n.default)==null?void 0:k.call(n)),(n.footer||n.actions)&&N("footer",{class:"modal-footer"},[(L=n.footer)==null?void 0:L.call(n),n.actions&&N("div",{class:"actions"},n.actions({close:f}))])])])])]):null}}}),ry=Le({name:"GnConfirmDialog",props:{open:{type:Boolean,default:!1},title:{type:String,default:"Requires confirmation"},message:{type:String,default:""},confirmText:{type:String,default:"YES"},cancelText:{type:String,default:"NO"},confirmVariant:{type:String,default:"warning"}},emits:["update:open","confirm","cancel"],setup(e,{emit:t,slots:n}){const s=()=>t("update:open",!1),a=()=>{t("cancel"),s()},i=()=>{t("confirm"),s()};return()=>N(Ia,{open:e.open,title:e.title,"onUpdate:open":o=>t("update:open",o)},{default:()=>{var o;return((o=n.default)==null?void 0:o.call(n))||N("p",{},e.message)},actions:()=>[N(ot,{variant:"primary",onClick:a},()=>e.cancelText),N(ot,{variant:e.confirmVariant,onClick:i},()=>e.confirmText)]})}}),sc=Le({name:"GnCopyButton",props:{text:{type:String,required:!0},icon:{type:String,default:"ph-copy"},successIcon:{type:String,default:"ph-check"},duration:{type:Number,default:3e3},label:{type:String,default:"Copy"},size:{type:String,default:null}},emits:["copy"],setup(e,{emit:t}){const n=F(!1);let s=null;const a=async()=>{try{await navigator.clipboard.writeText(e.text)}catch{const o=document.createElement("textarea");o.value=e.text,o.style.position="fixed",o.style.opacity="0",document.body.appendChild(o),o.select(),document.execCommand("copy"),document.body.removeChild(o)}n.value=!0,window.clearTimeout(s),s=window.setTimeout(()=>{n.value=!1},e.duration),t("copy",e.text)};return()=>N("button",{class:Ee("btn-icon",{"btn-icon-sm":e.size==="sm"}),type:"button","aria-label":e.label,onClick:a},[Je(n.value?e.successIcon:e.icon)])}}),ly=Le({name:"GnDescriptionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},compact:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>N("dl",{...t,class:Ee("description-list",{"description-list-compact":e.compact},t.class)},e.items.map(s=>{var a;return N("div",{class:"description-list-row"},[N("dt",{class:"description-list-term"},s.term||s.label),N("dd",{class:Ee("description-list-value",s.muted&&"description-list-value-muted")},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.value)])}))}}),lo=Le({name:"GnDefinitionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>N("dl",{...t,class:Ee("list list-definition",t.class)},e.items.map(s=>{var a;return N("div",{class:"list-row"},[N("dt",{class:"list-term"},s.term||s.label),N("dd",{class:"list-desc"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.description||s.value)])}))}}),Pp=Le({name:"GnDropdown",props:{label:{type:String,default:"Actions"},icon:{type:String,default:"ph-dots-three-outline"},variant:{type:String,default:"secondary"},items:{type:Array,default:()=>[]}},emits:["select"],setup(e,{emit:t,slots:n}){const s=F(!1),a=F(null),i=()=>{s.value=!1,document.removeEventListener("click",o),document.removeEventListener("keydown",r)},o=c=>{a.value&&!a.value.contains(c.target)&&i()},r=c=>{c.key==="Escape"&&(c.preventDefault(),i())},u=()=>{s.value=!s.value,s.value?(setTimeout(()=>document.addEventListener("click",o),0),document.addEventListener("keydown",r)):i()},l=c=>{var f;c.disabled||((f=c.onSelect)==null||f.call(c,c),t("select",c),i())};return bn(i),()=>{var c,f;return N("div",{ref:a,class:Ee("dropdown",{"is-open":s.value})},[((c=n.trigger)==null?void 0:c.call(n,{open:s.value,toggle:u}))||N(ot,{variant:e.variant,icon:e.icon,"aria-expanded":s.value?"true":"false",onClick:u},()=>e.label),N("div",{class:"dropdown-menu",role:"menu"},((f=n.default)==null?void 0:f.call(n,{close:i}))||e.items.map(p=>N("button",{class:Ee("dropdown-item",p.danger&&"dropdown-item-danger"),type:"button",role:"menuitem",disabled:p.disabled,onClick:()=>l(p)},[Je(p.icon),p.label])))])}}}),cy=0,uy=Le({name:"GnDrawer",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},position:{type:String,default:"right"}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const s=`gn-drawer-title-${++cy}`,a=F(null),{visible:i,closing:o,show:r,hide:u,cancel:l}=Dp();let c=null;const f=()=>{t("update:open",!1),t("close")},p=b=>{b.key==="Escape"?(b.preventDefault(),f()):Mp(b,a.value)};return Ge(()=>e.open,b=>{var _;b?(r(),c=document.activeElement,document.addEventListener("keydown",p),xt(()=>{var k;return(k=a.value)==null?void 0:k.focus()})):(u(),document.removeEventListener("keydown",p),(_=c==null?void 0:c.focus)==null||_.call(c),c=null)},{flush:"post"}),bn(()=>{document.removeEventListener("keydown",p),l()}),()=>{var b,_;return i.value?N(Ao,{to:"body"},[N("div",{class:Ee("drawer",o.value?"a-hide":"a-show",{"drawer-left":e.position==="left"}),"aria-hidden":"false"},[N("div",{class:"drawer-backdrop",onClick:f}),N("aside",{ref:a,class:"drawer-panel",role:"dialog","aria-modal":"true","aria-labelledby":s,tabindex:"-1"},[N("header",{class:"drawer-header"},[N("h4",{class:"drawer-title",id:s},((b=n.title)==null?void 0:b.call(n))||e.title),N("button",{class:"btn-icon drawer-close",type:"button","aria-label":"Close",onClick:f},[Je("ph-x")])]),N("div",{class:"drawer-body"},(_=n.default)==null?void 0:_.call(n)),n.footer&&N("footer",{class:"drawer-footer"},n.footer({close:f}))])])]):null}}}),dy=Le({name:"GnEmptyState",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-package"},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return N("div",{...t,class:Ee("empty-state",e.variant&&`empty-state-${e.variant}`,t.class)},[N("div",{class:"empty-state-icon"},[Je(e.icon)]),N("h3",{class:"empty-state-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.text||n.default)&&N("p",{class:"empty-state-text"},((a=n.default)==null?void 0:a.call(n))||e.text),n.actions&&N("div",{class:"empty-state-actions"},n.actions())])}}});function Su(e){const t=e.name.split(".").pop();return t?t.slice(0,6).toUpperCase():"FILE"}function fy(e){if(!e.size)return"0 B";const t=["B","KB","MB","GB"],n=Math.min(Math.floor(Math.log(e.size)/Math.log(1024)),t.length-1),s=e.size/Math.pow(1024,n);return`${s.toFixed(s>=10||n===0?0:1)} ${t[n]}`}var py=Le({name:"GnFileUpload",props:{modelValue:{type:Array,default:()=>[]},title:{type:String,default:"Upload files"},description:{type:String,default:"Attach documents, archives or images."},primary:{type:String,default:"Choose files"},secondary:{type:String,default:"Images get thumbnails, other files show their type"},badge:{type:String,default:""},multiple:{type:Boolean,default:!0},accept:{type:String,default:""}},emits:["update:modelValue","change"],setup(e,{emit:t,slots:n}){const s=F(new Map),a=l=>{const c=s.value.get(l);c&&(URL.revokeObjectURL(c),s.value.delete(l))},i=()=>{s.value.forEach(l=>URL.revokeObjectURL(l)),s.value.clear()},o=l=>{const c=Array.from(l||[]);t("update:modelValue",c),t("change",c)},r=l=>{a(e.modelValue[l]);const c=e.modelValue.filter((f,p)=>p!==l);t("update:modelValue",c),t("change",c)},u=l=>{var c;return(c=l.type)!=null&&c.startsWith("image/")?(s.value.has(l)||s.value.set(l,URL.createObjectURL(l)),s.value.get(l)):""};return Ge(()=>e.modelValue,l=>{const c=new Set(l);[...s.value.keys()].forEach(f=>{c.has(f)||a(f)})}),bn(i),()=>{var l,c;return N("div",{class:"file-upload-panel"},[N("div",{class:"file-upload-form"},[N("div",{class:"file-upload-header"},[N("div",{class:"file-upload-heading"},[N("h3",{class:"file-upload-title"},((l=n.title)==null?void 0:l.call(n))||e.title),N("p",{class:"file-upload-description"},((c=n.description)==null?void 0:c.call(n))||e.description)]),e.badge&&N(vi,{variant:"info"},()=>e.badge)]),N("label",{class:"file-upload-dropzone"},[N("span",{class:"file-upload-icon","aria-hidden":"true"},[Je("ph-cloud-arrow-up")]),N("span",{class:"file-upload-body"},[N("span",{class:"file-upload-primary"},e.primary),N("span",{class:"file-upload-secondary"},e.secondary)]),N("input",{type:"file",multiple:e.multiple,accept:e.accept||void 0,onChange:f=>o(f.target.files)})]),N("div",{class:"file-upload-preview",hidden:!e.modelValue.length},e.modelValue.map((f,p)=>N("figure",{class:"file-upload-preview-item"},[N("button",{class:"file-upload-preview-remove",type:"button","aria-label":`Remove ${f.name}`,onClick:()=>r(p)},[Je("ph-x")]),N("div",{class:"file-upload-preview-visual"},u(f)?N("img",{src:u(f),alt:""}):N("span",{class:"file-upload-preview-type"},Su(f))),N("figcaption",{},[N("span",{class:"file-upload-preview-name"},f.name),N("span",{class:"file-upload-preview-meta"},`${Su(f)} / ${fy(f)}`)])]))),n.actions&&N("div",{class:"file-upload-actions"},n.actions()),!n.actions&&e.modelValue.length>0&&N("div",{class:"file-upload-actions"},[N(ot,{variant:"secondary",size:"sm",onClick:()=>{i(),o([])}},()=>"Reset")])])])}}}),Kn=Le({name:"GnIconButton",inheritAttrs:!1,props:{icon:{type:String,required:!0},label:{type:String,required:!0},type:{type:String,default:"button"},size:{type:String,default:null},withoutHover:{type:Boolean,default:!1}},setup(e,{attrs:t}){return()=>N("button",{...t,type:e.type,"aria-label":e.label,class:Ee("btn-icon",{"btn-icon-sm":e.size==="sm","without-hover":e.withoutHover},t.class)},[Je(e.icon)])}}),gy=Le({name:"GnIdentity",props:{title:{type:String,required:!0},meta:{type:String,default:""},avatar:{type:Object,default:()=>({})}},setup(e,{slots:t}){return()=>{var n,s,a;return N("span",{class:"identity"},[((n=t.avatar)==null?void 0:n.call(t))||N(Do,e.avatar),N("span",{class:"identity-content"},[N("span",{class:"identity-title"},((s=t.title)==null?void 0:s.call(t))||e.title),(e.meta||t.meta)&&N("span",{class:"identity-meta"},((a=t.meta)==null?void 0:a.call(t))||e.meta)])])}}}),Qs=Le({name:"GnInput",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},bare:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>{const s=N("input",{...t,type:e.type,value:e.modelValue,class:Ee(e.bare?"":"input",t.class),onInput:a=>n("update:modelValue",Ra(a))});return e.bare?s:N("div",{class:"form-group"},[N("label",{class:Ee("label",e.state)},[e.label,Je(e.icon),s]),e.help&&N("div",{class:Ee("input-info",e.state==="error"&&"error")},e.help)])}}}),my=Le({name:"GnInputGroup",inheritAttrs:!1,props:{compact:{type:Boolean,default:!1},addon:{type:String,default:""},icon:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return N("div",{...t,class:Ee("input-group",{"input-group-compact":e.compact},t.class)},[(e.addon||e.icon||n.addon)&&N("span",{class:"input-group-addon"},((s=n.addon)==null?void 0:s.call(n))||Je(e.icon)||e.addon),(a=n.default)==null?void 0:a.call(n),n.action&&N("span",{class:"input-group-action"},n.action())])}}}),hy=Le({name:"GnList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},ordered:{type:Boolean,default:!1},icons:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){const s=e.ordered?"ol":"ul";return()=>N(s,{...t,class:Ee("list",{"list-ordered":e.ordered,"with-icons":e.icons},t.class)},e.items.map(a=>{var i;return N("li",{class:"list-item"},[Je(a.icon),((i=n.item)==null?void 0:i.call(n,{item:a}))||a.label||a])}))}}),Js=Le({name:"GnLoader",inheritAttrs:!1,props:{circle:{type:Boolean,default:!1},label:{type:String,default:"Loading"}},setup(e,{attrs:t}){return()=>e.circle?N("div",{...t,class:Ee("circle-loader",t.class)},[Je("ph-bold ph-spinner normalize"),e.label]):N("div",{...t,class:Ee("loader",t.class),role:"status","aria-label":e.label})}}),vy=Le({name:"GnLoginCard",props:{title:{type:String,default:"Sign in"},logoSrc:{type:String,default:""},logoIcon:{type:String,default:""},usernameLabel:{type:String,default:"Username"},usernameIcon:{type:String,default:"ph-user"},passwordLabel:{type:String,default:"Password"},passwordIcon:{type:String,default:"ph-lock-key"},rememberMe:{type:Boolean,default:!1},rememberLabel:{type:String,default:"Remember me"},submitText:{type:String,default:"Sign in"},submitVariant:{type:String,default:"secondary"},loading:{type:Boolean,default:!1},error:{type:String,default:""},forgotHref:{type:String,default:"#"},forgotText:{type:String,default:"Forgot password?"},signupHref:{type:String,default:"#"},signupText:{type:String,default:"Create account"}},emits:["submit"],setup(e,{emit:t}){const n=F(""),s=F(""),a=F(!1),i=o=>{o.preventDefault(),t("submit",{username:n.value,password:s.value,remember:a.value})};return()=>N("article",{class:"card login-card"},[(e.title||e.logoSrc||e.logoIcon)&&N("header",{class:"card-title login-card-header"},[e.logoSrc&&N("img",{src:e.logoSrc,alt:"",class:"login-card-logo"}),e.logoIcon&&!e.logoSrc&&Je(e.logoIcon,"login-card-logo-icon"),e.title&&N("span",{class:"login-card-title"},e.title)]),N("div",{class:"card-content"},[e.error&&N(Vn,{variant:"danger",class:"login-card-error"},()=>e.error),N("form",{class:"login-card-form",onSubmit:i},[N(Qs,{modelValue:n.value,"onUpdate:modelValue":o=>{n.value=o},label:e.usernameLabel,icon:e.usernameIcon,type:"text",autocomplete:"username"}),N(Qs,{modelValue:s.value,"onUpdate:modelValue":o=>{s.value=o},label:e.passwordLabel,icon:e.passwordIcon,type:"password",autocomplete:"current-password"}),e.rememberMe&&N(Lp,{modelValue:a.value,"onUpdate:modelValue":o=>{a.value=o}},()=>e.rememberLabel),N(ot,{variant:e.submitVariant,loading:e.loading,disabled:e.loading,type:"submit",icon:"ph-sign-in",class:"login-card-submit"},()=>e.submitText),(e.forgotHref||e.signupHref)&&N("div",{class:"login-card-links"},[e.forgotHref&&N("a",{href:e.forgotHref,class:"login-card-link"},e.forgotText),e.signupHref&&N("a",{href:e.signupHref,class:"login-card-link"},e.signupText)])])])])}}),by=Le({name:"GnMetricCard",inheritAttrs:!1,props:{label:{type:String,required:!0},value:{type:[String,Number],required:!0},icon:{type:String,default:"ph-chart-line-up"},delta:{type:String,default:""},negative:{type:Boolean,default:!1},meta:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i;return N("article",{...t,class:Ee("card metric-card",t.class)},[N("div",{class:"card-content"},[N("div",{class:"metric-card-header"},[N("p",{class:"metric-card-label"},((s=n.label)==null?void 0:s.call(n))||e.label),N("span",{class:"metric-card-icon"},[Je(e.icon)])]),N("p",{class:"metric-card-value"},((a=n.value)==null?void 0:a.call(n))||e.value),(e.delta||e.meta||n.meta)&&N("div",{class:"metric-card-meta"},[e.delta&&N("span",{class:Ee("metric-card-delta",{"metric-card-delta-negative":e.negative})},e.delta),((i=n.meta)==null?void 0:i.call(n))||e.meta])])])}}});function Bp(){var e;const t=xa();return((e=t==null?void 0:t.proxy)==null?void 0:e.$router)||null}function Fp(){var e;const t=xa();return((e=t==null?void 0:t.proxy)==null?void 0:e.$route)||null}function Up(e,t,n="prefix"){if(!e)return!1;const s=e.value||e;return typeof t=="string"?n==="exact"?s.path===t:s.path===t||s.path.startsWith(t+"/"):t.path?n==="exact"?s.path===t.path:s.path===t.path||s.path.startsWith(t.path+"/"):t.name?s.name===t.name:!1}var Gp=Le({name:"GnNavList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{attrs:t,emit:n,slots:s}){const a=Bp(),i=Fp(),o=!!(a&&i),r=l=>{if(l){if(typeof l=="string")return l;if(l.path)return l.path}},u=W(()=>e.items.map(l=>{const c=!!l.to,f=c?o?a.resolve(l.to).href:r(l.to):l.href,p=c&&o?Up(i,l.to,e.activeMatch):!!l.active;return{...l,resolvedHref:f,isActive:p,hasTo:c}}));return()=>N("ul",{...t,class:Ee("list list-nav",t.class)},u.value.map(l=>{var c,f;return N("li",{class:Ee("list-item",{"list-item-active":l.isActive})},[N(l.resolvedHref?"a":"button",{class:"list-action",href:l.resolvedHref,type:l.resolvedHref?void 0:"button",onClick:p=>{var b;l.hasTo&&o&&(p.preventDefault(),a.push(l.to)),(b=l.onSelect)==null||b.call(l,l,p),n("select",l)}},[N("span",{class:"list-label"},[Je(l.icon),((c=s.label)==null?void 0:c.call(s,{item:l}))||l.label]),(l.meta||s.meta)&&N("span",{class:"list-meta"},((f=s.meta)==null?void 0:f.call(s,{item:l}))||l.meta)])])}))}}),_y=0,yy=Le({name:"GnNavigationShell",props:{brand:{type:String,default:"GNexus UI Kit"},logoSrc:{type:String,default:"/assets/imgs/gnexus-mark.svg"},current:{type:String,default:""},title:{type:String,default:"Sections"},subtitle:{type:String,default:"Navigation"},footerLeft:{type:String,default:""},footerRight:{type:String,default:""},items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{emit:t,slots:n}){const s=F(!1),a=`gn-nav-drawer-${++_y}`,i=F(null);let o=null;const r=()=>{s.value=!1},u=()=>{s.value=!s.value},l=c=>{c.key==="Escape"&&(c.preventDefault(),r())};return Ge(s,c=>{var f;c?(o=document.activeElement,document.body.classList.add("nav-drawer-open"),document.addEventListener("keydown",l),xt(()=>{var p;return(p=i.value)==null?void 0:p.focus()})):(document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",l),(f=o==null?void 0:o.focus)==null||f.call(o),o=null)}),bn(()=>{document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",l)}),()=>{var c,f,p,b,_,k,L;return[N("header",{class:"nav-topbar"},[N("button",{class:"nav-topbar-toggle",type:"button","aria-controls":a,"aria-expanded":s.value?"true":"false",onClick:u},[Je("ph-sidebar-simple"),N("span",{},"Menu")]),N("div",{class:"nav-topbar-brand"},[e.logoSrc&&N("img",{src:e.logoSrc,alt:"","aria-hidden":"true"}),N("span",{},((c=n.brand)==null?void 0:c.call(n))||e.brand)]),N("div",{class:"nav-topbar-current"},((f=n.current)==null?void 0:f.call(n))||e.current)]),N("div",{class:"nav-drawer-backdrop",onClick:r}),N("aside",{ref:i,class:["nav-drawer",{"is-open":s.value}],id:a,"aria-label":"Navigation","aria-hidden":s.value?"false":"true",tabindex:"-1"},[N("header",{class:"nav-drawer-header"},[N("div",{},[N("div",{class:"nav-drawer-title"},((p=n.title)==null?void 0:p.call(n))||e.title),N("div",{class:"nav-drawer-subtitle"},((b=n.subtitle)==null?void 0:b.call(n))||e.subtitle)]),N("button",{class:"nav-drawer-close",type:"button","aria-label":"Close navigation",onClick:r},[Je("ph-x")])]),N("nav",{class:"nav-drawer-body"},[((_=n.default)==null?void 0:_.call(n,{close:r}))||N(Gp,{items:e.items,activeMatch:e.activeMatch,onSelect:R=>{t("select",R),r()}})]),(n.footer||e.footerLeft||e.footerRight)&&N("footer",{class:"nav-drawer-footer"},((k=n.footer)==null?void 0:k.call(n))||[N("span",{},e.footerLeft),N("span",{},e.footerRight)])]),(L=n.content)==null?void 0:L.call(n)]}}}),ky=Le({name:"GnPageHeader",inheritAttrs:!1,props:{title:{type:String,required:!0},subtitle:{type:String,default:""},kicker:{type:String,default:""},compact:{type:Boolean,default:!1},accent:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i;return N("header",{...t,class:Ee("page-header",{"page-header-compact":e.compact,"page-header-accent":e.accent},t.class)},[N("div",{class:"page-header-content"},[(e.kicker||n.kicker)&&N("div",{class:"page-header-kicker"},((s=n.kicker)==null?void 0:s.call(n))||e.kicker),N("h1",{class:"page-header-title"},((a=n.title)==null?void 0:a.call(n))||e.title),(e.subtitle||n.subtitle)&&N("p",{class:"page-header-subtitle"},((i=n.subtitle)==null?void 0:i.call(n))||e.subtitle),n.meta&&N("div",{class:"page-header-meta"},n.meta())]),n.actions&&N("div",{class:"page-header-actions"},n.actions())])}}}),wy=Le({name:"GnHorizontalCard",inheritAttrs:!1,props:{image:{type:String,default:""},title:{type:String,default:""},titleHref:{type:String,default:""},icon:{type:String,default:""}},setup(e,{attrs:t,slots:n}){const s=()=>{var a;const i=[Je(e.icon),((a=n.title)==null?void 0:a.call(n))||e.title];return e.titleHref?N("a",{href:e.titleHref,class:"card-title-link"},i):i};return()=>{var a;return N("article",{...t,class:Ee("card card-horizontal",t.class)},[e.image&&N("div",{class:"card-media"},[N("img",{src:e.image,alt:""})]),N("div",{class:"card-body"},[(e.title||e.icon||n.title)&&N("h3",{class:"card-title"},s()),N("div",{class:"card-content"},(a=n.default)==null?void 0:a.call(n)),n.footer&&N("footer",{class:"card-footer"},n.footer())])])}}}),Sy=Le({name:"GnPagination",props:{page:{type:Number,required:!0},totalPages:{type:Number,required:!0},ariaLabel:{type:String,default:"Pagination"}},emits:["update:page"],setup(e,{emit:t}){const n=s=>{s>=1&&s<=e.totalPages&&s!==e.page&&t("update:page",s)};return()=>{const s=Array.from({length:e.totalPages},(a,i)=>i+1);return N("nav",{class:"pagination","aria-label":e.ariaLabel},[N("button",{class:"pagination-item",type:"button",disabled:e.page<=1,onClick:()=>n(e.page-1)},[Je("ph-arrow-left")]),s.map(a=>N("button",{class:Ee("pagination-item",{"pagination-item-active":a===e.page}),type:"button","aria-current":a===e.page?"page":void 0,onClick:()=>n(a)},a)),N("button",{class:"pagination-item",type:"button",disabled:e.page>=e.totalPages,onClick:()=>n(e.page+1)},[Je("ph-arrow-right")])])}}}),Ey=Le({name:"GnPopover",props:{label:{type:String,default:"Details"},title:{type:String,default:""},text:{type:String,default:""},icon:{type:String,default:"ph-info"},variant:{type:String,default:"accent"}},setup(e,{slots:t}){const n=F(!1),s=F(null),a=()=>{n.value=!1,document.removeEventListener("click",i),document.removeEventListener("keydown",o)},i=u=>{s.value&&!s.value.contains(u.target)&&a()},o=u=>{u.key==="Escape"&&(u.preventDefault(),a())},r=()=>{n.value=!n.value,n.value?(setTimeout(()=>document.addEventListener("click",i),0),document.addEventListener("keydown",o)):a()};return bn(a),()=>{var u,l,c;return N("div",{ref:s,class:Ee("popover",{"is-open":n.value})},[((u=t.trigger)==null?void 0:u.call(t,{open:n.value,toggle:r}))||N(ot,{variant:e.variant,icon:e.icon,"aria-expanded":n.value?"true":"false",onClick:r},()=>e.label),N("div",{class:"popover-panel"},[(e.title||t.title)&&N("h3",{class:"popover-title"},((l=t.title)==null?void 0:l.call(t))||e.title),(e.text||t.default)&&N("p",{class:"popover-text"},((c=t.default)==null?void 0:c.call(t))||e.text)])])}}}),Hp=Le({name:"GnProgress",inheritAttrs:!1,props:{value:{type:Number,required:!0},max:{type:Number,default:100},label:{type:String,default:""},variant:{type:String,default:"secondary"},striped:{type:Boolean,default:!1},animated:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=Math.max(0,Math.min(100,Math.round(e.value/e.max*100))),i=cs(e.variant,"secondary");return N("div",{...t,class:Ee("progress",`progress-${i}`,{"progress-striped":e.striped,"progress-animated":e.animated},t.class),style:{"--progress-value":`${a}%`}},[(e.label||n.label)&&N("div",{class:"progress-header"},[N("span",{},((s=n.label)==null?void 0:s.call(n))||e.label),N("span",{class:"progress-value"},`${a}%`)]),N("div",{class:"progress-track"},[N("span",{class:"progress-bar",role:"progressbar","aria-valuenow":e.value,"aria-valuemin":0,"aria-valuemax":e.max})])])}}}),Ty=Le({name:"GnProgressStages",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t}){return()=>N("div",{...t,class:Ee("progress-stages",t.class)},e.items.map(n=>N("div",{class:Ee("progress-stage",{"progress-stage-complete":n.status==="complete","progress-stage-current":n.status==="current"})},n.label||n)))}}),zp=Le({name:"GnRadio",inheritAttrs:!1,props:{modelValue:{type:[String,Number,Boolean],default:""},value:{type:[String,Number,Boolean],required:!0},label:{type:String,default:""},name:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return N("label",{class:Ee("radio",t.class)},[N("input",{...t,type:"radio",name:e.name,value:e.value,checked:e.modelValue===e.value,disabled:e.disabled,onChange:()=>n("update:modelValue",e.value)}),N("span",{class:"radio-control","aria-hidden":"true"}),N("span",{class:"radio-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),El=Le({name:"GnRadioGroup",props:{modelValue:{type:[String,Number,Boolean],default:""},name:{type:String,default:"gn-radio-group"},label:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){return()=>{var s;return N("div",{class:"form-group radio-group",role:"radiogroup","aria-label":e.label||void 0},[e.label&&N("div",{class:"label"},e.label),((s=n.default)==null?void 0:s.call(n))||e.options.map(a=>N(zp,{modelValue:e.modelValue,"onUpdate:modelValue":i=>t("update:modelValue",i),name:e.name,value:a.value,label:a.label,disabled:a.disabled}))])}}}),Tl=Le({name:"GnRange",inheritAttrs:!1,props:{modelValue:{type:[Number,String],default:0},label:{type:String,default:""},min:{type:[Number,String],default:0},max:{type:[Number,String],default:100},step:{type:[Number,String],default:1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>N("div",{class:"range"},[N("label",{class:"label"},[e.label,N("input",{...t,type:"range",value:e.modelValue,min:e.min,max:e.max,step:e.step,onInput:s=>n("update:modelValue",Ra(s))})])])}}),Ay=0;function xy(){return`repeater-item-${++Ay}`}var Ny=Le({name:"GnRepeater",inheritAttrs:!1,props:{modelValue:{type:Array,default:()=>[]},label:{type:String,default:"Items"},addLabel:{type:String,default:"Add"},addIcon:{type:String,default:"ph-plus"},removeLabel:{type:String,default:"Remove"},removeIcon:{type:String,default:"ph-trash"},minItems:{type:Number,default:1},maxItems:{type:Number,default:0},itemFactory:{type:Function,default:()=>()=>({id:xy()})},disabled:{type:Boolean,default:!1}},emits:["update:modelValue","add","remove"],setup(e,{attrs:t,emit:n,slots:s}){const a=W(()=>!(e.disabled||e.maxItems>0&&e.modelValue.length>=e.maxItems));function i(u){return!(e.disabled||e.modelValue.length<=e.minItems)}function o(){if(!a.value)return;const u=e.itemFactory(),l=[...e.modelValue,u];n("update:modelValue",l),n("add",u)}function r(u){if(!i())return;const l=e.modelValue[u],c=e.modelValue.filter((f,p)=>p!==u);n("update:modelValue",c),n("remove",l)}return()=>{var u;const c=((u=s.header)==null?void 0:u.call(s,{add:o,canAdd:a.value}))||N("div",{class:"repeater-header"},[N("span",{class:"repeater-title"},e.label),N("button",{type:"button",class:Ee("btn","btn-secondary","btn-small","with-icon"),disabled:!a.value,onClick:o},[Je(e.addIcon),e.addLabel])]),f=e.modelValue.map((p,b)=>{var _,k,L,R;const x=(k=(_=p==null?void 0:p.id)!=null?_:p==null?void 0:p.key)!=null?k:b,S=i(),I={item:p,index:b,remove:()=>r(b),canRemove:S},O=(L=s.item)==null?void 0:L.call(s,I),P=(R=s.actions)==null?void 0:R.call(s,I),M=!s.actions&&N("button",{type:"button",class:Ee("btn-icon","btn-icon-sm"),"aria-label":e.removeLabel,disabled:!S,onClick:$=>{$.stopPropagation(),r(b)}},[Je(e.removeIcon)]);return N("div",{class:"repeater-item",key:x},[N("div",{class:"repeater-item-body"},O),(P||M)&&N("div",{class:"repeater-item-actions"},P||[M])])});return N("div",{...t,class:Ee("repeater",{"repeater-disabled":e.disabled},t.class)},[c,N("div",{class:"repeater-list"},f)])}}}),ac=Le({name:"GnTabs",props:{modelValue:{type:String,default:""},items:{type:Array,required:!0},compact:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},ariaLabel:{type:String,default:"Tabs"}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const s=W(()=>{var u,l;return e.modelValue||((u=e.items.find(c=>!c.disabled))==null?void 0:u.id)||((l=e.items[0])==null?void 0:l.id)}),a=u=>{u.disabled||t("update:modelValue",u.id)},i=()=>e.items.filter(u=>!u.disabled),o=(u,l)=>{const c=i(),f=c.findIndex(b=>b.id===u.id),p=c[(f+l+c.length)%c.length];a(p)},r=(u,l)=>{if(u.key==="ArrowRight"||u.key==="ArrowDown")u.preventDefault(),o(l,1);else if(u.key==="ArrowLeft"||u.key==="ArrowUp")u.preventDefault(),o(l,-1);else if(u.key==="Home")u.preventDefault(),a(i()[0]);else if(u.key==="End"){u.preventDefault();const c=i();a(c[c.length-1])}};return()=>N("div",{class:Ee("tabs",{"tabs-compact":e.compact,"tabs-vertical":e.vertical})},[N("div",{class:"tabs-list",role:"tablist","aria-label":e.ariaLabel},e.items.map(u=>{const l=u.id===s.value,c=`${u.id}-panel`;return N("button",{class:Ee("tab",{"tab-active":l}),type:"button",role:"tab","aria-selected":l?"true":"false","aria-controls":c,"aria-disabled":u.disabled?"true":void 0,tabindex:l?"0":"-1",onClick:()=>a(u),onKeydown:f=>r(f,u)},[Je(u.icon),u.label])})),N("div",{class:"tabs-panels"},e.items.map(u=>{var l,c;const f=u.id===s.value;return N("div",{id:`${u.id}-panel`,class:Ee("tab-panel",{"tab-panel-active":f}),role:"tabpanel",hidden:!f},((l=n[u.id])==null?void 0:l.call(n,{item:u,active:f}))||f&&((c=n.default)==null?void 0:c.call(n,{item:u,active:f})))}))])}}),Cy=Le({name:"GnRouterTabs",props:{items:{type:Array,required:!0},compact:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},ariaLabel:{type:String,default:"Tabs"},activeMatch:{type:String,default:"prefix"}},setup(e,{slots:t}){const n=Bp(),s=Fp(),a=!!(n&&s);!a&&typeof process<"u"&&Op&&console.warn("[gnexus-ui-kit] GnRouterTabs requires vue-router. Falling back to standard tabs.");const i=W(()=>e.items.map(u=>({id:u.id,label:u.label,icon:u.icon,disabled:u.disabled,to:u.to}))),o=W(()=>{var u,l;if(!a)return((u=i.value.find(f=>!f.disabled))==null?void 0:u.id)||"";const c=i.value.find(f=>f.disabled||!f.to?!1:Up(s,f.to,e.activeMatch));return(c==null?void 0:c.id)||((l=i.value.find(f=>!f.disabled))==null?void 0:l.id)||""}),r=u=>{if(!a)return;const l=i.value.find(c=>c.id===u);l&&l.to&&n.push(l.to)};return()=>N(ac,{modelValue:o.value,items:i.value,compact:e.compact,vertical:e.vertical,ariaLabel:e.ariaLabel,"onUpdate:modelValue":r},t)}}),Kp=Le({name:"GnSearchField",inheritAttrs:!1,props:{modelValue:{type:String,default:""},placeholder:{type:String,default:"Search"},compact:{type:Boolean,default:!0},clearable:{type:Boolean,default:!0}},emits:["update:modelValue","clear"],setup(e,{attrs:t,emit:n}){const s=()=>{n("update:modelValue",""),n("clear")};return()=>N("div",{class:Ee("input-group search-field",{"input-group-compact":e.compact})},[N("span",{class:"input-group-addon"},[Je("ph-magnifying-glass")]),N("input",{...t,type:"search",value:e.modelValue,placeholder:e.placeholder,class:Ee("input-group-input",t.class),onInput:a=>n("update:modelValue",Ra(a))}),e.clearable&&N("button",{class:"input-group-action",type:"button","aria-label":"Clear search",onClick:s},[Je("ph-x")])])}}),co=Le({name:"GnSelect",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){const a=()=>e.options.map(i=>{const o=typeof i=="object"?i.value:i,r=typeof i=="object"?i.label:i;return N("option",{value:o},r)});return()=>{var i;return N("div",{class:"form-group"},[N("label",{class:Ee("label",e.state)},[e.label,Je(e.icon),N("div",{class:"select-wrap"},[N("select",{...t,value:e.modelValue,class:Ee("input select",t.class),onChange:o=>n("update:modelValue",Ra(o))},((i=s.default)==null?void 0:i.call(s))||a())])]),e.help&&N("div",{class:Ee("input-info",e.state==="error"&&"error")},e.help)])}}}),Ry=Le({name:"GnSkeleton",inheritAttrs:!1,props:{type:{type:String,default:"line"},stack:{type:Boolean,default:!1},count:{type:Number,default:1}},setup(e,{attrs:t}){const n=s=>N("span",{key:s,...t,class:Ee("skeleton",`skeleton-${e.type}`,t.class)});return()=>e.stack?N("div",{class:"skeleton-stack"},Array.from({length:e.count},(s,a)=>n(a))):n(0)}}),Iy=Le({name:"GnSteps",inheritAttrs:!1,props:{items:{type:Array,required:!0},vertical:{type:Boolean,default:!1}},setup(e,{attrs:t}){return()=>N("ol",{...t,class:Ee("steps",{"steps-vertical":e.vertical},t.class)},e.items.map((n,s)=>N("li",{class:Ee("step",{"step-complete":n.status==="complete","step-current":n.status==="current","step-disabled":n.disabled||n.status==="disabled"})},[N("span",{class:"step-marker"},n.marker||String(s+1)),N("h3",{class:"step-title"},n.title),n.text&&N("p",{class:"step-text"},n.text)])))}}),Oy=Le({name:"GnStatusCard",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-stack"},variant:{type:String,default:"primary"}},setup(e,{attrs:t,slots:n}){const s=cs(e.variant);return()=>{var a,i,o;return N("article",{...t,class:Ee("card status-card",`card-${s}`,t.class)},[N("span",{class:"card-title"},((a=n.title)==null?void 0:a.call(n))||e.title),N("div",{class:"card-content"},[N("div",{class:"status-icon-container"},[N("div",{class:"status-icon"},((i=n.icon)==null?void 0:i.call(n))||[Je(e.icon)])]),(e.text||n.default)&&N("p",{class:"status-name"},((o=n.default)==null?void 0:o.call(n))||e.text)])])}}}),qp=Le({name:"GnSwitch",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return N("label",{class:Ee("switch",t.class)},[N("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:i=>n("update:modelValue",i.target.checked)}),N("span",{class:"switch-control","aria-hidden":"true"}),N("span",{class:"switch-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),My=Le({name:"GnTagInput",inheritAttrs:!1,props:{modelValue:{type:Array,default:()=>[]},label:{type:String,default:""},placeholder:{type:String,default:"Add item…"},help:{type:String,default:""},disabled:{type:Boolean,default:!1},separator:{type:String,default:","},unique:{type:Boolean,default:!0},maxItems:{type:Number,default:0}},emits:["update:modelValue","add","remove"],setup(e,{emit:t,attrs:n,slots:s}){const a=F(null),i=F(!1),o=F(""),r=W(()=>!(e.disabled||e.maxItems>0&&e.modelValue.length>=e.maxItems));function u(_){return _.trim().replace(/\s+/g," ")}function l(_){const k=u(_);if(!k||e.unique&&e.modelValue.includes(k)||e.maxItems>0&&e.modelValue.length>=e.maxItems)return;const L=[...e.modelValue,k];t("update:modelValue",L),t("add",k)}function c(_){const k=e.modelValue[_],L=e.modelValue.filter((R,x)=>x!==_);t("update:modelValue",L),t("remove",k)}function f(_){if(_.key==="Enter"){_.preventDefault(),o.value&&((e.separator?o.value.split(e.separator).map(L=>L.trim()).filter(Boolean):[o.value]).forEach(l),o.value="");return}if(_.key==="Backspace"&&!o.value&&e.modelValue.length>0){c(e.modelValue.length-1);return}}function p(_){const k=_.clipboardData.getData("text");if(!k||!e.separator)return;_.preventDefault();const L=k.split(e.separator).map(x=>x.trim()).filter(Boolean),R=[];for(const x of L){const S=u(x);if(S&&!(e.unique&&e.modelValue.includes(S))){if(e.maxItems>0&&e.modelValue.length+R.length>=e.maxItems)break;R.push(S)}}if(R.length){const x=[...e.modelValue,...R];t("update:modelValue",x),R.forEach(S=>t("add",S))}}function b(){var _;(_=a.value)==null||_.focus()}return()=>{var _;const k=e.label||s.label?N("label",{class:"label"},[((_=s.label)==null?void 0:_.call(s))||e.label,e.disabled&&N("span",{class:"label-disabled-hint"},"Disabled")]):null,L=e.modelValue.map((I,O)=>N("span",{class:Ee("chip","chip-secondary"),key:`${I}-${O}`},[I,!e.disabled&&N("button",{class:"chip-remove",type:"button","aria-label":`Remove ${I}`,onClick:P=>{P.stopPropagation(),c(O)}},[N("i",{class:"ph ph-x"})])])),R=N("input",{ref:a,class:"tag-input-field",type:"text",placeholder:r.value?e.placeholder:"",value:o.value,disabled:e.disabled,onInput:I=>{o.value=I.target.value},onKeydown:f,onPaste:p,onFocus:()=>i.value=!0,onBlur:()=>i.value=!1}),x=N("div",{class:Ee("tag-input-wrap"),onClick:b},[...L,R]),S=e.help?N("div",{class:"input-info"},[N("i",{class:"ph ph-info"})," "+e.help]):null;return N("div",{...n,class:Ee("tag-input",{"tag-input-focused":i.value,"tag-input-disabled":e.disabled},n.class)},[k,x,S])}}}),Vp=Le({name:"GnTable",props:{columns:{type:Array,required:!0},rows:{type:Array,default:()=>[]},caption:{type:String,default:""},emptyText:{type:String,default:"Empty"}},setup(e,{attrs:t,slots:n}){return()=>{var s;return N("div",{class:"table-wrapper"},[N("table",{class:Ee("table data-list",{"table-empty":!e.rows.length},t.class)},[e.caption&&N("caption",{class:"table-caption"},e.caption),N("thead",{class:"table-head"},[N("tr",{class:"table-row"},e.columns.map(a=>N("th",{scope:"col"},a.label)))]),N("tbody",{class:"table-body"},e.rows.length?e.rows.map(a=>N("tr",{class:"table-row"},e.columns.map(i=>{var o;const r=`cell-${i.key}`;return N("td",{},((o=n[r])==null?void 0:o.call(n,{row:a,column:i,value:a[i.key]}))||a[i.key])}))):N("tr",{},[N("td",{class:"is-empty",colspan:e.columns.length},((s=n.empty)==null?void 0:s.call(n))||e.emptyText)]))])])}}}),ic=Le({name:"GnTextarea",inheritAttrs:!1,props:{modelValue:{type:String,default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>N("div",{class:"form-group"},[N("label",{class:Ee("label",e.state)},[e.label,Je(e.icon),N("textarea",{...t,value:e.modelValue,class:Ee("input",t.class),onInput:s=>n("update:modelValue",Ra(s))})]),e.help&&N("div",{class:Ee("input-info",e.state==="error"&&"error")},e.help)])}}),Ly=Le({name:"GnTimeline",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>N("ol",{...t,class:Ee("timeline",t.class)},e.items.map(s=>{var a,i;const o=s.variant?cs(s.variant):"";return N("li",{class:Ee("timeline-item",o&&`timeline-item-${o}`)},[N("span",{class:"timeline-marker"},[Je(s.icon||"ph-circle")]),N("div",{class:"timeline-content"},[N("article",{class:"timeline-card"},[N("header",{class:"timeline-header"},[N("h3",{class:"timeline-title"},s.title),s.time&&N("time",{class:"timeline-time"},s.time)]),N("p",{class:"timeline-text"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.text),(s.meta||n.meta)&&N("div",{class:"timeline-meta"},((i=n.meta)==null?void 0:i.call(n,{item:s}))||s.meta)])])])}))}}),$y=Le({name:"GnTooltip",inheritAttrs:!1,props:{text:{type:String,default:""}},setup(e,{attrs:t,slots:n}){const s=F(!1);return()=>{var a,i;return N("span",{...t,class:Ee("tooltip",{"is-open":s.value},t.class),tabindex:"0",onFocusin:()=>{s.value=!0},onFocusout:()=>{s.value=!1}},[(a=n.default)==null?void 0:a.call(n),N("span",{class:"tooltip-panel",role:"tooltip"},((i=n.panel)==null?void 0:i.call(n))||e.text)])}}}),Dy=Le({name:"GnToolbar",inheritAttrs:!1,props:{title:{type:String,default:""},meta:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i,o;return N("div",{...t,class:Ee("toolbar",t.class)},[N("div",{class:"toolbar-group"},[N("div",{},[(e.title||n.title)&&N("h3",{class:"toolbar-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.meta||n.meta)&&N("span",{class:"toolbar-meta"},((a=n.meta)==null?void 0:a.call(n))||e.meta)])]),(n.default||n.actions)&&N("div",{class:"toolbar-group"},((i=n.actions)==null?void 0:i.call(n))||((o=n.default)==null?void 0:o.call(n)))])}}}),Wp=Symbol("gnexus-ui-kit-toast"),Eu={info:"ph-info",success:"ph-check-circle",warning:"ph-warning",danger:"ph-warning-octagon",error:"ph-warning-octagon",primary:"ph-info",secondary:"ph-info"},Py=Le({name:"GnToastProvider",props:{lifetime:{type:Number,default:4e3}},setup(e,{slots:t,expose:n}){const s=F(null),a=F(!1),i=F(!1);let o=null,r=null,u=null;const l=F(100),c=()=>{window.clearTimeout(r),window.clearInterval(u),a.value=!0,i.value=!1,r=window.setTimeout(()=>{s.value=null,a.value=!1,l.value=100,window.clearTimeout(o),o=null},300)},f=()=>{window.clearTimeout(r),window.clearTimeout(o),window.clearInterval(u),a.value=!1,i.value=!1,l.value=100,s.value=null},p=k=>{window.clearTimeout(r),window.clearInterval(u),a.value=!1,i.value=!1,l.value=100;const L=cs(k.variant||k.type||"info","info"),R=k.lifetime!==void 0?k.lifetime:e.lifetime;if(s.value={id:Date.now(),variant:L==="error"?"danger":L,title:k.title||"",text:k.text||k.message||"",icon:k.icon||Eu[L]||Eu.info,lifetime:R},window.clearTimeout(o),R!==0){const S=R/100;l.value=100,u=window.setInterval(()=>{l.value-=100/S,l.value<=0&&window.clearInterval(u)},100),o=window.setTimeout(c,R)}xt(()=>{requestAnimationFrame(()=>{i.value=!0})})},b={show:p,close:f,info:k=>p({...k,variant:"info"}),success:k=>p({...k,variant:"success"}),warning:k=>p({...k,variant:"warning"}),danger:k=>p({...k,variant:"danger"}),error:k=>p({...k,variant:"danger"})};Sf(Wp,b),n(b);const _=()=>a.value?"a-hide":i.value?"a-show":"";return()=>{var k;return[(k=t.default)==null?void 0:k.call(t),s.value&&N("div",{class:Ee("toast",_(),`toast-${s.value.variant}`),role:"alert"},[N("div",{class:"toast-content"},[N("div",{class:"toast-header"},[Je(s.value.icon),s.value.title]),s.value.text&&N("p",{class:"toast-text"},s.value.text)]),N("button",{class:"btn-icon toast-close",type:"button","aria-label":"Close",onClick:c},[Je("ph-x")]),s.value.lifetime!==0&&N("div",{class:"toast-progress"},[N("div",{class:"toast-progress-bar",style:{transform:`scaleX(${Math.max(0,l.value/100)})`}})])])]}}}),By=Le({name:"GnUsageMeter",props:{title:{type:String,required:!0},value:{type:Number,required:!0},max:{type:Number,default:100},meta:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,s;const a=Math.max(0,Math.min(100,Math.round(e.value/e.max*100)));return N("section",{class:"usage-meter"},[N("h3",{class:"usage-meter-title"},[((n=t.title)==null?void 0:n.call(t))||e.title,N("span",{class:"usage-meter-value"},`${a}%`)]),N(Hp,{value:e.value,max:e.max}),(e.meta||t.meta)&&N("p",{class:"usage-meter-meta"},((s=t.meta)==null?void 0:s.call(t))||e.meta)])}}}),Fy=Le({name:"GnUserCard",props:{name:{type:String,required:!0},email:{type:String,default:""},role:{type:String,default:""},avatar:{type:Object,default:()=>({})},href:{type:String,default:""},compact:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]}},setup(e,{slots:t}){const n=()=>{var i;return((i=t.avatar)==null?void 0:i.call(t))||N(Do,{...e.avatar,size:e.compact?"sm":"md"})},s=()=>N("span",{class:"identity"},[n(),N("span",{class:"identity-content"},[N("span",{class:"identity-title"},e.name),e.email&&N("span",{class:"identity-meta"},e.email)])]),a=()=>t.actions?t.actions():e.actions.length?N("div",{class:"user-card-actions"},e.actions.map(i=>{if(e.compact)return N("button",{class:"btn-icon",type:"button","aria-label":i.label,onClick:i.onClick},[Je(i.icon)]);const o=!!i.icon,r=Ee("btn","btn-small",{[`btn-${i.variant}`]:i.variant,"btn-secondary":!i.variant,"with-icon":o});return N("button",{class:r,type:"button",onClick:i.onClick},[o&&Je(i.icon),i.label])})):null;return()=>{const i=Ee("card","user-card",{"user-card-compact":e.compact}),o=[];e.href?o.push(N("a",{class:"profile-identity",href:e.href,target:"_blank",rel:"noopener noreferrer"},[s()])):o.push(s()),!e.compact&&e.role&&o.push(N("span",{class:"user-card-role"},e.role)),t.default&&!e.compact&&o.push(N("div",{class:"user-card-extra"},t.default()));const r=a();return r&&o.push(r),N("article",{class:i},[N("div",{class:"user-card-body"},o)])}}});function Mn(){const e=va(Wp,null);if(e)return e;const t=()=>{throw new Error("GNexus UI Kit: useToast() requires near the app root.")};return{show:t,info:t,success:t,warning:t,danger:t,error:t,close:t}}var Uy={GnAccordion:X_,GnActionCard:Q_,GnActionList:J_,GnActivityLog:ey,GnAlert:Vn,GnAvatar:Do,GnAvatarStack:ty,GnBadge:vi,GnButton:ot,GnCard:ny,GnCheckbox:Lp,GnChip:$p,GnChipGroup:sy,GnCopyButton:sc,GnCombobox:iy,GnConfirmDialog:ry,GnDescriptionList:ly,GnDefinitionList:lo,GnDropdown:Pp,GnDrawer:uy,GnEmptyState:dy,GnFileUpload:py,GnIconButton:Kn,GnIdentity:gy,GnInput:Qs,GnInputGroup:my,GnList:hy,GnLoader:Js,GnLoginCard:vy,GnMetricCard:by,GnModal:Ia,GnNavList:Gp,GnNavigationShell:yy,GnPageHeader:ky,GnHorizontalCard:wy,GnPagination:Sy,GnPopover:Ey,GnProgress:Hp,GnProgressStages:Ty,GnRadio:zp,GnRadioGroup:El,GnRange:Tl,GnRepeater:Ny,GnRouterTabs:Cy,GnSearchField:Kp,GnSelect:co,GnSkeleton:Ry,GnSteps:Iy,GnStatusCard:Oy,GnSwitch:qp,GnTagInput:My,GnTable:Vp,GnTabs:ac,GnTextarea:ic,GnTimeline:Ly,GnTooltip:$y,GnToolbar:Dy,GnToastProvider:Py,GnUsageMeter:By,GnUserCard:Fy},Gy={install(e){Object.entries(Uy).forEach(([t,n])=>{e.component(t,n)})}};const Hy=["title"],zy={key:1,class:"ap-error"},Ky={class:"ap-controls"},qy={class:"ap-time"},Vy={class:"ap-time"},Wy={class:"ap-volume"},Yy=["src"],jy={__name:"AudioPlayer",props:{src:{type:String,required:!0},title:{type:String,default:""},compact:{type:Boolean,default:!1}},setup(e){const t=e,n=F(null),s=F(!1),a=F(0),i=F(0),o=F(1),r=F(!1),u=F(!1);function l(){s.value=!1,a.value=0,i.value=0,o.value=1,r.value=!1,u.value=!1}Ge(()=>t.src,l);async function c(){const x=n.value;if(x)if(x.paused)try{await x.play()}catch{u.value=!0}else x.pause()}function f(){const x=n.value;x&&(i.value=Number.isFinite(x.duration)?x.duration:0)}function p(){n.value&&(a.value=n.value.currentTime)}function b(x){const S=n.value;if(!S)return;const I=Math.min(Number(x)||0,i.value||0);S.currentTime=I,a.value=I}function _(x){const S=n.value;if(!S)return;const I=Math.max(0,Math.min(1,Number(x)||0));S.muted=!1,S.volume=I,o.value=I,r.value=I===0}function k(){const x=n.value;x&&(x.muted=!x.muted)}function L(){const x=n.value;x&&(r.value=x.muted||x.volume===0,x.muted||(o.value=x.volume))}function R(x){if(!Number.isFinite(x)||x<0)return"0:00";const S=Math.floor(x),I=Math.floor(S/60),O=S%60;return`${I}:${String(O).padStart(2,"0")}`}return(x,S)=>(h(),w("div",{class:Ce(["audio-player",{"is-compact":e.compact}])},[S[4]||(S[4]=g("div",{class:"ap-art"},[g("i",{class:"ph ph-waveform"})],-1)),e.title?(h(),w("div",{key:0,class:"ap-title",title:e.title},y(e.title),9,Hy)):V("",!0),u.value?(h(),w("div",zy,y(d(m)("artifacts.audioFailed")),1)):V("",!0),g("div",Ky,[ee(d(Kn),{icon:s.value?"ph ph-pause":"ph ph-play",label:s.value?d(m)("artifacts.pause"):d(m)("artifacts.play"),onClick:c},null,8,["icon","label"]),g("span",qy,y(R(a.value)),1),ee(d(Tl),{class:"ap-seek","model-value":a.value,min:0,max:i.value||0,step:.1,"aria-label":d(m)("artifacts.seek"),"onUpdate:modelValue":b},null,8,["model-value","max","aria-label"]),g("span",Vy,y(R(i.value)),1),ee(d(Kn),{icon:r.value?"ph ph-speaker-simple-slash":"ph ph-speaker-simple-high",label:r.value?d(m)("artifacts.unmute"):d(m)("artifacts.mute"),onClick:k},null,8,["icon","label"]),g("div",Wy,[ee(d(Tl),{"model-value":r.value?0:o.value,min:0,max:1,step:.05,"aria-label":d(m)("artifacts.volume"),"onUpdate:modelValue":_},null,8,["model-value","aria-label"])])]),g("audio",{ref_key:"audioEl",ref:n,src:e.src,class:"ap-audio-el",preload:"metadata",onLoadedmetadata:f,onTimeupdate:p,onPlay:S[0]||(S[0]=I=>s.value=!0),onPause:S[1]||(S[1]=I=>s.value=!1),onEnded:S[2]||(S[2]=I=>s.value=!1),onVolumechange:L,onError:S[3]||(S[3]=I=>u.value=!0)},null,40,Yy)],2))}},oc=Ye(jy,[["__scopeId","data-v-f9c7ab69"]]),Zy=Object.freeze(Object.defineProperty({__proto__:null,default:oc},Symbol.toStringTag,{value:"Module"}));function Ws(e){if(!e)return"";let t;try{t=new URL(e,window.location.origin)}catch{return e}return t.origin===window.location.origin?`${t.pathname}${t.search}${t.hash}`:t.href}function Ys(e){return e?new URL(e,window.location.origin).href:""}function Xy(e,t){const n=Ws(e);return!n||!t?n:`${n}${n.includes("?")?"&":"?"}v=${encodeURIComponent(t)}`}function rc(e,t){const n=new URL(`/content-viewers/${e}.html`,window.location.origin);return n.searchParams.set("url",t),n.href}const Qy=["txt","text","log","md","markdown","csv","tsv","json","jsonl","ndjson","yaml","yml","xml","ini","cfg","conf","toml","py","js","mjs","cjs","ts","tsx","jsx","css","scss","sass","less","sh","bash","zsh","sql","scad","srt","vtt","diff","patch","tex","c","h","cpp","hpp","java","go","rs","rb","php","kt","swift"],Yp={stl:"stl",glb:"model",gltf:"model",html:"html",htm:"html",svg:"svg",pdf:"pdf",png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",bmp:"image",avif:"image",ico:"image",mp4:"video",webm:"video",mov:"video",mkv:"video",m4v:"video",ogv:"video",mp3:"audio",wav:"audio",ogg:"audio",oga:"audio",opus:"audio",m4a:"audio",flac:"audio",aac:"audio",weba:"audio"};for(const e of Qy)Yp[e]="text";const bi={stl:"ph ph-cube",model:"ph ph-cube",html:"ph ph-globe",svg:"ph ph-paint-brush",pdf:"ph ph-file-pdf",image:"ph ph-image",video:"ph ph-film-strip",audio:"ph ph-waveform",text:"ph ph-file-text",unknown:"ph ph-paperclip"},Jy={stl:"info",model:"info",html:"secondary",svg:"success",pdf:"primary",image:"primary",video:"danger",audio:"success",text:"secondary",unknown:"primary"},ek=["stl","model","html","svg","pdf"],tk=["stl","model","html","svg","pdf","image","video","audio","text"];function nk(e){const t=String(e||"").split("?")[0].split("#")[0];return t.includes(".")?t.split(".").pop().toLowerCase():""}function jp(e){return Yp[nk(e)]||"unknown"}function Zp(e){const t=String(e||"").trim().toLowerCase();return!t||t==="unknown"?null:Object.hasOwn(bi,t)?t:null}function Al(e){return ek.includes(e)}function Xp(e){return tk.includes(e)}function lc(e){return e==="stl"?"model":e}function sk(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var cr,Tu;function ak(){if(Tu)return cr;Tu=1;function e(H){return H instanceof Map?H.clear=H.delete=H.set=function(){throw new Error("map is read-only")}:H instanceof Set&&(H.add=H.clear=H.delete=function(){throw new Error("set is read-only")}),Object.freeze(H),Object.getOwnPropertyNames(H).forEach(ie=>{const Se=H[ie],qe=typeof Se;(qe==="object"||qe==="function")&&!Object.isFrozen(Se)&&e(Se)}),H}class t{constructor(ie){ie.data===void 0&&(ie.data={}),this.data=ie.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(H){return H.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function s(H,...ie){const Se=Object.create(null);for(const qe in H)Se[qe]=H[qe];return ie.forEach(function(qe){for(const Et in qe)Se[Et]=qe[Et]}),Se}const a="",i=H=>!!H.scope,o=(H,{prefix:ie})=>{if(H.startsWith("language:"))return H.replace("language:","language-");if(H.includes(".")){const Se=H.split(".");return[`${ie}${Se.shift()}`,...Se.map((qe,Et)=>`${qe}${"_".repeat(Et+1)}`)].join(" ")}return`${ie}${H}`};class r{constructor(ie,Se){this.buffer="",this.classPrefix=Se.classPrefix,ie.walk(this)}addText(ie){this.buffer+=n(ie)}openNode(ie){if(!i(ie))return;const Se=o(ie.scope,{prefix:this.classPrefix});this.span(Se)}closeNode(ie){i(ie)&&(this.buffer+=a)}value(){return this.buffer}span(ie){this.buffer+=``}}const u=(H={})=>{const ie={children:[]};return Object.assign(ie,H),ie};class l{constructor(){this.rootNode=u(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(ie){this.top.children.push(ie)}openNode(ie){const Se=u({scope:ie});this.add(Se),this.stack.push(Se)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(ie){return this.constructor._walk(ie,this.rootNode)}static _walk(ie,Se){return typeof Se=="string"?ie.addText(Se):Se.children&&(ie.openNode(Se),Se.children.forEach(qe=>this._walk(ie,qe)),ie.closeNode(Se)),ie}static _collapse(ie){typeof ie!="string"&&ie.children&&(ie.children.every(Se=>typeof Se=="string")?ie.children=[ie.children.join("")]:ie.children.forEach(Se=>{l._collapse(Se)}))}}class c extends l{constructor(ie){super(),this.options=ie}addText(ie){ie!==""&&this.add(ie)}startScope(ie){this.openNode(ie)}endScope(){this.closeNode()}__addSublanguage(ie,Se){const qe=ie.root;Se&&(qe.scope=`language:${Se}`),this.add(qe)}toHTML(){return new r(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function f(H){return H?typeof H=="string"?H:H.source:null}function p(H){return k("(?=",H,")")}function b(H){return k("(?:",H,")*")}function _(H){return k("(?:",H,")?")}function k(...H){return H.map(Se=>f(Se)).join("")}function L(H){const ie=H[H.length-1];return typeof ie=="object"&&ie.constructor===Object?(H.splice(H.length-1,1),ie):{}}function R(...H){return"("+(L(H).capture?"":"?:")+H.map(qe=>f(qe)).join("|")+")"}function x(H){return new RegExp(H.toString()+"|").exec("").length-1}function S(H,ie){const Se=H&&H.exec(ie);return Se&&Se.index===0}const I=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function O(H,{joinWith:ie}){let Se=0;return H.map(qe=>{Se+=1;const Et=Se;let bt=f(qe),Oe="";for(;bt.length>0;){const Te=I.exec(bt);if(!Te){Oe+=bt;break}Oe+=bt.substring(0,Te.index),bt=bt.substring(Te.index+Te[0].length),Te[0][0]==="\\"&&Te[1]?Oe+="\\"+String(Number(Te[1])+Et):(Oe+=Te[0],Te[0]==="("&&Se++)}return Oe}).map(qe=>`(${qe})`).join(ie)}const P=/\b\B/,M="[a-zA-Z]\\w*",$="[a-zA-Z_]\\w*",v="\\b\\d+(\\.\\d+)?",E="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",C="\\b(0b[01]+)",A="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",B=(H={})=>{const ie=/^#![ ]*\//;return H.binary&&(H.begin=k(ie,/.*\b/,H.binary,/\b.*/)),s({scope:"meta",begin:ie,end:/$/,relevance:0,"on:begin":(Se,qe)=>{Se.index!==0&&qe.ignoreMatch()}},H)},z={begin:"\\\\[\\s\\S]",relevance:0},K={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[z]},j={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[z]},Q={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},ce=function(H,ie,Se={}){const qe=s({scope:"comment",begin:H,end:ie,contains:[]},Se);qe.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const Et=R("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return qe.contains.push({begin:k(/[ ]+/,"(",Et,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),qe},Be=ce("//","$"),Xe=ce("/\\*","\\*/"),De=ce("#","$"),J={scope:"number",begin:v,relevance:0},le={scope:"number",begin:E,relevance:0},_e={scope:"number",begin:C,relevance:0},Me={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[z,{begin:/\[/,end:/\]/,relevance:0,contains:[z]}]},Z={scope:"title",begin:M,relevance:0},we={scope:"title",begin:$,relevance:0},se={begin:"\\.\\s*"+$,relevance:0};var Ke=Object.freeze({__proto__:null,APOS_STRING_MODE:K,BACKSLASH_ESCAPE:z,BINARY_NUMBER_MODE:_e,BINARY_NUMBER_RE:C,COMMENT:ce,C_BLOCK_COMMENT_MODE:Xe,C_LINE_COMMENT_MODE:Be,C_NUMBER_MODE:le,C_NUMBER_RE:E,END_SAME_AS_BEGIN:function(H){return Object.assign(H,{"on:begin":(ie,Se)=>{Se.data._beginMatch=ie[1]},"on:end":(ie,Se)=>{Se.data._beginMatch!==ie[1]&&Se.ignoreMatch()}})},HASH_COMMENT_MODE:De,IDENT_RE:M,MATCH_NOTHING_RE:P,METHOD_GUARD:se,NUMBER_MODE:J,NUMBER_RE:v,PHRASAL_WORDS_MODE:Q,QUOTE_STRING_MODE:j,REGEXP_MODE:Me,RE_STARTERS_RE:A,SHEBANG:B,TITLE_MODE:Z,UNDERSCORE_IDENT_RE:$,UNDERSCORE_TITLE_MODE:we});function at(H,ie){H.input[H.index-1]==="."&&ie.ignoreMatch()}function D(H,ie){H.className!==void 0&&(H.scope=H.className,delete H.className)}function U(H,ie){ie&&H.beginKeywords&&(H.begin="\\b("+H.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",H.__beforeBegin=at,H.keywords=H.keywords||H.beginKeywords,delete H.beginKeywords,H.relevance===void 0&&(H.relevance=0))}function q(H,ie){Array.isArray(H.illegal)&&(H.illegal=R(...H.illegal))}function Y(H,ie){if(H.match){if(H.begin||H.end)throw new Error("begin & end are not supported with match");H.begin=H.match,delete H.match}}function ne(H,ie){H.relevance===void 0&&(H.relevance=1)}const X=(H,ie)=>{if(!H.beforeMatch)return;if(H.starts)throw new Error("beforeMatch cannot be used with starts");const Se=Object.assign({},H);Object.keys(H).forEach(qe=>{delete H[qe]}),H.keywords=Se.keywords,H.begin=k(Se.beforeMatch,p(Se.begin)),H.starts={relevance:0,contains:[Object.assign(Se,{endsParent:!0})]},H.relevance=0,delete Se.beforeMatch},pe=["of","and","for","in","not","or","if","then","parent","list","value"],oe="keyword";function ue(H,ie,Se=oe){const qe=Object.create(null);return typeof H=="string"?Et(Se,H.split(" ")):Array.isArray(H)?Et(Se,H):Object.keys(H).forEach(function(bt){Object.assign(qe,ue(H[bt],ie,bt))}),qe;function Et(bt,Oe){ie&&(Oe=Oe.map(Te=>Te.toLowerCase())),Oe.forEach(function(Te){const Ue=Te.split("|");qe[Ue[0]]=[bt,re(Ue[0],Ue[1])]})}}function re(H,ie){return ie?Number(ie):ye(H)?0:1}function ye(H){return pe.includes(H.toLowerCase())}const ve={},Re=H=>{console.error(H)},Ne=(H,...ie)=>{console.log(`WARN: ${H}`,...ie)},Ie=(H,ie)=>{ve[`${H}/${ie}`]||(console.log(`Deprecated as of ${H}. ${ie}`),ve[`${H}/${ie}`]=!0)},Ve=new Error;function Qe(H,ie,{key:Se}){let qe=0;const Et=H[Se],bt={},Oe={};for(let Te=1;Te<=ie.length;Te++)Oe[Te+qe]=Et[Te],bt[Te+qe]=!0,qe+=x(ie[Te-1]);H[Se]=Oe,H[Se]._emit=bt,H[Se]._multi=!0}function nt(H){if(Array.isArray(H.begin)){if(H.skip||H.excludeBegin||H.returnBegin)throw Re("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Ve;if(typeof H.beginScope!="object"||H.beginScope===null)throw Re("beginScope must be object"),Ve;Qe(H,H.begin,{key:"beginScope"}),H.begin=O(H.begin,{joinWith:""})}}function dt(H){if(Array.isArray(H.end)){if(H.skip||H.excludeEnd||H.returnEnd)throw Re("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Ve;if(typeof H.endScope!="object"||H.endScope===null)throw Re("endScope must be object"),Ve;Qe(H,H.end,{key:"endScope"}),H.end=O(H.end,{joinWith:""})}}function Ot(H){H.scope&&typeof H.scope=="object"&&H.scope!==null&&(H.beginScope=H.scope,delete H.scope)}function Ct(H){Ot(H),typeof H.beginScope=="string"&&(H.beginScope={_wrap:H.beginScope}),typeof H.endScope=="string"&&(H.endScope={_wrap:H.endScope}),nt(H),dt(H)}function Jt(H){function ie(Oe,Te){return new RegExp(f(Oe),"m"+(H.case_insensitive?"i":"")+(H.unicodeRegex?"u":"")+(Te?"g":""))}class Se{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Te,Ue){Ue.position=this.position++,this.matchIndexes[this.matchAt]=Ue,this.regexes.push([Ue,Te]),this.matchAt+=x(Te)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const Te=this.regexes.map(Ue=>Ue[1]);this.matcherRe=ie(O(Te,{joinWith:"|"}),!0),this.lastIndex=0}exec(Te){this.matcherRe.lastIndex=this.lastIndex;const Ue=this.matcherRe.exec(Te);if(!Ue)return null;const It=Ue.findIndex((Ts,sa)=>sa>0&&Ts!==void 0),Tt=this.matchIndexes[It];return Ue.splice(0,It),Object.assign(Ue,Tt)}}class qe{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Te){if(this.multiRegexes[Te])return this.multiRegexes[Te];const Ue=new Se;return this.rules.slice(Te).forEach(([It,Tt])=>Ue.addRule(It,Tt)),Ue.compile(),this.multiRegexes[Te]=Ue,Ue}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(Te,Ue){this.rules.push([Te,Ue]),Ue.type==="begin"&&this.count++}exec(Te){const Ue=this.getMatcher(this.regexIndex);Ue.lastIndex=this.lastIndex;let It=Ue.exec(Te);if(this.resumingScanAtSamePosition()&&!(It&&It.index===this.lastIndex)){const Tt=this.getMatcher(0);Tt.lastIndex=this.lastIndex+1,It=Tt.exec(Te)}return It&&(this.regexIndex+=It.position+1,this.regexIndex===this.count&&this.considerAll()),It}}function Et(Oe){const Te=new qe;return Oe.contains.forEach(Ue=>Te.addRule(Ue.begin,{rule:Ue,type:"begin"})),Oe.terminatorEnd&&Te.addRule(Oe.terminatorEnd,{type:"end"}),Oe.illegal&&Te.addRule(Oe.illegal,{type:"illegal"}),Te}function bt(Oe,Te){const Ue=Oe;if(Oe.isCompiled)return Ue;[D,Y,Ct,X].forEach(Tt=>Tt(Oe,Te)),H.compilerExtensions.forEach(Tt=>Tt(Oe,Te)),Oe.__beforeBegin=null,[U,q,ne].forEach(Tt=>Tt(Oe,Te)),Oe.isCompiled=!0;let It=null;return typeof Oe.keywords=="object"&&Oe.keywords.$pattern&&(Oe.keywords=Object.assign({},Oe.keywords),It=Oe.keywords.$pattern,delete Oe.keywords.$pattern),It=It||/\w+/,Oe.keywords&&(Oe.keywords=ue(Oe.keywords,H.case_insensitive)),Ue.keywordPatternRe=ie(It,!0),Te&&(Oe.begin||(Oe.begin=/\B|\b/),Ue.beginRe=ie(Ue.begin),!Oe.end&&!Oe.endsWithParent&&(Oe.end=/\B|\b/),Oe.end&&(Ue.endRe=ie(Ue.end)),Ue.terminatorEnd=f(Ue.end)||"",Oe.endsWithParent&&Te.terminatorEnd&&(Ue.terminatorEnd+=(Oe.end?"|":"")+Te.terminatorEnd)),Oe.illegal&&(Ue.illegalRe=ie(Oe.illegal)),Oe.contains||(Oe.contains=[]),Oe.contains=[].concat(...Oe.contains.map(function(Tt){return wt(Tt==="self"?Oe:Tt)})),Oe.contains.forEach(function(Tt){bt(Tt,Ue)}),Oe.starts&&bt(Oe.starts,Te),Ue.matcher=Et(Ue),Ue}if(H.compilerExtensions||(H.compilerExtensions=[]),H.contains&&H.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return H.classNameAliases=s(H.classNameAliases||{}),bt(H)}function Vt(H){return H?H.endsWithParent||Vt(H.starts):!1}function wt(H){return H.variants&&!H.cachedVariants&&(H.cachedVariants=H.variants.map(function(ie){return s(H,{variants:null},ie)})),H.cachedVariants?H.cachedVariants:Vt(H)?s(H,{starts:H.starts?s(H.starts):null}):Object.isFrozen(H)?s(H):H}var Rt="11.11.1";class Cn extends Error{constructor(ie,Se){super(ie),this.name="HTMLInjectionError",this.html=Se}}const St=n,us=s,he=Symbol("nomatch"),Dt=7,Pt=function(H){const ie=Object.create(null),Se=Object.create(null),qe=[];let Et=!0;const bt="Could not find the language '{}', did you forget to load/include a language module?",Oe={disableAutodetect:!0,name:"Plain text",contains:[]};let Te={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function Ue(be){return Te.noHighlightRe.test(be)}function It(be){let $e=be.className+" ";$e+=be.parentNode?be.parentNode.className:"";const Ze=Te.languageDetectRe.exec($e);if(Ze){const ft=_n(Ze[1]);return ft||(Ne(bt.replace("{}",Ze[1])),Ne("Falling back to no-highlight mode for this block.",be)),ft?Ze[1]:"no-highlight"}return $e.split(/\s+/).find(ft=>Ue(ft)||_n(ft))}function Tt(be,$e,Ze){let ft="",At="";typeof $e=="object"?(ft=be,Ze=$e.ignoreIllegals,At=$e.language):(Ie("10.7.0","highlight(lang, code, ...args) has been deprecated."),Ie("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),At=be,ft=$e),Ze===void 0&&(Ze=!0);const ln={code:ft,language:At};aa("before:highlight",ln);const $n=ln.result?ln.result:Ts(ln.language,ln.code,Ze);return $n.code=ln.code,aa("after:highlight",$n),$n}function Ts(be,$e,Ze,ft){const At=Object.create(null);function ln(T,G){return T.keywords[G]}function $n(){if(!We.keywords){Ht.addText(pt);return}let T=0;We.keywordPatternRe.lastIndex=0;let G=We.keywordPatternRe.exec(pt),te="";for(;G;){te+=pt.substring(T,G.index);const de=fn.case_insensitive?G[0].toLowerCase():G[0],xe=ln(We,de);if(xe){const[Pe,gt]=xe;if(Ht.addText(te),te="",At[de]=(At[de]||0)+1,At[de]<=Dt&&(Os+=gt),Pe.startsWith("_"))te+=G[0];else{const kt=fn.classNameAliases[Pe]||Pe;en(G[0],kt)}}else te+=G[0];T=We.keywordPatternRe.lastIndex,G=We.keywordPatternRe.exec(pt)}te+=pt.substring(T),Ht.addText(te)}function Cs(){if(pt==="")return;let T=null;if(typeof We.subLanguage=="string"){if(!ie[We.subLanguage]){Ht.addText(pt);return}T=Ts(We.subLanguage,pt,!0,$a[We.subLanguage]),$a[We.subLanguage]=T._top}else T=As(pt,We.subLanguage.length?We.subLanguage:null);We.relevance>0&&(Os+=T.relevance),Ht.__addSublanguage(T._emitter,T.language)}function Wt(){We.subLanguage!=null?Cs():$n(),pt=""}function en(T,G){T!==""&&(Ht.startScope(G),Ht.addText(T),Ht.endScope())}function ia(T,G){let te=1;const de=G.length-1;for(;te<=de;){if(!T._emit[te]){te++;continue}const xe=fn.classNameAliases[T[te]]||T[te],Pe=G[te];xe?en(Pe,xe):(pt=Pe,$n(),pt=""),te++}}function Rs(T,G){return T.scope&&typeof T.scope=="string"&&Ht.openNode(fn.classNameAliases[T.scope]||T.scope),T.beginScope&&(T.beginScope._wrap?(en(pt,fn.classNameAliases[T.beginScope._wrap]||T.beginScope._wrap),pt=""):T.beginScope._multi&&(ia(T.beginScope,G),pt="")),We=Object.create(T,{parent:{value:We}}),We}function jn(T,G,te){let de=S(T.endRe,te);if(de){if(T["on:end"]){const xe=new t(T);T["on:end"](G,xe),xe.isMatchIgnored&&(de=!1)}if(de){for(;T.endsParent&&T.parent;)T=T.parent;return T}}if(T.endsWithParent)return jn(T.parent,G,te)}function Is(T){return We.matcher.regexIndex===0?(pt+=T[0],1):(me=!0,0)}function yn(T){const G=T[0],te=T.rule,de=new t(te),xe=[te.__beforeBegin,te["on:begin"]];for(const Pe of xe)if(Pe&&(Pe(T,de),de.isMatchIgnored))return Is(G);return te.skip?pt+=G:(te.excludeBegin&&(pt+=G),Wt(),!te.returnBegin&&!te.excludeBegin&&(pt=G)),Rs(te,T),te.returnBegin?0:G.length}function qo(T){const G=T[0],te=$e.substring(T.index),de=jn(We,T,te);if(!de)return he;const xe=We;We.endScope&&We.endScope._wrap?(Wt(),en(G,We.endScope._wrap)):We.endScope&&We.endScope._multi?(Wt(),ia(We.endScope,T)):xe.skip?pt+=G:(xe.returnEnd||xe.excludeEnd||(pt+=G),Wt(),xe.excludeEnd&&(pt=G));do We.scope&&Ht.closeNode(),!We.skip&&!We.subLanguage&&(Os+=We.relevance),We=We.parent;while(We!==de.parent);return de.starts&&Rs(de.starts,T),xe.returnEnd?0:G.length}function oa(){const T=[];for(let G=We;G!==fn;G=G.parent)G.scope&&T.unshift(G.scope);T.forEach(G=>Ht.openNode(G))}let ra={};function La(T,G){const te=G&&G[0];if(pt+=T,te==null)return Wt(),0;if(ra.type==="begin"&&G.type==="end"&&ra.index===G.index&&te===""){if(pt+=$e.slice(G.index,G.index+1),!Et){const de=new Error(`0 width match regex (${be})`);throw de.languageName=be,de.badRule=ra.rule,de}return 1}if(ra=G,G.type==="begin")return yn(G);if(G.type==="illegal"&&!Ze){const de=new Error('Illegal lexeme "'+te+'" for mode "'+(We.scope||"")+'"');throw de.mode=We,de}else if(G.type==="end"){const de=qo(G);if(de!==he)return de}if(G.type==="illegal"&&te==="")return pt+=` +`,1;if(Ms>1e5&&Ms>G.index*3)throw new Error("potential infinite loop, way more iterations than matches");return pt+=te,te.length}const fn=_n(be);if(!fn)throw Re(bt.replace("{}",be)),new Error('Unknown language: "'+be+'"');const Ni=Jt(fn);let la="",We=ft||Ni;const $a={},Ht=new Te.__emitter(Te);oa();let pt="",Os=0,kn=0,Ms=0,me=!1;try{if(fn.__emitTokens)fn.__emitTokens($e,Ht);else{for(We.matcher.considerAll();;){Ms++,me?me=!1:We.matcher.considerAll(),We.matcher.lastIndex=kn;const T=We.matcher.exec($e);if(!T)break;const G=$e.substring(kn,T.index),te=La(G,T);kn=T.index+te}La($e.substring(kn))}return Ht.finalize(),la=Ht.toHTML(),{language:be,value:la,relevance:Os,illegal:!1,_emitter:Ht,_top:We}}catch(T){if(T.message&&T.message.includes("Illegal"))return{language:be,value:St($e),illegal:!0,relevance:0,_illegalBy:{message:T.message,index:kn,context:$e.slice(kn-100,kn+100),mode:T.mode,resultSoFar:la},_emitter:Ht};if(Et)return{language:be,value:St($e),illegal:!1,relevance:0,errorRaised:T,_emitter:Ht,_top:We};throw T}}function sa(be){const $e={value:St(be),illegal:!1,relevance:0,_top:Oe,_emitter:new Te.__emitter(Te)};return $e._emitter.addText(be),$e}function As(be,$e){$e=$e||Te.languages||Object.keys(ie);const Ze=sa(be),ft=$e.filter(_n).filter(Ma).map(Wt=>Ts(Wt,be,!1));ft.unshift(Ze);const At=ft.sort((Wt,en)=>{if(Wt.relevance!==en.relevance)return en.relevance-Wt.relevance;if(Wt.language&&en.language){if(_n(Wt.language).supersetOf===en.language)return 1;if(_n(en.language).supersetOf===Wt.language)return-1}return 0}),[ln,$n]=At,Cs=ln;return Cs.secondBest=$n,Cs}function Ti(be,$e,Ze){const ft=$e&&Se[$e]||Ze;be.classList.add("hljs"),be.classList.add(`language-${ft}`)}function xs(be){let $e=null;const Ze=It(be);if(Ue(Ze))return;if(aa("before:highlightElement",{el:be,language:Ze}),be.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",be);return}if(be.children.length>0&&(Te.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(be)),Te.throwUnescapedHTML))throw new Cn("One of your code blocks includes unescaped HTML.",be.innerHTML);$e=be;const ft=$e.textContent,At=Ze?Tt(ft,{language:Ze,ignoreIllegals:!0}):As(ft);be.innerHTML=At.value,be.dataset.highlighted="yes",Ti(be,Ze,At.language),be.result={language:At.language,re:At.relevance,relevance:At.relevance},At.secondBest&&(be.secondBest={language:At.secondBest.language,relevance:At.secondBest.relevance}),aa("after:highlightElement",{el:be,result:At,text:ft})}function Fo(be){Te=us(Te,be)}const Ns=()=>{_t(),Ie("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Uo(){_t(),Ie("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Ai=!1;function _t(){function be(){_t()}if(document.readyState==="loading"){Ai||window.addEventListener("DOMContentLoaded",be,!1),Ai=!0;return}document.querySelectorAll(Te.cssSelector).forEach(xs)}function ds(be,$e){let Ze=null;try{Ze=$e(H)}catch(ft){if(Re("Language definition for '{}' could not be registered.".replace("{}",be)),Et)Re(ft);else throw ft;Ze=Oe}Ze.name||(Ze.name=be),ie[be]=Ze,Ze.rawDefinition=$e.bind(null,H),Ze.aliases&&Oa(Ze.aliases,{languageName:be})}function Go(be){delete ie[be];for(const $e of Object.keys(Se))Se[$e]===be&&delete Se[$e]}function xi(){return Object.keys(ie)}function _n(be){return be=(be||"").toLowerCase(),ie[be]||ie[Se[be]]}function Oa(be,{languageName:$e}){typeof be=="string"&&(be=[be]),be.forEach(Ze=>{Se[Ze.toLowerCase()]=$e})}function Ma(be){const $e=_n(be);return $e&&!$e.disableAutodetect}function Ho(be){be["before:highlightBlock"]&&!be["before:highlightElement"]&&(be["before:highlightElement"]=$e=>{be["before:highlightBlock"](Object.assign({block:$e.el},$e))}),be["after:highlightBlock"]&&!be["after:highlightElement"]&&(be["after:highlightElement"]=$e=>{be["after:highlightBlock"](Object.assign({block:$e.el},$e))})}function zo(be){Ho(be),qe.push(be)}function Ko(be){const $e=qe.indexOf(be);$e!==-1&&qe.splice($e,1)}function aa(be,$e){const Ze=be;qe.forEach(function(ft){ft[Ze]&&ft[Ze]($e)})}function Ln(be){return Ie("10.7.0","highlightBlock will be removed entirely in v12.0"),Ie("10.7.0","Please use highlightElement now."),xs(be)}Object.assign(H,{highlight:Tt,highlightAuto:As,highlightAll:_t,highlightElement:xs,highlightBlock:Ln,configure:Fo,initHighlighting:Ns,initHighlightingOnLoad:Uo,registerLanguage:ds,unregisterLanguage:Go,listLanguages:xi,getLanguage:_n,registerAliases:Oa,autoDetection:Ma,inherit:us,addPlugin:zo,removePlugin:Ko}),H.debugMode=function(){Et=!1},H.safeMode=function(){Et=!0},H.versionString=Rt,H.regex={concat:k,lookahead:p,either:R,optional:_,anyNumberOfTimes:b};for(const be in Ke)typeof Ke[be]=="object"&&e(Ke[be]);return Object.assign(H,Ke),H},Ae=Pt({});return Ae.newInstance=()=>Pt({}),cr=Ae,Ae.HighlightJS=Ae,Ae.default=Ae,cr}var ur,Au;function ik(){if(Au)return ur;Au=1;function e(t){const n=t.regex,s=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a=/[\p{L}0-9._:-]+/u,i={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},r=t.inherit(o,{begin:/\(/,end:/\)/}),u=t.inherit(t.APOS_STRING_MODE,{className:"string"}),l=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),c={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[o,l,u,r,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[o,r,l,u]}]}]},t.COMMENT(//,{relevance:10}),{begin://,relevance:10},i,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[c],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[c],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:s,relevance:0,starts:c}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(s,/>/))),contains:[{className:"name",begin:s,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return ur=e,ur}var dr,xu;function ok(){if(xu)return dr;xu=1;function e(t){const n=t.regex,s={},a={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[s]}]};Object.assign(s,{className:"variable",variants:[{begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},o=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),r={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},u={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,s,i]};i.contains.push(u);const l={match:/\\"/},c={className:"string",begin:/'/,end:/'/},f={match:/\\'/},p={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,s]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=t.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),k={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},L=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],R=["true","false"],x={match:/(\/[a-z._-]+)+/},S=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],I=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],O=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],P=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:L,literal:R,built_in:[...S,...I,"set","shopt",...O,...P]},contains:[_,t.SHEBANG(),k,p,o,r,x,u,l,c,f,s]}}return dr=e,dr}var fr,Nu;function rk(){if(Nu)return fr;Nu=1;function e(t){const n=t.regex,s=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",u={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},f={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},p={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(c,{className:"string"}),{className:"string",begin:/<.*?>/},s,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:n.optional(i)+t.IDENT_RE,relevance:0},_=n.optional(i)+t.IDENT_RE+"\\s*\\(",R={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},x=[p,u,s,t.C_BLOCK_COMMENT_MODE,f,c],S={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:R,contains:x.concat([{begin:/\(/,end:/\)/,keywords:R,contains:x.concat(["self"]),relevance:0}]),relevance:0},I={begin:"("+r+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:R,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:R,relevance:0},{begin:_,returnBegin:!0,contains:[t.inherit(b,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:[s,t.C_BLOCK_COMMENT_MODE,c,f,u,{begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:["self",s,t.C_BLOCK_COMMENT_MODE,c,f,u]}]},u,s,t.C_BLOCK_COMMENT_MODE,p]};return{name:"C",aliases:["h"],keywords:R,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{preprocessor:p,strings:c,keywords:R}}}return fr=e,fr}var pr,Cu;function lk(){if(Cu)return pr;Cu=1;function e(t){const n=t.regex,s=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",u={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},f={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},p={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(c,{className:"string"}),{className:"string",begin:/<.*?>/},s,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:n.optional(i)+t.IDENT_RE,relevance:0},_=n.optional(i)+t.IDENT_RE+"\\s*\\(",k=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],L=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],R=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],x=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],O={type:L,keyword:k,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:R},P={className:"function.dispatch",relevance:0,keywords:{_hint:x},begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,t.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))},M=[P,p,u,s,t.C_BLOCK_COMMENT_MODE,f,c],$={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:O,contains:M.concat([{begin:/\(/,end:/\)/,keywords:O,contains:M.concat(["self"]),relevance:0}]),relevance:0},v={className:"function",begin:"("+r+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:O,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:O,relevance:0},{begin:_,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[c,f]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:[s,t.C_BLOCK_COMMENT_MODE,c,f,u,{begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:["self",s,t.C_BLOCK_COMMENT_MODE,c,f,u]}]},u,s,t.C_BLOCK_COMMENT_MODE,p]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:O,illegal:"",keywords:O,contains:["self",u]},{begin:t.IDENT_RE+"::",keywords:O},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return pr=e,pr}var gr,Ru;function ck(){if(Ru)return gr;Ru=1;function e(t){const n=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],s=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],a=["default","false","null","true"],i=["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],o=["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"],r={keyword:i.concat(o),built_in:n,literal:a},u=t.inherit(t.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),l={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},f={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},p=t.inherit(f,{illegal:/\n/}),b={className:"subst",begin:/\{/,end:/\}/,keywords:r},_=t.inherit(b,{illegal:/\n/}),k={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},t.BACKSLASH_ESCAPE,_]},L={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},b]},R=t.inherit(L,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]});b.contains=[L,k,f,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,l,t.C_BLOCK_COMMENT_MODE],_.contains=[R,k,p,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,l,t.inherit(t.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const x={variants:[c,L,k,f,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},S={begin:"<",end:">",contains:[{beginKeywords:"in out"},u]},I=t.IDENT_RE+"(<"+t.IDENT_RE+"(\\s*,\\s*"+t.IDENT_RE+")*>)?(\\[\\])?",O={begin:"@"+t.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:r,illegal:/::/,contains:[t.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},x,l,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},u,S,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[u,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[u,S,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+I+"\\s+)+"+t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:r,contains:[{beginKeywords:s.join(" "),relevance:0},{begin:t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[t.TITLE_MODE,S],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,relevance:0,contains:[x,l,t.C_BLOCK_COMMENT_MODE]},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},O]}}return gr=e,gr}var mr,Iu;function uk(){if(Iu)return mr;Iu=1;const e=l=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:l.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:l.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function u(l){const c=l.regex,f=e(l),p={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},b="and or not only",_=/@-?\w[\w]*(-\w+)*/,k="[a-zA-Z-][a-zA-Z0-9_-]*",L=[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[f.BLOCK_COMMENT,p,f.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+k,relevance:0},f.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+i.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},f.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[f.BLOCK_COMMENT,f.HEXCOLOR,f.IMPORTANT,f.CSS_NUMBER_MODE,...L,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...L,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},f.FUNCTION_DISPATCH]},{begin:c.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:_},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:b,attribute:a.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...L,f.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+s.join("|")+")\\b"}]}}return mr=u,mr}var hr,Ou;function dk(){if(Ou)return hr;Ou=1;function e(t){const n=t.regex,s={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},a={begin:"^[-\\*]{3,}",end:"$"},i={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},o={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},r={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},u=/[A-Za-z][A-Za-z0-9+.-]*/,l={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:n.concat(/\[.+?\]\(/,u,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},c={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},f={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},p=t.inherit(c,{contains:[]}),b=t.inherit(f,{contains:[]});c.contains.push(b),f.contains.push(p);let _=[s,l];return[c,f,p,b].forEach(x=>{x.contains=x.contains.concat(_)}),_=_.concat(c,f),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:_},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:_}]}]},s,o,c,f,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},i,a,l,r,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return hr=e,hr}var vr,Mu;function fk(){if(Mu)return vr;Mu=1;function e(t){const n=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}return vr=e,vr}var br,Lu;function pk(){if(Lu)return br;Lu=1;function e(t){const n=t.regex,s="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},u={className:"doctag",begin:"@[A-Za-z]+"},l={begin:"#<",end:">"},c=[t.COMMENT("#","$",{contains:[u]}),t.COMMENT("^=begin","^=end",{contains:[u],relevance:10}),t.COMMENT("^__END__",t.MATCH_NOTHING_RE)],f={className:"subst",begin:/#\{/,end:/\}/,keywords:r},p={className:"string",contains:[t.BACKSLASH_ESCAPE,f],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[t.BACKSLASH_ESCAPE,f]})]}]},b="[1-9](_?[0-9])*|0",_="[0-9](_?[0-9])*",k={className:"number",relevance:0,variants:[{begin:`\\b(${b})(\\.(${_}))?([eE][+-]?(${_})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},L={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:r}]},M=[p,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{match:[/def/,/\s+/,s],scope:{1:"keyword",3:"title.function"},contains:[L]},{begin:t.IDENT_RE+"::"},{className:"symbol",begin:t.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[p,{begin:s}],relevance:0},k,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:r},{begin:"("+t.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[t.BACKSLASH_ESCAPE,f],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(l,c),relevance:0}].concat(l,c);f.contains=M,L.contains=M;const C=[{begin:/^\s*=>/,starts:{end:"$",contains:M}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:r,contains:M}}];return c.unshift(l),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/,contains:[t.SHEBANG({binary:"ruby"})].concat(C).concat(c).concat(M)}}return br=e,br}var _r,$u;function gk(){if($u)return _r;$u=1;function e(t){const o={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:o,illegal:"a(o,r,u-1))}function i(o){const r=o.regex,u="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",l=u+a("(?:<"+u+"~~~(?:\\s*,\\s*"+u+"~~~)*>)?",/~~~/g,2),_={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},k={className:"meta",begin:"@"+u,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},L={className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[o.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:_,illegal:/<\/|#/,contains:[o.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[o.BACKSLASH_ESCAPE]},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,u],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[r.concat(/(?!else)/,u),/\s+/,u,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,u],className:{1:"keyword",3:"title.class"},contains:[L,o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+l+"\\s+)",o.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:_,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[k,o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,s,o.C_BLOCK_COMMENT_MODE]},o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE]},s,k]}}return wr=i,wr}var Sr,Fu;function bk(){if(Fu)return Sr;Fu=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],s=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],r=[].concat(i,s,a);function u(l){const c=l.regex,f=(we,{after:se})=>{const He="",end:""},_=/<[A-Za-z0-9\\._:-]+\s*\/>/,k={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(we,se)=>{const He=we[0].length+we.index,Ke=we.input[He];if(Ke==="<"||Ke===","){se.ignoreMatch();return}Ke===">"&&(f(we,{after:He})||se.ignoreMatch());let at;const D=we.input.substring(He);if(at=D.match(/^\s*=/)){se.ignoreMatch();return}if((at=D.match(/^\s+extends\s+/))&&at.index===0){se.ignoreMatch();return}}},L={$pattern:e,keyword:t,literal:n,built_in:r,"variable.language":o},R="[0-9](_?[0-9])*",x=`\\.(${R})`,S="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",I={className:"number",variants:[{begin:`(\\b(${S})((${x})|\\.)?|(${x}))[eE][+-]?(${R})\\b`},{begin:`\\b(${S})\\b((${x})\\b|\\.)?|(${x})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},O={className:"subst",begin:"\\$\\{",end:"\\}",keywords:L,contains:[]},P={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"xml"}},M={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"css"}},$={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"graphql"}},v={className:"string",begin:"`",end:"`",contains:[l.BACKSLASH_ESCAPE,O]},C={className:"comment",variants:[l.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:p+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),l.C_BLOCK_COMMENT_MODE,l.C_LINE_COMMENT_MODE]},A=[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,P,M,$,v,{match:/\$\d+/},I];O.contains=A.concat({begin:/\{/,end:/\}/,keywords:L,contains:["self"].concat(A)});const B=[].concat(C,O.contains),z=B.concat([{begin:/(\s*)\(/,end:/\)/,keywords:L,contains:["self"].concat(B)}]),K={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:L,contains:z},j={variants:[{match:[/class/,/\s+/,p,/\s+/,/extends/,/\s+/,c.concat(p,"(",c.concat(/\./,p),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,p],scope:{1:"keyword",3:"title.class"}}]},Q={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...s,...a]}},ce={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Be={variants:[{match:[/function/,/\s+/,p,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[K],illegal:/%/},Xe={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function De(we){return c.concat("(?!",we.join("|"),")")}const J={match:c.concat(/\b/,De([...i,"super","import"].map(we=>`${we}\\s*\\(`)),p,c.lookahead(/\s*\(/)),className:"title.function",relevance:0},le={begin:c.concat(/\./,c.lookahead(c.concat(p,/(?![0-9A-Za-z$_(])/))),end:p,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},_e={match:[/get|set/,/\s+/,p,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},K]},Me="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+l.UNDERSCORE_IDENT_RE+")\\s*=>",Z={match:[/const|var|let/,/\s+/,p,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Me)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[K]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:L,exports:{PARAMS_CONTAINS:z,CLASS_REFERENCE:Q},illegal:/#(?![$_A-z])/,contains:[l.SHEBANG({label:"shebang",binary:"node",relevance:5}),ce,l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,P,M,$,v,C,{match:/\$\d+/},I,Q,{scope:"attr",match:p+c.lookahead(":"),relevance:0},Z,{begin:"("+l.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[C,l.REGEXP_MODE,{className:"function",begin:Me,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:l.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:L,contains:z}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:b.begin,end:b.end},{match:_},{begin:k.begin,"on:begin":k.isTrulyOpeningTag,end:k.end}],subLanguage:"xml",contains:[{begin:k.begin,end:k.end,skip:!0,contains:["self"]}]}]},Be,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+l.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[K,l.inherit(l.TITLE_MODE,{begin:p,className:"title.function"})]},{match:/\.\.\./,relevance:0},le,{match:"\\$"+p,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[K]},J,Xe,j,_e,{match:/\$[(.]/}]}}return Sr=u,Sr}var Er,Uu;function _k(){if(Uu)return Er;Uu=1;function e(t){const n={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},s={match:/[{}[\],:]/,className:"punctuation",relevance:0},a=["true","false","null"],i={scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:a},contains:[n,s,t.QUOTE_STRING_MODE,i,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return Er=e,Er}var Tr,Gu;function yk(){if(Gu)return Tr;Gu=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",s={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function a(i){const o={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},r={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},u={className:"symbol",begin:i.UNDERSCORE_IDENT_RE+"@"},l={className:"subst",begin:/\$\{/,end:/\}/,contains:[i.C_NUMBER_MODE]},c={className:"variable",begin:"\\$"+i.UNDERSCORE_IDENT_RE},f={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[c,l]},{begin:"'",end:"'",illegal:/\n/,contains:[i.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[i.BACKSLASH_ESCAPE,c,l]}]};l.contains.push(f);const p={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+i.UNDERSCORE_IDENT_RE+")?"},b={className:"meta",begin:"@"+i.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[i.inherit(f,{className:"string"}),"self"]}]},_=s,k=i.COMMENT("/\\*","\\*/",{contains:[i.C_BLOCK_COMMENT_MODE]}),L={variants:[{className:"type",begin:i.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},R=L;return R.variants[1].contains=[L],L.variants[1].contains=[R],{name:"Kotlin",aliases:["kt","kts"],keywords:o,contains:[i.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),i.C_LINE_COMMENT_MODE,k,r,u,p,b,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:o,relevance:5,contains:[{begin:i.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[i.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:o,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[L,i.C_LINE_COMMENT_MODE,k],relevance:0},i.C_LINE_COMMENT_MODE,k,p,b,f,i.C_NUMBER_MODE]},k]},{begin:[/class|interface|trait/,/\s+/,i.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},i.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},p,b]},f,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` +`},_]}}return Tr=a,Tr}var Ar,Hu;function kk(){if(Hu)return Ar;Hu=1;const e=c=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:c.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[c.APOS_STRING_MODE,c.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:c.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),u=i.concat(o).sort().reverse();function l(c){const f=e(c),p=u,b="and or not only",_="[\\w-]+",k="("+_+"|@\\{"+_+"\\})",L=[],R=[],x=function(B){return{className:"string",begin:"~?"+B+".*?"+B}},S=function(B,z,K){return{className:B,begin:z,relevance:K}},I={$pattern:/[a-z-]+/,keyword:b,attribute:a.join(" ")},O={begin:"\\(",end:"\\)",contains:R,keywords:I,relevance:0};R.push(c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,x("'"),x('"'),f.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},f.HEXCOLOR,O,S("variable","@@?"+_,10),S("variable","@\\{"+_+"\\}"),S("built_in","~?`[^`]*?`"),{className:"attribute",begin:_+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},f.IMPORTANT,{beginKeywords:"and not"},f.FUNCTION_DISPATCH);const P=R.concat({begin:/\{/,end:/\}/,contains:L}),M={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(R)},$={begin:k+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},f.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:R}}]},v={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:I,returnEnd:!0,contains:R,relevance:0}},E={className:"variable",variants:[{begin:"@"+_+"\\s*:",relevance:15},{begin:"@"+_}],starts:{end:"[;}]",returnEnd:!0,contains:P}},C={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:k,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,M,S("keyword","all\\b"),S("variable","@\\{"+_+"\\}"),{begin:"\\b("+s.join("|")+")\\b",className:"selector-tag"},f.CSS_NUMBER_MODE,S("selector-tag",k,0),S("selector-id","#"+k),S("selector-class","\\."+k,0),S("selector-tag","&",0),f.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+i.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+o.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:P},{begin:"!important"},f.FUNCTION_DISPATCH]},A={begin:_+`:(:)?(${p.join("|")})`,returnBegin:!0,contains:[C]};return L.push(c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,v,E,A,$,C,M,f.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:L}}return Ar=l,Ar}var xr,zu;function wk(){if(zu)return xr;zu=1;function e(t){const n="\\[=*\\[",s="\\]=*\\]",a={begin:n,end:s,contains:["self"]},i=[t.COMMENT("--(?!"+n+")","$"),t.COMMENT("--"+n,s,{contains:[a],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:t.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[t.inherit(t.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:i}].concat(i)},t.C_NUMBER_MODE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,{className:"string",begin:n,end:s,contains:[a],relevance:5}])}}return xr=e,xr}var Nr,Ku;function Sk(){if(Ku)return Nr;Ku=1;function e(t){const n={className:"variable",variants:[{begin:"\\$\\("+t.UNDERSCORE_IDENT_RE+"\\)",contains:[t.BACKSLASH_ESCAPE]},{begin:/\$[@%\{/,end:/\}/},u={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},l={scope:"variable",variants:[{begin:/\$\d/},{begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[u]},c={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},f=[t.BACKSLASH_ESCAPE,o,l],p=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],b=(L,R,x="\\1")=>{const S=x==="\\1"?x:n.concat(x,R);return n.concat(n.concat("(?:",L,")"),R,/(?:\\.|[^\\\/])*?/,S,/(?:\\.|[^\\\/])*?/,x,a)},_=(L,R,x)=>n.concat(n.concat("(?:",L,")"),R,/(?:\\.|[^\\\/])*?/,x,a),k=[l,t.HASH_COMMENT_MODE,t.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),r,{className:"string",contains:f,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[t.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},c,{begin:"(\\/\\/|"+t.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[t.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:b("s|tr|y",n.either(...p,{capture:!0}))},{begin:b("s|tr|y","\\(","\\)")},{begin:b("s|tr|y","\\[","\\]")},{begin:b("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:_("(?:m|qr)?",/\//,/\//)},{begin:_("m|qr",n.either(...p,{capture:!0}),/\1/)},{begin:_("m|qr",/\(/,/\)/)},{begin:_("m|qr",/\[/,/\]/)},{begin:_("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,u]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,u,c]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return o.contains=k,r.contains=k,{name:"Perl",aliases:["pl","pm"],keywords:i,contains:k}}return Cr=e,Cr}var Rr,Vu;function Tk(){if(Vu)return Rr;Vu=1;function e(t){const n={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},s=/[a-zA-Z@][a-zA-Z0-9_]*/,u={"variable.language":["this","super"],$pattern:s,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},l={$pattern:s,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:u,illegal:"/,end:/$/,illegal:"\\n"},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+l.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:l,contains:[t.UNDERSCORE_TITLE_MODE]},{begin:"\\."+t.UNDERSCORE_IDENT_RE,relevance:0}]}}return Rr=e,Rr}var Ir,Wu;function Ak(){if(Wu)return Ir;Wu=1;function e(t){const n=t.regex,s=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,s),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,s),o=n.concat(/[A-Z]+/,s),r={scope:"variable",match:"\\$+"+a},u={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},l={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},c=t.inherit(t.APOS_STRING_MODE,{illegal:null}),f=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(l)}),p={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(l),"on:begin":(K,j)=>{j.data._beginMatch=K[1]||K[2]},"on:end":(K,j)=>{j.data._beginMatch!==K[1]&&j.ignoreMatch()}},b=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),_=`[ +]`,k={scope:"string",variants:[f,c,p,b]},L={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},R=["false","null","true"],x=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],S=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],O={keyword:x,literal:(K=>{const j=[];return K.forEach(Q=>{j.push(Q),Q.toLowerCase()===Q?j.push(Q.toUpperCase()):j.push(Q.toLowerCase())}),j})(R),built_in:S},P=K=>K.map(j=>j.replace(/\|\d+$/,"")),M={variants:[{match:[/new/,n.concat(_,"+"),n.concat("(?!",P(S).join("\\b|"),"\\b)"),i],scope:{1:"keyword",4:"title.class"}}]},$=n.concat(a,"\\b(?!\\()"),v={variants:[{match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{1:"title.class",3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},E={scope:"attr",match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},C={relevance:0,begin:/\(/,end:/\)/,keywords:O,contains:[E,r,v,t.C_BLOCK_COMMENT_MODE,k,L,M]},A={relevance:0,match:[/\b/,n.concat("(?!fn\\b|function\\b|",P(x).join("\\b|"),"|",P(S).join("\\b|"),"\\b)"),a,n.concat(_,"*"),n.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[C]};C.contains.push(A);const B=[E,v,t.C_BLOCK_COMMENT_MODE,k,L,M],z={begin:n.concat(/#\[\s*\\?/,n.either(i,o)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:R,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:R,keyword:["new","array"]},contains:["self",...B]},...B,{scope:"meta",variants:[{match:i},{match:o}]}]};return{case_insensitive:!1,keywords:O,contains:[z,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},u,{scope:"variable.language",match:/\$this\b/},r,A,v,{match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},M,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:O,contains:["self",z,r,v,t.C_BLOCK_COMMENT_MODE,k,L]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},k,L]}}return Ir=e,Ir}var Or,Yu;function xk(){if(Yu)return Or;Yu=1;function e(t){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return Or=e,Or}var Mr,ju;function Nk(){if(ju)return Mr;ju=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return Mr=e,Mr}var Lr,Zu;function Ck(){if(Zu)return Lr;Zu=1;function e(t){const n=t.regex,s=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],u={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},l={className:"meta",begin:/^(>>>|\.\.\.) /},c={className:"subst",begin:/\{/,end:/\}/,keywords:u,illegal:/#/},f={begin:/\{\{/,relevance:0},p={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,l],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,l],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,l,f,c]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,l,f,c]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,f,c]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,f,c]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",_=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,k=`\\b|${a.join("|")}`,L={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${_}))[eE][+-]?(${b})[jJ]?(?=${k})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${k})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${k})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${k})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${k})`},{begin:`\\b(${b})[jJ](?=${k})`}]},R={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:u,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},x={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:u,contains:["self",l,L,p,t.HASH_COMMENT_MODE]}]};return c.contains=[p,L,l],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:u,illegal:/(<\/|\?)|=>/,contains:[l,L,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},p,R,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,s],scope:{1:"keyword",3:"title.function"},contains:[x]},{variants:[{match:[/\bclass/,/\s+/,s,/\s*/,/\(\s*/,s,/\s*\)/]},{match:[/\bclass/,/\s+/,s]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[L,x,p]}]}}return Lr=e,Lr}var $r,Xu;function Rk(){if(Xu)return $r;Xu=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return $r=e,$r}var Dr,Qu;function Ik(){if(Qu)return Dr;Qu=1;function e(t){const n=t.regex,s=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,o=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:s,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:s},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[o,a]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"},match:[s,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:o},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return Dr=e,Dr}var Pr,Ju;function Ok(){if(Ju)return Pr;Ju=1;function e(t){const n=t.regex,s=/(r#)?/,a=n.concat(s,t.UNDERSCORE_IDENT_RE),i=n.concat(s,t.IDENT_RE),o={className:"title.function.invoke",relevance:0,begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,n.lookahead(/\s*\(/))},r="([ui](8|16|32|64|128|size)|f(32|64))?",u=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],l=["true","false","Some","None","Ok","Err"],c=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],f=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:t.IDENT_RE+"!?",type:f,keyword:u,literal:l,built_in:c},illegal:""},o]}}return Pr=e,Pr}var Br,ed;function Mk(){if(ed)return Br;ed=1;const e=l=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:l.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:l.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function u(l){const c=e(l),f=o,p=i,b="@[a-z-]+",_="and or not only",L={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[l.C_LINE_COMMENT_MODE,l.C_BLOCK_COMMENT_MODE,c.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},c.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+s.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+p.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+f.join("|")+")"},L,{begin:/\(/,end:/\)/,contains:[c.CSS_NUMBER_MODE]},c.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[c.BLOCK_COMMENT,L,c.HEXCOLOR,c.CSS_NUMBER_MODE,l.QUOTE_STRING_MODE,l.APOS_STRING_MODE,c.IMPORTANT,c.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:b,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:_,attribute:a.join(" ")},contains:[{begin:b,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},L,l.QUOTE_STRING_MODE,l.APOS_STRING_MODE,c.HEXCOLOR,c.CSS_NUMBER_MODE]},c.FUNCTION_DISPATCH]}}return Br=u,Br}var Fr,td;function Lk(){if(td)return Fr;td=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return Fr=e,Fr}var Ur,nd;function $k(){if(nd)return Ur;nd=1;function e(t){const n=t.regex,s=t.COMMENT("--","$"),a={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},i={begin:/"/,end:/"/,contains:[{match:/""/}]},o=["true","false","unknown"],r=["double precision","large object","with timezone","without timezone"],u=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],l=["add","asc","collation","desc","final","first","last","view"],c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],f=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],p=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],_=f,k=[...c,...l].filter(P=>!f.includes(P)),L={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},R={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},x={match:n.concat(/\b/,n.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function S(P){return n.concat(/\b/,n.either(...P.map(M=>M.replace(/\s+/,"\\s+"))),/\b/)}const I={scope:"keyword",match:S(b),relevance:0};function O(P,{exceptions:M,when:$}={}){const v=$;return M=M||[],P.map(E=>E.match(/\|\d+$/)||M.includes(E)?E:v(E)?`${E}|0`:E)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:O(k,{when:P=>P.length<3}),literal:o,type:u,built_in:p},contains:[{scope:"type",match:S(r)},I,x,L,a,i,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,s,R]}}return Ur=e,Ur}var Gr,sd;function Dk(){if(sd)return Gr;sd=1;function e($){return $?typeof $=="string"?$:$.source:null}function t($){return n("(?=",$,")")}function n(...$){return $.map(E=>e(E)).join("")}function s($){const v=$[$.length-1];return typeof v=="object"&&v.constructor===Object?($.splice($.length-1,1),v):{}}function a(...$){return"("+(s($).capture?"":"?:")+$.map(C=>e(C)).join("|")+")"}const i=$=>n(/\b/,$,/\w$/.test($)?/\b/:/\B/),o=["Protocol","Type"].map(i),r=["init","self"].map(i),u=["Any","Self"],l=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],c=["false","nil","true"],f=["assignment","associativity","higherThan","left","lowerThan","none","right"],p=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],_=a(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),k=a(_,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),L=n(_,k,"*"),R=a(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),x=a(R,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),S=n(R,x,"*"),I=n(/[A-Z]/,x,"*"),O=["attached","autoclosure",n(/convention\(/,a("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",n(/objc\(/,S,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],P=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function M($){const v={match:/\s+/,relevance:0},E=$.COMMENT("/\\*","\\*/",{contains:["self"]}),C=[$.C_LINE_COMMENT_MODE,E],A={match:[/\./,a(...o,...r)],className:{2:"keyword"}},B={match:n(/\./,a(...l)),relevance:0},z=l.filter(he=>typeof he=="string").concat(["_|0"]),K=l.filter(he=>typeof he!="string").concat(u).map(i),j={variants:[{className:"keyword",match:a(...K,...r)}]},Q={$pattern:a(/\b\w+/,/#\w+/),keyword:z.concat(p),literal:c},ce=[A,B,j],Be={match:n(/\./,a(...b)),relevance:0},Xe={className:"built_in",match:n(/\b/,a(...b),/(?=\()/)},De=[Be,Xe],J={match:/->/,relevance:0},le={className:"operator",relevance:0,variants:[{match:L},{match:`\\.(\\.|${k})+`}]},_e=[J,le],Me="([0-9]_*)+",Z="([0-9a-fA-F]_*)+",we={className:"number",relevance:0,variants:[{match:`\\b(${Me})(\\.(${Me}))?([eE][+-]?(${Me}))?\\b`},{match:`\\b0x(${Z})(\\.(${Z}))?([pP][+-]?(${Me}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},se=(he="")=>({className:"subst",variants:[{match:n(/\\/,he,/[0\\tnr"']/)},{match:n(/\\/,he,/u\{[0-9a-fA-F]{1,8}\}/)}]}),He=(he="")=>({className:"subst",match:n(/\\/,he,/[\t ]*(?:[\r\n]|\r\n)/)}),Ke=(he="")=>({className:"subst",label:"interpol",begin:n(/\\/,he,/\(/),end:/\)/}),at=(he="")=>({begin:n(he,/"""/),end:n(/"""/,he),contains:[se(he),He(he),Ke(he)]}),D=(he="")=>({begin:n(he,/"/),end:n(/"/,he),contains:[se(he),Ke(he)]}),U={className:"string",variants:[at(),at("#"),at("##"),at("###"),D(),D("#"),D("##"),D("###")]},q=[$.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[$.BACKSLASH_ESCAPE]}],Y={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:q},ne=he=>{const Dt=n(he,/\//),Pt=n(/\//,he);return{begin:Dt,end:Pt,contains:[...q,{scope:"comment",begin:`#(?!.*${Pt})`,end:/$/}]}},X={scope:"regexp",variants:[ne("###"),ne("##"),ne("#"),Y]},pe={match:n(/`/,S,/`/)},oe={className:"variable",match:/\$\d+/},ue={className:"variable",match:`\\$${x}+`},re=[pe,oe,ue],ye={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:P,contains:[..._e,we,U]}]}},ve={scope:"keyword",match:n(/@/,a(...O),t(a(/\(/,/\s+/)))},Re={scope:"meta",match:n(/@/,S)},Ne=[ye,ve,Re],Ie={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:n(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,x,"+")},{className:"type",match:I,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:n(/\s+&\s+/,t(I)),relevance:0}]},Ve={begin://,keywords:Q,contains:[...C,...ce,...Ne,J,Ie]};Ie.contains.push(Ve);const Qe={match:n(S,/\s*:/),keywords:"_|0",relevance:0},nt={begin:/\(/,end:/\)/,relevance:0,keywords:Q,contains:["self",Qe,...C,X,...ce,...De,..._e,we,U,...re,...Ne,Ie]},dt={begin://,keywords:"repeat each",contains:[...C,Ie]},Ot={begin:a(t(n(S,/\s*:/)),t(n(S,/\s+/,S,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:S}]},Ct={begin:/\(/,end:/\)/,keywords:Q,contains:[Ot,...C,...ce,..._e,we,U,...Ne,Ie,nt],endsParent:!0,illegal:/["']/},Jt={match:[/(func|macro)/,/\s+/,a(pe.match,S,L)],className:{1:"keyword",3:"title.function"},contains:[dt,Ct,v],illegal:[/\[/,/%/]},Vt={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[dt,Ct,v],illegal:/\[|%/},wt={match:[/operator/,/\s+/,L],className:{1:"keyword",3:"title"}},Rt={begin:[/precedencegroup/,/\s+/,I],className:{1:"keyword",3:"title"},contains:[Ie],keywords:[...f,...c],end:/}/},Cn={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},St={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},us={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,S,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:Q,contains:[dt,...ce,{begin:/:/,end:/\{/,keywords:Q,contains:[{scope:"title.class.inherited",match:I},...ce],relevance:0}]};for(const he of U.variants){const Dt=he.contains.find(Ae=>Ae.label==="interpol");Dt.keywords=Q;const Pt=[...ce,...De,..._e,we,U,...re];Dt.contains=[...Pt,{begin:/\(/,end:/\)/,contains:["self",...Pt]}]}return{name:"Swift",keywords:Q,contains:[...C,Jt,Vt,Cn,St,us,wt,Rt,{beginKeywords:"import",end:/$/,contains:[...C],relevance:0},X,...ce,...De,..._e,we,U,...re,...Ne,Ie,nt]}}return Gr=M,Gr}var Hr,ad;function Pk(){if(ad)return Hr;ad=1;function e(t){const n="true false yes no null",s="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},i={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},o={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},r={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,i]},u=t.inherit(r,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},_={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},k={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},L={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},R=[a,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+s},{className:"type",begin:"!<"+s+">"},{className:"type",begin:"!"+s},{className:"type",begin:"!!"+s},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},b,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},k,L,o,r],x=[...R];return x.pop(),x.push(u),_.contains=x,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:R}}return Hr=e,Hr}var zr,id;function Bk(){if(id)return zr;id=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],s=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],r=[].concat(i,s,a);function u(c){const f=c.regex,p=(se,{after:He})=>{const Ke="",end:""},k=/<[A-Za-z0-9\\._:-]+\s*\/>/,L={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(se,He)=>{const Ke=se[0].length+se.index,at=se.input[Ke];if(at==="<"||at===","){He.ignoreMatch();return}at===">"&&(p(se,{after:Ke})||He.ignoreMatch());let D;const U=se.input.substring(Ke);if(D=U.match(/^\s*=/)){He.ignoreMatch();return}if((D=U.match(/^\s+extends\s+/))&&D.index===0){He.ignoreMatch();return}}},R={$pattern:e,keyword:t,literal:n,built_in:r,"variable.language":o},x="[0-9](_?[0-9])*",S=`\\.(${x})`,I="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",O={className:"number",variants:[{begin:`(\\b(${I})((${S})|\\.)?|(${S}))[eE][+-]?(${x})\\b`},{begin:`\\b(${I})\\b((${S})\\b|\\.)?|(${S})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},P={className:"subst",begin:"\\$\\{",end:"\\}",keywords:R,contains:[]},M={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,P],subLanguage:"xml"}},$={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,P],subLanguage:"css"}},v={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,P],subLanguage:"graphql"}},E={className:"string",begin:"`",end:"`",contains:[c.BACKSLASH_ESCAPE,P]},A={className:"comment",variants:[c.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),c.C_BLOCK_COMMENT_MODE,c.C_LINE_COMMENT_MODE]},B=[c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,M,$,v,E,{match:/\$\d+/},O];P.contains=B.concat({begin:/\{/,end:/\}/,keywords:R,contains:["self"].concat(B)});const z=[].concat(A,P.contains),K=z.concat([{begin:/(\s*)\(/,end:/\)/,keywords:R,contains:["self"].concat(z)}]),j={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:R,contains:K},Q={variants:[{match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,f.concat(b,"(",f.concat(/\./,b),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},ce={relevance:0,match:f.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...s,...a]}},Be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Xe={variants:[{match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[j],illegal:/%/},De={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function J(se){return f.concat("(?!",se.join("|"),")")}const le={match:f.concat(/\b/,J([...i,"super","import"].map(se=>`${se}\\s*\\(`)),b,f.lookahead(/\s*\(/)),className:"title.function",relevance:0},_e={begin:f.concat(/\./,f.lookahead(f.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Me={match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},j]},Z="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+c.UNDERSCORE_IDENT_RE+")\\s*=>",we={match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,f.lookahead(Z)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[j]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:R,exports:{PARAMS_CONTAINS:K,CLASS_REFERENCE:ce},illegal:/#(?![$_A-z])/,contains:[c.SHEBANG({label:"shebang",binary:"node",relevance:5}),Be,c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,M,$,v,E,A,{match:/\$\d+/},O,ce,{scope:"attr",match:b+f.lookahead(":"),relevance:0},we,{begin:"("+c.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[A,c.REGEXP_MODE,{className:"function",begin:Z,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:c.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:R,contains:K}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:_.begin,end:_.end},{match:k},{begin:L.begin,"on:begin":L.isTrulyOpeningTag,end:L.end}],subLanguage:"xml",contains:[{begin:L.begin,end:L.end,skip:!0,contains:["self"]}]}]},Xe,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+c.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[j,c.inherit(c.TITLE_MODE,{begin:b,className:"title.function"})]},{match:/\.\.\./,relevance:0},_e,{match:"\\$"+b,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[j]},le,De,Q,Me,{match:/\$[(.]/}]}}function l(c){const f=c.regex,p=u(c),b=e,_=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],k={begin:[/namespace/,/\s+/,c.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},L={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:_},contains:[p.exports.CLASS_REFERENCE]},R={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},x=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],S={$pattern:e,keyword:t.concat(x),literal:n,built_in:r.concat(_),"variable.language":o},I={className:"meta",begin:"@"+b},O=(v,E,C)=>{const A=v.contains.findIndex(B=>B.label===E);if(A===-1)throw new Error("can not find mode to replace");v.contains.splice(A,1,C)};Object.assign(p.keywords,S),p.exports.PARAMS_CONTAINS.push(I);const P=p.contains.find(v=>v.scope==="attr"),M=Object.assign({},P,{match:f.concat(b,f.lookahead(/\s*\?:/))});p.exports.PARAMS_CONTAINS.push([p.exports.CLASS_REFERENCE,P,M]),p.contains=p.contains.concat([I,k,L,M]),O(p,"shebang",c.SHEBANG()),O(p,"use_strict",R);const $=p.contains.find(v=>v.label==="func.def");return $.relevance=0,Object.assign(p,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),p}return zr=l,zr}var Kr,od;function Fk(){if(od)return Kr;od=1;function e(t){const n=t.regex,s={className:"string",begin:/"(""|[^/n])"C\b/},a={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},i=/\d{1,2}\/\d{1,2}\/\d{4}/,o=/\d{4}-\d{1,2}-\d{1,2}/,r=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,u=/\d{1,2}(:\d{1,2}){1,2}/,l={className:"literal",variants:[{begin:n.concat(/# */,n.either(o,i),/ *#/)},{begin:n.concat(/# */,u,/ *#/)},{begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,n.either(o,i),/ +/,n.either(r,u),/ *#/)}]},c={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},f={className:"label",begin:/^\w+:/},p=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),b=t.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[s,a,l,c,f,p,b,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[b]}]}}return Kr=e,Kr}var qr,rd;function Uk(){if(rd)return qr;rd=1;function e(t){t.regex;const n=t.COMMENT(/\(;/,/;\)/);n.contains.push("self");const s=t.COMMENT(/;;/,/$/),a=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],i={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},o={className:"variable",begin:/\$[\w_]+/},r={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},u={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},l={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},c={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:a},contains:[s,n,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},o,r,i,t.QUOTE_STRING_MODE,l,c,u]}}return qr=e,qr}var Vr,ld;function Gk(){if(ld)return Vr;ld=1;var e=ak();return e.registerLanguage("xml",ik()),e.registerLanguage("bash",ok()),e.registerLanguage("c",rk()),e.registerLanguage("cpp",lk()),e.registerLanguage("csharp",ck()),e.registerLanguage("css",uk()),e.registerLanguage("markdown",dk()),e.registerLanguage("diff",fk()),e.registerLanguage("ruby",pk()),e.registerLanguage("go",gk()),e.registerLanguage("graphql",mk()),e.registerLanguage("ini",hk()),e.registerLanguage("java",vk()),e.registerLanguage("javascript",bk()),e.registerLanguage("json",_k()),e.registerLanguage("kotlin",yk()),e.registerLanguage("less",kk()),e.registerLanguage("lua",wk()),e.registerLanguage("makefile",Sk()),e.registerLanguage("perl",Ek()),e.registerLanguage("objectivec",Tk()),e.registerLanguage("php",Ak()),e.registerLanguage("php-template",xk()),e.registerLanguage("plaintext",Nk()),e.registerLanguage("python",Ck()),e.registerLanguage("python-repl",Rk()),e.registerLanguage("r",Ik()),e.registerLanguage("rust",Ok()),e.registerLanguage("scss",Mk()),e.registerLanguage("shell",Lk()),e.registerLanguage("sql",$k()),e.registerLanguage("swift",Dk()),e.registerLanguage("yaml",Pk()),e.registerLanguage("typescript",Bk()),e.registerLanguage("vbnet",Fk()),e.registerLanguage("wasm",Uk()),e.HighlightJS=e,e.default=e,Vr=e,Vr}var Hk=Gk();const Ta=sk(Hk);function zk(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"],contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:a.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}\\{]"}}function qk(e){const t=["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"],n="Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",s="-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",a={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},i=/\w[\w\d]*((-)[\w\d]+)*/,o={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},u={className:"literal",begin:/\$(null|true|false)\b/},l={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[o,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},c={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},f={className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]},p=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[f]}),b={className:"built_in",variants:[{begin:"(".concat(n,")+(-)[\\w\\d]+")}]},_={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},k={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:i,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},L={begin:/using\s/,end:/$/,returnBegin:!0,contains:[l,c,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},R={variants:[{className:"operator",begin:"(".concat(s,")\\b")},{className:"literal",begin:/(-){1,2}[\w\d-]+/,relevance:0}]},x={className:"selector-tag",begin:/@\B/,relevance:0},S={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(a.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},I=[S,p,o,e.NUMBER_MODE,l,c,b,r,u,x],O={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",I,{begin:"("+t.join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return S.contains.unshift(O),{name:"PowerShell",aliases:["pwsh","ps","ps1"],case_insensitive:!0,keywords:a,contains:I.concat(_,k,L,R,O)}}function Vk(e){const t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},n={className:"subst",variants:[{begin:/\$\{/,end:/\}/}],keywords:"true false null this is new super"},s={className:"number",relevance:0,variants:[{match:/\b[0-9][0-9_]*(\.[0-9][0-9_]*)?([eE][+-]?[0-9][0-9_]*)?\b/},{match:/\b0[xX][0-9A-Fa-f][0-9A-Fa-f_]*\b/}]},a={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"""',end:'"""',contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]}]};n.contains=[s,a];const i=["Comparable","DateTime","Duration","Function","Iterable","Iterator","List","Map","Match","Object","Pattern","RegExp","Set","Stopwatch","String","StringBuffer","StringSink","Symbol","Type","Uri","bool","double","int","num","Element","ElementList"],o=i.map(l=>`${l}?`);return{name:"Dart",keywords:{keyword:["abstract","as","assert","async","await","base","break","case","catch","class","const","continue","covariant","default","deferred","do","dynamic","else","enum","export","extends","extension","external","factory","false","final","finally","for","Function","get","hide","if","implements","import","in","interface","is","late","library","mixin","new","null","on","operator","part","required","rethrow","return","sealed","set","show","static","super","switch","sync","this","throw","true","try","typedef","var","void","when","while","with","yield"],built_in:i.concat(o).concat(["Never","Null","dynamic","print","document","querySelector","querySelectorAll","window"]),$pattern:/[A-Za-z][A-Za-z0-9_]*\??/},contains:[a,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{subLanguage:"markdown",relevance:0}),e.COMMENT(/\/{3,} ?/,/$/,{contains:[{subLanguage:"markdown",begin:".",end:"$",relevance:0}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},s,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}function Wk(e){const t=e.regex,n={className:"meta",begin:"@[A-Za-z]+"},s={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:/\$\{/,end:/\}/}]},a={className:"string",variants:[{begin:'"""',end:'"""'},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,s]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[s],relevance:10}]},i={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},o={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},r={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o]},u={className:"function",beginKeywords:"def",end:t.lookahead(/[:={\[(\n;]/),contains:[o]},l={begin:[/^\s*/,"extension",/\s+(?=[[(])/],beginScope:{2:"keyword"}},c={begin:[/^\s*/,/end/,/\s+/,/(extension\b)?/],beginScope:{2:"keyword",4:"keyword"}},f=[{match:/\.inline\b/},{begin:/\binline(?=\s)/,keywords:"inline"}],p={begin:[/\(\s*/,/using/,/\s+(?!\))/],beginScope:{2:"keyword"}};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent"},contains:[{begin:["//>",/\s+/,/using/,/\s+/,/\S+/],beginScope:{1:"comment",3:"keyword",5:"type"},end:/$/,contains:[{className:"string",begin:/\S+/}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,u,r,e.C_NUMBER_MODE,l,c,...f,p,n]}}function Yk(e){const t=e.regex,n="[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?",s="[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",o={$pattern:n,keyword:["after","alias","and","case","catch","cond","defstruct","defguard","do","else","end","fn","for","if","import","in","not","or","quote","raise","receive","require","reraise","rescue","try","unless","unquote","unquote_splicing","use","when","with|0"],literal:["false","nil","true"]},r={className:"subst",begin:/#\{/,end:/\}/,keywords:o},u={className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[0-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},c={match:/\\[\s\S]/,scope:"char.escape",relevance:0},f=`[/|([{<"']`,p=[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}],b=O=>({scope:"char.escape",begin:t.concat(/\\/,O),relevance:0}),_={className:"string",begin:"~[a-z](?="+f+")",contains:p.map(O=>e.inherit(O,{contains:[b(O.end),c,r]}))},k={className:"string",begin:"~[A-Z](?="+f+")",contains:p.map(O=>e.inherit(O,{contains:[b(O.end)]}))},L={className:"regex",variants:[{begin:"~r(?="+f+")",contains:p.map(O=>e.inherit(O,{end:t.concat(O.end,/[uismxfU]{0,7}/),contains:[b(O.end),c,r]}))},{begin:"~R(?="+f+")",contains:p.map(O=>e.inherit(O,{end:t.concat(O.end,/[uismxfU]{0,7}/),contains:[b(O.end)]}))}]},R={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},x={className:"function",beginKeywords:"def defp defmacro defmacrop",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},S=e.inherit(x,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),I=[R,L,k,_,e.HASH_COMMENT_MODE,S,x,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[R,{begin:s}],relevance:0},{className:"symbol",begin:n+":(?!:)",relevance:0},{className:"title.class",begin:/(\b[A-Z][a-zA-Z0-9_]+)/,relevance:0},u,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))"}];return r.contains=I,{name:"Elixir",aliases:["ex","exs"],keywords:o,contains:I}}function jk(e){const t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",s={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor maybe else",literal:"false true"},a=e.COMMENT("%","$"),i={className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},r={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},u={begin:/\{/,end:/\}/,relevance:0},l={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},c={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},f={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:/\{/,end:/\}/,relevance:0}]},p={scope:"string",match:/\$(\\([^0-9]|[0-9]{1,3}|)|.)/},b={scope:"string",match:/"""("*)(?!")[\s\S]*?"""\1/},_={scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{match:/~\w?"""("*)(?!")[\s\S]*?"""\1/},{begin:/~\w?\(/,end:/\)/},{begin:/~\w?\[/,end:/\]/},{begin:/~\w?{/,end:/}/},{begin:/~\w?/},{begin:/~\w?\//,end:/\//},{begin:/~\w?\|/,end:/\|/},{begin:/~\w?'/,end:/'/},{begin:/~\w?"/,end:/"/},{begin:/~\w?`/,end:/`/},{begin:/~\w?#/,end:/#/}]},k={beginKeywords:"fun receive if try case maybe",end:"end",keywords:s};k.contains=[a,o,e.inherit(e.APOS_STRING_MODE,{className:""}),k,r,_,b,e.QUOTE_STRING_MODE,i,u,l,c,f,p];const L=[a,o,k,r,_,b,e.QUOTE_STRING_MODE,i,u,l,c,f,p];r.contains[1].contains=L,u.contains=L,f.contains[1].contains=L;const R=["-module","-record","-undef","-export","-ifdef","-ifndef","-author","-copyright","-doc","-moduledoc","-vsn","-import","-include","-include_lib","-compile","-define","-else","-endif","-file","-behaviour","-behavior","-spec","-on_load","-nifs"],x={className:"params",begin:"\\(",end:"\\)",contains:L};return{name:"Erlang",aliases:["erl"],keywords:s,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[x,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:s,contains:L}},a,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,keywords:{$pattern:"-"+e.IDENT_RE,keyword:R.map(S=>`${S}|1.5`).join(" ")},contains:[x,_,b,e.QUOTE_STRING_MODE]},i,_,b,e.QUOTE_STRING_MODE,f,l,c,u,p,{begin:/\.$/}]}}function Zk(e){const t="([0-9]_*)+",n="([0-9a-fA-F]_*)+",s="([01]_*)+",a="([0-7]_*)+",u="([!#$%&*+.\\/<=>?@\\\\^~-]|(?!([(),;\\[\\]`|{}]|[_:\"']))(\\p{S}|\\p{P}))",l={variants:[e.COMMENT("--+","$"),e.COMMENT(/\{-/,/-\}/,{contains:["self"]})]},c={className:"meta",begin:/\{-#/,end:/#-\}/},f={className:"meta",begin:"^#",end:"$"},p={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},b={begin:"\\(",end:"\\)",illegal:'"',contains:[c,f,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),l]},_={begin:/\{/,end:/\}/,contains:b.contains},k={className:"number",relevance:0,variants:[{match:`\\b(${t})(\\.(${t}))?([eE][+-]?(${t}))?\\b`},{match:`\\b0[xX]_*(${n})(\\.(${n}))?([pP][+-]?(${t}))?\\b`},{match:`\\b0[oO](${a})\\b`},{match:`\\b0[bB](${s})\\b`}]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",unicodeRegex:!0,contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[b,l],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[b,l],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[p,b,l]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[c,p,b,_,l]},{beginKeywords:"default",end:"$",contains:[p,b,l]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,l]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[p,e.QUOTE_STRING_MODE,l]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},c,f,{scope:"string",begin:/'(?=\\?.')/,end:/'/,contains:[{scope:"char.escape",match:/\\./}]},e.QUOTE_STRING_MODE,k,p,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),{begin:`(?!-)${u}--+|--+(?!-)${u}`},l,{begin:"->|<-"}]}}function Xk(e){const t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",i={$pattern:t,keyword:["baremodule","begin","break","catch","ccall","const","continue","do","else","elseif","end","export","false","finally","for","function","global","if","import","in","isa","let","local","macro","module","quote","return","true","try","using","where","while"],literal:["ARGS","C_NULL","DEPOT_PATH","ENDIAN_BOM","ENV","Inf","Inf16","Inf32","Inf64","InsertionSort","LOAD_PATH","MergeSort","NaN","NaN16","NaN32","NaN64","PROGRAM_FILE","QuickSort","RoundDown","RoundFromZero","RoundNearest","RoundNearestTiesAway","RoundNearestTiesUp","RoundToZero","RoundUp","VERSION|0","devnull","false","im","missing","nothing","pi","stderr","stdin","stdout","true","undef","π","ℯ"],built_in:["AbstractArray","AbstractChannel","AbstractChar","AbstractDict","AbstractDisplay","AbstractFloat","AbstractIrrational","AbstractMatrix","AbstractRange","AbstractSet","AbstractString","AbstractUnitRange","AbstractVecOrMat","AbstractVector","Any","ArgumentError","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError","LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","ProcessFailedException","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","TaskFailedException","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","UndefKeywordError","UndefRefError","UndefVarError","Union","UnionAll","UnitRange","Unsigned","Val","Vararg","VecElement","VecOrMat","Vector","VersionNumber","WeakKeyDict","WeakRef"]},o={keywords:i,illegal:/<\//},r={className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},u={className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},l={className:"subst",begin:/\$\(/,end:/\)/,keywords:i},c={className:"variable",begin:"\\$"+t},f={className:"string",contains:[e.BACKSLASH_ESCAPE,l,c],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},p={className:"string",contains:[e.BACKSLASH_ESCAPE,l,c],begin:"`",end:"`"},b={className:"meta",begin:"@"+t},_={className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]};return o.name="Julia",o.contains=[r,u,f,p,b,_,e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],l.contains=o.contains,o}function Wr(e,t={}){return t.variants=e,t}function Qk(e){const t=e.regex,n="[A-Za-z0-9_$]+",s=Wr([e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]})]),a={className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[e.BACKSLASH_ESCAPE]},i=Wr([e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]),o=Wr([{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:"\\$/",end:"/\\$",relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE],{className:"string"}),r={match:[/(class|interface|trait|enum|record|extends|implements)/,/\s+/,e.UNDERSCORE_IDENT_RE],scope:{1:"keyword",3:"title.class"}};return{name:"Groovy",keywords:{"variable.language":"this super",literal:"true false null",type:["byte","short","char","int","long","boolean","float","double","void"],keyword:["def","as","in","assert","trait","abstract","static","volatile","transient","public","private","protected","synchronized","final","class","interface","enum","if","else","for","while","switch","case","break","default","continue","throw","throws","try","catch","finally","implements","extends","new","import","package","return","instanceof","var"]},contains:[e.SHEBANG({binary:"groovy",relevance:10}),s,o,a,i,r,{className:"meta",begin:"@[A-Za-z]+",relevance:0},{className:"attr",begin:n+"[ ]*:",relevance:0},{begin:/\?/,end:/:/,relevance:0,contains:[s,o,a,i,"self"]},{className:"symbol",begin:"^[ ]*"+t.lookahead(n+":"),excludeBegin:!0,end:n+":",relevance:0}],illegal:/#|<\//}}function Jk(e){return{name:"CMake",aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:/\$\{/,end:/\}/},e.COMMENT(/#\[\[/,/]]/),e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}function ew(e){const t=["package","import","option","optional","required","repeated","group","oneof"],n=["double","float","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","bool","string","bytes"],s={match:[/(message|enum|service)\s+/,e.IDENT_RE],scope:{1:"keyword",2:"title.class"}};return{name:"Protocol Buffers",aliases:["proto"],keywords:{keyword:t,type:n,literal:["true","false"]},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"function",beginKeywords:"rpc",end:/[{;]/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}function tw(e){const t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"literal",begin:"false|true|PI|undef"},s={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"meta",keywords:{keyword:"include use"},begin:"include|use <",end:">"},o={className:"params",begin:"\\(",end:"\\)",contains:["self",s,a,t,n]},r={begin:"[*!#%]",relevance:0},u={className:"function",beginKeywords:"module function",end:/=|\{/,contains:[o,e.UNDERSCORE_TITLE_MODE]};return{name:"OpenSCAD",aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,i,a,t,r,u]}}const nw={dockerfile:zk,nginx:Kk,powershell:qk,dart:Vk,scala:Wk,elixir:Yk,erlang:jk,haskell:Zk,julia:Xk,groovy:Qk,cmake:Jk,protobuf:ew,openscad:tw};for(const[e,t]of Object.entries(nw))Ta.getLanguage(e)||Ta.registerLanguage(e,t);const sw={bash:"bash",c:"c",cjs:"javascript",conf:"ini",cpp:"cpp",css:"css",diff:"diff",go:"go",h:"c",hpp:"cpp",htm:"xml",html:"xml",ini:"ini",java:"java",js:"javascript",json:"json",jsonl:"json",jsx:"javascript",kt:"kotlin",less:"less",mjs:"javascript",md:"markdown",patch:"diff",php:"php",py:"python",rb:"ruby",rs:"rust",scad:"openscad",scss:"scss",sh:"bash",sql:"sql",svg:"xml",swift:"swift",toml:"ini",ts:"typescript",tsx:"typescript",xml:"xml",yaml:"yaml",yml:"yaml",zsh:"bash"},aw={html:"xml",svg:"xml",stl:"openscad"};function Qp(e){return e&&Ta.getLanguage(e)?e:"plaintext"}function iw(e){const t=String(e||"").split("?")[0].split("#")[0];return t.includes(".")?t.split(".").pop().toLowerCase():""}function cc(e={}){const t=e.source_filename||e.filename||e.url||"",n=sw[iw(t)]||aw[e.content_type];return Qp(n)}function _i(e,t){return Ta.highlight(e||"",{language:Qp(t)}).value}const ow={key:0,class:"modal a-show","aria-hidden":"false"},rw={class:"modal-header"},lw={class:"modal-title"},cw={class:"lightbox-tools"},uw=["href","title","aria-label"],dw=["aria-label"],fw={class:"modal-panel lightbox-panel"},pw={class:"modal-body"},gw=["src","alt"],mw={key:1,class:"lightbox-error"},hw=["src"],vw={key:4,class:"lightbox-text"},bw={key:0,class:"lightbox-state"},_w={key:1,class:"lightbox-state lightbox-state-error"},yw={class:"lightbox-code"},kw=["innerHTML"],ww={key:0,class:"lightbox-note"},Sw=["href"],Ew=["src"],Yr=1e6,Jp={__name:"ContentLightbox",setup(e){const{item:t,close:n}=Ca(),s=F(null),a=F(!1),i=W(()=>{var S;const x=((S=t.value)==null?void 0:S.type)||"image";return["image","video","audio","text"].includes(x)?x:"frame"}),o=W(()=>t.value?rc(lc(t.value.type),t.value.url):""),r=W(()=>t.value?t.value.title?t.value.title:t.value.type==="image"?m("ui.photo"):m("ui.preview"):""),u=F(""),l=F(!1),c=F(""),f=F(!1);let p=0;const b=W(()=>{var x;return cc({url:((x=t.value)==null?void 0:x.url)||""})}),_=W(()=>_i(u.value,b.value)),k=`${Math.round(Yr/1024)} KB`;async function L(x){const S=++p;l.value=!0,c.value="",u.value="",f.value=!1;try{const I=await fetch(x);if(!I.ok)throw new Error(`HTTP ${I.status}`);const O=await I.text();if(S!==p)return;f.value=O.length>Yr,u.value=f.value?O.slice(0,Yr):O}catch(I){if(S!==p)return;c.value=m("artifacts.sourceFailed",{error:(I==null?void 0:I.message)||I})}finally{S===p&&(l.value=!1)}}function R(x){x.key==="Escape"&&(x.preventDefault(),n())}return Ge(t,x=>{document.body.style.overflow=x?"hidden":"",a.value=!1,p++,l.value=!1,c.value="",u.value="",f.value=!1,x?(window.addEventListener("keydown",R),xt(()=>{var S,I;return(I=(S=s.value)==null?void 0:S.focus)==null?void 0:I.call(S)}),x.type==="text"&&L(x.url)):window.removeEventListener("keydown",R)},{immediate:!0}),bn(()=>{window.removeEventListener("keydown",R),document.body.style.overflow=""}),(x,S)=>(h(),ke(Ao,{to:"body"},[d(t)?(h(),w("div",ow,[g("div",{class:"modal-backdrop",onClick:S[0]||(S[0]=(...I)=>d(n)&&d(n)(...I))}),g("div",{ref_key:"dialogRef",ref:s,class:Ce(["modal-dialog lightbox-dialog",`is-${i.value}`]),role:"dialog","aria-modal":"true",tabindex:"-1"},[g("header",rw,[g("h4",lw,y(r.value),1),g("div",cw,[g("a",{class:"btn-icon",href:d(t).url,title:d(m)("common.download"),"aria-label":d(m)("common.download"),download:""},[...S[3]||(S[3]=[g("i",{class:"ph ph-download-simple"},null,-1)])],8,uw),g("button",{class:"btn-icon modal-close",type:"button","aria-label":d(m)("common.close"),onClick:S[1]||(S[1]=(...I)=>d(n)&&d(n)(...I))},[...S[4]||(S[4]=[g("i",{class:"ph ph-x"},null,-1)])],8,dw)])]),g("div",fw,[g("div",pw,[i.value==="image"&&!a.value?(h(),w("img",{key:0,src:d(t).url,alt:r.value,class:"lightbox-img",onError:S[2]||(S[2]=I=>a.value=!0)},null,40,gw)):i.value==="image"?(h(),w("div",mw,[S[5]||(S[5]=g("i",{class:"ph ph-image-broken"},null,-1)),g("span",null,y(d(m)("ui.loadImageFailed")),1)])):i.value==="video"?(h(),w("video",{key:2,src:d(t).url,class:"lightbox-video",controls:"",playsinline:""},null,8,hw)):i.value==="audio"?(h(),ke(oc,{key:3,src:d(t).url,title:r.value},null,8,["src","title"])):i.value==="text"?(h(),w("div",vw,[l.value?(h(),w("div",bw,[S[6]||(S[6]=g("span",{class:"spinner"},null,-1)),g("span",null,y(d(m)("artifacts.loadingPreview")),1)])):c.value?(h(),w("pre",_w,y(c.value),1)):(h(),w(fe,{key:2},[g("pre",yw,[g("code",{class:Ce(["hljs",`language-${b.value}`]),innerHTML:_.value},null,10,kw)]),f.value?(h(),w("div",ww,[ae(y(d(m)("artifacts.textPreviewLimited",{size:k}))+" ",1),g("a",{href:d(t).url,download:""},y(d(m)("common.download")),9,Sw)])):V("",!0)],64))])):(h(),w("iframe",{key:5,src:o.value,class:"lightbox-frame",sandbox:"allow-scripts allow-same-origin"},null,8,Ew))])])],2)])):V("",!0)]))}},Tw=Object.freeze(Object.defineProperty({__proto__:null,default:Jp},Symbol.toStringTag,{value:"Module"})),Pi=F("");function eg(){function e(n){Pi.value=n}function t(){const n=Pi.value;return Pi.value="",n}return{pendingQuote:Pi,requestQuote:e,consumeQuote:t}}const Aw={__name:"SelectionToolbar",setup(e){const{requestQuote:t}=eg(),n=F(!1),s=F({x:0,y:0});let a="";function i(){const c=window.getSelection();if(!c||c.isCollapsed||!c.toString().trim())return null;const f=c.getRangeAt(0),p=f.commonAncestorContainer;return(p.nodeType===Node.TEXT_NODE?p.parentElement:p).closest(".msg-assistant-content")?{text:c.toString().trim(),range:f}:null}function o(){const c=window.getSelection();if(!c||c.isCollapsed||!c.rangeCount){n.value=!1;return}const p=c.getRangeAt(0).getBoundingClientRect();if(!p.width&&!p.height){n.value=!1;return}s.value={x:Math.round(p.left+p.width/2),y:Math.round(p.top-44)}}function r(){setTimeout(()=>{const c=i();if(!c){n.value=!1;return}a=c.text,o(),n.value=!0},10)}function u(){const c=window.getSelection();(!c||c.isCollapsed)&&(n.value=!1)}function l(){var c;a&&(t(a),(c=window.getSelection())==null||c.removeAllRanges(),n.value=!1)}return $t(()=>{document.addEventListener("mouseup",r),document.addEventListener("selectionchange",u),document.addEventListener("scroll",o,!0)}),Nn(()=>{document.removeEventListener("mouseup",r),document.removeEventListener("selectionchange",u),document.removeEventListener("scroll",o,!0)}),(c,f)=>{const p=et("GnButton");return h(),ke(Ao,{to:"body"},[n.value?(h(),w("div",{key:0,class:"selection-toolbar",style:bs({top:s.value.y+"px",left:s.value.x+"px"}),onMousedown:f[0]||(f[0]=Bt(()=>{},["prevent"]))},[ee(p,{variant:"warning",size:"sm",icon:"ph ph-quotes",style:{color:"var(--gn-color-black)"},title:d(m)("ui.replyToSelection"),onClick:l},{default:ge(()=>[ae(y(d(m)("ui.reply")),1)]),_:1},8,["title"])],36)):V("",!0)])}}},tg=Ye(Aw,[["__scopeId","data-v-7fdc7530"]]),xw=Object.freeze(Object.defineProperty({__proto__:null,default:tg},Symbol.toStringTag,{value:"Module"}));function ng(e){return Zp(e==null?void 0:e.content_type)||jp((e==null?void 0:e.filename)||(e==null?void 0:e.path)||(e==null?void 0:e.url)||"")}const jr=1e6;function Nw(e){const{open:t,openContent:n}=Ca(),s=F(null),a=F(null),i=F(!1),o=F(""),r=F(!1),u=F(""),l=F(""),c=F(!1),f=F(""),p=F(!1),b=`${Math.round(jr/1024)} KB`,_=W(()=>e.artifacts),k=W(()=>_.value.find(Z=>O(Z)===s.value)||_.value[0]||null),L=W(()=>k.value?cc(k.value):"plaintext"),R=W(()=>_i(o.value,L.value)),x=W(()=>_i(l.value,L.value));function S(Z){t(Z)}async function I(Z){if(!(!Z||c.value||l.value)){c.value=!0,f.value="";try{const we=await fetch(C(Z));if(!we.ok)throw new Error(`HTTP ${we.status}`);const se=await we.text();p.value=se.length>jr,l.value=p.value?se.slice(0,jr):se}catch(we){f.value=m("artifacts.sourceFailed",{error:(we==null?void 0:we.message)||we})}finally{c.value=!1}}}Ge(k,Z=>{l.value="",f.value="",p.value=!1,Z&&!i.value&&M(Z)==="text"&&I(Z)},{immediate:!0}),Ge(_,Z=>{if(!Z.length){s.value=null;return}(!s.value||!Z.some(we=>O(we)===s.value))&&(s.value=O(Z[0]))},{immediate:!0});function O(Z){return Z.id||Z.filename}function P(Z){s.value=O(Z),i.value=!1,o.value="",u.value=""}function M(Z){return ng(Z)}function $(Z){return bi[M(Z)]||bi.unknown}function v(Z){const we=M(Z).toUpperCase(),se=Z.updated_at||Z.created_at;return se?`${we} · ${E(se)}`:we}function E(Z){const we=new Date(Z);return Number.isNaN(we.getTime())?Z:we.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"})}function C(Z){return Xy(Z.url,Z.updated_at||Z.created_at||"")}function A(Z,we){return rc(we,C(Z))}function B(Z){const we=M(Z);return Al(we)?A(Z,lc(we)):Ys(C(Z))}function z(Z){return Xp(M(Z))}function K(Z){!Z||!z(Z)||n({url:Ys(C(Z)),type:M(Z),title:Z.title||Z.filename})}function j(Z){return Ws(Z.url)}function Q(Z){const we=M(Z);return["html","svg"].includes(we)?j(Z):["stl","model"].includes(we)&&Z.source_url?Ws(Z.source_url):""}function ce(Z){return!!Q(Z)}async function Be(Z){i.value=!i.value,i.value&&await Xe(Z)}async function Xe(Z){const we=Q(Z);if(!(!we||o.value||r.value)){r.value=!0,u.value="";try{const se=await fetch(we);if(!se.ok)throw new Error(`HTTP ${se.status}`);o.value=await se.text()}catch(se){u.value=m("artifacts.sourceFailed",{error:(se==null?void 0:se.message)||se})}finally{r.value=!1}}}function De(Z){return["stl","model"].includes(M(Z))?B(Z):Ys(C(Z))}function J(Z){const we=Ws(Z.download_url||Z.url);return Z.download_url||!we?we:`${we}${we.includes("?")?"&":"?"}download=1`}function le(Z){return Al(M(Z))}async function _e(Z){try{await navigator.clipboard.writeText(De(Z)),a.value=O(Z),setTimeout(()=>{a.value===O(Z)&&(a.value=null)},1500)}catch{}}function Me(Z){return a.value===O(Z)?"ph ph-check":"ph ph-copy"}return{selectedKey:s,copiedKey:a,showSource:i,sourceText:o,sourceLoading:r,sourceError:u,textContent:l,textLoading:c,textError:f,textTruncated:p,textPreviewLimitLabel:b,artifacts:_,selected:k,selectedSourceLanguage:L,highlightedSource:R,highlightedText:x,openViewedImage:S,artifactKey:O,selectArtifact:P,contentType:M,iconClass:$,labelFor:v,versionedUrl:C,previewUrl:B,canFullscreen:z,openFullscreen:K,rawUrl:j,hasSource:ce,toggleSource:Be,downloadUrl:J,isFramePreview:le,copyLink:_e,copyIcon:Me}}const Cw={terminal:"ph ph-terminal-window",ssh_exec:"ph ph-plugs-connected",spawn_agent:"ph ph-user-circle-gear",code_exec:"ph ph-code",peer:"ph ph-chats-circle"};function Rw(e){const t=F(null),n=W(()=>{const S=Object.values(e.backgroundTasks).map(P=>({kind:"task",key:P.taskId,running:P.status==="running",startedAt:P.startedAt??"",task:P})),I=Object.values(e.terminals).filter(P=>!P.closed||P.output).map(P=>({kind:"terminal",key:P.name,running:P.status==="busy"&&!P.closed,startedAt:"",terminal:P}));return[...S,...I].sort((P,M)=>P.running!==M.running?P.running?-1:1:String(M.startedAt??"").localeCompare(String(P.startedAt??"")))}),s=W(()=>n.value.filter(S=>S.running).length),a=W(()=>{var S;return((S=t.value)==null?void 0:S.kind)==="task"&&e.backgroundTasks[t.value.key]||null}),i=W(()=>{var S;return((S=t.value)==null?void 0:S.kind)==="terminal"&&e.terminals[t.value.key]||null});Ge(()=>[a.value,i.value],([S,I])=>{t.value&&!S&&!I&&(t.value=null)}),Ge(()=>e.currentId,()=>{t.value=null});function o(S){var O,P;const I={kind:S.kind,key:S.key};t.value=((O=t.value)==null?void 0:O.kind)===I.kind&&((P=t.value)==null?void 0:P.key)===I.key?null:I}function r(S){return!!(t.value&&t.value.kind===S.kind&&t.value.key===S.key)}function u(S){return S.kind==="terminal"?"ph ph-terminal-window":Cw[S.task.tool]||"ph ph-arrows-out"}function l(S){return S.kind==="terminal"?S.terminal.name:S.task.argsSummary||S.task.tool}function c(S){return S.kind==="terminal"?S.terminal.description||S.terminal.command||m("artifacts.terminal"):m("artifacts.toolAndAge",{tool:S.task.tool,age:b(S.task)})}function f(S){return S.kind==="terminal"?S.terminal.closed?"badge-error":S.terminal.status==="busy"?"badge-success":"badge-secondary":k(S.task)}function p(S){return S.kind==="terminal"?S.terminal.closed?m("artifacts.statusClosed"):m(S.terminal.status==="busy"?"artifacts.statusBusy":"artifacts.statusIdle"):L(S.task)}function b(S){const I=S.finishedAt??S.startedAt;if(!I)return"";let O=(Date.now()-new Date(I).getTime())/1e3;return!Number.isFinite(O)||O<0?m("common.justNow"):O<60?`${Math.round(O)}s`:O<3600?`${Math.floor(O/60)}m`:O<86400?`${Math.floor(O/3600)}h`:`${Math.floor(O/86400)}d`}function _(S){return S.status==="running"?"status-busy":S.status==="completed"?"status-idle":"status-closed"}function k(S){return S.status==="running"?"badge-success":S.status==="completed"?"badge-secondary":"badge-error"}function L(S){return{running:m("artifacts.statusRunning"),completed:m("artifacts.statusDone"),failed:m("artifacts.statusFailed"),cancelled:m("artifacts.statusStopped")}[S.status]||S.status}function R(S){if(!S)return m("common.notAvailable");const I=new Date(S);return Number.isNaN(I.getTime())?S:I.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function x(S){if(S<60)return`${Math.round(S)}s`;if(S<3600)return`${Math.floor(S/60)}m ${Math.round(S%60)}s`;const I=Math.floor(S/3600),O=Math.floor(S%3600/60);return`${I}h ${O}m`}return{selectedBg:t,backgroundsList:n,activeBackgroundCount:s,selectedTask:a,selectedTerminal:i,selectBackground:o,isBgSelected:r,backgroundIcon:u,backgroundTitle:l,backgroundMeta:c,backgroundBadgeClass:f,backgroundBadgeLabel:p,taskBadgeClass:_,taskBadgeLabel:L,formatTime:R,formatUptime:x}}const Iw=980,Ow=500,cd="navi:artifacts-drawer-width";function Mw(){const e=F(!1),t=F(typeof window>"u"?0:window.innerWidth),n=F(b()),s=W(()=>t.value>Iw),a=W(()=>s.value?{"--artifacts-width":`${u()}px`}:{});function i(){return Math.round(Math.min(600,t.value*.42))}function o(){return Math.max(i(),t.value-Ow)}function r(k){return Math.min(Math.max(Math.round(k),i()),o())}function u(){return r(n.value??i())}function l(){t.value=window.innerWidth,n.value!==null&&(n.value=u())}function c(k){s.value&&(k.preventDefault(),e.value=!0,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("pointermove",f),window.addEventListener("pointerup",p,{once:!0}))}function f(k){n.value=r(t.value-k.clientX)}function p(){e.value=!1,_(),document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("pointermove",f),window.removeEventListener("pointerup",p)}function b(){if(typeof window>"u")return null;try{const k=Number(window.localStorage.getItem(cd));return Number.isFinite(k)&&k>0?k:null}catch{return null}}function _(){if(!(typeof window>"u"||n.value===null))try{window.localStorage.setItem(cd,String(u()))}catch{}}return $t(()=>{window.addEventListener("resize",l)}),bn(()=>{window.removeEventListener("resize",l),window.removeEventListener("pointermove",f),window.removeEventListener("pointerup",p),e.value&&p()}),{isResizing:e,isDesktop:s,panelStyle:a,startResize:c}}const ud=80,Lw=120;function $w(e){const{openContent:t}=Ca(),n=F(!1);async function s(){if(!(n.value||!e.currentId)){n.value=!0;try{await e.fetchFiles(e.currentId)}finally{n.value=!1}}}const a=F(!1),i=F(0),o=F(!1),r=F(null),u=W(()=>({transform:`translateY(${Math.min(i.value,Lw)}px)`,opacity:a.value?Math.min(i.value/ud,1):0})),l=W(()=>n.value?m("common.refreshing"):o.value?m("common.releaseToRefresh"):m("common.pullToRefresh"));let c=0,f=0;function p(v){var C;const E=r.value;E&&(f=E.scrollTop||0,!(f>2)&&(c=((C=v.touches[0])==null?void 0:C.clientY)??0,a.value=!1,i.value=0,o.value=!1))}function b(v){var A;if(f>2||!c)return;const C=(((A=v.touches[0])==null?void 0:A.clientY)??0)-c;if(C<=0){a.value=!1;return}C>4&&v.preventDefault(),a.value=!0,i.value=C,o.value=C>=ud}function _(){o.value&&!n.value&&s(),a.value=!1,i.value=0,o.value=!1,c=0,f=0}const k=W(()=>e.files),L=W(()=>k.value.map(E=>{const C=E.path.split("/"),A=C[C.length-1],B=C.length-1;return{...E,name:A,depth:B}}));function R(v){return ng(v)}function x(v){var A;if(v.is_dir)return"ph ph-folder";const E=((A=v.name.split(".").pop())==null?void 0:A.toLowerCase())||"";return{js:"ph ph-file-js",ts:"ph ph-file-ts",py:"ph ph-file-py",html:"ph ph-file-html",css:"ph ph-file-css",json:"ph ph-file-code",md:"ph ph-file-text",txt:"ph ph-file-text",jpg:"ph ph-file-image",jpeg:"ph ph-file-image",png:"ph ph-file-image",gif:"ph ph-file-image",svg:"ph ph-file-image",webp:"ph ph-file-image",mp4:"ph ph-file-video",webm:"ph ph-file-video",mov:"ph ph-file-video",mp3:"ph ph-file-audio",wav:"ph ph-file-audio",ogg:"ph ph-file-audio",pdf:"ph ph-file-pdf",zip:"ph ph-file-zip",tar:"ph ph-file-zip",gz:"ph ph-file-zip",rar:"ph ph-file-zip"}[E]||"ph ph-file"}function S(v){if(v.is_dir)return m("artifacts.directory");const E=v.size;return E<1024?`${E} B`:E<1024*1024?`${(E/1024).toFixed(1)} KB`:`${(E/(1024*1024)).toFixed(1)} MB`}function I(v){return{paddingLeft:`${12+v.depth*16}px`}}function O(v){const E=e.currentId;return E?`/api/sessions/${E}/files/${encodeURIComponent(v)}?download=1`:"#"}function P(v){const E=e.currentId;return E?`/api/sessions/${E}/files/${encodeURIComponent(v)}`:"#"}function M(v){return!v||v.is_dir?!1:R(v)!=="unknown"}function $(v){if(!v||v.is_dir)return;const E=R(v);E!=="unknown"&&t({url:Ys(P(v.path)),type:E,title:v.name})}return{filesRefreshing:n,refreshFiles:s,filesPtrPulling:a,filesPtrOffset:i,filesPtrTriggered:o,filesListRef:r,filesPtrStyle:u,filesPtrLabel:l,onFilesTouchStart:p,onFilesTouchMove:b,onFilesTouchEnd:_,filesFlat:k,fileTree:L,fileIcon:x,fileMeta:S,fileIndent:I,fileDownloadUrl:O,canViewFile:M,openFileInViewer:$}}function xl(e){return e.replace(/[.,;:!?)\]}+]+$/,"")}function dd(e){try{const t=xl(e),n=new URL(t,window.location.origin),s=n.hostname.toLowerCase().replace(/^www\./,"");let a=n.pathname.toLowerCase();return a=a.replace(/\/$/,""),`${s}${a}`}catch{return xl(e).toLowerCase()}}function fd(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return e.split("/")[2]||e}}function pd(e,t,n=60){const s=Math.max(0,t-n),a=Math.min(e.length,t+n);let i=e.slice(s,a).replace(/\s+/g," ").trim();return s>0&&(i="…"+i),a{const a=new Set,i=[],o=[];for(let r=e.messages.length-1;r>=0;r--){const u=e.messages[r];if(u.role!=="assistant")continue;const l=u.text||"";let c;const f=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g;for(;(c=f.exec(l))!==null;){let p=c[2].trim();const b=dd(p);if(a.has(b))continue;a.add(b),i.push({url:p,text:c[1].trim(),snippet:pd(l,c.index),domain:fd(p)});const _=c[0].lastIndexOf(c[2]),k=c.index+_;o.push({start:k,end:k+c[2].length})}}for(let r=e.messages.length-1;r>=0;r--){const u=e.messages[r];if(u.role!=="assistant")continue;const l=u.text||"";let c;const f=/https?:\/\/[^\s<>"{}|\\^`[\]]+/g;for(;(c=f.exec(l))!==null;){let p=c[0].trim();p=xl(p);const b=dd(p);if(a.has(b))continue;const _=c.index,k=c.index+c[0].length;o.some(R=>_>=R.start&&k<=R.end)||(a.add(b),i.push({url:p,text:"",snippet:pd(l,c.index),domain:fd(p)}))}}return i});function n(){const a=t.value.map(i=>i.url);a.length&&navigator.clipboard.writeText(a.join(` +`)).catch(()=>{})}function s(){for(const a of t.value.slice(0,8))window.open(a.url,"_blank","noopener,noreferrer")}return{links:t,copyAllLinks:n,openAllLinks:s}}const Pw=["aria-label"],Bw=["title"],Fw={class:"artifacts-header"},Uw={class:"artifacts-tabs chip-group"},Gw=["aria-pressed"],Hw={class:"artifacts-tab-count"},zw=["aria-pressed"],Kw={class:"artifacts-tab-count"},qw=["aria-pressed"],Vw={class:"artifacts-tab-count"},Ww=["aria-pressed"],Yw={key:0,class:"viewed-images-group"},jw={class:"viewed-images-header"},Zw={class:"viewed-images-title"},Xw={class:"artifacts-tab-count"},Qw={class:"viewed-images-grid"},Jw=["src","alt","onClick"],eS={key:1,class:"artifacts-empty"},tS={class:"artifacts-list"},nS=["onClick"],sS={class:"artifact-icon"},aS={class:"artifact-info"},iS={class:"artifact-title"},oS={class:"artifact-meta"},rS={key:0,class:"artifact-detail"},lS={class:"artifact-detail-header"},cS={class:"artifact-detail-title"},uS={class:"artifact-detail-filename"},dS={class:"artifact-actions"},fS=["href","title","aria-label"],pS=["href","title","aria-label"],gS=["href","title","aria-label"],mS={class:"artifact-preview"},hS={key:0,class:"artifact-source"},vS={key:0,class:"artifact-source-state"},bS={key:1,class:"artifact-source-error"},_S={key:2,class:"artifact-source-code"},yS=["innerHTML"],kS=["src"],wS=["src","alt","title"],SS=["src"],ES=["src"],TS={key:5,class:"artifact-text"},AS={key:0,class:"artifact-source-state"},xS={key:1,class:"artifact-source-error"},NS={class:"artifact-source-code"},CS=["innerHTML"],RS={key:0,class:"artifact-text-note"},IS={key:6,class:"artifact-no-preview"},OS={key:0,class:"artifacts-empty"},MS={class:"artifacts-list links-list"},LS=["href"],$S={class:"artifact-info"},DS={class:"artifact-title"},PS={class:"artifact-meta"},BS={class:"link-detail"},FS={class:"link-detail-header"},US={class:"link-detail-count"},GS={class:"link-actions"},HS={class:"ptr-label"},zS={class:"files-toolbar"},KS={key:0,class:"artifacts-empty"},qS={class:"artifact-icon"},VS={class:"artifact-info"},WS={class:"artifact-title"},YS={class:"artifact-meta"},jS={key:0,class:"file-row-actions"},ZS=["href","title","aria-label"],XS=["title","aria-label","onClick"],QS={key:0,class:"artifacts-empty"},JS={class:"artifacts-list terminals-list"},eE=["onClick"],tE={class:"artifact-icon"},nE={class:"artifact-info"},sE={class:"artifact-title"},aE={class:"artifact-meta"},iE={key:0,class:"terminal-detail"},oE={class:"terminal-detail-header"},rE={class:"terminal-detail-title-wrap"},lE={class:"terminal-detail-title"},cE={class:"terminal-detail-meta"},uE={class:"terminal-detail-grid"},dE={class:"terminal-detail-row"},fE={class:"terminal-detail-label"},pE={class:"terminal-detail-value"},gE={class:"terminal-detail-row"},mE={class:"terminal-detail-label"},hE={class:"terminal-detail-row"},vE={class:"terminal-detail-label"},bE={class:"terminal-detail-value"},_E={key:0,class:"terminal-detail-row"},yE={class:"terminal-detail-label"},kE={class:"terminal-detail-value"},wE={key:1,class:"terminal-detail-row"},SE={class:"terminal-detail-label"},EE={class:"terminal-detail-value"},TE={key:0,class:"terminal-output-wrap"},AE={class:"terminal-output-header"},xE={class:"terminal-output"},NE={key:1,class:"terminal-detail"},CE={class:"terminal-detail-header"},RE={class:"terminal-detail-title"},IE={class:"terminal-detail-meta"},OE={class:"terminal-detail-grid"},ME={class:"terminal-detail-row"},LE={class:"terminal-detail-label"},$E={class:"terminal-detail-row"},DE={class:"terminal-detail-label"},PE={class:"terminal-detail-value"},BE={class:"terminal-detail-row"},FE={class:"terminal-detail-label"},UE={class:"terminal-detail-value terminal-detail-command"},GE={class:"terminal-detail-row"},HE={class:"terminal-detail-label"},zE={class:"terminal-detail-value"},KE={key:0,class:"terminal-detail-row"},qE={class:"terminal-detail-label"},VE={class:"terminal-detail-value"},WE={key:1,class:"terminal-detail-row"},YE={class:"terminal-detail-label"},jE={class:"terminal-detail-value"},ZE={key:2,class:"terminal-detail-row"},XE={class:"terminal-detail-label"},QE={class:"terminal-detail-value"},JE={key:0,class:"terminal-output-wrap"},eT={class:"terminal-output-header"},tT={class:"terminal-output"},nT={__name:"ArtifactsPanel",props:{open:{type:Boolean,default:!1}},emits:["close"],setup(e,{emit:t}){const n=t,s=Gt(),{isResizing:a,panelStyle:i,startResize:o}=Mw(),{selectedKey:r,showSource:u,sourceLoading:l,sourceError:c,selectedSourceLanguage:f,highlightedSource:p,textLoading:b,textError:_,highlightedText:k,textTruncated:L,textPreviewLimitLabel:R,artifacts:x,selected:S,openViewedImage:I,artifactKey:O,selectArtifact:P,contentType:M,iconClass:$,labelFor:v,versionedUrl:E,previewUrl:C,canFullscreen:A,openFullscreen:B,rawUrl:z,hasSource:K,toggleSource:j,downloadUrl:Q,isFramePreview:ce,copyLink:Be,copyIcon:Xe}=Nw(s),{links:De,copyAllLinks:J,openAllLinks:le}=Dw(s),{filesRefreshing:_e,refreshFiles:Me,filesPtrPulling:Z,filesPtrStyle:we,filesPtrTriggered:se,filesPtrLabel:He,onFilesTouchStart:Ke,onFilesTouchMove:at,onFilesTouchEnd:D,filesListRef:U,filesFlat:q,fileTree:Y,fileIcon:ne,fileMeta:X,fileIndent:pe,fileDownloadUrl:oe,canViewFile:ue,openFileInViewer:re}=$w(s),{selectedBg:ye,backgroundsList:ve,activeBackgroundCount:Re,selectedTask:Ne,selectedTerminal:Ie,selectBackground:Ve,isBgSelected:Qe,backgroundIcon:nt,backgroundTitle:dt,backgroundMeta:Ot,backgroundBadgeClass:Ct,backgroundBadgeLabel:Jt,taskBadgeClass:Vt,taskBadgeLabel:wt,formatTime:Rt,formatUptime:Cn}=Rw(s),St=F("artifacts");return(us,he)=>{const Dt=et("GnIconButton"),Pt=et("GnEmptyState");return h(),w("aside",{class:Ce(["artifacts-panel",{"is-open":e.open,"is-resizing":d(a)}]),style:bs(d(i)),"aria-label":d(m)("artifacts.panelLabel")},[g("div",{class:"artifacts-resize-handle",role:"separator","aria-orientation":"vertical",title:d(m)("artifacts.resize"),onPointerdown:he[0]||(he[0]=(...Ae)=>d(o)&&d(o)(...Ae))},null,40,Bw),g("div",Fw,[g("div",Uw,[g("button",{class:"chip artifacts-tab","aria-pressed":St.value==="artifacts",onClick:he[1]||(he[1]=Ae=>St.value="artifacts")},[he[15]||(he[15]=g("i",{class:"ph ph-files"},null,-1)),g("span",null,y(d(m)("artifacts.tabArtifacts")),1),g("span",Hw,y(d(x).length),1)],8,Gw),g("button",{class:"chip artifacts-tab","aria-pressed":St.value==="links",onClick:he[2]||(he[2]=Ae=>St.value="links")},[he[16]||(he[16]=g("i",{class:"ph ph-link"},null,-1)),g("span",null,y(d(m)("artifacts.tabLinks")),1),g("span",Kw,y(d(De).length),1)],8,zw),g("button",{class:"chip artifacts-tab","aria-pressed":St.value==="files",onClick:he[3]||(he[3]=Ae=>St.value="files")},[he[17]||(he[17]=g("i",{class:"ph ph-folder"},null,-1)),g("span",null,y(d(m)("artifacts.tabFiles")),1),g("span",Vw,y(d(q).length),1)],8,qw),g("button",{class:"chip artifacts-tab","aria-pressed":St.value==="backgrounds",onClick:he[4]||(he[4]=Ae=>St.value="backgrounds")},[he[18]||(he[18]=g("i",{class:"ph ph-arrows-out"},null,-1)),g("span",null,y(d(m)("artifacts.tabBackgrounds")),1),g("span",{class:Ce(["artifacts-tab-count",{"has-running":d(Re)>0}])},y(d(Re)),3)],8,Ww)]),ee(Dt,{icon:"ph ph-x",label:d(m)("artifacts.close"),class:"artifacts-close",onClick:he[5]||(he[5]=Ae=>n("close"))},null,8,["label"])]),St.value==="artifacts"?(h(),w(fe,{key:0},[d(s).viewedImages.length?(h(),w("div",Yw,[g("div",jw,[he[19]||(he[19]=g("i",{class:"ph ph-eye"},null,-1)),g("span",Zw,y(d(m)("artifacts.viewedImages")),1),g("span",Xw,y(d(s).viewedImages.length),1)]),g("div",Qw,[(h(!0),w(fe,null,tt(d(s).viewedImages,(Ae,H)=>(h(),w("img",{key:H,src:Ae,class:"viewed-image-thumb",alt:d(m)("artifacts.viewedImageAlt",{n:H+1}),onClick:ie=>d(I)(Ae)},null,8,Jw))),128))])])):V("",!0),!d(x).length&&!d(s).viewedImages.length?(h(),w("div",eS,[ee(Pt,{icon:"ph ph-files",title:d(m)("artifacts.emptyArtifacts")},null,8,["title"])])):(h(),w(fe,{key:2},[g("div",tS,[(h(!0),w(fe,null,tt(d(x),Ae=>(h(),w("button",{key:Ae.id||Ae.filename,class:Ce(["artifact-item",{"is-active":d(r)===d(O)(Ae)}]),onClick:H=>d(P)(Ae)},[g("span",sS,[g("i",{class:Ce(d($)(Ae))},null,2)]),g("span",aS,[g("span",iS,y(Ae.title||Ae.filename),1),g("span",oS,y(d(v)(Ae)),1)])],10,nS))),128))]),d(S)?(h(),w("div",rS,[g("div",lS,[g("div",cS,y(d(S).title||d(S).filename),1),g("div",uS,y(d(S).filename),1)]),g("div",dS,[g("a",{class:"btn-icon",href:d(C)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openPreview"),"aria-label":d(m)("artifacts.openPreview")},[...he[20]||(he[20]=[g("i",{class:"ph ph-arrow-square-out"},null,-1)])],8,fS),d(A)(d(S))?(h(),ke(Dt,{key:0,icon:"ph ph-arrows-out",label:d(m)("artifacts.openFullscreen"),onClick:he[6]||(he[6]=Ae=>d(B)(d(S)))},null,8,["label"])):V("",!0),g("a",{class:"btn-icon",href:d(z)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openRaw"),"aria-label":d(m)("artifacts.openRaw")},[...he[21]||(he[21]=[g("i",{class:"ph ph-file"},null,-1)])],8,pS),g("a",{class:"btn-icon",href:d(Q)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("common.download"),"aria-label":d(m)("common.download")},[...he[22]||(he[22]=[g("i",{class:"ph ph-download-simple"},null,-1)])],8,gS),d(K)(d(S))?(h(),ke(Dt,{key:1,icon:d(u)?"ph ph-eye":"ph ph-code",label:d(m)(d(u)?"artifacts.showPreview":"artifacts.showSource"),onClick:he[7]||(he[7]=Ae=>d(j)(d(S)))},null,8,["icon","label"])):V("",!0),ee(Dt,{icon:d(Xe)(d(S)),label:d(m)("artifacts.copyFileLink"),onClick:he[8]||(he[8]=Ae=>d(Be)(d(S)))},null,8,["icon","label"])]),g("div",mS,[d(u)?(h(),w("div",hS,[d(l)?(h(),w("div",vS,[he[23]||(he[23]=g("span",{class:"spinner"},null,-1)),g("span",null,y(d(m)("artifacts.loadingSource")),1)])):d(c)?(h(),w("pre",bS,y(d(c)),1)):(h(),w("pre",_S,[g("code",{class:Ce(["hljs",`language-${d(f)}`]),innerHTML:d(p)},null,10,yS)]))])):d(ce)(d(S))?(h(),w("iframe",{key:1,src:d(C)(d(S)),class:"artifact-frame",sandbox:"allow-scripts allow-same-origin"},null,8,kS)):d(M)(d(S))==="image"?(h(),w("img",{key:2,src:d(E)(d(S)),alt:d(S).title||d(S).filename,class:"artifact-image is-viewable",title:d(m)("artifacts.openFullscreen"),onClick:he[9]||(he[9]=Ae=>d(B)(d(S)))},null,8,wS)):d(M)(d(S))==="video"?(h(),w("video",{key:3,src:d(E)(d(S)),class:"artifact-video",controls:"",playsinline:""},null,8,SS)):d(M)(d(S))==="audio"?(h(),w("audio",{key:4,src:d(E)(d(S)),class:"artifact-audio",controls:"",preload:"metadata"},null,8,ES)):d(M)(d(S))==="text"?(h(),w("div",TS,[d(b)?(h(),w("div",AS,[he[24]||(he[24]=g("span",{class:"spinner"},null,-1)),g("span",null,y(d(m)("artifacts.loadingPreview")),1)])):d(_)?(h(),w("pre",xS,y(d(_)),1)):(h(),w(fe,{key:2},[g("pre",NS,[g("code",{class:Ce(["hljs",`language-${d(f)}`]),innerHTML:d(k)},null,10,CS)]),d(L)?(h(),w("div",RS,y(d(m)("artifacts.textPreviewLimited",{size:d(R)})),1)):V("",!0)],64))])):(h(),w("div",IS,[he[25]||(he[25]=g("i",{class:"ph ph-file"},null,-1)),g("span",null,y(d(m)("artifacts.previewUnavailable")),1)]))])])):V("",!0)],64))],64)):V("",!0),St.value==="links"?(h(),w(fe,{key:1},[d(De).length?(h(),w(fe,{key:1},[g("div",MS,[(h(!0),w(fe,null,tt(d(De),Ae=>(h(),w("a",{key:Ae.url,class:"artifact-item link-item",href:Ae.url,target:"_blank",rel:"noopener noreferrer"},[he[26]||(he[26]=g("span",{class:"artifact-icon"},[g("i",{class:"ph ph-link"})],-1)),g("span",$S,[g("span",DS,y(Ae.text||Ae.url),1),g("span",PS,y(Ae.domain)+" · "+y(Ae.snippet),1)])],8,LS))),128))]),g("div",BS,[g("div",FS,[g("div",US,y(d(m)("artifacts.linksInSession",{n:d(De).length})),1)]),g("div",GS,[ee(Dt,{icon:"ph ph-copy",label:d(m)("artifacts.copyAllLinks"),onClick:d(J)},null,8,["label","onClick"]),ee(Dt,{icon:"ph ph-arrow-square-out",label:d(m)("artifacts.openAllLinks"),onClick:d(le)},null,8,["label","onClick"])])])],64)):(h(),w("div",OS,[ee(Pt,{icon:"ph ph-link",title:d(m)("artifacts.emptyLinks")},null,8,["title"])]))],64)):V("",!0),St.value==="files"?(h(),w("div",{key:2,class:"files-tab-wrap",onTouchstart:he[10]||(he[10]=(...Ae)=>d(Ke)&&d(Ke)(...Ae)),onTouchmove:he[11]||(he[11]=(...Ae)=>d(at)&&d(at)(...Ae)),onTouchend:he[12]||(he[12]=(...Ae)=>d(D)&&d(D)(...Ae))},[g("div",{class:Ce(["ptr-indicator files-ptr",{"ptr-active":d(Z)&&!d(_e)}]),style:bs(d(we))},[g("span",{class:Ce(["ptr-spinner",{"ptr-spinning":d(se)}])},null,2),g("span",HS,y(d(He)),1)],6),g("div",zS,[ee(Dt,{class:"files-refresh-btn",icon:"ph ph-arrows-clockwise",label:d(m)("artifacts.refreshFiles"),disabled:d(_e),onClick:d(Me)},null,8,["label","disabled","onClick"])]),d(q).length?(h(),w("div",{key:1,ref_key:"filesListRef",ref:U,class:Ce(["artifacts-list files-list",{"ptr-pulled":d(Z)}])},[(h(!0),w(fe,null,tt(d(Y),Ae=>(h(),w("div",{key:Ae.path,class:Ce(["artifact-item file-item",{"is-dir":Ae.is_dir}]),style:bs(d(pe)(Ae))},[g("span",qS,[g("i",{class:Ce(d(ne)(Ae))},null,2)]),g("span",VS,[g("span",WS,y(Ae.name),1),g("span",YS,y(d(X)(Ae)),1)]),Ae.is_dir?V("",!0):(h(),w("div",jS,[g("a",{class:"btn-icon file-row-action",href:d(oe)(Ae.path),title:d(m)("common.download"),"aria-label":d(m)("common.download"),target:"_blank",rel:"noopener noreferrer"},[...he[27]||(he[27]=[g("i",{class:"ph ph-download-simple"},null,-1)])],8,ZS),d(ue)(Ae)?(h(),w("button",{key:0,class:"btn-icon file-row-action",type:"button",title:d(m)("artifacts.viewFile"),"aria-label":d(m)("artifacts.viewFile"),onClick:H=>d(re)(Ae)},[...he[28]||(he[28]=[g("i",{class:"ph ph-eye"},null,-1)])],8,XS)):V("",!0)]))],6))),128))],2)):(h(),w("div",KS,[ee(Pt,{icon:"ph ph-folder",title:d(m)("artifacts.emptyFiles")},null,8,["title"])]))],32)):V("",!0),St.value==="backgrounds"?(h(),w(fe,{key:3},[d(ve).length?(h(),w(fe,{key:1},[g("div",JS,[(h(!0),w(fe,null,tt(d(ve),Ae=>(h(),w("button",{key:`${Ae.kind}:${Ae.key}`,class:Ce(["artifact-item terminal-item",{"is-active":d(Qe)(Ae),"is-closed":!Ae.running}]),onClick:H=>d(Ve)(Ae)},[g("span",tE,[g("i",{class:Ce(d(nt)(Ae))},null,2)]),g("span",nE,[g("span",sE,y(d(dt)(Ae)),1),g("span",aE,y(d(Ot)(Ae)),1)]),g("span",{class:Ce(["badge",d(Ct)(Ae)])},y(d(Jt)(Ae)),3)],10,eE))),128))]),d(Ne)?(h(),w("div",iE,[g("div",oE,[g("div",rE,[g("div",lE,y(d(Ne).taskId),1),g("div",cE,y(d(Ne).argsSummary||d(Ne).tool),1)]),ee(Dt,{class:"terminal-detail-close",icon:"ph ph-x",label:d(m)("artifacts.closeDetails"),onClick:he[13]||(he[13]=Ae=>ye.value=null)},null,8,["label"])]),g("div",uE,[g("div",dE,[g("span",fE,y(d(m)("col.tool")),1),g("span",pE,y(d(Ne).tool),1)]),g("div",gE,[g("span",mE,y(d(m)("col.status")),1),g("span",{class:Ce(["terminal-detail-value",d(Vt)(d(Ne))])},y(d(wt)(d(Ne))),3)]),g("div",hE,[g("span",vE,y(d(m)("col.started")),1),g("span",bE,y(d(Rt)(d(Ne).startedAt)),1)]),d(Ne).finishedAt?(h(),w("div",_E,[g("span",yE,y(d(m)("col.finished")),1),g("span",kE,y(d(Rt)(d(Ne).finishedAt)),1)])):V("",!0),d(Ne).subagentTokens!=null?(h(),w("div",wE,[g("span",SE,y(d(m)("col.subagentTokens")),1),g("span",EE,y(d(Ne).subagentTokens),1)])):V("",!0)]),d(Ne).preview||d(Ne).status==="running"?(h(),w("div",TE,[g("div",AE,y(d(m)(d(Ne).status==="running"?"artifacts.latestProgress":"common.result")),1),g("pre",xE,y(d(Ne).preview||d(m)("artifacts.noOutput")),1)])):V("",!0)])):V("",!0),d(Ie)?(h(),w("div",NE,[g("div",CE,[g("div",null,[g("div",RE,y(d(Ie).name),1),g("div",IE,y(d(Ie).description||d(Ie).command||d(m)("artifacts.terminal")),1)]),ee(Dt,{class:"terminal-detail-close",icon:"ph ph-x",label:d(m)("artifacts.closeDetails"),onClick:he[14]||(he[14]=Ae=>ye.value=null)},null,8,["label"])]),g("div",OE,[g("div",ME,[g("span",LE,y(d(m)("col.status")),1),g("span",{class:Ce(["terminal-detail-value",d(Ie).status==="busy"?"status-busy":d(Ie).closed?"status-closed":"status-idle"])},y(d(m)(d(Ie).closed?"artifacts.statusClosed":d(Ie).status==="busy"?"artifacts.statusBusy":"artifacts.statusIdle")),3)]),g("div",$E,[g("span",DE,y(d(m)("col.pid")),1),g("span",PE,y(d(Ie).pid||d(m)("common.notAvailable")),1)]),g("div",BE,[g("span",FE,y(d(m)("col.command")),1),g("span",UE,y(d(Ie).command||d(m)("common.notAvailable")),1)]),g("div",GE,[g("span",HE,y(d(m)("col.cwd")),1),g("span",zE,y(d(Ie).cwd||d(m)("common.notAvailable")),1)]),d(Ie).uptime_seconds!=null?(h(),w("div",KE,[g("span",qE,y(d(m)("col.uptime")),1),g("span",VE,y(d(Cn)(d(Ie).uptime_seconds)),1)])):V("",!0),d(Ie).background!=null?(h(),w("div",WE,[g("span",YE,y(d(m)("col.background")),1),g("span",jE,y(d(m)(d(Ie).background?"common.yes":"common.no")),1)])):V("",!0),d(Ie).closeReason?(h(),w("div",ZE,[g("span",XE,y(d(m)("col.reason")),1),g("span",QE,y(d(Ie).closeReason),1)])):V("",!0)]),d(Ie).output?(h(),w("div",JE,[g("div",eT,y(d(m)("common.liveOutput")),1),g("pre",tT,y(d(Ie).output),1)])):V("",!0)])):V("",!0)],64)):(h(),w("div",QS,[ee(Pt,{icon:"ph ph-arrows-out",title:d(m)("artifacts.emptyBackgrounds")},null,8,["title"])]))],64)):V("",!0)],14,Pw)}}},sT=Ye(nT,[["__scopeId","data-v-f24e35d7"]]),aT={class:"login-overlay"},iT={class:"login-card"},oT={class:"login-title"},rT={class:"login-subtitle"},lT={__name:"LoginScreen",setup(e){const t=Yn();return(n,s)=>{const a=et("GnButton");return h(),w("div",aT,[g("div",iT,[s[0]||(s[0]=g("img",{src:nc,alt:"Navi",class:"login-logo"},null,-1)),g("h1",oT,y(d(m)("ui.welcomeTitle")),1),g("p",rT,y(d(m)("ui.tagline")),1),ee(a,{variant:"primary",class:"login-btn",icon:"ph ph-sign-in",onClick:d(t).login},{default:ge(()=>[ae(y(d(m)("ui.loginWithGnexus")),1)]),_:1},8,["onClick"])])])}}},sg=Ye(lT,[["__scopeId","data-v-da007b37"]]),cT=Object.freeze(Object.defineProperty({__proto__:null,default:sg},Symbol.toStringTag,{value:"Module"})),uT=["aria-label"],dT={class:"notification-prompt-body"},fT={class:"notification-prompt-title"},pT={class:"notification-prompt-text"},gT={class:"notification-prompt-actions"},mT={__name:"NotificationPromptBanner",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},text:{type:String,default:""},acceptText:{type:String,default:""},dismissText:{type:String,default:""},busy:{type:Boolean,default:!1},icon:{type:String,default:"ph-bell"}},emits:["accept","dismiss"],setup(e,{emit:t}){const n=t;return(s,a)=>(h(),ke(Xs,{name:"prompt-slide"},{default:ge(()=>[e.open?(h(),w("div",{key:0,class:"notification-prompt",role:"region","aria-live":"polite","aria-label":e.title},[Jo(s.$slots,"icon",{},()=>[g("i",{class:Ce(`ph ${e.icon}`)},null,2)],!0),g("div",dT,[g("div",fT,y(e.title),1),g("div",pT,[Jo(s.$slots,"default",{},()=>[ae(y(e.text),1)],!0)])]),Jo(s.$slots,"actions",{},()=>[g("div",gT,[ee(d(ot),{variant:"secondary",size:"sm",disabled:e.busy,loading:e.busy,onClick:a[0]||(a[0]=i=>n("accept"))},{default:ge(()=>[ae(y(e.acceptText),1)]),_:1},8,["disabled","loading"]),ee(d(ot),{variant:"ghost",size:"sm",disabled:e.busy,onClick:a[1]||(a[1]=i=>n("dismiss"))},{default:ge(()=>[ae(y(e.dismissText),1)]),_:1},8,["disabled"])])],!0)],8,uT)):V("",!0)]),_:3}))}},ag=Ye(mT,[["__scopeId","data-v-55b607e2"]]),hT=Object.freeze(Object.defineProperty({__proto__:null,default:ag},Symbol.toStringTag,{value:"Module"}));function vT(){const e=F(navigator.onLine);function t(){e.value=!0}function n(){e.value=!1}return $t(()=>{window.addEventListener("online",t),window.addEventListener("offline",n)}),Nn(()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}),{online:e}}const bT={key:0,class:"offline-banner"},_T={__name:"OfflineBanner",setup(e){const{online:t}=vT();return(n,s)=>(h(),ke(Xs,{name:"offline-slide"},{default:ge(()=>[d(t)?V("",!0):(h(),w("div",bT,[s[0]||(s[0]=g("i",{class:"ph ph-wifi-slash"},null,-1)),g("span",null,y(d(m)("ui.offline")),1)]))]),_:1}))}},ig=Ye(_T,[["__scopeId","data-v-4a57a206"]]),yT=Object.freeze(Object.defineProperty({__proto__:null,default:ig},Symbol.toStringTag,{value:"Module"})),kT={assistant:"ph-sparkle",designer_3d:"ph-cube",modeler_3d:"ph-polygon",navi_code:"ph-command",dispatcher:"ph-signpost",developer:"ph-code",discuss:"ph-chats",server_admin:"ph-terminal"},gd=["ph-robot","ph-user-circle","ph-atom","ph-planet","ph-puzzle-piece","ph-lightning","ph-star","ph-shield","ph-rocket","ph-flask","ph-hand-heart","ph-compass"];function wT(e){let t=0;for(let n=0;n{const f=et("GnIconButton"),p=et("GnAvatar");return h(),w("div",ET,[ee(f,{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"welcome-sidebar-btn",onClick:c[0]||(c[0]=b=>n("toggle-sidebar"))},null,8,["label"]),g("div",TT,[c[1]||(c[1]=g("img",{src:nc,alt:"Navi"},null,-1)),c[2]||(c[2]=g("h1",null,"Navi",-1)),g("p",null,y(d(m)("ui.tagline")),1)]),d(s).profiles.length?(h(),w("div",AT,[(h(!0),w(fe,null,tt(d(s).profiles,b=>(h(),w("div",{key:b.id,class:Ce(["welcome-profile-card",{"is-creating":o.value&&r.value===b.id}]),onClick:_=>u(b.id)},[ee(p,{size:"md",variant:"secondary",icon:d(ST)(b)},null,8,["icon"]),g("div",NT,y(b.name),1),g("div",CT,y(b.description),1)],10,xT))),128))])):V("",!0)])}}},og=Ye(RT,[["__scopeId","data-v-cf0df608"]]),IT=Object.freeze(Object.defineProperty({__proto__:null,default:og},Symbol.toStringTag,{value:"Module"}));let Nl=null;function md(e){Nl=typeof e=="function"?e:null}function rg(e){return Nl?Nl(e)!=="rejected":!1}const OT=location.protocol==="https:"?"wss":"ws",MT=`${OT}://${location.host}`,LT=3,$T=1e3,DT=15e3,PT=20,BT=2e4,FT=45e3,UT=5e3,GT=15e3,HT=15e3,zT=new Set([4003,4004]);function KT(e){const t=`${MT}/ws/sessions/${e}`,n=localStorage.getItem("navi_api_token");return n?`${t}?api_token=${encodeURIComponent(n)}`:t}function qT(){const e=Gt(),t=Mn(),n=F(!1),s=F(!1),a=F(!1),i=F(null);let o=null,r=null,u=null,l=0,c=null,f=!1,p=!1,b=0,_=0,k=null,L=null,R=!1,x=[],S=new Map,I=!1;function O(se){f=!1,o&&r!==se&&(z(),Be(),C(),n.value=!1),I=!1,i.value=null,u=se,l=0,clearTimeout(c),c=null,a.value=!1,x=[],Me(),K()}function P(){f=!0,I=!1,i.value=null,clearTimeout(c),Be(),Z(),z(),C(),x=[],n.value=!1,s.value=!1}function M(se){return I?"rejected":(o==null?void 0:o.readyState)===WebSocket.OPEN&&r===u&&!B()?($(se),"sent"):x.length>=PT?(A(),"rejected"):(x.push(se),A(),"queued")}function $(se){o.send(JSON.stringify(se)),!((se==null?void 0:se.type)!=="message"||!se.client_id)&&v(se.client_id)}function v(se){E(se),S.set(se,setTimeout(()=>{if(S.delete(se),e.streaming){v(se);return}e.markMessageFailed(se,"unconfirmed")},HT))}function E(se){if(!se)return;const He=S.get(se);He&&clearTimeout(He),S.delete(se)}function C(){for(const se of S.values())clearTimeout(se);S.clear()}function A(){s.value=!0,(o==null?void 0:o.readyState)===WebSocket.OPEN?De():(!o||o.readyState===WebSocket.CLOSED||o.readyState===WebSocket.CLOSING)&&K()}function B(){return _!==0&&Date.now()-_>FT}function z(){const se=o;if(o=null,r=null,p=!1,!!se){se.onopen=null,se.onmessage=null,se.onerror=null,se.onclose=null;try{se.close()}catch{}}}function K(){if(f||I||p&&o&&r===u)return;o&&z(),p=!0,b=Date.now();const se=u,He=new WebSocket(KT(se));o=He,r=se,He.onopen=()=>{o===He&&(p=!1,n.value=!0,s.value=!1,a.value=!1,l=0,_=Date.now(),ce(),e.dropStaleStream(),j())},He.onmessage=Ke=>{if(o!==He||r!==u)return;_=Date.now();let at;try{at=JSON.parse(Ke.data)}catch{return}we(at)},He.onclose=Ke=>{if(o!==He)return;p=!1,n.value=!1,Be();const at=Ke==null?void 0:Ke.code;if(zT.has(at)){I=!0,s.value=!1,a.value=!1,clearTimeout(c),c=null,i.value={code:at,reason:(Ke==null?void 0:Ke.reason)||""};return}f||Q()},He.onerror=()=>{}}function j(){if(!o||o.readyState!==WebSocket.OPEN||!x.length)return;const se=x;x=[];for(const He of se)$(He)}function Q(){if(!(f||I))if(s.value=!0,l++,l<=LT){const se=$T*Math.pow(2,l-1);c=setTimeout(K,se)}else a.value=!0,s.value=!1,c=setTimeout(()=>{f||(s.value=!0,K())},DT)}function ce(){Be(),k=setInterval(()=>{if((o==null?void 0:o.readyState)===WebSocket.OPEN)try{o.send(JSON.stringify({type:"ping",ts:Date.now()}))}catch{}},BT),L=setInterval(Xe,UT)}function Be(){clearInterval(k),clearInterval(L),k=null,L=null}function Xe(){if(!(f||I||!o)){if(o.readyState===WebSocket.CONNECTING){Date.now()-b>GT&&De();return}o.readyState===WebSocket.OPEN&&B()&&De()}}function De(){f||I||(z(),Be(),l=0,clearTimeout(c),n.value=!1,s.value=!0,K())}function J(){if(!(f||!u)&&document.visibilityState==="visible"){if(!o||o.readyState!==WebSocket.OPEN||B()){De();return}e.checkForUpdates(u)}}function le(){f||!u||De()}function _e(se){f||!u||se.persisted&&De()}function Me(){R||typeof window>"u"||(document.addEventListener("visibilitychange",J),window.addEventListener("online",le),window.addEventListener("pageshow",_e),R=!0)}function Z(){R&&(document.removeEventListener("visibilitychange",J),window.removeEventListener("online",le),window.removeEventListener("pageshow",_e),R=!1)}function we(se){switch(se.type){case"stream_start":e.onStreamStart();break;case"thinking_delta":e.onThinkingDelta(se.delta??"");break;case"thinking_end":e.onThinkingEnd();break;case"turn_thinking":e.onTurnThinking(se);break;case"planning_status":e.onPlanningStatus(se);break;case"plan_ready":e.onPlanReady(se);break;case"tool_started":e.onToolStarted(se);break;case"tool_call":e.onToolCall(se);break;case"terminal_output":e.onTerminalOutput(se);break;case"terminal_closed":e.onTerminalClosed(se);break;case"terminal_opened":e.onTerminalOpened(se);break;case"task_update":{const He=se.task_id,Ke=He?!!e.backgroundTasks[He]:!1;e.onTaskUpdate(se);const at=He?e.backgroundTasks[He]:null,D=`${se.tool??m("common.task")} (${He})`;if(se.status==="running")!Ke&&at&&t.info({title:m("toast.bgTaskStarted"),text:D});else if(Ke){const U={title:m("toast.bgTaskFinished"),text:`${D} — ${se.status}`};se.status==="completed"?t.success(U):t.error(U)}break}case"message_accepted":E(se.client_id);break;case"message_queued":E(se.client_id),e.onMessageQueued(se);break;case"message_dropped":e.onMessageDropped(se);break;case"stream_delta":e.onStreamDelta(se.delta??"");break;case"stream_end":e.onStreamEnd(se);break;case"stream_stopped":e.onStreamStopped(se);break;case"profile_switched":e.onProfileSwitched(se);break;case"model_info":e.onModelInfo(se);break;case"compression_started":e.onCompressionStarted(se);break;case"context_compressed":e.onContextCompressed(se);break;case"error":e.onError(se);break;case"replay_start":e.onReplayStart();break;case"replay_end":e.onReplayEnd();break;case"heartbeat":break;case"pong":break;case"recall_update":e.onRecallUpdate(se);break;case"skill_proposal_decided":e.onProposalDecided(se);break;case"session_sync":u&&!e.streaming&&!e.loading&&e.checkForUpdates(u);break;case"mcp_status_update":se.status==="connected"?t.success({title:m("toast.mcpConnected"),text:`${se.server_name} (${m("common.toolsCount",{n:se.tool_count??"?"})})`}):t.error({title:m("toast.mcpDisconnected"),text:se.server_name});break}}return md(M),Nn(()=>{md(null),P()}),{connected:n,reconnecting:s,reconnectFailed:a,fatalClose:i,connect:O,disconnect:P,send:M}}const VT={key:0,class:"profile-badge"},lg={__name:"ProfileBadge",props:{profileId:{type:String,default:null},showAvatar:{type:Boolean,default:!0}},setup(e){const t=e,n=Si(),s=W(()=>t.profileId?n.getProfile(t.profileId):null),a={server_admin:"warning",developer:"info"},i=W(()=>a[t.profileId]||"secondary");function o(r){return r?r.split(/\s+/).map(u=>u[0]).join("").slice(0,2).toUpperCase():"?"}return(r,u)=>{const l=et("GnAvatar"),c=et("GnBadge");return s.value?(h(),w("div",VT,[e.showAvatar?(h(),ke(l,{key:0,size:"sm",initials:o(s.value.name)},null,8,["initials"])):V("",!0),ee(c,{variant:i.value},{default:ge(()=>[ae(y(s.value.name),1)]),_:1},8,["variant"])])):V("",!0)}}},WT=Object.freeze(Object.defineProperty({__proto__:null,default:lg},Symbol.toStringTag,{value:"Module"})),YT=["title"],jT={class:"model-chip-text"},ZT={__name:"ModelChip",setup(e){const t=Gt(),n=W(()=>m("chat.backupModelTitle",{model:t.servedModel,target:t.servedTarget||"—"}));return(s,a)=>d(t).servedFallback&&d(t).servedModel?(h(),w("span",{key:0,class:"model-chip",title:n.value},[a[0]||(a[0]=g("i",{class:"ph ph-plug-charging"},null,-1)),g("span",jT,y(d(m)("chat.backupModel",{model:d(t).servedModel})),1)],8,YT)):V("",!0)}},cg=Ye(ZT,[["__scopeId","data-v-6039953a"]]),XT=Object.freeze(Object.defineProperty({__proto__:null,default:cg},Symbol.toStringTag,{value:"Module"})),QT=["title"],JT={__name:"ContextBar",emits:["info"],setup(e,{emit:t}){const n=t,s=Gt(),a=W(()=>s.maxContextTokens?Math.min(100,Math.round(s.contextTokens/s.maxContextTokens*100)):0),i=W(()=>a.value>=80?"is-crit":a.value>=60?"is-warn":""),o=W(()=>`${r(s.contextTokens)} / ${r(s.maxContextTokens)} tokens · ${m("chat.sessionInfo")}`);function r(u){return u>=1e3?(u/1e3).toFixed(1).replace(".0","")+"k":String(u)}return(u,l)=>d(s).maxContextTokens>0?(h(),w("button",{key:0,type:"button",class:"context-bar",title:o.value,"aria-haspopup":"dialog",onClick:l[0]||(l[0]=c=>n("info"))},[g("span",{class:Ce(["context-bar-pct",i.value])},y(a.value)+"%",3)],8,QT)):V("",!0)}},ug=Ye(JT,[["__scopeId","data-v-cb775a25"]]),eA=Object.freeze(Object.defineProperty({__proto__:null,default:ug},Symbol.toStringTag,{value:"Module"}));function dg(e){return e%86400===0?m("chat.infoRecallDays",{n:e/86400}):e%3600===0?m("chat.infoRecallHours",{n:e/3600}):m("chat.infoRecallMinutes",{n:Math.round(e/60)})}function tA(e,t=Date.now()){const n=new Date(e).getTime();if(!Number.isFinite(n))return"—";const s=n-t;if(s<=0)return m("chat.recallDueNow");if(s<6e4)return m("chat.recallUnderAMinute");const a=Math.round(s/6e4);if(a<60)return m("chat.recallIn",{interval:m("chat.infoRecallMinutes",{n:a})});const i=Math.round(s/36e5);if(i<24)return m("chat.recallIn",{interval:m("chat.infoRecallHours",{n:i})});const o=Math.round(s/864e5);return m("chat.recallIn",{interval:m("chat.infoRecallDays",{n:o})})}const nA={class:"session-info"},sA={key:0,class:"si-muted si-loading"},aA={key:1,class:"si-error"},iA={class:"si-grid"},oA={class:"si-section"},rA={class:"si-heading"},lA={class:"si-active-text"},cA={class:"si-model"},uA={class:"si-server"},dA={key:1,class:"si-muted"},fA={key:2,class:"si-chain"},pA={class:"si-subheading"},gA={class:"si-chain-list"},mA={class:"si-chain-model"},hA=["title"],vA=["title"],bA={class:"si-section"},_A={class:"si-heading"},yA={class:"si-id-row"},kA={class:"si-id"},wA={class:"si-section si-live"},SA={class:"si-heading"},EA={class:"si-live-grid"},TA={class:"si-live-term"},AA=3e3,xA={__name:"SessionInfoModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=F(null),o=F(!1),r=F("");let u=null;async function l(){const v=a.currentId;if(v){o.value=!0;try{const E=await Bv(v);if(a.currentId!==v)return;i.value=E,r.value=""}catch(E){if(a.currentId!==v)return;r.value=m("chat.infoError"),console.error("[session-info] load failed",E)}finally{o.value=!1}}}function c(){u!==null&&(clearInterval(u),u=null)}Ge(()=>n.open,v=>{c(),v&&(i.value=null,r.value="",l(),u=setInterval(l,AA))},{immediate:!0}),Ge(()=>a.currentId,()=>{n.open&&(i.value=null,l())}),Nn(c);const f=W(()=>{var v,E;return((E=(v=i.value)==null?void 0:v.llm)==null?void 0:E.active)??null}),p=W(()=>{var v,E;return((E=(v=i.value)==null?void 0:v.llm)==null?void 0:E.chain)??[]}),b=W(()=>{var C,A;const v=(C=i.value)==null?void 0:C.llm;if(!v)return[];const E=[];return v.route&&E.push({key:"route",term:m("chat.infoRoute"),value:v.route}),v.active?E.push({key:"window",term:m("chat.infoWindow"),value:`${M(v.active.context_window)} ${m("chat.infoTokens")}`}):(A=v.models)!=null&&A.length&&E.push({key:"models",term:m("chat.infoConfiguredModels"),value:v.models.join(", ")}),E}),_=W(()=>{const v=i.value;if(!v)return"—";const E=v.max_context_tokens?Math.min(100,Math.round(v.context_token_count/v.max_context_tokens*100)):0;return`${M(v.context_token_count)} / ${M(v.max_context_tokens)} (${E}%)`}),k=W(()=>{var E;const v=((E=i.value)==null?void 0:E.archive_threshold)??0;return v>0?m("chat.infoArchiveValue",{seq:M(v)}):m("chat.infoNone")}),L=W(()=>{var E;const v=(E=i.value)==null?void 0:E.compression;return v?v.enabled?m("chat.infoCompressionValue",{pct:Math.round(v.threshold*100),keep:v.keep_recent,max:M(v.summary_max_tokens)}):m("chat.infoCompressionOff"):"—"}),R=W(()=>{var C;const v=(C=i.value)==null?void 0:C.recall;if(!v)return"";const E=[Ql(v.call_type)];return v.call_type==="recurring"&&v.interval_seconds&&E.push(m("chat.infoRecallEvery",{interval:dg(v.interval_seconds)})),E.push($(v.trigger_at)),E.join(" · ")}),x=W(()=>{const v=i.value;if(!v)return[];const E=[{key:"id",term:m("chat.infoSessionId"),value:v.session_id},{key:"profile",term:m("chat.infoProfile"),value:v.profile_name||v.profile_id||"—"},{key:"created",term:m("chat.infoCreated"),value:$(v.created_at)},{key:"active",term:m("chat.infoLastActive"),value:$(v.last_active)},{key:"messages",term:m("chat.infoMessages"),value:M(v.message_count)},{key:"archive",term:m("chat.infoArchive"),value:k.value},{key:"context",term:m("chat.infoContext"),value:_.value},{key:"compression",term:m("chat.infoCompression"),value:L.value}];return v.recall&&E.push({key:"recall",term:m("chat.infoRecall"),value:R.value}),E}),S=W(()=>{var z,K;const v=i.value;if(!v)return[];const E=((z=v.live)==null?void 0:z.running)||a.streaming,C=a.wsConnected?m("chat.infoWsConnected"):a.wsReconnecting?m("chat.infoWsReconnecting"):m("chat.infoWsOffline"),A=a.wsConnected?"ok":a.wsReconnecting?"warn":"error",B=Object.values(a.backgroundTasks||{}).filter(j=>(j==null?void 0:j.status)==="running"||(j==null?void 0:j.status)==="queued").length;return[{key:"running",term:m("chat.infoRunning"),value:m(E?"chat.infoRunningYes":"chat.infoRunningNo"),tone:E?"live":"muted"},{key:"clients",term:m("chat.infoClients"),value:M(((K=v.live)==null?void 0:K.clients)??0),tone:"neutral"},{key:"ws",term:m("chat.infoWs"),value:C,tone:A},{key:"tasks",term:m("chat.infoTasks"),value:B?M(B):m("chat.infoNone"),tone:B?"live":"muted"}]});function I(v){return!!f.value&&f.value.model===v.model&&f.value.target===v.target}const O={ok:"chat.infoStateOk",degraded:"chat.infoStateDegraded",missing:"chat.infoStateMissing"};function P(v){return O[v]?m(O[v]):v}function M(v){return v==null?"—":new Intl.NumberFormat(Lt.value).format(v)}function $(v){return v?new Date(v).toLocaleString(Lt.value):"—"}return(v,E)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("chat.sessionInfo"),"onUpdate:open":E[1]||(E[1]=C=>s("update:open",C))},{actions:ge(()=>[ee(d(ot),{variant:"secondary",icon:"ph-arrows-clockwise",loading:o.value,onClick:l},{default:ge(()=>[ae(y(d(m)("chat.infoRefresh")),1)]),_:1},8,["loading"]),ee(d(ot),{variant:"primary",onClick:E[0]||(E[0]=C=>s("update:open",!1))},{default:ge(()=>[ae(y(d(m)("common.close")),1)]),_:1})]),default:ge(()=>[g("div",nA,[o.value&&!i.value?(h(),w("div",sA,[E[2]||(E[2]=g("i",{class:"ph ph-circle-notch si-spin"},null,-1)),ae(" "+y(d(m)("chat.infoLoading")),1)])):r.value?(h(),w("p",aA,[E[3]||(E[3]=g("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+y(r.value),1)])):i.value?(h(),w(fe,{key:2},[g("div",iA,[g("section",oA,[g("h4",rA,y(d(m)("chat.infoModelSection")),1),f.value?(h(),w("div",{key:0,class:Ce(["si-active",{"is-backup":!f.value.primary}])},[g("i",{class:Ce(f.value.primary?"ph ph-cloud-check":"ph ph-plug-charging")},null,2),g("div",lA,[g("span",cA,y(f.value.model),1),g("span",uA,[ae(y(f.value.target),1),f.value.host?(h(),w(fe,{key:0},[ae(" · "+y(f.value.host),1)],64)):V("",!0)])]),f.value.primary?(h(),ke(d(vi),{key:1,variant:"success",outline:""},{default:ge(()=>[ae(y(d(m)("chat.infoPrimary")),1)]),_:1})):(h(),ke(d(vi),{key:0,variant:"warning"},{default:ge(()=>[ae(y(d(m)("chat.infoBackup")),1)]),_:1}))],2)):(h(),w("p",dA,y(d(m)("chat.infoNoRoute")),1)),ee(d(lo),{items:b.value,class:"si-rows"},null,8,["items"]),p.value.length?(h(),w("div",fA,[g("div",pA,y(d(m)("chat.infoRouteSection")),1),g("ul",gA,[(h(!0),w(fe,null,tt(p.value,C=>(h(),w("li",{key:`${C.target}:${C.model}`,class:Ce(["si-chain-item",{"is-active":I(C)}])},[g("span",{class:Ce(["si-chain-dot",`is-${C.state}`])},null,2),g("span",mA,y(C.model),1),g("span",{class:"si-chain-target",title:C.host},y(C.target),9,hA),g("span",{class:"si-chain-state",title:C.reason||""},y(P(C.state)),9,vA)],2))),128))])])):V("",!0)]),g("section",bA,[g("h4",_A,y(d(m)("chat.infoSessionSection")),1),ee(d(lo),{items:x.value,class:"si-rows"},{id:ge(({item:C})=>[g("span",yA,[g("span",kA,y(C.value),1),ee(d(sc),{text:C.value,size:"sm",label:d(m)("common.copy")},null,8,["text","label"])])]),_:1},8,["items"])])]),g("section",wA,[g("h4",SA,y(d(m)("chat.infoLiveSection")),1),g("div",EA,[(h(!0),w(fe,null,tt(S.value,C=>(h(),w("div",{key:C.key,class:"si-live-item"},[g("span",TA,y(C.term),1),g("span",{class:Ce(["si-live-value",`is-${C.tone}`])},y(C.value),3)]))),128))])])],64)):V("",!0)])]),_:1},8,["open","title"]))}},NA=Ye(xA,[["__scopeId","data-v-72bc8966"]]),CA={class:"share-body"},RA={class:"share-intro"},IA={key:0,class:"share-loading"},OA={key:1,class:"share-error"},MA={class:"share-label",for:"share-url"},LA={class:"share-link-row"},$A=["value"],DA={class:"share-warning"},PA={class:"share-hint"},BA={key:3,class:"share-hint"},FA={__name:"ShareChatModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=F(null),o=F(""),r=F(!1),u=F("");Ge(()=>n.open,c=>{c&&(i.value=a.currentId,o.value="",u.value="",r.value=!1)},{immediate:!0});async function l(){const c=i.value;if(!(!c||r.value)){r.value=!0,u.value="";try{const f=await Vv(c);o.value=f.url}catch(f){u.value=String((f==null?void 0:f.message)||"").includes("409")?m("share.emptyChat"):m("share.createFailed"),console.error("[share] create failed",f)}finally{r.value=!1}}}return(c,f)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("share.title"),"onUpdate:open":f[2]||(f[2]=p=>s("update:open",p))},{actions:ge(()=>[ee(d(ot),{variant:"secondary",onClick:f[1]||(f[1]=p=>s("update:open",!1))},{default:ge(()=>[ae(y(d(m)("common.close")),1)]),_:1}),ee(d(ot),{variant:"primary",icon:"ph-link",loading:r.value,disabled:!i.value,onClick:l},{default:ge(()=>[ae(y(o.value?d(m)("share.regenerate"):d(m)("share.create")),1)]),_:1},8,["loading","disabled"])]),default:ge(()=>[g("div",CA,[g("p",RA,y(d(m)("share.intro")),1),r.value?(h(),w("div",IA,[f[3]||(f[3]=g("i",{class:"ph ph-circle-notch share-spin"},null,-1)),ae(" "+y(d(m)("share.creating")),1)])):u.value?(h(),w("p",OA,[f[4]||(f[4]=g("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+y(u.value),1)])):o.value?(h(),w(fe,{key:2},[g("label",MA,y(d(m)("share.linkLabel")),1),g("div",LA,[g("input",{id:"share-url",class:"share-url",type:"text",readonly:"",value:o.value,onFocus:f[0]||(f[0]=p=>p.target.select())},null,40,$A),ee(d(sc),{text:o.value,label:d(m)("common.copy")},null,8,["text","label"])]),g("p",DA,[f[5]||(f[5]=g("i",{class:"ph ph-warning"},null,-1)),ae(" "+y(d(m)("share.warning")),1)]),g("p",PA,y(d(m)("share.killHint")),1)],64)):(h(),w("p",BA,y(d(m)("share.notYet")),1))])]),_:1},8,["open","title"]))}},UA=Ye(FA,[["__scopeId","data-v-5d45d058"]]),GA={key:0,class:"recall-info"},HA={key:0,class:"ri-block"},zA={class:"ri-heading"},KA={class:"ri-comment"},qA={key:1,class:"ri-block"},VA={class:"ri-heading"},WA={class:"ri-message"},YA={key:1,class:"ri-muted"},jA={__name:"RecallInfoModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=Mn(),o=F(!1),r=F(!1),u=F(Date.now());let l=null;const c=W(()=>a.recall),f=W(()=>{var R;return((R=c.value)==null?void 0:R.call_type)==="recurring"}),p=W(()=>{const R=c.value;if(!R)return[];const x=[{key:"type",term:m("chat.recallType"),value:Ql(R.call_type)},{key:"at",term:m("chat.recallAt"),value:L(R.trigger_at)}];return R.created_at&&x.push({key:"added",term:m("chat.recallAdded"),value:L(R.created_at)}),x.push({key:"when",term:m("chat.recallWhen"),value:tA(R.trigger_at,u.value)}),f.value&&R.interval_seconds&&x.push({key:"interval",term:m("chat.recallInterval"),value:dg(R.interval_seconds)}),x});Ge(()=>n.open,R=>{b(),R&&(a.loadRecall(),u.value=Date.now(),l=setInterval(()=>{u.value=Date.now()},1e3))},{immediate:!0}),Nn(b);function b(){l!==null&&(clearInterval(l),l=null)}async function _(){o.value=!0;try{await a.cancelRecall()?s("update:open",!1):i.error({title:m("chat.recallCancelFailed")})}finally{o.value=!1}}async function k(){r.value=!0;try{await a.skipRecall()?u.value=Date.now():i.error({title:m("chat.recallSkipFailed")})}finally{r.value=!1}}function L(R){return R?new Date(R).toLocaleString(Lt.value):"—"}return(R,x)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("chat.recallInfoTitle"),"onUpdate:open":x[1]||(x[1]=S=>s("update:open",S))},{actions:ge(()=>[f.value?(h(),ke(d(ot),{key:0,variant:"secondary",icon:"ph-skip-forward",loading:r.value,onClick:k},{default:ge(()=>[ae(y(d(m)("sidebar.skipNext")),1)]),_:1},8,["loading"])):V("",!0),ee(d(ot),{variant:"danger",icon:"ph-x-circle",loading:o.value,onClick:_},{default:ge(()=>[ae(y(d(m)("chat.recallCancel")),1)]),_:1},8,["loading"]),ee(d(ot),{variant:"primary",onClick:x[0]||(x[0]=S=>s("update:open",!1))},{default:ge(()=>[ae(y(d(m)("common.close")),1)]),_:1})]),default:ge(()=>[c.value?(h(),w("div",GA,[ee(d(lo),{items:p.value,class:"ri-rows"},null,8,["items"]),c.value.internal_comment?(h(),w("section",HA,[g("h4",zA,y(d(m)("chat.recallComment")),1),g("p",KA,y(c.value.internal_comment),1)])):V("",!0),c.value.additional_context_message?(h(),w("section",qA,[g("h4",VA,y(d(m)("chat.recallMessage")),1),g("pre",WA,y(c.value.additional_context_message),1)])):V("",!0)])):(h(),w("p",YA,y(d(m)("chat.recallGone")),1))]),_:1},8,["open","title"]))}},ZA=Ye(jA,[["__scopeId","data-v-707cd1f9"]]),XA={class:"chat-header"},QA={class:"chat-header-info"},JA=["title"],e0={key:0,class:"artifact-count"},t0={key:0,class:"recall-banner"},n0=["title"],s0={class:"recall-text"},a0=["title"],i0=["title"],o0={__name:"ChatHeader",emits:["toggle-sidebar","toggle-artifacts"],setup(e,{emit:t}){const n=t,s=Gt(),a=xn(),i=Mn(),o=Na(),r=F(!1),u=F(!1),l=F(!1),c=W(()=>{const M=[{label:m("chat.sessionInfo"),icon:"ph-info",onSelect:()=>{r.value=!0}}];return s.currentId&&(M.push({label:m("share.title"),icon:"ph-share-network",onSelect:()=>{u.value=!0}}),M.push({label:m("chat.deleteSession"),icon:"ph-trash",danger:!0,onSelect:f})),M});async function f(){const M=s.currentId;if(M&&await o(m("confirm.deleteSession")))try{await a.deleteSession(M),s.clearSession()}catch($){console.error("delete session failed",$),i.error({title:m("common.error")})}}const p=W(()=>{var $;const M=a.sessions.find(v=>v.session_id===s.currentId);return(M==null?void 0:M.name)||((($=s.currentId)==null?void 0:$.slice(0,8))??"Navi")}),b=W(()=>s.artifacts.length),_=W(()=>{const M=s.recall;if(!M)return"";const $=Ql(M.call_type);return m("chat.scheduledRecall",{type:$,time:I(M.trigger_at)})}),k=F(!1),L=F(""),R=F(null);function x(){L.value=p.value,k.value=!0,xt(()=>{var M,$;(M=R.value)==null||M.focus(),($=R.value)==null||$.select()})}async function S(){if(!k.value)return;const M=s.currentId,$=L.value;if(k.value=!1,!M)return;const v=$===p.value?null:$.trim();try{const E=v===null?{name:p.value}:await Hv(M,v);E!=null&&E.name&&a.updateName(M,E.name)}catch(E){console.error("rename session failed",E)}}function I(M){return M?new Date(M).toLocaleString(Lt.value):""}Ge(()=>s.currentId,s.loadRecall,{immediate:!0});async function O(){await s.cancelRecall()||i.error({title:m("chat.recallCancelFailed")})}async function P(){await s.skipRecall()||i.error({title:m("chat.recallSkipFailed")})}return(M,$)=>{const v=et("GnIconButton");return h(),w(fe,null,[g("div",XA,[ee(v,{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"btn-sidebar-toggle",onClick:$[0]||($[0]=E=>n("toggle-sidebar"))},null,8,["label"]),g("div",QA,[k.value?Gs((h(),w("input",{key:0,ref_key:"renameEl",ref:R,"onUpdate:modelValue":$[1]||($[1]=E=>L.value=E),class:"chat-header-rename",type:"text",maxlength:"200",spellcheck:"false",onBlur:S,onKeydown:[$[2]||($[2]=Wn(Bt(E=>k.value=!1,["prevent"]),["esc"])),$[3]||($[3]=Wn(Bt(E=>{var C;return(C=R.value)==null?void 0:C.blur()},["prevent"]),["enter"]))]},null,544)),[[hi,L.value]]):(h(),w("span",{key:1,class:"chat-header-title",title:d(m)("chat.rename"),onClick:x},y(p.value),9,JA)),k.value?V("",!0):(h(),ke(lg,{key:2,"profile-id":d(s).currentProfileId,"show-avatar":!1},null,8,["profile-id"])),k.value?V("",!0):(h(),ke(cg,{key:3}))]),ee(ug,{onInfo:$[4]||($[4]=E=>r.value=!0)}),ee(d(Pp),{class:"chat-header-menu",items:c.value},{trigger:ge(({open:E,toggle:C})=>[ee(v,{icon:"ph ph-dots-three-outline",label:d(m)("chat.moreActions"),class:"btn-more-toggle","aria-expanded":E?"true":"false",onClick:C},null,8,["label","aria-expanded","onClick"])]),_:1},8,["items"]),ee(v,{icon:"ph ph-files",label:d(m)("artifacts.tabArtifacts"),class:"btn-artifacts-toggle",onClick:$[5]||($[5]=E=>n("toggle-artifacts"))},{default:ge(()=>[b.value?(h(),w("span",e0,y(b.value),1)):V("",!0)]),_:1},8,["label"])]),ee(NA,{open:r.value,"onUpdate:open":$[6]||($[6]=E=>r.value=E)},null,8,["open"]),ee(UA,{open:u.value,"onUpdate:open":$[7]||($[7]=E=>u.value=E)},null,8,["open"]),d(s).recall?(h(),w("div",t0,[g("button",{class:"recall-open",title:d(m)("chat.recallDetailsHint"),onClick:$[8]||($[8]=E=>l.value=!0)},[$[10]||($[10]=g("i",{class:"ph ph-clock"},null,-1)),g("span",s0,y(_.value),1)],8,n0),g("button",{class:"recall-btn",title:d(m)("sidebar.cancelRecall"),onClick:O},[...$[11]||($[11]=[g("i",{class:"ph ph-x-circle"},null,-1)])],8,a0),d(s).recall.call_type==="recurring"?(h(),w("button",{key:0,class:"recall-btn",title:d(m)("sidebar.skipNext"),onClick:P},[...$[12]||($[12]=[g("i",{class:"ph ph-skip-forward"},null,-1)])],8,i0)):V("",!0)])):V("",!0),ee(ZA,{open:l.value,"onUpdate:open":$[9]||($[9]=E=>l.value=E)},null,8,["open"])],64)}}},r0=Ye(o0,[["__scopeId","data-v-686a3283"]]);function fg(){const e=F(!1);async function t(n){var s;if(n){if((s=navigator.clipboard)!=null&&s.writeText)await navigator.clipboard.writeText(n);else{const a=document.createElement("textarea");a.value=n,a.style.cssText="position:fixed;opacity:0",document.body.appendChild(a),a.select();try{document.execCommand("copy")}finally{document.body.removeChild(a)}}e.value=!0,setTimeout(()=>{e.value=!1},1500)}}return{copied:e,copy:t}}const l0={class:"msg-user-wrap"},c0={key:0,class:"msg-recall-badge"},u0={key:1,class:"msg-failed-badge"},d0={key:2,class:"msg-queued-badge"},f0=["innerHTML"],p0={key:3,class:"msg-user-attachments"},g0=["src","onClick"],m0={class:"msg-user-footer"},h0={key:0,class:"msg-time msg-time--user"},pg={__name:"UserMessage",props:{msg:{type:Object,required:!0},isFlashing:{type:Boolean,default:!1}},setup(e){const t=e,n=W(()=>t.msg.time),s=$o(n),a={unconfirmed:"chat.sendUnconfirmed",dropped:"chat.sendDropped"},i=W(()=>m(a[t.msg.failReason]??"chat.sendFailed")),{open:o}=Ca(),{copied:r,copy:u}=fg();function l(f){return f.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function c(f){if(!f)return"";const p=f.split(` +`);let b=[],_=[];for(const R of p)R.startsWith("> ")?b.push(l(R.slice(2))):R.trim()&&_.push(l(R));const k=b.length?`
${b.join("
")}
`:"",L=_.join(" ");return k+L}return(f,p)=>{var _,k;const b=et("GnIconButton");return h(),w("div",{class:Ce(["msg-user",{"msg-user--recall":e.msg.isRecall,"msg-user--queued":e.msg.queued}])},[g("div",l0,[g("div",{class:Ce(["msg-user-bubble",{"msg-flash":t.isFlashing}])},[e.msg.isRecall?(h(),w("div",c0,[p[1]||(p[1]=g("i",{class:"ph ph-clock"},null,-1)),g("span",null,y(d(m)("messages.scheduledRecall")),1)])):V("",!0),e.msg.failed?(h(),w("div",u0,[p[2]||(p[2]=g("i",{class:"ph ph-warning-circle"},null,-1)),g("span",null,y(i.value),1)])):V("",!0),e.msg.queued?(h(),w("div",d0,[p[3]||(p[3]=g("i",{class:"ph ph-hourglass-medium"},null,-1)),g("span",null,y(d(m)("chat.queuedBadge")),1)])):V("",!0),g("div",{class:"msg-user-text",innerHTML:c(e.msg.text)},null,8,f0),(_=e.msg.images)!=null&&_.length||(k=e.msg.files)!=null&&k.length?(h(),w("div",p0,[(h(!0),w(fe,null,tt(e.msg.images,(L,R)=>(h(),w("img",{key:`img-${R}`,src:L,class:"msg-user-image",onClick:x=>d(o)(L)},null,8,g0))),128)),(h(!0),w(fe,null,tt(e.msg.files,(L,R)=>(h(),w("span",{key:`file-${R}`,class:"msg-user-file-pill"},[p[4]||(p[4]=g("i",{class:"ph ph-file"},null,-1)),ae(" "+y(L.name),1)]))),128))])):V("",!0)],2),g("div",m0,[d(s)?(h(),w("span",h0,y(d(s)),1)):V("",!0),ee(b,{icon:d(r)?"ph ph-check":"ph ph-copy",label:d(m)(d(r)?"common.copied":"common.copy"),class:"msg-copy-btn",onClick:p[0]||(p[0]=L=>d(u)(e.msg.text))},null,8,["icon","label"])])])],2)}}},hd=280,v0="cubic-bezier(0.4, 0, 0.2, 1)",ai=new WeakMap;function b0(){var e;return((e=window.matchMedia)==null?void 0:e.call(window,"(prefers-reduced-motion: reduce)").matches)===!0}function Zr(e,t,n){ai.get(e)===t&&(ai.delete(e),e.style.transition="",e.style.height="",e.style.overflow="",n?e.setAttribute("open",""):e.removeAttribute("open"))}function ya(e,t,{animate:n=!0}={}){if(!e)return;const s=Symbol("details-animation");ai.set(e,s);const a=e.querySelector(":scope > summary"),i=a?a.offsetHeight:0;if(!n||b0()||!e.isConnected){Zr(e,s,t);return}if(e.hasAttribute("open")===t&&!e.style.height){ai.delete(e);return}const o=e.getBoundingClientRect().height;e.style.overflow="hidden",e.style.height=`${o}px`,t&&e.setAttribute("open",""),setTimeout(()=>{if(ai.get(e)!==s)return;const r=t?e.scrollHeight:i;if(Math.abs(r-o)<1){Zr(e,s,t);return}e.offsetHeight,e.style.transition=`height ${hd}ms ${v0}`,e.style.height=`${r}px`;const u=()=>{clearTimeout(c),e.removeEventListener("transitionend",l),Zr(e,s,t)},l=f=>{f.target!==e||f.propertyName!=="height"||u()};e.addEventListener("transitionend",l);const c=setTimeout(u,hd+100)},0)}function Mt(e){var n;const t=(n=e.currentTarget)==null?void 0:n.parentElement;!t||t.tagName!=="DETAILS"||ya(t,!t.hasAttribute("open"))}const _0={key:0,class:"spinner"},y0={class:"thinking-body"},Cl={__name:"ThinkingCard",props:{msg:{type:Object,required:!0}},setup(e){const t=e,n=F(null),s=W(()=>{var i;return(((i=t.msg.thinking)==null?void 0:i.text)??"").replace(/^\s*/i,"").replace(/\s*<\/thought>\s*$/i,"").replace(/^thought\s*:?\s*\n+/i,"").trim()});return(a,i)=>(h(),w("details",{ref_key:"detailsEl",ref:n,class:"thinking-card"},[g("summary",{onClick:i[0]||(i[0]=Bt((...o)=>d(Mt)&&d(Mt)(...o),["prevent"]))},[i[1]||(i[1]=g("i",{class:"ph ph-brain"},null,-1)),ae(" "+y(d(m)("messages.thinking"))+" ",1),e.msg.thinking.done?V("",!0):(h(),w("span",_0)),i[2]||(i[2]=g("i",{class:"ph ph-caret-down thinking-chevron"},null,-1))]),g("div",y0,y(s.value),1)],512))}};/*! @license DOMPurify 3.4.15 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.15/LICENSE */function vd(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,s=Array(t);n2?s-2:0),i=2;i1?n-1:0),a=1;a"u"?null:Ut(BigInt.prototype.toString),Sd=typeof Symbol>"u"?null:Ut(Symbol.prototype.toString),dn=Ut(Object.prototype.hasOwnProperty),za=Ut(Object.prototype.toString),Yt=Ut(RegExp.prototype.test),Bs=L0(TypeError);function Ut(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,s=new Array(n>1?n-1:0),a=1;a2&&arguments[2]!==void 0?arguments[2]:Ya;if(bd&&bd(e,null),!ka(t))return e;let s=t.length;for(;s--;){let a=t[s];if(typeof a=="string"){const i=n(a);i!==a&&(A0(t)||(t[s]=i),a=i)}e[a]=!0}return e}function $0(e){for(let t=0;t/g),H0=Kt(/\${[\w\W]*/g),z0=Kt(/^data-[\-\w.\u00B7-\uFFFF]+$/),K0=Kt(/^aria-[\-\w]+$/),Nd=Kt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),q0=Kt(/^(?:\w+script|data):/i),V0=Kt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W0=Kt(/^html$/i),Y0=Kt(/^[a-z][.\w]*(-[.\w]+)+$/i),Cd=Kt(/<[/\w!]/g),Rd=Kt(/<[/\w]/g),j0=Kt(/<\/no(script|embed|frames)/i),Z0=Kt(/\/>/i),pn={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},hg=["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"],X0=zt(it({},hg)),Q0=(function(){const e={};return Us(hg,t=>{e[t]=Kt(new RegExp("])","i"))}),zt(e)})(),J0=function(){return typeof window>"u"?null:window},ex=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const a="data-tt-policy-suffix";n&&n.hasAttribute(a)&&(s=n.getAttribute(a));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Id=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},ps=function(t,n,s,a){return dn(t,n)&&ka(t[n])?it(a.base?gn(a.base):{},t[n],a.transform):s},nl=function(t,n,s){const a=dn(t,n)?t[n]:void 0;return a&&typeof a=="object"?gn(a):s()};function vg(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:J0();const t=me=>vg(me);if(t.version="3.4.15",t.removed=[],!e||!e.document||e.document.nodeType!==pn.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const s=n,a=s.currentScript;e.DocumentFragment;const i=e.HTMLTemplateElement,o=e.Node,r=e.Element,u=e.NodeFilter,l=e.NamedNodeMap;l===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const c=e.DOMParser,f=e.trustedTypes,p=r.prototype,b=Sn(p,"cloneNode"),_=Sn(p,"remove"),k=Sn(p,"removeAttributeNode"),L=Sn(p,"nextSibling"),R=Sn(p,"childNodes"),x=Sn(p,"parentNode"),S=Sn(p,"shadowRoot"),I=Sn(p,"attributes"),O=o&&o.prototype?Sn(o.prototype,"nodeType"):null,P=o&&o.prototype?Sn(o.prototype,"nodeName"):null,M=o&&o.prototype?Sn(o.prototype,"ownerDocument"):null,$=function(T){return O?O(T):T.nodeType},v=function(T){return P?P(T):T.nodeName};if(typeof i=="function"){const me=n.createElement("template");me.content&&me.content.ownerDocument&&(n=me.content.ownerDocument)}let E,C="",A,B=!1,z=0;const K=function(){if(z>0)throw Bs('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},j=function(T){K(),z++;try{return E.createHTML(T)}finally{z--}},Q=function(T){K(),z++;try{return E.createScriptURL(T)}finally{z--}},ce=function(){return B||(A=ex(f,a),B=!0),A},Be=n,Xe=Be.implementation,De=Be.createNodeIterator,J=Be.createDocumentFragment,le=Be.getElementsByTagName,_e=s.importNode;let Me=Id();t.isSupported=typeof gg=="function"&&typeof x=="function"&&Xe&&Xe.createHTMLDocument!==void 0;const Z=U0,we=G0,se=H0,He=z0,Ke=K0,at=q0,D=V0,U=Y0;let q=Nd,Y=null;const ne=it({},[...Ed,...Qr,...Jr,...el,...Td]);let X=null;const pe=it({},[...Ad,...tl,...xd,...Bi]);let oe=Object.seal(pa(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ue=null,re=null;const ye=Object.seal(pa(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ve=!0,Re=!0,Ne=!1,Ie=!0,Ve=!1,Qe=!0,nt=!1,dt=!1,Ot=null,Ct=null,Jt=!1,Vt=!1,wt=!1,Rt=!1,Cn=!0,St=!1;const us="user-content-";let he=!0,Dt=!1,Pt={},Ae=null;const H=it({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let ie=null;const Se=it({},["audio","video","img","source","image","track"]);let qe=null;const Et=it({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),bt="http://www.w3.org/1998/Math/MathML",Oe="http://www.w3.org/2000/svg",Te="http://www.w3.org/1999/xhtml";let Ue=Te,It=!1,Tt=null;const Ts=it({},[bt,Oe,Te],Xr),sa=zt(["mi","mo","mn","ms","mtext"]);let As=it({},sa);const Ti=zt(["annotation-xml"]);let xs=it({},Ti);const Fo=it({},["title","style","font","a","script"]);let Ns=null;const Uo=["application/xhtml+xml","text/html"],Ai="text/html";let _t=null,ds=null;const Go=n.createElement("form"),xi=function(T){return T instanceof RegExp||T instanceof Function},_n=function(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(ds&&ds===T)return;(!T||typeof T!="object")&&(T={}),T=gn(T),Ns=Uo.indexOf(T.PARSER_MEDIA_TYPE)===-1?Ai:T.PARSER_MEDIA_TYPE,_t=Ns==="application/xhtml+xml"?Xr:Ya,Y=ps(T,"ALLOWED_TAGS",ne,{transform:_t}),X=ps(T,"ALLOWED_ATTR",pe,{transform:_t}),Tt=ps(T,"ALLOWED_NAMESPACES",Ts,{transform:Xr}),qe=ps(T,"ADD_URI_SAFE_ATTR",Et,{transform:_t,base:Et}),ie=ps(T,"ADD_DATA_URI_TAGS",Se,{transform:_t,base:Se}),Ae=ps(T,"FORBID_CONTENTS",H,{transform:_t}),ue=ps(T,"FORBID_TAGS",gn({}),{transform:_t}),re=ps(T,"FORBID_ATTR",gn({}),{transform:_t}),Pt=dn(T,"USE_PROFILES")?T.USE_PROFILES&&typeof T.USE_PROFILES=="object"?gn(T.USE_PROFILES):T.USE_PROFILES:!1,ve=T.ALLOW_ARIA_ATTR!==!1,Re=T.ALLOW_DATA_ATTR!==!1,Ne=T.ALLOW_UNKNOWN_PROTOCOLS||!1,Ie=T.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ve=T.SAFE_FOR_TEMPLATES||!1,Qe=T.SAFE_FOR_XML!==!1,nt=T.WHOLE_DOCUMENT||!1,Vt=T.RETURN_DOM||!1,wt=T.RETURN_DOM_FRAGMENT||!1,Rt=T.RETURN_TRUSTED_TYPE||!1,Jt=T.FORCE_BODY||!1,Cn=T.SANITIZE_DOM!==!1,St=T.SANITIZE_NAMED_PROPS||!1,he=T.KEEP_CONTENT!==!1,Dt=T.IN_PLACE||!1,q=P0(T.ALLOWED_URI_REGEXP)?T.ALLOWED_URI_REGEXP:Nd,Ue=typeof T.NAMESPACE=="string"?T.NAMESPACE:Te,As=nl(T,"MATHML_TEXT_INTEGRATION_POINTS",()=>it({},sa)),xs=nl(T,"HTML_INTEGRATION_POINTS",()=>it({},Ti));const G=nl(T,"CUSTOM_ELEMENT_HANDLING",()=>pa(null));if(oe=pa(null),dn(G,"tagNameCheck")&&xi(G.tagNameCheck)&&(oe.tagNameCheck=G.tagNameCheck),dn(G,"attributeNameCheck")&&xi(G.attributeNameCheck)&&(oe.attributeNameCheck=G.attributeNameCheck),dn(G,"allowCustomizedBuiltInElements")&&typeof G.allowCustomizedBuiltInElements=="boolean"&&(oe.allowCustomizedBuiltInElements=G.allowCustomizedBuiltInElements),Kt(oe),Ve&&(Re=!1),wt&&(Vt=!0),Pt&&(Y=it({},Td),X=pa(null),Pt.html===!0&&(it(Y,Ed),it(X,Ad)),Pt.svg===!0&&(it(Y,Qr),it(X,tl),it(X,Bi)),Pt.svgFilters===!0&&(it(Y,Jr),it(X,tl),it(X,Bi)),Pt.mathMl===!0&&(it(Y,el),it(X,xd),it(X,Bi))),ye.tagCheck=null,ye.attributeCheck=null,dn(T,"ADD_TAGS")&&(typeof T.ADD_TAGS=="function"?ye.tagCheck=T.ADD_TAGS:ka(T.ADD_TAGS)&&(Y===ne&&(Y=gn(Y)),it(Y,T.ADD_TAGS,_t))),dn(T,"ADD_ATTR")&&(typeof T.ADD_ATTR=="function"?ye.attributeCheck=T.ADD_ATTR:ka(T.ADD_ATTR)&&(X===pe&&(X=gn(X)),it(X,T.ADD_ATTR,_t))),dn(T,"ADD_FORBID_CONTENTS")&&ka(T.ADD_FORBID_CONTENTS)&&(Ae===H&&(Ae=gn(Ae)),it(Ae,T.ADD_FORBID_CONTENTS,_t)),he&&(Y["#text"]=!0),nt&&it(Y,["html","head","body"]),Y.table&&(it(Y,["tbody"]),delete ue.tbody),T.TRUSTED_TYPES_POLICY){if(typeof T.TRUSTED_TYPES_POLICY.createHTML!="function")throw Bs('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof T.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Bs('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const te=E;E=T.TRUSTED_TYPES_POLICY;try{C=j("")}catch(de){throw E=te,de}}else T.TRUSTED_TYPES_POLICY===null?(E=void 0,C=""):(E===void 0&&(E=ce()),E&&typeof C=="string"&&(C=j("")));zt&&zt(T),ds=T},Oa=it({},[...Qr,...Jr,...B0]),Ma=it({},[...el,...F0]),Ho=function(T,G,te){return G.namespaceURI===Te?T==="svg":G.namespaceURI===bt?T==="svg"&&(te==="annotation-xml"||As[te]):!!Oa[T]},zo=function(T,G,te){return G.namespaceURI===Te?T==="math":G.namespaceURI===Oe?T==="math"&&xs[te]:!!Ma[T]},Ko=function(T,G,te){return G.namespaceURI===Oe&&!xs[te]||G.namespaceURI===bt&&!As[te]?!1:!Ma[T]&&(Fo[T]||!Oa[T])},aa=function(T){let G=x(T);(!G||!G.tagName)&&(G={namespaceURI:Ue,tagName:"template"});const te=Ya(T.tagName),de=Ya(G.tagName);return Tt[T.namespaceURI]?T.namespaceURI===Oe?Ho(te,G,de):T.namespaceURI===bt?zo(te,G,de):T.namespaceURI===Te?Ko(te,G,de):!!(Ns==="application/xhtml+xml"&&Tt[T.namespaceURI]):!1},Ln=function(T){Ga(t.removed,{element:T});try{x(T).removeChild(T)}catch{if(_(T),!x(T))throw Bs("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},be=function(T,G,te){try{k(T,G)}catch{try{T.removeAttribute(te)}catch{}}},$e=function(T){At(T);const G=R(T);if(G){const de=[];Us(G,xe=>{Ga(de,xe)}),Us(de,xe=>{try{_(xe)}catch{}})}const te=I(T);if(te)for(let de=te.length-1;de>=0;--de){const xe=te[de],Pe=xe&&xe.name;typeof Pe=="string"&&be(T,xe,Pe)}},Ze=function(T,G,te){if(!te)try{te=G.getAttributeNode(T)}catch{te=null}Ga(t.removed,{attribute:te||null,from:G});try{te?k(G,te):G.removeAttribute(T)}catch{try{G.removeAttribute(T)}catch{}}if(T==="is")if(Vt||wt)try{Ln(G)}catch{}else try{G.setAttribute(T,"")}catch{}},ft=function(T){const G=I(T);if(G)for(let te=G.length-1;te>=0;--te){const de=G[te],xe=de&&de.name;typeof xe!="string"||X[_t(xe)]||be(T,de,xe)}},At=function(T){const G=[T];for(;G.length>0;){const te=G.pop();$(te)===pn.element&&ft(te);const xe=R(te);if(xe)for(let Pe=xe.length-1;Pe>=0;--Pe)G.push(xe[Pe])}},ln=function(T,G){return Qe?T==="patchsrc"?!0:T==="for"&&G!=="label"&&G!=="output":!1},$n=function(T){if(!Qe)return;const G=[T];for(;G.length>0;){const te=G.pop(),de=$(te);if(de===pn.processingInstruction||de===pn.comment&&Yt(Rd,te.data)){try{_(te)}catch{}continue}if(de===pn.element){const Pe=te,gt=_t(v(te));try{Pe.hasAttribute&&Pe.hasAttribute("patchsrc")&&Pe.removeAttribute("patchsrc"),Pe.hasAttribute&&Pe.hasAttribute("for")&&ln("for",gt)&&Pe.removeAttribute("for")}catch{}}const xe=R(te);if(xe)for(let Pe=xe.length-1;Pe>=0;--Pe)G.push(xe[Pe])}},Cs=function(T){let G=null,te=null;if(Jt)T=""+T;else{const Pe=yd(T,/^[\r\n\t ]+/);te=Pe&&Pe[0]}Ns==="application/xhtml+xml"&&Ue===Te&&(T=''+T+"");const de=E?j(T):T;if(Ue===Te)try{G=new c().parseFromString(de,Ns)}catch{}if(!G||!G.documentElement){G=Xe.createDocument(Ue,"template",null);try{G.documentElement.innerHTML=It?C:de}catch{}}const xe=G.body||G.documentElement;return T&&te&&xe.insertBefore(n.createTextNode(te),xe.childNodes[0]||null),Ue===Te?le.call(G,nt?"html":"body")[0]:nt?G.documentElement:xe},Wt=function(T){const G=M?M(T):T.ownerDocument;return De.call(G||T,T,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},en=function(T){return T=Ha(T,Z," "),T=Ha(T,we," "),T=Ha(T,se," "),T},ia=function(T){var G;T.normalize();const te=M?M(T):T.ownerDocument,de=De.call(te||T,T,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null);let xe=de.nextNode();for(;xe;)xe.data=en(xe.data),xe=de.nextNode();const Pe=(G=T.querySelectorAll)===null||G===void 0?void 0:G.call(T,"template");Pe&&Us(Pe,gt=>{jn(gt.content)&&ia(gt.content)})},Rs=function(T){const G=P?P(T):null;return typeof G!="string"||_t(G)!=="form"?!1:typeof T.nodeName!="string"||typeof T.textContent!="string"||typeof T.removeChild!="function"||T.attributes!==I(T)||typeof T.removeAttribute!="function"||typeof T.removeAttributeNode!="function"||typeof T.getAttributeNode!="function"||typeof T.setAttribute!="function"||typeof T.namespaceURI!="string"||typeof T.insertBefore!="function"||typeof T.hasChildNodes!="function"||T.nodeType!==O(T)||T.childNodes!==R(T)},jn=function(T){if(!O||typeof T!="object"||T===null)return!1;try{return O(T)===pn.documentFragment}catch{return!1}},Is=function(T){if(!O||typeof T!="object"||T===null)return!1;try{return typeof O(T)=="number"}catch{return!1}};function yn(me,T,G){me.length!==0&&Us(me,te=>{te.call(t,T,G,ds)})}const qo=function(T,G){return!!(Qe&&T.hasChildNodes()&&!Is(T.firstElementChild)&&Yt(Cd,T.textContent)&&Yt(Cd,T.innerHTML)||Qe&&T.namespaceURI===Te&&X0[G]&&(Is(T.firstElementChild)||typeof T.textContent=="string"&&Yt(Q0[G],T.textContent))||T.nodeType===pn.processingInstruction||Qe&&T.nodeType===pn.comment&&Yt(Rd,T.data))},oa=function(T,G){if(T instanceof RegExp)return Yt(T,G);if(T instanceof Function){for(var te=arguments.length,de=new Array(te>2?te-2:0),xe=2;xe=0;--gt){const kt=T===te?b(xe[gt],!0):xe[gt];de.insertBefore(kt,L(T))}}}return Ln(T),!0},La=function(T,G,te,de){return T.length===0?G:G===te||G===de?gn(G):G},fn=function(T,G){return T===G||x(T)!==null?!1:(Dt&&At(T),!0)},Ni=function(T,G){if(yn(Me.beforeSanitizeElements,T,null),fn(T,G))return!0;if(Rs(T))return Ln(T),!0;const te=_t(v(T));if(Y=La(Me.uponSanitizeElement,Y,ne,Ot),yn(Me.uponSanitizeElement,T,{tagName:te,allowedTags:Y}),fn(T,G))return!0;if(qo(T,te))return Ln(T),!0;if(ue[te]||!(ye.tagCheck instanceof Function&&ye.tagCheck(te))&&!Y[te]){const xe=ra(T,te,G);return xe===!1&&yn(Me.afterSanitizeElements,T,null),xe}if($(T)===pn.element&&!aa(T)||(te==="noscript"||te==="noembed"||te==="noframes")&&Yt(j0,T.innerHTML))return Ln(T),!0;if(Ve&&T.nodeType===pn.text){const xe=en(T.textContent);T.textContent!==xe&&(Ga(t.removed,{element:T.cloneNode()}),T.textContent=xe)}return yn(Me.afterSanitizeElements,T,null),!1},la=function(T,G,te){if(re[G]||ln(G,T)||Cn&&(G==="id"||G==="name")&&(te in n||te in Go))return!1;const de=X[G]||ye.attributeCheck instanceof Function&&ye.attributeCheck(G,T);return Re&&Yt(He,G)||ve&&Yt(Ke,G)?!0:de?qe[G]||Yt(q,Ha(te,D,""))||(G==="src"||G==="xlink:href"||G==="href")&&T!=="script"&&kd(te,"data:")===0&&ie[T]||Ne&&!Yt(at,Ha(te,D,""))?!0:!te:$a(T)&&oa(oe.tagNameCheck,T)&&oa(oe.attributeNameCheck,G,T)||G==="is"&&oe.allowCustomizedBuiltInElements&&oa(oe.tagNameCheck,te)},We=it({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),$a=function(T){return!We[Ya(T)]&&Yt(U,T)},Ht=function(T,G,te,de){if(E&&typeof f=="object"&&typeof f.getAttributeType=="function"&&!te)switch(f.getAttributeType(T,G)){case"TrustedHTML":return j(de);case"TrustedScriptURL":return Q(de)}return de},pt=function(T,G,te,de){try{return te?T.setAttributeNS(te,G,de):T.setAttribute(G,de),Rs(T)?(Ln(T),!1):!0}catch{return Ze(G,T),!1}},Os=function(T){yn(Me.beforeSanitizeAttributes,T,null);const G=T.attributes;if(!G||Rs(T))return;X=La(Me.uponSanitizeAttribute,X,pe,Ct);const te={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:X,forceKeepAttr:void 0};let de=G.length;const xe=_t(T.nodeName);for(;de--;){const Pe=G[de],gt=Pe.name,kt=Pe.namespaceURI,cn=Pe.value,un=_t(gt),Vo=cn;let tn=gt==="value"?Vo:I0(Vo),kc=!1;if(te.attrName=un,te.attrValue=tn,te.keepAttr=!0,te.forceKeepAttr=void 0,yn(Me.uponSanitizeAttribute,T,te),tn=te.attrValue,St&&(un==="id"||un==="name")&&kd(tn,us)!==0&&(Ze(gt,T,Pe),tn=us+tn,kc=!0),Qe&&Yt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,tn)){Ze(gt,T,Pe);continue}if(un==="attributename"&&yd(tn,"href")){Ze(gt,T,Pe);continue}if(!te.forceKeepAttr){if(!te.keepAttr){Ze(gt,T,Pe);continue}if(!Ie&&Yt(Z0,tn)){Ze(gt,T,Pe);continue}if(Ve&&(tn=en(tn)),!la(xe,un,tn)){Ze(gt,T,Pe);continue}tn=Ht(xe,un,kt,tn),tn!==Vo&&pt(T,gt,kt,tn)&&kc&&_d(t.removed)}}yn(Me.afterSanitizeAttributes,T,null)},kn=function(T){let G=null;const te=Wt(T);for(yn(Me.beforeSanitizeShadowDOM,T,null);G=te.nextNode();)if(yn(Me.uponSanitizeShadowNode,G,null),Ni(G,T),Os(G),jn(G.content)&&kn(G.content),$(G)===pn.element){const de=S(G);jn(de)&&(Ms(de),kn(de))}yn(Me.afterSanitizeShadowDOM,T,null)},Ms=function(T){const G=[{node:T,shadow:null}];for(;G.length>0;){const te=G.pop();if(te.shadow){kn(te.shadow);continue}const de=te.node,Pe=$(de)===pn.element,gt=R(de);if(gt)for(let kt=gt.length-1;kt>=0;--kt)G.push({node:gt[kt],shadow:null});if(Pe){const kt=P?P(de):null;if(typeof kt=="string"&&_t(kt)==="template"){const cn=de.content;jn(cn)&&G.push({node:cn,shadow:null})}}if(Pe){const kt=S(de);jn(kt)&&G.push({node:null,shadow:kt},{node:kt,shadow:null})}}};return t.sanitize=function(me){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},G=null,te=null,de=null,xe=null;if(It=!me,It&&(me=""),typeof me!="string"&&!Is(me)&&(me=D0(me),typeof me!="string"))throw Bs("dirty is not a string, aborting");if(!t.isSupported)return me;dt?(Y=Ot,X=Ct):_n(T),(Me.uponSanitizeElement.length>0||Me.uponSanitizeAttribute.length>0)&&(Y=gn(Y)),Me.uponSanitizeAttribute.length>0&&(X=gn(X)),t.removed=[];const Pe=Dt&&typeof me!="string"&&Is(me);if(Pe){$n(me);const cn=v(me);if(typeof cn=="string"){const un=_t(cn);if(!Y[un]||ue[un])throw $e(me),Bs("root node is forbidden and cannot be sanitized in-place")}if(Rs(me))throw $e(me),Bs("root node is clobbered and cannot be sanitized in-place");try{Ms(me)}catch(un){throw $e(me),un}}else if(Is(me))G=Cs(""),te=G.ownerDocument.importNode(me,!0),te.nodeType===pn.element&&te.nodeName==="BODY"||te.nodeName==="HTML"?G=te:G.appendChild(te),Ms(G);else{if(!Vt&&!Ve&&!nt&&me.indexOf("<")===-1)return E&&Rt?j(me):me;if(G=Cs(me),!G)return Vt?null:Rt?C:""}G&&Jt&&Ln(G.firstChild);const gt=Pe?me:G;try{const cn=Wt(gt);for(;de=cn.nextNode();)Ni(de,gt),Os(de),jn(de.content)&&kn(de.content)}catch(cn){throw Pe&&($e(me),Us(t.removed,un=>{un.element&&At(un.element)})),cn}if(Pe)return Us(t.removed,cn=>{cn.element&&At(cn.element)}),Ve&&ia(me),me;if(Vt){if(Ve&&ia(G),wt)for(xe=J.call(G.ownerDocument);G.firstChild;)xe.appendChild(G.firstChild);else xe=G;return(X.shadowroot||X.shadowrootmode)&&(xe=_e.call(s,xe,!0)),xe}let kt=nt?G.outerHTML:G.innerHTML;return nt&&Y["!doctype"]&&G.ownerDocument&&G.ownerDocument.doctype&&G.ownerDocument.doctype.name&&Yt(W0,G.ownerDocument.doctype.name)&&(kt=" +`+kt),Ve&&(kt=en(kt)),E&&Rt?j(kt):kt},t.setConfig=function(){let me=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_n(me),dt=!0,Ot=Y,Ct=X},t.clearConfig=function(){ds=null,dt=!1,Ot=null,Ct=null,E=A,C=""},t.isValidAttribute=function(me,T,G){ds||_n({});const te=_t(me),de=_t(T);return la(te,de,G)},t.addHook=function(me,T){typeof T=="function"&&dn(Me,me)&&Ga(Me[me],T)},t.removeHook=function(me,T){if(dn(Me,me)){if(T!==void 0){const G=C0(Me[me],T);return G===-1?void 0:R0(Me[me],G,1)[0]}return _d(Me[me])}},t.removeHooks=function(me){dn(Me,me)&&(Me[me]=[])},t.removeAllHooks=function(){Me=Id()},t}var bg=vg();function uc(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var na=uc();function _g(e){na=e}var ii={exec:()=>null};function ut(e,t=""){let n=typeof e=="string"?e:e.source;const s={replace:(a,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(on.caret,"$1"),n=n.replace(a,o),s},getRegex:()=>new RegExp(n,t)};return s}var on={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},tx=/^(?:[ \t]*(?:\n|$))+/,nx=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,sx=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ei=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ax=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,dc=/(?:[*+-]|\d{1,9}[.)])/,yg=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,kg=ut(yg).replace(/bull/g,dc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),ix=ut(yg).replace(/bull/g,dc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),fc=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ox=/^[^\n]+/,pc=/(?!\s*\])(?:\\.|[^\[\]\\])+/,rx=ut(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",pc).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),lx=ut(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,dc).getRegex(),Po="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",gc=/|$))/,cx=ut("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",gc).replace("tag",Po).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),wg=ut(fc).replace("hr",Ei).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex(),ux=ut(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",wg).getRegex(),mc={blockquote:ux,code:nx,def:rx,fences:sx,heading:ax,hr:Ei,html:cx,lheading:kg,list:lx,newline:tx,paragraph:wg,table:ii,text:ox},Od=ut("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ei).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex(),dx={...mc,lheading:ix,table:Od,paragraph:ut(fc).replace("hr",Ei).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Od).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex()},fx={...mc,html:ut(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",gc).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ii,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ut(fc).replace("hr",Ei).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",kg).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},px=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,gx=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Sg=/^( {2,}|\\)\n(?!\s*$)/,mx=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Ag=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,yx=ut(Ag,"u").replace(/punct/g,Bo).getRegex(),kx=ut(Ag,"u").replace(/punct/g,Tg).getRegex(),xg="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",wx=ut(xg,"gu").replace(/notPunctSpace/g,Eg).replace(/punctSpace/g,hc).replace(/punct/g,Bo).getRegex(),Sx=ut(xg,"gu").replace(/notPunctSpace/g,bx).replace(/punctSpace/g,vx).replace(/punct/g,Tg).getRegex(),Ex=ut("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Eg).replace(/punctSpace/g,hc).replace(/punct/g,Bo).getRegex(),Tx=ut(/\\(punct)/,"gu").replace(/punct/g,Bo).getRegex(),Ax=ut(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),xx=ut(gc).replace("(?:-->|$)","-->").getRegex(),Nx=ut("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",xx).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),uo=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Cx=ut(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",uo).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ng=ut(/^!?\[(label)\]\[(ref)\]/).replace("label",uo).replace("ref",pc).getRegex(),Cg=ut(/^!?\[(ref)\](?:\[\])?/).replace("ref",pc).getRegex(),Rx=ut("reflink|nolink(?!\\()","g").replace("reflink",Ng).replace("nolink",Cg).getRegex(),vc={_backpedal:ii,anyPunctuation:Tx,autolink:Ax,blockSkip:_x,br:Sg,code:gx,del:ii,emStrongLDelim:yx,emStrongRDelimAst:wx,emStrongRDelimUnd:Ex,escape:px,link:Cx,nolink:Cg,punctuation:hx,reflink:Ng,reflinkSearch:Rx,tag:Nx,text:mx,url:ii},Ix={...vc,link:ut(/^!?\[(label)\]\((.*?)\)/).replace("label",uo).getRegex(),reflink:ut(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",uo).getRegex()},Ol={...vc,emStrongRDelimAst:Sx,emStrongLDelim:kx,url:ut(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Md=e=>Mx[e];function Bn(e,t){if(t){if(on.escapeTest.test(e))return e.replace(on.escapeReplace,Md)}else if(on.escapeTestNoEncode.test(e))return e.replace(on.escapeReplaceNoEncode,Md);return e}function Ld(e){try{e=encodeURI(e).replace(on.percentDecode,"%")}catch{return null}return e}function $d(e,t){var i;const n=e.replace(on.findPipe,(o,r,u)=>{let l=!1,c=r;for(;--c>=0&&u[c]==="\\";)l=!l;return l?"|":" |"}),s=n.split(on.splitPipe);let a=0;if(s[0].trim()||s.shift(),s.length>0&&!((i=s.at(-1))!=null&&i.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function Dd(e,t,n,s,a){const i=t.href,o=t.title||null,r=e[1].replace(a.other.outputLinkReplace,"$1");s.state.inLink=!0;const u={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:r,tokens:s.inlineTokens(r)};return s.state.inLink=!1,u}function $x(e,t,n){const s=e.match(n.other.indentCodeCompensation);if(s===null)return t;const a=s[1];return t.split(` +`).map(i=>{const o=i.match(n.other.beginningSpace);if(o===null)return i;const[r]=o;return r.length>=a.length?i.slice(a.length):i}).join(` +`)}var fo=class{constructor(e){mt(this,"options");mt(this,"rules");mt(this,"lexer");this.options=e||na}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:qa(n,` +`)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const n=t[0],s=$x(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){const s=qa(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:qa(t[0],` +`)}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let n=qa(t[0],` +`).split(` +`),s="",a="";const i=[];for(;n.length>0;){let o=!1;const r=[];let u;for(u=0;u1,a={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=this.rules.other.listItemRegex(n);let o=!1;for(;e;){let u=!1,l="",c="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let f=t[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,R=>" ".repeat(3*R.length)),p=e.split(` +`,1)[0],b=!f.trim(),_=0;if(this.options.pedantic?(_=2,c=f.trimStart()):b?_=t[1].length+1:(_=t[2].search(this.rules.other.nonSpaceChar),_=_>4?1:_,c=f.slice(_),_+=t[1].length),b&&this.rules.other.blankLine.test(p)&&(l+=p+` +`,e=e.substring(p.length+1),u=!0),!u){const R=this.rules.other.nextBulletRegex(_),x=this.rules.other.hrRegex(_),S=this.rules.other.fencesBeginRegex(_),I=this.rules.other.headingBeginRegex(_),O=this.rules.other.htmlBeginRegex(_);for(;e;){const P=e.split(` +`,1)[0];let M;if(p=P,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),M=p):M=p.replace(this.rules.other.tabCharGlobal," "),S.test(p)||I.test(p)||O.test(p)||R.test(p)||x.test(p))break;if(M.search(this.rules.other.nonSpaceChar)>=_||!p.trim())c+=` +`+M.slice(_);else{if(b||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(f)||I.test(f)||x.test(f))break;c+=` +`+p}!b&&!p.trim()&&(b=!0),l+=P+` +`,e=e.substring(P.length+1),f=M.slice(_)}}a.loose||(o?a.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(o=!0));let k=null,L;this.options.gfm&&(k=this.rules.other.listIsTask.exec(c),k&&(L=k[0]!=="[ ] ",c=c.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:l,task:!!k,checked:L,loose:!1,text:c,tokens:[]}),a.raw+=l}const r=a.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let u=0;uf.type==="space"),c=l.length>0&&l.some(f=>this.rules.other.anyLine.test(f.raw));a.loose=c}if(a.loose)for(let u=0;u({text:u,tokens:this.lexer.inline(u),header:!1,align:i.align[l]})));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const n=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;const i=qa(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{const i=Lx(t[2],"()");if(i===-2)return;if(i>-1){const r=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let s=t[2],a="";if(this.options.pedantic){const i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],a=i[3])}else a=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),Dd(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=t[s.toLowerCase()];if(!a){const i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return Dd(n,a,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||s[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const i=[...s[0]].length-1;let o,r,u=i,l=0;const c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!=null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(r=[...o].length,s[3]||s[4]){u+=r;continue}else if((s[5]||s[6])&&i%3&&!((i+r)%3)){l+=r;continue}if(u-=r,u>0)continue;r=Math.min(r,r+u+l);const f=[...s[0]][0].length,p=e.slice(0,i+s.index+f+r);if(Math.min(i,r)%2){const _=p.slice(1,-1);return{type:"em",raw:p,text:_,tokens:this.lexer.inlineTokens(_)}}const b=p.slice(2,-2);return{type:"strong",raw:p,text:b,tokens:this.lexer.inlineTokens(b)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," ");const s=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n;let t;if(t=this.rules.inline.url.exec(e)){let s,a;if(t[2]==="@")s=t[0],a="mailto:"+s;else{let i;do i=t[0],t[0]=((n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])??"";while(i!==t[0]);s=t[0],t[1]==="www."?a="http://"+t[0]:a=t[0]}return{type:"link",raw:t[0],text:s,href:a,tokens:[{type:"text",raw:s,text:s}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){const n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},ns=class Ml{constructor(t){mt(this,"tokens");mt(this,"options");mt(this,"state");mt(this,"tokenizer");mt(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||na,this.options.tokenizer=this.options.tokenizer||new fo,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={other:on,block:Fi.normal,inline:Ka.normal};this.options.pedantic?(n.block=Fi.pedantic,n.inline=Ka.pedantic):this.options.gfm&&(n.block=Fi.gfm,this.options.breaks?n.inline=Ka.breaks:n.inline=Ka.gfm),this.tokenizer.rules=n}static get rules(){return{block:Fi,inline:Ka}}static lex(t,n){return new Ml(n).lex(t)}static lexInline(t,n){return new Ml(n).inlineTokens(t)}lex(t){t=t.replace(on.carriageReturn,` +`),this.blockTokens(t,this.tokens);for(let n=0;n(r=l.call({lexer:this},t,n))?(t=t.substring(r.raw.length),n.push(r),!0):!1))continue;if(r=this.tokenizer.space(t)){t=t.substring(r.raw.length);const l=n.at(-1);r.raw.length===1&&l!==void 0?l.raw+=` +`:n.push(r);continue}if(r=this.tokenizer.code(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="paragraph"||(l==null?void 0:l.type)==="text"?(l.raw+=` +`+r.raw,l.text+=` +`+r.text,this.inlineQueue.at(-1).src=l.text):n.push(r);continue}if(r=this.tokenizer.fences(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.heading(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.hr(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.blockquote(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.list(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.html(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.def(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="paragraph"||(l==null?void 0:l.type)==="text"?(l.raw+=` +`+r.raw,l.text+=` +`+r.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),n.push(r);continue}let u=t;if((o=this.options.extensions)!=null&&o.startBlock){let l=1/0;const c=t.slice(1);let f;this.options.extensions.startBlock.forEach(p=>{f=p.call({lexer:this},c),typeof f=="number"&&f>=0&&(l=Math.min(l,f))}),l<1/0&&l>=0&&(u=t.substring(0,l+1))}if(this.state.top&&(r=this.tokenizer.paragraph(u))){const l=n.at(-1);s&&(l==null?void 0:l.type)==="paragraph"?(l.raw+=` +`+r.raw,l.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(r),s=u.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="text"?(l.raw+=` +`+r.raw,l.text+=` +`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(r);continue}if(t){const l="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var r,u,l;let s=t,a=null;if(this.tokens.links){const c=Object.keys(this.tokens.links);if(c.length>0)for(;(a=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(a=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,a.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(a=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,o="";for(;t;){i||(o=""),i=!1;let c;if((u=(r=this.options.extensions)==null?void 0:r.inline)!=null&&u.some(p=>(c=p.call({lexer:this},t,n))?(t=t.substring(c.raw.length),n.push(c),!0):!1))continue;if(c=this.tokenizer.escape(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.tag(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.link(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(c.raw.length);const p=n.at(-1);c.type==="text"&&(p==null?void 0:p.type)==="text"?(p.raw+=c.raw,p.text+=c.text):n.push(c);continue}if(c=this.tokenizer.emStrong(t,s,o)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.codespan(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.br(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.del(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.autolink(t)){t=t.substring(c.raw.length),n.push(c);continue}if(!this.state.inLink&&(c=this.tokenizer.url(t))){t=t.substring(c.raw.length),n.push(c);continue}let f=t;if((l=this.options.extensions)!=null&&l.startInline){let p=1/0;const b=t.slice(1);let _;this.options.extensions.startInline.forEach(k=>{_=k.call({lexer:this},b),typeof _=="number"&&_>=0&&(p=Math.min(p,_))}),p<1/0&&p>=0&&(f=t.substring(0,p+1))}if(c=this.tokenizer.inlineText(f)){t=t.substring(c.raw.length),c.raw.slice(-1)!=="_"&&(o=c.raw.slice(-1)),i=!0;const p=n.at(-1);(p==null?void 0:p.type)==="text"?(p.raw+=c.raw,p.text+=c.text):n.push(c);continue}if(t){const p="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return n}},po=class{constructor(e){mt(this,"options");mt(this,"parser");this.options=e||na}space(e){return""}code({text:e,lang:t,escaped:n}){var i;const s=(i=(t||"").match(on.notSpaceStart))==null?void 0:i[0],a=e.replace(on.endingNewline,"")+` +`;return s?'
'+(n?a:Bn(a,!0))+`
+`:"
"+(n?a:Bn(a,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){const t=e.ordered,n=e.start;let s="";for(let o=0;o +`+s+" +`}listitem(e){var n;let t="";if(e.task){const s=this.checkbox({checked:!!e.checked});e.loose?((n=e.tokens[0])==null?void 0:n.type)==="paragraph"?(e.tokens[0].text=s+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=s+" "+Bn(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:s+" ",text:s+" ",escaped:!0}):t+=s+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

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

    An error occurred:

    "+Bn(n.message+"",!0)+"
    ";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},ea=new Dx;function rt(e,t){return ea.parse(e,t)}rt.options=rt.setOptions=function(e){return ea.setOptions(e),rt.defaults=ea.defaults,_g(rt.defaults),rt};rt.getDefaults=uc;rt.defaults=na;rt.use=function(...e){return ea.use(...e),rt.defaults=ea.defaults,_g(rt.defaults),rt};rt.walkTokens=function(e,t){return ea.walkTokens(e,t)};rt.parseInline=ea.parseInline;rt.Parser=ss;rt.parser=ss.parse;rt.Renderer=po;rt.TextRenderer=bc;rt.Lexer=ns;rt.lexer=ns.lex;rt.Tokenizer=fo;rt.Hooks=Yi;rt.parse=rt;rt.options;rt.setOptions;rt.use;rt.walkTokens;rt.parseInline;ss.parse;ns.lex;rt.setOptions({breaks:!0,gfm:!0});function Px(e){if(e.tagName!=="A")return;const t=e.getAttribute("href");!t||t.startsWith("#")||(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))}bg.addHook("afterSanitizeAttributes",Px);const _c=new rt.Renderer;_c.code=function({text:e,lang:t}){const n=t&&Ta.getLanguage(t)?t:"plaintext",s=Ta.highlight(e,{language:n}).value;return`
    ${n}
    ${s}
    `};function Bx(e){const t=String(e??"").trim();return/^data:image\//i.test(t)||/^https?:\/\//i.test(t)||t.startsWith("/")&&!t.startsWith("//")?t:""}_c.image=function({href:e,title:t,text:n}){const s=Bx(e),a=String(n??"").replace(/"/g,""");return s?`
    ${a}`:``};rt.use({renderer:_c});function Fx(e){const t=e.split(` +`),n=[],s=r=>r.trim().startsWith("|")&&r.includes("|",1),a=r=>/^:?-+:?$/.test(r.trim()),i=r=>r.split("|").slice(1,-1).length;let o=!1;for(let r=0;r!a(b));if(f){o||(o=!0,n.push(u));continue}s(l)&&(o||(p?r+1]*)?>/g,'
    ').replace(/<\/table>/g,"
    "),i=bg.sanitize(a);if(t.length>=zx){gs.set(t,i);let o=t.length+i.length;for(;gs.size>1&&o>Hx;){const r=gs.keys().next().value;o-=r.length+gs.get(r).length,gs.delete(r)}}return i}function Kx(e){e==null||e.querySelectorAll(".copy-btn").forEach(t=>{t.onclick=()=>{var a;const n=decodeURIComponent(t.dataset.code??""),s=()=>{t.innerHTML='',setTimeout(()=>{t.innerHTML=''},1500)};if((a=navigator.clipboard)!=null&&a.writeText)navigator.clipboard.writeText(n).then(s);else{const i=document.createElement("textarea");i.value=n,i.style.cssText="position:fixed;opacity:0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),s()}}})}const{open:qx}=Ca();function Vx(e){e==null||e.querySelectorAll("img.msg-md-image").forEach(t=>{t.addEventListener("error",()=>{var n;t.classList.add("is-broken"),(n=t.closest(".msg-md-image-link"))==null||n.classList.add("is-broken")})}),e==null||e.querySelectorAll("a.msg-md-image-link").forEach(t=>{t.addEventListener("click",n=>{if(t.classList.contains("is-broken"))return;n.preventDefault();const s=t.dataset.lightbox||t.getAttribute("href");s&&qx(s)})})}const Wx={class:"tool-status-icon"},Yx={key:0,class:"spinner"},jx={key:1,class:"ph ph-check-circle"},Zx={key:2,class:"ph ph-x-circle"},Xx={class:"tool-name"},Qx={key:0,class:"tool-running-time"},Jx={class:"tool-card-body"},eN={key:0,class:"tool-args"},tN={class:"tool-section-label"},nN={class:"tool-section"},sN=["innerHTML"],aN={key:1,class:"tool-section tool-result-section"},iN={class:"tool-section-label"},oN=["innerHTML"],rN={__name:"SubagentStep",props:{tool:{type:Object,required:!0}},setup(e){function t(l){return typeof l!="string"?!1:[/#{1,6} /,/\*\*|__/,/`[^`]+`/,/```/,/^\s*[-*+]\s/m,/^\s*\d+\.\s/m,/\[[^\]]+\]\([^)]+\)/,/\|.*\|/,/^\s*>\s/m].some(f=>f.test(l))}const n=e,s=F(null);Ge(()=>n.tool.pending,(l,c)=>{s.value&&(l?ya(s.value,!0,{animate:c!==void 0}):c!==void 0&&ya(s.value,!1))},{immediate:!0});function a(l){return o(l)}function i(l){if(typeof l=="string"){try{const c=JSON.parse(l);return o(c)}catch{}return t(l)?Tn(l):u(l).split(` +`).map((c,f)=>`
    ${c||" "}
    `).join("")}return o(l)}function o(l){if(typeof l=="string")try{l=JSON.parse(l)}catch{return u(l)}if(l===null||typeof l!="object")return u(String(l));if(Array.isArray(l))return l.length===0?'[]':`
    ${l.map((b,_)=>`
    + ${_} + : + ${r(b)} +
    `).join("")}
    `;const c=Object.entries(l);return c.length===0?'{}':`
    ${c.map(([p,b])=>`
    + ${u(p)} + : + ${r(b)} +
    `).join("")}
    `}function r(l){if(l===null)return'null';if(typeof l=="boolean")return`${l}`;if(typeof l=="number")return`${l}`;if(typeof l=="string"){const f=u(l);return f.length<=200?`${f}`:`${f.slice(0,200)}…`}return Array.isArray(l)?`[${m("messages.jsonItems",{n:l.length})}]`:`{${m("messages.jsonKeys",{n:Object.keys(l).length})}}`}function u(l){return typeof l!="string"?String(l??""):l.replace(/&/g,"&").replace(//g,">")}return(l,c)=>(h(),w("details",{ref_key:"detailsEl",ref:s,class:Ce(["subagent-step",{"is-success":!e.tool.pending&&e.tool.success,"is-error":!e.tool.pending&&!e.tool.success}])},[g("summary",{onClick:c[0]||(c[0]=Bt((...f)=>d(Mt)&&d(Mt)(...f),["prevent"]))},[g("span",Wx,[e.tool.pending?(h(),w("span",Yx)):e.tool.success?(h(),w("i",jx)):(h(),w("i",Zx))]),g("span",Xx,y(e.tool.name),1),e.tool.pending?(h(),w("span",Qx,y(d(m)("messages.running")),1)):V("",!0),c[2]||(c[2]=g("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),g("div",Jx,[e.tool.args?(h(),w("details",eN,[g("summary",{onClick:c[1]||(c[1]=Bt((...f)=>d(Mt)&&d(Mt)(...f),["prevent"]))},[g("span",tN,y(d(m)("messages.arguments")),1),c[3]||(c[3]=g("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),g("div",nN,[g("pre",{class:"tool-code",innerHTML:a(e.tool.args)},null,8,sN)])])):V("",!0),e.tool.result!=null?(h(),w("div",aN,[g("div",iN,y(d(m)("common.result")),1),g("div",{class:"tool-result",innerHTML:i(e.tool.result)},null,8,oN)])):V("",!0)])],2))}},lN={class:"tool-status-icon"},cN={key:0,class:"spinner"},uN={key:1,class:"ph ph-check-circle"},dN={key:2,class:"ph ph-x-circle"},fN={class:"tool-name"},pN={key:0,class:"tool-running-time"},gN={key:0,class:"tool-card-body"},mN={key:0,class:"tool-running-banner"},hN={key:1,class:"tool-args"},vN={class:"tool-section-label"},bN={class:"tool-section"},_N=["innerHTML"],yN={key:2,class:"tool-section tool-result-section"},kN={class:"tool-section-label"},wN=["innerHTML"],SN={key:3,class:"tool-section terminal-output-section"},EN={class:"tool-section-label"},TN={class:"terminal-output"},AN={key:4,class:"subagent-planning-indicator"},xN={class:"planning-label"},NN={key:5,class:"subagent-steps"},CN={key:1,class:"plan-card",open:""},RN=["innerHTML"],IN={class:"task-step-tool"},ON={class:"task-step-status"},MN={key:0,class:"task-step-preview"},LN={__name:"ToolCard",props:{tool:{type:Object,required:!0},defaultOpen:{type:Boolean,default:!1}},setup(e){function t(A){return typeof A!="string"?!1:[/#{1,6} /,/\*\*|__/,/`[^`]+`/,/```/,/^\s*[-*+]\s/m,/^\s*\d+\.\s/m,/\[[^\]]+\]\([^)]+\)/,/\|.*\|/,/^\s*>\s/m].some(z=>z.test(A))}const n=e,s=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]),a={filesystem:["diff","edit_lines","smart_edit"],filesystem_read:["diff"],filesystem_write:["edit_lines","insert"],file_ai:["edit"]};function i(A){return A==="running"?"ph ph-circle-notch task-spin":A==="completed"?"ph ph-check-circle":A==="cancelled"?"ph ph-prohibit":"ph ph-x-circle"}const o=F(null),r=F(n.defaultOpen||!!n.tool.pending),u=F(Date.now());let l=null;function c(A){r.value=!0,Mt(A)}function f(A){A.target===o.value&&A.target.open&&(r.value=!0)}$t(()=>{o.value&&(n.defaultOpen||n.tool.pending)&&ya(o.value,!0,{animate:!1})}),Ge(()=>n.tool.pending,(A,B)=>{o.value&&(A?(r.value=!0,ya(o.value,!0,{animate:B!==void 0})):B!==void 0&&ya(o.value,!1))},{immediate:!0}),Ge(()=>n.tool.pending,A=>{A?_():k()},{immediate:!0}),bn(k);const p=W(()=>{var z;const A=(z=n.tool.args)==null?void 0:z.action,B=s.has(n.tool.name)&&A?`${n.tool.name} ${A}`:n.tool.name;return m("messages.runningTool",{tool:B})}),b=W(()=>{if(!n.tool.startedAt)return"";const A=Math.max(0,Math.floor((u.value-n.tool.startedAt)/1e3));return A<1?m("messages.starting"):`${A}s`});function _(){l||(u.value=Date.now(),l=setInterval(()=>{u.value=Date.now()},1e3))}function k(){l&&(clearInterval(l),l=null)}function L(A){return v(A)}function R(A,B){var z,K;if(typeof A=="string"){try{const Q=JSON.parse(A);return v(Q)}catch{}const j=(z=B==null?void 0:B.args)==null?void 0:z.action;return B&&(a[B.name]||[]).includes(j)?S(A):B&&["filesystem","filesystem_read"].includes(B.name)&&j==="read"?$(A):B&&["filesystem","filesystem_write"].includes(B.name)&&["edit","write"].includes(j)&&((K=B.metadata)!=null&&K.diff)?x(A,B.metadata.diff):t(A)?Tn(A):C(A).split(` +`).map((Q,ce)=>`
    ${Q||" "}
    `).join("")}return v(A)}function x(A,B){const z=String(A).split(` +`).map(K=>`
    ${C(K)||" "}
    `);z.push('
     
    ');for(const K of String(B).split(` +`))z.push(O(K));return z.join("")}function S(A){let B="",z=A;const K=A.indexOf(` + +`);if(K!==-1){const Q=A.slice(K+2);(Q.includes("@@")||/^[ +\-]/m.test(Q))&&(B=A.slice(0,K),z=Q)}const j=[];B&&j.push(`
    ${C(B)||" "}
    `);for(const Q of z.split(` +`))j.push(O(Q));return j.join("")}const I=/^([ +\-])( +)(\d+)│ ?(.*)$/;function O(A){const B=I.exec(A);if(B){const K=B[1],j=K==="+"?"diff-add":K==="-"?"diff-del":"diff-ctx",Q=`${B[2]}${B[3]} ${K} `,ce=B[4];return`
    ${C(Q)}${C(ce)||" "}
    `}return`
    ${C(A)||" "}
    `}function P(A){return A.startsWith("@@")?"diff-hunk":A.startsWith("+")?"diff-add":A.startsWith("-")?"diff-del":"diff-ctx"}const M=/^(\s*)(\d+): (.*)$/;function $(A){const B=A.split(` +`),z=[];let K=0;if(B.length&&B[0].startsWith("[")){const j=B[0],Q=j.replace(/^\[/,"").replace(/\]$/,""),ce=Q.indexOf(" | ");if(ce!==-1){const Be=Q.slice(0,ce),Xe=Q.slice(ce+5);z.push(`
    ${C(Be)} | ${C(Xe)}
    `)}else z.push(`
    ${C(j)||" "}
    `);K=1}for(K${C(B[K])||" "}`),K+=1);K ');continue}const Q=M.exec(j);Q?z.push(`
    ${C(Q[1]+Q[2])}: ${C(Q[3])}
    `):z.push(`
    ${C(j)}
    `)}return z.join("")}function v(A){if(typeof A=="string")try{A=JSON.parse(A)}catch{return C(A)}if(A===null||typeof A!="object")return C(String(A));if(Array.isArray(A))return A.length===0?'[]':`
    ${A.map((j,Q)=>`
    + ${Q} + : + ${E(j)} +
    `).join("")}
    `;const B=Object.entries(A);return B.length===0?'{}':`
    ${B.map(([K,j])=>`
    + ${C(K)} + : + ${E(j)} +
    `).join("")}
    `}function E(A){if(A===null)return'null';if(typeof A=="boolean")return`${A}`;if(typeof A=="number")return`${A}`;if(typeof A=="string"){const z=C(A);return z.length<=200?`${z}`:`${z.slice(0,200)}…`}return Array.isArray(A)?`[${m("messages.jsonItems",{n:A.length})}]`:`{${m("messages.jsonKeys",{n:Object.keys(A).length})}}`}function C(A){return typeof A!="string"?String(A??""):A.replace(/&/g,"&").replace(//g,">")}return(A,B)=>{var z;return h(),w("details",{ref_key:"detailsEl",ref:o,class:Ce(["tool-card",{"is-success":!e.tool.pending&&e.tool.success,"is-error":!e.tool.pending&&!e.tool.success}]),onToggle:f},[g("summary",{onClick:Bt(c,["prevent"])},[g("span",lN,[e.tool.pending?(h(),w("span",cN)):e.tool.success?(h(),w("i",uN)):(h(),w("i",dN))]),g("span",fN,y(e.tool.name),1),e.tool.pending?(h(),w("span",pN,y(b.value),1)):V("",!0),B[2]||(B[2]=g("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),r.value?(h(),w("div",gN,[e.tool.pending&&e.tool.name!=="spawn_agent"?(h(),w("div",mN,[B[3]||(B[3]=g("span",{class:"spinner"},null,-1)),g("span",null,y(p.value),1)])):V("",!0),e.tool.args?(h(),w("details",hN,[g("summary",{onClick:B[0]||(B[0]=Bt((...K)=>d(Mt)&&d(Mt)(...K),["prevent"]))},[g("span",vN,y(d(m)("messages.arguments")),1),B[4]||(B[4]=g("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),g("div",bN,[g("pre",{class:"tool-code",innerHTML:L(e.tool.args)},null,8,_N)])])):V("",!0),e.tool.result!=null?(h(),w("div",yN,[g("div",kN,y(d(m)("common.result")),1),g("div",{class:"tool-result",innerHTML:R(e.tool.result,e.tool)},null,8,wN)])):V("",!0),e.tool.name==="terminal"&&e.tool.terminalOutput?(h(),w("div",SN,[g("div",EN,y(d(m)("common.liveOutput")),1),g("pre",TN,y(e.tool.terminalOutput),1)])):V("",!0),e.tool.planningLabel!=null?(h(),w("div",AN,[g("span",xN,y(e.tool.planningLabel),1)])):V("",!0),(z=e.tool.steps)!=null&&z.length?(h(),w("div",NN,[(h(!0),w(fe,null,tt(e.tool.steps,(K,j)=>(h(),w(fe,{key:j},[K.kind==="turn_thinking"?(h(),ke(Cl,{key:0,msg:K},null,8,["msg"])):K.kind==="plan"?(h(),w("details",CN,[g("summary",{onClick:B[1]||(B[1]=Bt((...Q)=>d(Mt)&&d(Mt)(...Q),["prevent"]))},[B[5]||(B[5]=g("i",{class:"ph ph-map-trifold"},null,-1)),ae(" "+y(d(m)("messages.plan"))+" ",1),B[6]||(B[6]=g("i",{class:"ph ph-caret-down plan-chevron"},null,-1))]),g("div",{class:"plan-body",innerHTML:d(Tn)(K.text)},null,8,RN)])):K.kind==="task_update"?(h(),w("div",{key:2,class:Ce(["task-update-step",K.status])},[g("i",{class:Ce(i(K.status))},null,2),g("span",IN,y(K.tool),1),g("span",ON,y(K.status),1),K.preview?(h(),w("span",MN,y(K.preview),1)):V("",!0)],2)):(h(),ke(rN,{key:3,tool:K},null,8,["tool"]))],64))),128))])):V("",!0)])):V("",!0)],34)}}},$N=["open"],DN={class:"content-title"},PN=["href","title"],BN=["href","title"],FN=["title"],UN=["title"],GN=["title"],HN={key:0,class:"content-body"},zN={key:0,class:"content-source"},KN={key:0,class:"content-source-state"},qN={key:1,class:"content-source-error"},VN={key:2,class:"content-source-code"},WN=["innerHTML"],YN=["src"],jN=["src"],ZN=["src"],XN=["src"],QN={key:5,class:"content-image-wrap"},JN=["src","alt"],eC={key:0,class:"content-image-skeleton"},tC=["src"],nC={key:7,class:"content-audio-wrap"},sC={key:8,class:"content-text"},aC={key:0,class:"content-source-state"},iC={key:1,class:"content-source-error"},oC={class:"content-source-code"},rC=["innerHTML"],lC={key:0,class:"content-text-note"},cC={key:9,class:"content-unknown"},uC={class:"unknown-name"},dC=["href"],fC=["open"],pC={class:"tool-card-body"},gC={class:"tool-section"},mC={class:"tool-section-label"},hC={class:"tool-code"},vC={class:"tool-section"},bC={class:"tool-section-label"},_C={class:"tool-code"},sl=1e6,yC={__name:"ContentCard",props:{tool:{type:Object,required:!0},defaultOpen:{type:Boolean,default:!1},collapseToken:{type:String,default:""}},setup(e){const t=e,n=F(null),s=F(t.defaultOpen),a=F(t.defaultOpen),i=F(!1),o=F(!1),r=F(""),u=F(!1),l=F(""),c=F(!1),f=F(""),p=F(!1),b=F(""),_=F(!1),{open:k,openContent:L}=Ca(),R=W(()=>`${Math.round(sl/1024)} KB`);Ge(()=>[t.defaultOpen,t.collapseToken],([D])=>{s.value=D,D&&(a.value=!0)});const x=W(()=>t.tool.success===!1?!0:!t.tool.metadata||!t.tool.metadata.url?!String(t.tool.result??"").match(/URL: (.+)/):!1),S=W(()=>{if(t.tool.metadata)return t.tool.metadata;const D=String(t.tool.result??""),U=D.match(/URL: (.+)/);if(U){const q=D.match(/Published: .+ \(([^)]+)\)/),Y=D.match(/Published: (.+) \(/);return{url:U[1].trim(),content_type:q?q[1].trim():"unknown",title:Y?Y[1].trim():m("messages.untitledContent")}}return{}}),I=W(()=>S.value.url||""),O=W(()=>Ws(I.value));Ge(()=>O.value,()=>{c.value=!1});const P=W(()=>S.value.content_type||"unknown"),M=W(()=>S.value.title||S.value.filename||m("messages.untitledContent")),$=W(()=>Zp(P.value)||jp(S.value.filename||I.value)),v=W(()=>["stl","model"].includes($.value)),E=W(()=>bi[$.value]||bi.unknown),C=W(()=>Jy[$.value]||"primary"),A=W(()=>`is-${$.value}`),B=W(()=>Xp($.value)),z=W(()=>{const D=$.value;return Al(D)?le(lc(D)):Ys(O.value)}),K=W(()=>v.value?z.value:Ys(O.value)),j=W(()=>["html","svg"].includes($.value)?O.value:v.value&&S.value.source_url?Ws(S.value.source_url):""),Q=W(()=>!!j.value),ce=W(()=>cc({...S.value,content_type:$.value,filename:S.value.source_filename||S.value.filename||I.value})),Be=W(()=>_i(r.value,ce.value)),Xe=W(()=>_i(f.value,ce.value)),De=W(()=>i.value?"ph ph-check":"ph ph-copy"),J=W(()=>{const D=Ws(S.value.download_url||I.value);return S.value.download_url||!D?D:`${D}${D.includes("?")?"&":"?"}download=1`});function le(D){return rc(D,O.value)}function _e(){$.value==="image"&&k(O.value)}function Me(){B.value&&L({url:Ys(O.value),type:$.value,title:M.value})}async function Z(){if(!(!O.value||p.value||f.value)){p.value=!0,b.value="";try{const D=await fetch(O.value);if(!D.ok)throw new Error(`HTTP ${D.status}`);const U=await D.text();_.value=U.length>sl,f.value=_.value?U.slice(0,sl):U}catch(D){b.value=m("artifacts.sourceFailed",{error:(D==null?void 0:D.message)||D})}finally{p.value=!1}}}Ge([s,$],([D,U])=>{D&&U==="text"&&Z()},{immediate:!0}),Ge(O,()=>{f.value="",b.value="",_.value=!1});function we(D){s.value=D.currentTarget.open,s.value&&(a.value=!0)}async function se(){o.value=!o.value,o.value&&await He()}async function He(){if(!(!j.value||r.value||u.value)){u.value=!0,l.value="";try{const D=await fetch(j.value);if(!D.ok)throw new Error(`HTTP ${D.status}`);r.value=await D.text()}catch(D){l.value=m("artifacts.sourceFailed",{error:(D==null?void 0:D.message)||D})}finally{u.value=!1}}}async function Ke(){try{await navigator.clipboard.writeText(K.value),i.value=!0,setTimeout(()=>{i.value=!1},1500)}catch{}}function at(D){if(typeof D=="string")try{return JSON.stringify(JSON.parse(D),null,2)}catch{return D}return JSON.stringify(D,null,2)}return(D,U)=>{const q=et("GnBadge");return x.value?(h(),w("details",{key:1,ref_key:"detailsEl",ref:n,class:"tool-card is-error",open:s.value,onToggle:we},[g("summary",{onClick:U[3]||(U[3]=Bt((...Y)=>d(Mt)&&d(Mt)(...Y),["prevent"]))},[...U[11]||(U[11]=[Th('📎content_publish',4)])]),g("div",pC,[g("div",gC,[g("div",mC,y(d(m)("messages.arguments")),1),g("pre",hC,y(at(e.tool.args)),1)]),g("div",vC,[g("div",bC,y(d(m)("common.result")),1),g("pre",_C,y(e.tool.result),1)])])],40,fC)):(h(),w("details",{key:0,ref_key:"detailsEl",ref:n,class:Ce(["content-card",A.value]),open:s.value,onToggle:we},[g("summary",{onClick:U[1]||(U[1]=Bt((...Y)=>d(Mt)&&d(Mt)(...Y),["prevent"]))},[g("i",{class:Ce(["content-icon",E.value])},null,2),g("span",DN,y(M.value),1),ee(q,{variant:C.value},{default:ge(()=>[ae(y(P.value),1)]),_:1},8,["variant"]),g("span",{class:"content-actions",onClick:U[0]||(U[0]=Bt(()=>{},["stop"]))},[g("a",{href:z.value,target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openPreview"),class:"btn-icon btn-icon-sm"},[...U[4]||(U[4]=[g("i",{class:"ph ph-arrow-square-out"},null,-1)])],8,PN),g("a",{href:J.value,target:"_blank",rel:"noopener noreferrer",title:d(m)("common.download"),class:"btn-icon btn-icon-sm"},[...U[5]||(U[5]=[g("i",{class:"ph ph-download-simple"},null,-1)])],8,BN),B.value?(h(),w("button",{key:0,type:"button",class:"btn-icon btn-icon-sm",title:d(m)("artifacts.openFullscreen"),onClick:Me},[...U[6]||(U[6]=[g("i",{class:"ph ph-arrows-out"},null,-1)])],8,FN)):V("",!0),Q.value?(h(),w("button",{key:1,type:"button",class:"btn-icon btn-icon-sm",title:d(m)(o.value?"artifacts.showPreview":"artifacts.showSource"),onClick:se},[g("i",{class:Ce(o.value?"ph ph-eye":"ph ph-code")},null,2)],8,UN)):V("",!0),g("button",{type:"button",title:d(m)("artifacts.copyFileLink"),class:"btn-icon btn-icon-sm",onClick:Ke},[g("i",{class:Ce(De.value)},null,2)],8,GN)]),U[7]||(U[7]=g("i",{class:"ph ph-caret-down content-chevron"},null,-1))]),a.value?(h(),w("div",HN,[o.value?(h(),w("div",zN,[u.value?(h(),w("div",KN,[U[8]||(U[8]=g("span",{class:"spinner"},null,-1)),g("span",null,y(d(m)("artifacts.loadingSource")),1)])):l.value?(h(),w("pre",qN,y(l.value),1)):(h(),w("pre",VN,[g("code",{class:Ce(["hljs",`language-${ce.value}`]),innerHTML:Be.value},null,10,WN)]))])):v.value?(h(),w("iframe",{key:1,src:le("model"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,YN)):$.value==="html"?(h(),w("iframe",{key:2,src:le("html"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,jN)):$.value==="svg"?(h(),w("iframe",{key:3,src:le("svg"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,ZN)):$.value==="pdf"?(h(),w("iframe",{key:4,src:le("pdf"),class:"content-iframe",loading:"lazy"},null,8,XN)):$.value==="image"?(h(),w("div",QN,[g("img",{src:O.value,class:"content-image",alt:M.value,loading:"lazy",onLoad:U[2]||(U[2]=Y=>c.value=!0),onClick:_e},null,40,JN),c.value?V("",!0):(h(),w("div",eC,[...U[9]||(U[9]=[g("i",{class:"ph ph-spinner ph-spin content-image-spinner"},null,-1)])]))])):$.value==="video"?(h(),w("video",{key:6,src:O.value,class:"content-video",controls:"",playsinline:""},null,8,tC)):$.value==="audio"?(h(),w("div",nC,[ee(oc,{src:O.value,title:M.value,compact:""},null,8,["src","title"])])):$.value==="text"?(h(),w("div",sC,[p.value?(h(),w("div",aC,[U[10]||(U[10]=g("span",{class:"spinner"},null,-1)),g("span",null,y(d(m)("artifacts.loadingPreview")),1)])):b.value?(h(),w("pre",iC,y(b.value),1)):(h(),w(fe,{key:2},[g("pre",oC,[g("code",{class:Ce(["hljs",`language-${ce.value}`]),innerHTML:Xe.value},null,10,rC)]),_.value?(h(),w("div",lC,y(d(m)("artifacts.textPreviewLimited",{size:R.value})),1)):V("",!0)],64))])):(h(),w("div",cC,[g("i",{class:Ce(["unknown-icon",E.value])},null,2),g("div",uC,y(M.value),1),g("a",{href:O.value,target:"_blank",rel:"noopener noreferrer",class:"btn btn-small btn-secondary unknown-open"},y(d(m)("messages.openFile")),9,dC)]))])):V("",!0)],42,$N))}}},kC=Ye(yC,[["__scopeId","data-v-06477ddd"]]),wC={class:"card-grid"},SC={key:0,class:"card-grid-title"},EC={class:"card-grid-items"},TC=["onClick","onKeydown"],AC=["src"],xC={key:1,class:"card-no-image"},NC={class:"card-content"},CC={class:"card-title"},RC={key:0,class:"card-subtitle"},IC={key:1,class:"card-meta"},OC={class:"card-meta-label"},MC={class:"card-meta-value"},LC={key:2,class:"card-description"},$C={key:1,class:"card-grid-more"},DC={class:"card-grid-more-text"},PC={class:"card-modal-title"},BC={key:0,class:"card-modal"},FC=["src"],UC={class:"card-modal-content"},GC={key:0,class:"card-modal-subtitle"},HC={key:1,class:"card-modal-section"},zC={class:"card-modal-section-title"},KC={class:"card-modal-meta-grid"},qC={class:"card-modal-meta-label"},VC={class:"card-modal-meta-value"},WC={key:2,class:"card-modal-section"},YC={class:"card-modal-section-title"},jC={class:"card-modal-text"},ZC={key:3,class:"card-modal-section"},XC={class:"card-modal-section-title"},QC={class:"card-modal-details"},JC={key:4,class:"card-modal-actions"},e1=["href"],al=4,t1={__name:"CardGrid",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n=F(null),s=W(()=>Array.isArray(t.data.cards)?t.data.cards:[]),a=W(()=>s.value.slice(0,al)),i=W(()=>s.value.length>al),o=W(()=>s.value.length-al);Lm(()=>{var l;Array.isArray((l=t.data)==null?void 0:l.cards)||console.warn('[CardGrid] payload is missing a "cards" array',t.data)});function r(l){n.value=l}function u(){n.value=null}return(l,c)=>{const f=et("GnModal");return h(),w("div",wC,[e.data.title?(h(),w("div",SC,y(e.data.title),1)):V("",!0),g("div",EC,[(h(!0),w(fe,null,tt(a.value,p=>{var b,_;return h(),w("div",{key:p.id,class:"card-grid-item",tabindex:"0",onClick:k=>r(p),onKeydown:Wn(k=>r(p),["enter"])},[(b=p.image)!=null&&b.trim()?(h(),w("img",{key:0,src:p.image,class:"card-image",alt:"",loading:"lazy"},null,8,AC)):(h(),w("div",xC,[...c[0]||(c[0]=[g("i",{class:"ph ph-image"},null,-1)])])),g("div",NC,[g("div",CC,y(p.title),1),p.subtitle?(h(),w("div",RC,y(p.subtitle),1)):V("",!0),(_=p.meta)!=null&&_.length?(h(),w("div",IC,[(h(!0),w(fe,null,tt(p.meta,(k,L)=>(h(),w("span",{key:L,class:"card-meta-item"},[g("span",OC,y(k.label),1),g("span",MC,y(k.value),1)]))),128))])):V("",!0),p.description?(h(),w("div",LC,y(p.description),1)):V("",!0)])],40,TC)}),128))]),i.value?(h(),w("div",$C,[g("span",DC,y(d(m)("ui.moreCards",{n:o.value})),1)])):V("",!0),ee(f,{open:!!n.value,"onUpdate:open":u},{title:ge(()=>{var p;return[g("h2",PC,y((p=n.value)==null?void 0:p.title),1)]}),default:ge(()=>{var p,b,_,k;return[n.value?(h(),w("div",BC,[(p=n.value.image)!=null&&p.trim()?(h(),w("img",{key:0,src:n.value.image,class:"card-modal-image",alt:""},null,8,FC)):V("",!0),g("div",UC,[n.value.subtitle?(h(),w("div",GC,y(n.value.subtitle),1)):V("",!0),(b=n.value.meta)!=null&&b.length?(h(),w("div",HC,[g("div",zC,y(d(m)("ui.overview")),1),g("div",KC,[(h(!0),w(fe,null,tt(n.value.meta,(L,R)=>(h(),w("div",{key:R,class:"card-modal-meta-cell"},[g("div",qC,y(L.label),1),g("div",VC,y(L.value),1)]))),128))])])):V("",!0),n.value.description?(h(),w("div",WC,[g("div",YC,y(d(m)("ui.description")),1),g("p",jC,y(n.value.description),1)])):V("",!0),(_=n.value.details)!=null&&_.length?(h(),w("div",ZC,[g("div",XC,y(d(m)("ui.details")),1),g("dl",QC,[(h(!0),w(fe,null,tt(n.value.details,(L,R)=>(h(),w("div",{key:R,class:"card-modal-detail-row"},[g("dt",null,y(L.label),1),g("dd",null,y(L.value),1)]))),128))])])):V("",!0),(k=n.value.actions)!=null&&k.length?(h(),w("div",JC,[(h(!0),w(fe,null,tt(n.value.actions,(L,R)=>(h(),w("a",{key:R,href:L.url,target:"_blank",rel:"noopener noreferrer",class:"card-modal-action"},y(L.label),9,e1))),128))])):V("",!0)])])):V("",!0)]}),_:1},8,["open"])])}}},n1=Ye(t1,[["__scopeId","data-v-9c3e6ea0"]]),s1=Object.freeze(Object.defineProperty({__proto__:null,default:n1},Symbol.toStringTag,{value:"Module"})),a1={class:"ui-form"},i1={key:0,class:"ui-form-submitted"},o1={key:0,class:"ui-form-title"},r1={class:"ui-form-submitted-note"},l1={class:"ui-form-summary"},c1={key:1,class:"ui-form-body"},u1={key:0,class:"ui-form-title"},d1={key:1,class:"ui-form-description"},f1=["for"],p1={key:0,class:"ui-form-required"},g1={key:0,class:"ui-form-field-hint"},m1=["id","onUpdate:modelValue","placeholder","required","minlength","maxlength","onBlur","onInput"],h1=["id","onUpdate:modelValue","required","onBlur","onChange"],v1={key:0,value:""},b1=["value"],_1=["id","onUpdate:modelValue","required","onBlur","onChange"],y1=["value"],k1={key:4,class:"ui-form-checkbox"},w1=["id","onUpdate:modelValue","onChange"],S1=["id","onUpdate:modelValue","type","placeholder","required","min","max","minlength","maxlength","pattern","onBlur","onInput"],E1={key:6,class:"ui-form-error"},T1=["disabled"],A1={key:0,class:"ui-form-spinner"},x1={key:0,class:"ui-form-error"},N1={__name:"Form",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n=Gt(),s=js({}),a=F(new Set),i=js({}),o=F(!1),r=F(!1),u=F(""),l=W(()=>{var v;return((v=t.data)==null?void 0:v.form_id)||""}),c=W(()=>{var v;return Array.isArray((v=t.data)==null?void 0:v.fields)?t.data.fields:[]}),f=W(()=>`navi_submitted_forms:${n.currentId||"unknown"}`);function p(v){return`form-${l.value}-${v}`}function b(v){return v==="email"||v==="url"||v==="date"||v==="number"?v:"text"}function _(v,E){var C;if(v==null||v==="")return"—";if(E.type==="checkbox")return m(v?"common.yes":"common.no");if(E.type==="select"||E.type==="multiselect"){const A=Array.isArray(E.options)?E.options:[];return Array.isArray(v)?v.map(z=>{var K;return((K=A.find(j=>j.value===z))==null?void 0:K.label)||z}).join(", ")||"—":((C=A.find(B=>B.value===v))==null?void 0:C.label)||v}return Array.isArray(v)?v.join(", "):String(v)}function k(v){return v==null||v===""||Array.isArray(v)&&v.length===0}function L(v){const E=v.name,C=s[E];if(delete i[E],v.required&&k(C)){i[E]=m("ui.fieldRequired",{field:v.label});return}if(!k(C)){if(v.type==="email"&&(/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(C))||(i[E]=m("ui.invalidEmail"))),v.type==="url")try{const A=new URL(C);if(A.protocol!=="http:"&&A.protocol!=="https:")throw new Error("bad protocol")}catch{i[E]=m("ui.invalidUrl")}if(v.type==="number"){const A=Number(C);Number.isNaN(A)?i[E]=m("ui.notANumber"):(v.min!==void 0&&v.min!==null&&Av.max&&(i[E]=m("ui.maxValue",{n:v.max})))}if(v.minLength!==void 0&&v.minLength!==null&&String(C).lengthv.maxLength&&(i[E]=m("ui.maxLength",{n:v.maxLength})),v.pattern)try{new RegExp(v.pattern).test(String(C))||(i[E]=m("ui.invalidFormat"))}catch{}}}function R(v){a.value.add(v);const E=c.value.find(C=>C.name===v);E&&L(E)}function x(){for(const v of c.value)L(v)}const S=W(()=>(x(),c.value.every(v=>!i[v.name])));function I(v){return a.value.has(v)&&i[v]}function O(){if(l.value)try{if(JSON.parse(localStorage.getItem(f.value)||"[]").includes(l.value)){r.value=!0;const E=JSON.parse(localStorage.getItem(`${f.value}:${l.value}`)||"{}");Object.assign(s,E)}}catch{}}function P(){if(l.value)try{const v=f.value,E=JSON.parse(localStorage.getItem(v)||"[]");E.includes(l.value)||(E.push(l.value),localStorage.setItem(v,JSON.stringify(E))),localStorage.setItem(`${v}:${l.value}`,JSON.stringify({...s}))}catch{}}function M(){const v={};for(const E of c.value){const C=s[E.name];E.type==="number"?v[E.name]=C===""||C===void 0?null:Number(C):E.type==="checkbox"?v[E.name]=!!C:v[E.name]=C===void 0?null:C}return v}function $(){if(o.value||r.value||!S.value)return;o.value=!0,x();for(const E of c.value)a.value.add(E.name);if(!S.value){o.value=!1;return}const v={type:"form_submit",form_id:l.value,values:M()};if(u.value="",!rg(v)){o.value=!1,u.value=m("ui.formOffline");return}P(),r.value=!0,o.value=!1}return $t(()=>{for(const v of c.value)v.type==="checkbox"?s[v.name]=!!v.default:v.type==="multiselect"?s[v.name]=Array.isArray(v.default)?[...v.default]:[]:s[v.name]=v.default??(v.type==="select"&&v.required,"");O()}),(v,E)=>(h(),w("div",a1,[r.value?(h(),w("div",i1,[e.data.title?(h(),w("div",o1,y(e.data.title),1)):V("",!0),g("div",r1,[E[0]||(E[0]=g("i",{class:"ph ph-check-circle"},null,-1)),ae(" "+y(d(m)("ui.submitted")),1)]),g("dl",l1,[(h(!0),w(fe,null,tt(c.value,C=>(h(),w("div",{key:C.name,class:"ui-form-summary-row"},[g("dt",null,y(C.label),1),g("dd",null,y(_(s[C.name],C)),1)]))),128))])])):(h(),w("div",c1,[e.data.title?(h(),w("div",u1,y(e.data.title),1)):V("",!0),e.data.description?(h(),w("div",d1,y(e.data.description),1)):V("",!0),g("form",{class:"ui-form-fields",onSubmit:Bt($,["prevent"])},[(h(!0),w(fe,null,tt(c.value,C=>(h(),w("div",{key:C.name,class:Ce(["ui-form-field",{"has-error":I(C.name)}])},[g("label",{class:"ui-form-label",for:p(C.name)},[ae(y(C.label)+" ",1),C.required?(h(),w("span",p1,"*")):V("",!0)],8,f1),C.description?(h(),w("div",g1,y(C.description),1)):V("",!0),C.type==="textarea"?Gs((h(),w("textarea",{key:1,id:p(C.name),"onUpdate:modelValue":A=>s[C.name]=A,class:"ui-form-input",placeholder:C.placeholder||"",required:C.required,minlength:C.minLength,maxlength:C.maxLength,rows:"3",onBlur:A=>R(C.name),onInput:A=>R(C.name)},null,40,m1)),[[hi,s[C.name]]]):C.type==="select"?Gs((h(),w("select",{key:2,id:p(C.name),"onUpdate:modelValue":A=>s[C.name]=A,class:"ui-form-input",required:C.required,onBlur:A=>R(C.name),onChange:A=>R(C.name)},[C.required?V("",!0):(h(),w("option",v1,"—")),(h(!0),w(fe,null,tt(C.options,A=>(h(),w("option",{key:A.value,value:A.value},y(A.label),9,b1))),128))],40,h1)),[[_l,s[C.name]]]):C.type==="multiselect"?Gs((h(),w("select",{key:3,id:p(C.name),"onUpdate:modelValue":A=>s[C.name]=A,class:"ui-form-input",multiple:"",required:C.required,onBlur:A=>R(C.name),onChange:A=>R(C.name)},[(h(!0),w(fe,null,tt(C.options,A=>(h(),w("option",{key:A.value,value:A.value},y(A.label),9,y1))),128))],40,_1)),[[_l,s[C.name]]]):C.type==="checkbox"?(h(),w("label",k1,[Gs(g("input",{id:p(C.name),"onUpdate:modelValue":A=>s[C.name]=A,type:"checkbox",onChange:A=>R(C.name)},null,40,w1),[[pp,s[C.name]]]),g("span",null,y(C.label),1)])):Gs((h(),w("input",{key:5,id:p(C.name),"onUpdate:modelValue":A=>s[C.name]=A,class:"ui-form-input",type:b(C.type),placeholder:C.placeholder||"",required:C.required,min:C.min,max:C.max,minlength:C.minLength,maxlength:C.maxLength,pattern:C.pattern,onBlur:A=>R(C.name),onInput:A=>R(C.name)},null,40,S1)),[[gv,s[C.name]]]),I(C.name)?(h(),w("div",E1,y(i[C.name]),1)):V("",!0)],2))),128)),g("button",{type:"submit",class:"ui-form-submit",disabled:!S.value||o.value||r.value},[o.value?(h(),w("span",A1)):V("",!0),g("span",null,y(e.data.submit_label||d(m)("ui.submit")),1)],8,T1),u.value?(h(),w("div",x1,y(u.value),1)):V("",!0)],32)]))]))}},C1=Ye(N1,[["__scopeId","data-v-5c058078"]]),R1=Object.freeze(Object.defineProperty({__proto__:null,default:C1},Symbol.toStringTag,{value:"Module"})),I1={class:"skill-doc"},O1={key:0,class:"skill-doc-section"},M1={class:"skill-doc-label"},L1={class:"skill-doc-triggers"},$1={key:1,class:"skill-doc-section"},D1={class:"skill-doc-label"},P1={class:"skill-doc-list is-required"},B1={key:2,class:"skill-doc-section"},F1={class:"skill-doc-label"},U1={class:"skill-doc-steps"},G1={class:"skill-doc-step-num"},H1={class:"skill-doc-step-body"},z1=["innerHTML"],K1=["innerHTML"],q1={key:1,class:"skill-doc-step-check"},V1=["innerHTML"],W1={key:3,class:"skill-doc-section"},Y1={class:"skill-doc-label"},j1={class:"skill-doc-list is-check"},Z1={key:4,class:"skill-doc-section"},X1={class:"skill-doc-label"},Q1={class:"skill-doc-hatches"},J1={key:5,class:"skill-doc-section"},eR={class:"skill-doc-label"},tR=["innerHTML"],nR={__name:"SkillDocument",props:{doc:{type:Object,required:!0}},setup(e){const t=e,n=W(()=>Array.isArray(t.doc.triggers)?t.doc.triggers:[]),s=W(()=>t.doc.preconditions??[]),a=W(()=>t.doc.post_checks??[]),i=W(()=>{const l=t.doc.body;return l?Tn(l):""});function o(l){const c=String(l??"").trim();if(!(c.startsWith("{")&&c.endsWith("}")))return{title:c,action:"",check:""};const p=L=>{const R=c.match(new RegExp(`['"]${L}['"]\\s*:\\s*(['"])([\\s\\S]*?)\\1\\s*(?:,|})`));return R?R[2].replace(/\\(['"\\])/g,"$1"):""},b=p("title"),_=p("action"),k=p("check");return!b&&!_?{title:c,action:"",check:""}:{title:b,action:_,check:k}}const r=W(()=>(t.doc.steps??[]).map((l,c)=>({index:c+1,...o(l)}))),u=W(()=>{const l=t.doc;return[{key:"deviation",term:m("ui.proposalOnDeviation"),value:l.on_deviation},{key:"blocked",term:m("ui.proposalOnBlocked"),value:l.on_blocked},{key:"already",term:m("ui.proposalOnAlreadyDone"),value:l.on_already_done}].filter(c=>c.value)});return(l,c)=>(h(),w("div",I1,[n.value.length?(h(),w("section",O1,[g("h4",M1,y(d(m)("ui.proposalTriggers")),1),g("div",L1,[(h(!0),w(fe,null,tt(n.value,f=>(h(),w("span",{key:f,class:"skill-doc-trigger"}," «"+y(f)+"» ",1))),128))])])):V("",!0),s.value.length?(h(),w("section",$1,[g("h4",D1,y(d(m)("ui.proposalPreconditions")),1),g("ul",P1,[(h(!0),w(fe,null,tt(s.value,(f,p)=>(h(),w("li",{key:p},[c[0]||(c[0]=g("i",{class:"ph ph-warning-circle","aria-hidden":"true"},null,-1)),g("span",null,y(f),1)]))),128))])])):V("",!0),r.value.length?(h(),w("section",B1,[g("h4",F1,y(d(m)("ui.proposalSteps")),1),g("ol",U1,[(h(!0),w(fe,null,tt(r.value,f=>(h(),w("li",{key:f.index},[g("span",G1,y(f.index),1),g("div",H1,[g("div",{class:"skill-doc-step-title",innerHTML:d(Tn)(f.title)},null,8,z1),f.action?(h(),w("div",{key:0,class:"skill-doc-step-action",innerHTML:d(Tn)(f.action)},null,8,K1)):V("",!0),f.check?(h(),w("div",q1,[c[1]||(c[1]=g("i",{class:"ph ph-check-square","aria-hidden":"true"},null,-1)),g("span",{innerHTML:d(Tn)(f.check)},null,8,V1)])):V("",!0)])]))),128))])])):V("",!0),a.value.length?(h(),w("section",W1,[g("h4",Y1,y(d(m)("ui.proposalPostChecks")),1),g("ul",j1,[(h(!0),w(fe,null,tt(a.value,(f,p)=>(h(),w("li",{key:p},[c[2]||(c[2]=g("i",{class:"ph ph-check-circle","aria-hidden":"true"},null,-1)),g("span",null,y(f),1)]))),128))])])):V("",!0),u.value.length?(h(),w("section",Z1,[g("h4",X1,y(d(m)("ui.proposalFallbacks")),1),g("dl",Q1,[(h(!0),w(fe,null,tt(u.value,f=>(h(),w(fe,{key:f.key},[g("dt",null,y(f.term),1),g("dd",null,y(f.value),1)],64))),128))])])):V("",!0),i.value?(h(),w("section",J1,[g("h4",eR,y(d(m)("ui.proposalContext")),1),g("div",{class:"skill-doc-body markdown-body",innerHTML:i.value},null,8,tR)])):V("",!0)]))}},Rg=Ye(nR,[["__scopeId","data-v-49d14b50"]]),sR={key:0,class:"skill-proposal-loading"},aR={class:"skill-proposal-head"},iR={class:"skill-proposal-kicker"},oR={class:"skill-proposal-kind"},rR={class:"skill-proposal-area"},lR={key:0,class:"skill-proposal-tags"},cR={class:"skill-proposal-name"},uR={key:0,class:"skill-proposal-description"},dR={class:"skill-proposal-doc"},fR={class:"skill-proposal-footer"},pR={key:0,class:"skill-proposal-error",role:"alert"},gR={key:0,class:"skill-proposal-error"},mR=!0,hR={__name:"SkillProposal",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n={home:"settings.skillsAreaHome",infrastructure:"settings.skillsAreaInfrastructure",workflows:"settings.skillsAreaWorkflows",general:"settings.skillsAreaGeneral"},s=F(null),a=F(!0),i=F(""),o=F(!1),r=F(""),u=W(()=>{var k;return((k=t.data)==null?void 0:k.proposal_id)||""}),l=W(()=>{var k,L;return((k=t.data)==null?void 0:k.status)||((L=s.value)==null?void 0:L.status)||"pending"}),c=W(()=>{var k;return((k=t.data)==null?void 0:k.error)||""}),f=W(()=>{var k;return(k=s.value)!=null&&k.replaces_id?m("ui.proposalReplaces"):m("ui.proposalNew")}),p=W(()=>{var k;return m(n[(k=s.value)==null?void 0:k.area]||n.general)}),b=W(()=>{var k;return Array.isArray((k=s.value)==null?void 0:k.tags)?s.value.tags:[]});Ge([l,c],()=>{o.value=!1}),$t(async()=>{if(!u.value){a.value=!1,i.value=m("ui.proposalNotFound");return}try{s.value=await wb(u.value)}catch(k){i.value=m("ui.proposalNotFound"),console.error("[SkillProposal]",k)}finally{a.value=!1}});function _(k){if(o.value)return;r.value="",o.value=!0,rg({type:"skill_proposal",proposal_id:u.value,action:k})||(o.value=!1,r.value=m("ui.proposalOffline"))}return(k,L)=>(h(),w("article",{class:Ce(["skill-proposal",`is-${l.value}`])},[a.value?(h(),w("div",sR,[ee(d(Js)),g("span",null,y(d(m)("ui.proposalLoading")),1)])):i.value?(h(),ke(d(Vn),{key:1,variant:"danger"},{default:ge(()=>[ae(y(i.value),1)]),_:1})):s.value?(h(),w(fe,{key:2},[g("header",aR,[g("div",iR,[g("span",oR,[L[2]||(L[2]=g("i",{class:"ph ph-file-text","aria-hidden":"true"},null,-1)),ae(" "+y(f.value),1)]),g("span",rR,y(p.value),1),b.value.length?(h(),w("span",lR,[(h(!0),w(fe,null,tt(b.value,R=>(h(),ke(d($p),{key:R,icon:"ph-tag"},{default:ge(()=>[ae(y(R),1)]),_:2},1024))),128))])):V("",!0),l.value==="accepted"?(h(),ke(d(vi),{key:1,variant:"success"},{default:ge(()=>[ae(y(d(m)("ui.proposalInCatalog")),1)]),_:1})):V("",!0)]),g("h3",cR,y(s.value.name),1),s.value.description?(h(),w("p",uR,y(s.value.description),1)):V("",!0)]),g("div",dR,[ee(Rg,{doc:s.value},null,8,["doc"])]),g("footer",fR,[l.value==="pending"?(h(),w(fe,{key:0},[ee(d(ot),{variant:"primary",icon:"ph-plus",class:"skill-proposal-btn is-accept",loading:o.value,onClick:L[0]||(L[0]=R=>_("accept"))},{default:ge(()=>[ae(y(d(m)("ui.proposalAccept")),1)]),_:1},8,["loading"]),ee(d(ot),{variant:"secondary",icon:"ph-x",class:"skill-proposal-btn is-reject",disabled:o.value,onClick:L[1]||(L[1]=R=>_("reject"))},{default:ge(()=>[ae(y(d(m)("ui.proposalReject")),1)]),_:1},8,["disabled"]),r.value||c.value?(h(),w("span",pR,y(r.value||c.value),1)):V("",!0)],64)):(h(),ke(d(Vn),{key:1,variant:l.value==="accepted"?"success":"warning",class:"skill-proposal-decision"},{default:ge(()=>[g("i",{class:Ce(["ph",l.value==="accepted"?"ph-check-circle":"ph-x-circle"]),"aria-hidden":"true"},null,2),g("span",null,y(l.value==="accepted"?d(m)("ui.proposalAccepted"):d(m)("ui.proposalRejected")),1),c.value?(h(),w("span",gR,y(c.value),1)):V("",!0)]),_:1},8,["variant"]))])],64)):V("",!0)],2))}},vR=Ye(hR,[["__scopeId","data-v-28624486"]]),bR=Object.freeze(Object.defineProperty({__proto__:null,bare:mR,default:vR},Symbol.toStringTag,{value:"Module"})),Pd=Object.assign({"./AudioPlayer.vue":Zy,"./CardGrid.vue":s1,"./ConfirmDialog.vue":V_,"./ContentLightbox.vue":Tw,"./ContextBar.vue":eA,"./Form.vue":R1,"./LoginScreen.vue":cT,"./ModelChip.vue":XT,"./NotificationPromptBanner.vue":hT,"./OfflineBanner.vue":yT,"./ProfileBadge.vue":WT,"./SelectionToolbar.vue":xw,"./SkillProposal.vue":bR,"./WelcomeScreen.vue":IT});function Ig(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}const oi=new Map,go=new Set;for(const e in Pd){const t=e.replace(/^.*\//,"").replace(/\.vue$/,""),n=Pd[e],s=n.default;if(!s)continue;oi.set(t,ui(s));const a=t.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase();oi.set(a,ui(s)),n.bare===!0&&(go.add(t),go.add(a))}function _R(e){if(!e||typeof e!="string")return null;if(oi.has(e))return oi.get(e);const t=Ig(e);return oi.get(t)||null}function yR(e){return!e||typeof e!="string"?!1:go.has(e)||go.has(Ig(e))}const kR={key:1,class:"ui-component-card"},wR={class:"ui-component-header"},SR={class:"ui-component-name"},ER={class:"ui-component-body"},TR={key:1,class:"ui-component-fallback"},AR={class:"ui-component-fallback-title"},xR={class:"ui-component-fallback-json"},NR={__name:"UiComponentCard",props:{component:{type:Object,required:!0}},setup(e){const t=e,n=W(()=>{const a=t.component.component??"";return _R(a)}),s=W(()=>yR(t.component.component??""));return(a,i)=>n.value&&s.value?(h(),ke(eo(n.value),{key:0,data:t.component.payload},null,8,["data"])):(h(),w("div",kR,[g("div",wR,[i[0]||(i[0]=g("span",{class:"ui-component-icon"},"🧩",-1)),g("span",SR,y(t.component.component),1),i[1]||(i[1]=g("span",{class:"ui-component-badge"},"UI",-1))]),g("div",ER,[n.value?(h(),ke(eo(n.value),{key:0,data:t.component.payload},null,8,["data"])):(h(),w("div",TR,[g("div",AR,y(d(m)("messages.unknownUiComponent",{name:t.component.component??"?"})),1),g("pre",xR,y(JSON.stringify(t.component.payload,null,2)),1)]))])]))}},CR=Ye(NR,[["__scopeId","data-v-f64f3335"]]),RR={key:0,class:"msg-assistant"},IR={key:0,class:"tool-cards-summary"},OR={key:4,class:"plan-card"},MR=["innerHTML"],LR=["innerHTML"],$R={class:"planning-label"},DR={key:3,class:"stream-cursor"},PR={key:4,class:"msg-meta-row"},BR={key:0,class:"msg-meta-item"},FR={key:1,class:"msg-meta-item"},UR={key:2,class:"msg-meta-item"},GR={key:3,class:"msg-meta-item msg-meta-time"},HR={__name:"AssistantMessage",props:{msg:{type:Object,required:!0},isFlashing:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(e){const t=e,n=F(null),s=Gt(),a=F(!1),i=W(()=>Tn(t.msg.text)),o=W(()=>t.msg.done?t.msg.time:null),r=$o(o),u=W(()=>{const P=L(t.msg.tools||[]);return P?m("messages.runningTool",{tool:S(P)}):""}),l=W(()=>t.msg.done?"":t.msg.statusLabel?t.msg.statusLabel:u.value?u.value:t.msg.text?"":R(t.msg.tools||[])?m("messages.preparingNext"):m("messages.thinkingStatus")),c=W(()=>!t.readonly&&typeof t.msg.id=="string"&&t.msg.id.startsWith("h_")),{copied:f,copy:p}=fg();async function b(P){try{await s.rateMessage(t.msg,P)}catch(M){console.error("rate failed",M)}}function _(P){return P?P>=1e3?(P/1e3).toFixed(1).replace(".0","")+"k":String(P):""}function k(P,M){return`${P.id}:content:${M}`}function L(P){var M;for(let $=P.length-1;$>=0;$--){const v=P[$];if(v.kind==="tool"&&v.pending)return v;if((M=v.steps)!=null&&M.length){const E=L(v.steps);if(E)return E}}return null}function R(P){return P.some(M=>{var $;return M.kind==="tool"||M.kind==="plan"||M.kind==="turn_thinking"?!0:($=M.steps)!=null&&$.length?R(M.steps):!1})}const x=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]);function S(P){var M;return x.has(P.name)&&((M=P.args)!=null&&M.action)?`${P.name} ${P.args.action}`:P.name}function I(P){return P.kind==="ui_component"?!1:P.kind==="tool"&&P.name!=="content_publish"}const O=W(()=>{const P=t.msg.tools||[],M=P.map((C,A)=>({item:C,i:A})).filter(({item:C})=>I(C));if(M.length===0||M.length<4)return P.map((C,A)=>({type:"item",item:C,i:A,key:A}));const $=a.value,v=new Set($?M.map(({i:C})=>C):M.slice(-3).map(({i:C})=>C)),E=[];for(let C=0;Ct.msg.done,P=>{P&&xt(()=>{Kx(n.value),Vx(n.value)})},{immediate:!0}),(P,M)=>{var v;const $=et("GnBadge");return e.msg.thinking||(v=e.msg.tools)!=null&&v.length||e.msg.text||e.msg.type==="ui_component"||!e.msg.done?(h(),w("div",RR,[e.msg.thinking?(h(),ke(Cl,{key:0,msg:e.msg},null,8,["msg"])):V("",!0),ee(rv,{name:"tool-fade",tag:"div"},{default:ge(()=>[(h(!0),w(fe,null,tt(O.value,E=>(h(),w("div",{key:E.key,class:"tool-fade-item"},[E.type==="summary"?(h(),w("div",IR,[ee($,{variant:"secondary"},{default:ge(()=>[ae(y(d(m)("common.toolsCount",{n:E.total})),1)]),_:2},1024),ee(d(Kn),{size:"sm",icon:a.value?"ph ph-caret-up":"ph ph-caret-down",label:d(m)(a.value?"messages.hideOlderTools":"messages.showAllTools"),onClick:M[0]||(M[0]=C=>a.value=!a.value)},null,8,["icon","label"])])):E.item.kind==="turn_thinking"?(h(),ke(Cl,{key:1,msg:E.item},null,8,["msg"])):E.item.kind==="tool"&&E.item.name==="content_publish"&&!E.item.pending?(h(),ke(kC,{key:2,tool:E.item,"default-open":k(e.msg,E.i)===d(s).latestContentToolKey,"collapse-token":d(s).latestContentToolKey},null,8,["tool","default-open","collapse-token"])):E.item.kind==="ui_component"?(h(),ke(CR,{key:3,component:E.item},null,8,["component"])):E.item.kind==="plan"?(h(),w("details",OR,[g("summary",{onClick:M[1]||(M[1]=Bt((...C)=>d(Mt)&&d(Mt)(...C),["prevent"]))},[M[5]||(M[5]=g("i",{class:"ph ph-map-trifold"},null,-1)),ae(" "+y(d(m)("messages.plan"))+" ",1),M[6]||(M[6]=g("i",{class:"ph ph-caret-down plan-chevron"},null,-1))]),g("div",{class:"plan-body",innerHTML:d(Tn)(E.item.text)},null,8,MR)])):(h(),ke(LN,{key:5,tool:E.item},null,8,["tool"]))]))),128))]),_:1}),e.msg.text?(h(),w("div",{key:1,ref_key:"contentEl",ref:n,class:Ce(["msg-assistant-content",{"msg-flash":t.isFlashing}]),innerHTML:i.value},null,10,LR)):V("",!0),l.value?(h(),w("div",{key:2,class:Ce(["planning-indicator",{"is-executing":u.value}])},[M[7]||(M[7]=g("span",{class:"spinner"},null,-1)),g("span",$R,y(l.value),1)],2)):!e.msg.done&&e.msg.text?(h(),w("span",DR)):V("",!0),e.msg.done?(h(),w("div",PR,[e.msg.elapsed_seconds!=null?(h(),w("span",BR,[M[8]||(M[8]=g("i",{class:"ph ph-timer"},null,-1)),ae(y(e.msg.elapsed_seconds)+"s ",1)])):V("",!0),e.msg.tool_call_count?(h(),w("span",FR,[M[9]||(M[9]=g("i",{class:"ph ph-wrench"},null,-1)),ae(y(e.msg.tool_call_count),1)])):V("",!0),e.msg.token_count?(h(),w("span",UR,[M[10]||(M[10]=g("i",{class:"ph ph-coins"},null,-1)),ae(y(_(e.msg.token_count)),1)])):V("",!0),d(r)?(h(),w("span",GR,y(d(r)),1)):V("",!0),e.msg.text?(h(),ke(d(Kn),{key:4,icon:d(f)?"ph ph-check":"ph ph-copy",label:d(m)(d(f)?"common.copied":"common.copy"),class:"msg-copy-btn",onClick:M[2]||(M[2]=E=>d(p)(e.msg.text))},null,8,["icon","label"])):V("",!0),c.value?(h(),ke(d(Kn),{key:5,icon:"ph ph-thumbs-up",label:d(m)("messages.useful"),class:Ce(["msg-rate-btn",{active:e.msg.rating===1}]),onClick:M[3]||(M[3]=E=>b(1))},null,8,["label","class"])):V("",!0),c.value?(h(),ke(d(Kn),{key:6,icon:"ph ph-thumbs-down",label:d(m)("messages.notUseful"),class:Ce(["msg-rate-btn",{active:e.msg.rating===-1}]),onClick:M[4]||(M[4]=E=>b(-1))},null,8,["label","class"])):V("",!0)])):V("",!0)])):V("",!0)}}},Og=Ye(HR,[["__scopeId","data-v-7b659b91"]]),zR={class:"summary-card"},KR=["innerHTML"],Mg={__name:"SummaryCard",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>(h(),w("details",zR,[g("summary",{onClick:n[0]||(n[0]=Bt((...s)=>d(Mt)&&d(Mt)(...s),["prevent"]))},[n[1]||(n[1]=g("i",{class:"ph ph-article"},null,-1)),ae(" "+y(d(m)("messages.contextSummary")),1)]),g("div",{class:"thinking-body",innerHTML:d(Tn)(e.msg.text)},null,8,KR)]))}},qR={key:0,class:"compression-notice compression-pending"},VR=["open"],WR={key:0,class:"compression-counts"},YR={key:1,class:"ph ph-caret-down compression-chevron"},jR=["innerHTML"],ZR={__name:"CompressionNotice",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>e.msg.type==="compression_pending"?(h(),w("div",qR,[n[1]||(n[1]=g("i",{class:"ph ph-spinner ph-spin"},null,-1)),g("span",null,y(e.msg.text||d(m)("messages.compressingContext")),1)])):(h(),w("details",{key:1,class:"compression-notice",open:!e.msg.summary},[g("summary",{onClick:n[0]||(n[0]=Bt((...s)=>d(Mt)&&d(Mt)(...s),["prevent"]))},[n[2]||(n[2]=g("i",{class:"ph ph-arrows-in"},null,-1)),ae(" "+y(d(m)("messages.contextCompressed"))+" ",1),e.msg.before!=null&&e.msg.after!=null?(h(),w("span",WR,y(d(m)("messages.compressionCounts",{before:e.msg.before,after:e.msg.after,n:e.msg.after})),1)):V("",!0),e.msg.summary?(h(),w("i",YR)):V("",!0)]),e.msg.summary?(h(),w("div",{key:0,class:"compression-body",innerHTML:d(Tn)(e.msg.summary)},null,8,jR)):V("",!0)],8,VR))}},Lg=Ye(ZR,[["__scopeId","data-v-0df68e38"]]),XR={class:"synapse-event"},QR={class:"synapse-event-head"},JR={class:"synapse-event-label"},eI={key:0,class:"synapse-event-type"},tI={key:1,class:"synapse-event-time"},nI=["innerHTML"],sI={__name:"SynapseEventNotice",props:{msg:{type:Object,required:!0}},setup(e){const t=e,n=$o(W(()=>t.msg.time));return(s,a)=>(h(),w("div",XR,[g("div",QR,[a[0]||(a[0]=g("i",{class:"ph ph-lightning"},null,-1)),g("span",JR,y(d(m)("messages.synapseEvent")),1),e.msg.eventType?(h(),w("span",eI,y(e.msg.eventType),1)):V("",!0),d(n)?(h(),w("span",tI,y(d(n)),1)):V("",!0)]),g("div",{class:"synapse-event-body",innerHTML:d(Tn)(e.msg.text)},null,8,nI)]))}},$g=Ye(sI,[["__scopeId","data-v-e89b33a0"]]),Dg={__name:"ErrorMessage",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>{const s=et("GnAlert");return h(),ke(s,{variant:"danger",role:"alert"},{default:ge(()=>[n[0]||(n[0]=g("i",{class:"ph ph-warning-octagon"},null,-1)),ae(" "+y(e.msg.text),1)]),_:1})}}},aI={class:"message-list-wrap"},iI={key:0,class:"session-loading"},oI={key:1,class:"archive-loading"},rI=["data-msg-index"],lI=["title"],Ui=250,cI=8,uI=4,dI={__name:"MessageList",setup(e){const t=Gt(),n=F(null),s=F(!1),a=F(!1),i=F(null);let o=!1,r=null,u=null,l=null,c=0,f=0;function p(){return n.value??null}function b(){f=performance.now()}function _(A){return!!A&&A.scrollHeight-A.clientHeight>1}function k(){f=performance.now(),o=!0,c++}function L(A){b(),!(A.deltaY>=0)&&_(p())&&k()}let R=null;function x(A){var B,z;b(),R=((z=(B=A.touches)==null?void 0:B[0])==null?void 0:z.clientY)??null}function S(A){var z,K;b();const B=(K=(z=A.touches)==null?void 0:z[0])==null?void 0:K.clientY;B==null||R==null||B-R>uI&&_(p())&&(k(),R=B)}function I(A){const B=t.messages.findIndex(j=>{var Q;return(Q=j.rawIndices)==null?void 0:Q.includes(A)});if(B===-1)return;const z=p(),K=z==null?void 0:z.querySelector(`[data-msg-index="${B}"]`);K?K.scrollIntoView({block:"center",behavior:"smooth"}):z==null||z.scrollTo({top:0,behavior:"smooth"}),i.value=B,l&&clearTimeout(l),l=setTimeout(()=>{i.value=null,l=null},3e3)}function O(A){return A.role==="user"?pg:A.type==="summary"?Mg:A.type==="compression_notice"||A.type==="compression_pending"?Lg:A.type==="synapse_event"?$g:A.type==="error"?Dg:Og}function P(A=!1){if(A){const B=p();B&&B.scrollTo({top:B.scrollHeight,behavior:"smooth"});return}M()}function M(){const A=++c,B=p();if(!B||performance.now()-f{for(;performance.now()1&&(B.scrollTop=B.scrollHeight),await new Promise(Q=>requestAnimationFrame(Q)),A!==c))return})()}function $(){const A=p();A&&(performance.now()-f{o||performance.now()-f1&&(A.scrollTop=A.scrollHeight)})))}function v(A){const B=A.target;if(!B)return;const z=B.scrollHeight-B.scrollTop-B.clientHeight;if(z>100?o=!0:z<=cI&&(o=!1),a.value=z>200,B.scrollTop<80&&t.archiveHasMore&&!t.archiveLoading){const K=Math.floor(B.scrollTop+B.clientHeight/2),j=B.querySelectorAll("[data-msg-index]");for(const Q of j)if(Q.offsetTop+Q.offsetHeight>=K){r=Number(Q.dataset.msgIndex),u=Math.round(Q.getBoundingClientRect().top);break}t.loadArchivedMessages()}}Ge(()=>t.messages.length,()=>{!o&&!t.loading&&!t.archiveLoading&&xt(()=>P())});function E(A){var K,j,Q,ce,Be,Xe,De;if(!A)return"";let B=0,z=0;for(const J of A.tools??[])B+=((K=J.result)==null?void 0:K.length)??0,B+=((j=J.terminalOutput)==null?void 0:j.length)??0,z+=((Q=J.steps)==null?void 0:Q.length)??0;return[((ce=A.text)==null?void 0:ce.length)??0,((Xe=(Be=A.thinking)==null?void 0:Be.text)==null?void 0:Xe.length)??0,((De=A.tools)==null?void 0:De.length)??0,B,z,A.statusLabel??"",A.done?1:0].join(":")}Ge(()=>E(t.streamingMsg),()=>{o||xt(()=>$())}),Ge(()=>t.streaming,(A,B)=>{B&&!A&&!o&&!t.loading&&M()}),Ge(()=>t.archiveLoading,A=>{!A&&r!=null&&xt(()=>{const B=p(),z=B==null?void 0:B.querySelector(`[data-msg-index="${r}"]`);if(B&&z&&u!=null){const K=Math.round(z.getBoundingClientRect().top)-u;K&&(B.scrollTop+=K)}r=null,u=null})}),Ge(()=>t.currentId,()=>{c++,o=!1,a.value=!1,s.value=!1,r=null,u=null}),Ge(()=>t.loading,A=>{A||(t.scrollToMessageIndex!=null?(s.value=!0,C(()=>{I(t.scrollToMessageIndex),t.scrollToMessageIndex=null})):(s.value=!1,C(()=>{P(),s.value=!0})))});function C(A){xt(()=>requestAnimationFrame(()=>requestAnimationFrame(A)))}return $t(()=>{!t.loading&&t.messages.length?C(()=>{P(),s.value=!0}):t.loading||(s.value=!0)}),Nn(()=>{l&&clearTimeout(l)}),(A,B)=>(h(),w("div",aI,[d(t).loading?(h(),w("div",iI,[...B[1]||(B[1]=[g("i",{class:"ph ph-spinner animate-spin"},null,-1)])])):V("",!0),d(t).archiveLoading?(h(),w("div",oI,[B[2]||(B[2]=g("i",{class:"ph ph-spinner animate-spin"},null,-1)),g("span",null,y(d(m)("chat.loadingOlder")),1)])):V("",!0),d(t).messages.length?(h(),w("div",{key:2,ref_key:"listRef",ref:n,class:Ce(["message-scroller",{"is-hidden":!s.value}]),onWheelPassive:L,onPointerdownPassive:b,onTouchstartPassive:x,onTouchmovePassive:S,onScrollPassive:v},[(h(!0),w(fe,null,tt(d(t).messages,(z,K)=>(h(),w("div",{key:z.id??K,class:Ce(["message-row",{"msg-enter":z.animate}]),"data-msg-index":K},[(h(),ke(eo(O(z)),{msg:z,"is-flashing":i.value===K},null,8,["msg","is-flashing"]))],10,rI))),128))],34)):V("",!0),ee(Xs,{name:"scroll-btn"},{default:ge(()=>[a.value?(h(),w("button",{key:0,class:"scroll-to-bottom-btn",title:d(m)("chat.scrollToBottom"),onClick:B[0]||(B[0]=z=>P(!0))},[...B[3]||(B[3]=[g("i",{class:"ph ph-arrow-down"},null,-1)])],8,lI)):V("",!0)]),_:1})]))}},fI=Ye(dI,[["__scopeId","data-v-d8b83e98"]]);function Pg(){const e=Gt(),t=F(!1),n=F(0),s=F(!1);function a(x){return e.imagesProcessing++,new Promise((S,I)=>{const O=new FileReader;O.onload=async P=>{try{const M=await i(P.target.result,1024,.9);e.pendingImages.push(M),S()}catch(M){I(M)}finally{e.imagesProcessing--}},O.onerror=()=>{e.imagesProcessing--,I(O.error??new Error("Failed to read file"))},O.readAsDataURL(x)})}function i(x,S=1024,I=.9){return new Promise((O,P)=>{const M=new Image;M.onload=()=>{let $=M.width,v=M.height;if($>S||v>S){const A=S/Math.max($,v);$=Math.round($*A),v=Math.round(v*A)}const E=document.createElement("canvas");E.width=$,E.height=v,E.getContext("2d").drawImage(M,0,0,$,v),E.toBlob(A=>{if(!A){P(new Error("Canvas toBlob failed"));return}const B=new FileReader;B.onload=z=>O(z.target.result),B.onerror=P,B.readAsDataURL(A)},"image/jpeg",I)},M.onerror=P,M.src=x})}function o(x){e.pendingImages.splice(x,1)}async function r(x){if(e.currentId){s.value=!0,n.value=0;try{const S=await Jv(e.currentId,x);e.pendingFiles.push(S),e.fetchFiles(e.currentId)}finally{s.value=!1,n.value=0}}}function u(x){e.pendingFiles.splice(x,1)}async function l(x){const S=Array.from(x.target.files??[]);x.target.value="",await k(S)}async function c(x){var O;const I=Array.from(((O=x.clipboardData)==null?void 0:O.items)??[]).filter(P=>P.type.startsWith("image/"));if(I.length){x.preventDefault();for(const P of I){const M=P.getAsFile();M&&await a(M)}}}function f(x){x.preventDefault(),R(x)&&(t.value=!0)}function p(x){x.preventDefault()}function b(x){x.currentTarget.contains(x.relatedTarget)||(t.value=!1)}async function _(x){var I;x.preventDefault(),t.value=!1;const S=Array.from(((I=x.dataTransfer)==null?void 0:I.files)??[]);await k(S)}async function k(x){for(const S of x)S.type.startsWith("image/")?await a(S):await r(S)}function L(){e.pendingImages=[],e.pendingFiles=[]}function R(x){var S;return Array.from(((S=x.dataTransfer)==null?void 0:S.types)??[]).includes("Files")}return{isDragging:t,uploading:s,uploadProgress:n,handleFileInput:l,handlePaste:c,handleDragEnter:f,handleDragOver:p,handleDragLeave:b,handleDrop:_,removeImage:o,removeFile:u,clearPending:L}}const pI={class:"file-preview-strip"},gI=["src","alt"],mI=["onClick","title"],hI={class:"file-preview-name"},vI={__name:"FilePreviewStrip",setup(e){const t=Gt(),{removeImage:n,removeFile:s}=Pg();return(a,i)=>{const o=et("GnChip");return h(),w("div",pI,[(h(!0),w(fe,null,tt(d(t).imagesProcessing,r=>(h(),w("div",{key:`img-processing-${r}`,class:"file-preview-image is-processing"},[...i[0]||(i[0]=[g("i",{class:"ph ph-spinner ph-spin"},null,-1)])]))),128)),(h(!0),w(fe,null,tt(d(t).pendingImages,(r,u)=>(h(),w("div",{key:`img-${u}`,class:"file-preview-image"},[g("img",{src:r,alt:d(m)("chat.attachment")},null,8,gI),g("button",{class:"file-preview-remove",onClick:l=>d(n)(u),title:d(m)("chat.removeAttachment")},[...i[1]||(i[1]=[g("i",{class:"ph ph-x"},null,-1)])],8,mI)]))),128)),(h(!0),w(fe,null,tt(d(t).pendingFiles,(r,u)=>(h(),ke(o,{key:`file-${u}`,class:"file-preview-pill",icon:"ph ph-file",removable:"",title:r.name,onRemove:l=>d(s)(u)},{default:ge(()=>[g("span",hI,y(r.name),1)]),_:2},1032,["title","onRemove"]))),128))])}}},bI=Ye(vI,[["__scopeId","data-v-2023088a"]]),_I={key:1,class:"upload-progress is-indeterminate"},yI={key:2,class:"sending-notice"},kI={class:"input-row"},wI=["title","disabled"],SI=["placeholder","disabled","onKeydown"],EI=["title","disabled"],TI=["title"],AI={__name:"InputBar",props:{ws:{type:Object,required:!0}},setup(e){const t=e,n=Gt(),{isDragging:s,uploading:a,handleFileInput:i,handlePaste:o,handleDragEnter:r,handleDragOver:u,handleDragLeave:l,handleDrop:c,clearPending:f}=Pg(),p=F(""),b=F(null),_=F(null),k=F(!1),L=W(()=>!!n.currentId&&!k.value&&(p.value.trim()||n.pendingImages.length||n.pendingFiles.length)),R=W(()=>n.streaming?m("chat.messagePlaceholderBusy"):m("chat.messagePlaceholder"));Ge(()=>n.currentId,v=>{p.value=v?n.loadDraft(v):"",xt(O)},{immediate:!0});let x=null;Ge(p,v=>{x&&clearTimeout(x),x=setTimeout(()=>n.saveDraft(v),300)});const{pendingQuote:S,consumeQuote:I}=eg();Ge(S,v=>{if(!v)return;const E=v.split(` +`).map(C=>`> ${C}`).join(` +`);p.value=E+` + +`+p.value,I(),xt(()=>{var A;O(),(A=b.value)==null||A.focus();const C=b.value;C&&(C.selectionStart=C.selectionEnd=C.value.length)})});function O(){const v=b.value;v&&(v.style.height="auto",v.style.height=Math.min(v.scrollHeight,144)+"px")}function P(){if(!(!L.value||k.value)){k.value=!0;try{const v=p.value.trim(),E=[...n.pendingImages],C=[...n.pendingFiles],A=typeof(crypto==null?void 0:crypto.randomUUID)=="function"?crypto.randomUUID():`m_${Date.now()}_${Math.random().toString(36).slice(2)}`;n.appendUserMessage(v,E,C,{queued:n.streaming,clientKey:A}),f(),p.value="",xt(O);const B=E.map(j=>j.split(",",2)[1]).filter(Boolean),z={type:"message",content:v||" ",client_id:A};B.length&&(z.images=B),C.length&&(z.files=C),t.ws.send(z)==="rejected"?n.markMessageFailed(A,"queue_full"):n.streaming||(n.awaitingStream=!0)}finally{k.value=!1}}}function M(){const v=b.value;if(!v)return;const E=v.selectionStart,C=v.selectionEnd;p.value=p.value.slice(0,E)+` +`+p.value.slice(C),xt(()=>{v.selectionStart=v.selectionEnd=E+1,O()})}async function $(){n.currentId&&await zv(n.currentId)}return(v,E)=>(h(),w("div",{class:Ce(["input-bar input-dropzone",{"is-dragging":d(s)}]),onDragenter:E[4]||(E[4]=(...C)=>d(r)&&d(r)(...C)),onDragover:E[5]||(E[5]=(...C)=>d(u)&&d(u)(...C)),onDragleave:E[6]||(E[6]=(...C)=>d(l)&&d(l)(...C)),onDrop:E[7]||(E[7]=(...C)=>d(c)&&d(c)(...C))},[d(n).pendingImages.length||d(n).pendingFiles.length?(h(),ke(bI,{key:0})):V("",!0),d(a)?(h(),w("div",_I,[...E[8]||(E[8]=[g("div",{class:"upload-progress-fill"},null,-1)])])):V("",!0),d(n).awaitingStream&&!d(n).streaming?(h(),w("div",yI,[E[9]||(E[9]=g("i",{class:"ph ph-spinner ph-spin"},null,-1)),ae(" "+y(d(m)("chat.sending")),1)])):V("",!0),g("div",kI,[g("input",{ref_key:"fileInputEl",ref:_,type:"file",multiple:"",style:{display:"none"},onChange:E[0]||(E[0]=(...C)=>d(i)&&d(i)(...C))},null,544),g("button",{class:"btn-icon",title:d(m)("chat.attachFiles"),disabled:!d(n).currentId,onClick:E[1]||(E[1]=C=>_.value.click())},[...E[10]||(E[10]=[g("i",{class:"ph ph-paperclip"},null,-1)])],8,wI),Gs(g("textarea",{ref_key:"textareaEl",ref:b,"onUpdate:modelValue":E[2]||(E[2]=C=>p.value=C),class:"input-textarea",placeholder:R.value,rows:"1",disabled:!d(n).currentId,onKeydown:[Wn(Bt(P,["exact","prevent"]),["enter"]),Wn(Bt(M,["ctrl","prevent"]),["enter"])],onInput:O,onPaste:E[3]||(E[3]=(...C)=>d(o)&&d(o)(...C))},null,40,SI),[[hi,p.value]]),g("button",{class:"btn-icon",title:d(n).streaming?d(m)("chat.sendQueued"):d(m)("chat.sendEnter"),disabled:!L.value,onClick:P},[...E[11]||(E[11]=[g("i",{class:"ph ph-paper-plane-tilt"},null,-1)])],8,EI),d(n).streaming?(h(),w("button",{key:0,class:"btn-icon",title:d(m)("chat.stopGeneration"),onClick:$},[...E[12]||(E[12]=[g("i",{class:"ph ph-stop-circle"},null,-1)])],8,TI)):V("",!0)])],34))}},xI=Ye(AI,[["__scopeId","data-v-dc74318b"]]),NI={class:"chat-area"},CI={key:1,class:"empty-chat"},RI={__name:"ChatArea",emits:["toggle-sidebar","toggle-artifacts"],setup(e,{emit:t}){const n=t,s=Gt(),a=Yn(),i=qT();Ge(()=>s.currentId,r=>{r?i.connect(r):i.disconnect()},{immediate:!0}),Ge(i.connected,r=>{s.wsConnected=r},{immediate:!0}),Ge(i.reconnecting,r=>{s.wsReconnecting=r},{immediate:!0});function o(){s.currentId&&i.connect(s.currentId)}return Nn(()=>i.disconnect()),(r,u)=>{const l=et("GnIconButton"),c=et("GnAlert"),f=et("GnEmptyState");return h(),w("div",NI,[ee(r0,{onToggleSidebar:u[0]||(u[0]=p=>n("toggle-sidebar")),onToggleArtifacts:u[1]||(u[1]=p=>n("toggle-artifacts"))}),ee(Xs,{name:"fade"},{default:ge(()=>[d(i).reconnectFailed.value?(h(),ke(c,{key:0,variant:"warning",class:"reconnect-banner"},{default:ge(()=>[u[3]||(u[3]=g("i",{class:"ph ph-wifi-slash"},null,-1)),ae(" "+y(d(m)("chat.connectionLost"))+" ",1),ee(l,{icon:"ph ph-arrows-clockwise",label:d(m)("chat.retry"),onClick:o},null,8,["label"])]),_:1})):V("",!0)]),_:1}),ee(Xs,{name:"fade"},{default:ge(()=>[d(i).fatalClose.value?(h(),ke(c,{key:0,variant:"error",class:"reconnect-banner"},{default:ge(()=>[u[4]||(u[4]=g("i",{class:"ph ph-warning-octagon"},null,-1)),ae(" "+y(d(m)(d(i).fatalClose.value.code===4004?"chat.sessionGone":"chat.sessionAccessDenied"))+" ",1),d(i).fatalClose.value.code===4003?(h(),ke(l,{key:0,icon:"ph ph-sign-in",label:d(m)("chat.signIn"),onClick:d(a).login},null,8,["label","onClick"])):(h(),ke(l,{key:1,icon:"ph ph-x",label:d(m)("common.close"),onClick:u[2]||(u[2]=p=>d(s).clearSession())},null,8,["label"]))]),_:1})):V("",!0)]),_:1}),d(s).currentId?(h(),w(fe,{key:0},[ee(fI),ee(xI,{ws:d(i)},null,8,["ws"])],64)):(h(),w("div",CI,[ee(f,{icon:"ph ph-chat-dots",title:d(m)("chat.nothingOpen"),text:d(m)("chat.startConversation")},null,8,["title","text"])]))])}}},II=Ye(RI,[["__scopeId","data-v-651243b6"]]),OI=Es("apiTokens",()=>{const e=F([]),t=F(!1),n=F(!1);async function s(){t.value=!0;try{const o=await tb();e.value=o.items||[]}finally{t.value=!1}}async function a(o){n.value=!0;try{const r=await nb(o);return e.value.unshift({id:r.id,name:r.name,token_prefix:r.token_prefix,created_at:r.created_at,last_used_at:null}),r}finally{n.value=!1}}async function i(o){await sb(o),e.value=e.value.filter(r=>r.id!==o)}return{tokens:e,loading:t,creating:n,fetchTokens:s,createToken:a,revokeToken:i}}),MI={class:"create-key-body"},LI={__name:"CreateKeyModal",props:{open:Boolean,creating:Boolean},emits:["close","submit"],setup(e,{emit:t}){const n=e,s=t,a=F("");Ge(()=>n.open,o=>{o&&(a.value="")});function i(){const o=a.value.trim();o&&s("submit",o)}return(o,r)=>{const u=et("GnInput"),l=et("GnButton"),c=et("GnModal");return h(),ke(c,{open:n.open,title:d(m)("settings.keyCreateTitle"),"onUpdate:open":r[2]||(r[2]=f=>s("close"))},{actions:ge(()=>[ee(l,{variant:"secondary",onClick:r[1]||(r[1]=f=>s("close")),disabled:n.creating},{default:ge(()=>[ae(y(d(m)("common.cancel")),1)]),_:1},8,["disabled"]),ee(l,{variant:"primary",loading:n.creating,onClick:i},{default:ge(()=>[ae(y(d(m)("common.create")),1)]),_:1},8,["loading"])]),default:ge(()=>[g("div",MI,[ee(u,{modelValue:a.value,"onUpdate:modelValue":r[0]||(r[0]=f=>a.value=f),label:d(m)("col.name"),placeholder:d(m)("settings.keyNamePlaceholder"),disabled:n.creating,onKeydown:Wn(i,["enter"])},null,8,["modelValue","label","placeholder","disabled"])])]),_:1},8,["open","title"])}}},$I=Ye(LI,[["__scopeId","data-v-40e57301"]]),DI={class:"show-token-body"},PI={class:"show-token-warning"},BI={class:"show-token-value"},FI={__name:"ShowTokenModal",props:{open:Boolean,token:String},emits:["close"],setup(e,{emit:t}){const n=e,s=t;return(a,i)=>{const o=et("GnCopyButton"),r=et("GnInputGroup"),u=et("GnButton"),l=et("GnModal");return h(),ke(l,{open:n.open,title:d(m)("settings.keyCreatedTitle"),"onUpdate:open":i[1]||(i[1]=c=>s("close"))},{actions:ge(()=>[ee(u,{variant:"primary",onClick:i[0]||(i[0]=c=>s("close"))},{default:ge(()=>[ae(y(d(m)("common.done")),1)]),_:1})]),default:ge(()=>[g("div",DI,[g("p",PI,[i[2]||(i[2]=g("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+y(d(m)("settings.keyCopyNow"))+" ",1),g("strong",null,y(d(m)("settings.keyCopyNowStrong")),1),i[3]||(i[3]=ae(". ",-1))]),ee(r,null,{action:ge(()=>[ee(o,{text:n.token,label:d(m)("common.copyToClipboard")},null,8,["text","label"])]),default:ge(()=>[g("code",BI,y(n.token),1)]),_:1})])]),_:1},8,["open","title"])}}},UI=Ye(FI,[["__scopeId","data-v-cfe353f9"]]),GI={class:"api-keys-panel"},HI={class:"api-keys-header"},zI={class:"api-keys-title"},KI={class:"api-keys-description"},qI={key:1,class:"api-keys-loading"},VI={__name:"ApiKeysPanel",setup(e){const t=OI(),n=Yn(),s=Na(),a=Mn(),i=F(!1),o=F(!1),r=F(""),u=W(()=>[{key:"name",label:m("col.name")},{key:"token_prefix",label:m("col.key")},{key:"created_at",label:m("col.created")},{key:"last_used_at",label:m("col.lastUsed")},{key:"actions",label:""}]);$t(()=>{t.fetchTokens()});function l(){i.value=!0}async function c(b){try{const _=await t.createToken(b);i.value=!1,r.value=_.token,o.value=!0}catch(_){a.error({title:m("toast.keyCreateFailed"),text:_.message})}}async function f(b,_){if(await s(m("confirm.revokeKey",{name:_})))try{await t.revokeToken(b),a.success({title:m("toast.keyRevoked")})}catch(L){a.error({title:m("toast.keyRevokeFailed"),text:L.message})}}function p(b){return b?new Date(b).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"}):null}return(b,_)=>{const k=et("GnButton"),L=et("GnAlert"),R=et("GnLoader"),x=et("GnIconButton"),S=et("GnTable");return h(),w("div",GI,[g("div",HI,[g("h2",zI,y(d(m)("settings.keysTitle")),1),ee(k,{variant:"primary",icon:"ph ph-plus",onClick:l},{default:ge(()=>[ae(y(d(m)("settings.keysCreate")),1)]),_:1})]),g("p",KI,y(d(m)("settings.keysDescription")),1),d(n).isNoAuthMode?(h(),ke(L,{key:0,variant:"warning",class:"api-keys-warning"},{default:ge(()=>[_[2]||(_[2]=g("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+y(d(m)("settings.keysNoAuthWarning")),1)]),_:1})):V("",!0),d(t).loading?(h(),w("div",qI,[ee(R,{circle:"",label:d(m)("settings.keysLoading")},null,8,["label"])])):(h(),ke(S,{key:2,columns:u.value,rows:d(t).tokens,"empty-text":d(m)("settings.keysEmpty")},{"cell-token_prefix":ge(({row:I})=>[g("code",null,y(I.token_prefix),1)]),"cell-created_at":ge(({row:I})=>[ae(y(p(I.created_at)),1)]),"cell-last_used_at":ge(({row:I})=>[ae(y(p(I.last_used_at)||d(m)("common.never")),1)]),"cell-actions":ge(({row:I})=>[ee(x,{icon:"ph ph-trash",label:d(m)("common.revoke"),onClick:O=>f(I.id,I.name)},null,8,["label","onClick"])]),_:1},8,["columns","rows","empty-text"])),ee($I,{open:i.value,creating:d(t).creating,onClose:_[0]||(_[0]=I=>i.value=!1),onSubmit:c},null,8,["open","creating"]),ee(UI,{open:o.value,token:r.value,onClose:_[1]||(_[1]=I=>o.value=!1)},null,8,["open","token"])])}}},WI=Ye(VI,[["__scopeId","data-v-ae70e1f9"]]),YI={class:"account-panel"},jI={class:"account-language"},ZI={class:"account-language-header"},XI={class:"account-language-title"},QI={class:"account-language-description"},JI={__name:"AccountPanel",setup(e){const t=Yn(),n=Mn(),s=F(!1),a=W(()=>!t.isNoAuthMode&&t.user!==null),i={en:"profile.langEn",uk:"profile.langUk",ru:"profile.langRu"},o=W(()=>{const c=Db.map(f=>({value:f,label:m(i[f])}));return a.value?[{value:"",label:m("profile.languageAuto")},...c]:c}),r=W(()=>a.value?t.user.locale??"":Lt.value),u=W(()=>m(a.value?"settings.languageDescription":"settings.languageDescriptionOpen"));async function l(c){if(!a.value){Pb(c),oo(c),n.success({title:m("toast.languageSaved")});return}s.value=!0;try{const f=await $v({locale:c||"auto"});t.user=f,oo(f.locale_effective),n.success({title:m("toast.languageSaved")})}catch(f){n.error({title:m("common.error"),text:f.message})}finally{s.value=!1}}return(c,f)=>(h(),w("div",YI,[g("div",jI,[g("div",ZI,[g("h2",XI,y(d(m)("settings.languageToolbar")),1)]),g("p",QI,y(u.value),1),ee(d(co),{class:"language-select","aria-label":d(m)("settings.languageToolbar"),"model-value":r.value,options:o.value,disabled:s.value,"onUpdate:modelValue":l},null,8,["aria-label","model-value","options","disabled"])]),ee(WI)]))}},eO=Ye(JI,[["__scopeId","data-v-d13b8cf7"]]),tO={class:"notifications-panel"},nO={class:"notifications-title"},sO={class:"notifications-description"},aO={key:1,class:"notifications-row"},iO={class:"notifications-row-text"},oO={class:"notifications-row-title"},rO={class:"notifications-row-status"},lO={__name:"NotificationSettingsPanel",setup(e){const{supported:t,bridgeMode:n,permission:s,subscribed:a,busy:i,enable:o,disable:r,syncState:u}=Np(),l=Mn();$t(()=>{u()});async function c(f){try{if(f){const p=await o();p===!1&&s.value==="denied"?l.error({title:m("toast.notificationsDenied"),text:m(n.value?"toast.notificationsAllowApp":"toast.notificationsAllowBrowser")}):p===!1&&l.error({title:m("toast.notificationsUnavailable"),text:m("toast.notificationsUnavailableText")})}else await r()}catch(p){l.error({title:m("toast.notificationsFailed"),text:p.message})}}return(f,p)=>{const b=et("GnAlert"),_=et("GnSwitch");return h(),w("div",tO,[g("h2",nO,y(d(m)("settings.notificationsTitle")),1),g("p",sO,[d(n)?(h(),w(fe,{key:0},[ae(y(d(m)("settings.notificationsBridgeText")),1)],64)):(h(),w(fe,{key:1},[ae(y(d(m)("settings.notificationsWebText")),1)],64))]),d(t)?(h(),w("div",aO,[g("div",iO,[g("div",oO,y(d(m)("settings.notificationsRowTitle")),1),g("div",rO,[d(a)?(h(),w(fe,{key:0},[d(n)?(h(),w(fe,{key:0},[ae(y(d(m)("settings.notificationsOnBackground")),1)],64)):(h(),w(fe,{key:1},[ae(y(d(m)("settings.notificationsOn")),1)],64))],64)):d(s)==="denied"?(h(),w(fe,{key:1},[ae(y(d(m)(d(n)?"settings.notificationsBlockedApp":"settings.notificationsBlockedBrowser")),1)],64)):(h(),w(fe,{key:2},[ae(y(d(m)("settings.notificationsOff")),1)],64))])]),ee(_,{"model-value":d(a),disabled:d(i)||d(s)==="denied","onUpdate:modelValue":c},null,8,["model-value","disabled"])])):(h(),ke(b,{key:0,variant:"info",class:"notifications-unsupported"},{default:ge(()=>[p[0]||(p[0]=g("i",{class:"ph ph-info"},null,-1)),g("span",null,y(d(m)("settings.notificationsUnsupported")),1)]),_:1}))])}}},cO=Ye(lO,[["__scopeId","data-v-b74fdfda"]]),uO=Es("synapseReactions",()=>{const e=F(null),t=F([]),n=F([]),s=F(!1),a=F(!1);async function i(){s.value=!0;try{e.value=await rb()}finally{s.value=!1}}async function o(l=20){const c=await mu(l,"reaction");t.value=c.items||[]}async function r(l=20){const c=await mu(l,"dispatcher");n.value=c.items||[]}async function u(l){a.value=!0;try{e.value=await lb({...e.value||{},...l})}finally{a.value=!1}}return{settings:e,versions:t,dispatcherVersions:n,loading:s,saving:a,fetchSettings:i,fetchVersions:o,fetchDispatcherVersions:r,save:u}}),dO=["data-doc"],fO={class:"reactions-row-title"},pO={class:"reactions-row-status"},gO={class:"reactions-instructions-actions"},mO={key:0,class:"reactions-history"},hO={class:"reactions-history-title"},vO={class:"reactions-history-meta"},bO={class:"reactions-history-text"},_O={__name:"SynapseInstructionsField",props:{doc:{type:String,required:!0},title:{type:String,required:!0},note:{type:String,required:!0},placeholder:{type:String,default:""},saveLabel:{type:String,required:!0},modelValue:{type:String,default:""},versions:{type:Array,default:()=>[]},dirty:{type:Boolean,default:!1},saving:{type:Boolean,default:!1}},emits:["update:modelValue","save"],setup(e){function t(n){const s=new Date(n);return s.toLocaleDateString(Lt.value,{month:"short",day:"numeric"})+" "+s.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"})}return(n,s)=>(h(),w("div",{class:"reactions-instructions","data-doc":e.doc},[g("div",fO,y(e.title),1),g("div",pO,y(e.note),1),ee(d(ic),{"model-value":e.modelValue,rows:6,placeholder:e.placeholder,class:"reactions-instructions-textarea","onUpdate:modelValue":s[0]||(s[0]=a=>n.$emit("update:modelValue",a))},null,8,["model-value","placeholder"]),g("div",gO,[ee(d(ot),{variant:"primary",disabled:!e.dirty||e.saving,onClick:s[1]||(s[1]=a=>n.$emit("save"))},{default:ge(()=>[ae(y(e.saveLabel),1)]),_:1},8,["disabled"])]),e.versions.length?(h(),w("div",mO,[g("div",hO,y(d(m)("settings.reactionsHistory")),1),(h(!0),w(fe,null,tt(e.versions,a=>(h(),w("div",{key:a.created_at+":"+a.content.slice(0,24),class:"reactions-history-item"},[g("span",vO,[g("i",{class:Ce(["ph",a.edited_by==="navi"?"ph-robot":"ph-user"])},null,2),ae(" "+y(a.edited_by==="navi"?"Navi":d(m)("common.you"))+" · "+y(t(a.created_at))+" ",1),a.reason?(h(),w(fe,{key:0},[ae(" · "+y(a.reason),1)],64)):V("",!0)]),g("div",bO,y(a.content),1)]))),128))])):V("",!0)],8,dO))}},Bd=Ye(_O,[["__scopeId","data-v-e248ff58"]]),yO={class:"reactions-panel"},kO={class:"reactions-title"},wO={class:"reactions-description"},SO={key:1,class:"reactions-loading"},EO={class:"reactions-row"},TO={class:"reactions-row-text"},AO={class:"reactions-row-title"},xO={class:"reactions-row-status"},NO={class:"reactions-row"},CO={class:"reactions-row-text"},RO={class:"reactions-row-title"},IO={class:"reactions-row-status"},OO={class:"reactions-row"},MO={class:"reactions-row-text"},LO={class:"reactions-row-title"},$O={class:"reactions-row-status"},DO={class:"reactions-row reactions-row--stacked"},PO={class:"reactions-row-text"},BO={class:"reactions-row-title"},FO={class:"reactions-row-status"},UO={__name:"SynapseReactionsPanel",setup(e){const t=W(()=>[{value:"always",label:m("common.always")},{value:"important",label:m("settings.reactionsOnlyFailures")},{value:"never",label:m("common.never")}]),n=W(()=>{var R,x;return[{value:"app",label:m("settings.reactionsTargetApp")},{value:"app_synapse",label:m("settings.reactionsTargetAppSynapse"),disabled:!((R=o.value)!=null&&R.source_ready)},{value:"synapse",label:m("settings.reactionsTargetSynapse"),disabled:!((x=o.value)!=null&&x.source_ready)}]}),s=W(()=>({always:m("settings.reactionsPushAlways"),important:m("settings.reactionsPushFailures"),never:m("settings.reactionsPushNever")})),a=uO(),i=Mn(),o=W(()=>a.settings),r=F(!1),u=F(""),l=F(""),c=F(0),f=W(()=>o.value!==null&&u.value!==o.value.instructions),p=W(()=>o.value!==null&&l.value!==o.value.dispatcher_instructions);Ge(o,R=>{R&&(u.value!==R.instructions&&(u.value=R.instructions),l.value!==R.dispatcher_instructions&&(l.value=R.dispatcher_instructions),c.value=R.reaction_session_ttl_minutes)},{immediate:!0}),$t(async()=>{r.value=!0;try{await a.fetchSettings(),await Promise.all([a.fetchVersions(),a.fetchDispatcherVersions()])}catch(R){i.error({title:m("toast.reactionsLoadFailed"),text:R.message})}});async function b(R){try{await a.save(R)}catch(x){i.error({title:m("toast.saveFailed"),text:x.message})}}async function _(){try{await a.save({instructions:u.value}),await a.fetchVersions(),i.success({title:m("toast.instructionsSaved")})}catch(R){i.error({title:m("toast.instructionsFailed"),text:R.message})}}async function k(){try{await a.save({dispatcher_instructions:l.value}),await a.fetchDispatcherVersions(),i.success({title:m("toast.instructionsSaved")})}catch(R){i.error({title:m("toast.instructionsFailed"),text:R.message})}}async function L(){var S,I;const R=Number(c.value);if(!Number.isFinite(R)||R<0){c.value=((S=o.value)==null?void 0:S.reaction_session_ttl_minutes)??0;return}const x=Math.min(Math.round(R),43200);x!==((I=o.value)==null?void 0:I.reaction_session_ttl_minutes)&&(c.value=x,await b({reaction_session_ttl_minutes:x}))}return(R,x)=>{var S;return h(),w("div",yO,[g("h2",kO,y(d(m)("settings.reactionsTitle")),1),g("p",wO,y(d(m)("settings.reactionsDescription")),1),r.value&&!((S=o.value)!=null&&S.source_ready)?(h(),ke(d(Vn),{key:0,variant:"info",class:"reactions-alert"},{default:ge(()=>[x[6]||(x[6]=g("i",{class:"ph ph-info"},null,-1)),g("span",null,y(d(m)("settings.reactionsNotConfigured")),1)]),_:1})):V("",!0),d(a).loading&&!o.value?(h(),w("div",SO,[ee(d(Js),{circle:"",label:d(m)("settings.reactionsLoading")},null,8,["label"])])):o.value?(h(),w(fe,{key:2},[g("div",EO,[g("div",TO,[g("div",AO,y(d(m)("settings.reactionsEnable")),1),g("div",xO,y(d(m)(o.value.reactions_enabled?"settings.reactionsOn":"settings.reactionsOff")),1)]),ee(d(qp),{"model-value":o.value.reactions_enabled,disabled:d(a).saving,"onUpdate:modelValue":x[0]||(x[0]=I=>b({reactions_enabled:I}))},null,8,["model-value","disabled"])]),g("div",NO,[g("div",CO,[g("div",RO,y(d(m)("settings.reactionsNotify")),1),g("div",IO,y(s.value[o.value.completion_notify]),1)]),ee(d(El),{"model-value":o.value.completion_notify,name:"completion-notify",options:t.value,"onUpdate:modelValue":x[1]||(x[1]=I=>b({completion_notify:I}))},null,8,["model-value","options"])]),g("div",OO,[g("div",MO,[g("div",LO,y(d(m)("settings.reactionsTarget")),1),g("div",$O,y(d(m)("settings.reactionsTargetNote")),1)]),ee(d(El),{"model-value":o.value.push_target,name:"push-target",options:n.value,"onUpdate:modelValue":x[2]||(x[2]=I=>b({push_target:I}))},null,8,["model-value","options"])]),g("div",DO,[g("div",PO,[g("div",BO,y(d(m)("settings.reactionsSessionTtl")),1),g("div",FO,y(d(m)("settings.reactionsSessionTtlNote")),1)]),ee(d(Qs),{"model-value":c.value,type:"number",min:"0",max:"43200",step:"60",class:"reactions-ttl-input",help:d(m)("settings.reactionsSessionTtlUnit"),"onUpdate:modelValue":x[3]||(x[3]=I=>c.value=I),onChange:L},null,8,["model-value","help"])]),ee(Bd,{doc:"reaction",title:d(m)("settings.reactionsInstructions"),note:d(m)("settings.reactionsInstructionsNote"),placeholder:d(m)("settings.reactionsInstructionsPlaceholder"),"save-label":d(m)("settings.reactionsInstructionsSave"),"model-value":u.value,versions:d(a).versions,dirty:f.value,saving:d(a).saving,"onUpdate:modelValue":x[4]||(x[4]=I=>u.value=I),onSave:_},null,8,["title","note","placeholder","save-label","model-value","versions","dirty","saving"]),ee(Bd,{doc:"dispatcher",title:d(m)("settings.dispatcherInstructions"),note:d(m)("settings.dispatcherInstructionsNote"),placeholder:d(m)("settings.dispatcherInstructionsPlaceholder"),"save-label":d(m)("settings.dispatcherInstructionsSave"),"model-value":l.value,versions:d(a).dispatcherVersions,dirty:p.value,saving:d(a).saving,"onUpdate:modelValue":x[5]||(x[5]=I=>l.value=I),onSave:k},null,8,["title","note","placeholder","save-label","model-value","versions","dirty","saving"])],64)):V("",!0)])}}},GO=Ye(UO,[["__scopeId","data-v-bcaf624e"]]),HO=Es("synapseTargets",()=>{const e=F([]),t=F(!1),n=F(!1);async function s(){t.value=!0;try{const o=await ab();e.value=o.items||[]}finally{t.value=!1}}async function a(o,r){n.value=!0;try{const u=await ib(o,r);return e.value.unshift({id:u.id,token_ref:u.token_ref,created_at:u.created_at}),u}finally{n.value=!1}}async function i(o){await ob(o),e.value=e.value.filter(r=>r.id!==o)}return{targets:e,loading:t,creating:n,fetchTargets:s,createTarget:a,revokeTarget:i}}),zO={class:"create-target-body"},KO={class:"create-target-hint"},qO={__name:"CreateTargetModal",props:{open:Boolean,creating:Boolean},emits:["close","submit"],setup(e,{emit:t}){const n=e,s=t,a=F(""),i=F("");Ge(()=>n.open,r=>{r&&(a.value="",i.value="")});function o(){const r=a.value.trim(),u=i.value.trim();!r||u.length<16||s("submit",r,u)}return(r,u)=>(h(),ke(d(Ia),{open:n.open,title:d(m)("settings.synapseTargetAddTitle"),"onUpdate:open":u[3]||(u[3]=l=>s("close"))},{actions:ge(()=>[ee(d(ot),{variant:"secondary",onClick:u[2]||(u[2]=l=>s("close")),disabled:n.creating},{default:ge(()=>[ae(y(d(m)("common.cancel")),1)]),_:1},8,["disabled"]),ee(d(ot),{variant:"primary",loading:n.creating,onClick:o},{default:ge(()=>[ae(y(d(m)("common.add")),1)]),_:1},8,["loading"])]),default:ge(()=>[g("div",zO,[ee(d(Qs),{modelValue:a.value,"onUpdate:modelValue":u[0]||(u[0]=l=>a.value=l),label:d(m)("settings.synapseTargetColRef"),placeholder:d(m)("settings.synapseTargetRefPlaceholder"),disabled:n.creating,onKeydown:Wn(o,["enter"])},null,8,["modelValue","label","placeholder","disabled"]),ee(d(Qs),{modelValue:i.value,"onUpdate:modelValue":u[1]||(u[1]=l=>i.value=l),label:d(m)("settings.synapseTargetSecret"),placeholder:d(m)("settings.synapseTargetSecretPlaceholder"),disabled:n.creating,onKeydown:Wn(o,["enter"])},null,8,["modelValue","label","placeholder","disabled"]),g("p",KO,[ae(y(d(m)("settings.synapseTargetHintBefore"))+" ",1),u[4]||(u[4]=g("code",null,"POST /webhooks/synapse",-1)),ae(" "+y(d(m)("settings.synapseTargetHintAfter")),1)])])]),_:1},8,["open","title"]))}},VO=Ye(qO,[["__scopeId","data-v-a46fb717"]]),WO={class:"synapse-panel"},YO={class:"synapse-header"},jO={class:"synapse-title"},ZO={class:"synapse-description"},XO={key:0,class:"synapse-loading"},QO={__name:"SynapseTargetsPanel",setup(e){const t=HO(),n=Na(),s=Mn(),a=F(!1),i=W(()=>[{key:"token_ref",label:m("settings.synapseTargetColRef")},{key:"created_at",label:m("col.created")},{key:"actions",label:""}]);$t(()=>{t.fetchTargets()});async function o(l,c){try{await t.createTarget(l,c),a.value=!1,s.success({title:m("toast.synapseTargetAdded")})}catch(f){s.error({title:m("toast.synapseTargetAddFailed"),text:f.message})}}async function r(l,c){if(await n(m("confirm.revokeTarget",{target:c})))try{await t.revokeTarget(l),s.success({title:m("toast.synapseTargetRevoked")})}catch(p){s.error({title:m("toast.synapseTargetRevokeFailed"),text:p.message})}}function u(l){return l?new Date(l).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"}):null}return(l,c)=>(h(),w("div",WO,[g("div",YO,[g("h2",jO,y(d(m)("settings.synapseTargetsTitle")),1),ee(d(ot),{variant:"primary",icon:"ph ph-plus",onClick:c[0]||(c[0]=f=>a.value=!0)},{default:ge(()=>[ae(y(d(m)("settings.synapseTargetAdd")),1)]),_:1})]),g("p",ZO,y(d(m)("settings.synapseTargetsDescription")),1),d(t).loading?(h(),w("div",XO,[ee(d(Js),{circle:"",label:d(m)("settings.synapseTargetsLoading")},null,8,["label"])])):(h(),ke(d(Vp),{key:1,columns:i.value,rows:d(t).targets,"empty-text":d(m)("settings.synapseTargetsEmpty")},{"cell-created_at":ge(({row:f})=>[ae(y(u(f.created_at)),1)]),"cell-actions":ge(({row:f})=>[ee(d(Kn),{icon:"ph ph-trash",label:d(m)("common.revoke"),onClick:p=>r(f.id,f.token_ref)},null,8,["label","onClick"])]),_:1},8,["columns","rows","empty-text"])),ee(VO,{open:a.value,creating:d(t).creating,onClose:c[1]||(c[1]=f=>a.value=!1),onSubmit:o},null,8,["open","creating"])]))}},JO=Ye(QO,[["__scopeId","data-v-fa4b73ef"]]),$l={home:"settings.skillsAreaHome",infrastructure:"settings.skillsAreaInfrastructure",workflows:"settings.skillsAreaWorkflows",general:"settings.skillsAreaGeneral"};function Fd(e){return m($l[e]||$l.general)}const eM={skill:`--- +kind: skill +name: +description: +area: general +tags: [] +triggers: [] +--- + +`,protocol:`--- +kind: protocol +name: +description: +area: general +tags: [] +triggers: [] +preconditions: [] +steps: + - +post_checks: + - +on_deviation: +on_blocked: +on_already_done: +--- + +`};function ja(e){const t=String((e==null?void 0:e.message)||e),n=/→\s*\d+:\s*([\s\S]*)$/.exec(t),s=n?n[1]:t;try{return JSON.parse(s).detail||s}catch{return s}}function tM({getKind:e,reload:t,loadError:n}){const s=Yn(),a=Na(),i=Mn(),o=F(null),r=F(null),u=F(!1),l=F(!1),c=F(""),f=F("personal"),p=F(!1),b=F(""),_=F([]),k=F(!1),L=W(()=>l.value||o.value!==null||u.value),R=W(()=>{var B;return l.value&&!o.value?!0:!!((B=o.value)!=null&&B.can_edit)}),x=W(()=>[{value:"personal",label:m("settings.skillsPersonal")},{value:"shared",label:m("settings.skillsShared")}]);async function S(B){if(!p.value){r.value=B,l.value=!1,k.value=!1,b.value="",o.value=null,_.value=[],u.value=!0;try{const z=await vb(B);if(r.value!==B)return;o.value=z,c.value=z.content,f.value=z.visibility}catch(z){r.value===B&&(n.value=ja(z))}finally{r.value===B&&(u.value=!1)}}}function I(){o.value=null,r.value=null,u.value=!1,l.value=!0,c.value=eM[e()],f.value="personal",_.value=[],k.value=!1,b.value=""}function O(){o.value&&(c.value=o.value.content,f.value=o.value.visibility,b.value="",l.value=!0)}function P(){o.value?M():$()}function M(){var B,z;c.value=((B=o.value)==null?void 0:B.content)||"",f.value=((z=o.value)==null?void 0:z.visibility)||"personal",b.value="",l.value=!1}function $(){o.value=null,r.value=null,u.value=!1,l.value=!1,c.value="",b.value="",_.value=[],k.value=!1}async function v(){p.value=!0,b.value="";try{if(o.value){const B={content:c.value};s.isAdmin&&f.value!==o.value.visibility&&(B.visibility=f.value);const z=await _b(o.value.id,B);o.value=z,c.value=z.content,f.value=z.visibility,i.success({title:m("settings.skillsSaved")})}else{const B=await bb({content:c.value,visibility:s.isAdmin?f.value:"personal"});o.value=B,r.value=B.id,c.value=B.content,f.value=B.visibility,i.success({title:m("settings.skillsCreated")})}l.value=!1,await t()}catch(B){b.value=ja(B)}finally{p.value=!1}}async function E(){if(!(!o.value||!await a(m("settings.skillsDeleteConfirm",{name:o.value.name}))))try{await yb(o.value.id),i.success({title:m("settings.skillsDeleted")}),$(),await t()}catch(z){i.error({title:m("common.error"),text:ja(z)})}}async function C(){if(k.value=!k.value,!(!k.value||_.value.length||!o.value))try{const B=await kb(o.value.id);_.value=B.items||[]}catch(B){b.value=ja(B)}}function A(B){return B?new Date(B).toLocaleString(Lt.value,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}return{authStore:s,entry:o,selectedId:r,detailLoading:u,editing:l,draft:c,visibility:f,saving:p,saveError:b,versions:_,showHistory:k,detailOpen:L,canEdit:R,visibilityOptions:x,select:S,startCreate:I,beginEdit:O,cancel:P,reset:$,save:v,remove:E,toggleHistory:C,formatWhen:A}}function nM({getKind:e,items:t}){const n=W(()=>e()==="protocol"),s=W(()=>m(n.value?"settings.tabProtocols":"settings.tabSkills")),a=W(()=>m(n.value?"settings.skillsHintProtocols":"settings.skillsHintSkills")),i=W(()=>m(n.value?"settings.skillsAddProtocol":"settings.skillsAddSkill")),o=W(()=>m(n.value?"settings.skillsEmptyProtocols":"settings.skillsEmptySkills")),r=W(()=>m(n.value?"settings.skillsCountProtocols":"settings.skillsCountSkills",{n:t.value.length})),u=W(()=>m(n.value?"settings.skillsNewProtocol":"settings.skillsNewSkill"));return{isProtocol:n,title:s,hint:a,addLabel:i,emptyLabel:o,countLabel:r,newTitle:u}}function sM({getKind:e}){const t=F([]),n=F(!1),s=F(""),a=F(""),i=F(""),o=W(()=>[{value:"",label:m("settings.skillsFilterAreaAll")},...Object.entries($l).map(([l,c])=>({value:l,label:m(c)}))]);let r=null;Ge([a,i],()=>{clearTimeout(r),r=setTimeout(u,250)}),bn(()=>clearTimeout(r));async function u(){n.value=!0,s.value="";try{const l=await hb({q:a.value.trim()||null,area:i.value||null,kind:e()});t.value=l.items||[]}catch(l){s.value=ja(l)}finally{n.value=!1}}return{items:t,loading:n,loadError:s,query:a,areaFilter:i,areaOptions:o,load:u}}const aM={class:"catalog-panel"},iM={class:"catalog-header"},oM={class:"catalog-title"},rM={class:"catalog-hint"},lM=["aria-label"],cM={class:"catalog-list-head"},uM={class:"catalog-filters"},dM={key:0,class:"catalog-count"},fM={class:"catalog-list"},pM={key:0,class:"catalog-loading"},gM={key:1,class:"catalog-empty"},mM=["onClick"],hM={class:"catalog-row-main"},vM={class:"catalog-row-head"},bM={class:"catalog-row-name"},_M={class:"catalog-row-version"},yM={class:"catalog-row-meta"},kM={key:0,class:"catalog-row-description"},wM={class:"catalog-pane catalog-detail"},SM={class:"catalog-detail-head"},EM={class:"catalog-detail-title"},TM={key:0,class:"catalog-detail-version"},AM={class:"catalog-detail-body"},xM={class:"catalog-editor-actions"},NM={key:0,class:"catalog-visibility"},CM={class:"catalog-editor-buttons"},RM={class:"catalog-detail-head"},IM={class:"catalog-detail-title"},OM={class:"catalog-detail-version"},MM={class:"catalog-detail-actions"},LM={class:"catalog-detail-body"},$M={key:0,class:"catalog-description"},DM={class:"catalog-meta"},PM={key:0,class:"catalog-readonly"},BM={key:1},FM={key:2,class:"catalog-tags"},UM={class:"catalog-raw"},GM={class:"catalog-history"},HM={key:0,class:"catalog-history-list"},zM={key:0,class:"catalog-history-empty"},KM={class:"catalog-history-meta"},qM={class:"catalog-history-text"},VM={key:2,class:"catalog-detail-body catalog-detail-loading"},WM={key:3,class:"catalog-detail-body"},YM={class:"catalog-placeholder"},jM={__name:"SkillsCatalogPanel",props:{kind:{type:String,default:"skill",validator:e=>e==="skill"||e==="protocol"}},setup(e){const t=e,n=()=>t.kind,{items:s,loading:a,loadError:i,query:o,areaFilter:r,areaOptions:u,load:l}=sM({getKind:n}),{title:c,hint:f,addLabel:p,emptyLabel:b,countLabel:_,newTitle:k}=nM({getKind:n,items:s}),{authStore:L,entry:R,selectedId:x,detailLoading:S,editing:I,draft:O,visibility:P,saving:M,saveError:$,versions:v,showHistory:E,detailOpen:C,canEdit:A,visibilityOptions:B,select:z,startCreate:K,beginEdit:j,cancel:Q,reset:ce,save:Be,remove:Xe,toggleHistory:De,formatWhen:J}=tM({getKind:n,reload:l,loadError:i});return Ge(()=>t.kind,()=>{ce(),l()}),$t(l),(le,_e)=>{var Me;return h(),w("div",aM,[g("header",iM,[g("h2",oM,y(d(c)),1),g("p",rM,y(d(f)),1)]),d(i)?(h(),ke(d(Vn),{key:0,variant:"error",class:"catalog-alert"},{default:ge(()=>[ae(y(d(i)),1)]),_:1})):V("",!0),g("div",{class:Ce(["catalog-layout",{"is-detail-open":d(C)}])},[g("aside",{class:"catalog-pane catalog-list-pane","aria-label":d(m)("settings.skillsCatalog")},[g("div",cM,[ee(d(Kp),{modelValue:d(o),"onUpdate:modelValue":_e[0]||(_e[0]=Z=>vt(o)?o.value=Z:null),placeholder:d(m)("settings.skillsSearchHint"),"aria-label":d(m)("settings.skillsSearchLabel")},null,8,["modelValue","placeholder","aria-label"]),g("div",uM,[ee(d(co),{modelValue:d(r),"onUpdate:modelValue":_e[1]||(_e[1]=Z=>vt(r)?r.value=Z:null),class:"catalog-area","aria-label":d(m)("settings.skillsFilterArea"),options:d(u)},null,8,["modelValue","aria-label","options"]),ee(d(ot),{variant:"primary",size:"sm",icon:"ph ph-plus",class:"catalog-add",onClick:d(K)},{default:ge(()=>[ae(y(d(p)),1)]),_:1},8,["onClick"])]),d(a)?V("",!0):(h(),w("p",dM,y(d(_)),1))]),g("div",fM,[d(a)?(h(),w("div",pM,[ee(d(Js),{circle:"",label:d(m)("settings.skillsLoading")},null,8,["label"])])):d(s).length?V("",!0):(h(),w("div",gM,[_e[6]||(_e[6]=g("i",{class:"ph ph-notebook","aria-hidden":"true"},null,-1)),g("p",null,y(d(b)),1)])),(h(!0),w(fe,null,tt(d(s),Z=>(h(),w("button",{key:Z.id,type:"button",class:Ce(["catalog-row",{"is-active":Z.id===d(x)}]),onClick:we=>d(z)(Z.id)},[g("span",hM,[g("span",vM,[g("span",bM,y(Z.name),1),g("span",_M,"v"+y(Z.version),1)]),g("span",yM,[ae(y(d(Fd)(Z.area))+" ",1),Z.visibility==="shared"?(h(),w(fe,{key:0},[ae(" · "+y(d(m)("settings.skillsShared")),1)],64)):V("",!0)]),Z.description?(h(),w("span",kM,y(Z.description),1)):V("",!0)]),_e[7]||(_e[7]=g("i",{class:"ph ph-caret-right catalog-row-open","aria-hidden":"true"},null,-1))],10,mM))),128))])],8,lM),g("section",wM,[g("button",{type:"button",class:"catalog-back",onClick:_e[2]||(_e[2]=(...Z)=>d(ce)&&d(ce)(...Z))},[_e[8]||(_e[8]=g("i",{class:"ph ph-arrow-left","aria-hidden":"true"},null,-1)),g("span",null,y(d(m)("settings.skillsBack")),1)]),d(I)?(h(),w(fe,{key:0},[g("header",SM,[g("div",EM,[g("h3",null,y(d(R)?d(R).name:d(k)),1),d(R)?(h(),w("span",TM,"v"+y(d(R).version),1)):V("",!0)])]),g("div",AM,[d($)?(h(),ke(d(Vn),{key:0,variant:"error",class:"catalog-save-error"},{default:ge(()=>[ae(y(d($)),1)]),_:1})):V("",!0),ee(d(ic),{modelValue:d(O),"onUpdate:modelValue":_e[3]||(_e[3]=Z=>vt(O)?O.value=Z:null),class:"catalog-textarea",rows:18,disabled:!d(A)||d(M),placeholder:d(m)("settings.skillsEditorPlaceholder"),"aria-label":d(m)("settings.skillsEditorLabel")},null,8,["modelValue","disabled","placeholder","aria-label"]),g("div",xM,[d(L).isAdmin&&d(A)?(h(),w("div",NM,[ee(d(co),{modelValue:d(P),"onUpdate:modelValue":_e[4]||(_e[4]=Z=>vt(P)?P.value=Z:null),"aria-label":d(m)("settings.skillsVisibility"),options:d(B)},null,8,["modelValue","aria-label","options"])])):V("",!0),g("div",CM,[ee(d(ot),{variant:"primary",disabled:!d(A)||d(M)||!d(O).trim(),onClick:d(Be)},{default:ge(()=>[ae(y(d(m)("common.save")),1)]),_:1},8,["disabled","onClick"]),ee(d(ot),{variant:"ghost",disabled:d(M),onClick:d(Q)},{default:ge(()=>[ae(y(d(m)("common.cancel")),1)]),_:1},8,["disabled","onClick"]),d(R)&&d(R).can_edit?(h(),ke(d(ot),{key:0,variant:"ghost",icon:"ph ph-trash",disabled:d(M),onClick:d(Xe)},{default:ge(()=>[ae(y(d(m)("common.delete")),1)]),_:1},8,["disabled","onClick"])):V("",!0)])])])],64)):d(R)?(h(),w(fe,{key:1},[g("header",RM,[g("div",IM,[g("h3",null,y(d(R).name),1),g("span",OM,"v"+y(d(R).version),1)]),g("div",MM,[d(R).can_edit?(h(),ke(d(ot),{key:0,variant:"secondary",size:"sm",icon:"ph ph-pencil-simple",class:"catalog-edit-btn",onClick:d(j)},{default:ge(()=>[ae(y(d(m)("settings.skillsEdit")),1)]),_:1},8,["onClick"])):V("",!0),d(R).can_edit?(h(),ke(d(Kn),{key:1,icon:"ph ph-trash",label:d(m)("common.delete"),size:"sm",class:"catalog-delete-btn",onClick:d(Xe)},null,8,["label","onClick"])):V("",!0)])]),g("div",LM,[d(R).description?(h(),w("p",$M,y(d(R).description),1)):V("",!0),g("div",DM,[g("span",null,y(d(Fd)(d(R).area)),1),g("span",null,y(d(R).visibility==="shared"?d(m)("settings.skillsShared"):d(m)("settings.skillsPersonal")),1),d(R).can_edit?V("",!0):(h(),w("span",PM,y(d(m)("settings.skillsReadOnly")),1)),d(R).updated_at?(h(),w("span",BM,y(d(m)("settings.skillsUpdated",{when:d(J)(d(R).updated_at)})),1)):V("",!0),(Me=d(R).tags)!=null&&Me.length?(h(),w("span",FM,[_e[9]||(_e[9]=g("i",{class:"ph ph-tag","aria-hidden":"true"},null,-1)),ae(" "+y(d(R).tags.join(", ")),1)])):V("",!0)]),d(R).document?(h(),ke(Rg,{key:1,doc:d(R).document,class:"catalog-document"},null,8,["doc"])):(h(),w(fe,{key:2},[ee(d(Vn),{variant:"warning",class:"catalog-parse-error"},{default:ge(()=>[ae(y(d(m)("settings.skillsParseFailed")),1)]),_:1}),g("pre",UM,y(d(R).content),1)],64)),g("div",GM,[g("button",{type:"button",class:"catalog-history-toggle",onClick:_e[5]||(_e[5]=(...Z)=>d(De)&&d(De)(...Z))},[g("i",{class:Ce(["ph",d(E)?"ph-caret-down":"ph-caret-right"]),"aria-hidden":"true"},null,2),ae(" "+y(d(m)("settings.skillsHistory")),1)]),d(E)?(h(),w("div",HM,[d(v).length?V("",!0):(h(),w("div",zM,y(d(m)("settings.skillsHistoryEmpty")),1)),(h(!0),w(fe,null,tt(d(v),Z=>(h(),w("div",{key:Z.version,class:"catalog-history-item"},[g("div",KM,[ae(" v"+y(Z.version)+" · "+y(Z.edited_by||d(m)("settings.skillsUnknownEditor"))+" · "+y(d(J)(Z.created_at))+" ",1),Z.reason?(h(),w(fe,{key:0},[ae(" · "+y(Z.reason),1)],64)):V("",!0)]),g("pre",qM,y(Z.content),1)]))),128))])):V("",!0)])])],64)):d(S)?(h(),w("div",VM,[ee(d(Js),{circle:"",label:d(m)("settings.skillsLoading")},null,8,["label"])])):(h(),w("div",WM,[g("div",YM,[_e[10]||(_e[10]=g("i",{class:"ph ph-notebook","aria-hidden":"true"},null,-1)),g("p",null,y(d(m)("settings.skillsPlaceholder")),1)])]))])],2)])}}},Ud=Ye(jM,[["__scopeId","data-v-70dfa94e"]]),ZM=Es("mcpKeys",()=>{const e=F([]),t=F(!1),n=F(null);async function s(){t.value=!0;try{const o=await cb();e.value=o.items||[]}finally{t.value=!1}}async function a(o,r){n.value=o;try{const u=await ub(o,r),l=e.value.find(c=>c.server_name===o);l&&(l.has_key=!0,l.updated_at=u.updated_at)}finally{n.value=null}}async function i(o){n.value=o;try{await db(o);const r=e.value.find(u=>u.server_name===o);r&&(r.has_key=!1,r.updated_at=null)}finally{n.value=null}}return{servers:e,loading:t,savingServer:n,fetchServers:s,saveKey:a,resetKey:i}}),XM={class:"mcp-keys-panel"},QM={class:"mcp-keys-header"},JM={class:"mcp-keys-title"},eL={class:"mcp-keys-description"},tL={key:0,class:"mcp-keys-loading"},nL={key:1,class:"mcp-keys-empty"},sL={key:2,class:"mcp-keys-rows"},aL={class:"mcp-keys-info"},iL={class:"mcp-keys-server"},oL={class:"mcp-keys-where"},rL={key:0,class:"mcp-keys-slot"},lL={key:1,class:"mcp-keys-noslot"},cL={class:"mcp-keys-actions"},uL={__name:"McpKeysPanel",setup(e){const t=ZM(),n=Yn(),s=Na(),a=Mn(),i=js({});$t(()=>{t.fetchServers()});function o(c){return c.key_type==="header"?`${c.key_location} header${c.prefix?` (${c.prefix}…)`:""}`:`${c.key_location} env`}async function r(c){const f=(i[c.server_name]||"").trim();if(f)try{await t.saveKey(c.server_name,f),i[c.server_name]="",a.success({title:m("toast.mcpKeySaved",{server:c.server_name})})}catch(p){a.error({title:m("toast.mcpKeySaveFailed"),text:p.message})}}async function u(c){if(await s(m(n.isAdmin?"confirm.mcpResetAdmin":"confirm.mcpReset",{server:c.server_name})))try{await t.resetKey(c.server_name),i[c.server_name]="",a.success({title:m("toast.mcpKeyReset",{server:c.server_name})})}catch(p){a.error({title:m("toast.mcpKeyResetFailed"),text:p.message})}}function l(c){return new Date(c).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"})}return(c,f)=>(h(),w("div",XM,[g("div",QM,[g("h2",JM,y(d(m)("settings.mcpTitle")),1)]),g("p",eL,[d(n).isAdmin?(h(),w(fe,{key:0},[ae(y(d(m)("settings.mcpDescriptionAdmin")),1)],64)):(h(),w(fe,{key:1},[ae(y(d(m)("settings.mcpDescription"))+" ",1),g("strong",null,y(d(m)("settings.mcpDescriptionStrong")),1),ae(" "+y(d(m)("settings.mcpDescriptionTail")),1)],64))]),d(t).loading?(h(),w("div",tL,[ee(d(Js),{circle:"",label:d(m)("settings.mcpLoading")},null,8,["label"])])):d(t).servers.length?(h(),w("div",sL,[(h(!0),w(fe,null,tt(d(t).servers,p=>(h(),w("div",{key:p.server_name,class:Ce(["mcp-keys-row",{"is-keyless":!p.accepts_user_key}])},[g("div",aL,[g("div",iL,y(p.server_name),1),g("div",oL,[ae(y(p.transport)+" ",1),p.profiles.length?(h(),w(fe,{key:0},[ae(" · "+y(p.profiles.join(", ")),1)],64)):V("",!0)]),p.accepts_user_key?(h(),w("div",rL,[p.has_key?(h(),w(fe,{key:0},[ae(y(d(m)("settings.mcpKeySet",{date:l(p.updated_at),location:o(p)})),1)],64)):d(n).isAdmin?(h(),w(fe,{key:1},[ae(y(d(m)("settings.mcpKeyAbsentAdmin",{location:o(p)})),1)],64)):(h(),w(fe,{key:2},[ae(y(d(m)("settings.mcpKeyAbsent")),1)],64))])):(h(),w("div",lL,y(d(m)("settings.mcpNoSlot")),1))]),p.accepts_user_key?(h(),w(fe,{key:0},[ee(d(Qs),{modelValue:i[p.server_name],"onUpdate:modelValue":b=>i[p.server_name]=b,type:"password",placeholder:d(m)(p.has_key?"settings.mcpKeyPlaceholder":"settings.mcpKeyPlaceholderNew"),class:"mcp-keys-input",onKeyup:Wn(b=>r(p),["enter"])},null,8,["modelValue","onUpdate:modelValue","placeholder","onKeyup"]),g("div",cL,[ee(d(ot),{variant:"primary",size:"sm",disabled:!i[p.server_name]||d(t).savingServer===p.server_name,onClick:b=>r(p)},{default:ge(()=>[ae(y(d(m)("common.save")),1)]),_:1},8,["disabled","onClick"]),p.has_key?(h(),ke(d(ot),{key:0,variant:"ghost",size:"sm",disabled:d(t).savingServer===p.server_name,onClick:b=>u(p)},{default:ge(()=>[ae(y(d(m)("settings.mcpReset")),1)]),_:1},8,["disabled","onClick"])):V("",!0)])],64)):V("",!0)],2))),128))])):(h(),w("div",nL,[f[0]||(f[0]=g("i",{class:"ph ph-plugs-connected empty-icon","aria-hidden":"true"},null,-1)),g("p",null,y(d(m)("settings.mcpEmpty")),1)]))]))}},dL=Ye(uL,[["__scopeId","data-v-057ef768"]]),fL={class:"admin-tools-panel"},pL={class:"admin-tools-header"},gL={class:"admin-tools-title"},mL={class:"admin-tools-description"},hL={class:"admin-tools-line"},vL={class:"admin-tools-total"},bL={key:0,class:"admin-tools-line is-warning"},_L={key:1,class:"admin-tools-line is-error"},yL={key:2,class:"admin-tools-line"},kL={__name:"AdminToolsPanel",setup(e){const t=Mn(),n=F(!1),s=F(null);async function a(){n.value=!0;try{s.value=await fb(),s.value.ok?t.success({title:m("toast.toolsReloaded",{n:s.value.tools.length})}):t.error({title:m("toast.toolsReloadErrors")})}catch(i){t.error({title:m("toast.toolsReloadFailed"),text:i.message})}finally{n.value=!1}}return(i,o)=>(h(),w("div",fL,[g("div",pL,[g("h2",gL,y(d(m)("settings.adminToolsTitle")),1),ee(d(ot),{variant:"primary",size:"sm",loading:n.value,onClick:a},{default:ge(()=>[ae(y(d(m)(n.value?"settings.adminToolsReloading":"settings.adminToolsReload")),1)]),_:1},8,["loading"])]),g("p",mL,[ae(y(d(m)("settings.adminToolsDescriptionBefore"))+" ",1),o[0]||(o[0]=g("code",null,"tools/",-1)),ae(" "+y(d(m)("settings.adminToolsDescriptionAfter")),1)]),s.value?(h(),w("div",{key:0,class:Ce(["admin-tools-report",{"has-problems":!s.value.ok}])},[g("div",hL,[o[1]||(o[1]=g("i",{class:"ph ph-check-circle","aria-hidden":"true"},null,-1)),g("span",null,[ae(y(d(m)("settings.adminToolsLoaded",{n:s.value.tools.length}))+" ",1),s.value.tools.length?(h(),w(fe,{key:0},[ae(" — "+y(s.value.tools.join(", ")),1)],64)):V("",!0),g("span",vL,y(d(m)("settings.adminToolsRegistry",{n:s.value.total_tools})),1)])]),s.value.missing_enabled.length?(h(),w("div",bL,[o[3]||(o[3]=g("i",{class:"ph ph-warning","aria-hidden":"true"},null,-1)),g("span",null,[o[2]||(o[2]=g("code",null,"enabled.json",-1)),ae(" "+y(d(m)("settings.adminToolsMissing",{names:s.value.missing_enabled.join(", ")})),1)])])):V("",!0),(h(!0),w(fe,null,tt(s.value.tool_errors,(r,u)=>(h(),w("div",{key:u,class:"admin-tools-line is-error"},[o[4]||(o[4]=g("i",{class:"ph ph-x-circle","aria-hidden":"true"},null,-1)),g("span",null,[g("code",null,y(u),1),ae(": "+y(r),1)])]))),128)),s.value.mcp_error?(h(),w("div",_L,[o[5]||(o[5]=g("i",{class:"ph ph-x-circle","aria-hidden":"true"},null,-1)),g("span",null,y(d(m)("settings.adminToolsMcpFailed",{error:s.value.mcp_error})),1)])):(h(),w("div",yL,[o[6]||(o[6]=g("i",{class:"ph ph-plugs-connected","aria-hidden":"true"},null,-1)),g("span",null,y(d(m)("settings.adminToolsMcpTools",{n:s.value.mcp_tools.length}))+" — "+y(d(m)("settings.adminToolsProviders",{n:s.value.providers.length})),1)]))],2)):V("",!0)]))}},wL=Ye(kL,[["__scopeId","data-v-07c32b63"]]);function SL(){var e,t,n;return typeof window>"u"?!1:(t=(e=window.matchMedia)==null?void 0:e.call(window,"(display-mode: standalone)"))!=null&&t.matches?!0:((n=window.navigator)==null?void 0:n.standalone)===!0}const EL=typeof navigator<"u"&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1),ri=F(null),mo=F(SL());var Gd,Gi,Hd;typeof window<"u"&&(window.addEventListener("beforeinstallprompt",e=>{e.preventDefault(),ri.value=e}),window.addEventListener("appinstalled",()=>{ri.value=null,mo.value=!0}),(Hd=(Gi=(Gd=window.matchMedia)==null?void 0:Gd.call(window,"(display-mode: standalone)"))==null?void 0:Gi.addEventListener)==null||Hd.call(Gi,"change",e=>{mo.value=e.matches}));function TL(){const e=W(()=>Jl()?"android-app":mo.value?"installed":ri.value?"prompt":"manual");async function t(){const n=ri.value;if(!n)return null;n.prompt();const s=await n.userChoice;return ri.value=null,(s==null?void 0:s.outcome)==="accepted"&&(mo.value=!0),(s==null?void 0:s.outcome)??null}return{state:e,install:t,isIos:EL}}const AL={class:"app-panel"},xL={class:"app-title"},NL={class:"app-description"},CL={class:"app-card"},RL={class:"app-card-title"},IL={class:"app-text"},OL={key:2,class:"app-action"},ML={class:"app-hint"},LL={key:3,class:"app-steps"},$L={key:0},DL={key:1},PL={key:2},BL={class:"app-card"},FL={class:"app-card-title"},UL={class:"app-text"},GL={key:0,class:"app-hint"},HL={class:"app-meta"},zL={class:"app-meta-sha"},KL={class:"app-steps app-steps-install"},qL={__name:"AppPanel",setup(e){const{state:t,install:n,isIos:s}=TL(),a=F(!1),i=F(null),o=window.location.origin,r=W(()=>i.value?`${(i.value.size/1048576).toFixed(1)} MB`:""),u=W(()=>i.value?new Date(i.value.builtAt).toLocaleDateString(Lt.value,{day:"numeric",month:"short",year:"numeric"}):"");$t(async()=>{try{const f=await fetch("/download/navi-android.json");f.ok&&(i.value=await f.json())}catch{}});async function l(){a.value=!0;try{await n()}finally{a.value=!1}}function c(){window.location.assign("/download/navi-android.apk?download=1")}return(f,p)=>(h(),w("div",AL,[g("h2",xL,y(d(m)("settings.appTitle")),1),g("p",NL,y(d(m)("settings.appDescription")),1),g("section",CL,[g("h3",RL,[p[0]||(p[0]=g("i",{class:"ph ph-app-window"},null,-1)),g("span",null,y(d(m)("settings.appInstallTitle")),1)]),g("p",IL,y(d(m)("settings.appInstallText")),1),d(t)==="android-app"?(h(),ke(d(Vn),{key:0,variant:"info",class:"app-alert"},{default:ge(()=>[p[1]||(p[1]=g("i",{class:"ph ph-info"},null,-1)),g("span",null,y(d(m)("settings.appAndroidAlert")),1)]),_:1})):d(t)==="installed"?(h(),ke(d(Vn),{key:1,variant:"success",class:"app-alert"},{default:ge(()=>[p[2]||(p[2]=g("i",{class:"ph ph-check-circle"},null,-1)),g("span",null,y(d(m)("settings.appInstalledAlert")),1)]),_:1})):d(t)==="prompt"?(h(),w("div",OL,[ee(d(ot),{variant:"primary",icon:"ph ph-download-simple",loading:a.value,onClick:l},{default:ge(()=>[ae(y(d(m)("settings.appInstallAction")),1)]),_:1},8,["loading"]),g("span",ML,y(d(m)("settings.appInstallHint")),1)])):(h(),w("ol",LL,[d(s)?(h(),w("li",$L,[g("b",null,y(d(m)("settings.appBrowserSafari")),1),ae(" "+y(d(m)("settings.appIosTap"))+" ",1),p[3]||(p[3]=g("i",{class:"ph ph-export"},null,-1)),ae(" "+y(d(m)("settings.appIosShare"))+" ",1),g("b",null,y(d(m)("settings.appIosAddHome")),1),ae(". "+y(d(m)("settings.appIosNote")),1)])):(h(),w("li",DL,[g("b",null,y(d(m)("settings.appBrowserChrome")),1),ae(" "+y(d(m)("settings.appChromeClick"))+" ",1),p[4]||(p[4]=g("i",{class:"ph ph-dots-three-vertical"},null,-1)),ae(" "+y(d(m)("settings.appChromeMenu"))+" ",1),g("b",null,y(d(m)("settings.appChromeInstall")),1),p[5]||(p[5]=ae(". ",-1))])),d(s)?V("",!0):(h(),w("li",PL,[g("b",null,y(d(m)("settings.appBrowserAndroid")),1),ae(" "+y(d(m)("settings.appAndroidOpen"))+" ",1),p[6]||(p[6]=g("i",{class:"ph ph-dots-three-vertical"},null,-1)),ae(" "+y(d(m)("settings.appAndroidMenu"))+" ",1),g("b",null,y(d(m)("settings.appAndroidInstall")),1),ae(" "+y(d(m)("settings.appAndroidAlso")),1)])),g("li",null,[ae(y(d(m)("settings.appHttpsBefore"))+" ",1),p[7]||(p[7]=g("code",null,"http://",-1)),ae(" "+y(d(m)("settings.appHttpsAfter")),1)])]))]),g("section",BL,[g("h3",FL,[p[8]||(p[8]=g("i",{class:"ph ph-android-logo"},null,-1)),g("span",null,y(d(m)("settings.appAndroidTitle")),1)]),g("p",UL,y(d(m)("settings.appAndroidText")),1),i.value?(h(),w(fe,{key:1},[g("dl",HL,[g("div",null,[g("dt",null,y(d(m)("settings.appVersion")),1),g("dd",null,y(i.value.versionName),1)]),g("div",null,[g("dt",null,y(d(m)("settings.appSize")),1),g("dd",null,y(r.value),1)]),g("div",null,[g("dt",null,y(d(m)("settings.appBuilt")),1),g("dd",null,y(u.value),1)]),g("div",zL,[p[11]||(p[11]=g("dt",null,"SHA-256",-1)),g("dd",null,[g("code",null,y(i.value.sha256),1)])])]),ee(d(ot),{variant:"primary",icon:"ph ph-android-logo",onClick:c},{default:ge(()=>[ae(y(d(m)("settings.appDownloadApk")),1)]),_:1}),g("ol",KL,[g("li",null,y(d(m)("settings.appAndroidStep1")),1),g("li",null,[ae(y(d(m)("settings.appAndroidStep2"))+" ",1),g("code",null,y(d(o)),1),ae(y(d(m)("settings.appAndroidStep2Tail")),1)]),g("li",null,y(d(m)("settings.appAndroidStep3")),1)])],64)):(h(),w("p",GL,[ae(y(d(m)("settings.appApkMissing"))+" ",1),p[9]||(p[9]=g("code",null,"android-client/tools/publish-apk.sh",-1)),p[10]||(p[10]=ae(". ",-1))]))])]))}},VL=Ye(qL,[["__scopeId","data-v-15c4797f"]]),WL={class:"settings-view"},YL={class:"chat-header"},jL={class:"chat-header-info"},ZL={class:"chat-header-title"},XL={__name:"SettingsView",emits:["toggle-sidebar"],setup(e,{emit:t}){const n=t,s=Yn(),a=["app","account","notifications","synapse","skills","protocols","mcp"],i=W(()=>[{id:"app",label:m("settings.tabApp"),icon:"ph ph-device-mobile"},{id:"account",label:m("settings.tabAccount"),icon:"ph ph-user-circle"},{id:"notifications",label:m("settings.tabNotifications"),icon:"ph ph-bell"},{id:"synapse",label:m("settings.tabSynapse"),icon:"ph ph-network"},{id:"skills",label:m("settings.tabSkills"),icon:"ph ph-notebook"},{id:"protocols",label:m("settings.tabProtocols"),icon:"ph ph-list-checks"},{id:"mcp",label:m("settings.tabMcp"),icon:"ph ph-plugs-connected"}]),o=a[0],r=new Set(a);function u(p){const b=_u(p);return b&&r.has(b)?b:o}const l=F(u(location.hash)),c=F(null);Ge(l,p=>{history.replaceState(history.state,"",yu(p)),xt(()=>{var k,L;const b=(k=c.value)==null?void 0:k.$el,_=(L=b==null?void 0:b.querySelector)==null?void 0:L.call(b,'[role="tab"][aria-selected="true"]');_==null||_.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})})});function f(){Vi(location.hash)&&(l.value=u(location.hash))}return $t(()=>{window.addEventListener("hashchange",f),_u(location.hash)!==l.value&&history.replaceState(history.state,"",yu(l.value))}),Nn(()=>{window.removeEventListener("hashchange",f)}),(p,b)=>(h(),w("div",WL,[g("div",YL,[ee(d(Kn),{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"btn-sidebar-toggle",onClick:b[0]||(b[0]=_=>n("toggle-sidebar"))},null,8,["label"]),g("div",jL,[g("span",ZL,y(d(m)("settings.title")),1)])]),ee(d(ac),{ref_key:"tabsRoot",ref:c,modelValue:l.value,"onUpdate:modelValue":b[1]||(b[1]=_=>l.value=_),items:i.value,class:"settings-tabs",ariaLabel:d(m)("settings.sectionsLabel")},{app:ge(()=>[l.value==="app"?(h(),ke(VL,{key:0})):V("",!0)]),account:ge(()=>[l.value==="account"?(h(),ke(eO,{key:0})):V("",!0)]),notifications:ge(()=>[l.value==="notifications"?(h(),ke(cO,{key:0})):V("",!0)]),synapse:ge(()=>[l.value==="synapse"?(h(),ke(GO,{key:0})):V("",!0),l.value==="synapse"?(h(),ke(JO,{key:1})):V("",!0)]),skills:ge(()=>[l.value==="skills"?(h(),ke(Ud,{key:0,kind:"skill"})):V("",!0)]),protocols:ge(()=>[l.value==="protocols"?(h(),ke(Ud,{key:0,kind:"protocol"})):V("",!0)]),mcp:ge(()=>[l.value==="mcp"?(h(),ke(dL,{key:0})):V("",!0),l.value==="mcp"&&d(s).isAdmin?(h(),ke(wL,{key:1})):V("",!0)]),_:1},8,["modelValue","items","ariaLabel"])]))}},QL=Ye(XL,[["__scopeId","data-v-0ea8be77"]]),JL={class:"shared-shell"},e$={class:"shared-header"},t$={class:"shared-heading"},n$={class:"shared-title"},s$={class:"shared-meta"},a$={key:0,class:"shared-profile"},i$={key:1,class:"shared-date"},o$={class:"shared-badge"},r$={key:0,class:"shared-loading"},l$={key:1,class:"shared-error"},c$={class:"shared-error-title"},u$={class:"shared-error-text"},d$=["disabled"],f$={key:1,class:"shared-empty"},p$={key:3,class:"shared-footer"},g$={__name:"SharedChatView",props:{token:{type:String,required:!0}},setup(e){const t=e,n=Gt(),s=F([]),a=F(null),i=F(!0),o=F(!1),r=F(!1),u=F(null),l=F(!1),c=F(null),f=W(()=>{var I;return((I=a.value)==null?void 0:I.name)||m("share.untitled")}),p=W(()=>{var O;const I=(O=a.value)==null?void 0:O.created_at;if(!I)return"";try{return new Intl.DateTimeFormat(Lt.value,{dateStyle:"medium"}).format(new Date(I))}catch{return""}});function b(I){var O;return(O=I.tools)!=null&&O.length?{...I,tools:I.tools.filter(P=>P.kind!=="ui_component")}:I}const _=W(()=>n.buildMessageList(s.value).map(b));function k(I){return I.role==="user"?pg:I.type==="summary"?Mg:I.type==="compression_notice"||I.type==="compression_pending"?Lg:I.type==="synapse_event"?$g:I.type==="error"?Dg:Og}function L(){const I=c.value;I&&(I.scrollTop=I.scrollHeight)}async function R(){i.value=!0,o.value=!1;try{const I=await Wv(t.token);a.value=I,s.value=I.messages??[],r.value=!!I.has_more,u.value=I.next_before_seq??null,document.title=I.name||"Navi",await xt(),L()}catch{o.value=!0}finally{i.value=!1}}async function x(){if(!r.value||l.value)return;l.value=!0;const I=c.value,O=(I==null?void 0:I.scrollHeight)??0;try{const P=await Yv(t.token,u.value);s.value=[...P.messages??[],...s.value],r.value=!!P.has_more,u.value=P.next_before_seq??null,await xt(),I&&(I.scrollTop+=I.scrollHeight-O)}catch{}finally{l.value=!1}}function S(){const I=c.value;I&&I.scrollTop<120&&r.value&&!l.value&&x()}return $t(R),(I,O)=>{var P;return h(),w("div",JL,[g("header",e$,[g("div",t$,[g("h1",n$,y(f.value),1),g("div",s$,[(P=a.value)!=null&&P.profile_name?(h(),w("span",a$,y(a.value.profile_name),1)):V("",!0),a.value?(h(),w("span",i$,y(p.value),1)):V("",!0),g("span",o$,[O[0]||(O[0]=g("i",{class:"ph ph-eye"},null,-1)),ae(" "+y(d(m)("share.readOnly")),1)])])]),O[1]||(O[1]=g("span",{class:"shared-brand"},"Navi",-1))]),i.value?(h(),w("div",r$,[...O[2]||(O[2]=[g("i",{class:"ph ph-spinner animate-spin"},null,-1)])])):o.value?(h(),w("div",l$,[O[3]||(O[3]=g("i",{class:"ph ph-link-break"},null,-1)),g("p",c$,y(d(m)("share.notFoundTitle")),1),g("p",u$,y(d(m)("share.notFoundText")),1)])):(h(),w("div",{key:2,ref_key:"scroller",ref:c,class:"shared-scroller",onScrollPassive:S},[r.value?(h(),w("button",{key:0,type:"button",class:"shared-load-older",disabled:l.value,onClick:x},[g("i",{class:Ce(l.value?"ph ph-spinner animate-spin":"ph ph-caret-up")},null,2),ae(" "+y(d(m)("share.loadOlder")),1)],8,d$)):V("",!0),(h(!0),w(fe,null,tt(_.value,M=>(h(),w("div",{key:M.id,class:"shared-row"},[(h(),ke(eo(k(M)),{msg:M,readonly:""},null,8,["msg"]))]))),128)),_.value.length?V("",!0):(h(),w("p",f$,y(d(m)("share.empty")),1))],544)),!i.value&&!o.value?(h(),w("footer",p$,y(d(m)("share.footer")),1)):V("",!0)])}}},m$=Ye(g$,[["__scopeId","data-v-bab2a59b"]]),h$={key:0,class:"app-shell"},v$={key:1,class:"app-shell"},b$={class:"app-main"},_$={key:0,class:"load-error-banner",role:"alert"},y$={class:"load-error-text"},k$=["title","aria-label"],w$={__name:"App",setup(e){const t=xn(),n=Si(),s=Gt(),a=Yn(),{visible:i,busy:o,title:r,text:u,acceptText:l,dismissText:c,maybeShow:f,accept:p,decline:b}=e_(),_=F(!1),k=F(!1),L=F(Di(location.hash));function R(){const B=location.hash;return Di(B)?"share":Vi(B)?"settings":"chat"}const x=F(R()),S=W(()=>x.value==="chat"&&!s.currentId&&!s.loading),I=W(()=>{var z;if(x.value==="share")return null;if(x.value==="settings")return m("app.titleSettings");if(!s.currentId)return"Navi";const B=s.currentId;return t.nameById[B]||((z=t.sessions.find(K=>K.session_id===B))==null?void 0:z.name)||B.slice(0,8)});Ge(I,B=>{B&&(document.title=B)},{immediate:!0});function O(){_.value=!1}function P(){k.value=!1}function M(){const B=!_.value;B&&(k.value=!1),_.value=B}function $(){const B=!k.value;B&&(_.value=!1),k.value=B}function v(){const B=s.loadErrorSessionId;B&&s.loadSession(B)}let E=!1;async function C({loadHash:B=!0}={}){if(!E){if(E=!0,await a.fetchStatus(),a.authConfigured)try{await a.fetchMe()}catch{}if(oo(a.user?a.user.locale_effective:hu()),!a.authConfigured||a.isAuthenticated)try{await n.fetchProfiles(),await t.fetchSessions(n.selectedProfileId)}catch{}if(B&&location.hash&&!Vi(location.hash)&&!Di(location.hash)){const z=location.hash.slice(1);z&&s.loadSession(z)}(!a.authConfigured||a.isAuthenticated)&&await f()}}function A(){const B=x.value==="share";if(L.value=Di(location.hash),x.value=R(),L.value){_.value=!1,k.value=!1;return}B&&C({loadHash:!1});const z=location.hash;if(Vi(z))return;const K=z.slice(1);K&&K!==s.currentId&&s.loadSession(K)}return $t(async()=>{if(window.addEventListener("hashchange",A),L.value){oo(hu());return}await C()}),Nn(()=>{window.removeEventListener("hashchange",A)}),(B,z)=>{const K=et("GnToastProvider");return h(),ke(K,null,{default:ge(()=>[L.value?(h(),w("div",h$,[(h(),ke(m$,{key:L.value,token:L.value},null,8,["token"]))])):(h(),w("div",v$,[_.value?(h(),w("div",{key:0,class:"sidebar-backdrop",onClick:O})):V("",!0),ee(Xs,{name:"backdrop-fade"},{default:ge(()=>[k.value?(h(),w("div",{key:0,class:"artifacts-backdrop",onClick:P})):V("",!0)]),_:1}),ee(q_,{"mobile-open":_.value,class:Ce({"is-hidden-by-artifacts":k.value}),onClose:O},null,8,["mobile-open","class"]),ee(Ip),ee(Jp),ee(tg),ee(ig),g("div",b$,[ee(ag,{open:d(i)&&x.value!=="settings",busy:d(o),title:d(r),text:d(u),"accept-text":d(l),"dismiss-text":d(c),onAccept:d(p),onDismiss:d(b)},null,8,["open","busy","title","text","accept-text","dismiss-text","onAccept","onDismiss"]),d(s).loadError?(h(),w("div",_$,[z[2]||(z[2]=g("i",{class:"ph ph-warning-circle"},null,-1)),g("span",y$,y(d(s).loadError),1),d(s).loadErrorSessionId?(h(),w("button",{key:0,class:"load-error-retry",onClick:v},y(d(m)("chat.retry")),1)):V("",!0),g("button",{class:"load-error-dismiss",title:d(m)("common.close"),"aria-label":d(m)("common.close"),onClick:z[0]||(z[0]=j=>d(s).dismissLoadError())},[...z[1]||(z[1]=[g("i",{class:"ph ph-x"},null,-1)])],8,k$)])):V("",!0),ee(Xs,{name:"fade",mode:"out-in"},{default:ge(()=>[S.value?(h(),ke(og,{key:"welcome",onToggleSidebar:M})):x.value==="settings"?(h(),ke(QL,{key:"settings",onToggleSidebar:M})):(h(),ke(II,{key:"chat",onToggleSidebar:M,onToggleArtifacts:$}))]),_:1})]),ee(sT,{open:k.value,onClose:P},null,8,["open"]),d(a).authConfigured&&!d(a).isAuthenticated&&!d(a).loading?(h(),ke(sg,{key:1})):V("",!0)]))]),_:1})}}},S$=Ye(w$,[["__scopeId","data-v-189a26a8"]]),yc=kv(S$);yc.use(Ev());yc.use(Gy);yc.mount("#app");"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{}); diff --git a/webclient/dist/assets/index-Ceizh7DK.js b/webclient/dist/assets/index-Ceizh7DK.js deleted file mode 100644 index 362db78..0000000 --- a/webclient/dist/assets/index-Ceizh7DK.js +++ /dev/null @@ -1,141 +0,0 @@ -var Bg=Object.defineProperty;var Fg=(e,t,n)=>t in e?Bg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var mt=(e,t,n)=>Fg(e,typeof t!="symbol"?t+"":t,n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))s(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();/** -* @vue/shared v3.5.32 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Dl(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ht={},pa=[],qn=()=>{},zd=()=>!1,ho=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),vo=e=>e.startsWith("onUpdate:"),Ft=Object.assign,Pl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ug=Object.prototype.hasOwnProperty,rt=(e,t)=>Ug.call(e,t),Fe=Array.isArray,ga=e=>_i(e)==="[object Map]",Aa=e=>_i(e)==="[object Set]",wc=e=>_i(e)==="[object Date]",Ye=e=>typeof e=="function",Nt=e=>typeof e=="string",vn=e=>typeof e=="symbol",lt=e=>e!==null&&typeof e=="object",Kd=e=>(lt(e)||Ye(e))&&Ye(e.then)&&Ye(e.catch),qd=Object.prototype.toString,_i=e=>qd.call(e),Gg=e=>_i(e).slice(8,-1),Vd=e=>_i(e)==="[object Object]",bo=e=>Nt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ja=Dl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_o=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Hg=/-\w/g,rn=_o(e=>e.replace(Hg,t=>t.slice(1).toUpperCase())),zg=/\B([A-Z])/g,Ss=_o(e=>e.replace(zg,"-$1").toLowerCase()),yo=_o(e=>e.charAt(0).toUpperCase()+e.slice(1)),Wo=_o(e=>e?`on${yo(e)}`:""),zn=(e,t)=>!Object.is(e,t),Hi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ko=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Kg=e=>{const t=Nt(e)?Number(e):NaN;return isNaN(t)?e:t};let Sc;const wo=()=>Sc||(Sc=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function bs(e){if(Fe(e)){const t={};for(let n=0;n{if(n){const s=n.split(Vg);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ae(e){let t="";if(Nt(e))t=e;else if(Fe(e))for(let n=0;nys(n,t))}const jd=e=>!!(e&&e.__v_isRef===!0),k=e=>Nt(e)?e:e==null?"":Fe(e)||lt(e)&&(e.toString===qd||!Ye(e.toString))?jd(e)?k(e.value):JSON.stringify(e,Zd,2):String(e),Zd=(e,t)=>jd(t)?Zd(e,t.value):ga(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,a],i)=>(n[Yo(s,i)+" =>"]=a,n),{})}:Aa(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Yo(n))}:vn(t)?Yo(t):lt(t)&&!Fe(t)&&!Vd(t)?String(t):t,Yo=(e,t="")=>{var n;return vn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.32 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let jt;class Xd{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=jt,!t&&jt&&(this.index=(jt.scopes||(jt.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(jt=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Xa){let t=Xa;for(Xa=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Za;){let t=Za;for(Za=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function sf(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function af(e){let t,n=e.depsTail,s=n;for(;s;){const a=s.prevDep;s.version===-1?(s===n&&(n=a),Gl(s),Jg(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=a}e.deps=t,e.depsTail=n}function ol(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(of(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function of(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ri)||(e.globalVersion=ri,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ol(e))))return;e.flags|=2;const t=e.dep,n=yt,s=Rn;yt=e,Rn=!0;try{sf(e);const a=e.fn(e._value);(t.version===0||zn(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{yt=n,Rn=s,af(e),e.flags&=-3}}function Gl(e,t=!1){const{dep:n,prevSub:s,nextSub:a}=e;if(s&&(s.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Gl(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Jg(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Rn=!0;const rf=[];function as(){rf.push(Rn),Rn=!1}function is(){const e=rf.pop();Rn=e===void 0?!0:e}function Ec(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=yt;yt=void 0;try{t()}finally{yt=n}}}let ri=0;class em{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Hl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!yt||!Rn||yt===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==yt)n=this.activeLink=new em(yt,this),yt.deps?(n.prevDep=yt.depsTail,yt.depsTail.nextDep=n,yt.depsTail=n):yt.deps=yt.depsTail=n,lf(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=yt.depsTail,n.nextDep=void 0,yt.depsTail.nextDep=n,yt.depsTail=n,yt.deps===n&&(yt.deps=s)}return n}trigger(t){this.version++,ri++,this.notify(t)}notify(t){Fl();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ul()}}}function lf(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)lf(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ji=new WeakMap,qs=Symbol(""),rl=Symbol(""),li=Symbol("");function Zt(e,t,n){if(Rn&&yt){let s=ji.get(e);s||ji.set(e,s=new Map);let a=s.get(n);a||(s.set(n,a=new Hl),a.map=s,a.key=n),a.track()}}function Qn(e,t,n,s,a,i){const o=ji.get(e);if(!o){ri++;return}const r=u=>{u&&u.trigger()};if(Fl(),t==="clear")o.forEach(r);else{const u=Fe(e),l=u&&bo(n);if(u&&n==="length"){const c=Number(s);o.forEach((p,g)=>{(g==="length"||g===li||!vn(g)&&g>=c)&&r(p)})}else switch((n!==void 0||o.has(void 0))&&r(o.get(n)),l&&r(o.get(li)),t){case"add":u?l&&r(o.get("length")):(r(o.get(qs)),ga(e)&&r(o.get(rl)));break;case"delete":u||(r(o.get(qs)),ga(e)&&r(o.get(rl)));break;case"set":ga(e)&&r(o.get(qs));break}}Ul()}function tm(e,t){const n=ji.get(e);return n&&n.get(t)}function la(e){const t=tt(e);return t===e?t:(Zt(t,"iterate",li),hn(e)?t:t.map(In))}function So(e){return Zt(e=tt(e),"iterate",li),e}function Gn(e,t){return os(e)?ka(ss(e)?In(t):t):In(t)}const nm={__proto__:null,[Symbol.iterator](){return Zo(this,Symbol.iterator,e=>Gn(this,e))},concat(...e){return la(this).concat(...e.map(t=>Fe(t)?la(t):t))},entries(){return Zo(this,"entries",e=>(e[1]=Gn(this,e[1]),e))},every(e,t){return jn(this,"every",e,t,void 0,arguments)},filter(e,t){return jn(this,"filter",e,t,n=>n.map(s=>Gn(this,s)),arguments)},find(e,t){return jn(this,"find",e,t,n=>Gn(this,n),arguments)},findIndex(e,t){return jn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return jn(this,"findLast",e,t,n=>Gn(this,n),arguments)},findLastIndex(e,t){return jn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return jn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Xo(this,"includes",e)},indexOf(...e){return Xo(this,"indexOf",e)},join(e){return la(this).join(e)},lastIndexOf(...e){return Xo(this,"lastIndexOf",e)},map(e,t){return jn(this,"map",e,t,void 0,arguments)},pop(){return Da(this,"pop")},push(...e){return Da(this,"push",e)},reduce(e,...t){return Tc(this,"reduce",e,t)},reduceRight(e,...t){return Tc(this,"reduceRight",e,t)},shift(){return Da(this,"shift")},some(e,t){return jn(this,"some",e,t,void 0,arguments)},splice(...e){return Da(this,"splice",e)},toReversed(){return la(this).toReversed()},toSorted(e){return la(this).toSorted(e)},toSpliced(...e){return la(this).toSpliced(...e)},unshift(...e){return Da(this,"unshift",e)},values(){return Zo(this,"values",e=>Gn(this,e))}};function Zo(e,t,n){const s=So(e),a=s[t]();return s!==e&&!hn(e)&&(a._next=a.next,a.next=()=>{const i=a._next();return i.done||(i.value=n(i.value)),i}),a}const sm=Array.prototype;function jn(e,t,n,s,a,i){const o=So(e),r=o!==e&&!hn(e),u=o[t];if(u!==sm[t]){const p=u.apply(e,i);return r?In(p):p}let l=n;o!==e&&(r?l=function(p,g){return n.call(this,Gn(e,p),g,e)}:n.length>2&&(l=function(p,g){return n.call(this,p,g,e)}));const c=u.call(o,l,s);return r&&a?a(c):c}function Tc(e,t,n,s){const a=So(e),i=a!==e&&!hn(e);let o=n,r=!1;a!==e&&(i?(r=s.length===0,o=function(l,c,p){return r&&(r=!1,l=Gn(e,l)),n.call(this,l,Gn(e,c),p,e)}):n.length>3&&(o=function(l,c,p){return n.call(this,l,c,p,e)}));const u=a[t](o,...s);return r?Gn(e,u):u}function Xo(e,t,n){const s=tt(e);Zt(s,"iterate",li);const a=s[t](...n);return(a===-1||a===!1)&&Eo(n[0])?(n[0]=tt(n[0]),s[t](...n)):a}function Da(e,t,n=[]){as(),Fl();const s=tt(e)[t].apply(e,n);return Ul(),is(),s}const am=Dl("__proto__,__v_isRef,__isVue"),cf=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(vn));function im(e){vn(e)||(e=String(e));const t=tt(this);return Zt(t,"has",e),t.hasOwnProperty(e)}class uf{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const a=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(a?i?mm:gf:i?pf:ff).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=Fe(t);if(!a){let u;if(o&&(u=nm[n]))return u;if(n==="hasOwnProperty")return im}const r=Reflect.get(t,n,vt(t)?t:s);if((vn(n)?cf.has(n):am(n))||(a||Zt(t,"get",n),i))return r;if(vt(r)){const u=o&&bo(n)?r:r.value;return a&<(u)?cl(u):u}return lt(r)?a?cl(r):js(r):r}}class df extends uf{constructor(t=!1){super(!1,t)}set(t,n,s,a){let i=t[n];const o=Fe(t)&&bo(n);if(!this._isShallow){const l=os(i);if(!hn(s)&&!os(s)&&(i=tt(i),s=tt(s)),!o&&vt(i)&&!vt(s))return l||(i.value=s),!0}const r=o?Number(n)e,Ni=e=>Reflect.getPrototypeOf(e);function um(e,t,n){return function(...s){const a=this.__v_raw,i=tt(a),o=ga(i),r=e==="entries"||e===Symbol.iterator&&o,u=e==="keys"&&o,l=a[e](...s),c=n?ll:t?ka:In;return!t&&Zt(i,"iterate",u?rl:qs),Ft(Object.create(l),{next(){const{value:p,done:g}=l.next();return g?{value:p,done:g}:{value:r?[c(p[0]),c(p[1])]:c(p),done:g}}})}}function Ci(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function dm(e,t){const n={get(a){const i=this.__v_raw,o=tt(i),r=tt(a);e||(zn(a,r)&&Zt(o,"get",a),Zt(o,"get",r));const{has:u}=Ni(o),l=t?ll:e?ka:In;if(u.call(o,a))return l(i.get(a));if(u.call(o,r))return l(i.get(r));i!==o&&i.get(a)},get size(){const a=this.__v_raw;return!e&&Zt(tt(a),"iterate",qs),a.size},has(a){const i=this.__v_raw,o=tt(i),r=tt(a);return e||(zn(a,r)&&Zt(o,"has",a),Zt(o,"has",r)),a===r?i.has(a):i.has(a)||i.has(r)},forEach(a,i){const o=this,r=o.__v_raw,u=tt(r),l=t?ll:e?ka:In;return!e&&Zt(u,"iterate",qs),r.forEach((c,p)=>a.call(i,l(c),l(p),o))}};return Ft(n,e?{add:Ci("add"),set:Ci("set"),delete:Ci("delete"),clear:Ci("clear")}:{add(a){const i=tt(this),o=Ni(i),r=tt(a),u=!t&&!hn(a)&&!os(a)?r:a;return o.has.call(i,u)||zn(a,u)&&o.has.call(i,a)||zn(r,u)&&o.has.call(i,r)||(i.add(u),Qn(i,"add",u,u)),this},set(a,i){!t&&!hn(i)&&!os(i)&&(i=tt(i));const o=tt(this),{has:r,get:u}=Ni(o);let l=r.call(o,a);l||(a=tt(a),l=r.call(o,a));const c=u.call(o,a);return o.set(a,i),l?zn(i,c)&&Qn(o,"set",a,i):Qn(o,"add",a,i),this},delete(a){const i=tt(this),{has:o,get:r}=Ni(i);let u=o.call(i,a);u||(a=tt(a),u=o.call(i,a)),r&&r.call(i,a);const l=i.delete(a);return u&&Qn(i,"delete",a,void 0),l},clear(){const a=tt(this),i=a.size!==0,o=a.clear();return i&&Qn(a,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(a=>{n[a]=um(a,e,t)}),n}function zl(e,t){const n=dm(e,t);return(s,a,i)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?s:Reflect.get(rt(n,a)&&a in s?n:s,a,i)}const fm={get:zl(!1,!1)},pm={get:zl(!1,!0)},gm={get:zl(!0,!1)};const ff=new WeakMap,pf=new WeakMap,gf=new WeakMap,mm=new WeakMap;function hm(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vm(e){return e.__v_skip||!Object.isExtensible(e)?0:hm(Gg(e))}function js(e){return os(e)?e:Kl(e,!1,rm,fm,ff)}function bm(e){return Kl(e,!1,cm,pm,pf)}function cl(e){return Kl(e,!0,lm,gm,gf)}function Kl(e,t,n,s,a){if(!lt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=vm(e);if(i===0)return e;const o=a.get(e);if(o)return o;const r=new Proxy(e,i===2?s:n);return a.set(e,r),r}function ss(e){return os(e)?ss(e.__v_raw):!!(e&&e.__v_isReactive)}function os(e){return!!(e&&e.__v_isReadonly)}function hn(e){return!!(e&&e.__v_isShallow)}function Eo(e){return e?!!e.__v_raw:!1}function tt(e){const t=e&&e.__v_raw;return t?tt(t):e}function ci(e){return!rt(e,"__v_skip")&&Object.isExtensible(e)&&Wd(e,"__v_skip",!0),e}const In=e=>lt(e)?js(e):e,ka=e=>lt(e)?cl(e):e;function vt(e){return e?e.__v_isRef===!0:!1}function F(e){return hf(e,!1)}function mf(e){return hf(e,!0)}function hf(e,t){return vt(e)?e:new _m(e,t)}class _m{constructor(t,n){this.dep=new Hl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:tt(t),this._value=n?t:In(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||hn(t)||os(t);t=s?t:tt(t),zn(t,n)&&(this._rawValue=t,this._value=s?t:In(t),this.dep.trigger())}}function d(e){return vt(e)?e.value:e}const ym={get:(e,t,n)=>t==="__v_raw"?e:d(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const a=e[t];return vt(a)&&!vt(n)?(a.value=n,!0):Reflect.set(e,t,n,s)}};function vf(e){return ss(e)?e:new Proxy(e,ym)}function km(e){const t=Fe(e)?new Array(e.length):{};for(const n in e)t[n]=Sm(e,n);return t}class wm{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=vn(n)?n:String(n),this._raw=tt(t);let a=!0,i=t;if(!Fe(t)||vn(this._key)||!bo(this._key))do a=!Eo(i)||hn(i);while(a&&(i=i.__v_raw));this._shallow=a}get value(){let t=this._object[this._key];return this._shallow&&(t=d(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&vt(this._raw[this._key])){const n=this._object[this._key];if(vt(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return tm(this._raw,this._key)}}function Sm(e,t,n){return new wm(e,t,n)}class Em{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Hl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ri-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&yt!==this)return nf(this,!0),!0}get value(){const t=this.dep.track();return of(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Tm(e,t,n=!1){let s,a;return Ye(e)?s=e:(s=e.get,a=e.set),new Em(s,a,n)}const Ri={},Zi=new WeakMap;let Fs;function Am(e,t=!1,n=Fs){if(n){let s=Zi.get(n);s||Zi.set(n,s=[]),s.push(e)}}function xm(e,t,n=ht){const{immediate:s,deep:a,once:i,scheduler:o,augmentJob:r,call:u}=n,l=M=>a?M:hn(M)||a===!1||a===0?Jn(M,1):Jn(M);let c,p,g,b,_=!1,y=!1;if(vt(e)?(p=()=>e.value,_=hn(e)):ss(e)?(p=()=>l(e),_=!0):Fe(e)?(y=!0,_=e.some(M=>ss(M)||hn(M)),p=()=>e.map(M=>{if(vt(M))return M.value;if(ss(M))return l(M);if(Ye(M))return u?u(M,2):M()})):Ye(e)?t?p=u?()=>u(e,2):e:p=()=>{if(g){as();try{g()}finally{is()}}const M=Fs;Fs=c;try{return u?u(e,3,[b]):e(b)}finally{Fs=M}}:p=qn,t&&a){const M=p,O=a===!0?1/0:a;p=()=>Jn(M(),O)}const D=Jd(),R=()=>{c.stop(),D&&D.active&&Pl(D.effects,c)};if(i&&t){const M=t;t=(...O)=>{M(...O),R()}}let N=y?new Array(e.length).fill(Ri):Ri;const S=M=>{if(!(!(c.flags&1)||!c.dirty&&!M))if(t){const O=c.run();if(a||_||(y?O.some((B,L)=>zn(B,N[L])):zn(O,N))){g&&g();const B=Fs;Fs=c;try{const L=[O,N===Ri?void 0:y&&N[0]===Ri?[]:N,b];N=O,u?u(t,3,L):t(...L)}finally{Fs=B}}}else c.run()};return r&&r(S),c=new ef(p),c.scheduler=o?()=>o(S,!1):S,b=M=>Am(M,!1,c),g=c.onStop=()=>{const M=Zi.get(c);if(M){if(u)u(M,4);else for(const O of M)O();Zi.delete(c)}},t?s?S(!0):N=c.run():o?o(S.bind(null,!0),!0):c.run(),R.pause=c.pause.bind(c),R.resume=c.resume.bind(c),R.stop=R,R}function Jn(e,t=1/0,n){if(t<=0||!lt(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,vt(e))Jn(e.value,t,n);else if(Fe(e))for(let s=0;s{Jn(s,t,n)});else if(Vd(e)){for(const s in e)Jn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Jn(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.32 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function yi(e,t,n,s){try{return s?e(...s):e()}catch(a){To(a,t,n)}}function On(e,t,n,s){if(Ye(e)){const a=yi(e,t,n,s);return a&&Kd(a)&&a.catch(i=>{To(i,t,n)}),a}if(Fe(e)){const a=[];for(let i=0;i>>1,a=an[s],i=ui(a);i=ui(n)?an.push(e):an.splice(Cm(t),0,e),e.flags|=1,_f()}}function _f(){Xi||(Xi=bf.then(kf))}function Rm(e){Fe(e)?ma.push(...e):vs&&e.id===-1?vs.splice(da+1,0,e):e.flags&1||(ma.push(e),e.flags|=1),_f()}function Ac(e,t,n=Fn+1){for(;nui(n)-ui(s));if(ma.length=0,vs){vs.push(...t);return}for(vs=t,da=0;dae.id==null?e.flags&2?-1:1/0:e.id;function kf(e){try{for(Fn=0;Fn{s._d&&no(-1);const i=Qi(t);let o;try{o=e(...a)}finally{Qi(i),s._d&&no(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Gs(e,t){if(qt===null)return e;const n=Io(qt),s=e.dirs||(e.dirs=[]);for(let a=0;a1)return n&&Ye(t)?t.call(s&&s.proxy):t}}function Im(){return!!(xa()||Vs)}const Om=Symbol.for("v-scx"),Mm=()=>ha(Om);function Lm(e,t){return Vl(e,null,t)}function Ge(e,t,n){return Vl(e,t,n)}function Vl(e,t,n=ht){const{immediate:s,deep:a,flush:i,once:o}=n,r=Ft({},n),u=t&&s||!t&&i!=="post";let l;if(gi){if(i==="sync"){const b=Mm();l=b.__watcherHandles||(b.__watcherHandles=[])}else if(!u){const b=()=>{};return b.stop=qn,b.resume=qn,b.pause=qn,b}}const c=Qt;r.call=(b,_,y)=>On(b,c,_,y);let p=!1;i==="post"?r.scheduler=b=>{sn(b,c&&c.suspense)}:i!=="sync"&&(p=!0,r.scheduler=(b,_)=>{_?b():ql(b)}),r.augmentJob=b=>{t&&(b.flags|=4),p&&(b.flags|=2,c&&(b.id=c.uid,b.i=c))};const g=xm(e,t,r);return gi&&(l?l.push(g):u&&g()),g}function $m(e,t,n){const s=this.proxy,a=Nt(e)?e.includes(".")?Ef(s,e):()=>s[e]:e.bind(s,s);let i;Ye(t)?i=t:(i=t.handler,n=t);const o=ki(this),r=Vl(a,i.bind(s),n);return o(),r}function Ef(e,t){const n=t.split(".");return()=>{let s=e;for(let a=0;ae.__isTeleport,Hs=e=>e&&(e.disabled||e.disabled===""),Dm=e=>e&&(e.defer||e.defer===""),xc=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Nc=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ul=(e,t)=>{const n=e&&e.to;return Nt(n)?t?t(n):null:n},Pm={name:"Teleport",__isTeleport:!0,process(e,t,n,s,a,i,o,r,u,l){const{mc:c,pc:p,pbc:g,o:{insert:b,querySelector:_,createText:y,createComment:D}}=l,R=Hs(t.props);let{dynamicChildren:N}=t;const S=(B,L,$)=>{B.shapeFlag&16&&c(B.children,L,$,a,i,o,r,u)},M=(B=t)=>{const L=Hs(B.props),$=B.target=ul(B.props,_),v=dl($,B,y,b);$&&(o!=="svg"&&xc($)?o="svg":o!=="mathml"&&Nc($)&&(o="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add($),L||(S(B,$,v),qa(B,!1)))},O=B=>{const L=()=>{$s.get(B)===L&&($s.delete(B),Hs(B.props)&&(S(B,n,B.anchor),qa(B,!0)),M(B))};$s.set(B,L),sn(L,i)};if(e==null){const B=t.el=y(""),L=t.anchor=y("");if(b(B,n,s),b(L,n,s),Dm(t.props)||i&&i.pendingBranch){O(t);return}R&&(S(t,n,L),qa(t,!0)),M()}else{t.el=e.el;const B=t.anchor=e.anchor,L=$s.get(e);if(L){L.flags|=8,$s.delete(e),O(t);return}t.targetStart=e.targetStart;const $=t.target=e.target,v=t.targetAnchor=e.targetAnchor,E=Hs(e.props),x=E?n:$,A=E?B:v;if(o==="svg"||xc($)?o="svg":(o==="mathml"||Nc($))&&(o="mathml"),N?(g(e.dynamicChildren,N,x,a,i,o,r),Zl(e,t,!0)):u||p(e,t,x,A,a,i,o,r,!1),R)E?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Ii(t,n,B,l,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const P=t.target=ul(t.props,_);P&&Ii(t,P,null,l,0)}else E&&Ii(t,$,v,l,1);qa(t,R)}},remove(e,t,n,{um:s,o:{remove:a}},i){const{shapeFlag:o,children:r,anchor:u,targetStart:l,targetAnchor:c,target:p,props:g}=e;let b=i||!Hs(g);const _=$s.get(e);if(_&&(_.flags|=8,$s.delete(e),b=!1),p&&(a(l),a(c)),i&&a(u),o&16)for(let y=0;y{e.isMounted=!0}),bn(()=>{e.isUnmounting=!0}),e}const wn=[Function,Array],Nf={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:wn,onEnter:wn,onAfterEnter:wn,onEnterCancelled:wn,onBeforeLeave:wn,onLeave:wn,onAfterLeave:wn,onLeaveCancelled:wn,onBeforeAppear:wn,onAppear:wn,onAfterAppear:wn,onAppearCancelled:wn},Cf=e=>{const t=e.subTree;return t.component?Cf(t.component):t},Fm={name:"BaseTransition",props:Nf,setup(e,{slots:t}){const n=xa(),s=xf();return()=>{const a=t.default&&Wl(t.default(),!0);if(!a||!a.length)return;const i=Rf(a),o=tt(e),{mode:r}=o;if(s.isLeaving)return Qo(i);const u=Cc(i);if(!u)return Qo(i);let l=di(u,o,s,n,p=>l=p);u.type!==Xt&&Zs(u,l);let c=n.subTree&&Cc(n.subTree);if(c&&c.type!==Xt&&!zs(c,u)&&Cf(n).type!==Xt){let p=di(c,o,s,n);if(Zs(c,p),r==="out-in"&&u.type!==Xt)return s.isLeaving=!0,p.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete p.afterLeave,c=void 0},Qo(i);r==="in-out"&&u.type!==Xt?p.delayLeave=(g,b,_)=>{const y=If(s,c);y[String(c.key)]=c,g[Un]=()=>{b(),g[Un]=void 0,delete l.delayedLeave,c=void 0},l.delayedLeave=()=>{_(),delete l.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return i}}};function Rf(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Xt){t=n;break}}return t}const Um=Fm;function If(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function di(e,t,n,s,a){const{appear:i,mode:o,persisted:r=!1,onBeforeEnter:u,onEnter:l,onAfterEnter:c,onEnterCancelled:p,onBeforeLeave:g,onLeave:b,onAfterLeave:_,onLeaveCancelled:y,onBeforeAppear:D,onAppear:R,onAfterAppear:N,onAppearCancelled:S}=t,M=String(e.key),O=If(n,e),B=(v,E)=>{v&&On(v,s,9,E)},L=(v,E)=>{const x=E[1];B(v,E),Fe(v)?v.every(A=>A.length<=1)&&x():v.length<=1&&x()},$={mode:o,persisted:r,beforeEnter(v){let E=u;if(!n.isMounted)if(i)E=D||u;else return;v[Un]&&v[Un](!0);const x=O[M];x&&zs(e,x)&&x.el[Un]&&x.el[Un](),B(E,[v])},enter(v){if(O[M]===e)return;let E=l,x=c,A=p;if(!n.isMounted)if(i)E=R||l,x=N||c,A=S||p;else return;let P=!1;v[Pa]=V=>{P||(P=!0,V?B(A,[v]):B(x,[v]),$.delayedLeave&&$.delayedLeave(),v[Pa]=void 0)};const z=v[Pa].bind(null,!1);E?L(E,[v,z]):z()},leave(v,E){const x=String(e.key);if(v[Pa]&&v[Pa](!0),n.isUnmounting)return E();B(g,[v]);let A=!1;v[Un]=z=>{A||(A=!0,E(),z?B(y,[v]):B(_,[v]),v[Un]=void 0,O[x]===e&&delete O[x])};const P=v[Un].bind(null,!1);O[x]=e,b?L(b,[v,P]):P()},clone(v){const E=di(v,t,n,s,a);return a&&a(E),E}};return $}function Qo(e){if(xo(e))return e=ks(e),e.children=null,e}function Cc(e){if(!xo(e))return Af(e.type)&&e.children?Rf(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&Ye(n.default))return n.default()}}function Zs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Zs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Wl(e,t=!1,n){let s=[],a=0;for(let i=0;i1)for(let i=0;iQa(y,t&&(Fe(t)?t[D]:t),n,s,a));return}if(va(s)&&!a){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Qa(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Io(s.component):s.el,o=a?null:i,{i:r,r:u}=e,l=t&&t.r,c=r.refs===ht?r.refs={}:r.refs,p=r.setupState,g=tt(p),b=p===ht?zd:y=>Rc(c,y)?!1:rt(g,y),_=(y,D)=>!(D&&Rc(c,D));if(l!=null&&l!==u){if(Ic(t),Nt(l))c[l]=null,b(l)&&(p[l]=null);else if(vt(l)){const y=t;_(l,y.k)&&(l.value=null),y.k&&(c[y.k]=null)}}if(Ye(u))yi(u,r,12,[o,c]);else{const y=Nt(u),D=vt(u);if(y||D){const R=()=>{if(e.f){const N=y?b(u)?p[u]:c[u]:_()||!e.k?u.value:c[e.k];if(a)Fe(N)&&Pl(N,i);else if(Fe(N))N.includes(i)||N.push(i);else if(y)c[u]=[i],b(u)&&(p[u]=c[u]);else{const S=[i];_(u,e.k)&&(u.value=S),e.k&&(c[e.k]=S)}}else y?(c[u]=o,b(u)&&(p[u]=o)):D&&(_(u,e.k)&&(u.value=o),e.k&&(c[e.k]=o))};if(o){const N=()=>{R(),Ji.delete(e)};N.id=-1,Ji.set(e,N),sn(N,n)}else Ic(e),R()}}}function Ic(e){const t=Ji.get(e);t&&(t.flags|=8,Ji.delete(e))}wo().requestIdleCallback;wo().cancelIdleCallback;const va=e=>!!e.type.__asyncLoader,xo=e=>e.type.__isKeepAlive;function Gm(e,t){Mf(e,"a",t)}function Hm(e,t){Mf(e,"da",t)}function Mf(e,t,n=Qt){const s=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(No(t,s,n),n){let a=n.parent;for(;a&&a.parent;)xo(a.parent.vnode)&&zm(s,t,n,a),a=a.parent}}function zm(e,t,n,s){const a=No(t,e,s,!0);Nn(()=>{Pl(s[t],a)},n)}function No(e,t,n=Qt,s=!1){if(n){const a=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{as();const r=ki(n),u=On(t,n,e,o);return r(),is(),u});return s?a.unshift(i):a.push(i),i}}const rs=e=>(t,n=Qt)=>{(!gi||e==="sp")&&No(e,(...s)=>t(...s),n)},Km=rs("bm"),$t=rs("m"),qm=rs("bu"),Lf=rs("u"),bn=rs("bum"),Nn=rs("um"),Vm=rs("sp"),Wm=rs("rtg"),Ym=rs("rtc");function jm(e,t=Qt){No("ec",e,t)}const $f="components";function Qe(e,t){return Pf($f,e,!0,t)||e}const Df=Symbol.for("v-ndc");function eo(e){return Nt(e)?Pf($f,e,!1)||e:e||Df}function Pf(e,t,n=!0,s=!1){const a=qt||Qt;if(a){const i=a.type;{const r=Lh(i,!1);if(r&&(r===t||r===rn(t)||r===yo(rn(t))))return i}const o=Oc(a[e]||i[e],t)||Oc(a.appContext[e],t);return!o&&s?i:o}}function Oc(e,t){return e&&(e[t]||e[rn(t)]||e[yo(rn(t))])}function Je(e,t,n,s){let a;const i=n,o=Fe(e);if(o||Nt(e)){const r=o&&ss(e);let u=!1,l=!1;r&&(u=!hn(e),l=os(e),e=So(e)),a=new Array(e.length);for(let c=0,p=e.length;ct(r,u,void 0,i));else{const r=Object.keys(e);a=new Array(r.length);for(let u=0,l=r.length;u0;return t!=="default"&&(n.name=t),h(),ke(ce,null,[Q("slot",n,s&&s())],l?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),h();const o=i&&Bf(i(n)),r=n.key||o&&o.key,u=ke(ce,{key:(r&&!vn(r)?r:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return i&&i._c&&(i._d=!0),u}function Bf(e){return e.some(t=>pi(t)?!(t.type===Xt||t.type===ce&&!Bf(t.children)):!0)?e:null}const fl=e=>e?sp(e)?Io(e):fl(e.parent):null,Ja=Ft(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>fl(e.parent),$root:e=>fl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Uf(e),$forceUpdate:e=>e.f||(e.f=()=>{ql(e.update)}),$nextTick:e=>e.n||(e.n=xt.bind(e.proxy)),$watch:e=>$m.bind(e)}),er=(e,t)=>e!==ht&&!e.__isScriptSetup&&rt(e,t),Zm={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:a,props:i,accessCache:o,type:r,appContext:u}=e;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return a[t];case 4:return n[t];case 3:return i[t]}else{if(er(s,t))return o[t]=1,s[t];if(a!==ht&&rt(a,t))return o[t]=2,a[t];if(rt(i,t))return o[t]=3,i[t];if(n!==ht&&rt(n,t))return o[t]=4,n[t];pl&&(o[t]=0)}}const l=Ja[t];let c,p;if(l)return t==="$attrs"&&Zt(e.attrs,"get",""),l(e);if((c=r.__cssModules)&&(c=c[t]))return c;if(n!==ht&&rt(n,t))return o[t]=4,n[t];if(p=u.config.globalProperties,rt(p,t))return p[t]},set({_:e},t,n){const{data:s,setupState:a,ctx:i}=e;return er(a,t)?(a[t]=n,!0):s!==ht&&rt(s,t)?(s[t]=n,!0):rt(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:a,props:i,type:o}},r){let u;return!!(n[r]||e!==ht&&r[0]!=="$"&&rt(e,r)||er(t,r)||rt(i,r)||rt(s,r)||rt(Ja,r)||rt(a.config.globalProperties,r)||(u=o.__cssModules)&&u[r])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:rt(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Mc(e){return Fe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let pl=!0;function Xm(e){const t=Uf(e),n=e.proxy,s=e.ctx;pl=!1,t.beforeCreate&&Lc(t.beforeCreate,e,"bc");const{data:a,computed:i,methods:o,watch:r,provide:u,inject:l,created:c,beforeMount:p,mounted:g,beforeUpdate:b,updated:_,activated:y,deactivated:D,beforeDestroy:R,beforeUnmount:N,destroyed:S,unmounted:M,render:O,renderTracked:B,renderTriggered:L,errorCaptured:$,serverPrefetch:v,expose:E,inheritAttrs:x,components:A,directives:P,filters:z}=t;if(l&&Qm(l,s,null),o)for(const te in o){const q=o[te];Ye(q)&&(s[te]=q.bind(n))}if(a){const te=a.call(n,n);lt(te)&&(e.data=js(te))}if(pl=!0,i)for(const te in i){const q=i[te],j=Ye(q)?q.bind(n,n):Ye(q.get)?q.get.bind(n,n):qn,he=!Ye(q)&&Ye(q.set)?q.set.bind(n):qn,Oe=W({get:j,set:he});Object.defineProperty(s,te,{enumerable:!0,configurable:!0,get:()=>Oe.value,set:Pe=>Oe.value=Pe})}if(r)for(const te in r)Ff(r[te],s,n,te);if(u){const te=Ye(u)?u.call(n):u;Reflect.ownKeys(te).forEach(q=>{Sf(q,te[q])})}c&&Lc(c,e,"c");function Y(te,q){Fe(q)?q.forEach(j=>te(j.bind(n))):q&&te(q.bind(n))}if(Y(Km,p),Y($t,g),Y(qm,b),Y(Lf,_),Y(Gm,y),Y(Hm,D),Y(jm,$),Y(Ym,B),Y(Wm,L),Y(bn,N),Y(Nn,M),Y(Vm,v),Fe(E))if(E.length){const te=e.exposed||(e.exposed={});E.forEach(q=>{Object.defineProperty(te,q,{get:()=>n[q],set:j=>n[q]=j,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===qn&&(e.render=O),x!=null&&(e.inheritAttrs=x),A&&(e.components=A),P&&(e.directives=P),v&&Of(e)}function Qm(e,t,n=qn){Fe(e)&&(e=gl(e));for(const s in e){const a=e[s];let i;lt(a)?"default"in a?i=ha(a.from||s,a.default,!0):i=ha(a.from||s):i=ha(a),vt(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Lc(e,t,n){On(Fe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ff(e,t,n,s){let a=s.includes(".")?Ef(n,s):()=>n[s];if(Nt(e)){const i=t[e];Ye(i)&&Ge(a,i)}else if(Ye(e))Ge(a,e.bind(n));else if(lt(e))if(Fe(e))e.forEach(i=>Ff(i,t,n,s));else{const i=Ye(e.handler)?e.handler.bind(n):t[e.handler];Ye(i)&&Ge(a,i,e)}}function Uf(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:a,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,r=i.get(t);let u;return r?u=r:!a.length&&!n&&!s?u=t:(u={},a.length&&a.forEach(l=>to(u,l,o,!0)),to(u,t,o)),lt(t)&&i.set(t,u),u}function to(e,t,n,s=!1){const{mixins:a,extends:i}=t;i&&to(e,i,n,!0),a&&a.forEach(o=>to(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const r=Jm[o]||n&&n[o];e[o]=r?r(e[o],t[o]):t[o]}return e}const Jm={data:$c,props:Dc,emits:Dc,methods:Va,computed:Va,beforeCreate:nn,created:nn,beforeMount:nn,mounted:nn,beforeUpdate:nn,updated:nn,beforeDestroy:nn,beforeUnmount:nn,destroyed:nn,unmounted:nn,activated:nn,deactivated:nn,errorCaptured:nn,serverPrefetch:nn,components:Va,directives:Va,watch:th,provide:$c,inject:eh};function $c(e,t){return t?e?function(){return Ft(Ye(e)?e.call(this,this):e,Ye(t)?t.call(this,this):t)}:t:e}function eh(e,t){return Va(gl(e),gl(t))}function gl(e){if(Fe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${rn(t)}Modifiers`]||e[`${Ss(t)}Modifiers`];function ih(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ht;let a=n;const i=t.startsWith("update:"),o=i&&ah(s,t.slice(7));o&&(o.trim&&(a=n.map(c=>Nt(c)?c.trim():c)),o.number&&(a=n.map(ko)));let r,u=s[r=Wo(t)]||s[r=Wo(rn(t))];!u&&i&&(u=s[r=Wo(Ss(t))]),u&&On(u,e,6,a);const l=s[r+"Once"];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,On(l,e,6,a)}}const oh=new WeakMap;function Hf(e,t,n=!1){const s=n?oh:t.emitsCache,a=s.get(e);if(a!==void 0)return a;const i=e.emits;let o={},r=!1;if(!Ye(e)){const u=l=>{const c=Hf(l,t,!0);c&&(r=!0,Ft(o,c))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!r?(lt(e)&&s.set(e,null),null):(Fe(i)?i.forEach(u=>o[u]=null):Ft(o,i),lt(e)&&s.set(e,o),o)}function Co(e,t){return!e||!ho(t)?!1:(t=t.slice(2).replace(/Once$/,""),rt(e,t[0].toLowerCase()+t.slice(1))||rt(e,Ss(t))||rt(e,t))}function Pc(e){const{type:t,vnode:n,proxy:s,withProxy:a,propsOptions:[i],slots:o,attrs:r,emit:u,render:l,renderCache:c,props:p,data:g,setupState:b,ctx:_,inheritAttrs:y}=e,D=Qi(e);let R,N;try{if(n.shapeFlag&4){const M=a||s,O=M;R=Hn(l.call(O,M,c,p,b,g,_)),N=r}else{const M=t;R=Hn(M.length>1?M(p,{attrs:r,slots:o,emit:u}):M(p,null)),N=t.props?r:rh(r)}}catch(M){ei.length=0,To(M,e,1),R=Q(Xt)}let S=R;if(N&&y!==!1){const M=Object.keys(N),{shapeFlag:O}=S;M.length&&O&7&&(i&&M.some(vo)&&(N=lh(N,i)),S=ks(S,N,!1,!0))}return n.dirs&&(S=ks(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Zs(S,n.transition),R=S,Qi(D),R}const rh=e=>{let t;for(const n in e)(n==="class"||n==="style"||ho(n))&&((t||(t={}))[n]=e[n]);return t},lh=(e,t)=>{const n={};for(const s in e)(!vo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ch(e,t,n){const{props:s,children:a,component:i}=e,{props:o,children:r,patchFlag:u}=t,l=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return s?Bc(s,o,l):!!o;if(u&8){const c=t.dynamicProps;for(let p=0;pObject.create(Kf),Vf=e=>Object.getPrototypeOf(e)===Kf;function dh(e,t,n,s=!1){const a={},i=qf();e.propsDefaults=Object.create(null),Wf(e,t,a,i);for(const o in e.propsOptions[0])o in a||(a[o]=void 0);n?e.props=s?a:bm(a):e.type.props?e.props=a:e.props=i,e.attrs=i}function fh(e,t,n,s){const{props:a,attrs:i,vnode:{patchFlag:o}}=e,r=tt(a),[u]=e.propsOptions;let l=!1;if((s||o>0)&&!(o&16)){if(o&8){const c=e.vnode.dynamicProps;for(let p=0;p{u=!0;const[g,b]=Yf(p,t,!0);Ft(o,g),b&&r.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!i&&!u)return lt(e)&&s.set(e,pa),pa;if(Fe(i))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",jl=e=>Fe(e)?e.map(Hn):[Hn(e)],gh=(e,t,n)=>{if(t._n)return t;const s=fe((...a)=>jl(t(...a)),n);return s._c=!1,s},jf=(e,t,n)=>{const s=e._ctx;for(const a in e){if(Yl(a))continue;const i=e[a];if(Ye(i))t[a]=gh(a,i,s);else if(i!=null){const o=jl(i);t[a]=()=>o}}},Zf=(e,t)=>{const n=jl(t);e.slots.default=()=>n},Xf=(e,t,n)=>{for(const s in t)(n||!Yl(s))&&(e[s]=t[s])},mh=(e,t,n)=>{const s=e.slots=qf();if(e.vnode.shapeFlag&32){const a=t._;a?(Xf(s,t,n),n&&Wd(s,"_",a,!0)):jf(t,s)}else t&&Zf(e,t)},hh=(e,t,n)=>{const{vnode:s,slots:a}=e;let i=!0,o=ht;if(s.shapeFlag&32){const r=t._;r?n&&r===1?i=!1:Xf(a,t,n):(i=!t.$stable,jf(t,a)),o=t}else t&&(Zf(e,t),o={default:1});if(i)for(const r in a)!Yl(r)&&o[r]==null&&delete a[r]},sn=kh;function vh(e){return bh(e)}function bh(e,t){const n=wo();n.__VUE__=!0;const{insert:s,remove:a,patchProp:i,createElement:o,createText:r,createComment:u,setText:l,setElementText:c,parentNode:p,nextSibling:g,setScopeId:b=qn,insertStaticContent:_}=e,y=(I,U,Z,ee=null,se=null,ne=null,me=void 0,le=null,ue=!!U.dynamicChildren)=>{if(I===U)return;I&&!zs(I,U)&&(ee=ye(I),Pe(I,se,ne,!0),I=null),U.patchFlag===-2&&(ue=!1,U.dynamicChildren=null);const{type:oe,ref:Ce,shapeFlag:ve}=U;switch(oe){case Ro:D(I,U,Z,ee);break;case Xt:R(I,U,Z,ee);break;case zi:I==null&&N(U,Z,ee,me);break;case ce:A(I,U,Z,ee,se,ne,me,le,ue);break;default:ve&1?O(I,U,Z,ee,se,ne,me,le,ue):ve&6?P(I,U,Z,ee,se,ne,me,le,ue):(ve&64||ve&128)&&oe.process(I,U,Z,ee,se,ne,me,le,ue,st)}Ce!=null&&se?Qa(Ce,I&&I.ref,ne,U||I,!U):Ce==null&&I&&I.ref!=null&&Qa(I.ref,null,ne,I,!0)},D=(I,U,Z,ee)=>{if(I==null)s(U.el=r(U.children),Z,ee);else{const se=U.el=I.el;U.children!==I.children&&l(se,U.children)}},R=(I,U,Z,ee)=>{I==null?s(U.el=u(U.children||""),Z,ee):U.el=I.el},N=(I,U,Z,ee)=>{[I.el,I.anchor]=_(I.children,U,Z,ee,I.el,I.anchor)},S=({el:I,anchor:U},Z,ee)=>{let se;for(;I&&I!==U;)se=g(I),s(I,Z,ee),I=se;s(U,Z,ee)},M=({el:I,anchor:U})=>{let Z;for(;I&&I!==U;)Z=g(I),a(I),I=Z;a(U)},O=(I,U,Z,ee,se,ne,me,le,ue)=>{if(U.type==="svg"?me="svg":U.type==="math"&&(me="mathml"),I==null)B(U,Z,ee,se,ne,me,le,ue);else{const oe=I.el&&I.el._isVueCE?I.el:null;try{oe&&oe._beginPatch(),v(I,U,se,ne,me,le,ue)}finally{oe&&oe._endPatch()}}},B=(I,U,Z,ee,se,ne,me,le)=>{let ue,oe;const{props:Ce,shapeFlag:ve,transition:xe,dirs:Te}=I;if(ue=I.el=o(I.type,ne,Ce&&Ce.is,Ce),ve&8?c(ue,I.children):ve&16&&$(I.children,ue,null,ee,se,tr(I,ne),me,le),Te&&Ls(I,null,ee,"created"),L(ue,I,I.scopeId,me,ee),Ce){for(const qe in Ce)qe!=="value"&&!ja(qe)&&i(ue,qe,null,Ce[qe],ne,ee);"value"in Ce&&i(ue,"value",null,Ce.value,ne),(oe=Ce.onVnodeBeforeMount)&&Dn(oe,ee,I)}Te&&Ls(I,null,ee,"beforeMount");const Ne=_h(se,xe);Ne&&xe.beforeEnter(ue),s(ue,U,Z),((oe=Ce&&Ce.onVnodeMounted)||Ne||Te)&&sn(()=>{try{oe&&Dn(oe,ee,I),Ne&&xe.enter(ue),Te&&Ls(I,null,ee,"mounted")}finally{}},se)},L=(I,U,Z,ee,se)=>{if(Z&&b(I,Z),ee)for(let ne=0;ne{for(let oe=ue;oe{const le=U.el=I.el;let{patchFlag:ue,dynamicChildren:oe,dirs:Ce}=U;ue|=I.patchFlag&16;const ve=I.props||ht,xe=U.props||ht;let Te;if(Z&&Ds(Z,!1),(Te=xe.onVnodeBeforeUpdate)&&Dn(Te,Z,U,I),Ce&&Ls(U,I,Z,"beforeUpdate"),Z&&Ds(Z,!0),(ve.innerHTML&&xe.innerHTML==null||ve.textContent&&xe.textContent==null)&&c(le,""),oe?E(I.dynamicChildren,oe,le,Z,ee,tr(U,se),ne):me||q(I,U,le,null,Z,ee,tr(U,se),ne,!1),ue>0){if(ue&16)x(le,ve,xe,Z,se);else if(ue&2&&ve.class!==xe.class&&i(le,"class",null,xe.class,se),ue&4&&i(le,"style",ve.style,xe.style,se),ue&8){const Ne=U.dynamicProps;for(let qe=0;qe{Te&&Dn(Te,Z,U,I),Ce&&Ls(U,I,Z,"updated")},ee)},E=(I,U,Z,ee,se,ne,me)=>{for(let le=0;le{if(U!==Z){if(U!==ht)for(const ne in U)!ja(ne)&&!(ne in Z)&&i(I,ne,U[ne],null,se,ee);for(const ne in Z){if(ja(ne))continue;const me=Z[ne],le=U[ne];me!==le&&ne!=="value"&&i(I,ne,le,me,se,ee)}"value"in Z&&i(I,"value",U.value,Z.value,se)}},A=(I,U,Z,ee,se,ne,me,le,ue)=>{const oe=U.el=I?I.el:r(""),Ce=U.anchor=I?I.anchor:r("");let{patchFlag:ve,dynamicChildren:xe,slotScopeIds:Te}=U;Te&&(le=le?le.concat(Te):Te),I==null?(s(oe,Z,ee),s(Ce,Z,ee),$(U.children||[],Z,Ce,se,ne,me,le,ue)):ve>0&&ve&64&&xe&&I.dynamicChildren&&I.dynamicChildren.length===xe.length?(E(I.dynamicChildren,xe,Z,se,ne,me,le),(U.key!=null||se&&U===se.subTree)&&Zl(I,U,!0)):q(I,U,Z,Ce,se,ne,me,le,ue)},P=(I,U,Z,ee,se,ne,me,le,ue)=>{U.slotScopeIds=le,I==null?U.shapeFlag&512?se.ctx.activate(U,Z,ee,me,ue):z(U,Z,ee,se,ne,me,ue):V(I,U,ue)},z=(I,U,Z,ee,se,ne,me)=>{const le=I.component=Ch(I,ee,se);if(xo(I)&&(le.ctx.renderer=st),Rh(le,!1,me),le.asyncDep){if(se&&se.registerDep(le,Y,me),!I.el){const ue=le.subTree=Q(Xt);R(null,ue,U,Z),I.placeholder=ue.el}}else Y(le,I,U,Z,se,ne,me)},V=(I,U,Z)=>{const ee=U.component=I.component;if(ch(I,U,Z))if(ee.asyncDep&&!ee.asyncResolved){te(ee,U,Z);return}else ee.next=U,ee.update();else U.el=I.el,ee.vnode=U},Y=(I,U,Z,ee,se,ne,me)=>{const le=()=>{if(I.isMounted){let{next:ve,bu:xe,u:Te,parent:Ne,vnode:qe}=I;{const Ct=Qf(I);if(Ct){ve&&(ve.el=qe.el,te(I,ve,me)),Ct.asyncDep.then(()=>{sn(()=>{I.isUnmounted||oe()},se)});return}}let Ze=ve,et;Ds(I,!1),ve?(ve.el=qe.el,te(I,ve,me)):ve=qe,xe&&Hi(xe),(et=ve.props&&ve.props.onVnodeBeforeUpdate)&&Dn(et,Ne,ve,qe),Ds(I,!0);const ut=Pc(I),Ot=I.subTree;I.subTree=ut,y(Ot,ut,p(Ot.el),ye(Ot),I,se,ne),ve.el=ut.el,Ze===null&&uh(I,ut.el),Te&&sn(Te,se),(et=ve.props&&ve.props.onVnodeUpdated)&&sn(()=>Dn(et,Ne,ve,qe),se)}else{let ve;const{el:xe,props:Te}=U,{bm:Ne,m:qe,parent:Ze,root:et,type:ut}=I,Ot=va(U);Ds(I,!1),Ne&&Hi(Ne),!Ot&&(ve=Te&&Te.onVnodeBeforeMount)&&Dn(ve,Ze,U),Ds(I,!0);{et.ce&&et.ce._hasShadowRoot()&&et.ce._injectChildStyle(ut,I.parent?I.parent.type:void 0);const Ct=I.subTree=Pc(I);y(null,Ct,Z,ee,I,se,ne),U.el=Ct.el}if(qe&&sn(qe,se),!Ot&&(ve=Te&&Te.onVnodeMounted)){const Ct=U;sn(()=>Dn(ve,Ze,Ct),se)}(U.shapeFlag&256||Ze&&va(Ze.vnode)&&Ze.vnode.shapeFlag&256)&&I.a&&sn(I.a,se),I.isMounted=!0,U=Z=ee=null}};I.scope.on();const ue=I.effect=new ef(le);I.scope.off();const oe=I.update=ue.run.bind(ue),Ce=I.job=ue.runIfDirty.bind(ue);Ce.i=I,Ce.id=I.uid,ue.scheduler=()=>ql(Ce),Ds(I,!0),oe()},te=(I,U,Z)=>{U.component=I;const ee=I.vnode.props;I.vnode=U,I.next=null,fh(I,U.props,ee,Z),hh(I,U.children,Z),as(),Ac(I),is()},q=(I,U,Z,ee,se,ne,me,le,ue=!1)=>{const oe=I&&I.children,Ce=I?I.shapeFlag:0,ve=U.children,{patchFlag:xe,shapeFlag:Te}=U;if(xe>0){if(xe&128){he(oe,ve,Z,ee,se,ne,me,le,ue);return}else if(xe&256){j(oe,ve,Z,ee,se,ne,me,le,ue);return}}Te&8?(Ce&16&&X(oe,se,ne),ve!==oe&&c(Z,ve)):Ce&16?Te&16?he(oe,ve,Z,ee,se,ne,me,le,ue):X(oe,se,ne,!0):(Ce&8&&c(Z,""),Te&16&&$(ve,Z,ee,se,ne,me,le,ue))},j=(I,U,Z,ee,se,ne,me,le,ue)=>{I=I||pa,U=U||pa;const oe=I.length,Ce=U.length,ve=Math.min(oe,Ce);let xe;for(xe=0;xeCe?X(I,se,ne,!0,!1,ve):$(U,Z,ee,se,ne,me,le,ue,ve)},he=(I,U,Z,ee,se,ne,me,le,ue)=>{let oe=0;const Ce=U.length;let ve=I.length-1,xe=Ce-1;for(;oe<=ve&&oe<=xe;){const Te=I[oe],Ne=U[oe]=ue?Xn(U[oe]):Hn(U[oe]);if(zs(Te,Ne))y(Te,Ne,Z,null,se,ne,me,le,ue);else break;oe++}for(;oe<=ve&&oe<=xe;){const Te=I[ve],Ne=U[xe]=ue?Xn(U[xe]):Hn(U[xe]);if(zs(Te,Ne))y(Te,Ne,Z,null,se,ne,me,le,ue);else break;ve--,xe--}if(oe>ve){if(oe<=xe){const Te=xe+1,Ne=Texe)for(;oe<=ve;)Pe(I[oe],se,ne,!0),oe++;else{const Te=oe,Ne=oe,qe=new Map;for(oe=Ne;oe<=xe;oe++){const wt=U[oe]=ue?Xn(U[oe]):Hn(U[oe]);wt.key!=null&&qe.set(wt.key,oe)}let Ze,et=0;const ut=xe-Ne+1;let Ot=!1,Ct=0;const Jt=new Array(ut);for(oe=0;oe=ut){Pe(wt,se,ne,!0);continue}let Rt;if(wt.key!=null)Rt=qe.get(wt.key);else for(Ze=Ne;Ze<=xe;Ze++)if(Jt[Ze-Ne]===0&&zs(wt,U[Ze])){Rt=Ze;break}Rt===void 0?Pe(wt,se,ne,!0):(Jt[Rt-Ne]=oe+1,Rt>=Ct?Ct=Rt:Ot=!0,y(wt,U[Rt],Z,null,se,ne,me,le,ue),et++)}const Vt=Ot?yh(Jt):pa;for(Ze=Vt.length-1,oe=ut-1;oe>=0;oe--){const wt=Ne+oe,Rt=U[wt],Cn=U[wt+1],St=wt+1{const{el:ne,type:me,transition:le,children:ue,shapeFlag:oe}=I;if(oe&6){Oe(I.component.subTree,U,Z,ee);return}if(oe&128){I.suspense.move(U,Z,ee);return}if(oe&64){me.move(I,U,Z,st);return}if(me===ce){s(ne,U,Z);for(let ve=0;vele.enter(ne),se);else{const{leave:ve,delayLeave:xe,afterLeave:Te}=le,Ne=()=>{I.ctx.isUnmounted?a(ne):s(ne,U,Z)},qe=()=>{ne._isLeaving&&ne[Un](!0),ve(ne,()=>{Ne(),Te&&Te()})};xe?xe(ne,Ne,qe):qe()}else s(ne,U,Z)},Pe=(I,U,Z,ee=!1,se=!1)=>{const{type:ne,props:me,ref:le,children:ue,dynamicChildren:oe,shapeFlag:Ce,patchFlag:ve,dirs:xe,cacheIndex:Te,memo:Ne}=I;if(ve===-2&&(se=!1),le!=null&&(as(),Qa(le,null,Z,I,!0),is()),Te!=null&&(U.renderCache[Te]=void 0),Ce&256){U.ctx.deactivate(I);return}const qe=Ce&1&&xe,Ze=!va(I);let et;if(Ze&&(et=me&&me.onVnodeBeforeUnmount)&&Dn(et,U,I),Ce&6)Be(I.component,Z,ee);else{if(Ce&128){I.suspense.unmount(Z,ee);return}qe&&Ls(I,null,U,"beforeUnmount"),Ce&64?I.type.remove(I,U,Z,st,ee):oe&&!oe.hasOnce&&(ne!==ce||ve>0&&ve&64)?X(oe,U,Z,!1,!0):(ne===ce&&ve&384||!se&&Ce&16)&&X(ue,U,Z),ee&&nt(I)}const ut=Ne!=null&&Te==null;(Ze&&(et=me&&me.onVnodeUnmounted)||qe||ut)&&sn(()=>{et&&Dn(et,U,I),qe&&Ls(I,null,U,"unmounted"),ut&&(I.el=null)},Z)},nt=I=>{const{type:U,el:Z,anchor:ee,transition:se}=I;if(U===ce){He(Z,ee);return}if(U===zi){M(I);return}const ne=()=>{a(Z),se&&!se.persisted&&se.afterLeave&&se.afterLeave()};if(I.shapeFlag&1&&se&&!se.persisted){const{leave:me,delayLeave:le}=se,ue=()=>me(Z,ne);le?le(I.el,ne,ue):ue()}else ne()},He=(I,U)=>{let Z;for(;I!==U;)Z=g(I),a(I),I=Z;a(U)},Be=(I,U,Z)=>{const{bum:ee,scope:se,job:ne,subTree:me,um:le,m:ue,a:oe}=I;Uc(ue),Uc(oe),ee&&Hi(ee),se.stop(),ne&&(ne.flags|=8,Pe(me,I,U,Z)),le&&sn(le,U),sn(()=>{I.isUnmounted=!0},U)},X=(I,U,Z,ee=!1,se=!1,ne=0)=>{for(let me=ne;me{if(I.shapeFlag&6)return ye(I.component.subTree);if(I.shapeFlag&128)return I.suspense.next();const U=g(I.anchor||I.el),Z=U&&U[Tf];return Z?g(Z):U};let De=!1;const dt=(I,U,Z)=>{let ee;I==null?U._vnode&&(Pe(U._vnode,null,null,!0),ee=U._vnode.component):y(U._vnode||null,I,U,null,null,null,Z),U._vnode=I,De||(De=!0,Ac(ee),yf(),De=!1)},st={p:y,um:Pe,m:Oe,r:nt,mt:z,mc:$,pc:q,pbc:E,n:ye,o:e};return{render:dt,hydrate:void 0,createApp:sh(dt)}}function tr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ds({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function _h(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Zl(e,t,n=!1){const s=e.children,a=t.children;if(Fe(s)&&Fe(a))for(let i=0;i>1,e[n[r]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Qf(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Qf(t)}function Uc(e){if(e)for(let t=0;te.__isSuspense;function kh(e,t){t&&t.pendingBranch?Fe(e)?t.effects.push(...e):t.effects.push(e):Rm(e)}const ce=Symbol.for("v-fgt"),Ro=Symbol.for("v-txt"),Xt=Symbol.for("v-cmt"),zi=Symbol.for("v-stc"),ei=[];let mn=null;function h(e=!1){ei.push(mn=e?null:[])}function wh(){ei.pop(),mn=ei[ei.length-1]||null}let fi=1;function no(e,t=!1){fi+=e,e<0&&mn&&t&&(mn.hasOnce=!0)}function tp(e){return e.dynamicChildren=fi>0?mn||pa:null,wh(),fi>0&&mn&&mn.push(e),e}function w(e,t,n,s,a,i){return tp(f(e,t,n,s,a,i,!0))}function ke(e,t,n,s,a){return tp(Q(e,t,n,s,a,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function zs(e,t){return e.type===t.type&&e.key===t.key}const np=({key:e})=>e??null,Ki=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Nt(e)||vt(e)||Ye(e)?{i:qt,r:e,k:t,f:!!n}:e:null);function f(e,t=null,n=null,s=0,a=null,i=e===ce?0:1,o=!1,r=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&np(t),ref:t&&Ki(t),scopeId:wf,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:qt};return r?(Xl(u,n),i&128&&e.normalize(u)):n&&(u.shapeFlag|=Nt(n)?8:16),fi>0&&!o&&mn&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&mn.push(u),u}const Q=Sh;function Sh(e,t=null,n=null,s=0,a=null,i=!1){if((!e||e===Df)&&(e=Xt),pi(e)){const r=ks(e,t,!0);return n&&Xl(r,n),fi>0&&!i&&mn&&(r.shapeFlag&6?mn[mn.indexOf(e)]=r:mn.push(r)),r.patchFlag=-2,r}if($h(e)&&(e=e.__vccOpts),t){t=Eh(t);let{class:r,style:u}=t;r&&!Nt(r)&&(t.class=Ae(r)),lt(u)&&(Eo(u)&&!Fe(u)&&(u=Ft({},u)),t.style=bs(u))}const o=Nt(e)?1:ep(e)?128:Af(e)?64:lt(e)?4:Ye(e)?2:0;return f(e,t,n,s,a,o,i,!0)}function Eh(e){return e?Eo(e)||Vf(e)?Ft({},e):e:null}function ks(e,t,n=!1,s=!1){const{props:a,ref:i,patchFlag:o,children:r,transition:u}=e,l=t?Ah(a||{},t):a,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&np(l),ref:t&&t.ref?n&&i?Fe(i)?i.concat(Ki(t)):[i,Ki(t)]:Ki(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ce?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ks(e.ssContent),ssFallback:e.ssFallback&&ks(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&s&&Zs(c,u.clone(c)),c}function ae(e=" ",t=0){return Q(Ro,null,e,t)}function Th(e,t){const n=Q(zi,null,e);return n.staticCount=t,n}function K(e="",t=!1){return t?(h(),ke(Xt,null,e)):Q(Xt,null,e)}function Hn(e){return e==null||typeof e=="boolean"?Q(Xt):Fe(e)?Q(ce,null,e.slice()):pi(e)?Xn(e):Q(Ro,null,String(e))}function Xn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ks(e)}function Xl(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Fe(t))n=16;else if(typeof t=="object")if(s&65){const a=t.default;a&&(a._c&&(a._d=!1),Xl(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!Vf(t)?t._ctx=qt:a===3&&qt&&(qt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Ye(t)?(t={default:t,_ctx:qt},n=32):(t=String(t),s&64?(n=16,t=[ae(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ah(...e){const t={};for(let n=0;nQt||qt;let so,hl;{const e=wo(),t=(n,s)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(s),i=>{a.length>1?a.forEach(o=>o(i)):a[0](i)}};so=t("__VUE_INSTANCE_SETTERS__",n=>Qt=n),hl=t("__VUE_SSR_SETTERS__",n=>gi=n)}const ki=e=>{const t=Qt;return so(e),e.scope.on(),()=>{e.scope.off(),so(t)}},Gc=()=>{Qt&&Qt.scope.off(),so(null)};function sp(e){return e.vnode.shapeFlag&4}let gi=!1;function Rh(e,t=!1,n=!1){t&&hl(t);const{props:s,children:a}=e.vnode,i=sp(e);dh(e,s,i,t),mh(e,a,n||t);const o=i?Ih(e,t):void 0;return t&&hl(!1),o}function Ih(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Zm);const{setup:s}=n;if(s){as();const a=e.setupContext=s.length>1?Mh(e):null,i=ki(e),o=yi(s,e,0,[e.props,a]),r=Kd(o);if(is(),i(),(r||e.sp)&&!va(e)&&Of(e),r){if(o.then(Gc,Gc),t)return o.then(u=>{Hc(e,u)}).catch(u=>{To(u,e,0)});e.asyncDep=o}else Hc(e,o)}else ap(e)}function Hc(e,t,n){Ye(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:lt(t)&&(e.setupState=vf(t)),ap(e)}function ap(e,t,n){const s=e.type;e.render||(e.render=s.render||qn);{const a=ki(e);as();try{Xm(e)}finally{is(),a()}}}const Oh={get(e,t){return Zt(e,"get",""),e[t]}};function Mh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Oh),slots:e.slots,emit:e.emit,expose:t}}function Io(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(vf(ci(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ja)return Ja[n](e)},has(t,n){return n in t||n in Ja}})):e.proxy}function Lh(e,t=!0){return Ye(e)?e.displayName||e.name:e.name||t&&e.__name}function $h(e){return Ye(e)&&"__vccOpts"in e}const W=(e,t)=>Tm(e,t,gi);function C(e,t,n){try{no(-1);const s=arguments.length;return s===2?lt(t)&&!Fe(t)?pi(t)?Q(e,null,[t]):Q(e,t):Q(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pi(n)&&(n=[n]),Q(e,t,n))}finally{no(1)}}const Dh="3.5.32";/** -* @vue/runtime-dom v3.5.32 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let vl;const zc=typeof window<"u"&&window.trustedTypes;if(zc)try{vl=zc.createPolicy("vue",{createHTML:e=>e})}catch{}const ip=vl?e=>vl.createHTML(e):e=>e,Ph="http://www.w3.org/2000/svg",Bh="http://www.w3.org/1998/Math/MathML",Zn=typeof document<"u"?document:null,Kc=Zn&&Zn.createElement("template"),Fh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const a=t==="svg"?Zn.createElementNS(Ph,e):t==="mathml"?Zn.createElementNS(Bh,e):n?Zn.createElement(e,{is:n}):Zn.createElement(e);return e==="select"&&s&&s.multiple!=null&&a.setAttribute("multiple",s.multiple),a},createText:e=>Zn.createTextNode(e),createComment:e=>Zn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Zn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,a,i){const o=n?n.previousSibling:t.lastChild;if(a&&(a===i||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===i||!(a=a.nextSibling)););else{Kc.innerHTML=ip(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const r=Kc.content;if(s==="svg"||s==="mathml"){const u=r.firstChild;for(;u.firstChild;)r.appendChild(u.firstChild);r.removeChild(u)}t.insertBefore(r,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},fs="transition",Ba="animation",wa=Symbol("_vtc"),op={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},rp=Ft({},Nf,op),Uh=e=>(e.displayName="Transition",e.props=rp,e),Sa=Uh((e,{slots:t})=>C(Um,lp(e),t)),Ps=(e,t=[])=>{Fe(e)?e.forEach(n=>n(...t)):e&&e(...t)},qc=e=>e?Fe(e)?e.some(t=>t.length>1):e.length>1:!1;function lp(e){const t={};for(const A in e)A in op||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:s,duration:a,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:r=`${n}-enter-to`,appearFromClass:u=i,appearActiveClass:l=o,appearToClass:c=r,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,_=Gh(a),y=_&&_[0],D=_&&_[1],{onBeforeEnter:R,onEnter:N,onEnterCancelled:S,onLeave:M,onLeaveCancelled:O,onBeforeAppear:B=R,onAppear:L=N,onAppearCancelled:$=S}=t,v=(A,P,z,V)=>{A._enterCancelled=V,ms(A,P?c:r),ms(A,P?l:o),z&&z()},E=(A,P)=>{A._isLeaving=!1,ms(A,p),ms(A,b),ms(A,g),P&&P()},x=A=>(P,z)=>{const V=A?L:N,Y=()=>v(P,A,z);Ps(V,[P,Y]),Vc(()=>{ms(P,A?u:i),Pn(P,A?c:r),qc(V)||Wc(P,s,y,Y)})};return Ft(t,{onBeforeEnter(A){Ps(R,[A]),Pn(A,i),Pn(A,o)},onBeforeAppear(A){Ps(B,[A]),Pn(A,u),Pn(A,l)},onEnter:x(!1),onAppear:x(!0),onLeave(A,P){A._isLeaving=!0;const z=()=>E(A,P);Pn(A,p),A._enterCancelled?(Pn(A,g),bl(A)):(bl(A),Pn(A,g)),Vc(()=>{A._isLeaving&&(ms(A,p),Pn(A,b),qc(M)||Wc(A,s,D,z))}),Ps(M,[A,z])},onEnterCancelled(A){v(A,!1,void 0,!0),Ps(S,[A])},onAppearCancelled(A){v(A,!0,void 0,!0),Ps($,[A])},onLeaveCancelled(A){E(A),Ps(O,[A])}})}function Gh(e){if(e==null)return null;if(lt(e))return[nr(e.enter),nr(e.leave)];{const t=nr(e);return[t,t]}}function nr(e){return Kg(e)}function Pn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[wa]||(e[wa]=new Set)).add(t)}function ms(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[wa];n&&(n.delete(t),n.size||(e[wa]=void 0))}function Vc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Hh=0;function Wc(e,t,n,s){const a=e._endId=++Hh,i=()=>{a===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:r,propCount:u}=cp(e,t);if(!o)return s();const l=o+"end";let c=0;const p=()=>{e.removeEventListener(l,g),i()},g=b=>{b.target===e&&++c>=u&&p()};setTimeout(()=>{c(n[_]||"").split(", "),a=s(`${fs}Delay`),i=s(`${fs}Duration`),o=Yc(a,i),r=s(`${Ba}Delay`),u=s(`${Ba}Duration`),l=Yc(r,u);let c=null,p=0,g=0;t===fs?o>0&&(c=fs,p=o,g=i.length):t===Ba?l>0&&(c=Ba,p=l,g=u.length):(p=Math.max(o,l),c=p>0?o>l?fs:Ba:null,g=c?c===fs?i.length:u.length:0);const b=c===fs&&/\b(?:transform|all)(?:,|$)/.test(s(`${fs}Property`).toString());return{type:c,timeout:p,propCount:g,hasTransform:b}}function Yc(e,t){for(;e.lengthjc(n)+jc(e[s])))}function jc(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function bl(e){return(e?e.ownerDocument:document).body.offsetHeight}function zh(e,t,n){const s=e[wa];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Zc=Symbol("_vod"),Kh=Symbol("_vsh"),qh=Symbol(""),Vh=/(?:^|;)\s*display\s*:/;function Wh(e,t,n){const s=e.style,a=Nt(n);let i=!1;if(n&&!a){if(t)if(Nt(t))for(const o of t.split(";")){const r=o.slice(0,o.indexOf(":")).trim();n[r]==null&&qi(s,r,"")}else for(const o in t)n[o]==null&&qi(s,o,"");for(const o in n)o==="display"&&(i=!0),qi(s,o,n[o])}else if(a){if(t!==n){const o=s[qh];o&&(n+=";"+o),s.cssText=n,i=Vh.test(n)}}else t&&e.removeAttribute("style");Zc in e&&(e[Zc]=i?s.display:"",e[Kh]&&(s.display="none"))}const Xc=/\s*!important$/;function qi(e,t,n){if(Fe(n))n.forEach(s=>qi(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Yh(e,t);Xc.test(n)?e.setProperty(Ss(s),n.replace(Xc,""),"important"):e[s]=n}}const Qc=["Webkit","Moz","ms"],sr={};function Yh(e,t){const n=sr[t];if(n)return n;let s=rn(t);if(s!=="filter"&&s in e)return sr[t]=s;s=yo(s);for(let a=0;aar||(Qh.then(()=>ar=0),ar=Date.now());function ev(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;On(tv(s,n.value),t,5,[s])};return n.value=e,n.attached=Jh(),n}function tv(e,t){if(Fe(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>a=>!a._stopped&&s&&s(a))}else return t}const au=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,nv=(e,t,n,s,a,i)=>{const o=a==="svg";t==="class"?zh(e,s,o):t==="style"?Wh(e,n,s):ho(t)?vo(t)||Zh(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):sv(e,t,s,o))?(tu(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&eu(e,t,s,o,i,t!=="value")):e._isVueCE&&(av(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Nt(s)))?tu(e,rn(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),eu(e,t,s,o))};function sv(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&au(t)&&Ye(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return au(t)&&Nt(n)?!1:t in e}function av(e,t){const n=e._def.props;if(!n)return!1;const s=rn(t);return Array.isArray(n)?n.some(a=>rn(a)===s):Object.keys(n).some(a=>rn(a)===s)}const up=new WeakMap,dp=new WeakMap,ao=Symbol("_moveCb"),iu=Symbol("_enterCb"),iv=e=>(delete e.props.mode,e),ov=iv({name:"TransitionGroup",props:Ft({},rp,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=xa(),s=xf();let a,i;return Lf(()=>{if(!a.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!dv(a[0].el,n.vnode.el,o)){a=[];return}a.forEach(lv),a.forEach(cv);const r=a.filter(uv);bl(n.vnode.el),r.forEach(u=>{const l=u.el,c=l.style;Pn(l,o),c.transform=c.webkitTransform=c.transitionDuration="";const p=l[ao]=g=>{g&&g.target!==l||(!g||g.propertyName.endsWith("transform"))&&(l.removeEventListener("transitionend",p),l[ao]=null,ms(l,o))};l.addEventListener("transitionend",p)}),a=[]}),()=>{const o=tt(e),r=lp(o);let u=o.tag||ce;if(a=[],i)for(let l=0;l{r.split(/\s+/).forEach(u=>u&&s.classList.remove(u))}),n.split(/\s+/).forEach(r=>r&&s.classList.add(r)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:o}=cp(s);return i.removeChild(s),o}const ws=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Fe(t)?n=>Hi(t,n):t};function fv(e){e.target.composing=!0}function ou(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const An=Symbol("_assign");function ru(e,t,n){return t&&(e=e.trim()),n&&(e=ko(e)),e}const mi={created(e,{modifiers:{lazy:t,trim:n,number:s}},a){e[An]=ws(a);const i=s||a.props&&a.props.type==="number";es(e,t?"change":"input",o=>{o.target.composing||e[An](ru(e.value,n,i))}),(n||i)&&es(e,"change",()=>{e.value=ru(e.value,n,i)}),t||(es(e,"compositionstart",fv),es(e,"compositionend",ou),es(e,"change",ou))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:a,number:i}},o){if(e[An]=ws(o),e.composing)return;const r=(i||e.type==="number")&&!/^0\d/.test(e.value)?ko(e.value):e.value,u=t??"";if(r===u)return;const l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!=="range"&&(s&&t===n||a&&e.value.trim()===u)||(e.value=u)}},pp={deep:!0,created(e,t,n){e[An]=ws(n),es(e,"change",()=>{const s=e._modelValue,a=Ea(e),i=e.checked,o=e[An];if(Fe(s)){const r=Bl(s,a),u=r!==-1;if(i&&!u)o(s.concat(a));else if(!i&&u){const l=[...s];l.splice(r,1),o(l)}}else if(Aa(s)){const r=new Set(s);i?r.add(a):r.delete(a),o(r)}else o(gp(e,i))})},mounted:lu,beforeUpdate(e,t,n){e[An]=ws(n),lu(e,t,n)}};function lu(e,{value:t,oldValue:n},s){e._modelValue=t;let a;if(Fe(t))a=Bl(t,s.props.value)>-1;else if(Aa(t))a=t.has(s.props.value);else{if(t===n)return;a=ys(t,gp(e,!0))}e.checked!==a&&(e.checked=a)}const pv={created(e,{value:t},n){e.checked=ys(t,n.props.value),e[An]=ws(n),es(e,"change",()=>{e[An](Ea(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[An]=ws(s),t!==n&&(e.checked=ys(t,s.props.value))}},_l={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const a=Aa(t);es(e,"change",()=>{const i=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?ko(Ea(o)):Ea(o));e[An](e.multiple?a?new Set(i):i:i[0]),e._assigning=!0,xt(()=>{e._assigning=!1})}),e[An]=ws(s)},mounted(e,{value:t}){cu(e,t)},beforeUpdate(e,t,n){e[An]=ws(n)},updated(e,{value:t}){e._assigning||cu(e,t)}};function cu(e,t){const n=e.multiple,s=Fe(t);if(!(n&&!s&&!Aa(t))){for(let a=0,i=e.options.length;aString(l)===String(r)):o.selected=Bl(t,r)>-1}else o.selected=t.has(r);else if(ys(Ea(o),t)){e.selectedIndex!==a&&(e.selectedIndex=a);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ea(e){return"_value"in e?e._value:e.value}function gp(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const gv={created(e,t,n){Oi(e,t,n,null,"created")},mounted(e,t,n){Oi(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Oi(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Oi(e,t,n,s,"updated")}};function mv(e,t){switch(e){case"SELECT":return _l;case"TEXTAREA":return mi;default:switch(t){case"checkbox":return pp;case"radio":return pv;default:return mi}}}function Oi(e,t,n,s,a){const o=mv(e.tagName,n.props&&n.props.type)[a];o&&o(e,t,n,s)}const hv=["ctrl","shift","alt","meta"],vv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>hv.some(n=>e[`${n}Key`]&&!t.includes(n))},Bt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((a,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(a=>{if(!("key"in a))return;const i=Ss(a.key);if(t.some(o=>o===i||bv[o]===i))return e(a)}))},_v=Ft({patchProp:nv},Fh);let uu;function yv(){return uu||(uu=vh(_v))}const kv=((...e)=>{const t=yv().createApp(...e),{mount:n}=t;return t.mount=s=>{const a=Sv(s);if(!a)return;const i=t._component;!Ye(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const o=n(a,!1,wv(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),o},t});function wv(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Sv(e){return Nt(e)?document.querySelector(e):e}/*! - * pinia v3.0.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let mp;const Oo=e=>mp=e,hp=Symbol();function yl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ti;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ti||(ti={}));function Ev(){const e=Qd(!0),t=e.run(()=>F({}));let n=[],s=[];const a=ci({install(i){Oo(a),a._a=i,i.provide(hp,a),i.config.globalProperties.$pinia=a,s.forEach(o=>n.push(o)),s=[]},use(i){return this._a?n.push(i):s.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return a}const vp=()=>{};function du(e,t,n,s=vp){e.add(t);const a=()=>{e.delete(t)&&s()};return!n&&Jd()&&Qg(a),a}function ca(e,...t){e.forEach(n=>{n(...t)})}const Tv=e=>e(),fu=Symbol(),ir=Symbol();function kl(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],a=e[n];yl(a)&&yl(s)&&e.hasOwnProperty(n)&&!vt(s)&&!ss(s)?e[n]=kl(a,s):e[n]=s}return e}const Av=Symbol();function xv(e){return!yl(e)||!Object.prototype.hasOwnProperty.call(e,Av)}const{assign:hs}=Object;function Nv(e){return!!(vt(e)&&e.effect)}function Cv(e,t,n,s){const{state:a,actions:i,getters:o}=t,r=n.state.value[e];let u;function l(){r||(n.state.value[e]=a?a():{});const c=km(n.state.value[e]);return hs(c,i,Object.keys(o||{}).reduce((p,g)=>(p[g]=ci(W(()=>{Oo(n);const b=n._s.get(e);return o[g].call(b,b)})),p),{}))}return u=bp(e,l,t,n,s,!0),u}function bp(e,t,n={},s,a,i){let o;const r=hs({actions:{}},n),u={deep:!0};let l,c,p=new Set,g=new Set,b;const _=s.state.value[e];!i&&!_&&(s.state.value[e]={});let y;function D($){let v;l=c=!1,typeof $=="function"?($(s.state.value[e]),v={type:ti.patchFunction,storeId:e,events:b}):(kl(s.state.value[e],$),v={type:ti.patchObject,payload:$,storeId:e,events:b});const E=y=Symbol();xt().then(()=>{y===E&&(l=!0)}),c=!0,ca(p,v,s.state.value[e])}const R=i?function(){const{state:v}=n,E=v?v():{};this.$patch(x=>{hs(x,E)})}:vp;function N(){o.stop(),p.clear(),g.clear(),s._s.delete(e)}const S=($,v="")=>{if(fu in $)return $[ir]=v,$;const E=function(){Oo(s);const x=Array.from(arguments),A=new Set,P=new Set;function z(te){A.add(te)}function V(te){P.add(te)}ca(g,{args:x,name:E[ir],store:O,after:z,onError:V});let Y;try{Y=$.apply(this&&this.$id===e?this:O,x)}catch(te){throw ca(P,te),te}return Y instanceof Promise?Y.then(te=>(ca(A,te),te)).catch(te=>(ca(P,te),Promise.reject(te))):(ca(A,Y),Y)};return E[fu]=!0,E[ir]=v,E},M={_p:s,$id:e,$onAction:du.bind(null,g),$patch:D,$reset:R,$subscribe($,v={}){const E=du(p,$,v.detached,()=>x()),x=o.run(()=>Ge(()=>s.state.value[e],A=>{(v.flush==="sync"?c:l)&&$({storeId:e,type:ti.direct,events:b},A)},hs({},u,v)));return E},$dispose:N},O=js(M);s._s.set(e,O);const L=(s._a&&s._a.runWithContext||Tv)(()=>s._e.run(()=>(o=Qd()).run(()=>t({action:S}))));for(const $ in L){const v=L[$];if(vt(v)&&!Nv(v)||ss(v))i||(_&&xv(v)&&(vt(v)?v.value=_[$]:kl(v,_[$])),s.state.value[e][$]=v);else if(typeof v=="function"){const E=S(v,$);L[$]=E,r.actions[$]=v}}return hs(O,L),hs(tt(O),L),Object.defineProperty(O,"$state",{get:()=>s.state.value[e],set:$=>{D(v=>{hs(v,$)})}}),s._p.forEach($=>{hs(O,o.run(()=>$({store:O,app:s._a,pinia:s,options:r})))}),_&&i&&n.hydrate&&n.hydrate(O.$state,_),l=!0,c=!0,O}/*! #__NO_SIDE_EFFECTS__ */function Es(e,t,n){let s;const a=typeof t=="function";s=a?n:t;function i(o,r){const u=Im();return o=o||(u?ha(hp,null):null),o&&Oo(o),o=mp,o._s.has(e)||(a?bp(e,t,s,o):Cv(e,s,o)),o._s.get(e)}return i.$id=e,i}const Rv="modulepreload",Iv=function(e){return"/"+e},pu={},Ov=function(t,n,s){let a=Promise.resolve();if(n&&n.length>0){let o=function(l){return Promise.all(l.map(c=>Promise.resolve(c).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),u=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));a=o(n.map(l=>{if(l=Iv(l),l in pu)return;pu[l]=!0;const c=l.endsWith(".css"),p=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${p}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Rv,c||(g.as="script"),g.crossOrigin="",g.href=l,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((b,_)=>{g.addEventListener("load",b),g.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(o){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=o,window.dispatchEvent(r),!r.defaultPrevented)throw o}return a.then(o=>{for(const r of o||[])r.status==="rejected"&&i(r.reason);return t().catch(i)})},_p="",Mv=3e4;window.addEventListener("unhandledrejection",e=>{console.error("[API] Unhandled rejection:",e.reason)});async function ze(e,t,n,{timeoutMs:s=Mv,signal:a}={}){const i={method:e,headers:{},credentials:"include"};n!==void 0&&(i.headers["Content-Type"]="application/json",i.body=JSON.stringify(n));const o=new AbortController,r=setTimeout(()=>{o.abort(new DOMException(`no answer in ${Math.round(s/1e3)}s`,"TimeoutError"))},s);let u=null;a&&(a.aborted?o.abort(a.reason):(u=()=>o.abort(a.reason),a.addEventListener("abort",u,{once:!0})));let l;try{l=await fetch(`${_p}${t}`,{...i,signal:o.signal})}catch(c){throw o.signal.aborted&&o.signal.reason?o.signal.reason:c}finally{clearTimeout(r),u&&a.removeEventListener("abort",u)}if(l.status===401){try{const{useAuthStore:p}=await Ov(async()=>{const{useAuthStore:b}=await Promise.resolve().then(()=>Yb);return{useAuthStore:b}},void 0),g=p();g.user=null}catch{}const c=await l.text().catch(()=>"");throw new Error(`${e} ${t} → 401: ${c}`)}if(!l.ok){const c=await l.text().catch(()=>"");throw new Error(`${e} ${t} → ${l.status}: ${c}`)}return l.status===204?null:l.json()}function Lv(){return ze("GET","/auth/me")}function $v(e){return ze("PATCH","/auth/me",e)}function Dv(){return ze("POST","/auth/logout")}function Pv(){return ze("GET","/agents/profiles")}function gu({limit:e=30,offset:t=0,profileId:n=null,search:s=null,special:a=null}={}){const i=new URLSearchParams({limit:String(e),offset:String(t)});return n&&i.set("profile_id",n),s&&i.set("search",s),a!=null&&i.set("special",String(a)),ze("GET",`/sessions?${i.toString()}`)}function or(e,t){return ze("GET",`/sessions/${e}/meta`,void 0,t)}function Bv(e){return ze("GET",`/sessions/${e}/info`)}function Mi(e,t=null,n=200,s){const a=new URLSearchParams({limit:String(n)});return t!=null&&a.set("before_seq",String(t)),ze("GET",`/sessions/${e}/messages/history?${a.toString()}`,void 0,s)}function Fv(e){return ze("POST","/sessions",{profile_id:e})}function Uv(e){return ze("DELETE",`/sessions/${e}`)}function Gv(e,t){return ze("PATCH",`/sessions/${e}/pin`,{pinned:t})}function Hv(e,t){return ze("PATCH",`/sessions/${e}/name`,{name:t})}function zv(e){return ze("POST",`/sessions/${e}/stop`)}function Kv(e){return ze("POST",`/sessions/${e}/generate-name`,void 0,{timeoutMs:12e4})}function qv(e){return ze("GET",`/sessions/${e}/content`)}function Vv(e){return ze("POST",`/sessions/${e}/share`)}function Wv(e){return ze("GET",`/shared/${encodeURIComponent(e)}`)}function Yv(e,t=null,n=150){const s=new URLSearchParams({limit:String(n)});return t!=null&&s.set("before_seq",String(t)),ze("GET",`/shared/${encodeURIComponent(e)}/messages?${s.toString()}`)}function jv(e){return ze("GET",`/sessions/${e}/tasks`)}function Zv(e){return ze("GET",`/eval/feedback/${e}`)}function Xv(e,t,n){return ze("POST","/eval/feedback",{session_id:e,message_index:t,rating:n})}function Qv(e){return ze("GET",`/sessions/${e}/files`)}async function Jv(e,t){const n=new FormData;n.append("file",t);const s=await fetch(`${_p}/sessions/${e}/files`,{method:"POST",credentials:"include",body:n});if(!s.ok){const a=await s.text().catch(()=>"");throw new Error(`Upload failed: ${s.status}: ${a}`)}return s.json()}function eb(e){return ze("GET",`/sessions/${e}/recall`)}function yp(e){return ze("DELETE",`/sessions/${e}/recall`)}function kp(e){return ze("POST",`/sessions/${e}/recall/skip`)}function tb(){return ze("GET","/api-tokens")}function nb(e){return ze("POST","/api-tokens",{name:e})}function sb(e){return ze("DELETE",`/api-tokens/${e}`)}function ab(){return ze("GET","/synapse-targets")}function ib(e,t){return ze("POST","/synapse-targets",{token_ref:e,secret:t})}function ob(e){return ze("DELETE",`/synapse-targets/${e}`)}function rb(){return ze("GET","/synapse-settings")}function lb(e){return ze("PUT","/synapse-settings",e)}function mu(e=20,t="reaction"){return ze("GET",`/synapse-settings/versions?limit=${e}&doc=${t}`)}function cb(){return ze("GET","/mcp-keys")}function ub(e,t){return ze("PUT",`/mcp-keys/${e}`,{key:t})}function db(e){return ze("DELETE",`/mcp-keys/${e}`)}function fb(){return ze("POST","/admin/tools/reload")}function pb(){return ze("GET","/push/vapid-key")}function gb(e){return ze("POST","/push/subscribe",e)}function mb(e){return ze("DELETE","/push/subscribe",{endpoint:e})}function hb({kind:e=null,q:t=null,area:n=null,tag:s=null}={}){const a=new URLSearchParams;e&&a.set("kind",e),t&&a.set("q",t),n&&a.set("area",n),s&&a.set("tag",s);const i=a.toString();return ze("GET",`/skills${i?`?${i}`:""}`)}function vb(e){return ze("GET",`/skills/${encodeURIComponent(e)}`)}function bb(e){return ze("POST","/skills",e)}function _b(e,t){return ze("PUT",`/skills/${encodeURIComponent(e)}`,t)}function yb(e){return ze("DELETE",`/skills/${encodeURIComponent(e)}`)}function kb(e,t=30){return ze("GET",`/skills/${encodeURIComponent(e)}/versions?limit=${t}`)}function wb(e){return ze("GET",`/skills/proposals/${encodeURIComponent(e)}`)}const xn=Es("sessions",()=>{const t=F([]),n=F(!1),s=F(!1),a=F(!0),i=F(0),o=F(null),r=F(""),u=F(!1),l=F(null),c=F(!1),p=F(!1),g=F({}),b=new Map;let _=0;const y=new Map;function D(V,Y){V==null||!Y||g.value[V]!==Y&&(g.value[V]=Y)}function R(V){for(const Y of V)D(Y.session_id,Y.name)}async function N(V=null){const Y={limit:30,offset:0,profileId:u.value?null:V,search:u.value?r.value:null,special:!!p.value},te=JSON.stringify({profileId:V,...Y}),q=y.get(te);if(q)return q;const j=(async()=>{const he=++_;o.value=V,n.value=!0;try{const Oe=await gu(Y),Pe=Array.isArray(Oe)?Oe:Oe.items,nt=new Set(Pe.map(X=>X.session_id));for(const X of nt)b.delete(X);const He=new Map(t.value.map(X=>[X.session_id,X])),Be=Pe.map(X=>{const ye=He.get(X.session_id);return ye?(Object.assign(ye,X),ye):X});if(!u.value&&!p.value)for(const X of t.value){const ye=b.get(X.session_id);if(ye===void 0||nt.has(X.session_id)||he>ye||V!=null&&X.profile_id!==V)continue;const De=Be.findIndex(dt=>!dt.pinned);Be.splice(De===-1?Be.length:De,0,X)}t.value=Be,R(t.value),a.value=Array.isArray(Oe)?!1:Oe.has_more,i.value=Array.isArray(Oe)?Pe.length:Oe.next_offset,u.value&&(l.value={query:r.value,items:[...Pe],hasMore:a.value,nextOffset:i.value})}finally{n.value=!1}})();y.set(te,j);try{await j}finally{y.delete(te)}}async function S(){if(!(n.value||s.value||!a.value)){s.value=!0;try{const V=await gu({limit:30,offset:i.value,profileId:u.value?null:o.value,search:u.value?r.value:null,special:!!p.value}),Y=Array.isArray(V)?V:V.items,te=new Set(t.value.map(q=>q.session_id));t.value=[...t.value,...Y.filter(q=>!te.has(q.session_id))],R(t.value),a.value=Array.isArray(V)?!1:V.has_more,i.value=Array.isArray(V)?t.value.length:V.next_offset,u.value&&(l.value={query:r.value,items:[...t.value],hasMore:a.value,nextOffset:i.value})}finally{s.value=!1}}}function M(V){r.value=V,u.value=V.length>0}function O(){r.value&&(u.value=!0,l.value&&l.value.query===r.value?(t.value=l.value.items,a.value=l.value.hasMore,i.value=l.value.nextOffset):N())}function B(){r.value="",u.value=!1,l.value=null}function L(){u.value=!1}async function $(V){const Y=await Fv(V);b.set(Y.session_id,_);const te=t.value.findIndex(j=>!j.pinned),q=te===-1?t.value.length:te;return t.value.splice(q,0,{session_id:Y.session_id,profile_id:Y.profile_id,created_at:Y.created_at,last_active:Y.created_at,message_count:0,preview:"",pinned:!1}),i.value+=1,Y}async function v(V){await Uv(V),b.delete(V),t.value=t.value.filter(Y=>Y.session_id!==V),i.value=Math.max(0,i.value-1)}async function E(V,Y){await Gv(V,Y);const te=t.value.find(q=>q.session_id===V);te&&(te.pinned=Y),t.value.sort((q,j)=>(j.pinned?1:0)-(q.pinned?1:0))}function x(V,Y){const te=t.value.find(q=>q.session_id===V);te&&(te.has_pending_recall=Y)}function A(V,Y){const te=t.value.find(q=>q.session_id===V);te&&(te.preview=Y)}function P(V,Y){D(V,Y);const te=t.value.find(q=>q.session_id===V);te&&(te.name=Y)}const z=W(()=>c.value?t.value.filter(V=>V.has_pending_recall):t.value);return{nameById:g,sessions:t,filteredSessions:z,loading:n,loadingMore:s,hasMore:a,currentProfileId:o,searchQuery:r,searchActive:u,hasPendingRecallFilter:c,showSpecial:p,fetchSessions:N,fetchMoreSessions:S,rememberName:D,createSession:$,deleteSession:v,pinSession:E,updatePreview:A,updateName:P,updateRecallStatus:x,setSearch:M,restoreSearch:O,clearSearch:B,exitSearch:L,searchCache:l}}),wi=Es("profiles",()=>{const e=F([]),t=F(null),n=F(!1);async function s(){n.value=!0;try{e.value=await Pv(),e.value.length&&!t.value&&(t.value=e.value[0].id)}finally{n.value=!1}}function a(i){return e.value.find(o=>o.id===i)??null}return{profiles:e,selectedProfileId:t,loading:n,fetchProfiles:s,getProfile:a}});function Sb(){return{currentId:F(null),currentProfileId:F(null),messages:F([]),streaming:F(!1),pendingImages:F([]),pendingFiles:F([]),artifacts:F([]),files:F([]),contextTokens:F(0),maxContextTokens:F(0),servedModel:F(null),servedTarget:F(null),servedFallback:F(!1),wsConnected:F(!1),wsReconnecting:F(!1),loading:F(!1),loadError:F(null),loadErrorSessionId:F(null),imagesProcessing:F(0),awaitingStream:F(!1),streamingMsg:mf(null),replayMode:F(!1),scrollToMessageIndex:F(null),recall:F(null),terminals:F({}),backgroundTasks:F({}),toolIndex:new Map,viewedImages:F([]),_viewedImageKeys:new Set,_terminalTaskIds:new Set,archiveLoading:F(!1),archiveHasMore:F(!1),archiveNextBefore:F(null),historyCount:F(0),archiveExtended:F(!1)}}function Eb(e){const{messages:t,viewedImages:n,_viewedImageKeys:s}=e;function a(u){for(const l of u)!l||s.has(l)||(s.add(l),n.value.push(l))}function i(u){var g,b,_,y,D,R,N;const l=[];let c=0;const p=S=>{var O;const M=u[S];return((O=M==null?void 0:M.metadata)==null?void 0:O.display_index)??S};for(;ctypeof B=="string"&&B.startsWith("data:")?B:`data:image/jpeg;base64,${String(B??"")}`);if((y=(_=S.content)==null?void 0:_.startsWith)!=null&&y.call(_,"[Image loaded via")&&O.length){a(O),c++;continue}l.push({id:`h_${M}`,role:"user",text:S.content??"",images:O,files:S.files??[],time:S.created_at??null,rawIndices:[M],isRecall:S.is_recall??!1}),c++;continue}if(S.role==="assistant"){const O=c,B=M,L=[];let $=null,v="",E=null;for(;c=u.length||u[c].role!=="assistant")break}}if($||L.length||v){const x=`h_${B}`;let A=null,P=null,z=null;for(let V=O;Vp(O+Y))})}continue}c++}return l}function o(u,l,c,{queued:p=!1}={}){const g={id:`user_${Date.now()}`,role:"user",text:u,images:[...l],files:[...c],time:new Date().toISOString(),queued:p,animate:!0};return t.value.push(g),t.value[t.value.length-1]}function r(u){var l;if(u!=null&&u.proposal_id)for(const c of t.value)for(const p of c.tools||[])p.kind==="ui_component"&&p.component==="skill_proposal"&&((l=p.payload)==null?void 0:l.proposal_id)===u.proposal_id&&(p.payload.status=u.status,p.payload.skill_id=u.skill_id??null,p.payload.error=u.error||"")}return{_addViewedImage:a,buildMessageList:i,appendUserMessage:o,onProposalDecided:r}}function Tb(e){const{currentId:t}=e;function n(a){t.value&&(a?localStorage.setItem(`draft:${t.value}`,a):localStorage.removeItem(`draft:${t.value}`))}function s(a){return localStorage.getItem(`draft:${a}`)??""}return{saveDraft:n,loadDraft:s}}function Ab(e){const{currentId:t,artifacts:n,files:s,messages:a}=e;let i=null,o=null,r=null;async function u(b=t.value){if(!b){n.value=[];return}i=b;try{const{content:_=[]}=await qv(b);i===b&&(n.value=_)}catch{i===b&&(n.value=[])}}async function l(b=t.value){if(!b){s.value=[];return}o=b;try{const{files:_=[]}=await Qv(b);o===b&&(s.value=_)}catch{o===b&&(s.value=[])}}function c(b){if(!(b!=null&&b.filename))return;const _=b.id||b.filename,y=n.value.findIndex(R=>(R.id||R.filename)===_),D={...b};y===-1?n.value.unshift(D):n.value.splice(y,1,{...n.value[y],...D})}async function p(b){var y,D;const _=a.value;r=b;try{const{feedback:R=[]}=await Zv(b);if(r!==b||a.value!==_||!R.length)return;const N=new Map(R.map(S=>[S.message_index,S.rating]));for(const S of a.value){if(S.role!=="assistant")continue;const M=(D=(y=S.id)==null?void 0:y.startsWith)!=null&&D.call(y,"h_")?Number(S.id.slice(2)):NaN;Number.isInteger(M)&&N.has(M)&&(S.rating=N.get(M))}}catch{}}async function g(b,_){var N,S;if(!t.value||!b)return;const y=(S=(N=b.id)==null?void 0:N.startsWith)!=null&&S.call(N,"h_")?Number(b.id.slice(2)):NaN;if(!Number.isInteger(y))return;const D=b.rating===_?0:_,R=b.rating??0;b.rating=D;try{await Xv(t.value,y,D)}catch(M){throw b.rating=R,M}}return{fetchArtifacts:u,fetchFiles:l,upsertArtifact:c,mergeFeedback:p,rateMessage:g}}function xb(e){const{currentId:t,recall:n}=e;let s=null;async function a(u=t.value){if(!u){n.value=null;return}s=u;try{const l=await eb(u);s===u&&(n.value=(l==null?void 0:l.recall)??null)}catch{s===u&&(n.value=null)}}async function i(){if(!t.value)return!1;try{return await yp(t.value),n.value=null,xn().updateRecallStatus(t.value,!1),!0}catch(u){return console.error("cancel recall failed",u),!1}}async function o(){if(!t.value)return!1;try{return await kp(t.value),await a(),!0}catch(u){return console.error("skip recall failed",u),!1}}function r(u){if(!u.session_id)return;const l=xn(),c=u.status==="pending";l.updateRecallStatus(u.session_id,c),u.session_id===t.value&&(c?a(u.session_id):n.value=null)}return{loadRecall:a,cancelRecall:i,skipRecall:o,onRecallUpdate:r}}function Nb(e){const{currentId:t,backgroundTasks:n,_terminalTaskIds:s,toolIndex:a}=e;async function i(r=t.value){if(!r){n.value={};return}let u=[];try{u=(await jv(r)).tasks??[]}catch{return}if(t.value!==r)return;const l={};for(const c of u)l[c.task_id]={taskId:c.task_id,tool:c.tool,status:c.status,startedAt:c.started_at??null,finishedAt:c.finished_at??null,argsSummary:c.args_summary??"",preview:c.result_preview??"",subagentTokens:c.subagent_tokens??null},c.status!=="running"&&s.add(c.task_id);for(const c of Object.values(n.value))l[c.taskId]=c;n.value=l}function o(r){const u=r.task_id;if(u&&!(r.session_id&&t.value&&r.session_id!==t.value)){if(r.parent_tool_call_id){const l=a.get(r.parent_tool_call_id);if(l){const c=l.steps[l.steps.length-1];(c==null?void 0:c.kind)==="task_update"&&c.status===r.status&&c.preview===(r.result_preview??"")||l.steps.push({kind:"task_update",taskId:u,tool:r.tool,status:r.status,preview:r.result_preview??""}),r.subagent_tokens!=null&&(l.subagentTokens=r.subagent_tokens)}}if(r.status!=="running"){s.add(u);const l=n.value[u];l&&(n.value={...n.value,[u]:{...l,status:r.status,preview:r.result_preview??l.preview,finishedAt:r.finished_at??l.finishedAt??null,subagentTokens:r.subagent_tokens??l.subagentTokens??null}})}else!s.has(u)&&!n.value[u]&&(n.value={...n.value,[u]:{taskId:u,tool:r.tool,status:r.status,startedAt:r.started_at??null,finishedAt:null,argsSummary:r.args_summary??"",preview:"",subagentTokens:null}})}}return{fetchTasks:i,onTaskUpdate:o}}const Cb=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]),Rb=new Set(["write","append","edit","edit_lines","insert","mkdir","move","copy","delete","rm","cp","mv"]);function Ib({state:e,content:t,recall:n,messageHelpers:s}){const{messages:a,streamingMsg:i,toolIndex:o,terminals:r,currentId:u,recall:l}=e,{upsertArtifact:c,fetchFiles:p,fetchArtifacts:g}=t,{loadRecall:b}=n,{_addViewedImage:_}=s;function y(O){for(let B=O.tools.length-1;B>=0;B--){const L=O.tools[B];if(L.kind==="tool"&&L.name==="spawn_agent")return L}}function D(O){var $,v;const B=i.value;if(!B)return;const L={kind:"tool",id:`tool_${Date.now()}`,toolCallId:O.tool_call_id??null,name:O.tool,args:O.args,result:null,success:null,pending:!0,startedAt:Date.now(),isSubagent:O.is_subagent??!1,steps:[],terminalName:O.tool==="terminal"&&(($=O.args)==null?void 0:$.terminal_name)||null};if(L.parentMsg=B,O.is_subagent){const E=y(B);if(E){E.steps.push(L),L.toolCallId&&o.set(L.toolCallId,E.steps[E.steps.length-1]);return}}if(B.tools.push(L),L.toolCallId&&o.set(L.toolCallId,B.tools[B.tools.length-1]),O.tool==="terminal"&&((v=O.args)==null?void 0:v.action)==="open"){const E=O.args.terminal_name;if(E){const x=r.value[E]||{};r.value={...r.value,[E]:{...x,name:E,description:O.args.description||"",command:O.args.command||"",background:O.args.background||!1,output:x.output||"",closed:!1}}}}}function R(O){var L,$;if((L=O.metadata)!=null&&L.is_image&&(($=O.metadata)!=null&&$.base64)&&_([O.metadata.data_url??`data:image/jpeg;base64,${O.metadata.base64}`]),O.is_subagent&&!O.tool_call_id){const v=i.value??S(),E=v?y(v):null;if(E)for(let x=E.steps.length-1;x>=0;x--){const A=E.steps[x];if(A.kind==="tool"&&A.name===O.tool&&A.pending){N(A,O);return}}}let B=O.tool_call_id?o.get(O.tool_call_id)??null:null;if(!B&&!O.tool_call_id){const v=i.value;if(v)for(let E=v.tools.length-1;E>=0;E--){const x=v.tools[E];if(x.kind==="tool"&&x.name===O.tool&&x.pending){B=x;break}}}B||(B=M(O)),B&&N(B,O)}function N(O,B){var L,$,v,E,x;{if(O.result=B.result,O.success=B.success!==!1,O.pending=!1,B.metadata&&(O.metadata=B.metadata),O.success&&((L=B.metadata)!=null&&L.ui_component)){const A=O.parentMsg??i.value??S();A&&!O.isSubagent&&A.tools.push({kind:"ui_component",component:B.metadata.ui_component.component??"",payload:B.metadata.ui_component.payload??{}})}if(B.tool==="content_publish"&&O.success&&B.metadata&&c(B.metadata),Cb.has(B.tool)&&O.success&&u.value){const A=typeof O.args=="object"?($=O.args)==null?void 0:$.action:null;Rb.has(A)&&p(u.value),["write","edit","edit_lines"].includes(A)&&g(u.value)}if((B.tool==="terminal"||B.tool==="code_exec")&&O.success&&u.value&&p(u.value),B.tool==="terminal"&&O.success&&u.value){const A=typeof O.args=="object"?(v=O.args)==null?void 0:v.action:null,P=(E=O.args)==null?void 0:E.terminal_name;if(B.metadata){if(A==="open"||A==="status"){if(P){const z=r.value[P]||{};r.value={...r.value,[P]:{...z,...B.metadata,name:P,closed:!1}}}}else if(A==="list"&&Array.isArray(B.metadata.terminals))for(const z of B.metadata.terminals){if(!z.name)continue;const V=r.value[z.name]||{};r.value={...r.value,[z.name]:{...V,...z,closed:!1}}}else if(A==="close"&&P){const z=r.value[P]||{};r.value={...r.value,[P]:{...z,closed:!0,closeReason:"explicit"}}}}}if(B.tool==="schedule_recall"&&O.success&&u.value&&(b(u.value),xn().updateRecallStatus(u.value,!0)),B.tool==="manage_recall"&&O.success&&u.value){const A=(x=O.args)==null?void 0:x.action;A==="cancel"?(l.value=null,xn().updateRecallStatus(u.value,!1)):A==="skip"&&b(u.value)}}}function S(){for(let O=a.value.length-1;O>=0;O--){const B=a.value[O];if(B.role==="assistant"&&Array.isArray(B.tools))return B}return null}function M(O){const B=i.value??S();if(!B)return null;const L={kind:"tool",id:`tool_${Date.now()}`,toolCallId:O.tool_call_id??null,name:O.tool,args:null,result:null,success:null,pending:!1,isSubagent:O.is_subagent??!1,steps:[]};if(L.parentMsg=B,O.is_subagent){const v=y(B);if(v){v.steps.push(L);const E=v.steps[v.steps.length-1];return L.toolCallId&&o.set(L.toolCallId,E),E}}B.tools.push(L);const $=B.tools[B.tools.length-1];return L.toolCallId&&o.set(L.toolCallId,$),$}return{_lastSpawnCard:y,onToolStarted:D,onToolCall:R,_applyToolResult:N,_lastAssistantMsg:S,_synthesizeToolCard:M}}function Ob(e){const{terminals:t,streamingMsg:n}=e;function s(o){const r=o.terminal_name;if(!r)return;const u=t.value[r]||{};t.value={...t.value,[r]:{...u,name:r,closed:!1}}}function a(o){const r=o.terminal_name;if(!r)return;const u=t.value[r]||{output:""},l={...u,output:(u.output||"")+(o.delta||"")};t.value={...t.value,[r]:l};const c=n.value;if(c)for(let p=c.tools.length-1;p>=0;p--){const g=c.tools[p];if(g.kind==="tool"&&g.name==="terminal"&&g.terminalName===r){g.terminalOutput=l.output;break}}}function i(o){const r=o.terminal_name;if(!r)return;const l={...t.value[r]||{},closed:!0,closeReason:o.reason||"unknown"};t.value={...t.value,[r]:l};const c=n.value;if(c)for(let p=c.tools.length-1;p>=0;p--){const g=c.tools[p];if(g.kind==="tool"&&g.name==="terminal"&&g.terminalName===r&&g.pending){g.pending=!1,g.success=o.reason!=="error";break}}}return{onTerminalOpened:s,onTerminalOutput:a,onTerminalClosed:i}}const Mb={"app.titleSettings":"Navi — Settings","artifacts.panelLabel":"Session artifacts","artifacts.resize":"Resize artifacts","artifacts.close":"Close artifacts","artifacts.closeDetails":"Close details","artifacts.tabArtifacts":"Artifacts","artifacts.tabLinks":"Links","artifacts.tabFiles":"Files","artifacts.tabBackgrounds":"Backgrounds","artifacts.viewedImages":"Viewed images","artifacts.viewedImageAlt":"Image viewed by Navi {n}","artifacts.emptyArtifacts":"No published files","artifacts.emptyLinks":"No links found yet","artifacts.emptyFiles":"No files in session directory","artifacts.emptyBackgrounds":"No background tasks or terminals","artifacts.openPreview":"Open preview","artifacts.openFullscreen":"Open fullscreen","artifacts.loadingPreview":"Loading preview...","artifacts.textPreviewLimited":"Showing the first {size} — open the file to read the rest.","artifacts.openRaw":"Open raw file","artifacts.viewFile":"Open in viewer","artifacts.play":"Play","artifacts.pause":"Pause","artifacts.seek":"Playback position","artifacts.mute":"Mute","artifacts.unmute":"Unmute","artifacts.volume":"Volume","artifacts.audioFailed":"This file could not be played.","artifacts.showPreview":"Show preview","artifacts.showSource":"Show source","artifacts.copyFileLink":"Copy file link","artifacts.copyAllLinks":"Copy all links","artifacts.openAllLinks":"Open all links","artifacts.refreshFiles":"Refresh files","artifacts.linksInSession":{one:"{n} link in session",other:"{n} links in session"},"artifacts.loadingSource":"Loading source...","artifacts.previewUnavailable":"Preview unavailable","artifacts.sourceFailed":"Failed to load source: {error}","artifacts.latestProgress":"Latest progress","artifacts.noOutput":"No output yet — it arrives as a note next turn.","artifacts.terminal":"Terminal","artifacts.directory":"Directory","artifacts.toolAndAge":"{tool} · {age} ago","artifacts.statusRunning":"Running","artifacts.statusDone":"Done","artifacts.statusFailed":"Failed","artifacts.statusStopped":"Stopped","artifacts.statusBusy":"Busy","artifacts.statusIdle":"Idle","artifacts.statusClosed":"Closed","sidebar.newChat":"New Chat","sidebar.searchPlaceholder":"Search conversations...","sidebar.results":{one:"{n} result",other:"{n} results"},"sidebar.conversations":"Conversations","sidebar.serviceSessions":"Service sessions","sidebar.pendingRecallsOnly":"Pending recalls only","sidebar.serviceSessionsLabel":"Service (Synapse) sessions","sidebar.search":"Search","sidebar.refresh":"Refresh","sidebar.loadingConversations":"Loading conversations...","sidebar.noConversations":"No conversations yet","sidebar.noMatch":"No conversations match the current filter","sidebar.pinned":"Pinned","sidebar.recallPending":"Scheduled recall pending","sidebar.serviceSession":"Service session (Synapse reaction)","sidebar.cancelRecall":"Cancel recall","sidebar.skipNext":"Skip next","sidebar.pin":"Pin","sidebar.unpin":"Unpin","sidebar.noAuthTitle":"Authorization is disabled","sidebar.localMode":"Local mode","sidebar.localAvatar":"local","sidebar.admin":"Admin","sidebar.openProfile":"Open profile in gnexus-auth","sidebar.avatar":"avatar","sidebar.logout":"Logout","sidebar.login":"Login","common.error":"Something went wrong","common.menu":"Menu","common.save":"Save","common.cancel":"Cancel","common.close":"Close","common.create":"Create","common.add":"Add","common.done":"Done","common.never":"Never","common.always":"Always","common.you":"You","common.revoke":"Revoke","common.copyToClipboard":"Copy to clipboard","common.copy":"Copy","common.copied":"Copied!","common.task":"task","common.toolsCount":{one:"{n} tool",other:"{n} tools"},"common.download":"Download","common.yes":"Yes","common.no":"No","common.notAvailable":"N/A","common.result":"Result","common.liveOutput":"Live output","common.delete":"Delete","common.minutesAgo":{one:"{n}m ago",other:"{n}m ago"},"common.pullToRefresh":"Pull to refresh","common.releaseToRefresh":"Release to refresh","common.refreshing":"Refreshing...","common.justNow":"just now","messages.thinking":"Thinking","messages.thinkingStatus":"Thinking...","messages.plan":"Plan","messages.arguments":"Arguments","messages.running":"running","messages.toolInterrupted":"Interrupted — the run ended before this tool reported a result","messages.starting":"starting","messages.runningTool":"Running {tool}...","messages.preparingNext":"Preparing next action...","messages.showAllTools":"Show all tools","messages.hideOlderTools":"Hide older tools","messages.useful":"Useful","messages.notUseful":"Not useful","messages.scheduledRecall":"Scheduled recall","messages.synapseEvent":"Synapse event","messages.openFile":"Open file","messages.untitledContent":"Content","messages.unknownUiComponent":"Unknown UI component: {name}","messages.jsonItems":{one:"{n} item",other:"{n} items"},"messages.jsonKeys":{one:"{n} key",other:"{n} keys"},"messages.contextSummary":"Context summary","messages.compressingContext":"Compressing context…","messages.contextCompressed":"Context compressed","messages.compressionCounts":{one:"({before} → {after} message)",other:"({before} → {after} messages)"},"chat.rename":"Rename","chat.scheduledRecall":"Scheduled {type} recall at {time}","chat.recallOnce":"once","chat.recallRecurring":"recurring","chat.recallImmediate":"immediate","chat.recallDetailsHint":"Open recall details","chat.recallInfoTitle":"Scheduled recall","chat.recallType":"Type","chat.recallAt":"Scheduled for","chat.recallAdded":"Created","chat.recallWhen":"Fires","chat.recallIn":"in {interval}","chat.recallDueNow":"any moment now","chat.recallUnderAMinute":"in under a minute","chat.recallInterval":"Repeats","chat.recallComment":"Comment","chat.recallMessage":"System message","chat.recallGone":"This recall is no longer scheduled.","chat.recallCancel":"Cancel call","chat.recallCancelFailed":"Could not cancel the recall","chat.recallSkipFailed":"Could not skip the next recall","chat.backupModel":"Backup: {model}","chat.backupModelTitle":"The route's primary is unavailable — {model} on {target} is answering","chat.sessionInfo":"Session info","chat.moreActions":"More actions","chat.deleteSession":"Delete session","chat.infoLoading":"Loading…","chat.infoError":"Could not load session info","chat.infoRefresh":"Refresh","chat.infoModelSection":"Model and server","chat.infoSessionSection":"Session","chat.infoLiveSection":"Connection and generation","chat.infoRouteSection":"Route chain","chat.infoPrimary":"primary","chat.infoBackup":"backup","chat.infoNoRoute":"This deployment has no llm.json routes — the profile's model list is used.","chat.infoRoute":"Route","chat.infoWindow":"Context window","chat.infoTokens":"tokens","chat.infoConfiguredModels":"Configured models","chat.infoSessionId":"Session ID","chat.infoProfile":"Profile","chat.infoCreated":"Created","chat.infoLastActive":"Last active","chat.infoMessages":"Messages","chat.infoArchive":"Archive","chat.infoArchiveValue":"up to #{seq}","chat.infoContext":"Context","chat.infoCompression":"Compression","chat.infoCompressionValue":"at {pct}%, keep last {keep}, summary up to {max} tokens","chat.infoCompressionOff":"off","chat.infoRecall":"Scheduled recall","chat.infoRecallEvery":"every {interval}","chat.infoRecallMinutes":"{n} min","chat.infoRecallHours":"{n} h","chat.infoRecallDays":"{n} d","chat.infoRunning":"Generation","chat.infoRunningYes":"running","chat.infoRunningNo":"idle","chat.infoClients":"Connected clients","chat.infoWs":"WebSocket","chat.infoWsConnected":"connected","chat.infoWsReconnecting":"reconnecting…","chat.infoWsOffline":"not connected","chat.infoTasks":"Background tasks","chat.infoNone":"none","chat.infoStateOk":"ok","chat.infoStateDegraded":"degraded","chat.infoStateMissing":"missing","chat.connectionLost":"Connection lost. Retrying in background…","chat.retry":"Retry","chat.nothingOpen":"Nothing open","chat.startConversation":"Select a conversation or start a new one","chat.attachFiles":"Attach files","chat.messagePlaceholder":"Message Navi…","chat.stopGeneration":"Stop generation","chat.sendEnter":"Send (Enter)","chat.sending":"Sending…","chat.removeAttachment":"Remove","chat.attachment":"attachment","chat.loadingOlder":"Loading older messages…","chat.loadFailed":"Could not load the session: {error}","chat.loadTimeout":"the server did not answer in time","chat.sendFailed":"Not sent — the connection queue is full","chat.scrollToBottom":"Scroll to bottom","chat.queuedBadge":"Queued — will run after this turn","chat.sendQueued":"Send — it runs after the current turn","chat.messagePlaceholderBusy":"Navi is working…","ui.welcomeTitle":"Welcome to Navi","ui.tagline":"Your personal AI assistant","ui.loginWithGnexus":"Login with GNEXUS","ui.offline":"No network — the interface is open from cache, messages are not sent","ui.confirmTitle":"Requires confirmation","ui.photo":"Photo","ui.preview":"Preview","ui.loadImageFailed":"Failed to load image","ui.reply":"Reply","ui.replyToSelection":"Reply to selection","ui.overview":"Overview","ui.description":"Description","ui.details":"Details","ui.moreCards":"+{n} more","ui.submitted":"Submitted","ui.formOffline":"No connection — the form cannot be sent right now","ui.proposalNew":"New protocol","ui.proposalReplaces":"New version","ui.proposalAccept":"Add to catalog","ui.proposalReject":"Reject","ui.proposalAccepted":"Added to the catalog","ui.proposalRejected":"Rejected","ui.proposalInCatalog":"In the catalog","ui.proposalLoading":"Loading the proposal…","ui.proposalNotFound":"The proposal could not be loaded","ui.proposalOffline":"No connection — cannot decide right now","ui.proposalTriggers":"When to use it","ui.proposalPreconditions":"Preconditions","ui.proposalSteps":"Steps","ui.proposalPostChecks":"After each step","ui.proposalFallbacks":"If something goes wrong","ui.proposalContext":"Context","ui.proposalOnDeviation":"If the run goes off plan","ui.proposalOnBlocked":"If it cannot be completed","ui.proposalOnAlreadyDone":"If a step is already done","ui.submit":"Submit","ui.fieldRequired":"{field} is required","ui.invalidEmail":"Enter a valid email address","ui.invalidUrl":"Enter a valid http:// or https:// URL","ui.notANumber":"Must be a number","ui.minValue":"Minimum value is {n}","ui.maxValue":"Maximum value is {n}","ui.minLength":{one:"Minimum length is {n} character",other:"Minimum length is {n} characters"},"ui.maxLength":{one:"Maximum length is {n} character",other:"Maximum length is {n} characters"},"ui.invalidFormat":"Invalid format","ui.notificationsPromptTitle":"Turn on notifications","ui.notificationsPromptText":"Navi can let you know when a reply is ready — even if this tab is closed.","ui.notificationsPromptAllow":"Turn on","ui.notificationsPromptLater":"Not now","col.name":"Name","col.key":"Key","col.created":"Created","col.lastUsed":"Last used","col.tool":"Tool","col.status":"Status","col.started":"Started","col.finished":"Finished","col.subagentTokens":"Sub-agent tokens","col.pid":"PID","col.command":"Command","col.cwd":"CWD","col.uptime":"Uptime","col.background":"Background","col.reason":"Reason","confirm.revokeKey":'Revoke API key "{name}"? This cannot be undone.',"confirm.revokeTarget":'Revoke Synapse target "{target}"? This cannot be undone.',"confirm.mcpResetAdmin":'Reset the key for "{server}" to the shared default?',"confirm.deleteSession":"Delete this conversation?","confirm.mcpReset":'Remove your key for "{server}"? The server stops being connected for you.',"profile.languageAuto":"Auto (from account)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Language saved","toast.keyCreateFailed":"Failed to create key","toast.keyRevoked":"API key revoked","toast.keyRevokeFailed":"Failed to revoke key","toast.notificationsDenied":"Permission denied","toast.notificationsAllowApp":"Allow notifications in the system app settings.","toast.notificationsAllowBrowser":"Allow notifications in the browser site settings.","toast.notificationsUnavailable":"Push unavailable","toast.notificationsUnavailableText":"The server does not accept push subscriptions right now.","toast.notificationsFailed":"Push error","toast.mcpKeySaved":"Key saved for {server}","toast.mcpKeySaveFailed":"Failed to save key","toast.mcpKeyReset":"Key reset for {server}","toast.mcpKeyResetFailed":"Failed to reset key","toast.synapseTargetAdded":"Target added","toast.synapseTargetAddFailed":"Failed to add target","toast.synapseTargetRevoked":"Target revoked","toast.synapseTargetRevokeFailed":"Failed to revoke target","toast.reactionsLoadFailed":"Failed to load reaction settings","toast.bgTaskStarted":"Background task started","toast.bgTaskFinished":"Background task finished","toast.mcpConnected":"MCP server connected","toast.mcpDisconnected":"MCP server disconnected","toast.saveFailed":"Failed to save","toast.instructionsSaved":"Instructions saved","toast.instructionsFailed":"Failed to save instructions","toast.toolsReloaded":{one:"Reloaded {n} tool",other:"Reloaded {n} tools"},"toast.toolsReloadErrors":"Reload finished with errors — see the panel","toast.toolsReloadFailed":"Failed to reload tools","settings.title":"Settings","settings.sectionsLabel":"Settings sections","settings.tabApp":"App","settings.tabAccount":"Account","settings.tabNotifications":"Notifications","settings.tabSynapse":"Synapse","settings.tabSkills":"Skills","settings.tabProtocols":"Protocols","settings.tabMcp":"MCP","settings.languageToolbar":"Interface language","settings.languageDescription":"Navi follows the language of your gnexus-auth account by default; a choice here overrides it for Navi only. Auto goes back to the account language.","settings.languageDescriptionOpen":"Sign-in is switched off on this Navi, so the language is kept in this browser only.","settings.appTitle":"App","settings.appDescription":"Navi is a web app, but it can live on your device like a native one — either installed into this browser, or as the Android app, which wraps this same interface. They are not exclusive: the Android app is worth having on a phone, the installed web app everywhere else.","settings.appInstallTitle":"Install in this browser","settings.appInstallText":"Installing puts Navi in its own window with no address bar, adds an icon to your dock or home screen, and caches the interface so the app opens instantly and still shows your sessions offline. It also enables notifications for finished replies — including when the tab is closed.","settings.appAndroidAlert":"You are reading this inside the Android app, which is already installed. To update it, download the APK below and install it over the old one.","settings.appInstalledAlert":"Installed — Navi is running in its own window, not in a browser tab.","settings.appInstallAction":"Install","settings.appInstallHint":"Your browser will ask you to confirm.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"tap","settings.appIosShare":"Share, then","settings.appIosAddHome":"Add to Home Screen","settings.appIosNote":"Notifications there need iOS 16.4 or newer and work only in the installed app, not in a Safari tab.","settings.appBrowserChrome":"Chrome or Edge:","settings.appChromeClick":"click the install icon at the right end of the address bar, or open the","settings.appChromeMenu":"menu and choose","settings.appChromeInstall":"Install Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"open the","settings.appAndroidMenu":"menu and choose","settings.appAndroidInstall":"Install app","settings.appAndroidAlso":"(sometimes “Add to Home screen”)","settings.appHttpsBefore":"Browsers only offer this over HTTPS or on localhost — over a plain","settings.appHttpsAfter":"address the option never appears, and neither do offline mode and notifications.","settings.appAndroidTitle":"Android app","settings.appAndroidText":"The same Navi in a native shell. What a browser tab cannot give you: notifications while the phone is locked — a background service keeps the connection open — plus a native camera and photo picker, and links that open in your normal browser. Sessions, profiles and settings are the server's, so the app and the web client stay in step.","settings.appApkMissing":"The APK is not published on this server — build it with","settings.appVersion":"Version","settings.appSize":"Size","settings.appBuilt":"Built","settings.appDownloadApk":"Download APK","settings.appAndroidStep1":"Open the downloaded file on the phone. Android will ask whether to allow installing apps from this source — allow it.","settings.appAndroidStep2":"On first launch the app asks for your Navi address. Enter","settings.appAndroidStep2Tail":", then log in through the browser when it opens; the app returns on its own.","settings.appAndroidStep3":"A newer APK installs over the old one and keeps your settings. You would only have to uninstall first if the signing key ever changed.","settings.keysTitle":"API Keys","settings.keysCreate":"New Key","settings.keysDescription":"API keys allow headless clients (scripts, voice assistants, IoT devices) to authenticate without browser-based OAuth.","settings.keysNoAuthWarning":"Authorization is currently disabled. Any keys created here are tied to the local anonymous user and grant full access to this Navi instance.","settings.keysLoading":"Loading API keys","settings.keysEmpty":"No API keys yet. Create one to get started.","settings.keyCreateTitle":"Create API Key","settings.keyNamePlaceholder":"e.g. Smart Watch, Automation Script","settings.keyCreatedTitle":"API Key Created","settings.keyCopyNow":"Copy this token now — it will","settings.keyCopyNowStrong":"never be shown again","settings.notificationsTitle":"Notifications","settings.notificationsBridgeText":"The app keeps its connection open in the background and raises a native notification when a reply finishes while Navi is minimized. Notifications stop if you close the app itself.","settings.notificationsWebText":"Push notifications let Navi ping you when a reply is ready — even when the tab is closed. You get one notification per finished reply, but only when no Navi window is open on that session.","settings.notificationsUnsupported":"This browser does not support web push (needs HTTPS, a service worker and the Push API). Try Chrome or a recent Firefox.","settings.notificationsRowTitle":"Push notifications","settings.notificationsOnBackground":"Enabled — background mode holds the connection open when minimized.","settings.notificationsOn":"Enabled — this device is subscribed.","settings.notificationsBlockedApp":"Blocked in the system app settings.","settings.notificationsBlockedBrowser":"Blocked in browser site settings.","settings.notificationsOff":"Disabled.","settings.mcpTitle":"MCP servers","settings.mcpDescriptionAdmin":"Everything connected to your profiles. A server that offers a personal key slot runs under your own key — leave yours unset and it keeps using the shared key configured on this Navi.","settings.mcpDescription":"Everything connected to your profiles. A server that offers a personal key slot needs","settings.mcpDescriptionStrong":"your own key","settings.mcpDescriptionTail":"— until you save one it is not connected for you at all. Servers without a slot are shared and always available.","settings.mcpLoading":"Loading MCP servers","settings.mcpEmpty":"No MCP servers are connected to any profile on this Navi.","settings.mcpKeySet":"Personal key set {date} — used instead of the shared key ({location}).","settings.mcpKeyAbsentAdmin":"No personal key — the shared key from the config is used ({location}).","settings.mcpKeyAbsent":"No personal key — this server is not connected for you.","settings.mcpNoSlot":"No personal key slot — runs on the shared config.","settings.mcpKeyPlaceholder":"••• saved — enter a new key to replace","settings.mcpKeyPlaceholderNew":"Paste your key","settings.mcpReset":"Reset to default","settings.synapseTargetsTitle":"Synapse deliveries","settings.synapseTargetAdd":"Add Target","settings.synapseTargetsDescription":"Deliveries from the GNEXUS Synapse notification hub arrive at this Navi's webhook and are verified against a per-user target secret. Create the target in the Synapse admin panel, then register it here to let Navi accept its deliveries.","settings.synapseTargetsLoading":"Loading targets","settings.synapseTargetsEmpty":"No Synapse targets registered. Add one to start receiving deliveries.","settings.synapseTargetColRef":"Token ref","settings.synapseTargetAddTitle":"Add Synapse Target","settings.synapseTargetRefPlaceholder":"e.g. navi-main (as in the Synapse admin panel)","settings.synapseTargetSecret":"Delivery secret","settings.synapseTargetSecretPlaceholder":"s2s secret of the Synapse target","settings.synapseTargetHintBefore":"In the Synapse admin panel create a target pointing at","settings.synapseTargetHintAfter":"of this Navi and paste its secret here. Navi uses it to verify that deliveries really came from Synapse.","settings.reactionsTitle":"Synapse reactions","settings.reactionsDescription":'When a GNEXUS Synapse event is delivered, Navi can react to it on its own: a dispatcher picks a profile by your reaction instructions, the work runs in a hidden service session, and you can browse that session later via the sidebar "Service sessions" toggle.',"settings.reactionsNotConfigured":"Outgoing Synapse events are off: this navi is not configured as an event source. Options that send events to Synapse stay disabled — incoming events, reactions and app delivery keep working.","settings.reactionsLoading":"Loading reaction settings","settings.reactionsEnable":"Enable reactions","settings.reactionsOn":"Delivered events start a background reaction run.","settings.reactionsOff":"Events are accepted and logged, but Navi does nothing.","settings.reactionsNotify":"Notify me about finished reactions","settings.reactionsOnlyFailures":"Only failures","settings.reactionsPushAlways":"Push on every finished run.","settings.reactionsPushFailures":"Push only when a run ended with errors.","settings.reactionsPushNever":"No completion push.","settings.reactionsTarget":"Where notifications go","settings.reactionsTargetNote":"Applies to Navi's notify tool and to reaction-completion pushes.","settings.reactionsTargetApp":"App only","settings.reactionsTargetAppSynapse":"App + Synapse","settings.reactionsTargetSynapse":"Synapse only","settings.reactionsInstructions":"Reaction instructions","settings.reactionsInstructionsNote":"Guidance the dispatcher uses to pick a profile and to shape the task. Both you and Navi can edit it; every change is recorded in the history below.","settings.reactionsInstructionsPlaceholder":'e.g. "Todo events from gntodo go to the developer profile; junk mail goes nowhere."',"settings.reactionsInstructionsSave":"Save instructions","settings.reactionsHistory":"Edit history","settings.reactionsSessionTtl":"Continue a conversation","settings.reactionsSessionTtlNote":"When the dispatcher names a conversation in the event, Navi reuses that session instead of starting a new one — as long as it was active within this window. 0 turns continuation off.","settings.reactionsSessionTtlUnit":"minutes of inactivity","settings.dispatcherInstructions":"Route events to profiles","settings.dispatcherInstructionsNote":"Guidance for the dispatcher alone: which kind of event goes to which profile, and what counts as one conversation (the conversation key). It never reaches the session or the task.","settings.dispatcherInstructionsPlaceholder":'e.g. "tg.* → assistant, key = chat id; gntodo.* → developer, never continue."',"settings.dispatcherInstructionsSave":"Save dispatcher instructions","settings.adminToolsTitle":"Tools","settings.adminToolsReloading":"Reloading…","settings.adminToolsReload":"Reload tools","settings.adminToolsDescriptionBefore":"Re-reads the tools in","settings.adminToolsDescriptionAfter":", the context providers, and reconnects every MCP server — no restart, no downtime. New tools are callable from the next message of every session. Admin only: it swaps the toolset all profiles resolve against.","settings.adminToolsLoaded":{one:"{n} tool loaded",other:"{n} tools loaded"},"settings.adminToolsRegistry":"({n} in the registry)","settings.adminToolsMissing":"names {names} — no such tool exists, so it is dropped from every profile.","settings.adminToolsMcpFailed":"MCP reload failed: {error}","settings.adminToolsMcpTools":{one:"{n} MCP tool",other:"{n} MCP tools"},"settings.adminToolsProviders":{one:"{n} context provider",other:"{n} context providers"},"settings.skillsAddSkill":"New skill","settings.skillsAddProtocol":"New protocol","settings.skillsSearchHint":"Search","settings.skillsSearchLabel":"Search by name, trigger or tag","settings.skillsHintSkills":"What the agent knows how to do. It loads a skill when one of its triggers matches.","settings.skillsHintProtocols":"Step-by-step procedures with preconditions, checks after each step, and what to do when a step goes wrong.","settings.skillsCountSkills":{one:"{n} skill",other:"{n} skills"},"settings.skillsCountProtocols":{one:"{n} protocol",other:"{n} protocols"},"settings.skillsFilterArea":"Area","settings.skillsFilterAreaAll":"All areas","settings.skillsCatalog":"Catalog","settings.skillsLoading":"Loading","settings.skillsEmptySkills":"No skills yet. Tell the agent what it should remember how to do, or add one here.","settings.skillsEmptyProtocols":"No protocols yet. Ask the agent to propose one, or add one here.","settings.skillsPersonal":"personal","settings.skillsShared":"shared","settings.skillsAreaHome":"home","settings.skillsAreaInfrastructure":"infrastructure","settings.skillsAreaWorkflows":"workflows","settings.skillsAreaGeneral":"general","settings.skillsNewSkill":"New skill","settings.skillsNewProtocol":"New protocol","settings.skillsReadOnly":"read-only","settings.skillsEdit":"Edit","settings.skillsBack":"Back to the list","settings.skillsEditorLabel":"Document","settings.skillsEditorPlaceholder":"Markdown document with a YAML front matter block","settings.skillsVisibility":"Visibility","settings.skillsPlaceholder":"Pick an entry on the left to read it.","settings.skillsParseFailed":"The stored document cannot be parsed — showing its source.","settings.skillsUpdated":"updated {when}","settings.skillsHistory":"Edit history","settings.skillsHistoryEmpty":"No saved versions yet.","settings.skillsUnknownEditor":"unknown","settings.skillsCreated":"Created","settings.skillsSaved":"Saved","settings.skillsDeleted":"Deleted","settings.skillsDeleteConfirm":"Delete “{name}”? Its edit history goes with it.","share.title":"Share chat","share.intro":"A read-only link opens this chat exactly as it looks here — no account, no way to reply, no other chats and no artifacts.","share.creating":"Creating the link…","share.linkLabel":"Read-only link","share.warning":"The link never expires and cannot be revoked. Anyone who has it can read this chat.","share.killHint":"Deleting the chat closes the link for everyone.","share.notYet":"The link is created only when you ask for it.","share.create":"Create link","share.regenerate":"Show link","share.createFailed":"Could not create the link.","share.emptyChat":"There is nothing to share yet — send a message first.","share.readOnly":"Read-only","share.untitled":"Shared chat","share.notFoundTitle":"This chat is no longer available","share.notFoundText":"The link may be broken, or the chat was deleted.","share.loadOlder":"Load earlier messages","share.empty":"Nothing to show","share.footer":"Read-only copy of a Navi chat"},Lb={"app.titleSettings":"Navi — Налаштування","artifacts.panelLabel":"Артефакти сесії","artifacts.resize":"Змінити ширину панелі","artifacts.close":"Закрити артефакти","artifacts.closeDetails":"Закрити подробиці","artifacts.tabArtifacts":"Артефакти","artifacts.tabLinks":"Посилання","artifacts.tabFiles":"Файли","artifacts.tabBackgrounds":"Фонові","artifacts.viewedImages":"Переглянуті зображення","artifacts.viewedImageAlt":"Зображення, яке переглянув Navi {n}","artifacts.emptyArtifacts":"Немає опублікованих файлів","artifacts.emptyLinks":"Посилань поки не знайдено","artifacts.emptyFiles":"У каталозі сесії немає файлів","artifacts.emptyBackgrounds":"Немає фонових завдань і терміналів","artifacts.openPreview":"Відкрити перегляд","artifacts.openFullscreen":"Відкрити на весь екран","artifacts.loadingPreview":"Завантаження перегляду...","artifacts.textPreviewLimited":"Показано перші {size} — відкрийте файл, щоб прочитати решту.","artifacts.openRaw":"Відкрити вихідний файл","artifacts.viewFile":"Відкрити в переглядачі","artifacts.play":"Відтворити","artifacts.pause":"Пауза","artifacts.seek":"Позиція відтворення","artifacts.mute":"Вимкнути звук","artifacts.unmute":"Увімкнути звук","artifacts.volume":"Гучність","artifacts.audioFailed":"Не вдалося відтворити файл.","artifacts.showPreview":"Показати перегляд","artifacts.showSource":"Показати вихідний код","artifacts.copyFileLink":"Скопіювати посилання на файл","artifacts.copyAllLinks":"Скопіювати всі посилання","artifacts.openAllLinks":"Відкрити всі посилання","artifacts.refreshFiles":"Оновити файли","artifacts.linksInSession":{one:"{n} посилання в сесії",few:"{n} посилання в сесії",many:"{n} посилань у сесії"},"artifacts.loadingSource":"Завантаження вихідного коду...","artifacts.previewUnavailable":"Перегляд недоступний","artifacts.sourceFailed":"Не вдалося завантажити вихідний код: {error}","artifacts.latestProgress":"Хід виконання","artifacts.noOutput":"Виводу ще немає — він надійде нотаткою наступного ходу.","artifacts.terminal":"Термінал","artifacts.directory":"Каталог","artifacts.toolAndAge":"{tool} · {age} тому","artifacts.statusRunning":"Виконується","artifacts.statusDone":"Готово","artifacts.statusFailed":"Збій","artifacts.statusStopped":"Зупинено","artifacts.statusBusy":"Зайнятий","artifacts.statusIdle":"Вільний","artifacts.statusClosed":"Закрито","sidebar.newChat":"Новий чат","sidebar.searchPlaceholder":"Пошук за розмовами...","sidebar.results":{one:"{n} результат",few:"{n} результати",many:"{n} результатів"},"sidebar.conversations":"Розмови","sidebar.serviceSessions":"Службові сесії","sidebar.pendingRecallsOnly":"Лише із запланованим поверненням","sidebar.serviceSessionsLabel":"Службові сесії (Synapse)","sidebar.search":"Пошук","sidebar.refresh":"Оновити","sidebar.loadingConversations":"Завантаження розмов...","sidebar.noConversations":"Розмов ще немає","sidebar.noMatch":"Жодна розмова не відповідає фільтру","sidebar.pinned":"Закріплено","sidebar.recallPending":"Заплановано повернення до розмови","sidebar.serviceSession":"Службова сесія (реакція Synapse)","sidebar.cancelRecall":"Скасувати повернення","sidebar.skipNext":"Пропустити наступний","sidebar.pin":"Закріпити","sidebar.unpin":"Відкріпити","sidebar.noAuthTitle":"Авторизацію вимкнено","sidebar.localMode":"Локальний режим","sidebar.localAvatar":"локальний","sidebar.admin":"Адмін","sidebar.openProfile":"Відкрити профіль у gnexus-auth","sidebar.avatar":"аватар","sidebar.logout":"Вийти","sidebar.login":"Увійти","common.error":"Щось пішло не так","common.menu":"Меню","common.save":"Зберегти","common.cancel":"Скасувати","common.close":"Закрити","common.create":"Створити","common.add":"Додати","common.done":"Готово","common.never":"Ніколи","common.always":"Завжди","common.you":"Ви","common.revoke":"Відкликати","common.copyToClipboard":"Копіювати в буфер обміну","common.copy":"Копіювати","common.copied":"Скопійовано!","common.task":"завдання","common.toolsCount":{one:"{n} інструмент",few:"{n} інструменти",many:"{n} інструментів"},"common.download":"Завантажити","common.yes":"Так","common.no":"Ні","common.notAvailable":"Н/Д","common.result":"Результат","common.liveOutput":"Живий вивід","common.delete":"Видалити","common.minutesAgo":{one:"{n} хв тому",few:"{n} хв тому",many:"{n} хв тому"},"common.pullToRefresh":"Потягніть, щоб оновити","common.releaseToRefresh":"Відпустіть, щоб оновити","common.refreshing":"Оновлення...","common.justNow":"щойно","messages.thinking":"Роздум","messages.thinkingStatus":"Розмірковує…","messages.plan":"План","messages.arguments":"Аргументи","messages.running":"виконується","messages.toolInterrupted":"Перервано — прогін завершився, не дочекавшись результату інструмента","messages.starting":"запуск","messages.runningTool":"Виконується {tool}…","messages.preparingNext":"Готує наступну дію…","messages.showAllTools":"Показати всі інструменти","messages.hideOlderTools":"Сховати попередні інструменти","messages.useful":"Корисно","messages.notUseful":"Не корисно","messages.scheduledRecall":"Заплановане повернення","messages.synapseEvent":"Подія Synapse","messages.openFile":"Відкрити файл","messages.untitledContent":"Вміст","messages.unknownUiComponent":"Невідомий UI-компонент: {name}","messages.jsonItems":{one:"{n} елемент",few:"{n} елементи",many:"{n} елементів"},"messages.jsonKeys":{one:"{n} ключ",few:"{n} ключі",many:"{n} ключів"},"messages.contextSummary":"Підсумок контексту","messages.compressingContext":"Стискання контексту…","messages.contextCompressed":"Контекст стиснуто","messages.compressionCounts":{one:"({before} → {after} повідомлення)",few:"({before} → {after} повідомлення)",many:"({before} → {after} повідомлень)"},"chat.rename":"Перейменувати","chat.scheduledRecall":"Заплановано {type} повернення на {time}","chat.recallOnce":"разове","chat.recallRecurring":"повторюване","chat.recallImmediate":"негайне","chat.recallDetailsHint":"Подробиці про виклик","chat.recallInfoTitle":"Відкладений виклик","chat.recallType":"Тип","chat.recallAt":"Заплановано на","chat.recallAdded":"Створено","chat.recallWhen":"Спрацює","chat.recallIn":"через {interval}","chat.recallDueNow":"ось-ось","chat.recallUnderAMinute":"менше ніж за хвилину","chat.recallInterval":"Повтор","chat.recallComment":"Коментар","chat.recallMessage":"Системне повідомлення","chat.recallGone":"Цей виклик більше не запланований.","chat.recallCancel":"Скасувати виклик","chat.recallCancelFailed":"Не вдалося скасувати виклик","chat.recallSkipFailed":"Не вдалося пропустити наступний виклик","chat.backupModel":"Резерв: {model}","chat.backupModelTitle":"Основна модель недоступна — відповідає {model} на {target}","chat.sessionInfo":"Інформація про сесію","chat.moreActions":"Інші дії","chat.deleteSession":"Видалити сесію","chat.infoLoading":"Завантажую…","chat.infoError":"Не вдалося завантажити інформацію про сесію","chat.infoRefresh":"Оновити","chat.infoModelSection":"Модель і сервер","chat.infoSessionSection":"Сесія","chat.infoLiveSection":"З’єднання і генерація","chat.infoRouteSection":"Ланцюг маршруту","chat.infoPrimary":"основна","chat.infoBackup":"резерв","chat.infoNoRoute":"У цьому розгортанні немає маршрутів llm.json — використовується список моделей профілю.","chat.infoRoute":"Маршрут","chat.infoWindow":"Вікно контексту","chat.infoTokens":"ток.","chat.infoConfiguredModels":"Налаштовані моделі","chat.infoSessionId":"ID сесії","chat.infoProfile":"Профіль","chat.infoCreated":"Створена","chat.infoLastActive":"Остання активність","chat.infoMessages":"Повідомлень","chat.infoArchive":"Архів","chat.infoArchiveValue":"до #{seq}","chat.infoContext":"Контекст","chat.infoCompression":"Компресія","chat.infoCompressionValue":"поріг {pct}%, зберігати останніх {keep}, підсумок до {max} ток.","chat.infoCompressionOff":"вимкнена","chat.infoRecall":"Відкладений виклик","chat.infoRecallEvery":"кожні {interval}","chat.infoRecallMinutes":"{n} хв","chat.infoRecallHours":"{n} год","chat.infoRecallDays":"{n} дн","chat.infoRunning":"Генерація","chat.infoRunningYes":"триває","chat.infoRunningNo":"немає","chat.infoClients":"Підключень до сесії","chat.infoWs":"WebSocket","chat.infoWsConnected":"підключено","chat.infoWsReconnecting":"перепідключення…","chat.infoWsOffline":"не підключено","chat.infoTasks":"Фонові завдання","chat.infoNone":"немає","chat.infoStateOk":"ok","chat.infoStateDegraded":"збій","chat.infoStateMissing":"немає моделі","chat.connectionLost":"Зв’язок втрачено. Перепідключаюся у фоні…","chat.retry":"Повторити","chat.nothingOpen":"Нічого не відкрито","chat.startConversation":"Виберіть розмову або почніть нову","chat.attachFiles":"Прикріпити файли","chat.messagePlaceholder":"Повідомлення для Navi…","chat.stopGeneration":"Зупинити генерацію","chat.sendEnter":"Надіслати (Enter)","chat.sending":"Надсилання…","chat.removeAttachment":"Прибрати","chat.attachment":"вкладення","chat.loadingOlder":"Завантажую раніші повідомлення…","chat.loadFailed":"Не вдалося завантажити сесію: {error}","chat.loadTimeout":"сервер не відповів вчасно","chat.sendFailed":"Не надіслано — черга з’єднання переповнена","chat.scrollToBottom":"Прокрутити вниз","chat.queuedBadge":"У черзі — виконається після цього ходу","chat.sendQueued":"Надіслати — виконається після поточного ходу","chat.messagePlaceholderBusy":"Наві працює…","ui.welcomeTitle":"Ласкаво просимо до Navi","ui.tagline":"Ваш персональний ШІ-асистент","ui.loginWithGnexus":"Увійти через GNEXUS","ui.offline":"Немає мережі — інтерфейс відкрито з кешу, повідомлення не надсилаються","ui.confirmTitle":"Потрібне підтвердження","ui.photo":"Фото","ui.preview":"Перегляд","ui.loadImageFailed":"Не вдалося завантажити зображення","ui.reply":"Відповісти","ui.replyToSelection":"Відповісти на виділене","ui.overview":"Огляд","ui.description":"Опис","ui.details":"Деталі","ui.moreCards":"+{n} ще","ui.submitted":"Надіслано","ui.formOffline":"Немає з’єднання — форму зараз не надіслати","ui.proposalNew":"Новий протокол","ui.proposalReplaces":"Нова версія","ui.proposalAccept":"Додати до каталогу","ui.proposalReject":"Відхилити","ui.proposalAccepted":"Додано до каталогу","ui.proposalRejected":"Відхилено","ui.proposalInCatalog":"У каталозі","ui.proposalLoading":"Завантаження пропозиції…","ui.proposalNotFound":"Не вдалося завантажити пропозицію","ui.proposalOffline":"Немає з’єднання — рішення зараз неможливе","ui.proposalTriggers":"Коли запускати","ui.proposalPreconditions":"Передумови","ui.proposalSteps":"Кроки","ui.proposalPostChecks":"Після кожного кроку","ui.proposalFallbacks":"Якщо щось піде не так","ui.proposalContext":"Контекст","ui.proposalOnDeviation":"Якщо план порушено","ui.proposalOnBlocked":"Якщо завершити неможливо","ui.proposalOnAlreadyDone":"Якщо крок уже виконано","ui.submit":"Надіслати","ui.fieldRequired":"Поле «{field}» обов’язкове","ui.invalidEmail":"Введіть коректну адресу електронної пошти","ui.invalidUrl":"Введіть коректну адресу http:// або https://","ui.notANumber":"Має бути числом","ui.minValue":"Мінімальне значення — {n}","ui.maxValue":"Максимальне значення — {n}","ui.minLength":{one:"Мінімальна довжина — {n} символ",few:"Мінімальна довжина — {n} символи",many:"Мінімальна довжина — {n} символів"},"ui.maxLength":{one:"Максимальна довжина — {n} символ",few:"Максимальна довжина — {n} символи",many:"Максимальна довжина — {n} символів"},"ui.invalidFormat":"Невірний формат","ui.notificationsPromptTitle":"Увімкнути сповіщення","ui.notificationsPromptText":"Navi може повідомляти, коли відповідь готова, — навіть якщо вкладку закрито.","ui.notificationsPromptAllow":"Увімкнути","ui.notificationsPromptLater":"Не зараз","col.name":"Назва","col.key":"Ключ","col.created":"Створено","col.lastUsed":"Останнє використання","col.tool":"Інструмент","col.status":"Статус","col.started":"Розпочато","col.finished":"Завершено","col.subagentTokens":"Токени під-агента","col.pid":"PID","col.command":"Команда","col.cwd":"Робочий каталог","col.uptime":"Час роботи","col.background":"Фоновий","col.reason":"Причина","confirm.revokeKey":"Відкликати API-ключ «{name}»? Це не можна скасувати.","confirm.revokeTarget":"Відкликати ціль Synapse «{target}»? Це не можна скасувати.","confirm.mcpResetAdmin":"Скинути ключ для «{server}» на спільний за замовчуванням?","confirm.deleteSession":"Видалити цю розмову?","confirm.mcpReset":"Видалити ваш ключ для «{server}»? Сервер перестане бути підключеним для вас.","profile.languageAuto":"Авто (з акаунта)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Мову збережено","toast.keyCreateFailed":"Не вдалося створити ключ","toast.keyRevoked":"API-ключ відкликано","toast.keyRevokeFailed":"Не вдалося відкликати ключ","toast.notificationsDenied":"Дозвіл не надано","toast.notificationsAllowApp":"Дозвольте сповіщення в системних налаштуваннях застосунку.","toast.notificationsAllowBrowser":"Дозвольте сповіщення в налаштуваннях сайту в браузері.","toast.notificationsUnavailable":"Push недоступний","toast.notificationsUnavailableText":"Сервер зараз не приймає підписки на push.","toast.notificationsFailed":"Помилка push","toast.mcpKeySaved":"Ключ збережено для {server}","toast.mcpKeySaveFailed":"Не вдалося зберегти ключ","toast.mcpKeyReset":"Ключ скинуто для {server}","toast.mcpKeyResetFailed":"Не вдалося скинути ключ","toast.synapseTargetAdded":"Ціль додано","toast.synapseTargetAddFailed":"Не вдалося додати ціль","toast.synapseTargetRevoked":"Ціль відкликано","toast.synapseTargetRevokeFailed":"Не вдалося відкликати ціль","toast.reactionsLoadFailed":"Не вдалося завантажити налаштування реакцій","toast.bgTaskStarted":"Фонове завдання запущено","toast.bgTaskFinished":"Фонове завдання завершено","toast.mcpConnected":"MCP-сервер підключено","toast.mcpDisconnected":"MCP-сервер відключено","toast.saveFailed":"Не вдалося зберегти","toast.instructionsSaved":"Інструкції збережено","toast.instructionsFailed":"Не вдалося зберегти інструкції","toast.toolsReloaded":{one:"Перезавантажено {n} інструмент",few:"Перезавантажено {n} інструменти",many:"Перезавантажено {n} інструментів"},"toast.toolsReloadErrors":"Перезавантаження завершилося помилками — дивіться панель","toast.toolsReloadFailed":"Не вдалося перезавантажити інструменти","settings.title":"Налаштування","settings.sectionsLabel":"Розділи налаштувань","settings.tabApp":"Застосунок","settings.tabAccount":"Акаунт","settings.tabNotifications":"Сповіщення","settings.tabSynapse":"Synapse","settings.tabSkills":"Скіли","settings.tabProtocols":"Протоколи","settings.tabMcp":"MCP","settings.languageToolbar":"Мова інтерфейсу","settings.languageDescription":"Стандартно Navi наслідує мову вашого акаунта gnexus-auth; вибір тут перекриває її лише для Navi. «Авто» повертає мову акаунта.","settings.languageDescriptionOpen":"Вхід у цей Navi вимкнено, тому мова зберігається лише в цьому браузері.","settings.appTitle":"Застосунок","settings.appDescription":"Navi — це вебзастосунок, але він може жити на пристрої як звичайний: або встановлений у цей браузер, або як Android-застосунок, що обгортає той самий інтерфейс. Це не взаємовиключні варіанти: на телефоні варто мати Android-застосунок, а всюди інде — встановлений вебзастосунок.","settings.appInstallTitle":"Встановлення в цей браузер","settings.appInstallText":"Встановлення розміщує Navi в окремому вікні без адресного рядка, додає значок у док або на початковий екран і кешує інтерфейс, тож застосунок відкривається миттєво й показує сесії навіть без мережі. Воно ж вмикає сповіщення про готові відповіді — зокрема коли вкладку закрито.","settings.appAndroidAlert":"Ви читаєте це всередині Android-застосунку, і він уже встановлений. Щоб оновити його, завантажте APK нижче й установіть поверх старого.","settings.appInstalledAlert":"Встановлено — Navi працює в окремому вікні, а не у вкладці браузера.","settings.appInstallAction":"Встановити","settings.appInstallHint":"Браузер попросить підтвердити.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"натисніть","settings.appIosShare":"«Поділитися», потім","settings.appIosAddHome":"На початковий екран","settings.appIosNote":"Сповіщення там потребують iOS 16.4 або новішої і працюють лише у встановленому застосунку, а не у вкладці Safari.","settings.appBrowserChrome":"Chrome або Edge:","settings.appChromeClick":"натисніть значок встановлення в правому кінці адресного рядка або відкрийте","settings.appChromeMenu":"меню і виберіть","settings.appChromeInstall":"Установити Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"відкрийте","settings.appAndroidMenu":"меню і виберіть","settings.appAndroidInstall":"Установити застосунок","settings.appAndroidAlso":"(іноді «На головний екран»)","settings.appHttpsBefore":"Браузери пропонують це лише через HTTPS або на localhost — за звичайною адресою","settings.appHttpsAfter":"такої можливості не з’явиться, як і офлайн-режиму зі сповіщеннями.","settings.appAndroidTitle":"Android-застосунок","settings.appAndroidText":"Той самий Navi у нативній оболонці. Те, чого не дасть вкладка браузера: сповіщення при заблокованому телефоні — фонова служба тримає з’єднання відкритим — плюс нативна камера й вибір фото, а посилання відкриваються у звичайному браузері. Сесії, профілі та налаштування живуть на сервері, тож застосунок і вебклієнт не розходяться.","settings.appApkMissing":"APK не опубліковано на цьому сервері — зберіть його командою","settings.appVersion":"Версія","settings.appSize":"Розмір","settings.appBuilt":"Збірка","settings.appDownloadApk":"Завантажити APK","settings.appAndroidStep1":"Відкрийте завантажений файл на телефоні. Android запитає, чи дозволити встановлення застосунків із цього джерела, — дозвольте.","settings.appAndroidStep2":"При першому запуску застосунок запитає адресу Navi. Введіть","settings.appAndroidStep2Tail":", потім увійдіть через браузер, коли він відкриється; застосунок повернеться сам.","settings.appAndroidStep3":"Новіший APK встановлюється поверх старого й зберігає налаштування. Видаляти попередню версію довелося б лише в разі зміни ключа підпису.","settings.keysTitle":"API-ключі","settings.keysCreate":"Новий ключ","settings.keysDescription":"API-ключі дозволяють безголовим клієнтам (скриптам, голосовим помічникам, пристроям IoT) автентифікуватися без OAuth у браузері.","settings.keysNoAuthWarning":"Авторизацію зараз вимкнено. Будь-які створені тут ключі прив’язані до локального анонімного користувача й дають повний доступ до цього примірника Navi.","settings.keysLoading":"Завантаження API-ключів","settings.keysEmpty":"API-ключів ще немає. Створіть перший, щоб почати.","settings.keyCreateTitle":"Створення API-ключа","settings.keyNamePlaceholder":"наприклад, Розумний годинник, Скрипт автоматизації","settings.keyCreatedTitle":"API-ключ створено","settings.keyCopyNow":"Скопіюйте цей токен зараз — він","settings.keyCopyNowStrong":"більше не буде показаний","settings.notificationsTitle":"Сповіщення","settings.notificationsBridgeText":"Застосунок тримає з’єднання відкритим у фоні й показує системне сповіщення, коли відповідь готова, а Navi згорнуто. Якщо закрити сам застосунок, сповіщення припиняться.","settings.notificationsWebText":"Push-сповіщення дають Navi змогу повідомити вас про готову відповідь — навіть коли вкладку закрито. На кожну готову відповідь надходить одне сповіщення, але лише якщо жодне вікно Navi не відкрите на цій сесії.","settings.notificationsUnsupported":"Цей браузер не підтримує web push (потрібні HTTPS, service worker і Push API). Спробуйте Chrome або свіжий Firefox.","settings.notificationsRowTitle":"Push-сповіщення","settings.notificationsOnBackground":"Увімкнено — фоновий режим тримає з’єднання, поки застосунок згорнуто.","settings.notificationsOn":"Увімкнено — цей пристрій підписано.","settings.notificationsBlockedApp":"Заблоковано в системних налаштуваннях застосунку.","settings.notificationsBlockedBrowser":"Заблоковано в налаштуваннях сайту в браузері.","settings.notificationsOff":"Вимкнено.","settings.mcpTitle":"MCP-сервери","settings.mcpDescriptionAdmin":"Усе, що підключено до ваших профілів. Сервер зі слотом особистого ключа працює під вашим ключем — не задавайте свій, і він далі використовуватиме спільний ключ, налаштований на цьому Navi.","settings.mcpDescription":"Усе, що підключено до ваших профілів. Серверу зі слотом особистого ключа потрібен","settings.mcpDescriptionStrong":"ваш власний ключ","settings.mcpDescriptionTail":"— доки ви його не збережете, для вас він не підключений узагалі. Сервери без слота спільні й доступні завжди.","settings.mcpLoading":"Завантаження MCP-серверів","settings.mcpEmpty":"До цього Navi не підключено жодного MCP-сервера в жодному профілі.","settings.mcpKeySet":"Особистий ключ збережено {date} — використовується замість спільного ({location}).","settings.mcpKeyAbsentAdmin":"Особистого ключа немає — використовується спільний ключ із конфігурації ({location}).","settings.mcpKeyAbsent":"Особистого ключа немає — цей сервер для вас не підключено.","settings.mcpNoSlot":"Слота особистого ключа немає — працює на спільній конфігурації.","settings.mcpKeyPlaceholder":"••• збережено — введіть новий ключ, щоб замінити","settings.mcpKeyPlaceholderNew":"Вставте ваш ключ","settings.mcpReset":"Скинути на спільний","settings.synapseTargetsTitle":"Доставки Synapse","settings.synapseTargetAdd":"Додати ціль","settings.synapseTargetsDescription":"Доставки з хаба сповіщень GNEXUS Synapse надходять на вебхук цього Navi й перевіряються за особистим секретом цілі. Створіть ціль в адмін-панелі Synapse, потім зареєструйте її тут, щоб Navi приймав її доставки.","settings.synapseTargetsLoading":"Завантаження цілей","settings.synapseTargetsEmpty":"Жодної цілі Synapse не зареєстровано. Додайте її, щоб почати приймати доставки.","settings.synapseTargetColRef":"Ідентифікатор цілі","settings.synapseTargetAddTitle":"Додавання цілі Synapse","settings.synapseTargetRefPlaceholder":"наприклад, navi-main (як в адмін-панелі Synapse)","settings.synapseTargetSecret":"Секрет доставки","settings.synapseTargetSecretPlaceholder":"s2s-секрет цілі Synapse","settings.synapseTargetHintBefore":"В адмін-панелі Synapse створіть ціль, що вказує на","settings.synapseTargetHintAfter":"цього Navi, і вставте її секрет тут. Navi використовує його, щоб переконатися, що доставки справді надійшли із Synapse.","settings.reactionsTitle":"Реакції Synapse","settings.reactionsDescription":"Коли надходить подія GNEXUS Synapse, Navi може відреагувати сам: диспетчер обирає профіль за вашими інструкціями, робота йде у прихованій службовій сесії, а переглянути її потім можна через перемикач «Службові сесії» в бічній панелі.","settings.reactionsNotConfigured":"Вихідні події до Synapse вимкнено: цей Navi не налаштований як джерело подій. Варіанти, що надсилають події до Synapse, недоступні — приймання подій, реакції та доставка в застосунок працюють.","settings.reactionsLoading":"Завантаження налаштувань реакцій","settings.reactionsEnable":"Увімкнути реакції","settings.reactionsOn":"Події, що надійшли, запускають фоновий прогін реакції.","settings.reactionsOff":"Події приймаються й записуються в журнал, але Navi нічого не робить.","settings.reactionsNotify":"Повідомляти про завершені реакції","settings.reactionsOnlyFailures":"Лише збої","settings.reactionsPushAlways":"Push після кожного завершеного прогону.","settings.reactionsPushFailures":"Push лише коли прогін закінчився помилками.","settings.reactionsPushNever":"Не надсилати push про завершення.","settings.reactionsTarget":"Куди йдуть сповіщення","settings.reactionsTargetNote":"Стосується інструмента notify у Navi та push про завершення реакцій.","settings.reactionsTargetApp":"Лише в застосунок","settings.reactionsTargetAppSynapse":"Застосунок + Synapse","settings.reactionsTargetSynapse":"Лише Synapse","settings.reactionsInstructions":"Інструкції для реакцій","settings.reactionsInstructionsNote":"Вказівки, за якими диспетчер обирає профіль і будує задачу. Їх можете правити і ви, і Navi; кожна зміна потрапляє в історію нижче.","settings.reactionsInstructionsPlaceholder":"наприклад, «Події todo з gntodo йдуть у профіль developer; спам-листи — нікуди».","settings.reactionsInstructionsSave":"Зберегти інструкції","settings.reactionsHistory":"Історія правок","settings.reactionsSessionTtl":"Продовжувати розмову","settings.reactionsSessionTtlNote":"Коли диспетчер називає розмову в події, Navi продовжує ту саму сесію замість нової — якщо вона була активна не пізніше цього строку. 0 вимикає продовження.","settings.reactionsSessionTtlUnit":"хвилин простою","settings.dispatcherInstructions":"Розподіл подій за профілями","settings.dispatcherInstructionsNote":"Вказівки лише для диспетчера: який тип події до якого профілю йде і що вважати однією розмовою (ключ розмови). У сесію та в задачу вони не потрапляють.","settings.dispatcherInstructionsPlaceholder":"наприклад, «tg.* → assistant, ключ = id чату; gntodo.* → developer, не продовжувати ніколи».","settings.dispatcherInstructionsSave":"Зберегти інструкції диспетчеру","settings.adminToolsTitle":"Інструменти","settings.adminToolsReloading":"Перезавантаження…","settings.adminToolsReload":"Перезавантажити інструменти","settings.adminToolsDescriptionBefore":"Перечитує інструменти з","settings.adminToolsDescriptionAfter":", провайдери контексту й перепідключає всі MCP-сервери — без перезапуску й простою. Нові інструменти можна викликати з наступного повідомлення в будь-якій сесії. Лише для адміна: підміняє набір інструментів, з яким працюють усі профілі.","settings.adminToolsLoaded":{one:"завантажено {n} інструмент",few:"завантажено {n} інструменти",many:"завантажено {n} інструментів"},"settings.adminToolsRegistry":"({n} у реєстрі)","settings.adminToolsMissing":"називає {names} — такого інструменту немає, його виключено з усіх профілів.","settings.adminToolsMcpFailed":"Перепідключення MCP не вдалося: {error}","settings.adminToolsMcpTools":{one:"{n} MCP-інструмент",few:"{n} MCP-інструменти",many:"{n} MCP-інструментів"},"settings.adminToolsProviders":{one:"{n} провайдер контексту",few:"{n} провайдери контексту",many:"{n} провайдерів контексту"},"settings.skillsAddSkill":"Новий скіл","settings.skillsAddProtocol":"Новий протокол","settings.skillsSearchHint":"Пошук","settings.skillsSearchLabel":"Пошук за назвою, тригером або тегом","settings.skillsHintSkills":"Те, що агент уміє: скіл завантажується, коли спрацьовує один із його тригерів.","settings.skillsHintProtocols":"Покрокові порядки дій: передумови, перевірки після кроків і що робити, якщо крок пішов не так.","settings.skillsCountSkills":{one:"{n} скіл",few:"{n} скіли",many:"{n} скілів"},"settings.skillsCountProtocols":{one:"{n} протокол",few:"{n} протоколи",many:"{n} протоколів"},"settings.skillsFilterArea":"Область","settings.skillsFilterAreaAll":"Усі області","settings.skillsCatalog":"Каталог","settings.skillsLoading":"Завантажуємо","settings.skillsEmptySkills":"Скілів поки немає. Розкажіть агенту, що він має вміти, або додайте скіл тут.","settings.skillsEmptyProtocols":"Протоколів поки немає. Попросіть агента запропонувати протокол або додайте його тут.","settings.skillsPersonal":"особистий","settings.skillsShared":"спільний","settings.skillsAreaHome":"дім","settings.skillsAreaInfrastructure":"інфраструктура","settings.skillsAreaWorkflows":"робочі процеси","settings.skillsAreaGeneral":"загальне","settings.skillsNewSkill":"Новий скіл","settings.skillsNewProtocol":"Новий протокол","settings.skillsReadOnly":"лише читання","settings.skillsEdit":"Змінити","settings.skillsBack":"До списку","settings.skillsEditorLabel":"Документ","settings.skillsEditorPlaceholder":"Markdown-документ із блоком YAML у фронтматері","settings.skillsVisibility":"Видимість","settings.skillsPlaceholder":"Виберіть запис ліворуч, щоб прочитати його.","settings.skillsParseFailed":"Збережений документ не розбирається — показую вихідний текст.","settings.skillsUpdated":"змінено {when}","settings.skillsHistory":"Історія змін","settings.skillsHistoryEmpty":"Збережених версій поки немає.","settings.skillsUnknownEditor":"невідомо","settings.skillsCreated":"Створено","settings.skillsSaved":"Збережено","settings.skillsDeleted":"Видалено","settings.skillsDeleteConfirm":"Видалити «{name}»? Історія змін зникне разом із записом.","share.title":"Поділитися чатом","share.intro":"Посилання відкриває чат лише для читання — саме в тому вигляді, як він тут. Без акаунта, без можливості відповісти, без списку чатів і артефактів.","share.creating":"Створюю посилання…","share.linkLabel":"Посилання лише для читання","share.warning":"Посилання не спливає, і відкликати його неможливо. Будь-хто, хто його має, прочитає цей чат.","share.killHint":"Видалення чату закриває посилання для всіх.","share.notYet":"Посилання з’явиться, коли ви його попросите.","share.create":"Створити посилання","share.regenerate":"Показати посилання","share.createFailed":"Не вдалося створити посилання.","share.emptyChat":"Поки немає що показати — спершу надішліть повідомлення.","share.readOnly":"Лише читання","share.untitled":"Спільний чат","share.notFoundTitle":"Цей чат більше недоступний","share.notFoundText":"Можливо, посилання хибне або чат видалено.","share.loadOlder":"Завантажити раніші","share.empty":"Тут порожньо","share.footer":"Копія чату Navi лише для читання"},$b={"app.titleSettings":"Navi — Настройки","artifacts.panelLabel":"Артефакты сессии","artifacts.resize":"Изменить ширину панели","artifacts.close":"Закрыть артефакты","artifacts.closeDetails":"Закрыть подробности","artifacts.tabArtifacts":"Артефакты","artifacts.tabLinks":"Ссылки","artifacts.tabFiles":"Файлы","artifacts.tabBackgrounds":"Фоновые","artifacts.viewedImages":"Просмотренные изображения","artifacts.viewedImageAlt":"Изображение, просмотренное Navi {n}","artifacts.emptyArtifacts":"Нет опубликованных файлов","artifacts.emptyLinks":"Ссылок пока не найдено","artifacts.emptyFiles":"В каталоге сессии нет файлов","artifacts.emptyBackgrounds":"Нет фоновых задач и терминалов","artifacts.openPreview":"Открыть просмотр","artifacts.openFullscreen":"Открыть на весь экран","artifacts.loadingPreview":"Загрузка просмотра...","artifacts.textPreviewLimited":"Показаны первые {size} — откройте файл, чтобы прочитать остальное.","artifacts.openRaw":"Открыть исходный файл","artifacts.viewFile":"Открыть в просмотрщике","artifacts.play":"Воспроизвести","artifacts.pause":"Пауза","artifacts.seek":"Позиция воспроизведения","artifacts.mute":"Выключить звук","artifacts.unmute":"Включить звук","artifacts.volume":"Громкость","artifacts.audioFailed":"Не удалось воспроизвести файл.","artifacts.showPreview":"Показать просмотр","artifacts.showSource":"Показать исходник","artifacts.copyFileLink":"Скопировать ссылку на файл","artifacts.copyAllLinks":"Скопировать все ссылки","artifacts.openAllLinks":"Открыть все ссылки","artifacts.refreshFiles":"Обновить файлы","artifacts.linksInSession":{one:"{n} ссылка в сессии",few:"{n} ссылки в сессии",many:"{n} ссылок в сессии"},"artifacts.loadingSource":"Загрузка исходника...","artifacts.previewUnavailable":"Просмотр недоступен","artifacts.sourceFailed":"Не удалось загрузить исходник: {error}","artifacts.latestProgress":"Ход выполнения","artifacts.noOutput":"Вывода пока нет — он придёт заметкой в следующем ходу.","artifacts.terminal":"Терминал","artifacts.directory":"Каталог","artifacts.toolAndAge":"{tool} · {age} назад","artifacts.statusRunning":"Выполняется","artifacts.statusDone":"Готово","artifacts.statusFailed":"Сбой","artifacts.statusStopped":"Остановлен","artifacts.statusBusy":"Занят","artifacts.statusIdle":"Свободен","artifacts.statusClosed":"Закрыт","sidebar.newChat":"Новый чат","sidebar.searchPlaceholder":"Поиск по разговорам...","sidebar.results":{one:"{n} результат",few:"{n} результата",many:"{n} результатов"},"sidebar.conversations":"Разговоры","sidebar.serviceSessions":"Служебные сессии","sidebar.pendingRecallsOnly":"Только с запланированным возвратом","sidebar.serviceSessionsLabel":"Служебные сессии (Synapse)","sidebar.search":"Поиск","sidebar.refresh":"Обновить","sidebar.loadingConversations":"Загрузка разговоров...","sidebar.noConversations":"Разговоров пока нет","sidebar.noMatch":"Ни один разговор не подходит под фильтр","sidebar.pinned":"Закреплён","sidebar.recallPending":"Запланирован возврат к разговору","sidebar.serviceSession":"Служебная сессия (реакция Synapse)","sidebar.cancelRecall":"Отменить возврат","sidebar.skipNext":"Пропустить следующий","sidebar.pin":"Закрепить","sidebar.unpin":"Открепить","sidebar.noAuthTitle":"Авторизация отключена","sidebar.localMode":"Локальный режим","sidebar.localAvatar":"локальный","sidebar.admin":"Админ","sidebar.openProfile":"Открыть профиль в gnexus-auth","sidebar.avatar":"аватар","sidebar.logout":"Выйти","sidebar.login":"Войти","common.error":"Что-то пошло не так","common.menu":"Меню","common.save":"Сохранить","common.cancel":"Отмена","common.close":"Закрыть","common.create":"Создать","common.add":"Добавить","common.done":"Готово","common.never":"Никогда","common.always":"Всегда","common.you":"Вы","common.revoke":"Отозвать","common.copyToClipboard":"Скопировать в буфер обмена","common.copy":"Копировать","common.copied":"Скопировано!","common.task":"задача","common.toolsCount":{one:"{n} инструмент",few:"{n} инструмента",many:"{n} инструментов"},"common.download":"Скачать","common.yes":"Да","common.no":"Нет","common.notAvailable":"Н/Д","common.result":"Результат","common.liveOutput":"Живой вывод","common.delete":"Удалить","common.minutesAgo":{one:"{n} мин назад",few:"{n} мин назад",many:"{n} мин назад"},"common.pullToRefresh":"Потяните, чтобы обновить","common.releaseToRefresh":"Отпустите, чтобы обновить","common.refreshing":"Обновление...","common.justNow":"только что","messages.thinking":"Размышление","messages.thinkingStatus":"Размышляет…","messages.plan":"План","messages.arguments":"Аргументы","messages.running":"выполняется","messages.toolInterrupted":"Прервано — прогон завершился, не дождавшись результата инструмента","messages.starting":"запуск","messages.runningTool":"Выполняется {tool}…","messages.preparingNext":"Готовит следующее действие…","messages.showAllTools":"Показать все инструменты","messages.hideOlderTools":"Скрыть ранние инструменты","messages.useful":"Полезно","messages.notUseful":"Не полезно","messages.scheduledRecall":"Запланированный возврат","messages.synapseEvent":"Событие Synapse","messages.openFile":"Открыть файл","messages.untitledContent":"Содержимое","messages.unknownUiComponent":"Неизвестный UI-компонент: {name}","messages.jsonItems":{one:"{n} элемент",few:"{n} элемента",many:"{n} элементов"},"messages.jsonKeys":{one:"{n} ключ",few:"{n} ключа",many:"{n} ключей"},"messages.contextSummary":"Сводка контекста","messages.compressingContext":"Сжатие контекста…","messages.contextCompressed":"Контекст сжат","messages.compressionCounts":{one:"({before} → {after} сообщение)",few:"({before} → {after} сообщения)",many:"({before} → {after} сообщений)"},"chat.rename":"Переименовать","chat.scheduledRecall":"Запланирован {type} возврат на {time}","chat.recallOnce":"разовый","chat.recallRecurring":"повторяющийся","chat.recallImmediate":"немедленный","chat.recallDetailsHint":"Подробности о вызове","chat.recallInfoTitle":"Отложенный вызов","chat.recallType":"Тип","chat.recallAt":"Запланирован на","chat.recallAdded":"Создан","chat.recallWhen":"Сработает","chat.recallIn":"через {interval}","chat.recallDueNow":"вот-вот","chat.recallUnderAMinute":"меньше чем через минуту","chat.recallInterval":"Повтор","chat.recallComment":"Комментарий","chat.recallMessage":"Системное сообщение","chat.recallGone":"Этот вызов больше не запланирован.","chat.recallCancel":"Отменить вызов","chat.recallCancelFailed":"Не удалось отменить вызов","chat.recallSkipFailed":"Не удалось пропустить следующий вызов","chat.backupModel":"Резерв: {model}","chat.backupModelTitle":"Основная модель недоступна — отвечает {model} на {target}","chat.sessionInfo":"Информация о сессии","chat.moreActions":"Другие действия","chat.deleteSession":"Удалить сессию","chat.infoLoading":"Загружаю…","chat.infoError":"Не удалось загрузить информацию о сессии","chat.infoRefresh":"Обновить","chat.infoModelSection":"Модель и сервер","chat.infoSessionSection":"Сессия","chat.infoLiveSection":"Соединение и генерация","chat.infoRouteSection":"Цепочка маршрута","chat.infoPrimary":"основная","chat.infoBackup":"резерв","chat.infoNoRoute":"В этом развёртывании нет маршрутов llm.json — используется список моделей профиля.","chat.infoRoute":"Маршрут","chat.infoWindow":"Окно контекста","chat.infoTokens":"ток.","chat.infoConfiguredModels":"Настроенные модели","chat.infoSessionId":"ID сессии","chat.infoProfile":"Профиль","chat.infoCreated":"Создана","chat.infoLastActive":"Последняя активность","chat.infoMessages":"Сообщений","chat.infoArchive":"Архив","chat.infoArchiveValue":"до #{seq}","chat.infoContext":"Контекст","chat.infoCompression":"Компрессия","chat.infoCompressionValue":"порог {pct}%, хранить последних {keep}, сводка до {max} ток.","chat.infoCompressionOff":"выключена","chat.infoRecall":"Отложенный вызов","chat.infoRecallEvery":"каждые {interval}","chat.infoRecallMinutes":"{n} мин","chat.infoRecallHours":"{n} ч","chat.infoRecallDays":"{n} дн","chat.infoRunning":"Генерация","chat.infoRunningYes":"идёт","chat.infoRunningNo":"нет","chat.infoClients":"Подключений к сессии","chat.infoWs":"WebSocket","chat.infoWsConnected":"подключён","chat.infoWsReconnecting":"переподключение…","chat.infoWsOffline":"не подключён","chat.infoTasks":"Фоновые задачи","chat.infoNone":"нет","chat.infoStateOk":"ok","chat.infoStateDegraded":"сбой","chat.infoStateMissing":"нет модели","chat.connectionLost":"Связь потеряна. Переподключаюсь в фоне…","chat.retry":"Повторить","chat.nothingOpen":"Ничего не открыто","chat.startConversation":"Выберите разговор или начните новый","chat.attachFiles":"Прикрепить файлы","chat.messagePlaceholder":"Сообщение для Navi…","chat.stopGeneration":"Остановить генерацию","chat.sendEnter":"Отправить (Enter)","chat.sending":"Отправка…","chat.removeAttachment":"Убрать","chat.attachment":"вложение","chat.loadingOlder":"Загружаю более ранние сообщения…","chat.loadFailed":"Не удалось загрузить сессию: {error}","chat.loadTimeout":"сервер не ответил вовремя","chat.sendFailed":"Не отправлено — очередь соединения переполнена","chat.scrollToBottom":"Прокрутить вниз","chat.queuedBadge":"В очереди — выполнится после этого хода","chat.sendQueued":"Отправить — выполнится после текущего хода","chat.messagePlaceholderBusy":"Нави работает…","ui.welcomeTitle":"Добро пожаловать в Navi","ui.tagline":"Ваш персональный ИИ-ассистент","ui.loginWithGnexus":"Войти через GNEXUS","ui.offline":"Нет сети — интерфейс открыт из кэша, сообщения не отправляются","ui.confirmTitle":"Требуется подтверждение","ui.photo":"Фото","ui.preview":"Просмотр","ui.loadImageFailed":"Не удалось загрузить изображение","ui.reply":"Ответить","ui.replyToSelection":"Ответить на выделенное","ui.overview":"Обзор","ui.description":"Описание","ui.details":"Детали","ui.moreCards":"+{n} ещё","ui.submitted":"Отправлено","ui.formOffline":"Нет соединения — форму сейчас не отправить","ui.proposalNew":"Новый протокол","ui.proposalReplaces":"Новая версия","ui.proposalAccept":"Добавить в каталог","ui.proposalReject":"Отклонить","ui.proposalAccepted":"Добавлено в каталог","ui.proposalRejected":"Отклонено","ui.proposalInCatalog":"В каталоге","ui.proposalLoading":"Загрузка предложения…","ui.proposalNotFound":"Не удалось загрузить предложение","ui.proposalOffline":"Нет соединения — решение сейчас невозможно","ui.proposalTriggers":"Когда запускать","ui.proposalPreconditions":"Предусловия","ui.proposalSteps":"Шаги","ui.proposalPostChecks":"После каждого шага","ui.proposalFallbacks":"Если что-то пойдёт не так","ui.proposalContext":"Контекст","ui.proposalOnDeviation":"Если план нарушен","ui.proposalOnBlocked":"Если завершить нельзя","ui.proposalOnAlreadyDone":"Если шаг уже выполнен","ui.submit":"Отправить","ui.fieldRequired":"Поле «{field}» обязательно","ui.invalidEmail":"Введите корректный адрес электронной почты","ui.invalidUrl":"Введите корректный адрес http:// или https://","ui.notANumber":"Должно быть числом","ui.minValue":"Минимальное значение — {n}","ui.maxValue":"Максимальное значение — {n}","ui.minLength":{one:"Минимальная длина — {n} символ",few:"Минимальная длина — {n} символа",many:"Минимальная длина — {n} символов"},"ui.maxLength":{one:"Максимальная длина — {n} символ",few:"Максимальная длина — {n} символа",many:"Максимальная длина — {n} символов"},"ui.invalidFormat":"Неверный формат","ui.notificationsPromptTitle":"Включить уведомления","ui.notificationsPromptText":"Navi сможет сообщать, когда ответ готов, — даже если вкладка закрыта.","ui.notificationsPromptAllow":"Включить","ui.notificationsPromptLater":"Не сейчас","col.name":"Название","col.key":"Ключ","col.created":"Создан","col.lastUsed":"Последнее использование","col.tool":"Инструмент","col.status":"Статус","col.started":"Начат","col.finished":"Завершён","col.subagentTokens":"Токены под-агента","col.pid":"PID","col.command":"Команда","col.cwd":"Рабочий каталог","col.uptime":"Время работы","col.background":"Фоновый","col.reason":"Причина","confirm.revokeKey":"Отозвать API-ключ «{name}»? Это нельзя отменить.","confirm.revokeTarget":"Отозвать цель Synapse «{target}»? Это нельзя отменить.","confirm.mcpResetAdmin":"Сбросить ключ для «{server}» на общий по умолчанию?","confirm.deleteSession":"Удалить этот разговор?","confirm.mcpReset":"Удалить ваш ключ для «{server}»? Сервер перестанет быть подключённым для вас.","profile.languageAuto":"Авто (из аккаунта)","profile.langEn":"English","profile.langUk":"Українська","profile.langRu":"Русский","toast.languageSaved":"Язык сохранён","toast.keyCreateFailed":"Не удалось создать ключ","toast.keyRevoked":"API-ключ отозван","toast.keyRevokeFailed":"Не удалось отозвать ключ","toast.notificationsDenied":"Разрешение не выдано","toast.notificationsAllowApp":"Разрешите уведомления в системных настройках приложения.","toast.notificationsAllowBrowser":"Разрешите уведомления в настройках сайта в браузере.","toast.notificationsUnavailable":"Push недоступен","toast.notificationsUnavailableText":"Сервер сейчас не принимает подписки на push.","toast.notificationsFailed":"Ошибка push","toast.mcpKeySaved":"Ключ сохранён для {server}","toast.mcpKeySaveFailed":"Не удалось сохранить ключ","toast.mcpKeyReset":"Ключ сброшен для {server}","toast.mcpKeyResetFailed":"Не удалось сбросить ключ","toast.synapseTargetAdded":"Цель добавлена","toast.synapseTargetAddFailed":"Не удалось добавить цель","toast.synapseTargetRevoked":"Цель отозвана","toast.synapseTargetRevokeFailed":"Не удалось отозвать цель","toast.reactionsLoadFailed":"Не удалось загрузить настройки реакций","toast.bgTaskStarted":"Фоновая задача запущена","toast.bgTaskFinished":"Фоновая задача завершена","toast.mcpConnected":"MCP-сервер подключён","toast.mcpDisconnected":"MCP-сервер отключён","toast.saveFailed":"Не удалось сохранить","toast.instructionsSaved":"Инструкции сохранены","toast.instructionsFailed":"Не удалось сохранить инструкции","toast.toolsReloaded":{one:"Перезагружен {n} инструмент",few:"Перезагружено {n} инструмента",many:"Перезагружено {n} инструментов"},"toast.toolsReloadErrors":"Перезагрузка завершилась ошибками — смотрите панель","toast.toolsReloadFailed":"Не удалось перезагрузить инструменты","settings.title":"Настройки","settings.sectionsLabel":"Разделы настроек","settings.tabApp":"Приложение","settings.tabAccount":"Аккаунт","settings.tabNotifications":"Уведомления","settings.tabSynapse":"Synapse","settings.tabSkills":"Скилы","settings.tabProtocols":"Протоколы","settings.tabMcp":"MCP","settings.languageToolbar":"Язык интерфейса","settings.languageDescription":"По умолчанию Navi следует языку вашего аккаунта gnexus-auth; выбор здесь перекрывает его только для Navi. «Авто» возвращает язык аккаунта.","settings.languageDescriptionOpen":"Вход в этот Navi отключён, поэтому язык сохраняется только в этом браузере.","settings.appTitle":"Приложение","settings.appDescription":"Navi — веб-приложение, но оно может жить на устройстве как обычное: либо установленное в этот браузер, либо как Android-приложение, которое оборачивает тот же интерфейс. Это не исключающие друг друга варианты: на телефоне стоит держать Android-приложение, а везде ещё — установленное веб-приложение.","settings.appInstallTitle":"Установка в этот браузер","settings.appInstallText":"Установка помещает Navi в отдельное окно без адресной строки, добавляет значок в док или на домашний экран и кэширует интерфейс, поэтому приложение открывается мгновенно и показывает сессии даже без сети. Она же включает уведомления о готовых ответах — в том числе когда вкладка закрыта.","settings.appAndroidAlert":"Вы читаете это внутри Android-приложения, и оно уже установлено. Чтобы обновить его, скачайте APK ниже и установите поверх старого.","settings.appInstalledAlert":"Установлено — Navi работает в отдельном окне, а не во вкладке браузера.","settings.appInstallAction":"Установить","settings.appInstallHint":"Браузер попросит подтвердить.","settings.appBrowserSafari":"Safari:","settings.appIosTap":"нажмите","settings.appIosShare":"«Поделиться», затем","settings.appIosAddHome":"На экран «Домой»","settings.appIosNote":"Уведомления там требуют iOS 16.4 или новее и работают только в установленном приложении, а не во вкладке Safari.","settings.appBrowserChrome":"Chrome или Edge:","settings.appChromeClick":"нажмите значок установки в правом конце адресной строки или откройте","settings.appChromeMenu":"меню и выберите","settings.appChromeInstall":"Установить Navi","settings.appBrowserAndroid":"Android:","settings.appAndroidOpen":"откройте","settings.appAndroidMenu":"меню и выберите","settings.appAndroidInstall":"Установить приложение","settings.appAndroidAlso":"(иногда «На главный экран»)","settings.appHttpsBefore":"Браузеры предлагают это только по HTTPS или на localhost — по обычному адресу","settings.appHttpsAfter":"такая возможность не появляется, как и офлайн-режим с уведомлениями.","settings.appAndroidTitle":"Android-приложение","settings.appAndroidText":"Тот же Navi в нативной оболочке. То, чего не даст вкладка браузера: уведомления при заблокированном телефоне — фоновая служба держит соединение открытым — плюс нативная камера и выбор фото, а ссылки открываются в обычном браузере. Сессии, профили и настройки живут на сервере, поэтому приложение и веб-клиент не расходятся.","settings.appApkMissing":"APK не опубликован на этом сервере — соберите его командой","settings.appVersion":"Версия","settings.appSize":"Размер","settings.appBuilt":"Сборка","settings.appDownloadApk":"Скачать APK","settings.appAndroidStep1":"Откройте скачанный файл на телефоне. Android спросит, разрешить ли установку приложений из этого источника, — разрешите.","settings.appAndroidStep2":"При первом запуске приложение спросит адрес Navi. Введите","settings.appAndroidStep2Tail":", затем войдите через браузер, когда он откроется; приложение вернётся само.","settings.appAndroidStep3":"Более новый APK устанавливается поверх старого и сохраняет настройки. Удалять прежнюю версию пришлось бы только при смене ключа подписи.","settings.keysTitle":"API-ключи","settings.keysCreate":"Новый ключ","settings.keysDescription":"API-ключи позволяют безголовым клиентам (скриптам, голосовым помощникам, устройствам IoT) аутентифицироваться без OAuth в браузере.","settings.keysNoAuthWarning":"Авторизация сейчас отключена. Любые созданные здесь ключи привязаны к локальному анонимному пользователю и дают полный доступ к этому экземпляру Navi.","settings.keysLoading":"Загрузка API-ключей","settings.keysEmpty":"API-ключей пока нет. Создайте первый, чтобы начать.","settings.keyCreateTitle":"Создание API-ключа","settings.keyNamePlaceholder":"например, Умные часы, Скрипт автоматизации","settings.keyCreatedTitle":"API-ключ создан","settings.keyCopyNow":"Скопируйте этот токен сейчас — он","settings.keyCopyNowStrong":"больше не будет показан","settings.notificationsTitle":"Уведомления","settings.notificationsBridgeText":"Приложение держит соединение открытым в фоне и показывает системное уведомление, когда ответ готов, а Navi свёрнут. Если закрыть само приложение, уведомления прекратятся.","settings.notificationsWebText":"Push-уведомления позволяют Navi сообщить вам о готовом ответе — даже когда вкладка закрыта. На каждый готовый ответ приходит одно уведомление, но только если ни одно окно Navi не открыто на этой сессии.","settings.notificationsUnsupported":"Этот браузер не поддерживает web push (нужны HTTPS, service worker и Push API). Попробуйте Chrome или свежий Firefox.","settings.notificationsRowTitle":"Push-уведомления","settings.notificationsOnBackground":"Включены — фоновый режим держит соединение, пока приложение свёрнуто.","settings.notificationsOn":"Включены — это устройство подписано.","settings.notificationsBlockedApp":"Заблокированы в системных настройках приложения.","settings.notificationsBlockedBrowser":"Заблокированы в настройках сайта в браузере.","settings.notificationsOff":"Выключены.","settings.mcpTitle":"MCP-серверы","settings.mcpDescriptionAdmin":"Всё, что подключено к вашим профилям. Сервер со слотом личного ключа работает под вашим ключом — не задавайте свой, и он продолжит использовать общий ключ, настроенный на этом Navi.","settings.mcpDescription":"Всё, что подключено к вашим профилям. Серверу со слотом личного ключа нужен","settings.mcpDescriptionStrong":"ваш собственный ключ","settings.mcpDescriptionTail":"— пока вы его не сохраните, для вас он не подключён вовсе. Серверы без слота общие и доступны всегда.","settings.mcpLoading":"Загрузка MCP-серверов","settings.mcpEmpty":"К этому Navi не подключено ни одного MCP-сервера ни в одном профиле.","settings.mcpKeySet":"Личный ключ сохранён {date} — используется вместо общего ({location}).","settings.mcpKeyAbsentAdmin":"Личного ключа нет — используется общий ключ из конфигурации ({location}).","settings.mcpKeyAbsent":"Личного ключа нет — этот сервер для вас не подключён.","settings.mcpNoSlot":"Слота личного ключа нет — работает на общей конфигурации.","settings.mcpKeyPlaceholder":"••• сохранён — введите новый ключ, чтобы заменить","settings.mcpKeyPlaceholderNew":"Вставьте ваш ключ","settings.mcpReset":"Сбросить на общий","settings.synapseTargetsTitle":"Доставки Synapse","settings.synapseTargetAdd":"Добавить цель","settings.synapseTargetsDescription":"Доставки из хаба уведомлений GNEXUS Synapse приходят на вебхук этого Navi и проверяются по личному секрету цели. Создайте цель в админ-панели Synapse, затем зарегистрируйте её здесь, чтобы Navi принимал её доставки.","settings.synapseTargetsLoading":"Загрузка целей","settings.synapseTargetsEmpty":"Ни одной цели Synapse не зарегистрировано. Добавьте её, чтобы начать принимать доставки.","settings.synapseTargetColRef":"Идентификатор цели","settings.synapseTargetAddTitle":"Добавление цели Synapse","settings.synapseTargetRefPlaceholder":"например, navi-main (как в админ-панели Synapse)","settings.synapseTargetSecret":"Секрет доставки","settings.synapseTargetSecretPlaceholder":"s2s-секрет цели Synapse","settings.synapseTargetHintBefore":"В админ-панели Synapse создайте цель, указывающую на","settings.synapseTargetHintAfter":"этого Navi, и вставьте её секрет здесь. Navi использует его, чтобы убедиться, что доставки действительно пришли из Synapse.","settings.reactionsTitle":"Реакции Synapse","settings.reactionsDescription":"Когда приходит событие GNEXUS Synapse, Navi может отреагировать сам: диспетчер выбирает профиль по вашим инструкциям, работа идёт в скрытой служебной сессии, а посмотреть её потом можно через переключатель «Служебные сессии» в боковой панели.","settings.reactionsNotConfigured":"Исходящие события в Synapse отключены: этот Navi не настроен как источник событий. Варианты, отправляющие события в Synapse, недоступны — приём событий, реакции и доставка в приложение работают.","settings.reactionsLoading":"Загрузка настроек реакций","settings.reactionsEnable":"Включить реакции","settings.reactionsOn":"Пришедшие события запускают фоновый прогон реакции.","settings.reactionsOff":"События принимаются и пишутся в журнал, но Navi ничего не делает.","settings.reactionsNotify":"Сообщать о завершённых реакциях","settings.reactionsOnlyFailures":"Только сбои","settings.reactionsPushAlways":"Push после каждого завершённого прогона.","settings.reactionsPushFailures":"Push только когда прогон закончился ошибками.","settings.reactionsPushNever":"Не отправлять push о завершении.","settings.reactionsTarget":"Куда идут уведомления","settings.reactionsTargetNote":"Относится к инструменту notify в Navi и к push о завершении реакций.","settings.reactionsTargetApp":"Только в приложение","settings.reactionsTargetAppSynapse":"Приложение + Synapse","settings.reactionsTargetSynapse":"Только Synapse","settings.reactionsInstructions":"Инструкции для реакций","settings.reactionsInstructionsNote":"Указания, по которым диспетчер выбирает профиль и строит задачу. Их можете править и вы, и Navi; каждое изменение попадает в историю ниже.","settings.reactionsInstructionsPlaceholder":"например, «События todo из gntodo идут в профиль developer; спам-письма — никуда».","settings.reactionsInstructionsSave":"Сохранить инструкции","settings.reactionsHistory":"История правок","settings.reactionsSessionTtl":"Продолжать беседу","settings.reactionsSessionTtlNote":"Когда диспетчер называет беседу в событии, Navi продолжает ту же сессию вместо новой — если она была активна не позже этого срока. 0 отключает продолжение.","settings.reactionsSessionTtlUnit":"минут простоя","settings.dispatcherInstructions":"Распределение событий по профилям","settings.dispatcherInstructionsNote":"Указания только для диспетчера: какой тип события в какой профиль идёт и что считать одной беседой (ключ беседы). В сессию и в задачу они не попадают.","settings.dispatcherInstructionsPlaceholder":"например, «tg.* → assistant, ключ = id чата; gntodo.* → developer, не продолжать никогда».","settings.dispatcherInstructionsSave":"Сохранить инструкции распределителю","settings.adminToolsTitle":"Инструменты","settings.adminToolsReloading":"Перезагрузка…","settings.adminToolsReload":"Перезагрузить инструменты","settings.adminToolsDescriptionBefore":"Перечитывает инструменты из","settings.adminToolsDescriptionAfter":", провайдеры контекста и переподключает все MCP-серверы — без перезапуска и простоя. Новые инструменты можно вызывать со следующего сообщения в любой сессии. Только для админа: подменяет набор инструментов, с которым работают все профили.","settings.adminToolsLoaded":{one:"загружено {n} инструмент",few:"загружено {n} инструмента",many:"загружено {n} инструментов"},"settings.adminToolsRegistry":"({n} в реестре)","settings.adminToolsMissing":"называет {names} — такого инструмента нет, он исключён из всех профилей.","settings.adminToolsMcpFailed":"Переподключение MCP не удалось: {error}","settings.adminToolsMcpTools":{one:"{n} MCP-инструмент",few:"{n} MCP-инструмента",many:"{n} MCP-инструментов"},"settings.adminToolsProviders":{one:"{n} провайдер контекста",few:"{n} провайдера контекста",many:"{n} провайдеров контекста"},"settings.skillsAddSkill":"Новый скил","settings.skillsAddProtocol":"Новый протокол","settings.skillsSearchHint":"Поиск","settings.skillsSearchLabel":"Поиск по названию, триггеру или тегу","settings.skillsHintSkills":"То, что агент умеет: скил подгружается, когда срабатывает один из его триггеров.","settings.skillsHintProtocols":"Пошаговые порядки действий: предусловия, проверки после шагов и что делать, если шаг пошёл не так.","settings.skillsCountSkills":{one:"{n} скил",few:"{n} скила",many:"{n} скилов"},"settings.skillsCountProtocols":{one:"{n} протокол",few:"{n} протокола",many:"{n} протоколов"},"settings.skillsFilterArea":"Область","settings.skillsFilterAreaAll":"Все области","settings.skillsCatalog":"Каталог","settings.skillsLoading":"Загружаем","settings.skillsEmptySkills":"Скилов пока нет. Расскажите агенту, что он должен уметь, или добавьте скил здесь.","settings.skillsEmptyProtocols":"Протоколов пока нет. Попросите агента предложить протокол или добавьте его здесь.","settings.skillsPersonal":"личный","settings.skillsShared":"общий","settings.skillsAreaHome":"дом","settings.skillsAreaInfrastructure":"инфраструктура","settings.skillsAreaWorkflows":"рабочие процессы","settings.skillsAreaGeneral":"общее","settings.skillsNewSkill":"Новый скил","settings.skillsNewProtocol":"Новый протокол","settings.skillsReadOnly":"только чтение","settings.skillsEdit":"Изменить","settings.skillsBack":"К списку","settings.skillsEditorLabel":"Документ","settings.skillsEditorPlaceholder":"Markdown-документ с блоком YAML во фронтматтере","settings.skillsVisibility":"Видимость","settings.skillsPlaceholder":"Выберите запись слева, чтобы прочитать её.","settings.skillsParseFailed":"Сохранённый документ не разбирается — показываю исходный текст.","settings.skillsUpdated":"изменено {when}","settings.skillsHistory":"История изменений","settings.skillsHistoryEmpty":"Сохранённых версий пока нет.","settings.skillsUnknownEditor":"неизвестно","settings.skillsCreated":"Создано","settings.skillsSaved":"Сохранено","settings.skillsDeleted":"Удалено","settings.skillsDeleteConfirm":"Удалить «{name}»? История изменений удалится вместе с записью.","share.title":"Поделиться чатом","share.intro":"Ссылка открывает чат только для чтения — ровно в том виде, в каком он здесь. Без аккаунта, без возможности ответить, без списка чатов и артефактов.","share.creating":"Создаю ссылку…","share.linkLabel":"Ссылка только для чтения","share.warning":"Ссылка не истекает и отозвать её нельзя. Любой, у кого она есть, прочитает этот чат.","share.killHint":"Удаление чата закрывает ссылку для всех.","share.notYet":"Ссылка появится, когда вы её запросите.","share.create":"Создать ссылку","share.regenerate":"Показать ссылку","share.createFailed":"Не удалось создать ссылку.","share.emptyChat":"Пока нечего показать — сначала отправьте сообщение.","share.readOnly":"Только чтение","share.untitled":"Общий чат","share.notFoundTitle":"Этот чат больше недоступен","share.notFoundText":"Возможно, ссылка неверна или чат удалён.","share.loadOlder":"Загрузить более ранние","share.empty":"Здесь пусто","share.footer":"Копия чата Navi только для чтения"},io={en:Mb,uk:Lb,ru:$b},Db=Object.keys(io),wp="navi.locale",Lt=F("en");function Sp(e){const t=String(e||"").trim().toLowerCase().split(/[-_]/)[0];return io[t]?t:null}function oo(e){Lt.value=Sp(e)||"en"}function hu(){try{return Sp(localStorage.getItem(wp))}catch{return null}}function Pb(e){try{localStorage.setItem(wp,e)}catch{}}Ge(Lt,e=>{typeof document<"u"&&(document.documentElement.lang=e)});function Bb(e,t){const n=t%10,s=t%100;return e==="ru"||e==="uk"?n===1&&s!==11?"one":n>=2&&n<=4&&!(s>=12&&s<=14)?"few":"many":t===1?"one":"other"}function Fb(e,t){return e.replace(/\{(\w+)\}/g,(n,s)=>t&&s in t?String(t[s]):n)}function Ub(e){var t;return((t=io[Lt.value])==null?void 0:t[e])??io.en[e]}function m(e,t){let n=Ub(e);if(n!=null&&typeof n=="object"){const s=Number((t==null?void 0:t.n)??0);n=n[Bb(Lt.value,s)]??n.other}return n!=null?Fb(String(n),t):e}const Gb={once:"chat.recallOnce",recurring:"chat.recallRecurring",immediate:"chat.recallImmediate"};function Ql(e){return m(Gb[e]??"chat.recallOnce")}function ea(){return typeof window<"u"?window.NaviAndroid??null:null}function Jl(){const e=ea();return!!e&&typeof e.notify=="function"&&typeof e.enableBackgroundMode=="function"}const Ep="navi_push_android";function Hb(){try{return localStorage.getItem(Ep)==="1"}catch{return!1}}function zb(){var t;const e=ea();return!e||typeof e.requestNotificationPermission!="function"?Promise.resolve(!1):(t=e.hasNotificationPermission)!=null&&t.call(e)?Promise.resolve(!0):new Promise(n=>{const s=i=>{clearTimeout(a),window.removeEventListener("navi-perm-result",s),n(!!(i&&i.detail))},a=setTimeout(()=>{window.removeEventListener("navi-perm-result",s),n(!1)},3e4);window.addEventListener("navi-perm-result",s),e.requestNotificationPermission()})}function Kb(e,t,n){const s=ea();if(!s||typeof s.notify!="function"||typeof document<"u"&&!document.hidden)return;let a;try{a=localStorage.getItem(Ep)==="1"}catch{return}if(a)try{s.notify(String(e),String(t),String(n??"/"))}catch(i){console.warn("[nativeBridge] notify failed",i)}}async function qb(e){try{const t=xn(),n=t.sessions.find(a=>a.session_id===e);if(n!=null&&n.name)return;const{name:s}=await Kv(e);s&&t.updateName(e,s)}catch{}}function Vb({state:e,tools:t}){const{messages:n,streaming:s,awaitingStream:a,streamingMsg:i,replayMode:o,currentId:r,contextTokens:u,maxContextTokens:l,servedModel:c,servedTarget:p,servedFallback:g,currentProfileId:b,toolIndex:_}=e,{_lastSpawnCard:y}=t;function D(){if(i.value){const he=n.value.indexOf(i.value);he!==-1&&n.value.splice(he,1),i.value=null}s.value=!0,a.value=!1;const q=n.value.find(he=>he.queued);q&&(q.queued=!1),_.clear();const j={id:`stream_${Date.now()}`,role:"assistant",type:"stream",thinking:null,tools:[],text:"",done:!1,time:new Date().toISOString(),animate:!o.value,statusLabel:null};n.value.push(j),i.value=n.value[n.value.length-1]}function R(){o.value=!0}function N(){o.value=!1,i.value&&(i.value.animate=!0)}function S(q){const j=i.value;j&&(j.thinking||(j.thinking={text:"",done:!1}),j.thinking.text+=q)}function M(){const q=i.value;q!=null&&q.thinking&&(q.thinking.done=!0)}function O(q){const j=i.value;if(!j)return;const he={kind:"turn_thinking",isSubagent:q.is_subagent??!1,thinking:{text:q.thinking??"",done:!0}};if(q.is_subagent){const Oe=y(j);if(Oe){Oe.steps.push(he);return}}j.tools.push(he)}function B(q){const j=i.value;if(j){if(q.is_subagent){const he=y(j);he&&(he.planningLabel=q.label??"");return}j.statusLabel=q.label??""}}function L(q){const j=i.value;if(j){if(q.is_subagent){const he=y(j);he&&(he.planningLabel=null,he.steps.push({kind:"plan",text:q.plan??""}));return}j.statusLabel=null,j.tools.push({kind:"plan",text:q.plan??""})}}function $(){a.value=!1}function v(q){const j=i.value;j&&(j.statusLabel&&(j.statusLabel=null),j.text+=q)}function E(q){if(!q)return;const j=he=>{!he||he.kind!=="tool"||!he.pending||(he.pending=!1,he.success=!1,he.result==null&&(he.result=m("messages.toolInterrupted")))};for(const he of q.tools??[]){j(he);for(const Oe of he.steps??[])j(Oe)}}function x(q){const j=i.value;if(j){j.done=!0,E(j),j.elapsed_seconds=(q==null?void 0:q.elapsed_seconds)??null,j.tool_call_count=(q==null?void 0:q.tool_call_count)??null,j.token_count=(q==null?void 0:q.token_count)??null;const he=n.value.filter(Oe=>Oe.role==="assistant").length-1;j.id=`h_${he}`,i.value=null,!j.thinking&&!j.tools.length&&!j.text&&(n.value=n.value.filter(Oe=>Oe!==j))}s.value=!1,a.value=!1,(q==null?void 0:q.context_tokens)!=null&&(u.value=q.context_tokens),(q==null?void 0:q.max_context_tokens)!=null&&(l.value=q.max_context_tokens),r.value&&(j!=null&&j.text)&&xn().updatePreview(r.value,j.text.slice(0,80)),j!=null&&j.text&&r.value&&Kb("Navi ответила",j.text.slice(0,140),`/#${r.value}`),r.value&&qb(r.value)}function A(){const q=i.value;if(q){q.done=!0,E(q);const j=n.value.filter(he=>he.role==="assistant").length-1;q.id=`h_${j}`,i.value=null,!q.thinking&&!q.tools.length&&!q.text&&(n.value=n.value.filter(he=>he!==q))}s.value=!1,a.value=!1}function P(q){b.value=q.profile_id,c.value=null,p.value=null,g.value=!1}function z(q){q!=null&&q.model&&(c.value=q.model,p.value=q.target??null,g.value=!!q.fallback)}function V(q){(q==null?void 0:q.context_tokens)!=null&&(u.value=q.context_tokens),(q==null?void 0:q.max_context_tokens)!=null&&(l.value=q.max_context_tokens),n.value.push({id:`compress_pending_${Date.now()}`,role:"system",type:"compression_pending"})}function Y(q){(q==null?void 0:q.context_tokens)!=null&&(u.value=q.context_tokens),(q==null?void 0:q.max_context_tokens)!=null&&(l.value=q.max_context_tokens),n.value=n.value.filter(j=>j.type!=="compression_pending"),n.value.push({id:`compress_${Date.now()}`,role:"system",type:"compression_notice",before:q.messages_before,after:q.messages_after,summary:q.summary??""})}function te(q){const j=i.value;j&&(j.done=!0,E(j),!j.thinking&&!j.tools.length&&!j.text&&(n.value=n.value.filter(he=>he!==j))),s.value=!1,a.value=!1,i.value=null,n.value.push({id:`err_${Date.now()}`,role:"system",type:"error",text:q.message??"An error occurred"})}return{onStreamStart:D,onReplayStart:R,onReplayEnd:N,onThinkingDelta:S,onThinkingEnd:M,onTurnThinking:O,onPlanningStatus:B,onPlanReady:L,onMessageQueued:$,onStreamDelta:v,onStreamEnd:x,onStreamStopped:A,onProfileSwitched:P,onModelInfo:z,onCompressionStarted:V,onContextCompressed:Y,onError:te}}let Li=null,ua=null,rr=0;function Wb({state:e,messageHelpers:t,content:n,tasks:s,sessionsStore:a}){const{currentId:i,currentProfileId:o,messages:r,artifacts:u,files:l,streaming:c,loading:p,loadError:g,loadErrorSessionId:b,awaitingStream:_,streamingMsg:y,contextTokens:D,maxContextTokens:R,servedModel:N,servedTarget:S,servedFallback:M,terminals:O,backgroundTasks:B,_terminalTaskIds:L,toolIndex:$,archiveLoading:v,archiveHasMore:E,archiveNextBefore:x,historyCount:A,archiveExtended:P,scrollToMessageIndex:z,viewedImages:V,_viewedImageKeys:Y,replayMode:te}=e,{buildMessageList:q}=t,{mergeFeedback:j,fetchArtifacts:he,fetchFiles:Oe}=n,{fetchTasks:Pe}=s;async function nt(Ie,I=null){if(i.value===Ie&&I==null)return;const U=++rr;Li=Ie,ua&&ua.abort();const Z=new AbortController;ua=Z;const ee=()=>Li===Ie&&rr===U&&!Z.signal.aborted;p.value=!0,g.value=null,b.value=null,z.value=I;try{const[se,ne]=await Promise.all([or(Ie,{signal:Z.signal}),Mi(Ie,null,200,{signal:Z.signal})]);if(!ee())return;if(V.value=[],Y.clear(),u.value=[],l.value=[],c.value=!1,_.value=!1,y.value=null,D.value=0,R.value=0,N.value=null,S.value=null,M.value=!1,O.value={},B.value={},L.clear(),$.clear(),P.value=!1,o.value=se.profile_id??null,A.value=se.message_count??0,a.rememberName(Ie,se.name),r.value=q(ne.items??[]),v.value=!1,E.value=ne.has_more??!1,x.value=ne.next_before_seq??null,se.context_token_count&&(D.value=se.context_token_count),se.max_context_tokens&&(R.value=se.max_context_tokens),I!=null){let me=0;for(;!r.value.some(le=>{var ue;return(ue=le.rawIndices)==null?void 0:ue.includes(I)})&&E.value&&me<20;){const le=await Mi(Ie,x.value,200,{signal:Z.signal});if(!ee())return;r.value=[...q(le.items??[]),...r.value],E.value=le.has_more??!1,x.value=le.next_before_seq??null,P.value=!0,me++}}if(await Promise.all([j(Ie),he(Ie),Oe(Ie)]),!ee())return;i.value=Ie,location.hash=Ie,Pe(Ie)}catch(se){if(Z.signal.aborted||Li!==Ie)return;console.error("[chat] loadSession failed",se);const ne=(se==null?void 0:se.name)==="TimeoutError"?m("chat.loadTimeout"):(se==null?void 0:se.message)||String(se);g.value=m("chat.loadFailed",{error:ne}),b.value=Ie}finally{Li===Ie&&rr===U&&(p.value=!1,ua===Z&&(ua=null))}}function He(){g.value=null,b.value=null}function Be(){i.value=null,o.value=null,g.value=null,b.value=null,r.value=[],V.value=[],Y.clear(),u.value=[],l.value=[],c.value=!1,_.value=!1,y.value=null,D.value=0,R.value=0,N.value=null,S.value=null,M.value=!1,O.value={},B.value={},L.clear(),$.clear(),location.hash=""}async function X(Ie){if(Ie&&!c.value&&!ua)try{const[I,U]=await Promise.all([or(Ie),Mi(Ie,null,200)]);if(c.value||i.value!==Ie)return;o.value=I.profile_id??null,A.value=I.message_count??0;const Z=q(U.items??[]);if(r.value=Z,E.value=U.has_more??!1,x.value=U.next_before_seq??null,await Promise.all([j(Ie),he(Ie),Oe(Ie),Pe(Ie)]),i.value!==Ie)return;I.context_token_count&&(D.value=I.context_token_count),I.max_context_tokens&&(R.value=I.max_context_tokens),y.value=null,c.value=!1,_.value=!1}catch{}}function ye(){const Ie=y.value;if(Ie){const I=r.value.indexOf(Ie);I!==-1&&r.value.splice(I,1)}y.value=null,c.value=!1,_.value=!1,te.value=!1}async function De(Ie=i.value){if(!Ie||c.value||p.value||P.value)return!1;let I;try{I=await or(Ie)}catch{return!1}return i.value!==Ie||c.value||(I.message_count??0)===A.value?!1:(await X(Ie),!0)}async function dt(){const Ie=i.value;if(!Ie||v.value||!E.value)return;v.value=!0,P.value=!0;const I=r.value;try{const U=await Mi(Ie,x.value);if(i.value!==Ie||r.value!==I)return;const Z=q(U.items??[]);r.value=[...Z,...r.value],E.value=U.has_more??!1,x.value=U.next_before_seq??null}catch(U){console.error("[chat] loadArchivedMessages failed",U)}finally{v.value=!1}}function st(Ie=!1,I=null){E.value=Ie,x.value=I}return{loadSession:nt,clearSession:Be,dismissLoadError:He,reloadSession:X,dropStaleStream:ye,checkForUpdates:De,loadArchivedMessages:dt,initArchiveState:st}}const Gt=Es("chat",()=>{const e=xn(),t=Sb(),n=Eb(t),s=Tb(t),a=Ab(t),i=xb(t),o=Nb(t),r=Ib({state:t,content:a,recall:i,messageHelpers:n}),u=Ob(t),l=Vb({state:t,tools:r}),c=Wb({state:t,messageHelpers:n,content:a,tasks:o,sessionsStore:e}),p=W(()=>{let g=null;for(const b of t.messages.value){const _=b==null?void 0:b.tools;if(_!=null&&_.length)for(let y=0;y<_.length;y++){const D=_[y];D.kind==="tool"&&D.name==="content_publish"&&(g=`${b.id}:content:${y}`)}}return g});return{currentId:t.currentId,currentProfileId:t.currentProfileId,messages:t.messages,streaming:t.streaming,pendingImages:t.pendingImages,pendingFiles:t.pendingFiles,artifacts:t.artifacts,files:t.files,viewedImages:t.viewedImages,contextTokens:t.contextTokens,maxContextTokens:t.maxContextTokens,servedModel:t.servedModel,servedTarget:t.servedTarget,servedFallback:t.servedFallback,wsConnected:t.wsConnected,wsReconnecting:t.wsReconnecting,loading:t.loading,loadError:t.loadError,loadErrorSessionId:t.loadErrorSessionId,latestContentToolKey:p,imagesProcessing:t.imagesProcessing,awaitingStream:t.awaitingStream,streamingMsg:t.streamingMsg,scrollToMessageIndex:t.scrollToMessageIndex,recall:t.recall,terminals:t.terminals,backgroundTasks:t.backgroundTasks,archiveLoading:t.archiveLoading,archiveHasMore:t.archiveHasMore,archiveNextBefore:t.archiveNextBefore,loadSession:c.loadSession,clearSession:c.clearSession,dismissLoadError:c.dismissLoadError,reloadSession:c.reloadSession,dropStaleStream:c.dropStaleStream,checkForUpdates:c.checkForUpdates,fetchArtifacts:a.fetchArtifacts,fetchFiles:a.fetchFiles,fetchTasks:o.fetchTasks,rateMessage:a.rateMessage,saveDraft:s.saveDraft,loadDraft:s.loadDraft,appendUserMessage:n.appendUserMessage,buildMessageList:n.buildMessageList,onStreamStart:l.onStreamStart,onReplayStart:l.onReplayStart,onReplayEnd:l.onReplayEnd,onThinkingDelta:l.onThinkingDelta,onThinkingEnd:l.onThinkingEnd,onTurnThinking:l.onTurnThinking,onPlanningStatus:l.onPlanningStatus,onPlanReady:l.onPlanReady,onToolStarted:r.onToolStarted,onToolCall:r.onToolCall,onTerminalOutput:u.onTerminalOutput,onTerminalClosed:u.onTerminalClosed,onTerminalOpened:u.onTerminalOpened,onTaskUpdate:o.onTaskUpdate,onMessageQueued:l.onMessageQueued,onStreamDelta:l.onStreamDelta,onStreamEnd:l.onStreamEnd,onStreamStopped:l.onStreamStopped,onProfileSwitched:l.onProfileSwitched,onModelInfo:l.onModelInfo,onCompressionStarted:l.onCompressionStarted,onContextCompressed:l.onContextCompressed,onError:l.onError,loadRecall:i.loadRecall,cancelRecall:i.cancelRecall,skipRecall:i.skipRecall,onRecallUpdate:i.onRecallUpdate,onProposalDecided:n.onProposalDecided,loadArchivedMessages:c.loadArchivedMessages,initArchiveState:c.initArchiveState}}),ls=Es("auth",()=>{const e=F(null),t=F(!1),n=F(!1),s=W(()=>e.value!==null),a=W(()=>{var g;return((g=e.value)==null?void 0:g.role)==="admin"});function i(g){return e.value?e.value.role==="admin"?!0:(e.value.permissions||[]).includes(g):!1}async function o(){var g;console.log("[auth] fetchMe start"),t.value=!0;try{e.value=await Lv(),console.log("[auth] fetchMe success",e.value)}catch(b){console.log("[auth] fetchMe error",b.message),(g=b.message)!=null&&g.includes("401")&&(e.value=null)}finally{t.value=!1,console.log("[auth] fetchMe loading=false")}}const r=F(!0);async function u(){console.log("[auth] fetchStatus start");try{const g=await fetch("/auth/status");if(console.log("[auth] fetchStatus response",g.status,g.ok),g.ok){const b=await g.json();console.log("[auth] fetchStatus data",b),r.value=b.enabled!==!1,n.value=!!b.configured,console.log("[auth] fetchStatus authEnabled set to",r.value),console.log("[auth] fetchStatus authConfigured set to",n.value)}else console.log("[auth] fetchStatus not ok"),r.value=!0,n.value=!1}catch(g){console.log("[auth] fetchStatus error",g),r.value=!0,n.value=!1}}function l(){const g=navigator.userAgent.includes("NaviAndroid"),b=new URLSearchParams;g&&b.set("platform","android"),b.set("return_to",location.pathname+location.search+location.hash),window.location.href="/auth/login?"+b.toString()}async function c(){try{await Dv()}catch{}e.value=null,window.location.reload()}const p=W(()=>!r.value);return{user:e,loading:t,authConfigured:n,authEnabled:r,isAuthenticated:s,isAdmin:a,isNoAuthMode:p,hasPermission:i,fetchMe:o,fetchStatus:u,login:l,logout:c}}),Yb=Object.freeze(Object.defineProperty({__proto__:null,useAuthStore:ls},Symbol.toStringTag,{value:"Module"}));function jb(e){const t="=".repeat((4-e.length%4)%4),n=(e+t).replace(/-/g,"+").replace(/_/g,"/"),s=atob(n),a=new Uint8Array(s.length);for(let i=0;iJl()||Mo()&&tc()),Lo=W(()=>Jl()),ba=F(Zb()),_s=F(!1),En=F(!1);function Zb(){const e=ea();if(e&&typeof e.hasNotificationPermission=="function")try{return e.hasNotificationPermission()?"granted":"default"}catch{}return tc()?Notification.permission:"denied"}function Ap(){const e=ea();if(!e)return"denied";try{return e.hasNotificationPermission()?"granted":"default"}catch{return"default"}}async function xp(){if(!ec()||!Mo())return null;const e=await navigator.serviceWorker.getRegistration();return e?e.pushManager.getSubscription():null}async function Xb(){if(Lo.value){_s.value=Hb(),ba.value=Ap();return}if(!(!ec()||!Mo()))try{const e=await xp();_s.value=!!e,ba.value=tc()?Notification.permission:"denied"}catch{_s.value=!1}}async function Qb(){if(!(!Tp.value||En.value)){if(Lo.value){En.value=!0;try{if(Ap()!=="granted"&&!await zb())return!1;const e=ea();e.enableBackgroundMode(),typeof e.isIgnoringBatteryOptimizations=="function"&&!e.isIgnoringBatteryOptimizations()&&e.requestIgnoreBatteryOptimizations();try{localStorage.setItem("navi_push_android","1")}catch{}return _s.value=!0,ba.value="granted",!0}finally{En.value=!1}}En.value=!0;try{if(ba.value=await Notification.requestPermission(),ba.value!=="granted")return!1;const{public_key:e}=await pb();if(!e)return!1;const t=await navigator.serviceWorker.ready;let n=await t.pushManager.getSubscription();n||(n=await t.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:jb(e)}));const s=n.toJSON();return await gb({endpoint:s.endpoint,keys:s.keys,user_agent:navigator.userAgent}),_s.value=!0,!0}finally{En.value=!1}}}async function Jb(){var e,t;if(Lo.value){if(En.value)return;En.value=!0;try{(t=(e=ea())==null?void 0:e.disableBackgroundMode)==null||t.call(e);try{localStorage.removeItem("navi_push_android")}catch{}return _s.value=!1,!0}finally{En.value=!1}}if(!(!ec()||!Mo()||En.value)){En.value=!0;try{const n=await xp();if(n){try{await mb(n.endpoint)}catch{}await n.unsubscribe()}_s.value=!1}finally{En.value=!1}}}function Np(){return{supported:Tp,bridgeMode:Lo,permission:ba,subscribed:_s,busy:En,enable:Qb,disable:Jb,syncState:Xb}}const Fa="navi.notifications.promptBlocked",lr="navi.notifications.promptShown";function vu(e,t){try{return e.getItem(t)}catch{return null}}function $i(e,t,n){try{e.setItem(t,n)}catch{}}function bu(e,t){try{e.removeItem(t)}catch{}}function e_(){const{supported:e,bridgeMode:t,permission:n,subscribed:s,busy:a,enable:i,syncState:o}=Np(),r=F(!1);function u(){return vu(localStorage,Fa)==="1"}function l(){return vu(sessionStorage,lr)==="1"}function c(){return!e.value||a.value||u()||l()||n.value!=="default"?!1:!s.value}async function p(){try{await o()}catch{}return e.value&&!t.value&&n.value==="denied"&&$i(localStorage,Fa,"1"),c()?($i(sessionStorage,lr,"1"),r.value=!0,!0):!1}async function g(){if(await i()===!0){r.value=!1;return}(t.value||n.value==="denied")&&$i(localStorage,Fa,"1"),r.value=!1}function b(){r.value=!1}function _(){bu(localStorage,Fa),bu(sessionStorage,lr),r.value=!1}const y=W(()=>m("ui.notificationsPromptTitle")),D=W(()=>m("ui.notificationsPromptText")),R=W(()=>m("ui.notificationsPromptAllow")),N=W(()=>m("ui.notificationsPromptLater"));return{visible:r,busy:a,canPrompt:c,maybeShow:p,accept:g,decline:b,reset:_,title:y,text:D,acceptText:R,dismissText:N}}const Cp=/^#settings(?:\/([A-Za-z0-9_-]+))?$/;function Vi(e){return Cp.test(e||"")}function _u(e){var t;return((t=Cp.exec(e||""))==null?void 0:t[1])??null}function yu(e){return e?`#settings/${e}`:"#settings"}const t_=/^#share=([A-Za-z0-9_-]{16,})$/;function Di(e){var t;return((t=t_.exec(e||""))==null?void 0:t[1])??null}const nc="/images/logo.svg";function n_(e){if(!e)return"";const t=new Date(e);if(isNaN(t))return"";const n=Date.now()-t;return n<6e4?m("common.justNow"):n<36e5?m("common.minutesAgo",{n:Math.floor(n/6e4)}):n<864e5?t.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"}):t.toLocaleDateString(Lt.value)}const wl=F(Date.now());let Wi=null,ni=0;function s_(){ni++,ni===1&&(wl.value=Date.now(),Wi=setInterval(()=>{wl.value=Date.now()},3e4))}function a_(){ni=Math.max(0,ni-1),ni===0&&Wi&&(clearInterval(Wi),Wi=null)}function $o(e){const t=W(()=>(wl.value,n_(e.value)));return $t(s_),Nn(a_),t}const ro=F(!1),Rp=mf(""),Sl=[];function i_(){return{visible:ro,message:Rp}}function Na(){return function(t){return Rp.value=t,ro.value=!0,new Promise(n=>{Sl.push(n)})}}function ku(e){ro.value=!1;const t=Sl.shift();t==null||t(e),Sl.length===0&&(ro.value=!1)}const We=(e,t)=>{const n=e.__vccOpts||e;for(const[s,a]of t)n[s]=a;return n},o_={key:0,class:"session-icons"},r_=["title"],l_=["title"],c_=["title"],u_={class:"session-info"},d_={class:"session-name-row"},f_=["innerHTML"],p_=["innerHTML"],g_={key:1,class:"session-time"},m_=["title"],h_=["title"],v_=["title"],b_=["title"],__={__name:"SessionItem",props:{session:{type:Object,required:!0},active:{type:Boolean,default:!1},searchQuery:{type:String,default:""}},emits:["select","delete","pin","cancel-recall","skip-recall"],setup(e,{emit:t}){const n=e,s=t,a=Na(),i=W(()=>{const _=n.session.session_id??"";return n.session.name||_.slice(0,8)}),o=W(()=>n.searchQuery&&n.session.match_preview?n.session.match_preview:n.session.preview),r=W(()=>n.session.last_active),u=$o(r);function l(_){return typeof _!="string"?String(_??""):_.replace(/&/g,"&").replace(//g,">")}function c(_,y){if(!y||!_)return l(_);const D=y.toLowerCase(),R=_.toLowerCase(),N=[];let S=0;for(;;){const M=R.indexOf(D,S);if(M===-1)break;M>S&&N.push(l(_.slice(S,M))),N.push(`${l(_.slice(M,M+y.length))}`),S=M+y.length}return S<_.length&&N.push(l(_.slice(S))),N.join("")}const p=W(()=>c(i.value,n.searchQuery)),g=W(()=>c(o.value,n.searchQuery));async function b(){await a(m("confirm.deleteSession"))&&s("delete")}return(_,y)=>(h(),w("div",{class:Ae(["session-item",{"is-active":e.active,"is-pinned":e.session.pinned,"has-recall":e.session.has_pending_recall,"is-special":e.session.special}]),onClick:y[4]||(y[4]=D=>s("select"))},[e.session.pinned||e.session.has_pending_recall||e.session.special?(h(),w("div",o_,[e.session.pinned?(h(),w("i",{key:0,class:"ph ph-push-pin session-pin-icon",title:d(m)("sidebar.pinned")},null,8,r_)):K("",!0),e.session.has_pending_recall?(h(),w("i",{key:1,class:"ph ph-clock session-recall-icon",title:d(m)("sidebar.recallPending")},null,8,l_)):K("",!0),e.session.special?(h(),w("i",{key:2,class:"ph ph-robot session-special-icon",title:d(m)("sidebar.serviceSession")},null,8,c_)):K("",!0)])):K("",!0),f("div",u_,[f("div",d_,[f("span",{class:"session-name",innerHTML:p.value},null,8,f_)]),o.value?(h(),w("div",{key:0,class:"session-preview",innerHTML:g.value},null,8,p_)):K("",!0),d(u)?(h(),w("div",g_,k(d(u)),1)):K("",!0)]),f("div",{class:"session-actions",onClick:y[3]||(y[3]=Bt(()=>{},["stop"]))},[e.session.has_pending_recall?(h(),w("button",{key:0,class:"btn-icon",title:d(m)("sidebar.cancelRecall"),onClick:y[0]||(y[0]=D=>s("cancel-recall"))},[...y[5]||(y[5]=[f("i",{class:"ph ph-x-circle"},null,-1)])],8,m_)):K("",!0),e.session.has_pending_recall?(h(),w("button",{key:1,class:"btn-icon",title:d(m)("sidebar.skipNext"),onClick:y[1]||(y[1]=D=>s("skip-recall"))},[...y[6]||(y[6]=[f("i",{class:"ph ph-skip-forward"},null,-1)])],8,h_)):K("",!0),f("button",{class:"btn-icon",title:d(m)(e.session.pinned?"sidebar.unpin":"sidebar.pin"),onClick:y[2]||(y[2]=D=>s("pin"))},[f("i",{class:Ae(e.session.pinned?"ph ph-push-pin-slash":"ph ph-push-pin")},null,2)],8,v_),f("button",{class:"btn-icon",title:d(m)("common.delete"),onClick:b},[...y[7]||(y[7]=[f("i",{class:"ph ph-trash"},null,-1)])],8,b_)])],2))}},y_=We(__,[["__scopeId","data-v-213cc62b"]]),k_={class:"ptr-label"},w_={key:0,class:"sessions-loading"},S_={key:1,class:"empty-sessions"},E_={key:2,class:"empty-sessions"},T_={key:4,class:"sessions-loading sessions-loading-more"},wu=80,A_=120,x_={__name:"SessionList",emits:["select"],setup(e,{emit:t}){const n=t,s=xn(),a=Gt(),i=wi();Ge(()=>i.selectedProfileId,L=>{L&&L!==s.currentProfileId&&s.fetchSessions(L)});function o(L){n("select",L)}async function r(L){const $=L.session_id===a.currentId;await s.deleteSession(L.session_id),$&&a.clearSession()}async function u(L){await s.pinSession(L.session_id,!L.pinned)}async function l(L){try{await yp(L.session_id),s.updateRecallStatus(L.session_id,!1)}catch($){console.error("cancel recall failed",$)}}async function c(L){try{await kp(L.session_id)}catch($){console.error("skip recall failed",$)}}function p(L){const $=L.target;$.scrollHeight-$.scrollTop-$.clientHeight<160&&s.fetchMoreSessions()}const g=F(!1),b=F(0),_=F(!1),y=F(null),D=W(()=>({transform:`translateY(${Math.min(b.value,A_)}px)`,opacity:g.value?Math.min(b.value/wu,1):0})),R=W(()=>s.loading?m("common.refreshing"):_.value?m("common.releaseToRefresh"):m("common.pullToRefresh"));let N=0,S=0;function M(L){var v;const $=y.value;$&&(S=$.scrollTop||0,!(S>2)&&(N=((v=L.touches[0])==null?void 0:v.clientY)??0,g.value=!1,b.value=0,_.value=!1))}function O(L){var E;if(S>2||!N)return;const v=(((E=L.touches[0])==null?void 0:E.clientY)??0)-N;if(v<=0){g.value=!1;return}v>4&&L.preventDefault(),g.value=!0,b.value=v,_.value=v>=wu}function B(){_.value&&!s.loading&&s.fetchSessions(i.selectedProfileId),g.value=!1,b.value=0,_.value=!1,N=0,S=0}return(L,$)=>(h(),w("div",{class:"session-list-wrap",onTouchstart:M,onTouchmove:O,onTouchend:B},[f("div",{class:Ae(["ptr-indicator",{"ptr-active":g.value&&!d(s).loading}]),style:bs(D.value)},[f("span",{class:Ae(["ptr-spinner",{"ptr-spinning":_.value}])},null,2),f("span",k_,k(R.value),1)],6),d(s).loading&&!d(s).sessions.length?(h(),w("div",w_,[$[0]||($[0]=f("span",{class:"sessions-spinner"},null,-1)),f("p",null,k(d(m)("sidebar.loadingConversations")),1)])):d(s).sessions.length?d(s).filteredSessions.length?K("",!0):(h(),w("div",E_,[$[2]||($[2]=f("i",{class:"ph ph-faders"},null,-1)),f("p",null,k(d(m)("sidebar.noMatch")),1)])):(h(),w("div",S_,[$[1]||($[1]=f("i",{class:"ph ph-chat-dots"},null,-1)),f("p",null,k(d(m)("sidebar.noConversations")),1)])),d(s).filteredSessions.length?(h(),w("div",{key:3,ref_key:"scrollerRef",ref:y,class:Ae(["session-scroller",{"ptr-pulled":g.value}]),onScrollPassive:p},[(h(!0),w(ce,null,Je(d(s).filteredSessions,(v,E)=>(h(),ke(y_,{key:v.session_id,session:v,active:v.session_id===d(a).currentId,"search-query":d(s).searchActive?d(s).searchQuery:"",onSelect:x=>o(v),onDelete:x=>r(v),onPin:x=>u(v),onCancelRecall:x=>l(v),onSkipRecall:x=>c(v)},null,8,["session","active","search-query","onSelect","onDelete","onPin","onCancelRecall","onSkipRecall"]))),128))],34)):K("",!0),d(s).loadingMore?(h(),w("div",T_,[...$[3]||($[3]=[f("span",{class:"sessions-spinner"},null,-1)])])):K("",!0)],32))}},N_=We(x_,[["__scopeId","data-v-4d876f4d"]]),C_={class:"sidebar-header"},R_={class:"sidebar-logo-row"},I_={class:"sidebar-sessions"},O_={class:"sessions-header"},M_={class:"sessions-label"},L_={class:"sessions-header-actions"},$_={class:"sidebar-footer"},D_=["title"],P_={class:"user-name"},B_={class:"sidebar-footer-actions"},F_=["title"],U_=["href","title"],G_={class:"user-name"},H_={class:"sidebar-footer-actions"},z_=["title"],K_={__name:"AppSidebar",props:{mobileOpen:Boolean},emits:["close"],setup(e,{emit:t}){const n=e,s=t,a=wi(),i=xn(),o=Gt(),r=ls(),u=F(!1),l=F(""),c=F(null);let p=null;Ge(()=>o.currentProfileId,$=>{$&&(a.selectedProfileId=$)}),Ge(()=>a.selectedProfileId,$=>{$&&(u.value&&(u.value=!1,i.exitSearch()),i.fetchSessions($),xt(()=>{var v,E;(E=(v=g.value)==null?void 0:v.querySelector(".chip-selected"))==null||E.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}))},{immediate:!0});const g=F(null);function b($){const v=g.value;v&&(v.scrollLeft+=Math.abs($.deltaX)>Math.abs($.deltaY)?$.deltaX:$.deltaY)}function _($,v){var E;a.selectedProfileId=$,(E=v==null?void 0:v.currentTarget)==null||E.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}function y(){i.showSpecial=!i.showSpecial,i.showSpecial&&u.value&&(u.value=!1,l.value="",i.clearSearch(),i.exitSearch()),i.fetchSessions(a.selectedProfileId)}function D(){var E;const $=((E=c.value)==null?void 0:E.$el)??c.value;if(!$)return;const v=$.querySelector("input");v==null||v.focus()}Ge(()=>o.currentProfileId,$=>{$&&(a.selectedProfileId=$)});function R(){u.value=!u.value,u.value&&(setTimeout(D,50),i.searchQuery&&(l.value=i.searchQuery,i.restoreSearch()))}function N(){u.value&&(u.value=!1,i.exitSearch(),i.fetchSessions(a.selectedProfileId))}function S(){u.value=!1,l.value="",i.clearSearch(),i.exitSearch(),i.fetchSessions(a.selectedProfileId)}Ge(l,$=>{if(p&&clearTimeout(p),!$){i.clearSearch(),i.fetchSessions(a.selectedProfileId);return}p=setTimeout(()=>{i.setSearch($),i.fetchSessions()},300)});function M(){o.clearSession(),s("close")}async function O($){var E;const v=i.searchActive;v&&$.profile_id&&(a.selectedProfileId=$.profile_id),await o.loadSession($.session_id,v?(E=$.match_indices)==null?void 0:E[0]:null),v&&(u.value=!1,i.exitSearch(),i.fetchSessions(a.selectedProfileId)),s("close")}function B(){location.hash="#settings",s("close")}function L($){($.ctrlKey||$.metaKey)&&$.key==="k"&&($.preventDefault(),R())}return $t(()=>window.addEventListener("keydown",L)),bn(()=>window.removeEventListener("keydown",L)),($,v)=>{var V,Y,te,q,j,he,Oe;const E=Qe("GnButton"),x=Qe("GnIconButton"),A=Qe("GnSearchField"),P=Qe("GnChip"),z=Qe("GnAvatar");return h(),w("aside",{class:Ae(["app-sidebar",{"is-mobile-open":n.mobileOpen}])},[f("div",C_,[f("div",R_,[v[4]||(v[4]=f("div",{class:"sidebar-logo"},[f("img",{src:nc,alt:"Navi"}),f("span",null,"Navi")],-1)),Q(E,{variant:"primary",icon:"ph ph-plus",onClick:M},{default:fe(()=>[ae(k(d(m)("sidebar.newChat")),1)]),_:1}),Q(x,{icon:"ph ph-x",label:d(m)("common.close"),class:"sidebar-close-btn",onClick:v[0]||(v[0]=Pe=>s("close"))},null,8,["label"])])]),f("div",{class:Ae(["sidebar-search",{"is-open":u.value}])},[f("div",{class:Ae(["sidebar-search-inner",{"is-loading":d(i).loading&&d(i).searchActive}])},[Q(A,{ref_key:"searchFieldEl",ref:c,modelValue:l.value,"onUpdate:modelValue":v[1]||(v[1]=Pe=>l.value=Pe),placeholder:d(m)("sidebar.searchPlaceholder"),compact:"",clearable:"",onClear:S,onKeydown:Wn(N,["esc"])},null,8,["modelValue","placeholder"])],2)],2),f("div",I_,[f("div",{ref_key:"profilesEl",ref:g,class:"sessions-profiles",onWheel:Bt(b,["prevent"])},[(h(!0),w(ce,null,Je(d(a).profiles,Pe=>(h(),ke(P,{key:Pe.id,clickable:"",selected:d(a).selectedProfileId===Pe.id,onClick:nt=>_(Pe.id,nt)},{default:fe(()=>[ae(k(Pe.name),1)]),_:2},1032,["selected","onClick"]))),128))],544),f("div",O_,[f("div",M_,[d(i).searchActive?(h(),w(ce,{key:0},[ae(k(d(m)("sidebar.results",{n:d(i).sessions.length})),1)],64)):(h(),w(ce,{key:1},[ae(k(d(m)(d(i).showSpecial?"sidebar.serviceSessions":"sidebar.conversations")),1)],64))]),f("div",L_,[Q(x,{icon:"ph ph-clock",label:d(m)("sidebar.pendingRecallsOnly"),class:Ae(["recall-filter-btn",{active:d(i).hasPendingRecallFilter}]),onClick:v[2]||(v[2]=Pe=>d(i).hasPendingRecallFilter=!d(i).hasPendingRecallFilter)},null,8,["label","class"]),Q(x,{icon:"ph ph-robot",label:d(m)("sidebar.serviceSessionsLabel"),class:Ae(["special-filter-btn",{active:d(i).showSpecial}]),onClick:y},null,8,["label","class"]),Q(x,{icon:"ph ph-magnifying-glass",label:d(m)("sidebar.search"),class:Ae(["search-toggle-btn",{active:u.value||d(i).searchActive}]),onClick:R},null,8,["label","class"]),Q(x,{icon:"ph ph-arrow-clockwise",label:d(m)("sidebar.refresh"),class:Ae(["sessions-refresh-btn",{"is-spinning":d(i).loading}]),onClick:v[3]||(v[3]=Pe=>d(i).fetchSessions(d(a).selectedProfileId))},null,8,["label","class"])])]),Q(N_,{onSelect:O})]),f("div",$_,[d(r).isNoAuthMode?(h(),w(ce,{key:0},[f("div",{class:"user-info",title:d(m)("sidebar.noAuthTitle")},[Q(z,{size:"sm",src:"",alt:d(m)("sidebar.localAvatar"),initials:"L"},null,8,["alt"]),f("span",P_,k(d(m)("sidebar.localMode")),1)],8,D_),f("div",B_,[Q(x,{icon:"ph ph-gear",label:d(m)("settings.title"),onClick:B},null,8,["label"]),f("a",{href:"/admin",target:"_blank",rel:"noopener noreferrer",class:"btn-icon admin-link",title:d(m)("sidebar.admin")},[...v[5]||(v[5]=[f("i",{class:"ph ph-shield-check"},null,-1)])],8,F_)])],64)):d(r).isAuthenticated?(h(),w(ce,{key:1},[f("a",{class:"user-info",href:(V=d(r).user)==null?void 0:V.profile_url,target:"_blank",rel:"noopener noreferrer",title:d(m)("sidebar.openProfile")},[Q(z,{size:"sm",src:((Y=d(r).user)==null?void 0:Y.avatar_url)||"",alt:((te=d(r).user)==null?void 0:te.display_name)||d(m)("sidebar.avatar"),initials:(((q=d(r).user)==null?void 0:q.display_name)||((j=d(r).user)==null?void 0:j.email)||"?").charAt(0).toUpperCase()},null,8,["src","alt","initials"]),f("span",G_,k(((he=d(r).user)==null?void 0:he.display_name)||((Oe=d(r).user)==null?void 0:Oe.email)),1)],8,U_),f("div",H_,[Q(x,{icon:"ph ph-gear",label:d(m)("settings.title"),onClick:B},null,8,["label"]),d(r).isAdmin?(h(),w("a",{key:0,href:"/admin",target:"_blank",rel:"noopener noreferrer",class:"btn-icon admin-link",title:d(m)("sidebar.admin")},[...v[6]||(v[6]=[f("i",{class:"ph ph-shield-check"},null,-1)])],8,z_)):K("",!0),Q(x,{icon:"ph ph-sign-out",label:d(m)("sidebar.logout"),onClick:d(r).logout},null,8,["label","onClick"])])],64)):(h(),ke(E,{key:2,variant:"primary",icon:"ph ph-sign-in",onClick:d(r).login},{default:fe(()=>[ae(k(d(m)("sidebar.login")),1)]),_:1},8,["onClick"]))])],2)}}},q_=We(K_,[["__scopeId","data-v-6361031f"]]),Ip={__name:"ConfirmDialog",setup(e){const{visible:t,message:n}=i_();function s(){ku(!0)}function a(){ku(!1)}return(i,o)=>{const r=Qe("GnConfirmDialog");return h(),ke(r,{open:d(t),"onUpdate:open":o[0]||(o[0]=u=>vt(t)?t.value=u:null),message:d(n),title:d(m)("ui.confirmTitle"),"cancel-text":d(m)("common.no"),"confirm-text":d(m)("common.yes"),"confirm-variant":"warning",onConfirm:s,onCancel:a},null,8,["open","message","title","cancel-text","confirm-text"])}}},V_=Object.freeze(Object.defineProperty({__proto__:null,default:Ip},Symbol.toStringTag,{value:"Module"})),Ks=F(null),W_=W(()=>{var e;return((e=Ks.value)==null?void 0:e.url)??null});function Y_(){Ks.value&&(Ks.value=null)}typeof window<"u"&&window.addEventListener("popstate",Y_);function Ca(){function e({url:s,type:a="image",title:i=""}={}){var o;s&&((o=history.state)!=null&&o.lightbox||history.pushState({lightbox:!0},""),Ks.value={url:s,type:a,title:i})}function t(s){e({url:s,type:"image"})}function n(){var s;Ks.value&&(Ks.value=null,(s=history.state)!=null&&s.lightbox&&history.back())}return{item:Ks,src:W_,open:t,openContent:e,close:n}}var Op={},j_=new Set(["primary","secondary","accent","success","warning","danger","error","info"]);function _e(...e){return e.flatMap(t=>t?Array.isArray(t)?t:typeof t=="object"?Object.entries(t).filter(([,n])=>n).map(([n])=>n):[t]:[]).filter(Boolean).join(" ")}function cs(e,t="primary"){return j_.has(e)?e:t}function Xe(e,t=""){if(!e)return null;const n=e.includes("ph ")||e.startsWith("ph-");n||typeof process<"u"&&Op&&console.warn(`[gnexus-ui-kit] Icon "${e}" is missing the required "ph-" prefix. Use "ph-${e}" instead.`);const s=n?e:`ph-${e}`;return C("i",{class:_e("ph",s,t),"aria-hidden":"true"})}function Ra(e){const t=e.target;return t.type==="checkbox"?t.checked:t.value}var Z_=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");function Mp(e,t){if(e.key!=="Tab"||!t)return;const n=[...t.querySelectorAll(Z_)].filter(i=>!i.hasAttribute("disabled")&&i.offsetParent!==null);if(!n.length){e.preventDefault(),t.focus();return}const s=n[0],a=n[n.length-1];e.shiftKey&&document.activeElement===s?(e.preventDefault(),a.focus()):!e.shiftKey&&document.activeElement===a&&(e.preventDefault(),s.focus())}var X_=Me({name:"GnAccordion",props:{items:{type:Array,required:!0},modelValue:{type:[String,Array],default:""},multiple:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const s=F(e.multiple?[]:""),a=()=>e.modelValue||s.value,i=r=>e.multiple?a().includes(r):a()===r,o=r=>{let u;if(e.multiple){const l=[...a()];u=l.includes(r)?l.filter(c=>c!==r):[...l,r]}else u=i(r)?"":r;s.value=u,t("update:modelValue",u)};return()=>C("div",{class:"accordion"},e.items.map(r=>{var u;const l=i(r.id);return C("section",{class:"accordion-item",open:l?"":void 0},[C("button",{class:"accordion-summary",type:"button","aria-expanded":l?"true":"false",onClick:()=>o(r.id)},[C("span",{class:"accordion-summary-content"},[Xe(r.icon),r.label]),C("i",{class:_e("ph ph-caret-down accordion-icon",{"is-open":l}),"aria-hidden":"true"})]),l&&C("div",{class:"accordion-panel"},((u=n[r.id])==null?void 0:u.call(n,{item:r,open:l}))||r.content)])}))}}),Q_=Me({name:"GnActionCard",props:{kicker:{type:String,default:""},title:{type:String,required:!0},text:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,s,a;return C("article",{class:"card action-card"},[C("div",{class:"card-content"},[(e.kicker||t.kicker)&&C("span",{class:"action-card-kicker"},((n=t.kicker)==null?void 0:n.call(t))||e.kicker),C("h3",{class:"action-card-title"},((s=t.title)==null?void 0:s.call(t))||e.title),(e.text||t.default)&&C("p",{class:"action-card-text"},((a=t.default)==null?void 0:a.call(t))||e.text),t.actions&&C("div",{class:"action-card-actions"},t.actions())])])}}}),J_=Me({name:"GnActionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>C("ul",{...t,class:_e("list list-actions",t.class)},e.items.map(s=>{var a,i;return C("li",{class:_e("list-item",s.muted&&"list-item-muted")},[C("div",{class:"list-content"},[C("div",{class:"list-title"},((a=n.title)==null?void 0:a.call(n,{item:s}))||s.title||s.label||""),(s.subtitle||n.subtitle)&&C("div",{class:"list-subtitle"},((i=n.subtitle)==null?void 0:i.call(n,{item:s}))||s.subtitle)]),n.controls&&C("div",{class:"list-controls"},n.controls({item:s}))])}))}}),ey=Me({name:"GnActivityLog",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>C("div",{...t,class:_e("activity-log",t.class)},e.items.map(s=>{var a;return C("div",{class:"activity-log-row"},[C("time",{class:"activity-log-time"},s.time),C("span",{class:"activity-log-title"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.title),n.actions&&C("span",{},n.actions({item:s}))])}))}}),Vn=Me({name:"GnAlert",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},role:{type:String,default:"status"}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=cs(e.variant);return C("div",{...t,role:e.role,class:_e("alert",`alert-${a}`,t.class)},(s=n.default)==null?void 0:s.call(n))}}}),Do=Me({name:"GnAvatar",inheritAttrs:!1,props:{src:{type:String,default:""},alt:{type:String,default:""},initials:{type:String,default:""},icon:{type:String,default:""},size:{type:String,default:"md"},variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1},status:{type:String,default:""}},setup(e,{attrs:t}){return()=>{const n=cs(e.variant);return C("span",{...t,class:_e("avatar",`avatar-${n}`,{"avatar-sm":e.size==="sm","avatar-lg":e.size==="lg","avatar-outline":e.outline,"is-online":e.status==="online","is-busy":e.status==="busy","is-offline":e.status==="offline"},t.class)},[e.src?C("img",{src:e.src,alt:e.alt}):Xe(e.icon)||e.initials,e.status&&C("span",{class:"avatar-status","aria-hidden":"true"})])}}}),ty=Me({name:"GnAvatarStack",props:{items:{type:Array,default:()=>[]},count:{type:[Number,String],default:""}},setup(e,{slots:t}){return()=>{var n;return C("span",{class:"avatar-stack"},[e.items.map(s=>C(Do,{...s,size:s.size||"sm"})),(n=t.default)==null?void 0:n.call(t),e.count&&C("span",{class:"avatar-stack-count"},`+${e.count}`)])}}}),hi=Me({name:"GnBadge",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},outline:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=cs(e.variant);return C("span",{...t,class:_e("badge",e.outline&&a==="primary"?"badge-primary-outline":`badge-${a}`,t.class)},(s=n.default)==null?void 0:s.call(n))}}}),it=Me({name:"GnButton",inheritAttrs:!1,props:{variant:{type:String,default:"primary"},size:{type:String,default:"md"},icon:{type:String,default:""},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button"}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=!!(e.icon||e.loading),i=cs(e.variant);return C("button",{...t,type:e.type,disabled:e.disabled||e.loading,class:_e("btn",`btn-${i}`,{"btn-small":e.size==="sm","btn-large":e.size==="lg","with-icon":a,"loading-state":e.loading},t.class)},[e.loading?Xe("ph-bold ph-spinner"):Xe(e.icon),(s=n.default)==null?void 0:s.call(n)])}}}),ny=Me({name:"GnCard",inheritAttrs:!1,props:{title:{type:String,default:""},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return C("article",{...t,class:_e("card",e.variant&&`card-${e.variant}`,t.class)},[(e.title||n.title)&&C("header",{class:"card-title"},((s=n.title)==null?void 0:s.call(n))||e.title),C("div",{class:"card-content"},(a=n.default)==null?void 0:a.call(n)),n.footer&&C("footer",{class:"card-footer"},n.footer())])}}}),Lp=Me({name:"GnCheckbox",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return C("label",{class:_e("checkbox",t.class)},[C("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:i=>n("update:modelValue",i.target.checked)}),C("span",{class:"checkbox-control","aria-hidden":"true"}),C("span",{class:"checkbox-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),$p=Me({name:"GnChip",inheritAttrs:!1,props:{variant:{type:String,default:""},icon:{type:String,default:""},selected:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},removable:{type:Boolean,default:!1},clickable:{type:Boolean,default:!1}},emits:["remove"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a,i,o,r;const u=e.clickable?"button":"span",l=e.variant?cs(e.variant):"",c=(o=(i=(a=s.default)==null?void 0:a.call(s))==null?void 0:i[0])==null?void 0:o.children;return C(u,{...t,type:u==="button"?"button":void 0,disabled:u==="button"?e.disabled:void 0,"aria-pressed":u==="button"?String(e.selected):void 0,class:_e("chip",l&&`chip-${l}`,{"chip-selected":e.selected,"chip-disabled":e.disabled},t.class)},[Xe(e.icon),(r=s.default)==null?void 0:r.call(s),e.removable&&C("button",{class:"chip-remove",type:"button","aria-label":c?`Remove ${c}`:"Remove",onClick:p=>{p.stopPropagation(),n("remove")}},[Xe("ph-x")])])}}}),sy=Me({name:"GnChipGroup",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var s;return C("div",{...t,class:_e("chip-group",t.class)},(s=n.default)==null?void 0:s.call(n))}}}),ay=0,iy=Me({name:"GnCombobox",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},options:{type:Array,default:()=>[]},placeholder:{type:String,default:"Search"},notFoundText:{type:String,default:"Nothing found"},state:{type:String,default:""},help:{type:String,default:""}},emits:["update:modelValue","select"],setup(e,{attrs:t,emit:n}){const s=`gn-combobox-${++ay}`,a=`${s}-listbox`,i=F(!1),o=F(-1),r=F(null),u=W(()=>e.options.map(_=>typeof _=="object"?_:{value:_,label:_})),l=W(()=>{var _;return String((_=e.modelValue)!=null?_:"").toLowerCase()}),c=W(()=>u.value.filter(_=>String(_.label).toLowerCase().includes(l.value))),p=_=>{_&&(n("update:modelValue",_.label),n("select",_),i.value=!1,o.value=-1)},g=_=>{c.value.length&&(i.value=!0,o.value=(o.value+_+c.value.length)%c.value.length,xt(()=>{var y,D,R;const N=(D=(y=r.value)==null?void 0:y.closest(".form-group"))==null?void 0:D.querySelector(".advanced-select");(R=N==null?void 0:N.querySelector(".option.focus"))==null||R.scrollIntoView({block:"nearest"})}))},b=_=>{_.key==="ArrowDown"?(_.preventDefault(),g(1)):_.key==="ArrowUp"?(_.preventDefault(),g(-1)):_.key==="Enter"?(_.preventDefault(),p(c.value[o.value])):_.key==="Escape"&&(i.value=!1,o.value=-1)};return()=>C("div",{class:"form-group"},[C("label",{class:_e("label",e.state)},[e.label,Xe(e.icon),C("input",{...t,ref:r,id:s,type:"text",value:e.modelValue,placeholder:e.placeholder,autocomplete:"off",role:"combobox","aria-autocomplete":"list","aria-expanded":i.value?"true":"false","aria-controls":a,"aria-activedescendant":o.value>=0?`${s}-option-${o.value}`:void 0,class:_e("input",t.class),onFocus:()=>{i.value=!0},onBlur:()=>{setTimeout(()=>{i.value=!1},120)},onInput:_=>{o.value=-1,i.value=!0,n("update:modelValue",Ra(_))},onKeydown:b})]),C("div",{class:"advanced-select-container"},[C("div",{class:_e("advanced-select",{"a-show":i.value})},[C("div",{class:"popup-options-container"},[C("div",{class:_e("not-found",{show:!c.value.length})},e.notFoundText),C("div",{id:a,class:_e("options",{show:c.value.length}),role:"listbox"},c.value.map((_,y)=>C("div",{id:`${s}-option-${y}`,class:_e("option",{focus:y===o.value}),role:"option","aria-selected":_.label===e.modelValue?"true":"false","data-value":_.value,"data-display-value":_.label,onMousedown:D=>{D.preventDefault(),p(_)}},_.label)))])])]),e.help&&C("div",{class:_e("input-info",e.state==="error"&&"error")},e.help)])}});function Dp({duration:e=300}={}){const t=F(!1),n=F(!1);let s=null;return{visible:t,closing:n,show:()=>{window.clearTimeout(s),n.value=!0,t.value=!0,xt(()=>{requestAnimationFrame(()=>{n.value=!1})})},hide:()=>{n.value=!0,s=window.setTimeout(()=>{t.value=!1,n.value=!1},e)},cancel:()=>{window.clearTimeout(s)}}}var oy=0,Ia=Me({name:"GnModal",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const s=`gn-modal-title-${++oy}`,a=F(null),{visible:i,closing:o,show:r,hide:u,cancel:l}=Dp();let c=null;const p=()=>{t("update:open",!1),t("close")},g=_=>{_.key==="Escape"?(_.preventDefault(),p()):Mp(_,a.value)},b=()=>{xt(()=>{var _;(_=a.value)==null||_.focus()})};return Ge(()=>e.open,_=>{var y;_?(r(),c=document.activeElement,document.addEventListener("keydown",g),b()):(u(),document.removeEventListener("keydown",g),(y=c==null?void 0:c.focus)==null||y.call(c),c=null)},{flush:"post",immediate:!0}),bn(()=>{document.removeEventListener("keydown",g),l()}),()=>{var _,y,D;return i.value?C(Ao,{to:"body"},[C("div",{class:_e("modal",o.value?"a-hide":"a-show"),"aria-hidden":"false"},[C("div",{class:"modal-backdrop",onClick:()=>e.closeOnBackdrop&&p()}),C("div",{ref:a,class:"modal-dialog",role:"dialog","aria-modal":"true","aria-labelledby":s,tabindex:"-1"},[C("header",{class:"modal-header"},[C("h4",{class:"modal-title",id:s},((_=n.title)==null?void 0:_.call(n))||e.title),C("button",{class:"btn-icon modal-close",type:"button","aria-label":"Close",onClick:p},[Xe("ph-x")])]),C("div",{class:"modal-panel"},[C("div",{class:"modal-body"},(y=n.default)==null?void 0:y.call(n)),(n.footer||n.actions)&&C("footer",{class:"modal-footer"},[(D=n.footer)==null?void 0:D.call(n),n.actions&&C("div",{class:"actions"},n.actions({close:p}))])])])])]):null}}}),ry=Me({name:"GnConfirmDialog",props:{open:{type:Boolean,default:!1},title:{type:String,default:"Requires confirmation"},message:{type:String,default:""},confirmText:{type:String,default:"YES"},cancelText:{type:String,default:"NO"},confirmVariant:{type:String,default:"warning"}},emits:["update:open","confirm","cancel"],setup(e,{emit:t,slots:n}){const s=()=>t("update:open",!1),a=()=>{t("cancel"),s()},i=()=>{t("confirm"),s()};return()=>C(Ia,{open:e.open,title:e.title,"onUpdate:open":o=>t("update:open",o)},{default:()=>{var o;return((o=n.default)==null?void 0:o.call(n))||C("p",{},e.message)},actions:()=>[C(it,{variant:"primary",onClick:a},()=>e.cancelText),C(it,{variant:e.confirmVariant,onClick:i},()=>e.confirmText)]})}}),sc=Me({name:"GnCopyButton",props:{text:{type:String,required:!0},icon:{type:String,default:"ph-copy"},successIcon:{type:String,default:"ph-check"},duration:{type:Number,default:3e3},label:{type:String,default:"Copy"},size:{type:String,default:null}},emits:["copy"],setup(e,{emit:t}){const n=F(!1);let s=null;const a=async()=>{try{await navigator.clipboard.writeText(e.text)}catch{const o=document.createElement("textarea");o.value=e.text,o.style.position="fixed",o.style.opacity="0",document.body.appendChild(o),o.select(),document.execCommand("copy"),document.body.removeChild(o)}n.value=!0,window.clearTimeout(s),s=window.setTimeout(()=>{n.value=!1},e.duration),t("copy",e.text)};return()=>C("button",{class:_e("btn-icon",{"btn-icon-sm":e.size==="sm"}),type:"button","aria-label":e.label,onClick:a},[Xe(n.value?e.successIcon:e.icon)])}}),ly=Me({name:"GnDescriptionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},compact:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>C("dl",{...t,class:_e("description-list",{"description-list-compact":e.compact},t.class)},e.items.map(s=>{var a;return C("div",{class:"description-list-row"},[C("dt",{class:"description-list-term"},s.term||s.label),C("dd",{class:_e("description-list-value",s.muted&&"description-list-value-muted")},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.value)])}))}}),lo=Me({name:"GnDefinitionList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>C("dl",{...t,class:_e("list list-definition",t.class)},e.items.map(s=>{var a;return C("div",{class:"list-row"},[C("dt",{class:"list-term"},s.term||s.label),C("dd",{class:"list-desc"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.description||s.value)])}))}}),Pp=Me({name:"GnDropdown",props:{label:{type:String,default:"Actions"},icon:{type:String,default:"ph-dots-three-outline"},variant:{type:String,default:"secondary"},items:{type:Array,default:()=>[]}},emits:["select"],setup(e,{emit:t,slots:n}){const s=F(!1),a=F(null),i=()=>{s.value=!1,document.removeEventListener("click",o),document.removeEventListener("keydown",r)},o=c=>{a.value&&!a.value.contains(c.target)&&i()},r=c=>{c.key==="Escape"&&(c.preventDefault(),i())},u=()=>{s.value=!s.value,s.value?(setTimeout(()=>document.addEventListener("click",o),0),document.addEventListener("keydown",r)):i()},l=c=>{var p;c.disabled||((p=c.onSelect)==null||p.call(c,c),t("select",c),i())};return bn(i),()=>{var c,p;return C("div",{ref:a,class:_e("dropdown",{"is-open":s.value})},[((c=n.trigger)==null?void 0:c.call(n,{open:s.value,toggle:u}))||C(it,{variant:e.variant,icon:e.icon,"aria-expanded":s.value?"true":"false",onClick:u},()=>e.label),C("div",{class:"dropdown-menu",role:"menu"},((p=n.default)==null?void 0:p.call(n,{close:i}))||e.items.map(g=>C("button",{class:_e("dropdown-item",g.danger&&"dropdown-item-danger"),type:"button",role:"menuitem",disabled:g.disabled,onClick:()=>l(g)},[Xe(g.icon),g.label])))])}}}),cy=0,uy=Me({name:"GnDrawer",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},position:{type:String,default:"right"}},emits:["update:open","close"],setup(e,{emit:t,slots:n}){const s=`gn-drawer-title-${++cy}`,a=F(null),{visible:i,closing:o,show:r,hide:u,cancel:l}=Dp();let c=null;const p=()=>{t("update:open",!1),t("close")},g=b=>{b.key==="Escape"?(b.preventDefault(),p()):Mp(b,a.value)};return Ge(()=>e.open,b=>{var _;b?(r(),c=document.activeElement,document.addEventListener("keydown",g),xt(()=>{var y;return(y=a.value)==null?void 0:y.focus()})):(u(),document.removeEventListener("keydown",g),(_=c==null?void 0:c.focus)==null||_.call(c),c=null)},{flush:"post"}),bn(()=>{document.removeEventListener("keydown",g),l()}),()=>{var b,_;return i.value?C(Ao,{to:"body"},[C("div",{class:_e("drawer",o.value?"a-hide":"a-show",{"drawer-left":e.position==="left"}),"aria-hidden":"false"},[C("div",{class:"drawer-backdrop",onClick:p}),C("aside",{ref:a,class:"drawer-panel",role:"dialog","aria-modal":"true","aria-labelledby":s,tabindex:"-1"},[C("header",{class:"drawer-header"},[C("h4",{class:"drawer-title",id:s},((b=n.title)==null?void 0:b.call(n))||e.title),C("button",{class:"btn-icon drawer-close",type:"button","aria-label":"Close",onClick:p},[Xe("ph-x")])]),C("div",{class:"drawer-body"},(_=n.default)==null?void 0:_.call(n)),n.footer&&C("footer",{class:"drawer-footer"},n.footer({close:p}))])])]):null}}}),dy=Me({name:"GnEmptyState",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-package"},variant:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return C("div",{...t,class:_e("empty-state",e.variant&&`empty-state-${e.variant}`,t.class)},[C("div",{class:"empty-state-icon"},[Xe(e.icon)]),C("h3",{class:"empty-state-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.text||n.default)&&C("p",{class:"empty-state-text"},((a=n.default)==null?void 0:a.call(n))||e.text),n.actions&&C("div",{class:"empty-state-actions"},n.actions())])}}});function Su(e){const t=e.name.split(".").pop();return t?t.slice(0,6).toUpperCase():"FILE"}function fy(e){if(!e.size)return"0 B";const t=["B","KB","MB","GB"],n=Math.min(Math.floor(Math.log(e.size)/Math.log(1024)),t.length-1),s=e.size/Math.pow(1024,n);return`${s.toFixed(s>=10||n===0?0:1)} ${t[n]}`}var py=Me({name:"GnFileUpload",props:{modelValue:{type:Array,default:()=>[]},title:{type:String,default:"Upload files"},description:{type:String,default:"Attach documents, archives or images."},primary:{type:String,default:"Choose files"},secondary:{type:String,default:"Images get thumbnails, other files show their type"},badge:{type:String,default:""},multiple:{type:Boolean,default:!0},accept:{type:String,default:""}},emits:["update:modelValue","change"],setup(e,{emit:t,slots:n}){const s=F(new Map),a=l=>{const c=s.value.get(l);c&&(URL.revokeObjectURL(c),s.value.delete(l))},i=()=>{s.value.forEach(l=>URL.revokeObjectURL(l)),s.value.clear()},o=l=>{const c=Array.from(l||[]);t("update:modelValue",c),t("change",c)},r=l=>{a(e.modelValue[l]);const c=e.modelValue.filter((p,g)=>g!==l);t("update:modelValue",c),t("change",c)},u=l=>{var c;return(c=l.type)!=null&&c.startsWith("image/")?(s.value.has(l)||s.value.set(l,URL.createObjectURL(l)),s.value.get(l)):""};return Ge(()=>e.modelValue,l=>{const c=new Set(l);[...s.value.keys()].forEach(p=>{c.has(p)||a(p)})}),bn(i),()=>{var l,c;return C("div",{class:"file-upload-panel"},[C("div",{class:"file-upload-form"},[C("div",{class:"file-upload-header"},[C("div",{class:"file-upload-heading"},[C("h3",{class:"file-upload-title"},((l=n.title)==null?void 0:l.call(n))||e.title),C("p",{class:"file-upload-description"},((c=n.description)==null?void 0:c.call(n))||e.description)]),e.badge&&C(hi,{variant:"info"},()=>e.badge)]),C("label",{class:"file-upload-dropzone"},[C("span",{class:"file-upload-icon","aria-hidden":"true"},[Xe("ph-cloud-arrow-up")]),C("span",{class:"file-upload-body"},[C("span",{class:"file-upload-primary"},e.primary),C("span",{class:"file-upload-secondary"},e.secondary)]),C("input",{type:"file",multiple:e.multiple,accept:e.accept||void 0,onChange:p=>o(p.target.files)})]),C("div",{class:"file-upload-preview",hidden:!e.modelValue.length},e.modelValue.map((p,g)=>C("figure",{class:"file-upload-preview-item"},[C("button",{class:"file-upload-preview-remove",type:"button","aria-label":`Remove ${p.name}`,onClick:()=>r(g)},[Xe("ph-x")]),C("div",{class:"file-upload-preview-visual"},u(p)?C("img",{src:u(p),alt:""}):C("span",{class:"file-upload-preview-type"},Su(p))),C("figcaption",{},[C("span",{class:"file-upload-preview-name"},p.name),C("span",{class:"file-upload-preview-meta"},`${Su(p)} / ${fy(p)}`)])]))),n.actions&&C("div",{class:"file-upload-actions"},n.actions()),!n.actions&&e.modelValue.length>0&&C("div",{class:"file-upload-actions"},[C(it,{variant:"secondary",size:"sm",onClick:()=>{i(),o([])}},()=>"Reset")])])])}}}),Kn=Me({name:"GnIconButton",inheritAttrs:!1,props:{icon:{type:String,required:!0},label:{type:String,required:!0},type:{type:String,default:"button"},size:{type:String,default:null},withoutHover:{type:Boolean,default:!1}},setup(e,{attrs:t}){return()=>C("button",{...t,type:e.type,"aria-label":e.label,class:_e("btn-icon",{"btn-icon-sm":e.size==="sm","without-hover":e.withoutHover},t.class)},[Xe(e.icon)])}}),gy=Me({name:"GnIdentity",props:{title:{type:String,required:!0},meta:{type:String,default:""},avatar:{type:Object,default:()=>({})}},setup(e,{slots:t}){return()=>{var n,s,a;return C("span",{class:"identity"},[((n=t.avatar)==null?void 0:n.call(t))||C(Do,e.avatar),C("span",{class:"identity-content"},[C("span",{class:"identity-title"},((s=t.title)==null?void 0:s.call(t))||e.title),(e.meta||t.meta)&&C("span",{class:"identity-meta"},((a=t.meta)==null?void 0:a.call(t))||e.meta)])])}}}),Xs=Me({name:"GnInput",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},bare:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>{const s=C("input",{...t,type:e.type,value:e.modelValue,class:_e(e.bare?"":"input",t.class),onInput:a=>n("update:modelValue",Ra(a))});return e.bare?s:C("div",{class:"form-group"},[C("label",{class:_e("label",e.state)},[e.label,Xe(e.icon),s]),e.help&&C("div",{class:_e("input-info",e.state==="error"&&"error")},e.help)])}}}),my=Me({name:"GnInputGroup",inheritAttrs:!1,props:{compact:{type:Boolean,default:!1},addon:{type:String,default:""},icon:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a;return C("div",{...t,class:_e("input-group",{"input-group-compact":e.compact},t.class)},[(e.addon||e.icon||n.addon)&&C("span",{class:"input-group-addon"},((s=n.addon)==null?void 0:s.call(n))||Xe(e.icon)||e.addon),(a=n.default)==null?void 0:a.call(n),n.action&&C("span",{class:"input-group-action"},n.action())])}}}),hy=Me({name:"GnList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},ordered:{type:Boolean,default:!1},icons:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){const s=e.ordered?"ol":"ul";return()=>C(s,{...t,class:_e("list",{"list-ordered":e.ordered,"with-icons":e.icons},t.class)},e.items.map(a=>{var i;return C("li",{class:"list-item"},[Xe(a.icon),((i=n.item)==null?void 0:i.call(n,{item:a}))||a.label||a])}))}}),Qs=Me({name:"GnLoader",inheritAttrs:!1,props:{circle:{type:Boolean,default:!1},label:{type:String,default:"Loading"}},setup(e,{attrs:t}){return()=>e.circle?C("div",{...t,class:_e("circle-loader",t.class)},[Xe("ph-bold ph-spinner normalize"),e.label]):C("div",{...t,class:_e("loader",t.class),role:"status","aria-label":e.label})}}),vy=Me({name:"GnLoginCard",props:{title:{type:String,default:"Sign in"},logoSrc:{type:String,default:""},logoIcon:{type:String,default:""},usernameLabel:{type:String,default:"Username"},usernameIcon:{type:String,default:"ph-user"},passwordLabel:{type:String,default:"Password"},passwordIcon:{type:String,default:"ph-lock-key"},rememberMe:{type:Boolean,default:!1},rememberLabel:{type:String,default:"Remember me"},submitText:{type:String,default:"Sign in"},submitVariant:{type:String,default:"secondary"},loading:{type:Boolean,default:!1},error:{type:String,default:""},forgotHref:{type:String,default:"#"},forgotText:{type:String,default:"Forgot password?"},signupHref:{type:String,default:"#"},signupText:{type:String,default:"Create account"}},emits:["submit"],setup(e,{emit:t}){const n=F(""),s=F(""),a=F(!1),i=o=>{o.preventDefault(),t("submit",{username:n.value,password:s.value,remember:a.value})};return()=>C("article",{class:"card login-card"},[(e.title||e.logoSrc||e.logoIcon)&&C("header",{class:"card-title login-card-header"},[e.logoSrc&&C("img",{src:e.logoSrc,alt:"",class:"login-card-logo"}),e.logoIcon&&!e.logoSrc&&Xe(e.logoIcon,"login-card-logo-icon"),e.title&&C("span",{class:"login-card-title"},e.title)]),C("div",{class:"card-content"},[e.error&&C(Vn,{variant:"danger",class:"login-card-error"},()=>e.error),C("form",{class:"login-card-form",onSubmit:i},[C(Xs,{modelValue:n.value,"onUpdate:modelValue":o=>{n.value=o},label:e.usernameLabel,icon:e.usernameIcon,type:"text",autocomplete:"username"}),C(Xs,{modelValue:s.value,"onUpdate:modelValue":o=>{s.value=o},label:e.passwordLabel,icon:e.passwordIcon,type:"password",autocomplete:"current-password"}),e.rememberMe&&C(Lp,{modelValue:a.value,"onUpdate:modelValue":o=>{a.value=o}},()=>e.rememberLabel),C(it,{variant:e.submitVariant,loading:e.loading,disabled:e.loading,type:"submit",icon:"ph-sign-in",class:"login-card-submit"},()=>e.submitText),(e.forgotHref||e.signupHref)&&C("div",{class:"login-card-links"},[e.forgotHref&&C("a",{href:e.forgotHref,class:"login-card-link"},e.forgotText),e.signupHref&&C("a",{href:e.signupHref,class:"login-card-link"},e.signupText)])])])])}}),by=Me({name:"GnMetricCard",inheritAttrs:!1,props:{label:{type:String,required:!0},value:{type:[String,Number],required:!0},icon:{type:String,default:"ph-chart-line-up"},delta:{type:String,default:""},negative:{type:Boolean,default:!1},meta:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i;return C("article",{...t,class:_e("card metric-card",t.class)},[C("div",{class:"card-content"},[C("div",{class:"metric-card-header"},[C("p",{class:"metric-card-label"},((s=n.label)==null?void 0:s.call(n))||e.label),C("span",{class:"metric-card-icon"},[Xe(e.icon)])]),C("p",{class:"metric-card-value"},((a=n.value)==null?void 0:a.call(n))||e.value),(e.delta||e.meta||n.meta)&&C("div",{class:"metric-card-meta"},[e.delta&&C("span",{class:_e("metric-card-delta",{"metric-card-delta-negative":e.negative})},e.delta),((i=n.meta)==null?void 0:i.call(n))||e.meta])])])}}});function Bp(){var e;const t=xa();return((e=t==null?void 0:t.proxy)==null?void 0:e.$router)||null}function Fp(){var e;const t=xa();return((e=t==null?void 0:t.proxy)==null?void 0:e.$route)||null}function Up(e,t,n="prefix"){if(!e)return!1;const s=e.value||e;return typeof t=="string"?n==="exact"?s.path===t:s.path===t||s.path.startsWith(t+"/"):t.path?n==="exact"?s.path===t.path:s.path===t.path||s.path.startsWith(t.path+"/"):t.name?s.name===t.name:!1}var Gp=Me({name:"GnNavList",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{attrs:t,emit:n,slots:s}){const a=Bp(),i=Fp(),o=!!(a&&i),r=l=>{if(l){if(typeof l=="string")return l;if(l.path)return l.path}},u=W(()=>e.items.map(l=>{const c=!!l.to,p=c?o?a.resolve(l.to).href:r(l.to):l.href,g=c&&o?Up(i,l.to,e.activeMatch):!!l.active;return{...l,resolvedHref:p,isActive:g,hasTo:c}}));return()=>C("ul",{...t,class:_e("list list-nav",t.class)},u.value.map(l=>{var c,p;return C("li",{class:_e("list-item",{"list-item-active":l.isActive})},[C(l.resolvedHref?"a":"button",{class:"list-action",href:l.resolvedHref,type:l.resolvedHref?void 0:"button",onClick:g=>{var b;l.hasTo&&o&&(g.preventDefault(),a.push(l.to)),(b=l.onSelect)==null||b.call(l,l,g),n("select",l)}},[C("span",{class:"list-label"},[Xe(l.icon),((c=s.label)==null?void 0:c.call(s,{item:l}))||l.label]),(l.meta||s.meta)&&C("span",{class:"list-meta"},((p=s.meta)==null?void 0:p.call(s,{item:l}))||l.meta)])])}))}}),_y=0,yy=Me({name:"GnNavigationShell",props:{brand:{type:String,default:"GNexus UI Kit"},logoSrc:{type:String,default:"/assets/imgs/gnexus-mark.svg"},current:{type:String,default:""},title:{type:String,default:"Sections"},subtitle:{type:String,default:"Navigation"},footerLeft:{type:String,default:""},footerRight:{type:String,default:""},items:{type:Array,default:()=>[]},activeMatch:{type:String,default:"prefix"}},emits:["select"],setup(e,{emit:t,slots:n}){const s=F(!1),a=`gn-nav-drawer-${++_y}`,i=F(null);let o=null;const r=()=>{s.value=!1},u=()=>{s.value=!s.value},l=c=>{c.key==="Escape"&&(c.preventDefault(),r())};return Ge(s,c=>{var p;c?(o=document.activeElement,document.body.classList.add("nav-drawer-open"),document.addEventListener("keydown",l),xt(()=>{var g;return(g=i.value)==null?void 0:g.focus()})):(document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",l),(p=o==null?void 0:o.focus)==null||p.call(o),o=null)}),bn(()=>{document.body.classList.remove("nav-drawer-open"),document.removeEventListener("keydown",l)}),()=>{var c,p,g,b,_,y,D;return[C("header",{class:"nav-topbar"},[C("button",{class:"nav-topbar-toggle",type:"button","aria-controls":a,"aria-expanded":s.value?"true":"false",onClick:u},[Xe("ph-sidebar-simple"),C("span",{},"Menu")]),C("div",{class:"nav-topbar-brand"},[e.logoSrc&&C("img",{src:e.logoSrc,alt:"","aria-hidden":"true"}),C("span",{},((c=n.brand)==null?void 0:c.call(n))||e.brand)]),C("div",{class:"nav-topbar-current"},((p=n.current)==null?void 0:p.call(n))||e.current)]),C("div",{class:"nav-drawer-backdrop",onClick:r}),C("aside",{ref:i,class:["nav-drawer",{"is-open":s.value}],id:a,"aria-label":"Navigation","aria-hidden":s.value?"false":"true",tabindex:"-1"},[C("header",{class:"nav-drawer-header"},[C("div",{},[C("div",{class:"nav-drawer-title"},((g=n.title)==null?void 0:g.call(n))||e.title),C("div",{class:"nav-drawer-subtitle"},((b=n.subtitle)==null?void 0:b.call(n))||e.subtitle)]),C("button",{class:"nav-drawer-close",type:"button","aria-label":"Close navigation",onClick:r},[Xe("ph-x")])]),C("nav",{class:"nav-drawer-body"},[((_=n.default)==null?void 0:_.call(n,{close:r}))||C(Gp,{items:e.items,activeMatch:e.activeMatch,onSelect:R=>{t("select",R),r()}})]),(n.footer||e.footerLeft||e.footerRight)&&C("footer",{class:"nav-drawer-footer"},((y=n.footer)==null?void 0:y.call(n))||[C("span",{},e.footerLeft),C("span",{},e.footerRight)])]),(D=n.content)==null?void 0:D.call(n)]}}}),ky=Me({name:"GnPageHeader",inheritAttrs:!1,props:{title:{type:String,required:!0},subtitle:{type:String,default:""},kicker:{type:String,default:""},compact:{type:Boolean,default:!1},accent:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i;return C("header",{...t,class:_e("page-header",{"page-header-compact":e.compact,"page-header-accent":e.accent},t.class)},[C("div",{class:"page-header-content"},[(e.kicker||n.kicker)&&C("div",{class:"page-header-kicker"},((s=n.kicker)==null?void 0:s.call(n))||e.kicker),C("h1",{class:"page-header-title"},((a=n.title)==null?void 0:a.call(n))||e.title),(e.subtitle||n.subtitle)&&C("p",{class:"page-header-subtitle"},((i=n.subtitle)==null?void 0:i.call(n))||e.subtitle),n.meta&&C("div",{class:"page-header-meta"},n.meta())]),n.actions&&C("div",{class:"page-header-actions"},n.actions())])}}}),wy=Me({name:"GnHorizontalCard",inheritAttrs:!1,props:{image:{type:String,default:""},title:{type:String,default:""},titleHref:{type:String,default:""},icon:{type:String,default:""}},setup(e,{attrs:t,slots:n}){const s=()=>{var a;const i=[Xe(e.icon),((a=n.title)==null?void 0:a.call(n))||e.title];return e.titleHref?C("a",{href:e.titleHref,class:"card-title-link"},i):i};return()=>{var a;return C("article",{...t,class:_e("card card-horizontal",t.class)},[e.image&&C("div",{class:"card-media"},[C("img",{src:e.image,alt:""})]),C("div",{class:"card-body"},[(e.title||e.icon||n.title)&&C("h3",{class:"card-title"},s()),C("div",{class:"card-content"},(a=n.default)==null?void 0:a.call(n)),n.footer&&C("footer",{class:"card-footer"},n.footer())])])}}}),Sy=Me({name:"GnPagination",props:{page:{type:Number,required:!0},totalPages:{type:Number,required:!0},ariaLabel:{type:String,default:"Pagination"}},emits:["update:page"],setup(e,{emit:t}){const n=s=>{s>=1&&s<=e.totalPages&&s!==e.page&&t("update:page",s)};return()=>{const s=Array.from({length:e.totalPages},(a,i)=>i+1);return C("nav",{class:"pagination","aria-label":e.ariaLabel},[C("button",{class:"pagination-item",type:"button",disabled:e.page<=1,onClick:()=>n(e.page-1)},[Xe("ph-arrow-left")]),s.map(a=>C("button",{class:_e("pagination-item",{"pagination-item-active":a===e.page}),type:"button","aria-current":a===e.page?"page":void 0,onClick:()=>n(a)},a)),C("button",{class:"pagination-item",type:"button",disabled:e.page>=e.totalPages,onClick:()=>n(e.page+1)},[Xe("ph-arrow-right")])])}}}),Ey=Me({name:"GnPopover",props:{label:{type:String,default:"Details"},title:{type:String,default:""},text:{type:String,default:""},icon:{type:String,default:"ph-info"},variant:{type:String,default:"accent"}},setup(e,{slots:t}){const n=F(!1),s=F(null),a=()=>{n.value=!1,document.removeEventListener("click",i),document.removeEventListener("keydown",o)},i=u=>{s.value&&!s.value.contains(u.target)&&a()},o=u=>{u.key==="Escape"&&(u.preventDefault(),a())},r=()=>{n.value=!n.value,n.value?(setTimeout(()=>document.addEventListener("click",i),0),document.addEventListener("keydown",o)):a()};return bn(a),()=>{var u,l,c;return C("div",{ref:s,class:_e("popover",{"is-open":n.value})},[((u=t.trigger)==null?void 0:u.call(t,{open:n.value,toggle:r}))||C(it,{variant:e.variant,icon:e.icon,"aria-expanded":n.value?"true":"false",onClick:r},()=>e.label),C("div",{class:"popover-panel"},[(e.title||t.title)&&C("h3",{class:"popover-title"},((l=t.title)==null?void 0:l.call(t))||e.title),(e.text||t.default)&&C("p",{class:"popover-text"},((c=t.default)==null?void 0:c.call(t))||e.text)])])}}}),Hp=Me({name:"GnProgress",inheritAttrs:!1,props:{value:{type:Number,required:!0},max:{type:Number,default:100},label:{type:String,default:""},variant:{type:String,default:"secondary"},striped:{type:Boolean,default:!1},animated:{type:Boolean,default:!1}},setup(e,{attrs:t,slots:n}){return()=>{var s;const a=Math.max(0,Math.min(100,Math.round(e.value/e.max*100))),i=cs(e.variant,"secondary");return C("div",{...t,class:_e("progress",`progress-${i}`,{"progress-striped":e.striped,"progress-animated":e.animated},t.class),style:{"--progress-value":`${a}%`}},[(e.label||n.label)&&C("div",{class:"progress-header"},[C("span",{},((s=n.label)==null?void 0:s.call(n))||e.label),C("span",{class:"progress-value"},`${a}%`)]),C("div",{class:"progress-track"},[C("span",{class:"progress-bar",role:"progressbar","aria-valuenow":e.value,"aria-valuemin":0,"aria-valuemax":e.max})])])}}}),Ty=Me({name:"GnProgressStages",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t}){return()=>C("div",{...t,class:_e("progress-stages",t.class)},e.items.map(n=>C("div",{class:_e("progress-stage",{"progress-stage-complete":n.status==="complete","progress-stage-current":n.status==="current"})},n.label||n)))}}),zp=Me({name:"GnRadio",inheritAttrs:!1,props:{modelValue:{type:[String,Number,Boolean],default:""},value:{type:[String,Number,Boolean],required:!0},label:{type:String,default:""},name:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return C("label",{class:_e("radio",t.class)},[C("input",{...t,type:"radio",name:e.name,value:e.value,checked:e.modelValue===e.value,disabled:e.disabled,onChange:()=>n("update:modelValue",e.value)}),C("span",{class:"radio-control","aria-hidden":"true"}),C("span",{class:"radio-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),El=Me({name:"GnRadioGroup",props:{modelValue:{type:[String,Number,Boolean],default:""},name:{type:String,default:"gn-radio-group"},label:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){return()=>{var s;return C("div",{class:"form-group radio-group",role:"radiogroup","aria-label":e.label||void 0},[e.label&&C("div",{class:"label"},e.label),((s=n.default)==null?void 0:s.call(n))||e.options.map(a=>C(zp,{modelValue:e.modelValue,"onUpdate:modelValue":i=>t("update:modelValue",i),name:e.name,value:a.value,label:a.label,disabled:a.disabled}))])}}}),Tl=Me({name:"GnRange",inheritAttrs:!1,props:{modelValue:{type:[Number,String],default:0},label:{type:String,default:""},min:{type:[Number,String],default:0},max:{type:[Number,String],default:100},step:{type:[Number,String],default:1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>C("div",{class:"range"},[C("label",{class:"label"},[e.label,C("input",{...t,type:"range",value:e.modelValue,min:e.min,max:e.max,step:e.step,onInput:s=>n("update:modelValue",Ra(s))})])])}}),Ay=0;function xy(){return`repeater-item-${++Ay}`}var Ny=Me({name:"GnRepeater",inheritAttrs:!1,props:{modelValue:{type:Array,default:()=>[]},label:{type:String,default:"Items"},addLabel:{type:String,default:"Add"},addIcon:{type:String,default:"ph-plus"},removeLabel:{type:String,default:"Remove"},removeIcon:{type:String,default:"ph-trash"},minItems:{type:Number,default:1},maxItems:{type:Number,default:0},itemFactory:{type:Function,default:()=>()=>({id:xy()})},disabled:{type:Boolean,default:!1}},emits:["update:modelValue","add","remove"],setup(e,{attrs:t,emit:n,slots:s}){const a=W(()=>!(e.disabled||e.maxItems>0&&e.modelValue.length>=e.maxItems));function i(u){return!(e.disabled||e.modelValue.length<=e.minItems)}function o(){if(!a.value)return;const u=e.itemFactory(),l=[...e.modelValue,u];n("update:modelValue",l),n("add",u)}function r(u){if(!i())return;const l=e.modelValue[u],c=e.modelValue.filter((p,g)=>g!==u);n("update:modelValue",c),n("remove",l)}return()=>{var u;const c=((u=s.header)==null?void 0:u.call(s,{add:o,canAdd:a.value}))||C("div",{class:"repeater-header"},[C("span",{class:"repeater-title"},e.label),C("button",{type:"button",class:_e("btn","btn-secondary","btn-small","with-icon"),disabled:!a.value,onClick:o},[Xe(e.addIcon),e.addLabel])]),p=e.modelValue.map((g,b)=>{var _,y,D,R;const N=(y=(_=g==null?void 0:g.id)!=null?_:g==null?void 0:g.key)!=null?y:b,S=i(),M={item:g,index:b,remove:()=>r(b),canRemove:S},O=(D=s.item)==null?void 0:D.call(s,M),B=(R=s.actions)==null?void 0:R.call(s,M),L=!s.actions&&C("button",{type:"button",class:_e("btn-icon","btn-icon-sm"),"aria-label":e.removeLabel,disabled:!S,onClick:$=>{$.stopPropagation(),r(b)}},[Xe(e.removeIcon)]);return C("div",{class:"repeater-item",key:N},[C("div",{class:"repeater-item-body"},O),(B||L)&&C("div",{class:"repeater-item-actions"},B||[L])])});return C("div",{...t,class:_e("repeater",{"repeater-disabled":e.disabled},t.class)},[c,C("div",{class:"repeater-list"},p)])}}}),ac=Me({name:"GnTabs",props:{modelValue:{type:String,default:""},items:{type:Array,required:!0},compact:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},ariaLabel:{type:String,default:"Tabs"}},emits:["update:modelValue"],setup(e,{emit:t,slots:n}){const s=W(()=>{var u,l;return e.modelValue||((u=e.items.find(c=>!c.disabled))==null?void 0:u.id)||((l=e.items[0])==null?void 0:l.id)}),a=u=>{u.disabled||t("update:modelValue",u.id)},i=()=>e.items.filter(u=>!u.disabled),o=(u,l)=>{const c=i(),p=c.findIndex(b=>b.id===u.id),g=c[(p+l+c.length)%c.length];a(g)},r=(u,l)=>{if(u.key==="ArrowRight"||u.key==="ArrowDown")u.preventDefault(),o(l,1);else if(u.key==="ArrowLeft"||u.key==="ArrowUp")u.preventDefault(),o(l,-1);else if(u.key==="Home")u.preventDefault(),a(i()[0]);else if(u.key==="End"){u.preventDefault();const c=i();a(c[c.length-1])}};return()=>C("div",{class:_e("tabs",{"tabs-compact":e.compact,"tabs-vertical":e.vertical})},[C("div",{class:"tabs-list",role:"tablist","aria-label":e.ariaLabel},e.items.map(u=>{const l=u.id===s.value,c=`${u.id}-panel`;return C("button",{class:_e("tab",{"tab-active":l}),type:"button",role:"tab","aria-selected":l?"true":"false","aria-controls":c,"aria-disabled":u.disabled?"true":void 0,tabindex:l?"0":"-1",onClick:()=>a(u),onKeydown:p=>r(p,u)},[Xe(u.icon),u.label])})),C("div",{class:"tabs-panels"},e.items.map(u=>{var l,c;const p=u.id===s.value;return C("div",{id:`${u.id}-panel`,class:_e("tab-panel",{"tab-panel-active":p}),role:"tabpanel",hidden:!p},((l=n[u.id])==null?void 0:l.call(n,{item:u,active:p}))||p&&((c=n.default)==null?void 0:c.call(n,{item:u,active:p})))}))])}}),Cy=Me({name:"GnRouterTabs",props:{items:{type:Array,required:!0},compact:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},ariaLabel:{type:String,default:"Tabs"},activeMatch:{type:String,default:"prefix"}},setup(e,{slots:t}){const n=Bp(),s=Fp(),a=!!(n&&s);!a&&typeof process<"u"&&Op&&console.warn("[gnexus-ui-kit] GnRouterTabs requires vue-router. Falling back to standard tabs.");const i=W(()=>e.items.map(u=>({id:u.id,label:u.label,icon:u.icon,disabled:u.disabled,to:u.to}))),o=W(()=>{var u,l;if(!a)return((u=i.value.find(p=>!p.disabled))==null?void 0:u.id)||"";const c=i.value.find(p=>p.disabled||!p.to?!1:Up(s,p.to,e.activeMatch));return(c==null?void 0:c.id)||((l=i.value.find(p=>!p.disabled))==null?void 0:l.id)||""}),r=u=>{if(!a)return;const l=i.value.find(c=>c.id===u);l&&l.to&&n.push(l.to)};return()=>C(ac,{modelValue:o.value,items:i.value,compact:e.compact,vertical:e.vertical,ariaLabel:e.ariaLabel,"onUpdate:modelValue":r},t)}}),Kp=Me({name:"GnSearchField",inheritAttrs:!1,props:{modelValue:{type:String,default:""},placeholder:{type:String,default:"Search"},compact:{type:Boolean,default:!0},clearable:{type:Boolean,default:!0}},emits:["update:modelValue","clear"],setup(e,{attrs:t,emit:n}){const s=()=>{n("update:modelValue",""),n("clear")};return()=>C("div",{class:_e("input-group search-field",{"input-group-compact":e.compact})},[C("span",{class:"input-group-addon"},[Xe("ph-magnifying-glass")]),C("input",{...t,type:"search",value:e.modelValue,placeholder:e.placeholder,class:_e("input-group-input",t.class),onInput:a=>n("update:modelValue",Ra(a))}),e.clearable&&C("button",{class:"input-group-action",type:"button","aria-label":"Clear search",onClick:s},[Xe("ph-x")])])}}),co=Me({name:"GnSelect",inheritAttrs:!1,props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""},options:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){const a=()=>e.options.map(i=>{const o=typeof i=="object"?i.value:i,r=typeof i=="object"?i.label:i;return C("option",{value:o},r)});return()=>{var i;return C("div",{class:"form-group"},[C("label",{class:_e("label",e.state)},[e.label,Xe(e.icon),C("div",{class:"select-wrap"},[C("select",{...t,value:e.modelValue,class:_e("input select",t.class),onChange:o=>n("update:modelValue",Ra(o))},((i=s.default)==null?void 0:i.call(s))||a())])]),e.help&&C("div",{class:_e("input-info",e.state==="error"&&"error")},e.help)])}}}),Ry=Me({name:"GnSkeleton",inheritAttrs:!1,props:{type:{type:String,default:"line"},stack:{type:Boolean,default:!1},count:{type:Number,default:1}},setup(e,{attrs:t}){const n=s=>C("span",{key:s,...t,class:_e("skeleton",`skeleton-${e.type}`,t.class)});return()=>e.stack?C("div",{class:"skeleton-stack"},Array.from({length:e.count},(s,a)=>n(a))):n(0)}}),Iy=Me({name:"GnSteps",inheritAttrs:!1,props:{items:{type:Array,required:!0},vertical:{type:Boolean,default:!1}},setup(e,{attrs:t}){return()=>C("ol",{...t,class:_e("steps",{"steps-vertical":e.vertical},t.class)},e.items.map((n,s)=>C("li",{class:_e("step",{"step-complete":n.status==="complete","step-current":n.status==="current","step-disabled":n.disabled||n.status==="disabled"})},[C("span",{class:"step-marker"},n.marker||String(s+1)),C("h3",{class:"step-title"},n.title),n.text&&C("p",{class:"step-text"},n.text)])))}}),Oy=Me({name:"GnStatusCard",inheritAttrs:!1,props:{title:{type:String,required:!0},text:{type:String,default:""},icon:{type:String,default:"ph-stack"},variant:{type:String,default:"primary"}},setup(e,{attrs:t,slots:n}){const s=cs(e.variant);return()=>{var a,i,o;return C("article",{...t,class:_e("card status-card",`card-${s}`,t.class)},[C("span",{class:"card-title"},((a=n.title)==null?void 0:a.call(n))||e.title),C("div",{class:"card-content"},[C("div",{class:"status-icon-container"},[C("div",{class:"status-icon"},((i=n.icon)==null?void 0:i.call(n))||[Xe(e.icon)])]),(e.text||n.default)&&C("p",{class:"status-name"},((o=n.default)==null?void 0:o.call(n))||e.text)])])}}}),qp=Me({name:"GnSwitch",inheritAttrs:!1,props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n,slots:s}){return()=>{var a;return C("label",{class:_e("switch",t.class)},[C("input",{...t,type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:i=>n("update:modelValue",i.target.checked)}),C("span",{class:"switch-control","aria-hidden":"true"}),C("span",{class:"switch-label"},((a=s.default)==null?void 0:a.call(s))||e.label)])}}}),My=Me({name:"GnTagInput",inheritAttrs:!1,props:{modelValue:{type:Array,default:()=>[]},label:{type:String,default:""},placeholder:{type:String,default:"Add item…"},help:{type:String,default:""},disabled:{type:Boolean,default:!1},separator:{type:String,default:","},unique:{type:Boolean,default:!0},maxItems:{type:Number,default:0}},emits:["update:modelValue","add","remove"],setup(e,{emit:t,attrs:n,slots:s}){const a=F(null),i=F(!1),o=F(""),r=W(()=>!(e.disabled||e.maxItems>0&&e.modelValue.length>=e.maxItems));function u(_){return _.trim().replace(/\s+/g," ")}function l(_){const y=u(_);if(!y||e.unique&&e.modelValue.includes(y)||e.maxItems>0&&e.modelValue.length>=e.maxItems)return;const D=[...e.modelValue,y];t("update:modelValue",D),t("add",y)}function c(_){const y=e.modelValue[_],D=e.modelValue.filter((R,N)=>N!==_);t("update:modelValue",D),t("remove",y)}function p(_){if(_.key==="Enter"){_.preventDefault(),o.value&&((e.separator?o.value.split(e.separator).map(D=>D.trim()).filter(Boolean):[o.value]).forEach(l),o.value="");return}if(_.key==="Backspace"&&!o.value&&e.modelValue.length>0){c(e.modelValue.length-1);return}}function g(_){const y=_.clipboardData.getData("text");if(!y||!e.separator)return;_.preventDefault();const D=y.split(e.separator).map(N=>N.trim()).filter(Boolean),R=[];for(const N of D){const S=u(N);if(S&&!(e.unique&&e.modelValue.includes(S))){if(e.maxItems>0&&e.modelValue.length+R.length>=e.maxItems)break;R.push(S)}}if(R.length){const N=[...e.modelValue,...R];t("update:modelValue",N),R.forEach(S=>t("add",S))}}function b(){var _;(_=a.value)==null||_.focus()}return()=>{var _;const y=e.label||s.label?C("label",{class:"label"},[((_=s.label)==null?void 0:_.call(s))||e.label,e.disabled&&C("span",{class:"label-disabled-hint"},"Disabled")]):null,D=e.modelValue.map((M,O)=>C("span",{class:_e("chip","chip-secondary"),key:`${M}-${O}`},[M,!e.disabled&&C("button",{class:"chip-remove",type:"button","aria-label":`Remove ${M}`,onClick:B=>{B.stopPropagation(),c(O)}},[C("i",{class:"ph ph-x"})])])),R=C("input",{ref:a,class:"tag-input-field",type:"text",placeholder:r.value?e.placeholder:"",value:o.value,disabled:e.disabled,onInput:M=>{o.value=M.target.value},onKeydown:p,onPaste:g,onFocus:()=>i.value=!0,onBlur:()=>i.value=!1}),N=C("div",{class:_e("tag-input-wrap"),onClick:b},[...D,R]),S=e.help?C("div",{class:"input-info"},[C("i",{class:"ph ph-info"})," "+e.help]):null;return C("div",{...n,class:_e("tag-input",{"tag-input-focused":i.value,"tag-input-disabled":e.disabled},n.class)},[y,N,S])}}}),Vp=Me({name:"GnTable",props:{columns:{type:Array,required:!0},rows:{type:Array,default:()=>[]},caption:{type:String,default:""},emptyText:{type:String,default:"Empty"}},setup(e,{attrs:t,slots:n}){return()=>{var s;return C("div",{class:"table-wrapper"},[C("table",{class:_e("table data-list",{"table-empty":!e.rows.length},t.class)},[e.caption&&C("caption",{class:"table-caption"},e.caption),C("thead",{class:"table-head"},[C("tr",{class:"table-row"},e.columns.map(a=>C("th",{scope:"col"},a.label)))]),C("tbody",{class:"table-body"},e.rows.length?e.rows.map(a=>C("tr",{class:"table-row"},e.columns.map(i=>{var o;const r=`cell-${i.key}`;return C("td",{},((o=n[r])==null?void 0:o.call(n,{row:a,column:i,value:a[i.key]}))||a[i.key])}))):C("tr",{},[C("td",{class:"is-empty",colspan:e.columns.length},((s=n.empty)==null?void 0:s.call(n))||e.emptyText)]))])])}}}),ic=Me({name:"GnTextarea",inheritAttrs:!1,props:{modelValue:{type:String,default:""},label:{type:String,default:""},icon:{type:String,default:""},state:{type:String,default:""},help:{type:String,default:""}},emits:["update:modelValue"],setup(e,{attrs:t,emit:n}){return()=>C("div",{class:"form-group"},[C("label",{class:_e("label",e.state)},[e.label,Xe(e.icon),C("textarea",{...t,value:e.modelValue,class:_e("input",t.class),onInput:s=>n("update:modelValue",Ra(s))})]),e.help&&C("div",{class:_e("input-info",e.state==="error"&&"error")},e.help)])}}),Ly=Me({name:"GnTimeline",inheritAttrs:!1,props:{items:{type:Array,default:()=>[]}},setup(e,{attrs:t,slots:n}){return()=>C("ol",{...t,class:_e("timeline",t.class)},e.items.map(s=>{var a,i;const o=s.variant?cs(s.variant):"";return C("li",{class:_e("timeline-item",o&&`timeline-item-${o}`)},[C("span",{class:"timeline-marker"},[Xe(s.icon||"ph-circle")]),C("div",{class:"timeline-content"},[C("article",{class:"timeline-card"},[C("header",{class:"timeline-header"},[C("h3",{class:"timeline-title"},s.title),s.time&&C("time",{class:"timeline-time"},s.time)]),C("p",{class:"timeline-text"},((a=n[s.key])==null?void 0:a.call(n,{item:s}))||s.text),(s.meta||n.meta)&&C("div",{class:"timeline-meta"},((i=n.meta)==null?void 0:i.call(n,{item:s}))||s.meta)])])])}))}}),$y=Me({name:"GnTooltip",inheritAttrs:!1,props:{text:{type:String,default:""}},setup(e,{attrs:t,slots:n}){const s=F(!1);return()=>{var a,i;return C("span",{...t,class:_e("tooltip",{"is-open":s.value},t.class),tabindex:"0",onFocusin:()=>{s.value=!0},onFocusout:()=>{s.value=!1}},[(a=n.default)==null?void 0:a.call(n),C("span",{class:"tooltip-panel",role:"tooltip"},((i=n.panel)==null?void 0:i.call(n))||e.text)])}}}),Dy=Me({name:"GnToolbar",inheritAttrs:!1,props:{title:{type:String,default:""},meta:{type:String,default:""}},setup(e,{attrs:t,slots:n}){return()=>{var s,a,i,o;return C("div",{...t,class:_e("toolbar",t.class)},[C("div",{class:"toolbar-group"},[C("div",{},[(e.title||n.title)&&C("h3",{class:"toolbar-title"},((s=n.title)==null?void 0:s.call(n))||e.title),(e.meta||n.meta)&&C("span",{class:"toolbar-meta"},((a=n.meta)==null?void 0:a.call(n))||e.meta)])]),(n.default||n.actions)&&C("div",{class:"toolbar-group"},((i=n.actions)==null?void 0:i.call(n))||((o=n.default)==null?void 0:o.call(n)))])}}}),Wp=Symbol("gnexus-ui-kit-toast"),Eu={info:"ph-info",success:"ph-check-circle",warning:"ph-warning",danger:"ph-warning-octagon",error:"ph-warning-octagon",primary:"ph-info",secondary:"ph-info"},Py=Me({name:"GnToastProvider",props:{lifetime:{type:Number,default:4e3}},setup(e,{slots:t,expose:n}){const s=F(null),a=F(!1),i=F(!1);let o=null,r=null,u=null;const l=F(100),c=()=>{window.clearTimeout(r),window.clearInterval(u),a.value=!0,i.value=!1,r=window.setTimeout(()=>{s.value=null,a.value=!1,l.value=100,window.clearTimeout(o),o=null},300)},p=()=>{window.clearTimeout(r),window.clearTimeout(o),window.clearInterval(u),a.value=!1,i.value=!1,l.value=100,s.value=null},g=y=>{window.clearTimeout(r),window.clearInterval(u),a.value=!1,i.value=!1,l.value=100;const D=cs(y.variant||y.type||"info","info"),R=y.lifetime!==void 0?y.lifetime:e.lifetime;if(s.value={id:Date.now(),variant:D==="error"?"danger":D,title:y.title||"",text:y.text||y.message||"",icon:y.icon||Eu[D]||Eu.info,lifetime:R},window.clearTimeout(o),R!==0){const S=R/100;l.value=100,u=window.setInterval(()=>{l.value-=100/S,l.value<=0&&window.clearInterval(u)},100),o=window.setTimeout(c,R)}xt(()=>{requestAnimationFrame(()=>{i.value=!0})})},b={show:g,close:p,info:y=>g({...y,variant:"info"}),success:y=>g({...y,variant:"success"}),warning:y=>g({...y,variant:"warning"}),danger:y=>g({...y,variant:"danger"}),error:y=>g({...y,variant:"danger"})};Sf(Wp,b),n(b);const _=()=>a.value?"a-hide":i.value?"a-show":"";return()=>{var y;return[(y=t.default)==null?void 0:y.call(t),s.value&&C("div",{class:_e("toast",_(),`toast-${s.value.variant}`),role:"alert"},[C("div",{class:"toast-content"},[C("div",{class:"toast-header"},[Xe(s.value.icon),s.value.title]),s.value.text&&C("p",{class:"toast-text"},s.value.text)]),C("button",{class:"btn-icon toast-close",type:"button","aria-label":"Close",onClick:c},[Xe("ph-x")]),s.value.lifetime!==0&&C("div",{class:"toast-progress"},[C("div",{class:"toast-progress-bar",style:{transform:`scaleX(${Math.max(0,l.value/100)})`}})])])]}}}),By=Me({name:"GnUsageMeter",props:{title:{type:String,required:!0},value:{type:Number,required:!0},max:{type:Number,default:100},meta:{type:String,default:""}},setup(e,{slots:t}){return()=>{var n,s;const a=Math.max(0,Math.min(100,Math.round(e.value/e.max*100)));return C("section",{class:"usage-meter"},[C("h3",{class:"usage-meter-title"},[((n=t.title)==null?void 0:n.call(t))||e.title,C("span",{class:"usage-meter-value"},`${a}%`)]),C(Hp,{value:e.value,max:e.max}),(e.meta||t.meta)&&C("p",{class:"usage-meter-meta"},((s=t.meta)==null?void 0:s.call(t))||e.meta)])}}}),Fy=Me({name:"GnUserCard",props:{name:{type:String,required:!0},email:{type:String,default:""},role:{type:String,default:""},avatar:{type:Object,default:()=>({})},href:{type:String,default:""},compact:{type:Boolean,default:!1},actions:{type:Array,default:()=>[]}},setup(e,{slots:t}){const n=()=>{var i;return((i=t.avatar)==null?void 0:i.call(t))||C(Do,{...e.avatar,size:e.compact?"sm":"md"})},s=()=>C("span",{class:"identity"},[n(),C("span",{class:"identity-content"},[C("span",{class:"identity-title"},e.name),e.email&&C("span",{class:"identity-meta"},e.email)])]),a=()=>t.actions?t.actions():e.actions.length?C("div",{class:"user-card-actions"},e.actions.map(i=>{if(e.compact)return C("button",{class:"btn-icon",type:"button","aria-label":i.label,onClick:i.onClick},[Xe(i.icon)]);const o=!!i.icon,r=_e("btn","btn-small",{[`btn-${i.variant}`]:i.variant,"btn-secondary":!i.variant,"with-icon":o});return C("button",{class:r,type:"button",onClick:i.onClick},[o&&Xe(i.icon),i.label])})):null;return()=>{const i=_e("card","user-card",{"user-card-compact":e.compact}),o=[];e.href?o.push(C("a",{class:"profile-identity",href:e.href,target:"_blank",rel:"noopener noreferrer"},[s()])):o.push(s()),!e.compact&&e.role&&o.push(C("span",{class:"user-card-role"},e.role)),t.default&&!e.compact&&o.push(C("div",{class:"user-card-extra"},t.default()));const r=a();return r&&o.push(r),C("article",{class:i},[C("div",{class:"user-card-body"},o)])}}});function Mn(){const e=ha(Wp,null);if(e)return e;const t=()=>{throw new Error("GNexus UI Kit: useToast() requires near the app root.")};return{show:t,info:t,success:t,warning:t,danger:t,error:t,close:t}}var Uy={GnAccordion:X_,GnActionCard:Q_,GnActionList:J_,GnActivityLog:ey,GnAlert:Vn,GnAvatar:Do,GnAvatarStack:ty,GnBadge:hi,GnButton:it,GnCard:ny,GnCheckbox:Lp,GnChip:$p,GnChipGroup:sy,GnCopyButton:sc,GnCombobox:iy,GnConfirmDialog:ry,GnDescriptionList:ly,GnDefinitionList:lo,GnDropdown:Pp,GnDrawer:uy,GnEmptyState:dy,GnFileUpload:py,GnIconButton:Kn,GnIdentity:gy,GnInput:Xs,GnInputGroup:my,GnList:hy,GnLoader:Qs,GnLoginCard:vy,GnMetricCard:by,GnModal:Ia,GnNavList:Gp,GnNavigationShell:yy,GnPageHeader:ky,GnHorizontalCard:wy,GnPagination:Sy,GnPopover:Ey,GnProgress:Hp,GnProgressStages:Ty,GnRadio:zp,GnRadioGroup:El,GnRange:Tl,GnRepeater:Ny,GnRouterTabs:Cy,GnSearchField:Kp,GnSelect:co,GnSkeleton:Ry,GnSteps:Iy,GnStatusCard:Oy,GnSwitch:qp,GnTagInput:My,GnTable:Vp,GnTabs:ac,GnTextarea:ic,GnTimeline:Ly,GnTooltip:$y,GnToolbar:Dy,GnToastProvider:Py,GnUsageMeter:By,GnUserCard:Fy},Gy={install(e){Object.entries(Uy).forEach(([t,n])=>{e.component(t,n)})}};const Hy=["title"],zy={key:1,class:"ap-error"},Ky={class:"ap-controls"},qy={class:"ap-time"},Vy={class:"ap-time"},Wy={class:"ap-volume"},Yy=["src"],jy={__name:"AudioPlayer",props:{src:{type:String,required:!0},title:{type:String,default:""},compact:{type:Boolean,default:!1}},setup(e){const t=e,n=F(null),s=F(!1),a=F(0),i=F(0),o=F(1),r=F(!1),u=F(!1);function l(){s.value=!1,a.value=0,i.value=0,o.value=1,r.value=!1,u.value=!1}Ge(()=>t.src,l);async function c(){const N=n.value;if(N)if(N.paused)try{await N.play()}catch{u.value=!0}else N.pause()}function p(){const N=n.value;N&&(i.value=Number.isFinite(N.duration)?N.duration:0)}function g(){n.value&&(a.value=n.value.currentTime)}function b(N){const S=n.value;if(!S)return;const M=Math.min(Number(N)||0,i.value||0);S.currentTime=M,a.value=M}function _(N){const S=n.value;if(!S)return;const M=Math.max(0,Math.min(1,Number(N)||0));S.muted=!1,S.volume=M,o.value=M,r.value=M===0}function y(){const N=n.value;N&&(N.muted=!N.muted)}function D(){const N=n.value;N&&(r.value=N.muted||N.volume===0,N.muted||(o.value=N.volume))}function R(N){if(!Number.isFinite(N)||N<0)return"0:00";const S=Math.floor(N),M=Math.floor(S/60),O=S%60;return`${M}:${String(O).padStart(2,"0")}`}return(N,S)=>(h(),w("div",{class:Ae(["audio-player",{"is-compact":e.compact}])},[S[4]||(S[4]=f("div",{class:"ap-art"},[f("i",{class:"ph ph-waveform"})],-1)),e.title?(h(),w("div",{key:0,class:"ap-title",title:e.title},k(e.title),9,Hy)):K("",!0),u.value?(h(),w("div",zy,k(d(m)("artifacts.audioFailed")),1)):K("",!0),f("div",Ky,[Q(d(Kn),{icon:s.value?"ph ph-pause":"ph ph-play",label:s.value?d(m)("artifacts.pause"):d(m)("artifacts.play"),onClick:c},null,8,["icon","label"]),f("span",qy,k(R(a.value)),1),Q(d(Tl),{class:"ap-seek","model-value":a.value,min:0,max:i.value||0,step:.1,"aria-label":d(m)("artifacts.seek"),"onUpdate:modelValue":b},null,8,["model-value","max","aria-label"]),f("span",Vy,k(R(i.value)),1),Q(d(Kn),{icon:r.value?"ph ph-speaker-simple-slash":"ph ph-speaker-simple-high",label:r.value?d(m)("artifacts.unmute"):d(m)("artifacts.mute"),onClick:y},null,8,["icon","label"]),f("div",Wy,[Q(d(Tl),{"model-value":r.value?0:o.value,min:0,max:1,step:.05,"aria-label":d(m)("artifacts.volume"),"onUpdate:modelValue":_},null,8,["model-value","aria-label"])])]),f("audio",{ref_key:"audioEl",ref:n,src:e.src,class:"ap-audio-el",preload:"metadata",onLoadedmetadata:p,onTimeupdate:g,onPlay:S[0]||(S[0]=M=>s.value=!0),onPause:S[1]||(S[1]=M=>s.value=!1),onEnded:S[2]||(S[2]=M=>s.value=!1),onVolumechange:D,onError:S[3]||(S[3]=M=>u.value=!0)},null,40,Yy)],2))}},oc=We(jy,[["__scopeId","data-v-f9c7ab69"]]),Zy=Object.freeze(Object.defineProperty({__proto__:null,default:oc},Symbol.toStringTag,{value:"Module"}));function Ws(e){if(!e)return"";let t;try{t=new URL(e,window.location.origin)}catch{return e}return t.origin===window.location.origin?`${t.pathname}${t.search}${t.hash}`:t.href}function Ys(e){return e?new URL(e,window.location.origin).href:""}function Xy(e,t){const n=Ws(e);return!n||!t?n:`${n}${n.includes("?")?"&":"?"}v=${encodeURIComponent(t)}`}function rc(e,t){const n=new URL(`/content-viewers/${e}.html`,window.location.origin);return n.searchParams.set("url",t),n.href}const Qy=["txt","text","log","md","markdown","csv","tsv","json","jsonl","ndjson","yaml","yml","xml","ini","cfg","conf","toml","py","js","mjs","cjs","ts","tsx","jsx","css","scss","sass","less","sh","bash","zsh","sql","scad","srt","vtt","diff","patch","tex","c","h","cpp","hpp","java","go","rs","rb","php","kt","swift"],Yp={stl:"stl",glb:"model",gltf:"model",html:"html",htm:"html",svg:"svg",pdf:"pdf",png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",bmp:"image",avif:"image",ico:"image",mp4:"video",webm:"video",mov:"video",mkv:"video",m4v:"video",ogv:"video",mp3:"audio",wav:"audio",ogg:"audio",oga:"audio",opus:"audio",m4a:"audio",flac:"audio",aac:"audio",weba:"audio"};for(const e of Qy)Yp[e]="text";const vi={stl:"ph ph-cube",model:"ph ph-cube",html:"ph ph-globe",svg:"ph ph-paint-brush",pdf:"ph ph-file-pdf",image:"ph ph-image",video:"ph ph-film-strip",audio:"ph ph-waveform",text:"ph ph-file-text",unknown:"ph ph-paperclip"},Jy={stl:"info",model:"info",html:"secondary",svg:"success",pdf:"primary",image:"primary",video:"danger",audio:"success",text:"secondary",unknown:"primary"},ek=["stl","model","html","svg","pdf"],tk=["stl","model","html","svg","pdf","image","video","audio","text"];function nk(e){const t=String(e||"").split("?")[0].split("#")[0];return t.includes(".")?t.split(".").pop().toLowerCase():""}function jp(e){return Yp[nk(e)]||"unknown"}function Zp(e){const t=String(e||"").trim().toLowerCase();return!t||t==="unknown"?null:Object.hasOwn(vi,t)?t:null}function Al(e){return ek.includes(e)}function Xp(e){return tk.includes(e)}function lc(e){return e==="stl"?"model":e}function sk(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var cr,Tu;function ak(){if(Tu)return cr;Tu=1;function e(H){return H instanceof Map?H.clear=H.delete=H.set=function(){throw new Error("map is read-only")}:H instanceof Set&&(H.add=H.clear=H.delete=function(){throw new Error("set is read-only")}),Object.freeze(H),Object.getOwnPropertyNames(H).forEach(ie=>{const be=H[ie],Ke=typeof be;(Ke==="object"||Ke==="function")&&!Object.isFrozen(be)&&e(be)}),H}class t{constructor(ie){ie.data===void 0&&(ie.data={}),this.data=ie.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(H){return H.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function s(H,...ie){const be=Object.create(null);for(const Ke in H)be[Ke]=H[Ke];return ie.forEach(function(Ke){for(const Et in Ke)be[Et]=Ke[Et]}),be}const a="
    ",i=H=>!!H.scope,o=(H,{prefix:ie})=>{if(H.startsWith("language:"))return H.replace("language:","language-");if(H.includes(".")){const be=H.split(".");return[`${ie}${be.shift()}`,...be.map((Ke,Et)=>`${Ke}${"_".repeat(Et+1)}`)].join(" ")}return`${ie}${H}`};class r{constructor(ie,be){this.buffer="",this.classPrefix=be.classPrefix,ie.walk(this)}addText(ie){this.buffer+=n(ie)}openNode(ie){if(!i(ie))return;const be=o(ie.scope,{prefix:this.classPrefix});this.span(be)}closeNode(ie){i(ie)&&(this.buffer+=a)}value(){return this.buffer}span(ie){this.buffer+=``}}const u=(H={})=>{const ie={children:[]};return Object.assign(ie,H),ie};class l{constructor(){this.rootNode=u(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(ie){this.top.children.push(ie)}openNode(ie){const be=u({scope:ie});this.add(be),this.stack.push(be)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(ie){return this.constructor._walk(ie,this.rootNode)}static _walk(ie,be){return typeof be=="string"?ie.addText(be):be.children&&(ie.openNode(be),be.children.forEach(Ke=>this._walk(ie,Ke)),ie.closeNode(be)),ie}static _collapse(ie){typeof ie!="string"&&ie.children&&(ie.children.every(be=>typeof be=="string")?ie.children=[ie.children.join("")]:ie.children.forEach(be=>{l._collapse(be)}))}}class c extends l{constructor(ie){super(),this.options=ie}addText(ie){ie!==""&&this.add(ie)}startScope(ie){this.openNode(ie)}endScope(){this.closeNode()}__addSublanguage(ie,be){const Ke=ie.root;be&&(Ke.scope=`language:${be}`),this.add(Ke)}toHTML(){return new r(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function p(H){return H?typeof H=="string"?H:H.source:null}function g(H){return y("(?=",H,")")}function b(H){return y("(?:",H,")*")}function _(H){return y("(?:",H,")?")}function y(...H){return H.map(be=>p(be)).join("")}function D(H){const ie=H[H.length-1];return typeof ie=="object"&&ie.constructor===Object?(H.splice(H.length-1,1),ie):{}}function R(...H){return"("+(D(H).capture?"":"?:")+H.map(Ke=>p(Ke)).join("|")+")"}function N(H){return new RegExp(H.toString()+"|").exec("").length-1}function S(H,ie){const be=H&&H.exec(ie);return be&&be.index===0}const M=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function O(H,{joinWith:ie}){let be=0;return H.map(Ke=>{be+=1;const Et=be;let bt=p(Ke),Re="";for(;bt.length>0;){const we=M.exec(bt);if(!we){Re+=bt;break}Re+=bt.substring(0,we.index),bt=bt.substring(we.index+we[0].length),we[0][0]==="\\"&&we[1]?Re+="\\"+String(Number(we[1])+Et):(Re+=we[0],we[0]==="("&&be++)}return Re}).map(Ke=>`(${Ke})`).join(ie)}const B=/\b\B/,L="[a-zA-Z]\\w*",$="[a-zA-Z_]\\w*",v="\\b\\d+(\\.\\d+)?",E="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",x="\\b(0b[01]+)",A="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",P=(H={})=>{const ie=/^#![ ]*\//;return H.binary&&(H.begin=y(ie,/.*\b/,H.binary,/\b.*/)),s({scope:"meta",begin:ie,end:/$/,relevance:0,"on:begin":(be,Ke)=>{be.index!==0&&Ke.ignoreMatch()}},H)},z={begin:"\\\\[\\s\\S]",relevance:0},V={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[z]},Y={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[z]},te={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},q=function(H,ie,be={}){const Ke=s({scope:"comment",begin:H,end:ie,contains:[]},be);Ke.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const Et=R("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return Ke.contains.push({begin:y(/[ ]+/,"(",Et,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),Ke},j=q("//","$"),he=q("/\\*","\\*/"),Oe=q("#","$"),Pe={scope:"number",begin:v,relevance:0},nt={scope:"number",begin:E,relevance:0},He={scope:"number",begin:x,relevance:0},Be={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[z,{begin:/\[/,end:/\]/,relevance:0,contains:[z]}]},X={scope:"title",begin:L,relevance:0},ye={scope:"title",begin:$,relevance:0},De={begin:"\\.\\s*"+$,relevance:0};var st=Object.freeze({__proto__:null,APOS_STRING_MODE:V,BACKSLASH_ESCAPE:z,BINARY_NUMBER_MODE:He,BINARY_NUMBER_RE:x,COMMENT:q,C_BLOCK_COMMENT_MODE:he,C_LINE_COMMENT_MODE:j,C_NUMBER_MODE:nt,C_NUMBER_RE:E,END_SAME_AS_BEGIN:function(H){return Object.assign(H,{"on:begin":(ie,be)=>{be.data._beginMatch=ie[1]},"on:end":(ie,be)=>{be.data._beginMatch!==ie[1]&&be.ignoreMatch()}})},HASH_COMMENT_MODE:Oe,IDENT_RE:L,MATCH_NOTHING_RE:B,METHOD_GUARD:De,NUMBER_MODE:Pe,NUMBER_RE:v,PHRASAL_WORDS_MODE:te,QUOTE_STRING_MODE:Y,REGEXP_MODE:Be,RE_STARTERS_RE:A,SHEBANG:P,TITLE_MODE:X,UNDERSCORE_IDENT_RE:$,UNDERSCORE_TITLE_MODE:ye});function Ie(H,ie){H.input[H.index-1]==="."&&ie.ignoreMatch()}function I(H,ie){H.className!==void 0&&(H.scope=H.className,delete H.className)}function U(H,ie){ie&&H.beginKeywords&&(H.begin="\\b("+H.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",H.__beforeBegin=Ie,H.keywords=H.keywords||H.beginKeywords,delete H.beginKeywords,H.relevance===void 0&&(H.relevance=0))}function Z(H,ie){Array.isArray(H.illegal)&&(H.illegal=R(...H.illegal))}function ee(H,ie){if(H.match){if(H.begin||H.end)throw new Error("begin & end are not supported with match");H.begin=H.match,delete H.match}}function se(H,ie){H.relevance===void 0&&(H.relevance=1)}const ne=(H,ie)=>{if(!H.beforeMatch)return;if(H.starts)throw new Error("beforeMatch cannot be used with starts");const be=Object.assign({},H);Object.keys(H).forEach(Ke=>{delete H[Ke]}),H.keywords=be.keywords,H.begin=y(be.beforeMatch,g(be.begin)),H.starts={relevance:0,contains:[Object.assign(be,{endsParent:!0})]},H.relevance=0,delete be.beforeMatch},me=["of","and","for","in","not","or","if","then","parent","list","value"],le="keyword";function ue(H,ie,be=le){const Ke=Object.create(null);return typeof H=="string"?Et(be,H.split(" ")):Array.isArray(H)?Et(be,H):Object.keys(H).forEach(function(bt){Object.assign(Ke,ue(H[bt],ie,bt))}),Ke;function Et(bt,Re){ie&&(Re=Re.map(we=>we.toLowerCase())),Re.forEach(function(we){const Ue=we.split("|");Ke[Ue[0]]=[bt,oe(Ue[0],Ue[1])]})}}function oe(H,ie){return ie?Number(ie):Ce(H)?0:1}function Ce(H){return me.includes(H.toLowerCase())}const ve={},xe=H=>{console.error(H)},Te=(H,...ie)=>{console.log(`WARN: ${H}`,...ie)},Ne=(H,ie)=>{ve[`${H}/${ie}`]||(console.log(`Deprecated as of ${H}. ${ie}`),ve[`${H}/${ie}`]=!0)},qe=new Error;function Ze(H,ie,{key:be}){let Ke=0;const Et=H[be],bt={},Re={};for(let we=1;we<=ie.length;we++)Re[we+Ke]=Et[we],bt[we+Ke]=!0,Ke+=N(ie[we-1]);H[be]=Re,H[be]._emit=bt,H[be]._multi=!0}function et(H){if(Array.isArray(H.begin)){if(H.skip||H.excludeBegin||H.returnBegin)throw xe("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),qe;if(typeof H.beginScope!="object"||H.beginScope===null)throw xe("beginScope must be object"),qe;Ze(H,H.begin,{key:"beginScope"}),H.begin=O(H.begin,{joinWith:""})}}function ut(H){if(Array.isArray(H.end)){if(H.skip||H.excludeEnd||H.returnEnd)throw xe("skip, excludeEnd, returnEnd not compatible with endScope: {}"),qe;if(typeof H.endScope!="object"||H.endScope===null)throw xe("endScope must be object"),qe;Ze(H,H.end,{key:"endScope"}),H.end=O(H.end,{joinWith:""})}}function Ot(H){H.scope&&typeof H.scope=="object"&&H.scope!==null&&(H.beginScope=H.scope,delete H.scope)}function Ct(H){Ot(H),typeof H.beginScope=="string"&&(H.beginScope={_wrap:H.beginScope}),typeof H.endScope=="string"&&(H.endScope={_wrap:H.endScope}),et(H),ut(H)}function Jt(H){function ie(Re,we){return new RegExp(p(Re),"m"+(H.case_insensitive?"i":"")+(H.unicodeRegex?"u":"")+(we?"g":""))}class be{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(we,Ue){Ue.position=this.position++,this.matchIndexes[this.matchAt]=Ue,this.regexes.push([Ue,we]),this.matchAt+=N(we)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const we=this.regexes.map(Ue=>Ue[1]);this.matcherRe=ie(O(we,{joinWith:"|"}),!0),this.lastIndex=0}exec(we){this.matcherRe.lastIndex=this.lastIndex;const Ue=this.matcherRe.exec(we);if(!Ue)return null;const It=Ue.findIndex((Ts,na)=>na>0&&Ts!==void 0),Tt=this.matchIndexes[It];return Ue.splice(0,It),Object.assign(Ue,Tt)}}class Ke{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(we){if(this.multiRegexes[we])return this.multiRegexes[we];const Ue=new be;return this.rules.slice(we).forEach(([It,Tt])=>Ue.addRule(It,Tt)),Ue.compile(),this.multiRegexes[we]=Ue,Ue}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(we,Ue){this.rules.push([we,Ue]),Ue.type==="begin"&&this.count++}exec(we){const Ue=this.getMatcher(this.regexIndex);Ue.lastIndex=this.lastIndex;let It=Ue.exec(we);if(this.resumingScanAtSamePosition()&&!(It&&It.index===this.lastIndex)){const Tt=this.getMatcher(0);Tt.lastIndex=this.lastIndex+1,It=Tt.exec(we)}return It&&(this.regexIndex+=It.position+1,this.regexIndex===this.count&&this.considerAll()),It}}function Et(Re){const we=new Ke;return Re.contains.forEach(Ue=>we.addRule(Ue.begin,{rule:Ue,type:"begin"})),Re.terminatorEnd&&we.addRule(Re.terminatorEnd,{type:"end"}),Re.illegal&&we.addRule(Re.illegal,{type:"illegal"}),we}function bt(Re,we){const Ue=Re;if(Re.isCompiled)return Ue;[I,ee,Ct,ne].forEach(Tt=>Tt(Re,we)),H.compilerExtensions.forEach(Tt=>Tt(Re,we)),Re.__beforeBegin=null,[U,Z,se].forEach(Tt=>Tt(Re,we)),Re.isCompiled=!0;let It=null;return typeof Re.keywords=="object"&&Re.keywords.$pattern&&(Re.keywords=Object.assign({},Re.keywords),It=Re.keywords.$pattern,delete Re.keywords.$pattern),It=It||/\w+/,Re.keywords&&(Re.keywords=ue(Re.keywords,H.case_insensitive)),Ue.keywordPatternRe=ie(It,!0),we&&(Re.begin||(Re.begin=/\B|\b/),Ue.beginRe=ie(Ue.begin),!Re.end&&!Re.endsWithParent&&(Re.end=/\B|\b/),Re.end&&(Ue.endRe=ie(Ue.end)),Ue.terminatorEnd=p(Ue.end)||"",Re.endsWithParent&&we.terminatorEnd&&(Ue.terminatorEnd+=(Re.end?"|":"")+we.terminatorEnd)),Re.illegal&&(Ue.illegalRe=ie(Re.illegal)),Re.contains||(Re.contains=[]),Re.contains=[].concat(...Re.contains.map(function(Tt){return wt(Tt==="self"?Re:Tt)})),Re.contains.forEach(function(Tt){bt(Tt,Ue)}),Re.starts&&bt(Re.starts,we),Ue.matcher=Et(Ue),Ue}if(H.compilerExtensions||(H.compilerExtensions=[]),H.contains&&H.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return H.classNameAliases=s(H.classNameAliases||{}),bt(H)}function Vt(H){return H?H.endsWithParent||Vt(H.starts):!1}function wt(H){return H.variants&&!H.cachedVariants&&(H.cachedVariants=H.variants.map(function(ie){return s(H,{variants:null},ie)})),H.cachedVariants?H.cachedVariants:Vt(H)?s(H,{starts:H.starts?s(H.starts):null}):Object.isFrozen(H)?s(H):H}var Rt="11.11.1";class Cn extends Error{constructor(ie,be){super(ie),this.name="HTMLInjectionError",this.html=be}}const St=n,us=s,pe=Symbol("nomatch"),Dt=7,Pt=function(H){const ie=Object.create(null),be=Object.create(null),Ke=[];let Et=!0;const bt="Could not find the language '{}', did you forget to load/include a language module?",Re={disableAutodetect:!0,name:"Plain text",contains:[]};let we={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function Ue(ge){return we.noHighlightRe.test(ge)}function It(ge){let Le=ge.className+" ";Le+=ge.parentNode?ge.parentNode.className:"";const je=we.languageDetectRe.exec(Le);if(je){const ft=_n(je[1]);return ft||(Te(bt.replace("{}",je[1])),Te("Falling back to no-highlight mode for this block.",ge)),ft?je[1]:"no-highlight"}return Le.split(/\s+/).find(ft=>Ue(ft)||_n(ft))}function Tt(ge,Le,je){let ft="",At="";typeof Le=="object"?(ft=ge,je=Le.ignoreIllegals,At=Le.language):(Ne("10.7.0","highlight(lang, code, ...args) has been deprecated."),Ne("10.7.0",`Please use highlight(code, options) instead. -https://github.com/highlightjs/highlight.js/issues/2277`),At=ge,ft=Le),je===void 0&&(je=!0);const ln={code:ft,language:At};sa("before:highlight",ln);const $n=ln.result?ln.result:Ts(ln.language,ln.code,je);return $n.code=ln.code,sa("after:highlight",$n),$n}function Ts(ge,Le,je,ft){const At=Object.create(null);function ln(T,G){return T.keywords[G]}function $n(){if(!Ve.keywords){Ht.addText(pt);return}let T=0;Ve.keywordPatternRe.lastIndex=0;let G=Ve.keywordPatternRe.exec(pt),J="";for(;G;){J+=pt.substring(T,G.index);const re=fn.case_insensitive?G[0].toLowerCase():G[0],Ee=ln(Ve,re);if(Ee){const[$e,gt]=Ee;if(Ht.addText(J),J="",At[re]=(At[re]||0)+1,At[re]<=Dt&&(Os+=gt),$e.startsWith("_"))J+=G[0];else{const kt=fn.classNameAliases[$e]||$e;en(G[0],kt)}}else J+=G[0];T=Ve.keywordPatternRe.lastIndex,G=Ve.keywordPatternRe.exec(pt)}J+=pt.substring(T),Ht.addText(J)}function Cs(){if(pt==="")return;let T=null;if(typeof Ve.subLanguage=="string"){if(!ie[Ve.subLanguage]){Ht.addText(pt);return}T=Ts(Ve.subLanguage,pt,!0,$a[Ve.subLanguage]),$a[Ve.subLanguage]=T._top}else T=As(pt,Ve.subLanguage.length?Ve.subLanguage:null);Ve.relevance>0&&(Os+=T.relevance),Ht.__addSublanguage(T._emitter,T.language)}function Wt(){Ve.subLanguage!=null?Cs():$n(),pt=""}function en(T,G){T!==""&&(Ht.startScope(G),Ht.addText(T),Ht.endScope())}function aa(T,G){let J=1;const re=G.length-1;for(;J<=re;){if(!T._emit[J]){J++;continue}const Ee=fn.classNameAliases[T[J]]||T[J],$e=G[J];Ee?en($e,Ee):(pt=$e,$n(),pt=""),J++}}function Rs(T,G){return T.scope&&typeof T.scope=="string"&&Ht.openNode(fn.classNameAliases[T.scope]||T.scope),T.beginScope&&(T.beginScope._wrap?(en(pt,fn.classNameAliases[T.beginScope._wrap]||T.beginScope._wrap),pt=""):T.beginScope._multi&&(aa(T.beginScope,G),pt="")),Ve=Object.create(T,{parent:{value:Ve}}),Ve}function Yn(T,G,J){let re=S(T.endRe,J);if(re){if(T["on:end"]){const Ee=new t(T);T["on:end"](G,Ee),Ee.isMatchIgnored&&(re=!1)}if(re){for(;T.endsParent&&T.parent;)T=T.parent;return T}}if(T.endsWithParent)return Yn(T.parent,G,J)}function Is(T){return Ve.matcher.regexIndex===0?(pt+=T[0],1):(de=!0,0)}function yn(T){const G=T[0],J=T.rule,re=new t(J),Ee=[J.__beforeBegin,J["on:begin"]];for(const $e of Ee)if($e&&($e(T,re),re.isMatchIgnored))return Is(G);return J.skip?pt+=G:(J.excludeBegin&&(pt+=G),Wt(),!J.returnBegin&&!J.excludeBegin&&(pt=G)),Rs(J,T),J.returnBegin?0:G.length}function qo(T){const G=T[0],J=Le.substring(T.index),re=Yn(Ve,T,J);if(!re)return pe;const Ee=Ve;Ve.endScope&&Ve.endScope._wrap?(Wt(),en(G,Ve.endScope._wrap)):Ve.endScope&&Ve.endScope._multi?(Wt(),aa(Ve.endScope,T)):Ee.skip?pt+=G:(Ee.returnEnd||Ee.excludeEnd||(pt+=G),Wt(),Ee.excludeEnd&&(pt=G));do Ve.scope&&Ht.closeNode(),!Ve.skip&&!Ve.subLanguage&&(Os+=Ve.relevance),Ve=Ve.parent;while(Ve!==re.parent);return re.starts&&Rs(re.starts,T),Ee.returnEnd?0:G.length}function ia(){const T=[];for(let G=Ve;G!==fn;G=G.parent)G.scope&&T.unshift(G.scope);T.forEach(G=>Ht.openNode(G))}let oa={};function La(T,G){const J=G&&G[0];if(pt+=T,J==null)return Wt(),0;if(oa.type==="begin"&&G.type==="end"&&oa.index===G.index&&J===""){if(pt+=Le.slice(G.index,G.index+1),!Et){const re=new Error(`0 width match regex (${ge})`);throw re.languageName=ge,re.badRule=oa.rule,re}return 1}if(oa=G,G.type==="begin")return yn(G);if(G.type==="illegal"&&!je){const re=new Error('Illegal lexeme "'+J+'" for mode "'+(Ve.scope||"")+'"');throw re.mode=Ve,re}else if(G.type==="end"){const re=qo(G);if(re!==pe)return re}if(G.type==="illegal"&&J==="")return pt+=` -`,1;if(Ms>1e5&&Ms>G.index*3)throw new Error("potential infinite loop, way more iterations than matches");return pt+=J,J.length}const fn=_n(ge);if(!fn)throw xe(bt.replace("{}",ge)),new Error('Unknown language: "'+ge+'"');const xi=Jt(fn);let ra="",Ve=ft||xi;const $a={},Ht=new we.__emitter(we);ia();let pt="",Os=0,kn=0,Ms=0,de=!1;try{if(fn.__emitTokens)fn.__emitTokens(Le,Ht);else{for(Ve.matcher.considerAll();;){Ms++,de?de=!1:Ve.matcher.considerAll(),Ve.matcher.lastIndex=kn;const T=Ve.matcher.exec(Le);if(!T)break;const G=Le.substring(kn,T.index),J=La(G,T);kn=T.index+J}La(Le.substring(kn))}return Ht.finalize(),ra=Ht.toHTML(),{language:ge,value:ra,relevance:Os,illegal:!1,_emitter:Ht,_top:Ve}}catch(T){if(T.message&&T.message.includes("Illegal"))return{language:ge,value:St(Le),illegal:!0,relevance:0,_illegalBy:{message:T.message,index:kn,context:Le.slice(kn-100,kn+100),mode:T.mode,resultSoFar:ra},_emitter:Ht};if(Et)return{language:ge,value:St(Le),illegal:!1,relevance:0,errorRaised:T,_emitter:Ht,_top:Ve};throw T}}function na(ge){const Le={value:St(ge),illegal:!1,relevance:0,_top:Re,_emitter:new we.__emitter(we)};return Le._emitter.addText(ge),Le}function As(ge,Le){Le=Le||we.languages||Object.keys(ie);const je=na(ge),ft=Le.filter(_n).filter(Ma).map(Wt=>Ts(Wt,ge,!1));ft.unshift(je);const At=ft.sort((Wt,en)=>{if(Wt.relevance!==en.relevance)return en.relevance-Wt.relevance;if(Wt.language&&en.language){if(_n(Wt.language).supersetOf===en.language)return 1;if(_n(en.language).supersetOf===Wt.language)return-1}return 0}),[ln,$n]=At,Cs=ln;return Cs.secondBest=$n,Cs}function Ei(ge,Le,je){const ft=Le&&be[Le]||je;ge.classList.add("hljs"),ge.classList.add(`language-${ft}`)}function xs(ge){let Le=null;const je=It(ge);if(Ue(je))return;if(sa("before:highlightElement",{el:ge,language:je}),ge.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",ge);return}if(ge.children.length>0&&(we.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(ge)),we.throwUnescapedHTML))throw new Cn("One of your code blocks includes unescaped HTML.",ge.innerHTML);Le=ge;const ft=Le.textContent,At=je?Tt(ft,{language:je,ignoreIllegals:!0}):As(ft);ge.innerHTML=At.value,ge.dataset.highlighted="yes",Ei(ge,je,At.language),ge.result={language:At.language,re:At.relevance,relevance:At.relevance},At.secondBest&&(ge.secondBest={language:At.secondBest.language,relevance:At.secondBest.relevance}),sa("after:highlightElement",{el:ge,result:At,text:ft})}function Fo(ge){we=us(we,ge)}const Ns=()=>{_t(),Ne("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Uo(){_t(),Ne("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Ti=!1;function _t(){function ge(){_t()}if(document.readyState==="loading"){Ti||window.addEventListener("DOMContentLoaded",ge,!1),Ti=!0;return}document.querySelectorAll(we.cssSelector).forEach(xs)}function ds(ge,Le){let je=null;try{je=Le(H)}catch(ft){if(xe("Language definition for '{}' could not be registered.".replace("{}",ge)),Et)xe(ft);else throw ft;je=Re}je.name||(je.name=ge),ie[ge]=je,je.rawDefinition=Le.bind(null,H),je.aliases&&Oa(je.aliases,{languageName:ge})}function Go(ge){delete ie[ge];for(const Le of Object.keys(be))be[Le]===ge&&delete be[Le]}function Ai(){return Object.keys(ie)}function _n(ge){return ge=(ge||"").toLowerCase(),ie[ge]||ie[be[ge]]}function Oa(ge,{languageName:Le}){typeof ge=="string"&&(ge=[ge]),ge.forEach(je=>{be[je.toLowerCase()]=Le})}function Ma(ge){const Le=_n(ge);return Le&&!Le.disableAutodetect}function Ho(ge){ge["before:highlightBlock"]&&!ge["before:highlightElement"]&&(ge["before:highlightElement"]=Le=>{ge["before:highlightBlock"](Object.assign({block:Le.el},Le))}),ge["after:highlightBlock"]&&!ge["after:highlightElement"]&&(ge["after:highlightElement"]=Le=>{ge["after:highlightBlock"](Object.assign({block:Le.el},Le))})}function zo(ge){Ho(ge),Ke.push(ge)}function Ko(ge){const Le=Ke.indexOf(ge);Le!==-1&&Ke.splice(Le,1)}function sa(ge,Le){const je=ge;Ke.forEach(function(ft){ft[je]&&ft[je](Le)})}function Ln(ge){return Ne("10.7.0","highlightBlock will be removed entirely in v12.0"),Ne("10.7.0","Please use highlightElement now."),xs(ge)}Object.assign(H,{highlight:Tt,highlightAuto:As,highlightAll:_t,highlightElement:xs,highlightBlock:Ln,configure:Fo,initHighlighting:Ns,initHighlightingOnLoad:Uo,registerLanguage:ds,unregisterLanguage:Go,listLanguages:Ai,getLanguage:_n,registerAliases:Oa,autoDetection:Ma,inherit:us,addPlugin:zo,removePlugin:Ko}),H.debugMode=function(){Et=!1},H.safeMode=function(){Et=!0},H.versionString=Rt,H.regex={concat:y,lookahead:g,either:R,optional:_,anyNumberOfTimes:b};for(const ge in st)typeof st[ge]=="object"&&e(st[ge]);return Object.assign(H,st),H},Se=Pt({});return Se.newInstance=()=>Pt({}),cr=Se,Se.HighlightJS=Se,Se.default=Se,cr}var ur,Au;function ik(){if(Au)return ur;Au=1;function e(t){const n=t.regex,s=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a=/[\p{L}0-9._:-]+/u,i={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},r=t.inherit(o,{begin:/\(/,end:/\)/}),u=t.inherit(t.APOS_STRING_MODE,{className:"string"}),l=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),c={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[o,l,u,r,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[o,r,l,u]}]}]},t.COMMENT(//,{relevance:10}),{begin://,relevance:10},i,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[c],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[c],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:s,relevance:0,starts:c}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(s,/>/))),contains:[{className:"name",begin:s,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}return ur=e,ur}var dr,xu;function ok(){if(xu)return dr;xu=1;function e(t){const n=t.regex,s={},a={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[s]}]};Object.assign(s,{className:"variable",variants:[{begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},o=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),r={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},u={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,s,i]};i.contains.push(u);const l={match:/\\"/},c={className:"string",begin:/'/,end:/'/},p={match:/\\'/},g={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,s]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],_=t.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),y={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},D=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],R=["true","false"],N={match:/(\/[a-z._-]+)+/},S=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],M=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],O=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],B=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:D,literal:R,built_in:[...S,...M,"set","shopt",...O,...B]},contains:[_,t.SHEBANG(),y,g,o,r,N,u,l,c,p,s]}}return dr=e,dr}var fr,Nu;function rk(){if(Nu)return fr;Nu=1;function e(t){const n=t.regex,s=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",u={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},p={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},g={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(c,{className:"string"}),{className:"string",begin:/<.*?>/},s,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:n.optional(i)+t.IDENT_RE,relevance:0},_=n.optional(i)+t.IDENT_RE+"\\s*\\(",R={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},N=[g,u,s,t.C_BLOCK_COMMENT_MODE,p,c],S={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:R,contains:N.concat([{begin:/\(/,end:/\)/,keywords:R,contains:N.concat(["self"]),relevance:0}]),relevance:0},M={begin:"("+r+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:R,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:R,relevance:0},{begin:_,returnBegin:!0,contains:[t.inherit(b,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:[s,t.C_BLOCK_COMMENT_MODE,c,p,u,{begin:/\(/,end:/\)/,keywords:R,relevance:0,contains:["self",s,t.C_BLOCK_COMMENT_MODE,c,p,u]}]},u,s,t.C_BLOCK_COMMENT_MODE,g]};return{name:"C",aliases:["h"],keywords:R,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},t.TITLE_MODE]}]),exports:{preprocessor:g,strings:c,keywords:R}}}return fr=e,fr}var pr,Cu;function lk(){if(Cu)return pr;Cu=1;function e(t){const n=t.regex,s=t.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",u={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},t.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},p={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},g={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},t.inherit(c,{className:"string"}),{className:"string",begin:/<.*?>/},s,t.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:n.optional(i)+t.IDENT_RE,relevance:0},_=n.optional(i)+t.IDENT_RE+"\\s*\\(",y=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],D=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],R=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],N=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],O={type:D,keyword:y,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:R},B={className:"function.dispatch",relevance:0,keywords:{_hint:N},begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,t.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))},L=[B,g,u,s,t.C_BLOCK_COMMENT_MODE,p,c],$={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:O,contains:L.concat([{begin:/\(/,end:/\)/,keywords:O,contains:L.concat(["self"]),relevance:0}]),relevance:0},v={className:"function",begin:"("+r+"[\\*&\\s]+)+"+_,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:O,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:O,relevance:0},{begin:_,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[c,p]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:[s,t.C_BLOCK_COMMENT_MODE,c,p,u,{begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:["self",s,t.C_BLOCK_COMMENT_MODE,c,p,u]}]},u,s,t.C_BLOCK_COMMENT_MODE,g]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:O,illegal:"",keywords:O,contains:["self",u]},{begin:t.IDENT_RE+"::",keywords:O},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}return pr=e,pr}var gr,Ru;function ck(){if(Ru)return gr;Ru=1;function e(t){const n=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],s=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],a=["default","false","null","true"],i=["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],o=["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"],r={keyword:i.concat(o),built_in:n,literal:a},u=t.inherit(t.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),l={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},p={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},g=t.inherit(p,{illegal:/\n/}),b={className:"subst",begin:/\{/,end:/\}/,keywords:r},_=t.inherit(b,{illegal:/\n/}),y={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},t.BACKSLASH_ESCAPE,_]},D={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},b]},R=t.inherit(D,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},_]});b.contains=[D,y,p,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,l,t.C_BLOCK_COMMENT_MODE],_.contains=[R,y,g,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,l,t.inherit(t.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const N={variants:[c,D,y,p,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},S={begin:"<",end:">",contains:[{beginKeywords:"in out"},u]},M=t.IDENT_RE+"(<"+t.IDENT_RE+"(\\s*,\\s*"+t.IDENT_RE+")*>)?(\\[\\])?",O={begin:"@"+t.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:r,illegal:/::/,contains:[t.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},N,l,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},u,S,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[u,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[u,S,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+M+"\\s+)+"+t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:r,contains:[{beginKeywords:s.join(" "),relevance:0},{begin:t.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[t.TITLE_MODE,S],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,relevance:0,contains:[N,l,t.C_BLOCK_COMMENT_MODE]},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},O]}}return gr=e,gr}var mr,Iu;function uk(){if(Iu)return mr;Iu=1;const e=l=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:l.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:l.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function u(l){const c=l.regex,p=e(l),g={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},b="and or not only",_=/@-?\w[\w]*(-\w+)*/,y="[a-zA-Z-][a-zA-Z0-9_-]*",D=[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[p.BLOCK_COMMENT,g,p.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+y,relevance:0},p.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+i.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[p.BLOCK_COMMENT,p.HEXCOLOR,p.IMPORTANT,p.CSS_NUMBER_MODE,...D,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...D,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},p.FUNCTION_DISPATCH]},{begin:c.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:_},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:b,attribute:a.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...D,p.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+s.join("|")+")\\b"}]}}return mr=u,mr}var hr,Ou;function dk(){if(Ou)return hr;Ou=1;function e(t){const n=t.regex,s={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},a={begin:"^[-\\*]{3,}",end:"$"},i={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},o={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},r={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},u=/[A-Za-z][A-Za-z0-9+.-]*/,l={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:n.concat(/\[.+?\]\(/,u,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},c={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},p={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},g=t.inherit(c,{contains:[]}),b=t.inherit(p,{contains:[]});c.contains.push(b),p.contains.push(g);let _=[s,l];return[c,p,g,b].forEach(N=>{N.contains=N.contains.concat(_)}),_=_.concat(c,p),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:_},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:_}]}]},s,o,c,p,{className:"quote",begin:"^>\\s+",contains:_,end:"$"},i,a,l,r,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}return hr=e,hr}var vr,Mu;function fk(){if(Mu)return vr;Mu=1;function e(t){const n=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}return vr=e,vr}var br,Lu;function pk(){if(Lu)return br;Lu=1;function e(t){const n=t.regex,s="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},u={className:"doctag",begin:"@[A-Za-z]+"},l={begin:"#<",end:">"},c=[t.COMMENT("#","$",{contains:[u]}),t.COMMENT("^=begin","^=end",{contains:[u],relevance:10}),t.COMMENT("^__END__",t.MATCH_NOTHING_RE)],p={className:"subst",begin:/#\{/,end:/\}/,keywords:r},g={className:"string",contains:[t.BACKSLASH_ESCAPE,p],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[t.BACKSLASH_ESCAPE,p]})]}]},b="[1-9](_?[0-9])*|0",_="[0-9](_?[0-9])*",y={className:"number",relevance:0,variants:[{begin:`\\b(${b})(\\.(${_}))?([eE][+-]?(${_})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},D={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:r}]},L=[g,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{match:[/def/,/\s+/,s],scope:{1:"keyword",3:"title.function"},contains:[D]},{begin:t.IDENT_RE+"::"},{className:"symbol",begin:t.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[g,{begin:s}],relevance:0},y,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:r},{begin:"("+t.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[t.BACKSLASH_ESCAPE,p],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(l,c),relevance:0}].concat(l,c);p.contains=L,D.contains=L;const x=[{begin:/^\s*=>/,starts:{end:"$",contains:L}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:r,contains:L}}];return c.unshift(l),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/,contains:[t.SHEBANG({binary:"ruby"})].concat(x).concat(c).concat(L)}}return br=e,br}var _r,$u;function gk(){if($u)return _r;$u=1;function e(t){const o={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:o,illegal:"a(o,r,u-1))}function i(o){const r=o.regex,u="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",l=u+a("(?:<"+u+"~~~(?:\\s*,\\s*"+u+"~~~)*>)?",/~~~/g,2),_={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},y={className:"meta",begin:"@"+u,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},D={className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[o.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:_,illegal:/<\/|#/,contains:[o.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[o.BACKSLASH_ESCAPE]},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,u],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[r.concat(/(?!else)/,u),/\s+/,u,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,u],className:{1:"keyword",3:"title.class"},contains:[D,o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+l+"\\s+)",o.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:_,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:_,relevance:0,contains:[y,o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,s,o.C_BLOCK_COMMENT_MODE]},o.C_LINE_COMMENT_MODE,o.C_BLOCK_COMMENT_MODE]},s,y]}}return wr=i,wr}var Sr,Fu;function bk(){if(Fu)return Sr;Fu=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],s=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],r=[].concat(i,s,a);function u(l){const c=l.regex,p=(ye,{after:De})=>{const dt="",end:""},_=/<[A-Za-z0-9\\._:-]+\s*\/>/,y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(ye,De)=>{const dt=ye[0].length+ye.index,st=ye.input[dt];if(st==="<"||st===","){De.ignoreMatch();return}st===">"&&(p(ye,{after:dt})||De.ignoreMatch());let Ie;const I=ye.input.substring(dt);if(Ie=I.match(/^\s*=/)){De.ignoreMatch();return}if((Ie=I.match(/^\s+extends\s+/))&&Ie.index===0){De.ignoreMatch();return}}},D={$pattern:e,keyword:t,literal:n,built_in:r,"variable.language":o},R="[0-9](_?[0-9])*",N=`\\.(${R})`,S="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",M={className:"number",variants:[{begin:`(\\b(${S})((${N})|\\.)?|(${N}))[eE][+-]?(${R})\\b`},{begin:`\\b(${S})\\b((${N})\\b|\\.)?|(${N})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},O={className:"subst",begin:"\\$\\{",end:"\\}",keywords:D,contains:[]},B={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"xml"}},L={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"css"}},$={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[l.BACKSLASH_ESCAPE,O],subLanguage:"graphql"}},v={className:"string",begin:"`",end:"`",contains:[l.BACKSLASH_ESCAPE,O]},x={className:"comment",variants:[l.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:g+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),l.C_BLOCK_COMMENT_MODE,l.C_LINE_COMMENT_MODE]},A=[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,B,L,$,v,{match:/\$\d+/},M];O.contains=A.concat({begin:/\{/,end:/\}/,keywords:D,contains:["self"].concat(A)});const P=[].concat(x,O.contains),z=P.concat([{begin:/(\s*)\(/,end:/\)/,keywords:D,contains:["self"].concat(P)}]),V={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:D,contains:z},Y={variants:[{match:[/class/,/\s+/,g,/\s+/,/extends/,/\s+/,c.concat(g,"(",c.concat(/\./,g),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,g],scope:{1:"keyword",3:"title.class"}}]},te={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...s,...a]}},q={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},j={variants:[{match:[/function/,/\s+/,g,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[V],illegal:/%/},he={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Oe(ye){return c.concat("(?!",ye.join("|"),")")}const Pe={match:c.concat(/\b/,Oe([...i,"super","import"].map(ye=>`${ye}\\s*\\(`)),g,c.lookahead(/\s*\(/)),className:"title.function",relevance:0},nt={begin:c.concat(/\./,c.lookahead(c.concat(g,/(?![0-9A-Za-z$_(])/))),end:g,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},He={match:[/get|set/,/\s+/,g,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},V]},Be="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+l.UNDERSCORE_IDENT_RE+")\\s*=>",X={match:[/const|var|let/,/\s+/,g,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Be)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[V]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:D,exports:{PARAMS_CONTAINS:z,CLASS_REFERENCE:te},illegal:/#(?![$_A-z])/,contains:[l.SHEBANG({label:"shebang",binary:"node",relevance:5}),q,l.APOS_STRING_MODE,l.QUOTE_STRING_MODE,B,L,$,v,x,{match:/\$\d+/},M,te,{scope:"attr",match:g+c.lookahead(":"),relevance:0},X,{begin:"("+l.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[x,l.REGEXP_MODE,{className:"function",begin:Be,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:l.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:D,contains:z}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:b.begin,end:b.end},{match:_},{begin:y.begin,"on:begin":y.isTrulyOpeningTag,end:y.end}],subLanguage:"xml",contains:[{begin:y.begin,end:y.end,skip:!0,contains:["self"]}]}]},j,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+l.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[V,l.inherit(l.TITLE_MODE,{begin:g,className:"title.function"})]},{match:/\.\.\./,relevance:0},nt,{match:"\\$"+g,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[V]},Pe,he,Y,He,{match:/\$[(.]/}]}}return Sr=u,Sr}var Er,Uu;function _k(){if(Uu)return Er;Uu=1;function e(t){const n={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},s={match:/[{}[\],:]/,className:"punctuation",relevance:0},a=["true","false","null"],i={scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:a},contains:[n,s,t.QUOTE_STRING_MODE,i,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}return Er=e,Er}var Tr,Gu;function yk(){if(Gu)return Tr;Gu=1;var e="[0-9](_*[0-9])*",t=`\\.(${e})`,n="[0-9a-fA-F](_*[0-9a-fA-F])*",s={className:"number",variants:[{begin:`(\\b(${e})((${t})|\\.)?|(${t}))[eE][+-]?(${e})[fFdD]?\\b`},{begin:`\\b(${e})((${t})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${t})[fFdD]?\\b`},{begin:`\\b(${e})[fFdD]\\b`},{begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?(${e})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function a(i){const o={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},r={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},u={className:"symbol",begin:i.UNDERSCORE_IDENT_RE+"@"},l={className:"subst",begin:/\$\{/,end:/\}/,contains:[i.C_NUMBER_MODE]},c={className:"variable",begin:"\\$"+i.UNDERSCORE_IDENT_RE},p={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[c,l]},{begin:"'",end:"'",illegal:/\n/,contains:[i.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[i.BACKSLASH_ESCAPE,c,l]}]};l.contains.push(p);const g={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+i.UNDERSCORE_IDENT_RE+")?"},b={className:"meta",begin:"@"+i.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[i.inherit(p,{className:"string"}),"self"]}]},_=s,y=i.COMMENT("/\\*","\\*/",{contains:[i.C_BLOCK_COMMENT_MODE]}),D={variants:[{className:"type",begin:i.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},R=D;return R.variants[1].contains=[D],D.variants[1].contains=[R],{name:"Kotlin",aliases:["kt","kts"],keywords:o,contains:[i.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),i.C_LINE_COMMENT_MODE,y,r,u,g,b,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:o,relevance:5,contains:[{begin:i.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[i.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:o,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[D,i.C_LINE_COMMENT_MODE,y],relevance:0},i.C_LINE_COMMENT_MODE,y,g,b,p,i.C_NUMBER_MODE]},y]},{begin:[/class|interface|trait/,/\s+/,i.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},i.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},g,b]},p,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` -`},_]}}return Tr=a,Tr}var Ar,Hu;function kk(){if(Hu)return Ar;Hu=1;const e=c=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:c.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[c.APOS_STRING_MODE,c.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:c.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),u=i.concat(o).sort().reverse();function l(c){const p=e(c),g=u,b="and or not only",_="[\\w-]+",y="("+_+"|@\\{"+_+"\\})",D=[],R=[],N=function(P){return{className:"string",begin:"~?"+P+".*?"+P}},S=function(P,z,V){return{className:P,begin:z,relevance:V}},M={$pattern:/[a-z-]+/,keyword:b,attribute:a.join(" ")},O={begin:"\\(",end:"\\)",contains:R,keywords:M,relevance:0};R.push(c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,N("'"),N('"'),p.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},p.HEXCOLOR,O,S("variable","@@?"+_,10),S("variable","@\\{"+_+"\\}"),S("built_in","~?`[^`]*?`"),{className:"attribute",begin:_+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},p.IMPORTANT,{beginKeywords:"and not"},p.FUNCTION_DISPATCH);const B=R.concat({begin:/\{/,end:/\}/,contains:D}),L={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(R)},$={begin:y+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},p.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:R}}]},v={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:M,returnEnd:!0,contains:R,relevance:0}},E={className:"variable",variants:[{begin:"@"+_+"\\s*:",relevance:15},{begin:"@"+_}],starts:{end:"[;}]",returnEnd:!0,contains:B}},x={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:y,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,L,S("keyword","all\\b"),S("variable","@\\{"+_+"\\}"),{begin:"\\b("+s.join("|")+")\\b",className:"selector-tag"},p.CSS_NUMBER_MODE,S("selector-tag",y,0),S("selector-id","#"+y),S("selector-class","\\."+y,0),S("selector-tag","&",0),p.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+i.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+o.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:B},{begin:"!important"},p.FUNCTION_DISPATCH]},A={begin:_+`:(:)?(${g.join("|")})`,returnBegin:!0,contains:[x]};return D.push(c.C_LINE_COMMENT_MODE,c.C_BLOCK_COMMENT_MODE,v,E,A,$,x,L,p.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:D}}return Ar=l,Ar}var xr,zu;function wk(){if(zu)return xr;zu=1;function e(t){const n="\\[=*\\[",s="\\]=*\\]",a={begin:n,end:s,contains:["self"]},i=[t.COMMENT("--(?!"+n+")","$"),t.COMMENT("--"+n,s,{contains:[a],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:t.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[t.inherit(t.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:i}].concat(i)},t.C_NUMBER_MODE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,{className:"string",begin:n,end:s,contains:[a],relevance:5}])}}return xr=e,xr}var Nr,Ku;function Sk(){if(Ku)return Nr;Ku=1;function e(t){const n={className:"variable",variants:[{begin:"\\$\\("+t.UNDERSCORE_IDENT_RE+"\\)",contains:[t.BACKSLASH_ESCAPE]},{begin:/\$[@%\{/,end:/\}/},u={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},l={scope:"variable",variants:[{begin:/\$\d/},{begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[u]},c={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},p=[t.BACKSLASH_ESCAPE,o,l],g=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],b=(D,R,N="\\1")=>{const S=N==="\\1"?N:n.concat(N,R);return n.concat(n.concat("(?:",D,")"),R,/(?:\\.|[^\\\/])*?/,S,/(?:\\.|[^\\\/])*?/,N,a)},_=(D,R,N)=>n.concat(n.concat("(?:",D,")"),R,/(?:\\.|[^\\\/])*?/,N,a),y=[l,t.HASH_COMMENT_MODE,t.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),r,{className:"string",contains:p,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[t.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},c,{begin:"(\\/\\/|"+t.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[t.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:b("s|tr|y",n.either(...g,{capture:!0}))},{begin:b("s|tr|y","\\(","\\)")},{begin:b("s|tr|y","\\[","\\]")},{begin:b("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:_("(?:m|qr)?",/\//,/\//)},{begin:_("m|qr",n.either(...g,{capture:!0}),/\1/)},{begin:_("m|qr",/\(/,/\)/)},{begin:_("m|qr",/\[/,/\]/)},{begin:_("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,u]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[t.TITLE_MODE,u,c]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return o.contains=y,r.contains=y,{name:"Perl",aliases:["pl","pm"],keywords:i,contains:y}}return Cr=e,Cr}var Rr,Vu;function Tk(){if(Vu)return Rr;Vu=1;function e(t){const n={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},s=/[a-zA-Z@][a-zA-Z0-9_]*/,u={"variable.language":["this","super"],$pattern:s,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},l={$pattern:s,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:u,illegal:"/,end:/$/,illegal:"\\n"},t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+l.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:l,contains:[t.UNDERSCORE_TITLE_MODE]},{begin:"\\."+t.UNDERSCORE_IDENT_RE,relevance:0}]}}return Rr=e,Rr}var Ir,Wu;function Ak(){if(Wu)return Ir;Wu=1;function e(t){const n=t.regex,s=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,s),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,s),o=n.concat(/[A-Z]+/,s),r={scope:"variable",match:"\\$+"+a},u={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},l={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},c=t.inherit(t.APOS_STRING_MODE,{illegal:null}),p=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(l)}),g={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(l),"on:begin":(V,Y)=>{Y.data._beginMatch=V[1]||V[2]},"on:end":(V,Y)=>{Y.data._beginMatch!==V[1]&&Y.ignoreMatch()}},b=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),_=`[ -]`,y={scope:"string",variants:[p,c,g,b]},D={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},R=["false","null","true"],N=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],S=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],O={keyword:N,literal:(V=>{const Y=[];return V.forEach(te=>{Y.push(te),te.toLowerCase()===te?Y.push(te.toUpperCase()):Y.push(te.toLowerCase())}),Y})(R),built_in:S},B=V=>V.map(Y=>Y.replace(/\|\d+$/,"")),L={variants:[{match:[/new/,n.concat(_,"+"),n.concat("(?!",B(S).join("\\b|"),"\\b)"),i],scope:{1:"keyword",4:"title.class"}}]},$=n.concat(a,"\\b(?!\\()"),v={variants:[{match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),$],scope:{1:"title.class",3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},E={scope:"attr",match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},x={relevance:0,begin:/\(/,end:/\)/,keywords:O,contains:[E,r,v,t.C_BLOCK_COMMENT_MODE,y,D,L]},A={relevance:0,match:[/\b/,n.concat("(?!fn\\b|function\\b|",B(N).join("\\b|"),"|",B(S).join("\\b|"),"\\b)"),a,n.concat(_,"*"),n.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[x]};x.contains.push(A);const P=[E,v,t.C_BLOCK_COMMENT_MODE,y,D,L],z={begin:n.concat(/#\[\s*\\?/,n.either(i,o)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:R,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:R,keyword:["new","array"]},contains:["self",...P]},...P,{scope:"meta",variants:[{match:i},{match:o}]}]};return{case_insensitive:!1,keywords:O,contains:[z,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},u,{scope:"variable.language",match:/\$this\b/},r,A,v,{match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},L,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:O,contains:["self",z,r,v,t.C_BLOCK_COMMENT_MODE,y,D]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},y,D]}}return Ir=e,Ir}var Or,Yu;function xk(){if(Yu)return Or;Yu=1;function e(t){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},t.inherit(t.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),t.inherit(t.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}return Or=e,Or}var Mr,ju;function Nk(){if(ju)return Mr;ju=1;function e(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}return Mr=e,Mr}var Lr,Zu;function Ck(){if(Zu)return Lr;Zu=1;function e(t){const n=t.regex,s=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],u={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},l={className:"meta",begin:/^(>>>|\.\.\.) /},c={className:"subst",begin:/\{/,end:/\}/,keywords:u,illegal:/#/},p={begin:/\{\{/,relevance:0},g={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,l],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,l],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,l,p,c]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,l,p,c]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,p,c]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,p,c]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",_=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,y=`\\b|${a.join("|")}`,D={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${_}))[eE][+-]?(${b})[jJ]?(?=${y})`},{begin:`(${_})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${y})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${y})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${y})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${y})`},{begin:`\\b(${b})[jJ](?=${y})`}]},R={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:u,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},N={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:u,contains:["self",l,D,g,t.HASH_COMMENT_MODE]}]};return c.contains=[g,D,l],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:u,illegal:/(<\/|\?)|=>/,contains:[l,D,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},g,R,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,s],scope:{1:"keyword",3:"title.function"},contains:[N]},{variants:[{match:[/\bclass/,/\s+/,s,/\s*/,/\(\s*/,s,/\s*\)/]},{match:[/\bclass/,/\s+/,s]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[D,N,g]}]}}return Lr=e,Lr}var $r,Xu;function Rk(){if(Xu)return $r;Xu=1;function e(t){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}return $r=e,$r}var Dr,Qu;function Ik(){if(Qu)return Dr;Qu=1;function e(t){const n=t.regex,s=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,o=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:s,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[t.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:s},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),t.HASH_COMMENT_MODE,{scope:"string",contains:[t.BACKSLASH_ESCAPE],variants:[t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),t.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[o,a]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"},match:[s,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:o},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}return Dr=e,Dr}var Pr,Ju;function Ok(){if(Ju)return Pr;Ju=1;function e(t){const n=t.regex,s=/(r#)?/,a=n.concat(s,t.UNDERSCORE_IDENT_RE),i=n.concat(s,t.IDENT_RE),o={className:"title.function.invoke",relevance:0,begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,n.lookahead(/\s*\(/))},r="([ui](8|16|32|64|128|size)|f(32|64))?",u=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],l=["true","false","Some","None","Ok","Err"],c=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],p=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:t.IDENT_RE+"!?",type:p,keyword:u,literal:l,built_in:c},illegal:""},o]}}return Pr=e,Pr}var Br,ed;function Mk(){if(ed)return Br;ed=1;const e=l=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:l.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[l.APOS_STRING_MODE,l.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:l.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),t=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],n=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],s=[...t,...n],a=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function u(l){const c=e(l),p=o,g=i,b="@[a-z-]+",_="and or not only",D={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[l.C_LINE_COMMENT_MODE,l.C_BLOCK_COMMENT_MODE,c.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},c.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+s.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+g.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+p.join("|")+")"},D,{begin:/\(/,end:/\)/,contains:[c.CSS_NUMBER_MODE]},c.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[c.BLOCK_COMMENT,D,c.HEXCOLOR,c.CSS_NUMBER_MODE,l.QUOTE_STRING_MODE,l.APOS_STRING_MODE,c.IMPORTANT,c.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:b,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:_,attribute:a.join(" ")},contains:[{begin:b,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},D,l.QUOTE_STRING_MODE,l.APOS_STRING_MODE,c.HEXCOLOR,c.CSS_NUMBER_MODE]},c.FUNCTION_DISPATCH]}}return Br=u,Br}var Fr,td;function Lk(){if(td)return Fr;td=1;function e(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}return Fr=e,Fr}var Ur,nd;function $k(){if(nd)return Ur;nd=1;function e(t){const n=t.regex,s=t.COMMENT("--","$"),a={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},i={begin:/"/,end:/"/,contains:[{match:/""/}]},o=["true","false","unknown"],r=["double precision","large object","with timezone","without timezone"],u=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],l=["add","asc","collation","desc","final","first","last","view"],c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],p=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],g=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],_=p,y=[...c,...l].filter(B=>!p.includes(B)),D={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},R={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},N={match:n.concat(/\b/,n.either(..._),/\s*\(/),relevance:0,keywords:{built_in:_}};function S(B){return n.concat(/\b/,n.either(...B.map(L=>L.replace(/\s+/,"\\s+"))),/\b/)}const M={scope:"keyword",match:S(b),relevance:0};function O(B,{exceptions:L,when:$}={}){const v=$;return L=L||[],B.map(E=>E.match(/\|\d+$/)||L.includes(E)?E:v(E)?`${E}|0`:E)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:O(y,{when:B=>B.length<3}),literal:o,type:u,built_in:g},contains:[{scope:"type",match:S(r)},M,N,D,a,i,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,s,R]}}return Ur=e,Ur}var Gr,sd;function Dk(){if(sd)return Gr;sd=1;function e($){return $?typeof $=="string"?$:$.source:null}function t($){return n("(?=",$,")")}function n(...$){return $.map(E=>e(E)).join("")}function s($){const v=$[$.length-1];return typeof v=="object"&&v.constructor===Object?($.splice($.length-1,1),v):{}}function a(...$){return"("+(s($).capture?"":"?:")+$.map(x=>e(x)).join("|")+")"}const i=$=>n(/\b/,$,/\w$/.test($)?/\b/:/\B/),o=["Protocol","Type"].map(i),r=["init","self"].map(i),u=["Any","Self"],l=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],c=["false","nil","true"],p=["assignment","associativity","higherThan","left","lowerThan","none","right"],g=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],_=a(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),y=a(_,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),D=n(_,y,"*"),R=a(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),N=a(R,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),S=n(R,N,"*"),M=n(/[A-Z]/,N,"*"),O=["attached","autoclosure",n(/convention\(/,a("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",n(/objc\(/,S,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],B=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function L($){const v={match:/\s+/,relevance:0},E=$.COMMENT("/\\*","\\*/",{contains:["self"]}),x=[$.C_LINE_COMMENT_MODE,E],A={match:[/\./,a(...o,...r)],className:{2:"keyword"}},P={match:n(/\./,a(...l)),relevance:0},z=l.filter(pe=>typeof pe=="string").concat(["_|0"]),V=l.filter(pe=>typeof pe!="string").concat(u).map(i),Y={variants:[{className:"keyword",match:a(...V,...r)}]},te={$pattern:a(/\b\w+/,/#\w+/),keyword:z.concat(g),literal:c},q=[A,P,Y],j={match:n(/\./,a(...b)),relevance:0},he={className:"built_in",match:n(/\b/,a(...b),/(?=\()/)},Oe=[j,he],Pe={match:/->/,relevance:0},nt={className:"operator",relevance:0,variants:[{match:D},{match:`\\.(\\.|${y})+`}]},He=[Pe,nt],Be="([0-9]_*)+",X="([0-9a-fA-F]_*)+",ye={className:"number",relevance:0,variants:[{match:`\\b(${Be})(\\.(${Be}))?([eE][+-]?(${Be}))?\\b`},{match:`\\b0x(${X})(\\.(${X}))?([pP][+-]?(${Be}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},De=(pe="")=>({className:"subst",variants:[{match:n(/\\/,pe,/[0\\tnr"']/)},{match:n(/\\/,pe,/u\{[0-9a-fA-F]{1,8}\}/)}]}),dt=(pe="")=>({className:"subst",match:n(/\\/,pe,/[\t ]*(?:[\r\n]|\r\n)/)}),st=(pe="")=>({className:"subst",label:"interpol",begin:n(/\\/,pe,/\(/),end:/\)/}),Ie=(pe="")=>({begin:n(pe,/"""/),end:n(/"""/,pe),contains:[De(pe),dt(pe),st(pe)]}),I=(pe="")=>({begin:n(pe,/"/),end:n(/"/,pe),contains:[De(pe),st(pe)]}),U={className:"string",variants:[Ie(),Ie("#"),Ie("##"),Ie("###"),I(),I("#"),I("##"),I("###")]},Z=[$.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[$.BACKSLASH_ESCAPE]}],ee={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:Z},se=pe=>{const Dt=n(pe,/\//),Pt=n(/\//,pe);return{begin:Dt,end:Pt,contains:[...Z,{scope:"comment",begin:`#(?!.*${Pt})`,end:/$/}]}},ne={scope:"regexp",variants:[se("###"),se("##"),se("#"),ee]},me={match:n(/`/,S,/`/)},le={className:"variable",match:/\$\d+/},ue={className:"variable",match:`\\$${N}+`},oe=[me,le,ue],Ce={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:B,contains:[...He,ye,U]}]}},ve={scope:"keyword",match:n(/@/,a(...O),t(a(/\(/,/\s+/)))},xe={scope:"meta",match:n(/@/,S)},Te=[Ce,ve,xe],Ne={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:n(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,N,"+")},{className:"type",match:M,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:n(/\s+&\s+/,t(M)),relevance:0}]},qe={begin://,keywords:te,contains:[...x,...q,...Te,Pe,Ne]};Ne.contains.push(qe);const Ze={match:n(S,/\s*:/),keywords:"_|0",relevance:0},et={begin:/\(/,end:/\)/,relevance:0,keywords:te,contains:["self",Ze,...x,ne,...q,...Oe,...He,ye,U,...oe,...Te,Ne]},ut={begin://,keywords:"repeat each",contains:[...x,Ne]},Ot={begin:a(t(n(S,/\s*:/)),t(n(S,/\s+/,S,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:S}]},Ct={begin:/\(/,end:/\)/,keywords:te,contains:[Ot,...x,...q,...He,ye,U,...Te,Ne,et],endsParent:!0,illegal:/["']/},Jt={match:[/(func|macro)/,/\s+/,a(me.match,S,D)],className:{1:"keyword",3:"title.function"},contains:[ut,Ct,v],illegal:[/\[/,/%/]},Vt={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[ut,Ct,v],illegal:/\[|%/},wt={match:[/operator/,/\s+/,D],className:{1:"keyword",3:"title"}},Rt={begin:[/precedencegroup/,/\s+/,M],className:{1:"keyword",3:"title"},contains:[Ne],keywords:[...p,...c],end:/}/},Cn={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},St={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},us={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,S,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:te,contains:[ut,...q,{begin:/:/,end:/\{/,keywords:te,contains:[{scope:"title.class.inherited",match:M},...q],relevance:0}]};for(const pe of U.variants){const Dt=pe.contains.find(Se=>Se.label==="interpol");Dt.keywords=te;const Pt=[...q,...Oe,...He,ye,U,...oe];Dt.contains=[...Pt,{begin:/\(/,end:/\)/,contains:["self",...Pt]}]}return{name:"Swift",keywords:te,contains:[...x,Jt,Vt,Cn,St,us,wt,Rt,{beginKeywords:"import",end:/$/,contains:[...x],relevance:0},ne,...q,...Oe,...He,ye,U,...oe,...Te,Ne,et]}}return Gr=L,Gr}var Hr,ad;function Pk(){if(ad)return Hr;ad=1;function e(t){const n="true false yes no null",s="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},i={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},o={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},r={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,i]},u=t.inherit(r,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},_={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},y={begin:/\{/,end:/\}/,contains:[_],illegal:"\\n",relevance:0},D={begin:"\\[",end:"\\]",contains:[_],illegal:"\\n",relevance:0},R=[a,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+s},{className:"type",begin:"!<"+s+">"},{className:"type",begin:"!"+s},{className:"type",begin:"!!"+s},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},b,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},y,D,o,r],N=[...R];return N.pop(),N.push(u),_.contains=N,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:R}}return Hr=e,Hr}var zr,id;function Bk(){if(id)return zr;id=1;const e="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],n=["true","false","null","undefined","NaN","Infinity"],s=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],a=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],i=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],r=[].concat(i,s,a);function u(c){const p=c.regex,g=(De,{after:dt})=>{const st="",end:""},y=/<[A-Za-z0-9\\._:-]+\s*\/>/,D={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(De,dt)=>{const st=De[0].length+De.index,Ie=De.input[st];if(Ie==="<"||Ie===","){dt.ignoreMatch();return}Ie===">"&&(g(De,{after:st})||dt.ignoreMatch());let I;const U=De.input.substring(st);if(I=U.match(/^\s*=/)){dt.ignoreMatch();return}if((I=U.match(/^\s+extends\s+/))&&I.index===0){dt.ignoreMatch();return}}},R={$pattern:e,keyword:t,literal:n,built_in:r,"variable.language":o},N="[0-9](_?[0-9])*",S=`\\.(${N})`,M="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",O={className:"number",variants:[{begin:`(\\b(${M})((${S})|\\.)?|(${S}))[eE][+-]?(${N})\\b`},{begin:`\\b(${M})\\b((${S})\\b|\\.)?|(${S})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},B={className:"subst",begin:"\\$\\{",end:"\\}",keywords:R,contains:[]},L={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,B],subLanguage:"xml"}},$={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,B],subLanguage:"css"}},v={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[c.BACKSLASH_ESCAPE,B],subLanguage:"graphql"}},E={className:"string",begin:"`",end:"`",contains:[c.BACKSLASH_ESCAPE,B]},A={className:"comment",variants:[c.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:b+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),c.C_BLOCK_COMMENT_MODE,c.C_LINE_COMMENT_MODE]},P=[c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,L,$,v,E,{match:/\$\d+/},O];B.contains=P.concat({begin:/\{/,end:/\}/,keywords:R,contains:["self"].concat(P)});const z=[].concat(A,B.contains),V=z.concat([{begin:/(\s*)\(/,end:/\)/,keywords:R,contains:["self"].concat(z)}]),Y={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:R,contains:V},te={variants:[{match:[/class/,/\s+/,b,/\s+/,/extends/,/\s+/,p.concat(b,"(",p.concat(/\./,b),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,b],scope:{1:"keyword",3:"title.class"}}]},q={relevance:0,match:p.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...s,...a]}},j={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},he={variants:[{match:[/function/,/\s+/,b,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[Y],illegal:/%/},Oe={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Pe(De){return p.concat("(?!",De.join("|"),")")}const nt={match:p.concat(/\b/,Pe([...i,"super","import"].map(De=>`${De}\\s*\\(`)),b,p.lookahead(/\s*\(/)),className:"title.function",relevance:0},He={begin:p.concat(/\./,p.lookahead(p.concat(b,/(?![0-9A-Za-z$_(])/))),end:b,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Be={match:[/get|set/,/\s+/,b,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},Y]},X="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+c.UNDERSCORE_IDENT_RE+")\\s*=>",ye={match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,p.lookahead(X)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[Y]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:R,exports:{PARAMS_CONTAINS:V,CLASS_REFERENCE:q},illegal:/#(?![$_A-z])/,contains:[c.SHEBANG({label:"shebang",binary:"node",relevance:5}),j,c.APOS_STRING_MODE,c.QUOTE_STRING_MODE,L,$,v,E,A,{match:/\$\d+/},O,q,{scope:"attr",match:b+p.lookahead(":"),relevance:0},ye,{begin:"("+c.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[A,c.REGEXP_MODE,{className:"function",begin:X,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:c.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:R,contains:V}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:_.begin,end:_.end},{match:y},{begin:D.begin,"on:begin":D.isTrulyOpeningTag,end:D.end}],subLanguage:"xml",contains:[{begin:D.begin,end:D.end,skip:!0,contains:["self"]}]}]},he,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+c.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[Y,c.inherit(c.TITLE_MODE,{begin:b,className:"title.function"})]},{match:/\.\.\./,relevance:0},He,{match:"\\$"+b,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[Y]},nt,Oe,te,Be,{match:/\$[(.]/}]}}function l(c){const p=c.regex,g=u(c),b=e,_=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],y={begin:[/namespace/,/\s+/,c.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},D={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:_},contains:[g.exports.CLASS_REFERENCE]},R={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},N=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],S={$pattern:e,keyword:t.concat(N),literal:n,built_in:r.concat(_),"variable.language":o},M={className:"meta",begin:"@"+b},O=(v,E,x)=>{const A=v.contains.findIndex(P=>P.label===E);if(A===-1)throw new Error("can not find mode to replace");v.contains.splice(A,1,x)};Object.assign(g.keywords,S),g.exports.PARAMS_CONTAINS.push(M);const B=g.contains.find(v=>v.scope==="attr"),L=Object.assign({},B,{match:p.concat(b,p.lookahead(/\s*\?:/))});g.exports.PARAMS_CONTAINS.push([g.exports.CLASS_REFERENCE,B,L]),g.contains=g.contains.concat([M,y,D,L]),O(g,"shebang",c.SHEBANG()),O(g,"use_strict",R);const $=g.contains.find(v=>v.label==="func.def");return $.relevance=0,Object.assign(g,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),g}return zr=l,zr}var Kr,od;function Fk(){if(od)return Kr;od=1;function e(t){const n=t.regex,s={className:"string",begin:/"(""|[^/n])"C\b/},a={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},i=/\d{1,2}\/\d{1,2}\/\d{4}/,o=/\d{4}-\d{1,2}-\d{1,2}/,r=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,u=/\d{1,2}(:\d{1,2}){1,2}/,l={className:"literal",variants:[{begin:n.concat(/# */,n.either(o,i),/ *#/)},{begin:n.concat(/# */,u,/ *#/)},{begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,n.either(o,i),/ +/,n.either(r,u),/ *#/)}]},c={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},p={className:"label",begin:/^\w+:/},g=t.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),b=t.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[s,a,l,c,p,g,b,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[b]}]}}return Kr=e,Kr}var qr,rd;function Uk(){if(rd)return qr;rd=1;function e(t){t.regex;const n=t.COMMENT(/\(;/,/;\)/);n.contains.push("self");const s=t.COMMENT(/;;/,/$/),a=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],i={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},o={className:"variable",begin:/\$[\w_]+/},r={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},u={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},l={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},c={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:a},contains:[s,n,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},o,r,i,t.QUOTE_STRING_MODE,l,c,u]}}return qr=e,qr}var Vr,ld;function Gk(){if(ld)return Vr;ld=1;var e=ak();return e.registerLanguage("xml",ik()),e.registerLanguage("bash",ok()),e.registerLanguage("c",rk()),e.registerLanguage("cpp",lk()),e.registerLanguage("csharp",ck()),e.registerLanguage("css",uk()),e.registerLanguage("markdown",dk()),e.registerLanguage("diff",fk()),e.registerLanguage("ruby",pk()),e.registerLanguage("go",gk()),e.registerLanguage("graphql",mk()),e.registerLanguage("ini",hk()),e.registerLanguage("java",vk()),e.registerLanguage("javascript",bk()),e.registerLanguage("json",_k()),e.registerLanguage("kotlin",yk()),e.registerLanguage("less",kk()),e.registerLanguage("lua",wk()),e.registerLanguage("makefile",Sk()),e.registerLanguage("perl",Ek()),e.registerLanguage("objectivec",Tk()),e.registerLanguage("php",Ak()),e.registerLanguage("php-template",xk()),e.registerLanguage("plaintext",Nk()),e.registerLanguage("python",Ck()),e.registerLanguage("python-repl",Rk()),e.registerLanguage("r",Ik()),e.registerLanguage("rust",Ok()),e.registerLanguage("scss",Mk()),e.registerLanguage("shell",Lk()),e.registerLanguage("sql",$k()),e.registerLanguage("swift",Dk()),e.registerLanguage("yaml",Pk()),e.registerLanguage("typescript",Bk()),e.registerLanguage("vbnet",Fk()),e.registerLanguage("wasm",Uk()),e.HighlightJS=e,e.default=e,Vr=e,Vr}var Hk=Gk();const Ta=sk(Hk);function zk(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"],contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{beginKeywords:"upstream location",end:/;|\{/,contains:a.contains,keywords:{section:"upstream location"}},{className:"section",begin:t.concat(e.UNDERSCORE_IDENT_RE+t.lookahead(/\s+\{/)),relevance:0},{begin:t.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}\\{]"}}function qk(e){const t=["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"],n="Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",s="-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",a={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},i=/\w[\w\d]*((-)[\w\d]+)*/,o={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},u={className:"literal",begin:/\$(null|true|false)\b/},l={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[o,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},c={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},p={className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]},g=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[p]}),b={className:"built_in",variants:[{begin:"(".concat(n,")+(-)[\\w\\d]+")}]},_={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},y={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:i,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},D={begin:/using\s/,end:/$/,returnBegin:!0,contains:[l,c,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},R={variants:[{className:"operator",begin:"(".concat(s,")\\b")},{className:"literal",begin:/(-){1,2}[\w\d-]+/,relevance:0}]},N={className:"selector-tag",begin:/@\B/,relevance:0},S={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(a.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},M=[S,g,o,e.NUMBER_MODE,l,c,b,r,u,N],O={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",M,{begin:"("+t.join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return S.contains.unshift(O),{name:"PowerShell",aliases:["pwsh","ps","ps1"],case_insensitive:!0,keywords:a,contains:M.concat(_,y,D,R,O)}}function Vk(e){const t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},n={className:"subst",variants:[{begin:/\$\{/,end:/\}/}],keywords:"true false null this is new super"},s={className:"number",relevance:0,variants:[{match:/\b[0-9][0-9_]*(\.[0-9][0-9_]*)?([eE][+-]?[0-9][0-9_]*)?\b/},{match:/\b0[xX][0-9A-Fa-f][0-9A-Fa-f_]*\b/}]},a={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"""',end:'"""',contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]}]};n.contains=[s,a];const i=["Comparable","DateTime","Duration","Function","Iterable","Iterator","List","Map","Match","Object","Pattern","RegExp","Set","Stopwatch","String","StringBuffer","StringSink","Symbol","Type","Uri","bool","double","int","num","Element","ElementList"],o=i.map(l=>`${l}?`);return{name:"Dart",keywords:{keyword:["abstract","as","assert","async","await","base","break","case","catch","class","const","continue","covariant","default","deferred","do","dynamic","else","enum","export","extends","extension","external","factory","false","final","finally","for","Function","get","hide","if","implements","import","in","interface","is","late","library","mixin","new","null","on","operator","part","required","rethrow","return","sealed","set","show","static","super","switch","sync","this","throw","true","try","typedef","var","void","when","while","with","yield"],built_in:i.concat(o).concat(["Never","Null","dynamic","print","document","querySelector","querySelectorAll","window"]),$pattern:/[A-Za-z][A-Za-z0-9_]*\??/},contains:[a,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{subLanguage:"markdown",relevance:0}),e.COMMENT(/\/{3,} ?/,/$/,{contains:[{subLanguage:"markdown",begin:".",end:"$",relevance:0}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},s,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}function Wk(e){const t=e.regex,n={className:"meta",begin:"@[A-Za-z]+"},s={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:/\$\{/,end:/\}/}]},a={className:"string",variants:[{begin:'"""',end:'"""'},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,s]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[s],relevance:10}]},i={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},o={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},r={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o]},u={className:"function",beginKeywords:"def",end:t.lookahead(/[:={\[(\n;]/),contains:[o]},l={begin:[/^\s*/,"extension",/\s+(?=[[(])/],beginScope:{2:"keyword"}},c={begin:[/^\s*/,/end/,/\s+/,/(extension\b)?/],beginScope:{2:"keyword",4:"keyword"}},p=[{match:/\.inline\b/},{begin:/\binline(?=\s)/,keywords:"inline"}],g={begin:[/\(\s*/,/using/,/\s+(?!\))/],beginScope:{2:"keyword"}};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent"},contains:[{begin:["//>",/\s+/,/using/,/\s+/,/\S+/],beginScope:{1:"comment",3:"keyword",5:"type"},end:/$/,contains:[{className:"string",begin:/\S+/}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,u,r,e.C_NUMBER_MODE,l,c,...p,g,n]}}function Yk(e){const t=e.regex,n="[a-zA-Z_][a-zA-Z0-9_.]*(!|\\?)?",s="[a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",o={$pattern:n,keyword:["after","alias","and","case","catch","cond","defstruct","defguard","do","else","end","fn","for","if","import","in","not","or","quote","raise","receive","require","reraise","rescue","try","unless","unquote","unquote_splicing","use","when","with|0"],literal:["false","nil","true"]},r={className:"subst",begin:/#\{/,end:/\}/,keywords:o},u={className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[0-9][0-9_]*(\\.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},c={match:/\\[\s\S]/,scope:"char.escape",relevance:0},p=`[/|([{<"']`,g=[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}],b=O=>({scope:"char.escape",begin:t.concat(/\\/,O),relevance:0}),_={className:"string",begin:"~[a-z](?="+p+")",contains:g.map(O=>e.inherit(O,{contains:[b(O.end),c,r]}))},y={className:"string",begin:"~[A-Z](?="+p+")",contains:g.map(O=>e.inherit(O,{contains:[b(O.end)]}))},D={className:"regex",variants:[{begin:"~r(?="+p+")",contains:g.map(O=>e.inherit(O,{end:t.concat(O.end,/[uismxfU]{0,7}/),contains:[b(O.end),c,r]}))},{begin:"~R(?="+p+")",contains:g.map(O=>e.inherit(O,{end:t.concat(O.end,/[uismxfU]{0,7}/),contains:[b(O.end)]}))}]},R={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},N={className:"function",beginKeywords:"def defp defmacro defmacrop",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},S=e.inherit(N,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),M=[R,D,y,_,e.HASH_COMMENT_MODE,S,N,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[R,{begin:s}],relevance:0},{className:"symbol",begin:n+":(?!:)",relevance:0},{className:"title.class",begin:/(\b[A-Z][a-zA-Z0-9_]+)/,relevance:0},u,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))"}];return r.contains=M,{name:"Elixir",aliases:["ex","exs"],keywords:o,contains:M}}function jk(e){const t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",s={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor maybe else",literal:"false true"},a=e.COMMENT("%","$"),i={className:"number",begin:"\\b(\\d+(_\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\d+(_\\d+)*(\\.\\d+(_\\d+)*)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},r={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},u={begin:/\{/,end:/\}/,relevance:0},l={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},c={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},p={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:/\{/,end:/\}/,relevance:0}]},g={scope:"string",match:/\$(\\([^0-9]|[0-9]{1,3}|)|.)/},b={scope:"string",match:/"""("*)(?!")[\s\S]*?"""\1/},_={scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{match:/~\w?"""("*)(?!")[\s\S]*?"""\1/},{begin:/~\w?\(/,end:/\)/},{begin:/~\w?\[/,end:/\]/},{begin:/~\w?{/,end:/}/},{begin:/~\w?/},{begin:/~\w?\//,end:/\//},{begin:/~\w?\|/,end:/\|/},{begin:/~\w?'/,end:/'/},{begin:/~\w?"/,end:/"/},{begin:/~\w?`/,end:/`/},{begin:/~\w?#/,end:/#/}]},y={beginKeywords:"fun receive if try case maybe",end:"end",keywords:s};y.contains=[a,o,e.inherit(e.APOS_STRING_MODE,{className:""}),y,r,_,b,e.QUOTE_STRING_MODE,i,u,l,c,p,g];const D=[a,o,y,r,_,b,e.QUOTE_STRING_MODE,i,u,l,c,p,g];r.contains[1].contains=D,u.contains=D,p.contains[1].contains=D;const R=["-module","-record","-undef","-export","-ifdef","-ifndef","-author","-copyright","-doc","-moduledoc","-vsn","-import","-include","-include_lib","-compile","-define","-else","-endif","-file","-behaviour","-behavior","-spec","-on_load","-nifs"],N={className:"params",begin:"\\(",end:"\\)",contains:D};return{name:"Erlang",aliases:["erl"],keywords:s,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[N,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:s,contains:D}},a,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,keywords:{$pattern:"-"+e.IDENT_RE,keyword:R.map(S=>`${S}|1.5`).join(" ")},contains:[N,_,b,e.QUOTE_STRING_MODE]},i,_,b,e.QUOTE_STRING_MODE,p,l,c,u,g,{begin:/\.$/}]}}function Zk(e){const t="([0-9]_*)+",n="([0-9a-fA-F]_*)+",s="([01]_*)+",a="([0-7]_*)+",u="([!#$%&*+.\\/<=>?@\\\\^~-]|(?!([(),;\\[\\]`|{}]|[_:\"']))(\\p{S}|\\p{P}))",l={variants:[e.COMMENT("--+","$"),e.COMMENT(/\{-/,/-\}/,{contains:["self"]})]},c={className:"meta",begin:/\{-#/,end:/#-\}/},p={className:"meta",begin:"^#",end:"$"},g={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},b={begin:"\\(",end:"\\)",illegal:'"',contains:[c,p,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),l]},_={begin:/\{/,end:/\}/,contains:b.contains},y={className:"number",relevance:0,variants:[{match:`\\b(${t})(\\.(${t}))?([eE][+-]?(${t}))?\\b`},{match:`\\b0[xX]_*(${n})(\\.(${n}))?([pP][+-]?(${t}))?\\b`},{match:`\\b0[oO](${a})\\b`},{match:`\\b0[bB](${s})\\b`}]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",unicodeRegex:!0,contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[b,l],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[b,l],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[g,b,l]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[c,g,b,_,l]},{beginKeywords:"default",end:"$",contains:[g,b,l]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,l]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[g,e.QUOTE_STRING_MODE,l]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},c,p,{scope:"string",begin:/'(?=\\?.')/,end:/'/,contains:[{scope:"char.escape",match:/\\./}]},e.QUOTE_STRING_MODE,y,g,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),{begin:`(?!-)${u}--+|--+(?!-)${u}`},l,{begin:"->|<-"}]}}function Xk(e){const t="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",i={$pattern:t,keyword:["baremodule","begin","break","catch","ccall","const","continue","do","else","elseif","end","export","false","finally","for","function","global","if","import","in","isa","let","local","macro","module","quote","return","true","try","using","where","while"],literal:["ARGS","C_NULL","DEPOT_PATH","ENDIAN_BOM","ENV","Inf","Inf16","Inf32","Inf64","InsertionSort","LOAD_PATH","MergeSort","NaN","NaN16","NaN32","NaN64","PROGRAM_FILE","QuickSort","RoundDown","RoundFromZero","RoundNearest","RoundNearestTiesAway","RoundNearestTiesUp","RoundToZero","RoundUp","VERSION|0","devnull","false","im","missing","nothing","pi","stderr","stdin","stdout","true","undef","π","ℯ"],built_in:["AbstractArray","AbstractChannel","AbstractChar","AbstractDict","AbstractDisplay","AbstractFloat","AbstractIrrational","AbstractMatrix","AbstractRange","AbstractSet","AbstractString","AbstractUnitRange","AbstractVecOrMat","AbstractVector","Any","ArgumentError","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError","LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","ProcessFailedException","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","TaskFailedException","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","UndefKeywordError","UndefRefError","UndefVarError","Union","UnionAll","UnitRange","Unsigned","Val","Vararg","VecElement","VecOrMat","Vector","VersionNumber","WeakKeyDict","WeakRef"]},o={keywords:i,illegal:/<\//},r={className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},u={className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},l={className:"subst",begin:/\$\(/,end:/\)/,keywords:i},c={className:"variable",begin:"\\$"+t},p={className:"string",contains:[e.BACKSLASH_ESCAPE,l,c],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},g={className:"string",contains:[e.BACKSLASH_ESCAPE,l,c],begin:"`",end:"`"},b={className:"meta",begin:"@"+t},_={className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]};return o.name="Julia",o.contains=[r,u,p,g,b,_,e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],l.contains=o.contains,o}function Wr(e,t={}){return t.variants=e,t}function Qk(e){const t=e.regex,n="[A-Za-z0-9_$]+",s=Wr([e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]})]),a={className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[e.BACKSLASH_ESCAPE]},i=Wr([e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]),o=Wr([{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:"\\$/",end:"/\\$",relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE],{className:"string"}),r={match:[/(class|interface|trait|enum|record|extends|implements)/,/\s+/,e.UNDERSCORE_IDENT_RE],scope:{1:"keyword",3:"title.class"}};return{name:"Groovy",keywords:{"variable.language":"this super",literal:"true false null",type:["byte","short","char","int","long","boolean","float","double","void"],keyword:["def","as","in","assert","trait","abstract","static","volatile","transient","public","private","protected","synchronized","final","class","interface","enum","if","else","for","while","switch","case","break","default","continue","throw","throws","try","catch","finally","implements","extends","new","import","package","return","instanceof","var"]},contains:[e.SHEBANG({binary:"groovy",relevance:10}),s,o,a,i,r,{className:"meta",begin:"@[A-Za-z]+",relevance:0},{className:"attr",begin:n+"[ ]*:",relevance:0},{begin:/\?/,end:/:/,relevance:0,contains:[s,o,a,i,"self"]},{className:"symbol",begin:"^[ ]*"+t.lookahead(n+":"),excludeBegin:!0,end:n+":",relevance:0}],illegal:/#|<\//}}function Jk(e){return{name:"CMake",aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:/\$\{/,end:/\}/},e.COMMENT(/#\[\[/,/]]/),e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}function ew(e){const t=["package","import","option","optional","required","repeated","group","oneof"],n=["double","float","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","bool","string","bytes"],s={match:[/(message|enum|service)\s+/,e.IDENT_RE],scope:{1:"keyword",2:"title.class"}};return{name:"Protocol Buffers",aliases:["proto"],keywords:{keyword:t,type:n,literal:["true","false"]},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"function",beginKeywords:"rpc",end:/[{;]/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+(?=\s*=[^\n]+;$)/}]}}function tw(e){const t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"literal",begin:"false|true|PI|undef"},s={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"meta",keywords:{keyword:"include use"},begin:"include|use <",end:">"},o={className:"params",begin:"\\(",end:"\\)",contains:["self",s,a,t,n]},r={begin:"[*!#%]",relevance:0},u={className:"function",beginKeywords:"module function",end:/=|\{/,contains:[o,e.UNDERSCORE_TITLE_MODE]};return{name:"OpenSCAD",aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,i,a,t,r,u]}}const nw={dockerfile:zk,nginx:Kk,powershell:qk,dart:Vk,scala:Wk,elixir:Yk,erlang:jk,haskell:Zk,julia:Xk,groovy:Qk,cmake:Jk,protobuf:ew,openscad:tw};for(const[e,t]of Object.entries(nw))Ta.getLanguage(e)||Ta.registerLanguage(e,t);const sw={bash:"bash",c:"c",cjs:"javascript",conf:"ini",cpp:"cpp",css:"css",diff:"diff",go:"go",h:"c",hpp:"cpp",htm:"xml",html:"xml",ini:"ini",java:"java",js:"javascript",json:"json",jsonl:"json",jsx:"javascript",kt:"kotlin",less:"less",mjs:"javascript",md:"markdown",patch:"diff",php:"php",py:"python",rb:"ruby",rs:"rust",scad:"openscad",scss:"scss",sh:"bash",sql:"sql",svg:"xml",swift:"swift",toml:"ini",ts:"typescript",tsx:"typescript",xml:"xml",yaml:"yaml",yml:"yaml",zsh:"bash"},aw={html:"xml",svg:"xml",stl:"openscad"};function Qp(e){return e&&Ta.getLanguage(e)?e:"plaintext"}function iw(e){const t=String(e||"").split("?")[0].split("#")[0];return t.includes(".")?t.split(".").pop().toLowerCase():""}function cc(e={}){const t=e.source_filename||e.filename||e.url||"",n=sw[iw(t)]||aw[e.content_type];return Qp(n)}function bi(e,t){return Ta.highlight(e||"",{language:Qp(t)}).value}const ow={key:0,class:"modal a-show","aria-hidden":"false"},rw={class:"modal-header"},lw={class:"modal-title"},cw={class:"lightbox-tools"},uw=["href","title","aria-label"],dw=["aria-label"],fw={class:"modal-panel lightbox-panel"},pw={class:"modal-body"},gw=["src","alt"],mw={key:1,class:"lightbox-error"},hw=["src"],vw={key:4,class:"lightbox-text"},bw={key:0,class:"lightbox-state"},_w={key:1,class:"lightbox-state lightbox-state-error"},yw={class:"lightbox-code"},kw=["innerHTML"],ww={key:0,class:"lightbox-note"},Sw=["href"],Ew=["src"],Yr=1e6,Jp={__name:"ContentLightbox",setup(e){const{item:t,close:n}=Ca(),s=F(null),a=F(!1),i=W(()=>{var S;const N=((S=t.value)==null?void 0:S.type)||"image";return["image","video","audio","text"].includes(N)?N:"frame"}),o=W(()=>t.value?rc(lc(t.value.type),t.value.url):""),r=W(()=>t.value?t.value.title?t.value.title:t.value.type==="image"?m("ui.photo"):m("ui.preview"):""),u=F(""),l=F(!1),c=F(""),p=F(!1);let g=0;const b=W(()=>{var N;return cc({url:((N=t.value)==null?void 0:N.url)||""})}),_=W(()=>bi(u.value,b.value)),y=`${Math.round(Yr/1024)} KB`;async function D(N){const S=++g;l.value=!0,c.value="",u.value="",p.value=!1;try{const M=await fetch(N);if(!M.ok)throw new Error(`HTTP ${M.status}`);const O=await M.text();if(S!==g)return;p.value=O.length>Yr,u.value=p.value?O.slice(0,Yr):O}catch(M){if(S!==g)return;c.value=m("artifacts.sourceFailed",{error:(M==null?void 0:M.message)||M})}finally{S===g&&(l.value=!1)}}function R(N){N.key==="Escape"&&(N.preventDefault(),n())}return Ge(t,N=>{document.body.style.overflow=N?"hidden":"",a.value=!1,g++,l.value=!1,c.value="",u.value="",p.value=!1,N?(window.addEventListener("keydown",R),xt(()=>{var S,M;return(M=(S=s.value)==null?void 0:S.focus)==null?void 0:M.call(S)}),N.type==="text"&&D(N.url)):window.removeEventListener("keydown",R)},{immediate:!0}),bn(()=>{window.removeEventListener("keydown",R),document.body.style.overflow=""}),(N,S)=>(h(),ke(Ao,{to:"body"},[d(t)?(h(),w("div",ow,[f("div",{class:"modal-backdrop",onClick:S[0]||(S[0]=(...M)=>d(n)&&d(n)(...M))}),f("div",{ref_key:"dialogRef",ref:s,class:Ae(["modal-dialog lightbox-dialog",`is-${i.value}`]),role:"dialog","aria-modal":"true",tabindex:"-1"},[f("header",rw,[f("h4",lw,k(r.value),1),f("div",cw,[f("a",{class:"btn-icon",href:d(t).url,title:d(m)("common.download"),"aria-label":d(m)("common.download"),download:""},[...S[3]||(S[3]=[f("i",{class:"ph ph-download-simple"},null,-1)])],8,uw),f("button",{class:"btn-icon modal-close",type:"button","aria-label":d(m)("common.close"),onClick:S[1]||(S[1]=(...M)=>d(n)&&d(n)(...M))},[...S[4]||(S[4]=[f("i",{class:"ph ph-x"},null,-1)])],8,dw)])]),f("div",fw,[f("div",pw,[i.value==="image"&&!a.value?(h(),w("img",{key:0,src:d(t).url,alt:r.value,class:"lightbox-img",onError:S[2]||(S[2]=M=>a.value=!0)},null,40,gw)):i.value==="image"?(h(),w("div",mw,[S[5]||(S[5]=f("i",{class:"ph ph-image-broken"},null,-1)),f("span",null,k(d(m)("ui.loadImageFailed")),1)])):i.value==="video"?(h(),w("video",{key:2,src:d(t).url,class:"lightbox-video",controls:"",playsinline:""},null,8,hw)):i.value==="audio"?(h(),ke(oc,{key:3,src:d(t).url,title:r.value},null,8,["src","title"])):i.value==="text"?(h(),w("div",vw,[l.value?(h(),w("div",bw,[S[6]||(S[6]=f("span",{class:"spinner"},null,-1)),f("span",null,k(d(m)("artifacts.loadingPreview")),1)])):c.value?(h(),w("pre",_w,k(c.value),1)):(h(),w(ce,{key:2},[f("pre",yw,[f("code",{class:Ae(["hljs",`language-${b.value}`]),innerHTML:_.value},null,10,kw)]),p.value?(h(),w("div",ww,[ae(k(d(m)("artifacts.textPreviewLimited",{size:y}))+" ",1),f("a",{href:d(t).url,download:""},k(d(m)("common.download")),9,Sw)])):K("",!0)],64))])):(h(),w("iframe",{key:5,src:o.value,class:"lightbox-frame",sandbox:"allow-scripts allow-same-origin"},null,8,Ew))])])],2)])):K("",!0)]))}},Tw=Object.freeze(Object.defineProperty({__proto__:null,default:Jp},Symbol.toStringTag,{value:"Module"})),Pi=F("");function eg(){function e(n){Pi.value=n}function t(){const n=Pi.value;return Pi.value="",n}return{pendingQuote:Pi,requestQuote:e,consumeQuote:t}}const Aw={__name:"SelectionToolbar",setup(e){const{requestQuote:t}=eg(),n=F(!1),s=F({x:0,y:0});let a="";function i(){const c=window.getSelection();if(!c||c.isCollapsed||!c.toString().trim())return null;const p=c.getRangeAt(0),g=p.commonAncestorContainer;return(g.nodeType===Node.TEXT_NODE?g.parentElement:g).closest(".msg-assistant-content")?{text:c.toString().trim(),range:p}:null}function o(){const c=window.getSelection();if(!c||c.isCollapsed||!c.rangeCount){n.value=!1;return}const g=c.getRangeAt(0).getBoundingClientRect();if(!g.width&&!g.height){n.value=!1;return}s.value={x:Math.round(g.left+g.width/2),y:Math.round(g.top-44)}}function r(){setTimeout(()=>{const c=i();if(!c){n.value=!1;return}a=c.text,o(),n.value=!0},10)}function u(){const c=window.getSelection();(!c||c.isCollapsed)&&(n.value=!1)}function l(){var c;a&&(t(a),(c=window.getSelection())==null||c.removeAllRanges(),n.value=!1)}return $t(()=>{document.addEventListener("mouseup",r),document.addEventListener("selectionchange",u),document.addEventListener("scroll",o,!0)}),Nn(()=>{document.removeEventListener("mouseup",r),document.removeEventListener("selectionchange",u),document.removeEventListener("scroll",o,!0)}),(c,p)=>{const g=Qe("GnButton");return h(),ke(Ao,{to:"body"},[n.value?(h(),w("div",{key:0,class:"selection-toolbar",style:bs({top:s.value.y+"px",left:s.value.x+"px"}),onMousedown:p[0]||(p[0]=Bt(()=>{},["prevent"]))},[Q(g,{variant:"warning",size:"sm",icon:"ph ph-quotes",style:{color:"var(--gn-color-black)"},title:d(m)("ui.replyToSelection"),onClick:l},{default:fe(()=>[ae(k(d(m)("ui.reply")),1)]),_:1},8,["title"])],36)):K("",!0)])}}},tg=We(Aw,[["__scopeId","data-v-7fdc7530"]]),xw=Object.freeze(Object.defineProperty({__proto__:null,default:tg},Symbol.toStringTag,{value:"Module"}));function ng(e){return Zp(e==null?void 0:e.content_type)||jp((e==null?void 0:e.filename)||(e==null?void 0:e.path)||(e==null?void 0:e.url)||"")}const jr=1e6;function Nw(e){const{open:t,openContent:n}=Ca(),s=F(null),a=F(null),i=F(!1),o=F(""),r=F(!1),u=F(""),l=F(""),c=F(!1),p=F(""),g=F(!1),b=`${Math.round(jr/1024)} KB`,_=W(()=>e.artifacts),y=W(()=>_.value.find(X=>O(X)===s.value)||_.value[0]||null),D=W(()=>y.value?cc(y.value):"plaintext"),R=W(()=>bi(o.value,D.value)),N=W(()=>bi(l.value,D.value));function S(X){t(X)}async function M(X){if(!(!X||c.value||l.value)){c.value=!0,p.value="";try{const ye=await fetch(x(X));if(!ye.ok)throw new Error(`HTTP ${ye.status}`);const De=await ye.text();g.value=De.length>jr,l.value=g.value?De.slice(0,jr):De}catch(ye){p.value=m("artifacts.sourceFailed",{error:(ye==null?void 0:ye.message)||ye})}finally{c.value=!1}}}Ge(y,X=>{l.value="",p.value="",g.value=!1,X&&!i.value&&L(X)==="text"&&M(X)},{immediate:!0}),Ge(_,X=>{if(!X.length){s.value=null;return}(!s.value||!X.some(ye=>O(ye)===s.value))&&(s.value=O(X[0]))},{immediate:!0});function O(X){return X.id||X.filename}function B(X){s.value=O(X),i.value=!1,o.value="",u.value=""}function L(X){return ng(X)}function $(X){return vi[L(X)]||vi.unknown}function v(X){const ye=L(X).toUpperCase(),De=X.updated_at||X.created_at;return De?`${ye} · ${E(De)}`:ye}function E(X){const ye=new Date(X);return Number.isNaN(ye.getTime())?X:ye.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"})}function x(X){return Xy(X.url,X.updated_at||X.created_at||"")}function A(X,ye){return rc(ye,x(X))}function P(X){const ye=L(X);return Al(ye)?A(X,lc(ye)):Ys(x(X))}function z(X){return Xp(L(X))}function V(X){!X||!z(X)||n({url:Ys(x(X)),type:L(X),title:X.title||X.filename})}function Y(X){return Ws(X.url)}function te(X){const ye=L(X);return["html","svg"].includes(ye)?Y(X):["stl","model"].includes(ye)&&X.source_url?Ws(X.source_url):""}function q(X){return!!te(X)}async function j(X){i.value=!i.value,i.value&&await he(X)}async function he(X){const ye=te(X);if(!(!ye||o.value||r.value)){r.value=!0,u.value="";try{const De=await fetch(ye);if(!De.ok)throw new Error(`HTTP ${De.status}`);o.value=await De.text()}catch(De){u.value=m("artifacts.sourceFailed",{error:(De==null?void 0:De.message)||De})}finally{r.value=!1}}}function Oe(X){return["stl","model"].includes(L(X))?P(X):Ys(x(X))}function Pe(X){const ye=Ws(X.download_url||X.url);return X.download_url||!ye?ye:`${ye}${ye.includes("?")?"&":"?"}download=1`}function nt(X){return Al(L(X))}async function He(X){try{await navigator.clipboard.writeText(Oe(X)),a.value=O(X),setTimeout(()=>{a.value===O(X)&&(a.value=null)},1500)}catch{}}function Be(X){return a.value===O(X)?"ph ph-check":"ph ph-copy"}return{selectedKey:s,copiedKey:a,showSource:i,sourceText:o,sourceLoading:r,sourceError:u,textContent:l,textLoading:c,textError:p,textTruncated:g,textPreviewLimitLabel:b,artifacts:_,selected:y,selectedSourceLanguage:D,highlightedSource:R,highlightedText:N,openViewedImage:S,artifactKey:O,selectArtifact:B,contentType:L,iconClass:$,labelFor:v,versionedUrl:x,previewUrl:P,canFullscreen:z,openFullscreen:V,rawUrl:Y,hasSource:q,toggleSource:j,downloadUrl:Pe,isFramePreview:nt,copyLink:He,copyIcon:Be}}const Cw={terminal:"ph ph-terminal-window",ssh_exec:"ph ph-plugs-connected",spawn_agent:"ph ph-user-circle-gear",code_exec:"ph ph-code",peer:"ph ph-chats-circle"};function Rw(e){const t=F(null),n=W(()=>{const S=Object.values(e.backgroundTasks).map(B=>({kind:"task",key:B.taskId,running:B.status==="running",startedAt:B.startedAt??"",task:B})),M=Object.values(e.terminals).filter(B=>!B.closed||B.output).map(B=>({kind:"terminal",key:B.name,running:B.status==="busy"&&!B.closed,startedAt:"",terminal:B}));return[...S,...M].sort((B,L)=>B.running!==L.running?B.running?-1:1:String(L.startedAt??"").localeCompare(String(B.startedAt??"")))}),s=W(()=>n.value.filter(S=>S.running).length),a=W(()=>{var S;return((S=t.value)==null?void 0:S.kind)==="task"&&e.backgroundTasks[t.value.key]||null}),i=W(()=>{var S;return((S=t.value)==null?void 0:S.kind)==="terminal"&&e.terminals[t.value.key]||null});Ge(()=>[a.value,i.value],([S,M])=>{t.value&&!S&&!M&&(t.value=null)}),Ge(()=>e.currentId,()=>{t.value=null});function o(S){var O,B;const M={kind:S.kind,key:S.key};t.value=((O=t.value)==null?void 0:O.kind)===M.kind&&((B=t.value)==null?void 0:B.key)===M.key?null:M}function r(S){return!!(t.value&&t.value.kind===S.kind&&t.value.key===S.key)}function u(S){return S.kind==="terminal"?"ph ph-terminal-window":Cw[S.task.tool]||"ph ph-arrows-out"}function l(S){return S.kind==="terminal"?S.terminal.name:S.task.argsSummary||S.task.tool}function c(S){return S.kind==="terminal"?S.terminal.description||S.terminal.command||m("artifacts.terminal"):m("artifacts.toolAndAge",{tool:S.task.tool,age:b(S.task)})}function p(S){return S.kind==="terminal"?S.terminal.closed?"badge-error":S.terminal.status==="busy"?"badge-success":"badge-secondary":y(S.task)}function g(S){return S.kind==="terminal"?S.terminal.closed?m("artifacts.statusClosed"):m(S.terminal.status==="busy"?"artifacts.statusBusy":"artifacts.statusIdle"):D(S.task)}function b(S){const M=S.finishedAt??S.startedAt;if(!M)return"";let O=(Date.now()-new Date(M).getTime())/1e3;return!Number.isFinite(O)||O<0?m("common.justNow"):O<60?`${Math.round(O)}s`:O<3600?`${Math.floor(O/60)}m`:O<86400?`${Math.floor(O/3600)}h`:`${Math.floor(O/86400)}d`}function _(S){return S.status==="running"?"status-busy":S.status==="completed"?"status-idle":"status-closed"}function y(S){return S.status==="running"?"badge-success":S.status==="completed"?"badge-secondary":"badge-error"}function D(S){return{running:m("artifacts.statusRunning"),completed:m("artifacts.statusDone"),failed:m("artifacts.statusFailed"),cancelled:m("artifacts.statusStopped")}[S.status]||S.status}function R(S){if(!S)return m("common.notAvailable");const M=new Date(S);return Number.isNaN(M.getTime())?S:M.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function N(S){if(S<60)return`${Math.round(S)}s`;if(S<3600)return`${Math.floor(S/60)}m ${Math.round(S%60)}s`;const M=Math.floor(S/3600),O=Math.floor(S%3600/60);return`${M}h ${O}m`}return{selectedBg:t,backgroundsList:n,activeBackgroundCount:s,selectedTask:a,selectedTerminal:i,selectBackground:o,isBgSelected:r,backgroundIcon:u,backgroundTitle:l,backgroundMeta:c,backgroundBadgeClass:p,backgroundBadgeLabel:g,taskBadgeClass:_,taskBadgeLabel:D,formatTime:R,formatUptime:N}}const Iw=980,Ow=500,cd="navi:artifacts-drawer-width";function Mw(){const e=F(!1),t=F(typeof window>"u"?0:window.innerWidth),n=F(b()),s=W(()=>t.value>Iw),a=W(()=>s.value?{"--artifacts-width":`${u()}px`}:{});function i(){return Math.round(Math.min(600,t.value*.42))}function o(){return Math.max(i(),t.value-Ow)}function r(y){return Math.min(Math.max(Math.round(y),i()),o())}function u(){return r(n.value??i())}function l(){t.value=window.innerWidth,n.value!==null&&(n.value=u())}function c(y){s.value&&(y.preventDefault(),e.value=!0,document.body.style.cursor="col-resize",document.body.style.userSelect="none",window.addEventListener("pointermove",p),window.addEventListener("pointerup",g,{once:!0}))}function p(y){n.value=r(t.value-y.clientX)}function g(){e.value=!1,_(),document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",g)}function b(){if(typeof window>"u")return null;try{const y=Number(window.localStorage.getItem(cd));return Number.isFinite(y)&&y>0?y:null}catch{return null}}function _(){if(!(typeof window>"u"||n.value===null))try{window.localStorage.setItem(cd,String(u()))}catch{}}return $t(()=>{window.addEventListener("resize",l)}),bn(()=>{window.removeEventListener("resize",l),window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",g),e.value&&g()}),{isResizing:e,isDesktop:s,panelStyle:a,startResize:c}}const ud=80,Lw=120;function $w(e){const{openContent:t}=Ca(),n=F(!1);async function s(){if(!(n.value||!e.currentId)){n.value=!0;try{await e.fetchFiles(e.currentId)}finally{n.value=!1}}}const a=F(!1),i=F(0),o=F(!1),r=F(null),u=W(()=>({transform:`translateY(${Math.min(i.value,Lw)}px)`,opacity:a.value?Math.min(i.value/ud,1):0})),l=W(()=>n.value?m("common.refreshing"):o.value?m("common.releaseToRefresh"):m("common.pullToRefresh"));let c=0,p=0;function g(v){var x;const E=r.value;E&&(p=E.scrollTop||0,!(p>2)&&(c=((x=v.touches[0])==null?void 0:x.clientY)??0,a.value=!1,i.value=0,o.value=!1))}function b(v){var A;if(p>2||!c)return;const x=(((A=v.touches[0])==null?void 0:A.clientY)??0)-c;if(x<=0){a.value=!1;return}x>4&&v.preventDefault(),a.value=!0,i.value=x,o.value=x>=ud}function _(){o.value&&!n.value&&s(),a.value=!1,i.value=0,o.value=!1,c=0,p=0}const y=W(()=>e.files),D=W(()=>y.value.map(E=>{const x=E.path.split("/"),A=x[x.length-1],P=x.length-1;return{...E,name:A,depth:P}}));function R(v){return ng(v)}function N(v){var A;if(v.is_dir)return"ph ph-folder";const E=((A=v.name.split(".").pop())==null?void 0:A.toLowerCase())||"";return{js:"ph ph-file-js",ts:"ph ph-file-ts",py:"ph ph-file-py",html:"ph ph-file-html",css:"ph ph-file-css",json:"ph ph-file-code",md:"ph ph-file-text",txt:"ph ph-file-text",jpg:"ph ph-file-image",jpeg:"ph ph-file-image",png:"ph ph-file-image",gif:"ph ph-file-image",svg:"ph ph-file-image",webp:"ph ph-file-image",mp4:"ph ph-file-video",webm:"ph ph-file-video",mov:"ph ph-file-video",mp3:"ph ph-file-audio",wav:"ph ph-file-audio",ogg:"ph ph-file-audio",pdf:"ph ph-file-pdf",zip:"ph ph-file-zip",tar:"ph ph-file-zip",gz:"ph ph-file-zip",rar:"ph ph-file-zip"}[E]||"ph ph-file"}function S(v){if(v.is_dir)return m("artifacts.directory");const E=v.size;return E<1024?`${E} B`:E<1024*1024?`${(E/1024).toFixed(1)} KB`:`${(E/(1024*1024)).toFixed(1)} MB`}function M(v){return{paddingLeft:`${12+v.depth*16}px`}}function O(v){const E=e.currentId;return E?`/api/sessions/${E}/files/${encodeURIComponent(v)}?download=1`:"#"}function B(v){const E=e.currentId;return E?`/api/sessions/${E}/files/${encodeURIComponent(v)}`:"#"}function L(v){return!v||v.is_dir?!1:R(v)!=="unknown"}function $(v){if(!v||v.is_dir)return;const E=R(v);E!=="unknown"&&t({url:Ys(B(v.path)),type:E,title:v.name})}return{filesRefreshing:n,refreshFiles:s,filesPtrPulling:a,filesPtrOffset:i,filesPtrTriggered:o,filesListRef:r,filesPtrStyle:u,filesPtrLabel:l,onFilesTouchStart:g,onFilesTouchMove:b,onFilesTouchEnd:_,filesFlat:y,fileTree:D,fileIcon:N,fileMeta:S,fileIndent:M,fileDownloadUrl:O,canViewFile:L,openFileInViewer:$}}function xl(e){return e.replace(/[.,;:!?)\]}+]+$/,"")}function dd(e){try{const t=xl(e),n=new URL(t,window.location.origin),s=n.hostname.toLowerCase().replace(/^www\./,"");let a=n.pathname.toLowerCase();return a=a.replace(/\/$/,""),`${s}${a}`}catch{return xl(e).toLowerCase()}}function fd(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return e.split("/")[2]||e}}function pd(e,t,n=60){const s=Math.max(0,t-n),a=Math.min(e.length,t+n);let i=e.slice(s,a).replace(/\s+/g," ").trim();return s>0&&(i="…"+i),a{const a=new Set,i=[],o=[];for(let r=e.messages.length-1;r>=0;r--){const u=e.messages[r];if(u.role!=="assistant")continue;const l=u.text||"";let c;const p=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g;for(;(c=p.exec(l))!==null;){let g=c[2].trim();const b=dd(g);if(a.has(b))continue;a.add(b),i.push({url:g,text:c[1].trim(),snippet:pd(l,c.index),domain:fd(g)});const _=c[0].lastIndexOf(c[2]),y=c.index+_;o.push({start:y,end:y+c[2].length})}}for(let r=e.messages.length-1;r>=0;r--){const u=e.messages[r];if(u.role!=="assistant")continue;const l=u.text||"";let c;const p=/https?:\/\/[^\s<>"{}|\\^`[\]]+/g;for(;(c=p.exec(l))!==null;){let g=c[0].trim();g=xl(g);const b=dd(g);if(a.has(b))continue;const _=c.index,y=c.index+c[0].length;o.some(R=>_>=R.start&&y<=R.end)||(a.add(b),i.push({url:g,text:"",snippet:pd(l,c.index),domain:fd(g)}))}}return i});function n(){const a=t.value.map(i=>i.url);a.length&&navigator.clipboard.writeText(a.join(` -`)).catch(()=>{})}function s(){for(const a of t.value.slice(0,8))window.open(a.url,"_blank","noopener,noreferrer")}return{links:t,copyAllLinks:n,openAllLinks:s}}const Pw=["aria-label"],Bw=["title"],Fw={class:"artifacts-header"},Uw={class:"artifacts-tabs chip-group"},Gw=["aria-pressed"],Hw={class:"artifacts-tab-count"},zw=["aria-pressed"],Kw={class:"artifacts-tab-count"},qw=["aria-pressed"],Vw={class:"artifacts-tab-count"},Ww=["aria-pressed"],Yw={key:0,class:"viewed-images-group"},jw={class:"viewed-images-header"},Zw={class:"viewed-images-title"},Xw={class:"artifacts-tab-count"},Qw={class:"viewed-images-grid"},Jw=["src","alt","onClick"],eS={key:1,class:"artifacts-empty"},tS={class:"artifacts-list"},nS=["onClick"],sS={class:"artifact-icon"},aS={class:"artifact-info"},iS={class:"artifact-title"},oS={class:"artifact-meta"},rS={key:0,class:"artifact-detail"},lS={class:"artifact-detail-header"},cS={class:"artifact-detail-title"},uS={class:"artifact-detail-filename"},dS={class:"artifact-actions"},fS=["href","title","aria-label"],pS=["href","title","aria-label"],gS=["href","title","aria-label"],mS={class:"artifact-preview"},hS={key:0,class:"artifact-source"},vS={key:0,class:"artifact-source-state"},bS={key:1,class:"artifact-source-error"},_S={key:2,class:"artifact-source-code"},yS=["innerHTML"],kS=["src"],wS=["src","alt","title"],SS=["src"],ES=["src"],TS={key:5,class:"artifact-text"},AS={key:0,class:"artifact-source-state"},xS={key:1,class:"artifact-source-error"},NS={class:"artifact-source-code"},CS=["innerHTML"],RS={key:0,class:"artifact-text-note"},IS={key:6,class:"artifact-no-preview"},OS={key:0,class:"artifacts-empty"},MS={class:"artifacts-list links-list"},LS=["href"],$S={class:"artifact-info"},DS={class:"artifact-title"},PS={class:"artifact-meta"},BS={class:"link-detail"},FS={class:"link-detail-header"},US={class:"link-detail-count"},GS={class:"link-actions"},HS={class:"ptr-label"},zS={class:"files-toolbar"},KS={key:0,class:"artifacts-empty"},qS={class:"artifact-icon"},VS={class:"artifact-info"},WS={class:"artifact-title"},YS={class:"artifact-meta"},jS={key:0,class:"file-row-actions"},ZS=["href","title","aria-label"],XS=["title","aria-label","onClick"],QS={key:0,class:"artifacts-empty"},JS={class:"artifacts-list terminals-list"},eE=["onClick"],tE={class:"artifact-icon"},nE={class:"artifact-info"},sE={class:"artifact-title"},aE={class:"artifact-meta"},iE={key:0,class:"terminal-detail"},oE={class:"terminal-detail-header"},rE={class:"terminal-detail-title-wrap"},lE={class:"terminal-detail-title"},cE={class:"terminal-detail-meta"},uE={class:"terminal-detail-grid"},dE={class:"terminal-detail-row"},fE={class:"terminal-detail-label"},pE={class:"terminal-detail-value"},gE={class:"terminal-detail-row"},mE={class:"terminal-detail-label"},hE={class:"terminal-detail-row"},vE={class:"terminal-detail-label"},bE={class:"terminal-detail-value"},_E={key:0,class:"terminal-detail-row"},yE={class:"terminal-detail-label"},kE={class:"terminal-detail-value"},wE={key:1,class:"terminal-detail-row"},SE={class:"terminal-detail-label"},EE={class:"terminal-detail-value"},TE={key:0,class:"terminal-output-wrap"},AE={class:"terminal-output-header"},xE={class:"terminal-output"},NE={key:1,class:"terminal-detail"},CE={class:"terminal-detail-header"},RE={class:"terminal-detail-title"},IE={class:"terminal-detail-meta"},OE={class:"terminal-detail-grid"},ME={class:"terminal-detail-row"},LE={class:"terminal-detail-label"},$E={class:"terminal-detail-row"},DE={class:"terminal-detail-label"},PE={class:"terminal-detail-value"},BE={class:"terminal-detail-row"},FE={class:"terminal-detail-label"},UE={class:"terminal-detail-value terminal-detail-command"},GE={class:"terminal-detail-row"},HE={class:"terminal-detail-label"},zE={class:"terminal-detail-value"},KE={key:0,class:"terminal-detail-row"},qE={class:"terminal-detail-label"},VE={class:"terminal-detail-value"},WE={key:1,class:"terminal-detail-row"},YE={class:"terminal-detail-label"},jE={class:"terminal-detail-value"},ZE={key:2,class:"terminal-detail-row"},XE={class:"terminal-detail-label"},QE={class:"terminal-detail-value"},JE={key:0,class:"terminal-output-wrap"},eT={class:"terminal-output-header"},tT={class:"terminal-output"},nT={__name:"ArtifactsPanel",props:{open:{type:Boolean,default:!1}},emits:["close"],setup(e,{emit:t}){const n=t,s=Gt(),{isResizing:a,panelStyle:i,startResize:o}=Mw(),{selectedKey:r,showSource:u,sourceLoading:l,sourceError:c,selectedSourceLanguage:p,highlightedSource:g,textLoading:b,textError:_,highlightedText:y,textTruncated:D,textPreviewLimitLabel:R,artifacts:N,selected:S,openViewedImage:M,artifactKey:O,selectArtifact:B,contentType:L,iconClass:$,labelFor:v,versionedUrl:E,previewUrl:x,canFullscreen:A,openFullscreen:P,rawUrl:z,hasSource:V,toggleSource:Y,downloadUrl:te,isFramePreview:q,copyLink:j,copyIcon:he}=Nw(s),{links:Oe,copyAllLinks:Pe,openAllLinks:nt}=Dw(s),{filesRefreshing:He,refreshFiles:Be,filesPtrPulling:X,filesPtrStyle:ye,filesPtrTriggered:De,filesPtrLabel:dt,onFilesTouchStart:st,onFilesTouchMove:Ie,onFilesTouchEnd:I,filesListRef:U,filesFlat:Z,fileTree:ee,fileIcon:se,fileMeta:ne,fileIndent:me,fileDownloadUrl:le,canViewFile:ue,openFileInViewer:oe}=$w(s),{selectedBg:Ce,backgroundsList:ve,activeBackgroundCount:xe,selectedTask:Te,selectedTerminal:Ne,selectBackground:qe,isBgSelected:Ze,backgroundIcon:et,backgroundTitle:ut,backgroundMeta:Ot,backgroundBadgeClass:Ct,backgroundBadgeLabel:Jt,taskBadgeClass:Vt,taskBadgeLabel:wt,formatTime:Rt,formatUptime:Cn}=Rw(s),St=F("artifacts");return(us,pe)=>{const Dt=Qe("GnIconButton"),Pt=Qe("GnEmptyState");return h(),w("aside",{class:Ae(["artifacts-panel",{"is-open":e.open,"is-resizing":d(a)}]),style:bs(d(i)),"aria-label":d(m)("artifacts.panelLabel")},[f("div",{class:"artifacts-resize-handle",role:"separator","aria-orientation":"vertical",title:d(m)("artifacts.resize"),onPointerdown:pe[0]||(pe[0]=(...Se)=>d(o)&&d(o)(...Se))},null,40,Bw),f("div",Fw,[f("div",Uw,[f("button",{class:"chip artifacts-tab","aria-pressed":St.value==="artifacts",onClick:pe[1]||(pe[1]=Se=>St.value="artifacts")},[pe[15]||(pe[15]=f("i",{class:"ph ph-files"},null,-1)),f("span",null,k(d(m)("artifacts.tabArtifacts")),1),f("span",Hw,k(d(N).length),1)],8,Gw),f("button",{class:"chip artifacts-tab","aria-pressed":St.value==="links",onClick:pe[2]||(pe[2]=Se=>St.value="links")},[pe[16]||(pe[16]=f("i",{class:"ph ph-link"},null,-1)),f("span",null,k(d(m)("artifacts.tabLinks")),1),f("span",Kw,k(d(Oe).length),1)],8,zw),f("button",{class:"chip artifacts-tab","aria-pressed":St.value==="files",onClick:pe[3]||(pe[3]=Se=>St.value="files")},[pe[17]||(pe[17]=f("i",{class:"ph ph-folder"},null,-1)),f("span",null,k(d(m)("artifacts.tabFiles")),1),f("span",Vw,k(d(Z).length),1)],8,qw),f("button",{class:"chip artifacts-tab","aria-pressed":St.value==="backgrounds",onClick:pe[4]||(pe[4]=Se=>St.value="backgrounds")},[pe[18]||(pe[18]=f("i",{class:"ph ph-arrows-out"},null,-1)),f("span",null,k(d(m)("artifacts.tabBackgrounds")),1),f("span",{class:Ae(["artifacts-tab-count",{"has-running":d(xe)>0}])},k(d(xe)),3)],8,Ww)]),Q(Dt,{icon:"ph ph-x",label:d(m)("artifacts.close"),class:"artifacts-close",onClick:pe[5]||(pe[5]=Se=>n("close"))},null,8,["label"])]),St.value==="artifacts"?(h(),w(ce,{key:0},[d(s).viewedImages.length?(h(),w("div",Yw,[f("div",jw,[pe[19]||(pe[19]=f("i",{class:"ph ph-eye"},null,-1)),f("span",Zw,k(d(m)("artifacts.viewedImages")),1),f("span",Xw,k(d(s).viewedImages.length),1)]),f("div",Qw,[(h(!0),w(ce,null,Je(d(s).viewedImages,(Se,H)=>(h(),w("img",{key:H,src:Se,class:"viewed-image-thumb",alt:d(m)("artifacts.viewedImageAlt",{n:H+1}),onClick:ie=>d(M)(Se)},null,8,Jw))),128))])])):K("",!0),!d(N).length&&!d(s).viewedImages.length?(h(),w("div",eS,[Q(Pt,{icon:"ph ph-files",title:d(m)("artifacts.emptyArtifacts")},null,8,["title"])])):(h(),w(ce,{key:2},[f("div",tS,[(h(!0),w(ce,null,Je(d(N),Se=>(h(),w("button",{key:Se.id||Se.filename,class:Ae(["artifact-item",{"is-active":d(r)===d(O)(Se)}]),onClick:H=>d(B)(Se)},[f("span",sS,[f("i",{class:Ae(d($)(Se))},null,2)]),f("span",aS,[f("span",iS,k(Se.title||Se.filename),1),f("span",oS,k(d(v)(Se)),1)])],10,nS))),128))]),d(S)?(h(),w("div",rS,[f("div",lS,[f("div",cS,k(d(S).title||d(S).filename),1),f("div",uS,k(d(S).filename),1)]),f("div",dS,[f("a",{class:"btn-icon",href:d(x)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openPreview"),"aria-label":d(m)("artifacts.openPreview")},[...pe[20]||(pe[20]=[f("i",{class:"ph ph-arrow-square-out"},null,-1)])],8,fS),d(A)(d(S))?(h(),ke(Dt,{key:0,icon:"ph ph-arrows-out",label:d(m)("artifacts.openFullscreen"),onClick:pe[6]||(pe[6]=Se=>d(P)(d(S)))},null,8,["label"])):K("",!0),f("a",{class:"btn-icon",href:d(z)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openRaw"),"aria-label":d(m)("artifacts.openRaw")},[...pe[21]||(pe[21]=[f("i",{class:"ph ph-file"},null,-1)])],8,pS),f("a",{class:"btn-icon",href:d(te)(d(S)),target:"_blank",rel:"noopener noreferrer",title:d(m)("common.download"),"aria-label":d(m)("common.download")},[...pe[22]||(pe[22]=[f("i",{class:"ph ph-download-simple"},null,-1)])],8,gS),d(V)(d(S))?(h(),ke(Dt,{key:1,icon:d(u)?"ph ph-eye":"ph ph-code",label:d(m)(d(u)?"artifacts.showPreview":"artifacts.showSource"),onClick:pe[7]||(pe[7]=Se=>d(Y)(d(S)))},null,8,["icon","label"])):K("",!0),Q(Dt,{icon:d(he)(d(S)),label:d(m)("artifacts.copyFileLink"),onClick:pe[8]||(pe[8]=Se=>d(j)(d(S)))},null,8,["icon","label"])]),f("div",mS,[d(u)?(h(),w("div",hS,[d(l)?(h(),w("div",vS,[pe[23]||(pe[23]=f("span",{class:"spinner"},null,-1)),f("span",null,k(d(m)("artifacts.loadingSource")),1)])):d(c)?(h(),w("pre",bS,k(d(c)),1)):(h(),w("pre",_S,[f("code",{class:Ae(["hljs",`language-${d(p)}`]),innerHTML:d(g)},null,10,yS)]))])):d(q)(d(S))?(h(),w("iframe",{key:1,src:d(x)(d(S)),class:"artifact-frame",sandbox:"allow-scripts allow-same-origin"},null,8,kS)):d(L)(d(S))==="image"?(h(),w("img",{key:2,src:d(E)(d(S)),alt:d(S).title||d(S).filename,class:"artifact-image is-viewable",title:d(m)("artifacts.openFullscreen"),onClick:pe[9]||(pe[9]=Se=>d(P)(d(S)))},null,8,wS)):d(L)(d(S))==="video"?(h(),w("video",{key:3,src:d(E)(d(S)),class:"artifact-video",controls:"",playsinline:""},null,8,SS)):d(L)(d(S))==="audio"?(h(),w("audio",{key:4,src:d(E)(d(S)),class:"artifact-audio",controls:"",preload:"metadata"},null,8,ES)):d(L)(d(S))==="text"?(h(),w("div",TS,[d(b)?(h(),w("div",AS,[pe[24]||(pe[24]=f("span",{class:"spinner"},null,-1)),f("span",null,k(d(m)("artifacts.loadingPreview")),1)])):d(_)?(h(),w("pre",xS,k(d(_)),1)):(h(),w(ce,{key:2},[f("pre",NS,[f("code",{class:Ae(["hljs",`language-${d(p)}`]),innerHTML:d(y)},null,10,CS)]),d(D)?(h(),w("div",RS,k(d(m)("artifacts.textPreviewLimited",{size:d(R)})),1)):K("",!0)],64))])):(h(),w("div",IS,[pe[25]||(pe[25]=f("i",{class:"ph ph-file"},null,-1)),f("span",null,k(d(m)("artifacts.previewUnavailable")),1)]))])])):K("",!0)],64))],64)):K("",!0),St.value==="links"?(h(),w(ce,{key:1},[d(Oe).length?(h(),w(ce,{key:1},[f("div",MS,[(h(!0),w(ce,null,Je(d(Oe),Se=>(h(),w("a",{key:Se.url,class:"artifact-item link-item",href:Se.url,target:"_blank",rel:"noopener noreferrer"},[pe[26]||(pe[26]=f("span",{class:"artifact-icon"},[f("i",{class:"ph ph-link"})],-1)),f("span",$S,[f("span",DS,k(Se.text||Se.url),1),f("span",PS,k(Se.domain)+" · "+k(Se.snippet),1)])],8,LS))),128))]),f("div",BS,[f("div",FS,[f("div",US,k(d(m)("artifacts.linksInSession",{n:d(Oe).length})),1)]),f("div",GS,[Q(Dt,{icon:"ph ph-copy",label:d(m)("artifacts.copyAllLinks"),onClick:d(Pe)},null,8,["label","onClick"]),Q(Dt,{icon:"ph ph-arrow-square-out",label:d(m)("artifacts.openAllLinks"),onClick:d(nt)},null,8,["label","onClick"])])])],64)):(h(),w("div",OS,[Q(Pt,{icon:"ph ph-link",title:d(m)("artifacts.emptyLinks")},null,8,["title"])]))],64)):K("",!0),St.value==="files"?(h(),w("div",{key:2,class:"files-tab-wrap",onTouchstart:pe[10]||(pe[10]=(...Se)=>d(st)&&d(st)(...Se)),onTouchmove:pe[11]||(pe[11]=(...Se)=>d(Ie)&&d(Ie)(...Se)),onTouchend:pe[12]||(pe[12]=(...Se)=>d(I)&&d(I)(...Se))},[f("div",{class:Ae(["ptr-indicator files-ptr",{"ptr-active":d(X)&&!d(He)}]),style:bs(d(ye))},[f("span",{class:Ae(["ptr-spinner",{"ptr-spinning":d(De)}])},null,2),f("span",HS,k(d(dt)),1)],6),f("div",zS,[Q(Dt,{class:"files-refresh-btn",icon:"ph ph-arrows-clockwise",label:d(m)("artifacts.refreshFiles"),disabled:d(He),onClick:d(Be)},null,8,["label","disabled","onClick"])]),d(Z).length?(h(),w("div",{key:1,ref_key:"filesListRef",ref:U,class:Ae(["artifacts-list files-list",{"ptr-pulled":d(X)}])},[(h(!0),w(ce,null,Je(d(ee),Se=>(h(),w("div",{key:Se.path,class:Ae(["artifact-item file-item",{"is-dir":Se.is_dir}]),style:bs(d(me)(Se))},[f("span",qS,[f("i",{class:Ae(d(se)(Se))},null,2)]),f("span",VS,[f("span",WS,k(Se.name),1),f("span",YS,k(d(ne)(Se)),1)]),Se.is_dir?K("",!0):(h(),w("div",jS,[f("a",{class:"btn-icon file-row-action",href:d(le)(Se.path),title:d(m)("common.download"),"aria-label":d(m)("common.download"),target:"_blank",rel:"noopener noreferrer"},[...pe[27]||(pe[27]=[f("i",{class:"ph ph-download-simple"},null,-1)])],8,ZS),d(ue)(Se)?(h(),w("button",{key:0,class:"btn-icon file-row-action",type:"button",title:d(m)("artifacts.viewFile"),"aria-label":d(m)("artifacts.viewFile"),onClick:H=>d(oe)(Se)},[...pe[28]||(pe[28]=[f("i",{class:"ph ph-eye"},null,-1)])],8,XS)):K("",!0)]))],6))),128))],2)):(h(),w("div",KS,[Q(Pt,{icon:"ph ph-folder",title:d(m)("artifacts.emptyFiles")},null,8,["title"])]))],32)):K("",!0),St.value==="backgrounds"?(h(),w(ce,{key:3},[d(ve).length?(h(),w(ce,{key:1},[f("div",JS,[(h(!0),w(ce,null,Je(d(ve),Se=>(h(),w("button",{key:`${Se.kind}:${Se.key}`,class:Ae(["artifact-item terminal-item",{"is-active":d(Ze)(Se),"is-closed":!Se.running}]),onClick:H=>d(qe)(Se)},[f("span",tE,[f("i",{class:Ae(d(et)(Se))},null,2)]),f("span",nE,[f("span",sE,k(d(ut)(Se)),1),f("span",aE,k(d(Ot)(Se)),1)]),f("span",{class:Ae(["badge",d(Ct)(Se)])},k(d(Jt)(Se)),3)],10,eE))),128))]),d(Te)?(h(),w("div",iE,[f("div",oE,[f("div",rE,[f("div",lE,k(d(Te).taskId),1),f("div",cE,k(d(Te).argsSummary||d(Te).tool),1)]),Q(Dt,{class:"terminal-detail-close",icon:"ph ph-x",label:d(m)("artifacts.closeDetails"),onClick:pe[13]||(pe[13]=Se=>Ce.value=null)},null,8,["label"])]),f("div",uE,[f("div",dE,[f("span",fE,k(d(m)("col.tool")),1),f("span",pE,k(d(Te).tool),1)]),f("div",gE,[f("span",mE,k(d(m)("col.status")),1),f("span",{class:Ae(["terminal-detail-value",d(Vt)(d(Te))])},k(d(wt)(d(Te))),3)]),f("div",hE,[f("span",vE,k(d(m)("col.started")),1),f("span",bE,k(d(Rt)(d(Te).startedAt)),1)]),d(Te).finishedAt?(h(),w("div",_E,[f("span",yE,k(d(m)("col.finished")),1),f("span",kE,k(d(Rt)(d(Te).finishedAt)),1)])):K("",!0),d(Te).subagentTokens!=null?(h(),w("div",wE,[f("span",SE,k(d(m)("col.subagentTokens")),1),f("span",EE,k(d(Te).subagentTokens),1)])):K("",!0)]),d(Te).preview||d(Te).status==="running"?(h(),w("div",TE,[f("div",AE,k(d(m)(d(Te).status==="running"?"artifacts.latestProgress":"common.result")),1),f("pre",xE,k(d(Te).preview||d(m)("artifacts.noOutput")),1)])):K("",!0)])):K("",!0),d(Ne)?(h(),w("div",NE,[f("div",CE,[f("div",null,[f("div",RE,k(d(Ne).name),1),f("div",IE,k(d(Ne).description||d(Ne).command||d(m)("artifacts.terminal")),1)]),Q(Dt,{class:"terminal-detail-close",icon:"ph ph-x",label:d(m)("artifacts.closeDetails"),onClick:pe[14]||(pe[14]=Se=>Ce.value=null)},null,8,["label"])]),f("div",OE,[f("div",ME,[f("span",LE,k(d(m)("col.status")),1),f("span",{class:Ae(["terminal-detail-value",d(Ne).status==="busy"?"status-busy":d(Ne).closed?"status-closed":"status-idle"])},k(d(m)(d(Ne).closed?"artifacts.statusClosed":d(Ne).status==="busy"?"artifacts.statusBusy":"artifacts.statusIdle")),3)]),f("div",$E,[f("span",DE,k(d(m)("col.pid")),1),f("span",PE,k(d(Ne).pid||d(m)("common.notAvailable")),1)]),f("div",BE,[f("span",FE,k(d(m)("col.command")),1),f("span",UE,k(d(Ne).command||d(m)("common.notAvailable")),1)]),f("div",GE,[f("span",HE,k(d(m)("col.cwd")),1),f("span",zE,k(d(Ne).cwd||d(m)("common.notAvailable")),1)]),d(Ne).uptime_seconds!=null?(h(),w("div",KE,[f("span",qE,k(d(m)("col.uptime")),1),f("span",VE,k(d(Cn)(d(Ne).uptime_seconds)),1)])):K("",!0),d(Ne).background!=null?(h(),w("div",WE,[f("span",YE,k(d(m)("col.background")),1),f("span",jE,k(d(m)(d(Ne).background?"common.yes":"common.no")),1)])):K("",!0),d(Ne).closeReason?(h(),w("div",ZE,[f("span",XE,k(d(m)("col.reason")),1),f("span",QE,k(d(Ne).closeReason),1)])):K("",!0)]),d(Ne).output?(h(),w("div",JE,[f("div",eT,k(d(m)("common.liveOutput")),1),f("pre",tT,k(d(Ne).output),1)])):K("",!0)])):K("",!0)],64)):(h(),w("div",QS,[Q(Pt,{icon:"ph ph-arrows-out",title:d(m)("artifacts.emptyBackgrounds")},null,8,["title"])]))],64)):K("",!0)],14,Pw)}}},sT=We(nT,[["__scopeId","data-v-f24e35d7"]]),aT={class:"login-overlay"},iT={class:"login-card"},oT={class:"login-title"},rT={class:"login-subtitle"},lT={__name:"LoginScreen",setup(e){const t=ls();return(n,s)=>{const a=Qe("GnButton");return h(),w("div",aT,[f("div",iT,[s[0]||(s[0]=f("img",{src:nc,alt:"Navi",class:"login-logo"},null,-1)),f("h1",oT,k(d(m)("ui.welcomeTitle")),1),f("p",rT,k(d(m)("ui.tagline")),1),Q(a,{variant:"primary",class:"login-btn",icon:"ph ph-sign-in",onClick:d(t).login},{default:fe(()=>[ae(k(d(m)("ui.loginWithGnexus")),1)]),_:1},8,["onClick"])])])}}},sg=We(lT,[["__scopeId","data-v-da007b37"]]),cT=Object.freeze(Object.defineProperty({__proto__:null,default:sg},Symbol.toStringTag,{value:"Module"})),uT=["aria-label"],dT={class:"notification-prompt-body"},fT={class:"notification-prompt-title"},pT={class:"notification-prompt-text"},gT={class:"notification-prompt-actions"},mT={__name:"NotificationPromptBanner",props:{open:{type:Boolean,default:!1},title:{type:String,default:""},text:{type:String,default:""},acceptText:{type:String,default:""},dismissText:{type:String,default:""},busy:{type:Boolean,default:!1},icon:{type:String,default:"ph-bell"}},emits:["accept","dismiss"],setup(e,{emit:t}){const n=t;return(s,a)=>(h(),ke(Sa,{name:"prompt-slide"},{default:fe(()=>[e.open?(h(),w("div",{key:0,class:"notification-prompt",role:"region","aria-live":"polite","aria-label":e.title},[Jo(s.$slots,"icon",{},()=>[f("i",{class:Ae(`ph ${e.icon}`)},null,2)],!0),f("div",dT,[f("div",fT,k(e.title),1),f("div",pT,[Jo(s.$slots,"default",{},()=>[ae(k(e.text),1)],!0)])]),Jo(s.$slots,"actions",{},()=>[f("div",gT,[Q(d(it),{variant:"secondary",size:"sm",disabled:e.busy,loading:e.busy,onClick:a[0]||(a[0]=i=>n("accept"))},{default:fe(()=>[ae(k(e.acceptText),1)]),_:1},8,["disabled","loading"]),Q(d(it),{variant:"ghost",size:"sm",disabled:e.busy,onClick:a[1]||(a[1]=i=>n("dismiss"))},{default:fe(()=>[ae(k(e.dismissText),1)]),_:1},8,["disabled"])])],!0)],8,uT)):K("",!0)]),_:3}))}},ag=We(mT,[["__scopeId","data-v-55b607e2"]]),hT=Object.freeze(Object.defineProperty({__proto__:null,default:ag},Symbol.toStringTag,{value:"Module"}));function vT(){const e=F(navigator.onLine);function t(){e.value=!0}function n(){e.value=!1}return $t(()=>{window.addEventListener("online",t),window.addEventListener("offline",n)}),Nn(()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}),{online:e}}const bT={key:0,class:"offline-banner"},_T={__name:"OfflineBanner",setup(e){const{online:t}=vT();return(n,s)=>(h(),ke(Sa,{name:"offline-slide"},{default:fe(()=>[d(t)?K("",!0):(h(),w("div",bT,[s[0]||(s[0]=f("i",{class:"ph ph-wifi-slash"},null,-1)),f("span",null,k(d(m)("ui.offline")),1)]))]),_:1}))}},ig=We(_T,[["__scopeId","data-v-4a57a206"]]),yT=Object.freeze(Object.defineProperty({__proto__:null,default:ig},Symbol.toStringTag,{value:"Module"})),kT={assistant:"ph-sparkle",designer_3d:"ph-cube",modeler_3d:"ph-polygon",navi_code:"ph-command",dispatcher:"ph-signpost",developer:"ph-code",discuss:"ph-chats",server_admin:"ph-terminal"},gd=["ph-robot","ph-user-circle","ph-atom","ph-planet","ph-puzzle-piece","ph-lightning","ph-star","ph-shield","ph-rocket","ph-flask","ph-hand-heart","ph-compass"];function wT(e){let t=0;for(let n=0;n{const p=Qe("GnIconButton"),g=Qe("GnAvatar");return h(),w("div",ET,[Q(p,{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"welcome-sidebar-btn",onClick:c[0]||(c[0]=b=>n("toggle-sidebar"))},null,8,["label"]),f("div",TT,[c[1]||(c[1]=f("img",{src:nc,alt:"Navi"},null,-1)),c[2]||(c[2]=f("h1",null,"Navi",-1)),f("p",null,k(d(m)("ui.tagline")),1)]),d(s).profiles.length?(h(),w("div",AT,[(h(!0),w(ce,null,Je(d(s).profiles,b=>(h(),w("div",{key:b.id,class:Ae(["welcome-profile-card",{"is-creating":o.value&&r.value===b.id}]),onClick:_=>u(b.id)},[Q(g,{size:"md",variant:"secondary",icon:d(ST)(b)},null,8,["icon"]),f("div",NT,k(b.name),1),f("div",CT,k(b.description),1)],10,xT))),128))])):K("",!0)])}}},og=We(RT,[["__scopeId","data-v-cf0df608"]]),IT=Object.freeze(Object.defineProperty({__proto__:null,default:og},Symbol.toStringTag,{value:"Module"}));let Nl=null;function md(e){Nl=typeof e=="function"?e:null}function rg(e){return Nl?Nl(e)!=="rejected":!1}const OT=location.protocol==="https:"?"wss":"ws",MT=`${OT}://${location.host}`,LT=3,$T=1e3,DT=15e3,PT=20,BT=2e4,FT=45e3,UT=5e3,GT=15e3;function HT(e){const t=`${MT}/ws/sessions/${e}`,n=localStorage.getItem("navi_api_token");return n?`${t}?api_token=${encodeURIComponent(n)}`:t}function zT(){const e=Gt(),t=Mn(),n=F(!1),s=F(!1),a=F(!1);let i=null,o=null,r=0,u=null,l=!1,c=!1,p=0,g=0,b=null,_=null,y=!1,D=[];function R(j){l=!1,o=j,r=0,clearTimeout(u),u=null,a.value=!1,D=[],Y(),B()}function N(){l=!0,clearTimeout(u),E(),te(),i==null||i.close(),i=null,c=!1,D=[],n.value=!1,s.value=!1}function S(j){return(i==null?void 0:i.readyState)===WebSocket.OPEN&&!O()?(i.send(JSON.stringify(j)),"sent"):D.length>=PT?(M(),"rejected"):(D.push(j),M(),"queued")}function M(){s.value=!0,(i==null?void 0:i.readyState)===WebSocket.OPEN?A():(!i||i.readyState===WebSocket.CLOSED||i.readyState===WebSocket.CLOSING)&&B()}function O(){return g!==0&&Date.now()-g>FT}function B(){l||c||(c=!0,p=Date.now(),i&&(i.onclose=null,i.close()),i=new WebSocket(HT(o)),i.onopen=()=>{c=!1,n.value=!0,s.value=!1,a.value=!1,r=0,g=Date.now(),v(),e.dropStaleStream(),L()},i.onmessage=j=>{g=Date.now();let he;try{he=JSON.parse(j.data)}catch{return}q(he)},i.onclose=()=>{c=!1,n.value=!1,E(),l||$()},i.onerror=()=>{})}function L(){if(!i||i.readyState!==WebSocket.OPEN||!D.length)return;const j=D;D=[];for(const he of j)i.send(JSON.stringify(he))}function $(){if(!l)if(s.value=!0,r++,r<=LT){const j=$T*Math.pow(2,r-1);u=setTimeout(B,j)}else a.value=!0,s.value=!1,u=setTimeout(()=>{l||(s.value=!0,B())},DT)}function v(){E(),b=setInterval(()=>{if((i==null?void 0:i.readyState)===WebSocket.OPEN)try{i.send(JSON.stringify({type:"ping",ts:Date.now()}))}catch{}},BT),_=setInterval(x,UT)}function E(){clearInterval(b),clearInterval(_),b=null,_=null}function x(){if(!(l||!i)){if(i.readyState===WebSocket.CONNECTING){Date.now()-p>GT&&A();return}i.readyState===WebSocket.OPEN&&O()&&A()}}function A(){if(l)return;const j=i;if(i=null,c=!1,j){j.onopen=null,j.onmessage=null,j.onerror=null,j.onclose=null;try{j.close()}catch{}}E(),r=0,clearTimeout(u),n.value=!1,s.value=!0,B()}function P(){if(!(l||!o)&&document.visibilityState==="visible"){if(!i||i.readyState!==WebSocket.OPEN||O()){A();return}e.checkForUpdates(o)}}function z(){l||!o||A()}function V(j){l||!o||j.persisted&&A()}function Y(){y||typeof window>"u"||(document.addEventListener("visibilitychange",P),window.addEventListener("online",z),window.addEventListener("pageshow",V),y=!0)}function te(){y&&(document.removeEventListener("visibilitychange",P),window.removeEventListener("online",z),window.removeEventListener("pageshow",V),y=!1)}function q(j){switch(j.type){case"stream_start":e.onStreamStart();break;case"thinking_delta":e.onThinkingDelta(j.delta??"");break;case"thinking_end":e.onThinkingEnd();break;case"turn_thinking":e.onTurnThinking(j);break;case"planning_status":e.onPlanningStatus(j);break;case"plan_ready":e.onPlanReady(j);break;case"tool_started":e.onToolStarted(j);break;case"tool_call":e.onToolCall(j);break;case"terminal_output":e.onTerminalOutput(j);break;case"terminal_closed":e.onTerminalClosed(j);break;case"terminal_opened":e.onTerminalOpened(j);break;case"task_update":{const he=j.task_id,Oe=he?!!e.backgroundTasks[he]:!1;e.onTaskUpdate(j);const Pe=he?e.backgroundTasks[he]:null,nt=`${j.tool??m("common.task")} (${he})`;if(j.status==="running")!Oe&&Pe&&t.info({title:m("toast.bgTaskStarted"),text:nt});else if(Oe){const He={title:m("toast.bgTaskFinished"),text:`${nt} — ${j.status}`};j.status==="completed"?t.success(He):t.error(He)}break}case"message_queued":e.onMessageQueued(j);break;case"stream_delta":e.onStreamDelta(j.delta??"");break;case"stream_end":e.onStreamEnd(j);break;case"stream_stopped":e.onStreamStopped();break;case"profile_switched":e.onProfileSwitched(j);break;case"model_info":e.onModelInfo(j);break;case"compression_started":e.onCompressionStarted(j);break;case"context_compressed":e.onContextCompressed(j);break;case"error":e.onError(j);break;case"replay_start":e.onReplayStart();break;case"replay_end":e.onReplayEnd();break;case"heartbeat":break;case"pong":break;case"recall_update":e.onRecallUpdate(j);break;case"skill_proposal_decided":e.onProposalDecided(j);break;case"session_sync":o&&!e.streaming&&!e.loading&&e.checkForUpdates(o);break;case"mcp_status_update":j.status==="connected"?t.success({title:m("toast.mcpConnected"),text:`${j.server_name} (${m("common.toolsCount",{n:j.tool_count??"?"})})`}):t.error({title:m("toast.mcpDisconnected"),text:j.server_name});break}}return md(S),Nn(()=>{md(null),N()}),{connected:n,reconnecting:s,reconnectFailed:a,connect:R,disconnect:N,send:S}}const KT={key:0,class:"profile-badge"},lg={__name:"ProfileBadge",props:{profileId:{type:String,default:null},showAvatar:{type:Boolean,default:!0}},setup(e){const t=e,n=wi(),s=W(()=>t.profileId?n.getProfile(t.profileId):null),a={server_admin:"warning",developer:"info"},i=W(()=>a[t.profileId]||"secondary");function o(r){return r?r.split(/\s+/).map(u=>u[0]).join("").slice(0,2).toUpperCase():"?"}return(r,u)=>{const l=Qe("GnAvatar"),c=Qe("GnBadge");return s.value?(h(),w("div",KT,[e.showAvatar?(h(),ke(l,{key:0,size:"sm",initials:o(s.value.name)},null,8,["initials"])):K("",!0),Q(c,{variant:i.value},{default:fe(()=>[ae(k(s.value.name),1)]),_:1},8,["variant"])])):K("",!0)}}},qT=Object.freeze(Object.defineProperty({__proto__:null,default:lg},Symbol.toStringTag,{value:"Module"})),VT=["title"],WT={class:"model-chip-text"},YT={__name:"ModelChip",setup(e){const t=Gt(),n=W(()=>m("chat.backupModelTitle",{model:t.servedModel,target:t.servedTarget||"—"}));return(s,a)=>d(t).servedFallback&&d(t).servedModel?(h(),w("span",{key:0,class:"model-chip",title:n.value},[a[0]||(a[0]=f("i",{class:"ph ph-plug-charging"},null,-1)),f("span",WT,k(d(m)("chat.backupModel",{model:d(t).servedModel})),1)],8,VT)):K("",!0)}},cg=We(YT,[["__scopeId","data-v-6039953a"]]),jT=Object.freeze(Object.defineProperty({__proto__:null,default:cg},Symbol.toStringTag,{value:"Module"})),ZT=["title"],XT={__name:"ContextBar",emits:["info"],setup(e,{emit:t}){const n=t,s=Gt(),a=W(()=>s.maxContextTokens?Math.min(100,Math.round(s.contextTokens/s.maxContextTokens*100)):0),i=W(()=>a.value>=80?"is-crit":a.value>=60?"is-warn":""),o=W(()=>`${r(s.contextTokens)} / ${r(s.maxContextTokens)} tokens · ${m("chat.sessionInfo")}`);function r(u){return u>=1e3?(u/1e3).toFixed(1).replace(".0","")+"k":String(u)}return(u,l)=>d(s).maxContextTokens>0?(h(),w("button",{key:0,type:"button",class:"context-bar",title:o.value,"aria-haspopup":"dialog",onClick:l[0]||(l[0]=c=>n("info"))},[f("span",{class:Ae(["context-bar-pct",i.value])},k(a.value)+"%",3)],8,ZT)):K("",!0)}},ug=We(XT,[["__scopeId","data-v-cb775a25"]]),QT=Object.freeze(Object.defineProperty({__proto__:null,default:ug},Symbol.toStringTag,{value:"Module"}));function dg(e){return e%86400===0?m("chat.infoRecallDays",{n:e/86400}):e%3600===0?m("chat.infoRecallHours",{n:e/3600}):m("chat.infoRecallMinutes",{n:Math.round(e/60)})}function JT(e,t=Date.now()){const n=new Date(e).getTime();if(!Number.isFinite(n))return"—";const s=n-t;if(s<=0)return m("chat.recallDueNow");if(s<6e4)return m("chat.recallUnderAMinute");const a=Math.round(s/6e4);if(a<60)return m("chat.recallIn",{interval:m("chat.infoRecallMinutes",{n:a})});const i=Math.round(s/36e5);if(i<24)return m("chat.recallIn",{interval:m("chat.infoRecallHours",{n:i})});const o=Math.round(s/864e5);return m("chat.recallIn",{interval:m("chat.infoRecallDays",{n:o})})}const eA={class:"session-info"},tA={key:0,class:"si-muted si-loading"},nA={key:1,class:"si-error"},sA={class:"si-grid"},aA={class:"si-section"},iA={class:"si-heading"},oA={class:"si-active-text"},rA={class:"si-model"},lA={class:"si-server"},cA={key:1,class:"si-muted"},uA={key:2,class:"si-chain"},dA={class:"si-subheading"},fA={class:"si-chain-list"},pA={class:"si-chain-model"},gA=["title"],mA=["title"],hA={class:"si-section"},vA={class:"si-heading"},bA={class:"si-id-row"},_A={class:"si-id"},yA={class:"si-section si-live"},kA={class:"si-heading"},wA={class:"si-live-grid"},SA={class:"si-live-term"},EA=3e3,TA={__name:"SessionInfoModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=F(null),o=F(!1),r=F("");let u=null;async function l(){const v=a.currentId;if(v){o.value=!0;try{const E=await Bv(v);if(a.currentId!==v)return;i.value=E,r.value=""}catch(E){if(a.currentId!==v)return;r.value=m("chat.infoError"),console.error("[session-info] load failed",E)}finally{o.value=!1}}}function c(){u!==null&&(clearInterval(u),u=null)}Ge(()=>n.open,v=>{c(),v&&(i.value=null,r.value="",l(),u=setInterval(l,EA))},{immediate:!0}),Ge(()=>a.currentId,()=>{n.open&&(i.value=null,l())}),Nn(c);const p=W(()=>{var v,E;return((E=(v=i.value)==null?void 0:v.llm)==null?void 0:E.active)??null}),g=W(()=>{var v,E;return((E=(v=i.value)==null?void 0:v.llm)==null?void 0:E.chain)??[]}),b=W(()=>{var x,A;const v=(x=i.value)==null?void 0:x.llm;if(!v)return[];const E=[];return v.route&&E.push({key:"route",term:m("chat.infoRoute"),value:v.route}),v.active?E.push({key:"window",term:m("chat.infoWindow"),value:`${L(v.active.context_window)} ${m("chat.infoTokens")}`}):(A=v.models)!=null&&A.length&&E.push({key:"models",term:m("chat.infoConfiguredModels"),value:v.models.join(", ")}),E}),_=W(()=>{const v=i.value;if(!v)return"—";const E=v.max_context_tokens?Math.min(100,Math.round(v.context_token_count/v.max_context_tokens*100)):0;return`${L(v.context_token_count)} / ${L(v.max_context_tokens)} (${E}%)`}),y=W(()=>{var E;const v=((E=i.value)==null?void 0:E.archive_threshold)??0;return v>0?m("chat.infoArchiveValue",{seq:L(v)}):m("chat.infoNone")}),D=W(()=>{var E;const v=(E=i.value)==null?void 0:E.compression;return v?v.enabled?m("chat.infoCompressionValue",{pct:Math.round(v.threshold*100),keep:v.keep_recent,max:L(v.summary_max_tokens)}):m("chat.infoCompressionOff"):"—"}),R=W(()=>{var x;const v=(x=i.value)==null?void 0:x.recall;if(!v)return"";const E=[Ql(v.call_type)];return v.call_type==="recurring"&&v.interval_seconds&&E.push(m("chat.infoRecallEvery",{interval:dg(v.interval_seconds)})),E.push($(v.trigger_at)),E.join(" · ")}),N=W(()=>{const v=i.value;if(!v)return[];const E=[{key:"id",term:m("chat.infoSessionId"),value:v.session_id},{key:"profile",term:m("chat.infoProfile"),value:v.profile_name||v.profile_id||"—"},{key:"created",term:m("chat.infoCreated"),value:$(v.created_at)},{key:"active",term:m("chat.infoLastActive"),value:$(v.last_active)},{key:"messages",term:m("chat.infoMessages"),value:L(v.message_count)},{key:"archive",term:m("chat.infoArchive"),value:y.value},{key:"context",term:m("chat.infoContext"),value:_.value},{key:"compression",term:m("chat.infoCompression"),value:D.value}];return v.recall&&E.push({key:"recall",term:m("chat.infoRecall"),value:R.value}),E}),S=W(()=>{var z,V;const v=i.value;if(!v)return[];const E=((z=v.live)==null?void 0:z.running)||a.streaming,x=a.wsConnected?m("chat.infoWsConnected"):a.wsReconnecting?m("chat.infoWsReconnecting"):m("chat.infoWsOffline"),A=a.wsConnected?"ok":a.wsReconnecting?"warn":"error",P=Object.values(a.backgroundTasks||{}).filter(Y=>(Y==null?void 0:Y.status)==="running"||(Y==null?void 0:Y.status)==="queued").length;return[{key:"running",term:m("chat.infoRunning"),value:m(E?"chat.infoRunningYes":"chat.infoRunningNo"),tone:E?"live":"muted"},{key:"clients",term:m("chat.infoClients"),value:L(((V=v.live)==null?void 0:V.clients)??0),tone:"neutral"},{key:"ws",term:m("chat.infoWs"),value:x,tone:A},{key:"tasks",term:m("chat.infoTasks"),value:P?L(P):m("chat.infoNone"),tone:P?"live":"muted"}]});function M(v){return!!p.value&&p.value.model===v.model&&p.value.target===v.target}const O={ok:"chat.infoStateOk",degraded:"chat.infoStateDegraded",missing:"chat.infoStateMissing"};function B(v){return O[v]?m(O[v]):v}function L(v){return v==null?"—":new Intl.NumberFormat(Lt.value).format(v)}function $(v){return v?new Date(v).toLocaleString(Lt.value):"—"}return(v,E)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("chat.sessionInfo"),"onUpdate:open":E[1]||(E[1]=x=>s("update:open",x))},{actions:fe(()=>[Q(d(it),{variant:"secondary",icon:"ph-arrows-clockwise",loading:o.value,onClick:l},{default:fe(()=>[ae(k(d(m)("chat.infoRefresh")),1)]),_:1},8,["loading"]),Q(d(it),{variant:"primary",onClick:E[0]||(E[0]=x=>s("update:open",!1))},{default:fe(()=>[ae(k(d(m)("common.close")),1)]),_:1})]),default:fe(()=>[f("div",eA,[o.value&&!i.value?(h(),w("div",tA,[E[2]||(E[2]=f("i",{class:"ph ph-circle-notch si-spin"},null,-1)),ae(" "+k(d(m)("chat.infoLoading")),1)])):r.value?(h(),w("p",nA,[E[3]||(E[3]=f("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+k(r.value),1)])):i.value?(h(),w(ce,{key:2},[f("div",sA,[f("section",aA,[f("h4",iA,k(d(m)("chat.infoModelSection")),1),p.value?(h(),w("div",{key:0,class:Ae(["si-active",{"is-backup":!p.value.primary}])},[f("i",{class:Ae(p.value.primary?"ph ph-cloud-check":"ph ph-plug-charging")},null,2),f("div",oA,[f("span",rA,k(p.value.model),1),f("span",lA,[ae(k(p.value.target),1),p.value.host?(h(),w(ce,{key:0},[ae(" · "+k(p.value.host),1)],64)):K("",!0)])]),p.value.primary?(h(),ke(d(hi),{key:1,variant:"success",outline:""},{default:fe(()=>[ae(k(d(m)("chat.infoPrimary")),1)]),_:1})):(h(),ke(d(hi),{key:0,variant:"warning"},{default:fe(()=>[ae(k(d(m)("chat.infoBackup")),1)]),_:1}))],2)):(h(),w("p",cA,k(d(m)("chat.infoNoRoute")),1)),Q(d(lo),{items:b.value,class:"si-rows"},null,8,["items"]),g.value.length?(h(),w("div",uA,[f("div",dA,k(d(m)("chat.infoRouteSection")),1),f("ul",fA,[(h(!0),w(ce,null,Je(g.value,x=>(h(),w("li",{key:`${x.target}:${x.model}`,class:Ae(["si-chain-item",{"is-active":M(x)}])},[f("span",{class:Ae(["si-chain-dot",`is-${x.state}`])},null,2),f("span",pA,k(x.model),1),f("span",{class:"si-chain-target",title:x.host},k(x.target),9,gA),f("span",{class:"si-chain-state",title:x.reason||""},k(B(x.state)),9,mA)],2))),128))])])):K("",!0)]),f("section",hA,[f("h4",vA,k(d(m)("chat.infoSessionSection")),1),Q(d(lo),{items:N.value,class:"si-rows"},{id:fe(({item:x})=>[f("span",bA,[f("span",_A,k(x.value),1),Q(d(sc),{text:x.value,size:"sm",label:d(m)("common.copy")},null,8,["text","label"])])]),_:1},8,["items"])])]),f("section",yA,[f("h4",kA,k(d(m)("chat.infoLiveSection")),1),f("div",wA,[(h(!0),w(ce,null,Je(S.value,x=>(h(),w("div",{key:x.key,class:"si-live-item"},[f("span",SA,k(x.term),1),f("span",{class:Ae(["si-live-value",`is-${x.tone}`])},k(x.value),3)]))),128))])])],64)):K("",!0)])]),_:1},8,["open","title"]))}},AA=We(TA,[["__scopeId","data-v-72bc8966"]]),xA={class:"share-body"},NA={class:"share-intro"},CA={key:0,class:"share-loading"},RA={key:1,class:"share-error"},IA={class:"share-label",for:"share-url"},OA={class:"share-link-row"},MA=["value"],LA={class:"share-warning"},$A={class:"share-hint"},DA={key:3,class:"share-hint"},PA={__name:"ShareChatModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=F(null),o=F(""),r=F(!1),u=F("");Ge(()=>n.open,c=>{c&&(i.value=a.currentId,o.value="",u.value="",r.value=!1)},{immediate:!0});async function l(){const c=i.value;if(!(!c||r.value)){r.value=!0,u.value="";try{const p=await Vv(c);o.value=p.url}catch(p){u.value=String((p==null?void 0:p.message)||"").includes("409")?m("share.emptyChat"):m("share.createFailed"),console.error("[share] create failed",p)}finally{r.value=!1}}}return(c,p)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("share.title"),"onUpdate:open":p[2]||(p[2]=g=>s("update:open",g))},{actions:fe(()=>[Q(d(it),{variant:"secondary",onClick:p[1]||(p[1]=g=>s("update:open",!1))},{default:fe(()=>[ae(k(d(m)("common.close")),1)]),_:1}),Q(d(it),{variant:"primary",icon:"ph-link",loading:r.value,disabled:!i.value,onClick:l},{default:fe(()=>[ae(k(o.value?d(m)("share.regenerate"):d(m)("share.create")),1)]),_:1},8,["loading","disabled"])]),default:fe(()=>[f("div",xA,[f("p",NA,k(d(m)("share.intro")),1),r.value?(h(),w("div",CA,[p[3]||(p[3]=f("i",{class:"ph ph-circle-notch share-spin"},null,-1)),ae(" "+k(d(m)("share.creating")),1)])):u.value?(h(),w("p",RA,[p[4]||(p[4]=f("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+k(u.value),1)])):o.value?(h(),w(ce,{key:2},[f("label",IA,k(d(m)("share.linkLabel")),1),f("div",OA,[f("input",{id:"share-url",class:"share-url",type:"text",readonly:"",value:o.value,onFocus:p[0]||(p[0]=g=>g.target.select())},null,40,MA),Q(d(sc),{text:o.value,label:d(m)("common.copy")},null,8,["text","label"])]),f("p",LA,[p[5]||(p[5]=f("i",{class:"ph ph-warning"},null,-1)),ae(" "+k(d(m)("share.warning")),1)]),f("p",$A,k(d(m)("share.killHint")),1)],64)):(h(),w("p",DA,k(d(m)("share.notYet")),1))])]),_:1},8,["open","title"]))}},BA=We(PA,[["__scopeId","data-v-5d45d058"]]),FA={key:0,class:"recall-info"},UA={key:0,class:"ri-block"},GA={class:"ri-heading"},HA={class:"ri-comment"},zA={key:1,class:"ri-block"},KA={class:"ri-heading"},qA={class:"ri-message"},VA={key:1,class:"ri-muted"},WA={__name:"RecallInfoModal",props:{open:Boolean},emits:["update:open"],setup(e,{emit:t}){const n=e,s=t,a=Gt(),i=Mn(),o=F(!1),r=F(!1),u=F(Date.now());let l=null;const c=W(()=>a.recall),p=W(()=>{var R;return((R=c.value)==null?void 0:R.call_type)==="recurring"}),g=W(()=>{const R=c.value;if(!R)return[];const N=[{key:"type",term:m("chat.recallType"),value:Ql(R.call_type)},{key:"at",term:m("chat.recallAt"),value:D(R.trigger_at)}];return R.created_at&&N.push({key:"added",term:m("chat.recallAdded"),value:D(R.created_at)}),N.push({key:"when",term:m("chat.recallWhen"),value:JT(R.trigger_at,u.value)}),p.value&&R.interval_seconds&&N.push({key:"interval",term:m("chat.recallInterval"),value:dg(R.interval_seconds)}),N});Ge(()=>n.open,R=>{b(),R&&(a.loadRecall(),u.value=Date.now(),l=setInterval(()=>{u.value=Date.now()},1e3))},{immediate:!0}),Nn(b);function b(){l!==null&&(clearInterval(l),l=null)}async function _(){o.value=!0;try{await a.cancelRecall()?s("update:open",!1):i.error({title:m("chat.recallCancelFailed")})}finally{o.value=!1}}async function y(){r.value=!0;try{await a.skipRecall()?u.value=Date.now():i.error({title:m("chat.recallSkipFailed")})}finally{r.value=!1}}function D(R){return R?new Date(R).toLocaleString(Lt.value):"—"}return(R,N)=>(h(),ke(d(Ia),{open:e.open,title:d(m)("chat.recallInfoTitle"),"onUpdate:open":N[1]||(N[1]=S=>s("update:open",S))},{actions:fe(()=>[p.value?(h(),ke(d(it),{key:0,variant:"secondary",icon:"ph-skip-forward",loading:r.value,onClick:y},{default:fe(()=>[ae(k(d(m)("sidebar.skipNext")),1)]),_:1},8,["loading"])):K("",!0),Q(d(it),{variant:"danger",icon:"ph-x-circle",loading:o.value,onClick:_},{default:fe(()=>[ae(k(d(m)("chat.recallCancel")),1)]),_:1},8,["loading"]),Q(d(it),{variant:"primary",onClick:N[0]||(N[0]=S=>s("update:open",!1))},{default:fe(()=>[ae(k(d(m)("common.close")),1)]),_:1})]),default:fe(()=>[c.value?(h(),w("div",FA,[Q(d(lo),{items:g.value,class:"ri-rows"},null,8,["items"]),c.value.internal_comment?(h(),w("section",UA,[f("h4",GA,k(d(m)("chat.recallComment")),1),f("p",HA,k(c.value.internal_comment),1)])):K("",!0),c.value.additional_context_message?(h(),w("section",zA,[f("h4",KA,k(d(m)("chat.recallMessage")),1),f("pre",qA,k(c.value.additional_context_message),1)])):K("",!0)])):(h(),w("p",VA,k(d(m)("chat.recallGone")),1))]),_:1},8,["open","title"]))}},YA=We(WA,[["__scopeId","data-v-707cd1f9"]]),jA={class:"chat-header"},ZA={class:"chat-header-info"},XA=["title"],QA={key:0,class:"artifact-count"},JA={key:0,class:"recall-banner"},e0=["title"],t0={class:"recall-text"},n0=["title"],s0=["title"],a0={__name:"ChatHeader",emits:["toggle-sidebar","toggle-artifacts"],setup(e,{emit:t}){const n=t,s=Gt(),a=xn(),i=Mn(),o=Na(),r=F(!1),u=F(!1),l=F(!1),c=W(()=>{const L=[{label:m("chat.sessionInfo"),icon:"ph-info",onSelect:()=>{r.value=!0}}];return s.currentId&&(L.push({label:m("share.title"),icon:"ph-share-network",onSelect:()=>{u.value=!0}}),L.push({label:m("chat.deleteSession"),icon:"ph-trash",danger:!0,onSelect:p})),L});async function p(){const L=s.currentId;if(L&&await o(m("confirm.deleteSession")))try{await a.deleteSession(L),s.clearSession()}catch($){console.error("delete session failed",$),i.error({title:m("common.error")})}}const g=W(()=>{var $;const L=a.sessions.find(v=>v.session_id===s.currentId);return(L==null?void 0:L.name)||((($=s.currentId)==null?void 0:$.slice(0,8))??"Navi")}),b=W(()=>s.artifacts.length),_=W(()=>{const L=s.recall;if(!L)return"";const $=Ql(L.call_type);return m("chat.scheduledRecall",{type:$,time:M(L.trigger_at)})}),y=F(!1),D=F(""),R=F(null);function N(){D.value=g.value,y.value=!0,xt(()=>{var L,$;(L=R.value)==null||L.focus(),($=R.value)==null||$.select()})}async function S(){if(!y.value)return;const L=s.currentId,$=D.value;if(y.value=!1,!L)return;const v=$===g.value?null:$.trim();try{const E=v===null?{name:g.value}:await Hv(L,v);E!=null&&E.name&&a.updateName(L,E.name)}catch(E){console.error("rename session failed",E)}}function M(L){return L?new Date(L).toLocaleString(Lt.value):""}Ge(()=>s.currentId,s.loadRecall,{immediate:!0});async function O(){await s.cancelRecall()||i.error({title:m("chat.recallCancelFailed")})}async function B(){await s.skipRecall()||i.error({title:m("chat.recallSkipFailed")})}return(L,$)=>{const v=Qe("GnIconButton");return h(),w(ce,null,[f("div",jA,[Q(v,{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"btn-sidebar-toggle",onClick:$[0]||($[0]=E=>n("toggle-sidebar"))},null,8,["label"]),f("div",ZA,[y.value?Gs((h(),w("input",{key:0,ref_key:"renameEl",ref:R,"onUpdate:modelValue":$[1]||($[1]=E=>D.value=E),class:"chat-header-rename",type:"text",maxlength:"200",spellcheck:"false",onBlur:S,onKeydown:[$[2]||($[2]=Wn(Bt(E=>y.value=!1,["prevent"]),["esc"])),$[3]||($[3]=Wn(Bt(E=>{var x;return(x=R.value)==null?void 0:x.blur()},["prevent"]),["enter"]))]},null,544)),[[mi,D.value]]):(h(),w("span",{key:1,class:"chat-header-title",title:d(m)("chat.rename"),onClick:N},k(g.value),9,XA)),y.value?K("",!0):(h(),ke(lg,{key:2,"profile-id":d(s).currentProfileId,"show-avatar":!1},null,8,["profile-id"])),y.value?K("",!0):(h(),ke(cg,{key:3}))]),Q(ug,{onInfo:$[4]||($[4]=E=>r.value=!0)}),Q(d(Pp),{class:"chat-header-menu",items:c.value},{trigger:fe(({open:E,toggle:x})=>[Q(v,{icon:"ph ph-dots-three-outline",label:d(m)("chat.moreActions"),class:"btn-more-toggle","aria-expanded":E?"true":"false",onClick:x},null,8,["label","aria-expanded","onClick"])]),_:1},8,["items"]),Q(v,{icon:"ph ph-files",label:d(m)("artifacts.tabArtifacts"),class:"btn-artifacts-toggle",onClick:$[5]||($[5]=E=>n("toggle-artifacts"))},{default:fe(()=>[b.value?(h(),w("span",QA,k(b.value),1)):K("",!0)]),_:1},8,["label"])]),Q(AA,{open:r.value,"onUpdate:open":$[6]||($[6]=E=>r.value=E)},null,8,["open"]),Q(BA,{open:u.value,"onUpdate:open":$[7]||($[7]=E=>u.value=E)},null,8,["open"]),d(s).recall?(h(),w("div",JA,[f("button",{class:"recall-open",title:d(m)("chat.recallDetailsHint"),onClick:$[8]||($[8]=E=>l.value=!0)},[$[10]||($[10]=f("i",{class:"ph ph-clock"},null,-1)),f("span",t0,k(_.value),1)],8,e0),f("button",{class:"recall-btn",title:d(m)("sidebar.cancelRecall"),onClick:O},[...$[11]||($[11]=[f("i",{class:"ph ph-x-circle"},null,-1)])],8,n0),d(s).recall.call_type==="recurring"?(h(),w("button",{key:0,class:"recall-btn",title:d(m)("sidebar.skipNext"),onClick:B},[...$[12]||($[12]=[f("i",{class:"ph ph-skip-forward"},null,-1)])],8,s0)):K("",!0)])):K("",!0),Q(YA,{open:l.value,"onUpdate:open":$[9]||($[9]=E=>l.value=E)},null,8,["open"])],64)}}},i0=We(a0,[["__scopeId","data-v-686a3283"]]);function fg(){const e=F(!1);async function t(n){var s;if(n){if((s=navigator.clipboard)!=null&&s.writeText)await navigator.clipboard.writeText(n);else{const a=document.createElement("textarea");a.value=n,a.style.cssText="position:fixed;opacity:0",document.body.appendChild(a),a.select();try{document.execCommand("copy")}finally{document.body.removeChild(a)}}e.value=!0,setTimeout(()=>{e.value=!1},1500)}}return{copied:e,copy:t}}const o0={class:"msg-user-wrap"},r0={key:0,class:"msg-recall-badge"},l0={key:1,class:"msg-failed-badge"},c0={key:2,class:"msg-queued-badge"},u0=["innerHTML"],d0={key:3,class:"msg-user-attachments"},f0=["src","onClick"],p0={class:"msg-user-footer"},g0={key:0,class:"msg-time msg-time--user"},pg={__name:"UserMessage",props:{msg:{type:Object,required:!0},isFlashing:{type:Boolean,default:!1}},setup(e){const t=e,n=W(()=>t.msg.time),s=$o(n),{open:a}=Ca(),{copied:i,copy:o}=fg();function r(l){return l.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function u(l){if(!l)return"";const c=l.split(` -`);let p=[],g=[];for(const y of c)y.startsWith("> ")?p.push(r(y.slice(2))):y.trim()&&g.push(r(y));const b=p.length?`
    ${p.join("
    ")}
    `:"",_=g.join(" ");return b+_}return(l,c)=>{var g,b;const p=Qe("GnIconButton");return h(),w("div",{class:Ae(["msg-user",{"msg-user--recall":e.msg.isRecall,"msg-user--queued":e.msg.queued}])},[f("div",o0,[f("div",{class:Ae(["msg-user-bubble",{"msg-flash":t.isFlashing}])},[e.msg.isRecall?(h(),w("div",r0,[c[1]||(c[1]=f("i",{class:"ph ph-clock"},null,-1)),f("span",null,k(d(m)("messages.scheduledRecall")),1)])):K("",!0),e.msg.failed?(h(),w("div",l0,[c[2]||(c[2]=f("i",{class:"ph ph-warning-circle"},null,-1)),f("span",null,k(d(m)("chat.sendFailed")),1)])):K("",!0),e.msg.queued?(h(),w("div",c0,[c[3]||(c[3]=f("i",{class:"ph ph-hourglass-medium"},null,-1)),f("span",null,k(d(m)("chat.queuedBadge")),1)])):K("",!0),f("div",{class:"msg-user-text",innerHTML:u(e.msg.text)},null,8,u0),(g=e.msg.images)!=null&&g.length||(b=e.msg.files)!=null&&b.length?(h(),w("div",d0,[(h(!0),w(ce,null,Je(e.msg.images,(_,y)=>(h(),w("img",{key:`img-${y}`,src:_,class:"msg-user-image",onClick:D=>d(a)(_)},null,8,f0))),128)),(h(!0),w(ce,null,Je(e.msg.files,(_,y)=>(h(),w("span",{key:`file-${y}`,class:"msg-user-file-pill"},[c[4]||(c[4]=f("i",{class:"ph ph-file"},null,-1)),ae(" "+k(_.name),1)]))),128))])):K("",!0)],2),f("div",p0,[d(s)?(h(),w("span",g0,k(d(s)),1)):K("",!0),Q(p,{icon:d(i)?"ph ph-check":"ph ph-copy",label:d(m)(d(i)?"common.copied":"common.copy"),class:"msg-copy-btn",onClick:c[0]||(c[0]=_=>d(o)(e.msg.text))},null,8,["icon","label"])])])],2)}}},hd=280,m0="cubic-bezier(0.4, 0, 0.2, 1)",si=new WeakMap;function h0(){var e;return((e=window.matchMedia)==null?void 0:e.call(window,"(prefers-reduced-motion: reduce)").matches)===!0}function Zr(e,t,n){si.get(e)===t&&(si.delete(e),e.style.transition="",e.style.height="",e.style.overflow="",n?e.setAttribute("open",""):e.removeAttribute("open"))}function _a(e,t,{animate:n=!0}={}){if(!e)return;const s=Symbol("details-animation");si.set(e,s);const a=e.querySelector(":scope > summary"),i=a?a.offsetHeight:0;if(!n||h0()||!e.isConnected){Zr(e,s,t);return}if(e.hasAttribute("open")===t&&!e.style.height){si.delete(e);return}const o=e.getBoundingClientRect().height;e.style.overflow="hidden",e.style.height=`${o}px`,t&&e.setAttribute("open",""),setTimeout(()=>{if(si.get(e)!==s)return;const r=t?e.scrollHeight:i;if(Math.abs(r-o)<1){Zr(e,s,t);return}e.offsetHeight,e.style.transition=`height ${hd}ms ${m0}`,e.style.height=`${r}px`;const u=()=>{clearTimeout(c),e.removeEventListener("transitionend",l),Zr(e,s,t)},l=p=>{p.target!==e||p.propertyName!=="height"||u()};e.addEventListener("transitionend",l);const c=setTimeout(u,hd+100)},0)}function Mt(e){var n;const t=(n=e.currentTarget)==null?void 0:n.parentElement;!t||t.tagName!=="DETAILS"||_a(t,!t.hasAttribute("open"))}const v0={key:0,class:"spinner"},b0={class:"thinking-body"},Cl={__name:"ThinkingCard",props:{msg:{type:Object,required:!0}},setup(e){const t=e,n=F(null),s=W(()=>{var i;return(((i=t.msg.thinking)==null?void 0:i.text)??"").replace(/^\s*/i,"").replace(/\s*<\/thought>\s*$/i,"").replace(/^thought\s*:?\s*\n+/i,"").trim()});return(a,i)=>(h(),w("details",{ref_key:"detailsEl",ref:n,class:"thinking-card"},[f("summary",{onClick:i[0]||(i[0]=Bt((...o)=>d(Mt)&&d(Mt)(...o),["prevent"]))},[i[1]||(i[1]=f("i",{class:"ph ph-brain"},null,-1)),ae(" "+k(d(m)("messages.thinking"))+" ",1),e.msg.thinking.done?K("",!0):(h(),w("span",v0)),i[2]||(i[2]=f("i",{class:"ph ph-caret-down thinking-chevron"},null,-1))]),f("div",b0,k(s.value),1)],512))}};/*! @license DOMPurify 3.4.15 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.15/LICENSE */function vd(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,s=Array(t);n2?s-2:0),i=2;i1?n-1:0),a=1;a"u"?null:Ut(BigInt.prototype.toString),Sd=typeof Symbol>"u"?null:Ut(Symbol.prototype.toString),dn=Ut(Object.prototype.hasOwnProperty),Ha=Ut(Object.prototype.toString),Yt=Ut(RegExp.prototype.test),Bs=O0(TypeError);function Ut(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,s=new Array(n>1?n-1:0),a=1;a2&&arguments[2]!==void 0?arguments[2]:Wa;if(bd&&bd(e,null),!ya(t))return e;let s=t.length;for(;s--;){let a=t[s];if(typeof a=="string"){const i=n(a);i!==a&&(E0(t)||(t[s]=i),a=i)}e[a]=!0}return e}function M0(e){for(let t=0;t/g),U0=Kt(/\${[\w\W]*/g),G0=Kt(/^data-[\-\w.\u00B7-\uFFFF]+$/),H0=Kt(/^aria-[\-\w]+$/),Nd=Kt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),z0=Kt(/^(?:\w+script|data):/i),K0=Kt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q0=Kt(/^html$/i),V0=Kt(/^[a-z][.\w]*(-[.\w]+)+$/i),Cd=Kt(/<[/\w!]/g),Rd=Kt(/<[/\w]/g),W0=Kt(/<\/no(script|embed|frames)/i),Y0=Kt(/\/>/i),pn={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},hg=["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"],j0=zt(at({},hg)),Z0=(function(){const e={};return Us(hg,t=>{e[t]=Kt(new RegExp("])","i"))}),zt(e)})(),X0=function(){return typeof window>"u"?null:window},Q0=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const a="data-tt-policy-suffix";n&&n.hasAttribute(a)&&(s=n.getAttribute(a));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Id=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},ps=function(t,n,s,a){return dn(t,n)&&ya(t[n])?at(a.base?gn(a.base):{},t[n],a.transform):s},nl=function(t,n,s){const a=dn(t,n)?t[n]:void 0;return a&&typeof a=="object"?gn(a):s()};function vg(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:X0();const t=de=>vg(de);if(t.version="3.4.15",t.removed=[],!e||!e.document||e.document.nodeType!==pn.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const s=n,a=s.currentScript;e.DocumentFragment;const i=e.HTMLTemplateElement,o=e.Node,r=e.Element,u=e.NodeFilter,l=e.NamedNodeMap;l===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const c=e.DOMParser,p=e.trustedTypes,g=r.prototype,b=Sn(g,"cloneNode"),_=Sn(g,"remove"),y=Sn(g,"removeAttributeNode"),D=Sn(g,"nextSibling"),R=Sn(g,"childNodes"),N=Sn(g,"parentNode"),S=Sn(g,"shadowRoot"),M=Sn(g,"attributes"),O=o&&o.prototype?Sn(o.prototype,"nodeType"):null,B=o&&o.prototype?Sn(o.prototype,"nodeName"):null,L=o&&o.prototype?Sn(o.prototype,"ownerDocument"):null,$=function(T){return O?O(T):T.nodeType},v=function(T){return B?B(T):T.nodeName};if(typeof i=="function"){const de=n.createElement("template");de.content&&de.content.ownerDocument&&(n=de.content.ownerDocument)}let E,x="",A,P=!1,z=0;const V=function(){if(z>0)throw Bs('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},Y=function(T){V(),z++;try{return E.createHTML(T)}finally{z--}},te=function(T){V(),z++;try{return E.createScriptURL(T)}finally{z--}},q=function(){return P||(A=Q0(p,a),P=!0),A},j=n,he=j.implementation,Oe=j.createNodeIterator,Pe=j.createDocumentFragment,nt=j.getElementsByTagName,He=s.importNode;let Be=Id();t.isSupported=typeof gg=="function"&&typeof N=="function"&&he&&he.createHTMLDocument!==void 0;const X=B0,ye=F0,De=U0,dt=G0,st=H0,Ie=z0,I=K0,U=V0;let Z=Nd,ee=null;const se=at({},[...Ed,...Qr,...Jr,...el,...Td]);let ne=null;const me=at({},[...Ad,...tl,...xd,...Bi]);let le=Object.seal(fa(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ue=null,oe=null;const Ce=Object.seal(fa(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ve=!0,xe=!0,Te=!1,Ne=!0,qe=!1,Ze=!0,et=!1,ut=!1,Ot=null,Ct=null,Jt=!1,Vt=!1,wt=!1,Rt=!1,Cn=!0,St=!1;const us="user-content-";let pe=!0,Dt=!1,Pt={},Se=null;const H=at({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let ie=null;const be=at({},["audio","video","img","source","image","track"]);let Ke=null;const Et=at({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),bt="http://www.w3.org/1998/Math/MathML",Re="http://www.w3.org/2000/svg",we="http://www.w3.org/1999/xhtml";let Ue=we,It=!1,Tt=null;const Ts=at({},[bt,Re,we],Xr),na=zt(["mi","mo","mn","ms","mtext"]);let As=at({},na);const Ei=zt(["annotation-xml"]);let xs=at({},Ei);const Fo=at({},["title","style","font","a","script"]);let Ns=null;const Uo=["application/xhtml+xml","text/html"],Ti="text/html";let _t=null,ds=null;const Go=n.createElement("form"),Ai=function(T){return T instanceof RegExp||T instanceof Function},_n=function(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(ds&&ds===T)return;(!T||typeof T!="object")&&(T={}),T=gn(T),Ns=Uo.indexOf(T.PARSER_MEDIA_TYPE)===-1?Ti:T.PARSER_MEDIA_TYPE,_t=Ns==="application/xhtml+xml"?Xr:Wa,ee=ps(T,"ALLOWED_TAGS",se,{transform:_t}),ne=ps(T,"ALLOWED_ATTR",me,{transform:_t}),Tt=ps(T,"ALLOWED_NAMESPACES",Ts,{transform:Xr}),Ke=ps(T,"ADD_URI_SAFE_ATTR",Et,{transform:_t,base:Et}),ie=ps(T,"ADD_DATA_URI_TAGS",be,{transform:_t,base:be}),Se=ps(T,"FORBID_CONTENTS",H,{transform:_t}),ue=ps(T,"FORBID_TAGS",gn({}),{transform:_t}),oe=ps(T,"FORBID_ATTR",gn({}),{transform:_t}),Pt=dn(T,"USE_PROFILES")?T.USE_PROFILES&&typeof T.USE_PROFILES=="object"?gn(T.USE_PROFILES):T.USE_PROFILES:!1,ve=T.ALLOW_ARIA_ATTR!==!1,xe=T.ALLOW_DATA_ATTR!==!1,Te=T.ALLOW_UNKNOWN_PROTOCOLS||!1,Ne=T.ALLOW_SELF_CLOSE_IN_ATTR!==!1,qe=T.SAFE_FOR_TEMPLATES||!1,Ze=T.SAFE_FOR_XML!==!1,et=T.WHOLE_DOCUMENT||!1,Vt=T.RETURN_DOM||!1,wt=T.RETURN_DOM_FRAGMENT||!1,Rt=T.RETURN_TRUSTED_TYPE||!1,Jt=T.FORCE_BODY||!1,Cn=T.SANITIZE_DOM!==!1,St=T.SANITIZE_NAMED_PROPS||!1,pe=T.KEEP_CONTENT!==!1,Dt=T.IN_PLACE||!1,Z=$0(T.ALLOWED_URI_REGEXP)?T.ALLOWED_URI_REGEXP:Nd,Ue=typeof T.NAMESPACE=="string"?T.NAMESPACE:we,As=nl(T,"MATHML_TEXT_INTEGRATION_POINTS",()=>at({},na)),xs=nl(T,"HTML_INTEGRATION_POINTS",()=>at({},Ei));const G=nl(T,"CUSTOM_ELEMENT_HANDLING",()=>fa(null));if(le=fa(null),dn(G,"tagNameCheck")&&Ai(G.tagNameCheck)&&(le.tagNameCheck=G.tagNameCheck),dn(G,"attributeNameCheck")&&Ai(G.attributeNameCheck)&&(le.attributeNameCheck=G.attributeNameCheck),dn(G,"allowCustomizedBuiltInElements")&&typeof G.allowCustomizedBuiltInElements=="boolean"&&(le.allowCustomizedBuiltInElements=G.allowCustomizedBuiltInElements),Kt(le),qe&&(xe=!1),wt&&(Vt=!0),Pt&&(ee=at({},Td),ne=fa(null),Pt.html===!0&&(at(ee,Ed),at(ne,Ad)),Pt.svg===!0&&(at(ee,Qr),at(ne,tl),at(ne,Bi)),Pt.svgFilters===!0&&(at(ee,Jr),at(ne,tl),at(ne,Bi)),Pt.mathMl===!0&&(at(ee,el),at(ne,xd),at(ne,Bi))),Ce.tagCheck=null,Ce.attributeCheck=null,dn(T,"ADD_TAGS")&&(typeof T.ADD_TAGS=="function"?Ce.tagCheck=T.ADD_TAGS:ya(T.ADD_TAGS)&&(ee===se&&(ee=gn(ee)),at(ee,T.ADD_TAGS,_t))),dn(T,"ADD_ATTR")&&(typeof T.ADD_ATTR=="function"?Ce.attributeCheck=T.ADD_ATTR:ya(T.ADD_ATTR)&&(ne===me&&(ne=gn(ne)),at(ne,T.ADD_ATTR,_t))),dn(T,"ADD_FORBID_CONTENTS")&&ya(T.ADD_FORBID_CONTENTS)&&(Se===H&&(Se=gn(Se)),at(Se,T.ADD_FORBID_CONTENTS,_t)),pe&&(ee["#text"]=!0),et&&at(ee,["html","head","body"]),ee.table&&(at(ee,["tbody"]),delete ue.tbody),T.TRUSTED_TYPES_POLICY){if(typeof T.TRUSTED_TYPES_POLICY.createHTML!="function")throw Bs('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof T.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Bs('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const J=E;E=T.TRUSTED_TYPES_POLICY;try{x=Y("")}catch(re){throw E=J,re}}else T.TRUSTED_TYPES_POLICY===null?(E=void 0,x=""):(E===void 0&&(E=q()),E&&typeof x=="string"&&(x=Y("")));zt&&zt(T),ds=T},Oa=at({},[...Qr,...Jr,...D0]),Ma=at({},[...el,...P0]),Ho=function(T,G,J){return G.namespaceURI===we?T==="svg":G.namespaceURI===bt?T==="svg"&&(J==="annotation-xml"||As[J]):!!Oa[T]},zo=function(T,G,J){return G.namespaceURI===we?T==="math":G.namespaceURI===Re?T==="math"&&xs[J]:!!Ma[T]},Ko=function(T,G,J){return G.namespaceURI===Re&&!xs[J]||G.namespaceURI===bt&&!As[J]?!1:!Ma[T]&&(Fo[T]||!Oa[T])},sa=function(T){let G=N(T);(!G||!G.tagName)&&(G={namespaceURI:Ue,tagName:"template"});const J=Wa(T.tagName),re=Wa(G.tagName);return Tt[T.namespaceURI]?T.namespaceURI===Re?Ho(J,G,re):T.namespaceURI===bt?zo(J,G,re):T.namespaceURI===we?Ko(J,G,re):!!(Ns==="application/xhtml+xml"&&Tt[T.namespaceURI]):!1},Ln=function(T){Ua(t.removed,{element:T});try{N(T).removeChild(T)}catch{if(_(T),!N(T))throw Bs("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},ge=function(T,G,J){try{y(T,G)}catch{try{T.removeAttribute(J)}catch{}}},Le=function(T){At(T);const G=R(T);if(G){const re=[];Us(G,Ee=>{Ua(re,Ee)}),Us(re,Ee=>{try{_(Ee)}catch{}})}const J=M(T);if(J)for(let re=J.length-1;re>=0;--re){const Ee=J[re],$e=Ee&&Ee.name;typeof $e=="string"&&ge(T,Ee,$e)}},je=function(T,G,J){if(!J)try{J=G.getAttributeNode(T)}catch{J=null}Ua(t.removed,{attribute:J||null,from:G});try{J?y(G,J):G.removeAttribute(T)}catch{try{G.removeAttribute(T)}catch{}}if(T==="is")if(Vt||wt)try{Ln(G)}catch{}else try{G.setAttribute(T,"")}catch{}},ft=function(T){const G=M(T);if(G)for(let J=G.length-1;J>=0;--J){const re=G[J],Ee=re&&re.name;typeof Ee!="string"||ne[_t(Ee)]||ge(T,re,Ee)}},At=function(T){const G=[T];for(;G.length>0;){const J=G.pop();$(J)===pn.element&&ft(J);const Ee=R(J);if(Ee)for(let $e=Ee.length-1;$e>=0;--$e)G.push(Ee[$e])}},ln=function(T,G){return Ze?T==="patchsrc"?!0:T==="for"&&G!=="label"&&G!=="output":!1},$n=function(T){if(!Ze)return;const G=[T];for(;G.length>0;){const J=G.pop(),re=$(J);if(re===pn.processingInstruction||re===pn.comment&&Yt(Rd,J.data)){try{_(J)}catch{}continue}if(re===pn.element){const $e=J,gt=_t(v(J));try{$e.hasAttribute&&$e.hasAttribute("patchsrc")&&$e.removeAttribute("patchsrc"),$e.hasAttribute&&$e.hasAttribute("for")&&ln("for",gt)&&$e.removeAttribute("for")}catch{}}const Ee=R(J);if(Ee)for(let $e=Ee.length-1;$e>=0;--$e)G.push(Ee[$e])}},Cs=function(T){let G=null,J=null;if(Jt)T=""+T;else{const $e=yd(T,/^[\r\n\t ]+/);J=$e&&$e[0]}Ns==="application/xhtml+xml"&&Ue===we&&(T=''+T+"");const re=E?Y(T):T;if(Ue===we)try{G=new c().parseFromString(re,Ns)}catch{}if(!G||!G.documentElement){G=he.createDocument(Ue,"template",null);try{G.documentElement.innerHTML=It?x:re}catch{}}const Ee=G.body||G.documentElement;return T&&J&&Ee.insertBefore(n.createTextNode(J),Ee.childNodes[0]||null),Ue===we?nt.call(G,et?"html":"body")[0]:et?G.documentElement:Ee},Wt=function(T){const G=L?L(T):T.ownerDocument;return Oe.call(G||T,T,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},en=function(T){return T=Ga(T,X," "),T=Ga(T,ye," "),T=Ga(T,De," "),T},aa=function(T){var G;T.normalize();const J=L?L(T):T.ownerDocument,re=Oe.call(J||T,T,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null);let Ee=re.nextNode();for(;Ee;)Ee.data=en(Ee.data),Ee=re.nextNode();const $e=(G=T.querySelectorAll)===null||G===void 0?void 0:G.call(T,"template");$e&&Us($e,gt=>{Yn(gt.content)&&aa(gt.content)})},Rs=function(T){const G=B?B(T):null;return typeof G!="string"||_t(G)!=="form"?!1:typeof T.nodeName!="string"||typeof T.textContent!="string"||typeof T.removeChild!="function"||T.attributes!==M(T)||typeof T.removeAttribute!="function"||typeof T.removeAttributeNode!="function"||typeof T.getAttributeNode!="function"||typeof T.setAttribute!="function"||typeof T.namespaceURI!="string"||typeof T.insertBefore!="function"||typeof T.hasChildNodes!="function"||T.nodeType!==O(T)||T.childNodes!==R(T)},Yn=function(T){if(!O||typeof T!="object"||T===null)return!1;try{return O(T)===pn.documentFragment}catch{return!1}},Is=function(T){if(!O||typeof T!="object"||T===null)return!1;try{return typeof O(T)=="number"}catch{return!1}};function yn(de,T,G){de.length!==0&&Us(de,J=>{J.call(t,T,G,ds)})}const qo=function(T,G){return!!(Ze&&T.hasChildNodes()&&!Is(T.firstElementChild)&&Yt(Cd,T.textContent)&&Yt(Cd,T.innerHTML)||Ze&&T.namespaceURI===we&&j0[G]&&(Is(T.firstElementChild)||typeof T.textContent=="string"&&Yt(Z0[G],T.textContent))||T.nodeType===pn.processingInstruction||Ze&&T.nodeType===pn.comment&&Yt(Rd,T.data))},ia=function(T,G){if(T instanceof RegExp)return Yt(T,G);if(T instanceof Function){for(var J=arguments.length,re=new Array(J>2?J-2:0),Ee=2;Ee=0;--gt){const kt=T===J?b(Ee[gt],!0):Ee[gt];re.insertBefore(kt,D(T))}}}return Ln(T),!0},La=function(T,G,J,re){return T.length===0?G:G===J||G===re?gn(G):G},fn=function(T,G){return T===G||N(T)!==null?!1:(Dt&&At(T),!0)},xi=function(T,G){if(yn(Be.beforeSanitizeElements,T,null),fn(T,G))return!0;if(Rs(T))return Ln(T),!0;const J=_t(v(T));if(ee=La(Be.uponSanitizeElement,ee,se,Ot),yn(Be.uponSanitizeElement,T,{tagName:J,allowedTags:ee}),fn(T,G))return!0;if(qo(T,J))return Ln(T),!0;if(ue[J]||!(Ce.tagCheck instanceof Function&&Ce.tagCheck(J))&&!ee[J]){const Ee=oa(T,J,G);return Ee===!1&&yn(Be.afterSanitizeElements,T,null),Ee}if($(T)===pn.element&&!sa(T)||(J==="noscript"||J==="noembed"||J==="noframes")&&Yt(W0,T.innerHTML))return Ln(T),!0;if(qe&&T.nodeType===pn.text){const Ee=en(T.textContent);T.textContent!==Ee&&(Ua(t.removed,{element:T.cloneNode()}),T.textContent=Ee)}return yn(Be.afterSanitizeElements,T,null),!1},ra=function(T,G,J){if(oe[G]||ln(G,T)||Cn&&(G==="id"||G==="name")&&(J in n||J in Go))return!1;const re=ne[G]||Ce.attributeCheck instanceof Function&&Ce.attributeCheck(G,T);return xe&&Yt(dt,G)||ve&&Yt(st,G)?!0:re?Ke[G]||Yt(Z,Ga(J,I,""))||(G==="src"||G==="xlink:href"||G==="href")&&T!=="script"&&kd(J,"data:")===0&&ie[T]||Te&&!Yt(Ie,Ga(J,I,""))?!0:!J:$a(T)&&ia(le.tagNameCheck,T)&&ia(le.attributeNameCheck,G,T)||G==="is"&&le.allowCustomizedBuiltInElements&&ia(le.tagNameCheck,J)},Ve=at({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),$a=function(T){return!Ve[Wa(T)]&&Yt(U,T)},Ht=function(T,G,J,re){if(E&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!J)switch(p.getAttributeType(T,G)){case"TrustedHTML":return Y(re);case"TrustedScriptURL":return te(re)}return re},pt=function(T,G,J,re){try{return J?T.setAttributeNS(J,G,re):T.setAttribute(G,re),Rs(T)?(Ln(T),!1):!0}catch{return je(G,T),!1}},Os=function(T){yn(Be.beforeSanitizeAttributes,T,null);const G=T.attributes;if(!G||Rs(T))return;ne=La(Be.uponSanitizeAttribute,ne,me,Ct);const J={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ne,forceKeepAttr:void 0};let re=G.length;const Ee=_t(T.nodeName);for(;re--;){const $e=G[re],gt=$e.name,kt=$e.namespaceURI,cn=$e.value,un=_t(gt),Vo=cn;let tn=gt==="value"?Vo:C0(Vo),kc=!1;if(J.attrName=un,J.attrValue=tn,J.keepAttr=!0,J.forceKeepAttr=void 0,yn(Be.uponSanitizeAttribute,T,J),tn=J.attrValue,St&&(un==="id"||un==="name")&&kd(tn,us)!==0&&(je(gt,T,$e),tn=us+tn,kc=!0),Ze&&Yt(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,tn)){je(gt,T,$e);continue}if(un==="attributename"&&yd(tn,"href")){je(gt,T,$e);continue}if(!J.forceKeepAttr){if(!J.keepAttr){je(gt,T,$e);continue}if(!Ne&&Yt(Y0,tn)){je(gt,T,$e);continue}if(qe&&(tn=en(tn)),!ra(Ee,un,tn)){je(gt,T,$e);continue}tn=Ht(Ee,un,kt,tn),tn!==Vo&&pt(T,gt,kt,tn)&&kc&&_d(t.removed)}}yn(Be.afterSanitizeAttributes,T,null)},kn=function(T){let G=null;const J=Wt(T);for(yn(Be.beforeSanitizeShadowDOM,T,null);G=J.nextNode();)if(yn(Be.uponSanitizeShadowNode,G,null),xi(G,T),Os(G),Yn(G.content)&&kn(G.content),$(G)===pn.element){const re=S(G);Yn(re)&&(Ms(re),kn(re))}yn(Be.afterSanitizeShadowDOM,T,null)},Ms=function(T){const G=[{node:T,shadow:null}];for(;G.length>0;){const J=G.pop();if(J.shadow){kn(J.shadow);continue}const re=J.node,$e=$(re)===pn.element,gt=R(re);if(gt)for(let kt=gt.length-1;kt>=0;--kt)G.push({node:gt[kt],shadow:null});if($e){const kt=B?B(re):null;if(typeof kt=="string"&&_t(kt)==="template"){const cn=re.content;Yn(cn)&&G.push({node:cn,shadow:null})}}if($e){const kt=S(re);Yn(kt)&&G.push({node:null,shadow:kt},{node:kt,shadow:null})}}};return t.sanitize=function(de){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},G=null,J=null,re=null,Ee=null;if(It=!de,It&&(de=""),typeof de!="string"&&!Is(de)&&(de=L0(de),typeof de!="string"))throw Bs("dirty is not a string, aborting");if(!t.isSupported)return de;ut?(ee=Ot,ne=Ct):_n(T),(Be.uponSanitizeElement.length>0||Be.uponSanitizeAttribute.length>0)&&(ee=gn(ee)),Be.uponSanitizeAttribute.length>0&&(ne=gn(ne)),t.removed=[];const $e=Dt&&typeof de!="string"&&Is(de);if($e){$n(de);const cn=v(de);if(typeof cn=="string"){const un=_t(cn);if(!ee[un]||ue[un])throw Le(de),Bs("root node is forbidden and cannot be sanitized in-place")}if(Rs(de))throw Le(de),Bs("root node is clobbered and cannot be sanitized in-place");try{Ms(de)}catch(un){throw Le(de),un}}else if(Is(de))G=Cs(""),J=G.ownerDocument.importNode(de,!0),J.nodeType===pn.element&&J.nodeName==="BODY"||J.nodeName==="HTML"?G=J:G.appendChild(J),Ms(G);else{if(!Vt&&!qe&&!et&&de.indexOf("<")===-1)return E&&Rt?Y(de):de;if(G=Cs(de),!G)return Vt?null:Rt?x:""}G&&Jt&&Ln(G.firstChild);const gt=$e?de:G;try{const cn=Wt(gt);for(;re=cn.nextNode();)xi(re,gt),Os(re),Yn(re.content)&&kn(re.content)}catch(cn){throw $e&&(Le(de),Us(t.removed,un=>{un.element&&At(un.element)})),cn}if($e)return Us(t.removed,cn=>{cn.element&&At(cn.element)}),qe&&aa(de),de;if(Vt){if(qe&&aa(G),wt)for(Ee=Pe.call(G.ownerDocument);G.firstChild;)Ee.appendChild(G.firstChild);else Ee=G;return(ne.shadowroot||ne.shadowrootmode)&&(Ee=He.call(s,Ee,!0)),Ee}let kt=et?G.outerHTML:G.innerHTML;return et&&ee["!doctype"]&&G.ownerDocument&&G.ownerDocument.doctype&&G.ownerDocument.doctype.name&&Yt(q0,G.ownerDocument.doctype.name)&&(kt=" -`+kt),qe&&(kt=en(kt)),E&&Rt?Y(kt):kt},t.setConfig=function(){let de=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_n(de),ut=!0,Ot=ee,Ct=ne},t.clearConfig=function(){ds=null,ut=!1,Ot=null,Ct=null,E=A,x=""},t.isValidAttribute=function(de,T,G){ds||_n({});const J=_t(de),re=_t(T);return ra(J,re,G)},t.addHook=function(de,T){typeof T=="function"&&dn(Be,de)&&Ua(Be[de],T)},t.removeHook=function(de,T){if(dn(Be,de)){if(T!==void 0){const G=x0(Be[de],T);return G===-1?void 0:N0(Be[de],G,1)[0]}return _d(Be[de])}},t.removeHooks=function(de){dn(Be,de)&&(Be[de]=[])},t.removeAllHooks=function(){Be=Id()},t}var bg=vg();function uc(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var ta=uc();function _g(e){ta=e}var ai={exec:()=>null};function ct(e,t=""){let n=typeof e=="string"?e:e.source;const s={replace:(a,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(on.caret,"$1"),n=n.replace(a,o),s},getRegex:()=>new RegExp(n,t)};return s}var on={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},J0=/^(?:[ \t]*(?:\n|$))+/,ex=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,tx=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Si=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,nx=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,dc=/(?:[*+-]|\d{1,9}[.)])/,yg=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,kg=ct(yg).replace(/bull/g,dc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),sx=ct(yg).replace(/bull/g,dc).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),fc=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ax=/^[^\n]+/,pc=/(?!\s*\])(?:\\.|[^\[\]\\])+/,ix=ct(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",pc).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ox=ct(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,dc).getRegex(),Po="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",gc=/|$))/,rx=ct("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",gc).replace("tag",Po).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),wg=ct(fc).replace("hr",Si).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex(),lx=ct(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",wg).getRegex(),mc={blockquote:lx,code:ex,def:ix,fences:tx,heading:nx,hr:Si,html:rx,lheading:kg,list:ox,newline:J0,paragraph:wg,table:ai,text:ax},Od=ct("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Si).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex(),cx={...mc,lheading:sx,table:Od,paragraph:ct(fc).replace("hr",Si).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Od).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Po).getRegex()},ux={...mc,html:ct(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",gc).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ai,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ct(fc).replace("hr",Si).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",kg).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},dx=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,fx=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Sg=/^( {2,}|\\)\n(?!\s*$)/,px=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Ag=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,bx=ct(Ag,"u").replace(/punct/g,Bo).getRegex(),_x=ct(Ag,"u").replace(/punct/g,Tg).getRegex(),xg="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",yx=ct(xg,"gu").replace(/notPunctSpace/g,Eg).replace(/punctSpace/g,hc).replace(/punct/g,Bo).getRegex(),kx=ct(xg,"gu").replace(/notPunctSpace/g,hx).replace(/punctSpace/g,mx).replace(/punct/g,Tg).getRegex(),wx=ct("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Eg).replace(/punctSpace/g,hc).replace(/punct/g,Bo).getRegex(),Sx=ct(/\\(punct)/,"gu").replace(/punct/g,Bo).getRegex(),Ex=ct(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Tx=ct(gc).replace("(?:-->|$)","-->").getRegex(),Ax=ct("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",Tx).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),uo=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,xx=ct(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",uo).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Ng=ct(/^!?\[(label)\]\[(ref)\]/).replace("label",uo).replace("ref",pc).getRegex(),Cg=ct(/^!?\[(ref)\](?:\[\])?/).replace("ref",pc).getRegex(),Nx=ct("reflink|nolink(?!\\()","g").replace("reflink",Ng).replace("nolink",Cg).getRegex(),vc={_backpedal:ai,anyPunctuation:Sx,autolink:Ex,blockSkip:vx,br:Sg,code:fx,del:ai,emStrongLDelim:bx,emStrongRDelimAst:yx,emStrongRDelimUnd:wx,escape:dx,link:xx,nolink:Cg,punctuation:gx,reflink:Ng,reflinkSearch:Nx,tag:Ax,text:px,url:ai},Cx={...vc,link:ct(/^!?\[(label)\]\((.*?)\)/).replace("label",uo).getRegex(),reflink:ct(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",uo).getRegex()},Ol={...vc,emStrongRDelimAst:kx,emStrongLDelim:_x,url:ct(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Md=e=>Ix[e];function Bn(e,t){if(t){if(on.escapeTest.test(e))return e.replace(on.escapeReplace,Md)}else if(on.escapeTestNoEncode.test(e))return e.replace(on.escapeReplaceNoEncode,Md);return e}function Ld(e){try{e=encodeURI(e).replace(on.percentDecode,"%")}catch{return null}return e}function $d(e,t){var i;const n=e.replace(on.findPipe,(o,r,u)=>{let l=!1,c=r;for(;--c>=0&&u[c]==="\\";)l=!l;return l?"|":" |"}),s=n.split(on.splitPipe);let a=0;if(s[0].trim()||s.shift(),s.length>0&&!((i=s.at(-1))!=null&&i.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length0?-2:-1}function Dd(e,t,n,s,a){const i=t.href,o=t.title||null,r=e[1].replace(a.other.outputLinkReplace,"$1");s.state.inLink=!0;const u={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:r,tokens:s.inlineTokens(r)};return s.state.inLink=!1,u}function Mx(e,t,n){const s=e.match(n.other.indentCodeCompensation);if(s===null)return t;const a=s[1];return t.split(` -`).map(i=>{const o=i.match(n.other.beginningSpace);if(o===null)return i;const[r]=o;return r.length>=a.length?i.slice(a.length):i}).join(` -`)}var fo=class{constructor(e){mt(this,"options");mt(this,"rules");mt(this,"lexer");this.options=e||ta}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:Ka(n,` -`)}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const n=t[0],s=Mx(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){const s=Ka(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:Ka(t[0],` -`)}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let n=Ka(t[0],` -`).split(` -`),s="",a="";const i=[];for(;n.length>0;){let o=!1;const r=[];let u;for(u=0;u1,a={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=this.rules.other.listItemRegex(n);let o=!1;for(;e;){let u=!1,l="",c="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let p=t[2].split(` -`,1)[0].replace(this.rules.other.listReplaceTabs,R=>" ".repeat(3*R.length)),g=e.split(` -`,1)[0],b=!p.trim(),_=0;if(this.options.pedantic?(_=2,c=p.trimStart()):b?_=t[1].length+1:(_=t[2].search(this.rules.other.nonSpaceChar),_=_>4?1:_,c=p.slice(_),_+=t[1].length),b&&this.rules.other.blankLine.test(g)&&(l+=g+` -`,e=e.substring(g.length+1),u=!0),!u){const R=this.rules.other.nextBulletRegex(_),N=this.rules.other.hrRegex(_),S=this.rules.other.fencesBeginRegex(_),M=this.rules.other.headingBeginRegex(_),O=this.rules.other.htmlBeginRegex(_);for(;e;){const B=e.split(` -`,1)[0];let L;if(g=B,this.options.pedantic?(g=g.replace(this.rules.other.listReplaceNesting," "),L=g):L=g.replace(this.rules.other.tabCharGlobal," "),S.test(g)||M.test(g)||O.test(g)||R.test(g)||N.test(g))break;if(L.search(this.rules.other.nonSpaceChar)>=_||!g.trim())c+=` -`+L.slice(_);else{if(b||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||S.test(p)||M.test(p)||N.test(p))break;c+=` -`+g}!b&&!g.trim()&&(b=!0),l+=B+` -`,e=e.substring(B.length+1),p=L.slice(_)}}a.loose||(o?a.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(o=!0));let y=null,D;this.options.gfm&&(y=this.rules.other.listIsTask.exec(c),y&&(D=y[0]!=="[ ] ",c=c.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:l,task:!!y,checked:D,loose:!1,text:c,tokens:[]}),a.raw+=l}const r=a.items.at(-1);if(r)r.raw=r.raw.trimEnd(),r.text=r.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let u=0;up.type==="space"),c=l.length>0&&l.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=c}if(a.loose)for(let u=0;u({text:u,tokens:this.lexer.inline(u),header:!1,align:i.align[l]})));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const n=t[1].charAt(t[1].length-1)===` -`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;const i=Ka(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{const i=Ox(t[2],"()");if(i===-2)return;if(i>-1){const r=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let s=t[2],a="";if(this.options.pedantic){const i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],a=i[3])}else a=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),Dd(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=t[s.toLowerCase()];if(!a){const i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return Dd(n,a,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||s[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const i=[...s[0]].length-1;let o,r,u=i,l=0;const c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!=null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(r=[...o].length,s[3]||s[4]){u+=r;continue}else if((s[5]||s[6])&&i%3&&!((i+r)%3)){l+=r;continue}if(u-=r,u>0)continue;r=Math.min(r,r+u+l);const p=[...s[0]][0].length,g=e.slice(0,i+s.index+p+r);if(Math.min(i,r)%2){const _=g.slice(1,-1);return{type:"em",raw:g,text:_,tokens:this.lexer.inlineTokens(_)}}const b=g.slice(2,-2);return{type:"strong",raw:g,text:b,tokens:this.lexer.inlineTokens(b)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," ");const s=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n;let t;if(t=this.rules.inline.url.exec(e)){let s,a;if(t[2]==="@")s=t[0],a="mailto:"+s;else{let i;do i=t[0],t[0]=((n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])??"";while(i!==t[0]);s=t[0],t[1]==="www."?a="http://"+t[0]:a=t[0]}return{type:"link",raw:t[0],text:s,href:a,tokens:[{type:"text",raw:s,text:s}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){const n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},ts=class Ml{constructor(t){mt(this,"tokens");mt(this,"options");mt(this,"state");mt(this,"tokenizer");mt(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||ta,this.options.tokenizer=this.options.tokenizer||new fo,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={other:on,block:Fi.normal,inline:za.normal};this.options.pedantic?(n.block=Fi.pedantic,n.inline=za.pedantic):this.options.gfm&&(n.block=Fi.gfm,this.options.breaks?n.inline=za.breaks:n.inline=za.gfm),this.tokenizer.rules=n}static get rules(){return{block:Fi,inline:za}}static lex(t,n){return new Ml(n).lex(t)}static lexInline(t,n){return new Ml(n).inlineTokens(t)}lex(t){t=t.replace(on.carriageReturn,` -`),this.blockTokens(t,this.tokens);for(let n=0;n(r=l.call({lexer:this},t,n))?(t=t.substring(r.raw.length),n.push(r),!0):!1))continue;if(r=this.tokenizer.space(t)){t=t.substring(r.raw.length);const l=n.at(-1);r.raw.length===1&&l!==void 0?l.raw+=` -`:n.push(r);continue}if(r=this.tokenizer.code(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="paragraph"||(l==null?void 0:l.type)==="text"?(l.raw+=` -`+r.raw,l.text+=` -`+r.text,this.inlineQueue.at(-1).src=l.text):n.push(r);continue}if(r=this.tokenizer.fences(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.heading(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.hr(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.blockquote(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.list(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.html(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.def(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="paragraph"||(l==null?void 0:l.type)==="text"?(l.raw+=` -`+r.raw,l.text+=` -`+r.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),n.push(r);continue}let u=t;if((o=this.options.extensions)!=null&&o.startBlock){let l=1/0;const c=t.slice(1);let p;this.options.extensions.startBlock.forEach(g=>{p=g.call({lexer:this},c),typeof p=="number"&&p>=0&&(l=Math.min(l,p))}),l<1/0&&l>=0&&(u=t.substring(0,l+1))}if(this.state.top&&(r=this.tokenizer.paragraph(u))){const l=n.at(-1);s&&(l==null?void 0:l.type)==="paragraph"?(l.raw+=` -`+r.raw,l.text+=` -`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(r),s=u.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length);const l=n.at(-1);(l==null?void 0:l.type)==="text"?(l.raw+=` -`+r.raw,l.text+=` -`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(r);continue}if(t){const l="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var r,u,l;let s=t,a=null;if(this.tokens.links){const c=Object.keys(this.tokens.links);if(c.length>0)for(;(a=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(a=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,a.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(a=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,o="";for(;t;){i||(o=""),i=!1;let c;if((u=(r=this.options.extensions)==null?void 0:r.inline)!=null&&u.some(g=>(c=g.call({lexer:this},t,n))?(t=t.substring(c.raw.length),n.push(c),!0):!1))continue;if(c=this.tokenizer.escape(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.tag(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.link(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(c.raw.length);const g=n.at(-1);c.type==="text"&&(g==null?void 0:g.type)==="text"?(g.raw+=c.raw,g.text+=c.text):n.push(c);continue}if(c=this.tokenizer.emStrong(t,s,o)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.codespan(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.br(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.del(t)){t=t.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.autolink(t)){t=t.substring(c.raw.length),n.push(c);continue}if(!this.state.inLink&&(c=this.tokenizer.url(t))){t=t.substring(c.raw.length),n.push(c);continue}let p=t;if((l=this.options.extensions)!=null&&l.startInline){let g=1/0;const b=t.slice(1);let _;this.options.extensions.startInline.forEach(y=>{_=y.call({lexer:this},b),typeof _=="number"&&_>=0&&(g=Math.min(g,_))}),g<1/0&&g>=0&&(p=t.substring(0,g+1))}if(c=this.tokenizer.inlineText(p)){t=t.substring(c.raw.length),c.raw.slice(-1)!=="_"&&(o=c.raw.slice(-1)),i=!0;const g=n.at(-1);(g==null?void 0:g.type)==="text"?(g.raw+=c.raw,g.text+=c.text):n.push(c);continue}if(t){const g="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(g);break}else throw new Error(g)}}return n}},po=class{constructor(e){mt(this,"options");mt(this,"parser");this.options=e||ta}space(e){return""}code({text:e,lang:t,escaped:n}){var i;const s=(i=(t||"").match(on.notSpaceStart))==null?void 0:i[0],a=e.replace(on.endingNewline,"")+` -`;return s?'
    '+(n?a:Bn(a,!0))+`
    -`:"
    "+(n?a:Bn(a,!0))+`
    -`}blockquote({tokens:e}){return`
    -${this.parser.parse(e)}
    -`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)} -`}hr(e){return`
    -`}list(e){const t=e.ordered,n=e.start;let s="";for(let o=0;o -`+s+" -`}listitem(e){var n;let t="";if(e.task){const s=this.checkbox({checked:!!e.checked});e.loose?((n=e.tokens[0])==null?void 0:n.type)==="paragraph"?(e.tokens[0].text=s+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=s+" "+Bn(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:s+" ",text:s+" ",escaped:!0}):t+=s+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • -`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

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

    An error occurred:

    "+Bn(n.message+"",!0)+"
    ";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},Js=new Lx;function ot(e,t){return Js.parse(e,t)}ot.options=ot.setOptions=function(e){return Js.setOptions(e),ot.defaults=Js.defaults,_g(ot.defaults),ot};ot.getDefaults=uc;ot.defaults=ta;ot.use=function(...e){return Js.use(...e),ot.defaults=Js.defaults,_g(ot.defaults),ot};ot.walkTokens=function(e,t){return Js.walkTokens(e,t)};ot.parseInline=Js.parseInline;ot.Parser=ns;ot.parser=ns.parse;ot.Renderer=po;ot.TextRenderer=bc;ot.Lexer=ts;ot.lexer=ts.lex;ot.Tokenizer=fo;ot.Hooks=Yi;ot.parse=ot;ot.options;ot.setOptions;ot.use;ot.walkTokens;ot.parseInline;ns.parse;ts.lex;ot.setOptions({breaks:!0,gfm:!0});function $x(e){if(e.tagName!=="A")return;const t=e.getAttribute("href");!t||t.startsWith("#")||(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))}bg.addHook("afterSanitizeAttributes",$x);const _c=new ot.Renderer;_c.code=function({text:e,lang:t}){const n=t&&Ta.getLanguage(t)?t:"plaintext",s=Ta.highlight(e,{language:n}).value;return`
    ${n}
    ${s}
    `};function Dx(e){const t=String(e??"").trim();return/^data:image\//i.test(t)||/^https?:\/\//i.test(t)||t.startsWith("/")&&!t.startsWith("//")?t:""}_c.image=function({href:e,title:t,text:n}){const s=Dx(e),a=String(n??"").replace(/"/g,""");return s?`
    ${a}`:``};ot.use({renderer:_c});function Px(e){const t=e.split(` -`),n=[],s=r=>r.trim().startsWith("|")&&r.includes("|",1),a=r=>/^:?-+:?$/.test(r.trim()),i=r=>r.split("|").slice(1,-1).length;let o=!1;for(let r=0;r!a(b));if(p){o||(o=!0,n.push(u));continue}s(l)&&(o||(g?r+1]*)?>/g,'
    ').replace(/<\/table>/g,"
    "),i=bg.sanitize(a);if(t.length>=Gx){gs.set(t,i);let o=t.length+i.length;for(;gs.size>1&&o>Ux;){const r=gs.keys().next().value;o-=r.length+gs.get(r).length,gs.delete(r)}}return i}function Hx(e){e==null||e.querySelectorAll(".copy-btn").forEach(t=>{t.onclick=()=>{var a;const n=decodeURIComponent(t.dataset.code??""),s=()=>{t.innerHTML='',setTimeout(()=>{t.innerHTML=''},1500)};if((a=navigator.clipboard)!=null&&a.writeText)navigator.clipboard.writeText(n).then(s);else{const i=document.createElement("textarea");i.value=n,i.style.cssText="position:fixed;opacity:0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i),s()}}})}const{open:zx}=Ca();function Kx(e){e==null||e.querySelectorAll("img.msg-md-image").forEach(t=>{t.addEventListener("error",()=>{var n;t.classList.add("is-broken"),(n=t.closest(".msg-md-image-link"))==null||n.classList.add("is-broken")})}),e==null||e.querySelectorAll("a.msg-md-image-link").forEach(t=>{t.addEventListener("click",n=>{if(t.classList.contains("is-broken"))return;n.preventDefault();const s=t.dataset.lightbox||t.getAttribute("href");s&&zx(s)})})}const qx={class:"tool-status-icon"},Vx={key:0,class:"spinner"},Wx={key:1,class:"ph ph-check-circle"},Yx={key:2,class:"ph ph-x-circle"},jx={class:"tool-name"},Zx={key:0,class:"tool-running-time"},Xx={class:"tool-card-body"},Qx={key:0,class:"tool-args"},Jx={class:"tool-section-label"},eN={class:"tool-section"},tN=["innerHTML"],nN={key:1,class:"tool-section tool-result-section"},sN={class:"tool-section-label"},aN=["innerHTML"],iN={__name:"SubagentStep",props:{tool:{type:Object,required:!0}},setup(e){function t(l){return typeof l!="string"?!1:[/#{1,6} /,/\*\*|__/,/`[^`]+`/,/```/,/^\s*[-*+]\s/m,/^\s*\d+\.\s/m,/\[[^\]]+\]\([^)]+\)/,/\|.*\|/,/^\s*>\s/m].some(p=>p.test(l))}const n=e,s=F(null);Ge(()=>n.tool.pending,(l,c)=>{s.value&&(l?_a(s.value,!0,{animate:c!==void 0}):c!==void 0&&_a(s.value,!1))},{immediate:!0});function a(l){return o(l)}function i(l){if(typeof l=="string"){try{const c=JSON.parse(l);return o(c)}catch{}return t(l)?Tn(l):u(l).split(` -`).map((c,p)=>`
    ${c||" "}
    `).join("")}return o(l)}function o(l){if(typeof l=="string")try{l=JSON.parse(l)}catch{return u(l)}if(l===null||typeof l!="object")return u(String(l));if(Array.isArray(l))return l.length===0?'[]':`
    ${l.map((b,_)=>`
    - ${_} - : - ${r(b)} -
    `).join("")}
    `;const c=Object.entries(l);return c.length===0?'{}':`
    ${c.map(([g,b])=>`
    - ${u(g)} - : - ${r(b)} -
    `).join("")}
    `}function r(l){if(l===null)return'null';if(typeof l=="boolean")return`${l}`;if(typeof l=="number")return`${l}`;if(typeof l=="string"){const p=u(l);return p.length<=200?`${p}`:`${p.slice(0,200)}…`}return Array.isArray(l)?`[${m("messages.jsonItems",{n:l.length})}]`:`{${m("messages.jsonKeys",{n:Object.keys(l).length})}}`}function u(l){return typeof l!="string"?String(l??""):l.replace(/&/g,"&").replace(//g,">")}return(l,c)=>(h(),w("details",{ref_key:"detailsEl",ref:s,class:Ae(["subagent-step",{"is-success":!e.tool.pending&&e.tool.success,"is-error":!e.tool.pending&&!e.tool.success}])},[f("summary",{onClick:c[0]||(c[0]=Bt((...p)=>d(Mt)&&d(Mt)(...p),["prevent"]))},[f("span",qx,[e.tool.pending?(h(),w("span",Vx)):e.tool.success?(h(),w("i",Wx)):(h(),w("i",Yx))]),f("span",jx,k(e.tool.name),1),e.tool.pending?(h(),w("span",Zx,k(d(m)("messages.running")),1)):K("",!0),c[2]||(c[2]=f("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),f("div",Xx,[e.tool.args?(h(),w("details",Qx,[f("summary",{onClick:c[1]||(c[1]=Bt((...p)=>d(Mt)&&d(Mt)(...p),["prevent"]))},[f("span",Jx,k(d(m)("messages.arguments")),1),c[3]||(c[3]=f("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),f("div",eN,[f("pre",{class:"tool-code",innerHTML:a(e.tool.args)},null,8,tN)])])):K("",!0),e.tool.result!=null?(h(),w("div",nN,[f("div",sN,k(d(m)("common.result")),1),f("div",{class:"tool-result",innerHTML:i(e.tool.result)},null,8,aN)])):K("",!0)])],2))}},oN={class:"tool-status-icon"},rN={key:0,class:"spinner"},lN={key:1,class:"ph ph-check-circle"},cN={key:2,class:"ph ph-x-circle"},uN={class:"tool-name"},dN={key:0,class:"tool-running-time"},fN={key:0,class:"tool-card-body"},pN={key:0,class:"tool-running-banner"},gN={key:1,class:"tool-args"},mN={class:"tool-section-label"},hN={class:"tool-section"},vN=["innerHTML"],bN={key:2,class:"tool-section tool-result-section"},_N={class:"tool-section-label"},yN=["innerHTML"],kN={key:3,class:"tool-section terminal-output-section"},wN={class:"tool-section-label"},SN={class:"terminal-output"},EN={key:4,class:"subagent-planning-indicator"},TN={class:"planning-label"},AN={key:5,class:"subagent-steps"},xN={key:1,class:"plan-card",open:""},NN=["innerHTML"],CN={class:"task-step-tool"},RN={class:"task-step-status"},IN={key:0,class:"task-step-preview"},ON={__name:"ToolCard",props:{tool:{type:Object,required:!0},defaultOpen:{type:Boolean,default:!1}},setup(e){function t(A){return typeof A!="string"?!1:[/#{1,6} /,/\*\*|__/,/`[^`]+`/,/```/,/^\s*[-*+]\s/m,/^\s*\d+\.\s/m,/\[[^\]]+\]\([^)]+\)/,/\|.*\|/,/^\s*>\s/m].some(z=>z.test(A))}const n=e,s=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]),a={filesystem:["diff","edit_lines","smart_edit"],filesystem_read:["diff"],filesystem_write:["edit_lines","insert"],file_ai:["edit"]};function i(A){return A==="running"?"ph ph-circle-notch task-spin":A==="completed"?"ph ph-check-circle":A==="cancelled"?"ph ph-prohibit":"ph ph-x-circle"}const o=F(null),r=F(n.defaultOpen||!!n.tool.pending),u=F(Date.now());let l=null;function c(A){r.value=!0,Mt(A)}function p(A){A.target===o.value&&A.target.open&&(r.value=!0)}$t(()=>{o.value&&(n.defaultOpen||n.tool.pending)&&_a(o.value,!0,{animate:!1})}),Ge(()=>n.tool.pending,(A,P)=>{o.value&&(A?(r.value=!0,_a(o.value,!0,{animate:P!==void 0})):P!==void 0&&_a(o.value,!1))},{immediate:!0}),Ge(()=>n.tool.pending,A=>{A?_():y()},{immediate:!0}),bn(y);const g=W(()=>{var z;const A=(z=n.tool.args)==null?void 0:z.action,P=s.has(n.tool.name)&&A?`${n.tool.name} ${A}`:n.tool.name;return m("messages.runningTool",{tool:P})}),b=W(()=>{if(!n.tool.startedAt)return"";const A=Math.max(0,Math.floor((u.value-n.tool.startedAt)/1e3));return A<1?m("messages.starting"):`${A}s`});function _(){l||(u.value=Date.now(),l=setInterval(()=>{u.value=Date.now()},1e3))}function y(){l&&(clearInterval(l),l=null)}function D(A){return v(A)}function R(A,P){var z,V;if(typeof A=="string"){try{const te=JSON.parse(A);return v(te)}catch{}const Y=(z=P==null?void 0:P.args)==null?void 0:z.action;return P&&(a[P.name]||[]).includes(Y)?S(A):P&&["filesystem","filesystem_read"].includes(P.name)&&Y==="read"?$(A):P&&["filesystem","filesystem_write"].includes(P.name)&&["edit","write"].includes(Y)&&((V=P.metadata)!=null&&V.diff)?N(A,P.metadata.diff):t(A)?Tn(A):x(A).split(` -`).map((te,q)=>`
    ${te||" "}
    `).join("")}return v(A)}function N(A,P){const z=String(A).split(` -`).map(V=>`
    ${x(V)||" "}
    `);z.push('
     
    ');for(const V of String(P).split(` -`))z.push(O(V));return z.join("")}function S(A){let P="",z=A;const V=A.indexOf(` - -`);if(V!==-1){const te=A.slice(V+2);(te.includes("@@")||/^[ +\-]/m.test(te))&&(P=A.slice(0,V),z=te)}const Y=[];P&&Y.push(`
    ${x(P)||" "}
    `);for(const te of z.split(` -`))Y.push(O(te));return Y.join("")}const M=/^([ +\-])( +)(\d+)│ ?(.*)$/;function O(A){const P=M.exec(A);if(P){const V=P[1],Y=V==="+"?"diff-add":V==="-"?"diff-del":"diff-ctx",te=`${P[2]}${P[3]} ${V} `,q=P[4];return`
    ${x(te)}${x(q)||" "}
    `}return`
    ${x(A)||" "}
    `}function B(A){return A.startsWith("@@")?"diff-hunk":A.startsWith("+")?"diff-add":A.startsWith("-")?"diff-del":"diff-ctx"}const L=/^(\s*)(\d+): (.*)$/;function $(A){const P=A.split(` -`),z=[];let V=0;if(P.length&&P[0].startsWith("[")){const Y=P[0],te=Y.replace(/^\[/,"").replace(/\]$/,""),q=te.indexOf(" | ");if(q!==-1){const j=te.slice(0,q),he=te.slice(q+5);z.push(`
    ${x(j)} | ${x(he)}
    `)}else z.push(`
    ${x(Y)||" "}
    `);V=1}for(V${x(P[V])||" "}`),V+=1);V ');continue}const te=L.exec(Y);te?z.push(`
    ${x(te[1]+te[2])}: ${x(te[3])}
    `):z.push(`
    ${x(Y)}
    `)}return z.join("")}function v(A){if(typeof A=="string")try{A=JSON.parse(A)}catch{return x(A)}if(A===null||typeof A!="object")return x(String(A));if(Array.isArray(A))return A.length===0?'[]':`
    ${A.map((Y,te)=>`
    - ${te} - : - ${E(Y)} -
    `).join("")}
    `;const P=Object.entries(A);return P.length===0?'{}':`
    ${P.map(([V,Y])=>`
    - ${x(V)} - : - ${E(Y)} -
    `).join("")}
    `}function E(A){if(A===null)return'null';if(typeof A=="boolean")return`${A}`;if(typeof A=="number")return`${A}`;if(typeof A=="string"){const z=x(A);return z.length<=200?`${z}`:`${z.slice(0,200)}…`}return Array.isArray(A)?`[${m("messages.jsonItems",{n:A.length})}]`:`{${m("messages.jsonKeys",{n:Object.keys(A).length})}}`}function x(A){return typeof A!="string"?String(A??""):A.replace(/&/g,"&").replace(//g,">")}return(A,P)=>{var z;return h(),w("details",{ref_key:"detailsEl",ref:o,class:Ae(["tool-card",{"is-success":!e.tool.pending&&e.tool.success,"is-error":!e.tool.pending&&!e.tool.success}]),onToggle:p},[f("summary",{onClick:Bt(c,["prevent"])},[f("span",oN,[e.tool.pending?(h(),w("span",rN)):e.tool.success?(h(),w("i",lN)):(h(),w("i",cN))]),f("span",uN,k(e.tool.name),1),e.tool.pending?(h(),w("span",dN,k(b.value),1)):K("",!0),P[2]||(P[2]=f("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),r.value?(h(),w("div",fN,[e.tool.pending&&e.tool.name!=="spawn_agent"?(h(),w("div",pN,[P[3]||(P[3]=f("span",{class:"spinner"},null,-1)),f("span",null,k(g.value),1)])):K("",!0),e.tool.args?(h(),w("details",gN,[f("summary",{onClick:P[0]||(P[0]=Bt((...V)=>d(Mt)&&d(Mt)(...V),["prevent"]))},[f("span",mN,k(d(m)("messages.arguments")),1),P[4]||(P[4]=f("i",{class:"ph ph-caret-down tool-chevron"},null,-1))]),f("div",hN,[f("pre",{class:"tool-code",innerHTML:D(e.tool.args)},null,8,vN)])])):K("",!0),e.tool.result!=null?(h(),w("div",bN,[f("div",_N,k(d(m)("common.result")),1),f("div",{class:"tool-result",innerHTML:R(e.tool.result,e.tool)},null,8,yN)])):K("",!0),e.tool.name==="terminal"&&e.tool.terminalOutput?(h(),w("div",kN,[f("div",wN,k(d(m)("common.liveOutput")),1),f("pre",SN,k(e.tool.terminalOutput),1)])):K("",!0),e.tool.planningLabel!=null?(h(),w("div",EN,[f("span",TN,k(e.tool.planningLabel),1)])):K("",!0),(z=e.tool.steps)!=null&&z.length?(h(),w("div",AN,[(h(!0),w(ce,null,Je(e.tool.steps,(V,Y)=>(h(),w(ce,{key:Y},[V.kind==="turn_thinking"?(h(),ke(Cl,{key:0,msg:V},null,8,["msg"])):V.kind==="plan"?(h(),w("details",xN,[f("summary",{onClick:P[1]||(P[1]=Bt((...te)=>d(Mt)&&d(Mt)(...te),["prevent"]))},[P[5]||(P[5]=f("i",{class:"ph ph-map-trifold"},null,-1)),ae(" "+k(d(m)("messages.plan"))+" ",1),P[6]||(P[6]=f("i",{class:"ph ph-caret-down plan-chevron"},null,-1))]),f("div",{class:"plan-body",innerHTML:d(Tn)(V.text)},null,8,NN)])):V.kind==="task_update"?(h(),w("div",{key:2,class:Ae(["task-update-step",V.status])},[f("i",{class:Ae(i(V.status))},null,2),f("span",CN,k(V.tool),1),f("span",RN,k(V.status),1),V.preview?(h(),w("span",IN,k(V.preview),1)):K("",!0)],2)):(h(),ke(iN,{key:3,tool:V},null,8,["tool"]))],64))),128))])):K("",!0)])):K("",!0)],34)}}},MN=["open"],LN={class:"content-title"},$N=["href","title"],DN=["href","title"],PN=["title"],BN=["title"],FN=["title"],UN={key:0,class:"content-body"},GN={key:0,class:"content-source"},HN={key:0,class:"content-source-state"},zN={key:1,class:"content-source-error"},KN={key:2,class:"content-source-code"},qN=["innerHTML"],VN=["src"],WN=["src"],YN=["src"],jN=["src"],ZN={key:5,class:"content-image-wrap"},XN=["src","alt"],QN={key:0,class:"content-image-skeleton"},JN=["src"],eC={key:7,class:"content-audio-wrap"},tC={key:8,class:"content-text"},nC={key:0,class:"content-source-state"},sC={key:1,class:"content-source-error"},aC={class:"content-source-code"},iC=["innerHTML"],oC={key:0,class:"content-text-note"},rC={key:9,class:"content-unknown"},lC={class:"unknown-name"},cC=["href"],uC=["open"],dC={class:"tool-card-body"},fC={class:"tool-section"},pC={class:"tool-section-label"},gC={class:"tool-code"},mC={class:"tool-section"},hC={class:"tool-section-label"},vC={class:"tool-code"},sl=1e6,bC={__name:"ContentCard",props:{tool:{type:Object,required:!0},defaultOpen:{type:Boolean,default:!1},collapseToken:{type:String,default:""}},setup(e){const t=e,n=F(null),s=F(t.defaultOpen),a=F(t.defaultOpen),i=F(!1),o=F(!1),r=F(""),u=F(!1),l=F(""),c=F(!1),p=F(""),g=F(!1),b=F(""),_=F(!1),{open:y,openContent:D}=Ca(),R=W(()=>`${Math.round(sl/1024)} KB`);Ge(()=>[t.defaultOpen,t.collapseToken],([I])=>{s.value=I,I&&(a.value=!0)});const N=W(()=>t.tool.success===!1?!0:!t.tool.metadata||!t.tool.metadata.url?!String(t.tool.result??"").match(/URL: (.+)/):!1),S=W(()=>{if(t.tool.metadata)return t.tool.metadata;const I=String(t.tool.result??""),U=I.match(/URL: (.+)/);if(U){const Z=I.match(/Published: .+ \(([^)]+)\)/),ee=I.match(/Published: (.+) \(/);return{url:U[1].trim(),content_type:Z?Z[1].trim():"unknown",title:ee?ee[1].trim():m("messages.untitledContent")}}return{}}),M=W(()=>S.value.url||""),O=W(()=>Ws(M.value));Ge(()=>O.value,()=>{c.value=!1});const B=W(()=>S.value.content_type||"unknown"),L=W(()=>S.value.title||S.value.filename||m("messages.untitledContent")),$=W(()=>Zp(B.value)||jp(S.value.filename||M.value)),v=W(()=>["stl","model"].includes($.value)),E=W(()=>vi[$.value]||vi.unknown),x=W(()=>Jy[$.value]||"primary"),A=W(()=>`is-${$.value}`),P=W(()=>Xp($.value)),z=W(()=>{const I=$.value;return Al(I)?nt(lc(I)):Ys(O.value)}),V=W(()=>v.value?z.value:Ys(O.value)),Y=W(()=>["html","svg"].includes($.value)?O.value:v.value&&S.value.source_url?Ws(S.value.source_url):""),te=W(()=>!!Y.value),q=W(()=>cc({...S.value,content_type:$.value,filename:S.value.source_filename||S.value.filename||M.value})),j=W(()=>bi(r.value,q.value)),he=W(()=>bi(p.value,q.value)),Oe=W(()=>i.value?"ph ph-check":"ph ph-copy"),Pe=W(()=>{const I=Ws(S.value.download_url||M.value);return S.value.download_url||!I?I:`${I}${I.includes("?")?"&":"?"}download=1`});function nt(I){return rc(I,O.value)}function He(){$.value==="image"&&y(O.value)}function Be(){P.value&&D({url:Ys(O.value),type:$.value,title:L.value})}async function X(){if(!(!O.value||g.value||p.value)){g.value=!0,b.value="";try{const I=await fetch(O.value);if(!I.ok)throw new Error(`HTTP ${I.status}`);const U=await I.text();_.value=U.length>sl,p.value=_.value?U.slice(0,sl):U}catch(I){b.value=m("artifacts.sourceFailed",{error:(I==null?void 0:I.message)||I})}finally{g.value=!1}}}Ge([s,$],([I,U])=>{I&&U==="text"&&X()},{immediate:!0}),Ge(O,()=>{p.value="",b.value="",_.value=!1});function ye(I){s.value=I.currentTarget.open,s.value&&(a.value=!0)}async function De(){o.value=!o.value,o.value&&await dt()}async function dt(){if(!(!Y.value||r.value||u.value)){u.value=!0,l.value="";try{const I=await fetch(Y.value);if(!I.ok)throw new Error(`HTTP ${I.status}`);r.value=await I.text()}catch(I){l.value=m("artifacts.sourceFailed",{error:(I==null?void 0:I.message)||I})}finally{u.value=!1}}}async function st(){try{await navigator.clipboard.writeText(V.value),i.value=!0,setTimeout(()=>{i.value=!1},1500)}catch{}}function Ie(I){if(typeof I=="string")try{return JSON.stringify(JSON.parse(I),null,2)}catch{return I}return JSON.stringify(I,null,2)}return(I,U)=>{const Z=Qe("GnBadge");return N.value?(h(),w("details",{key:1,ref_key:"detailsEl",ref:n,class:"tool-card is-error",open:s.value,onToggle:ye},[f("summary",{onClick:U[3]||(U[3]=Bt((...ee)=>d(Mt)&&d(Mt)(...ee),["prevent"]))},[...U[11]||(U[11]=[Th('📎content_publish',4)])]),f("div",dC,[f("div",fC,[f("div",pC,k(d(m)("messages.arguments")),1),f("pre",gC,k(Ie(e.tool.args)),1)]),f("div",mC,[f("div",hC,k(d(m)("common.result")),1),f("pre",vC,k(e.tool.result),1)])])],40,uC)):(h(),w("details",{key:0,ref_key:"detailsEl",ref:n,class:Ae(["content-card",A.value]),open:s.value,onToggle:ye},[f("summary",{onClick:U[1]||(U[1]=Bt((...ee)=>d(Mt)&&d(Mt)(...ee),["prevent"]))},[f("i",{class:Ae(["content-icon",E.value])},null,2),f("span",LN,k(L.value),1),Q(Z,{variant:x.value},{default:fe(()=>[ae(k(B.value),1)]),_:1},8,["variant"]),f("span",{class:"content-actions",onClick:U[0]||(U[0]=Bt(()=>{},["stop"]))},[f("a",{href:z.value,target:"_blank",rel:"noopener noreferrer",title:d(m)("artifacts.openPreview"),class:"btn-icon btn-icon-sm"},[...U[4]||(U[4]=[f("i",{class:"ph ph-arrow-square-out"},null,-1)])],8,$N),f("a",{href:Pe.value,target:"_blank",rel:"noopener noreferrer",title:d(m)("common.download"),class:"btn-icon btn-icon-sm"},[...U[5]||(U[5]=[f("i",{class:"ph ph-download-simple"},null,-1)])],8,DN),P.value?(h(),w("button",{key:0,type:"button",class:"btn-icon btn-icon-sm",title:d(m)("artifacts.openFullscreen"),onClick:Be},[...U[6]||(U[6]=[f("i",{class:"ph ph-arrows-out"},null,-1)])],8,PN)):K("",!0),te.value?(h(),w("button",{key:1,type:"button",class:"btn-icon btn-icon-sm",title:d(m)(o.value?"artifacts.showPreview":"artifacts.showSource"),onClick:De},[f("i",{class:Ae(o.value?"ph ph-eye":"ph ph-code")},null,2)],8,BN)):K("",!0),f("button",{type:"button",title:d(m)("artifacts.copyFileLink"),class:"btn-icon btn-icon-sm",onClick:st},[f("i",{class:Ae(Oe.value)},null,2)],8,FN)]),U[7]||(U[7]=f("i",{class:"ph ph-caret-down content-chevron"},null,-1))]),a.value?(h(),w("div",UN,[o.value?(h(),w("div",GN,[u.value?(h(),w("div",HN,[U[8]||(U[8]=f("span",{class:"spinner"},null,-1)),f("span",null,k(d(m)("artifacts.loadingSource")),1)])):l.value?(h(),w("pre",zN,k(l.value),1)):(h(),w("pre",KN,[f("code",{class:Ae(["hljs",`language-${q.value}`]),innerHTML:j.value},null,10,qN)]))])):v.value?(h(),w("iframe",{key:1,src:nt("model"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,VN)):$.value==="html"?(h(),w("iframe",{key:2,src:nt("html"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,WN)):$.value==="svg"?(h(),w("iframe",{key:3,src:nt("svg"),class:"content-iframe",sandbox:"allow-scripts allow-same-origin",loading:"lazy"},null,8,YN)):$.value==="pdf"?(h(),w("iframe",{key:4,src:nt("pdf"),class:"content-iframe",loading:"lazy"},null,8,jN)):$.value==="image"?(h(),w("div",ZN,[f("img",{src:O.value,class:"content-image",alt:L.value,loading:"lazy",onLoad:U[2]||(U[2]=ee=>c.value=!0),onClick:He},null,40,XN),c.value?K("",!0):(h(),w("div",QN,[...U[9]||(U[9]=[f("i",{class:"ph ph-spinner ph-spin content-image-spinner"},null,-1)])]))])):$.value==="video"?(h(),w("video",{key:6,src:O.value,class:"content-video",controls:"",playsinline:""},null,8,JN)):$.value==="audio"?(h(),w("div",eC,[Q(oc,{src:O.value,title:L.value,compact:""},null,8,["src","title"])])):$.value==="text"?(h(),w("div",tC,[g.value?(h(),w("div",nC,[U[10]||(U[10]=f("span",{class:"spinner"},null,-1)),f("span",null,k(d(m)("artifacts.loadingPreview")),1)])):b.value?(h(),w("pre",sC,k(b.value),1)):(h(),w(ce,{key:2},[f("pre",aC,[f("code",{class:Ae(["hljs",`language-${q.value}`]),innerHTML:he.value},null,10,iC)]),_.value?(h(),w("div",oC,k(d(m)("artifacts.textPreviewLimited",{size:R.value})),1)):K("",!0)],64))])):(h(),w("div",rC,[f("i",{class:Ae(["unknown-icon",E.value])},null,2),f("div",lC,k(L.value),1),f("a",{href:O.value,target:"_blank",rel:"noopener noreferrer",class:"btn btn-small btn-secondary unknown-open"},k(d(m)("messages.openFile")),9,cC)]))])):K("",!0)],42,MN))}}},_C=We(bC,[["__scopeId","data-v-06477ddd"]]),yC={class:"card-grid"},kC={key:0,class:"card-grid-title"},wC={class:"card-grid-items"},SC=["onClick","onKeydown"],EC=["src"],TC={key:1,class:"card-no-image"},AC={class:"card-content"},xC={class:"card-title"},NC={key:0,class:"card-subtitle"},CC={key:1,class:"card-meta"},RC={class:"card-meta-label"},IC={class:"card-meta-value"},OC={key:2,class:"card-description"},MC={key:1,class:"card-grid-more"},LC={class:"card-grid-more-text"},$C={class:"card-modal-title"},DC={key:0,class:"card-modal"},PC=["src"],BC={class:"card-modal-content"},FC={key:0,class:"card-modal-subtitle"},UC={key:1,class:"card-modal-section"},GC={class:"card-modal-section-title"},HC={class:"card-modal-meta-grid"},zC={class:"card-modal-meta-label"},KC={class:"card-modal-meta-value"},qC={key:2,class:"card-modal-section"},VC={class:"card-modal-section-title"},WC={class:"card-modal-text"},YC={key:3,class:"card-modal-section"},jC={class:"card-modal-section-title"},ZC={class:"card-modal-details"},XC={key:4,class:"card-modal-actions"},QC=["href"],al=4,JC={__name:"CardGrid",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n=F(null),s=W(()=>Array.isArray(t.data.cards)?t.data.cards:[]),a=W(()=>s.value.slice(0,al)),i=W(()=>s.value.length>al),o=W(()=>s.value.length-al);Lm(()=>{var l;Array.isArray((l=t.data)==null?void 0:l.cards)||console.warn('[CardGrid] payload is missing a "cards" array',t.data)});function r(l){n.value=l}function u(){n.value=null}return(l,c)=>{const p=Qe("GnModal");return h(),w("div",yC,[e.data.title?(h(),w("div",kC,k(e.data.title),1)):K("",!0),f("div",wC,[(h(!0),w(ce,null,Je(a.value,g=>{var b,_;return h(),w("div",{key:g.id,class:"card-grid-item",tabindex:"0",onClick:y=>r(g),onKeydown:Wn(y=>r(g),["enter"])},[(b=g.image)!=null&&b.trim()?(h(),w("img",{key:0,src:g.image,class:"card-image",alt:"",loading:"lazy"},null,8,EC)):(h(),w("div",TC,[...c[0]||(c[0]=[f("i",{class:"ph ph-image"},null,-1)])])),f("div",AC,[f("div",xC,k(g.title),1),g.subtitle?(h(),w("div",NC,k(g.subtitle),1)):K("",!0),(_=g.meta)!=null&&_.length?(h(),w("div",CC,[(h(!0),w(ce,null,Je(g.meta,(y,D)=>(h(),w("span",{key:D,class:"card-meta-item"},[f("span",RC,k(y.label),1),f("span",IC,k(y.value),1)]))),128))])):K("",!0),g.description?(h(),w("div",OC,k(g.description),1)):K("",!0)])],40,SC)}),128))]),i.value?(h(),w("div",MC,[f("span",LC,k(d(m)("ui.moreCards",{n:o.value})),1)])):K("",!0),Q(p,{open:!!n.value,"onUpdate:open":u},{title:fe(()=>{var g;return[f("h2",$C,k((g=n.value)==null?void 0:g.title),1)]}),default:fe(()=>{var g,b,_,y;return[n.value?(h(),w("div",DC,[(g=n.value.image)!=null&&g.trim()?(h(),w("img",{key:0,src:n.value.image,class:"card-modal-image",alt:""},null,8,PC)):K("",!0),f("div",BC,[n.value.subtitle?(h(),w("div",FC,k(n.value.subtitle),1)):K("",!0),(b=n.value.meta)!=null&&b.length?(h(),w("div",UC,[f("div",GC,k(d(m)("ui.overview")),1),f("div",HC,[(h(!0),w(ce,null,Je(n.value.meta,(D,R)=>(h(),w("div",{key:R,class:"card-modal-meta-cell"},[f("div",zC,k(D.label),1),f("div",KC,k(D.value),1)]))),128))])])):K("",!0),n.value.description?(h(),w("div",qC,[f("div",VC,k(d(m)("ui.description")),1),f("p",WC,k(n.value.description),1)])):K("",!0),(_=n.value.details)!=null&&_.length?(h(),w("div",YC,[f("div",jC,k(d(m)("ui.details")),1),f("dl",ZC,[(h(!0),w(ce,null,Je(n.value.details,(D,R)=>(h(),w("div",{key:R,class:"card-modal-detail-row"},[f("dt",null,k(D.label),1),f("dd",null,k(D.value),1)]))),128))])])):K("",!0),(y=n.value.actions)!=null&&y.length?(h(),w("div",XC,[(h(!0),w(ce,null,Je(n.value.actions,(D,R)=>(h(),w("a",{key:R,href:D.url,target:"_blank",rel:"noopener noreferrer",class:"card-modal-action"},k(D.label),9,QC))),128))])):K("",!0)])])):K("",!0)]}),_:1},8,["open"])])}}},e1=We(JC,[["__scopeId","data-v-9c3e6ea0"]]),t1=Object.freeze(Object.defineProperty({__proto__:null,default:e1},Symbol.toStringTag,{value:"Module"})),n1={class:"ui-form"},s1={key:0,class:"ui-form-submitted"},a1={key:0,class:"ui-form-title"},i1={class:"ui-form-submitted-note"},o1={class:"ui-form-summary"},r1={key:1,class:"ui-form-body"},l1={key:0,class:"ui-form-title"},c1={key:1,class:"ui-form-description"},u1=["for"],d1={key:0,class:"ui-form-required"},f1={key:0,class:"ui-form-field-hint"},p1=["id","onUpdate:modelValue","placeholder","required","minlength","maxlength","onBlur","onInput"],g1=["id","onUpdate:modelValue","required","onBlur","onChange"],m1={key:0,value:""},h1=["value"],v1=["id","onUpdate:modelValue","required","onBlur","onChange"],b1=["value"],_1={key:4,class:"ui-form-checkbox"},y1=["id","onUpdate:modelValue","onChange"],k1=["id","onUpdate:modelValue","type","placeholder","required","min","max","minlength","maxlength","pattern","onBlur","onInput"],w1={key:6,class:"ui-form-error"},S1=["disabled"],E1={key:0,class:"ui-form-spinner"},T1={key:0,class:"ui-form-error"},A1={__name:"Form",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n=Gt(),s=js({}),a=F(new Set),i=js({}),o=F(!1),r=F(!1),u=F(""),l=W(()=>{var v;return((v=t.data)==null?void 0:v.form_id)||""}),c=W(()=>{var v;return Array.isArray((v=t.data)==null?void 0:v.fields)?t.data.fields:[]}),p=W(()=>`navi_submitted_forms:${n.currentId||"unknown"}`);function g(v){return`form-${l.value}-${v}`}function b(v){return v==="email"||v==="url"||v==="date"||v==="number"?v:"text"}function _(v,E){var x;if(v==null||v==="")return"—";if(E.type==="checkbox")return m(v?"common.yes":"common.no");if(E.type==="select"||E.type==="multiselect"){const A=Array.isArray(E.options)?E.options:[];return Array.isArray(v)?v.map(z=>{var V;return((V=A.find(Y=>Y.value===z))==null?void 0:V.label)||z}).join(", ")||"—":((x=A.find(P=>P.value===v))==null?void 0:x.label)||v}return Array.isArray(v)?v.join(", "):String(v)}function y(v){return v==null||v===""||Array.isArray(v)&&v.length===0}function D(v){const E=v.name,x=s[E];if(delete i[E],v.required&&y(x)){i[E]=m("ui.fieldRequired",{field:v.label});return}if(!y(x)){if(v.type==="email"&&(/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(x))||(i[E]=m("ui.invalidEmail"))),v.type==="url")try{const A=new URL(x);if(A.protocol!=="http:"&&A.protocol!=="https:")throw new Error("bad protocol")}catch{i[E]=m("ui.invalidUrl")}if(v.type==="number"){const A=Number(x);Number.isNaN(A)?i[E]=m("ui.notANumber"):(v.min!==void 0&&v.min!==null&&Av.max&&(i[E]=m("ui.maxValue",{n:v.max})))}if(v.minLength!==void 0&&v.minLength!==null&&String(x).lengthv.maxLength&&(i[E]=m("ui.maxLength",{n:v.maxLength})),v.pattern)try{new RegExp(v.pattern).test(String(x))||(i[E]=m("ui.invalidFormat"))}catch{}}}function R(v){a.value.add(v);const E=c.value.find(x=>x.name===v);E&&D(E)}function N(){for(const v of c.value)D(v)}const S=W(()=>(N(),c.value.every(v=>!i[v.name])));function M(v){return a.value.has(v)&&i[v]}function O(){if(l.value)try{if(JSON.parse(localStorage.getItem(p.value)||"[]").includes(l.value)){r.value=!0;const E=JSON.parse(localStorage.getItem(`${p.value}:${l.value}`)||"{}");Object.assign(s,E)}}catch{}}function B(){if(l.value)try{const v=p.value,E=JSON.parse(localStorage.getItem(v)||"[]");E.includes(l.value)||(E.push(l.value),localStorage.setItem(v,JSON.stringify(E))),localStorage.setItem(`${v}:${l.value}`,JSON.stringify({...s}))}catch{}}function L(){const v={};for(const E of c.value){const x=s[E.name];E.type==="number"?v[E.name]=x===""||x===void 0?null:Number(x):E.type==="checkbox"?v[E.name]=!!x:v[E.name]=x===void 0?null:x}return v}function $(){if(o.value||r.value||!S.value)return;o.value=!0,N();for(const E of c.value)a.value.add(E.name);if(!S.value){o.value=!1;return}const v={type:"form_submit",form_id:l.value,values:L()};if(u.value="",!rg(v)){o.value=!1,u.value=m("ui.formOffline");return}B(),r.value=!0,o.value=!1}return $t(()=>{for(const v of c.value)v.type==="checkbox"?s[v.name]=!!v.default:v.type==="multiselect"?s[v.name]=Array.isArray(v.default)?[...v.default]:[]:s[v.name]=v.default??(v.type==="select"&&v.required,"");O()}),(v,E)=>(h(),w("div",n1,[r.value?(h(),w("div",s1,[e.data.title?(h(),w("div",a1,k(e.data.title),1)):K("",!0),f("div",i1,[E[0]||(E[0]=f("i",{class:"ph ph-check-circle"},null,-1)),ae(" "+k(d(m)("ui.submitted")),1)]),f("dl",o1,[(h(!0),w(ce,null,Je(c.value,x=>(h(),w("div",{key:x.name,class:"ui-form-summary-row"},[f("dt",null,k(x.label),1),f("dd",null,k(_(s[x.name],x)),1)]))),128))])])):(h(),w("div",r1,[e.data.title?(h(),w("div",l1,k(e.data.title),1)):K("",!0),e.data.description?(h(),w("div",c1,k(e.data.description),1)):K("",!0),f("form",{class:"ui-form-fields",onSubmit:Bt($,["prevent"])},[(h(!0),w(ce,null,Je(c.value,x=>(h(),w("div",{key:x.name,class:Ae(["ui-form-field",{"has-error":M(x.name)}])},[f("label",{class:"ui-form-label",for:g(x.name)},[ae(k(x.label)+" ",1),x.required?(h(),w("span",d1,"*")):K("",!0)],8,u1),x.description?(h(),w("div",f1,k(x.description),1)):K("",!0),x.type==="textarea"?Gs((h(),w("textarea",{key:1,id:g(x.name),"onUpdate:modelValue":A=>s[x.name]=A,class:"ui-form-input",placeholder:x.placeholder||"",required:x.required,minlength:x.minLength,maxlength:x.maxLength,rows:"3",onBlur:A=>R(x.name),onInput:A=>R(x.name)},null,40,p1)),[[mi,s[x.name]]]):x.type==="select"?Gs((h(),w("select",{key:2,id:g(x.name),"onUpdate:modelValue":A=>s[x.name]=A,class:"ui-form-input",required:x.required,onBlur:A=>R(x.name),onChange:A=>R(x.name)},[x.required?K("",!0):(h(),w("option",m1,"—")),(h(!0),w(ce,null,Je(x.options,A=>(h(),w("option",{key:A.value,value:A.value},k(A.label),9,h1))),128))],40,g1)),[[_l,s[x.name]]]):x.type==="multiselect"?Gs((h(),w("select",{key:3,id:g(x.name),"onUpdate:modelValue":A=>s[x.name]=A,class:"ui-form-input",multiple:"",required:x.required,onBlur:A=>R(x.name),onChange:A=>R(x.name)},[(h(!0),w(ce,null,Je(x.options,A=>(h(),w("option",{key:A.value,value:A.value},k(A.label),9,b1))),128))],40,v1)),[[_l,s[x.name]]]):x.type==="checkbox"?(h(),w("label",_1,[Gs(f("input",{id:g(x.name),"onUpdate:modelValue":A=>s[x.name]=A,type:"checkbox",onChange:A=>R(x.name)},null,40,y1),[[pp,s[x.name]]]),f("span",null,k(x.label),1)])):Gs((h(),w("input",{key:5,id:g(x.name),"onUpdate:modelValue":A=>s[x.name]=A,class:"ui-form-input",type:b(x.type),placeholder:x.placeholder||"",required:x.required,min:x.min,max:x.max,minlength:x.minLength,maxlength:x.maxLength,pattern:x.pattern,onBlur:A=>R(x.name),onInput:A=>R(x.name)},null,40,k1)),[[gv,s[x.name]]]),M(x.name)?(h(),w("div",w1,k(i[x.name]),1)):K("",!0)],2))),128)),f("button",{type:"submit",class:"ui-form-submit",disabled:!S.value||o.value||r.value},[o.value?(h(),w("span",E1)):K("",!0),f("span",null,k(e.data.submit_label||d(m)("ui.submit")),1)],8,S1),u.value?(h(),w("div",T1,k(u.value),1)):K("",!0)],32)]))]))}},x1=We(A1,[["__scopeId","data-v-5c058078"]]),N1=Object.freeze(Object.defineProperty({__proto__:null,default:x1},Symbol.toStringTag,{value:"Module"})),C1={class:"skill-doc"},R1={key:0,class:"skill-doc-section"},I1={class:"skill-doc-label"},O1={class:"skill-doc-triggers"},M1={key:1,class:"skill-doc-section"},L1={class:"skill-doc-label"},$1={class:"skill-doc-list is-required"},D1={key:2,class:"skill-doc-section"},P1={class:"skill-doc-label"},B1={class:"skill-doc-steps"},F1={class:"skill-doc-step-num"},U1={class:"skill-doc-step-body"},G1=["innerHTML"],H1=["innerHTML"],z1={key:1,class:"skill-doc-step-check"},K1=["innerHTML"],q1={key:3,class:"skill-doc-section"},V1={class:"skill-doc-label"},W1={class:"skill-doc-list is-check"},Y1={key:4,class:"skill-doc-section"},j1={class:"skill-doc-label"},Z1={class:"skill-doc-hatches"},X1={key:5,class:"skill-doc-section"},Q1={class:"skill-doc-label"},J1=["innerHTML"],eR={__name:"SkillDocument",props:{doc:{type:Object,required:!0}},setup(e){const t=e,n=W(()=>Array.isArray(t.doc.triggers)?t.doc.triggers:[]),s=W(()=>t.doc.preconditions??[]),a=W(()=>t.doc.post_checks??[]),i=W(()=>{const l=t.doc.body;return l?Tn(l):""});function o(l){const c=String(l??"").trim();if(!(c.startsWith("{")&&c.endsWith("}")))return{title:c,action:"",check:""};const g=D=>{const R=c.match(new RegExp(`['"]${D}['"]\\s*:\\s*(['"])([\\s\\S]*?)\\1\\s*(?:,|})`));return R?R[2].replace(/\\(['"\\])/g,"$1"):""},b=g("title"),_=g("action"),y=g("check");return!b&&!_?{title:c,action:"",check:""}:{title:b,action:_,check:y}}const r=W(()=>(t.doc.steps??[]).map((l,c)=>({index:c+1,...o(l)}))),u=W(()=>{const l=t.doc;return[{key:"deviation",term:m("ui.proposalOnDeviation"),value:l.on_deviation},{key:"blocked",term:m("ui.proposalOnBlocked"),value:l.on_blocked},{key:"already",term:m("ui.proposalOnAlreadyDone"),value:l.on_already_done}].filter(c=>c.value)});return(l,c)=>(h(),w("div",C1,[n.value.length?(h(),w("section",R1,[f("h4",I1,k(d(m)("ui.proposalTriggers")),1),f("div",O1,[(h(!0),w(ce,null,Je(n.value,p=>(h(),w("span",{key:p,class:"skill-doc-trigger"}," «"+k(p)+"» ",1))),128))])])):K("",!0),s.value.length?(h(),w("section",M1,[f("h4",L1,k(d(m)("ui.proposalPreconditions")),1),f("ul",$1,[(h(!0),w(ce,null,Je(s.value,(p,g)=>(h(),w("li",{key:g},[c[0]||(c[0]=f("i",{class:"ph ph-warning-circle","aria-hidden":"true"},null,-1)),f("span",null,k(p),1)]))),128))])])):K("",!0),r.value.length?(h(),w("section",D1,[f("h4",P1,k(d(m)("ui.proposalSteps")),1),f("ol",B1,[(h(!0),w(ce,null,Je(r.value,p=>(h(),w("li",{key:p.index},[f("span",F1,k(p.index),1),f("div",U1,[f("div",{class:"skill-doc-step-title",innerHTML:d(Tn)(p.title)},null,8,G1),p.action?(h(),w("div",{key:0,class:"skill-doc-step-action",innerHTML:d(Tn)(p.action)},null,8,H1)):K("",!0),p.check?(h(),w("div",z1,[c[1]||(c[1]=f("i",{class:"ph ph-check-square","aria-hidden":"true"},null,-1)),f("span",{innerHTML:d(Tn)(p.check)},null,8,K1)])):K("",!0)])]))),128))])])):K("",!0),a.value.length?(h(),w("section",q1,[f("h4",V1,k(d(m)("ui.proposalPostChecks")),1),f("ul",W1,[(h(!0),w(ce,null,Je(a.value,(p,g)=>(h(),w("li",{key:g},[c[2]||(c[2]=f("i",{class:"ph ph-check-circle","aria-hidden":"true"},null,-1)),f("span",null,k(p),1)]))),128))])])):K("",!0),u.value.length?(h(),w("section",Y1,[f("h4",j1,k(d(m)("ui.proposalFallbacks")),1),f("dl",Z1,[(h(!0),w(ce,null,Je(u.value,p=>(h(),w(ce,{key:p.key},[f("dt",null,k(p.term),1),f("dd",null,k(p.value),1)],64))),128))])])):K("",!0),i.value?(h(),w("section",X1,[f("h4",Q1,k(d(m)("ui.proposalContext")),1),f("div",{class:"skill-doc-body markdown-body",innerHTML:i.value},null,8,J1)])):K("",!0)]))}},Rg=We(eR,[["__scopeId","data-v-49d14b50"]]),tR={key:0,class:"skill-proposal-loading"},nR={class:"skill-proposal-head"},sR={class:"skill-proposal-kicker"},aR={class:"skill-proposal-kind"},iR={class:"skill-proposal-area"},oR={key:0,class:"skill-proposal-tags"},rR={class:"skill-proposal-name"},lR={key:0,class:"skill-proposal-description"},cR={class:"skill-proposal-doc"},uR={class:"skill-proposal-footer"},dR={key:0,class:"skill-proposal-error",role:"alert"},fR={key:0,class:"skill-proposal-error"},pR=!0,gR={__name:"SkillProposal",props:{data:{type:Object,default:()=>({})}},setup(e){const t=e,n={home:"settings.skillsAreaHome",infrastructure:"settings.skillsAreaInfrastructure",workflows:"settings.skillsAreaWorkflows",general:"settings.skillsAreaGeneral"},s=F(null),a=F(!0),i=F(""),o=F(!1),r=F(""),u=W(()=>{var y;return((y=t.data)==null?void 0:y.proposal_id)||""}),l=W(()=>{var y,D;return((y=t.data)==null?void 0:y.status)||((D=s.value)==null?void 0:D.status)||"pending"}),c=W(()=>{var y;return((y=t.data)==null?void 0:y.error)||""}),p=W(()=>{var y;return(y=s.value)!=null&&y.replaces_id?m("ui.proposalReplaces"):m("ui.proposalNew")}),g=W(()=>{var y;return m(n[(y=s.value)==null?void 0:y.area]||n.general)}),b=W(()=>{var y;return Array.isArray((y=s.value)==null?void 0:y.tags)?s.value.tags:[]});Ge([l,c],()=>{o.value=!1}),$t(async()=>{if(!u.value){a.value=!1,i.value=m("ui.proposalNotFound");return}try{s.value=await wb(u.value)}catch(y){i.value=m("ui.proposalNotFound"),console.error("[SkillProposal]",y)}finally{a.value=!1}});function _(y){if(o.value)return;r.value="",o.value=!0,rg({type:"skill_proposal",proposal_id:u.value,action:y})||(o.value=!1,r.value=m("ui.proposalOffline"))}return(y,D)=>(h(),w("article",{class:Ae(["skill-proposal",`is-${l.value}`])},[a.value?(h(),w("div",tR,[Q(d(Qs)),f("span",null,k(d(m)("ui.proposalLoading")),1)])):i.value?(h(),ke(d(Vn),{key:1,variant:"danger"},{default:fe(()=>[ae(k(i.value),1)]),_:1})):s.value?(h(),w(ce,{key:2},[f("header",nR,[f("div",sR,[f("span",aR,[D[2]||(D[2]=f("i",{class:"ph ph-file-text","aria-hidden":"true"},null,-1)),ae(" "+k(p.value),1)]),f("span",iR,k(g.value),1),b.value.length?(h(),w("span",oR,[(h(!0),w(ce,null,Je(b.value,R=>(h(),ke(d($p),{key:R,icon:"ph-tag"},{default:fe(()=>[ae(k(R),1)]),_:2},1024))),128))])):K("",!0),l.value==="accepted"?(h(),ke(d(hi),{key:1,variant:"success"},{default:fe(()=>[ae(k(d(m)("ui.proposalInCatalog")),1)]),_:1})):K("",!0)]),f("h3",rR,k(s.value.name),1),s.value.description?(h(),w("p",lR,k(s.value.description),1)):K("",!0)]),f("div",cR,[Q(Rg,{doc:s.value},null,8,["doc"])]),f("footer",uR,[l.value==="pending"?(h(),w(ce,{key:0},[Q(d(it),{variant:"primary",icon:"ph-plus",class:"skill-proposal-btn is-accept",loading:o.value,onClick:D[0]||(D[0]=R=>_("accept"))},{default:fe(()=>[ae(k(d(m)("ui.proposalAccept")),1)]),_:1},8,["loading"]),Q(d(it),{variant:"secondary",icon:"ph-x",class:"skill-proposal-btn is-reject",disabled:o.value,onClick:D[1]||(D[1]=R=>_("reject"))},{default:fe(()=>[ae(k(d(m)("ui.proposalReject")),1)]),_:1},8,["disabled"]),r.value||c.value?(h(),w("span",dR,k(r.value||c.value),1)):K("",!0)],64)):(h(),ke(d(Vn),{key:1,variant:l.value==="accepted"?"success":"warning",class:"skill-proposal-decision"},{default:fe(()=>[f("i",{class:Ae(["ph",l.value==="accepted"?"ph-check-circle":"ph-x-circle"]),"aria-hidden":"true"},null,2),f("span",null,k(l.value==="accepted"?d(m)("ui.proposalAccepted"):d(m)("ui.proposalRejected")),1),c.value?(h(),w("span",fR,k(c.value),1)):K("",!0)]),_:1},8,["variant"]))])],64)):K("",!0)],2))}},mR=We(gR,[["__scopeId","data-v-28624486"]]),hR=Object.freeze(Object.defineProperty({__proto__:null,bare:pR,default:mR},Symbol.toStringTag,{value:"Module"})),Pd=Object.assign({"./AudioPlayer.vue":Zy,"./CardGrid.vue":t1,"./ConfirmDialog.vue":V_,"./ContentLightbox.vue":Tw,"./ContextBar.vue":QT,"./Form.vue":N1,"./LoginScreen.vue":cT,"./ModelChip.vue":jT,"./NotificationPromptBanner.vue":hT,"./OfflineBanner.vue":yT,"./ProfileBadge.vue":qT,"./SelectionToolbar.vue":xw,"./SkillProposal.vue":hR,"./WelcomeScreen.vue":IT});function Ig(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}const ii=new Map,go=new Set;for(const e in Pd){const t=e.replace(/^.*\//,"").replace(/\.vue$/,""),n=Pd[e],s=n.default;if(!s)continue;ii.set(t,ci(s));const a=t.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase();ii.set(a,ci(s)),n.bare===!0&&(go.add(t),go.add(a))}function vR(e){if(!e||typeof e!="string")return null;if(ii.has(e))return ii.get(e);const t=Ig(e);return ii.get(t)||null}function bR(e){return!e||typeof e!="string"?!1:go.has(e)||go.has(Ig(e))}const _R={key:1,class:"ui-component-card"},yR={class:"ui-component-header"},kR={class:"ui-component-name"},wR={class:"ui-component-body"},SR={key:1,class:"ui-component-fallback"},ER={class:"ui-component-fallback-title"},TR={class:"ui-component-fallback-json"},AR={__name:"UiComponentCard",props:{component:{type:Object,required:!0}},setup(e){const t=e,n=W(()=>{const a=t.component.component??"";return vR(a)}),s=W(()=>bR(t.component.component??""));return(a,i)=>n.value&&s.value?(h(),ke(eo(n.value),{key:0,data:t.component.payload},null,8,["data"])):(h(),w("div",_R,[f("div",yR,[i[0]||(i[0]=f("span",{class:"ui-component-icon"},"🧩",-1)),f("span",kR,k(t.component.component),1),i[1]||(i[1]=f("span",{class:"ui-component-badge"},"UI",-1))]),f("div",wR,[n.value?(h(),ke(eo(n.value),{key:0,data:t.component.payload},null,8,["data"])):(h(),w("div",SR,[f("div",ER,k(d(m)("messages.unknownUiComponent",{name:t.component.component??"?"})),1),f("pre",TR,k(JSON.stringify(t.component.payload,null,2)),1)]))])]))}},xR=We(AR,[["__scopeId","data-v-f64f3335"]]),NR={key:0,class:"msg-assistant"},CR={key:0,class:"tool-cards-summary"},RR={key:4,class:"plan-card"},IR=["innerHTML"],OR=["innerHTML"],MR={class:"planning-label"},LR={key:3,class:"stream-cursor"},$R={key:4,class:"msg-meta-row"},DR={key:0,class:"msg-meta-item"},PR={key:1,class:"msg-meta-item"},BR={key:2,class:"msg-meta-item"},FR={key:3,class:"msg-meta-item msg-meta-time"},UR={__name:"AssistantMessage",props:{msg:{type:Object,required:!0},isFlashing:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1}},setup(e){const t=e,n=F(null),s=Gt(),a=F(!1),i=W(()=>Tn(t.msg.text)),o=W(()=>t.msg.done?t.msg.time:null),r=$o(o),u=W(()=>{const B=D(t.msg.tools||[]);return B?m("messages.runningTool",{tool:S(B)}):""}),l=W(()=>t.msg.done?"":t.msg.statusLabel?t.msg.statusLabel:u.value?u.value:t.msg.text?"":R(t.msg.tools||[])?m("messages.preparingNext"):m("messages.thinkingStatus")),c=W(()=>!t.readonly&&typeof t.msg.id=="string"&&t.msg.id.startsWith("h_")),{copied:p,copy:g}=fg();async function b(B){try{await s.rateMessage(t.msg,B)}catch(L){console.error("rate failed",L)}}function _(B){return B?B>=1e3?(B/1e3).toFixed(1).replace(".0","")+"k":String(B):""}function y(B,L){return`${B.id}:content:${L}`}function D(B){var L;for(let $=B.length-1;$>=0;$--){const v=B[$];if(v.kind==="tool"&&v.pending)return v;if((L=v.steps)!=null&&L.length){const E=D(v.steps);if(E)return E}}return null}function R(B){return B.some(L=>{var $;return L.kind==="tool"||L.kind==="plan"||L.kind==="turn_thinking"?!0:($=L.steps)!=null&&$.length?R(L.steps):!1})}const N=new Set(["filesystem","filesystem_read","filesystem_write","file_ai"]);function S(B){var L;return N.has(B.name)&&((L=B.args)!=null&&L.action)?`${B.name} ${B.args.action}`:B.name}function M(B){return B.kind==="ui_component"?!1:B.kind==="tool"&&B.name!=="content_publish"}const O=W(()=>{const B=t.msg.tools||[],L=B.map((x,A)=>({item:x,i:A})).filter(({item:x})=>M(x));if(L.length===0||L.length<4)return B.map((x,A)=>({type:"item",item:x,i:A,key:A}));const $=a.value,v=new Set($?L.map(({i:x})=>x):L.slice(-3).map(({i:x})=>x)),E=[];for(let x=0;xt.msg.done,B=>{B&&xt(()=>{Hx(n.value),Kx(n.value)})},{immediate:!0}),(B,L)=>{var v;const $=Qe("GnBadge");return e.msg.thinking||(v=e.msg.tools)!=null&&v.length||e.msg.text||e.msg.type==="ui_component"||!e.msg.done?(h(),w("div",NR,[e.msg.thinking?(h(),ke(Cl,{key:0,msg:e.msg},null,8,["msg"])):K("",!0),Q(rv,{name:"tool-fade",tag:"div"},{default:fe(()=>[(h(!0),w(ce,null,Je(O.value,E=>(h(),w("div",{key:E.key,class:"tool-fade-item"},[E.type==="summary"?(h(),w("div",CR,[Q($,{variant:"secondary"},{default:fe(()=>[ae(k(d(m)("common.toolsCount",{n:E.total})),1)]),_:2},1024),Q(d(Kn),{size:"sm",icon:a.value?"ph ph-caret-up":"ph ph-caret-down",label:d(m)(a.value?"messages.hideOlderTools":"messages.showAllTools"),onClick:L[0]||(L[0]=x=>a.value=!a.value)},null,8,["icon","label"])])):E.item.kind==="turn_thinking"?(h(),ke(Cl,{key:1,msg:E.item},null,8,["msg"])):E.item.kind==="tool"&&E.item.name==="content_publish"&&!E.item.pending?(h(),ke(_C,{key:2,tool:E.item,"default-open":y(e.msg,E.i)===d(s).latestContentToolKey,"collapse-token":d(s).latestContentToolKey},null,8,["tool","default-open","collapse-token"])):E.item.kind==="ui_component"?(h(),ke(xR,{key:3,component:E.item},null,8,["component"])):E.item.kind==="plan"?(h(),w("details",RR,[f("summary",{onClick:L[1]||(L[1]=Bt((...x)=>d(Mt)&&d(Mt)(...x),["prevent"]))},[L[5]||(L[5]=f("i",{class:"ph ph-map-trifold"},null,-1)),ae(" "+k(d(m)("messages.plan"))+" ",1),L[6]||(L[6]=f("i",{class:"ph ph-caret-down plan-chevron"},null,-1))]),f("div",{class:"plan-body",innerHTML:d(Tn)(E.item.text)},null,8,IR)])):(h(),ke(ON,{key:5,tool:E.item},null,8,["tool"]))]))),128))]),_:1}),e.msg.text?(h(),w("div",{key:1,ref_key:"contentEl",ref:n,class:Ae(["msg-assistant-content",{"msg-flash":t.isFlashing}]),innerHTML:i.value},null,10,OR)):K("",!0),l.value?(h(),w("div",{key:2,class:Ae(["planning-indicator",{"is-executing":u.value}])},[L[7]||(L[7]=f("span",{class:"spinner"},null,-1)),f("span",MR,k(l.value),1)],2)):!e.msg.done&&e.msg.text?(h(),w("span",LR)):K("",!0),e.msg.done?(h(),w("div",$R,[e.msg.elapsed_seconds!=null?(h(),w("span",DR,[L[8]||(L[8]=f("i",{class:"ph ph-timer"},null,-1)),ae(k(e.msg.elapsed_seconds)+"s ",1)])):K("",!0),e.msg.tool_call_count?(h(),w("span",PR,[L[9]||(L[9]=f("i",{class:"ph ph-wrench"},null,-1)),ae(k(e.msg.tool_call_count),1)])):K("",!0),e.msg.token_count?(h(),w("span",BR,[L[10]||(L[10]=f("i",{class:"ph ph-coins"},null,-1)),ae(k(_(e.msg.token_count)),1)])):K("",!0),d(r)?(h(),w("span",FR,k(d(r)),1)):K("",!0),e.msg.text?(h(),ke(d(Kn),{key:4,icon:d(p)?"ph ph-check":"ph ph-copy",label:d(m)(d(p)?"common.copied":"common.copy"),class:"msg-copy-btn",onClick:L[2]||(L[2]=E=>d(g)(e.msg.text))},null,8,["icon","label"])):K("",!0),c.value?(h(),ke(d(Kn),{key:5,icon:"ph ph-thumbs-up",label:d(m)("messages.useful"),class:Ae(["msg-rate-btn",{active:e.msg.rating===1}]),onClick:L[3]||(L[3]=E=>b(1))},null,8,["label","class"])):K("",!0),c.value?(h(),ke(d(Kn),{key:6,icon:"ph ph-thumbs-down",label:d(m)("messages.notUseful"),class:Ae(["msg-rate-btn",{active:e.msg.rating===-1}]),onClick:L[4]||(L[4]=E=>b(-1))},null,8,["label","class"])):K("",!0)])):K("",!0)])):K("",!0)}}},Og=We(UR,[["__scopeId","data-v-7b659b91"]]),GR={class:"summary-card"},HR=["innerHTML"],Mg={__name:"SummaryCard",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>(h(),w("details",GR,[f("summary",{onClick:n[0]||(n[0]=Bt((...s)=>d(Mt)&&d(Mt)(...s),["prevent"]))},[n[1]||(n[1]=f("i",{class:"ph ph-article"},null,-1)),ae(" "+k(d(m)("messages.contextSummary")),1)]),f("div",{class:"thinking-body",innerHTML:d(Tn)(e.msg.text)},null,8,HR)]))}},zR={key:0,class:"compression-notice compression-pending"},KR=["open"],qR={key:0,class:"compression-counts"},VR={key:1,class:"ph ph-caret-down compression-chevron"},WR=["innerHTML"],YR={__name:"CompressionNotice",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>e.msg.type==="compression_pending"?(h(),w("div",zR,[n[1]||(n[1]=f("i",{class:"ph ph-spinner ph-spin"},null,-1)),f("span",null,k(e.msg.text||d(m)("messages.compressingContext")),1)])):(h(),w("details",{key:1,class:"compression-notice",open:!e.msg.summary},[f("summary",{onClick:n[0]||(n[0]=Bt((...s)=>d(Mt)&&d(Mt)(...s),["prevent"]))},[n[2]||(n[2]=f("i",{class:"ph ph-arrows-in"},null,-1)),ae(" "+k(d(m)("messages.contextCompressed"))+" ",1),e.msg.before!=null&&e.msg.after!=null?(h(),w("span",qR,k(d(m)("messages.compressionCounts",{before:e.msg.before,after:e.msg.after,n:e.msg.after})),1)):K("",!0),e.msg.summary?(h(),w("i",VR)):K("",!0)]),e.msg.summary?(h(),w("div",{key:0,class:"compression-body",innerHTML:d(Tn)(e.msg.summary)},null,8,WR)):K("",!0)],8,KR))}},Lg=We(YR,[["__scopeId","data-v-0df68e38"]]),jR={class:"synapse-event"},ZR={class:"synapse-event-head"},XR={class:"synapse-event-label"},QR={key:0,class:"synapse-event-type"},JR={key:1,class:"synapse-event-time"},eI=["innerHTML"],tI={__name:"SynapseEventNotice",props:{msg:{type:Object,required:!0}},setup(e){const t=e,n=$o(W(()=>t.msg.time));return(s,a)=>(h(),w("div",jR,[f("div",ZR,[a[0]||(a[0]=f("i",{class:"ph ph-lightning"},null,-1)),f("span",XR,k(d(m)("messages.synapseEvent")),1),e.msg.eventType?(h(),w("span",QR,k(e.msg.eventType),1)):K("",!0),d(n)?(h(),w("span",JR,k(d(n)),1)):K("",!0)]),f("div",{class:"synapse-event-body",innerHTML:d(Tn)(e.msg.text)},null,8,eI)]))}},$g=We(tI,[["__scopeId","data-v-e89b33a0"]]),Dg={__name:"ErrorMessage",props:{msg:{type:Object,required:!0}},setup(e){return(t,n)=>{const s=Qe("GnAlert");return h(),ke(s,{variant:"danger",role:"alert"},{default:fe(()=>[n[0]||(n[0]=f("i",{class:"ph ph-warning-octagon"},null,-1)),ae(" "+k(e.msg.text),1)]),_:1})}}},nI={class:"message-list-wrap"},sI={key:0,class:"session-loading"},aI={key:1,class:"archive-loading"},iI=["data-msg-index"],oI=["title"],Ui=250,rI=8,lI=4,cI={__name:"MessageList",setup(e){const t=Gt(),n=F(null),s=F(!1),a=F(!1),i=F(null);let o=!1,r=null,u=null,l=null,c=0,p=0;function g(){return n.value??null}function b(){p=performance.now()}function _(A){return!!A&&A.scrollHeight-A.clientHeight>1}function y(){p=performance.now(),o=!0,c++}function D(A){b(),!(A.deltaY>=0)&&_(g())&&y()}let R=null;function N(A){var P,z;b(),R=((z=(P=A.touches)==null?void 0:P[0])==null?void 0:z.clientY)??null}function S(A){var z,V;b();const P=(V=(z=A.touches)==null?void 0:z[0])==null?void 0:V.clientY;P==null||R==null||P-R>lI&&_(g())&&(y(),R=P)}function M(A){const P=t.messages.findIndex(Y=>{var te;return(te=Y.rawIndices)==null?void 0:te.includes(A)});if(P===-1)return;const z=g(),V=z==null?void 0:z.querySelector(`[data-msg-index="${P}"]`);V?V.scrollIntoView({block:"center",behavior:"smooth"}):z==null||z.scrollTo({top:0,behavior:"smooth"}),i.value=P,l&&clearTimeout(l),l=setTimeout(()=>{i.value=null,l=null},3e3)}function O(A){return A.role==="user"?pg:A.type==="summary"?Mg:A.type==="compression_notice"||A.type==="compression_pending"?Lg:A.type==="synapse_event"?$g:A.type==="error"?Dg:Og}function B(A=!1){if(A){const P=g();P&&P.scrollTo({top:P.scrollHeight,behavior:"smooth"});return}L()}function L(){const A=++c,P=g();if(!P||performance.now()-p{for(;performance.now()1&&(P.scrollTop=P.scrollHeight),await new Promise(te=>requestAnimationFrame(te)),A!==c))return})()}function $(){const A=g();A&&(performance.now()-p{o||performance.now()-p1&&(A.scrollTop=A.scrollHeight)})))}function v(A){const P=A.target;if(!P)return;const z=P.scrollHeight-P.scrollTop-P.clientHeight;if(z>100?o=!0:z<=rI&&(o=!1),a.value=z>200,P.scrollTop<80&&t.archiveHasMore&&!t.archiveLoading){const V=Math.floor(P.scrollTop+P.clientHeight/2),Y=P.querySelectorAll("[data-msg-index]");for(const te of Y)if(te.offsetTop+te.offsetHeight>=V){r=Number(te.dataset.msgIndex),u=Math.round(te.getBoundingClientRect().top);break}t.loadArchivedMessages()}}Ge(()=>t.messages.length,()=>{!o&&!t.loading&&!t.archiveLoading&&xt(()=>B())});function E(A){var V,Y,te,q,j,he,Oe;if(!A)return"";let P=0,z=0;for(const Pe of A.tools??[])P+=((V=Pe.result)==null?void 0:V.length)??0,P+=((Y=Pe.terminalOutput)==null?void 0:Y.length)??0,z+=((te=Pe.steps)==null?void 0:te.length)??0;return[((q=A.text)==null?void 0:q.length)??0,((he=(j=A.thinking)==null?void 0:j.text)==null?void 0:he.length)??0,((Oe=A.tools)==null?void 0:Oe.length)??0,P,z,A.statusLabel??"",A.done?1:0].join(":")}Ge(()=>E(t.streamingMsg),()=>{o||xt(()=>$())}),Ge(()=>t.streaming,(A,P)=>{P&&!A&&!o&&!t.loading&&L()}),Ge(()=>t.archiveLoading,A=>{!A&&r!=null&&xt(()=>{const P=g(),z=P==null?void 0:P.querySelector(`[data-msg-index="${r}"]`);if(P&&z&&u!=null){const V=Math.round(z.getBoundingClientRect().top)-u;V&&(P.scrollTop+=V)}r=null,u=null})}),Ge(()=>t.currentId,()=>{c++,o=!1,a.value=!1,s.value=!1,r=null,u=null}),Ge(()=>t.loading,A=>{A||(t.scrollToMessageIndex!=null?(s.value=!0,x(()=>{M(t.scrollToMessageIndex),t.scrollToMessageIndex=null})):(s.value=!1,x(()=>{B(),s.value=!0})))});function x(A){xt(()=>requestAnimationFrame(()=>requestAnimationFrame(A)))}return $t(()=>{!t.loading&&t.messages.length?x(()=>{B(),s.value=!0}):t.loading||(s.value=!0)}),Nn(()=>{l&&clearTimeout(l)}),(A,P)=>(h(),w("div",nI,[d(t).loading?(h(),w("div",sI,[...P[1]||(P[1]=[f("i",{class:"ph ph-spinner animate-spin"},null,-1)])])):K("",!0),d(t).archiveLoading?(h(),w("div",aI,[P[2]||(P[2]=f("i",{class:"ph ph-spinner animate-spin"},null,-1)),f("span",null,k(d(m)("chat.loadingOlder")),1)])):K("",!0),d(t).messages.length?(h(),w("div",{key:2,ref_key:"listRef",ref:n,class:Ae(["message-scroller",{"is-hidden":!s.value}]),onWheelPassive:D,onPointerdownPassive:b,onTouchstartPassive:N,onTouchmovePassive:S,onScrollPassive:v},[(h(!0),w(ce,null,Je(d(t).messages,(z,V)=>(h(),w("div",{key:z.id??V,class:Ae(["message-row",{"msg-enter":z.animate}]),"data-msg-index":V},[(h(),ke(eo(O(z)),{msg:z,"is-flashing":i.value===V},null,8,["msg","is-flashing"]))],10,iI))),128))],34)):K("",!0),Q(Sa,{name:"scroll-btn"},{default:fe(()=>[a.value?(h(),w("button",{key:0,class:"scroll-to-bottom-btn",title:d(m)("chat.scrollToBottom"),onClick:P[0]||(P[0]=z=>B(!0))},[...P[3]||(P[3]=[f("i",{class:"ph ph-arrow-down"},null,-1)])],8,oI)):K("",!0)]),_:1})]))}},uI=We(cI,[["__scopeId","data-v-d8b83e98"]]);function Pg(){const e=Gt(),t=F(!1),n=F(0),s=F(!1);function a(N){return e.imagesProcessing++,new Promise((S,M)=>{const O=new FileReader;O.onload=async B=>{try{const L=await i(B.target.result,1024,.9);e.pendingImages.push(L),S()}catch(L){M(L)}finally{e.imagesProcessing--}},O.onerror=()=>{e.imagesProcessing--,M(O.error??new Error("Failed to read file"))},O.readAsDataURL(N)})}function i(N,S=1024,M=.9){return new Promise((O,B)=>{const L=new Image;L.onload=()=>{let $=L.width,v=L.height;if($>S||v>S){const A=S/Math.max($,v);$=Math.round($*A),v=Math.round(v*A)}const E=document.createElement("canvas");E.width=$,E.height=v,E.getContext("2d").drawImage(L,0,0,$,v),E.toBlob(A=>{if(!A){B(new Error("Canvas toBlob failed"));return}const P=new FileReader;P.onload=z=>O(z.target.result),P.onerror=B,P.readAsDataURL(A)},"image/jpeg",M)},L.onerror=B,L.src=N})}function o(N){e.pendingImages.splice(N,1)}async function r(N){if(e.currentId){s.value=!0,n.value=0;try{const S=await Jv(e.currentId,N);e.pendingFiles.push(S),e.fetchFiles(e.currentId)}finally{s.value=!1,n.value=0}}}function u(N){e.pendingFiles.splice(N,1)}async function l(N){const S=Array.from(N.target.files??[]);N.target.value="",await y(S)}async function c(N){var O;const M=Array.from(((O=N.clipboardData)==null?void 0:O.items)??[]).filter(B=>B.type.startsWith("image/"));if(M.length){N.preventDefault();for(const B of M){const L=B.getAsFile();L&&await a(L)}}}function p(N){N.preventDefault(),R(N)&&(t.value=!0)}function g(N){N.preventDefault()}function b(N){N.currentTarget.contains(N.relatedTarget)||(t.value=!1)}async function _(N){var M;N.preventDefault(),t.value=!1;const S=Array.from(((M=N.dataTransfer)==null?void 0:M.files)??[]);await y(S)}async function y(N){for(const S of N)S.type.startsWith("image/")?await a(S):await r(S)}function D(){e.pendingImages=[],e.pendingFiles=[]}function R(N){var S;return Array.from(((S=N.dataTransfer)==null?void 0:S.types)??[]).includes("Files")}return{isDragging:t,uploading:s,uploadProgress:n,handleFileInput:l,handlePaste:c,handleDragEnter:p,handleDragOver:g,handleDragLeave:b,handleDrop:_,removeImage:o,removeFile:u,clearPending:D}}const dI={class:"file-preview-strip"},fI=["src","alt"],pI=["onClick","title"],gI={class:"file-preview-name"},mI={__name:"FilePreviewStrip",setup(e){const t=Gt(),{removeImage:n,removeFile:s}=Pg();return(a,i)=>{const o=Qe("GnChip");return h(),w("div",dI,[(h(!0),w(ce,null,Je(d(t).imagesProcessing,r=>(h(),w("div",{key:`img-processing-${r}`,class:"file-preview-image is-processing"},[...i[0]||(i[0]=[f("i",{class:"ph ph-spinner ph-spin"},null,-1)])]))),128)),(h(!0),w(ce,null,Je(d(t).pendingImages,(r,u)=>(h(),w("div",{key:`img-${u}`,class:"file-preview-image"},[f("img",{src:r,alt:d(m)("chat.attachment")},null,8,fI),f("button",{class:"file-preview-remove",onClick:l=>d(n)(u),title:d(m)("chat.removeAttachment")},[...i[1]||(i[1]=[f("i",{class:"ph ph-x"},null,-1)])],8,pI)]))),128)),(h(!0),w(ce,null,Je(d(t).pendingFiles,(r,u)=>(h(),ke(o,{key:`file-${u}`,class:"file-preview-pill",icon:"ph ph-file",removable:"",title:r.name,onRemove:l=>d(s)(u)},{default:fe(()=>[f("span",gI,k(r.name),1)]),_:2},1032,["title","onRemove"]))),128))])}}},hI=We(mI,[["__scopeId","data-v-2023088a"]]),vI={key:1,class:"upload-progress is-indeterminate"},bI={key:2,class:"sending-notice"},_I={class:"input-row"},yI=["title","disabled"],kI=["placeholder","disabled","onKeydown"],wI=["title","disabled"],SI=["title"],EI={__name:"InputBar",props:{ws:{type:Object,required:!0}},setup(e){const t=e,n=Gt(),{isDragging:s,uploading:a,handleFileInput:i,handlePaste:o,handleDragEnter:r,handleDragOver:u,handleDragLeave:l,handleDrop:c,clearPending:p}=Pg(),g=F(""),b=F(null),_=F(null),y=F(!1),D=W(()=>!!n.currentId&&!y.value&&(g.value.trim()||n.pendingImages.length||n.pendingFiles.length)),R=W(()=>n.streaming?m("chat.messagePlaceholderBusy"):m("chat.messagePlaceholder"));Ge(()=>n.currentId,v=>{g.value=v?n.loadDraft(v):"",xt(O)},{immediate:!0});let N=null;Ge(g,v=>{N&&clearTimeout(N),N=setTimeout(()=>n.saveDraft(v),300)});const{pendingQuote:S,consumeQuote:M}=eg();Ge(S,v=>{if(!v)return;const E=v.split(` -`).map(x=>`> ${x}`).join(` -`);g.value=E+` - -`+g.value,M(),xt(()=>{var A;O(),(A=b.value)==null||A.focus();const x=b.value;x&&(x.selectionStart=x.selectionEnd=x.value.length)})});function O(){const v=b.value;v&&(v.style.height="auto",v.style.height=Math.min(v.scrollHeight,144)+"px")}function B(){if(!(!D.value||y.value)){y.value=!0;try{const v=g.value.trim(),E=[...n.pendingImages],x=[...n.pendingFiles],A=n.appendUserMessage(v,E,x,{queued:n.streaming});p(),g.value="",xt(O);const P=E.map(Y=>Y.split(",",2)[1]).filter(Boolean),z={type:"message",content:v||" "};P.length&&(z.images=P),x.length&&(z.files=x),t.ws.send(z)==="rejected"?A.failed=!0:n.streaming||(n.awaitingStream=!0)}finally{y.value=!1}}}function L(){const v=b.value;if(!v)return;const E=v.selectionStart,x=v.selectionEnd;g.value=g.value.slice(0,E)+` -`+g.value.slice(x),xt(()=>{v.selectionStart=v.selectionEnd=E+1,O()})}async function $(){n.currentId&&await zv(n.currentId)}return(v,E)=>(h(),w("div",{class:Ae(["input-bar input-dropzone",{"is-dragging":d(s)}]),onDragenter:E[4]||(E[4]=(...x)=>d(r)&&d(r)(...x)),onDragover:E[5]||(E[5]=(...x)=>d(u)&&d(u)(...x)),onDragleave:E[6]||(E[6]=(...x)=>d(l)&&d(l)(...x)),onDrop:E[7]||(E[7]=(...x)=>d(c)&&d(c)(...x))},[d(n).pendingImages.length||d(n).pendingFiles.length?(h(),ke(hI,{key:0})):K("",!0),d(a)?(h(),w("div",vI,[...E[8]||(E[8]=[f("div",{class:"upload-progress-fill"},null,-1)])])):K("",!0),d(n).awaitingStream&&!d(n).streaming?(h(),w("div",bI,[E[9]||(E[9]=f("i",{class:"ph ph-spinner ph-spin"},null,-1)),ae(" "+k(d(m)("chat.sending")),1)])):K("",!0),f("div",_I,[f("input",{ref_key:"fileInputEl",ref:_,type:"file",multiple:"",style:{display:"none"},onChange:E[0]||(E[0]=(...x)=>d(i)&&d(i)(...x))},null,544),f("button",{class:"btn-icon",title:d(m)("chat.attachFiles"),disabled:!d(n).currentId,onClick:E[1]||(E[1]=x=>_.value.click())},[...E[10]||(E[10]=[f("i",{class:"ph ph-paperclip"},null,-1)])],8,yI),Gs(f("textarea",{ref_key:"textareaEl",ref:b,"onUpdate:modelValue":E[2]||(E[2]=x=>g.value=x),class:"input-textarea",placeholder:R.value,rows:"1",disabled:!d(n).currentId,onKeydown:[Wn(Bt(B,["exact","prevent"]),["enter"]),Wn(Bt(L,["ctrl","prevent"]),["enter"])],onInput:O,onPaste:E[3]||(E[3]=(...x)=>d(o)&&d(o)(...x))},null,40,kI),[[mi,g.value]]),f("button",{class:"btn-icon",title:d(n).streaming?d(m)("chat.sendQueued"):d(m)("chat.sendEnter"),disabled:!D.value,onClick:B},[...E[11]||(E[11]=[f("i",{class:"ph ph-paper-plane-tilt"},null,-1)])],8,wI),d(n).streaming?(h(),w("button",{key:0,class:"btn-icon",title:d(m)("chat.stopGeneration"),onClick:$},[...E[12]||(E[12]=[f("i",{class:"ph ph-stop-circle"},null,-1)])],8,SI)):K("",!0)])],34))}},TI=We(EI,[["__scopeId","data-v-ff9fc640"]]),AI={class:"chat-area"},xI={key:1,class:"empty-chat"},NI={__name:"ChatArea",emits:["toggle-sidebar","toggle-artifacts"],setup(e,{emit:t}){const n=t,s=Gt(),a=zT();Ge(()=>s.currentId,o=>{o?a.connect(o):a.disconnect()},{immediate:!0}),Ge(a.connected,o=>{s.wsConnected=o},{immediate:!0}),Ge(a.reconnecting,o=>{s.wsReconnecting=o},{immediate:!0});function i(){s.currentId&&a.connect(s.currentId)}return Nn(()=>a.disconnect()),(o,r)=>{const u=Qe("GnIconButton"),l=Qe("GnAlert"),c=Qe("GnEmptyState");return h(),w("div",AI,[Q(i0,{onToggleSidebar:r[0]||(r[0]=p=>n("toggle-sidebar")),onToggleArtifacts:r[1]||(r[1]=p=>n("toggle-artifacts"))}),Q(Sa,{name:"fade"},{default:fe(()=>[d(a).reconnectFailed.value?(h(),ke(l,{key:0,variant:"warning",class:"reconnect-banner"},{default:fe(()=>[r[2]||(r[2]=f("i",{class:"ph ph-wifi-slash"},null,-1)),ae(" "+k(d(m)("chat.connectionLost"))+" ",1),Q(u,{icon:"ph ph-arrows-clockwise",label:d(m)("chat.retry"),onClick:i},null,8,["label"])]),_:1})):K("",!0)]),_:1}),d(s).currentId?(h(),w(ce,{key:0},[Q(uI),Q(TI,{ws:d(a)},null,8,["ws"])],64)):(h(),w("div",xI,[Q(c,{icon:"ph ph-chat-dots",title:d(m)("chat.nothingOpen"),text:d(m)("chat.startConversation")},null,8,["title","text"])]))])}}},CI=We(NI,[["__scopeId","data-v-04584dfa"]]),RI=Es("apiTokens",()=>{const e=F([]),t=F(!1),n=F(!1);async function s(){t.value=!0;try{const o=await tb();e.value=o.items||[]}finally{t.value=!1}}async function a(o){n.value=!0;try{const r=await nb(o);return e.value.unshift({id:r.id,name:r.name,token_prefix:r.token_prefix,created_at:r.created_at,last_used_at:null}),r}finally{n.value=!1}}async function i(o){await sb(o),e.value=e.value.filter(r=>r.id!==o)}return{tokens:e,loading:t,creating:n,fetchTokens:s,createToken:a,revokeToken:i}}),II={class:"create-key-body"},OI={__name:"CreateKeyModal",props:{open:Boolean,creating:Boolean},emits:["close","submit"],setup(e,{emit:t}){const n=e,s=t,a=F("");Ge(()=>n.open,o=>{o&&(a.value="")});function i(){const o=a.value.trim();o&&s("submit",o)}return(o,r)=>{const u=Qe("GnInput"),l=Qe("GnButton"),c=Qe("GnModal");return h(),ke(c,{open:n.open,title:d(m)("settings.keyCreateTitle"),"onUpdate:open":r[2]||(r[2]=p=>s("close"))},{actions:fe(()=>[Q(l,{variant:"secondary",onClick:r[1]||(r[1]=p=>s("close")),disabled:n.creating},{default:fe(()=>[ae(k(d(m)("common.cancel")),1)]),_:1},8,["disabled"]),Q(l,{variant:"primary",loading:n.creating,onClick:i},{default:fe(()=>[ae(k(d(m)("common.create")),1)]),_:1},8,["loading"])]),default:fe(()=>[f("div",II,[Q(u,{modelValue:a.value,"onUpdate:modelValue":r[0]||(r[0]=p=>a.value=p),label:d(m)("col.name"),placeholder:d(m)("settings.keyNamePlaceholder"),disabled:n.creating,onKeydown:Wn(i,["enter"])},null,8,["modelValue","label","placeholder","disabled"])])]),_:1},8,["open","title"])}}},MI=We(OI,[["__scopeId","data-v-40e57301"]]),LI={class:"show-token-body"},$I={class:"show-token-warning"},DI={class:"show-token-value"},PI={__name:"ShowTokenModal",props:{open:Boolean,token:String},emits:["close"],setup(e,{emit:t}){const n=e,s=t;return(a,i)=>{const o=Qe("GnCopyButton"),r=Qe("GnInputGroup"),u=Qe("GnButton"),l=Qe("GnModal");return h(),ke(l,{open:n.open,title:d(m)("settings.keyCreatedTitle"),"onUpdate:open":i[1]||(i[1]=c=>s("close"))},{actions:fe(()=>[Q(u,{variant:"primary",onClick:i[0]||(i[0]=c=>s("close"))},{default:fe(()=>[ae(k(d(m)("common.done")),1)]),_:1})]),default:fe(()=>[f("div",LI,[f("p",$I,[i[2]||(i[2]=f("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+k(d(m)("settings.keyCopyNow"))+" ",1),f("strong",null,k(d(m)("settings.keyCopyNowStrong")),1),i[3]||(i[3]=ae(". ",-1))]),Q(r,null,{action:fe(()=>[Q(o,{text:n.token,label:d(m)("common.copyToClipboard")},null,8,["text","label"])]),default:fe(()=>[f("code",DI,k(n.token),1)]),_:1})])]),_:1},8,["open","title"])}}},BI=We(PI,[["__scopeId","data-v-cfe353f9"]]),FI={class:"api-keys-panel"},UI={class:"api-keys-header"},GI={class:"api-keys-title"},HI={class:"api-keys-description"},zI={key:1,class:"api-keys-loading"},KI={__name:"ApiKeysPanel",setup(e){const t=RI(),n=ls(),s=Na(),a=Mn(),i=F(!1),o=F(!1),r=F(""),u=W(()=>[{key:"name",label:m("col.name")},{key:"token_prefix",label:m("col.key")},{key:"created_at",label:m("col.created")},{key:"last_used_at",label:m("col.lastUsed")},{key:"actions",label:""}]);$t(()=>{t.fetchTokens()});function l(){i.value=!0}async function c(b){try{const _=await t.createToken(b);i.value=!1,r.value=_.token,o.value=!0}catch(_){a.error({title:m("toast.keyCreateFailed"),text:_.message})}}async function p(b,_){if(await s(m("confirm.revokeKey",{name:_})))try{await t.revokeToken(b),a.success({title:m("toast.keyRevoked")})}catch(D){a.error({title:m("toast.keyRevokeFailed"),text:D.message})}}function g(b){return b?new Date(b).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"}):null}return(b,_)=>{const y=Qe("GnButton"),D=Qe("GnAlert"),R=Qe("GnLoader"),N=Qe("GnIconButton"),S=Qe("GnTable");return h(),w("div",FI,[f("div",UI,[f("h2",GI,k(d(m)("settings.keysTitle")),1),Q(y,{variant:"primary",icon:"ph ph-plus",onClick:l},{default:fe(()=>[ae(k(d(m)("settings.keysCreate")),1)]),_:1})]),f("p",HI,k(d(m)("settings.keysDescription")),1),d(n).isNoAuthMode?(h(),ke(D,{key:0,variant:"warning",class:"api-keys-warning"},{default:fe(()=>[_[2]||(_[2]=f("i",{class:"ph ph-warning-circle"},null,-1)),ae(" "+k(d(m)("settings.keysNoAuthWarning")),1)]),_:1})):K("",!0),d(t).loading?(h(),w("div",zI,[Q(R,{circle:"",label:d(m)("settings.keysLoading")},null,8,["label"])])):(h(),ke(S,{key:2,columns:u.value,rows:d(t).tokens,"empty-text":d(m)("settings.keysEmpty")},{"cell-token_prefix":fe(({row:M})=>[f("code",null,k(M.token_prefix),1)]),"cell-created_at":fe(({row:M})=>[ae(k(g(M.created_at)),1)]),"cell-last_used_at":fe(({row:M})=>[ae(k(g(M.last_used_at)||d(m)("common.never")),1)]),"cell-actions":fe(({row:M})=>[Q(N,{icon:"ph ph-trash",label:d(m)("common.revoke"),onClick:O=>p(M.id,M.name)},null,8,["label","onClick"])]),_:1},8,["columns","rows","empty-text"])),Q(MI,{open:i.value,creating:d(t).creating,onClose:_[0]||(_[0]=M=>i.value=!1),onSubmit:c},null,8,["open","creating"]),Q(BI,{open:o.value,token:r.value,onClose:_[1]||(_[1]=M=>o.value=!1)},null,8,["open","token"])])}}},qI=We(KI,[["__scopeId","data-v-ae70e1f9"]]),VI={class:"account-panel"},WI={class:"account-language"},YI={class:"account-language-header"},jI={class:"account-language-title"},ZI={class:"account-language-description"},XI={__name:"AccountPanel",setup(e){const t=ls(),n=Mn(),s=F(!1),a=W(()=>!t.isNoAuthMode&&t.user!==null),i={en:"profile.langEn",uk:"profile.langUk",ru:"profile.langRu"},o=W(()=>{const c=Db.map(p=>({value:p,label:m(i[p])}));return a.value?[{value:"",label:m("profile.languageAuto")},...c]:c}),r=W(()=>a.value?t.user.locale??"":Lt.value),u=W(()=>m(a.value?"settings.languageDescription":"settings.languageDescriptionOpen"));async function l(c){if(!a.value){Pb(c),oo(c),n.success({title:m("toast.languageSaved")});return}s.value=!0;try{const p=await $v({locale:c||"auto"});t.user=p,oo(p.locale_effective),n.success({title:m("toast.languageSaved")})}catch(p){n.error({title:m("common.error"),text:p.message})}finally{s.value=!1}}return(c,p)=>(h(),w("div",VI,[f("div",WI,[f("div",YI,[f("h2",jI,k(d(m)("settings.languageToolbar")),1)]),f("p",ZI,k(u.value),1),Q(d(co),{class:"language-select","aria-label":d(m)("settings.languageToolbar"),"model-value":r.value,options:o.value,disabled:s.value,"onUpdate:modelValue":l},null,8,["aria-label","model-value","options","disabled"])]),Q(qI)]))}},QI=We(XI,[["__scopeId","data-v-d13b8cf7"]]),JI={class:"notifications-panel"},eO={class:"notifications-title"},tO={class:"notifications-description"},nO={key:1,class:"notifications-row"},sO={class:"notifications-row-text"},aO={class:"notifications-row-title"},iO={class:"notifications-row-status"},oO={__name:"NotificationSettingsPanel",setup(e){const{supported:t,bridgeMode:n,permission:s,subscribed:a,busy:i,enable:o,disable:r,syncState:u}=Np(),l=Mn();$t(()=>{u()});async function c(p){try{if(p){const g=await o();g===!1&&s.value==="denied"?l.error({title:m("toast.notificationsDenied"),text:m(n.value?"toast.notificationsAllowApp":"toast.notificationsAllowBrowser")}):g===!1&&l.error({title:m("toast.notificationsUnavailable"),text:m("toast.notificationsUnavailableText")})}else await r()}catch(g){l.error({title:m("toast.notificationsFailed"),text:g.message})}}return(p,g)=>{const b=Qe("GnAlert"),_=Qe("GnSwitch");return h(),w("div",JI,[f("h2",eO,k(d(m)("settings.notificationsTitle")),1),f("p",tO,[d(n)?(h(),w(ce,{key:0},[ae(k(d(m)("settings.notificationsBridgeText")),1)],64)):(h(),w(ce,{key:1},[ae(k(d(m)("settings.notificationsWebText")),1)],64))]),d(t)?(h(),w("div",nO,[f("div",sO,[f("div",aO,k(d(m)("settings.notificationsRowTitle")),1),f("div",iO,[d(a)?(h(),w(ce,{key:0},[d(n)?(h(),w(ce,{key:0},[ae(k(d(m)("settings.notificationsOnBackground")),1)],64)):(h(),w(ce,{key:1},[ae(k(d(m)("settings.notificationsOn")),1)],64))],64)):d(s)==="denied"?(h(),w(ce,{key:1},[ae(k(d(m)(d(n)?"settings.notificationsBlockedApp":"settings.notificationsBlockedBrowser")),1)],64)):(h(),w(ce,{key:2},[ae(k(d(m)("settings.notificationsOff")),1)],64))])]),Q(_,{"model-value":d(a),disabled:d(i)||d(s)==="denied","onUpdate:modelValue":c},null,8,["model-value","disabled"])])):(h(),ke(b,{key:0,variant:"info",class:"notifications-unsupported"},{default:fe(()=>[g[0]||(g[0]=f("i",{class:"ph ph-info"},null,-1)),f("span",null,k(d(m)("settings.notificationsUnsupported")),1)]),_:1}))])}}},rO=We(oO,[["__scopeId","data-v-b74fdfda"]]),lO=Es("synapseReactions",()=>{const e=F(null),t=F([]),n=F([]),s=F(!1),a=F(!1);async function i(){s.value=!0;try{e.value=await rb()}finally{s.value=!1}}async function o(l=20){const c=await mu(l,"reaction");t.value=c.items||[]}async function r(l=20){const c=await mu(l,"dispatcher");n.value=c.items||[]}async function u(l){a.value=!0;try{e.value=await lb({...e.value||{},...l})}finally{a.value=!1}}return{settings:e,versions:t,dispatcherVersions:n,loading:s,saving:a,fetchSettings:i,fetchVersions:o,fetchDispatcherVersions:r,save:u}}),cO=["data-doc"],uO={class:"reactions-row-title"},dO={class:"reactions-row-status"},fO={class:"reactions-instructions-actions"},pO={key:0,class:"reactions-history"},gO={class:"reactions-history-title"},mO={class:"reactions-history-meta"},hO={class:"reactions-history-text"},vO={__name:"SynapseInstructionsField",props:{doc:{type:String,required:!0},title:{type:String,required:!0},note:{type:String,required:!0},placeholder:{type:String,default:""},saveLabel:{type:String,required:!0},modelValue:{type:String,default:""},versions:{type:Array,default:()=>[]},dirty:{type:Boolean,default:!1},saving:{type:Boolean,default:!1}},emits:["update:modelValue","save"],setup(e){function t(n){const s=new Date(n);return s.toLocaleDateString(Lt.value,{month:"short",day:"numeric"})+" "+s.toLocaleTimeString(Lt.value,{hour:"2-digit",minute:"2-digit"})}return(n,s)=>(h(),w("div",{class:"reactions-instructions","data-doc":e.doc},[f("div",uO,k(e.title),1),f("div",dO,k(e.note),1),Q(d(ic),{"model-value":e.modelValue,rows:6,placeholder:e.placeholder,class:"reactions-instructions-textarea","onUpdate:modelValue":s[0]||(s[0]=a=>n.$emit("update:modelValue",a))},null,8,["model-value","placeholder"]),f("div",fO,[Q(d(it),{variant:"primary",disabled:!e.dirty||e.saving,onClick:s[1]||(s[1]=a=>n.$emit("save"))},{default:fe(()=>[ae(k(e.saveLabel),1)]),_:1},8,["disabled"])]),e.versions.length?(h(),w("div",pO,[f("div",gO,k(d(m)("settings.reactionsHistory")),1),(h(!0),w(ce,null,Je(e.versions,a=>(h(),w("div",{key:a.created_at+":"+a.content.slice(0,24),class:"reactions-history-item"},[f("span",mO,[f("i",{class:Ae(["ph",a.edited_by==="navi"?"ph-robot":"ph-user"])},null,2),ae(" "+k(a.edited_by==="navi"?"Navi":d(m)("common.you"))+" · "+k(t(a.created_at))+" ",1),a.reason?(h(),w(ce,{key:0},[ae(" · "+k(a.reason),1)],64)):K("",!0)]),f("div",hO,k(a.content),1)]))),128))])):K("",!0)],8,cO))}},Bd=We(vO,[["__scopeId","data-v-e248ff58"]]),bO={class:"reactions-panel"},_O={class:"reactions-title"},yO={class:"reactions-description"},kO={key:1,class:"reactions-loading"},wO={class:"reactions-row"},SO={class:"reactions-row-text"},EO={class:"reactions-row-title"},TO={class:"reactions-row-status"},AO={class:"reactions-row"},xO={class:"reactions-row-text"},NO={class:"reactions-row-title"},CO={class:"reactions-row-status"},RO={class:"reactions-row"},IO={class:"reactions-row-text"},OO={class:"reactions-row-title"},MO={class:"reactions-row-status"},LO={class:"reactions-row reactions-row--stacked"},$O={class:"reactions-row-text"},DO={class:"reactions-row-title"},PO={class:"reactions-row-status"},BO={__name:"SynapseReactionsPanel",setup(e){const t=W(()=>[{value:"always",label:m("common.always")},{value:"important",label:m("settings.reactionsOnlyFailures")},{value:"never",label:m("common.never")}]),n=W(()=>{var R,N;return[{value:"app",label:m("settings.reactionsTargetApp")},{value:"app_synapse",label:m("settings.reactionsTargetAppSynapse"),disabled:!((R=o.value)!=null&&R.source_ready)},{value:"synapse",label:m("settings.reactionsTargetSynapse"),disabled:!((N=o.value)!=null&&N.source_ready)}]}),s=W(()=>({always:m("settings.reactionsPushAlways"),important:m("settings.reactionsPushFailures"),never:m("settings.reactionsPushNever")})),a=lO(),i=Mn(),o=W(()=>a.settings),r=F(!1),u=F(""),l=F(""),c=F(0),p=W(()=>o.value!==null&&u.value!==o.value.instructions),g=W(()=>o.value!==null&&l.value!==o.value.dispatcher_instructions);Ge(o,R=>{R&&(u.value!==R.instructions&&(u.value=R.instructions),l.value!==R.dispatcher_instructions&&(l.value=R.dispatcher_instructions),c.value=R.reaction_session_ttl_minutes)},{immediate:!0}),$t(async()=>{r.value=!0;try{await a.fetchSettings(),await Promise.all([a.fetchVersions(),a.fetchDispatcherVersions()])}catch(R){i.error({title:m("toast.reactionsLoadFailed"),text:R.message})}});async function b(R){try{await a.save(R)}catch(N){i.error({title:m("toast.saveFailed"),text:N.message})}}async function _(){try{await a.save({instructions:u.value}),await a.fetchVersions(),i.success({title:m("toast.instructionsSaved")})}catch(R){i.error({title:m("toast.instructionsFailed"),text:R.message})}}async function y(){try{await a.save({dispatcher_instructions:l.value}),await a.fetchDispatcherVersions(),i.success({title:m("toast.instructionsSaved")})}catch(R){i.error({title:m("toast.instructionsFailed"),text:R.message})}}async function D(){var S,M;const R=Number(c.value);if(!Number.isFinite(R)||R<0){c.value=((S=o.value)==null?void 0:S.reaction_session_ttl_minutes)??0;return}const N=Math.min(Math.round(R),43200);N!==((M=o.value)==null?void 0:M.reaction_session_ttl_minutes)&&(c.value=N,await b({reaction_session_ttl_minutes:N}))}return(R,N)=>{var S;return h(),w("div",bO,[f("h2",_O,k(d(m)("settings.reactionsTitle")),1),f("p",yO,k(d(m)("settings.reactionsDescription")),1),r.value&&!((S=o.value)!=null&&S.source_ready)?(h(),ke(d(Vn),{key:0,variant:"info",class:"reactions-alert"},{default:fe(()=>[N[6]||(N[6]=f("i",{class:"ph ph-info"},null,-1)),f("span",null,k(d(m)("settings.reactionsNotConfigured")),1)]),_:1})):K("",!0),d(a).loading&&!o.value?(h(),w("div",kO,[Q(d(Qs),{circle:"",label:d(m)("settings.reactionsLoading")},null,8,["label"])])):o.value?(h(),w(ce,{key:2},[f("div",wO,[f("div",SO,[f("div",EO,k(d(m)("settings.reactionsEnable")),1),f("div",TO,k(d(m)(o.value.reactions_enabled?"settings.reactionsOn":"settings.reactionsOff")),1)]),Q(d(qp),{"model-value":o.value.reactions_enabled,disabled:d(a).saving,"onUpdate:modelValue":N[0]||(N[0]=M=>b({reactions_enabled:M}))},null,8,["model-value","disabled"])]),f("div",AO,[f("div",xO,[f("div",NO,k(d(m)("settings.reactionsNotify")),1),f("div",CO,k(s.value[o.value.completion_notify]),1)]),Q(d(El),{"model-value":o.value.completion_notify,name:"completion-notify",options:t.value,"onUpdate:modelValue":N[1]||(N[1]=M=>b({completion_notify:M}))},null,8,["model-value","options"])]),f("div",RO,[f("div",IO,[f("div",OO,k(d(m)("settings.reactionsTarget")),1),f("div",MO,k(d(m)("settings.reactionsTargetNote")),1)]),Q(d(El),{"model-value":o.value.push_target,name:"push-target",options:n.value,"onUpdate:modelValue":N[2]||(N[2]=M=>b({push_target:M}))},null,8,["model-value","options"])]),f("div",LO,[f("div",$O,[f("div",DO,k(d(m)("settings.reactionsSessionTtl")),1),f("div",PO,k(d(m)("settings.reactionsSessionTtlNote")),1)]),Q(d(Xs),{"model-value":c.value,type:"number",min:"0",max:"43200",step:"60",class:"reactions-ttl-input",help:d(m)("settings.reactionsSessionTtlUnit"),"onUpdate:modelValue":N[3]||(N[3]=M=>c.value=M),onChange:D},null,8,["model-value","help"])]),Q(Bd,{doc:"reaction",title:d(m)("settings.reactionsInstructions"),note:d(m)("settings.reactionsInstructionsNote"),placeholder:d(m)("settings.reactionsInstructionsPlaceholder"),"save-label":d(m)("settings.reactionsInstructionsSave"),"model-value":u.value,versions:d(a).versions,dirty:p.value,saving:d(a).saving,"onUpdate:modelValue":N[4]||(N[4]=M=>u.value=M),onSave:_},null,8,["title","note","placeholder","save-label","model-value","versions","dirty","saving"]),Q(Bd,{doc:"dispatcher",title:d(m)("settings.dispatcherInstructions"),note:d(m)("settings.dispatcherInstructionsNote"),placeholder:d(m)("settings.dispatcherInstructionsPlaceholder"),"save-label":d(m)("settings.dispatcherInstructionsSave"),"model-value":l.value,versions:d(a).dispatcherVersions,dirty:g.value,saving:d(a).saving,"onUpdate:modelValue":N[5]||(N[5]=M=>l.value=M),onSave:y},null,8,["title","note","placeholder","save-label","model-value","versions","dirty","saving"])],64)):K("",!0)])}}},FO=We(BO,[["__scopeId","data-v-bcaf624e"]]),UO=Es("synapseTargets",()=>{const e=F([]),t=F(!1),n=F(!1);async function s(){t.value=!0;try{const o=await ab();e.value=o.items||[]}finally{t.value=!1}}async function a(o,r){n.value=!0;try{const u=await ib(o,r);return e.value.unshift({id:u.id,token_ref:u.token_ref,created_at:u.created_at}),u}finally{n.value=!1}}async function i(o){await ob(o),e.value=e.value.filter(r=>r.id!==o)}return{targets:e,loading:t,creating:n,fetchTargets:s,createTarget:a,revokeTarget:i}}),GO={class:"create-target-body"},HO={class:"create-target-hint"},zO={__name:"CreateTargetModal",props:{open:Boolean,creating:Boolean},emits:["close","submit"],setup(e,{emit:t}){const n=e,s=t,a=F(""),i=F("");Ge(()=>n.open,r=>{r&&(a.value="",i.value="")});function o(){const r=a.value.trim(),u=i.value.trim();!r||u.length<16||s("submit",r,u)}return(r,u)=>(h(),ke(d(Ia),{open:n.open,title:d(m)("settings.synapseTargetAddTitle"),"onUpdate:open":u[3]||(u[3]=l=>s("close"))},{actions:fe(()=>[Q(d(it),{variant:"secondary",onClick:u[2]||(u[2]=l=>s("close")),disabled:n.creating},{default:fe(()=>[ae(k(d(m)("common.cancel")),1)]),_:1},8,["disabled"]),Q(d(it),{variant:"primary",loading:n.creating,onClick:o},{default:fe(()=>[ae(k(d(m)("common.add")),1)]),_:1},8,["loading"])]),default:fe(()=>[f("div",GO,[Q(d(Xs),{modelValue:a.value,"onUpdate:modelValue":u[0]||(u[0]=l=>a.value=l),label:d(m)("settings.synapseTargetColRef"),placeholder:d(m)("settings.synapseTargetRefPlaceholder"),disabled:n.creating,onKeydown:Wn(o,["enter"])},null,8,["modelValue","label","placeholder","disabled"]),Q(d(Xs),{modelValue:i.value,"onUpdate:modelValue":u[1]||(u[1]=l=>i.value=l),label:d(m)("settings.synapseTargetSecret"),placeholder:d(m)("settings.synapseTargetSecretPlaceholder"),disabled:n.creating,onKeydown:Wn(o,["enter"])},null,8,["modelValue","label","placeholder","disabled"]),f("p",HO,[ae(k(d(m)("settings.synapseTargetHintBefore"))+" ",1),u[4]||(u[4]=f("code",null,"POST /webhooks/synapse",-1)),ae(" "+k(d(m)("settings.synapseTargetHintAfter")),1)])])]),_:1},8,["open","title"]))}},KO=We(zO,[["__scopeId","data-v-a46fb717"]]),qO={class:"synapse-panel"},VO={class:"synapse-header"},WO={class:"synapse-title"},YO={class:"synapse-description"},jO={key:0,class:"synapse-loading"},ZO={__name:"SynapseTargetsPanel",setup(e){const t=UO(),n=Na(),s=Mn(),a=F(!1),i=W(()=>[{key:"token_ref",label:m("settings.synapseTargetColRef")},{key:"created_at",label:m("col.created")},{key:"actions",label:""}]);$t(()=>{t.fetchTargets()});async function o(l,c){try{await t.createTarget(l,c),a.value=!1,s.success({title:m("toast.synapseTargetAdded")})}catch(p){s.error({title:m("toast.synapseTargetAddFailed"),text:p.message})}}async function r(l,c){if(await n(m("confirm.revokeTarget",{target:c})))try{await t.revokeTarget(l),s.success({title:m("toast.synapseTargetRevoked")})}catch(g){s.error({title:m("toast.synapseTargetRevokeFailed"),text:g.message})}}function u(l){return l?new Date(l).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"}):null}return(l,c)=>(h(),w("div",qO,[f("div",VO,[f("h2",WO,k(d(m)("settings.synapseTargetsTitle")),1),Q(d(it),{variant:"primary",icon:"ph ph-plus",onClick:c[0]||(c[0]=p=>a.value=!0)},{default:fe(()=>[ae(k(d(m)("settings.synapseTargetAdd")),1)]),_:1})]),f("p",YO,k(d(m)("settings.synapseTargetsDescription")),1),d(t).loading?(h(),w("div",jO,[Q(d(Qs),{circle:"",label:d(m)("settings.synapseTargetsLoading")},null,8,["label"])])):(h(),ke(d(Vp),{key:1,columns:i.value,rows:d(t).targets,"empty-text":d(m)("settings.synapseTargetsEmpty")},{"cell-created_at":fe(({row:p})=>[ae(k(u(p.created_at)),1)]),"cell-actions":fe(({row:p})=>[Q(d(Kn),{icon:"ph ph-trash",label:d(m)("common.revoke"),onClick:g=>r(p.id,p.token_ref)},null,8,["label","onClick"])]),_:1},8,["columns","rows","empty-text"])),Q(KO,{open:a.value,creating:d(t).creating,onClose:c[1]||(c[1]=p=>a.value=!1),onSubmit:o},null,8,["open","creating"])]))}},XO=We(ZO,[["__scopeId","data-v-fa4b73ef"]]),$l={home:"settings.skillsAreaHome",infrastructure:"settings.skillsAreaInfrastructure",workflows:"settings.skillsAreaWorkflows",general:"settings.skillsAreaGeneral"};function Fd(e){return m($l[e]||$l.general)}const QO={skill:`--- -kind: skill -name: -description: -area: general -tags: [] -triggers: [] ---- - -`,protocol:`--- -kind: protocol -name: -description: -area: general -tags: [] -triggers: [] -preconditions: [] -steps: - - -post_checks: - - -on_deviation: -on_blocked: -on_already_done: ---- - -`};function Ya(e){const t=String((e==null?void 0:e.message)||e),n=/→\s*\d+:\s*([\s\S]*)$/.exec(t),s=n?n[1]:t;try{return JSON.parse(s).detail||s}catch{return s}}function JO({getKind:e,reload:t,loadError:n}){const s=ls(),a=Na(),i=Mn(),o=F(null),r=F(null),u=F(!1),l=F(!1),c=F(""),p=F("personal"),g=F(!1),b=F(""),_=F([]),y=F(!1),D=W(()=>l.value||o.value!==null||u.value),R=W(()=>{var P;return l.value&&!o.value?!0:!!((P=o.value)!=null&&P.can_edit)}),N=W(()=>[{value:"personal",label:m("settings.skillsPersonal")},{value:"shared",label:m("settings.skillsShared")}]);async function S(P){if(!g.value){r.value=P,l.value=!1,y.value=!1,b.value="",o.value=null,_.value=[],u.value=!0;try{const z=await vb(P);if(r.value!==P)return;o.value=z,c.value=z.content,p.value=z.visibility}catch(z){r.value===P&&(n.value=Ya(z))}finally{r.value===P&&(u.value=!1)}}}function M(){o.value=null,r.value=null,u.value=!1,l.value=!0,c.value=QO[e()],p.value="personal",_.value=[],y.value=!1,b.value=""}function O(){o.value&&(c.value=o.value.content,p.value=o.value.visibility,b.value="",l.value=!0)}function B(){o.value?L():$()}function L(){var P,z;c.value=((P=o.value)==null?void 0:P.content)||"",p.value=((z=o.value)==null?void 0:z.visibility)||"personal",b.value="",l.value=!1}function $(){o.value=null,r.value=null,u.value=!1,l.value=!1,c.value="",b.value="",_.value=[],y.value=!1}async function v(){g.value=!0,b.value="";try{if(o.value){const P={content:c.value};s.isAdmin&&p.value!==o.value.visibility&&(P.visibility=p.value);const z=await _b(o.value.id,P);o.value=z,c.value=z.content,p.value=z.visibility,i.success({title:m("settings.skillsSaved")})}else{const P=await bb({content:c.value,visibility:s.isAdmin?p.value:"personal"});o.value=P,r.value=P.id,c.value=P.content,p.value=P.visibility,i.success({title:m("settings.skillsCreated")})}l.value=!1,await t()}catch(P){b.value=Ya(P)}finally{g.value=!1}}async function E(){if(!(!o.value||!await a(m("settings.skillsDeleteConfirm",{name:o.value.name}))))try{await yb(o.value.id),i.success({title:m("settings.skillsDeleted")}),$(),await t()}catch(z){i.error({title:m("common.error"),text:Ya(z)})}}async function x(){if(y.value=!y.value,!(!y.value||_.value.length||!o.value))try{const P=await kb(o.value.id);_.value=P.items||[]}catch(P){b.value=Ya(P)}}function A(P){return P?new Date(P).toLocaleString(Lt.value,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}return{authStore:s,entry:o,selectedId:r,detailLoading:u,editing:l,draft:c,visibility:p,saving:g,saveError:b,versions:_,showHistory:y,detailOpen:D,canEdit:R,visibilityOptions:N,select:S,startCreate:M,beginEdit:O,cancel:B,reset:$,save:v,remove:E,toggleHistory:x,formatWhen:A}}function eM({getKind:e,items:t}){const n=W(()=>e()==="protocol"),s=W(()=>m(n.value?"settings.tabProtocols":"settings.tabSkills")),a=W(()=>m(n.value?"settings.skillsHintProtocols":"settings.skillsHintSkills")),i=W(()=>m(n.value?"settings.skillsAddProtocol":"settings.skillsAddSkill")),o=W(()=>m(n.value?"settings.skillsEmptyProtocols":"settings.skillsEmptySkills")),r=W(()=>m(n.value?"settings.skillsCountProtocols":"settings.skillsCountSkills",{n:t.value.length})),u=W(()=>m(n.value?"settings.skillsNewProtocol":"settings.skillsNewSkill"));return{isProtocol:n,title:s,hint:a,addLabel:i,emptyLabel:o,countLabel:r,newTitle:u}}function tM({getKind:e}){const t=F([]),n=F(!1),s=F(""),a=F(""),i=F(""),o=W(()=>[{value:"",label:m("settings.skillsFilterAreaAll")},...Object.entries($l).map(([l,c])=>({value:l,label:m(c)}))]);let r=null;Ge([a,i],()=>{clearTimeout(r),r=setTimeout(u,250)}),bn(()=>clearTimeout(r));async function u(){n.value=!0,s.value="";try{const l=await hb({q:a.value.trim()||null,area:i.value||null,kind:e()});t.value=l.items||[]}catch(l){s.value=Ya(l)}finally{n.value=!1}}return{items:t,loading:n,loadError:s,query:a,areaFilter:i,areaOptions:o,load:u}}const nM={class:"catalog-panel"},sM={class:"catalog-header"},aM={class:"catalog-title"},iM={class:"catalog-hint"},oM=["aria-label"],rM={class:"catalog-list-head"},lM={class:"catalog-filters"},cM={key:0,class:"catalog-count"},uM={class:"catalog-list"},dM={key:0,class:"catalog-loading"},fM={key:1,class:"catalog-empty"},pM=["onClick"],gM={class:"catalog-row-main"},mM={class:"catalog-row-head"},hM={class:"catalog-row-name"},vM={class:"catalog-row-version"},bM={class:"catalog-row-meta"},_M={key:0,class:"catalog-row-description"},yM={class:"catalog-pane catalog-detail"},kM={class:"catalog-detail-head"},wM={class:"catalog-detail-title"},SM={key:0,class:"catalog-detail-version"},EM={class:"catalog-detail-body"},TM={class:"catalog-editor-actions"},AM={key:0,class:"catalog-visibility"},xM={class:"catalog-editor-buttons"},NM={class:"catalog-detail-head"},CM={class:"catalog-detail-title"},RM={class:"catalog-detail-version"},IM={class:"catalog-detail-actions"},OM={class:"catalog-detail-body"},MM={key:0,class:"catalog-description"},LM={class:"catalog-meta"},$M={key:0,class:"catalog-readonly"},DM={key:1},PM={key:2,class:"catalog-tags"},BM={class:"catalog-raw"},FM={class:"catalog-history"},UM={key:0,class:"catalog-history-list"},GM={key:0,class:"catalog-history-empty"},HM={class:"catalog-history-meta"},zM={class:"catalog-history-text"},KM={key:2,class:"catalog-detail-body catalog-detail-loading"},qM={key:3,class:"catalog-detail-body"},VM={class:"catalog-placeholder"},WM={__name:"SkillsCatalogPanel",props:{kind:{type:String,default:"skill",validator:e=>e==="skill"||e==="protocol"}},setup(e){const t=e,n=()=>t.kind,{items:s,loading:a,loadError:i,query:o,areaFilter:r,areaOptions:u,load:l}=tM({getKind:n}),{title:c,hint:p,addLabel:g,emptyLabel:b,countLabel:_,newTitle:y}=eM({getKind:n,items:s}),{authStore:D,entry:R,selectedId:N,detailLoading:S,editing:M,draft:O,visibility:B,saving:L,saveError:$,versions:v,showHistory:E,detailOpen:x,canEdit:A,visibilityOptions:P,select:z,startCreate:V,beginEdit:Y,cancel:te,reset:q,save:j,remove:he,toggleHistory:Oe,formatWhen:Pe}=JO({getKind:n,reload:l,loadError:i});return Ge(()=>t.kind,()=>{q(),l()}),$t(l),(nt,He)=>{var Be;return h(),w("div",nM,[f("header",sM,[f("h2",aM,k(d(c)),1),f("p",iM,k(d(p)),1)]),d(i)?(h(),ke(d(Vn),{key:0,variant:"error",class:"catalog-alert"},{default:fe(()=>[ae(k(d(i)),1)]),_:1})):K("",!0),f("div",{class:Ae(["catalog-layout",{"is-detail-open":d(x)}])},[f("aside",{class:"catalog-pane catalog-list-pane","aria-label":d(m)("settings.skillsCatalog")},[f("div",rM,[Q(d(Kp),{modelValue:d(o),"onUpdate:modelValue":He[0]||(He[0]=X=>vt(o)?o.value=X:null),placeholder:d(m)("settings.skillsSearchHint"),"aria-label":d(m)("settings.skillsSearchLabel")},null,8,["modelValue","placeholder","aria-label"]),f("div",lM,[Q(d(co),{modelValue:d(r),"onUpdate:modelValue":He[1]||(He[1]=X=>vt(r)?r.value=X:null),class:"catalog-area","aria-label":d(m)("settings.skillsFilterArea"),options:d(u)},null,8,["modelValue","aria-label","options"]),Q(d(it),{variant:"primary",size:"sm",icon:"ph ph-plus",class:"catalog-add",onClick:d(V)},{default:fe(()=>[ae(k(d(g)),1)]),_:1},8,["onClick"])]),d(a)?K("",!0):(h(),w("p",cM,k(d(_)),1))]),f("div",uM,[d(a)?(h(),w("div",dM,[Q(d(Qs),{circle:"",label:d(m)("settings.skillsLoading")},null,8,["label"])])):d(s).length?K("",!0):(h(),w("div",fM,[He[6]||(He[6]=f("i",{class:"ph ph-notebook","aria-hidden":"true"},null,-1)),f("p",null,k(d(b)),1)])),(h(!0),w(ce,null,Je(d(s),X=>(h(),w("button",{key:X.id,type:"button",class:Ae(["catalog-row",{"is-active":X.id===d(N)}]),onClick:ye=>d(z)(X.id)},[f("span",gM,[f("span",mM,[f("span",hM,k(X.name),1),f("span",vM,"v"+k(X.version),1)]),f("span",bM,[ae(k(d(Fd)(X.area))+" ",1),X.visibility==="shared"?(h(),w(ce,{key:0},[ae(" · "+k(d(m)("settings.skillsShared")),1)],64)):K("",!0)]),X.description?(h(),w("span",_M,k(X.description),1)):K("",!0)]),He[7]||(He[7]=f("i",{class:"ph ph-caret-right catalog-row-open","aria-hidden":"true"},null,-1))],10,pM))),128))])],8,oM),f("section",yM,[f("button",{type:"button",class:"catalog-back",onClick:He[2]||(He[2]=(...X)=>d(q)&&d(q)(...X))},[He[8]||(He[8]=f("i",{class:"ph ph-arrow-left","aria-hidden":"true"},null,-1)),f("span",null,k(d(m)("settings.skillsBack")),1)]),d(M)?(h(),w(ce,{key:0},[f("header",kM,[f("div",wM,[f("h3",null,k(d(R)?d(R).name:d(y)),1),d(R)?(h(),w("span",SM,"v"+k(d(R).version),1)):K("",!0)])]),f("div",EM,[d($)?(h(),ke(d(Vn),{key:0,variant:"error",class:"catalog-save-error"},{default:fe(()=>[ae(k(d($)),1)]),_:1})):K("",!0),Q(d(ic),{modelValue:d(O),"onUpdate:modelValue":He[3]||(He[3]=X=>vt(O)?O.value=X:null),class:"catalog-textarea",rows:18,disabled:!d(A)||d(L),placeholder:d(m)("settings.skillsEditorPlaceholder"),"aria-label":d(m)("settings.skillsEditorLabel")},null,8,["modelValue","disabled","placeholder","aria-label"]),f("div",TM,[d(D).isAdmin&&d(A)?(h(),w("div",AM,[Q(d(co),{modelValue:d(B),"onUpdate:modelValue":He[4]||(He[4]=X=>vt(B)?B.value=X:null),"aria-label":d(m)("settings.skillsVisibility"),options:d(P)},null,8,["modelValue","aria-label","options"])])):K("",!0),f("div",xM,[Q(d(it),{variant:"primary",disabled:!d(A)||d(L)||!d(O).trim(),onClick:d(j)},{default:fe(()=>[ae(k(d(m)("common.save")),1)]),_:1},8,["disabled","onClick"]),Q(d(it),{variant:"ghost",disabled:d(L),onClick:d(te)},{default:fe(()=>[ae(k(d(m)("common.cancel")),1)]),_:1},8,["disabled","onClick"]),d(R)&&d(R).can_edit?(h(),ke(d(it),{key:0,variant:"ghost",icon:"ph ph-trash",disabled:d(L),onClick:d(he)},{default:fe(()=>[ae(k(d(m)("common.delete")),1)]),_:1},8,["disabled","onClick"])):K("",!0)])])])],64)):d(R)?(h(),w(ce,{key:1},[f("header",NM,[f("div",CM,[f("h3",null,k(d(R).name),1),f("span",RM,"v"+k(d(R).version),1)]),f("div",IM,[d(R).can_edit?(h(),ke(d(it),{key:0,variant:"secondary",size:"sm",icon:"ph ph-pencil-simple",class:"catalog-edit-btn",onClick:d(Y)},{default:fe(()=>[ae(k(d(m)("settings.skillsEdit")),1)]),_:1},8,["onClick"])):K("",!0),d(R).can_edit?(h(),ke(d(Kn),{key:1,icon:"ph ph-trash",label:d(m)("common.delete"),size:"sm",class:"catalog-delete-btn",onClick:d(he)},null,8,["label","onClick"])):K("",!0)])]),f("div",OM,[d(R).description?(h(),w("p",MM,k(d(R).description),1)):K("",!0),f("div",LM,[f("span",null,k(d(Fd)(d(R).area)),1),f("span",null,k(d(R).visibility==="shared"?d(m)("settings.skillsShared"):d(m)("settings.skillsPersonal")),1),d(R).can_edit?K("",!0):(h(),w("span",$M,k(d(m)("settings.skillsReadOnly")),1)),d(R).updated_at?(h(),w("span",DM,k(d(m)("settings.skillsUpdated",{when:d(Pe)(d(R).updated_at)})),1)):K("",!0),(Be=d(R).tags)!=null&&Be.length?(h(),w("span",PM,[He[9]||(He[9]=f("i",{class:"ph ph-tag","aria-hidden":"true"},null,-1)),ae(" "+k(d(R).tags.join(", ")),1)])):K("",!0)]),d(R).document?(h(),ke(Rg,{key:1,doc:d(R).document,class:"catalog-document"},null,8,["doc"])):(h(),w(ce,{key:2},[Q(d(Vn),{variant:"warning",class:"catalog-parse-error"},{default:fe(()=>[ae(k(d(m)("settings.skillsParseFailed")),1)]),_:1}),f("pre",BM,k(d(R).content),1)],64)),f("div",FM,[f("button",{type:"button",class:"catalog-history-toggle",onClick:He[5]||(He[5]=(...X)=>d(Oe)&&d(Oe)(...X))},[f("i",{class:Ae(["ph",d(E)?"ph-caret-down":"ph-caret-right"]),"aria-hidden":"true"},null,2),ae(" "+k(d(m)("settings.skillsHistory")),1)]),d(E)?(h(),w("div",UM,[d(v).length?K("",!0):(h(),w("div",GM,k(d(m)("settings.skillsHistoryEmpty")),1)),(h(!0),w(ce,null,Je(d(v),X=>(h(),w("div",{key:X.version,class:"catalog-history-item"},[f("div",HM,[ae(" v"+k(X.version)+" · "+k(X.edited_by||d(m)("settings.skillsUnknownEditor"))+" · "+k(d(Pe)(X.created_at))+" ",1),X.reason?(h(),w(ce,{key:0},[ae(" · "+k(X.reason),1)],64)):K("",!0)]),f("pre",zM,k(X.content),1)]))),128))])):K("",!0)])])],64)):d(S)?(h(),w("div",KM,[Q(d(Qs),{circle:"",label:d(m)("settings.skillsLoading")},null,8,["label"])])):(h(),w("div",qM,[f("div",VM,[He[10]||(He[10]=f("i",{class:"ph ph-notebook","aria-hidden":"true"},null,-1)),f("p",null,k(d(m)("settings.skillsPlaceholder")),1)])]))])],2)])}}},Ud=We(WM,[["__scopeId","data-v-70dfa94e"]]),YM=Es("mcpKeys",()=>{const e=F([]),t=F(!1),n=F(null);async function s(){t.value=!0;try{const o=await cb();e.value=o.items||[]}finally{t.value=!1}}async function a(o,r){n.value=o;try{const u=await ub(o,r),l=e.value.find(c=>c.server_name===o);l&&(l.has_key=!0,l.updated_at=u.updated_at)}finally{n.value=null}}async function i(o){n.value=o;try{await db(o);const r=e.value.find(u=>u.server_name===o);r&&(r.has_key=!1,r.updated_at=null)}finally{n.value=null}}return{servers:e,loading:t,savingServer:n,fetchServers:s,saveKey:a,resetKey:i}}),jM={class:"mcp-keys-panel"},ZM={class:"mcp-keys-header"},XM={class:"mcp-keys-title"},QM={class:"mcp-keys-description"},JM={key:0,class:"mcp-keys-loading"},eL={key:1,class:"mcp-keys-empty"},tL={key:2,class:"mcp-keys-rows"},nL={class:"mcp-keys-info"},sL={class:"mcp-keys-server"},aL={class:"mcp-keys-where"},iL={key:0,class:"mcp-keys-slot"},oL={key:1,class:"mcp-keys-noslot"},rL={class:"mcp-keys-actions"},lL={__name:"McpKeysPanel",setup(e){const t=YM(),n=ls(),s=Na(),a=Mn(),i=js({});$t(()=>{t.fetchServers()});function o(c){return c.key_type==="header"?`${c.key_location} header${c.prefix?` (${c.prefix}…)`:""}`:`${c.key_location} env`}async function r(c){const p=(i[c.server_name]||"").trim();if(p)try{await t.saveKey(c.server_name,p),i[c.server_name]="",a.success({title:m("toast.mcpKeySaved",{server:c.server_name})})}catch(g){a.error({title:m("toast.mcpKeySaveFailed"),text:g.message})}}async function u(c){if(await s(m(n.isAdmin?"confirm.mcpResetAdmin":"confirm.mcpReset",{server:c.server_name})))try{await t.resetKey(c.server_name),i[c.server_name]="",a.success({title:m("toast.mcpKeyReset",{server:c.server_name})})}catch(g){a.error({title:m("toast.mcpKeyResetFailed"),text:g.message})}}function l(c){return new Date(c).toLocaleDateString(Lt.value,{year:"numeric",month:"short",day:"numeric"})}return(c,p)=>(h(),w("div",jM,[f("div",ZM,[f("h2",XM,k(d(m)("settings.mcpTitle")),1)]),f("p",QM,[d(n).isAdmin?(h(),w(ce,{key:0},[ae(k(d(m)("settings.mcpDescriptionAdmin")),1)],64)):(h(),w(ce,{key:1},[ae(k(d(m)("settings.mcpDescription"))+" ",1),f("strong",null,k(d(m)("settings.mcpDescriptionStrong")),1),ae(" "+k(d(m)("settings.mcpDescriptionTail")),1)],64))]),d(t).loading?(h(),w("div",JM,[Q(d(Qs),{circle:"",label:d(m)("settings.mcpLoading")},null,8,["label"])])):d(t).servers.length?(h(),w("div",tL,[(h(!0),w(ce,null,Je(d(t).servers,g=>(h(),w("div",{key:g.server_name,class:Ae(["mcp-keys-row",{"is-keyless":!g.accepts_user_key}])},[f("div",nL,[f("div",sL,k(g.server_name),1),f("div",aL,[ae(k(g.transport)+" ",1),g.profiles.length?(h(),w(ce,{key:0},[ae(" · "+k(g.profiles.join(", ")),1)],64)):K("",!0)]),g.accepts_user_key?(h(),w("div",iL,[g.has_key?(h(),w(ce,{key:0},[ae(k(d(m)("settings.mcpKeySet",{date:l(g.updated_at),location:o(g)})),1)],64)):d(n).isAdmin?(h(),w(ce,{key:1},[ae(k(d(m)("settings.mcpKeyAbsentAdmin",{location:o(g)})),1)],64)):(h(),w(ce,{key:2},[ae(k(d(m)("settings.mcpKeyAbsent")),1)],64))])):(h(),w("div",oL,k(d(m)("settings.mcpNoSlot")),1))]),g.accepts_user_key?(h(),w(ce,{key:0},[Q(d(Xs),{modelValue:i[g.server_name],"onUpdate:modelValue":b=>i[g.server_name]=b,type:"password",placeholder:d(m)(g.has_key?"settings.mcpKeyPlaceholder":"settings.mcpKeyPlaceholderNew"),class:"mcp-keys-input",onKeyup:Wn(b=>r(g),["enter"])},null,8,["modelValue","onUpdate:modelValue","placeholder","onKeyup"]),f("div",rL,[Q(d(it),{variant:"primary",size:"sm",disabled:!i[g.server_name]||d(t).savingServer===g.server_name,onClick:b=>r(g)},{default:fe(()=>[ae(k(d(m)("common.save")),1)]),_:1},8,["disabled","onClick"]),g.has_key?(h(),ke(d(it),{key:0,variant:"ghost",size:"sm",disabled:d(t).savingServer===g.server_name,onClick:b=>u(g)},{default:fe(()=>[ae(k(d(m)("settings.mcpReset")),1)]),_:1},8,["disabled","onClick"])):K("",!0)])],64)):K("",!0)],2))),128))])):(h(),w("div",eL,[p[0]||(p[0]=f("i",{class:"ph ph-plugs-connected empty-icon","aria-hidden":"true"},null,-1)),f("p",null,k(d(m)("settings.mcpEmpty")),1)]))]))}},cL=We(lL,[["__scopeId","data-v-057ef768"]]),uL={class:"admin-tools-panel"},dL={class:"admin-tools-header"},fL={class:"admin-tools-title"},pL={class:"admin-tools-description"},gL={class:"admin-tools-line"},mL={class:"admin-tools-total"},hL={key:0,class:"admin-tools-line is-warning"},vL={key:1,class:"admin-tools-line is-error"},bL={key:2,class:"admin-tools-line"},_L={__name:"AdminToolsPanel",setup(e){const t=Mn(),n=F(!1),s=F(null);async function a(){n.value=!0;try{s.value=await fb(),s.value.ok?t.success({title:m("toast.toolsReloaded",{n:s.value.tools.length})}):t.error({title:m("toast.toolsReloadErrors")})}catch(i){t.error({title:m("toast.toolsReloadFailed"),text:i.message})}finally{n.value=!1}}return(i,o)=>(h(),w("div",uL,[f("div",dL,[f("h2",fL,k(d(m)("settings.adminToolsTitle")),1),Q(d(it),{variant:"primary",size:"sm",loading:n.value,onClick:a},{default:fe(()=>[ae(k(d(m)(n.value?"settings.adminToolsReloading":"settings.adminToolsReload")),1)]),_:1},8,["loading"])]),f("p",pL,[ae(k(d(m)("settings.adminToolsDescriptionBefore"))+" ",1),o[0]||(o[0]=f("code",null,"tools/",-1)),ae(" "+k(d(m)("settings.adminToolsDescriptionAfter")),1)]),s.value?(h(),w("div",{key:0,class:Ae(["admin-tools-report",{"has-problems":!s.value.ok}])},[f("div",gL,[o[1]||(o[1]=f("i",{class:"ph ph-check-circle","aria-hidden":"true"},null,-1)),f("span",null,[ae(k(d(m)("settings.adminToolsLoaded",{n:s.value.tools.length}))+" ",1),s.value.tools.length?(h(),w(ce,{key:0},[ae(" — "+k(s.value.tools.join(", ")),1)],64)):K("",!0),f("span",mL,k(d(m)("settings.adminToolsRegistry",{n:s.value.total_tools})),1)])]),s.value.missing_enabled.length?(h(),w("div",hL,[o[3]||(o[3]=f("i",{class:"ph ph-warning","aria-hidden":"true"},null,-1)),f("span",null,[o[2]||(o[2]=f("code",null,"enabled.json",-1)),ae(" "+k(d(m)("settings.adminToolsMissing",{names:s.value.missing_enabled.join(", ")})),1)])])):K("",!0),(h(!0),w(ce,null,Je(s.value.tool_errors,(r,u)=>(h(),w("div",{key:u,class:"admin-tools-line is-error"},[o[4]||(o[4]=f("i",{class:"ph ph-x-circle","aria-hidden":"true"},null,-1)),f("span",null,[f("code",null,k(u),1),ae(": "+k(r),1)])]))),128)),s.value.mcp_error?(h(),w("div",vL,[o[5]||(o[5]=f("i",{class:"ph ph-x-circle","aria-hidden":"true"},null,-1)),f("span",null,k(d(m)("settings.adminToolsMcpFailed",{error:s.value.mcp_error})),1)])):(h(),w("div",bL,[o[6]||(o[6]=f("i",{class:"ph ph-plugs-connected","aria-hidden":"true"},null,-1)),f("span",null,k(d(m)("settings.adminToolsMcpTools",{n:s.value.mcp_tools.length}))+" — "+k(d(m)("settings.adminToolsProviders",{n:s.value.providers.length})),1)]))],2)):K("",!0)]))}},yL=We(_L,[["__scopeId","data-v-07c32b63"]]);function kL(){var e,t,n;return typeof window>"u"?!1:(t=(e=window.matchMedia)==null?void 0:e.call(window,"(display-mode: standalone)"))!=null&&t.matches?!0:((n=window.navigator)==null?void 0:n.standalone)===!0}const wL=typeof navigator<"u"&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1),oi=F(null),mo=F(kL());var Gd,Gi,Hd;typeof window<"u"&&(window.addEventListener("beforeinstallprompt",e=>{e.preventDefault(),oi.value=e}),window.addEventListener("appinstalled",()=>{oi.value=null,mo.value=!0}),(Hd=(Gi=(Gd=window.matchMedia)==null?void 0:Gd.call(window,"(display-mode: standalone)"))==null?void 0:Gi.addEventListener)==null||Hd.call(Gi,"change",e=>{mo.value=e.matches}));function SL(){const e=W(()=>Jl()?"android-app":mo.value?"installed":oi.value?"prompt":"manual");async function t(){const n=oi.value;if(!n)return null;n.prompt();const s=await n.userChoice;return oi.value=null,(s==null?void 0:s.outcome)==="accepted"&&(mo.value=!0),(s==null?void 0:s.outcome)??null}return{state:e,install:t,isIos:wL}}const EL={class:"app-panel"},TL={class:"app-title"},AL={class:"app-description"},xL={class:"app-card"},NL={class:"app-card-title"},CL={class:"app-text"},RL={key:2,class:"app-action"},IL={class:"app-hint"},OL={key:3,class:"app-steps"},ML={key:0},LL={key:1},$L={key:2},DL={class:"app-card"},PL={class:"app-card-title"},BL={class:"app-text"},FL={key:0,class:"app-hint"},UL={class:"app-meta"},GL={class:"app-meta-sha"},HL={class:"app-steps app-steps-install"},zL={__name:"AppPanel",setup(e){const{state:t,install:n,isIos:s}=SL(),a=F(!1),i=F(null),o=window.location.origin,r=W(()=>i.value?`${(i.value.size/1048576).toFixed(1)} MB`:""),u=W(()=>i.value?new Date(i.value.builtAt).toLocaleDateString(Lt.value,{day:"numeric",month:"short",year:"numeric"}):"");$t(async()=>{try{const p=await fetch("/download/navi-android.json");p.ok&&(i.value=await p.json())}catch{}});async function l(){a.value=!0;try{await n()}finally{a.value=!1}}function c(){window.location.assign("/download/navi-android.apk?download=1")}return(p,g)=>(h(),w("div",EL,[f("h2",TL,k(d(m)("settings.appTitle")),1),f("p",AL,k(d(m)("settings.appDescription")),1),f("section",xL,[f("h3",NL,[g[0]||(g[0]=f("i",{class:"ph ph-app-window"},null,-1)),f("span",null,k(d(m)("settings.appInstallTitle")),1)]),f("p",CL,k(d(m)("settings.appInstallText")),1),d(t)==="android-app"?(h(),ke(d(Vn),{key:0,variant:"info",class:"app-alert"},{default:fe(()=>[g[1]||(g[1]=f("i",{class:"ph ph-info"},null,-1)),f("span",null,k(d(m)("settings.appAndroidAlert")),1)]),_:1})):d(t)==="installed"?(h(),ke(d(Vn),{key:1,variant:"success",class:"app-alert"},{default:fe(()=>[g[2]||(g[2]=f("i",{class:"ph ph-check-circle"},null,-1)),f("span",null,k(d(m)("settings.appInstalledAlert")),1)]),_:1})):d(t)==="prompt"?(h(),w("div",RL,[Q(d(it),{variant:"primary",icon:"ph ph-download-simple",loading:a.value,onClick:l},{default:fe(()=>[ae(k(d(m)("settings.appInstallAction")),1)]),_:1},8,["loading"]),f("span",IL,k(d(m)("settings.appInstallHint")),1)])):(h(),w("ol",OL,[d(s)?(h(),w("li",ML,[f("b",null,k(d(m)("settings.appBrowserSafari")),1),ae(" "+k(d(m)("settings.appIosTap"))+" ",1),g[3]||(g[3]=f("i",{class:"ph ph-export"},null,-1)),ae(" "+k(d(m)("settings.appIosShare"))+" ",1),f("b",null,k(d(m)("settings.appIosAddHome")),1),ae(". "+k(d(m)("settings.appIosNote")),1)])):(h(),w("li",LL,[f("b",null,k(d(m)("settings.appBrowserChrome")),1),ae(" "+k(d(m)("settings.appChromeClick"))+" ",1),g[4]||(g[4]=f("i",{class:"ph ph-dots-three-vertical"},null,-1)),ae(" "+k(d(m)("settings.appChromeMenu"))+" ",1),f("b",null,k(d(m)("settings.appChromeInstall")),1),g[5]||(g[5]=ae(". ",-1))])),d(s)?K("",!0):(h(),w("li",$L,[f("b",null,k(d(m)("settings.appBrowserAndroid")),1),ae(" "+k(d(m)("settings.appAndroidOpen"))+" ",1),g[6]||(g[6]=f("i",{class:"ph ph-dots-three-vertical"},null,-1)),ae(" "+k(d(m)("settings.appAndroidMenu"))+" ",1),f("b",null,k(d(m)("settings.appAndroidInstall")),1),ae(" "+k(d(m)("settings.appAndroidAlso")),1)])),f("li",null,[ae(k(d(m)("settings.appHttpsBefore"))+" ",1),g[7]||(g[7]=f("code",null,"http://",-1)),ae(" "+k(d(m)("settings.appHttpsAfter")),1)])]))]),f("section",DL,[f("h3",PL,[g[8]||(g[8]=f("i",{class:"ph ph-android-logo"},null,-1)),f("span",null,k(d(m)("settings.appAndroidTitle")),1)]),f("p",BL,k(d(m)("settings.appAndroidText")),1),i.value?(h(),w(ce,{key:1},[f("dl",UL,[f("div",null,[f("dt",null,k(d(m)("settings.appVersion")),1),f("dd",null,k(i.value.versionName),1)]),f("div",null,[f("dt",null,k(d(m)("settings.appSize")),1),f("dd",null,k(r.value),1)]),f("div",null,[f("dt",null,k(d(m)("settings.appBuilt")),1),f("dd",null,k(u.value),1)]),f("div",GL,[g[11]||(g[11]=f("dt",null,"SHA-256",-1)),f("dd",null,[f("code",null,k(i.value.sha256),1)])])]),Q(d(it),{variant:"primary",icon:"ph ph-android-logo",onClick:c},{default:fe(()=>[ae(k(d(m)("settings.appDownloadApk")),1)]),_:1}),f("ol",HL,[f("li",null,k(d(m)("settings.appAndroidStep1")),1),f("li",null,[ae(k(d(m)("settings.appAndroidStep2"))+" ",1),f("code",null,k(d(o)),1),ae(k(d(m)("settings.appAndroidStep2Tail")),1)]),f("li",null,k(d(m)("settings.appAndroidStep3")),1)])],64)):(h(),w("p",FL,[ae(k(d(m)("settings.appApkMissing"))+" ",1),g[9]||(g[9]=f("code",null,"android-client/tools/publish-apk.sh",-1)),g[10]||(g[10]=ae(". ",-1))]))])]))}},KL=We(zL,[["__scopeId","data-v-15c4797f"]]),qL={class:"settings-view"},VL={class:"chat-header"},WL={class:"chat-header-info"},YL={class:"chat-header-title"},jL={__name:"SettingsView",emits:["toggle-sidebar"],setup(e,{emit:t}){const n=t,s=ls(),a=["app","account","notifications","synapse","skills","protocols","mcp"],i=W(()=>[{id:"app",label:m("settings.tabApp"),icon:"ph ph-device-mobile"},{id:"account",label:m("settings.tabAccount"),icon:"ph ph-user-circle"},{id:"notifications",label:m("settings.tabNotifications"),icon:"ph ph-bell"},{id:"synapse",label:m("settings.tabSynapse"),icon:"ph ph-network"},{id:"skills",label:m("settings.tabSkills"),icon:"ph ph-notebook"},{id:"protocols",label:m("settings.tabProtocols"),icon:"ph ph-list-checks"},{id:"mcp",label:m("settings.tabMcp"),icon:"ph ph-plugs-connected"}]),o=a[0],r=new Set(a);function u(g){const b=_u(g);return b&&r.has(b)?b:o}const l=F(u(location.hash)),c=F(null);Ge(l,g=>{history.replaceState(history.state,"",yu(g)),xt(()=>{var y,D;const b=(y=c.value)==null?void 0:y.$el,_=(D=b==null?void 0:b.querySelector)==null?void 0:D.call(b,'[role="tab"][aria-selected="true"]');_==null||_.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})})});function p(){Vi(location.hash)&&(l.value=u(location.hash))}return $t(()=>{window.addEventListener("hashchange",p),_u(location.hash)!==l.value&&history.replaceState(history.state,"",yu(l.value))}),Nn(()=>{window.removeEventListener("hashchange",p)}),(g,b)=>(h(),w("div",qL,[f("div",VL,[Q(d(Kn),{icon:"ph ph-sidebar",label:d(m)("common.menu"),class:"btn-sidebar-toggle",onClick:b[0]||(b[0]=_=>n("toggle-sidebar"))},null,8,["label"]),f("div",WL,[f("span",YL,k(d(m)("settings.title")),1)])]),Q(d(ac),{ref_key:"tabsRoot",ref:c,modelValue:l.value,"onUpdate:modelValue":b[1]||(b[1]=_=>l.value=_),items:i.value,class:"settings-tabs",ariaLabel:d(m)("settings.sectionsLabel")},{app:fe(()=>[l.value==="app"?(h(),ke(KL,{key:0})):K("",!0)]),account:fe(()=>[l.value==="account"?(h(),ke(QI,{key:0})):K("",!0)]),notifications:fe(()=>[l.value==="notifications"?(h(),ke(rO,{key:0})):K("",!0)]),synapse:fe(()=>[l.value==="synapse"?(h(),ke(FO,{key:0})):K("",!0),l.value==="synapse"?(h(),ke(XO,{key:1})):K("",!0)]),skills:fe(()=>[l.value==="skills"?(h(),ke(Ud,{key:0,kind:"skill"})):K("",!0)]),protocols:fe(()=>[l.value==="protocols"?(h(),ke(Ud,{key:0,kind:"protocol"})):K("",!0)]),mcp:fe(()=>[l.value==="mcp"?(h(),ke(cL,{key:0})):K("",!0),l.value==="mcp"&&d(s).isAdmin?(h(),ke(yL,{key:1})):K("",!0)]),_:1},8,["modelValue","items","ariaLabel"])]))}},ZL=We(jL,[["__scopeId","data-v-0ea8be77"]]),XL={class:"shared-shell"},QL={class:"shared-header"},JL={class:"shared-heading"},e$={class:"shared-title"},t$={class:"shared-meta"},n$={key:0,class:"shared-profile"},s$={key:1,class:"shared-date"},a$={class:"shared-badge"},i$={key:0,class:"shared-loading"},o$={key:1,class:"shared-error"},r$={class:"shared-error-title"},l$={class:"shared-error-text"},c$=["disabled"],u$={key:1,class:"shared-empty"},d$={key:3,class:"shared-footer"},f$={__name:"SharedChatView",props:{token:{type:String,required:!0}},setup(e){const t=e,n=Gt(),s=F([]),a=F(null),i=F(!0),o=F(!1),r=F(!1),u=F(null),l=F(!1),c=F(null),p=W(()=>{var M;return((M=a.value)==null?void 0:M.name)||m("share.untitled")}),g=W(()=>{var O;const M=(O=a.value)==null?void 0:O.created_at;if(!M)return"";try{return new Intl.DateTimeFormat(Lt.value,{dateStyle:"medium"}).format(new Date(M))}catch{return""}});function b(M){var O;return(O=M.tools)!=null&&O.length?{...M,tools:M.tools.filter(B=>B.kind!=="ui_component")}:M}const _=W(()=>n.buildMessageList(s.value).map(b));function y(M){return M.role==="user"?pg:M.type==="summary"?Mg:M.type==="compression_notice"||M.type==="compression_pending"?Lg:M.type==="synapse_event"?$g:M.type==="error"?Dg:Og}function D(){const M=c.value;M&&(M.scrollTop=M.scrollHeight)}async function R(){i.value=!0,o.value=!1;try{const M=await Wv(t.token);a.value=M,s.value=M.messages??[],r.value=!!M.has_more,u.value=M.next_before_seq??null,document.title=M.name||"Navi",await xt(),D()}catch{o.value=!0}finally{i.value=!1}}async function N(){if(!r.value||l.value)return;l.value=!0;const M=c.value,O=(M==null?void 0:M.scrollHeight)??0;try{const B=await Yv(t.token,u.value);s.value=[...B.messages??[],...s.value],r.value=!!B.has_more,u.value=B.next_before_seq??null,await xt(),M&&(M.scrollTop+=M.scrollHeight-O)}catch{}finally{l.value=!1}}function S(){const M=c.value;M&&M.scrollTop<120&&r.value&&!l.value&&N()}return $t(R),(M,O)=>{var B;return h(),w("div",XL,[f("header",QL,[f("div",JL,[f("h1",e$,k(p.value),1),f("div",t$,[(B=a.value)!=null&&B.profile_name?(h(),w("span",n$,k(a.value.profile_name),1)):K("",!0),a.value?(h(),w("span",s$,k(g.value),1)):K("",!0),f("span",a$,[O[0]||(O[0]=f("i",{class:"ph ph-eye"},null,-1)),ae(" "+k(d(m)("share.readOnly")),1)])])]),O[1]||(O[1]=f("span",{class:"shared-brand"},"Navi",-1))]),i.value?(h(),w("div",i$,[...O[2]||(O[2]=[f("i",{class:"ph ph-spinner animate-spin"},null,-1)])])):o.value?(h(),w("div",o$,[O[3]||(O[3]=f("i",{class:"ph ph-link-break"},null,-1)),f("p",r$,k(d(m)("share.notFoundTitle")),1),f("p",l$,k(d(m)("share.notFoundText")),1)])):(h(),w("div",{key:2,ref_key:"scroller",ref:c,class:"shared-scroller",onScrollPassive:S},[r.value?(h(),w("button",{key:0,type:"button",class:"shared-load-older",disabled:l.value,onClick:N},[f("i",{class:Ae(l.value?"ph ph-spinner animate-spin":"ph ph-caret-up")},null,2),ae(" "+k(d(m)("share.loadOlder")),1)],8,c$)):K("",!0),(h(!0),w(ce,null,Je(_.value,L=>(h(),w("div",{key:L.id,class:"shared-row"},[(h(),ke(eo(y(L)),{msg:L,readonly:""},null,8,["msg"]))]))),128)),_.value.length?K("",!0):(h(),w("p",u$,k(d(m)("share.empty")),1))],544)),!i.value&&!o.value?(h(),w("footer",d$,k(d(m)("share.footer")),1)):K("",!0)])}}},p$=We(f$,[["__scopeId","data-v-bab2a59b"]]),g$={key:0,class:"app-shell"},m$={key:1,class:"app-shell"},h$={class:"app-main"},v$={key:0,class:"load-error-banner",role:"alert"},b$={class:"load-error-text"},_$=["title","aria-label"],y$={__name:"App",setup(e){const t=xn(),n=wi(),s=Gt(),a=ls(),{visible:i,busy:o,title:r,text:u,acceptText:l,dismissText:c,maybeShow:p,accept:g,decline:b}=e_(),_=F(!1),y=F(!1),D=F(Di(location.hash));function R(){const P=location.hash;return Di(P)?"share":Vi(P)?"settings":"chat"}const N=F(R()),S=W(()=>N.value==="chat"&&!s.currentId&&!s.loading),M=W(()=>{var z;if(N.value==="share")return null;if(N.value==="settings")return m("app.titleSettings");if(!s.currentId)return"Navi";const P=s.currentId;return t.nameById[P]||((z=t.sessions.find(V=>V.session_id===P))==null?void 0:z.name)||P.slice(0,8)});Ge(M,P=>{P&&(document.title=P)},{immediate:!0});function O(){_.value=!1}function B(){y.value=!1}function L(){const P=!_.value;P&&(y.value=!1),_.value=P}function $(){const P=!y.value;P&&(_.value=!1),y.value=P}function v(){const P=s.loadErrorSessionId;P&&s.loadSession(P)}let E=!1;async function x({loadHash:P=!0}={}){if(!E){if(E=!0,await a.fetchStatus(),a.authConfigured)try{await a.fetchMe()}catch{}if(oo(a.user?a.user.locale_effective:hu()),!a.authConfigured||a.isAuthenticated)try{await n.fetchProfiles(),await t.fetchSessions(n.selectedProfileId)}catch{}if(P&&location.hash&&!Vi(location.hash)&&!Di(location.hash)){const z=location.hash.slice(1);z&&s.loadSession(z)}(!a.authConfigured||a.isAuthenticated)&&await p()}}function A(){const P=N.value==="share";if(D.value=Di(location.hash),N.value=R(),D.value){_.value=!1,y.value=!1;return}P&&x({loadHash:!1});const z=location.hash;if(Vi(z))return;const V=z.slice(1);V&&V!==s.currentId&&s.loadSession(V)}return $t(async()=>{if(window.addEventListener("hashchange",A),D.value){oo(hu());return}await x()}),Nn(()=>{window.removeEventListener("hashchange",A)}),(P,z)=>{const V=Qe("GnToastProvider");return h(),ke(V,null,{default:fe(()=>[D.value?(h(),w("div",g$,[(h(),ke(p$,{key:D.value,token:D.value},null,8,["token"]))])):(h(),w("div",m$,[_.value?(h(),w("div",{key:0,class:"sidebar-backdrop",onClick:O})):K("",!0),Q(Sa,{name:"backdrop-fade"},{default:fe(()=>[y.value?(h(),w("div",{key:0,class:"artifacts-backdrop",onClick:B})):K("",!0)]),_:1}),Q(q_,{"mobile-open":_.value,class:Ae({"is-hidden-by-artifacts":y.value}),onClose:O},null,8,["mobile-open","class"]),Q(Ip),Q(Jp),Q(tg),Q(ig),f("div",h$,[Q(ag,{open:d(i)&&N.value!=="settings",busy:d(o),title:d(r),text:d(u),"accept-text":d(l),"dismiss-text":d(c),onAccept:d(g),onDismiss:d(b)},null,8,["open","busy","title","text","accept-text","dismiss-text","onAccept","onDismiss"]),d(s).loadError?(h(),w("div",v$,[z[2]||(z[2]=f("i",{class:"ph ph-warning-circle"},null,-1)),f("span",b$,k(d(s).loadError),1),d(s).loadErrorSessionId?(h(),w("button",{key:0,class:"load-error-retry",onClick:v},k(d(m)("chat.retry")),1)):K("",!0),f("button",{class:"load-error-dismiss",title:d(m)("common.close"),"aria-label":d(m)("common.close"),onClick:z[0]||(z[0]=Y=>d(s).dismissLoadError())},[...z[1]||(z[1]=[f("i",{class:"ph ph-x"},null,-1)])],8,_$)])):K("",!0),Q(Sa,{name:"fade",mode:"out-in"},{default:fe(()=>[S.value?(h(),ke(og,{key:"welcome",onToggleSidebar:L})):N.value==="settings"?(h(),ke(ZL,{key:"settings",onToggleSidebar:L})):(h(),ke(CI,{key:"chat",onToggleSidebar:L,onToggleArtifacts:$}))]),_:1})]),Q(sT,{open:y.value,onClose:B},null,8,["open"]),d(a).authConfigured&&!d(a).isAuthenticated&&!d(a).loading?(h(),ke(sg,{key:1})):K("",!0)]))]),_:1})}}},k$=We(y$,[["__scopeId","data-v-189a26a8"]]),yc=kv(k$);yc.use(Ev());yc.use(Gy);yc.mount("#app");"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(()=>{}); diff --git a/webclient/dist/assets/index-CyNRMV2b.css b/webclient/dist/assets/index-CyNRMV2b.css new file mode 100644 index 0000000..e9997be --- /dev/null +++ b/webclient/dist/assets/index-CyNRMV2b.css @@ -0,0 +1 @@ +@charset "UTF-8";.container[data-v-213cc62b]{padding:18px}.section[data-v-213cc62b]{margin-bottom:48px}.section-title[data-v-213cc62b],.block[data-v-213cc62b]{margin-bottom:34px}.block-title[data-v-213cc62b]{margin-bottom:22px}p[data-v-213cc62b],.text[data-v-213cc62b]{margin-bottom:15px}.hint[data-v-213cc62b]{margin-top:8px}.list[data-v-213cc62b]{padding-left:22px;margin-bottom:15px}.list-item[data-v-213cc62b]{margin-bottom:8px}.list-nested[data-v-213cc62b]{margin-top:8px}.table[data-v-213cc62b]{margin-bottom:22px}.table-caption[data-v-213cc62b]{margin-bottom:8px}.form-group[data-v-213cc62b]{margin-bottom:15px}.label[data-v-213cc62b]{margin-bottom:5px;display:block}.input[data-v-213cc62b],.textarea[data-v-213cc62b],.select[data-v-213cc62b]{margin-top:5px}.toast[data-v-213cc62b]{padding:15px}.toast-stack[data-v-213cc62b]{gap:8px}.search-highlight[data-v-213cc62b]{background:#7aa2f740;color:#7aa2f7;font-weight:600;padding:0 2px;border-radius:2px}.session-name-row[data-v-213cc62b]{display:flex;align-items:center;gap:6px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.recall-badge[data-v-213cc62b]{color:var(--gn-color-accent);font-size:.85em;flex-shrink:0}.session-list-wrap[data-v-4d876f4d]{flex:1;overflow:hidden;display:flex;flex-direction:column}.session-scroller[data-v-4d876f4d]{flex:1;overflow-y:auto}.empty-sessions[data-v-4d876f4d]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 16px;color:var(--gn-color-text-dark);font-size:13px}.empty-sessions i[data-v-4d876f4d]{font-size:32px;opacity:.4}.empty-sessions p[data-v-4d876f4d]{margin:0}.sessions-loading[data-v-4d876f4d]{display:flex;align-items:center;justify-content:center;gap:10px;padding:28px 16px;color:var(--gn-color-text-dark);font-size:12px}.sessions-loading-more[data-v-4d876f4d]{padding:10px 16px 14px}.sessions-spinner[data-v-4d876f4d]{width:16px;height:16px;border:2px solid var(--gn-border-color-muted);border-top-color:var(--gn-color-secondary);border-radius:50%;animation:sessions-spin-4d876f4d .8s linear infinite}@keyframes sessions-spin-4d876f4d{to{transform:rotate(360deg)}}.ptr-indicator[data-v-4d876f4d]{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:12px;color:var(--gn-color-text-dark);pointer-events:none;transition:opacity .15s,transform .15s;will-change:transform,opacity}.ptr-spinner[data-v-4d876f4d]{width:16px;height:16px;border:2px solid var(--gn-border-color-muted);border-top-color:var(--gn-color-secondary);border-radius:50%;transition:transform .15s}.ptr-spinning[data-v-4d876f4d]{animation:sessions-spin-4d876f4d .8s linear infinite}.ptr-pulled[data-v-4d876f4d]{transition:transform .15s}@media(min-width:769px){.ptr-indicator[data-v-4d876f4d]{display:none}}.container[data-v-6361031f]{padding:18px}.section[data-v-6361031f]{margin-bottom:48px}.section-title[data-v-6361031f],.block[data-v-6361031f]{margin-bottom:34px}.block-title[data-v-6361031f]{margin-bottom:22px}p[data-v-6361031f],.text[data-v-6361031f]{margin-bottom:15px}.hint[data-v-6361031f]{margin-top:8px}.list[data-v-6361031f]{padding-left:22px;margin-bottom:15px}.list-item[data-v-6361031f]{margin-bottom:8px}.list-nested[data-v-6361031f]{margin-top:8px}.table[data-v-6361031f]{margin-bottom:22px}.table-caption[data-v-6361031f]{margin-bottom:8px}.form-group[data-v-6361031f]{margin-bottom:15px}.label[data-v-6361031f]{margin-bottom:5px;display:block}.input[data-v-6361031f],.textarea[data-v-6361031f],.select[data-v-6361031f]{margin-top:5px}.toast[data-v-6361031f]{padding:15px}.toast-stack[data-v-6361031f]{gap:8px}.sidebar-close-btn[data-v-6361031f]{display:none}@media(max-width:1279.98px){.sidebar-close-btn[data-v-6361031f]{display:flex}}.sidebar-search[data-v-6361031f]{display:none;padding:0 15px}.sidebar-search.is-open[data-v-6361031f]{display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid var(--gn-border-color-muted)}.sidebar-search-inner[data-v-6361031f]{position:relative;display:flex;align-items:center;gap:5px}.sidebar-search-inner[data-v-6361031f] .search-field{flex:1;min-width:0}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon{position:relative!important}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon>i{display:none!important}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon:after{content:"";display:block;width:12px;height:12px;border:2px solid rgba(192,202,245,.24);border-top-color:#7aa2f7;border-radius:50%;animation:spin .6s linear infinite;margin:auto}.sessions-profiles[data-v-6361031f]{display:flex;gap:6px;padding:8px 15px 5px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}.sessions-profiles[data-v-6361031f]::-webkit-scrollbar{display:none}.sessions-profiles .chip[data-v-6361031f]{flex:0 0 auto}.sessions-profiles[data-v-6361031f] .chip:before{display:none}.sessions-header-actions[data-v-6361031f]{display:flex;align-items:center;gap:2px}.search-toggle-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.search-toggle-btn.active[data-v-6361031f],.search-toggle-btn[data-v-6361031f]:hover{color:#c0caf5}.recall-filter-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.recall-filter-btn.active[data-v-6361031f],.recall-filter-btn[data-v-6361031f]:hover{color:var(--gn-color-secondary)}.special-filter-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.special-filter-btn.active[data-v-6361031f],.special-filter-btn[data-v-6361031f]:hover{color:var(--gn-color-secondary)}.sidebar-footer[data-v-6361031f]{padding:12px 16px;border-top:1px solid var(--gn-border-color-muted);display:flex;align-items:center;justify-content:space-between;gap:8px}.user-info[data-v-6361031f]{display:flex;align-items:center;gap:8px;text-decoration:none;color:inherit;flex:1;min-width:0;cursor:pointer}.user-info:hover .user-name[data-v-6361031f]{color:var(--gn-color-text-light)}.user-name[data-v-6361031f]{font-size:13px;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-footer-actions[data-v-6361031f]{display:flex;align-items:center;gap:8px}.admin-link[data-v-6361031f]{text-decoration:none}.audio-player[data-v-f9c7ab69]{width:100%;display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 24px;background:var(--gn-surface-panel)}.ap-art[data-v-f9c7ab69]{display:flex;align-items:center;justify-content:center;width:96px;height:96px;border-radius:50%;background:var(--gn-color-black);color:var(--gn-color-accent);font-size:40px}.ap-title[data-v-f9c7ab69]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--gn-color-text-light);font-size:14px;font-weight:500}.ap-error[data-v-f9c7ab69]{color:var(--gn-color-error);font-size:12px}.ap-controls[data-v-f9c7ab69]{width:100%;display:flex;align-items:center;gap:10px}.ap-audio-el[data-v-f9c7ab69]{display:none}.ap-time[data-v-f9c7ab69]{flex:none;color:var(--gn-color-text-dark);font-size:12px;font-variant-numeric:tabular-nums}.ap-controls[data-v-f9c7ab69] .range{flex:1;min-width:0;margin:0}.ap-controls[data-v-f9c7ab69] .range .label{margin:0}.ap-seek[data-v-f9c7ab69]{flex:1}.ap-volume[data-v-f9c7ab69]{flex:none;width:90px;display:flex}.ap-volume[data-v-f9c7ab69] .range{width:100%;margin:0}.audio-player.is-compact[data-v-f9c7ab69]{gap:10px;padding:14px}.audio-player.is-compact .ap-art[data-v-f9c7ab69]{width:56px;height:56px;font-size:24px}.audio-player.is-compact .ap-title[data-v-f9c7ab69]{font-size:13px}@media(max-width:600px){.ap-volume[data-v-f9c7ab69]{display:none}.audio-player[data-v-f9c7ab69]{padding:20px 16px}}.lightbox-dialog{max-width:90vw;min-width:280px}.lightbox-dialog.is-frame{width:96vw;max-width:96vw}.lightbox-dialog.is-text{width:min(1100px,94vw);max-width:min(1100px,94vw)}.lightbox-dialog.is-audio{width:min(640px,94vw);max-width:min(640px,94vw)}.lightbox-tools{display:flex;align-items:center;gap:4px}body .modal .lightbox-dialog .lightbox-panel{justify-content:center;cursor:default}body .modal .lightbox-panel .modal-body{max-height:90vh;padding:0;display:flex;align-items:center;justify-content:center}body .modal .lightbox-dialog.is-frame .lightbox-panel .modal-body,body .modal .lightbox-dialog.is-video .lightbox-panel .modal-body{height:80vh;max-height:80vh}body .modal .lightbox-dialog.is-text .lightbox-panel .modal-body{align-items:stretch;justify-content:flex-start;height:auto;max-height:none}.lightbox-img{display:block;width:auto;height:auto;max-width:100%;max-height:90vh}.lightbox-video{display:block;width:100%;height:100%;background:#000}.lightbox-frame{display:block;width:100%;height:100%;border:0;background:#1a1a2e}.lightbox-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--gn-color-text-dark);font-size:13px}.lightbox-error i{font-size:32px}.lightbox-text{width:100%;height:auto;max-height:80vh;display:flex;flex-direction:column;overflow:auto;background:var(--gn-color-black)}.lightbox-code{margin:0;padding:16px;white-space:pre;font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.lightbox-note{position:sticky;bottom:0;padding:10px 16px;border-top:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel);color:var(--gn-color-text-dark);font-size:12px}.lightbox-note a{color:var(--gn-color-accent);margin-left:6px}.lightbox-state{display:flex;align-items:center;gap:8px;padding:16px;margin:0;color:var(--gn-color-text-dark);font-size:13px}.lightbox-state-error{color:var(--gn-color-error)}.selection-toolbar[data-v-7fdc7530]{position:fixed;transform:translate(-50%);z-index:900;pointer-events:all;background:var(--gn-color-warning);color:var(--gn-color-black)}.container[data-v-f24e35d7]{padding:18px}.section[data-v-f24e35d7]{margin-bottom:48px}.section-title[data-v-f24e35d7],.block[data-v-f24e35d7]{margin-bottom:34px}.block-title[data-v-f24e35d7]{margin-bottom:22px}p[data-v-f24e35d7],.text[data-v-f24e35d7]{margin-bottom:15px}.hint[data-v-f24e35d7]{margin-top:8px}.list[data-v-f24e35d7]{padding-left:22px;margin-bottom:15px}.list-item[data-v-f24e35d7]{margin-bottom:8px}.list-nested[data-v-f24e35d7]{margin-top:8px}.table[data-v-f24e35d7]{margin-bottom:22px}.table-caption[data-v-f24e35d7]{margin-bottom:8px}.form-group[data-v-f24e35d7]{margin-bottom:15px}.label[data-v-f24e35d7]{margin-bottom:5px;display:block}.input[data-v-f24e35d7],.textarea[data-v-f24e35d7],.select[data-v-f24e35d7]{margin-top:5px}.toast[data-v-f24e35d7]{padding:15px}.toast-stack[data-v-f24e35d7]{gap:8px}.artifacts-panel[data-v-f24e35d7]{container-type:inline-size;width:var(--artifacts-width, min(600px, 42vw));min-width:var(--artifacts-width, min(600px, 42vw));max-width:var(--artifacts-width, min(600px, 42vw));display:flex;flex-direction:column;background:var(--gn-color-black);border-left:2px solid var(--gn-border-color-muted);min-height:0;margin-right:calc(-1 * var(--artifacts-width, min(600px, 42vw)));opacity:0;pointer-events:none;transform:translate(100%);position:relative;transition:margin-right .22s ease,opacity .22s ease,transform .22s ease}.artifacts-panel.is-open[data-v-f24e35d7]{margin-right:0;opacity:1;pointer-events:auto;transform:translate(0)}.artifacts-panel.is-resizing[data-v-f24e35d7]{transition:none}.artifacts-resize-handle[data-v-f24e35d7]{position:absolute;top:0;left:-4px;bottom:0;width:8px;z-index:2;cursor:col-resize;touch-action:none}.artifacts-resize-handle[data-v-f24e35d7]:after{content:"";position:absolute;top:0;left:3px;width:1px;height:100%;background:transparent;transition:background .15s ease}.artifacts-resize-handle[data-v-f24e35d7]:hover:after,.artifacts-panel.is-resizing .artifacts-resize-handle[data-v-f24e35d7]:after{background:var(--gn-color-accent)}.artifacts-header[data-v-f24e35d7]{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 15px;border-bottom:2px solid var(--gn-border-color-muted)}.artifacts-empty[data-v-f24e35d7]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--gn-color-text-dark);font-size:13px}.artifacts-tabs[data-v-f24e35d7]{display:flex;align-items:center;flex-wrap:nowrap;gap:8px;flex:1;min-width:0}.artifacts-tab[data-v-f24e35d7]{min-width:0;white-space:nowrap}@container (max-width: 560px){.artifacts-tab[data-v-f24e35d7]{padding:4px 10px;font-size:11px;gap:6px}.artifacts-tabs[data-v-f24e35d7]{gap:6px}}@container (max-width: 490px){.artifacts-tab[data-v-f24e35d7]{padding:3px 8px;font-size:10px;gap:5px}}@container (max-width: 400px){.artifacts-tab[data-v-f24e35d7]{padding:2px 6px}.artifacts-tab-count[data-v-f24e35d7]{padding-left:3px}}@media(min-width:981px){@container (max-width: 360px){.artifacts-tab i[data-v-f24e35d7]{display:none}}}.artifacts-tab-count[data-v-f24e35d7]{padding-left:4px;opacity:.72}.artifacts-tab-count.has-running[data-v-f24e35d7]{color:var(--gn-color-success);opacity:1}.artifacts-list[data-v-f24e35d7]{max-height:232px;overflow-y:auto;border-bottom:2px solid var(--gn-border-color-muted)}.viewed-images-group[data-v-f24e35d7]{flex-shrink:0;border-bottom:2px solid var(--gn-border-color-muted);background:var(--gn-surface-panel-muted)}.viewed-images-header[data-v-f24e35d7]{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:500;color:var(--gn-color-text-medium)}.viewed-images-header i[data-v-f24e35d7]{font-size:14px;color:var(--gn-color-secondary)}.viewed-images-grid[data-v-f24e35d7]{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;padding:0 12px 12px;max-height:320px;overflow-y:auto}.viewed-image-thumb[data-v-f24e35d7]{width:100%;height:96px;object-fit:cover;border:1px solid var(--gn-border-color-muted);border-radius:6px;cursor:zoom-in;transition:border-color var(--gn-motion-fast) var(--gn-motion-ease),opacity var(--gn-motion-fast) var(--gn-motion-ease)}.viewed-image-thumb[data-v-f24e35d7]:hover{border-color:var(--gn-color-secondary);opacity:.85}.artifact-item[data-v-f24e35d7]{width:100%;min-height:50px;display:flex;align-items:center;gap:10px;padding:8px 12px;border:0;border-left:var(--gn-border-width-accent) solid transparent;background:transparent;color:var(--gn-color-text-light);text-align:left;cursor:pointer;transition:background var(--gn-motion-fast) var(--gn-motion-ease),border-color var(--gn-motion-fast) var(--gn-motion-ease)}.artifact-item[data-v-f24e35d7]:hover{background:color-mix(in srgb,var(--gn-color-text-light) 7%,transparent)}.artifact-item.is-active[data-v-f24e35d7]{border-left-color:var(--gn-color-secondary);background:var(--gn-surface-panel-muted)}.artifact-icon[data-v-f24e35d7]{display:inline-flex;flex-shrink:0;color:var(--gn-color-accent);font-size:20px}.artifact-info[data-v-f24e35d7]{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}.artifact-title[data-v-f24e35d7],.artifact-detail-title[data-v-f24e35d7],.artifact-detail-filename[data-v-f24e35d7]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.artifact-title[data-v-f24e35d7]{font-size:13px;font-weight:500}.artifact-meta[data-v-f24e35d7]{font-size:11px;color:var(--gn-color-text-dark)}.artifact-detail[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column}.artifact-detail-header[data-v-f24e35d7]{padding:12px 15px 8px}.artifact-detail-title[data-v-f24e35d7]{font-size:14px;font-weight:600;color:var(--gn-color-text-light)}.artifact-detail-filename[data-v-f24e35d7]{margin-top:3px;font-size:12px;color:var(--gn-color-text-dark)}.artifact-actions[data-v-f24e35d7]{display:flex;flex-wrap:wrap;gap:4px;padding:0 15px 12px}.artifact-preview[data-v-f24e35d7]{flex:1;min-height:0;border-top:2px solid var(--gn-border-color-muted);background:var(--gn-color-black)}.artifact-frame[data-v-f24e35d7],.artifact-image[data-v-f24e35d7],.artifact-video[data-v-f24e35d7]{width:100%;height:100%;border:0;display:block}.artifact-image[data-v-f24e35d7],.artifact-video[data-v-f24e35d7]{object-fit:contain}.artifact-image.is-viewable[data-v-f24e35d7]{cursor:zoom-in}.artifact-audio[data-v-f24e35d7]{width:100%;display:block}.artifact-text[data-v-f24e35d7]{height:100%;display:flex;flex-direction:column;overflow:auto;background:var(--gn-color-black)}.artifact-text-note[data-v-f24e35d7]{padding:8px 14px;border-top:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark);font-size:12px}.artifact-source[data-v-f24e35d7]{height:100%;overflow:auto;background:var(--gn-color-black)}.artifact-source-code[data-v-f24e35d7],.artifact-source-error[data-v-f24e35d7]{margin:0;padding:14px;white-space:pre;font-family:var(--gn-font-family-base);font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.artifact-source-error[data-v-f24e35d7]{color:var(--gn-color-error)}.artifact-source-state[data-v-f24e35d7]{display:flex;align-items:center;gap:8px;padding:14px;color:var(--gn-color-text-dark);font-size:12px}.artifact-no-preview[data-v-f24e35d7]{height:100%;min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--gn-color-text-dark);font-size:13px}.artifact-no-preview i[data-v-f24e35d7]{font-size:28px}.links-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.link-item[data-v-f24e35d7]{text-decoration:none}.link-item .artifact-title[data-v-f24e35d7]{color:var(--gn-color-accent)}.link-item:hover .artifact-title[data-v-f24e35d7],.link-item.is-active .artifact-title[data-v-f24e35d7]{color:var(--gn-color-text-light)}.link-detail[data-v-f24e35d7]{padding:12px 15px;border-top:2px solid var(--gn-border-color-muted)}.link-detail-header[data-v-f24e35d7]{margin-bottom:8px}.link-detail-count[data-v-f24e35d7]{font-size:12px;color:var(--gn-color-text-dark)}.link-actions[data-v-f24e35d7]{display:flex;gap:6px}.files-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.file-item[data-v-f24e35d7],.file-item.is-dir[data-v-f24e35d7]{cursor:default}.file-item.is-dir .artifact-title[data-v-f24e35d7]{color:var(--gn-color-text-medium)}.file-row-actions[data-v-f24e35d7]{display:flex;gap:4px;flex-shrink:0;opacity:0;transition:opacity .15s ease}.file-item:hover .file-row-actions[data-v-f24e35d7]{opacity:1}.file-row-action[data-v-f24e35d7]{width:28px;height:28px;min-height:0;padding:0}@media(max-width:980px){.artifacts-panel[data-v-f24e35d7]{position:fixed;top:0;right:0;bottom:0;z-index:120;margin-right:0;transform:translate(100%);width:100vw;min-width:100vw;max-width:100vw}.artifacts-resize-handle[data-v-f24e35d7]{display:none}.artifacts-panel.is-open[data-v-f24e35d7]{transform:translate(0)}.artifacts-header[data-v-f24e35d7]{gap:6px;padding:0 10px}.artifacts-tab[data-v-f24e35d7]{padding:8px 10px;gap:4px}.artifacts-tab>span[data-v-f24e35d7]:not(.artifacts-tab-count){display:none}}@media(prefers-reduced-motion:reduce){.artifacts-panel[data-v-f24e35d7]{transition:none}}.files-toolbar[data-v-f24e35d7]{display:flex;align-items:center;justify-content:flex-end;padding:8px 12px 2px}.files-tab-wrap[data-v-f24e35d7]{position:relative;flex:1;display:flex;flex-direction:column;overflow:hidden}.files-refresh-btn[data-v-f24e35d7]:disabled{opacity:.5;cursor:not-allowed}@media(max-width:980px){.files-refresh-btn[data-v-f24e35d7]{display:none}}.files-ptr[data-v-f24e35d7]{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:12px;color:var(--gn-color-text-dark);pointer-events:none;transition:opacity .15s,transform .15s;will-change:transform,opacity}.ptr-pulled[data-v-f24e35d7]{transition:transform .15s}@media(min-width:981px){.files-ptr[data-v-f24e35d7]{display:none}}.terminals-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.terminal-item.is-closed[data-v-f24e35d7]{opacity:.6}.terminal-item .artifact-meta[data-v-f24e35d7]{white-space:normal;word-break:break-word;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.terminal-detail[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column;border-top:2px solid var(--gn-border-color-muted);overflow-y:auto}.terminal-detail-header[data-v-f24e35d7]{padding:12px 15px 8px;display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.terminal-detail-title-wrap[data-v-f24e35d7]{min-width:0}.artifacts-tab-count.has-running[data-v-f24e35d7]{background:var(--gn-color-success);color:var(--gn-color-black)}.terminal-detail-title[data-v-f24e35d7]{font-size:14px;font-weight:600;color:var(--gn-color-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.terminal-detail-close[data-v-f24e35d7]{flex-shrink:0}.terminal-detail-meta[data-v-f24e35d7]{margin-top:3px;font-size:12px;color:var(--gn-color-text-dark);word-break:break-word;line-height:1.5}.terminal-detail-grid[data-v-f24e35d7]{display:flex;flex-direction:column;gap:6px;padding:0 15px 12px;border-bottom:2px solid color-mix(in srgb,var(--gn-color-text-light) 12%,transparent)}.terminal-detail-row[data-v-f24e35d7]{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px}.terminal-detail-label[data-v-f24e35d7]{color:var(--gn-color-text-dark);flex-shrink:0}.terminal-detail-value[data-v-f24e35d7]{color:var(--gn-color-text-light);text-align:right;word-break:break-all}.terminal-detail-value.status-busy[data-v-f24e35d7]{color:var(--gn-color-success)}.terminal-detail-value.status-idle[data-v-f24e35d7]{color:var(--gn-color-secondary)}.terminal-detail-value.status-closed[data-v-f24e35d7]{color:var(--gn-color-error)}.terminal-detail-command[data-v-f24e35d7]{font-family:var(--gn-font-family-base);font-size:11px;color:var(--gn-color-accent)}.terminal-output-wrap[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--gn-color-black)}.terminal-output-header[data-v-f24e35d7]{padding:8px 15px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--gn-color-text-dark);border-bottom:2px solid color-mix(in srgb,var(--gn-color-text-light) 12%,transparent)}.terminal-output[data-v-f24e35d7]{flex:1;margin:0;padding:14px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-family:var(--gn-font-family-base);font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.login-overlay[data-v-da007b37]{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--gn-color-black);z-index:9999}.login-card[data-v-da007b37]{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 40px;border:1px solid var(--gn-border-color-muted);border-radius:16px;max-width:360px;width:90%}.login-logo[data-v-da007b37]{width:64px;height:64px}.login-title[data-v-da007b37]{font-size:24px;font-weight:700;color:var(--gn-color-text-light);margin:0}.login-subtitle[data-v-da007b37]{font-size:14px;color:var(--gn-color-text-medium);margin:0}.login-btn[data-v-da007b37]{margin-top:8px;width:100%;justify-content:center}.container[data-v-55b607e2]{padding:18px}.section[data-v-55b607e2]{margin-bottom:48px}.section-title[data-v-55b607e2],.block[data-v-55b607e2]{margin-bottom:34px}.block-title[data-v-55b607e2]{margin-bottom:22px}p[data-v-55b607e2],.text[data-v-55b607e2]{margin-bottom:15px}.hint[data-v-55b607e2]{margin-top:8px}.list[data-v-55b607e2]{padding-left:22px;margin-bottom:15px}.list-item[data-v-55b607e2]{margin-bottom:8px}.list-nested[data-v-55b607e2]{margin-top:8px}.table[data-v-55b607e2]{margin-bottom:22px}.table-caption[data-v-55b607e2]{margin-bottom:8px}.form-group[data-v-55b607e2]{margin-bottom:15px}.label[data-v-55b607e2]{margin-bottom:5px;display:block}.input[data-v-55b607e2],.textarea[data-v-55b607e2],.select[data-v-55b607e2]{margin-top:5px}.toast[data-v-55b607e2]{padding:15px}.toast-stack[data-v-55b607e2]{gap:8px}.notification-prompt[data-v-55b607e2]{display:flex;align-items:center;flex-wrap:wrap;gap:8px 15px;flex-shrink:0;padding:12px 15px;background:#7aa2f71f;border-bottom:1px solid rgba(122,162,247,.3)}.notification-prompt i[data-v-55b607e2]{font-size:18px;color:#7aa2f7;flex-shrink:0}.notification-prompt-body[data-v-55b607e2]{flex:1 1 240px;min-width:0}.notification-prompt-title[data-v-55b607e2]{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#7aa2f7}.notification-prompt-text[data-v-55b607e2]{font-size:12px;color:#a9b1d6;margin-top:2px}.notification-prompt-actions[data-v-55b607e2]{display:flex;align-items:center;gap:8px;flex-shrink:0}.prompt-slide-enter-active[data-v-55b607e2],.prompt-slide-leave-active[data-v-55b607e2]{transition:max-height .28s ease,opacity .28s ease;overflow:hidden}.prompt-slide-enter-from[data-v-55b607e2],.prompt-slide-leave-to[data-v-55b607e2]{max-height:0;opacity:0}.prompt-slide-enter-to[data-v-55b607e2],.prompt-slide-leave-from[data-v-55b607e2]{max-height:200px;opacity:1}.container[data-v-4a57a206]{padding:18px}.section[data-v-4a57a206]{margin-bottom:48px}.section-title[data-v-4a57a206],.block[data-v-4a57a206]{margin-bottom:34px}.block-title[data-v-4a57a206]{margin-bottom:22px}p[data-v-4a57a206],.text[data-v-4a57a206]{margin-bottom:15px}.hint[data-v-4a57a206]{margin-top:8px}.list[data-v-4a57a206]{padding-left:22px;margin-bottom:15px}.list-item[data-v-4a57a206]{margin-bottom:8px}.list-nested[data-v-4a57a206]{margin-top:8px}.table[data-v-4a57a206]{margin-bottom:22px}.table-caption[data-v-4a57a206]{margin-bottom:8px}.form-group[data-v-4a57a206]{margin-bottom:15px}.label[data-v-4a57a206]{margin-bottom:5px;display:block}.input[data-v-4a57a206],.textarea[data-v-4a57a206],.select[data-v-4a57a206]{margin-top:5px}.toast[data-v-4a57a206]{padding:15px}.toast-stack[data-v-4a57a206]{gap:8px}.offline-banner[data-v-4a57a206]{display:flex;align-items:center;justify-content:center;gap:8px;padding:5px 15px;background:#ff9e6426;color:#ff9e64;font-size:12px;border-bottom:1px solid rgba(255,158,100,.3)}.offline-banner i[data-v-4a57a206]{font-size:16px;flex-shrink:0}.offline-slide-enter-active[data-v-4a57a206],.offline-slide-leave-active[data-v-4a57a206]{transition:max-height .25s ease,opacity .25s ease;overflow:hidden}.offline-slide-enter-from[data-v-4a57a206],.offline-slide-leave-to[data-v-4a57a206]{max-height:0;opacity:0}.offline-slide-enter-to[data-v-4a57a206],.offline-slide-leave-from[data-v-4a57a206]{max-height:48px;opacity:1}.welcome-sidebar-btn[data-v-cf0df608]{display:none;position:fixed;top:12px;left:12px}@media(max-width:1279.98px){.welcome-sidebar-btn[data-v-cf0df608]{display:flex}}.model-chip[data-v-6039953a]{display:inline-flex;align-items:center;gap:4px;max-width:220px;padding:1px 8px;border:1px solid color-mix(in srgb,var(--gn-color-warning) 45%,transparent);border-radius:999px;background:color-mix(in srgb,var(--gn-color-warning) 10%,transparent);color:var(--gn-color-warning);font-size:11px;font-weight:600;line-height:1.6;white-space:nowrap}.model-chip i[data-v-6039953a]{font-size:12px}.model-chip-text[data-v-6039953a]{overflow:hidden;text-overflow:ellipsis}@media(max-width:640px){.model-chip-text[data-v-6039953a]{display:none}.model-chip[data-v-6039953a]{padding:1px 5px}}.context-bar[data-v-cb775a25]{padding:0;border:0;background:none;font:inherit;line-height:1;cursor:pointer;border-radius:4px}.context-bar:hover .context-bar-pct[data-v-cb775a25]{text-decoration:underline}.context-bar[data-v-cb775a25]:focus-visible{outline:2px solid var(--gn-color-primary);outline-offset:2px}.context-bar-pct[data-v-cb775a25]{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--gn-color-success);white-space:nowrap}.context-bar-pct.is-warn[data-v-cb775a25]{color:var(--gn-color-warning)}.context-bar-pct.is-crit[data-v-cb775a25]{color:var(--gn-color-error)}.session-info[data-v-72bc8966]{min-width:min(460px,calc(100vw - 48px));max-height:min(76vh,700px);overflow-y:auto}.session-info .si-rows[data-v-72bc8966]{max-width:none}.si-grid[data-v-72bc8966]{display:grid;gap:18px}@media(min-width:780px){.si-grid[data-v-72bc8966]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.si-section+.si-section[data-v-72bc8966]{margin-top:0;padding-top:0;border-top:none}}.si-live[data-v-72bc8966]{margin-top:18px;padding-top:18px;border-top:1px solid var(--gn-border-color-muted)}.si-live-grid[data-v-72bc8966]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.si-live-item[data-v-72bc8966]{display:flex;flex-direction:column;gap:3px;min-width:0;padding:8px 10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent)}.si-live-term[data-v-72bc8966]{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.si-live-value[data-v-72bc8966]{font-size:12px;color:var(--gn-color-text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-live-value.is-live[data-v-72bc8966]{color:var(--gn-color-primary)}.si-live-value.is-ok[data-v-72bc8966]{color:var(--gn-color-success)}.si-live-value.is-warn[data-v-72bc8966]{color:var(--gn-color-warning)}.si-live-value.is-error[data-v-72bc8966]{color:var(--gn-color-error)}.si-live-value.is-muted[data-v-72bc8966]{color:var(--gn-color-text-medium)}.si-heading[data-v-72bc8966]{margin:0 0 10px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-medium)}.si-subheading[data-v-72bc8966]{margin:14px 0 6px;font-size:11px;font-weight:600;color:var(--gn-color-text-light)}.si-active[data-v-72bc8966]{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent)}.si-active.is-backup[data-v-72bc8966]{border-color:color-mix(in srgb,var(--gn-color-warning) 45%,transparent);background:color-mix(in srgb,var(--gn-color-warning) 8%,transparent)}.si-active>i[data-v-72bc8966]{font-size:18px;color:var(--gn-color-success)}.si-active.is-backup>i[data-v-72bc8966]{color:var(--gn-color-warning)}.si-active-text[data-v-72bc8966]{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.si-model[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);font-size:13px;color:var(--gn-color-text-dark);overflow:hidden;text-overflow:ellipsis}.si-server[data-v-72bc8966]{font-size:11px;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis}.si-chain-list[data-v-72bc8966]{display:flex;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none}.si-chain-item[data-v-72bc8966]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:6px;font-size:12px;color:var(--gn-color-text-medium)}.si-chain-item.is-active[data-v-72bc8966]{background:color-mix(in srgb,var(--gn-color-primary) 10%,transparent);color:var(--gn-color-text-dark)}.si-chain-dot[data-v-72bc8966]{width:7px;height:7px;flex:none;border-radius:50%;background:var(--gn-color-success)}.si-chain-dot.is-degraded[data-v-72bc8966]{background:var(--gn-color-warning)}.si-chain-dot.is-missing[data-v-72bc8966]{background:var(--gn-color-error)}.si-chain-model[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-chain-target[data-v-72bc8966]{margin-left:auto;color:var(--gn-color-text-light);white-space:nowrap}.si-chain-state[data-v-72bc8966]{min-width:48px;text-align:right;font-size:11px;color:var(--gn-color-text-light);white-space:nowrap}.si-id[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);font-size:11px;word-break:break-all;min-width:0}.si-id-row[data-v-72bc8966]{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:100%}.si-muted[data-v-72bc8966]{color:var(--gn-color-text-medium);font-size:12px}.si-error[data-v-72bc8966]{display:flex;align-items:center;gap:6px;margin:0;color:var(--gn-color-error);font-size:13px}.si-loading[data-v-72bc8966]{display:flex;align-items:center;gap:8px;padding:16px 0}.si-spin[data-v-72bc8966]{animation:si-spin-72bc8966 1s linear infinite}@keyframes si-spin-72bc8966{to{transform:rotate(360deg)}}.share-body[data-v-5d45d058]{display:flex;flex-direction:column;gap:12px;min-width:min(420px,calc(100vw - 48px))}.share-intro[data-v-5d45d058]{margin:0;font-size:13px;line-height:1.5;color:var(--gn-color-text-medium)}.share-label[data-v-5d45d058]{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.share-link-row[data-v-5d45d058]{display:flex;align-items:center;gap:8px}.share-url[data-v-5d45d058]{flex:1;min-width:0;padding:8px 10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent);color:var(--gn-color-text-dark);font-family:var(--gn-font-mono, monospace);font-size:12px}.share-warning[data-v-5d45d058]{display:flex;gap:8px;margin:0;padding:10px 12px;border:1px solid color-mix(in srgb,var(--gn-color-warning) 40%,transparent);border-radius:var(--gn-radius-md, 8px);background:color-mix(in srgb,var(--gn-color-warning) 8%,transparent);font-size:12px;line-height:1.5;color:var(--gn-color-text-medium)}.share-warning>i[data-v-5d45d058]{flex:none;margin-top:1px;color:var(--gn-color-warning)}.share-hint[data-v-5d45d058]{margin:0;font-size:12px;color:var(--gn-color-text-light)}.share-loading[data-v-5d45d058]{display:flex;align-items:center;gap:8px;padding:8px 0;font-size:13px;color:var(--gn-color-text-medium)}.share-spin[data-v-5d45d058]{animation:share-spin-5d45d058 1s linear infinite}@keyframes share-spin-5d45d058{to{transform:rotate(360deg)}}.share-error[data-v-5d45d058]{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:var(--gn-color-error)}.recall-info[data-v-707cd1f9]{min-width:min(420px,calc(100vw - 48px));max-height:min(70vh,640px);overflow-y:auto}.recall-info .ri-rows[data-v-707cd1f9]{max-width:none}.ri-block[data-v-707cd1f9]{margin-top:16px;padding-top:16px;border-top:1px solid var(--gn-border-color-muted)}.ri-heading[data-v-707cd1f9]{margin:0 0 6px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.ri-comment[data-v-707cd1f9]{margin:0;font-size:13px;color:var(--gn-color-text-light);white-space:pre-wrap;overflow-wrap:anywhere}.ri-message[data-v-707cd1f9]{margin:0;padding:10px 12px;max-height:260px;overflow:auto;font-family:var(--gn-font-mono, monospace);font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--gn-color-text-light);background:var(--gn-surface-panel-muted, transparent);border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px)}.ri-muted[data-v-707cd1f9]{margin:0;color:var(--gn-color-text-medium)}.chat-header-menu[data-v-686a3283] .dropdown-menu{left:auto;right:0;min-width:200px;transform-origin:top right}.btn-artifacts-toggle[data-v-686a3283]{position:relative}.artifact-count[data-v-686a3283]{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px;font-size:10px;line-height:1;background:var(--gn-color-secondary);color:var(--gn-color-black)}.recall-banner[data-v-686a3283]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:color-mix(in srgb,var(--gn-color-secondary) 12%,transparent);border-bottom:1px solid var(--gn-border-color-muted);font-size:12px;color:var(--gn-color-text-medium)}.recall-open[data-v-686a3283]{flex:1;display:flex;align-items:center;gap:8px;min-width:0;padding:0;background:none;border:none;font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:4px}.recall-open:hover .recall-text[data-v-686a3283]{color:var(--gn-color-text-dark)}.recall-open[data-v-686a3283]:focus-visible{outline:2px solid var(--gn-color-primary);outline-offset:2px}.recall-banner i[data-v-686a3283]{color:var(--gn-color-secondary);font-size:14px}.recall-text[data-v-686a3283]{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.recall-btn[data-v-686a3283]{background:none;border:none;color:var(--gn-color-text-dark);cursor:pointer;padding:4px 6px;font-size:15px;line-height:1;border-radius:4px;transition:color .15s,background .15s}.recall-btn[data-v-686a3283]:hover{color:var(--gn-color-text-medium);background:color-mix(in srgb,var(--gn-color-text-light) 6%,transparent)}.container[data-v-06477ddd]{padding:18px}.section[data-v-06477ddd]{margin-bottom:48px}.section-title[data-v-06477ddd],.block[data-v-06477ddd]{margin-bottom:34px}.block-title[data-v-06477ddd]{margin-bottom:22px}p[data-v-06477ddd],.text[data-v-06477ddd]{margin-bottom:15px}.hint[data-v-06477ddd]{margin-top:8px}.list[data-v-06477ddd]{padding-left:22px;margin-bottom:15px}.list-item[data-v-06477ddd]{margin-bottom:8px}.list-nested[data-v-06477ddd]{margin-top:8px}.table[data-v-06477ddd]{margin-bottom:22px}.table-caption[data-v-06477ddd]{margin-bottom:8px}.form-group[data-v-06477ddd]{margin-bottom:15px}.label[data-v-06477ddd]{margin-bottom:5px;display:block}.input[data-v-06477ddd],.textarea[data-v-06477ddd],.select[data-v-06477ddd]{margin-top:5px}.toast[data-v-06477ddd]{padding:15px}.toast-stack[data-v-06477ddd]{gap:8px}.content-card[data-v-06477ddd]{margin:8px 0;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);border-radius:6px;overflow:hidden}.content-card summary[data-v-06477ddd]{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}.content-card summary[data-v-06477ddd]::-webkit-details-marker{display:none}.content-icon[data-v-06477ddd]{font-size:20px;line-height:1;flex-shrink:0;color:var(--gn-color-text-medium)}.content-title[data-v-06477ddd]{flex:1;font-size:.9em;font-weight:500;color:var(--gn-color-text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-v-06477ddd] .badge{flex-shrink:0}.content-actions[data-v-06477ddd]{display:inline-flex;align-items:center;gap:2px}.content-actions .btn-icon[data-v-06477ddd]{width:26px;height:26px;font-size:18px;border-color:transparent}.content-chevron[data-v-06477ddd]{transition:transform .2s;color:var(--gn-color-text-dark)}.content-card[open] .content-chevron[data-v-06477ddd]{transform:rotate(180deg)}.content-body[data-v-06477ddd]{border-top:1px solid var(--gn-border-color-muted);overflow:auto}.content-iframe[data-v-06477ddd]{width:100%;height:300px;border:none;display:block}@media(min-width:768px){.content-iframe[data-v-06477ddd]{height:500px}}.content-image-wrap[data-v-06477ddd]{position:relative;min-height:160px}.content-image[data-v-06477ddd]{width:100%;max-height:60vh;object-fit:contain;cursor:zoom-in;display:block;background:var(--gn-surface-panel)}.content-image-skeleton[data-v-06477ddd]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border-bottom:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark)}.content-image-spinner[data-v-06477ddd]{animation:content-image-spin-06477ddd .9s linear infinite;font-size:22px}@keyframes content-image-spin-06477ddd{to{transform:rotate(360deg)}}.content-video[data-v-06477ddd]{width:100%;max-height:60vh;display:block;background:var(--gn-surface-panel)}.content-audio-wrap[data-v-06477ddd]{background:var(--gn-surface-panel)}.content-text[data-v-06477ddd]{max-height:500px;overflow:auto;background:var(--gn-color-black)}.content-text-note[data-v-06477ddd]{padding:8px 14px;border-top:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark);font-size:12px}.content-source[data-v-06477ddd]{max-height:500px;overflow:auto;background:var(--gn-color-black)}.content-source-code[data-v-06477ddd],.content-source-error[data-v-06477ddd]{margin:0;padding:14px;white-space:pre;font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.content-source-error[data-v-06477ddd]{color:var(--gn-color-error)}.content-source-state[data-v-06477ddd]{display:flex;align-items:center;gap:8px;padding:14px;color:var(--gn-color-text-dark);font-size:12px}.content-unknown[data-v-06477ddd]{padding:24px;text-align:center;color:var(--gn-color-text-dark);display:flex;flex-direction:column;align-items:center;gap:10px}.unknown-icon[data-v-06477ddd]{font-size:2em;line-height:1}.unknown-name[data-v-06477ddd]{font-size:.95em;font-weight:500;color:var(--gn-color-text-light);word-break:break-word;max-width:100%}.unknown-open[data-v-06477ddd]{width:auto;text-decoration:none;font-size:.9em}.card-grid[data-v-9c3e6ea0]{display:flex;flex-direction:column;gap:12px}.card-grid-title[data-v-9c3e6ea0]{font-size:1rem;font-weight:600;color:var(--gn-color-text-light)}.card-grid-items[data-v-9c3e6ea0]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}@media(max-width:640px){.card-grid-items[data-v-9c3e6ea0]{grid-template-columns:1fr}}.card-grid-item[data-v-9c3e6ea0]{display:flex;flex-direction:column;background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border:1px solid var(--gn-border-color-muted);overflow:hidden;cursor:pointer;transition:border-color .15s,transform .1s}.card-grid-item[data-v-9c3e6ea0]:hover,.card-grid-item[data-v-9c3e6ea0]:focus{border-color:var(--gn-color-secondary);outline:none}.card-grid-item[data-v-9c3e6ea0]:active{transform:scale(.99)}.card-image[data-v-9c3e6ea0]{width:100%;height:140px;object-fit:cover;background:var(--gn-surface-panel)}.card-no-image[data-v-9c3e6ea0]{width:100%;height:140px;display:flex;align-items:center;justify-content:center;color:var(--gn-color-text-dark);font-size:2rem;background:var(--gn-surface-panel)}.card-content[data-v-9c3e6ea0]{padding:12px;display:flex;flex-direction:column;gap:8px;flex:1}.card-title[data-v-9c3e6ea0]{font-weight:600;font-size:.95rem;color:var(--gn-color-text-light);line-height:1.3}.card-subtitle[data-v-9c3e6ea0]{font-size:.8rem;color:var(--gn-color-text-dark)}.card-meta[data-v-9c3e6ea0]{display:flex;flex-wrap:wrap;gap:8px}.card-meta-item[data-v-9c3e6ea0]{display:flex;gap:4px;font-size:.75rem}.card-meta-label[data-v-9c3e6ea0]{color:var(--gn-color-text-dark)}.card-meta-value[data-v-9c3e6ea0]{color:var(--gn-color-text-light);font-weight:500}.card-description[data-v-9c3e6ea0]{font-size:.8rem;color:var(--gn-color-text-light);line-height:1.4;opacity:.85;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-grid-more[data-v-9c3e6ea0]{text-align:center;font-size:.8rem;color:var(--gn-color-text-dark)}.card-modal-image[data-v-9c3e6ea0]{width:100%;max-height:320px;object-fit:cover;background:var(--gn-surface-panel)}.card-modal-content[data-v-9c3e6ea0]{padding:20px;display:flex;flex-direction:column;gap:18px}.card-modal-title[data-v-9c3e6ea0]{margin:0;font-size:1.15rem;font-weight:600;color:var(--gn-color-text-light);text-transform:none}.card-modal-subtitle[data-v-9c3e6ea0]{color:var(--gn-color-text-dark);font-size:.9rem}.card-modal-section[data-v-9c3e6ea0]{display:flex;flex-direction:column;gap:10px}.card-modal-section-title[data-v-9c3e6ea0]{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gn-color-text-dark)}.card-modal-meta-grid[data-v-9c3e6ea0]{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.card-modal-meta-cell[data-v-9c3e6ea0]{background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border:1px solid var(--gn-border-color-muted);padding:10px}.card-modal-meta-label[data-v-9c3e6ea0]{font-size:.7rem;color:var(--gn-color-text-dark);margin-bottom:4px}.card-modal-meta-value[data-v-9c3e6ea0]{font-size:.9rem;color:var(--gn-color-text-light);font-weight:500}.card-modal-text[data-v-9c3e6ea0]{margin:0;line-height:1.5;color:var(--gn-color-text-light)}.card-modal-details[data-v-9c3e6ea0]{margin:0;display:grid;gap:8px}.card-modal-detail-row[data-v-9c3e6ea0]{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--gn-border-color-muted)}.card-modal-detail-row[data-v-9c3e6ea0]:last-child{border-bottom:none}.card-modal-detail-row dt[data-v-9c3e6ea0]{color:var(--gn-color-text-dark);font-size:.85rem}.card-modal-detail-row dd[data-v-9c3e6ea0]{margin:0;color:var(--gn-color-text-light);font-size:.85rem;text-align:right;word-break:break-word}.card-modal-actions[data-v-9c3e6ea0]{display:flex;gap:10px;flex-wrap:wrap}.card-modal-action[data-v-9c3e6ea0]{display:inline-flex;align-items:center;padding:8px 14px;background:color-mix(in srgb,var(--gn-color-secondary) 14%,var(--gn-surface-panel));color:var(--gn-color-secondary);text-decoration:none;font-size:.85rem;font-weight:500}.card-modal-action[data-v-9c3e6ea0]:hover{background:var(--gn-border-color-muted)}.ui-form[data-v-5c058078]{display:flex;flex-direction:column;gap:14px}.ui-form-title[data-v-5c058078]{font-size:1rem;font-weight:600;color:var(--gn-color-text-light)}.ui-form-description[data-v-5c058078]{font-size:.85rem;color:var(--gn-color-text-dark);line-height:1.4}.ui-form-fields[data-v-5c058078]{display:flex;flex-direction:column;gap:14px}.ui-form-field[data-v-5c058078]{display:flex;flex-direction:column;gap:4px}.ui-form-field.has-error .ui-form-input[data-v-5c058078]{border-color:var(--gn-color-error)}.ui-form-label[data-v-5c058078]{font-size:.85rem;font-weight:500;color:var(--gn-color-text-light)}.ui-form-required[data-v-5c058078]{color:var(--gn-color-error);margin-left:2px}.ui-form-field-hint[data-v-5c058078]{font-size:.75rem;color:var(--gn-color-text-dark)}.ui-form-input[data-v-5c058078]{padding:10px 12px;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-light);font-size:.9rem;outline:none;transition:border-color .15s}.ui-form-input[data-v-5c058078]:focus{border-color:var(--gn-color-secondary)}.ui-form-input[data-v-5c058078]::placeholder{color:var(--gn-color-text-dark)}select.ui-form-input[data-v-5c058078]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%236c7086' viewBox='0 0 256 256'%3E%3Cpath d='M213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80A8 8 0 0 1 48 88h160a8 8 0 0 1 5.66 13.66z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}select.ui-form-input[multiple][data-v-5c058078]{background-image:none;padding-right:12px;min-height:100px}.ui-form-checkbox[data-v-5c058078]{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--gn-color-text-light);cursor:pointer}.ui-form-checkbox input[data-v-5c058078]{width:18px;height:18px;accent-color:var(--gn-color-secondary);cursor:pointer}.ui-form-error[data-v-5c058078]{font-size:.8rem;color:var(--gn-color-error)}.ui-form-submit[data-v-5c058078]{display:inline-flex;align-items:center;justify-content:center;gap:8px;align-self:flex-start;padding:10px 18px;background:var(--gn-color-secondary);color:var(--gn-surface-panel);border:none;font-size:.9rem;font-weight:600;cursor:pointer;transition:opacity .15s}.ui-form-submit[data-v-5c058078]:disabled{opacity:.5;cursor:not-allowed}.ui-form-submit[data-v-5c058078]:not(:disabled):hover{opacity:.9}.ui-form-spinner[data-v-5c058078]{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:ui-form-spin-5c058078 .8s linear infinite}@keyframes ui-form-spin-5c058078{to{transform:rotate(360deg)}}.ui-form-submitted[data-v-5c058078]{display:flex;flex-direction:column;gap:10px}.ui-form-submitted-note[data-v-5c058078]{display:flex;align-items:center;gap:6px;font-size:.85rem;color:var(--gn-color-secondary)}.ui-form-summary[data-v-5c058078]{margin:0;display:grid;gap:8px}.ui-form-summary-row[data-v-5c058078]{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--gn-border-color-muted)}.ui-form-summary-row[data-v-5c058078]:last-child{border-bottom:none}.ui-form-summary-row dt[data-v-5c058078]{color:var(--gn-color-text-dark);font-size:.85rem}.ui-form-summary-row dd[data-v-5c058078]{margin:0;color:var(--gn-color-text-light);font-size:.85rem;text-align:right;word-break:break-word}.skill-doc-section[data-v-49d14b50]{padding:12px 0;border-top:1px solid var(--gn-border-color-muted)}.skill-doc>.skill-doc-section[data-v-49d14b50]:first-child{padding-top:0;border-top:none}.skill-doc-label[data-v-49d14b50]{margin:0 0 8px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-dark)}.skill-doc-triggers[data-v-49d14b50]{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px}.skill-doc-trigger[data-v-49d14b50]{color:var(--gn-color-secondary)}.skill-doc-list[data-v-49d14b50]{margin:0;padding:0;list-style:none;display:grid;gap:6px}.skill-doc-list li[data-v-49d14b50]{display:grid;grid-template-columns:16px 1fr;gap:8px;align-items:start}.skill-doc-list i[data-v-49d14b50]{font-size:15px;line-height:1.4}.skill-doc-list.is-required i[data-v-49d14b50]{color:var(--gn-color-warning)}.skill-doc-list.is-check i[data-v-49d14b50]{color:var(--gn-color-success)}.skill-doc-steps[data-v-49d14b50]{margin:0;padding:0;list-style:none;display:grid;gap:10px}.skill-doc-steps>li[data-v-49d14b50]{display:grid;grid-template-columns:24px 1fr;gap:10px;align-items:start}.skill-doc-step-num[data-v-49d14b50]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:3px;border:1px solid var(--gn-border-color-muted);font-size:12px;font-weight:700;color:var(--gn-color-secondary)}.skill-doc-step-body[data-v-49d14b50]{min-width:0;padding-top:1px}.skill-doc-step-title[data-v-49d14b50]{font-weight:600;color:var(--gn-color-text-light)}.skill-doc-step-action[data-v-49d14b50]{margin-top:2px;color:var(--gn-color-text-medium)}.skill-doc-step-check[data-v-49d14b50]{display:flex;align-items:baseline;gap:6px;margin-top:4px;color:var(--gn-color-text-dark);font-size:12px}.skill-doc-step-check i[data-v-49d14b50]{color:var(--gn-color-success)}.skill-doc-step-body[data-v-49d14b50] p,.skill-doc-body[data-v-49d14b50] p{margin:0}.skill-doc-step-body[data-v-49d14b50] p+p,.skill-doc-body[data-v-49d14b50] p+p{margin-top:8px}.skill-doc-step-body[data-v-49d14b50] code,.skill-doc-body[data-v-49d14b50] code{padding:1px 4px;border-radius:3px;background:var(--gn-surface-panel-muted);font-family:IBM Plex Mono,monospace;font-size:12px}.skill-doc-step-body[data-v-49d14b50] ul,.skill-doc-step-body[data-v-49d14b50] ol,.skill-doc-body[data-v-49d14b50] ul,.skill-doc-body[data-v-49d14b50] ol{margin:4px 0 0;padding-left:18px}.skill-doc-hatches[data-v-49d14b50]{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:0}.skill-doc-hatches dt[data-v-49d14b50],.skill-doc-hatches dd[data-v-49d14b50]{padding:7px 0;border-top:1px solid var(--gn-border-color-muted)}.skill-doc-hatches dt[data-v-49d14b50]:nth-of-type(1),.skill-doc-hatches dt:nth-of-type(1)+dd[data-v-49d14b50]{border-top:none;padding-top:0}.skill-doc-hatches dt[data-v-49d14b50]{padding-right:12px;font-weight:600;color:var(--gn-color-text-dark)}.skill-doc-hatches dd[data-v-49d14b50]{margin:0;color:var(--gn-color-text-medium)}.skill-doc-body[data-v-49d14b50]{color:var(--gn-color-text-medium)}.skill-doc-body[data-v-49d14b50] h1,.skill-doc-body[data-v-49d14b50] h2,.skill-doc-body[data-v-49d14b50] h3,.skill-doc-body[data-v-49d14b50] h4{margin:10px 0 4px;font-size:13px;font-weight:600;color:var(--gn-color-text-light)}.skill-doc-body[data-v-49d14b50] pre{overflow-x:auto}@media(max-width:560px){.skill-doc-hatches[data-v-49d14b50]{grid-template-columns:1fr}.skill-doc-hatches dt[data-v-49d14b50]{padding-bottom:0;border-top:1px solid var(--gn-border-color-muted);padding-top:7px}.skill-doc-hatches dd[data-v-49d14b50]{border-top:none;padding-top:2px}.skill-doc-hatches dt[data-v-49d14b50]:nth-of-type(1){border-top:none;padding-top:0}}.skill-proposal[data-v-28624486]{margin:10px 0;max-width:100%;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);border-left:3px solid var(--gn-color-secondary);border-radius:6px;overflow:hidden;font-size:13px;line-height:1.5;color:var(--gn-color-text-light)}.skill-proposal.is-accepted[data-v-28624486]{border-left-color:var(--gn-color-success)}.skill-proposal.is-rejected[data-v-28624486]{border-left-color:var(--gn-color-text-dark)}.skill-proposal-loading[data-v-28624486]{display:flex;align-items:center;gap:12px;padding:16px;color:var(--gn-color-text-dark)}.skill-proposal-head[data-v-28624486]{padding:14px 16px 12px}.skill-proposal-kicker[data-v-28624486]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-secondary)}.skill-proposal-kind[data-v-28624486]{display:inline-flex;align-items:center;gap:6px;font-weight:600}.skill-proposal-area[data-v-28624486]{color:var(--gn-color-text-dark)}.skill-proposal-tags[data-v-28624486]{display:inline-flex;gap:6px;margin-left:auto;text-transform:none;letter-spacing:0}.skill-proposal-name[data-v-28624486]{margin:0;font-size:16px;font-weight:600;line-height:1.35;color:var(--gn-color-text-light)}.skill-proposal-description[data-v-28624486]{margin:6px 0 0;color:var(--gn-color-text-medium)}.skill-proposal-doc[data-v-28624486]{padding:0 16px 12px}.skill-proposal-footer[data-v-28624486]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:12px 16px;border-top:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel-muted)}.skill-proposal-decision[data-v-28624486]{display:flex;align-items:center;gap:6px;width:100%}.skill-proposal-error[data-v-28624486]{font-size:12px;color:var(--gn-color-error)}.ui-component-card[data-v-f64f3335]{margin:8px 0;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);overflow:hidden}.ui-component-header[data-v-f64f3335]{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--gn-border-color-muted);-webkit-user-select:none;user-select:none}.ui-component-icon[data-v-f64f3335]{font-size:1.2em;line-height:1}.ui-component-name[data-v-f64f3335]{flex:1;font-size:.9em;font-weight:500;color:var(--gn-color-text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ui-component-badge[data-v-f64f3335]{font-size:.7em;text-transform:uppercase;padding:2px 8px;background:color-mix(in srgb,var(--gn-color-secondary) 14%,var(--gn-surface-panel));color:var(--gn-color-secondary)}.ui-component-body[data-v-f64f3335]{padding:12px 14px}.ui-component-fallback[data-v-f64f3335]{color:var(--gn-color-text-dark)}.ui-component-fallback-title[data-v-f64f3335]{font-size:.8rem;margin-bottom:8px;font-weight:500}.ui-component-fallback-json[data-v-f64f3335]{margin:0;font-family:monospace;font-size:.8rem;white-space:pre-wrap}.stream-cursor[data-v-7b659b91]{display:inline-block;width:2px;height:1em;background:currentColor;margin-left:2px;vertical-align:text-bottom;animation:blink-7b659b91 1s step-end infinite}@keyframes blink-7b659b91{0%,to{opacity:1}50%{opacity:0}}.msg-rate-btn[data-v-7b659b91]{opacity:.55;transition:opacity .15s,color .15s}.msg-rate-btn[data-v-7b659b91]:hover{opacity:1}.msg-rate-btn.active[data-v-7b659b91]{opacity:1;color:var(--gn-color-secondary)}.compression-pending[data-v-0df68e38]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;background:var(--gn-surface-panel-strong);color:var(--gn-color-text-dark);font-size:13px}.compression-pending i[data-v-0df68e38]{font-size:16px}.synapse-event[data-v-e89b33a0]{border-left:2px solid var(--gn-color-secondary);padding:2px 0 2px 12px;opacity:.9}.synapse-event-head[data-v-e89b33a0]{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--gn-color-secondary);opacity:.85;margin-bottom:4px}.synapse-event-head i[data-v-e89b33a0]{font-size:12px}.synapse-event-type[data-v-e89b33a0]{font-family:var(--gn-font-mono, monospace);font-size:10px;padding:1px 6px;border-radius:999px;background:var(--gn-surface-panel-strong);color:var(--gn-color-text-dark)}.synapse-event-time[data-v-e89b33a0]{margin-left:auto;font-size:11px;color:var(--gn-color-text-dark)}.synapse-event-body[data-v-e89b33a0]{font-size:13px;color:var(--gn-color-text-medium);word-break:break-word}.synapse-event-body[data-v-e89b33a0] p{margin:0 0 8px}.synapse-event-body[data-v-e89b33a0] p:last-child{margin-bottom:0}.message-list-wrap[data-v-d8b83e98]{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.message-scroller[data-v-d8b83e98]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;transition:opacity .25s ease;padding-top:16px}.message-scroller.is-hidden[data-v-d8b83e98]{opacity:0;pointer-events:none}.message-row[data-v-d8b83e98]{padding-bottom:32px;width:100%;max-width:920px;margin:0 auto;padding-left:24px;padding-right:24px;content-visibility:auto;contain-intrinsic-size:auto 140px}@media(max-width:767px){.message-row[data-v-d8b83e98]{padding-left:10px;padding-right:10px}}.session-loading[data-v-d8b83e98]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:26px;color:var(--gn-color-text-medium);pointer-events:none}.session-loading .animate-spin[data-v-d8b83e98]{animation:session-spin-d8b83e98 1s linear infinite}@keyframes session-spin-d8b83e98{to{transform:rotate(360deg)}}.archive-loading[data-v-d8b83e98]{position:absolute;top:8px;left:0;right:0;z-index:5;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:13px;color:var(--gn-color-text-medium);background:transparent;pointer-events:none}.animate-spin[data-v-d8b83e98]{animation:spin-d8b83e98 1s linear infinite}@keyframes spin-d8b83e98{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.scroll-to-bottom-btn[data-v-d8b83e98]{position:absolute;bottom:16px;right:16px;width:40px;height:40px;border-radius:50%;background:var(--gn-color-secondary);color:var(--gn-color-black);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;box-shadow:0 2px 12px #0006;opacity:.9;transition:opacity .15s ease,transform .15s ease;z-index:10}.scroll-to-bottom-btn[data-v-d8b83e98]:hover{opacity:1;transform:translateY(-2px)}.scroll-btn-enter-active[data-v-d8b83e98],.scroll-btn-leave-active[data-v-d8b83e98]{transition:opacity .2s ease,transform .2s ease}.scroll-btn-enter-from[data-v-d8b83e98],.scroll-btn-leave-to[data-v-d8b83e98]{opacity:0;transform:translateY(8px)}.file-preview-image[data-v-2023088a]{position:relative}.file-preview-image .file-preview-remove[data-v-2023088a]{position:absolute;top:-4px;right:-4px;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:10px;cursor:pointer;color:var(--gn-color-text-dark)}.file-preview-image .file-preview-remove[data-v-2023088a]:hover{color:var(--gn-color-error)}.file-preview-image.is-processing[data-v-2023088a]{display:flex;align-items:center;justify-content:center;color:var(--gn-color-text-medium)}.file-preview-image.is-processing .ph-spin[data-v-2023088a]{animation:spin-2023088a .9s linear infinite}@keyframes spin-2023088a{to{transform:rotate(360deg)}}.sending-notice[data-v-dc74318b]{display:flex;align-items:center;gap:6px;padding:4px 8px;font-size:12px;color:var(--gn-color-text-medium);margin-bottom:4px}.sending-notice .ph-spin[data-v-dc74318b]{animation:sending-spin-dc74318b .9s linear infinite}@keyframes sending-spin-dc74318b{to{transform:rotate(360deg)}}.reconnect-banner[data-v-651243b6]{display:flex;align-items:center;gap:8px;margin:8px 16px 0;font-size:13px}.create-key-body[data-v-40e57301]{min-width:min(320px,100vw - 48px)}.show-token-body[data-v-cfe353f9]{min-width:min(420px,100vw - 48px)}.show-token-warning[data-v-cfe353f9]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-warning);display:flex;align-items:center;gap:6px}.show-token-warning i[data-v-cfe353f9]{font-size:1.1rem}.show-token-value[data-v-cfe353f9]{flex:1 1 0;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--gn-color-text-medium)}.api-keys-panel[data-v-ae70e1f9]{margin-bottom:24px}.api-keys-header[data-v-ae70e1f9]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.api-keys-title[data-v-ae70e1f9]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.api-keys-description[data-v-ae70e1f9]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.api-keys-warning[data-v-ae70e1f9]{margin-bottom:16px}.api-keys-warning i[data-v-ae70e1f9]{font-size:16px;flex-shrink:0}.api-keys-loading[data-v-ae70e1f9]{padding:24px;text-align:center}.api-keys-panel code[data-v-ae70e1f9]{font-family:var(--gn-font-family-base);color:var(--gn-color-text-medium)}.container[data-v-d13b8cf7]{padding:18px}.section[data-v-d13b8cf7]{margin-bottom:48px}.section-title[data-v-d13b8cf7],.block[data-v-d13b8cf7]{margin-bottom:34px}.block-title[data-v-d13b8cf7]{margin-bottom:22px}p[data-v-d13b8cf7],.text[data-v-d13b8cf7]{margin-bottom:15px}.hint[data-v-d13b8cf7]{margin-top:8px}.list[data-v-d13b8cf7]{padding-left:22px;margin-bottom:15px}.list-item[data-v-d13b8cf7]{margin-bottom:8px}.list-nested[data-v-d13b8cf7]{margin-top:8px}.table[data-v-d13b8cf7]{margin-bottom:22px}.table-caption[data-v-d13b8cf7]{margin-bottom:8px}.form-group[data-v-d13b8cf7]{margin-bottom:15px}.label[data-v-d13b8cf7]{margin-bottom:5px;display:block}.input[data-v-d13b8cf7],.textarea[data-v-d13b8cf7],.select[data-v-d13b8cf7]{margin-top:5px}.toast[data-v-d13b8cf7]{padding:15px}.toast-stack[data-v-d13b8cf7]{gap:8px}.account-language[data-v-d13b8cf7]{margin-bottom:24px}.account-language-header[data-v-d13b8cf7]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.account-language-title[data-v-d13b8cf7]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.account-language-description[data-v-d13b8cf7]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.notifications-panel[data-v-b74fdfda]{margin-bottom:24px}.notifications-title[data-v-b74fdfda]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.notifications-description[data-v-b74fdfda]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.notifications-unsupported[data-v-b74fdfda]{display:flex;align-items:flex-start;gap:8px;margin-bottom:16px}.notifications-unsupported i[data-v-b74fdfda]{font-size:16px;flex-shrink:0}.notifications-row[data-v-b74fdfda]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.notifications-row-title[data-v-b74fdfda]{font-size:.9rem;color:var(--gn-color-text-medium)}.notifications-row-status[data-v-b74fdfda]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px}.reactions-instructions[data-v-e248ff58]{padding:14px 16px;margin-bottom:12px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.reactions-row-title[data-v-e248ff58]{font-size:.9rem;color:var(--gn-color-text-medium);font-weight:500}.reactions-row-status[data-v-e248ff58]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px;max-width:420px}.reactions-instructions-textarea[data-v-e248ff58]{margin-top:10px}.reactions-instructions-actions[data-v-e248ff58]{margin-top:10px;display:flex;justify-content:flex-end}.reactions-history[data-v-e248ff58]{margin-top:14px}.reactions-history-title[data-v-e248ff58]{font-size:.85rem;font-weight:600;color:var(--gn-color-text-medium);margin-bottom:8px}.reactions-history-item[data-v-e248ff58]{padding:8px 10px;border-left:2px solid var(--gn-border-color-muted)}.reactions-history-item+.reactions-history-item[data-v-e248ff58]{margin-top:8px}.reactions-history-meta[data-v-e248ff58]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:var(--gn-color-text-dark)}.reactions-history-meta i[data-v-e248ff58]{font-size:12px}.reactions-history-text[data-v-e248ff58]{margin-top:4px;font-size:.8rem;color:var(--gn-color-text-medium);white-space:pre-wrap;word-break:break-word}.reactions-panel[data-v-bcaf624e]{margin-bottom:24px}.reactions-title[data-v-bcaf624e]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.reactions-description[data-v-bcaf624e]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.reactions-alert[data-v-bcaf624e]{display:flex;align-items:flex-start;gap:8px;margin-bottom:16px}.reactions-alert i[data-v-bcaf624e]{font-size:16px;flex-shrink:0}.reactions-loading[data-v-bcaf624e]{padding:24px;text-align:center}.reactions-row[data-v-bcaf624e]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:14px 16px;margin-bottom:12px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.reactions-row-title[data-v-bcaf624e]{font-size:.9rem;color:var(--gn-color-text-medium);font-weight:500}.reactions-row-status[data-v-bcaf624e]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px;max-width:420px}.reactions-ttl-input[data-v-bcaf624e]{width:90px;flex:0 0 auto}.create-target-body[data-v-a46fb717]{min-width:min(360px,100vw - 48px);display:flex;flex-direction:column;gap:15px}.create-target-hint[data-v-a46fb717]{margin:0;font-size:.8125rem;color:var(--gn-color-text-medium)}.create-target-hint code[data-v-a46fb717]{font-family:var(--gn-font-family-base)}.container[data-v-fa4b73ef]{padding:18px}.section[data-v-fa4b73ef]{margin-bottom:48px}.section-title[data-v-fa4b73ef],.block[data-v-fa4b73ef]{margin-bottom:34px}.block-title[data-v-fa4b73ef]{margin-bottom:22px}p[data-v-fa4b73ef],.text[data-v-fa4b73ef]{margin-bottom:15px}.hint[data-v-fa4b73ef]{margin-top:8px}.list[data-v-fa4b73ef]{padding-left:22px;margin-bottom:15px}.list-item[data-v-fa4b73ef]{margin-bottom:8px}.list-nested[data-v-fa4b73ef]{margin-top:8px}.table[data-v-fa4b73ef]{margin-bottom:22px}.table-caption[data-v-fa4b73ef]{margin-bottom:8px}.form-group[data-v-fa4b73ef]{margin-bottom:15px}.label[data-v-fa4b73ef]{margin-bottom:5px;display:block}.input[data-v-fa4b73ef],.textarea[data-v-fa4b73ef],.select[data-v-fa4b73ef]{margin-top:5px}.toast[data-v-fa4b73ef]{padding:15px}.toast-stack[data-v-fa4b73ef]{gap:8px}.synapse-panel[data-v-fa4b73ef]{margin-bottom:24px}.synapse-header[data-v-fa4b73ef]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.synapse-title[data-v-fa4b73ef]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.synapse-description[data-v-fa4b73ef]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.synapse-loading[data-v-fa4b73ef]{padding:24px;text-align:center}.container[data-v-70dfa94e]{padding:18px}.section[data-v-70dfa94e]{margin-bottom:48px}.section-title[data-v-70dfa94e],.block[data-v-70dfa94e]{margin-bottom:34px}.block-title[data-v-70dfa94e]{margin-bottom:22px}p[data-v-70dfa94e],.text[data-v-70dfa94e]{margin-bottom:15px}.hint[data-v-70dfa94e]{margin-top:8px}.list[data-v-70dfa94e]{padding-left:22px;margin-bottom:15px}.list-item[data-v-70dfa94e]{margin-bottom:8px}.list-nested[data-v-70dfa94e]{margin-top:8px}.table[data-v-70dfa94e]{margin-bottom:22px}.table-caption[data-v-70dfa94e]{margin-bottom:8px}.form-group[data-v-70dfa94e]{margin-bottom:15px}.label[data-v-70dfa94e]{margin-bottom:5px;display:block}.input[data-v-70dfa94e],.textarea[data-v-70dfa94e],.select[data-v-70dfa94e]{margin-top:5px}.toast[data-v-70dfa94e]{padding:15px}.toast-stack[data-v-70dfa94e]{gap:8px}.catalog-panel[data-v-70dfa94e]{display:flex;flex-direction:column;gap:15px;min-height:0}.catalog-header[data-v-70dfa94e]{display:flex;flex-direction:column;gap:4px}.catalog-title[data-v-70dfa94e]{margin:0;font-size:1.05rem;font-weight:600;color:var(--gn-color-text-light)}.catalog-hint[data-v-70dfa94e]{margin:0;max-width:70ch;font-size:.85rem;color:var(--gn-color-text-medium)}.catalog-alert[data-v-70dfa94e]{margin:0}.catalog-layout[data-v-70dfa94e]{display:grid;grid-template-columns:minmax(240px,320px) minmax(0,1fr);gap:15px;align-items:start}@media(max-width:767px){.catalog-layout[data-v-70dfa94e]{grid-template-columns:1fr}.catalog-layout .catalog-detail[data-v-70dfa94e],.catalog-layout.is-detail-open .catalog-list-pane[data-v-70dfa94e]{display:none}.catalog-layout.is-detail-open .catalog-detail[data-v-70dfa94e]{display:flex}}.catalog-pane[data-v-70dfa94e]{min-width:0;border:1px solid var(--gn-border-color-muted);border-radius:6px;background:var(--gn-surface-panel)}.catalog-list-pane[data-v-70dfa94e]{display:flex;flex-direction:column;min-height:0}.catalog-list-head[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;padding:8px;border-bottom:1px solid var(--gn-border-color-muted)}.catalog-list-head[data-v-70dfa94e] .form-group{margin-bottom:0}.catalog-filters[data-v-70dfa94e]{display:flex;align-items:center;gap:8px}.catalog-area[data-v-70dfa94e]{flex:1 1 auto;min-width:0}.catalog-add[data-v-70dfa94e]{flex:none}.catalog-count[data-v-70dfa94e]{margin:0;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-dark)}.catalog-list[data-v-70dfa94e]{display:flex;flex-direction:column;gap:2px;min-width:0;padding:5px;max-height:60vh;overflow-y:auto}.catalog-loading[data-v-70dfa94e]{padding:24px;text-align:center}.catalog-empty[data-v-70dfa94e]{display:flex;flex-direction:column;align-items:center;gap:10px;padding:28px 16px;border:1px dashed var(--gn-border-color-muted);border-radius:6px;text-align:center}.catalog-empty i[data-v-70dfa94e]{font-size:1.75rem;color:var(--gn-color-text-dark)}.catalog-empty p[data-v-70dfa94e]{margin:0;font-size:.85rem;color:var(--gn-color-text-medium)}.catalog-row[data-v-70dfa94e]{display:flex;align-items:center;gap:5px;width:100%;min-width:0;padding:7px 8px;border:1px solid transparent;border-radius:3px;background:none;color:inherit;text-align:left;cursor:pointer;font:inherit}.catalog-row[data-v-70dfa94e]:hover{background:var(--gn-surface-panel-muted);border-color:var(--gn-border-color-muted)}.catalog-row[data-v-70dfa94e]:focus-visible{outline:2px solid var(--gn-focus-outline-color);outline-offset:-2px}.catalog-row.is-active[data-v-70dfa94e]{background:var(--gn-surface-panel-muted);border-color:var(--gn-border-color-base)}.catalog-row-main[data-v-70dfa94e]{display:flex;flex-direction:column;gap:1px;flex:1 1 auto;min-width:0}.catalog-row-open[data-v-70dfa94e]{flex:none;font-size:.8rem;color:var(--gn-color-text-dark)}.catalog-row.is-active .catalog-row-open[data-v-70dfa94e]{color:var(--gn-color-primary)}.catalog-row-head[data-v-70dfa94e]{display:flex;align-items:baseline;justify-content:space-between;gap:5px}.catalog-row-name[data-v-70dfa94e]{font-size:.875rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catalog-row-version[data-v-70dfa94e]{flex:none;font-size:.7rem;color:var(--gn-color-text-dark)}.catalog-row-meta[data-v-70dfa94e]{font-size:.72rem;color:var(--gn-color-text-dark)}.catalog-row-description[data-v-70dfa94e]{font-size:.78rem;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catalog-detail[data-v-70dfa94e]{display:flex;flex-direction:column;min-width:0;min-height:320px}.catalog-back[data-v-70dfa94e]{display:none;align-items:center;gap:6px;padding:8px 8px 0;border:none;background:none;color:var(--gn-color-text-medium);font:inherit;font-size:.85rem;cursor:pointer}@media(max-width:767px){.catalog-back[data-v-70dfa94e]{display:inline-flex}}.catalog-detail-head[data-v-70dfa94e]{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:8px 15px;border-bottom:1px solid var(--gn-border-color-muted)}.catalog-detail-body[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;padding:15px}.catalog-detail-body[data-v-70dfa94e] .form-group{width:100%;max-width:none}.catalog-detail-loading[data-v-70dfa94e]{align-items:center;justify-content:center}.catalog-detail-title[data-v-70dfa94e]{display:flex;align-items:baseline;gap:6px;min-width:0}.catalog-detail-title h3[data-v-70dfa94e]{margin:0;font-size:1rem;font-weight:600;overflow-wrap:anywhere}.catalog-detail-version[data-v-70dfa94e]{font-size:.75rem;color:var(--gn-color-text-dark)}.catalog-detail-actions[data-v-70dfa94e]{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.catalog-description[data-v-70dfa94e]{margin:0;max-width:72ch;font-size:.875rem;color:var(--gn-color-text-medium)}.catalog-meta[data-v-70dfa94e]{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;font-size:.75rem;color:var(--gn-color-text-dark)}.catalog-readonly[data-v-70dfa94e]{color:var(--gn-color-text-dark);font-style:italic}.catalog-tags[data-v-70dfa94e]{display:inline-flex;align-items:center;gap:4px}.catalog-document[data-v-70dfa94e]{max-width:72ch;padding-top:5px}.catalog-parse-error[data-v-70dfa94e]{margin:0}.catalog-raw[data-v-70dfa94e],.catalog-history-text[data-v-70dfa94e]{margin:0;max-height:320px;overflow:auto;padding:10px 12px;border:1px solid var(--gn-border-color-muted);border-radius:6px;background:var(--gn-surface-panel-muted);font-family:var(--gn-font-mono, monospace);font-size:.75rem;white-space:pre-wrap;overflow-wrap:anywhere}.catalog-detail[data-v-70dfa94e] textarea.catalog-textarea{width:100%;height:auto;min-height:320px;resize:vertical;font-family:var(--gn-font-mono, monospace);font-size:.8rem;line-height:1.5}.catalog-editor-actions[data-v-70dfa94e]{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.catalog-editor-actions[data-v-70dfa94e] .form-group{margin-bottom:0}.catalog-visibility[data-v-70dfa94e]{flex:0 0 180px}.catalog-editor-buttons[data-v-70dfa94e]{display:flex;gap:5px;flex-wrap:wrap}.catalog-history[data-v-70dfa94e]{border-top:1px solid var(--gn-border-color-muted);padding-top:8px}.catalog-history-toggle[data-v-70dfa94e]{display:inline-flex;align-items:center;gap:6px;padding:0;border:none;background:none;color:var(--gn-color-text-medium);font:inherit;font-size:.85rem;cursor:pointer}.catalog-history-list[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;margin-top:8px}.catalog-history-empty[data-v-70dfa94e]{font-size:.85rem;color:var(--gn-color-text-dark)}.catalog-history-item[data-v-70dfa94e]{border:1px solid var(--gn-border-color-muted);border-radius:6px;padding:8px 10px}.catalog-history-meta[data-v-70dfa94e]{margin-bottom:6px;font-size:.78rem;color:var(--gn-color-text-dark)}.catalog-history-text[data-v-70dfa94e]{max-height:220px}.catalog-placeholder[data-v-70dfa94e]{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:260px;padding:15px;text-align:center;color:var(--gn-color-text-dark)}.catalog-placeholder i[data-v-70dfa94e]{font-size:2rem}.catalog-placeholder p[data-v-70dfa94e]{margin:0;max-width:44ch;font-size:.85rem}.container[data-v-057ef768]{padding:18px}.section[data-v-057ef768]{margin-bottom:48px}.section-title[data-v-057ef768],.block[data-v-057ef768]{margin-bottom:34px}.block-title[data-v-057ef768]{margin-bottom:22px}p[data-v-057ef768],.text[data-v-057ef768]{margin-bottom:15px}.hint[data-v-057ef768]{margin-top:8px}.list[data-v-057ef768]{padding-left:22px;margin-bottom:15px}.list-item[data-v-057ef768]{margin-bottom:8px}.list-nested[data-v-057ef768]{margin-top:8px}.table[data-v-057ef768]{margin-bottom:22px}.table-caption[data-v-057ef768]{margin-bottom:8px}.form-group[data-v-057ef768]{margin-bottom:15px}.label[data-v-057ef768]{margin-bottom:5px;display:block}.input[data-v-057ef768],.textarea[data-v-057ef768],.select[data-v-057ef768]{margin-top:5px}.toast[data-v-057ef768]{padding:15px}.toast-stack[data-v-057ef768]{gap:8px}.mcp-keys-panel[data-v-057ef768]{margin-bottom:24px}.mcp-keys-header[data-v-057ef768]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.mcp-keys-title[data-v-057ef768]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.mcp-keys-description[data-v-057ef768]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.mcp-keys-loading[data-v-057ef768]{padding:24px;text-align:center}.mcp-keys-empty[data-v-057ef768]{display:flex;flex-direction:column;align-items:center;gap:10px;padding:32px 24px;border:1px dashed var(--gn-color-border);border-radius:var(--gn-radius-md);text-align:center}.mcp-keys-empty .empty-icon[data-v-057ef768]{font-size:2rem;color:var(--gn-color-text-dimmed)}.mcp-keys-empty p[data-v-057ef768]{margin:0;max-width:52ch;font-size:.875rem;color:var(--gn-color-text-medium)}.mcp-keys-rows[data-v-057ef768]{display:flex;flex-direction:column;gap:12px}.mcp-keys-row[data-v-057ef768]{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--gn-color-border);border-radius:var(--gn-radius-md)}.mcp-keys-row.is-keyless[data-v-057ef768]{border-color:var(--gn-border-color-muted);background:var(--gn-surface-panel-muted, transparent)}.mcp-keys-info[data-v-057ef768]{flex:1 1 240px;min-width:0}.mcp-keys-server[data-v-057ef768]{font-size:.9rem;color:var(--gn-color-text-medium)}.mcp-keys-where[data-v-057ef768]{margin-top:2px;font-size:.8rem;color:var(--gn-color-text-dark)}.mcp-keys-slot[data-v-057ef768],.mcp-keys-noslot[data-v-057ef768]{margin-top:4px;font-size:.8rem;color:var(--gn-color-text-dimmed)}.mcp-keys-noslot[data-v-057ef768]{color:var(--gn-color-text-dimmed);opacity:.75}.mcp-keys-input[data-v-057ef768]{flex:0 1 260px}.mcp-keys-actions[data-v-057ef768]{display:flex;align-items:center;gap:8px;flex-shrink:0}@media(max-width:767px){.mcp-keys-row[data-v-057ef768]{flex-direction:column;align-items:stretch}.mcp-keys-info[data-v-057ef768]{flex:0 0 auto}.mcp-keys-row[data-v-057ef768] .form-group{margin-bottom:0}.mcp-keys-input[data-v-057ef768]{flex:1 1 auto}}.container[data-v-07c32b63]{padding:18px}.section[data-v-07c32b63]{margin-bottom:48px}.section-title[data-v-07c32b63],.block[data-v-07c32b63]{margin-bottom:34px}.block-title[data-v-07c32b63]{margin-bottom:22px}p[data-v-07c32b63],.text[data-v-07c32b63]{margin-bottom:15px}.hint[data-v-07c32b63]{margin-top:8px}.list[data-v-07c32b63]{padding-left:22px;margin-bottom:15px}.list-item[data-v-07c32b63]{margin-bottom:8px}.list-nested[data-v-07c32b63]{margin-top:8px}.table[data-v-07c32b63]{margin-bottom:22px}.table-caption[data-v-07c32b63]{margin-bottom:8px}.form-group[data-v-07c32b63]{margin-bottom:15px}.label[data-v-07c32b63]{margin-bottom:5px;display:block}.input[data-v-07c32b63],.textarea[data-v-07c32b63],.select[data-v-07c32b63]{margin-top:5px}.toast[data-v-07c32b63]{padding:15px}.toast-stack[data-v-07c32b63]{gap:8px}.admin-tools-panel[data-v-07c32b63]{margin-bottom:24px}.admin-tools-header[data-v-07c32b63]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.admin-tools-title[data-v-07c32b63]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.admin-tools-description[data-v-07c32b63]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.admin-tools-description code[data-v-07c32b63]{font-size:.8rem}.admin-tools-report[data-v-07c32b63]{display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--gn-color-border);border-radius:var(--gn-radius-md);font-size:.85rem;color:var(--gn-color-text-medium)}.admin-tools-report.has-problems[data-v-07c32b63]{border-color:var(--gn-color-danger, var(--gn-color-border))}.admin-tools-line[data-v-07c32b63]{display:flex;align-items:flex-start;gap:8px}.admin-tools-line i[data-v-07c32b63]{flex-shrink:0;margin-top:2px}.admin-tools-line.is-warning i[data-v-07c32b63]{color:var(--gn-color-warning, inherit)}.admin-tools-line.is-error i[data-v-07c32b63]{color:var(--gn-color-danger, inherit)}.admin-tools-line code[data-v-07c32b63]{font-size:.8rem}.admin-tools-total[data-v-07c32b63]{color:var(--gn-color-text-dimmed)}.app-panel[data-v-15c4797f]{max-width:720px;margin-bottom:24px}.app-title[data-v-15c4797f]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.app-description[data-v-15c4797f]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.app-card[data-v-15c4797f]{padding:14px 16px;margin-bottom:16px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.app-card-title[data-v-15c4797f]{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:.9rem;font-weight:600;color:var(--gn-color-text-medium)}.app-text[data-v-15c4797f]{margin:0 0 12px;font-size:.875rem;color:var(--gn-color-text-medium)}.app-alert[data-v-15c4797f]{display:flex;align-items:flex-start;gap:8px}.app-alert i[data-v-15c4797f]{font-size:16px;flex-shrink:0}.app-action[data-v-15c4797f]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.app-hint[data-v-15c4797f]{margin:0;font-size:.8rem;color:var(--gn-color-text-dark)}.app-steps[data-v-15c4797f]{margin:0;padding-left:18px;font-size:.8rem;color:var(--gn-color-text-medium)}.app-steps li+li[data-v-15c4797f]{margin-top:6px}.app-steps code[data-v-15c4797f]{font-size:.75rem;padding:1px 4px;border-radius:4px;background:var(--gn-color-surface-sunken, rgba(127, 127, 127, .12))}.app-steps-install[data-v-15c4797f]{margin-top:14px}.app-meta[data-v-15c4797f]{margin:0 0 14px;font-size:.8rem;color:var(--gn-color-text-dark)}.app-meta>div[data-v-15c4797f]{display:flex;gap:8px}.app-meta dt[data-v-15c4797f]{min-width:64px;color:var(--gn-color-text-medium)}.app-meta dd[data-v-15c4797f]{margin:0}.app-meta-sha code[data-v-15c4797f]{font-size:.7rem;word-break:break-all}.container[data-v-0ea8be77]{padding:18px}.section[data-v-0ea8be77]{margin-bottom:48px}.section-title[data-v-0ea8be77],.block[data-v-0ea8be77]{margin-bottom:34px}.block-title[data-v-0ea8be77]{margin-bottom:22px}p[data-v-0ea8be77],.text[data-v-0ea8be77]{margin-bottom:15px}.hint[data-v-0ea8be77]{margin-top:8px}.list[data-v-0ea8be77]{padding-left:22px;margin-bottom:15px}.list-item[data-v-0ea8be77]{margin-bottom:8px}.list-nested[data-v-0ea8be77]{margin-top:8px}.table[data-v-0ea8be77]{margin-bottom:22px}.table-caption[data-v-0ea8be77]{margin-bottom:8px}.form-group[data-v-0ea8be77]{margin-bottom:15px}.label[data-v-0ea8be77]{margin-bottom:5px;display:block}.input[data-v-0ea8be77],.textarea[data-v-0ea8be77],.select[data-v-0ea8be77]{margin-top:5px}.toast[data-v-0ea8be77]{padding:15px}.toast-stack[data-v-0ea8be77]{gap:8px}.settings-view[data-v-0ea8be77]{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column;overflow:hidden}.settings-tabs[data-v-0ea8be77]{flex-direction:column;flex-wrap:nowrap;align-items:stretch;width:100%;max-width:1200px;flex:1 1 0;min-height:0;padding:8px 15px 0;margin-bottom:0}.settings-tabs[data-v-0ea8be77] .tabs-list{width:100%;max-width:none}.settings-tabs[data-v-0ea8be77] .tabs-panels{flex:1 1 0;min-height:0;overflow-y:auto;padding:15px 15px 34px}@media(max-width:767px){.settings-tabs[data-v-0ea8be77] .tabs-panels{padding:8px 8px 22px}}@media(max-width:767px){.settings-tabs[data-v-0ea8be77]{padding-left:8px;padding-right:8px}}.shared-shell[data-v-bab2a59b]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;min-width:0;background:var(--gn-surface-base);color:var(--gn-color-text)}.shared-header[data-v-bab2a59b]{display:flex;align-items:flex-start;gap:16px;padding:16px 24px;border-bottom:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel)}.shared-heading[data-v-bab2a59b]{flex:1 1 auto;min-width:0}.shared-title[data-v-bab2a59b]{margin:0;font-size:1.05rem;font-weight:600;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-meta[data-v-bab2a59b]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:6px;font-size:.8rem;color:var(--gn-color-text-light)}.shared-profile[data-v-bab2a59b]{font-weight:500}.shared-badge[data-v-bab2a59b]{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border:1px solid var(--gn-border-color-muted);border-radius:999px;font-size:.75rem}.shared-brand[data-v-bab2a59b]{flex:0 0 auto;font-weight:700;letter-spacing:.02em;color:var(--gn-color-text-light);-webkit-user-select:none;user-select:none}.shared-scroller[data-v-bab2a59b]{flex:1 1 auto;min-height:0;overflow-y:auto;padding:20px 24px 40px}.shared-row[data-v-bab2a59b]{width:100%;max-width:900px;margin:0 auto}.shared-load-older[data-v-bab2a59b]{display:flex;align-items:center;gap:8px;margin:0 auto 18px;padding:7px 16px;border:1px solid var(--gn-border-color-muted);border-radius:999px;background:var(--gn-surface-panel);color:var(--gn-color-text-light);font-size:.82rem;cursor:pointer}.shared-load-older[data-v-bab2a59b]:disabled{cursor:default;opacity:.6}.shared-loading[data-v-bab2a59b]{display:flex;flex:1 1 auto;align-items:center;justify-content:center;font-size:1.6rem;color:var(--gn-color-text-light)}.shared-error[data-v-bab2a59b]{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;text-align:center;color:var(--gn-color-text-light)}.shared-error>i[data-v-bab2a59b]{font-size:2rem}.shared-error-title[data-v-bab2a59b]{margin:4px 0 0;font-weight:600;color:var(--gn-color-text)}.shared-error-text[data-v-bab2a59b]{margin:0;max-width:420px;font-size:.9rem}.shared-empty[data-v-bab2a59b]{margin:40px auto;text-align:center;color:var(--gn-color-text-light)}.shared-footer[data-v-bab2a59b]{flex:0 0 auto;padding:10px 24px;border-top:1px solid var(--gn-border-color-muted);font-size:.75rem;text-align:center;color:var(--gn-color-text-light)}@media(max-width:640px){.shared-header[data-v-bab2a59b]{padding:12px 16px}.shared-scroller[data-v-bab2a59b]{padding:14px 16px 32px}.shared-brand[data-v-bab2a59b]{display:none}}.app-shell[data-v-189a26a8]{display:flex;flex:1 1 0;min-height:0;min-width:0;overflow:hidden}.load-error-banner[data-v-189a26a8]{display:flex;align-items:center;gap:8px;flex-shrink:0;padding:8px 16px;font-size:13px;color:var(--gn-color-text-light);background:var(--gn-color-dark);border-bottom:1px solid var(--gn-border-color-muted)}.load-error-text[data-v-189a26a8]{flex:1;min-width:0;overflow-wrap:anywhere}.load-error-retry[data-v-189a26a8],.load-error-dismiss[data-v-189a26a8]{flex-shrink:0;border:none;border-radius:6px;padding:4px 10px;font-size:12px;font-weight:600;cursor:pointer;color:var(--gn-color-black);background:var(--gn-color-secondary)}.load-error-dismiss[data-v-189a26a8]{padding:4px 8px;color:var(--gn-color-text-light);background:transparent}.sidebar-backdrop[data-v-189a26a8]{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:99}@media(max-width:1279.98px){.sidebar-backdrop[data-v-189a26a8]{display:block}}.artifacts-backdrop[data-v-189a26a8]{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:119}@media(max-width:980px){.artifacts-backdrop[data-v-189a26a8]{display:block}}.backdrop-fade-enter-active[data-v-189a26a8],.backdrop-fade-leave-active[data-v-189a26a8]{transition:opacity .18s ease}.backdrop-fade-enter-from[data-v-189a26a8],.backdrop-fade-leave-to[data-v-189a26a8]{opacity:0}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Regular-BF3vfe7_.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Medium-COFd06Dj.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-SemiBold-D0J2bq8P.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Bold-Ovd3DSUS.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Italic-DgAgaWWu.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}.text,p{margin-bottom:15px}.input,.select,.textarea{margin-top:5px}html{font-size:100%}body{font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:400;line-height:1.6;letter-spacing:0;color:#c0caf5}h1,h2,h3,h4,h5,h6{font-family:IBM Plex Mono,monospace;font-weight:600;line-height:1.25;margin:0}h1.contrast,h2.contrast,h3.contrast,h4.contrast,h5.contrast,h6.contrast{background:#c0caf5;color:#16161e;display:inline;padding:0 8px;border-radius:3px}h1{font-size:30px;letter-spacing:0}h2{font-size:23px}h3{font-size:20px}h4{font-size:18px}h5{font-size:16px}h6{font-size:15px;font-weight:500}.text,p{font-size:14px;line-height:1.6}.text-sm{font-size:13px;line-height:1.4}.text-lg{font-size:15px;line-height:1.6}.text-lead{max-width:760px;color:#c0caf5;font-size:15px;font-weight:500;line-height:1.6}.text-muted{font-size:13px;color:#787c99}.text-strong,strong{font-weight:600}.text-bold{font-weight:700}.text-italic,em{font-style:italic}.text-success{color:#9ece6a}.text-warning{color:#e0af68}.text-danger,.text-error{color:#f7768e}.text-info{color:#bb9af7}.eyebrow{display:inline-flex;width:-moz-max-content;width:max-content;max-width:100%;padding:5px 8px;color:#16161e;background:#7aa2f7;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.caption{color:#787c99;font-size:12px;line-height:1.4}.code,code,pre{font-family:IBM Plex Mono,monospace;font-size:14px;line-height:1.4;border-radius:3px;background-color:#1f2335}.text-primary{color:#c0caf5}.text-secondary{color:#a9b1d6}pre{font-size:14px;line-height:1.6;white-space:pre-wrap}.code,pre code{-o-tab-size:2;tab-size:2;-moz-tab-size:2}.code{display:inline-flex;padding:0 5px;color:#7aa2f7;border:2px solid rgba(122,162,247,.24)}.kbd{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;border:2px solid rgba(192,202,245,.24);border-bottom-color:#7aa2f7;border-radius:3px;color:#c0caf5;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.quote{max-width:760px;margin:0;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;color:#a9b1d6;background:#1f2335;font-size:14px;line-height:1.6}.quote cite{display:block;margin-top:12px;color:#7aa2f7;font-size:13px;font-style:normal;text-transform:uppercase}a{font-weight:500;text-decoration:none;color:#7aa2f7}@media(hover:hover)and (pointer:fine){a:hover{color:#e0af68}}@media(hover:none)and (pointer:coarse){a:active{color:#e0af68}}.link{font-size:inherit;font-weight:500}.label{font-size:13px;font-weight:500;line-height:1.4}.hint,.meta{font-size:12px;line-height:1.4}.table{font-size:13px;line-height:1.4}.table th{font-weight:600}.table td{font-weight:400}.list{font-size:14px;line-height:1.6}.list-item{font-size:inherit}.modal-title{font-size:18px;font-weight:600}.modal-body{font-size:14px}.toast-title{font-size:14px;font-weight:600}.toast-text{font-size:13px;line-height:1.4}:root{--gn-color-black:#16161E;--gn-color-dark:#1F2335;--gn-color-grey:#414868;--gn-color-text-light:#C0CAF5;--gn-color-text-medium:#A9B1D6;--gn-color-text-dark:#787C99;--gn-color-primary:#C0CAF5;--gn-color-secondary:#7AA2F7;--gn-color-accent:#FF9E64;--gn-color-success:#9ECE6A;--gn-color-warning:#E0AF68;--gn-color-error:#F7768E;--gn-color-info:#BB9AF7;--gn-surface-page:#16161E;--gn-surface-panel:#1F2335;--gn-surface-panel-muted:#1F2335;--gn-surface-panel-strong:rgba(192, 202, 245, .085);--gn-border-width-base:2px;--gn-border-width-accent:6px;--gn-border-width-choice:3px;--gn-border-style-base:solid;--gn-border-color-base:#C0CAF5;--gn-border-color-muted:rgba(192, 202, 245, .24);--gn-focus-outline-width:2px;--gn-focus-outline-offset:3px;--gn-focus-outline-color:#E0AF68;--gn-motion-fast:.15s;--gn-motion-base:.2s;--gn-motion-slow:.28s;--gn-motion-ease:ease;--gn-font-family-base:IBM Plex Mono,monospace;--gn-font-weight-regular:400;--gn-font-weight-medium:500;--gn-font-weight-semibold:600;--gn-font-weight-bold:700;--gn-font-size-xs:12px;--gn-font-size-sm:13px;--gn-font-size-md:14px;--gn-font-size-base:14px;--gn-font-size-lg:15px;--gn-font-size-xl:18px;--gn-line-height-tight:1.15;--gn-line-height-normal:1.4;--gn-line-height-relaxed:1.6;--gn-space-0:0;--gn-space-1:5px;--gn-space-2:8px;--gn-space-3:12px;--gn-space-4:15px;--gn-space-5:18px;--gn-space-6:22px;--gn-space-7:26px;--gn-space-8:34px;--gn-space-9:42px;--gn-space-10:48px;--gn-space-11:64px;--gn-space-12:80px}@keyframes terminal_scan_x{0%{transform:translate(-120%)}to{transform:translate(220%)}}@keyframes terminal_scan_y{0%{transform:translateY(-120%)}to{transform:translateY(220%)}}@keyframes terminal_pulse{0%,to{box-shadow:0 0 #c0caf500}50%{box-shadow:0 0 0 4px #c0caf52e}}@keyframes panel_boot{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes overlay_reveal{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes tooltip_reveal{0%{opacity:0;transform:translate(-50%) translateY(5px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){*,:after,:before{animation-duration:0s!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:0s!important}}.palette{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.palette .color .color-box{width:92px;height:68px;border-radius:3px}body .bg-primary{background:#c0caf5}body .bg-secondary{background:#7aa2f7}body .bg-success{background:#9ece6a}body .bg-accent{background:#ff9e64}body .bg-info{background:#bb9af7}body .bg-warning{background:#e0af68}body .bg-error{background:#f7768e}body .text-color-primary{color:#c0caf5}body .text-color-secondary{color:#7aa2f7}body .text-color-success{color:#9ece6a}body .text-color-accent{color:#ff9e64}body .text-color-info{color:#bb9af7}body .text-color-warning{color:#e0af68}body .text-color-error{color:#f7768e}.loader{width:32px;aspect-ratio:1;--c:no-repeat linear-gradient(#FF3C00 0 0);background:var(--c) 0 0,var(--c) 0 100%,var(--c) 50% 0,var(--c) 50% 100%,var(--c) 100% 0,var(--c) 100% 100%;animation:l12 1s infinite}@keyframes l12{0%,to{background-size:20% 50%}16.67%{background-size:20% 30%,20% 30%,20% 50%,20% 50%,20% 50%,20% 50%}33.33%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 50%,20% 50%}50%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 30%,20% 30%}66.67%{background-size:20% 50%,20% 50%,20% 30%,20% 30%,20% 30%,20% 30%}83.33%{background-size:20% 50%,20% 50%,20% 50%,20% 50%,20% 30%,20% 30%}}.circle-loader{display:flex;flex-direction:row;align-items:center;gap:8px}.circle-loader .ph,.circle-loader .ph-bold{font-size:26px;transform-origin:50% 50%;animation:icon_spin 1.2s linear infinite}.progress{display:flex;flex-direction:column;gap:8px;width:100%;max-width:640px}.progress .progress-header{display:flex;align-items:center;justify-content:space-between;gap:12px;color:#a9b1d6;font-size:13px;font-weight:600;text-transform:uppercase}.progress .progress-value{color:#c0caf5;font-family:IBM Plex Mono,monospace}.progress .progress-track{position:relative;width:100%;height:18px;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-radius:3px;background:#1f2335}.progress .progress-bar{display:block;position:relative;overflow:hidden;width:var(--progress-value,0%);height:100%;background:#7aa2f7;transition:width .28s ease}.progress.progress-success .progress-bar{background:#9ece6a}.progress.progress-warning .progress-bar{background:#e0af68}.progress.progress-danger .progress-bar,.progress.progress-error .progress-bar{background:#f7768e}.progress.progress-striped .progress-bar{background-image:repeating-linear-gradient(90deg,transparent 0,transparent 14px,rgba(22,22,30,.2) 14px,rgba(22,22,30,.2) 16px)}.progress.progress-animated .progress-bar:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;width:48%;background:linear-gradient(90deg,transparent,rgba(192,202,245,.28),transparent);transform:translate(-120%);animation:progress_scan 1.4s ease infinite}.usage-meter{display:grid;gap:12px;width:100%;max-width:420px;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.usage-meter .usage-meter-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;font-size:15px;font-weight:700;line-height:1;text-transform:uppercase}.usage-meter .usage-meter-value{color:#7aa2f7;font-family:IBM Plex Mono,monospace;font-size:13px}.usage-meter .usage-meter-meta{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.progress-stages{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;width:100%;max-width:720px}.progress-stages .progress-stage{min-height:42px;padding:8px 12px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#787c99;background:#1f2335;font-size:13px;font-weight:600;line-height:1.4;text-transform:uppercase}.progress-stages .progress-stage-complete{color:#16161e;background:#9ece6a;border-color:#9ece6a}.progress-stages .progress-stage-current{color:#16161e;background:#e0af68;border-color:#e0af68}@media(max-width:767px){.progress-stages{grid-template-columns:1fr 1fr}}@media(max-width:479px){.progress-stages{grid-template-columns:1fr}}@keyframes progress_scan{0%{transform:translate(-120%)}to{transform:translate(220%)}}@keyframes icon_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:40px;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:600;line-height:1;letter-spacing:.04em;padding:12px 22px;border-radius:3px;border-width:2px;border-left-width:6px;border-style:solid;border-color:#c0caf5;text-transform:uppercase;background-color:transparent;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background-color,border-color,color,opacity}.btn:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.btn.with-icon{border-left-width:40px;position:relative}.btn.with-icon .ph,.btn.with-icon .ph-bold{position:absolute;color:#16161e;left:-40px;top:1px;font-size:26px;height:100%;display:inline-flex;align-items:center;width:40px;justify-content:center;transition-duration:.2s;transition-property:color,left}@media(hover:hover)and (pointer:fine){.btn:hover.with-icon:not(.loading-state):not(.btn-small) .ph,.btn:hover.with-icon:not(.loading-state):not(.btn-small) .ph-bold{left:-22px}}@media(hover:none)and (pointer:coarse){.btn:active.with-icon:not(.loading-state):not(.btn-small) .ph,.btn:active.with-icon:not(.loading-state):not(.btn-small) .ph-bold{left:-22px}}.btn.btn-primary{color:#c0caf5;border-color:#c0caf5}@media(hover:hover)and (pointer:fine){.btn.btn-primary:hover{background-color:#c0caf5;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-primary:active{background-color:#c0caf5;color:#16161e}}.btn.btn-secondary{color:#7aa2f7;border-color:#7aa2f7}@media(hover:hover)and (pointer:fine){.btn.btn-secondary:hover{background-color:#7aa2f7;color:#16161e}.btn.btn-secondary:hover.with-icon .ph,.btn.btn-secondary:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-secondary:active{background-color:#7aa2f7;color:#16161e}.btn.btn-secondary:active.with-icon .ph,.btn.btn-secondary:active.with-icon .ph-bold{color:#16161e}}.btn.btn-accent{color:#ff9e64;border-color:#ff9e64}@media(hover:hover)and (pointer:fine){.btn.btn-accent:hover{background-color:#ff9e64;color:#16161e}.btn.btn-accent:hover.with-icon .ph,.btn.btn-accent:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-accent:active{background-color:#ff9e64;color:#16161e}.btn.btn-accent:active.with-icon .ph,.btn.btn-accent:active.with-icon .ph-bold{color:#16161e}}.btn.btn-danger{color:#f7768e;border-color:#f7768e}@media(hover:hover)and (pointer:fine){.btn.btn-danger:hover{background-color:#f7768e;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-danger:active{background-color:#f7768e;color:#16161e}}.btn.btn-warning{color:#e0af68;border-color:#e0af68}@media(hover:hover)and (pointer:fine){.btn.btn-warning:hover{background-color:#e0af68;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-warning:active{background-color:#e0af68;color:#16161e}}.btn.btn-success{color:#9ece6a;border-color:#9ece6a}@media(hover:hover)and (pointer:fine){.btn.btn-success:hover{background-color:#9ece6a;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-success:active{background-color:#9ece6a;color:#16161e}}.btn.btn-info{color:#bb9af7;border-color:#bb9af7}@media(hover:hover)and (pointer:fine){.btn.btn-info:hover{background-color:#bb9af7;color:#16161e}.btn.btn-info:hover.with-icon .ph,.btn.btn-info:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-info:active{background-color:#bb9af7;color:#16161e}.btn.btn-info:active.with-icon .ph,.btn.btn-info:active.with-icon .ph-bold{color:#16161e}}.btn[disabled]:not(.loading-state){color:#787c99;border-color:#c0caf53d;background-color:#1f2335;cursor:not-allowed;opacity:.72}.btn[disabled]:not(.loading-state).with-icon .ph,.btn[disabled]:not(.loading-state).with-icon .ph-bold{color:#787c99}@media(hover:hover)and (pointer:fine){.btn[disabled]:not(.loading-state):hover{background-color:#1f2335;color:#787c99}.btn[disabled]:not(.loading-state):hover.with-icon .ph,.btn[disabled]:not(.loading-state):hover.with-icon .ph-bold{color:#787c99}}@media(hover:none)and (pointer:coarse){.btn[disabled]:not(.loading-state):active{background-color:#1f2335;color:#787c99}.btn[disabled]:not(.loading-state):active.with-icon .ph,.btn[disabled]:not(.loading-state):active.with-icon .ph-bold{color:#787c99}}.btn[disabled]:not(.loading-state).with-icon:not(.btn-small) .ph,.btn[disabled]:not(.loading-state).with-icon:not(.btn-small) .ph-bold{left:-22px}.btn.btn-small{font-size:13px;font-weight:500;min-height:34px;padding:8px}.btn.btn-small.with-icon{border-left-width:28px}.btn.btn-small.with-icon .ph,.btn.btn-small.with-icon .ph-bold{top:0;left:-36px;font-size:22px}.btn.btn-small.with-icon.loading-state .ph,.btn.btn-small.with-icon.loading-state .ph-bold{font-size:26px}.btn.btn-large{font-size:15px;font-weight:700;min-height:46px;padding:15px 48px}.btn.loading-state{color:#16161e!important;border-color:#c0caf5!important;background-color:#c0caf5!important}.btn.loading-state .ph,.btn.loading-state .ph-bold{font-size:26px;transform-origin:50% 50%;animation:icon_spin 1.2s linear infinite}.btn-icon{display:flex;justify-content:center;align-items:center;width:34px;height:34px;background:0 0;color:#c0caf5;font-size:22px;border:2px solid transparent;border-radius:3px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.btn-icon:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.btn-icon:not(.without-hover):hover{color:#e0af68;border-color:#e0af68}}@media(hover:none)and (pointer:coarse){.btn-icon:not(.without-hover):active{color:#e0af68;border-color:#e0af68}}.btn-icon:disabled,.btn-icon[disabled]{color:#787c99;border-color:transparent;background-color:transparent;cursor:not-allowed;opacity:.72}@media(hover:hover)and (pointer:fine){.btn-icon:disabled:not(.without-hover):hover,.btn-icon[disabled]:not(.without-hover):hover{color:#787c99;border-color:transparent}}@media(hover:none)and (pointer:coarse){.btn-icon:disabled:not(.without-hover):active,.btn-icon[disabled]:not(.without-hover):active{color:#787c99;border-color:transparent}}.btn-icon-sm{width:28px;height:28px;font-size:18px}.form-group{width:100%;max-width:600px}.form-group .label{display:flex;flex-direction:column;font-size:14px;width:100%;position:relative;color:#c0caf5}.form-group .label>.ph{position:absolute;color:#c0caf5;left:0;bottom:1px;font-size:26px;height:46px;display:inline-flex;align-items:center;width:40px;justify-content:center;transition-duration:.2s;transition-property:color,left}.form-group .label .input{min-height:46px;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:500;line-height:1;letter-spacing:.04em;padding:12px 22px;margin-top:8px;border-radius:3px;border-width:2px;border-bottom-width:6px;border-style:solid;border-color:#c0caf5;color:#c0caf5;background-color:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:background-color,border-color,color}@media(hover:hover)and (pointer:fine){.form-group .label .input:hover{border-bottom-color:#787c99}}@media(hover:none)and (pointer:coarse){.form-group .label .input:active{border-bottom-color:#787c99}}.form-group .label .input:focus{outline:2px solid #E0AF68;outline-offset:3px;border-color:#7aa2f7;background-color:transparent}.form-group .label .input:disabled{color:#787c99;border-color:#c0caf53d;background:#1f2335;cursor:not-allowed;opacity:.72}.form-group .label .input[readonly]{color:#a9b1d6;border-color:#c0caf53d;background:#c0caf508}.form-group .label .input::-moz-placeholder{color:#787c99}.form-group .label .input::placeholder{color:#787c99}.form-group .label .input::-webkit-search-cancel-button,.form-group .label .input::-webkit-search-decoration,.form-group .label .input::-webkit-search-results-button,.form-group .label .input::-webkit-search-results-decoration{display:none;-webkit-appearance:none}.form-group .label .input[type=date],.form-group .label .input[type=datetime-local],.form-group .label .input[type=month],.form-group .label .input[type=time]{color-scheme:dark;cursor:pointer;min-width:0;padding-right:40px;text-transform:uppercase}.form-group .label .input[type=date]::-webkit-calendar-picker-indicator,.form-group .label .input[type=datetime-local]::-webkit-calendar-picker-indicator,.form-group .label .input[type=month]::-webkit-calendar-picker-indicator,.form-group .label .input[type=time]::-webkit-calendar-picker-indicator{width:40px;height:100%;margin:0;padding:0;background:0 0;cursor:pointer;opacity:0}.form-group .label .input[type=date]::-webkit-datetime-edit,.form-group .label .input[type=datetime-local]::-webkit-datetime-edit,.form-group .label .input[type=month]::-webkit-datetime-edit,.form-group .label .input[type=time]::-webkit-datetime-edit{padding:0}.form-group .label .input[type=date]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=month]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=time]::-webkit-datetime-edit-fields-wrapper{color:#c0caf5}.form-group .label textarea.input{height:92px;line-height:1.25;resize:none}.form-group .label .ph+.input,.form-group .label .ph+.select-wrap .select{padding-left:40px}.form-group .label .select-wrap{margin-top:8px}.form-group .label .select{width:100%;height:46px;margin-top:0;appearance:none;-webkit-appearance:none;-moz-appearance:none}.form-group .label .select:focus{outline:0}.form-group .label .select option{color:#c0caf5;background:#1f2335}.form-group .label .select-wrap:after{content:"";position:absolute;right:22px;bottom:18px;transform:translateY(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:10px solid #c0caf5;pointer-events:none}.form-group .label.error .input:not(:focus){border-color:#f7768e}.form-group .label.error+.input-info{color:#e0af68}.form-group .label.success .input:not(:focus){border-color:#9ece6a}.form-group .label.success+.input-info{color:#9ece6a}.form-group .label.warning .input:not(:focus){border-color:#e0af68}.form-group .label.warning+.input-info{color:#e0af68}.form-group .input-info{font-size:14px;margin-top:8px}.form-group .input-info .ph{position:relative;top:1px}.form-group .input-info.error{color:#e0af68}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px;width:100%;max-width:760px}.fieldset{width:100%;max-width:760px;margin:0;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;background:#1f2335}.legend{padding:5px 8px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}@media(max-width:767px){.form-grid{grid-template-columns:1fr}}.file-upload{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:8px 12px;border:2px solid #7aa2f7;border-left-width:6px;border-radius:3px;color:#7aa2f7;background:#1f2335;font-size:13px;font-weight:700;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.file-upload input[type=file]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(hover:hover)and (pointer:fine){.file-upload:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.file-upload:active{color:#16161e;background:#7aa2f7}}.file-upload:focus-within{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-panel{width:100%;max-width:760px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;border-left-width:6px}.file-upload-form{display:flex;flex-direction:column;gap:15px;margin:0}.file-upload-header{display:flex;align-items:flex-start;justify-content:space-between;gap:15px;padding:15px 15px 0}.file-upload-heading{display:flex;flex-direction:column;gap:5px;min-width:0}.file-upload-title{margin:0;color:#c0caf5;font-size:15px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-description{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.file-upload-dropzone{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:15px;margin:0 15px;padding:18px;border:2px dashed #7aa2f7;border-radius:6px;background:#7aa2f714;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color}.file-upload-dropzone input[type=file]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(hover:hover)and (pointer:fine){.file-upload-dropzone:hover{border-color:#c0caf5;background:#c0caf51a}}@media(hover:none)and (pointer:coarse){.file-upload-dropzone:active{border-color:#c0caf5;background:#c0caf51a}}.file-upload-dropzone:focus-within{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-icon{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;color:#16161e;background:#7aa2f7;font-size:26px}.file-upload-body{display:flex;flex-direction:column;gap:5px;min-width:0}.file-upload-primary{color:#c0caf5;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-secondary{color:#a9b1d6;font-size:13px;line-height:1.4}.file-upload-preview{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:12px;margin:0 15px}.file-upload-preview[hidden]{display:none}.file-upload-preview-item{position:relative;min-width:0;margin:0;border:2px solid rgba(192,202,245,.24);border-radius:3px;background:#1f2335}.file-upload-preview-remove{position:absolute;top:8px;right:8px;z-index:1;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:2px solid #f7768e;color:#f7768e;background:#1f2335;font-size:18px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}@media(hover:hover)and (pointer:fine){.file-upload-preview-remove:hover{color:#16161e;background:#f7768e}}@media(hover:none)and (pointer:coarse){.file-upload-preview-remove:active{color:#16161e;background:#f7768e}}.file-upload-preview-remove:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-preview-visual{display:flex;align-items:center;justify-content:center;aspect-ratio:1;background:#1f2335}.file-upload-preview-visual img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-upload-preview-type{display:inline-flex;align-items:center;justify-content:center;min-width:46px;min-height:46px;padding:8px;color:#16161e;background:#7aa2f7;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}.file-upload-preview-item figcaption{display:flex;flex-direction:column;gap:5px;overflow:hidden;padding:8px}.file-upload-preview-name{overflow:hidden;color:#c0caf5;font-size:12px;font-weight:700;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.file-upload-preview-meta{color:#a9b1d6;font-size:12px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:0 15px 15px}@media(max-width:767px){.file-upload-header{flex-direction:column;align-items:stretch}.file-upload-dropzone{grid-template-columns:1fr}.file-upload-actions{justify-content:stretch}.file-upload-actions .btn{width:100%}}.range{width:100%;max-width:600px;accent-color:#7AA2F7}.range input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:40px;margin:0;background:0 0;cursor:pointer}.range input[type=range]::-webkit-slider-runnable-track{height:6px;background:#c0caf516;border:2px solid rgba(192,202,245,.24)}.range input[type=range]::-webkit-slider-thumb{width:16px;height:34px;margin-top:-17px;border:2px solid #7aa2f7;background:#7aa2f7;-webkit-appearance:none}.range input[type=range]::-moz-range-track{height:6px;background:#c0caf516;border:2px solid rgba(192,202,245,.24)}.range input[type=range]::-moz-range-thumb{width:16px;height:34px;border:2px solid #7aa2f7;border-radius:3px;background:#7aa2f7}.radio{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.radio input[type=radio]{display:none}.radio .radio-control{width:20px;height:20px;border-radius:100%;border:3px solid #c0caf5;background:#1f2335;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition-duration:.2s;transition-property:border-color,background}.radio .radio-control:before{content:"";display:block;width:10px;height:10px;border-radius:100%;background:#c0caf5;transform:scale(0);transition-duration:.2s;transition-property:transform,background}@media(hover:hover)and (pointer:fine){.radio:hover .radio-control{background:#414868}}@media(hover:none)and (pointer:coarse){.radio:active .radio-control{background:#414868}}.radio input[type=radio]:checked:not(:disabled)+.radio-control{background:#c0caf52e}.radio input[type=radio]:checked+.radio-control:before{transform:scale(1)}.radio input[type=radio]:disabled+.radio-control{border-color:#414868;background:#4148681f;opacity:.5}.radio input[type=radio]:disabled:checked+.radio-control:before{background:#414868}.radio input[type=radio]:focus-visible+.radio-control{outline:2px solid #E0AF68;outline-offset:3px}.radio .radio-label{font-size:14px}.radio-group{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.switch{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.switch input[type=checkbox]{display:none}.switch .switch-control{height:14px;width:28px;border-radius:999px;border:2px solid #c0caf5;position:relative;background:0 0;transition-duration:.2s;transition-property:border-color,background;display:block}.switch .switch-control:before{content:"";display:block;height:18px;width:18px;border-radius:3px;background:#c0caf5;position:absolute;left:-5px;top:-5px;transition-duration:.2s;transition-property:left,background}@media(hover:hover)and (pointer:fine){.switch:hover .switch-control{background:#414868}}@media(hover:none)and (pointer:coarse){.switch:active .switch-control{background:#414868}}.switch input[type=checkbox]:checked:not(:disabled)+.switch-control{background:#7aa2f7;border-color:#7aa2f7}.switch input[type=checkbox]:checked+.switch-control:before{left:15px}.switch input[type=checkbox]:disabled+.switch-control{border-color:#414868}.switch input[type=checkbox]:focus-visible+.switch-control{outline:2px solid #E0AF68;outline-offset:3px}.switch input[type=checkbox]:disabled+.switch-control:before{background:#414868}.checkbox{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.checkbox input[type=checkbox]{display:none}.checkbox .checkbox-control{width:20px;height:20px;border-radius:3px;border:2px solid #c0caf5;border-bottom-width:6px;background:#1f2335;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition-duration:.2s;transition-property:border-color,background}.checkbox .checkbox-control:before{content:"";display:block;width:10px;height:5px;border-left:2px solid #c0caf5;border-bottom:2px solid #c0caf5;transform:rotate(-45deg) scale(0);opacity:0;margin-top:-2px;transition-duration:.2s;transition-property:transform,opacity,border-color}@media(hover:hover)and (pointer:fine){.checkbox:hover .checkbox-control{background:#414868}}@media(hover:none)and (pointer:coarse){.checkbox:active .checkbox-control{background:#414868}}.checkbox input[type=checkbox]:checked:not(:disabled)+.checkbox-control{background:#c0caf52e}.checkbox input[type=checkbox]:checked+.checkbox-control:before{transform:rotate(-45deg) scale(1);opacity:1;border-color:#c0caf5}.checkbox input[type=checkbox]:disabled+.checkbox-control{border-color:#414868;background:#4148681f;opacity:.5}.checkbox input[type=checkbox]:disabled:checked+.checkbox-control:before{border-color:#414868}.checkbox input[type=checkbox]:focus-visible+.checkbox-control{outline:2px solid #E0AF68;outline-offset:3px}.checkbox .checkbox-label{font-size:14px}.input-group{display:flex;align-items:stretch;width:100%;max-width:600px;min-height:46px;border:2px solid rgba(192,202,245,.24);border-bottom-width:6px;border-radius:3px;overflow:hidden;background:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background}.input-group:focus-within{outline:2px solid #E0AF68;outline-offset:3px;border-color:#7aa2f7;background:0 0}.input-group .input-group-action,.input-group .input-group-addon{display:inline-flex;align-items:center;justify-content:center;min-width:46px;padding:0 12px;color:#a9b1d6;background:#c0caf50b;border:0;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;text-transform:uppercase}.input-group .input-group-action{color:#c0caf5;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.input-group .input-group-input{flex:1 1 auto;min-width:0;border:0;padding:12px 15px;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:500;letter-spacing:.04em}.input-group .input-group-input:focus{outline:0}.input-group .input-group-input::-moz-placeholder{color:#787c99}.input-group .input-group-input::placeholder{color:#787c99}.input-group .input-group-input::-webkit-search-cancel-button,.input-group .input-group-input::-webkit-search-decoration,.input-group .input-group-input::-webkit-search-results-button,.input-group .input-group-input::-webkit-search-results-decoration{display:none;-webkit-appearance:none}.input-group .ph,.input-group .ph-bold{font-size:22px}.input-group.input-group-compact{min-height:40px}.input-group.input-group-compact .input-group-action,.input-group.input-group-compact .input-group-addon{min-width:40px}.input-group.input-group-compact .input-group-input{padding:8px 12px;font-size:13px}.search-field{max-width:420px}.repeater .repeater-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.repeater .repeater-title{font-size:14px;font-weight:600;color:#c0caf5}.repeater .repeater-list{display:grid;gap:8px}.repeater .repeater-item{background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;padding:12px;display:grid;grid-template-columns:1fr auto;gap:12px;align-items:start}.repeater .repeater-item-body{width:100%}.repeater .repeater-item-actions{display:flex;align-items:center;gap:8px;padding-top:22px}.repeater.repeater-disabled{opacity:.6;pointer-events:none}.list{display:flex;flex-direction:column;gap:5px;list-style-type:none;padding-left:0}.list .list-item{display:flex;flex-direction:row;align-items:center;gap:8px;margin-left:0}.list.list-ordered{list-style-type:decimal;display:list-item;margin-left:30px}.list.list-ordered .list-item{display:list-item}.list.list-definition{width:100%;max-width:620px;gap:0;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.list.list-definition .list-row{display:grid;grid-template-columns:minmax(120px,.32fr) minmax(0,1fr);gap:15px;align-items:start;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color}.list.list-definition .list-row .list-term{display:inline-flex;width:-moz-max-content;width:max-content;max-width:100%;margin:0;padding:5px 8px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:background,transform}.list.list-definition .list-row .list-desc{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6;transition-duration:.2s;transition-timing-function:ease;transition-property:color,transform}.list.list-definition .list-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.list.list-definition .list-row:hover{background:#c0caf516}.list.list-definition .list-row:hover .list-term{background:#7aa2f7;transform:translate(5px)}.list.list-definition .list-row:hover .list-desc{color:#c0caf5;transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.list.list-definition .list-row:active{background:#c0caf516}.list.list-definition .list-row:active .list-term{background:#7aa2f7;transform:translate(5px)}.list.list-definition .list-row:active .list-desc{color:#c0caf5;transform:translate(5px)}}.list.list-nav{max-width:420px;width:100%;gap:0}.list.list-nav .list-item{display:flex;flex-direction:column;align-items:flex-start;height:50px;margin:0}.list.list-nav .list-item .list-action{display:flex;justify-content:space-between;align-items:center;width:100%;height:100%;padding:8px 12px;border:2px solid transparent;border-radius:3px;font-size:14px;background:#1f2335;color:inherit;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color,color}.list.list-nav .list-item .list-action:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.list.list-nav .list-item .list-action:hover{background:#7aa2f7;color:#16161e}}@media(hover:none)and (pointer:coarse){.list.list-nav .list-item .list-action:active{background:#7aa2f7;color:#16161e}}.list.list-nav .list-item .list-action .list-label{display:flex;flex-direction:row;gap:8px;align-items:center;letter-spacing:0;font-weight:400}.list.list-nav .list-item .list-action .list-meta{padding:8px;background:#9ece6a;color:#16161e;display:flex}.list.list-nav .list-item.list-item-active .list-action{background:#7aa2f7;color:#16161e;border-color:#7aa2f7}.list.list-actions{width:100%;max-width:420px;gap:22px}.list.list-actions .list-item{justify-content:space-between;align-items:flex-start;padding:12px 0;border-bottom:2px solid rgba(192,202,245,.08)}.list.list-actions .list-item .list-content{display:flex;flex-direction:column;gap:8px}.list.list-actions .list-item .list-content .list-title{font-size:15px;line-height:1}.list.list-actions .list-item .list-content .list-subtitle{color:#787c99}@media(hover:hover)and (pointer:fine){.list.list-actions .list-item:hover .list-title{color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.list.list-actions .list-item:active .list-title{color:#7aa2f7}}@media(max-width:479px){.list.list-definition .list-row{grid-template-columns:1fr;gap:8px}}.badge{position:relative;overflow:hidden;border-radius:3px;background:#c0caf5;color:#16161e;padding:5px 8px;font-size:13px;font-weight:600;line-height:1;letter-spacing:.04em;text-transform:uppercase;display:inline-flex;align-items:center;min-height:24px;transition-duration:.2s;transition-timing-function:ease;transition-property:filter,transform,border-color,color,background}.badge:after{content:"";position:absolute;inset:0 auto 0 0;width:40%;background:linear-gradient(90deg,transparent,rgba(22,22,30,.16),transparent);opacity:0;pointer-events:none;transform:translate(-120%)}@media(hover:hover)and (pointer:fine){.badge:hover{filter:saturate(1.12);transform:translateY(-1px)}.badge:hover:after{opacity:1;animation:terminal_scan_x .7s ease}}@media(hover:none)and (pointer:coarse){.badge:active{filter:saturate(1.12);transform:translateY(-1px)}.badge:active:after{opacity:1;animation:terminal_scan_x .7s ease}}.badge.badge-success{background:#9ece6a}.badge.badge-warning{background:#e0af68}.badge.badge-danger,.badge.badge-error{background:#f7768e}.badge.badge-info{background:#bb9af7;color:#16161e}.badge.badge-secondary{background:#7aa2f7;color:#16161e}.badge.badge-primary-outline{color:#c0caf5;border:2px solid #c0caf5;background:0 0;padding:3px 8px}.chip-group{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip{display:inline-flex;align-items:center;gap:8px;min-height:30px;padding:5px 12px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:600;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color,opacity}.chip .ph,.chip .ph-bold{font-size:18px}.chip:before{content:"";display:inline-block;width:7px;height:7px;flex:0 0 auto;background:#787c99;transition-duration:.2s;transition-timing-function:ease;transition-property:background,box-shadow,transform}.chip:has(.ph):before,.chip:has(.ph-bold):before{display:none}.chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;margin-right:-5px;border:0;color:inherit;background:0 0;font:inherit;cursor:pointer}.chip .chip-remove:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.chip.chip-primary{color:#c0caf5;background:#c0caf514;border-color:#c0caf5}.chip.chip-primary:before{background:#c0caf5}.chip.chip-secondary{color:#7aa2f7;background:#7aa2f714;border-color:#7aa2f7}.chip.chip-secondary:before{background:#7aa2f7}.chip.chip-success{color:#9ece6a;background:#9ece6a14;border-color:#9ece6a}.chip.chip-success:before{background:#9ece6a}.chip.chip-warning{color:#e0af68;background:#e0af6814;border-color:#e0af68}.chip.chip-warning:before{background:#e0af68}.chip.chip-danger,.chip.chip-error{color:#f7768e;background:#f7768e14;border-color:#f7768e}.chip.chip-danger:before,.chip.chip-error:before{background:#f7768e}.chip.chip-selected,.chip[aria-pressed=true],.chip[aria-selected=true]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.chip.chip-selected:before,.chip[aria-pressed=true]:before,.chip[aria-selected=true]:before{background:#16161e}.chip.chip-secondary[aria-pressed=true],.chip.chip-secondary[aria-selected=true],.chip.chip-selected.chip-secondary{background:#7aa2f7;border-color:#7aa2f7}.chip.chip-disabled,.chip:disabled{color:#787c99;background:#1f2335;border-color:#c0caf53d;cursor:not-allowed;opacity:.7}.chip.chip-disabled:before,.chip:disabled:before{background:#414868}a.chip,button.chip{cursor:pointer}a.chip:focus-visible,button.chip:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){a.chip:hover,button.chip:hover{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}a.chip:hover:before,button.chip:hover:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}@media(hover:none)and (pointer:coarse){a.chip:active,button.chip:active{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}a.chip:active:before,button.chip:active:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}.tag-input{background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;position:relative}.tag-input .tag-input-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;min-height:40px;cursor:text}.tag-input .tag-input-field{flex:1 1 auto;min-width:80px;padding:5px 0;border:0;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;line-height:1;outline:0}.tag-input .tag-input-field::-moz-placeholder{color:#787c99;opacity:1}.tag-input .tag-input-field::placeholder{color:#787c99;opacity:1}.tag-input.tag-input-focused{border-color:#c0caf5}.tag-input .tag-input-meta{padding:0 12px 8px;color:#787c99;font-size:12px;line-height:1}.avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex:0 0 auto;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#16161e;background:#c0caf5;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}.avatar img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar .ph,.avatar .ph-bold{font-size:22px}.avatar .avatar-status{position:absolute;right:-2px;bottom:-2px;width:13px;height:13px;border:2px solid #16161e;background:#787c99;transition-duration:.2s;transition-timing-function:ease;transition-property:background,box-shadow}.avatar.avatar-sm{width:34px;height:34px;font-size:12px}.avatar.avatar-sm .ph,.avatar.avatar-sm .ph-bold{font-size:18px}.avatar.avatar-lg{width:46px;height:46px;font-size:14px}.avatar.avatar-lg .ph,.avatar.avatar-lg .ph-bold{font-size:26px}.avatar.avatar-secondary{background:#7aa2f7}.avatar.avatar-success{background:#9ece6a}.avatar.avatar-warning{background:#e0af68}.avatar.avatar-danger,.avatar.avatar-error{background:#f7768e}.avatar.avatar-outline{color:#c0caf5;background:#1f2335;border-color:#c0caf5}.avatar.is-online .avatar-status{background:#9ece6a;animation:terminal_pulse 1.8s ease infinite}.avatar.is-busy .avatar-status{background:#e0af68}.avatar.is-offline .avatar-status{background:#787c99}.identity{display:inline-flex;align-items:center;gap:12px;min-width:0}.identity-content{display:flex;flex-direction:column;gap:5px;min-width:0}.identity-title{color:#c0caf5;font-size:14px;font-weight:600;line-height:1}.identity-meta{color:#787c99;font-size:13px;line-height:1.4}.avatar-stack{display:inline-flex;align-items:center}.avatar-stack .avatar{margin-right:-8px;border-color:#16161e}.avatar-stack .avatar-stack-count{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 8px;border:2px solid #16161e;color:#16161e;background:#e0af68;font-size:13px;font-weight:700}.table{width:100%;text-align:left;border:2px solid rgba(192,202,245,.24);border-collapse:separate;border-spacing:0;border-radius:6px;background:#1f2335}.table .table-row:first-child>:first-child{border-top-left-radius:6px}.table .table-row:first-child>:last-child{border-top-right-radius:6px}.table .table-row:last-child>:first-child{border-bottom-left-radius:6px}.table .table-row:last-child>:last-child{border-bottom-right-radius:6px}.table .table-caption{text-align:left;font-size:15px;background:#c0caf5;width:-moz-max-content;width:max-content;color:#16161e;padding:5px 12px;margin-bottom:0;font-weight:700;text-transform:uppercase}.table.table-empty{width:100%}.table.table-empty .is-empty{width:100%;padding:15px;font-size:13px;color:#787c99;text-align:left}.table .table-row td,.table .table-row th{padding:12px 18px;font-size:13px;vertical-align:middle;border-bottom:2px solid rgba(192,202,245,.08)}.table .table-row th{color:#c0caf5;background:#c0caf50a;text-transform:uppercase;letter-spacing:.04em}.table .table-head{border-bottom:2px solid #c0caf5}.table .table-body .table-row{transition-duration:.2s;transition-timing-function:ease;transition-property:background,color}.table .table-body .table-row td{transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}@media(hover:hover)and (pointer:fine){.table .table-body .table-row:hover{background:#7aa2f714}.table .table-body .table-row:hover td:first-child{color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.table .table-body .table-row:active{background:#7aa2f714}.table .table-body .table-row:active td:first-child{color:#7aa2f7}}.table .table-foot td,.table .table-foot th{padding-top:15px}.table.table-compact .table-caption{font-size:14px}.table.table-compact .table-row td,.table.table-compact .table-row th{padding:8px 12px;font-size:12px}.table.table-compact .table-cell-mono{color:#a9b1d6;font-family:IBM Plex Mono,monospace;letter-spacing:0}.table.table-compact .table-cell-actions{width:1%;white-space:nowrap}.table-wrapper{width:100%;overflow-x:auto}.toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:12px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.toolbar .toolbar-group{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.toolbar .toolbar-title{margin:0;font-size:15px;font-weight:700;line-height:1;text-transform:uppercase}.toolbar .toolbar-meta{color:#787c99;font-size:13px}.pagination{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.pagination .pagination-item{display:inline-flex;align-items:center;justify-content:center;min-width:34px;border-radius:3px;height:34px;padding:0 12px;border:2px solid rgba(192,202,245,.24);color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color,opacity}.pagination .pagination-item:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.pagination .pagination-item:hover{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.pagination .pagination-item:active{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}.pagination .pagination-item.pagination-item-active,.pagination .pagination-item[aria-current=page]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.pagination .pagination-item.pagination-item-disabled,.pagination .pagination-item:disabled{color:#787c99;background:#1f2335;border-color:#c0caf53d;cursor:not-allowed;opacity:.72}.pagination .pagination-ellipsis{color:#787c99;padding:0 5px}.empty-state{max-width:560px;padding:22px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.empty-state .empty-state-icon{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;margin-bottom:15px;color:#16161e;background:#c0caf5;font-size:26px}.empty-state .empty-state-title{margin:0 0 8px;font-size:18px;font-weight:700;text-transform:uppercase}.empty-state .empty-state-text{max-width:440px;margin:0 0 18px;color:#a9b1d6;line-height:1.6}.empty-state .empty-state-actions{display:flex;flex-wrap:wrap;gap:8px}.empty-state.empty-state-error{border-color:#f7768e}.empty-state.empty-state-error .empty-state-icon{background:#f7768e}.skeleton{display:block;position:relative;overflow:hidden;border-radius:3px;background:#c0caf516}.skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,rgba(192,202,245,.12),transparent);animation:skeleton_shimmer 1.6s infinite}.skeleton.skeleton-line{width:100%;height:14px}.skeleton.skeleton-title{width:60%;height:22px}.skeleton.skeleton-block{width:100%;height:120px}.skeleton.skeleton-square{width:46px;height:46px}.skeleton-stack{display:flex;flex-direction:column;gap:12px;max-width:520px;padding:15px;border:2px solid rgba(192,202,245,.24);border-radius:6px;background:#1f2335}@keyframes skeleton_shimmer{to{transform:translate(100%)}}.page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:18px;width:100%;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335;animation:panel_boot .28s ease both}.page-header .page-header-content{display:flex;flex-direction:column;gap:8px;min-width:min(100%,320px)}.page-header .page-header-kicker{color:#7aa2f7;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color}.page-header .page-header-title{margin:0;color:#c0caf5;font-size:23px;font-weight:700;line-height:1.15}.page-header .page-header-subtitle{max-width:720px;margin:0;color:#a9b1d6;font-size:14px;line-height:1.6}.page-header .page-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:#787c99;font-size:13px}.page-header .page-header-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.page-header.page-header-compact{align-items:center;padding:15px}.page-header.page-header-compact .page-header-title{font-size:18px}.page-header.page-header-accent{border-color:#7aa2f7;background:#7aa2f70e}.description-list{display:grid;width:100%;max-width:760px;margin:0;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.description-list .description-list-row{display:grid;grid-template-columns:minmax(140px,.36fr) minmax(0,1fr);gap:15px;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background}.description-list .description-list-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.description-list .description-list-row:hover{background:#c0caf516}.description-list .description-list-row:hover .description-list-term{color:#7aa2f7}.description-list .description-list-row:hover .description-list-value{transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.description-list .description-list-row:active{background:#c0caf516}.description-list .description-list-row:active .description-list-term{color:#7aa2f7}.description-list .description-list-row:active .description-list-value{transform:translate(5px)}}.description-list .description-list-term{margin:0;color:#787c99;font-size:13px;font-weight:600;line-height:1.4;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color}.description-list .description-list-value{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin:0;color:#c0caf5;font-size:14px;line-height:1.4;transition-duration:.2s;transition-timing-function:ease;transition-property:transform}.description-list .description-list-value-muted{color:#a9b1d6}.description-list.description-list-compact{max-width:520px}.description-list.description-list-compact .description-list-row{grid-template-columns:minmax(112px,.42fr) minmax(0,1fr);gap:12px;padding:8px 12px}.description-list.description-list-compact .description-list-term,.description-list.description-list-compact .description-list-value{font-size:13px}@media(max-width:479px){.description-list .description-list-row{grid-template-columns:1fr;gap:5px}}.steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;width:100%;max-width:900px;margin:0;padding:0;list-style:none}.steps .step{position:relative;display:flex;flex-direction:column;gap:8px;min-height:120px;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.steps .step-marker{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:3px;color:#c0caf5;border:2px solid rgba(192,202,245,.24);font-size:13px;font-weight:700;line-height:1}.steps .step-title{margin:0;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.steps .step-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.steps .step-complete{border-color:#9ece6a}.steps .step-complete .step-marker{color:#16161e;background:#9ece6a;border-color:#9ece6a}.steps .step-current{border-color:#7aa2f7}.steps .step-current .step-marker{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}.steps .step-disabled{opacity:.62}.steps.steps-vertical{grid-template-columns:1fr;max-width:520px;gap:0}.steps.steps-vertical .step{min-height:auto;border-bottom-width:0;border-radius:0}.steps.steps-vertical .step:last-child{border-bottom-width:2px}@media(max-width:1023px){.steps{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:479px){.steps{grid-template-columns:1fr}}.timeline{display:grid;gap:0;width:100%;max-width:760px;margin:0;padding:0;list-style:none}.timeline .timeline-item{position:relative;display:grid;grid-template-columns:40px minmax(0,1fr);gap:12px;min-height:88px}.timeline .timeline-item:before{content:"";position:absolute;top:40px;bottom:0;left:19px;width:2px;background:#c0caf53d}.timeline .timeline-item:last-child:before{display:none}.timeline .timeline-marker{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#16161e;font-size:18px;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background,color,box-shadow,transform}.timeline .timeline-content{min-width:0;padding:0 0 18px}.timeline .timeline-card{padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background,transform}.timeline .timeline-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.timeline .timeline-title{margin:0;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.timeline .timeline-time{color:#787c99;font-size:12px;font-family:IBM Plex Mono,monospace;line-height:1.4}.timeline .timeline-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.timeline .timeline-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.timeline .timeline-item-success .timeline-card,.timeline .timeline-item-success .timeline-marker{border-color:#9ece6a}.timeline .timeline-item-success .timeline-marker{color:#16161e;background:#9ece6a}.timeline .timeline-item-warning .timeline-card,.timeline .timeline-item-warning .timeline-marker{border-color:#e0af68}.timeline .timeline-item-warning .timeline-marker{color:#16161e;background:#e0af68}.timeline .timeline-item-danger .timeline-card,.timeline .timeline-item-danger .timeline-marker,.timeline .timeline-item-error .timeline-card,.timeline .timeline-item-error .timeline-marker{border-color:#f7768e}.timeline .timeline-item-danger .timeline-marker,.timeline .timeline-item-error .timeline-marker{color:#16161e;background:#f7768e}@media(hover:hover)and (pointer:fine){.timeline .timeline-item:hover .timeline-marker{box-shadow:0 0 0 4px #7aa2f724;transform:scale(1.04)}.timeline .timeline-item:hover .timeline-card{background:#c0caf516;transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.timeline .timeline-item:active .timeline-marker{box-shadow:0 0 0 4px #7aa2f724;transform:scale(1.04)}.timeline .timeline-item:active .timeline-card{background:#c0caf516;transform:translate(5px)}}.activity-log{display:grid;width:100%;max-width:720px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;overflow:hidden;background:#1f2335}.activity-log .activity-log-row{display:grid;grid-template-columns:minmax(120px,.24fr) minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background}.activity-log .activity-log-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.activity-log .activity-log-row:hover{background:#c0caf516}}@media(hover:none)and (pointer:coarse){.activity-log .activity-log-row:active{background:#c0caf516}}.activity-log .activity-log-time{color:#787c99;font-family:IBM Plex Mono,monospace;font-size:12px}.activity-log .activity-log-title{color:#c0caf5;font-size:13px;font-weight:600;line-height:1.4}@media(max-width:479px){.activity-log .activity-log-row{grid-template-columns:1fr;gap:8px}}.accordion{display:grid;width:100%;max-width:760px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;overflow:hidden;background:#1f2335}.accordion-item{border-bottom:2px solid rgba(192,202,245,.08);overflow:hidden}.accordion-item:last-child{border-bottom:0}.accordion-item[open] .accordion-summary{color:#16161e;background:#c0caf5}.accordion-item[open] .accordion-icon{transform:rotate(180deg)}.accordion-summary{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12px;min-height:40px;padding:12px 15px;border:0;color:#c0caf5;background:0 0;cursor:pointer;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.accordion-summary::-webkit-details-marker{display:none}.accordion-summary::marker{content:""}.accordion-summary:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.accordion-summary:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.accordion-summary:active{color:#16161e;background:#7aa2f7}}.accordion-summary-content{display:flex;align-items:center;gap:8px;min-width:0}.accordion-icon{flex:0 0 auto;font-size:18px;transition-duration:.2s;transition-property:transform}.accordion-panel{overflow:hidden;padding:15px;color:#a9b1d6;font-size:13px;line-height:1.6;transition-duration:.28s;transition-timing-function:ease;transition-property:height,opacity,transform}.accordion-panel p{margin-top:0}.accordion-panel p:last-child{margin-bottom:0}.disclosure{max-width:520px;border:2px solid rgba(192,202,245,.24);border-radius:6px;overflow:hidden;background:#1f2335}.disclosure .accordion-summary{min-height:34px;padding:8px 12px}.disclosure .accordion-panel{padding:12px}.tabs{width:100%;max-width:900px}.tabs-list{display:flex;align-items:stretch;gap:5px;width:-moz-fit-content;width:fit-content;max-width:100%;padding:5px;border:2px solid rgba(192,202,245,.24);border-radius:6px;background:#1f2335;overflow-x:auto;scrollbar-width:thin}.tab{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:12px 15px;border:0;border-radius:3px;color:#a9b1d6;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;white-space:nowrap;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,opacity}.tab .ph,.tab .ph-bold{font-size:18px}.tab:focus-visible{outline:2px solid #E0AF68;outline-offset:3px;z-index:1}@media(hover:hover)and (pointer:fine){.tab:hover{color:#c0caf5;background:#c0caf516}}@media(hover:none)and (pointer:coarse){.tab:active{color:#c0caf5;background:#c0caf516}}.tab:disabled,.tab[aria-disabled=true]{color:#787c99;cursor:not-allowed;opacity:.62}@media(hover:hover)and (pointer:fine){.tab:disabled:hover,.tab[aria-disabled=true]:hover{color:#787c99;background:0 0}}@media(hover:none)and (pointer:coarse){.tab:disabled:active,.tab[aria-disabled=true]:active{color:#787c99;background:0 0}}.tab-active,.tab[aria-selected=true]{color:#16161e;background:#c0caf5}.tab-panel{display:none}.tab-panel p{margin-top:0}.tab-panel p:last-child{margin-bottom:0}.tab-panel-active{display:block}.tabs-compact{max-width:620px}.tabs-compact .tab{min-height:34px;padding:8px 12px}.tabs-vertical{grid-template-columns:minmax(180px,240px) minmax(0,1fr);align-items:start}.tabs-vertical .tabs-list{flex-direction:column;overflow-x:visible}.tabs-vertical .tab{justify-content:flex-start;text-align:left}@media(max-width:767px){.tabs-vertical{grid-template-columns:1fr}.tabs-vertical .tabs-list{flex-direction:row;overflow-x:auto}.tabs-vertical .tab{justify-content:center;text-align:center}}.drawer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;justify-content:flex-end;pointer-events:none}.drawer .drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#16161e;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity;pointer-events:auto}.drawer .drawer-panel{position:relative;z-index:1020;width:min(460px,100vw - 18px);min-height:100vh;display:flex;flex-direction:column;gap:15px;background:#16161e;border-left:2px solid rgba(192,202,245,.24);box-shadow:-18px 0 42px #16161e61;opacity:0;transform:translate(100%);transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,transform;pointer-events:auto}.drawer .drawer-header{display:flex;align-items:center;justify-content:space-between;padding-right:15px;border-bottom:2px solid rgba(192,202,245,.24)}.drawer .drawer-title{margin:0;padding:12px 15px;color:#c0caf5;text-transform:uppercase;letter-spacing:.04em}.drawer .drawer-body{flex:1;overflow-y:auto;padding:18px}.drawer .drawer-footer{padding:18px;border-top:2px solid rgba(192,202,245,.24)}.drawer .drawer-footer .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12px;width:100%}.drawer.drawer-left{justify-content:flex-start}.drawer.drawer-left .drawer-panel{border-left:0;border-right:2px solid #c0caf5;box-shadow:18px 0 42px #16161e61;transform:translate(-100%)}.drawer.a-show .drawer-backdrop{opacity:.82}.drawer.a-show .drawer-panel{opacity:1;transform:translate(0)}.drawer.a-hide .drawer-backdrop{opacity:0}.drawer.a-hide .drawer-panel{opacity:0;transform:translate(100%)}.drawer.a-hide.drawer-left .drawer-panel{transform:translate(-100%)}.drawer-preview{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,280px);gap:18px;align-items:stretch;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.drawer-preview .drawer-preview-content{display:flex;flex-direction:column;gap:12px}.drawer-preview .drawer-preview-panel{display:flex;flex-direction:column;gap:12px;padding:15px;border:2px solid #7aa2f7;border-radius:6px;background:#1f2335}.drawer-preview .drawer-preview-title{margin:0;color:#7aa2f7;font-size:14px;text-transform:uppercase}.drawer-preview .drawer-preview-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}@media(max-width:720px){.drawer-preview{grid-template-columns:1fr}}.nav-topbar{position:sticky;top:0;z-index:900;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;min-height:58px;border-bottom:2px solid rgba(192,202,245,.24);background:#16161ef5;box-shadow:0 10px 28px #16161e42}.nav-topbar-toggle{display:inline-flex;align-items:center;align-self:stretch;gap:8px;min-width:150px;padding:0 15px;border:0;border-right:2px solid rgba(192,202,245,.24);color:#c0caf5;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.nav-topbar-toggle .ph{color:#7aa2f7;font-size:22px}.nav-topbar-toggle:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.nav-topbar-toggle:hover{color:#16161e;background:#7aa2f7}.nav-topbar-toggle:hover .ph{color:#16161e}}@media(hover:none)and (pointer:coarse){.nav-topbar-toggle:active{color:#16161e;background:#7aa2f7}.nav-topbar-toggle:active .ph{color:#16161e}}.nav-topbar-brand{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:0 15px;color:#c0caf5;font-size:13px;font-weight:700;text-transform:uppercase}.nav-topbar-brand img{width:48px;height:48px}.nav-topbar-current{min-width:160px;margin-right:15px;padding:5px 8px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#1f2335;font-size:12px;font-weight:700;text-align:center;text-transform:uppercase}.nav-drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:910;background:#16161e;opacity:0;pointer-events:none;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity}.nav-drawer{position:fixed;inset:0 auto 0 0;z-index:920;display:flex;flex-direction:column;width:min(380px,100vw);max-height:100vh;border-right:2px solid #c0caf5;background:#1f2335;box-shadow:18px 0 42px #16161e61;opacity:0;overflow:hidden;pointer-events:none;transform:translate(-100%);transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,transform}.nav-drawer.is-open{opacity:1;pointer-events:auto;transform:translate(0)}.nav-drawer-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border-bottom:2px solid rgba(192,202,245,.24)}.nav-drawer-title{display:inline-flex;padding:8px 12px;border-radius:3px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;text-transform:uppercase}.nav-drawer-subtitle{margin-top:8px;color:#787c99;font-size:12px;font-weight:700;text-transform:uppercase}.nav-drawer-close{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#c0caf5;background:0 0;font-size:22px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.nav-drawer-close:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.nav-drawer-close:hover{color:#16161e;background:#f7768e;border-color:#f7768e}}@media(hover:none)and (pointer:coarse){.nav-drawer-close:active{color:#16161e;background:#f7768e;border-color:#f7768e}}.nav-drawer-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:12px;scrollbar-width:thin;scrollbar-color:#7AA2F7 #1F2335}.nav-drawer-body::-webkit-scrollbar{width:8px}.nav-drawer-body::-webkit-scrollbar-track{background:#1f2335}.nav-drawer-body::-webkit-scrollbar-thumb{background:#7aa2f7}.nav-drawer-body .list.list-nav{max-width:none}.nav-drawer-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border-top:2px solid rgba(192,202,245,.24);color:#787c99;background:#1f2335;font-size:12px;font-weight:700;text-transform:uppercase}.nav-drawer-footer .profile-identity{display:block;text-decoration:none;color:inherit;min-width:0;flex:1 1 auto;overflow:hidden}@media(hover:hover)and (pointer:fine){.nav-drawer-footer .profile-identity:hover{color:inherit}}@media(hover:none)and (pointer:coarse){.nav-drawer-footer .profile-identity:active{color:inherit}}.nav-drawer-open{overflow:hidden}.nav-drawer-open .nav-drawer-backdrop{opacity:.82;pointer-events:auto}@media(max-width:767px){.nav-topbar-toggle{min-width:54px;padding:0 12px}.nav-topbar-brand{padding-right:12px;padding-left:12px}.nav-topbar-current{max-width:38vw;min-width:0;margin-right:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-drawer{width:100vw;border-right:0}}.nav-shell-preview{width:100%;max-width:900px;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#16161e}.nav-shell-preview-topbar{position:relative;z-index:0;min-height:52px;box-shadow:none}.nav-shell-preview-body{display:grid;grid-template-columns:280px minmax(0,1fr);min-height:320px}.nav-shell-preview-drawer{position:relative;z-index:0;inset:auto;width:auto;max-height:none;opacity:1;pointer-events:auto;transform:none;box-shadow:none}.nav-shell-preview-content{display:flex;flex-direction:column;justify-content:center;gap:12px;min-width:0;padding:18px;border-left:2px solid rgba(192,202,245,.24);background:#1f2335}.nav-shell-preview-content h3{margin:0;color:#c0caf5;font-size:18px;text-transform:uppercase}.nav-shell-preview-content p{max-width:360px;margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}@media(max-width:767px){.nav-shell-preview-body{grid-template-columns:1fr}.nav-shell-preview-content{min-height:180px;border-top:2px solid rgba(192,202,245,.24);border-left:0}}.toast{position:fixed;z-index:1100;bottom:-100px;right:15px;max-width:420px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;box-shadow:0 14px 36px #16161e5c;padding:0;opacity:0;overflow:hidden;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,bottom}.toast.a-show{bottom:15px;opacity:1}.toast.a-hide{bottom:-45px;opacity:0}.toast .toast-content{display:flex;flex-direction:column;gap:0;padding:15px 48px 15px 18px}.toast .toast-content .toast-header{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;text-transform:uppercase;color:#c0caf5;line-height:1}.toast .toast-content .toast-header .ph{font-size:22px;flex-shrink:0}.toast .toast-content .toast-text{padding:8px 0 0;margin:0;color:#c0caf5;font-size:14px;line-height:1.6}.toast .toast-close{position:absolute;top:5px;right:8px;color:#a9b1d6;width:34px;height:34px;border-color:transparent;background:0 0}@media(hover:hover)and (pointer:fine){.toast .toast-close:not(.without-hover):hover{color:#c0caf5;border-color:transparent}}@media(hover:none)and (pointer:coarse){.toast .toast-close:not(.without-hover):active{color:#c0caf5;border-color:transparent}}.toast .toast-progress{height:3px;width:100%;background:#16161e73;overflow:hidden;margin-top:1px}.toast .toast-progress .toast-progress-bar{height:100%;width:100%;transform-origin:left;animation:toast-progress linear forwards;background:#7aa2f7}.toast.toast-info{border-color:#bb9af7}.toast.toast-info .toast-header,.toast.toast-info .toast-header .ph{color:#bb9af7}.toast.toast-info .toast-progress-bar{background:#bb9af7}.toast.toast-success{border-color:#9ece6a}.toast.toast-success .toast-header,.toast.toast-success .toast-header .ph{color:#9ece6a}.toast.toast-success .toast-progress-bar{background:#9ece6a}.toast.toast-warning{border-color:#e0af68}.toast.toast-warning .toast-header,.toast.toast-warning .toast-header .ph{color:#e0af68}.toast.toast-warning .toast-progress-bar{background:#e0af68}.toast.toast-danger{border-color:#f7768e}.toast.toast-danger .toast-header,.toast.toast-danger .toast-header .ph{color:#f7768e}.toast.toast-danger .toast-progress-bar{background:#f7768e}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.card{position:relative;max-width:340px;width:-moz-max-content;width:max-content;overflow:hidden;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px}.card .card-title{color:#c0caf5;padding:15px 15px 0;font-weight:700;text-transform:uppercase}.card .card-content{padding:15px;height:100%}.card .card-content .card-thumb{display:block;width:min(68%,190px);margin:18px auto 22px}.card .card-content p{margin-top:8px;margin-bottom:0}.card .card-footer{padding:8px 15px 15px}.card.status-card{max-width:220px;overflow:hidden}.card.status-card .status-icon-container{position:relative}.card.status-card .status-icon-container .status-indicator{position:absolute;top:-15px;left:-5px;font-size:22px;color:#f7768e}.card.status-card .status-icon-container .status-indicator.status-online{color:#9ece6a}.card.status-card .status-icon-container .status-icon{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;font-size:56px;height:108px;width:100%}.card.status-card .card-title{display:flex;width:100%;font-size:14px;font-weight:700;align-items:center;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.card.status-card .status-name{font-size:13px;line-height:1.4}.card.status-card.card-success{border-color:#9ece6a}.card.status-card.card-success .card-title,.card.status-card.card-success .modal-title,.card.status-card.card-success .toast-title{color:#9ece6a;background:0 0}.card.status-card.card-success .status-icon{color:#9ece6a}.card.status-card.card-warning{border-color:#e0af68}.card.status-card.card-warning .card-title,.card.status-card.card-warning .modal-title,.card.status-card.card-warning .toast-title{color:#e0af68;background:0 0}.card.status-card.card-warning .status-icon{color:#e0af68}.card.status-card.card-info{border-color:#bb9af7}.card.status-card.card-info .card-title,.card.status-card.card-info .modal-title,.card.status-card.card-info .toast-title{color:#bb9af7;background:0 0}.card.status-card.card-info .status-icon{color:#bb9af7}.card.status-card.card-secondary{border-color:#7aa2f7}.card.status-card.card-secondary .card-title,.card.status-card.card-secondary .modal-title,.card.status-card.card-secondary .toast-title{color:#7aa2f7;background:0 0}.card.status-card.card-secondary .status-icon{color:#7aa2f7}.card.status-card.card-danger,.card.status-card.card-error{border-color:#f7768e}.card.status-card.card-danger .card-title,.card.status-card.card-danger .modal-title,.card.status-card.card-danger .toast-title,.card.status-card.card-error .card-title,.card.status-card.card-error .modal-title,.card.status-card.card-error .toast-title{color:#f7768e;background:0 0}.card.status-card.card-danger .status-icon,.card.status-card.card-error .status-icon{color:#f7768e}.card.metric-card{max-width:320px;border-color:#c0caf53d}.card.metric-card .card-content{display:flex;flex-direction:column;gap:15px}.card.metric-card .metric-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.card.metric-card .metric-card-label{margin:0;color:#a9b1d6;font-size:13px;font-weight:600;text-transform:uppercase}.card.metric-card .metric-card-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;color:#16161e;background:#7aa2f7;font-size:22px}.card.metric-card .metric-card-value{margin:0;color:#c0caf5;font-size:30px;font-weight:700;line-height:1.15}.card.metric-card .metric-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:#787c99;font-size:13px}.card.metric-card .metric-card-delta{color:#9ece6a;font-weight:700}.card.metric-card .metric-card-delta.metric-card-delta-negative{color:#f7768e}.card.card-horizontal{max-width:none;display:flex;flex-direction:row;align-items:stretch;overflow:hidden}.card.card-horizontal .card-media{flex:0 0 20%;min-width:80px;max-width:160px;max-height:160px;overflow:hidden;position:relative;aspect-ratio:1;align-self:start}.card.card-horizontal .card-media img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.card.card-horizontal .card-body{flex:1 1 auto;display:flex;flex-direction:column;padding:15px;gap:12px}.card.card-horizontal .card-title{padding:0;background:0 0;color:#c0caf5;font-size:15px;font-weight:700;text-transform:none;line-height:1.25}.card.card-horizontal .card-title a{color:inherit;text-decoration:none}.card.card-horizontal .card-content{padding:0;height:auto}.card.card-horizontal .card-content p{margin:0}.card.card-horizontal .card-footer{padding:0;display:flex;flex-wrap:wrap;align-items:center;gap:12px;color:#a9b1d6;font-size:13px}.card.action-card{max-width:360px;border-color:#7aa2f7}.card.action-card .card-content{display:flex;flex-direction:column;gap:15px}.card.action-card .action-card-kicker{display:inline-flex;width:-moz-max-content;width:max-content;padding:5px 8px;color:#16161e;background:#7aa2f7;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.card.action-card .action-card-title{margin:0;font-size:18px;font-weight:700;line-height:1.25;text-transform:uppercase}.card.action-card .action-card-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.card.action-card .action-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.card.login-card{max-width:100%;width:460px;border-color:#c0caf5}.card.login-card .login-card-header{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:12px}.card.login-card .login-card-logo{display:block;width:auto;max-height:40px}.card.login-card .login-card-logo-icon{font-size:56px;color:#c0caf5}.card.login-card .login-card-title{font-size:18px;font-weight:700;text-transform:uppercase}.card.login-card .login-card-form{display:flex;flex-direction:column;gap:15px}.card.login-card .login-card-submit{width:-moz-max-content;width:max-content;margin-top:8px}.card.login-card .form-group{margin-bottom:0}.card.login-card .login-card-links{display:flex;justify-content:space-between;gap:12px;margin-top:8px;font-size:13px}.card.login-card .login-card-link{color:#a9b1d6;text-decoration:none}@media(hover:hover)and (pointer:fine){.card.login-card .login-card-link:hover{color:#c0caf5;text-decoration:underline}}@media(hover:none)and (pointer:coarse){.card.login-card .login-card-link:active{color:#c0caf5;text-decoration:underline}}.card.login-card .login-card-error{margin-bottom:8px}.card.user-card{max-width:320px}.card.user-card .user-card-body{display:flex;flex-direction:column;align-items:center;gap:15px;padding:18px;text-align:center}.card.user-card .identity{flex-direction:column;align-items:center;gap:15px}.card.user-card .identity .avatar{width:64px;height:64px;font-size:18px}.card.user-card .identity .identity-content{align-items:center;text-align:center}.card.user-card .user-card-role{color:#a9b1d6;font-size:13px;margin-top:5px}.card.user-card .user-card-actions{display:flex;gap:8px}.card.user-card-compact{max-width:none}.card.user-card-compact .user-card-body{flex-direction:row;justify-content:space-between;align-items:center;padding:12px 15px;text-align:left}.card.user-card-compact .identity{flex-direction:row;gap:12px}.card.user-card-compact .identity .avatar{width:38px;height:38px;font-size:13px}.card.user-card-compact .identity .identity-content{align-items:flex-start}.card.user-card-compact .user-card-actions{display:flex;gap:5px}.modal{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center}.modal .modal-backdrop{position:fixed;z-index:1010;top:0;bottom:0;left:0;right:0;background:#16161e;opacity:0;transition-duration:.25s;transition-property:opacity}.modal .modal-dialog{position:relative;z-index:1020;width:100%;max-width:960px;margin:200px 18px 18px;height:auto;max-height:calc(100vh - 48px);padding:0;display:flex;flex-direction:column;gap:0;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,margin-top}.modal .modal-dialog .modal-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:15px}.modal .modal-dialog .modal-header .modal-title{padding:15px 18px 0;color:#c0caf5;text-transform:uppercase;letter-spacing:.04em}.modal .modal-dialog .modal-header .modal-close{flex:0 0 auto;color:#c0caf5;border-color:#c0caf53d;background:#16161e}.modal .modal-dialog .modal-panel{min-height:200px;display:flex;flex-direction:column;gap:15px;overflow:hidden;background:#16161e;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px}.modal .modal-dialog .modal-body{max-height:700px;overflow-y:auto;padding:18px}.modal .modal-dialog .modal-footer{padding:18px}.modal .modal-dialog .modal-footer .actions{display:flex;flex-direction:row;justify-content:flex-end;gap:15px;width:100%}.modal.a-show .modal-backdrop{opacity:1}.modal.a-show .modal-dialog{opacity:1;margin-top:0}.modal.a-hide .modal-backdrop{opacity:0}.modal.a-hide .modal-dialog{opacity:0;margin-top:-200px}.alert{position:relative;overflow:hidden;border-radius:6px;margin-bottom:12px;padding:12px 15px;border:2px solid transparent;border-left-style:solid;border-left-width:6px;background:#1f2335;color:#c0caf5;font-weight:500;line-height:1.4;transition-duration:.2s;transition-timing-function:ease;transition-property:background,color,border-color}.alert:after{content:"";position:absolute;inset:0 auto 0 0;width:36%;background:linear-gradient(90deg,transparent,rgba(192,202,245,.12),transparent);opacity:0;pointer-events:none;transform:translate(-120%)}@media(hover:hover)and (pointer:fine){.alert:hover:after{opacity:1;animation:terminal_scan_x .8s ease}}@media(hover:none)and (pointer:coarse){.alert:active:after{opacity:1;animation:terminal_scan_x .8s ease}}.alert.alert-primary{border-color:#c0caf5;background:#c0caf51a;color:#c0caf5}.alert.alert-success{border-color:#9ece6a;background:#9ece6a1a;color:#9ece6a}.alert.alert-secondary{border-color:#7aa2f7;background:#7aa2f71a;color:#7aa2f7}.alert.alert-info{border-color:#bb9af7;background:#bb9af71a;color:#c0caf5}.alert.alert-warning{border-color:#e0af68;background:#e0af681a;color:#e0af68}.alert.alert-danger,.alert.alert-error{border-color:#f7768e;background:#f7768e1a;color:#f7768e}.advanced-select-container{position:relative;height:0}.advanced-select{position:absolute;z-index:100;top:6px;width:100%;height:auto;max-height:200px;overflow-y:auto;background:#16161e;border:2px solid #c0caf5;border-left-width:6px;border-radius:6px;margin-top:20px;opacity:0;visibility:hidden;transition-property:opacity,margin-top,visibility;transition-duration:.2s;transition-timing-function:ease}.advanced-select.a-show{opacity:1;margin-top:0;visibility:visible}.advanced-select .popup-options-container .not-found{width:100%;padding:15px;text-align:center;display:none}.advanced-select .popup-options-container .not-found.show{display:block}.advanced-select .popup-options-container .options{width:100%;display:none}.advanced-select .popup-options-container .options.show{display:block}.advanced-select .popup-options-container .options .option{padding:8px 15px;transition-property:color,background;transition-duration:.15s}.advanced-select .popup-options-container .options .option.hide{display:none}.advanced-select .popup-options-container .options .option.focus,.advanced-select .popup-options-container .options .option:hover{color:#16161e;background:#e0af68}.component.editable-string-component .editable-string-content{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:inherit}.component.editable-string-component .editable-string-content .editable-string{font-size:inherit;border-bottom:2px solid rgba(192,202,245,.24)}@media(hover:hover)and (pointer:fine){.component.editable-string-component .apply-changes-btn:hover,.component.editable-string-component .cancel-changes-btn:hover,.component.editable-string-component .edit-text-btn:hover{color:#16161e;background:#e0af68}}@media(hover:none)and (pointer:coarse){.component.editable-string-component .apply-changes-btn:active,.component.editable-string-component .cancel-changes-btn:active,.component.editable-string-component .edit-text-btn:active{color:#16161e;background:#e0af68}}.component.editable-string-component .apply-changes-btn{color:#e0af68}.component.editable-string-component .editable-string-form{display:flex;flex-direction:row;align-items:center;gap:8px}.component.editable-string-component .editable-string-form .form-group{max-width:260px;margin:0}.component.editable-string-component .editable-string-form .form-group .input{padding:8px 15px}.tabs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:15px}.tabs .tab{display:inline-flex;align-items:center;min-height:34px;padding:8px 12px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;line-height:1;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.tabs .tab:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.tabs .tab:hover{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.tabs .tab:active{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}.tabs .tab.tab-active,.tabs .tab[aria-selected=true]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.dropdown,.popover{position:relative;display:inline-flex}.dropdown-menu,.popover-panel,.tooltip-panel{z-index:40;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;box-shadow:0 14px 36px #16161e5c}.dropdown-menu,.popover-panel{position:absolute;top:calc(100% + 8px);left:0;min-width:220px;display:none;transform-origin:top left}.dropdown.is-open .dropdown-menu,.popover.is-open .popover-panel{display:block;animation:overlay_reveal .2s ease both}.dropdown-menu{padding:5px}.dropdown-menu .dropdown-item{display:flex;align-items:center;gap:8px;width:100%;min-height:34px;padding:8px 12px;border:0;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;text-align:left;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.dropdown-menu .dropdown-item .ph,.dropdown-menu .dropdown-item .ph-bold{font-size:18px}.dropdown-menu .dropdown-item:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.dropdown-menu .dropdown-item:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.dropdown-menu .dropdown-item:active{color:#16161e;background:#7aa2f7}}.dropdown-menu .dropdown-item.dropdown-item-danger{color:#f7768e}@media(hover:hover)and (pointer:fine){.dropdown-menu .dropdown-item.dropdown-item-danger:hover{color:#16161e;background:#f7768e}}@media(hover:none)and (pointer:coarse){.dropdown-menu .dropdown-item.dropdown-item-danger:active{color:#16161e;background:#f7768e}}.popover-panel{width:min(320px,100vw - 22px);padding:15px}.popover-panel .popover-title{margin:0 0 8px;font-size:14px;font-weight:700;text-transform:uppercase}.popover-panel .popover-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.tooltip{position:relative;display:inline-flex}.tooltip-panel{position:absolute;left:50%;bottom:calc(100% + 8px);width:-moz-max-content;width:max-content;max-width:260px;padding:8px 12px;color:#c0caf5;font-size:12px;line-height:1.4;transform:translate(-50%);opacity:0;visibility:hidden;pointer-events:none;transition-duration:.15s;transition-timing-function:ease;transition-property:opacity,visibility}.tooltip.is-open .tooltip-panel,.tooltip:focus-within .tooltip-panel,.tooltip:hover .tooltip-panel{opacity:1;visibility:visible;animation:tooltip_reveal .15s ease both}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.g-0{gap:0!important}.gx-0{-moz-column-gap:0!important;column-gap:0!important}.gy-0{row-gap:0!important}.m-1{margin:5px!important}.mt-1{margin-top:5px!important}.mr-1{margin-right:5px!important}.mb-1{margin-bottom:5px!important}.ml-1{margin-left:5px!important}.mx-1{margin-left:5px!important;margin-right:5px!important}.my-1{margin-top:5px!important;margin-bottom:5px!important}.p-1{padding:5px!important}.pt-1{padding-top:5px!important}.pr-1{padding-right:5px!important}.pb-1{padding-bottom:5px!important}.pl-1{padding-left:5px!important}.px-1{padding-left:5px!important;padding-right:5px!important}.py-1{padding-top:5px!important;padding-bottom:5px!important}.g-1{gap:5px!important}.gx-1{-moz-column-gap:5px!important;column-gap:5px!important}.gy-1{row-gap:5px!important}.m-2{margin:8px!important}.mt-2{margin-top:8px!important}.mr-2{margin-right:8px!important}.mb-2{margin-bottom:8px!important}.ml-2{margin-left:8px!important}.mx-2{margin-left:8px!important;margin-right:8px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.p-2{padding:8px!important}.pt-2{padding-top:8px!important}.pr-2{padding-right:8px!important}.pb-2{padding-bottom:8px!important}.pl-2{padding-left:8px!important}.px-2{padding-left:8px!important;padding-right:8px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.g-2{gap:8px!important}.gx-2{-moz-column-gap:8px!important;column-gap:8px!important}.gy-2{row-gap:8px!important}.m-3{margin:12px!important}.mt-3{margin-top:12px!important}.mr-3{margin-right:12px!important}.mb-3{margin-bottom:12px!important}.ml-3{margin-left:12px!important}.mx-3{margin-left:12px!important;margin-right:12px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.p-3{padding:12px!important}.pt-3{padding-top:12px!important}.pr-3{padding-right:12px!important}.pb-3{padding-bottom:12px!important}.pl-3{padding-left:12px!important}.px-3{padding-left:12px!important;padding-right:12px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.g-3{gap:12px!important}.gx-3{-moz-column-gap:12px!important;column-gap:12px!important}.gy-3{row-gap:12px!important}.m-4{margin:15px!important}.mt-4{margin-top:15px!important}.mr-4{margin-right:15px!important}.mb-4{margin-bottom:15px!important}.ml-4{margin-left:15px!important}.mx-4{margin-left:15px!important;margin-right:15px!important}.my-4{margin-top:15px!important;margin-bottom:15px!important}.p-4{padding:15px!important}.pt-4{padding-top:15px!important}.pr-4{padding-right:15px!important}.pb-4{padding-bottom:15px!important}.pl-4{padding-left:15px!important}.px-4{padding-left:15px!important;padding-right:15px!important}.py-4{padding-top:15px!important;padding-bottom:15px!important}.g-4{gap:15px!important}.gx-4{-moz-column-gap:15px!important;column-gap:15px!important}.gy-4{row-gap:15px!important}.m-5{margin:18px!important}.mt-5{margin-top:18px!important}.mr-5{margin-right:18px!important}.mb-5{margin-bottom:18px!important}.ml-5{margin-left:18px!important}.mx-5{margin-left:18px!important;margin-right:18px!important}.my-5{margin-top:18px!important;margin-bottom:18px!important}.p-5{padding:18px!important}.pt-5{padding-top:18px!important}.pr-5{padding-right:18px!important}.pb-5{padding-bottom:18px!important}.pl-5{padding-left:18px!important}.px-5{padding-left:18px!important;padding-right:18px!important}.py-5{padding-top:18px!important;padding-bottom:18px!important}.g-5{gap:18px!important}.gx-5{-moz-column-gap:18px!important;column-gap:18px!important}.gy-5{row-gap:18px!important}.m-6{margin:22px!important}.mt-6{margin-top:22px!important}.mr-6{margin-right:22px!important}.mb-6{margin-bottom:22px!important}.ml-6{margin-left:22px!important}.mx-6{margin-left:22px!important;margin-right:22px!important}.my-6{margin-top:22px!important;margin-bottom:22px!important}.p-6{padding:22px!important}.pt-6{padding-top:22px!important}.pr-6{padding-right:22px!important}.pb-6{padding-bottom:22px!important}.pl-6{padding-left:22px!important}.px-6{padding-left:22px!important;padding-right:22px!important}.py-6{padding-top:22px!important;padding-bottom:22px!important}.g-6{gap:22px!important}.gx-6{-moz-column-gap:22px!important;column-gap:22px!important}.gy-6{row-gap:22px!important}.m-7{margin:26px!important}.mt-7{margin-top:26px!important}.mr-7{margin-right:26px!important}.mb-7{margin-bottom:26px!important}.ml-7{margin-left:26px!important}.mx-7{margin-left:26px!important;margin-right:26px!important}.my-7{margin-top:26px!important;margin-bottom:26px!important}.p-7{padding:26px!important}.pt-7{padding-top:26px!important}.pr-7{padding-right:26px!important}.pb-7{padding-bottom:26px!important}.pl-7{padding-left:26px!important}.px-7{padding-left:26px!important;padding-right:26px!important}.py-7{padding-top:26px!important;padding-bottom:26px!important}.g-7{gap:26px!important}.gx-7{-moz-column-gap:26px!important;column-gap:26px!important}.gy-7{row-gap:26px!important}.m-8{margin:34px!important}.mt-8{margin-top:34px!important}.mr-8{margin-right:34px!important}.mb-8{margin-bottom:34px!important}.ml-8{margin-left:34px!important}.mx-8{margin-left:34px!important;margin-right:34px!important}.my-8{margin-top:34px!important;margin-bottom:34px!important}.p-8{padding:34px!important}.pt-8{padding-top:34px!important}.pr-8{padding-right:34px!important}.pb-8{padding-bottom:34px!important}.pl-8{padding-left:34px!important}.px-8{padding-left:34px!important;padding-right:34px!important}.py-8{padding-top:34px!important;padding-bottom:34px!important}.g-8{gap:34px!important}.gx-8{-moz-column-gap:34px!important;column-gap:34px!important}.gy-8{row-gap:34px!important}.m-9{margin:42px!important}.mt-9{margin-top:42px!important}.mr-9{margin-right:42px!important}.mb-9{margin-bottom:42px!important}.ml-9{margin-left:42px!important}.mx-9{margin-left:42px!important;margin-right:42px!important}.my-9{margin-top:42px!important;margin-bottom:42px!important}.p-9{padding:42px!important}.pt-9{padding-top:42px!important}.pr-9{padding-right:42px!important}.pb-9{padding-bottom:42px!important}.pl-9{padding-left:42px!important}.px-9{padding-left:42px!important;padding-right:42px!important}.py-9{padding-top:42px!important;padding-bottom:42px!important}.g-9{gap:42px!important}.gx-9{-moz-column-gap:42px!important;column-gap:42px!important}.gy-9{row-gap:42px!important}.m-10{margin:48px!important}.mt-10{margin-top:48px!important}.mr-10{margin-right:48px!important}.mb-10{margin-bottom:48px!important}.ml-10{margin-left:48px!important}.mx-10{margin-left:48px!important;margin-right:48px!important}.my-10{margin-top:48px!important;margin-bottom:48px!important}.p-10{padding:48px!important}.pt-10{padding-top:48px!important}.pr-10{padding-right:48px!important}.pb-10{padding-bottom:48px!important}.pl-10{padding-left:48px!important}.px-10{padding-left:48px!important;padding-right:48px!important}.py-10{padding-top:48px!important;padding-bottom:48px!important}.g-10{gap:48px!important}.gx-10{-moz-column-gap:48px!important;column-gap:48px!important}.gy-10{row-gap:48px!important}.m-11{margin:64px!important}.mt-11{margin-top:64px!important}.mr-11{margin-right:64px!important}.mb-11{margin-bottom:64px!important}.ml-11{margin-left:64px!important}.mx-11{margin-left:64px!important;margin-right:64px!important}.my-11{margin-top:64px!important;margin-bottom:64px!important}.p-11{padding:64px!important}.pt-11{padding-top:64px!important}.pr-11{padding-right:64px!important}.pb-11{padding-bottom:64px!important}.pl-11{padding-left:64px!important}.px-11{padding-left:64px!important;padding-right:64px!important}.py-11{padding-top:64px!important;padding-bottom:64px!important}.g-11{gap:64px!important}.gx-11{-moz-column-gap:64px!important;column-gap:64px!important}.gy-11{row-gap:64px!important}.m-12{margin:80px!important}.mt-12{margin-top:80px!important}.mr-12{margin-right:80px!important}.mb-12{margin-bottom:80px!important}.ml-12{margin-left:80px!important}.mx-12{margin-left:80px!important;margin-right:80px!important}.my-12{margin-top:80px!important;margin-bottom:80px!important}.p-12{padding:80px!important}.pt-12{padding-top:80px!important}.pr-12{padding-right:80px!important}.pb-12{padding-bottom:80px!important}.pl-12{padding-left:80px!important}.px-12{padding-left:80px!important;padding-right:80px!important}.py-12{padding-top:80px!important;padding-bottom:80px!important}.g-12{gap:80px!important}.gx-12{-moz-column-gap:80px!important;column-gap:80px!important}.gy-12{row-gap:80px!important}.row{display:flex;flex-direction:row}@media(max-width:1279px){.row.adaptive{flex-direction:column}}.column{display:flex;flex-direction:column}.f-grid{display:flex;flex-direction:row;flex-wrap:wrap}.grid{display:grid}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.items-start{align-items:flex-start!important}.items-center{align-items:center!important}.items-end{align-items:flex-end!important}.justify-start{justify-content:flex-start!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-end{justify-content:flex-end!important}.w-100{width:100%}.w-auto{width:auto!important}.w-fit{width:-moz-fit-content!important;width:fit-content!important}.w-200{width:200%}.h-100{height:100%}.min-w-0{min-width:0!important}.overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto!important}.fs-xs{font-size:12px}.fs-sm{font-size:13px}.fs-md,.fs-base{font-size:14px}.fs-lg{font-size:15px}.fs-xl{font-size:18px}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-uppercase{text-transform:uppercase!important}.text-nowrap{white-space:nowrap!important}.d-none{display:none!important}.d-block{display:block!important}.d-inline-flex{display:inline-flex!important}.d-flex{display:flex!important}.d-grid{display:grid!important}@media(max-width:767px){.grid-2,.grid-3{grid-template-columns:1fr}}*{box-sizing:border-box}body,html{padding:0;margin:0}body{background-color:#16161e;color:#c0caf5}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{width:10px;background:#16161e;cursor:pointer}::-webkit-scrollbar-thumb{width:10px;background:#414868;cursor:default}::-webkit-scrollbar-corner{background:0 0;height:1px}::-webkit-scrollbar-button{display:none}.ph.normalize{position:relative;top:.15em}@font-face{font-family:Phosphor;src:url(/assets/Phosphor-DtdjzkpE.woff2) format("woff2"),url(/assets/Phosphor-BdqudwT5.woff) format("woff"),url(/assets/Phosphor-CDxgqcPu.ttf) format("truetype"),url(/assets/Phosphor-BXRFlF4V.svg#Phosphor) format("svg");font-weight:400;font-style:normal;font-display:block}.ph{font-family:Phosphor!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;letter-spacing:0;-webkit-font-feature-settings:"liga";-moz-font-feature-settings:"liga=1";-moz-font-feature-settings:"liga";-ms-font-feature-settings:"liga" 1;font-feature-settings:"liga";-webkit-font-variant-ligatures:discretionary-ligatures;font-variant-ligatures:discretionary-ligatures;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ph.ph-acorn:before{content:""}.ph.ph-address-book:before{content:""}.ph.ph-address-book-tabs:before{content:""}.ph.ph-air-traffic-control:before{content:""}.ph.ph-airplane:before{content:""}.ph.ph-airplane-in-flight:before{content:""}.ph.ph-airplane-landing:before{content:""}.ph.ph-airplane-takeoff:before{content:""}.ph.ph-airplane-taxiing:before{content:""}.ph.ph-airplane-tilt:before{content:""}.ph.ph-airplay:before{content:""}.ph.ph-alarm:before{content:""}.ph.ph-alien:before{content:""}.ph.ph-align-bottom:before{content:""}.ph.ph-align-bottom-simple:before{content:""}.ph.ph-align-center-horizontal:before{content:""}.ph.ph-align-center-horizontal-simple:before{content:""}.ph.ph-align-center-vertical:before{content:""}.ph.ph-align-center-vertical-simple:before{content:""}.ph.ph-align-left:before{content:""}.ph.ph-align-left-simple:before{content:""}.ph.ph-align-right:before{content:""}.ph.ph-align-right-simple:before{content:""}.ph.ph-align-top:before{content:""}.ph.ph-align-top-simple:before{content:""}.ph.ph-amazon-logo:before{content:""}.ph.ph-ambulance:before{content:""}.ph.ph-anchor:before{content:""}.ph.ph-anchor-simple:before{content:""}.ph.ph-android-logo:before{content:""}.ph.ph-angle:before{content:""}.ph.ph-angular-logo:before{content:""}.ph.ph-aperture:before{content:""}.ph.ph-app-store-logo:before{content:""}.ph.ph-app-window:before{content:""}.ph.ph-apple-logo:before{content:""}.ph.ph-apple-podcasts-logo:before{content:""}.ph.ph-approximate-equals:before{content:""}.ph.ph-archive:before{content:""}.ph.ph-armchair:before{content:""}.ph.ph-arrow-arc-left:before{content:""}.ph.ph-arrow-arc-right:before{content:""}.ph.ph-arrow-bend-double-up-left:before{content:""}.ph.ph-arrow-bend-double-up-right:before{content:""}.ph.ph-arrow-bend-down-left:before{content:""}.ph.ph-arrow-bend-down-right:before{content:""}.ph.ph-arrow-bend-left-down:before{content:""}.ph.ph-arrow-bend-left-up:before{content:""}.ph.ph-arrow-bend-right-down:before{content:""}.ph.ph-arrow-bend-right-up:before{content:""}.ph.ph-arrow-bend-up-left:before{content:""}.ph.ph-arrow-bend-up-right:before{content:""}.ph.ph-arrow-circle-down:before{content:""}.ph.ph-arrow-circle-down-left:before{content:""}.ph.ph-arrow-circle-down-right:before{content:""}.ph.ph-arrow-circle-left:before{content:""}.ph.ph-arrow-circle-right:before{content:""}.ph.ph-arrow-circle-up:before{content:""}.ph.ph-arrow-circle-up-left:before{content:""}.ph.ph-arrow-circle-up-right:before{content:""}.ph.ph-arrow-clockwise:before{content:""}.ph.ph-arrow-counter-clockwise:before{content:""}.ph.ph-arrow-down:before{content:""}.ph.ph-arrow-down-left:before{content:""}.ph.ph-arrow-down-right:before{content:""}.ph.ph-arrow-elbow-down-left:before{content:""}.ph.ph-arrow-elbow-down-right:before{content:""}.ph.ph-arrow-elbow-left:before{content:""}.ph.ph-arrow-elbow-left-down:before{content:""}.ph.ph-arrow-elbow-left-up:before{content:""}.ph.ph-arrow-elbow-right:before{content:""}.ph.ph-arrow-elbow-right-down:before{content:""}.ph.ph-arrow-elbow-right-up:before{content:""}.ph.ph-arrow-elbow-up-left:before{content:""}.ph.ph-arrow-elbow-up-right:before{content:""}.ph.ph-arrow-fat-down:before{content:""}.ph.ph-arrow-fat-left:before{content:""}.ph.ph-arrow-fat-line-down:before{content:""}.ph.ph-arrow-fat-line-left:before{content:""}.ph.ph-arrow-fat-line-right:before{content:""}.ph.ph-arrow-fat-line-up:before{content:""}.ph.ph-arrow-fat-lines-down:before{content:""}.ph.ph-arrow-fat-lines-left:before{content:""}.ph.ph-arrow-fat-lines-right:before{content:""}.ph.ph-arrow-fat-lines-up:before{content:""}.ph.ph-arrow-fat-right:before{content:""}.ph.ph-arrow-fat-up:before{content:""}.ph.ph-arrow-left:before{content:""}.ph.ph-arrow-line-down:before{content:""}.ph.ph-arrow-line-down-left:before{content:""}.ph.ph-arrow-line-down-right:before{content:""}.ph.ph-arrow-line-left:before{content:""}.ph.ph-arrow-line-right:before{content:""}.ph.ph-arrow-line-up:before{content:""}.ph.ph-arrow-line-up-left:before{content:""}.ph.ph-arrow-line-up-right:before{content:""}.ph.ph-arrow-right:before{content:""}.ph.ph-arrow-square-down:before{content:""}.ph.ph-arrow-square-down-left:before{content:""}.ph.ph-arrow-square-down-right:before{content:""}.ph.ph-arrow-square-in:before{content:""}.ph.ph-arrow-square-left:before{content:""}.ph.ph-arrow-square-out:before{content:""}.ph.ph-arrow-square-right:before{content:""}.ph.ph-arrow-square-up:before{content:""}.ph.ph-arrow-square-up-left:before{content:""}.ph.ph-arrow-square-up-right:before{content:""}.ph.ph-arrow-u-down-left:before{content:""}.ph.ph-arrow-u-down-right:before{content:""}.ph.ph-arrow-u-left-down:before{content:""}.ph.ph-arrow-u-left-up:before{content:""}.ph.ph-arrow-u-right-down:before{content:""}.ph.ph-arrow-u-right-up:before{content:""}.ph.ph-arrow-u-up-left:before{content:""}.ph.ph-arrow-u-up-right:before{content:""}.ph.ph-arrow-up:before{content:""}.ph.ph-arrow-up-left:before{content:""}.ph.ph-arrow-up-right:before{content:""}.ph.ph-arrows-clockwise:before{content:""}.ph.ph-arrows-counter-clockwise:before{content:""}.ph.ph-arrows-down-up:before{content:""}.ph.ph-arrows-horizontal:before{content:""}.ph.ph-arrows-in:before{content:""}.ph.ph-arrows-in-cardinal:before{content:""}.ph.ph-arrows-in-line-horizontal:before{content:""}.ph.ph-arrows-in-line-vertical:before{content:""}.ph.ph-arrows-in-simple:before{content:""}.ph.ph-arrows-left-right:before{content:""}.ph.ph-arrows-merge:before{content:""}.ph.ph-arrows-out:before{content:""}.ph.ph-arrows-out-cardinal:before{content:""}.ph.ph-arrows-out-line-horizontal:before{content:""}.ph.ph-arrows-out-line-vertical:before{content:""}.ph.ph-arrows-out-simple:before{content:""}.ph.ph-arrows-split:before{content:""}.ph.ph-arrows-vertical:before{content:""}.ph.ph-article:before{content:""}.ph.ph-article-medium:before{content:""}.ph.ph-article-ny-times:before{content:""}.ph.ph-asclepius:before{content:""}.ph.ph-caduceus:before{content:""}.ph.ph-asterisk:before{content:""}.ph.ph-asterisk-simple:before{content:""}.ph.ph-at:before{content:""}.ph.ph-atom:before{content:""}.ph.ph-avocado:before{content:""}.ph.ph-axe:before{content:""}.ph.ph-baby:before{content:""}.ph.ph-baby-carriage:before{content:""}.ph.ph-backpack:before{content:""}.ph.ph-backspace:before{content:""}.ph.ph-bag:before{content:""}.ph.ph-bag-simple:before{content:""}.ph.ph-balloon:before{content:""}.ph.ph-bandaids:before{content:""}.ph.ph-bank:before{content:""}.ph.ph-barbell:before{content:""}.ph.ph-barcode:before{content:""}.ph.ph-barn:before{content:""}.ph.ph-barricade:before{content:""}.ph.ph-baseball:before{content:""}.ph.ph-baseball-cap:before{content:""}.ph.ph-baseball-helmet:before{content:""}.ph.ph-basket:before{content:""}.ph.ph-basketball:before{content:""}.ph.ph-bathtub:before{content:""}.ph.ph-battery-charging:before{content:""}.ph.ph-battery-charging-vertical:before{content:""}.ph.ph-battery-empty:before{content:""}.ph.ph-battery-full:before{content:""}.ph.ph-battery-high:before{content:""}.ph.ph-battery-low:before{content:""}.ph.ph-battery-medium:before{content:""}.ph.ph-battery-plus:before{content:""}.ph.ph-battery-plus-vertical:before{content:""}.ph.ph-battery-vertical-empty:before{content:""}.ph.ph-battery-vertical-full:before{content:""}.ph.ph-battery-vertical-high:before{content:""}.ph.ph-battery-vertical-low:before{content:""}.ph.ph-battery-vertical-medium:before{content:""}.ph.ph-battery-warning:before{content:""}.ph.ph-battery-warning-vertical:before{content:""}.ph.ph-beach-ball:before{content:""}.ph.ph-beanie:before{content:""}.ph.ph-bed:before{content:""}.ph.ph-beer-bottle:before{content:""}.ph.ph-beer-stein:before{content:""}.ph.ph-behance-logo:before{content:""}.ph.ph-bell:before{content:""}.ph.ph-bell-ringing:before{content:""}.ph.ph-bell-simple:before{content:""}.ph.ph-bell-simple-ringing:before{content:""}.ph.ph-bell-simple-slash:before{content:""}.ph.ph-bell-simple-z:before{content:""}.ph.ph-bell-slash:before{content:""}.ph.ph-bell-z:before{content:""}.ph.ph-belt:before{content:""}.ph.ph-bezier-curve:before{content:""}.ph.ph-bicycle:before{content:""}.ph.ph-binary:before{content:""}.ph.ph-binoculars:before{content:""}.ph.ph-biohazard:before{content:""}.ph.ph-bird:before{content:""}.ph.ph-blueprint:before{content:""}.ph.ph-bluetooth:before{content:""}.ph.ph-bluetooth-connected:before{content:""}.ph.ph-bluetooth-slash:before{content:""}.ph.ph-bluetooth-x:before{content:""}.ph.ph-boat:before{content:""}.ph.ph-bomb:before{content:""}.ph.ph-bone:before{content:""}.ph.ph-book:before{content:""}.ph.ph-book-bookmark:before{content:""}.ph.ph-book-open:before{content:""}.ph.ph-book-open-text:before{content:""}.ph.ph-book-open-user:before{content:""}.ph.ph-bookmark:before{content:""}.ph.ph-bookmark-simple:before{content:""}.ph.ph-bookmarks:before{content:""}.ph.ph-bookmarks-simple:before{content:""}.ph.ph-books:before{content:""}.ph.ph-boot:before{content:""}.ph.ph-boules:before{content:""}.ph.ph-bounding-box:before{content:""}.ph.ph-bowl-food:before{content:""}.ph.ph-bowl-steam:before{content:""}.ph.ph-bowling-ball:before{content:""}.ph.ph-box-arrow-down:before{content:""}.ph.ph-archive-box:before{content:""}.ph.ph-box-arrow-up:before{content:""}.ph.ph-boxing-glove:before{content:""}.ph.ph-brackets-angle:before{content:""}.ph.ph-brackets-curly:before{content:""}.ph.ph-brackets-round:before{content:""}.ph.ph-brackets-square:before{content:""}.ph.ph-brain:before{content:""}.ph.ph-brandy:before{content:""}.ph.ph-bread:before{content:""}.ph.ph-bridge:before{content:""}.ph.ph-briefcase:before{content:""}.ph.ph-briefcase-metal:before{content:""}.ph.ph-broadcast:before{content:""}.ph.ph-broom:before{content:""}.ph.ph-browser:before{content:""}.ph.ph-browsers:before{content:""}.ph.ph-bug:before{content:""}.ph.ph-bug-beetle:before{content:""}.ph.ph-bug-droid:before{content:""}.ph.ph-building:before{content:""}.ph.ph-building-apartment:before{content:""}.ph.ph-building-office:before{content:""}.ph.ph-buildings:before{content:""}.ph.ph-bulldozer:before{content:""}.ph.ph-bus:before{content:""}.ph.ph-butterfly:before{content:""}.ph.ph-cable-car:before{content:""}.ph.ph-cactus:before{content:""}.ph.ph-cake:before{content:""}.ph.ph-calculator:before{content:""}.ph.ph-calendar:before{content:""}.ph.ph-calendar-blank:before{content:""}.ph.ph-calendar-check:before{content:""}.ph.ph-calendar-dot:before{content:""}.ph.ph-calendar-dots:before{content:""}.ph.ph-calendar-heart:before{content:""}.ph.ph-calendar-minus:before{content:""}.ph.ph-calendar-plus:before{content:""}.ph.ph-calendar-slash:before{content:""}.ph.ph-calendar-star:before{content:""}.ph.ph-calendar-x:before{content:""}.ph.ph-call-bell:before{content:""}.ph.ph-camera:before{content:""}.ph.ph-camera-plus:before{content:""}.ph.ph-camera-rotate:before{content:""}.ph.ph-camera-slash:before{content:""}.ph.ph-campfire:before{content:""}.ph.ph-car:before{content:""}.ph.ph-car-battery:before{content:""}.ph.ph-car-profile:before{content:""}.ph.ph-car-simple:before{content:""}.ph.ph-cardholder:before{content:""}.ph.ph-cards:before{content:""}.ph.ph-cards-three:before{content:""}.ph.ph-caret-circle-double-down:before{content:""}.ph.ph-caret-circle-double-left:before{content:""}.ph.ph-caret-circle-double-right:before{content:""}.ph.ph-caret-circle-double-up:before{content:""}.ph.ph-caret-circle-down:before{content:""}.ph.ph-caret-circle-left:before{content:""}.ph.ph-caret-circle-right:before{content:""}.ph.ph-caret-circle-up:before{content:""}.ph.ph-caret-circle-up-down:before{content:""}.ph.ph-caret-double-down:before{content:""}.ph.ph-caret-double-left:before{content:""}.ph.ph-caret-double-right:before{content:""}.ph.ph-caret-double-up:before{content:""}.ph.ph-caret-down:before{content:""}.ph.ph-caret-left:before{content:""}.ph.ph-caret-line-down:before{content:""}.ph.ph-caret-line-left:before{content:""}.ph.ph-caret-line-right:before{content:""}.ph.ph-caret-line-up:before{content:""}.ph.ph-caret-right:before{content:""}.ph.ph-caret-up:before{content:""}.ph.ph-caret-up-down:before{content:""}.ph.ph-carrot:before{content:""}.ph.ph-cash-register:before{content:""}.ph.ph-cassette-tape:before{content:""}.ph.ph-castle-turret:before{content:""}.ph.ph-cat:before{content:""}.ph.ph-cell-signal-full:before{content:""}.ph.ph-cell-signal-high:before{content:""}.ph.ph-cell-signal-low:before{content:""}.ph.ph-cell-signal-medium:before{content:""}.ph.ph-cell-signal-none:before{content:""}.ph.ph-cell-signal-slash:before{content:""}.ph.ph-cell-signal-x:before{content:""}.ph.ph-cell-tower:before{content:""}.ph.ph-certificate:before{content:""}.ph.ph-chair:before{content:""}.ph.ph-chalkboard:before{content:""}.ph.ph-chalkboard-simple:before{content:""}.ph.ph-chalkboard-teacher:before{content:""}.ph.ph-champagne:before{content:""}.ph.ph-charging-station:before{content:""}.ph.ph-chart-bar:before{content:""}.ph.ph-chart-bar-horizontal:before{content:""}.ph.ph-chart-donut:before{content:""}.ph.ph-chart-line:before{content:""}.ph.ph-chart-line-down:before{content:""}.ph.ph-chart-line-up:before{content:""}.ph.ph-chart-pie:before{content:""}.ph.ph-chart-pie-slice:before{content:""}.ph.ph-chart-polar:before{content:""}.ph.ph-chart-scatter:before{content:""}.ph.ph-chat:before{content:""}.ph.ph-chat-centered:before{content:""}.ph.ph-chat-centered-dots:before{content:""}.ph.ph-chat-centered-slash:before{content:""}.ph.ph-chat-centered-text:before{content:""}.ph.ph-chat-circle:before{content:""}.ph.ph-chat-circle-dots:before{content:""}.ph.ph-chat-circle-slash:before{content:""}.ph.ph-chat-circle-text:before{content:""}.ph.ph-chat-dots:before{content:""}.ph.ph-chat-slash:before{content:""}.ph.ph-chat-teardrop:before{content:""}.ph.ph-chat-teardrop-dots:before{content:""}.ph.ph-chat-teardrop-slash:before{content:""}.ph.ph-chat-teardrop-text:before{content:""}.ph.ph-chat-text:before{content:""}.ph.ph-chats:before{content:""}.ph.ph-chats-circle:before{content:""}.ph.ph-chats-teardrop:before{content:""}.ph.ph-check:before{content:""}.ph.ph-check-circle:before{content:""}.ph.ph-check-fat:before{content:""}.ph.ph-check-square:before{content:""}.ph.ph-check-square-offset:before{content:""}.ph.ph-checkerboard:before{content:""}.ph.ph-checks:before{content:""}.ph.ph-cheers:before{content:""}.ph.ph-cheese:before{content:""}.ph.ph-chef-hat:before{content:""}.ph.ph-cherries:before{content:""}.ph.ph-church:before{content:""}.ph.ph-cigarette:before{content:""}.ph.ph-cigarette-slash:before{content:""}.ph.ph-circle:before{content:""}.ph.ph-circle-dashed:before{content:""}.ph.ph-circle-half:before{content:""}.ph.ph-circle-half-tilt:before{content:""}.ph.ph-circle-notch:before{content:""}.ph.ph-circles-four:before{content:""}.ph.ph-circles-three:before{content:""}.ph.ph-circles-three-plus:before{content:""}.ph.ph-circuitry:before{content:""}.ph.ph-city:before{content:""}.ph.ph-clipboard:before{content:""}.ph.ph-clipboard-text:before{content:""}.ph.ph-clock:before{content:""}.ph.ph-clock-afternoon:before{content:""}.ph.ph-clock-clockwise:before{content:""}.ph.ph-clock-countdown:before{content:""}.ph.ph-clock-counter-clockwise:before{content:""}.ph.ph-clock-user:before{content:""}.ph.ph-closed-captioning:before{content:""}.ph.ph-cloud:before{content:""}.ph.ph-cloud-arrow-down:before{content:""}.ph.ph-cloud-arrow-up:before{content:""}.ph.ph-cloud-check:before{content:""}.ph.ph-cloud-fog:before{content:""}.ph.ph-cloud-lightning:before{content:""}.ph.ph-cloud-moon:before{content:""}.ph.ph-cloud-rain:before{content:""}.ph.ph-cloud-slash:before{content:""}.ph.ph-cloud-snow:before{content:""}.ph.ph-cloud-sun:before{content:""}.ph.ph-cloud-warning:before{content:""}.ph.ph-cloud-x:before{content:""}.ph.ph-clover:before{content:""}.ph.ph-club:before{content:""}.ph.ph-coat-hanger:before{content:""}.ph.ph-coda-logo:before{content:""}.ph.ph-code:before{content:""}.ph.ph-code-block:before{content:""}.ph.ph-code-simple:before{content:""}.ph.ph-codepen-logo:before{content:""}.ph.ph-codesandbox-logo:before{content:""}.ph.ph-coffee:before{content:""}.ph.ph-coffee-bean:before{content:""}.ph.ph-coin:before{content:""}.ph.ph-coin-vertical:before{content:""}.ph.ph-coins:before{content:""}.ph.ph-columns:before{content:""}.ph.ph-columns-plus-left:before{content:""}.ph.ph-columns-plus-right:before{content:""}.ph.ph-command:before{content:""}.ph.ph-compass:before{content:""}.ph.ph-compass-rose:before{content:""}.ph.ph-compass-tool:before{content:""}.ph.ph-computer-tower:before{content:""}.ph.ph-confetti:before{content:""}.ph.ph-contactless-payment:before{content:""}.ph.ph-control:before{content:""}.ph.ph-cookie:before{content:""}.ph.ph-cooking-pot:before{content:""}.ph.ph-copy:before{content:""}.ph.ph-copy-simple:before{content:""}.ph.ph-copyleft:before{content:""}.ph.ph-copyright:before{content:""}.ph.ph-corners-in:before{content:""}.ph.ph-corners-out:before{content:""}.ph.ph-couch:before{content:""}.ph.ph-court-basketball:before{content:""}.ph.ph-cow:before{content:""}.ph.ph-cowboy-hat:before{content:""}.ph.ph-cpu:before{content:""}.ph.ph-crane:before{content:""}.ph.ph-crane-tower:before{content:""}.ph.ph-credit-card:before{content:""}.ph.ph-cricket:before{content:""}.ph.ph-crop:before{content:""}.ph.ph-cross:before{content:""}.ph.ph-crosshair:before{content:""}.ph.ph-crosshair-simple:before{content:""}.ph.ph-crown:before{content:""}.ph.ph-crown-cross:before{content:""}.ph.ph-crown-simple:before{content:""}.ph.ph-cube:before{content:""}.ph.ph-cube-focus:before{content:""}.ph.ph-cube-transparent:before{content:""}.ph.ph-currency-btc:before{content:""}.ph.ph-currency-circle-dollar:before{content:""}.ph.ph-currency-cny:before{content:""}.ph.ph-currency-dollar:before{content:""}.ph.ph-currency-dollar-simple:before{content:""}.ph.ph-currency-eth:before{content:""}.ph.ph-currency-eur:before{content:""}.ph.ph-currency-gbp:before{content:""}.ph.ph-currency-inr:before{content:""}.ph.ph-currency-jpy:before{content:""}.ph.ph-currency-krw:before{content:""}.ph.ph-currency-kzt:before{content:""}.ph.ph-currency-ngn:before{content:""}.ph.ph-currency-rub:before{content:""}.ph.ph-cursor:before{content:""}.ph.ph-cursor-click:before{content:""}.ph.ph-cursor-text:before{content:""}.ph.ph-cylinder:before{content:""}.ph.ph-database:before{content:""}.ph.ph-desk:before{content:""}.ph.ph-desktop:before{content:""}.ph.ph-desktop-tower:before{content:""}.ph.ph-detective:before{content:""}.ph.ph-dev-to-logo:before{content:""}.ph.ph-device-mobile:before{content:""}.ph.ph-device-mobile-camera:before{content:""}.ph.ph-device-mobile-slash:before{content:""}.ph.ph-device-mobile-speaker:before{content:""}.ph.ph-device-rotate:before{content:""}.ph.ph-device-tablet:before{content:""}.ph.ph-device-tablet-camera:before{content:""}.ph.ph-device-tablet-speaker:before{content:""}.ph.ph-devices:before{content:""}.ph.ph-diamond:before{content:""}.ph.ph-diamonds-four:before{content:""}.ph.ph-dice-five:before{content:""}.ph.ph-dice-four:before{content:""}.ph.ph-dice-one:before{content:""}.ph.ph-dice-six:before{content:""}.ph.ph-dice-three:before{content:""}.ph.ph-dice-two:before{content:""}.ph.ph-disc:before{content:""}.ph.ph-disco-ball:before{content:""}.ph.ph-discord-logo:before{content:""}.ph.ph-divide:before{content:""}.ph.ph-dna:before{content:""}.ph.ph-dog:before{content:""}.ph.ph-door:before{content:""}.ph.ph-door-open:before{content:""}.ph.ph-dot:before{content:""}.ph.ph-dot-outline:before{content:""}.ph.ph-dots-nine:before{content:""}.ph.ph-dots-six:before{content:""}.ph.ph-dots-six-vertical:before{content:""}.ph.ph-dots-three:before{content:""}.ph.ph-dots-three-circle:before{content:""}.ph.ph-dots-three-circle-vertical:before{content:""}.ph.ph-dots-three-outline:before{content:""}.ph.ph-dots-three-outline-vertical:before{content:""}.ph.ph-dots-three-vertical:before{content:""}.ph.ph-download:before{content:""}.ph.ph-download-simple:before{content:""}.ph.ph-dress:before{content:""}.ph.ph-dresser:before{content:""}.ph.ph-dribbble-logo:before{content:""}.ph.ph-drone:before{content:""}.ph.ph-drop:before{content:""}.ph.ph-drop-half:before{content:""}.ph.ph-drop-half-bottom:before{content:""}.ph.ph-drop-simple:before{content:""}.ph.ph-drop-slash:before{content:""}.ph.ph-dropbox-logo:before{content:""}.ph.ph-ear:before{content:""}.ph.ph-ear-slash:before{content:""}.ph.ph-egg:before{content:""}.ph.ph-egg-crack:before{content:""}.ph.ph-eject:before{content:""}.ph.ph-eject-simple:before{content:""}.ph.ph-elevator:before{content:""}.ph.ph-empty:before{content:""}.ph.ph-engine:before{content:""}.ph.ph-envelope:before{content:""}.ph.ph-envelope-open:before{content:""}.ph.ph-envelope-simple:before{content:""}.ph.ph-envelope-simple-open:before{content:""}.ph.ph-equalizer:before{content:""}.ph.ph-equals:before{content:""}.ph.ph-eraser:before{content:""}.ph.ph-escalator-down:before{content:""}.ph.ph-escalator-up:before{content:""}.ph.ph-exam:before{content:""}.ph.ph-exclamation-mark:before{content:""}.ph.ph-exclude:before{content:""}.ph.ph-exclude-square:before{content:""}.ph.ph-export:before{content:""}.ph.ph-eye:before{content:""}.ph.ph-eye-closed:before{content:""}.ph.ph-eye-slash:before{content:""}.ph.ph-eyedropper:before{content:""}.ph.ph-eyedropper-sample:before{content:""}.ph.ph-eyeglasses:before{content:""}.ph.ph-eyes:before{content:""}.ph.ph-face-mask:before{content:""}.ph.ph-facebook-logo:before{content:""}.ph.ph-factory:before{content:""}.ph.ph-faders:before{content:""}.ph.ph-faders-horizontal:before{content:""}.ph.ph-fallout-shelter:before{content:""}.ph.ph-fan:before{content:""}.ph.ph-farm:before{content:""}.ph.ph-fast-forward:before{content:""}.ph.ph-fast-forward-circle:before{content:""}.ph.ph-feather:before{content:""}.ph.ph-fediverse-logo:before{content:""}.ph.ph-figma-logo:before{content:""}.ph.ph-file:before{content:""}.ph.ph-file-archive:before{content:""}.ph.ph-file-arrow-down:before{content:""}.ph.ph-file-arrow-up:before{content:""}.ph.ph-file-audio:before{content:""}.ph.ph-file-c:before{content:""}.ph.ph-file-c-sharp:before{content:""}.ph.ph-file-cloud:before{content:""}.ph.ph-file-code:before{content:""}.ph.ph-file-cpp:before{content:""}.ph.ph-file-css:before{content:""}.ph.ph-file-csv:before{content:""}.ph.ph-file-dashed:before{content:""}.ph.ph-file-dotted:before{content:""}.ph.ph-file-doc:before{content:""}.ph.ph-file-html:before{content:""}.ph.ph-file-image:before{content:""}.ph.ph-file-ini:before{content:""}.ph.ph-file-jpg:before{content:""}.ph.ph-file-js:before{content:""}.ph.ph-file-jsx:before{content:""}.ph.ph-file-lock:before{content:""}.ph.ph-file-magnifying-glass:before{content:""}.ph.ph-file-search:before{content:""}.ph.ph-file-md:before{content:""}.ph.ph-file-minus:before{content:""}.ph.ph-file-pdf:before{content:""}.ph.ph-file-plus:before{content:""}.ph.ph-file-png:before{content:""}.ph.ph-file-ppt:before{content:""}.ph.ph-file-py:before{content:""}.ph.ph-file-rs:before{content:""}.ph.ph-file-sql:before{content:""}.ph.ph-file-svg:before{content:""}.ph.ph-file-text:before{content:""}.ph.ph-file-ts:before{content:""}.ph.ph-file-tsx:before{content:""}.ph.ph-file-txt:before{content:""}.ph.ph-file-video:before{content:""}.ph.ph-file-vue:before{content:""}.ph.ph-file-x:before{content:""}.ph.ph-file-xls:before{content:""}.ph.ph-file-zip:before{content:""}.ph.ph-files:before{content:""}.ph.ph-film-reel:before{content:""}.ph.ph-film-script:before{content:""}.ph.ph-film-slate:before{content:""}.ph.ph-film-strip:before{content:""}.ph.ph-fingerprint:before{content:""}.ph.ph-fingerprint-simple:before{content:""}.ph.ph-finn-the-human:before{content:""}.ph.ph-fire:before{content:""}.ph.ph-fire-extinguisher:before{content:""}.ph.ph-fire-simple:before{content:""}.ph.ph-fire-truck:before{content:""}.ph.ph-first-aid:before{content:""}.ph.ph-first-aid-kit:before{content:""}.ph.ph-fish:before{content:""}.ph.ph-fish-simple:before{content:""}.ph.ph-flag:before{content:""}.ph.ph-flag-banner:before{content:""}.ph.ph-flag-banner-fold:before{content:""}.ph.ph-flag-checkered:before{content:""}.ph.ph-flag-pennant:before{content:""}.ph.ph-flame:before{content:""}.ph.ph-flashlight:before{content:""}.ph.ph-flask:before{content:""}.ph.ph-flip-horizontal:before{content:""}.ph.ph-flip-vertical:before{content:""}.ph.ph-floppy-disk:before{content:""}.ph.ph-floppy-disk-back:before{content:""}.ph.ph-flow-arrow:before{content:""}.ph.ph-flower:before{content:""}.ph.ph-flower-lotus:before{content:""}.ph.ph-flower-tulip:before{content:""}.ph.ph-flying-saucer:before{content:""}.ph.ph-folder:before{content:""}.ph.ph-folder-notch:before{content:""}.ph.ph-folder-dashed:before{content:""}.ph.ph-folder-dotted:before{content:""}.ph.ph-folder-lock:before{content:""}.ph.ph-folder-minus:before{content:""}.ph.ph-folder-notch-minus:before{content:""}.ph.ph-folder-open:before{content:""}.ph.ph-folder-notch-open:before{content:""}.ph.ph-folder-plus:before{content:""}.ph.ph-folder-notch-plus:before{content:""}.ph.ph-folder-simple:before{content:""}.ph.ph-folder-simple-dashed:before{content:""}.ph.ph-folder-simple-dotted:before{content:""}.ph.ph-folder-simple-lock:before{content:""}.ph.ph-folder-simple-minus:before{content:""}.ph.ph-folder-simple-plus:before{content:""}.ph.ph-folder-simple-star:before{content:""}.ph.ph-folder-simple-user:before{content:""}.ph.ph-folder-star:before{content:""}.ph.ph-folder-user:before{content:""}.ph.ph-folders:before{content:""}.ph.ph-football:before{content:""}.ph.ph-football-helmet:before{content:""}.ph.ph-footprints:before{content:""}.ph.ph-fork-knife:before{content:""}.ph.ph-four-k:before{content:""}.ph.ph-frame-corners:before{content:""}.ph.ph-framer-logo:before{content:""}.ph.ph-function:before{content:""}.ph.ph-funnel:before{content:""}.ph.ph-funnel-simple:before{content:""}.ph.ph-funnel-simple-x:before{content:""}.ph.ph-funnel-x:before{content:""}.ph.ph-game-controller:before{content:""}.ph.ph-garage:before{content:""}.ph.ph-gas-can:before{content:""}.ph.ph-gas-pump:before{content:""}.ph.ph-gauge:before{content:""}.ph.ph-gavel:before{content:""}.ph.ph-gear:before{content:""}.ph.ph-gear-fine:before{content:""}.ph.ph-gear-six:before{content:""}.ph.ph-gender-female:before{content:""}.ph.ph-gender-intersex:before{content:""}.ph.ph-gender-male:before{content:""}.ph.ph-gender-neuter:before{content:""}.ph.ph-gender-nonbinary:before{content:""}.ph.ph-gender-transgender:before{content:""}.ph.ph-ghost:before{content:""}.ph.ph-gif:before{content:""}.ph.ph-gift:before{content:""}.ph.ph-git-branch:before{content:""}.ph.ph-git-commit:before{content:""}.ph.ph-git-diff:before{content:""}.ph.ph-git-fork:before{content:""}.ph.ph-git-merge:before{content:""}.ph.ph-git-pull-request:before{content:""}.ph.ph-github-logo:before{content:""}.ph.ph-gitlab-logo:before{content:""}.ph.ph-gitlab-logo-simple:before{content:""}.ph.ph-globe:before{content:""}.ph.ph-globe-hemisphere-east:before{content:""}.ph.ph-globe-hemisphere-west:before{content:""}.ph.ph-globe-simple:before{content:""}.ph.ph-globe-simple-x:before{content:""}.ph.ph-globe-stand:before{content:""}.ph.ph-globe-x:before{content:""}.ph.ph-goggles:before{content:""}.ph.ph-golf:before{content:""}.ph.ph-goodreads-logo:before{content:""}.ph.ph-google-cardboard-logo:before{content:""}.ph.ph-google-chrome-logo:before{content:""}.ph.ph-google-drive-logo:before{content:""}.ph.ph-google-logo:before{content:""}.ph.ph-google-photos-logo:before{content:""}.ph.ph-google-play-logo:before{content:""}.ph.ph-google-podcasts-logo:before{content:""}.ph.ph-gps:before{content:""}.ph.ph-gps-fix:before{content:""}.ph.ph-gps-slash:before{content:""}.ph.ph-gradient:before{content:""}.ph.ph-graduation-cap:before{content:""}.ph.ph-grains:before{content:""}.ph.ph-grains-slash:before{content:""}.ph.ph-graph:before{content:""}.ph.ph-graphics-card:before{content:""}.ph.ph-greater-than:before{content:""}.ph.ph-greater-than-or-equal:before{content:""}.ph.ph-grid-four:before{content:""}.ph.ph-grid-nine:before{content:""}.ph.ph-guitar:before{content:""}.ph.ph-hair-dryer:before{content:""}.ph.ph-hamburger:before{content:""}.ph.ph-hammer:before{content:""}.ph.ph-hand:before{content:""}.ph.ph-hand-arrow-down:before{content:""}.ph.ph-hand-arrow-up:before{content:""}.ph.ph-hand-coins:before{content:""}.ph.ph-hand-deposit:before{content:""}.ph.ph-hand-eye:before{content:""}.ph.ph-hand-fist:before{content:""}.ph.ph-hand-grabbing:before{content:""}.ph.ph-hand-heart:before{content:""}.ph.ph-hand-palm:before{content:""}.ph.ph-hand-peace:before{content:""}.ph.ph-hand-pointing:before{content:""}.ph.ph-hand-soap:before{content:""}.ph.ph-hand-swipe-left:before{content:""}.ph.ph-hand-swipe-right:before{content:""}.ph.ph-hand-tap:before{content:""}.ph.ph-hand-waving:before{content:""}.ph.ph-hand-withdraw:before{content:""}.ph.ph-handbag:before{content:""}.ph.ph-handbag-simple:before{content:""}.ph.ph-hands-clapping:before{content:""}.ph.ph-hands-praying:before{content:""}.ph.ph-handshake:before{content:""}.ph.ph-hard-drive:before{content:""}.ph.ph-hard-drives:before{content:""}.ph.ph-hard-hat:before{content:""}.ph.ph-hash:before{content:""}.ph.ph-hash-straight:before{content:""}.ph.ph-head-circuit:before{content:""}.ph.ph-headlights:before{content:""}.ph.ph-headphones:before{content:""}.ph.ph-headset:before{content:""}.ph.ph-heart:before{content:""}.ph.ph-heart-break:before{content:""}.ph.ph-heart-half:before{content:""}.ph.ph-heart-straight:before{content:""}.ph.ph-heart-straight-break:before{content:""}.ph.ph-heartbeat:before{content:""}.ph.ph-hexagon:before{content:""}.ph.ph-high-definition:before{content:""}.ph.ph-high-heel:before{content:""}.ph.ph-highlighter:before{content:""}.ph.ph-highlighter-circle:before{content:""}.ph.ph-hockey:before{content:""}.ph.ph-hoodie:before{content:""}.ph.ph-horse:before{content:""}.ph.ph-hospital:before{content:""}.ph.ph-hourglass:before{content:""}.ph.ph-hourglass-high:before{content:""}.ph.ph-hourglass-low:before{content:""}.ph.ph-hourglass-medium:before{content:""}.ph.ph-hourglass-simple:before{content:""}.ph.ph-hourglass-simple-high:before{content:""}.ph.ph-hourglass-simple-low:before{content:""}.ph.ph-hourglass-simple-medium:before{content:""}.ph.ph-house:before{content:""}.ph.ph-house-line:before{content:""}.ph.ph-house-simple:before{content:""}.ph.ph-hurricane:before{content:""}.ph.ph-ice-cream:before{content:""}.ph.ph-identification-badge:before{content:""}.ph.ph-identification-card:before{content:""}.ph.ph-image:before{content:""}.ph.ph-image-broken:before{content:""}.ph.ph-image-square:before{content:""}.ph.ph-images:before{content:""}.ph.ph-images-square:before{content:""}.ph.ph-infinity:before{content:""}.ph.ph-lemniscate:before{content:""}.ph.ph-info:before{content:""}.ph.ph-instagram-logo:before{content:""}.ph.ph-intersect:before{content:""}.ph.ph-intersect-square:before{content:""}.ph.ph-intersect-three:before{content:""}.ph.ph-intersection:before{content:""}.ph.ph-invoice:before{content:""}.ph.ph-island:before{content:""}.ph.ph-jar:before{content:""}.ph.ph-jar-label:before{content:""}.ph.ph-jeep:before{content:""}.ph.ph-joystick:before{content:""}.ph.ph-kanban:before{content:""}.ph.ph-key:before{content:""}.ph.ph-key-return:before{content:""}.ph.ph-keyboard:before{content:""}.ph.ph-keyhole:before{content:""}.ph.ph-knife:before{content:""}.ph.ph-ladder:before{content:""}.ph.ph-ladder-simple:before{content:""}.ph.ph-lamp:before{content:""}.ph.ph-lamp-pendant:before{content:""}.ph.ph-laptop:before{content:""}.ph.ph-lasso:before{content:""}.ph.ph-lastfm-logo:before{content:""}.ph.ph-layout:before{content:""}.ph.ph-leaf:before{content:""}.ph.ph-lectern:before{content:""}.ph.ph-lego:before{content:""}.ph.ph-lego-smiley:before{content:""}.ph.ph-less-than:before{content:""}.ph.ph-less-than-or-equal:before{content:""}.ph.ph-letter-circle-h:before{content:""}.ph.ph-letter-circle-p:before{content:""}.ph.ph-letter-circle-v:before{content:""}.ph.ph-lifebuoy:before{content:""}.ph.ph-lightbulb:before{content:""}.ph.ph-lightbulb-filament:before{content:""}.ph.ph-lighthouse:before{content:""}.ph.ph-lightning:before{content:""}.ph.ph-lightning-a:before{content:""}.ph.ph-lightning-slash:before{content:""}.ph.ph-line-segment:before{content:""}.ph.ph-line-segments:before{content:""}.ph.ph-line-vertical:before{content:""}.ph.ph-link:before{content:""}.ph.ph-link-break:before{content:""}.ph.ph-link-simple:before{content:""}.ph.ph-link-simple-break:before{content:""}.ph.ph-link-simple-horizontal:before{content:""}.ph.ph-link-simple-horizontal-break:before{content:""}.ph.ph-linkedin-logo:before{content:""}.ph.ph-linktree-logo:before{content:""}.ph.ph-linux-logo:before{content:""}.ph.ph-list:before{content:""}.ph.ph-list-bullets:before{content:""}.ph.ph-list-checks:before{content:""}.ph.ph-list-dashes:before{content:""}.ph.ph-list-heart:before{content:""}.ph.ph-list-magnifying-glass:before{content:""}.ph.ph-list-numbers:before{content:""}.ph.ph-list-plus:before{content:""}.ph.ph-list-star:before{content:""}.ph.ph-lock:before{content:""}.ph.ph-lock-key:before{content:""}.ph.ph-lock-key-open:before{content:""}.ph.ph-lock-laminated:before{content:""}.ph.ph-lock-laminated-open:before{content:""}.ph.ph-lock-open:before{content:""}.ph.ph-lock-simple:before{content:""}.ph.ph-lock-simple-open:before{content:""}.ph.ph-lockers:before{content:""}.ph.ph-log:before{content:""}.ph.ph-magic-wand:before{content:""}.ph.ph-magnet:before{content:""}.ph.ph-magnet-straight:before{content:""}.ph.ph-magnifying-glass:before{content:""}.ph.ph-magnifying-glass-minus:before{content:""}.ph.ph-magnifying-glass-plus:before{content:""}.ph.ph-mailbox:before{content:""}.ph.ph-map-pin:before{content:""}.ph.ph-map-pin-area:before{content:""}.ph.ph-map-pin-line:before{content:""}.ph.ph-map-pin-plus:before{content:""}.ph.ph-map-pin-simple:before{content:""}.ph.ph-map-pin-simple-area:before{content:""}.ph.ph-map-pin-simple-line:before{content:""}.ph.ph-map-trifold:before{content:""}.ph.ph-markdown-logo:before{content:""}.ph.ph-marker-circle:before{content:""}.ph.ph-martini:before{content:""}.ph.ph-mask-happy:before{content:""}.ph.ph-mask-sad:before{content:""}.ph.ph-mastodon-logo:before{content:""}.ph.ph-math-operations:before{content:""}.ph.ph-matrix-logo:before{content:""}.ph.ph-medal:before{content:""}.ph.ph-medal-military:before{content:""}.ph.ph-medium-logo:before{content:""}.ph.ph-megaphone:before{content:""}.ph.ph-megaphone-simple:before{content:""}.ph.ph-member-of:before{content:""}.ph.ph-memory:before{content:""}.ph.ph-messenger-logo:before{content:""}.ph.ph-meta-logo:before{content:""}.ph.ph-meteor:before{content:""}.ph.ph-metronome:before{content:""}.ph.ph-microphone:before{content:""}.ph.ph-microphone-slash:before{content:""}.ph.ph-microphone-stage:before{content:""}.ph.ph-microscope:before{content:""}.ph.ph-microsoft-excel-logo:before{content:""}.ph.ph-microsoft-outlook-logo:before{content:""}.ph.ph-microsoft-powerpoint-logo:before{content:""}.ph.ph-microsoft-teams-logo:before{content:""}.ph.ph-microsoft-word-logo:before{content:""}.ph.ph-minus:before{content:""}.ph.ph-minus-circle:before{content:""}.ph.ph-minus-square:before{content:""}.ph.ph-money:before{content:""}.ph.ph-money-wavy:before{content:""}.ph.ph-monitor:before{content:""}.ph.ph-monitor-arrow-up:before{content:""}.ph.ph-monitor-play:before{content:""}.ph.ph-moon:before{content:""}.ph.ph-moon-stars:before{content:""}.ph.ph-moped:before{content:""}.ph.ph-moped-front:before{content:""}.ph.ph-mosque:before{content:""}.ph.ph-motorcycle:before{content:""}.ph.ph-mountains:before{content:""}.ph.ph-mouse:before{content:""}.ph.ph-mouse-left-click:before{content:""}.ph.ph-mouse-middle-click:before{content:""}.ph.ph-mouse-right-click:before{content:""}.ph.ph-mouse-scroll:before{content:""}.ph.ph-mouse-simple:before{content:""}.ph.ph-music-note:before{content:""}.ph.ph-music-note-simple:before{content:""}.ph.ph-music-notes:before{content:""}.ph.ph-music-notes-minus:before{content:""}.ph.ph-music-notes-plus:before{content:""}.ph.ph-music-notes-simple:before{content:""}.ph.ph-navigation-arrow:before{content:""}.ph.ph-needle:before{content:""}.ph.ph-network:before{content:""}.ph.ph-network-slash:before{content:""}.ph.ph-network-x:before{content:""}.ph.ph-newspaper:before{content:""}.ph.ph-newspaper-clipping:before{content:""}.ph.ph-not-equals:before{content:""}.ph.ph-not-member-of:before{content:""}.ph.ph-not-subset-of:before{content:""}.ph.ph-not-superset-of:before{content:""}.ph.ph-notches:before{content:""}.ph.ph-note:before{content:""}.ph.ph-note-blank:before{content:""}.ph.ph-note-pencil:before{content:""}.ph.ph-notebook:before{content:""}.ph.ph-notepad:before{content:""}.ph.ph-notification:before{content:""}.ph.ph-notion-logo:before{content:""}.ph.ph-nuclear-plant:before{content:""}.ph.ph-number-circle-eight:before{content:""}.ph.ph-number-circle-five:before{content:""}.ph.ph-number-circle-four:before{content:""}.ph.ph-number-circle-nine:before{content:""}.ph.ph-number-circle-one:before{content:""}.ph.ph-number-circle-seven:before{content:""}.ph.ph-number-circle-six:before{content:""}.ph.ph-number-circle-three:before{content:""}.ph.ph-number-circle-two:before{content:""}.ph.ph-number-circle-zero:before{content:""}.ph.ph-number-eight:before{content:""}.ph.ph-number-five:before{content:""}.ph.ph-number-four:before{content:""}.ph.ph-number-nine:before{content:""}.ph.ph-number-one:before{content:""}.ph.ph-number-seven:before{content:""}.ph.ph-number-six:before{content:""}.ph.ph-number-square-eight:before{content:""}.ph.ph-number-square-five:before{content:""}.ph.ph-number-square-four:before{content:""}.ph.ph-number-square-nine:before{content:""}.ph.ph-number-square-one:before{content:""}.ph.ph-number-square-seven:before{content:""}.ph.ph-number-square-six:before{content:""}.ph.ph-number-square-three:before{content:""}.ph.ph-number-square-two:before{content:""}.ph.ph-number-square-zero:before{content:""}.ph.ph-number-three:before{content:""}.ph.ph-number-two:before{content:""}.ph.ph-number-zero:before{content:""}.ph.ph-numpad:before{content:""}.ph.ph-nut:before{content:""}.ph.ph-ny-times-logo:before{content:""}.ph.ph-octagon:before{content:""}.ph.ph-office-chair:before{content:""}.ph.ph-onigiri:before{content:""}.ph.ph-open-ai-logo:before{content:""}.ph.ph-option:before{content:""}.ph.ph-orange:before{content:""}.ph.ph-orange-slice:before{content:""}.ph.ph-oven:before{content:""}.ph.ph-package:before{content:""}.ph.ph-paint-brush:before{content:""}.ph.ph-paint-brush-broad:before{content:""}.ph.ph-paint-brush-household:before{content:""}.ph.ph-paint-bucket:before{content:""}.ph.ph-paint-roller:before{content:""}.ph.ph-palette:before{content:""}.ph.ph-panorama:before{content:""}.ph.ph-pants:before{content:""}.ph.ph-paper-plane:before{content:""}.ph.ph-paper-plane-right:before{content:""}.ph.ph-paper-plane-tilt:before{content:""}.ph.ph-paperclip:before{content:""}.ph.ph-paperclip-horizontal:before{content:""}.ph.ph-parachute:before{content:""}.ph.ph-paragraph:before{content:""}.ph.ph-parallelogram:before{content:""}.ph.ph-park:before{content:""}.ph.ph-password:before{content:""}.ph.ph-path:before{content:""}.ph.ph-patreon-logo:before{content:""}.ph.ph-pause:before{content:""}.ph.ph-pause-circle:before{content:""}.ph.ph-paw-print:before{content:""}.ph.ph-paypal-logo:before{content:""}.ph.ph-peace:before{content:""}.ph.ph-pen:before{content:""}.ph.ph-pen-nib:before{content:""}.ph.ph-pen-nib-straight:before{content:""}.ph.ph-pencil:before{content:""}.ph.ph-pencil-circle:before{content:""}.ph.ph-pencil-line:before{content:""}.ph.ph-pencil-ruler:before{content:""}.ph.ph-pencil-simple:before{content:""}.ph.ph-pencil-simple-line:before{content:""}.ph.ph-pencil-simple-slash:before{content:""}.ph.ph-pencil-slash:before{content:""}.ph.ph-pentagon:before{content:""}.ph.ph-pentagram:before{content:""}.ph.ph-pepper:before{content:""}.ph.ph-percent:before{content:""}.ph.ph-person:before{content:""}.ph.ph-person-arms-spread:before{content:""}.ph.ph-person-simple:before{content:""}.ph.ph-person-simple-bike:before{content:""}.ph.ph-person-simple-circle:before{content:""}.ph.ph-person-simple-hike:before{content:""}.ph.ph-person-simple-run:before{content:""}.ph.ph-person-simple-ski:before{content:""}.ph.ph-person-simple-snowboard:before{content:""}.ph.ph-person-simple-swim:before{content:""}.ph.ph-person-simple-tai-chi:before{content:""}.ph.ph-person-simple-throw:before{content:""}.ph.ph-person-simple-walk:before{content:""}.ph.ph-perspective:before{content:""}.ph.ph-phone:before{content:""}.ph.ph-phone-call:before{content:""}.ph.ph-phone-disconnect:before{content:""}.ph.ph-phone-incoming:before{content:""}.ph.ph-phone-list:before{content:""}.ph.ph-phone-outgoing:before{content:""}.ph.ph-phone-pause:before{content:""}.ph.ph-phone-plus:before{content:""}.ph.ph-phone-slash:before{content:""}.ph.ph-phone-transfer:before{content:""}.ph.ph-phone-x:before{content:""}.ph.ph-phosphor-logo:before{content:""}.ph.ph-pi:before{content:""}.ph.ph-piano-keys:before{content:""}.ph.ph-picnic-table:before{content:""}.ph.ph-picture-in-picture:before{content:""}.ph.ph-piggy-bank:before{content:""}.ph.ph-pill:before{content:""}.ph.ph-ping-pong:before{content:""}.ph.ph-pint-glass:before{content:""}.ph.ph-pinterest-logo:before{content:""}.ph.ph-pinwheel:before{content:""}.ph.ph-pipe:before{content:""}.ph.ph-pipe-wrench:before{content:""}.ph.ph-pix-logo:before{content:""}.ph.ph-pizza:before{content:""}.ph.ph-placeholder:before{content:""}.ph.ph-planet:before{content:""}.ph.ph-plant:before{content:""}.ph.ph-play:before{content:""}.ph.ph-play-circle:before{content:""}.ph.ph-play-pause:before{content:""}.ph.ph-playlist:before{content:""}.ph.ph-plug:before{content:""}.ph.ph-plug-charging:before{content:""}.ph.ph-plugs:before{content:""}.ph.ph-plugs-connected:before{content:""}.ph.ph-plus:before{content:""}.ph.ph-plus-circle:before{content:""}.ph.ph-plus-minus:before{content:""}.ph.ph-plus-square:before{content:""}.ph.ph-poker-chip:before{content:""}.ph.ph-police-car:before{content:""}.ph.ph-polygon:before{content:""}.ph.ph-popcorn:before{content:""}.ph.ph-popsicle:before{content:""}.ph.ph-potted-plant:before{content:""}.ph.ph-power:before{content:""}.ph.ph-prescription:before{content:""}.ph.ph-presentation:before{content:""}.ph.ph-presentation-chart:before{content:""}.ph.ph-printer:before{content:""}.ph.ph-prohibit:before{content:""}.ph.ph-prohibit-inset:before{content:""}.ph.ph-projector-screen:before{content:""}.ph.ph-projector-screen-chart:before{content:""}.ph.ph-pulse:before{content:""}.ph.ph-activity:before{content:""}.ph.ph-push-pin:before{content:""}.ph.ph-push-pin-simple:before{content:""}.ph.ph-push-pin-simple-slash:before{content:""}.ph.ph-push-pin-slash:before{content:""}.ph.ph-puzzle-piece:before{content:""}.ph.ph-qr-code:before{content:""}.ph.ph-question:before{content:""}.ph.ph-question-mark:before{content:""}.ph.ph-queue:before{content:""}.ph.ph-quotes:before{content:""}.ph.ph-rabbit:before{content:""}.ph.ph-racquet:before{content:""}.ph.ph-radical:before{content:""}.ph.ph-radio:before{content:""}.ph.ph-radio-button:before{content:""}.ph.ph-radioactive:before{content:""}.ph.ph-rainbow:before{content:""}.ph.ph-rainbow-cloud:before{content:""}.ph.ph-ranking:before{content:""}.ph.ph-read-cv-logo:before{content:""}.ph.ph-receipt:before{content:""}.ph.ph-receipt-x:before{content:""}.ph.ph-record:before{content:""}.ph.ph-rectangle:before{content:""}.ph.ph-rectangle-dashed:before{content:""}.ph.ph-recycle:before{content:""}.ph.ph-reddit-logo:before{content:""}.ph.ph-repeat:before{content:""}.ph.ph-repeat-once:before{content:""}.ph.ph-replit-logo:before{content:""}.ph.ph-resize:before{content:""}.ph.ph-rewind:before{content:""}.ph.ph-rewind-circle:before{content:""}.ph.ph-road-horizon:before{content:""}.ph.ph-robot:before{content:""}.ph.ph-rocket:before{content:""}.ph.ph-rocket-launch:before{content:""}.ph.ph-rows:before{content:""}.ph.ph-rows-plus-bottom:before{content:""}.ph.ph-rows-plus-top:before{content:""}.ph.ph-rss:before{content:""}.ph.ph-rss-simple:before{content:""}.ph.ph-rug:before{content:""}.ph.ph-ruler:before{content:""}.ph.ph-sailboat:before{content:""}.ph.ph-scales:before{content:""}.ph.ph-scan:before{content:""}.ph.ph-scan-smiley:before{content:""}.ph.ph-scissors:before{content:""}.ph.ph-scooter:before{content:""}.ph.ph-screencast:before{content:""}.ph.ph-screwdriver:before{content:""}.ph.ph-scribble:before{content:""}.ph.ph-scribble-loop:before{content:""}.ph.ph-scroll:before{content:""}.ph.ph-seal:before{content:""}.ph.ph-circle-wavy:before{content:""}.ph.ph-seal-check:before{content:""}.ph.ph-circle-wavy-check:before{content:""}.ph.ph-seal-percent:before{content:""}.ph.ph-seal-question:before{content:""}.ph.ph-circle-wavy-question:before{content:""}.ph.ph-seal-warning:before{content:""}.ph.ph-circle-wavy-warning:before{content:""}.ph.ph-seat:before{content:""}.ph.ph-seatbelt:before{content:""}.ph.ph-security-camera:before{content:""}.ph.ph-selection:before{content:""}.ph.ph-selection-all:before{content:""}.ph.ph-selection-background:before{content:""}.ph.ph-selection-foreground:before{content:""}.ph.ph-selection-inverse:before{content:""}.ph.ph-selection-plus:before{content:""}.ph.ph-selection-slash:before{content:""}.ph.ph-shapes:before{content:""}.ph.ph-share:before{content:""}.ph.ph-share-fat:before{content:""}.ph.ph-share-network:before{content:""}.ph.ph-shield:before{content:""}.ph.ph-shield-check:before{content:""}.ph.ph-shield-checkered:before{content:""}.ph.ph-shield-chevron:before{content:""}.ph.ph-shield-plus:before{content:""}.ph.ph-shield-slash:before{content:""}.ph.ph-shield-star:before{content:""}.ph.ph-shield-warning:before{content:""}.ph.ph-shipping-container:before{content:""}.ph.ph-shirt-folded:before{content:""}.ph.ph-shooting-star:before{content:""}.ph.ph-shopping-bag:before{content:""}.ph.ph-shopping-bag-open:before{content:""}.ph.ph-shopping-cart:before{content:""}.ph.ph-shopping-cart-simple:before{content:""}.ph.ph-shovel:before{content:""}.ph.ph-shower:before{content:""}.ph.ph-shrimp:before{content:""}.ph.ph-shuffle:before{content:""}.ph.ph-shuffle-angular:before{content:""}.ph.ph-shuffle-simple:before{content:""}.ph.ph-sidebar:before{content:""}.ph.ph-sidebar-simple:before{content:""}.ph.ph-sigma:before{content:""}.ph.ph-sign-in:before{content:""}.ph.ph-sign-out:before{content:""}.ph.ph-signature:before{content:""}.ph.ph-signpost:before{content:""}.ph.ph-sim-card:before{content:""}.ph.ph-siren:before{content:""}.ph.ph-sketch-logo:before{content:""}.ph.ph-skip-back:before{content:""}.ph.ph-skip-back-circle:before{content:""}.ph.ph-skip-forward:before{content:""}.ph.ph-skip-forward-circle:before{content:""}.ph.ph-skull:before{content:""}.ph.ph-skype-logo:before{content:""}.ph.ph-slack-logo:before{content:""}.ph.ph-sliders:before{content:""}.ph.ph-sliders-horizontal:before{content:""}.ph.ph-slideshow:before{content:""}.ph.ph-smiley:before{content:""}.ph.ph-smiley-angry:before{content:""}.ph.ph-smiley-blank:before{content:""}.ph.ph-smiley-meh:before{content:""}.ph.ph-smiley-melting:before{content:""}.ph.ph-smiley-nervous:before{content:""}.ph.ph-smiley-sad:before{content:""}.ph.ph-smiley-sticker:before{content:""}.ph.ph-smiley-wink:before{content:""}.ph.ph-smiley-x-eyes:before{content:""}.ph.ph-snapchat-logo:before{content:""}.ph.ph-sneaker:before{content:""}.ph.ph-sneaker-move:before{content:""}.ph.ph-snowflake:before{content:""}.ph.ph-soccer-ball:before{content:""}.ph.ph-sock:before{content:""}.ph.ph-solar-panel:before{content:""}.ph.ph-solar-roof:before{content:""}.ph.ph-sort-ascending:before{content:""}.ph.ph-sort-descending:before{content:""}.ph.ph-soundcloud-logo:before{content:""}.ph.ph-spade:before{content:""}.ph.ph-sparkle:before{content:""}.ph.ph-speaker-hifi:before{content:""}.ph.ph-speaker-high:before{content:""}.ph.ph-speaker-low:before{content:""}.ph.ph-speaker-none:before{content:""}.ph.ph-speaker-simple-high:before{content:""}.ph.ph-speaker-simple-low:before{content:""}.ph.ph-speaker-simple-none:before{content:""}.ph.ph-speaker-simple-slash:before{content:""}.ph.ph-speaker-simple-x:before{content:""}.ph.ph-speaker-slash:before{content:""}.ph.ph-speaker-x:before{content:""}.ph.ph-speedometer:before{content:""}.ph.ph-sphere:before{content:""}.ph.ph-spinner:before{content:""}.ph.ph-spinner-ball:before{content:""}.ph.ph-spinner-gap:before{content:""}.ph.ph-spiral:before{content:""}.ph.ph-split-horizontal:before{content:""}.ph.ph-split-vertical:before{content:""}.ph.ph-spotify-logo:before{content:""}.ph.ph-spray-bottle:before{content:""}.ph.ph-square:before{content:""}.ph.ph-square-half:before{content:""}.ph.ph-square-half-bottom:before{content:""}.ph.ph-square-logo:before{content:""}.ph.ph-square-split-horizontal:before{content:""}.ph.ph-square-split-vertical:before{content:""}.ph.ph-squares-four:before{content:""}.ph.ph-stack:before{content:""}.ph.ph-stack-minus:before{content:""}.ph.ph-stack-overflow-logo:before{content:""}.ph.ph-stack-plus:before{content:""}.ph.ph-stack-simple:before{content:""}.ph.ph-stairs:before{content:""}.ph.ph-stamp:before{content:""}.ph.ph-standard-definition:before{content:""}.ph.ph-star:before{content:""}.ph.ph-star-and-crescent:before{content:""}.ph.ph-star-four:before{content:""}.ph.ph-star-half:before{content:""}.ph.ph-star-of-david:before{content:""}.ph.ph-steam-logo:before{content:""}.ph.ph-steering-wheel:before{content:""}.ph.ph-steps:before{content:""}.ph.ph-stethoscope:before{content:""}.ph.ph-sticker:before{content:""}.ph.ph-stool:before{content:""}.ph.ph-stop:before{content:""}.ph.ph-stop-circle:before{content:""}.ph.ph-storefront:before{content:""}.ph.ph-strategy:before{content:""}.ph.ph-stripe-logo:before{content:""}.ph.ph-student:before{content:""}.ph.ph-subset-of:before{content:""}.ph.ph-subset-proper-of:before{content:""}.ph.ph-subtitles:before{content:""}.ph.ph-subtitles-slash:before{content:""}.ph.ph-subtract:before{content:""}.ph.ph-subtract-square:before{content:""}.ph.ph-subway:before{content:""}.ph.ph-suitcase:before{content:""}.ph.ph-suitcase-rolling:before{content:""}.ph.ph-suitcase-simple:before{content:""}.ph.ph-sun:before{content:""}.ph.ph-sun-dim:before{content:""}.ph.ph-sun-horizon:before{content:""}.ph.ph-sunglasses:before{content:""}.ph.ph-superset-of:before{content:""}.ph.ph-superset-proper-of:before{content:""}.ph.ph-swap:before{content:""}.ph.ph-swatches:before{content:""}.ph.ph-swimming-pool:before{content:""}.ph.ph-sword:before{content:""}.ph.ph-synagogue:before{content:""}.ph.ph-syringe:before{content:""}.ph.ph-t-shirt:before{content:""}.ph.ph-table:before{content:""}.ph.ph-tabs:before{content:""}.ph.ph-tag:before{content:""}.ph.ph-tag-chevron:before{content:""}.ph.ph-tag-simple:before{content:""}.ph.ph-target:before{content:""}.ph.ph-taxi:before{content:""}.ph.ph-tea-bag:before{content:""}.ph.ph-telegram-logo:before{content:""}.ph.ph-television:before{content:""}.ph.ph-television-simple:before{content:""}.ph.ph-tennis-ball:before{content:""}.ph.ph-tent:before{content:""}.ph.ph-terminal:before{content:""}.ph.ph-terminal-window:before{content:""}.ph.ph-test-tube:before{content:""}.ph.ph-text-a-underline:before{content:""}.ph.ph-text-aa:before{content:""}.ph.ph-text-align-center:before{content:""}.ph.ph-text-align-justify:before{content:""}.ph.ph-text-align-left:before{content:""}.ph.ph-text-align-right:before{content:""}.ph.ph-text-b:before{content:""}.ph.ph-text-bolder:before{content:""}.ph.ph-text-columns:before{content:""}.ph.ph-text-h:before{content:""}.ph.ph-text-h-five:before{content:""}.ph.ph-text-h-four:before{content:""}.ph.ph-text-h-one:before{content:""}.ph.ph-text-h-six:before{content:""}.ph.ph-text-h-three:before{content:""}.ph.ph-text-h-two:before{content:""}.ph.ph-text-indent:before{content:""}.ph.ph-text-italic:before{content:""}.ph.ph-text-outdent:before{content:""}.ph.ph-text-strikethrough:before{content:""}.ph.ph-text-subscript:before{content:""}.ph.ph-text-superscript:before{content:""}.ph.ph-text-t:before{content:""}.ph.ph-text-t-slash:before{content:""}.ph.ph-text-underline:before{content:""}.ph.ph-textbox:before{content:""}.ph.ph-thermometer:before{content:""}.ph.ph-thermometer-cold:before{content:""}.ph.ph-thermometer-hot:before{content:""}.ph.ph-thermometer-simple:before{content:""}.ph.ph-threads-logo:before{content:""}.ph.ph-three-d:before{content:""}.ph.ph-thumbs-down:before{content:""}.ph.ph-thumbs-up:before{content:""}.ph.ph-ticket:before{content:""}.ph.ph-tidal-logo:before{content:""}.ph.ph-tiktok-logo:before{content:""}.ph.ph-tilde:before{content:""}.ph.ph-timer:before{content:""}.ph.ph-tip-jar:before{content:""}.ph.ph-tipi:before{content:""}.ph.ph-tire:before{content:""}.ph.ph-toggle-left:before{content:""}.ph.ph-toggle-right:before{content:""}.ph.ph-toilet:before{content:""}.ph.ph-toilet-paper:before{content:""}.ph.ph-toolbox:before{content:""}.ph.ph-tooth:before{content:""}.ph.ph-tornado:before{content:""}.ph.ph-tote:before{content:""}.ph.ph-tote-simple:before{content:""}.ph.ph-towel:before{content:""}.ph.ph-tractor:before{content:""}.ph.ph-trademark:before{content:""}.ph.ph-trademark-registered:before{content:""}.ph.ph-traffic-cone:before{content:""}.ph.ph-traffic-sign:before{content:""}.ph.ph-traffic-signal:before{content:""}.ph.ph-train:before{content:""}.ph.ph-train-regional:before{content:""}.ph.ph-train-simple:before{content:""}.ph.ph-tram:before{content:""}.ph.ph-translate:before{content:""}.ph.ph-trash:before{content:""}.ph.ph-trash-simple:before{content:""}.ph.ph-tray:before{content:""}.ph.ph-tray-arrow-down:before{content:""}.ph.ph-archive-tray:before{content:""}.ph.ph-tray-arrow-up:before{content:""}.ph.ph-treasure-chest:before{content:""}.ph.ph-tree:before{content:""}.ph.ph-tree-evergreen:before{content:""}.ph.ph-tree-palm:before{content:""}.ph.ph-tree-structure:before{content:""}.ph.ph-tree-view:before{content:""}.ph.ph-trend-down:before{content:""}.ph.ph-trend-up:before{content:""}.ph.ph-triangle:before{content:""}.ph.ph-triangle-dashed:before{content:""}.ph.ph-trolley:before{content:""}.ph.ph-trolley-suitcase:before{content:""}.ph.ph-trophy:before{content:""}.ph.ph-truck:before{content:""}.ph.ph-truck-trailer:before{content:""}.ph.ph-tumblr-logo:before{content:""}.ph.ph-twitch-logo:before{content:""}.ph.ph-twitter-logo:before{content:""}.ph.ph-umbrella:before{content:""}.ph.ph-umbrella-simple:before{content:""}.ph.ph-union:before{content:""}.ph.ph-unite:before{content:""}.ph.ph-unite-square:before{content:""}.ph.ph-upload:before{content:""}.ph.ph-upload-simple:before{content:""}.ph.ph-usb:before{content:""}.ph.ph-user:before{content:""}.ph.ph-user-check:before{content:""}.ph.ph-user-circle:before{content:""}.ph.ph-user-circle-check:before{content:""}.ph.ph-user-circle-dashed:before{content:""}.ph.ph-user-circle-gear:before{content:""}.ph.ph-user-circle-minus:before{content:""}.ph.ph-user-circle-plus:before{content:""}.ph.ph-user-focus:before{content:""}.ph.ph-user-gear:before{content:""}.ph.ph-user-list:before{content:""}.ph.ph-user-minus:before{content:""}.ph.ph-user-plus:before{content:""}.ph.ph-user-rectangle:before{content:""}.ph.ph-user-sound:before{content:""}.ph.ph-user-square:before{content:""}.ph.ph-user-switch:before{content:""}.ph.ph-users:before{content:""}.ph.ph-users-four:before{content:""}.ph.ph-users-three:before{content:""}.ph.ph-van:before{content:""}.ph.ph-vault:before{content:""}.ph.ph-vector-three:before{content:""}.ph.ph-vector-two:before{content:""}.ph.ph-vibrate:before{content:""}.ph.ph-video:before{content:""}.ph.ph-video-camera:before{content:""}.ph.ph-video-camera-slash:before{content:""}.ph.ph-video-conference:before{content:""}.ph.ph-vignette:before{content:""}.ph.ph-vinyl-record:before{content:""}.ph.ph-virtual-reality:before{content:""}.ph.ph-virus:before{content:""}.ph.ph-visor:before{content:""}.ph.ph-voicemail:before{content:""}.ph.ph-volleyball:before{content:""}.ph.ph-wall:before{content:""}.ph.ph-wallet:before{content:""}.ph.ph-warehouse:before{content:""}.ph.ph-warning:before{content:""}.ph.ph-warning-circle:before{content:""}.ph.ph-warning-diamond:before{content:""}.ph.ph-warning-octagon:before{content:""}.ph.ph-washing-machine:before{content:""}.ph.ph-watch:before{content:""}.ph.ph-wave-sawtooth:before{content:""}.ph.ph-wave-sine:before{content:""}.ph.ph-wave-square:before{content:""}.ph.ph-wave-triangle:before{content:""}.ph.ph-waveform:before{content:""}.ph.ph-waveform-slash:before{content:""}.ph.ph-waves:before{content:""}.ph.ph-webcam:before{content:""}.ph.ph-webcam-slash:before{content:""}.ph.ph-webhooks-logo:before{content:""}.ph.ph-wechat-logo:before{content:""}.ph.ph-whatsapp-logo:before{content:""}.ph.ph-wheelchair:before{content:""}.ph.ph-wheelchair-motion:before{content:""}.ph.ph-wifi-high:before{content:""}.ph.ph-wifi-low:before{content:""}.ph.ph-wifi-medium:before{content:""}.ph.ph-wifi-none:before{content:""}.ph.ph-wifi-slash:before{content:""}.ph.ph-wifi-x:before{content:""}.ph.ph-wind:before{content:""}.ph.ph-windmill:before{content:""}.ph.ph-windows-logo:before{content:""}.ph.ph-wine:before{content:""}.ph.ph-wrench:before{content:""}.ph.ph-x:before{content:""}.ph.ph-x-circle:before{content:""}.ph.ph-x-logo:before{content:""}.ph.ph-x-square:before{content:""}.ph.ph-yarn:before{content:""}.ph.ph-yin-yang:before{content:""}.ph.ph-youtube-logo:before{content:""}.container{padding:18px}.section{margin-bottom:48px}.section-title,.block{margin-bottom:34px}.block-title{margin-bottom:22px}p,.text{margin-bottom:15px}.hint{margin-top:8px}.list{padding-left:22px;margin-bottom:15px}.list-item{margin-bottom:8px}.list-nested{margin-top:8px}.table{margin-bottom:22px}.table-caption{margin-bottom:8px}.form-group{margin-bottom:15px}.label{margin-bottom:5px;display:block}.input,.textarea,.select{margin-top:5px}.toast{padding:15px}.toast-stack{gap:8px}*{scrollbar-width:thin;scrollbar-color:#414868 transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{width:8px;background:#414868;border-radius:9999px;cursor:default}*::-webkit-scrollbar-thumb:hover{background:#787c99}*::-webkit-scrollbar-corner{background:transparent}*::-webkit-scrollbar-button{display:none}.chat-header,.context-bar,.profile-badge,.msg-meta-row,.recall-banner,.app-sidebar,.input-bar,.tabs-list{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.chat-header input,.chat-header textarea,.context-bar input,.context-bar textarea,.profile-badge input,.profile-badge textarea,.msg-meta-row input,.msg-meta-row textarea,.recall-banner input,.recall-banner textarea,.app-sidebar input,.app-sidebar textarea,.input-bar input,.input-bar textarea,.tabs-list input,.tabs-list textarea{-webkit-user-select:auto;user-select:auto;-webkit-touch-callout:default}@media(max-width:767px){textarea,input:not([type=checkbox]):not([type=radio]):not([type=range]){font-size:16px!important}}html,body{height:100%;overflow:hidden;overscroll-behavior:none}#app{display:flex;height:100%;overflow:hidden}.app-main{flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:#16161e}.app-sidebar{width:380px;min-width:380px;max-width:380px;display:flex;flex-direction:column;background:#1f2335;border-right:2px solid rgba(192,202,245,.24);overflow:hidden;flex-shrink:0;transition:width .22s ease,min-width .22s ease,max-width .22s ease,border-color .22s ease,transform .28s ease}.app-sidebar.is-hidden-by-artifacts{width:0;min-width:0;max-width:0;border-right-color:transparent}@media(max-width:1279.98px){.app-sidebar{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:min(380px,92vw)!important;min-width:min(380px,92vw)!important;transform:translate(-100%);transition:transform .28s ease}.app-sidebar.is-mobile-open{transform:translate(0)}.app-sidebar.is-hidden-by-artifacts{width:min(380px,92vw)!important;min-width:min(380px,92vw)!important;max-width:min(380px,92vw)!important;border-right-color:#c0caf53d}}@media(max-width:980px){.app-sidebar,.app-sidebar.is-hidden-by-artifacts{width:100vw!important;min-width:100vw!important;max-width:100vw!important}}.sidebar-header{padding:15px;border-bottom:2px solid rgba(192,202,245,.24);display:flex;flex-direction:column;gap:8px}.sidebar-logo-row{display:flex;align-items:center;gap:8px}.sidebar-logo{display:flex;align-items:center;gap:8px;text-decoration:none;flex:1;min-width:0}.sidebar-logo img{width:42px;height:42px}.sidebar-logo span{font-size:16px;font-weight:700;color:#c0caf5}.sidebar-sessions{flex:1;overflow:hidden;display:flex;flex-direction:column}.sessions-header{display:flex;align-items:center;justify-content:space-between;padding:8px 15px;gap:8px}.sessions-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#787c99}.sessions-refresh-btn{font-size:14px;color:#787c99;transition:color .15s,transform .15s}.sessions-refresh-btn:hover{color:#c0caf5}.sessions-refresh-btn.is-spinning i{animation:spin .8s linear infinite}.session-item{display:flex;align-items:flex-start;gap:8px;padding:8px 15px;cursor:pointer;border-radius:0;transition:background .15s ease;position:relative}.session-item:hover{background:#1f2335}.session-item:hover .session-actions{opacity:1}@media(hover:none){.session-item .session-actions{opacity:1}}.session-item.is-active{background:#c0caf516;border-left:6px solid #7AA2F7;padding-left:9px}.session-item.is-pinned{background:#e0af6812}.session-item.is-pinned .session-name{color:#e0af68}.session-item.has-recall .session-actions{opacity:1}.session-item.is-special{opacity:.72}.session-item.is-special:hover{opacity:1}.session-item.is-special .session-name{font-weight:400}.session-icons{display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0;margin-top:2px;width:14px}.session-icons .session-pin-icon,.session-icons .session-recall-icon,.session-icons .session-special-icon{color:#787c99;font-size:14px;opacity:0;transition:opacity .15s ease}.session-icons .session-pin-icon{color:#e0af68}.session-icons .session-recall-icon,.session-icons .session-special-icon{color:var(--gn-color-secondary)}.is-pinned .session-icons .session-pin-icon,.has-recall .session-icons .session-recall-icon,.is-special .session-icons .session-special-icon{opacity:1}.session-info{flex:1;overflow:hidden}.session-name{font-size:13px;color:#c0caf5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}.session-time{font-size:11px;color:#787c99;line-height:1.4;margin-top:2px}.session-preview{font-size:12px;color:#c0caf5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;margin-top:3px}.session-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s ease;flex-shrink:0;align-self:flex-start;margin-top:1px}.session-actions .btn-icon{width:26px;height:26px;font-size:14px}.chat-area{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:#16161e}.chat-header{display:flex;align-items:center;gap:8px;padding:8px 15px;border-bottom:2px solid rgba(192,202,245,.24);background:#1f2335;flex-shrink:0;min-height:54px}.chat-header-info{flex:1;display:flex;align-items:center;gap:8px;overflow:hidden;min-width:0}@media(max-width:768px){.chat-header-info{flex-direction:column;align-items:flex-start;gap:2px}}.chat-header-title{font-size:14px;font-weight:600;color:#c0caf5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0;cursor:text}.chat-header-rename{flex:1;min-width:0;height:32px;padding:0 10px;font-size:14px;font-weight:600;font-family:inherit;color:#c0caf5;background:#c0caf516;border:1px solid #7AA2F7;border-radius:3px;outline:none}.profile-badge{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;white-space:nowrap}.btn-sidebar-toggle{display:none}@media(max-width:1279.98px){.btn-sidebar-toggle{display:flex}}.context-bar{display:flex;align-items:center;flex-shrink:0;cursor:default}.msg-user{display:flex;justify-content:flex-end;gap:8px}.msg-user-bubble{background:#7aa2f7;color:#16161e;padding:8px 15px;border-radius:6px;font-size:14px;line-height:1.6;word-wrap:break-word;width:100%}.msg-user-bubble .msg-user-quote{margin:0 0 5px;padding:2px 0 2px 8px;border-left:3px solid rgba(22,22,30,.35);opacity:.7;font-size:13px}.msg-user--recall .msg-user-bubble{background:color-mix(in srgb,var(--gn-color-secondary) 12%,transparent);border:1px solid color-mix(in srgb,var(--gn-color-secondary) 25%,transparent)}.msg-user--recall .msg-user-bubble .msg-user-text{color:#c0caf5}.msg-recall-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--gn-color-secondary);margin-bottom:4px;opacity:.85}.msg-user--queued .msg-user-bubble{opacity:.75}.msg-queued-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:500;color:#414868;margin-bottom:4px}.msg-failed-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#f7768e;margin-bottom:4px}.msg-user-attachments{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}.msg-user-image{width:80px;height:80px;object-fit:cover;border-radius:6px;cursor:pointer;transition:opacity .15s}.msg-user-image:hover{opacity:.75}.msg-user-file-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;background:#16161e4d;border-radius:999px;font-size:12px}.msg-time{font-size:11px;color:#787c99;line-height:1;margin-top:4px}.msg-meta-row{display:flex;align-items:center;gap:8px;margin-top:2px;min-width:0}.msg-meta-item{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#787c99;white-space:nowrap}.msg-meta-item i{font-size:12px;opacity:.7}.msg-user-wrap{display:flex;flex-direction:column;align-items:flex-end;max-width:70%}@media(max-width:768px){.msg-user-wrap{max-width:90%}}.msg-user-footer{display:flex;align-items:center;gap:5px;align-self:flex-end}.msg-copy-btn{width:22px;height:22px;min-width:22px;padding:0;font-size:12px;opacity:.5;transition:opacity .15s}.msg-copy-btn:hover{opacity:1}.msg-meta-row>.msg-copy-btn{margin-left:auto}.msg-meta-row .msg-rate-btn{width:22px;height:22px;min-width:22px;padding:0;font-size:13px}.msg-assistant{display:flex;flex-direction:column;gap:8px;max-width:100%}.planning-indicator{display:flex;align-items:center;gap:8px;font-size:13px;font-style:italic;color:#787c99;padding:5px 0}.planning-indicator.is-executing{color:#a9b1d6;font-style:normal}.planning-label{opacity:.75;transition:opacity .2s}.msg-assistant-avatar{width:28px;height:28px;border-radius:50%;flex-shrink:0}.msg-assistant-content{font-size:14px;line-height:1.7;color:#c0caf5;display:flex;flex-wrap:wrap;gap:8px}.msg-assistant-content>p,.msg-assistant-content>ul,.msg-assistant-content>ol,.msg-assistant-content>blockquote,.msg-assistant-content>pre,.msg-assistant-content>.table-wrap,.msg-assistant-content>.code-block,.msg-assistant-content>h1,.msg-assistant-content>h2,.msg-assistant-content>h3,.msg-assistant-content>h4,.msg-assistant-content>hr{flex:1 1 100%;margin:0}.msg-assistant-content>p:has(>.msg-md-image-link:only-child){flex:0 0 calc((100% - 16px) / 3)}.msg-assistant-content h1,.msg-assistant-content h2,.msg-assistant-content h3,.msg-assistant-content h4{color:#c0caf5}.msg-assistant-content ul,.msg-assistant-content ol{padding-left:22px}.msg-assistant-content li{margin-bottom:8px}.msg-assistant-content blockquote{padding-left:15px;border-left:6px solid #7AA2F7;color:#a9b1d6}.msg-assistant-content a{color:#7aa2f7}.msg-assistant-content strong{color:#c0caf5}.msg-assistant-content hr{border:none;border-top:1px solid rgba(192,202,245,.24)}.msg-assistant-content .msg-md-image-link{display:block;width:100%;text-decoration:none;border:2px solid rgba(192,202,245,.12);border-radius:3px;overflow:hidden;transition:border-color .2s ease;cursor:zoom-in}.msg-assistant-content .msg-md-image-link:hover{border-color:#7aa2f7}.msg-assistant-content .msg-md-image{display:block;width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:2px}.msg-assistant-content .msg-md-image-link.is-broken{cursor:default;border-color:#f7768e66;background:#f7768e0f;display:flex;align-items:center;justify-content:center;aspect-ratio:1/1}.msg-assistant-content .msg-md-image-link.is-broken:before{content:"🖼️";font-size:32px;opacity:.4}.msg-assistant-content .msg-md-image-link.is-broken:hover{border-color:#f7768e66}.msg-assistant-content .msg-md-image-link.is-broken .msg-md-image{display:none}.msg-assistant-content .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:15px 0}.msg-assistant-content .table-wrap table{margin:0;border:2px solid rgba(192,202,245,.24);border-radius:3px}.msg-assistant-content .table-wrap table th,.msg-assistant-content .table-wrap table td{padding:8px 15px;font-size:13px;vertical-align:middle;text-align:left;border-bottom:2px solid rgba(192,202,245,.24)}.msg-assistant-content .table-wrap table th{font-weight:600;color:#a9b1d6;background:#1f2335}.msg-assistant-content .table-wrap table tr:last-child th,.msg-assistant-content .table-wrap table tr:last-child td{border-bottom:none}.msg-assistant-content :not(pre)>code{font-family:IBM Plex Mono,monospace;font-size:13px;background:#c0caf516;padding:1px 5px;color:#7dcfff}.msg-assistant-content .code-block{margin:15px 0;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:3px;overflow:hidden}.msg-assistant-content .code-block .code-header{display:flex;align-items:center;justify-content:space-between;padding:5px 15px;background:#c0caf516;border-bottom:2px solid rgba(192,202,245,.24);font-size:12px;color:#787c99;font-family:IBM Plex Mono,monospace}.msg-assistant-content .code-block pre{margin:0;background:#1f2335!important}.msg-assistant-content .code-block pre code{font-family:IBM Plex Mono,monospace;font-size:13px;display:block;padding:15px;overflow-x:auto}.thinking-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;color:#787c99;font-size:12px;font-style:italic;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;transition:background .15s ease;-webkit-user-select:none;user-select:none}.thinking-card summary::-webkit-details-marker{display:none}.thinking-card summary:hover{background:#c0caf516}.thinking-card[open] summary{border-bottom-color:transparent;border-radius:6px 6px 0 0}.thinking-card .thinking-chevron{margin-left:auto;font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.thinking-card[open] .thinking-chevron{transform:rotate(180deg)}.thinking-card .thinking-body{padding:8px 15px;font-size:12px;font-style:italic;color:#a9b1d6;line-height:1.5;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-top:none;border-radius:0 0 6px 6px;white-space:pre-wrap;word-break:break-word;max-height:800px;overflow-y:auto}.plan-card{border:2px solid #7AA2F7;border-left-width:6px;border-left-color:#7aa2f7;border-radius:6px;overflow:hidden;font-size:12px;margin-bottom:8px}.plan-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#7aa2f714;color:#7aa2f7;font-size:12px;-webkit-user-select:none;user-select:none}.plan-card summary::-webkit-details-marker{display:none}.plan-card summary:hover{background:#7aa2f724}.plan-card summary .plan-chevron{margin-left:auto;font-size:18px;color:#7aa2f799;transition:transform .15s ease;flex-shrink:0}.plan-card[open] .plan-chevron{transform:rotate(180deg)}.plan-card .plan-body{padding:8px 15px;font-size:12px;color:#a9b1d6;line-height:1.5;background:#7aa2f70a;border-top:2px solid rgba(122,162,247,.3)}.plan-card .plan-body p{margin:0 0 8px}.plan-card .plan-body p:last-child{margin-bottom:0}.plan-card .plan-body ul,.plan-card .plan-body ol{padding-left:22px;margin-bottom:8px}.plan-card .plan-body li{margin-bottom:5px}.plan-card .plan-body strong{color:#c0caf5}.tool-card{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;margin-bottom:8px;border-left-color:#7aa2f7;overflow:hidden;font-size:13px}.tool-card.is-success{border-left-color:#9ece6a}.tool-card.is-error{border-left-color:#f7768e}.tool-card>summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#1f2335;color:#a9b1d6;-webkit-user-select:none;user-select:none}.tool-card>summary::-webkit-details-marker{display:none}.tool-card>summary:hover{background:#c0caf516}.tool-card>summary .tool-chevron{font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.tool-card[open]>summary .tool-chevron{transform:rotate(180deg)}.tool-card .tool-name{flex:1;font-family:IBM Plex Mono,monospace;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-card .tool-running-time{font-family:IBM Plex Mono,monospace;font-size:11px;color:#787c99;white-space:nowrap}.tool-card .tool-status-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px;flex-shrink:0}.tool-card-body{background:#1f2335;border-top:2px solid rgba(192,202,245,.24)}.tool-running-banner{display:flex;align-items:center;gap:8px;padding:8px 15px;color:#a9b1d6;background:#7aa2f714;border-bottom:1px solid rgba(192,202,245,.24);font-size:12px}.tool-section{padding:8px 15px}.tool-section+.tool-section{border-top:1px solid rgba(192,202,245,.24)}.tool-section-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#787c99;margin-bottom:5px}.tool-code{font-family:IBM Plex Mono,monospace;font-size:12px;color:#a9b1d6;white-space:pre-wrap;word-break:break-word}.tool-args summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:#a9b1d6;background:#1f2335}.tool-args summary::-webkit-details-marker{display:none}.tool-args summary:hover{background:#c0caf516}.tool-args summary .tool-chevron{margin-left:auto;font-size:18px;color:#787c99;transition:transform .15s ease}.tool-args[open]>summary .tool-chevron{transform:rotate(180deg)}.tool-cards-summary{display:inline-flex;align-items:center;gap:8px;padding:5px 0}.tool-fade-item{display:grid;grid-template-rows:1fr;transition:none}.tool-fade-item>*{min-height:0;overflow:hidden}.tool-fade-enter-active,.tool-fade-leave-active{transition:opacity .2s ease,transform .2s ease,grid-template-rows .28s ease}.tool-fade-enter-from,.tool-fade-leave-to{opacity:0;transform:translateY(-4px);grid-template-rows:0fr}.tool-result{font-size:12px;line-height:1.5;color:#a9b1d6}.tool-result h1,.tool-result h2,.tool-result h3,.tool-result h4{color:#c0caf5;margin:8px 0}.tool-result p{margin:5px 0}.tool-result ul,.tool-result ol{padding-left:22px;margin:5px 0}.tool-result li{margin-bottom:2px}.tool-result blockquote{padding-left:8px;border-left:6px solid #7AA2F7;color:#a9b1d6;margin:5px 0}.tool-result code{font-family:IBM Plex Mono,monospace;background:#c0caf516;padding:1px 4px;color:#7dcfff;font-size:11px}.tool-result pre{margin:5px 0;background:#1f2335;border:2px solid rgba(192,202,245,.24);overflow:hidden}.tool-result pre code{display:block;padding:8px;overflow-x:auto}.result-line{font-family:IBM Plex Mono,monospace;padding:1px 0;white-space:pre-wrap;word-break:break-word}.result-line.diff-summary,.result-line.diff-hunk,.result-line.diff-add,.result-line.diff-del,.result-line.diff-ctx{padding:0;line-height:1.3}.result-line.diff-summary,.result-line.diff-hunk{color:#a9b1d6}.result-line.diff-add{color:#9ece6a}.result-line.diff-del{color:#f7768e}.result-line.diff-ctx{color:inherit}.diff-num-marker.diff-add{color:#9ece6a}.diff-num-marker.diff-del{color:#f7768e}.diff-num-marker.diff-ctx,.diff-content{color:inherit}.read-header-path{color:#ff9e64}.read-header-rest{color:#a9b1d6}.read-warning{color:#e0af68}.read-num{color:#ff9e64}.read-content{color:inherit}.json-object,.json-array{font-family:IBM Plex Mono,monospace;display:flex;flex-direction:column;gap:1px;padding:5px 0}.json-item{display:flex;align-items:baseline;gap:5px;padding:1px 0}.json-key{color:#c0caf5;font-weight:500;flex-shrink:0}.json-sep{color:#787c99}.json-value{color:#a9b1d6;word-break:break-word;white-space:pre-wrap}.json-string{color:#9ece6a}.json-number{color:#e0af68}.json-bool{color:#c0caf5}.json-null,.json-empty{color:#787c99;font-style:italic}.subagent-steps{display:flex;flex-direction:column;gap:5px;padding:5px 15px 15px;background:#1f2335}.subagent-planning-indicator{display:flex;align-items:center;gap:8px;padding:5px 15px;font-size:12px;font-style:italic;color:#787c99;background:#1f2335}.task-update-step{display:flex;align-items:baseline;gap:8px;padding:5px 15px;font-size:12px;color:#a9b1d6;background:#1f2335}.task-update-step i{font-size:14px;color:#e0af68;flex:none}.task-update-step .task-step-tool{color:#c0caf5;font-weight:500}.task-update-step .task-step-status{color:#787c99;font-style:italic}.task-update-step .task-step-preview{color:#a9b1d6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-update-step.completed i{color:#9ece6a}.task-update-step.completed .task-step-status{color:#9ece6a;font-style:normal}.task-update-step.failed i,.task-update-step.cancelled i{color:#f7768e}.task-update-step.failed .task-step-status,.task-update-step.cancelled .task-step-status{color:#f7768e;font-style:normal}.task-update-step .task-spin{animation:task-spin 1s linear infinite}@keyframes task-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.subagent-step{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-left-color:#7aa2f7;border-radius:6px;overflow:hidden;margin-bottom:8px;font-size:12px}.subagent-step.is-success{border-left-color:#9ece6a}.subagent-step.is-error{border-left-color:#f7768e}.subagent-step summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#1f2335;color:#a9b1d6;-webkit-user-select:none;user-select:none}.subagent-step summary::-webkit-details-marker{display:none}.subagent-step summary:hover{background:#c0caf516}.subagent-step .tool-name{flex:1;font-family:IBM Plex Mono,monospace;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.subagent-step .tool-running-time{font-family:IBM Plex Mono,monospace;font-size:11px;color:#787c99;white-space:nowrap}.subagent-step .tool-status-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px;flex-shrink:0}.subagent-step .tool-chevron{font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.subagent-step[open]>summary .tool-chevron{transform:rotate(180deg)}.summary-card{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-left-color:#bb9af7;border-radius:6px;overflow:hidden;font-size:13px}.summary-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:8px 15px;cursor:pointer;background:#bb9af714;color:#bb9af7;-webkit-user-select:none;user-select:none}.summary-card summary::-webkit-details-marker{display:none}.compression-notice{font-size:12px}.compression-notice summary{list-style:none;text-align:center;padding:8px;color:#787c99;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.compression-notice summary::-webkit-details-marker{display:none}.compression-notice summary:before,.compression-notice summary:after{content:"";flex:1;height:1px;background:#c0caf53d}.compression-notice .compression-counts{opacity:.7}.compression-notice .compression-chevron{font-size:18px;transition:transform .15s ease}.compression-notice[open] .compression-chevron{transform:rotate(180deg)}.compression-notice .compression-body{padding:15px;font-size:13px;color:#a9b1d6;line-height:1.6;background:#1f2335;border:2px solid rgba(192,202,245,.24)}.input-bar{flex-shrink:0;padding:8px 15px;background:#16161e;border-top:2px solid rgba(192,202,245,.24)}@media(max-width:767px){.input-bar{padding:0}}.input-dropzone{position:relative}.input-dropzone.is-dragging:after{content:"Drop files here";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#7aa2f71f;border:2px dashed #7AA2F7;font-size:14px;color:#7aa2f7;pointer-events:none;z-index:10}.file-preview-strip{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:5px;max-width:920px;margin-left:auto;margin-right:auto}@media(max-width:767px){.file-preview-strip{padding-top:8px}}.file-preview-image{position:relative;width:60px;height:60px}.file-preview-image img{width:100%;height:100%;object-fit:cover;border:2px solid rgba(192,202,245,.24)}.file-preview-pill.file-preview-pill{text-transform:none;max-width:180px}.file-preview-pill.file-preview-pill .file-preview-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-preview-image{border:2px solid rgba(192,202,245,.24);border-radius:3px;overflow:hidden;background:#1f2335}.file-preview-remove{background:none;border:none;cursor:pointer;color:#787c99;padding:0;display:flex;align-items:center;font-size:14px;transition:color .15s ease;flex-shrink:0}.file-preview-remove:hover{color:#f7768e}.upload-progress{height:2px;background:#c0caf516;margin-bottom:5px;overflow:hidden}.upload-progress-fill{height:100%;background:#7aa2f7;transition:width .2s ease}.upload-progress.is-indeterminate .upload-progress-fill{width:30%;transition:none;animation:upload-slide 1.1s ease-in-out infinite}@keyframes upload-slide{0%{transform:translate(-110%)}to{transform:translate(440%)}}.input-row{display:flex;align-items:center;gap:8px;background:#1f2335;border:2px solid #C0CAF5;border-radius:3px;padding:8px;max-width:920px;margin:0 auto}.input-row:hover{border-bottom-color:#787c99}.input-row:focus-within{border-color:#7aa2f7;background:transparent}@media(max-width:767px){.input-row{border:none;border-radius:0;max-width:none;padding:8px 15px}}.input-textarea{flex:1;background:none;border:none;outline:none;resize:none;color:#c0caf5;font-size:14px;line-height:1.5;font-family:inherit;min-height:24px;max-height:144px;overflow-y:auto;padding:2px 0}.input-textarea::placeholder{color:#787c99}.welcome-screen{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:safe center;overflow-y:auto;padding:34px;gap:34px;text-align:center}@media(max-width:768px){.welcome-screen{padding:52px 15px 15px;gap:15px;justify-content:flex-start}}.welcome-logo{display:flex;flex-direction:column;align-items:center;gap:8px}.welcome-logo img{width:64px;height:64px}.welcome-logo h1{font-size:30px;font-weight:600;color:#c0caf5;margin:0}.welcome-logo p{font-size:var(--gn-font-size-base);color:#a9b1d6;margin:0}@media(max-width:768px){.welcome-logo{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:8px}.welcome-logo img{width:36px;height:36px}.welcome-logo h1{font-size:22px}.welcome-logo p{font-size:13px;flex-basis:100%}}.welcome-profiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:1fr;flex-shrink:0;gap:15px;width:min(100%,880px)}@media(max-width:768px){.welcome-profiles{grid-template-columns:repeat(2,1fr);gap:10px;width:100%;max-width:100%}}.welcome-profile-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:15px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;cursor:pointer;transition:border-color .15s ease,background .15s ease;width:100%;text-align:center}.welcome-profile-card:hover{border-color:#7aa2f7;background:#c0caf516}.welcome-profile-card.is-creating{opacity:.6;pointer-events:none}.welcome-profile-card .profile-name{font-size:14px;font-weight:600;color:#c0caf5}.welcome-profile-card .profile-desc{font-size:12px;color:#787c99;line-height:1.4}@media(max-width:768px){.welcome-profile-card{width:auto;padding:10px;gap:6px}.welcome-profile-card .profile-name{font-size:13px}.welcome-profile-card .profile-desc{font-size:11px}}.empty-chat{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(192,202,245,.24);border-top-color:#7aa2f7;border-radius:50%;animation:spin .6s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .15s ease}.fade-enter-from,.fade-leave-to{opacity:0}.msg-enter{animation:msgEnter .2s ease both}@keyframes msgEnter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.slide-left-enter-active,.slide-left-leave-active{transition:transform .28s ease,opacity .28s ease}.slide-left-enter-from,.slide-left-leave-to{transform:translate(-100%);opacity:0}.modal-enter-active,.modal-leave-active{transition:opacity .28s ease}.modal-enter-active .modal-panel,.modal-leave-active .modal-panel{transition:opacity .28s ease,margin-top .28s ease}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal-panel,.modal-leave-to .modal-panel{opacity:0;margin-top:200px}.tool-card[open]>summary .tool-chevron,.thinking-card[open]>summary .tool-chevron{transform:rotate(180deg)!important}.hljs{background:transparent;color:inherit}.hljs-comment,.hljs-quote{color:#787c99;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag,.hljs-formula{color:#bb9af7}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-char.escape_{color:#9ece6a}.hljs-number,.hljs-symbol,.hljs-bullet,.hljs-link{color:#ff9e64}.hljs-title,.hljs-title.class_,.hljs-title.function_,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#7aa2f7}.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.hljs-property{color:#7dcfff}.hljs-type,.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-operator,.hljs-punctuation{color:#e0af68}.hljs-meta,.hljs-meta .hljs-keyword{color:#73daca}.hljs-deletion{color:#f7768e}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600}.msg-flash{animation:msgFlash 2.5s ease-out}@keyframes msgFlash{0%{filter:brightness(1)}15%{filter:brightness(1.4);background-color:#7aa2f71f}40%{filter:brightness(1.4);background-color:#7aa2f71f}to{filter:brightness(1)}} diff --git a/webclient/dist/assets/index-eA-1HZAI.css b/webclient/dist/assets/index-eA-1HZAI.css deleted file mode 100644 index 2cda00e..0000000 --- a/webclient/dist/assets/index-eA-1HZAI.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.container[data-v-213cc62b]{padding:18px}.section[data-v-213cc62b]{margin-bottom:48px}.section-title[data-v-213cc62b],.block[data-v-213cc62b]{margin-bottom:34px}.block-title[data-v-213cc62b]{margin-bottom:22px}p[data-v-213cc62b],.text[data-v-213cc62b]{margin-bottom:15px}.hint[data-v-213cc62b]{margin-top:8px}.list[data-v-213cc62b]{padding-left:22px;margin-bottom:15px}.list-item[data-v-213cc62b]{margin-bottom:8px}.list-nested[data-v-213cc62b]{margin-top:8px}.table[data-v-213cc62b]{margin-bottom:22px}.table-caption[data-v-213cc62b]{margin-bottom:8px}.form-group[data-v-213cc62b]{margin-bottom:15px}.label[data-v-213cc62b]{margin-bottom:5px;display:block}.input[data-v-213cc62b],.textarea[data-v-213cc62b],.select[data-v-213cc62b]{margin-top:5px}.toast[data-v-213cc62b]{padding:15px}.toast-stack[data-v-213cc62b]{gap:8px}.search-highlight[data-v-213cc62b]{background:#7aa2f740;color:#7aa2f7;font-weight:600;padding:0 2px;border-radius:2px}.session-name-row[data-v-213cc62b]{display:flex;align-items:center;gap:6px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.recall-badge[data-v-213cc62b]{color:var(--gn-color-accent);font-size:.85em;flex-shrink:0}.session-list-wrap[data-v-4d876f4d]{flex:1;overflow:hidden;display:flex;flex-direction:column}.session-scroller[data-v-4d876f4d]{flex:1;overflow-y:auto}.empty-sessions[data-v-4d876f4d]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 16px;color:var(--gn-color-text-dark);font-size:13px}.empty-sessions i[data-v-4d876f4d]{font-size:32px;opacity:.4}.empty-sessions p[data-v-4d876f4d]{margin:0}.sessions-loading[data-v-4d876f4d]{display:flex;align-items:center;justify-content:center;gap:10px;padding:28px 16px;color:var(--gn-color-text-dark);font-size:12px}.sessions-loading-more[data-v-4d876f4d]{padding:10px 16px 14px}.sessions-spinner[data-v-4d876f4d]{width:16px;height:16px;border:2px solid var(--gn-border-color-muted);border-top-color:var(--gn-color-secondary);border-radius:50%;animation:sessions-spin-4d876f4d .8s linear infinite}@keyframes sessions-spin-4d876f4d{to{transform:rotate(360deg)}}.ptr-indicator[data-v-4d876f4d]{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:12px;color:var(--gn-color-text-dark);pointer-events:none;transition:opacity .15s,transform .15s;will-change:transform,opacity}.ptr-spinner[data-v-4d876f4d]{width:16px;height:16px;border:2px solid var(--gn-border-color-muted);border-top-color:var(--gn-color-secondary);border-radius:50%;transition:transform .15s}.ptr-spinning[data-v-4d876f4d]{animation:sessions-spin-4d876f4d .8s linear infinite}.ptr-pulled[data-v-4d876f4d]{transition:transform .15s}@media(min-width:769px){.ptr-indicator[data-v-4d876f4d]{display:none}}.container[data-v-6361031f]{padding:18px}.section[data-v-6361031f]{margin-bottom:48px}.section-title[data-v-6361031f],.block[data-v-6361031f]{margin-bottom:34px}.block-title[data-v-6361031f]{margin-bottom:22px}p[data-v-6361031f],.text[data-v-6361031f]{margin-bottom:15px}.hint[data-v-6361031f]{margin-top:8px}.list[data-v-6361031f]{padding-left:22px;margin-bottom:15px}.list-item[data-v-6361031f]{margin-bottom:8px}.list-nested[data-v-6361031f]{margin-top:8px}.table[data-v-6361031f]{margin-bottom:22px}.table-caption[data-v-6361031f]{margin-bottom:8px}.form-group[data-v-6361031f]{margin-bottom:15px}.label[data-v-6361031f]{margin-bottom:5px;display:block}.input[data-v-6361031f],.textarea[data-v-6361031f],.select[data-v-6361031f]{margin-top:5px}.toast[data-v-6361031f]{padding:15px}.toast-stack[data-v-6361031f]{gap:8px}.sidebar-close-btn[data-v-6361031f]{display:none}@media(max-width:1279.98px){.sidebar-close-btn[data-v-6361031f]{display:flex}}.sidebar-search[data-v-6361031f]{display:none;padding:0 15px}.sidebar-search.is-open[data-v-6361031f]{display:block;padding-top:8px;padding-bottom:8px;border-bottom:1px solid var(--gn-border-color-muted)}.sidebar-search-inner[data-v-6361031f]{position:relative;display:flex;align-items:center;gap:5px}.sidebar-search-inner[data-v-6361031f] .search-field{flex:1;min-width:0}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon{position:relative!important}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon>i{display:none!important}.sidebar-search-inner.is-loading[data-v-6361031f] .input-group-addon:after{content:"";display:block;width:12px;height:12px;border:2px solid rgba(192,202,245,.24);border-top-color:#7aa2f7;border-radius:50%;animation:spin .6s linear infinite;margin:auto}.sessions-profiles[data-v-6361031f]{display:flex;gap:6px;padding:8px 15px 5px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}.sessions-profiles[data-v-6361031f]::-webkit-scrollbar{display:none}.sessions-profiles .chip[data-v-6361031f]{flex:0 0 auto}.sessions-profiles[data-v-6361031f] .chip:before{display:none}.sessions-header-actions[data-v-6361031f]{display:flex;align-items:center;gap:2px}.search-toggle-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.search-toggle-btn.active[data-v-6361031f],.search-toggle-btn[data-v-6361031f]:hover{color:#c0caf5}.recall-filter-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.recall-filter-btn.active[data-v-6361031f],.recall-filter-btn[data-v-6361031f]:hover{color:var(--gn-color-secondary)}.special-filter-btn[data-v-6361031f]{font-size:14px;color:#787c99;transition:color .15s}.special-filter-btn.active[data-v-6361031f],.special-filter-btn[data-v-6361031f]:hover{color:var(--gn-color-secondary)}.sidebar-footer[data-v-6361031f]{padding:12px 16px;border-top:1px solid var(--gn-border-color-muted);display:flex;align-items:center;justify-content:space-between;gap:8px}.user-info[data-v-6361031f]{display:flex;align-items:center;gap:8px;text-decoration:none;color:inherit;flex:1;min-width:0;cursor:pointer}.user-info:hover .user-name[data-v-6361031f]{color:var(--gn-color-text-light)}.user-name[data-v-6361031f]{font-size:13px;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-footer-actions[data-v-6361031f]{display:flex;align-items:center;gap:8px}.admin-link[data-v-6361031f]{text-decoration:none}.audio-player[data-v-f9c7ab69]{width:100%;display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 24px;background:var(--gn-surface-panel)}.ap-art[data-v-f9c7ab69]{display:flex;align-items:center;justify-content:center;width:96px;height:96px;border-radius:50%;background:var(--gn-color-black);color:var(--gn-color-accent);font-size:40px}.ap-title[data-v-f9c7ab69]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--gn-color-text-light);font-size:14px;font-weight:500}.ap-error[data-v-f9c7ab69]{color:var(--gn-color-error);font-size:12px}.ap-controls[data-v-f9c7ab69]{width:100%;display:flex;align-items:center;gap:10px}.ap-audio-el[data-v-f9c7ab69]{display:none}.ap-time[data-v-f9c7ab69]{flex:none;color:var(--gn-color-text-dark);font-size:12px;font-variant-numeric:tabular-nums}.ap-controls[data-v-f9c7ab69] .range{flex:1;min-width:0;margin:0}.ap-controls[data-v-f9c7ab69] .range .label{margin:0}.ap-seek[data-v-f9c7ab69]{flex:1}.ap-volume[data-v-f9c7ab69]{flex:none;width:90px;display:flex}.ap-volume[data-v-f9c7ab69] .range{width:100%;margin:0}.audio-player.is-compact[data-v-f9c7ab69]{gap:10px;padding:14px}.audio-player.is-compact .ap-art[data-v-f9c7ab69]{width:56px;height:56px;font-size:24px}.audio-player.is-compact .ap-title[data-v-f9c7ab69]{font-size:13px}@media(max-width:600px){.ap-volume[data-v-f9c7ab69]{display:none}.audio-player[data-v-f9c7ab69]{padding:20px 16px}}.lightbox-dialog{max-width:90vw;min-width:280px}.lightbox-dialog.is-frame{width:96vw;max-width:96vw}.lightbox-dialog.is-text{width:min(1100px,94vw);max-width:min(1100px,94vw)}.lightbox-dialog.is-audio{width:min(640px,94vw);max-width:min(640px,94vw)}.lightbox-tools{display:flex;align-items:center;gap:4px}body .modal .lightbox-dialog .lightbox-panel{justify-content:center;cursor:default}body .modal .lightbox-panel .modal-body{max-height:90vh;padding:0;display:flex;align-items:center;justify-content:center}body .modal .lightbox-dialog.is-frame .lightbox-panel .modal-body,body .modal .lightbox-dialog.is-video .lightbox-panel .modal-body{height:80vh;max-height:80vh}body .modal .lightbox-dialog.is-text .lightbox-panel .modal-body{align-items:stretch;justify-content:flex-start;height:auto;max-height:none}.lightbox-img{display:block;width:auto;height:auto;max-width:100%;max-height:90vh}.lightbox-video{display:block;width:100%;height:100%;background:#000}.lightbox-frame{display:block;width:100%;height:100%;border:0;background:#1a1a2e}.lightbox-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:32px;color:var(--gn-color-text-dark);font-size:13px}.lightbox-error i{font-size:32px}.lightbox-text{width:100%;height:auto;max-height:80vh;display:flex;flex-direction:column;overflow:auto;background:var(--gn-color-black)}.lightbox-code{margin:0;padding:16px;white-space:pre;font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.lightbox-note{position:sticky;bottom:0;padding:10px 16px;border-top:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel);color:var(--gn-color-text-dark);font-size:12px}.lightbox-note a{color:var(--gn-color-accent);margin-left:6px}.lightbox-state{display:flex;align-items:center;gap:8px;padding:16px;margin:0;color:var(--gn-color-text-dark);font-size:13px}.lightbox-state-error{color:var(--gn-color-error)}.selection-toolbar[data-v-7fdc7530]{position:fixed;transform:translate(-50%);z-index:900;pointer-events:all;background:var(--gn-color-warning);color:var(--gn-color-black)}.container[data-v-f24e35d7]{padding:18px}.section[data-v-f24e35d7]{margin-bottom:48px}.section-title[data-v-f24e35d7],.block[data-v-f24e35d7]{margin-bottom:34px}.block-title[data-v-f24e35d7]{margin-bottom:22px}p[data-v-f24e35d7],.text[data-v-f24e35d7]{margin-bottom:15px}.hint[data-v-f24e35d7]{margin-top:8px}.list[data-v-f24e35d7]{padding-left:22px;margin-bottom:15px}.list-item[data-v-f24e35d7]{margin-bottom:8px}.list-nested[data-v-f24e35d7]{margin-top:8px}.table[data-v-f24e35d7]{margin-bottom:22px}.table-caption[data-v-f24e35d7]{margin-bottom:8px}.form-group[data-v-f24e35d7]{margin-bottom:15px}.label[data-v-f24e35d7]{margin-bottom:5px;display:block}.input[data-v-f24e35d7],.textarea[data-v-f24e35d7],.select[data-v-f24e35d7]{margin-top:5px}.toast[data-v-f24e35d7]{padding:15px}.toast-stack[data-v-f24e35d7]{gap:8px}.artifacts-panel[data-v-f24e35d7]{container-type:inline-size;width:var(--artifacts-width, min(600px, 42vw));min-width:var(--artifacts-width, min(600px, 42vw));max-width:var(--artifacts-width, min(600px, 42vw));display:flex;flex-direction:column;background:var(--gn-color-black);border-left:2px solid var(--gn-border-color-muted);min-height:0;margin-right:calc(-1 * var(--artifacts-width, min(600px, 42vw)));opacity:0;pointer-events:none;transform:translate(100%);position:relative;transition:margin-right .22s ease,opacity .22s ease,transform .22s ease}.artifacts-panel.is-open[data-v-f24e35d7]{margin-right:0;opacity:1;pointer-events:auto;transform:translate(0)}.artifacts-panel.is-resizing[data-v-f24e35d7]{transition:none}.artifacts-resize-handle[data-v-f24e35d7]{position:absolute;top:0;left:-4px;bottom:0;width:8px;z-index:2;cursor:col-resize;touch-action:none}.artifacts-resize-handle[data-v-f24e35d7]:after{content:"";position:absolute;top:0;left:3px;width:1px;height:100%;background:transparent;transition:background .15s ease}.artifacts-resize-handle[data-v-f24e35d7]:hover:after,.artifacts-panel.is-resizing .artifacts-resize-handle[data-v-f24e35d7]:after{background:var(--gn-color-accent)}.artifacts-header[data-v-f24e35d7]{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 15px;border-bottom:2px solid var(--gn-border-color-muted)}.artifacts-empty[data-v-f24e35d7]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--gn-color-text-dark);font-size:13px}.artifacts-tabs[data-v-f24e35d7]{display:flex;align-items:center;flex-wrap:nowrap;gap:8px;flex:1;min-width:0}.artifacts-tab[data-v-f24e35d7]{min-width:0;white-space:nowrap}@container (max-width: 560px){.artifacts-tab[data-v-f24e35d7]{padding:4px 10px;font-size:11px;gap:6px}.artifacts-tabs[data-v-f24e35d7]{gap:6px}}@container (max-width: 490px){.artifacts-tab[data-v-f24e35d7]{padding:3px 8px;font-size:10px;gap:5px}}@container (max-width: 400px){.artifacts-tab[data-v-f24e35d7]{padding:2px 6px}.artifacts-tab-count[data-v-f24e35d7]{padding-left:3px}}@media(min-width:981px){@container (max-width: 360px){.artifacts-tab i[data-v-f24e35d7]{display:none}}}.artifacts-tab-count[data-v-f24e35d7]{padding-left:4px;opacity:.72}.artifacts-tab-count.has-running[data-v-f24e35d7]{color:var(--gn-color-success);opacity:1}.artifacts-list[data-v-f24e35d7]{max-height:232px;overflow-y:auto;border-bottom:2px solid var(--gn-border-color-muted)}.viewed-images-group[data-v-f24e35d7]{flex-shrink:0;border-bottom:2px solid var(--gn-border-color-muted);background:var(--gn-surface-panel-muted)}.viewed-images-header[data-v-f24e35d7]{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12px;font-weight:500;color:var(--gn-color-text-medium)}.viewed-images-header i[data-v-f24e35d7]{font-size:14px;color:var(--gn-color-secondary)}.viewed-images-grid[data-v-f24e35d7]{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;padding:0 12px 12px;max-height:320px;overflow-y:auto}.viewed-image-thumb[data-v-f24e35d7]{width:100%;height:96px;object-fit:cover;border:1px solid var(--gn-border-color-muted);border-radius:6px;cursor:zoom-in;transition:border-color var(--gn-motion-fast) var(--gn-motion-ease),opacity var(--gn-motion-fast) var(--gn-motion-ease)}.viewed-image-thumb[data-v-f24e35d7]:hover{border-color:var(--gn-color-secondary);opacity:.85}.artifact-item[data-v-f24e35d7]{width:100%;min-height:50px;display:flex;align-items:center;gap:10px;padding:8px 12px;border:0;border-left:var(--gn-border-width-accent) solid transparent;background:transparent;color:var(--gn-color-text-light);text-align:left;cursor:pointer;transition:background var(--gn-motion-fast) var(--gn-motion-ease),border-color var(--gn-motion-fast) var(--gn-motion-ease)}.artifact-item[data-v-f24e35d7]:hover{background:color-mix(in srgb,var(--gn-color-text-light) 7%,transparent)}.artifact-item.is-active[data-v-f24e35d7]{border-left-color:var(--gn-color-secondary);background:var(--gn-surface-panel-muted)}.artifact-icon[data-v-f24e35d7]{display:inline-flex;flex-shrink:0;color:var(--gn-color-accent);font-size:20px}.artifact-info[data-v-f24e35d7]{min-width:0;flex:1;display:flex;flex-direction:column;gap:2px}.artifact-title[data-v-f24e35d7],.artifact-detail-title[data-v-f24e35d7],.artifact-detail-filename[data-v-f24e35d7]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.artifact-title[data-v-f24e35d7]{font-size:13px;font-weight:500}.artifact-meta[data-v-f24e35d7]{font-size:11px;color:var(--gn-color-text-dark)}.artifact-detail[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column}.artifact-detail-header[data-v-f24e35d7]{padding:12px 15px 8px}.artifact-detail-title[data-v-f24e35d7]{font-size:14px;font-weight:600;color:var(--gn-color-text-light)}.artifact-detail-filename[data-v-f24e35d7]{margin-top:3px;font-size:12px;color:var(--gn-color-text-dark)}.artifact-actions[data-v-f24e35d7]{display:flex;flex-wrap:wrap;gap:4px;padding:0 15px 12px}.artifact-preview[data-v-f24e35d7]{flex:1;min-height:0;border-top:2px solid var(--gn-border-color-muted);background:var(--gn-color-black)}.artifact-frame[data-v-f24e35d7],.artifact-image[data-v-f24e35d7],.artifact-video[data-v-f24e35d7]{width:100%;height:100%;border:0;display:block}.artifact-image[data-v-f24e35d7],.artifact-video[data-v-f24e35d7]{object-fit:contain}.artifact-image.is-viewable[data-v-f24e35d7]{cursor:zoom-in}.artifact-audio[data-v-f24e35d7]{width:100%;display:block}.artifact-text[data-v-f24e35d7]{height:100%;display:flex;flex-direction:column;overflow:auto;background:var(--gn-color-black)}.artifact-text-note[data-v-f24e35d7]{padding:8px 14px;border-top:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark);font-size:12px}.artifact-source[data-v-f24e35d7]{height:100%;overflow:auto;background:var(--gn-color-black)}.artifact-source-code[data-v-f24e35d7],.artifact-source-error[data-v-f24e35d7]{margin:0;padding:14px;white-space:pre;font-family:var(--gn-font-family-base);font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.artifact-source-error[data-v-f24e35d7]{color:var(--gn-color-error)}.artifact-source-state[data-v-f24e35d7]{display:flex;align-items:center;gap:8px;padding:14px;color:var(--gn-color-text-dark);font-size:12px}.artifact-no-preview[data-v-f24e35d7]{height:100%;min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--gn-color-text-dark);font-size:13px}.artifact-no-preview i[data-v-f24e35d7]{font-size:28px}.links-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.link-item[data-v-f24e35d7]{text-decoration:none}.link-item .artifact-title[data-v-f24e35d7]{color:var(--gn-color-accent)}.link-item:hover .artifact-title[data-v-f24e35d7],.link-item.is-active .artifact-title[data-v-f24e35d7]{color:var(--gn-color-text-light)}.link-detail[data-v-f24e35d7]{padding:12px 15px;border-top:2px solid var(--gn-border-color-muted)}.link-detail-header[data-v-f24e35d7]{margin-bottom:8px}.link-detail-count[data-v-f24e35d7]{font-size:12px;color:var(--gn-color-text-dark)}.link-actions[data-v-f24e35d7]{display:flex;gap:6px}.files-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.file-item[data-v-f24e35d7],.file-item.is-dir[data-v-f24e35d7]{cursor:default}.file-item.is-dir .artifact-title[data-v-f24e35d7]{color:var(--gn-color-text-medium)}.file-row-actions[data-v-f24e35d7]{display:flex;gap:4px;flex-shrink:0;opacity:0;transition:opacity .15s ease}.file-item:hover .file-row-actions[data-v-f24e35d7]{opacity:1}.file-row-action[data-v-f24e35d7]{width:28px;height:28px;min-height:0;padding:0}@media(max-width:980px){.artifacts-panel[data-v-f24e35d7]{position:fixed;top:0;right:0;bottom:0;z-index:120;margin-right:0;transform:translate(100%);width:100vw;min-width:100vw;max-width:100vw}.artifacts-resize-handle[data-v-f24e35d7]{display:none}.artifacts-panel.is-open[data-v-f24e35d7]{transform:translate(0)}.artifacts-header[data-v-f24e35d7]{gap:6px;padding:0 10px}.artifacts-tab[data-v-f24e35d7]{padding:8px 10px;gap:4px}.artifacts-tab>span[data-v-f24e35d7]:not(.artifacts-tab-count){display:none}}@media(prefers-reduced-motion:reduce){.artifacts-panel[data-v-f24e35d7]{transition:none}}.files-toolbar[data-v-f24e35d7]{display:flex;align-items:center;justify-content:flex-end;padding:8px 12px 2px}.files-tab-wrap[data-v-f24e35d7]{position:relative;flex:1;display:flex;flex-direction:column;overflow:hidden}.files-refresh-btn[data-v-f24e35d7]:disabled{opacity:.5;cursor:not-allowed}@media(max-width:980px){.files-refresh-btn[data-v-f24e35d7]{display:none}}.files-ptr[data-v-f24e35d7]{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:12px;color:var(--gn-color-text-dark);pointer-events:none;transition:opacity .15s,transform .15s;will-change:transform,opacity}.ptr-pulled[data-v-f24e35d7]{transition:transform .15s}@media(min-width:981px){.files-ptr[data-v-f24e35d7]{display:none}}.terminals-list[data-v-f24e35d7]{max-height:none;flex:1;overflow-y:auto}.terminal-item.is-closed[data-v-f24e35d7]{opacity:.6}.terminal-item .artifact-meta[data-v-f24e35d7]{white-space:normal;word-break:break-word;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.terminal-detail[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column;border-top:2px solid var(--gn-border-color-muted);overflow-y:auto}.terminal-detail-header[data-v-f24e35d7]{padding:12px 15px 8px;display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.terminal-detail-title-wrap[data-v-f24e35d7]{min-width:0}.artifacts-tab-count.has-running[data-v-f24e35d7]{background:var(--gn-color-success);color:var(--gn-color-black)}.terminal-detail-title[data-v-f24e35d7]{font-size:14px;font-weight:600;color:var(--gn-color-text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.terminal-detail-close[data-v-f24e35d7]{flex-shrink:0}.terminal-detail-meta[data-v-f24e35d7]{margin-top:3px;font-size:12px;color:var(--gn-color-text-dark);word-break:break-word;line-height:1.5}.terminal-detail-grid[data-v-f24e35d7]{display:flex;flex-direction:column;gap:6px;padding:0 15px 12px;border-bottom:2px solid color-mix(in srgb,var(--gn-color-text-light) 12%,transparent)}.terminal-detail-row[data-v-f24e35d7]{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px}.terminal-detail-label[data-v-f24e35d7]{color:var(--gn-color-text-dark);flex-shrink:0}.terminal-detail-value[data-v-f24e35d7]{color:var(--gn-color-text-light);text-align:right;word-break:break-all}.terminal-detail-value.status-busy[data-v-f24e35d7]{color:var(--gn-color-success)}.terminal-detail-value.status-idle[data-v-f24e35d7]{color:var(--gn-color-secondary)}.terminal-detail-value.status-closed[data-v-f24e35d7]{color:var(--gn-color-error)}.terminal-detail-command[data-v-f24e35d7]{font-family:var(--gn-font-family-base);font-size:11px;color:var(--gn-color-accent)}.terminal-output-wrap[data-v-f24e35d7]{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--gn-color-black)}.terminal-output-header[data-v-f24e35d7]{padding:8px 15px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--gn-color-text-dark);border-bottom:2px solid color-mix(in srgb,var(--gn-color-text-light) 12%,transparent)}.terminal-output[data-v-f24e35d7]{flex:1;margin:0;padding:14px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-family:var(--gn-font-family-base);font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.login-overlay[data-v-da007b37]{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:var(--gn-color-black);z-index:9999}.login-card[data-v-da007b37]{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 40px;border:1px solid var(--gn-border-color-muted);border-radius:16px;max-width:360px;width:90%}.login-logo[data-v-da007b37]{width:64px;height:64px}.login-title[data-v-da007b37]{font-size:24px;font-weight:700;color:var(--gn-color-text-light);margin:0}.login-subtitle[data-v-da007b37]{font-size:14px;color:var(--gn-color-text-medium);margin:0}.login-btn[data-v-da007b37]{margin-top:8px;width:100%;justify-content:center}.container[data-v-55b607e2]{padding:18px}.section[data-v-55b607e2]{margin-bottom:48px}.section-title[data-v-55b607e2],.block[data-v-55b607e2]{margin-bottom:34px}.block-title[data-v-55b607e2]{margin-bottom:22px}p[data-v-55b607e2],.text[data-v-55b607e2]{margin-bottom:15px}.hint[data-v-55b607e2]{margin-top:8px}.list[data-v-55b607e2]{padding-left:22px;margin-bottom:15px}.list-item[data-v-55b607e2]{margin-bottom:8px}.list-nested[data-v-55b607e2]{margin-top:8px}.table[data-v-55b607e2]{margin-bottom:22px}.table-caption[data-v-55b607e2]{margin-bottom:8px}.form-group[data-v-55b607e2]{margin-bottom:15px}.label[data-v-55b607e2]{margin-bottom:5px;display:block}.input[data-v-55b607e2],.textarea[data-v-55b607e2],.select[data-v-55b607e2]{margin-top:5px}.toast[data-v-55b607e2]{padding:15px}.toast-stack[data-v-55b607e2]{gap:8px}.notification-prompt[data-v-55b607e2]{display:flex;align-items:center;flex-wrap:wrap;gap:8px 15px;flex-shrink:0;padding:12px 15px;background:#7aa2f71f;border-bottom:1px solid rgba(122,162,247,.3)}.notification-prompt i[data-v-55b607e2]{font-size:18px;color:#7aa2f7;flex-shrink:0}.notification-prompt-body[data-v-55b607e2]{flex:1 1 240px;min-width:0}.notification-prompt-title[data-v-55b607e2]{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#7aa2f7}.notification-prompt-text[data-v-55b607e2]{font-size:12px;color:#a9b1d6;margin-top:2px}.notification-prompt-actions[data-v-55b607e2]{display:flex;align-items:center;gap:8px;flex-shrink:0}.prompt-slide-enter-active[data-v-55b607e2],.prompt-slide-leave-active[data-v-55b607e2]{transition:max-height .28s ease,opacity .28s ease;overflow:hidden}.prompt-slide-enter-from[data-v-55b607e2],.prompt-slide-leave-to[data-v-55b607e2]{max-height:0;opacity:0}.prompt-slide-enter-to[data-v-55b607e2],.prompt-slide-leave-from[data-v-55b607e2]{max-height:200px;opacity:1}.container[data-v-4a57a206]{padding:18px}.section[data-v-4a57a206]{margin-bottom:48px}.section-title[data-v-4a57a206],.block[data-v-4a57a206]{margin-bottom:34px}.block-title[data-v-4a57a206]{margin-bottom:22px}p[data-v-4a57a206],.text[data-v-4a57a206]{margin-bottom:15px}.hint[data-v-4a57a206]{margin-top:8px}.list[data-v-4a57a206]{padding-left:22px;margin-bottom:15px}.list-item[data-v-4a57a206]{margin-bottom:8px}.list-nested[data-v-4a57a206]{margin-top:8px}.table[data-v-4a57a206]{margin-bottom:22px}.table-caption[data-v-4a57a206]{margin-bottom:8px}.form-group[data-v-4a57a206]{margin-bottom:15px}.label[data-v-4a57a206]{margin-bottom:5px;display:block}.input[data-v-4a57a206],.textarea[data-v-4a57a206],.select[data-v-4a57a206]{margin-top:5px}.toast[data-v-4a57a206]{padding:15px}.toast-stack[data-v-4a57a206]{gap:8px}.offline-banner[data-v-4a57a206]{display:flex;align-items:center;justify-content:center;gap:8px;padding:5px 15px;background:#ff9e6426;color:#ff9e64;font-size:12px;border-bottom:1px solid rgba(255,158,100,.3)}.offline-banner i[data-v-4a57a206]{font-size:16px;flex-shrink:0}.offline-slide-enter-active[data-v-4a57a206],.offline-slide-leave-active[data-v-4a57a206]{transition:max-height .25s ease,opacity .25s ease;overflow:hidden}.offline-slide-enter-from[data-v-4a57a206],.offline-slide-leave-to[data-v-4a57a206]{max-height:0;opacity:0}.offline-slide-enter-to[data-v-4a57a206],.offline-slide-leave-from[data-v-4a57a206]{max-height:48px;opacity:1}.welcome-sidebar-btn[data-v-cf0df608]{display:none;position:fixed;top:12px;left:12px}@media(max-width:1279.98px){.welcome-sidebar-btn[data-v-cf0df608]{display:flex}}.model-chip[data-v-6039953a]{display:inline-flex;align-items:center;gap:4px;max-width:220px;padding:1px 8px;border:1px solid color-mix(in srgb,var(--gn-color-warning) 45%,transparent);border-radius:999px;background:color-mix(in srgb,var(--gn-color-warning) 10%,transparent);color:var(--gn-color-warning);font-size:11px;font-weight:600;line-height:1.6;white-space:nowrap}.model-chip i[data-v-6039953a]{font-size:12px}.model-chip-text[data-v-6039953a]{overflow:hidden;text-overflow:ellipsis}@media(max-width:640px){.model-chip-text[data-v-6039953a]{display:none}.model-chip[data-v-6039953a]{padding:1px 5px}}.context-bar[data-v-cb775a25]{padding:0;border:0;background:none;font:inherit;line-height:1;cursor:pointer;border-radius:4px}.context-bar:hover .context-bar-pct[data-v-cb775a25]{text-decoration:underline}.context-bar[data-v-cb775a25]:focus-visible{outline:2px solid var(--gn-color-primary);outline-offset:2px}.context-bar-pct[data-v-cb775a25]{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--gn-color-success);white-space:nowrap}.context-bar-pct.is-warn[data-v-cb775a25]{color:var(--gn-color-warning)}.context-bar-pct.is-crit[data-v-cb775a25]{color:var(--gn-color-error)}.session-info[data-v-72bc8966]{min-width:min(460px,calc(100vw - 48px));max-height:min(76vh,700px);overflow-y:auto}.session-info .si-rows[data-v-72bc8966]{max-width:none}.si-grid[data-v-72bc8966]{display:grid;gap:18px}@media(min-width:780px){.si-grid[data-v-72bc8966]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.si-section+.si-section[data-v-72bc8966]{margin-top:0;padding-top:0;border-top:none}}.si-live[data-v-72bc8966]{margin-top:18px;padding-top:18px;border-top:1px solid var(--gn-border-color-muted)}.si-live-grid[data-v-72bc8966]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.si-live-item[data-v-72bc8966]{display:flex;flex-direction:column;gap:3px;min-width:0;padding:8px 10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent)}.si-live-term[data-v-72bc8966]{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.si-live-value[data-v-72bc8966]{font-size:12px;color:var(--gn-color-text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-live-value.is-live[data-v-72bc8966]{color:var(--gn-color-primary)}.si-live-value.is-ok[data-v-72bc8966]{color:var(--gn-color-success)}.si-live-value.is-warn[data-v-72bc8966]{color:var(--gn-color-warning)}.si-live-value.is-error[data-v-72bc8966]{color:var(--gn-color-error)}.si-live-value.is-muted[data-v-72bc8966]{color:var(--gn-color-text-medium)}.si-heading[data-v-72bc8966]{margin:0 0 10px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-medium)}.si-subheading[data-v-72bc8966]{margin:14px 0 6px;font-size:11px;font-weight:600;color:var(--gn-color-text-light)}.si-active[data-v-72bc8966]{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent)}.si-active.is-backup[data-v-72bc8966]{border-color:color-mix(in srgb,var(--gn-color-warning) 45%,transparent);background:color-mix(in srgb,var(--gn-color-warning) 8%,transparent)}.si-active>i[data-v-72bc8966]{font-size:18px;color:var(--gn-color-success)}.si-active.is-backup>i[data-v-72bc8966]{color:var(--gn-color-warning)}.si-active-text[data-v-72bc8966]{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.si-model[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);font-size:13px;color:var(--gn-color-text-dark);overflow:hidden;text-overflow:ellipsis}.si-server[data-v-72bc8966]{font-size:11px;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis}.si-chain-list[data-v-72bc8966]{display:flex;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none}.si-chain-item[data-v-72bc8966]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:6px;font-size:12px;color:var(--gn-color-text-medium)}.si-chain-item.is-active[data-v-72bc8966]{background:color-mix(in srgb,var(--gn-color-primary) 10%,transparent);color:var(--gn-color-text-dark)}.si-chain-dot[data-v-72bc8966]{width:7px;height:7px;flex:none;border-radius:50%;background:var(--gn-color-success)}.si-chain-dot.is-degraded[data-v-72bc8966]{background:var(--gn-color-warning)}.si-chain-dot.is-missing[data-v-72bc8966]{background:var(--gn-color-error)}.si-chain-model[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.si-chain-target[data-v-72bc8966]{margin-left:auto;color:var(--gn-color-text-light);white-space:nowrap}.si-chain-state[data-v-72bc8966]{min-width:48px;text-align:right;font-size:11px;color:var(--gn-color-text-light);white-space:nowrap}.si-id[data-v-72bc8966]{font-family:var(--gn-font-mono, monospace);font-size:11px;word-break:break-all;min-width:0}.si-id-row[data-v-72bc8966]{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:100%}.si-muted[data-v-72bc8966]{color:var(--gn-color-text-medium);font-size:12px}.si-error[data-v-72bc8966]{display:flex;align-items:center;gap:6px;margin:0;color:var(--gn-color-error);font-size:13px}.si-loading[data-v-72bc8966]{display:flex;align-items:center;gap:8px;padding:16px 0}.si-spin[data-v-72bc8966]{animation:si-spin-72bc8966 1s linear infinite}@keyframes si-spin-72bc8966{to{transform:rotate(360deg)}}.share-body[data-v-5d45d058]{display:flex;flex-direction:column;gap:12px;min-width:min(420px,calc(100vw - 48px))}.share-intro[data-v-5d45d058]{margin:0;font-size:13px;line-height:1.5;color:var(--gn-color-text-medium)}.share-label[data-v-5d45d058]{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.share-link-row[data-v-5d45d058]{display:flex;align-items:center;gap:8px}.share-url[data-v-5d45d058]{flex:1;min-width:0;padding:8px 10px;border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px);background:var(--gn-surface-panel-muted, transparent);color:var(--gn-color-text-dark);font-family:var(--gn-font-mono, monospace);font-size:12px}.share-warning[data-v-5d45d058]{display:flex;gap:8px;margin:0;padding:10px 12px;border:1px solid color-mix(in srgb,var(--gn-color-warning) 40%,transparent);border-radius:var(--gn-radius-md, 8px);background:color-mix(in srgb,var(--gn-color-warning) 8%,transparent);font-size:12px;line-height:1.5;color:var(--gn-color-text-medium)}.share-warning>i[data-v-5d45d058]{flex:none;margin-top:1px;color:var(--gn-color-warning)}.share-hint[data-v-5d45d058]{margin:0;font-size:12px;color:var(--gn-color-text-light)}.share-loading[data-v-5d45d058]{display:flex;align-items:center;gap:8px;padding:8px 0;font-size:13px;color:var(--gn-color-text-medium)}.share-spin[data-v-5d45d058]{animation:share-spin-5d45d058 1s linear infinite}@keyframes share-spin-5d45d058{to{transform:rotate(360deg)}}.share-error[data-v-5d45d058]{display:flex;align-items:center;gap:6px;margin:0;font-size:13px;color:var(--gn-color-error)}.recall-info[data-v-707cd1f9]{min-width:min(420px,calc(100vw - 48px));max-height:min(70vh,640px);overflow-y:auto}.recall-info .ri-rows[data-v-707cd1f9]{max-width:none}.ri-block[data-v-707cd1f9]{margin-top:16px;padding-top:16px;border-top:1px solid var(--gn-border-color-muted)}.ri-heading[data-v-707cd1f9]{margin:0 0 6px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--gn-color-text-light)}.ri-comment[data-v-707cd1f9]{margin:0;font-size:13px;color:var(--gn-color-text-light);white-space:pre-wrap;overflow-wrap:anywhere}.ri-message[data-v-707cd1f9]{margin:0;padding:10px 12px;max-height:260px;overflow:auto;font-family:var(--gn-font-mono, monospace);font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--gn-color-text-light);background:var(--gn-surface-panel-muted, transparent);border:1px solid var(--gn-border-color-muted);border-radius:var(--gn-radius-md, 8px)}.ri-muted[data-v-707cd1f9]{margin:0;color:var(--gn-color-text-medium)}.chat-header-menu[data-v-686a3283] .dropdown-menu{left:auto;right:0;min-width:200px;transform-origin:top right}.btn-artifacts-toggle[data-v-686a3283]{position:relative}.artifact-count[data-v-686a3283]{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px;font-size:10px;line-height:1;background:var(--gn-color-secondary);color:var(--gn-color-black)}.recall-banner[data-v-686a3283]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:color-mix(in srgb,var(--gn-color-secondary) 12%,transparent);border-bottom:1px solid var(--gn-border-color-muted);font-size:12px;color:var(--gn-color-text-medium)}.recall-open[data-v-686a3283]{flex:1;display:flex;align-items:center;gap:8px;min-width:0;padding:0;background:none;border:none;font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:4px}.recall-open:hover .recall-text[data-v-686a3283]{color:var(--gn-color-text-dark)}.recall-open[data-v-686a3283]:focus-visible{outline:2px solid var(--gn-color-primary);outline-offset:2px}.recall-banner i[data-v-686a3283]{color:var(--gn-color-secondary);font-size:14px}.recall-text[data-v-686a3283]{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.recall-btn[data-v-686a3283]{background:none;border:none;color:var(--gn-color-text-dark);cursor:pointer;padding:4px 6px;font-size:15px;line-height:1;border-radius:4px;transition:color .15s,background .15s}.recall-btn[data-v-686a3283]:hover{color:var(--gn-color-text-medium);background:color-mix(in srgb,var(--gn-color-text-light) 6%,transparent)}.container[data-v-06477ddd]{padding:18px}.section[data-v-06477ddd]{margin-bottom:48px}.section-title[data-v-06477ddd],.block[data-v-06477ddd]{margin-bottom:34px}.block-title[data-v-06477ddd]{margin-bottom:22px}p[data-v-06477ddd],.text[data-v-06477ddd]{margin-bottom:15px}.hint[data-v-06477ddd]{margin-top:8px}.list[data-v-06477ddd]{padding-left:22px;margin-bottom:15px}.list-item[data-v-06477ddd]{margin-bottom:8px}.list-nested[data-v-06477ddd]{margin-top:8px}.table[data-v-06477ddd]{margin-bottom:22px}.table-caption[data-v-06477ddd]{margin-bottom:8px}.form-group[data-v-06477ddd]{margin-bottom:15px}.label[data-v-06477ddd]{margin-bottom:5px;display:block}.input[data-v-06477ddd],.textarea[data-v-06477ddd],.select[data-v-06477ddd]{margin-top:5px}.toast[data-v-06477ddd]{padding:15px}.toast-stack[data-v-06477ddd]{gap:8px}.content-card[data-v-06477ddd]{margin:8px 0;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);border-radius:6px;overflow:hidden}.content-card summary[data-v-06477ddd]{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}.content-card summary[data-v-06477ddd]::-webkit-details-marker{display:none}.content-icon[data-v-06477ddd]{font-size:20px;line-height:1;flex-shrink:0;color:var(--gn-color-text-medium)}.content-title[data-v-06477ddd]{flex:1;font-size:.9em;font-weight:500;color:var(--gn-color-text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-v-06477ddd] .badge{flex-shrink:0}.content-actions[data-v-06477ddd]{display:inline-flex;align-items:center;gap:2px}.content-actions .btn-icon[data-v-06477ddd]{width:26px;height:26px;font-size:18px;border-color:transparent}.content-chevron[data-v-06477ddd]{transition:transform .2s;color:var(--gn-color-text-dark)}.content-card[open] .content-chevron[data-v-06477ddd]{transform:rotate(180deg)}.content-body[data-v-06477ddd]{border-top:1px solid var(--gn-border-color-muted);overflow:auto}.content-iframe[data-v-06477ddd]{width:100%;height:300px;border:none;display:block}@media(min-width:768px){.content-iframe[data-v-06477ddd]{height:500px}}.content-image-wrap[data-v-06477ddd]{position:relative;min-height:160px}.content-image[data-v-06477ddd]{width:100%;max-height:60vh;object-fit:contain;cursor:zoom-in;display:block;background:var(--gn-surface-panel)}.content-image-skeleton[data-v-06477ddd]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border-bottom:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark)}.content-image-spinner[data-v-06477ddd]{animation:content-image-spin-06477ddd .9s linear infinite;font-size:22px}@keyframes content-image-spin-06477ddd{to{transform:rotate(360deg)}}.content-video[data-v-06477ddd]{width:100%;max-height:60vh;display:block;background:var(--gn-surface-panel)}.content-audio-wrap[data-v-06477ddd]{background:var(--gn-surface-panel)}.content-text[data-v-06477ddd]{max-height:500px;overflow:auto;background:var(--gn-color-black)}.content-text-note[data-v-06477ddd]{padding:8px 14px;border-top:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-dark);font-size:12px}.content-source[data-v-06477ddd]{max-height:500px;overflow:auto;background:var(--gn-color-black)}.content-source-code[data-v-06477ddd],.content-source-error[data-v-06477ddd]{margin:0;padding:14px;white-space:pre;font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.6;color:var(--gn-color-text-light)}.content-source-error[data-v-06477ddd]{color:var(--gn-color-error)}.content-source-state[data-v-06477ddd]{display:flex;align-items:center;gap:8px;padding:14px;color:var(--gn-color-text-dark);font-size:12px}.content-unknown[data-v-06477ddd]{padding:24px;text-align:center;color:var(--gn-color-text-dark);display:flex;flex-direction:column;align-items:center;gap:10px}.unknown-icon[data-v-06477ddd]{font-size:2em;line-height:1}.unknown-name[data-v-06477ddd]{font-size:.95em;font-weight:500;color:var(--gn-color-text-light);word-break:break-word;max-width:100%}.unknown-open[data-v-06477ddd]{width:auto;text-decoration:none;font-size:.9em}.card-grid[data-v-9c3e6ea0]{display:flex;flex-direction:column;gap:12px}.card-grid-title[data-v-9c3e6ea0]{font-size:1rem;font-weight:600;color:var(--gn-color-text-light)}.card-grid-items[data-v-9c3e6ea0]{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}@media(max-width:640px){.card-grid-items[data-v-9c3e6ea0]{grid-template-columns:1fr}}.card-grid-item[data-v-9c3e6ea0]{display:flex;flex-direction:column;background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border:1px solid var(--gn-border-color-muted);overflow:hidden;cursor:pointer;transition:border-color .15s,transform .1s}.card-grid-item[data-v-9c3e6ea0]:hover,.card-grid-item[data-v-9c3e6ea0]:focus{border-color:var(--gn-color-secondary);outline:none}.card-grid-item[data-v-9c3e6ea0]:active{transform:scale(.99)}.card-image[data-v-9c3e6ea0]{width:100%;height:140px;object-fit:cover;background:var(--gn-surface-panel)}.card-no-image[data-v-9c3e6ea0]{width:100%;height:140px;display:flex;align-items:center;justify-content:center;color:var(--gn-color-text-dark);font-size:2rem;background:var(--gn-surface-panel)}.card-content[data-v-9c3e6ea0]{padding:12px;display:flex;flex-direction:column;gap:8px;flex:1}.card-title[data-v-9c3e6ea0]{font-weight:600;font-size:.95rem;color:var(--gn-color-text-light);line-height:1.3}.card-subtitle[data-v-9c3e6ea0]{font-size:.8rem;color:var(--gn-color-text-dark)}.card-meta[data-v-9c3e6ea0]{display:flex;flex-wrap:wrap;gap:8px}.card-meta-item[data-v-9c3e6ea0]{display:flex;gap:4px;font-size:.75rem}.card-meta-label[data-v-9c3e6ea0]{color:var(--gn-color-text-dark)}.card-meta-value[data-v-9c3e6ea0]{color:var(--gn-color-text-light);font-weight:500}.card-description[data-v-9c3e6ea0]{font-size:.8rem;color:var(--gn-color-text-light);line-height:1.4;opacity:.85;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-grid-more[data-v-9c3e6ea0]{text-align:center;font-size:.8rem;color:var(--gn-color-text-dark)}.card-modal-image[data-v-9c3e6ea0]{width:100%;max-height:320px;object-fit:cover;background:var(--gn-surface-panel)}.card-modal-content[data-v-9c3e6ea0]{padding:20px;display:flex;flex-direction:column;gap:18px}.card-modal-title[data-v-9c3e6ea0]{margin:0;font-size:1.15rem;font-weight:600;color:var(--gn-color-text-light);text-transform:none}.card-modal-subtitle[data-v-9c3e6ea0]{color:var(--gn-color-text-dark);font-size:.9rem}.card-modal-section[data-v-9c3e6ea0]{display:flex;flex-direction:column;gap:10px}.card-modal-section-title[data-v-9c3e6ea0]{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--gn-color-text-dark)}.card-modal-meta-grid[data-v-9c3e6ea0]{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.card-modal-meta-cell[data-v-9c3e6ea0]{background:color-mix(in srgb,var(--gn-color-grey) 12%,var(--gn-surface-panel));border:1px solid var(--gn-border-color-muted);padding:10px}.card-modal-meta-label[data-v-9c3e6ea0]{font-size:.7rem;color:var(--gn-color-text-dark);margin-bottom:4px}.card-modal-meta-value[data-v-9c3e6ea0]{font-size:.9rem;color:var(--gn-color-text-light);font-weight:500}.card-modal-text[data-v-9c3e6ea0]{margin:0;line-height:1.5;color:var(--gn-color-text-light)}.card-modal-details[data-v-9c3e6ea0]{margin:0;display:grid;gap:8px}.card-modal-detail-row[data-v-9c3e6ea0]{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--gn-border-color-muted)}.card-modal-detail-row[data-v-9c3e6ea0]:last-child{border-bottom:none}.card-modal-detail-row dt[data-v-9c3e6ea0]{color:var(--gn-color-text-dark);font-size:.85rem}.card-modal-detail-row dd[data-v-9c3e6ea0]{margin:0;color:var(--gn-color-text-light);font-size:.85rem;text-align:right;word-break:break-word}.card-modal-actions[data-v-9c3e6ea0]{display:flex;gap:10px;flex-wrap:wrap}.card-modal-action[data-v-9c3e6ea0]{display:inline-flex;align-items:center;padding:8px 14px;background:color-mix(in srgb,var(--gn-color-secondary) 14%,var(--gn-surface-panel));color:var(--gn-color-secondary);text-decoration:none;font-size:.85rem;font-weight:500}.card-modal-action[data-v-9c3e6ea0]:hover{background:var(--gn-border-color-muted)}.ui-form[data-v-5c058078]{display:flex;flex-direction:column;gap:14px}.ui-form-title[data-v-5c058078]{font-size:1rem;font-weight:600;color:var(--gn-color-text-light)}.ui-form-description[data-v-5c058078]{font-size:.85rem;color:var(--gn-color-text-dark);line-height:1.4}.ui-form-fields[data-v-5c058078]{display:flex;flex-direction:column;gap:14px}.ui-form-field[data-v-5c058078]{display:flex;flex-direction:column;gap:4px}.ui-form-field.has-error .ui-form-input[data-v-5c058078]{border-color:var(--gn-color-error)}.ui-form-label[data-v-5c058078]{font-size:.85rem;font-weight:500;color:var(--gn-color-text-light)}.ui-form-required[data-v-5c058078]{color:var(--gn-color-error);margin-left:2px}.ui-form-field-hint[data-v-5c058078]{font-size:.75rem;color:var(--gn-color-text-dark)}.ui-form-input[data-v-5c058078]{padding:10px 12px;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);color:var(--gn-color-text-light);font-size:.9rem;outline:none;transition:border-color .15s}.ui-form-input[data-v-5c058078]:focus{border-color:var(--gn-color-secondary)}.ui-form-input[data-v-5c058078]::placeholder{color:var(--gn-color-text-dark)}select.ui-form-input[data-v-5c058078]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%236c7086' viewBox='0 0 256 256'%3E%3Cpath d='M213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80A8 8 0 0 1 48 88h160a8 8 0 0 1 5.66 13.66z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}select.ui-form-input[multiple][data-v-5c058078]{background-image:none;padding-right:12px;min-height:100px}.ui-form-checkbox[data-v-5c058078]{display:flex;align-items:center;gap:8px;font-size:.9rem;color:var(--gn-color-text-light);cursor:pointer}.ui-form-checkbox input[data-v-5c058078]{width:18px;height:18px;accent-color:var(--gn-color-secondary);cursor:pointer}.ui-form-error[data-v-5c058078]{font-size:.8rem;color:var(--gn-color-error)}.ui-form-submit[data-v-5c058078]{display:inline-flex;align-items:center;justify-content:center;gap:8px;align-self:flex-start;padding:10px 18px;background:var(--gn-color-secondary);color:var(--gn-surface-panel);border:none;font-size:.9rem;font-weight:600;cursor:pointer;transition:opacity .15s}.ui-form-submit[data-v-5c058078]:disabled{opacity:.5;cursor:not-allowed}.ui-form-submit[data-v-5c058078]:not(:disabled):hover{opacity:.9}.ui-form-spinner[data-v-5c058078]{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:ui-form-spin-5c058078 .8s linear infinite}@keyframes ui-form-spin-5c058078{to{transform:rotate(360deg)}}.ui-form-submitted[data-v-5c058078]{display:flex;flex-direction:column;gap:10px}.ui-form-submitted-note[data-v-5c058078]{display:flex;align-items:center;gap:6px;font-size:.85rem;color:var(--gn-color-secondary)}.ui-form-summary[data-v-5c058078]{margin:0;display:grid;gap:8px}.ui-form-summary-row[data-v-5c058078]{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--gn-border-color-muted)}.ui-form-summary-row[data-v-5c058078]:last-child{border-bottom:none}.ui-form-summary-row dt[data-v-5c058078]{color:var(--gn-color-text-dark);font-size:.85rem}.ui-form-summary-row dd[data-v-5c058078]{margin:0;color:var(--gn-color-text-light);font-size:.85rem;text-align:right;word-break:break-word}.skill-doc-section[data-v-49d14b50]{padding:12px 0;border-top:1px solid var(--gn-border-color-muted)}.skill-doc>.skill-doc-section[data-v-49d14b50]:first-child{padding-top:0;border-top:none}.skill-doc-label[data-v-49d14b50]{margin:0 0 8px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-dark)}.skill-doc-triggers[data-v-49d14b50]{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px}.skill-doc-trigger[data-v-49d14b50]{color:var(--gn-color-secondary)}.skill-doc-list[data-v-49d14b50]{margin:0;padding:0;list-style:none;display:grid;gap:6px}.skill-doc-list li[data-v-49d14b50]{display:grid;grid-template-columns:16px 1fr;gap:8px;align-items:start}.skill-doc-list i[data-v-49d14b50]{font-size:15px;line-height:1.4}.skill-doc-list.is-required i[data-v-49d14b50]{color:var(--gn-color-warning)}.skill-doc-list.is-check i[data-v-49d14b50]{color:var(--gn-color-success)}.skill-doc-steps[data-v-49d14b50]{margin:0;padding:0;list-style:none;display:grid;gap:10px}.skill-doc-steps>li[data-v-49d14b50]{display:grid;grid-template-columns:24px 1fr;gap:10px;align-items:start}.skill-doc-step-num[data-v-49d14b50]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:3px;border:1px solid var(--gn-border-color-muted);font-size:12px;font-weight:700;color:var(--gn-color-secondary)}.skill-doc-step-body[data-v-49d14b50]{min-width:0;padding-top:1px}.skill-doc-step-title[data-v-49d14b50]{font-weight:600;color:var(--gn-color-text-light)}.skill-doc-step-action[data-v-49d14b50]{margin-top:2px;color:var(--gn-color-text-medium)}.skill-doc-step-check[data-v-49d14b50]{display:flex;align-items:baseline;gap:6px;margin-top:4px;color:var(--gn-color-text-dark);font-size:12px}.skill-doc-step-check i[data-v-49d14b50]{color:var(--gn-color-success)}.skill-doc-step-body[data-v-49d14b50] p,.skill-doc-body[data-v-49d14b50] p{margin:0}.skill-doc-step-body[data-v-49d14b50] p+p,.skill-doc-body[data-v-49d14b50] p+p{margin-top:8px}.skill-doc-step-body[data-v-49d14b50] code,.skill-doc-body[data-v-49d14b50] code{padding:1px 4px;border-radius:3px;background:var(--gn-surface-panel-muted);font-family:IBM Plex Mono,monospace;font-size:12px}.skill-doc-step-body[data-v-49d14b50] ul,.skill-doc-step-body[data-v-49d14b50] ol,.skill-doc-body[data-v-49d14b50] ul,.skill-doc-body[data-v-49d14b50] ol{margin:4px 0 0;padding-left:18px}.skill-doc-hatches[data-v-49d14b50]{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:0}.skill-doc-hatches dt[data-v-49d14b50],.skill-doc-hatches dd[data-v-49d14b50]{padding:7px 0;border-top:1px solid var(--gn-border-color-muted)}.skill-doc-hatches dt[data-v-49d14b50]:nth-of-type(1),.skill-doc-hatches dt:nth-of-type(1)+dd[data-v-49d14b50]{border-top:none;padding-top:0}.skill-doc-hatches dt[data-v-49d14b50]{padding-right:12px;font-weight:600;color:var(--gn-color-text-dark)}.skill-doc-hatches dd[data-v-49d14b50]{margin:0;color:var(--gn-color-text-medium)}.skill-doc-body[data-v-49d14b50]{color:var(--gn-color-text-medium)}.skill-doc-body[data-v-49d14b50] h1,.skill-doc-body[data-v-49d14b50] h2,.skill-doc-body[data-v-49d14b50] h3,.skill-doc-body[data-v-49d14b50] h4{margin:10px 0 4px;font-size:13px;font-weight:600;color:var(--gn-color-text-light)}.skill-doc-body[data-v-49d14b50] pre{overflow-x:auto}@media(max-width:560px){.skill-doc-hatches[data-v-49d14b50]{grid-template-columns:1fr}.skill-doc-hatches dt[data-v-49d14b50]{padding-bottom:0;border-top:1px solid var(--gn-border-color-muted);padding-top:7px}.skill-doc-hatches dd[data-v-49d14b50]{border-top:none;padding-top:2px}.skill-doc-hatches dt[data-v-49d14b50]:nth-of-type(1){border-top:none;padding-top:0}}.skill-proposal[data-v-28624486]{margin:10px 0;max-width:100%;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);border-left:3px solid var(--gn-color-secondary);border-radius:6px;overflow:hidden;font-size:13px;line-height:1.5;color:var(--gn-color-text-light)}.skill-proposal.is-accepted[data-v-28624486]{border-left-color:var(--gn-color-success)}.skill-proposal.is-rejected[data-v-28624486]{border-left-color:var(--gn-color-text-dark)}.skill-proposal-loading[data-v-28624486]{display:flex;align-items:center;gap:12px;padding:16px;color:var(--gn-color-text-dark)}.skill-proposal-head[data-v-28624486]{padding:14px 16px 12px}.skill-proposal-kicker[data-v-28624486]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-secondary)}.skill-proposal-kind[data-v-28624486]{display:inline-flex;align-items:center;gap:6px;font-weight:600}.skill-proposal-area[data-v-28624486]{color:var(--gn-color-text-dark)}.skill-proposal-tags[data-v-28624486]{display:inline-flex;gap:6px;margin-left:auto;text-transform:none;letter-spacing:0}.skill-proposal-name[data-v-28624486]{margin:0;font-size:16px;font-weight:600;line-height:1.35;color:var(--gn-color-text-light)}.skill-proposal-description[data-v-28624486]{margin:6px 0 0;color:var(--gn-color-text-medium)}.skill-proposal-doc[data-v-28624486]{padding:0 16px 12px}.skill-proposal-footer[data-v-28624486]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:12px 16px;border-top:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel-muted)}.skill-proposal-decision[data-v-28624486]{display:flex;align-items:center;gap:6px;width:100%}.skill-proposal-error[data-v-28624486]{font-size:12px;color:var(--gn-color-error)}.ui-component-card[data-v-f64f3335]{margin:8px 0;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);overflow:hidden}.ui-component-header[data-v-f64f3335]{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--gn-border-color-muted);-webkit-user-select:none;user-select:none}.ui-component-icon[data-v-f64f3335]{font-size:1.2em;line-height:1}.ui-component-name[data-v-f64f3335]{flex:1;font-size:.9em;font-weight:500;color:var(--gn-color-text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ui-component-badge[data-v-f64f3335]{font-size:.7em;text-transform:uppercase;padding:2px 8px;background:color-mix(in srgb,var(--gn-color-secondary) 14%,var(--gn-surface-panel));color:var(--gn-color-secondary)}.ui-component-body[data-v-f64f3335]{padding:12px 14px}.ui-component-fallback[data-v-f64f3335]{color:var(--gn-color-text-dark)}.ui-component-fallback-title[data-v-f64f3335]{font-size:.8rem;margin-bottom:8px;font-weight:500}.ui-component-fallback-json[data-v-f64f3335]{margin:0;font-family:monospace;font-size:.8rem;white-space:pre-wrap}.stream-cursor[data-v-7b659b91]{display:inline-block;width:2px;height:1em;background:currentColor;margin-left:2px;vertical-align:text-bottom;animation:blink-7b659b91 1s step-end infinite}@keyframes blink-7b659b91{0%,to{opacity:1}50%{opacity:0}}.msg-rate-btn[data-v-7b659b91]{opacity:.55;transition:opacity .15s,color .15s}.msg-rate-btn[data-v-7b659b91]:hover{opacity:1}.msg-rate-btn.active[data-v-7b659b91]{opacity:1;color:var(--gn-color-secondary)}.compression-pending[data-v-0df68e38]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;background:var(--gn-surface-panel-strong);color:var(--gn-color-text-dark);font-size:13px}.compression-pending i[data-v-0df68e38]{font-size:16px}.synapse-event[data-v-e89b33a0]{border-left:2px solid var(--gn-color-secondary);padding:2px 0 2px 12px;opacity:.9}.synapse-event-head[data-v-e89b33a0]{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--gn-color-secondary);opacity:.85;margin-bottom:4px}.synapse-event-head i[data-v-e89b33a0]{font-size:12px}.synapse-event-type[data-v-e89b33a0]{font-family:var(--gn-font-mono, monospace);font-size:10px;padding:1px 6px;border-radius:999px;background:var(--gn-surface-panel-strong);color:var(--gn-color-text-dark)}.synapse-event-time[data-v-e89b33a0]{margin-left:auto;font-size:11px;color:var(--gn-color-text-dark)}.synapse-event-body[data-v-e89b33a0]{font-size:13px;color:var(--gn-color-text-medium);word-break:break-word}.synapse-event-body[data-v-e89b33a0] p{margin:0 0 8px}.synapse-event-body[data-v-e89b33a0] p:last-child{margin-bottom:0}.message-list-wrap[data-v-d8b83e98]{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.message-scroller[data-v-d8b83e98]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;transition:opacity .25s ease;padding-top:16px}.message-scroller.is-hidden[data-v-d8b83e98]{opacity:0;pointer-events:none}.message-row[data-v-d8b83e98]{padding-bottom:32px;width:100%;max-width:920px;margin:0 auto;padding-left:24px;padding-right:24px;content-visibility:auto;contain-intrinsic-size:auto 140px}@media(max-width:767px){.message-row[data-v-d8b83e98]{padding-left:10px;padding-right:10px}}.session-loading[data-v-d8b83e98]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:26px;color:var(--gn-color-text-medium);pointer-events:none}.session-loading .animate-spin[data-v-d8b83e98]{animation:session-spin-d8b83e98 1s linear infinite}@keyframes session-spin-d8b83e98{to{transform:rotate(360deg)}}.archive-loading[data-v-d8b83e98]{position:absolute;top:8px;left:0;right:0;z-index:5;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;font-size:13px;color:var(--gn-color-text-medium);background:transparent;pointer-events:none}.animate-spin[data-v-d8b83e98]{animation:spin-d8b83e98 1s linear infinite}@keyframes spin-d8b83e98{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.scroll-to-bottom-btn[data-v-d8b83e98]{position:absolute;bottom:16px;right:16px;width:40px;height:40px;border-radius:50%;background:var(--gn-color-secondary);color:var(--gn-color-black);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;box-shadow:0 2px 12px #0006;opacity:.9;transition:opacity .15s ease,transform .15s ease;z-index:10}.scroll-to-bottom-btn[data-v-d8b83e98]:hover{opacity:1;transform:translateY(-2px)}.scroll-btn-enter-active[data-v-d8b83e98],.scroll-btn-leave-active[data-v-d8b83e98]{transition:opacity .2s ease,transform .2s ease}.scroll-btn-enter-from[data-v-d8b83e98],.scroll-btn-leave-to[data-v-d8b83e98]{opacity:0;transform:translateY(8px)}.file-preview-image[data-v-2023088a]{position:relative}.file-preview-image .file-preview-remove[data-v-2023088a]{position:absolute;top:-4px;right:-4px;background:var(--gn-surface-panel);border:1px solid var(--gn-border-color-muted);width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:10px;cursor:pointer;color:var(--gn-color-text-dark)}.file-preview-image .file-preview-remove[data-v-2023088a]:hover{color:var(--gn-color-error)}.file-preview-image.is-processing[data-v-2023088a]{display:flex;align-items:center;justify-content:center;color:var(--gn-color-text-medium)}.file-preview-image.is-processing .ph-spin[data-v-2023088a]{animation:spin-2023088a .9s linear infinite}@keyframes spin-2023088a{to{transform:rotate(360deg)}}.sending-notice[data-v-ff9fc640]{display:flex;align-items:center;gap:6px;padding:4px 8px;font-size:12px;color:var(--gn-color-text-medium);margin-bottom:4px}.sending-notice .ph-spin[data-v-ff9fc640]{animation:sending-spin-ff9fc640 .9s linear infinite}@keyframes sending-spin-ff9fc640{to{transform:rotate(360deg)}}.reconnect-banner[data-v-04584dfa]{display:flex;align-items:center;gap:8px;margin:8px 16px 0;font-size:13px}.create-key-body[data-v-40e57301]{min-width:min(320px,100vw - 48px)}.show-token-body[data-v-cfe353f9]{min-width:min(420px,100vw - 48px)}.show-token-warning[data-v-cfe353f9]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-warning);display:flex;align-items:center;gap:6px}.show-token-warning i[data-v-cfe353f9]{font-size:1.1rem}.show-token-value[data-v-cfe353f9]{flex:1 1 0;font-family:monospace;font-size:.85rem;word-break:break-all;color:var(--gn-color-text-medium)}.api-keys-panel[data-v-ae70e1f9]{margin-bottom:24px}.api-keys-header[data-v-ae70e1f9]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.api-keys-title[data-v-ae70e1f9]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.api-keys-description[data-v-ae70e1f9]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.api-keys-warning[data-v-ae70e1f9]{margin-bottom:16px}.api-keys-warning i[data-v-ae70e1f9]{font-size:16px;flex-shrink:0}.api-keys-loading[data-v-ae70e1f9]{padding:24px;text-align:center}.api-keys-panel code[data-v-ae70e1f9]{font-family:var(--gn-font-family-base);color:var(--gn-color-text-medium)}.container[data-v-d13b8cf7]{padding:18px}.section[data-v-d13b8cf7]{margin-bottom:48px}.section-title[data-v-d13b8cf7],.block[data-v-d13b8cf7]{margin-bottom:34px}.block-title[data-v-d13b8cf7]{margin-bottom:22px}p[data-v-d13b8cf7],.text[data-v-d13b8cf7]{margin-bottom:15px}.hint[data-v-d13b8cf7]{margin-top:8px}.list[data-v-d13b8cf7]{padding-left:22px;margin-bottom:15px}.list-item[data-v-d13b8cf7]{margin-bottom:8px}.list-nested[data-v-d13b8cf7]{margin-top:8px}.table[data-v-d13b8cf7]{margin-bottom:22px}.table-caption[data-v-d13b8cf7]{margin-bottom:8px}.form-group[data-v-d13b8cf7]{margin-bottom:15px}.label[data-v-d13b8cf7]{margin-bottom:5px;display:block}.input[data-v-d13b8cf7],.textarea[data-v-d13b8cf7],.select[data-v-d13b8cf7]{margin-top:5px}.toast[data-v-d13b8cf7]{padding:15px}.toast-stack[data-v-d13b8cf7]{gap:8px}.account-language[data-v-d13b8cf7]{margin-bottom:24px}.account-language-header[data-v-d13b8cf7]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.account-language-title[data-v-d13b8cf7]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.account-language-description[data-v-d13b8cf7]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.notifications-panel[data-v-b74fdfda]{margin-bottom:24px}.notifications-title[data-v-b74fdfda]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.notifications-description[data-v-b74fdfda]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.notifications-unsupported[data-v-b74fdfda]{display:flex;align-items:flex-start;gap:8px;margin-bottom:16px}.notifications-unsupported i[data-v-b74fdfda]{font-size:16px;flex-shrink:0}.notifications-row[data-v-b74fdfda]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.notifications-row-title[data-v-b74fdfda]{font-size:.9rem;color:var(--gn-color-text-medium)}.notifications-row-status[data-v-b74fdfda]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px}.reactions-instructions[data-v-e248ff58]{padding:14px 16px;margin-bottom:12px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.reactions-row-title[data-v-e248ff58]{font-size:.9rem;color:var(--gn-color-text-medium);font-weight:500}.reactions-row-status[data-v-e248ff58]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px;max-width:420px}.reactions-instructions-textarea[data-v-e248ff58]{margin-top:10px}.reactions-instructions-actions[data-v-e248ff58]{margin-top:10px;display:flex;justify-content:flex-end}.reactions-history[data-v-e248ff58]{margin-top:14px}.reactions-history-title[data-v-e248ff58]{font-size:.85rem;font-weight:600;color:var(--gn-color-text-medium);margin-bottom:8px}.reactions-history-item[data-v-e248ff58]{padding:8px 10px;border-left:2px solid var(--gn-border-color-muted)}.reactions-history-item+.reactions-history-item[data-v-e248ff58]{margin-top:8px}.reactions-history-meta[data-v-e248ff58]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:var(--gn-color-text-dark)}.reactions-history-meta i[data-v-e248ff58]{font-size:12px}.reactions-history-text[data-v-e248ff58]{margin-top:4px;font-size:.8rem;color:var(--gn-color-text-medium);white-space:pre-wrap;word-break:break-word}.reactions-panel[data-v-bcaf624e]{margin-bottom:24px}.reactions-title[data-v-bcaf624e]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.reactions-description[data-v-bcaf624e]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.reactions-alert[data-v-bcaf624e]{display:flex;align-items:flex-start;gap:8px;margin-bottom:16px}.reactions-alert i[data-v-bcaf624e]{font-size:16px;flex-shrink:0}.reactions-loading[data-v-bcaf624e]{padding:24px;text-align:center}.reactions-row[data-v-bcaf624e]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:14px 16px;margin-bottom:12px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.reactions-row-title[data-v-bcaf624e]{font-size:.9rem;color:var(--gn-color-text-medium);font-weight:500}.reactions-row-status[data-v-bcaf624e]{font-size:.8rem;color:var(--gn-color-text-dark);margin-top:2px;max-width:420px}.reactions-ttl-input[data-v-bcaf624e]{width:90px;flex:0 0 auto}.create-target-body[data-v-a46fb717]{min-width:min(360px,100vw - 48px);display:flex;flex-direction:column;gap:15px}.create-target-hint[data-v-a46fb717]{margin:0;font-size:.8125rem;color:var(--gn-color-text-medium)}.create-target-hint code[data-v-a46fb717]{font-family:var(--gn-font-family-base)}.container[data-v-fa4b73ef]{padding:18px}.section[data-v-fa4b73ef]{margin-bottom:48px}.section-title[data-v-fa4b73ef],.block[data-v-fa4b73ef]{margin-bottom:34px}.block-title[data-v-fa4b73ef]{margin-bottom:22px}p[data-v-fa4b73ef],.text[data-v-fa4b73ef]{margin-bottom:15px}.hint[data-v-fa4b73ef]{margin-top:8px}.list[data-v-fa4b73ef]{padding-left:22px;margin-bottom:15px}.list-item[data-v-fa4b73ef]{margin-bottom:8px}.list-nested[data-v-fa4b73ef]{margin-top:8px}.table[data-v-fa4b73ef]{margin-bottom:22px}.table-caption[data-v-fa4b73ef]{margin-bottom:8px}.form-group[data-v-fa4b73ef]{margin-bottom:15px}.label[data-v-fa4b73ef]{margin-bottom:5px;display:block}.input[data-v-fa4b73ef],.textarea[data-v-fa4b73ef],.select[data-v-fa4b73ef]{margin-top:5px}.toast[data-v-fa4b73ef]{padding:15px}.toast-stack[data-v-fa4b73ef]{gap:8px}.synapse-panel[data-v-fa4b73ef]{margin-bottom:24px}.synapse-header[data-v-fa4b73ef]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.synapse-title[data-v-fa4b73ef]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.synapse-description[data-v-fa4b73ef]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.synapse-loading[data-v-fa4b73ef]{padding:24px;text-align:center}.container[data-v-70dfa94e]{padding:18px}.section[data-v-70dfa94e]{margin-bottom:48px}.section-title[data-v-70dfa94e],.block[data-v-70dfa94e]{margin-bottom:34px}.block-title[data-v-70dfa94e]{margin-bottom:22px}p[data-v-70dfa94e],.text[data-v-70dfa94e]{margin-bottom:15px}.hint[data-v-70dfa94e]{margin-top:8px}.list[data-v-70dfa94e]{padding-left:22px;margin-bottom:15px}.list-item[data-v-70dfa94e]{margin-bottom:8px}.list-nested[data-v-70dfa94e]{margin-top:8px}.table[data-v-70dfa94e]{margin-bottom:22px}.table-caption[data-v-70dfa94e]{margin-bottom:8px}.form-group[data-v-70dfa94e]{margin-bottom:15px}.label[data-v-70dfa94e]{margin-bottom:5px;display:block}.input[data-v-70dfa94e],.textarea[data-v-70dfa94e],.select[data-v-70dfa94e]{margin-top:5px}.toast[data-v-70dfa94e]{padding:15px}.toast-stack[data-v-70dfa94e]{gap:8px}.catalog-panel[data-v-70dfa94e]{display:flex;flex-direction:column;gap:15px;min-height:0}.catalog-header[data-v-70dfa94e]{display:flex;flex-direction:column;gap:4px}.catalog-title[data-v-70dfa94e]{margin:0;font-size:1.05rem;font-weight:600;color:var(--gn-color-text-light)}.catalog-hint[data-v-70dfa94e]{margin:0;max-width:70ch;font-size:.85rem;color:var(--gn-color-text-medium)}.catalog-alert[data-v-70dfa94e]{margin:0}.catalog-layout[data-v-70dfa94e]{display:grid;grid-template-columns:minmax(240px,320px) minmax(0,1fr);gap:15px;align-items:start}@media(max-width:767px){.catalog-layout[data-v-70dfa94e]{grid-template-columns:1fr}.catalog-layout .catalog-detail[data-v-70dfa94e],.catalog-layout.is-detail-open .catalog-list-pane[data-v-70dfa94e]{display:none}.catalog-layout.is-detail-open .catalog-detail[data-v-70dfa94e]{display:flex}}.catalog-pane[data-v-70dfa94e]{min-width:0;border:1px solid var(--gn-border-color-muted);border-radius:6px;background:var(--gn-surface-panel)}.catalog-list-pane[data-v-70dfa94e]{display:flex;flex-direction:column;min-height:0}.catalog-list-head[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;padding:8px;border-bottom:1px solid var(--gn-border-color-muted)}.catalog-list-head[data-v-70dfa94e] .form-group{margin-bottom:0}.catalog-filters[data-v-70dfa94e]{display:flex;align-items:center;gap:8px}.catalog-area[data-v-70dfa94e]{flex:1 1 auto;min-width:0}.catalog-add[data-v-70dfa94e]{flex:none}.catalog-count[data-v-70dfa94e]{margin:0;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--gn-color-text-dark)}.catalog-list[data-v-70dfa94e]{display:flex;flex-direction:column;gap:2px;min-width:0;padding:5px;max-height:60vh;overflow-y:auto}.catalog-loading[data-v-70dfa94e]{padding:24px;text-align:center}.catalog-empty[data-v-70dfa94e]{display:flex;flex-direction:column;align-items:center;gap:10px;padding:28px 16px;border:1px dashed var(--gn-border-color-muted);border-radius:6px;text-align:center}.catalog-empty i[data-v-70dfa94e]{font-size:1.75rem;color:var(--gn-color-text-dark)}.catalog-empty p[data-v-70dfa94e]{margin:0;font-size:.85rem;color:var(--gn-color-text-medium)}.catalog-row[data-v-70dfa94e]{display:flex;align-items:center;gap:5px;width:100%;min-width:0;padding:7px 8px;border:1px solid transparent;border-radius:3px;background:none;color:inherit;text-align:left;cursor:pointer;font:inherit}.catalog-row[data-v-70dfa94e]:hover{background:var(--gn-surface-panel-muted);border-color:var(--gn-border-color-muted)}.catalog-row[data-v-70dfa94e]:focus-visible{outline:2px solid var(--gn-focus-outline-color);outline-offset:-2px}.catalog-row.is-active[data-v-70dfa94e]{background:var(--gn-surface-panel-muted);border-color:var(--gn-border-color-base)}.catalog-row-main[data-v-70dfa94e]{display:flex;flex-direction:column;gap:1px;flex:1 1 auto;min-width:0}.catalog-row-open[data-v-70dfa94e]{flex:none;font-size:.8rem;color:var(--gn-color-text-dark)}.catalog-row.is-active .catalog-row-open[data-v-70dfa94e]{color:var(--gn-color-primary)}.catalog-row-head[data-v-70dfa94e]{display:flex;align-items:baseline;justify-content:space-between;gap:5px}.catalog-row-name[data-v-70dfa94e]{font-size:.875rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catalog-row-version[data-v-70dfa94e]{flex:none;font-size:.7rem;color:var(--gn-color-text-dark)}.catalog-row-meta[data-v-70dfa94e]{font-size:.72rem;color:var(--gn-color-text-dark)}.catalog-row-description[data-v-70dfa94e]{font-size:.78rem;color:var(--gn-color-text-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catalog-detail[data-v-70dfa94e]{display:flex;flex-direction:column;min-width:0;min-height:320px}.catalog-back[data-v-70dfa94e]{display:none;align-items:center;gap:6px;padding:8px 8px 0;border:none;background:none;color:var(--gn-color-text-medium);font:inherit;font-size:.85rem;cursor:pointer}@media(max-width:767px){.catalog-back[data-v-70dfa94e]{display:inline-flex}}.catalog-detail-head[data-v-70dfa94e]{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:8px 15px;border-bottom:1px solid var(--gn-border-color-muted)}.catalog-detail-body[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;padding:15px}.catalog-detail-body[data-v-70dfa94e] .form-group{width:100%;max-width:none}.catalog-detail-loading[data-v-70dfa94e]{align-items:center;justify-content:center}.catalog-detail-title[data-v-70dfa94e]{display:flex;align-items:baseline;gap:6px;min-width:0}.catalog-detail-title h3[data-v-70dfa94e]{margin:0;font-size:1rem;font-weight:600;overflow-wrap:anywhere}.catalog-detail-version[data-v-70dfa94e]{font-size:.75rem;color:var(--gn-color-text-dark)}.catalog-detail-actions[data-v-70dfa94e]{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.catalog-description[data-v-70dfa94e]{margin:0;max-width:72ch;font-size:.875rem;color:var(--gn-color-text-medium)}.catalog-meta[data-v-70dfa94e]{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;font-size:.75rem;color:var(--gn-color-text-dark)}.catalog-readonly[data-v-70dfa94e]{color:var(--gn-color-text-dark);font-style:italic}.catalog-tags[data-v-70dfa94e]{display:inline-flex;align-items:center;gap:4px}.catalog-document[data-v-70dfa94e]{max-width:72ch;padding-top:5px}.catalog-parse-error[data-v-70dfa94e]{margin:0}.catalog-raw[data-v-70dfa94e],.catalog-history-text[data-v-70dfa94e]{margin:0;max-height:320px;overflow:auto;padding:10px 12px;border:1px solid var(--gn-border-color-muted);border-radius:6px;background:var(--gn-surface-panel-muted);font-family:var(--gn-font-mono, monospace);font-size:.75rem;white-space:pre-wrap;overflow-wrap:anywhere}.catalog-detail[data-v-70dfa94e] textarea.catalog-textarea{width:100%;height:auto;min-height:320px;resize:vertical;font-family:var(--gn-font-mono, monospace);font-size:.8rem;line-height:1.5}.catalog-editor-actions[data-v-70dfa94e]{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.catalog-editor-actions[data-v-70dfa94e] .form-group{margin-bottom:0}.catalog-visibility[data-v-70dfa94e]{flex:0 0 180px}.catalog-editor-buttons[data-v-70dfa94e]{display:flex;gap:5px;flex-wrap:wrap}.catalog-history[data-v-70dfa94e]{border-top:1px solid var(--gn-border-color-muted);padding-top:8px}.catalog-history-toggle[data-v-70dfa94e]{display:inline-flex;align-items:center;gap:6px;padding:0;border:none;background:none;color:var(--gn-color-text-medium);font:inherit;font-size:.85rem;cursor:pointer}.catalog-history-list[data-v-70dfa94e]{display:flex;flex-direction:column;gap:8px;margin-top:8px}.catalog-history-empty[data-v-70dfa94e]{font-size:.85rem;color:var(--gn-color-text-dark)}.catalog-history-item[data-v-70dfa94e]{border:1px solid var(--gn-border-color-muted);border-radius:6px;padding:8px 10px}.catalog-history-meta[data-v-70dfa94e]{margin-bottom:6px;font-size:.78rem;color:var(--gn-color-text-dark)}.catalog-history-text[data-v-70dfa94e]{max-height:220px}.catalog-placeholder[data-v-70dfa94e]{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:260px;padding:15px;text-align:center;color:var(--gn-color-text-dark)}.catalog-placeholder i[data-v-70dfa94e]{font-size:2rem}.catalog-placeholder p[data-v-70dfa94e]{margin:0;max-width:44ch;font-size:.85rem}.container[data-v-057ef768]{padding:18px}.section[data-v-057ef768]{margin-bottom:48px}.section-title[data-v-057ef768],.block[data-v-057ef768]{margin-bottom:34px}.block-title[data-v-057ef768]{margin-bottom:22px}p[data-v-057ef768],.text[data-v-057ef768]{margin-bottom:15px}.hint[data-v-057ef768]{margin-top:8px}.list[data-v-057ef768]{padding-left:22px;margin-bottom:15px}.list-item[data-v-057ef768]{margin-bottom:8px}.list-nested[data-v-057ef768]{margin-top:8px}.table[data-v-057ef768]{margin-bottom:22px}.table-caption[data-v-057ef768]{margin-bottom:8px}.form-group[data-v-057ef768]{margin-bottom:15px}.label[data-v-057ef768]{margin-bottom:5px;display:block}.input[data-v-057ef768],.textarea[data-v-057ef768],.select[data-v-057ef768]{margin-top:5px}.toast[data-v-057ef768]{padding:15px}.toast-stack[data-v-057ef768]{gap:8px}.mcp-keys-panel[data-v-057ef768]{margin-bottom:24px}.mcp-keys-header[data-v-057ef768]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.mcp-keys-title[data-v-057ef768]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.mcp-keys-description[data-v-057ef768]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.mcp-keys-loading[data-v-057ef768]{padding:24px;text-align:center}.mcp-keys-empty[data-v-057ef768]{display:flex;flex-direction:column;align-items:center;gap:10px;padding:32px 24px;border:1px dashed var(--gn-color-border);border-radius:var(--gn-radius-md);text-align:center}.mcp-keys-empty .empty-icon[data-v-057ef768]{font-size:2rem;color:var(--gn-color-text-dimmed)}.mcp-keys-empty p[data-v-057ef768]{margin:0;max-width:52ch;font-size:.875rem;color:var(--gn-color-text-medium)}.mcp-keys-rows[data-v-057ef768]{display:flex;flex-direction:column;gap:12px}.mcp-keys-row[data-v-057ef768]{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--gn-color-border);border-radius:var(--gn-radius-md)}.mcp-keys-row.is-keyless[data-v-057ef768]{border-color:var(--gn-border-color-muted);background:var(--gn-surface-panel-muted, transparent)}.mcp-keys-info[data-v-057ef768]{flex:1 1 240px;min-width:0}.mcp-keys-server[data-v-057ef768]{font-size:.9rem;color:var(--gn-color-text-medium)}.mcp-keys-where[data-v-057ef768]{margin-top:2px;font-size:.8rem;color:var(--gn-color-text-dark)}.mcp-keys-slot[data-v-057ef768],.mcp-keys-noslot[data-v-057ef768]{margin-top:4px;font-size:.8rem;color:var(--gn-color-text-dimmed)}.mcp-keys-noslot[data-v-057ef768]{color:var(--gn-color-text-dimmed);opacity:.75}.mcp-keys-input[data-v-057ef768]{flex:0 1 260px}.mcp-keys-actions[data-v-057ef768]{display:flex;align-items:center;gap:8px;flex-shrink:0}@media(max-width:767px){.mcp-keys-row[data-v-057ef768]{flex-direction:column;align-items:stretch}.mcp-keys-info[data-v-057ef768]{flex:0 0 auto}.mcp-keys-row[data-v-057ef768] .form-group{margin-bottom:0}.mcp-keys-input[data-v-057ef768]{flex:1 1 auto}}.container[data-v-07c32b63]{padding:18px}.section[data-v-07c32b63]{margin-bottom:48px}.section-title[data-v-07c32b63],.block[data-v-07c32b63]{margin-bottom:34px}.block-title[data-v-07c32b63]{margin-bottom:22px}p[data-v-07c32b63],.text[data-v-07c32b63]{margin-bottom:15px}.hint[data-v-07c32b63]{margin-top:8px}.list[data-v-07c32b63]{padding-left:22px;margin-bottom:15px}.list-item[data-v-07c32b63]{margin-bottom:8px}.list-nested[data-v-07c32b63]{margin-top:8px}.table[data-v-07c32b63]{margin-bottom:22px}.table-caption[data-v-07c32b63]{margin-bottom:8px}.form-group[data-v-07c32b63]{margin-bottom:15px}.label[data-v-07c32b63]{margin-bottom:5px;display:block}.input[data-v-07c32b63],.textarea[data-v-07c32b63],.select[data-v-07c32b63]{margin-top:5px}.toast[data-v-07c32b63]{padding:15px}.toast-stack[data-v-07c32b63]{gap:8px}.admin-tools-panel[data-v-07c32b63]{margin-bottom:24px}.admin-tools-header[data-v-07c32b63]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.admin-tools-title[data-v-07c32b63]{font-size:1.1rem;font-weight:600;margin:0;color:var(--gn-color-text-medium)}.admin-tools-description[data-v-07c32b63]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.admin-tools-description code[data-v-07c32b63]{font-size:.8rem}.admin-tools-report[data-v-07c32b63]{display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--gn-color-border);border-radius:var(--gn-radius-md);font-size:.85rem;color:var(--gn-color-text-medium)}.admin-tools-report.has-problems[data-v-07c32b63]{border-color:var(--gn-color-danger, var(--gn-color-border))}.admin-tools-line[data-v-07c32b63]{display:flex;align-items:flex-start;gap:8px}.admin-tools-line i[data-v-07c32b63]{flex-shrink:0;margin-top:2px}.admin-tools-line.is-warning i[data-v-07c32b63]{color:var(--gn-color-warning, inherit)}.admin-tools-line.is-error i[data-v-07c32b63]{color:var(--gn-color-danger, inherit)}.admin-tools-line code[data-v-07c32b63]{font-size:.8rem}.admin-tools-total[data-v-07c32b63]{color:var(--gn-color-text-dimmed)}.app-panel[data-v-15c4797f]{max-width:720px;margin-bottom:24px}.app-title[data-v-15c4797f]{font-size:1.1rem;font-weight:600;margin:0 0 12px;color:var(--gn-color-text-medium)}.app-description[data-v-15c4797f]{margin:0 0 16px;font-size:.875rem;color:var(--gn-color-text-medium)}.app-card[data-v-15c4797f]{padding:14px 16px;margin-bottom:16px;border:1px solid var(--gn-border-color-muted);border-radius:8px}.app-card-title[data-v-15c4797f]{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:.9rem;font-weight:600;color:var(--gn-color-text-medium)}.app-text[data-v-15c4797f]{margin:0 0 12px;font-size:.875rem;color:var(--gn-color-text-medium)}.app-alert[data-v-15c4797f]{display:flex;align-items:flex-start;gap:8px}.app-alert i[data-v-15c4797f]{font-size:16px;flex-shrink:0}.app-action[data-v-15c4797f]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.app-hint[data-v-15c4797f]{margin:0;font-size:.8rem;color:var(--gn-color-text-dark)}.app-steps[data-v-15c4797f]{margin:0;padding-left:18px;font-size:.8rem;color:var(--gn-color-text-medium)}.app-steps li+li[data-v-15c4797f]{margin-top:6px}.app-steps code[data-v-15c4797f]{font-size:.75rem;padding:1px 4px;border-radius:4px;background:var(--gn-color-surface-sunken, rgba(127, 127, 127, .12))}.app-steps-install[data-v-15c4797f]{margin-top:14px}.app-meta[data-v-15c4797f]{margin:0 0 14px;font-size:.8rem;color:var(--gn-color-text-dark)}.app-meta>div[data-v-15c4797f]{display:flex;gap:8px}.app-meta dt[data-v-15c4797f]{min-width:64px;color:var(--gn-color-text-medium)}.app-meta dd[data-v-15c4797f]{margin:0}.app-meta-sha code[data-v-15c4797f]{font-size:.7rem;word-break:break-all}.container[data-v-0ea8be77]{padding:18px}.section[data-v-0ea8be77]{margin-bottom:48px}.section-title[data-v-0ea8be77],.block[data-v-0ea8be77]{margin-bottom:34px}.block-title[data-v-0ea8be77]{margin-bottom:22px}p[data-v-0ea8be77],.text[data-v-0ea8be77]{margin-bottom:15px}.hint[data-v-0ea8be77]{margin-top:8px}.list[data-v-0ea8be77]{padding-left:22px;margin-bottom:15px}.list-item[data-v-0ea8be77]{margin-bottom:8px}.list-nested[data-v-0ea8be77]{margin-top:8px}.table[data-v-0ea8be77]{margin-bottom:22px}.table-caption[data-v-0ea8be77]{margin-bottom:8px}.form-group[data-v-0ea8be77]{margin-bottom:15px}.label[data-v-0ea8be77]{margin-bottom:5px;display:block}.input[data-v-0ea8be77],.textarea[data-v-0ea8be77],.select[data-v-0ea8be77]{margin-top:5px}.toast[data-v-0ea8be77]{padding:15px}.toast-stack[data-v-0ea8be77]{gap:8px}.settings-view[data-v-0ea8be77]{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column;overflow:hidden}.settings-tabs[data-v-0ea8be77]{flex-direction:column;flex-wrap:nowrap;align-items:stretch;width:100%;max-width:1200px;flex:1 1 0;min-height:0;padding:8px 15px 0;margin-bottom:0}.settings-tabs[data-v-0ea8be77] .tabs-list{width:100%;max-width:none}.settings-tabs[data-v-0ea8be77] .tabs-panels{flex:1 1 0;min-height:0;overflow-y:auto;padding:15px 15px 34px}@media(max-width:767px){.settings-tabs[data-v-0ea8be77] .tabs-panels{padding:8px 8px 22px}}@media(max-width:767px){.settings-tabs[data-v-0ea8be77]{padding-left:8px;padding-right:8px}}.shared-shell[data-v-bab2a59b]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;min-width:0;background:var(--gn-surface-base);color:var(--gn-color-text)}.shared-header[data-v-bab2a59b]{display:flex;align-items:flex-start;gap:16px;padding:16px 24px;border-bottom:1px solid var(--gn-border-color-muted);background:var(--gn-surface-panel)}.shared-heading[data-v-bab2a59b]{flex:1 1 auto;min-width:0}.shared-title[data-v-bab2a59b]{margin:0;font-size:1.05rem;font-weight:600;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shared-meta[data-v-bab2a59b]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:6px;font-size:.8rem;color:var(--gn-color-text-light)}.shared-profile[data-v-bab2a59b]{font-weight:500}.shared-badge[data-v-bab2a59b]{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border:1px solid var(--gn-border-color-muted);border-radius:999px;font-size:.75rem}.shared-brand[data-v-bab2a59b]{flex:0 0 auto;font-weight:700;letter-spacing:.02em;color:var(--gn-color-text-light);-webkit-user-select:none;user-select:none}.shared-scroller[data-v-bab2a59b]{flex:1 1 auto;min-height:0;overflow-y:auto;padding:20px 24px 40px}.shared-row[data-v-bab2a59b]{width:100%;max-width:900px;margin:0 auto}.shared-load-older[data-v-bab2a59b]{display:flex;align-items:center;gap:8px;margin:0 auto 18px;padding:7px 16px;border:1px solid var(--gn-border-color-muted);border-radius:999px;background:var(--gn-surface-panel);color:var(--gn-color-text-light);font-size:.82rem;cursor:pointer}.shared-load-older[data-v-bab2a59b]:disabled{cursor:default;opacity:.6}.shared-loading[data-v-bab2a59b]{display:flex;flex:1 1 auto;align-items:center;justify-content:center;font-size:1.6rem;color:var(--gn-color-text-light)}.shared-error[data-v-bab2a59b]{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;text-align:center;color:var(--gn-color-text-light)}.shared-error>i[data-v-bab2a59b]{font-size:2rem}.shared-error-title[data-v-bab2a59b]{margin:4px 0 0;font-weight:600;color:var(--gn-color-text)}.shared-error-text[data-v-bab2a59b]{margin:0;max-width:420px;font-size:.9rem}.shared-empty[data-v-bab2a59b]{margin:40px auto;text-align:center;color:var(--gn-color-text-light)}.shared-footer[data-v-bab2a59b]{flex:0 0 auto;padding:10px 24px;border-top:1px solid var(--gn-border-color-muted);font-size:.75rem;text-align:center;color:var(--gn-color-text-light)}@media(max-width:640px){.shared-header[data-v-bab2a59b]{padding:12px 16px}.shared-scroller[data-v-bab2a59b]{padding:14px 16px 32px}.shared-brand[data-v-bab2a59b]{display:none}}.app-shell[data-v-189a26a8]{display:flex;flex:1 1 0;min-height:0;min-width:0;overflow:hidden}.load-error-banner[data-v-189a26a8]{display:flex;align-items:center;gap:8px;flex-shrink:0;padding:8px 16px;font-size:13px;color:var(--gn-color-text-light);background:var(--gn-color-dark);border-bottom:1px solid var(--gn-border-color-muted)}.load-error-text[data-v-189a26a8]{flex:1;min-width:0;overflow-wrap:anywhere}.load-error-retry[data-v-189a26a8],.load-error-dismiss[data-v-189a26a8]{flex-shrink:0;border:none;border-radius:6px;padding:4px 10px;font-size:12px;font-weight:600;cursor:pointer;color:var(--gn-color-black);background:var(--gn-color-secondary)}.load-error-dismiss[data-v-189a26a8]{padding:4px 8px;color:var(--gn-color-text-light);background:transparent}.sidebar-backdrop[data-v-189a26a8]{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:99}@media(max-width:1279.98px){.sidebar-backdrop[data-v-189a26a8]{display:block}}.artifacts-backdrop[data-v-189a26a8]{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:119}@media(max-width:980px){.artifacts-backdrop[data-v-189a26a8]{display:block}}.backdrop-fade-enter-active[data-v-189a26a8],.backdrop-fade-leave-active[data-v-189a26a8]{transition:opacity .18s ease}.backdrop-fade-enter-from[data-v-189a26a8],.backdrop-fade-leave-to[data-v-189a26a8]{opacity:0}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Regular-BF3vfe7_.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Medium-COFd06Dj.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-SemiBold-D0J2bq8P.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Bold-Ovd3DSUS.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/IBMPlexMono-Italic-DgAgaWWu.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}.text,p{margin-bottom:15px}.input,.select,.textarea{margin-top:5px}html{font-size:100%}body{font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:400;line-height:1.6;letter-spacing:0;color:#c0caf5}h1,h2,h3,h4,h5,h6{font-family:IBM Plex Mono,monospace;font-weight:600;line-height:1.25;margin:0}h1.contrast,h2.contrast,h3.contrast,h4.contrast,h5.contrast,h6.contrast{background:#c0caf5;color:#16161e;display:inline;padding:0 8px;border-radius:3px}h1{font-size:30px;letter-spacing:0}h2{font-size:23px}h3{font-size:20px}h4{font-size:18px}h5{font-size:16px}h6{font-size:15px;font-weight:500}.text,p{font-size:14px;line-height:1.6}.text-sm{font-size:13px;line-height:1.4}.text-lg{font-size:15px;line-height:1.6}.text-lead{max-width:760px;color:#c0caf5;font-size:15px;font-weight:500;line-height:1.6}.text-muted{font-size:13px;color:#787c99}.text-strong,strong{font-weight:600}.text-bold{font-weight:700}.text-italic,em{font-style:italic}.text-success{color:#9ece6a}.text-warning{color:#e0af68}.text-danger,.text-error{color:#f7768e}.text-info{color:#bb9af7}.eyebrow{display:inline-flex;width:-moz-max-content;width:max-content;max-width:100%;padding:5px 8px;color:#16161e;background:#7aa2f7;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.caption{color:#787c99;font-size:12px;line-height:1.4}.code,code,pre{font-family:IBM Plex Mono,monospace;font-size:14px;line-height:1.4;border-radius:3px;background-color:#1f2335}.text-primary{color:#c0caf5}.text-secondary{color:#a9b1d6}pre{font-size:14px;line-height:1.6;white-space:pre-wrap}.code,pre code{-o-tab-size:2;tab-size:2;-moz-tab-size:2}.code{display:inline-flex;padding:0 5px;color:#7aa2f7;border:2px solid rgba(122,162,247,.24)}.kbd{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;border:2px solid rgba(192,202,245,.24);border-bottom-color:#7aa2f7;border-radius:3px;color:#c0caf5;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.quote{max-width:760px;margin:0;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;color:#a9b1d6;background:#1f2335;font-size:14px;line-height:1.6}.quote cite{display:block;margin-top:12px;color:#7aa2f7;font-size:13px;font-style:normal;text-transform:uppercase}a{font-weight:500;text-decoration:none;color:#7aa2f7}@media(hover:hover)and (pointer:fine){a:hover{color:#e0af68}}@media(hover:none)and (pointer:coarse){a:active{color:#e0af68}}.link{font-size:inherit;font-weight:500}.label{font-size:13px;font-weight:500;line-height:1.4}.hint,.meta{font-size:12px;line-height:1.4}.table{font-size:13px;line-height:1.4}.table th{font-weight:600}.table td{font-weight:400}.list{font-size:14px;line-height:1.6}.list-item{font-size:inherit}.modal-title{font-size:18px;font-weight:600}.modal-body{font-size:14px}.toast-title{font-size:14px;font-weight:600}.toast-text{font-size:13px;line-height:1.4}:root{--gn-color-black:#16161E;--gn-color-dark:#1F2335;--gn-color-grey:#414868;--gn-color-text-light:#C0CAF5;--gn-color-text-medium:#A9B1D6;--gn-color-text-dark:#787C99;--gn-color-primary:#C0CAF5;--gn-color-secondary:#7AA2F7;--gn-color-accent:#FF9E64;--gn-color-success:#9ECE6A;--gn-color-warning:#E0AF68;--gn-color-error:#F7768E;--gn-color-info:#BB9AF7;--gn-surface-page:#16161E;--gn-surface-panel:#1F2335;--gn-surface-panel-muted:#1F2335;--gn-surface-panel-strong:rgba(192, 202, 245, .085);--gn-border-width-base:2px;--gn-border-width-accent:6px;--gn-border-width-choice:3px;--gn-border-style-base:solid;--gn-border-color-base:#C0CAF5;--gn-border-color-muted:rgba(192, 202, 245, .24);--gn-focus-outline-width:2px;--gn-focus-outline-offset:3px;--gn-focus-outline-color:#E0AF68;--gn-motion-fast:.15s;--gn-motion-base:.2s;--gn-motion-slow:.28s;--gn-motion-ease:ease;--gn-font-family-base:IBM Plex Mono,monospace;--gn-font-weight-regular:400;--gn-font-weight-medium:500;--gn-font-weight-semibold:600;--gn-font-weight-bold:700;--gn-font-size-xs:12px;--gn-font-size-sm:13px;--gn-font-size-md:14px;--gn-font-size-base:14px;--gn-font-size-lg:15px;--gn-font-size-xl:18px;--gn-line-height-tight:1.15;--gn-line-height-normal:1.4;--gn-line-height-relaxed:1.6;--gn-space-0:0;--gn-space-1:5px;--gn-space-2:8px;--gn-space-3:12px;--gn-space-4:15px;--gn-space-5:18px;--gn-space-6:22px;--gn-space-7:26px;--gn-space-8:34px;--gn-space-9:42px;--gn-space-10:48px;--gn-space-11:64px;--gn-space-12:80px}@keyframes terminal_scan_x{0%{transform:translate(-120%)}to{transform:translate(220%)}}@keyframes terminal_scan_y{0%{transform:translateY(-120%)}to{transform:translateY(220%)}}@keyframes terminal_pulse{0%,to{box-shadow:0 0 #c0caf500}50%{box-shadow:0 0 0 4px #c0caf52e}}@keyframes panel_boot{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes overlay_reveal{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes tooltip_reveal{0%{opacity:0;transform:translate(-50%) translateY(5px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){*,:after,:before{animation-duration:0s!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:0s!important}}.palette{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.palette .color .color-box{width:92px;height:68px;border-radius:3px}body .bg-primary{background:#c0caf5}body .bg-secondary{background:#7aa2f7}body .bg-success{background:#9ece6a}body .bg-accent{background:#ff9e64}body .bg-info{background:#bb9af7}body .bg-warning{background:#e0af68}body .bg-error{background:#f7768e}body .text-color-primary{color:#c0caf5}body .text-color-secondary{color:#7aa2f7}body .text-color-success{color:#9ece6a}body .text-color-accent{color:#ff9e64}body .text-color-info{color:#bb9af7}body .text-color-warning{color:#e0af68}body .text-color-error{color:#f7768e}.loader{width:32px;aspect-ratio:1;--c:no-repeat linear-gradient(#FF3C00 0 0);background:var(--c) 0 0,var(--c) 0 100%,var(--c) 50% 0,var(--c) 50% 100%,var(--c) 100% 0,var(--c) 100% 100%;animation:l12 1s infinite}@keyframes l12{0%,to{background-size:20% 50%}16.67%{background-size:20% 30%,20% 30%,20% 50%,20% 50%,20% 50%,20% 50%}33.33%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 50%,20% 50%}50%{background-size:20% 30%,20% 30%,20% 30%,20% 30%,20% 30%,20% 30%}66.67%{background-size:20% 50%,20% 50%,20% 30%,20% 30%,20% 30%,20% 30%}83.33%{background-size:20% 50%,20% 50%,20% 50%,20% 50%,20% 30%,20% 30%}}.circle-loader{display:flex;flex-direction:row;align-items:center;gap:8px}.circle-loader .ph,.circle-loader .ph-bold{font-size:26px;transform-origin:50% 50%;animation:icon_spin 1.2s linear infinite}.progress{display:flex;flex-direction:column;gap:8px;width:100%;max-width:640px}.progress .progress-header{display:flex;align-items:center;justify-content:space-between;gap:12px;color:#a9b1d6;font-size:13px;font-weight:600;text-transform:uppercase}.progress .progress-value{color:#c0caf5;font-family:IBM Plex Mono,monospace}.progress .progress-track{position:relative;width:100%;height:18px;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-radius:3px;background:#1f2335}.progress .progress-bar{display:block;position:relative;overflow:hidden;width:var(--progress-value,0%);height:100%;background:#7aa2f7;transition:width .28s ease}.progress.progress-success .progress-bar{background:#9ece6a}.progress.progress-warning .progress-bar{background:#e0af68}.progress.progress-danger .progress-bar,.progress.progress-error .progress-bar{background:#f7768e}.progress.progress-striped .progress-bar{background-image:repeating-linear-gradient(90deg,transparent 0,transparent 14px,rgba(22,22,30,.2) 14px,rgba(22,22,30,.2) 16px)}.progress.progress-animated .progress-bar:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;width:48%;background:linear-gradient(90deg,transparent,rgba(192,202,245,.28),transparent);transform:translate(-120%);animation:progress_scan 1.4s ease infinite}.usage-meter{display:grid;gap:12px;width:100%;max-width:420px;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.usage-meter .usage-meter-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;font-size:15px;font-weight:700;line-height:1;text-transform:uppercase}.usage-meter .usage-meter-value{color:#7aa2f7;font-family:IBM Plex Mono,monospace;font-size:13px}.usage-meter .usage-meter-meta{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.progress-stages{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;width:100%;max-width:720px}.progress-stages .progress-stage{min-height:42px;padding:8px 12px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#787c99;background:#1f2335;font-size:13px;font-weight:600;line-height:1.4;text-transform:uppercase}.progress-stages .progress-stage-complete{color:#16161e;background:#9ece6a;border-color:#9ece6a}.progress-stages .progress-stage-current{color:#16161e;background:#e0af68;border-color:#e0af68}@media(max-width:767px){.progress-stages{grid-template-columns:1fr 1fr}}@media(max-width:479px){.progress-stages{grid-template-columns:1fr}}@keyframes progress_scan{0%{transform:translate(-120%)}to{transform:translate(220%)}}@keyframes icon_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:40px;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:600;line-height:1;letter-spacing:.04em;padding:12px 22px;border-radius:3px;border-width:2px;border-left-width:6px;border-style:solid;border-color:#c0caf5;text-transform:uppercase;background-color:transparent;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background-color,border-color,color,opacity}.btn:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.btn.with-icon{border-left-width:40px;position:relative}.btn.with-icon .ph,.btn.with-icon .ph-bold{position:absolute;color:#16161e;left:-40px;top:1px;font-size:26px;height:100%;display:inline-flex;align-items:center;width:40px;justify-content:center;transition-duration:.2s;transition-property:color,left}@media(hover:hover)and (pointer:fine){.btn:hover.with-icon:not(.loading-state):not(.btn-small) .ph,.btn:hover.with-icon:not(.loading-state):not(.btn-small) .ph-bold{left:-22px}}@media(hover:none)and (pointer:coarse){.btn:active.with-icon:not(.loading-state):not(.btn-small) .ph,.btn:active.with-icon:not(.loading-state):not(.btn-small) .ph-bold{left:-22px}}.btn.btn-primary{color:#c0caf5;border-color:#c0caf5}@media(hover:hover)and (pointer:fine){.btn.btn-primary:hover{background-color:#c0caf5;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-primary:active{background-color:#c0caf5;color:#16161e}}.btn.btn-secondary{color:#7aa2f7;border-color:#7aa2f7}@media(hover:hover)and (pointer:fine){.btn.btn-secondary:hover{background-color:#7aa2f7;color:#16161e}.btn.btn-secondary:hover.with-icon .ph,.btn.btn-secondary:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-secondary:active{background-color:#7aa2f7;color:#16161e}.btn.btn-secondary:active.with-icon .ph,.btn.btn-secondary:active.with-icon .ph-bold{color:#16161e}}.btn.btn-accent{color:#ff9e64;border-color:#ff9e64}@media(hover:hover)and (pointer:fine){.btn.btn-accent:hover{background-color:#ff9e64;color:#16161e}.btn.btn-accent:hover.with-icon .ph,.btn.btn-accent:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-accent:active{background-color:#ff9e64;color:#16161e}.btn.btn-accent:active.with-icon .ph,.btn.btn-accent:active.with-icon .ph-bold{color:#16161e}}.btn.btn-danger{color:#f7768e;border-color:#f7768e}@media(hover:hover)and (pointer:fine){.btn.btn-danger:hover{background-color:#f7768e;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-danger:active{background-color:#f7768e;color:#16161e}}.btn.btn-warning{color:#e0af68;border-color:#e0af68}@media(hover:hover)and (pointer:fine){.btn.btn-warning:hover{background-color:#e0af68;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-warning:active{background-color:#e0af68;color:#16161e}}.btn.btn-success{color:#9ece6a;border-color:#9ece6a}@media(hover:hover)and (pointer:fine){.btn.btn-success:hover{background-color:#9ece6a;color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-success:active{background-color:#9ece6a;color:#16161e}}.btn.btn-info{color:#bb9af7;border-color:#bb9af7}@media(hover:hover)and (pointer:fine){.btn.btn-info:hover{background-color:#bb9af7;color:#16161e}.btn.btn-info:hover.with-icon .ph,.btn.btn-info:hover.with-icon .ph-bold{color:#16161e}}@media(hover:none)and (pointer:coarse){.btn.btn-info:active{background-color:#bb9af7;color:#16161e}.btn.btn-info:active.with-icon .ph,.btn.btn-info:active.with-icon .ph-bold{color:#16161e}}.btn[disabled]:not(.loading-state){color:#787c99;border-color:#c0caf53d;background-color:#1f2335;cursor:not-allowed;opacity:.72}.btn[disabled]:not(.loading-state).with-icon .ph,.btn[disabled]:not(.loading-state).with-icon .ph-bold{color:#787c99}@media(hover:hover)and (pointer:fine){.btn[disabled]:not(.loading-state):hover{background-color:#1f2335;color:#787c99}.btn[disabled]:not(.loading-state):hover.with-icon .ph,.btn[disabled]:not(.loading-state):hover.with-icon .ph-bold{color:#787c99}}@media(hover:none)and (pointer:coarse){.btn[disabled]:not(.loading-state):active{background-color:#1f2335;color:#787c99}.btn[disabled]:not(.loading-state):active.with-icon .ph,.btn[disabled]:not(.loading-state):active.with-icon .ph-bold{color:#787c99}}.btn[disabled]:not(.loading-state).with-icon:not(.btn-small) .ph,.btn[disabled]:not(.loading-state).with-icon:not(.btn-small) .ph-bold{left:-22px}.btn.btn-small{font-size:13px;font-weight:500;min-height:34px;padding:8px}.btn.btn-small.with-icon{border-left-width:28px}.btn.btn-small.with-icon .ph,.btn.btn-small.with-icon .ph-bold{top:0;left:-36px;font-size:22px}.btn.btn-small.with-icon.loading-state .ph,.btn.btn-small.with-icon.loading-state .ph-bold{font-size:26px}.btn.btn-large{font-size:15px;font-weight:700;min-height:46px;padding:15px 48px}.btn.loading-state{color:#16161e!important;border-color:#c0caf5!important;background-color:#c0caf5!important}.btn.loading-state .ph,.btn.loading-state .ph-bold{font-size:26px;transform-origin:50% 50%;animation:icon_spin 1.2s linear infinite}.btn-icon{display:flex;justify-content:center;align-items:center;width:34px;height:34px;background:0 0;color:#c0caf5;font-size:22px;border:2px solid transparent;border-radius:3px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.btn-icon:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.btn-icon:not(.without-hover):hover{color:#e0af68;border-color:#e0af68}}@media(hover:none)and (pointer:coarse){.btn-icon:not(.without-hover):active{color:#e0af68;border-color:#e0af68}}.btn-icon:disabled,.btn-icon[disabled]{color:#787c99;border-color:transparent;background-color:transparent;cursor:not-allowed;opacity:.72}@media(hover:hover)and (pointer:fine){.btn-icon:disabled:not(.without-hover):hover,.btn-icon[disabled]:not(.without-hover):hover{color:#787c99;border-color:transparent}}@media(hover:none)and (pointer:coarse){.btn-icon:disabled:not(.without-hover):active,.btn-icon[disabled]:not(.without-hover):active{color:#787c99;border-color:transparent}}.btn-icon-sm{width:28px;height:28px;font-size:18px}.form-group{width:100%;max-width:600px}.form-group .label{display:flex;flex-direction:column;font-size:14px;width:100%;position:relative;color:#c0caf5}.form-group .label>.ph{position:absolute;color:#c0caf5;left:0;bottom:1px;font-size:26px;height:46px;display:inline-flex;align-items:center;width:40px;justify-content:center;transition-duration:.2s;transition-property:color,left}.form-group .label .input{min-height:46px;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:500;line-height:1;letter-spacing:.04em;padding:12px 22px;margin-top:8px;border-radius:3px;border-width:2px;border-bottom-width:6px;border-style:solid;border-color:#c0caf5;color:#c0caf5;background-color:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:background-color,border-color,color}@media(hover:hover)and (pointer:fine){.form-group .label .input:hover{border-bottom-color:#787c99}}@media(hover:none)and (pointer:coarse){.form-group .label .input:active{border-bottom-color:#787c99}}.form-group .label .input:focus{outline:2px solid #E0AF68;outline-offset:3px;border-color:#7aa2f7;background-color:transparent}.form-group .label .input:disabled{color:#787c99;border-color:#c0caf53d;background:#1f2335;cursor:not-allowed;opacity:.72}.form-group .label .input[readonly]{color:#a9b1d6;border-color:#c0caf53d;background:#c0caf508}.form-group .label .input::-moz-placeholder{color:#787c99}.form-group .label .input::placeholder{color:#787c99}.form-group .label .input::-webkit-search-cancel-button,.form-group .label .input::-webkit-search-decoration,.form-group .label .input::-webkit-search-results-button,.form-group .label .input::-webkit-search-results-decoration{display:none;-webkit-appearance:none}.form-group .label .input[type=date],.form-group .label .input[type=datetime-local],.form-group .label .input[type=month],.form-group .label .input[type=time]{color-scheme:dark;cursor:pointer;min-width:0;padding-right:40px;text-transform:uppercase}.form-group .label .input[type=date]::-webkit-calendar-picker-indicator,.form-group .label .input[type=datetime-local]::-webkit-calendar-picker-indicator,.form-group .label .input[type=month]::-webkit-calendar-picker-indicator,.form-group .label .input[type=time]::-webkit-calendar-picker-indicator{width:40px;height:100%;margin:0;padding:0;background:0 0;cursor:pointer;opacity:0}.form-group .label .input[type=date]::-webkit-datetime-edit,.form-group .label .input[type=datetime-local]::-webkit-datetime-edit,.form-group .label .input[type=month]::-webkit-datetime-edit,.form-group .label .input[type=time]::-webkit-datetime-edit{padding:0}.form-group .label .input[type=date]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=datetime-local]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=month]::-webkit-datetime-edit-fields-wrapper,.form-group .label .input[type=time]::-webkit-datetime-edit-fields-wrapper{color:#c0caf5}.form-group .label textarea.input{height:92px;line-height:1.25;resize:none}.form-group .label .ph+.input,.form-group .label .ph+.select-wrap .select{padding-left:40px}.form-group .label .select-wrap{margin-top:8px}.form-group .label .select{width:100%;height:46px;margin-top:0;appearance:none;-webkit-appearance:none;-moz-appearance:none}.form-group .label .select:focus{outline:0}.form-group .label .select option{color:#c0caf5;background:#1f2335}.form-group .label .select-wrap:after{content:"";position:absolute;right:22px;bottom:18px;transform:translateY(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:10px solid #c0caf5;pointer-events:none}.form-group .label.error .input:not(:focus){border-color:#f7768e}.form-group .label.error+.input-info{color:#e0af68}.form-group .label.success .input:not(:focus){border-color:#9ece6a}.form-group .label.success+.input-info{color:#9ece6a}.form-group .label.warning .input:not(:focus){border-color:#e0af68}.form-group .label.warning+.input-info{color:#e0af68}.form-group .input-info{font-size:14px;margin-top:8px}.form-group .input-info .ph{position:relative;top:1px}.form-group .input-info.error{color:#e0af68}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px;width:100%;max-width:760px}.fieldset{width:100%;max-width:760px;margin:0;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;background:#1f2335}.legend{padding:5px 8px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}@media(max-width:767px){.form-grid{grid-template-columns:1fr}}.file-upload{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:8px 12px;border:2px solid #7aa2f7;border-left-width:6px;border-radius:3px;color:#7aa2f7;background:#1f2335;font-size:13px;font-weight:700;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.file-upload input[type=file]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(hover:hover)and (pointer:fine){.file-upload:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.file-upload:active{color:#16161e;background:#7aa2f7}}.file-upload:focus-within{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-panel{width:100%;max-width:760px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;border-left-width:6px}.file-upload-form{display:flex;flex-direction:column;gap:15px;margin:0}.file-upload-header{display:flex;align-items:flex-start;justify-content:space-between;gap:15px;padding:15px 15px 0}.file-upload-heading{display:flex;flex-direction:column;gap:5px;min-width:0}.file-upload-title{margin:0;color:#c0caf5;font-size:15px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-description{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.file-upload-dropzone{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:15px;margin:0 15px;padding:18px;border:2px dashed #7aa2f7;border-radius:6px;background:#7aa2f714;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color}.file-upload-dropzone input[type=file]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(hover:hover)and (pointer:fine){.file-upload-dropzone:hover{border-color:#c0caf5;background:#c0caf51a}}@media(hover:none)and (pointer:coarse){.file-upload-dropzone:active{border-color:#c0caf5;background:#c0caf51a}}.file-upload-dropzone:focus-within{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-icon{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;color:#16161e;background:#7aa2f7;font-size:26px}.file-upload-body{display:flex;flex-direction:column;gap:5px;min-width:0}.file-upload-primary{color:#c0caf5;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-secondary{color:#a9b1d6;font-size:13px;line-height:1.4}.file-upload-preview{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:12px;margin:0 15px}.file-upload-preview[hidden]{display:none}.file-upload-preview-item{position:relative;min-width:0;margin:0;border:2px solid rgba(192,202,245,.24);border-radius:3px;background:#1f2335}.file-upload-preview-remove{position:absolute;top:8px;right:8px;z-index:1;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:2px solid #f7768e;color:#f7768e;background:#1f2335;font-size:18px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}@media(hover:hover)and (pointer:fine){.file-upload-preview-remove:hover{color:#16161e;background:#f7768e}}@media(hover:none)and (pointer:coarse){.file-upload-preview-remove:active{color:#16161e;background:#f7768e}}.file-upload-preview-remove:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.file-upload-preview-visual{display:flex;align-items:center;justify-content:center;aspect-ratio:1;background:#1f2335}.file-upload-preview-visual img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-upload-preview-type{display:inline-flex;align-items:center;justify-content:center;min-width:46px;min-height:46px;padding:8px;color:#16161e;background:#7aa2f7;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}.file-upload-preview-item figcaption{display:flex;flex-direction:column;gap:5px;overflow:hidden;padding:8px}.file-upload-preview-name{overflow:hidden;color:#c0caf5;font-size:12px;font-weight:700;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.file-upload-preview-meta{color:#a9b1d6;font-size:12px;font-weight:700;line-height:1.25;text-transform:uppercase}.file-upload-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:0 15px 15px}@media(max-width:767px){.file-upload-header{flex-direction:column;align-items:stretch}.file-upload-dropzone{grid-template-columns:1fr}.file-upload-actions{justify-content:stretch}.file-upload-actions .btn{width:100%}}.range{width:100%;max-width:600px;accent-color:#7AA2F7}.range input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:40px;margin:0;background:0 0;cursor:pointer}.range input[type=range]::-webkit-slider-runnable-track{height:6px;background:#c0caf516;border:2px solid rgba(192,202,245,.24)}.range input[type=range]::-webkit-slider-thumb{width:16px;height:34px;margin-top:-17px;border:2px solid #7aa2f7;background:#7aa2f7;-webkit-appearance:none}.range input[type=range]::-moz-range-track{height:6px;background:#c0caf516;border:2px solid rgba(192,202,245,.24)}.range input[type=range]::-moz-range-thumb{width:16px;height:34px;border:2px solid #7aa2f7;border-radius:3px;background:#7aa2f7}.radio{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.radio input[type=radio]{display:none}.radio .radio-control{width:20px;height:20px;border-radius:100%;border:3px solid #c0caf5;background:#1f2335;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition-duration:.2s;transition-property:border-color,background}.radio .radio-control:before{content:"";display:block;width:10px;height:10px;border-radius:100%;background:#c0caf5;transform:scale(0);transition-duration:.2s;transition-property:transform,background}@media(hover:hover)and (pointer:fine){.radio:hover .radio-control{background:#414868}}@media(hover:none)and (pointer:coarse){.radio:active .radio-control{background:#414868}}.radio input[type=radio]:checked:not(:disabled)+.radio-control{background:#c0caf52e}.radio input[type=radio]:checked+.radio-control:before{transform:scale(1)}.radio input[type=radio]:disabled+.radio-control{border-color:#414868;background:#4148681f;opacity:.5}.radio input[type=radio]:disabled:checked+.radio-control:before{background:#414868}.radio input[type=radio]:focus-visible+.radio-control{outline:2px solid #E0AF68;outline-offset:3px}.radio .radio-label{font-size:14px}.radio-group{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.switch{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.switch input[type=checkbox]{display:none}.switch .switch-control{height:14px;width:28px;border-radius:999px;border:2px solid #c0caf5;position:relative;background:0 0;transition-duration:.2s;transition-property:border-color,background;display:block}.switch .switch-control:before{content:"";display:block;height:18px;width:18px;border-radius:3px;background:#c0caf5;position:absolute;left:-5px;top:-5px;transition-duration:.2s;transition-property:left,background}@media(hover:hover)and (pointer:fine){.switch:hover .switch-control{background:#414868}}@media(hover:none)and (pointer:coarse){.switch:active .switch-control{background:#414868}}.switch input[type=checkbox]:checked:not(:disabled)+.switch-control{background:#7aa2f7;border-color:#7aa2f7}.switch input[type=checkbox]:checked+.switch-control:before{left:15px}.switch input[type=checkbox]:disabled+.switch-control{border-color:#414868}.switch input[type=checkbox]:focus-visible+.switch-control{outline:2px solid #E0AF68;outline-offset:3px}.switch input[type=checkbox]:disabled+.switch-control:before{background:#414868}.checkbox{display:inline-flex;flex-direction:row;gap:8px;align-items:center;cursor:pointer}.checkbox input[type=checkbox]{display:none}.checkbox .checkbox-control{width:20px;height:20px;border-radius:3px;border:2px solid #c0caf5;border-bottom-width:6px;background:#1f2335;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition-duration:.2s;transition-property:border-color,background}.checkbox .checkbox-control:before{content:"";display:block;width:10px;height:5px;border-left:2px solid #c0caf5;border-bottom:2px solid #c0caf5;transform:rotate(-45deg) scale(0);opacity:0;margin-top:-2px;transition-duration:.2s;transition-property:transform,opacity,border-color}@media(hover:hover)and (pointer:fine){.checkbox:hover .checkbox-control{background:#414868}}@media(hover:none)and (pointer:coarse){.checkbox:active .checkbox-control{background:#414868}}.checkbox input[type=checkbox]:checked:not(:disabled)+.checkbox-control{background:#c0caf52e}.checkbox input[type=checkbox]:checked+.checkbox-control:before{transform:rotate(-45deg) scale(1);opacity:1;border-color:#c0caf5}.checkbox input[type=checkbox]:disabled+.checkbox-control{border-color:#414868;background:#4148681f;opacity:.5}.checkbox input[type=checkbox]:disabled:checked+.checkbox-control:before{border-color:#414868}.checkbox input[type=checkbox]:focus-visible+.checkbox-control{outline:2px solid #E0AF68;outline-offset:3px}.checkbox .checkbox-label{font-size:14px}.input-group{display:flex;align-items:stretch;width:100%;max-width:600px;min-height:46px;border:2px solid rgba(192,202,245,.24);border-bottom-width:6px;border-radius:3px;overflow:hidden;background:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background}.input-group:focus-within{outline:2px solid #E0AF68;outline-offset:3px;border-color:#7aa2f7;background:0 0}.input-group .input-group-action,.input-group .input-group-addon{display:inline-flex;align-items:center;justify-content:center;min-width:46px;padding:0 12px;color:#a9b1d6;background:#c0caf50b;border:0;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;text-transform:uppercase}.input-group .input-group-action{color:#c0caf5;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.input-group .input-group-input{flex:1 1 auto;min-width:0;border:0;padding:12px 15px;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:14px;font-weight:500;letter-spacing:.04em}.input-group .input-group-input:focus{outline:0}.input-group .input-group-input::-moz-placeholder{color:#787c99}.input-group .input-group-input::placeholder{color:#787c99}.input-group .input-group-input::-webkit-search-cancel-button,.input-group .input-group-input::-webkit-search-decoration,.input-group .input-group-input::-webkit-search-results-button,.input-group .input-group-input::-webkit-search-results-decoration{display:none;-webkit-appearance:none}.input-group .ph,.input-group .ph-bold{font-size:22px}.input-group.input-group-compact{min-height:40px}.input-group.input-group-compact .input-group-action,.input-group.input-group-compact .input-group-addon{min-width:40px}.input-group.input-group-compact .input-group-input{padding:8px 12px;font-size:13px}.search-field{max-width:420px}.repeater .repeater-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.repeater .repeater-title{font-size:14px;font-weight:600;color:#c0caf5}.repeater .repeater-list{display:grid;gap:8px}.repeater .repeater-item{background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;padding:12px;display:grid;grid-template-columns:1fr auto;gap:12px;align-items:start}.repeater .repeater-item-body{width:100%}.repeater .repeater-item-actions{display:flex;align-items:center;gap:8px;padding-top:22px}.repeater.repeater-disabled{opacity:.6;pointer-events:none}.list{display:flex;flex-direction:column;gap:5px;list-style-type:none;padding-left:0}.list .list-item{display:flex;flex-direction:row;align-items:center;gap:8px;margin-left:0}.list.list-ordered{list-style-type:decimal;display:list-item;margin-left:30px}.list.list-ordered .list-item{display:list-item}.list.list-definition{width:100%;max-width:620px;gap:0;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.list.list-definition .list-row{display:grid;grid-template-columns:minmax(120px,.32fr) minmax(0,1fr);gap:15px;align-items:start;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color}.list.list-definition .list-row .list-term{display:inline-flex;width:-moz-max-content;width:max-content;max-width:100%;margin:0;padding:5px 8px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:background,transform}.list.list-definition .list-row .list-desc{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6;transition-duration:.2s;transition-timing-function:ease;transition-property:color,transform}.list.list-definition .list-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.list.list-definition .list-row:hover{background:#c0caf516}.list.list-definition .list-row:hover .list-term{background:#7aa2f7;transform:translate(5px)}.list.list-definition .list-row:hover .list-desc{color:#c0caf5;transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.list.list-definition .list-row:active{background:#c0caf516}.list.list-definition .list-row:active .list-term{background:#7aa2f7;transform:translate(5px)}.list.list-definition .list-row:active .list-desc{color:#c0caf5;transform:translate(5px)}}.list.list-nav{max-width:420px;width:100%;gap:0}.list.list-nav .list-item{display:flex;flex-direction:column;align-items:flex-start;height:50px;margin:0}.list.list-nav .list-item .list-action{display:flex;justify-content:space-between;align-items:center;width:100%;height:100%;padding:8px 12px;border:2px solid transparent;border-radius:3px;font-size:14px;background:#1f2335;color:inherit;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:background,border-color,color}.list.list-nav .list-item .list-action:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.list.list-nav .list-item .list-action:hover{background:#7aa2f7;color:#16161e}}@media(hover:none)and (pointer:coarse){.list.list-nav .list-item .list-action:active{background:#7aa2f7;color:#16161e}}.list.list-nav .list-item .list-action .list-label{display:flex;flex-direction:row;gap:8px;align-items:center;letter-spacing:0;font-weight:400}.list.list-nav .list-item .list-action .list-meta{padding:8px;background:#9ece6a;color:#16161e;display:flex}.list.list-nav .list-item.list-item-active .list-action{background:#7aa2f7;color:#16161e;border-color:#7aa2f7}.list.list-actions{width:100%;max-width:420px;gap:22px}.list.list-actions .list-item{justify-content:space-between;align-items:flex-start;padding:12px 0;border-bottom:2px solid rgba(192,202,245,.08)}.list.list-actions .list-item .list-content{display:flex;flex-direction:column;gap:8px}.list.list-actions .list-item .list-content .list-title{font-size:15px;line-height:1}.list.list-actions .list-item .list-content .list-subtitle{color:#787c99}@media(hover:hover)and (pointer:fine){.list.list-actions .list-item:hover .list-title{color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.list.list-actions .list-item:active .list-title{color:#7aa2f7}}@media(max-width:479px){.list.list-definition .list-row{grid-template-columns:1fr;gap:8px}}.badge{position:relative;overflow:hidden;border-radius:3px;background:#c0caf5;color:#16161e;padding:5px 8px;font-size:13px;font-weight:600;line-height:1;letter-spacing:.04em;text-transform:uppercase;display:inline-flex;align-items:center;min-height:24px;transition-duration:.2s;transition-timing-function:ease;transition-property:filter,transform,border-color,color,background}.badge:after{content:"";position:absolute;inset:0 auto 0 0;width:40%;background:linear-gradient(90deg,transparent,rgba(22,22,30,.16),transparent);opacity:0;pointer-events:none;transform:translate(-120%)}@media(hover:hover)and (pointer:fine){.badge:hover{filter:saturate(1.12);transform:translateY(-1px)}.badge:hover:after{opacity:1;animation:terminal_scan_x .7s ease}}@media(hover:none)and (pointer:coarse){.badge:active{filter:saturate(1.12);transform:translateY(-1px)}.badge:active:after{opacity:1;animation:terminal_scan_x .7s ease}}.badge.badge-success{background:#9ece6a}.badge.badge-warning{background:#e0af68}.badge.badge-danger,.badge.badge-error{background:#f7768e}.badge.badge-info{background:#bb9af7;color:#16161e}.badge.badge-secondary{background:#7aa2f7;color:#16161e}.badge.badge-primary-outline{color:#c0caf5;border:2px solid #c0caf5;background:0 0;padding:3px 8px}.chip-group{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip{display:inline-flex;align-items:center;gap:8px;min-height:30px;padding:5px 12px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:12px;font-weight:600;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color,opacity}.chip .ph,.chip .ph-bold{font-size:18px}.chip:before{content:"";display:inline-block;width:7px;height:7px;flex:0 0 auto;background:#787c99;transition-duration:.2s;transition-timing-function:ease;transition-property:background,box-shadow,transform}.chip:has(.ph):before,.chip:has(.ph-bold):before{display:none}.chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;margin-right:-5px;border:0;color:inherit;background:0 0;font:inherit;cursor:pointer}.chip .chip-remove:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}.chip.chip-primary{color:#c0caf5;background:#c0caf514;border-color:#c0caf5}.chip.chip-primary:before{background:#c0caf5}.chip.chip-secondary{color:#7aa2f7;background:#7aa2f714;border-color:#7aa2f7}.chip.chip-secondary:before{background:#7aa2f7}.chip.chip-success{color:#9ece6a;background:#9ece6a14;border-color:#9ece6a}.chip.chip-success:before{background:#9ece6a}.chip.chip-warning{color:#e0af68;background:#e0af6814;border-color:#e0af68}.chip.chip-warning:before{background:#e0af68}.chip.chip-danger,.chip.chip-error{color:#f7768e;background:#f7768e14;border-color:#f7768e}.chip.chip-danger:before,.chip.chip-error:before{background:#f7768e}.chip.chip-selected,.chip[aria-pressed=true],.chip[aria-selected=true]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.chip.chip-selected:before,.chip[aria-pressed=true]:before,.chip[aria-selected=true]:before{background:#16161e}.chip.chip-secondary[aria-pressed=true],.chip.chip-secondary[aria-selected=true],.chip.chip-selected.chip-secondary{background:#7aa2f7;border-color:#7aa2f7}.chip.chip-disabled,.chip:disabled{color:#787c99;background:#1f2335;border-color:#c0caf53d;cursor:not-allowed;opacity:.7}.chip.chip-disabled:before,.chip:disabled:before{background:#414868}a.chip,button.chip{cursor:pointer}a.chip:focus-visible,button.chip:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){a.chip:hover,button.chip:hover{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}a.chip:hover:before,button.chip:hover:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}@media(hover:none)and (pointer:coarse){a.chip:active,button.chip:active{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}a.chip:active:before,button.chip:active:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}.tag-input{background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;position:relative}.tag-input .tag-input-wrap{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;min-height:40px;cursor:text}.tag-input .tag-input-field{flex:1 1 auto;min-width:80px;padding:5px 0;border:0;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;line-height:1;outline:0}.tag-input .tag-input-field::-moz-placeholder{color:#787c99;opacity:1}.tag-input .tag-input-field::placeholder{color:#787c99;opacity:1}.tag-input.tag-input-focused{border-color:#c0caf5}.tag-input .tag-input-meta{padding:0 12px 8px;color:#787c99;font-size:12px;line-height:1}.avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex:0 0 auto;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#16161e;background:#c0caf5;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}.avatar img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar .ph,.avatar .ph-bold{font-size:22px}.avatar .avatar-status{position:absolute;right:-2px;bottom:-2px;width:13px;height:13px;border:2px solid #16161e;background:#787c99;transition-duration:.2s;transition-timing-function:ease;transition-property:background,box-shadow}.avatar.avatar-sm{width:34px;height:34px;font-size:12px}.avatar.avatar-sm .ph,.avatar.avatar-sm .ph-bold{font-size:18px}.avatar.avatar-lg{width:46px;height:46px;font-size:14px}.avatar.avatar-lg .ph,.avatar.avatar-lg .ph-bold{font-size:26px}.avatar.avatar-secondary{background:#7aa2f7}.avatar.avatar-success{background:#9ece6a}.avatar.avatar-warning{background:#e0af68}.avatar.avatar-danger,.avatar.avatar-error{background:#f7768e}.avatar.avatar-outline{color:#c0caf5;background:#1f2335;border-color:#c0caf5}.avatar.is-online .avatar-status{background:#9ece6a;animation:terminal_pulse 1.8s ease infinite}.avatar.is-busy .avatar-status{background:#e0af68}.avatar.is-offline .avatar-status{background:#787c99}.identity{display:inline-flex;align-items:center;gap:12px;min-width:0}.identity-content{display:flex;flex-direction:column;gap:5px;min-width:0}.identity-title{color:#c0caf5;font-size:14px;font-weight:600;line-height:1}.identity-meta{color:#787c99;font-size:13px;line-height:1.4}.avatar-stack{display:inline-flex;align-items:center}.avatar-stack .avatar{margin-right:-8px;border-color:#16161e}.avatar-stack .avatar-stack-count{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 8px;border:2px solid #16161e;color:#16161e;background:#e0af68;font-size:13px;font-weight:700}.table{width:100%;text-align:left;border:2px solid rgba(192,202,245,.24);border-collapse:separate;border-spacing:0;border-radius:6px;background:#1f2335}.table .table-row:first-child>:first-child{border-top-left-radius:6px}.table .table-row:first-child>:last-child{border-top-right-radius:6px}.table .table-row:last-child>:first-child{border-bottom-left-radius:6px}.table .table-row:last-child>:last-child{border-bottom-right-radius:6px}.table .table-caption{text-align:left;font-size:15px;background:#c0caf5;width:-moz-max-content;width:max-content;color:#16161e;padding:5px 12px;margin-bottom:0;font-weight:700;text-transform:uppercase}.table.table-empty{width:100%}.table.table-empty .is-empty{width:100%;padding:15px;font-size:13px;color:#787c99;text-align:left}.table .table-row td,.table .table-row th{padding:12px 18px;font-size:13px;vertical-align:middle;border-bottom:2px solid rgba(192,202,245,.08)}.table .table-row th{color:#c0caf5;background:#c0caf50a;text-transform:uppercase;letter-spacing:.04em}.table .table-head{border-bottom:2px solid #c0caf5}.table .table-body .table-row{transition-duration:.2s;transition-timing-function:ease;transition-property:background,color}.table .table-body .table-row td{transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}@media(hover:hover)and (pointer:fine){.table .table-body .table-row:hover{background:#7aa2f714}.table .table-body .table-row:hover td:first-child{color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.table .table-body .table-row:active{background:#7aa2f714}.table .table-body .table-row:active td:first-child{color:#7aa2f7}}.table .table-foot td,.table .table-foot th{padding-top:15px}.table.table-compact .table-caption{font-size:14px}.table.table-compact .table-row td,.table.table-compact .table-row th{padding:8px 12px;font-size:12px}.table.table-compact .table-cell-mono{color:#a9b1d6;font-family:IBM Plex Mono,monospace;letter-spacing:0}.table.table-compact .table-cell-actions{width:1%;white-space:nowrap}.table-wrapper{width:100%;overflow-x:auto}.toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:12px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.toolbar .toolbar-group{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.toolbar .toolbar-title{margin:0;font-size:15px;font-weight:700;line-height:1;text-transform:uppercase}.toolbar .toolbar-meta{color:#787c99;font-size:13px}.pagination{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.pagination .pagination-item{display:inline-flex;align-items:center;justify-content:center;min-width:34px;border-radius:3px;height:34px;padding:0 12px;border:2px solid rgba(192,202,245,.24);color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color,opacity}.pagination .pagination-item:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.pagination .pagination-item:hover{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.pagination .pagination-item:active{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}.pagination .pagination-item.pagination-item-active,.pagination .pagination-item[aria-current=page]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.pagination .pagination-item.pagination-item-disabled,.pagination .pagination-item:disabled{color:#787c99;background:#1f2335;border-color:#c0caf53d;cursor:not-allowed;opacity:.72}.pagination .pagination-ellipsis{color:#787c99;padding:0 5px}.empty-state{max-width:560px;padding:22px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.empty-state .empty-state-icon{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;margin-bottom:15px;color:#16161e;background:#c0caf5;font-size:26px}.empty-state .empty-state-title{margin:0 0 8px;font-size:18px;font-weight:700;text-transform:uppercase}.empty-state .empty-state-text{max-width:440px;margin:0 0 18px;color:#a9b1d6;line-height:1.6}.empty-state .empty-state-actions{display:flex;flex-wrap:wrap;gap:8px}.empty-state.empty-state-error{border-color:#f7768e}.empty-state.empty-state-error .empty-state-icon{background:#f7768e}.skeleton{display:block;position:relative;overflow:hidden;border-radius:3px;background:#c0caf516}.skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,rgba(192,202,245,.12),transparent);animation:skeleton_shimmer 1.6s infinite}.skeleton.skeleton-line{width:100%;height:14px}.skeleton.skeleton-title{width:60%;height:22px}.skeleton.skeleton-block{width:100%;height:120px}.skeleton.skeleton-square{width:46px;height:46px}.skeleton-stack{display:flex;flex-direction:column;gap:12px;max-width:520px;padding:15px;border:2px solid rgba(192,202,245,.24);border-radius:6px;background:#1f2335}@keyframes skeleton_shimmer{to{transform:translate(100%)}}.page-header{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:18px;width:100%;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335;animation:panel_boot .28s ease both}.page-header .page-header-content{display:flex;flex-direction:column;gap:8px;min-width:min(100%,320px)}.page-header .page-header-kicker{color:#7aa2f7;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color}.page-header .page-header-title{margin:0;color:#c0caf5;font-size:23px;font-weight:700;line-height:1.15}.page-header .page-header-subtitle{max-width:720px;margin:0;color:#a9b1d6;font-size:14px;line-height:1.6}.page-header .page-header-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:#787c99;font-size:13px}.page-header .page-header-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.page-header.page-header-compact{align-items:center;padding:15px}.page-header.page-header-compact .page-header-title{font-size:18px}.page-header.page-header-accent{border-color:#7aa2f7;background:#7aa2f70e}.description-list{display:grid;width:100%;max-width:760px;margin:0;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.description-list .description-list-row{display:grid;grid-template-columns:minmax(140px,.36fr) minmax(0,1fr);gap:15px;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background}.description-list .description-list-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.description-list .description-list-row:hover{background:#c0caf516}.description-list .description-list-row:hover .description-list-term{color:#7aa2f7}.description-list .description-list-row:hover .description-list-value{transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.description-list .description-list-row:active{background:#c0caf516}.description-list .description-list-row:active .description-list-term{color:#7aa2f7}.description-list .description-list-row:active .description-list-value{transform:translate(5px)}}.description-list .description-list-term{margin:0;color:#787c99;font-size:13px;font-weight:600;line-height:1.4;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color}.description-list .description-list-value{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin:0;color:#c0caf5;font-size:14px;line-height:1.4;transition-duration:.2s;transition-timing-function:ease;transition-property:transform}.description-list .description-list-value-muted{color:#a9b1d6}.description-list.description-list-compact{max-width:520px}.description-list.description-list-compact .description-list-row{grid-template-columns:minmax(112px,.42fr) minmax(0,1fr);gap:12px;padding:8px 12px}.description-list.description-list-compact .description-list-term,.description-list.description-list-compact .description-list-value{font-size:13px}@media(max-width:479px){.description-list .description-list-row{grid-template-columns:1fr;gap:5px}}.steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;width:100%;max-width:900px;margin:0;padding:0;list-style:none}.steps .step{position:relative;display:flex;flex-direction:column;gap:8px;min-height:120px;padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.steps .step-marker{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:3px;color:#c0caf5;border:2px solid rgba(192,202,245,.24);font-size:13px;font-weight:700;line-height:1}.steps .step-title{margin:0;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.steps .step-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.steps .step-complete{border-color:#9ece6a}.steps .step-complete .step-marker{color:#16161e;background:#9ece6a;border-color:#9ece6a}.steps .step-current{border-color:#7aa2f7}.steps .step-current .step-marker{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}.steps .step-disabled{opacity:.62}.steps.steps-vertical{grid-template-columns:1fr;max-width:520px;gap:0}.steps.steps-vertical .step{min-height:auto;border-bottom-width:0;border-radius:0}.steps.steps-vertical .step:last-child{border-bottom-width:2px}@media(max-width:1023px){.steps{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:479px){.steps{grid-template-columns:1fr}}.timeline{display:grid;gap:0;width:100%;max-width:760px;margin:0;padding:0;list-style:none}.timeline .timeline-item{position:relative;display:grid;grid-template-columns:40px minmax(0,1fr);gap:12px;min-height:88px}.timeline .timeline-item:before{content:"";position:absolute;top:40px;bottom:0;left:19px;width:2px;background:#c0caf53d}.timeline .timeline-item:last-child:before{display:none}.timeline .timeline-marker{position:relative;z-index:1;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#16161e;font-size:18px;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background,color,box-shadow,transform}.timeline .timeline-content{min-width:0;padding:0 0 18px}.timeline .timeline-card{padding:15px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background,transform}.timeline .timeline-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.timeline .timeline-title{margin:0;font-size:14px;font-weight:700;line-height:1.25;text-transform:uppercase}.timeline .timeline-time{color:#787c99;font-size:12px;font-family:IBM Plex Mono,monospace;line-height:1.4}.timeline .timeline-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.4}.timeline .timeline-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.timeline .timeline-item-success .timeline-card,.timeline .timeline-item-success .timeline-marker{border-color:#9ece6a}.timeline .timeline-item-success .timeline-marker{color:#16161e;background:#9ece6a}.timeline .timeline-item-warning .timeline-card,.timeline .timeline-item-warning .timeline-marker{border-color:#e0af68}.timeline .timeline-item-warning .timeline-marker{color:#16161e;background:#e0af68}.timeline .timeline-item-danger .timeline-card,.timeline .timeline-item-danger .timeline-marker,.timeline .timeline-item-error .timeline-card,.timeline .timeline-item-error .timeline-marker{border-color:#f7768e}.timeline .timeline-item-danger .timeline-marker,.timeline .timeline-item-error .timeline-marker{color:#16161e;background:#f7768e}@media(hover:hover)and (pointer:fine){.timeline .timeline-item:hover .timeline-marker{box-shadow:0 0 0 4px #7aa2f724;transform:scale(1.04)}.timeline .timeline-item:hover .timeline-card{background:#c0caf516;transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.timeline .timeline-item:active .timeline-marker{box-shadow:0 0 0 4px #7aa2f724;transform:scale(1.04)}.timeline .timeline-item:active .timeline-card{background:#c0caf516;transform:translate(5px)}}.activity-log{display:grid;width:100%;max-width:720px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;overflow:hidden;background:#1f2335}.activity-log .activity-log-row{display:grid;grid-template-columns:minmax(120px,.24fr) minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 15px;border-bottom:2px solid rgba(192,202,245,.08);transition-duration:.2s;transition-timing-function:ease;transition-property:background}.activity-log .activity-log-row:last-child{border-bottom:0}@media(hover:hover)and (pointer:fine){.activity-log .activity-log-row:hover{background:#c0caf516}}@media(hover:none)and (pointer:coarse){.activity-log .activity-log-row:active{background:#c0caf516}}.activity-log .activity-log-time{color:#787c99;font-family:IBM Plex Mono,monospace;font-size:12px}.activity-log .activity-log-title{color:#c0caf5;font-size:13px;font-weight:600;line-height:1.4}@media(max-width:479px){.activity-log .activity-log-row{grid-template-columns:1fr;gap:8px}}.accordion{display:grid;width:100%;max-width:760px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;overflow:hidden;background:#1f2335}.accordion-item{border-bottom:2px solid rgba(192,202,245,.08);overflow:hidden}.accordion-item:last-child{border-bottom:0}.accordion-item[open] .accordion-summary{color:#16161e;background:#c0caf5}.accordion-item[open] .accordion-icon{transform:rotate(180deg)}.accordion-summary{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12px;min-height:40px;padding:12px 15px;border:0;color:#c0caf5;background:0 0;cursor:pointer;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.accordion-summary::-webkit-details-marker{display:none}.accordion-summary::marker{content:""}.accordion-summary:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.accordion-summary:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.accordion-summary:active{color:#16161e;background:#7aa2f7}}.accordion-summary-content{display:flex;align-items:center;gap:8px;min-width:0}.accordion-icon{flex:0 0 auto;font-size:18px;transition-duration:.2s;transition-property:transform}.accordion-panel{overflow:hidden;padding:15px;color:#a9b1d6;font-size:13px;line-height:1.6;transition-duration:.28s;transition-timing-function:ease;transition-property:height,opacity,transform}.accordion-panel p{margin-top:0}.accordion-panel p:last-child{margin-bottom:0}.disclosure{max-width:520px;border:2px solid rgba(192,202,245,.24);border-radius:6px;overflow:hidden;background:#1f2335}.disclosure .accordion-summary{min-height:34px;padding:8px 12px}.disclosure .accordion-panel{padding:12px}.tabs{width:100%;max-width:900px}.tabs-list{display:flex;align-items:stretch;gap:5px;width:-moz-fit-content;width:fit-content;max-width:100%;padding:5px;border:2px solid rgba(192,202,245,.24);border-radius:6px;background:#1f2335;overflow-x:auto;scrollbar-width:thin}.tab{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:12px 15px;border:0;border-radius:3px;color:#a9b1d6;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase;white-space:nowrap;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,opacity}.tab .ph,.tab .ph-bold{font-size:18px}.tab:focus-visible{outline:2px solid #E0AF68;outline-offset:3px;z-index:1}@media(hover:hover)and (pointer:fine){.tab:hover{color:#c0caf5;background:#c0caf516}}@media(hover:none)and (pointer:coarse){.tab:active{color:#c0caf5;background:#c0caf516}}.tab:disabled,.tab[aria-disabled=true]{color:#787c99;cursor:not-allowed;opacity:.62}@media(hover:hover)and (pointer:fine){.tab:disabled:hover,.tab[aria-disabled=true]:hover{color:#787c99;background:0 0}}@media(hover:none)and (pointer:coarse){.tab:disabled:active,.tab[aria-disabled=true]:active{color:#787c99;background:0 0}}.tab-active,.tab[aria-selected=true]{color:#16161e;background:#c0caf5}.tab-panel{display:none}.tab-panel p{margin-top:0}.tab-panel p:last-child{margin-bottom:0}.tab-panel-active{display:block}.tabs-compact{max-width:620px}.tabs-compact .tab{min-height:34px;padding:8px 12px}.tabs-vertical{grid-template-columns:minmax(180px,240px) minmax(0,1fr);align-items:start}.tabs-vertical .tabs-list{flex-direction:column;overflow-x:visible}.tabs-vertical .tab{justify-content:flex-start;text-align:left}@media(max-width:767px){.tabs-vertical{grid-template-columns:1fr}.tabs-vertical .tabs-list{flex-direction:row;overflow-x:auto}.tabs-vertical .tab{justify-content:center;text-align:center}}.drawer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;justify-content:flex-end;pointer-events:none}.drawer .drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#16161e;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity;pointer-events:auto}.drawer .drawer-panel{position:relative;z-index:1020;width:min(460px,100vw - 18px);min-height:100vh;display:flex;flex-direction:column;gap:15px;background:#16161e;border-left:2px solid rgba(192,202,245,.24);box-shadow:-18px 0 42px #16161e61;opacity:0;transform:translate(100%);transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,transform;pointer-events:auto}.drawer .drawer-header{display:flex;align-items:center;justify-content:space-between;padding-right:15px;border-bottom:2px solid rgba(192,202,245,.24)}.drawer .drawer-title{margin:0;padding:12px 15px;color:#c0caf5;text-transform:uppercase;letter-spacing:.04em}.drawer .drawer-body{flex:1;overflow-y:auto;padding:18px}.drawer .drawer-footer{padding:18px;border-top:2px solid rgba(192,202,245,.24)}.drawer .drawer-footer .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12px;width:100%}.drawer.drawer-left{justify-content:flex-start}.drawer.drawer-left .drawer-panel{border-left:0;border-right:2px solid #c0caf5;box-shadow:18px 0 42px #16161e61;transform:translate(-100%)}.drawer.a-show .drawer-backdrop{opacity:.82}.drawer.a-show .drawer-panel{opacity:1;transform:translate(0)}.drawer.a-hide .drawer-backdrop{opacity:0}.drawer.a-hide .drawer-panel{opacity:0;transform:translate(100%)}.drawer.a-hide.drawer-left .drawer-panel{transform:translate(-100%)}.drawer-preview{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,280px);gap:18px;align-items:stretch;padding:18px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#1f2335}.drawer-preview .drawer-preview-content{display:flex;flex-direction:column;gap:12px}.drawer-preview .drawer-preview-panel{display:flex;flex-direction:column;gap:12px;padding:15px;border:2px solid #7aa2f7;border-radius:6px;background:#1f2335}.drawer-preview .drawer-preview-title{margin:0;color:#7aa2f7;font-size:14px;text-transform:uppercase}.drawer-preview .drawer-preview-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}@media(max-width:720px){.drawer-preview{grid-template-columns:1fr}}.nav-topbar{position:sticky;top:0;z-index:900;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;min-height:58px;border-bottom:2px solid rgba(192,202,245,.24);background:#16161ef5;box-shadow:0 10px 28px #16161e42}.nav-topbar-toggle{display:inline-flex;align-items:center;align-self:stretch;gap:8px;min-width:150px;padding:0 15px;border:0;border-right:2px solid rgba(192,202,245,.24);color:#c0caf5;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:700;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.nav-topbar-toggle .ph{color:#7aa2f7;font-size:22px}.nav-topbar-toggle:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.nav-topbar-toggle:hover{color:#16161e;background:#7aa2f7}.nav-topbar-toggle:hover .ph{color:#16161e}}@media(hover:none)and (pointer:coarse){.nav-topbar-toggle:active{color:#16161e;background:#7aa2f7}.nav-topbar-toggle:active .ph{color:#16161e}}.nav-topbar-brand{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:0 15px;color:#c0caf5;font-size:13px;font-weight:700;text-transform:uppercase}.nav-topbar-brand img{width:48px;height:48px}.nav-topbar-current{min-width:160px;margin-right:15px;padding:5px 8px;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#a9b1d6;background:#1f2335;font-size:12px;font-weight:700;text-align:center;text-transform:uppercase}.nav-drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:910;background:#16161e;opacity:0;pointer-events:none;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity}.nav-drawer{position:fixed;inset:0 auto 0 0;z-index:920;display:flex;flex-direction:column;width:min(380px,100vw);max-height:100vh;border-right:2px solid #c0caf5;background:#1f2335;box-shadow:18px 0 42px #16161e61;opacity:0;overflow:hidden;pointer-events:none;transform:translate(-100%);transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,transform}.nav-drawer.is-open{opacity:1;pointer-events:auto;transform:translate(0)}.nav-drawer-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border-bottom:2px solid rgba(192,202,245,.24)}.nav-drawer-title{display:inline-flex;padding:8px 12px;border-radius:3px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;text-transform:uppercase}.nav-drawer-subtitle{margin-top:8px;color:#787c99;font-size:12px;font-weight:700;text-transform:uppercase}.nav-drawer-close{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:2px solid rgba(192,202,245,.24);border-radius:3px;color:#c0caf5;background:0 0;font-size:22px;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.nav-drawer-close:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.nav-drawer-close:hover{color:#16161e;background:#f7768e;border-color:#f7768e}}@media(hover:none)and (pointer:coarse){.nav-drawer-close:active{color:#16161e;background:#f7768e;border-color:#f7768e}}.nav-drawer-body{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:12px;scrollbar-width:thin;scrollbar-color:#7AA2F7 #1F2335}.nav-drawer-body::-webkit-scrollbar{width:8px}.nav-drawer-body::-webkit-scrollbar-track{background:#1f2335}.nav-drawer-body::-webkit-scrollbar-thumb{background:#7aa2f7}.nav-drawer-body .list.list-nav{max-width:none}.nav-drawer-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border-top:2px solid rgba(192,202,245,.24);color:#787c99;background:#1f2335;font-size:12px;font-weight:700;text-transform:uppercase}.nav-drawer-footer .profile-identity{display:block;text-decoration:none;color:inherit;min-width:0;flex:1 1 auto;overflow:hidden}@media(hover:hover)and (pointer:fine){.nav-drawer-footer .profile-identity:hover{color:inherit}}@media(hover:none)and (pointer:coarse){.nav-drawer-footer .profile-identity:active{color:inherit}}.nav-drawer-open{overflow:hidden}.nav-drawer-open .nav-drawer-backdrop{opacity:.82;pointer-events:auto}@media(max-width:767px){.nav-topbar-toggle{min-width:54px;padding:0 12px}.nav-topbar-brand{padding-right:12px;padding-left:12px}.nav-topbar-current{max-width:38vw;min-width:0;margin-right:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-drawer{width:100vw;border-right:0}}.nav-shell-preview{width:100%;max-width:900px;overflow:hidden;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;background:#16161e}.nav-shell-preview-topbar{position:relative;z-index:0;min-height:52px;box-shadow:none}.nav-shell-preview-body{display:grid;grid-template-columns:280px minmax(0,1fr);min-height:320px}.nav-shell-preview-drawer{position:relative;z-index:0;inset:auto;width:auto;max-height:none;opacity:1;pointer-events:auto;transform:none;box-shadow:none}.nav-shell-preview-content{display:flex;flex-direction:column;justify-content:center;gap:12px;min-width:0;padding:18px;border-left:2px solid rgba(192,202,245,.24);background:#1f2335}.nav-shell-preview-content h3{margin:0;color:#c0caf5;font-size:18px;text-transform:uppercase}.nav-shell-preview-content p{max-width:360px;margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}@media(max-width:767px){.nav-shell-preview-body{grid-template-columns:1fr}.nav-shell-preview-content{min-height:180px;border-top:2px solid rgba(192,202,245,.24);border-left:0}}.toast{position:fixed;z-index:1100;bottom:-100px;right:15px;max-width:420px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;box-shadow:0 14px 36px #16161e5c;padding:0;opacity:0;overflow:hidden;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,bottom}.toast.a-show{bottom:15px;opacity:1}.toast.a-hide{bottom:-45px;opacity:0}.toast .toast-content{display:flex;flex-direction:column;gap:0;padding:15px 48px 15px 18px}.toast .toast-content .toast-header{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;text-transform:uppercase;color:#c0caf5;line-height:1}.toast .toast-content .toast-header .ph{font-size:22px;flex-shrink:0}.toast .toast-content .toast-text{padding:8px 0 0;margin:0;color:#c0caf5;font-size:14px;line-height:1.6}.toast .toast-close{position:absolute;top:5px;right:8px;color:#a9b1d6;width:34px;height:34px;border-color:transparent;background:0 0}@media(hover:hover)and (pointer:fine){.toast .toast-close:not(.without-hover):hover{color:#c0caf5;border-color:transparent}}@media(hover:none)and (pointer:coarse){.toast .toast-close:not(.without-hover):active{color:#c0caf5;border-color:transparent}}.toast .toast-progress{height:3px;width:100%;background:#16161e73;overflow:hidden;margin-top:1px}.toast .toast-progress .toast-progress-bar{height:100%;width:100%;transform-origin:left;animation:toast-progress linear forwards;background:#7aa2f7}.toast.toast-info{border-color:#bb9af7}.toast.toast-info .toast-header,.toast.toast-info .toast-header .ph{color:#bb9af7}.toast.toast-info .toast-progress-bar{background:#bb9af7}.toast.toast-success{border-color:#9ece6a}.toast.toast-success .toast-header,.toast.toast-success .toast-header .ph{color:#9ece6a}.toast.toast-success .toast-progress-bar{background:#9ece6a}.toast.toast-warning{border-color:#e0af68}.toast.toast-warning .toast-header,.toast.toast-warning .toast-header .ph{color:#e0af68}.toast.toast-warning .toast-progress-bar{background:#e0af68}.toast.toast-danger{border-color:#f7768e}.toast.toast-danger .toast-header,.toast.toast-danger .toast-header .ph{color:#f7768e}.toast.toast-danger .toast-progress-bar{background:#f7768e}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.card{position:relative;max-width:340px;width:-moz-max-content;width:max-content;overflow:hidden;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px}.card .card-title{color:#c0caf5;padding:15px 15px 0;font-weight:700;text-transform:uppercase}.card .card-content{padding:15px;height:100%}.card .card-content .card-thumb{display:block;width:min(68%,190px);margin:18px auto 22px}.card .card-content p{margin-top:8px;margin-bottom:0}.card .card-footer{padding:8px 15px 15px}.card.status-card{max-width:220px;overflow:hidden}.card.status-card .status-icon-container{position:relative}.card.status-card .status-icon-container .status-indicator{position:absolute;top:-15px;left:-5px;font-size:22px;color:#f7768e}.card.status-card .status-icon-container .status-indicator.status-online{color:#9ece6a}.card.status-card .status-icon-container .status-icon{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;font-size:56px;height:108px;width:100%}.card.status-card .card-title{display:flex;width:100%;font-size:14px;font-weight:700;align-items:center;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.card.status-card .status-name{font-size:13px;line-height:1.4}.card.status-card.card-success{border-color:#9ece6a}.card.status-card.card-success .card-title,.card.status-card.card-success .modal-title,.card.status-card.card-success .toast-title{color:#9ece6a;background:0 0}.card.status-card.card-success .status-icon{color:#9ece6a}.card.status-card.card-warning{border-color:#e0af68}.card.status-card.card-warning .card-title,.card.status-card.card-warning .modal-title,.card.status-card.card-warning .toast-title{color:#e0af68;background:0 0}.card.status-card.card-warning .status-icon{color:#e0af68}.card.status-card.card-info{border-color:#bb9af7}.card.status-card.card-info .card-title,.card.status-card.card-info .modal-title,.card.status-card.card-info .toast-title{color:#bb9af7;background:0 0}.card.status-card.card-info .status-icon{color:#bb9af7}.card.status-card.card-secondary{border-color:#7aa2f7}.card.status-card.card-secondary .card-title,.card.status-card.card-secondary .modal-title,.card.status-card.card-secondary .toast-title{color:#7aa2f7;background:0 0}.card.status-card.card-secondary .status-icon{color:#7aa2f7}.card.status-card.card-danger,.card.status-card.card-error{border-color:#f7768e}.card.status-card.card-danger .card-title,.card.status-card.card-danger .modal-title,.card.status-card.card-danger .toast-title,.card.status-card.card-error .card-title,.card.status-card.card-error .modal-title,.card.status-card.card-error .toast-title{color:#f7768e;background:0 0}.card.status-card.card-danger .status-icon,.card.status-card.card-error .status-icon{color:#f7768e}.card.metric-card{max-width:320px;border-color:#c0caf53d}.card.metric-card .card-content{display:flex;flex-direction:column;gap:15px}.card.metric-card .metric-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.card.metric-card .metric-card-label{margin:0;color:#a9b1d6;font-size:13px;font-weight:600;text-transform:uppercase}.card.metric-card .metric-card-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;color:#16161e;background:#7aa2f7;font-size:22px}.card.metric-card .metric-card-value{margin:0;color:#c0caf5;font-size:30px;font-weight:700;line-height:1.15}.card.metric-card .metric-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:#787c99;font-size:13px}.card.metric-card .metric-card-delta{color:#9ece6a;font-weight:700}.card.metric-card .metric-card-delta.metric-card-delta-negative{color:#f7768e}.card.card-horizontal{max-width:none;display:flex;flex-direction:row;align-items:stretch;overflow:hidden}.card.card-horizontal .card-media{flex:0 0 20%;min-width:80px;max-width:160px;max-height:160px;overflow:hidden;position:relative;aspect-ratio:1;align-self:start}.card.card-horizontal .card-media img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.card.card-horizontal .card-body{flex:1 1 auto;display:flex;flex-direction:column;padding:15px;gap:12px}.card.card-horizontal .card-title{padding:0;background:0 0;color:#c0caf5;font-size:15px;font-weight:700;text-transform:none;line-height:1.25}.card.card-horizontal .card-title a{color:inherit;text-decoration:none}.card.card-horizontal .card-content{padding:0;height:auto}.card.card-horizontal .card-content p{margin:0}.card.card-horizontal .card-footer{padding:0;display:flex;flex-wrap:wrap;align-items:center;gap:12px;color:#a9b1d6;font-size:13px}.card.action-card{max-width:360px;border-color:#7aa2f7}.card.action-card .card-content{display:flex;flex-direction:column;gap:15px}.card.action-card .action-card-kicker{display:inline-flex;width:-moz-max-content;width:max-content;padding:5px 8px;color:#16161e;background:#7aa2f7;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase}.card.action-card .action-card-title{margin:0;font-size:18px;font-weight:700;line-height:1.25;text-transform:uppercase}.card.action-card .action-card-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.card.action-card .action-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.card.login-card{max-width:100%;width:460px;border-color:#c0caf5}.card.login-card .login-card-header{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:12px}.card.login-card .login-card-logo{display:block;width:auto;max-height:40px}.card.login-card .login-card-logo-icon{font-size:56px;color:#c0caf5}.card.login-card .login-card-title{font-size:18px;font-weight:700;text-transform:uppercase}.card.login-card .login-card-form{display:flex;flex-direction:column;gap:15px}.card.login-card .login-card-submit{width:-moz-max-content;width:max-content;margin-top:8px}.card.login-card .form-group{margin-bottom:0}.card.login-card .login-card-links{display:flex;justify-content:space-between;gap:12px;margin-top:8px;font-size:13px}.card.login-card .login-card-link{color:#a9b1d6;text-decoration:none}@media(hover:hover)and (pointer:fine){.card.login-card .login-card-link:hover{color:#c0caf5;text-decoration:underline}}@media(hover:none)and (pointer:coarse){.card.login-card .login-card-link:active{color:#c0caf5;text-decoration:underline}}.card.login-card .login-card-error{margin-bottom:8px}.card.user-card{max-width:320px}.card.user-card .user-card-body{display:flex;flex-direction:column;align-items:center;gap:15px;padding:18px;text-align:center}.card.user-card .identity{flex-direction:column;align-items:center;gap:15px}.card.user-card .identity .avatar{width:64px;height:64px;font-size:18px}.card.user-card .identity .identity-content{align-items:center;text-align:center}.card.user-card .user-card-role{color:#a9b1d6;font-size:13px;margin-top:5px}.card.user-card .user-card-actions{display:flex;gap:8px}.card.user-card-compact{max-width:none}.card.user-card-compact .user-card-body{flex-direction:row;justify-content:space-between;align-items:center;padding:12px 15px;text-align:left}.card.user-card-compact .identity{flex-direction:row;gap:12px}.card.user-card-compact .identity .avatar{width:38px;height:38px;font-size:13px}.card.user-card-compact .identity .identity-content{align-items:flex-start}.card.user-card-compact .user-card-actions{display:flex;gap:5px}.modal{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center}.modal .modal-backdrop{position:fixed;z-index:1010;top:0;bottom:0;left:0;right:0;background:#16161e;opacity:0;transition-duration:.25s;transition-property:opacity}.modal .modal-dialog{position:relative;z-index:1020;width:100%;max-width:960px;margin:200px 18px 18px;height:auto;max-height:calc(100vh - 48px);padding:0;display:flex;flex-direction:column;gap:0;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,margin-top}.modal .modal-dialog .modal-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:15px}.modal .modal-dialog .modal-header .modal-title{padding:15px 18px 0;color:#c0caf5;text-transform:uppercase;letter-spacing:.04em}.modal .modal-dialog .modal-header .modal-close{flex:0 0 auto;color:#c0caf5;border-color:#c0caf53d;background:#16161e}.modal .modal-dialog .modal-panel{min-height:200px;display:flex;flex-direction:column;gap:15px;overflow:hidden;background:#16161e;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px}.modal .modal-dialog .modal-body{max-height:700px;overflow-y:auto;padding:18px}.modal .modal-dialog .modal-footer{padding:18px}.modal .modal-dialog .modal-footer .actions{display:flex;flex-direction:row;justify-content:flex-end;gap:15px;width:100%}.modal.a-show .modal-backdrop{opacity:1}.modal.a-show .modal-dialog{opacity:1;margin-top:0}.modal.a-hide .modal-backdrop{opacity:0}.modal.a-hide .modal-dialog{opacity:0;margin-top:-200px}.alert{position:relative;overflow:hidden;border-radius:6px;margin-bottom:12px;padding:12px 15px;border:2px solid transparent;border-left-style:solid;border-left-width:6px;background:#1f2335;color:#c0caf5;font-weight:500;line-height:1.4;transition-duration:.2s;transition-timing-function:ease;transition-property:background,color,border-color}.alert:after{content:"";position:absolute;inset:0 auto 0 0;width:36%;background:linear-gradient(90deg,transparent,rgba(192,202,245,.12),transparent);opacity:0;pointer-events:none;transform:translate(-120%)}@media(hover:hover)and (pointer:fine){.alert:hover:after{opacity:1;animation:terminal_scan_x .8s ease}}@media(hover:none)and (pointer:coarse){.alert:active:after{opacity:1;animation:terminal_scan_x .8s ease}}.alert.alert-primary{border-color:#c0caf5;background:#c0caf51a;color:#c0caf5}.alert.alert-success{border-color:#9ece6a;background:#9ece6a1a;color:#9ece6a}.alert.alert-secondary{border-color:#7aa2f7;background:#7aa2f71a;color:#7aa2f7}.alert.alert-info{border-color:#bb9af7;background:#bb9af71a;color:#c0caf5}.alert.alert-warning{border-color:#e0af68;background:#e0af681a;color:#e0af68}.alert.alert-danger,.alert.alert-error{border-color:#f7768e;background:#f7768e1a;color:#f7768e}.advanced-select-container{position:relative;height:0}.advanced-select{position:absolute;z-index:100;top:6px;width:100%;height:auto;max-height:200px;overflow-y:auto;background:#16161e;border:2px solid #c0caf5;border-left-width:6px;border-radius:6px;margin-top:20px;opacity:0;visibility:hidden;transition-property:opacity,margin-top,visibility;transition-duration:.2s;transition-timing-function:ease}.advanced-select.a-show{opacity:1;margin-top:0;visibility:visible}.advanced-select .popup-options-container .not-found{width:100%;padding:15px;text-align:center;display:none}.advanced-select .popup-options-container .not-found.show{display:block}.advanced-select .popup-options-container .options{width:100%;display:none}.advanced-select .popup-options-container .options.show{display:block}.advanced-select .popup-options-container .options .option{padding:8px 15px;transition-property:color,background;transition-duration:.15s}.advanced-select .popup-options-container .options .option.hide{display:none}.advanced-select .popup-options-container .options .option.focus,.advanced-select .popup-options-container .options .option:hover{color:#16161e;background:#e0af68}.component.editable-string-component .editable-string-content{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:inherit}.component.editable-string-component .editable-string-content .editable-string{font-size:inherit;border-bottom:2px solid rgba(192,202,245,.24)}@media(hover:hover)and (pointer:fine){.component.editable-string-component .apply-changes-btn:hover,.component.editable-string-component .cancel-changes-btn:hover,.component.editable-string-component .edit-text-btn:hover{color:#16161e;background:#e0af68}}@media(hover:none)and (pointer:coarse){.component.editable-string-component .apply-changes-btn:active,.component.editable-string-component .cancel-changes-btn:active,.component.editable-string-component .edit-text-btn:active{color:#16161e;background:#e0af68}}.component.editable-string-component .apply-changes-btn{color:#e0af68}.component.editable-string-component .editable-string-form{display:flex;flex-direction:row;align-items:center;gap:8px}.component.editable-string-component .editable-string-form .form-group{max-width:260px;margin:0}.component.editable-string-component .editable-string-form .form-group .input{padding:8px 15px}.tabs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:15px}.tabs .tab{display:inline-flex;align-items:center;min-height:34px;padding:8px 12px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;color:#a9b1d6;background:#1f2335;font-family:IBM Plex Mono,monospace;font-size:13px;font-weight:600;line-height:1;text-transform:uppercase;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background,border-color}.tabs .tab:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.tabs .tab:hover{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}@media(hover:none)and (pointer:coarse){.tabs .tab:active{color:#16161e;background:#7aa2f7;border-color:#7aa2f7}}.tabs .tab.tab-active,.tabs .tab[aria-selected=true]{color:#16161e;background:#c0caf5;border-color:#c0caf5}.dropdown,.popover{position:relative;display:inline-flex}.dropdown-menu,.popover-panel,.tooltip-panel{z-index:40;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;box-shadow:0 14px 36px #16161e5c}.dropdown-menu,.popover-panel{position:absolute;top:calc(100% + 8px);left:0;min-width:220px;display:none;transform-origin:top left}.dropdown.is-open .dropdown-menu,.popover.is-open .popover-panel{display:block;animation:overlay_reveal .2s ease both}.dropdown-menu{padding:5px}.dropdown-menu .dropdown-item{display:flex;align-items:center;gap:8px;width:100%;min-height:34px;padding:8px 12px;border:0;color:#c0caf5;background:0 0;font-family:IBM Plex Mono,monospace;font-size:13px;text-align:left;cursor:pointer;transition-duration:.2s;transition-timing-function:ease;transition-property:color,background}.dropdown-menu .dropdown-item .ph,.dropdown-menu .dropdown-item .ph-bold{font-size:18px}.dropdown-menu .dropdown-item:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){.dropdown-menu .dropdown-item:hover{color:#16161e;background:#7aa2f7}}@media(hover:none)and (pointer:coarse){.dropdown-menu .dropdown-item:active{color:#16161e;background:#7aa2f7}}.dropdown-menu .dropdown-item.dropdown-item-danger{color:#f7768e}@media(hover:hover)and (pointer:fine){.dropdown-menu .dropdown-item.dropdown-item-danger:hover{color:#16161e;background:#f7768e}}@media(hover:none)and (pointer:coarse){.dropdown-menu .dropdown-item.dropdown-item-danger:active{color:#16161e;background:#f7768e}}.popover-panel{width:min(320px,100vw - 22px);padding:15px}.popover-panel .popover-title{margin:0 0 8px;font-size:14px;font-weight:700;text-transform:uppercase}.popover-panel .popover-text{margin:0;color:#a9b1d6;font-size:13px;line-height:1.6}.tooltip{position:relative;display:inline-flex}.tooltip-panel{position:absolute;left:50%;bottom:calc(100% + 8px);width:-moz-max-content;width:max-content;max-width:260px;padding:8px 12px;color:#c0caf5;font-size:12px;line-height:1.4;transform:translate(-50%);opacity:0;visibility:hidden;pointer-events:none;transition-duration:.15s;transition-timing-function:ease;transition-property:opacity,visibility}.tooltip.is-open .tooltip-panel,.tooltip:focus-within .tooltip-panel,.tooltip:hover .tooltip-panel{opacity:1;visibility:visible;animation:tooltip_reveal .15s ease both}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.g-0{gap:0!important}.gx-0{-moz-column-gap:0!important;column-gap:0!important}.gy-0{row-gap:0!important}.m-1{margin:5px!important}.mt-1{margin-top:5px!important}.mr-1{margin-right:5px!important}.mb-1{margin-bottom:5px!important}.ml-1{margin-left:5px!important}.mx-1{margin-left:5px!important;margin-right:5px!important}.my-1{margin-top:5px!important;margin-bottom:5px!important}.p-1{padding:5px!important}.pt-1{padding-top:5px!important}.pr-1{padding-right:5px!important}.pb-1{padding-bottom:5px!important}.pl-1{padding-left:5px!important}.px-1{padding-left:5px!important;padding-right:5px!important}.py-1{padding-top:5px!important;padding-bottom:5px!important}.g-1{gap:5px!important}.gx-1{-moz-column-gap:5px!important;column-gap:5px!important}.gy-1{row-gap:5px!important}.m-2{margin:8px!important}.mt-2{margin-top:8px!important}.mr-2{margin-right:8px!important}.mb-2{margin-bottom:8px!important}.ml-2{margin-left:8px!important}.mx-2{margin-left:8px!important;margin-right:8px!important}.my-2{margin-top:8px!important;margin-bottom:8px!important}.p-2{padding:8px!important}.pt-2{padding-top:8px!important}.pr-2{padding-right:8px!important}.pb-2{padding-bottom:8px!important}.pl-2{padding-left:8px!important}.px-2{padding-left:8px!important;padding-right:8px!important}.py-2{padding-top:8px!important;padding-bottom:8px!important}.g-2{gap:8px!important}.gx-2{-moz-column-gap:8px!important;column-gap:8px!important}.gy-2{row-gap:8px!important}.m-3{margin:12px!important}.mt-3{margin-top:12px!important}.mr-3{margin-right:12px!important}.mb-3{margin-bottom:12px!important}.ml-3{margin-left:12px!important}.mx-3{margin-left:12px!important;margin-right:12px!important}.my-3{margin-top:12px!important;margin-bottom:12px!important}.p-3{padding:12px!important}.pt-3{padding-top:12px!important}.pr-3{padding-right:12px!important}.pb-3{padding-bottom:12px!important}.pl-3{padding-left:12px!important}.px-3{padding-left:12px!important;padding-right:12px!important}.py-3{padding-top:12px!important;padding-bottom:12px!important}.g-3{gap:12px!important}.gx-3{-moz-column-gap:12px!important;column-gap:12px!important}.gy-3{row-gap:12px!important}.m-4{margin:15px!important}.mt-4{margin-top:15px!important}.mr-4{margin-right:15px!important}.mb-4{margin-bottom:15px!important}.ml-4{margin-left:15px!important}.mx-4{margin-left:15px!important;margin-right:15px!important}.my-4{margin-top:15px!important;margin-bottom:15px!important}.p-4{padding:15px!important}.pt-4{padding-top:15px!important}.pr-4{padding-right:15px!important}.pb-4{padding-bottom:15px!important}.pl-4{padding-left:15px!important}.px-4{padding-left:15px!important;padding-right:15px!important}.py-4{padding-top:15px!important;padding-bottom:15px!important}.g-4{gap:15px!important}.gx-4{-moz-column-gap:15px!important;column-gap:15px!important}.gy-4{row-gap:15px!important}.m-5{margin:18px!important}.mt-5{margin-top:18px!important}.mr-5{margin-right:18px!important}.mb-5{margin-bottom:18px!important}.ml-5{margin-left:18px!important}.mx-5{margin-left:18px!important;margin-right:18px!important}.my-5{margin-top:18px!important;margin-bottom:18px!important}.p-5{padding:18px!important}.pt-5{padding-top:18px!important}.pr-5{padding-right:18px!important}.pb-5{padding-bottom:18px!important}.pl-5{padding-left:18px!important}.px-5{padding-left:18px!important;padding-right:18px!important}.py-5{padding-top:18px!important;padding-bottom:18px!important}.g-5{gap:18px!important}.gx-5{-moz-column-gap:18px!important;column-gap:18px!important}.gy-5{row-gap:18px!important}.m-6{margin:22px!important}.mt-6{margin-top:22px!important}.mr-6{margin-right:22px!important}.mb-6{margin-bottom:22px!important}.ml-6{margin-left:22px!important}.mx-6{margin-left:22px!important;margin-right:22px!important}.my-6{margin-top:22px!important;margin-bottom:22px!important}.p-6{padding:22px!important}.pt-6{padding-top:22px!important}.pr-6{padding-right:22px!important}.pb-6{padding-bottom:22px!important}.pl-6{padding-left:22px!important}.px-6{padding-left:22px!important;padding-right:22px!important}.py-6{padding-top:22px!important;padding-bottom:22px!important}.g-6{gap:22px!important}.gx-6{-moz-column-gap:22px!important;column-gap:22px!important}.gy-6{row-gap:22px!important}.m-7{margin:26px!important}.mt-7{margin-top:26px!important}.mr-7{margin-right:26px!important}.mb-7{margin-bottom:26px!important}.ml-7{margin-left:26px!important}.mx-7{margin-left:26px!important;margin-right:26px!important}.my-7{margin-top:26px!important;margin-bottom:26px!important}.p-7{padding:26px!important}.pt-7{padding-top:26px!important}.pr-7{padding-right:26px!important}.pb-7{padding-bottom:26px!important}.pl-7{padding-left:26px!important}.px-7{padding-left:26px!important;padding-right:26px!important}.py-7{padding-top:26px!important;padding-bottom:26px!important}.g-7{gap:26px!important}.gx-7{-moz-column-gap:26px!important;column-gap:26px!important}.gy-7{row-gap:26px!important}.m-8{margin:34px!important}.mt-8{margin-top:34px!important}.mr-8{margin-right:34px!important}.mb-8{margin-bottom:34px!important}.ml-8{margin-left:34px!important}.mx-8{margin-left:34px!important;margin-right:34px!important}.my-8{margin-top:34px!important;margin-bottom:34px!important}.p-8{padding:34px!important}.pt-8{padding-top:34px!important}.pr-8{padding-right:34px!important}.pb-8{padding-bottom:34px!important}.pl-8{padding-left:34px!important}.px-8{padding-left:34px!important;padding-right:34px!important}.py-8{padding-top:34px!important;padding-bottom:34px!important}.g-8{gap:34px!important}.gx-8{-moz-column-gap:34px!important;column-gap:34px!important}.gy-8{row-gap:34px!important}.m-9{margin:42px!important}.mt-9{margin-top:42px!important}.mr-9{margin-right:42px!important}.mb-9{margin-bottom:42px!important}.ml-9{margin-left:42px!important}.mx-9{margin-left:42px!important;margin-right:42px!important}.my-9{margin-top:42px!important;margin-bottom:42px!important}.p-9{padding:42px!important}.pt-9{padding-top:42px!important}.pr-9{padding-right:42px!important}.pb-9{padding-bottom:42px!important}.pl-9{padding-left:42px!important}.px-9{padding-left:42px!important;padding-right:42px!important}.py-9{padding-top:42px!important;padding-bottom:42px!important}.g-9{gap:42px!important}.gx-9{-moz-column-gap:42px!important;column-gap:42px!important}.gy-9{row-gap:42px!important}.m-10{margin:48px!important}.mt-10{margin-top:48px!important}.mr-10{margin-right:48px!important}.mb-10{margin-bottom:48px!important}.ml-10{margin-left:48px!important}.mx-10{margin-left:48px!important;margin-right:48px!important}.my-10{margin-top:48px!important;margin-bottom:48px!important}.p-10{padding:48px!important}.pt-10{padding-top:48px!important}.pr-10{padding-right:48px!important}.pb-10{padding-bottom:48px!important}.pl-10{padding-left:48px!important}.px-10{padding-left:48px!important;padding-right:48px!important}.py-10{padding-top:48px!important;padding-bottom:48px!important}.g-10{gap:48px!important}.gx-10{-moz-column-gap:48px!important;column-gap:48px!important}.gy-10{row-gap:48px!important}.m-11{margin:64px!important}.mt-11{margin-top:64px!important}.mr-11{margin-right:64px!important}.mb-11{margin-bottom:64px!important}.ml-11{margin-left:64px!important}.mx-11{margin-left:64px!important;margin-right:64px!important}.my-11{margin-top:64px!important;margin-bottom:64px!important}.p-11{padding:64px!important}.pt-11{padding-top:64px!important}.pr-11{padding-right:64px!important}.pb-11{padding-bottom:64px!important}.pl-11{padding-left:64px!important}.px-11{padding-left:64px!important;padding-right:64px!important}.py-11{padding-top:64px!important;padding-bottom:64px!important}.g-11{gap:64px!important}.gx-11{-moz-column-gap:64px!important;column-gap:64px!important}.gy-11{row-gap:64px!important}.m-12{margin:80px!important}.mt-12{margin-top:80px!important}.mr-12{margin-right:80px!important}.mb-12{margin-bottom:80px!important}.ml-12{margin-left:80px!important}.mx-12{margin-left:80px!important;margin-right:80px!important}.my-12{margin-top:80px!important;margin-bottom:80px!important}.p-12{padding:80px!important}.pt-12{padding-top:80px!important}.pr-12{padding-right:80px!important}.pb-12{padding-bottom:80px!important}.pl-12{padding-left:80px!important}.px-12{padding-left:80px!important;padding-right:80px!important}.py-12{padding-top:80px!important;padding-bottom:80px!important}.g-12{gap:80px!important}.gx-12{-moz-column-gap:80px!important;column-gap:80px!important}.gy-12{row-gap:80px!important}.row{display:flex;flex-direction:row}@media(max-width:1279px){.row.adaptive{flex-direction:column}}.column{display:flex;flex-direction:column}.f-grid{display:flex;flex-direction:row;flex-wrap:wrap}.grid{display:grid}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.items-start{align-items:flex-start!important}.items-center{align-items:center!important}.items-end{align-items:flex-end!important}.justify-start{justify-content:flex-start!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-end{justify-content:flex-end!important}.w-100{width:100%}.w-auto{width:auto!important}.w-fit{width:-moz-fit-content!important;width:fit-content!important}.w-200{width:200%}.h-100{height:100%}.min-w-0{min-width:0!important}.overflow-hidden{overflow:hidden!important}.overflow-auto{overflow:auto!important}.fs-xs{font-size:12px}.fs-sm{font-size:13px}.fs-md,.fs-base{font-size:14px}.fs-lg{font-size:15px}.fs-xl{font-size:18px}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-uppercase{text-transform:uppercase!important}.text-nowrap{white-space:nowrap!important}.d-none{display:none!important}.d-block{display:block!important}.d-inline-flex{display:inline-flex!important}.d-flex{display:flex!important}.d-grid{display:grid!important}@media(max-width:767px){.grid-2,.grid-3{grid-template-columns:1fr}}*{box-sizing:border-box}body,html{padding:0;margin:0}body{background-color:#16161e;color:#c0caf5}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{width:10px;background:#16161e;cursor:pointer}::-webkit-scrollbar-thumb{width:10px;background:#414868;cursor:default}::-webkit-scrollbar-corner{background:0 0;height:1px}::-webkit-scrollbar-button{display:none}.ph.normalize{position:relative;top:.15em}@font-face{font-family:Phosphor;src:url(/assets/Phosphor-DtdjzkpE.woff2) format("woff2"),url(/assets/Phosphor-BdqudwT5.woff) format("woff"),url(/assets/Phosphor-CDxgqcPu.ttf) format("truetype"),url(/assets/Phosphor-BXRFlF4V.svg#Phosphor) format("svg");font-weight:400;font-style:normal;font-display:block}.ph{font-family:Phosphor!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;letter-spacing:0;-webkit-font-feature-settings:"liga";-moz-font-feature-settings:"liga=1";-moz-font-feature-settings:"liga";-ms-font-feature-settings:"liga" 1;font-feature-settings:"liga";-webkit-font-variant-ligatures:discretionary-ligatures;font-variant-ligatures:discretionary-ligatures;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ph.ph-acorn:before{content:""}.ph.ph-address-book:before{content:""}.ph.ph-address-book-tabs:before{content:""}.ph.ph-air-traffic-control:before{content:""}.ph.ph-airplane:before{content:""}.ph.ph-airplane-in-flight:before{content:""}.ph.ph-airplane-landing:before{content:""}.ph.ph-airplane-takeoff:before{content:""}.ph.ph-airplane-taxiing:before{content:""}.ph.ph-airplane-tilt:before{content:""}.ph.ph-airplay:before{content:""}.ph.ph-alarm:before{content:""}.ph.ph-alien:before{content:""}.ph.ph-align-bottom:before{content:""}.ph.ph-align-bottom-simple:before{content:""}.ph.ph-align-center-horizontal:before{content:""}.ph.ph-align-center-horizontal-simple:before{content:""}.ph.ph-align-center-vertical:before{content:""}.ph.ph-align-center-vertical-simple:before{content:""}.ph.ph-align-left:before{content:""}.ph.ph-align-left-simple:before{content:""}.ph.ph-align-right:before{content:""}.ph.ph-align-right-simple:before{content:""}.ph.ph-align-top:before{content:""}.ph.ph-align-top-simple:before{content:""}.ph.ph-amazon-logo:before{content:""}.ph.ph-ambulance:before{content:""}.ph.ph-anchor:before{content:""}.ph.ph-anchor-simple:before{content:""}.ph.ph-android-logo:before{content:""}.ph.ph-angle:before{content:""}.ph.ph-angular-logo:before{content:""}.ph.ph-aperture:before{content:""}.ph.ph-app-store-logo:before{content:""}.ph.ph-app-window:before{content:""}.ph.ph-apple-logo:before{content:""}.ph.ph-apple-podcasts-logo:before{content:""}.ph.ph-approximate-equals:before{content:""}.ph.ph-archive:before{content:""}.ph.ph-armchair:before{content:""}.ph.ph-arrow-arc-left:before{content:""}.ph.ph-arrow-arc-right:before{content:""}.ph.ph-arrow-bend-double-up-left:before{content:""}.ph.ph-arrow-bend-double-up-right:before{content:""}.ph.ph-arrow-bend-down-left:before{content:""}.ph.ph-arrow-bend-down-right:before{content:""}.ph.ph-arrow-bend-left-down:before{content:""}.ph.ph-arrow-bend-left-up:before{content:""}.ph.ph-arrow-bend-right-down:before{content:""}.ph.ph-arrow-bend-right-up:before{content:""}.ph.ph-arrow-bend-up-left:before{content:""}.ph.ph-arrow-bend-up-right:before{content:""}.ph.ph-arrow-circle-down:before{content:""}.ph.ph-arrow-circle-down-left:before{content:""}.ph.ph-arrow-circle-down-right:before{content:""}.ph.ph-arrow-circle-left:before{content:""}.ph.ph-arrow-circle-right:before{content:""}.ph.ph-arrow-circle-up:before{content:""}.ph.ph-arrow-circle-up-left:before{content:""}.ph.ph-arrow-circle-up-right:before{content:""}.ph.ph-arrow-clockwise:before{content:""}.ph.ph-arrow-counter-clockwise:before{content:""}.ph.ph-arrow-down:before{content:""}.ph.ph-arrow-down-left:before{content:""}.ph.ph-arrow-down-right:before{content:""}.ph.ph-arrow-elbow-down-left:before{content:""}.ph.ph-arrow-elbow-down-right:before{content:""}.ph.ph-arrow-elbow-left:before{content:""}.ph.ph-arrow-elbow-left-down:before{content:""}.ph.ph-arrow-elbow-left-up:before{content:""}.ph.ph-arrow-elbow-right:before{content:""}.ph.ph-arrow-elbow-right-down:before{content:""}.ph.ph-arrow-elbow-right-up:before{content:""}.ph.ph-arrow-elbow-up-left:before{content:""}.ph.ph-arrow-elbow-up-right:before{content:""}.ph.ph-arrow-fat-down:before{content:""}.ph.ph-arrow-fat-left:before{content:""}.ph.ph-arrow-fat-line-down:before{content:""}.ph.ph-arrow-fat-line-left:before{content:""}.ph.ph-arrow-fat-line-right:before{content:""}.ph.ph-arrow-fat-line-up:before{content:""}.ph.ph-arrow-fat-lines-down:before{content:""}.ph.ph-arrow-fat-lines-left:before{content:""}.ph.ph-arrow-fat-lines-right:before{content:""}.ph.ph-arrow-fat-lines-up:before{content:""}.ph.ph-arrow-fat-right:before{content:""}.ph.ph-arrow-fat-up:before{content:""}.ph.ph-arrow-left:before{content:""}.ph.ph-arrow-line-down:before{content:""}.ph.ph-arrow-line-down-left:before{content:""}.ph.ph-arrow-line-down-right:before{content:""}.ph.ph-arrow-line-left:before{content:""}.ph.ph-arrow-line-right:before{content:""}.ph.ph-arrow-line-up:before{content:""}.ph.ph-arrow-line-up-left:before{content:""}.ph.ph-arrow-line-up-right:before{content:""}.ph.ph-arrow-right:before{content:""}.ph.ph-arrow-square-down:before{content:""}.ph.ph-arrow-square-down-left:before{content:""}.ph.ph-arrow-square-down-right:before{content:""}.ph.ph-arrow-square-in:before{content:""}.ph.ph-arrow-square-left:before{content:""}.ph.ph-arrow-square-out:before{content:""}.ph.ph-arrow-square-right:before{content:""}.ph.ph-arrow-square-up:before{content:""}.ph.ph-arrow-square-up-left:before{content:""}.ph.ph-arrow-square-up-right:before{content:""}.ph.ph-arrow-u-down-left:before{content:""}.ph.ph-arrow-u-down-right:before{content:""}.ph.ph-arrow-u-left-down:before{content:""}.ph.ph-arrow-u-left-up:before{content:""}.ph.ph-arrow-u-right-down:before{content:""}.ph.ph-arrow-u-right-up:before{content:""}.ph.ph-arrow-u-up-left:before{content:""}.ph.ph-arrow-u-up-right:before{content:""}.ph.ph-arrow-up:before{content:""}.ph.ph-arrow-up-left:before{content:""}.ph.ph-arrow-up-right:before{content:""}.ph.ph-arrows-clockwise:before{content:""}.ph.ph-arrows-counter-clockwise:before{content:""}.ph.ph-arrows-down-up:before{content:""}.ph.ph-arrows-horizontal:before{content:""}.ph.ph-arrows-in:before{content:""}.ph.ph-arrows-in-cardinal:before{content:""}.ph.ph-arrows-in-line-horizontal:before{content:""}.ph.ph-arrows-in-line-vertical:before{content:""}.ph.ph-arrows-in-simple:before{content:""}.ph.ph-arrows-left-right:before{content:""}.ph.ph-arrows-merge:before{content:""}.ph.ph-arrows-out:before{content:""}.ph.ph-arrows-out-cardinal:before{content:""}.ph.ph-arrows-out-line-horizontal:before{content:""}.ph.ph-arrows-out-line-vertical:before{content:""}.ph.ph-arrows-out-simple:before{content:""}.ph.ph-arrows-split:before{content:""}.ph.ph-arrows-vertical:before{content:""}.ph.ph-article:before{content:""}.ph.ph-article-medium:before{content:""}.ph.ph-article-ny-times:before{content:""}.ph.ph-asclepius:before{content:""}.ph.ph-caduceus:before{content:""}.ph.ph-asterisk:before{content:""}.ph.ph-asterisk-simple:before{content:""}.ph.ph-at:before{content:""}.ph.ph-atom:before{content:""}.ph.ph-avocado:before{content:""}.ph.ph-axe:before{content:""}.ph.ph-baby:before{content:""}.ph.ph-baby-carriage:before{content:""}.ph.ph-backpack:before{content:""}.ph.ph-backspace:before{content:""}.ph.ph-bag:before{content:""}.ph.ph-bag-simple:before{content:""}.ph.ph-balloon:before{content:""}.ph.ph-bandaids:before{content:""}.ph.ph-bank:before{content:""}.ph.ph-barbell:before{content:""}.ph.ph-barcode:before{content:""}.ph.ph-barn:before{content:""}.ph.ph-barricade:before{content:""}.ph.ph-baseball:before{content:""}.ph.ph-baseball-cap:before{content:""}.ph.ph-baseball-helmet:before{content:""}.ph.ph-basket:before{content:""}.ph.ph-basketball:before{content:""}.ph.ph-bathtub:before{content:""}.ph.ph-battery-charging:before{content:""}.ph.ph-battery-charging-vertical:before{content:""}.ph.ph-battery-empty:before{content:""}.ph.ph-battery-full:before{content:""}.ph.ph-battery-high:before{content:""}.ph.ph-battery-low:before{content:""}.ph.ph-battery-medium:before{content:""}.ph.ph-battery-plus:before{content:""}.ph.ph-battery-plus-vertical:before{content:""}.ph.ph-battery-vertical-empty:before{content:""}.ph.ph-battery-vertical-full:before{content:""}.ph.ph-battery-vertical-high:before{content:""}.ph.ph-battery-vertical-low:before{content:""}.ph.ph-battery-vertical-medium:before{content:""}.ph.ph-battery-warning:before{content:""}.ph.ph-battery-warning-vertical:before{content:""}.ph.ph-beach-ball:before{content:""}.ph.ph-beanie:before{content:""}.ph.ph-bed:before{content:""}.ph.ph-beer-bottle:before{content:""}.ph.ph-beer-stein:before{content:""}.ph.ph-behance-logo:before{content:""}.ph.ph-bell:before{content:""}.ph.ph-bell-ringing:before{content:""}.ph.ph-bell-simple:before{content:""}.ph.ph-bell-simple-ringing:before{content:""}.ph.ph-bell-simple-slash:before{content:""}.ph.ph-bell-simple-z:before{content:""}.ph.ph-bell-slash:before{content:""}.ph.ph-bell-z:before{content:""}.ph.ph-belt:before{content:""}.ph.ph-bezier-curve:before{content:""}.ph.ph-bicycle:before{content:""}.ph.ph-binary:before{content:""}.ph.ph-binoculars:before{content:""}.ph.ph-biohazard:before{content:""}.ph.ph-bird:before{content:""}.ph.ph-blueprint:before{content:""}.ph.ph-bluetooth:before{content:""}.ph.ph-bluetooth-connected:before{content:""}.ph.ph-bluetooth-slash:before{content:""}.ph.ph-bluetooth-x:before{content:""}.ph.ph-boat:before{content:""}.ph.ph-bomb:before{content:""}.ph.ph-bone:before{content:""}.ph.ph-book:before{content:""}.ph.ph-book-bookmark:before{content:""}.ph.ph-book-open:before{content:""}.ph.ph-book-open-text:before{content:""}.ph.ph-book-open-user:before{content:""}.ph.ph-bookmark:before{content:""}.ph.ph-bookmark-simple:before{content:""}.ph.ph-bookmarks:before{content:""}.ph.ph-bookmarks-simple:before{content:""}.ph.ph-books:before{content:""}.ph.ph-boot:before{content:""}.ph.ph-boules:before{content:""}.ph.ph-bounding-box:before{content:""}.ph.ph-bowl-food:before{content:""}.ph.ph-bowl-steam:before{content:""}.ph.ph-bowling-ball:before{content:""}.ph.ph-box-arrow-down:before{content:""}.ph.ph-archive-box:before{content:""}.ph.ph-box-arrow-up:before{content:""}.ph.ph-boxing-glove:before{content:""}.ph.ph-brackets-angle:before{content:""}.ph.ph-brackets-curly:before{content:""}.ph.ph-brackets-round:before{content:""}.ph.ph-brackets-square:before{content:""}.ph.ph-brain:before{content:""}.ph.ph-brandy:before{content:""}.ph.ph-bread:before{content:""}.ph.ph-bridge:before{content:""}.ph.ph-briefcase:before{content:""}.ph.ph-briefcase-metal:before{content:""}.ph.ph-broadcast:before{content:""}.ph.ph-broom:before{content:""}.ph.ph-browser:before{content:""}.ph.ph-browsers:before{content:""}.ph.ph-bug:before{content:""}.ph.ph-bug-beetle:before{content:""}.ph.ph-bug-droid:before{content:""}.ph.ph-building:before{content:""}.ph.ph-building-apartment:before{content:""}.ph.ph-building-office:before{content:""}.ph.ph-buildings:before{content:""}.ph.ph-bulldozer:before{content:""}.ph.ph-bus:before{content:""}.ph.ph-butterfly:before{content:""}.ph.ph-cable-car:before{content:""}.ph.ph-cactus:before{content:""}.ph.ph-cake:before{content:""}.ph.ph-calculator:before{content:""}.ph.ph-calendar:before{content:""}.ph.ph-calendar-blank:before{content:""}.ph.ph-calendar-check:before{content:""}.ph.ph-calendar-dot:before{content:""}.ph.ph-calendar-dots:before{content:""}.ph.ph-calendar-heart:before{content:""}.ph.ph-calendar-minus:before{content:""}.ph.ph-calendar-plus:before{content:""}.ph.ph-calendar-slash:before{content:""}.ph.ph-calendar-star:before{content:""}.ph.ph-calendar-x:before{content:""}.ph.ph-call-bell:before{content:""}.ph.ph-camera:before{content:""}.ph.ph-camera-plus:before{content:""}.ph.ph-camera-rotate:before{content:""}.ph.ph-camera-slash:before{content:""}.ph.ph-campfire:before{content:""}.ph.ph-car:before{content:""}.ph.ph-car-battery:before{content:""}.ph.ph-car-profile:before{content:""}.ph.ph-car-simple:before{content:""}.ph.ph-cardholder:before{content:""}.ph.ph-cards:before{content:""}.ph.ph-cards-three:before{content:""}.ph.ph-caret-circle-double-down:before{content:""}.ph.ph-caret-circle-double-left:before{content:""}.ph.ph-caret-circle-double-right:before{content:""}.ph.ph-caret-circle-double-up:before{content:""}.ph.ph-caret-circle-down:before{content:""}.ph.ph-caret-circle-left:before{content:""}.ph.ph-caret-circle-right:before{content:""}.ph.ph-caret-circle-up:before{content:""}.ph.ph-caret-circle-up-down:before{content:""}.ph.ph-caret-double-down:before{content:""}.ph.ph-caret-double-left:before{content:""}.ph.ph-caret-double-right:before{content:""}.ph.ph-caret-double-up:before{content:""}.ph.ph-caret-down:before{content:""}.ph.ph-caret-left:before{content:""}.ph.ph-caret-line-down:before{content:""}.ph.ph-caret-line-left:before{content:""}.ph.ph-caret-line-right:before{content:""}.ph.ph-caret-line-up:before{content:""}.ph.ph-caret-right:before{content:""}.ph.ph-caret-up:before{content:""}.ph.ph-caret-up-down:before{content:""}.ph.ph-carrot:before{content:""}.ph.ph-cash-register:before{content:""}.ph.ph-cassette-tape:before{content:""}.ph.ph-castle-turret:before{content:""}.ph.ph-cat:before{content:""}.ph.ph-cell-signal-full:before{content:""}.ph.ph-cell-signal-high:before{content:""}.ph.ph-cell-signal-low:before{content:""}.ph.ph-cell-signal-medium:before{content:""}.ph.ph-cell-signal-none:before{content:""}.ph.ph-cell-signal-slash:before{content:""}.ph.ph-cell-signal-x:before{content:""}.ph.ph-cell-tower:before{content:""}.ph.ph-certificate:before{content:""}.ph.ph-chair:before{content:""}.ph.ph-chalkboard:before{content:""}.ph.ph-chalkboard-simple:before{content:""}.ph.ph-chalkboard-teacher:before{content:""}.ph.ph-champagne:before{content:""}.ph.ph-charging-station:before{content:""}.ph.ph-chart-bar:before{content:""}.ph.ph-chart-bar-horizontal:before{content:""}.ph.ph-chart-donut:before{content:""}.ph.ph-chart-line:before{content:""}.ph.ph-chart-line-down:before{content:""}.ph.ph-chart-line-up:before{content:""}.ph.ph-chart-pie:before{content:""}.ph.ph-chart-pie-slice:before{content:""}.ph.ph-chart-polar:before{content:""}.ph.ph-chart-scatter:before{content:""}.ph.ph-chat:before{content:""}.ph.ph-chat-centered:before{content:""}.ph.ph-chat-centered-dots:before{content:""}.ph.ph-chat-centered-slash:before{content:""}.ph.ph-chat-centered-text:before{content:""}.ph.ph-chat-circle:before{content:""}.ph.ph-chat-circle-dots:before{content:""}.ph.ph-chat-circle-slash:before{content:""}.ph.ph-chat-circle-text:before{content:""}.ph.ph-chat-dots:before{content:""}.ph.ph-chat-slash:before{content:""}.ph.ph-chat-teardrop:before{content:""}.ph.ph-chat-teardrop-dots:before{content:""}.ph.ph-chat-teardrop-slash:before{content:""}.ph.ph-chat-teardrop-text:before{content:""}.ph.ph-chat-text:before{content:""}.ph.ph-chats:before{content:""}.ph.ph-chats-circle:before{content:""}.ph.ph-chats-teardrop:before{content:""}.ph.ph-check:before{content:""}.ph.ph-check-circle:before{content:""}.ph.ph-check-fat:before{content:""}.ph.ph-check-square:before{content:""}.ph.ph-check-square-offset:before{content:""}.ph.ph-checkerboard:before{content:""}.ph.ph-checks:before{content:""}.ph.ph-cheers:before{content:""}.ph.ph-cheese:before{content:""}.ph.ph-chef-hat:before{content:""}.ph.ph-cherries:before{content:""}.ph.ph-church:before{content:""}.ph.ph-cigarette:before{content:""}.ph.ph-cigarette-slash:before{content:""}.ph.ph-circle:before{content:""}.ph.ph-circle-dashed:before{content:""}.ph.ph-circle-half:before{content:""}.ph.ph-circle-half-tilt:before{content:""}.ph.ph-circle-notch:before{content:""}.ph.ph-circles-four:before{content:""}.ph.ph-circles-three:before{content:""}.ph.ph-circles-three-plus:before{content:""}.ph.ph-circuitry:before{content:""}.ph.ph-city:before{content:""}.ph.ph-clipboard:before{content:""}.ph.ph-clipboard-text:before{content:""}.ph.ph-clock:before{content:""}.ph.ph-clock-afternoon:before{content:""}.ph.ph-clock-clockwise:before{content:""}.ph.ph-clock-countdown:before{content:""}.ph.ph-clock-counter-clockwise:before{content:""}.ph.ph-clock-user:before{content:""}.ph.ph-closed-captioning:before{content:""}.ph.ph-cloud:before{content:""}.ph.ph-cloud-arrow-down:before{content:""}.ph.ph-cloud-arrow-up:before{content:""}.ph.ph-cloud-check:before{content:""}.ph.ph-cloud-fog:before{content:""}.ph.ph-cloud-lightning:before{content:""}.ph.ph-cloud-moon:before{content:""}.ph.ph-cloud-rain:before{content:""}.ph.ph-cloud-slash:before{content:""}.ph.ph-cloud-snow:before{content:""}.ph.ph-cloud-sun:before{content:""}.ph.ph-cloud-warning:before{content:""}.ph.ph-cloud-x:before{content:""}.ph.ph-clover:before{content:""}.ph.ph-club:before{content:""}.ph.ph-coat-hanger:before{content:""}.ph.ph-coda-logo:before{content:""}.ph.ph-code:before{content:""}.ph.ph-code-block:before{content:""}.ph.ph-code-simple:before{content:""}.ph.ph-codepen-logo:before{content:""}.ph.ph-codesandbox-logo:before{content:""}.ph.ph-coffee:before{content:""}.ph.ph-coffee-bean:before{content:""}.ph.ph-coin:before{content:""}.ph.ph-coin-vertical:before{content:""}.ph.ph-coins:before{content:""}.ph.ph-columns:before{content:""}.ph.ph-columns-plus-left:before{content:""}.ph.ph-columns-plus-right:before{content:""}.ph.ph-command:before{content:""}.ph.ph-compass:before{content:""}.ph.ph-compass-rose:before{content:""}.ph.ph-compass-tool:before{content:""}.ph.ph-computer-tower:before{content:""}.ph.ph-confetti:before{content:""}.ph.ph-contactless-payment:before{content:""}.ph.ph-control:before{content:""}.ph.ph-cookie:before{content:""}.ph.ph-cooking-pot:before{content:""}.ph.ph-copy:before{content:""}.ph.ph-copy-simple:before{content:""}.ph.ph-copyleft:before{content:""}.ph.ph-copyright:before{content:""}.ph.ph-corners-in:before{content:""}.ph.ph-corners-out:before{content:""}.ph.ph-couch:before{content:""}.ph.ph-court-basketball:before{content:""}.ph.ph-cow:before{content:""}.ph.ph-cowboy-hat:before{content:""}.ph.ph-cpu:before{content:""}.ph.ph-crane:before{content:""}.ph.ph-crane-tower:before{content:""}.ph.ph-credit-card:before{content:""}.ph.ph-cricket:before{content:""}.ph.ph-crop:before{content:""}.ph.ph-cross:before{content:""}.ph.ph-crosshair:before{content:""}.ph.ph-crosshair-simple:before{content:""}.ph.ph-crown:before{content:""}.ph.ph-crown-cross:before{content:""}.ph.ph-crown-simple:before{content:""}.ph.ph-cube:before{content:""}.ph.ph-cube-focus:before{content:""}.ph.ph-cube-transparent:before{content:""}.ph.ph-currency-btc:before{content:""}.ph.ph-currency-circle-dollar:before{content:""}.ph.ph-currency-cny:before{content:""}.ph.ph-currency-dollar:before{content:""}.ph.ph-currency-dollar-simple:before{content:""}.ph.ph-currency-eth:before{content:""}.ph.ph-currency-eur:before{content:""}.ph.ph-currency-gbp:before{content:""}.ph.ph-currency-inr:before{content:""}.ph.ph-currency-jpy:before{content:""}.ph.ph-currency-krw:before{content:""}.ph.ph-currency-kzt:before{content:""}.ph.ph-currency-ngn:before{content:""}.ph.ph-currency-rub:before{content:""}.ph.ph-cursor:before{content:""}.ph.ph-cursor-click:before{content:""}.ph.ph-cursor-text:before{content:""}.ph.ph-cylinder:before{content:""}.ph.ph-database:before{content:""}.ph.ph-desk:before{content:""}.ph.ph-desktop:before{content:""}.ph.ph-desktop-tower:before{content:""}.ph.ph-detective:before{content:""}.ph.ph-dev-to-logo:before{content:""}.ph.ph-device-mobile:before{content:""}.ph.ph-device-mobile-camera:before{content:""}.ph.ph-device-mobile-slash:before{content:""}.ph.ph-device-mobile-speaker:before{content:""}.ph.ph-device-rotate:before{content:""}.ph.ph-device-tablet:before{content:""}.ph.ph-device-tablet-camera:before{content:""}.ph.ph-device-tablet-speaker:before{content:""}.ph.ph-devices:before{content:""}.ph.ph-diamond:before{content:""}.ph.ph-diamonds-four:before{content:""}.ph.ph-dice-five:before{content:""}.ph.ph-dice-four:before{content:""}.ph.ph-dice-one:before{content:""}.ph.ph-dice-six:before{content:""}.ph.ph-dice-three:before{content:""}.ph.ph-dice-two:before{content:""}.ph.ph-disc:before{content:""}.ph.ph-disco-ball:before{content:""}.ph.ph-discord-logo:before{content:""}.ph.ph-divide:before{content:""}.ph.ph-dna:before{content:""}.ph.ph-dog:before{content:""}.ph.ph-door:before{content:""}.ph.ph-door-open:before{content:""}.ph.ph-dot:before{content:""}.ph.ph-dot-outline:before{content:""}.ph.ph-dots-nine:before{content:""}.ph.ph-dots-six:before{content:""}.ph.ph-dots-six-vertical:before{content:""}.ph.ph-dots-three:before{content:""}.ph.ph-dots-three-circle:before{content:""}.ph.ph-dots-three-circle-vertical:before{content:""}.ph.ph-dots-three-outline:before{content:""}.ph.ph-dots-three-outline-vertical:before{content:""}.ph.ph-dots-three-vertical:before{content:""}.ph.ph-download:before{content:""}.ph.ph-download-simple:before{content:""}.ph.ph-dress:before{content:""}.ph.ph-dresser:before{content:""}.ph.ph-dribbble-logo:before{content:""}.ph.ph-drone:before{content:""}.ph.ph-drop:before{content:""}.ph.ph-drop-half:before{content:""}.ph.ph-drop-half-bottom:before{content:""}.ph.ph-drop-simple:before{content:""}.ph.ph-drop-slash:before{content:""}.ph.ph-dropbox-logo:before{content:""}.ph.ph-ear:before{content:""}.ph.ph-ear-slash:before{content:""}.ph.ph-egg:before{content:""}.ph.ph-egg-crack:before{content:""}.ph.ph-eject:before{content:""}.ph.ph-eject-simple:before{content:""}.ph.ph-elevator:before{content:""}.ph.ph-empty:before{content:""}.ph.ph-engine:before{content:""}.ph.ph-envelope:before{content:""}.ph.ph-envelope-open:before{content:""}.ph.ph-envelope-simple:before{content:""}.ph.ph-envelope-simple-open:before{content:""}.ph.ph-equalizer:before{content:""}.ph.ph-equals:before{content:""}.ph.ph-eraser:before{content:""}.ph.ph-escalator-down:before{content:""}.ph.ph-escalator-up:before{content:""}.ph.ph-exam:before{content:""}.ph.ph-exclamation-mark:before{content:""}.ph.ph-exclude:before{content:""}.ph.ph-exclude-square:before{content:""}.ph.ph-export:before{content:""}.ph.ph-eye:before{content:""}.ph.ph-eye-closed:before{content:""}.ph.ph-eye-slash:before{content:""}.ph.ph-eyedropper:before{content:""}.ph.ph-eyedropper-sample:before{content:""}.ph.ph-eyeglasses:before{content:""}.ph.ph-eyes:before{content:""}.ph.ph-face-mask:before{content:""}.ph.ph-facebook-logo:before{content:""}.ph.ph-factory:before{content:""}.ph.ph-faders:before{content:""}.ph.ph-faders-horizontal:before{content:""}.ph.ph-fallout-shelter:before{content:""}.ph.ph-fan:before{content:""}.ph.ph-farm:before{content:""}.ph.ph-fast-forward:before{content:""}.ph.ph-fast-forward-circle:before{content:""}.ph.ph-feather:before{content:""}.ph.ph-fediverse-logo:before{content:""}.ph.ph-figma-logo:before{content:""}.ph.ph-file:before{content:""}.ph.ph-file-archive:before{content:""}.ph.ph-file-arrow-down:before{content:""}.ph.ph-file-arrow-up:before{content:""}.ph.ph-file-audio:before{content:""}.ph.ph-file-c:before{content:""}.ph.ph-file-c-sharp:before{content:""}.ph.ph-file-cloud:before{content:""}.ph.ph-file-code:before{content:""}.ph.ph-file-cpp:before{content:""}.ph.ph-file-css:before{content:""}.ph.ph-file-csv:before{content:""}.ph.ph-file-dashed:before{content:""}.ph.ph-file-dotted:before{content:""}.ph.ph-file-doc:before{content:""}.ph.ph-file-html:before{content:""}.ph.ph-file-image:before{content:""}.ph.ph-file-ini:before{content:""}.ph.ph-file-jpg:before{content:""}.ph.ph-file-js:before{content:""}.ph.ph-file-jsx:before{content:""}.ph.ph-file-lock:before{content:""}.ph.ph-file-magnifying-glass:before{content:""}.ph.ph-file-search:before{content:""}.ph.ph-file-md:before{content:""}.ph.ph-file-minus:before{content:""}.ph.ph-file-pdf:before{content:""}.ph.ph-file-plus:before{content:""}.ph.ph-file-png:before{content:""}.ph.ph-file-ppt:before{content:""}.ph.ph-file-py:before{content:""}.ph.ph-file-rs:before{content:""}.ph.ph-file-sql:before{content:""}.ph.ph-file-svg:before{content:""}.ph.ph-file-text:before{content:""}.ph.ph-file-ts:before{content:""}.ph.ph-file-tsx:before{content:""}.ph.ph-file-txt:before{content:""}.ph.ph-file-video:before{content:""}.ph.ph-file-vue:before{content:""}.ph.ph-file-x:before{content:""}.ph.ph-file-xls:before{content:""}.ph.ph-file-zip:before{content:""}.ph.ph-files:before{content:""}.ph.ph-film-reel:before{content:""}.ph.ph-film-script:before{content:""}.ph.ph-film-slate:before{content:""}.ph.ph-film-strip:before{content:""}.ph.ph-fingerprint:before{content:""}.ph.ph-fingerprint-simple:before{content:""}.ph.ph-finn-the-human:before{content:""}.ph.ph-fire:before{content:""}.ph.ph-fire-extinguisher:before{content:""}.ph.ph-fire-simple:before{content:""}.ph.ph-fire-truck:before{content:""}.ph.ph-first-aid:before{content:""}.ph.ph-first-aid-kit:before{content:""}.ph.ph-fish:before{content:""}.ph.ph-fish-simple:before{content:""}.ph.ph-flag:before{content:""}.ph.ph-flag-banner:before{content:""}.ph.ph-flag-banner-fold:before{content:""}.ph.ph-flag-checkered:before{content:""}.ph.ph-flag-pennant:before{content:""}.ph.ph-flame:before{content:""}.ph.ph-flashlight:before{content:""}.ph.ph-flask:before{content:""}.ph.ph-flip-horizontal:before{content:""}.ph.ph-flip-vertical:before{content:""}.ph.ph-floppy-disk:before{content:""}.ph.ph-floppy-disk-back:before{content:""}.ph.ph-flow-arrow:before{content:""}.ph.ph-flower:before{content:""}.ph.ph-flower-lotus:before{content:""}.ph.ph-flower-tulip:before{content:""}.ph.ph-flying-saucer:before{content:""}.ph.ph-folder:before{content:""}.ph.ph-folder-notch:before{content:""}.ph.ph-folder-dashed:before{content:""}.ph.ph-folder-dotted:before{content:""}.ph.ph-folder-lock:before{content:""}.ph.ph-folder-minus:before{content:""}.ph.ph-folder-notch-minus:before{content:""}.ph.ph-folder-open:before{content:""}.ph.ph-folder-notch-open:before{content:""}.ph.ph-folder-plus:before{content:""}.ph.ph-folder-notch-plus:before{content:""}.ph.ph-folder-simple:before{content:""}.ph.ph-folder-simple-dashed:before{content:""}.ph.ph-folder-simple-dotted:before{content:""}.ph.ph-folder-simple-lock:before{content:""}.ph.ph-folder-simple-minus:before{content:""}.ph.ph-folder-simple-plus:before{content:""}.ph.ph-folder-simple-star:before{content:""}.ph.ph-folder-simple-user:before{content:""}.ph.ph-folder-star:before{content:""}.ph.ph-folder-user:before{content:""}.ph.ph-folders:before{content:""}.ph.ph-football:before{content:""}.ph.ph-football-helmet:before{content:""}.ph.ph-footprints:before{content:""}.ph.ph-fork-knife:before{content:""}.ph.ph-four-k:before{content:""}.ph.ph-frame-corners:before{content:""}.ph.ph-framer-logo:before{content:""}.ph.ph-function:before{content:""}.ph.ph-funnel:before{content:""}.ph.ph-funnel-simple:before{content:""}.ph.ph-funnel-simple-x:before{content:""}.ph.ph-funnel-x:before{content:""}.ph.ph-game-controller:before{content:""}.ph.ph-garage:before{content:""}.ph.ph-gas-can:before{content:""}.ph.ph-gas-pump:before{content:""}.ph.ph-gauge:before{content:""}.ph.ph-gavel:before{content:""}.ph.ph-gear:before{content:""}.ph.ph-gear-fine:before{content:""}.ph.ph-gear-six:before{content:""}.ph.ph-gender-female:before{content:""}.ph.ph-gender-intersex:before{content:""}.ph.ph-gender-male:before{content:""}.ph.ph-gender-neuter:before{content:""}.ph.ph-gender-nonbinary:before{content:""}.ph.ph-gender-transgender:before{content:""}.ph.ph-ghost:before{content:""}.ph.ph-gif:before{content:""}.ph.ph-gift:before{content:""}.ph.ph-git-branch:before{content:""}.ph.ph-git-commit:before{content:""}.ph.ph-git-diff:before{content:""}.ph.ph-git-fork:before{content:""}.ph.ph-git-merge:before{content:""}.ph.ph-git-pull-request:before{content:""}.ph.ph-github-logo:before{content:""}.ph.ph-gitlab-logo:before{content:""}.ph.ph-gitlab-logo-simple:before{content:""}.ph.ph-globe:before{content:""}.ph.ph-globe-hemisphere-east:before{content:""}.ph.ph-globe-hemisphere-west:before{content:""}.ph.ph-globe-simple:before{content:""}.ph.ph-globe-simple-x:before{content:""}.ph.ph-globe-stand:before{content:""}.ph.ph-globe-x:before{content:""}.ph.ph-goggles:before{content:""}.ph.ph-golf:before{content:""}.ph.ph-goodreads-logo:before{content:""}.ph.ph-google-cardboard-logo:before{content:""}.ph.ph-google-chrome-logo:before{content:""}.ph.ph-google-drive-logo:before{content:""}.ph.ph-google-logo:before{content:""}.ph.ph-google-photos-logo:before{content:""}.ph.ph-google-play-logo:before{content:""}.ph.ph-google-podcasts-logo:before{content:""}.ph.ph-gps:before{content:""}.ph.ph-gps-fix:before{content:""}.ph.ph-gps-slash:before{content:""}.ph.ph-gradient:before{content:""}.ph.ph-graduation-cap:before{content:""}.ph.ph-grains:before{content:""}.ph.ph-grains-slash:before{content:""}.ph.ph-graph:before{content:""}.ph.ph-graphics-card:before{content:""}.ph.ph-greater-than:before{content:""}.ph.ph-greater-than-or-equal:before{content:""}.ph.ph-grid-four:before{content:""}.ph.ph-grid-nine:before{content:""}.ph.ph-guitar:before{content:""}.ph.ph-hair-dryer:before{content:""}.ph.ph-hamburger:before{content:""}.ph.ph-hammer:before{content:""}.ph.ph-hand:before{content:""}.ph.ph-hand-arrow-down:before{content:""}.ph.ph-hand-arrow-up:before{content:""}.ph.ph-hand-coins:before{content:""}.ph.ph-hand-deposit:before{content:""}.ph.ph-hand-eye:before{content:""}.ph.ph-hand-fist:before{content:""}.ph.ph-hand-grabbing:before{content:""}.ph.ph-hand-heart:before{content:""}.ph.ph-hand-palm:before{content:""}.ph.ph-hand-peace:before{content:""}.ph.ph-hand-pointing:before{content:""}.ph.ph-hand-soap:before{content:""}.ph.ph-hand-swipe-left:before{content:""}.ph.ph-hand-swipe-right:before{content:""}.ph.ph-hand-tap:before{content:""}.ph.ph-hand-waving:before{content:""}.ph.ph-hand-withdraw:before{content:""}.ph.ph-handbag:before{content:""}.ph.ph-handbag-simple:before{content:""}.ph.ph-hands-clapping:before{content:""}.ph.ph-hands-praying:before{content:""}.ph.ph-handshake:before{content:""}.ph.ph-hard-drive:before{content:""}.ph.ph-hard-drives:before{content:""}.ph.ph-hard-hat:before{content:""}.ph.ph-hash:before{content:""}.ph.ph-hash-straight:before{content:""}.ph.ph-head-circuit:before{content:""}.ph.ph-headlights:before{content:""}.ph.ph-headphones:before{content:""}.ph.ph-headset:before{content:""}.ph.ph-heart:before{content:""}.ph.ph-heart-break:before{content:""}.ph.ph-heart-half:before{content:""}.ph.ph-heart-straight:before{content:""}.ph.ph-heart-straight-break:before{content:""}.ph.ph-heartbeat:before{content:""}.ph.ph-hexagon:before{content:""}.ph.ph-high-definition:before{content:""}.ph.ph-high-heel:before{content:""}.ph.ph-highlighter:before{content:""}.ph.ph-highlighter-circle:before{content:""}.ph.ph-hockey:before{content:""}.ph.ph-hoodie:before{content:""}.ph.ph-horse:before{content:""}.ph.ph-hospital:before{content:""}.ph.ph-hourglass:before{content:""}.ph.ph-hourglass-high:before{content:""}.ph.ph-hourglass-low:before{content:""}.ph.ph-hourglass-medium:before{content:""}.ph.ph-hourglass-simple:before{content:""}.ph.ph-hourglass-simple-high:before{content:""}.ph.ph-hourglass-simple-low:before{content:""}.ph.ph-hourglass-simple-medium:before{content:""}.ph.ph-house:before{content:""}.ph.ph-house-line:before{content:""}.ph.ph-house-simple:before{content:""}.ph.ph-hurricane:before{content:""}.ph.ph-ice-cream:before{content:""}.ph.ph-identification-badge:before{content:""}.ph.ph-identification-card:before{content:""}.ph.ph-image:before{content:""}.ph.ph-image-broken:before{content:""}.ph.ph-image-square:before{content:""}.ph.ph-images:before{content:""}.ph.ph-images-square:before{content:""}.ph.ph-infinity:before{content:""}.ph.ph-lemniscate:before{content:""}.ph.ph-info:before{content:""}.ph.ph-instagram-logo:before{content:""}.ph.ph-intersect:before{content:""}.ph.ph-intersect-square:before{content:""}.ph.ph-intersect-three:before{content:""}.ph.ph-intersection:before{content:""}.ph.ph-invoice:before{content:""}.ph.ph-island:before{content:""}.ph.ph-jar:before{content:""}.ph.ph-jar-label:before{content:""}.ph.ph-jeep:before{content:""}.ph.ph-joystick:before{content:""}.ph.ph-kanban:before{content:""}.ph.ph-key:before{content:""}.ph.ph-key-return:before{content:""}.ph.ph-keyboard:before{content:""}.ph.ph-keyhole:before{content:""}.ph.ph-knife:before{content:""}.ph.ph-ladder:before{content:""}.ph.ph-ladder-simple:before{content:""}.ph.ph-lamp:before{content:""}.ph.ph-lamp-pendant:before{content:""}.ph.ph-laptop:before{content:""}.ph.ph-lasso:before{content:""}.ph.ph-lastfm-logo:before{content:""}.ph.ph-layout:before{content:""}.ph.ph-leaf:before{content:""}.ph.ph-lectern:before{content:""}.ph.ph-lego:before{content:""}.ph.ph-lego-smiley:before{content:""}.ph.ph-less-than:before{content:""}.ph.ph-less-than-or-equal:before{content:""}.ph.ph-letter-circle-h:before{content:""}.ph.ph-letter-circle-p:before{content:""}.ph.ph-letter-circle-v:before{content:""}.ph.ph-lifebuoy:before{content:""}.ph.ph-lightbulb:before{content:""}.ph.ph-lightbulb-filament:before{content:""}.ph.ph-lighthouse:before{content:""}.ph.ph-lightning:before{content:""}.ph.ph-lightning-a:before{content:""}.ph.ph-lightning-slash:before{content:""}.ph.ph-line-segment:before{content:""}.ph.ph-line-segments:before{content:""}.ph.ph-line-vertical:before{content:""}.ph.ph-link:before{content:""}.ph.ph-link-break:before{content:""}.ph.ph-link-simple:before{content:""}.ph.ph-link-simple-break:before{content:""}.ph.ph-link-simple-horizontal:before{content:""}.ph.ph-link-simple-horizontal-break:before{content:""}.ph.ph-linkedin-logo:before{content:""}.ph.ph-linktree-logo:before{content:""}.ph.ph-linux-logo:before{content:""}.ph.ph-list:before{content:""}.ph.ph-list-bullets:before{content:""}.ph.ph-list-checks:before{content:""}.ph.ph-list-dashes:before{content:""}.ph.ph-list-heart:before{content:""}.ph.ph-list-magnifying-glass:before{content:""}.ph.ph-list-numbers:before{content:""}.ph.ph-list-plus:before{content:""}.ph.ph-list-star:before{content:""}.ph.ph-lock:before{content:""}.ph.ph-lock-key:before{content:""}.ph.ph-lock-key-open:before{content:""}.ph.ph-lock-laminated:before{content:""}.ph.ph-lock-laminated-open:before{content:""}.ph.ph-lock-open:before{content:""}.ph.ph-lock-simple:before{content:""}.ph.ph-lock-simple-open:before{content:""}.ph.ph-lockers:before{content:""}.ph.ph-log:before{content:""}.ph.ph-magic-wand:before{content:""}.ph.ph-magnet:before{content:""}.ph.ph-magnet-straight:before{content:""}.ph.ph-magnifying-glass:before{content:""}.ph.ph-magnifying-glass-minus:before{content:""}.ph.ph-magnifying-glass-plus:before{content:""}.ph.ph-mailbox:before{content:""}.ph.ph-map-pin:before{content:""}.ph.ph-map-pin-area:before{content:""}.ph.ph-map-pin-line:before{content:""}.ph.ph-map-pin-plus:before{content:""}.ph.ph-map-pin-simple:before{content:""}.ph.ph-map-pin-simple-area:before{content:""}.ph.ph-map-pin-simple-line:before{content:""}.ph.ph-map-trifold:before{content:""}.ph.ph-markdown-logo:before{content:""}.ph.ph-marker-circle:before{content:""}.ph.ph-martini:before{content:""}.ph.ph-mask-happy:before{content:""}.ph.ph-mask-sad:before{content:""}.ph.ph-mastodon-logo:before{content:""}.ph.ph-math-operations:before{content:""}.ph.ph-matrix-logo:before{content:""}.ph.ph-medal:before{content:""}.ph.ph-medal-military:before{content:""}.ph.ph-medium-logo:before{content:""}.ph.ph-megaphone:before{content:""}.ph.ph-megaphone-simple:before{content:""}.ph.ph-member-of:before{content:""}.ph.ph-memory:before{content:""}.ph.ph-messenger-logo:before{content:""}.ph.ph-meta-logo:before{content:""}.ph.ph-meteor:before{content:""}.ph.ph-metronome:before{content:""}.ph.ph-microphone:before{content:""}.ph.ph-microphone-slash:before{content:""}.ph.ph-microphone-stage:before{content:""}.ph.ph-microscope:before{content:""}.ph.ph-microsoft-excel-logo:before{content:""}.ph.ph-microsoft-outlook-logo:before{content:""}.ph.ph-microsoft-powerpoint-logo:before{content:""}.ph.ph-microsoft-teams-logo:before{content:""}.ph.ph-microsoft-word-logo:before{content:""}.ph.ph-minus:before{content:""}.ph.ph-minus-circle:before{content:""}.ph.ph-minus-square:before{content:""}.ph.ph-money:before{content:""}.ph.ph-money-wavy:before{content:""}.ph.ph-monitor:before{content:""}.ph.ph-monitor-arrow-up:before{content:""}.ph.ph-monitor-play:before{content:""}.ph.ph-moon:before{content:""}.ph.ph-moon-stars:before{content:""}.ph.ph-moped:before{content:""}.ph.ph-moped-front:before{content:""}.ph.ph-mosque:before{content:""}.ph.ph-motorcycle:before{content:""}.ph.ph-mountains:before{content:""}.ph.ph-mouse:before{content:""}.ph.ph-mouse-left-click:before{content:""}.ph.ph-mouse-middle-click:before{content:""}.ph.ph-mouse-right-click:before{content:""}.ph.ph-mouse-scroll:before{content:""}.ph.ph-mouse-simple:before{content:""}.ph.ph-music-note:before{content:""}.ph.ph-music-note-simple:before{content:""}.ph.ph-music-notes:before{content:""}.ph.ph-music-notes-minus:before{content:""}.ph.ph-music-notes-plus:before{content:""}.ph.ph-music-notes-simple:before{content:""}.ph.ph-navigation-arrow:before{content:""}.ph.ph-needle:before{content:""}.ph.ph-network:before{content:""}.ph.ph-network-slash:before{content:""}.ph.ph-network-x:before{content:""}.ph.ph-newspaper:before{content:""}.ph.ph-newspaper-clipping:before{content:""}.ph.ph-not-equals:before{content:""}.ph.ph-not-member-of:before{content:""}.ph.ph-not-subset-of:before{content:""}.ph.ph-not-superset-of:before{content:""}.ph.ph-notches:before{content:""}.ph.ph-note:before{content:""}.ph.ph-note-blank:before{content:""}.ph.ph-note-pencil:before{content:""}.ph.ph-notebook:before{content:""}.ph.ph-notepad:before{content:""}.ph.ph-notification:before{content:""}.ph.ph-notion-logo:before{content:""}.ph.ph-nuclear-plant:before{content:""}.ph.ph-number-circle-eight:before{content:""}.ph.ph-number-circle-five:before{content:""}.ph.ph-number-circle-four:before{content:""}.ph.ph-number-circle-nine:before{content:""}.ph.ph-number-circle-one:before{content:""}.ph.ph-number-circle-seven:before{content:""}.ph.ph-number-circle-six:before{content:""}.ph.ph-number-circle-three:before{content:""}.ph.ph-number-circle-two:before{content:""}.ph.ph-number-circle-zero:before{content:""}.ph.ph-number-eight:before{content:""}.ph.ph-number-five:before{content:""}.ph.ph-number-four:before{content:""}.ph.ph-number-nine:before{content:""}.ph.ph-number-one:before{content:""}.ph.ph-number-seven:before{content:""}.ph.ph-number-six:before{content:""}.ph.ph-number-square-eight:before{content:""}.ph.ph-number-square-five:before{content:""}.ph.ph-number-square-four:before{content:""}.ph.ph-number-square-nine:before{content:""}.ph.ph-number-square-one:before{content:""}.ph.ph-number-square-seven:before{content:""}.ph.ph-number-square-six:before{content:""}.ph.ph-number-square-three:before{content:""}.ph.ph-number-square-two:before{content:""}.ph.ph-number-square-zero:before{content:""}.ph.ph-number-three:before{content:""}.ph.ph-number-two:before{content:""}.ph.ph-number-zero:before{content:""}.ph.ph-numpad:before{content:""}.ph.ph-nut:before{content:""}.ph.ph-ny-times-logo:before{content:""}.ph.ph-octagon:before{content:""}.ph.ph-office-chair:before{content:""}.ph.ph-onigiri:before{content:""}.ph.ph-open-ai-logo:before{content:""}.ph.ph-option:before{content:""}.ph.ph-orange:before{content:""}.ph.ph-orange-slice:before{content:""}.ph.ph-oven:before{content:""}.ph.ph-package:before{content:""}.ph.ph-paint-brush:before{content:""}.ph.ph-paint-brush-broad:before{content:""}.ph.ph-paint-brush-household:before{content:""}.ph.ph-paint-bucket:before{content:""}.ph.ph-paint-roller:before{content:""}.ph.ph-palette:before{content:""}.ph.ph-panorama:before{content:""}.ph.ph-pants:before{content:""}.ph.ph-paper-plane:before{content:""}.ph.ph-paper-plane-right:before{content:""}.ph.ph-paper-plane-tilt:before{content:""}.ph.ph-paperclip:before{content:""}.ph.ph-paperclip-horizontal:before{content:""}.ph.ph-parachute:before{content:""}.ph.ph-paragraph:before{content:""}.ph.ph-parallelogram:before{content:""}.ph.ph-park:before{content:""}.ph.ph-password:before{content:""}.ph.ph-path:before{content:""}.ph.ph-patreon-logo:before{content:""}.ph.ph-pause:before{content:""}.ph.ph-pause-circle:before{content:""}.ph.ph-paw-print:before{content:""}.ph.ph-paypal-logo:before{content:""}.ph.ph-peace:before{content:""}.ph.ph-pen:before{content:""}.ph.ph-pen-nib:before{content:""}.ph.ph-pen-nib-straight:before{content:""}.ph.ph-pencil:before{content:""}.ph.ph-pencil-circle:before{content:""}.ph.ph-pencil-line:before{content:""}.ph.ph-pencil-ruler:before{content:""}.ph.ph-pencil-simple:before{content:""}.ph.ph-pencil-simple-line:before{content:""}.ph.ph-pencil-simple-slash:before{content:""}.ph.ph-pencil-slash:before{content:""}.ph.ph-pentagon:before{content:""}.ph.ph-pentagram:before{content:""}.ph.ph-pepper:before{content:""}.ph.ph-percent:before{content:""}.ph.ph-person:before{content:""}.ph.ph-person-arms-spread:before{content:""}.ph.ph-person-simple:before{content:""}.ph.ph-person-simple-bike:before{content:""}.ph.ph-person-simple-circle:before{content:""}.ph.ph-person-simple-hike:before{content:""}.ph.ph-person-simple-run:before{content:""}.ph.ph-person-simple-ski:before{content:""}.ph.ph-person-simple-snowboard:before{content:""}.ph.ph-person-simple-swim:before{content:""}.ph.ph-person-simple-tai-chi:before{content:""}.ph.ph-person-simple-throw:before{content:""}.ph.ph-person-simple-walk:before{content:""}.ph.ph-perspective:before{content:""}.ph.ph-phone:before{content:""}.ph.ph-phone-call:before{content:""}.ph.ph-phone-disconnect:before{content:""}.ph.ph-phone-incoming:before{content:""}.ph.ph-phone-list:before{content:""}.ph.ph-phone-outgoing:before{content:""}.ph.ph-phone-pause:before{content:""}.ph.ph-phone-plus:before{content:""}.ph.ph-phone-slash:before{content:""}.ph.ph-phone-transfer:before{content:""}.ph.ph-phone-x:before{content:""}.ph.ph-phosphor-logo:before{content:""}.ph.ph-pi:before{content:""}.ph.ph-piano-keys:before{content:""}.ph.ph-picnic-table:before{content:""}.ph.ph-picture-in-picture:before{content:""}.ph.ph-piggy-bank:before{content:""}.ph.ph-pill:before{content:""}.ph.ph-ping-pong:before{content:""}.ph.ph-pint-glass:before{content:""}.ph.ph-pinterest-logo:before{content:""}.ph.ph-pinwheel:before{content:""}.ph.ph-pipe:before{content:""}.ph.ph-pipe-wrench:before{content:""}.ph.ph-pix-logo:before{content:""}.ph.ph-pizza:before{content:""}.ph.ph-placeholder:before{content:""}.ph.ph-planet:before{content:""}.ph.ph-plant:before{content:""}.ph.ph-play:before{content:""}.ph.ph-play-circle:before{content:""}.ph.ph-play-pause:before{content:""}.ph.ph-playlist:before{content:""}.ph.ph-plug:before{content:""}.ph.ph-plug-charging:before{content:""}.ph.ph-plugs:before{content:""}.ph.ph-plugs-connected:before{content:""}.ph.ph-plus:before{content:""}.ph.ph-plus-circle:before{content:""}.ph.ph-plus-minus:before{content:""}.ph.ph-plus-square:before{content:""}.ph.ph-poker-chip:before{content:""}.ph.ph-police-car:before{content:""}.ph.ph-polygon:before{content:""}.ph.ph-popcorn:before{content:""}.ph.ph-popsicle:before{content:""}.ph.ph-potted-plant:before{content:""}.ph.ph-power:before{content:""}.ph.ph-prescription:before{content:""}.ph.ph-presentation:before{content:""}.ph.ph-presentation-chart:before{content:""}.ph.ph-printer:before{content:""}.ph.ph-prohibit:before{content:""}.ph.ph-prohibit-inset:before{content:""}.ph.ph-projector-screen:before{content:""}.ph.ph-projector-screen-chart:before{content:""}.ph.ph-pulse:before{content:""}.ph.ph-activity:before{content:""}.ph.ph-push-pin:before{content:""}.ph.ph-push-pin-simple:before{content:""}.ph.ph-push-pin-simple-slash:before{content:""}.ph.ph-push-pin-slash:before{content:""}.ph.ph-puzzle-piece:before{content:""}.ph.ph-qr-code:before{content:""}.ph.ph-question:before{content:""}.ph.ph-question-mark:before{content:""}.ph.ph-queue:before{content:""}.ph.ph-quotes:before{content:""}.ph.ph-rabbit:before{content:""}.ph.ph-racquet:before{content:""}.ph.ph-radical:before{content:""}.ph.ph-radio:before{content:""}.ph.ph-radio-button:before{content:""}.ph.ph-radioactive:before{content:""}.ph.ph-rainbow:before{content:""}.ph.ph-rainbow-cloud:before{content:""}.ph.ph-ranking:before{content:""}.ph.ph-read-cv-logo:before{content:""}.ph.ph-receipt:before{content:""}.ph.ph-receipt-x:before{content:""}.ph.ph-record:before{content:""}.ph.ph-rectangle:before{content:""}.ph.ph-rectangle-dashed:before{content:""}.ph.ph-recycle:before{content:""}.ph.ph-reddit-logo:before{content:""}.ph.ph-repeat:before{content:""}.ph.ph-repeat-once:before{content:""}.ph.ph-replit-logo:before{content:""}.ph.ph-resize:before{content:""}.ph.ph-rewind:before{content:""}.ph.ph-rewind-circle:before{content:""}.ph.ph-road-horizon:before{content:""}.ph.ph-robot:before{content:""}.ph.ph-rocket:before{content:""}.ph.ph-rocket-launch:before{content:""}.ph.ph-rows:before{content:""}.ph.ph-rows-plus-bottom:before{content:""}.ph.ph-rows-plus-top:before{content:""}.ph.ph-rss:before{content:""}.ph.ph-rss-simple:before{content:""}.ph.ph-rug:before{content:""}.ph.ph-ruler:before{content:""}.ph.ph-sailboat:before{content:""}.ph.ph-scales:before{content:""}.ph.ph-scan:before{content:""}.ph.ph-scan-smiley:before{content:""}.ph.ph-scissors:before{content:""}.ph.ph-scooter:before{content:""}.ph.ph-screencast:before{content:""}.ph.ph-screwdriver:before{content:""}.ph.ph-scribble:before{content:""}.ph.ph-scribble-loop:before{content:""}.ph.ph-scroll:before{content:""}.ph.ph-seal:before{content:""}.ph.ph-circle-wavy:before{content:""}.ph.ph-seal-check:before{content:""}.ph.ph-circle-wavy-check:before{content:""}.ph.ph-seal-percent:before{content:""}.ph.ph-seal-question:before{content:""}.ph.ph-circle-wavy-question:before{content:""}.ph.ph-seal-warning:before{content:""}.ph.ph-circle-wavy-warning:before{content:""}.ph.ph-seat:before{content:""}.ph.ph-seatbelt:before{content:""}.ph.ph-security-camera:before{content:""}.ph.ph-selection:before{content:""}.ph.ph-selection-all:before{content:""}.ph.ph-selection-background:before{content:""}.ph.ph-selection-foreground:before{content:""}.ph.ph-selection-inverse:before{content:""}.ph.ph-selection-plus:before{content:""}.ph.ph-selection-slash:before{content:""}.ph.ph-shapes:before{content:""}.ph.ph-share:before{content:""}.ph.ph-share-fat:before{content:""}.ph.ph-share-network:before{content:""}.ph.ph-shield:before{content:""}.ph.ph-shield-check:before{content:""}.ph.ph-shield-checkered:before{content:""}.ph.ph-shield-chevron:before{content:""}.ph.ph-shield-plus:before{content:""}.ph.ph-shield-slash:before{content:""}.ph.ph-shield-star:before{content:""}.ph.ph-shield-warning:before{content:""}.ph.ph-shipping-container:before{content:""}.ph.ph-shirt-folded:before{content:""}.ph.ph-shooting-star:before{content:""}.ph.ph-shopping-bag:before{content:""}.ph.ph-shopping-bag-open:before{content:""}.ph.ph-shopping-cart:before{content:""}.ph.ph-shopping-cart-simple:before{content:""}.ph.ph-shovel:before{content:""}.ph.ph-shower:before{content:""}.ph.ph-shrimp:before{content:""}.ph.ph-shuffle:before{content:""}.ph.ph-shuffle-angular:before{content:""}.ph.ph-shuffle-simple:before{content:""}.ph.ph-sidebar:before{content:""}.ph.ph-sidebar-simple:before{content:""}.ph.ph-sigma:before{content:""}.ph.ph-sign-in:before{content:""}.ph.ph-sign-out:before{content:""}.ph.ph-signature:before{content:""}.ph.ph-signpost:before{content:""}.ph.ph-sim-card:before{content:""}.ph.ph-siren:before{content:""}.ph.ph-sketch-logo:before{content:""}.ph.ph-skip-back:before{content:""}.ph.ph-skip-back-circle:before{content:""}.ph.ph-skip-forward:before{content:""}.ph.ph-skip-forward-circle:before{content:""}.ph.ph-skull:before{content:""}.ph.ph-skype-logo:before{content:""}.ph.ph-slack-logo:before{content:""}.ph.ph-sliders:before{content:""}.ph.ph-sliders-horizontal:before{content:""}.ph.ph-slideshow:before{content:""}.ph.ph-smiley:before{content:""}.ph.ph-smiley-angry:before{content:""}.ph.ph-smiley-blank:before{content:""}.ph.ph-smiley-meh:before{content:""}.ph.ph-smiley-melting:before{content:""}.ph.ph-smiley-nervous:before{content:""}.ph.ph-smiley-sad:before{content:""}.ph.ph-smiley-sticker:before{content:""}.ph.ph-smiley-wink:before{content:""}.ph.ph-smiley-x-eyes:before{content:""}.ph.ph-snapchat-logo:before{content:""}.ph.ph-sneaker:before{content:""}.ph.ph-sneaker-move:before{content:""}.ph.ph-snowflake:before{content:""}.ph.ph-soccer-ball:before{content:""}.ph.ph-sock:before{content:""}.ph.ph-solar-panel:before{content:""}.ph.ph-solar-roof:before{content:""}.ph.ph-sort-ascending:before{content:""}.ph.ph-sort-descending:before{content:""}.ph.ph-soundcloud-logo:before{content:""}.ph.ph-spade:before{content:""}.ph.ph-sparkle:before{content:""}.ph.ph-speaker-hifi:before{content:""}.ph.ph-speaker-high:before{content:""}.ph.ph-speaker-low:before{content:""}.ph.ph-speaker-none:before{content:""}.ph.ph-speaker-simple-high:before{content:""}.ph.ph-speaker-simple-low:before{content:""}.ph.ph-speaker-simple-none:before{content:""}.ph.ph-speaker-simple-slash:before{content:""}.ph.ph-speaker-simple-x:before{content:""}.ph.ph-speaker-slash:before{content:""}.ph.ph-speaker-x:before{content:""}.ph.ph-speedometer:before{content:""}.ph.ph-sphere:before{content:""}.ph.ph-spinner:before{content:""}.ph.ph-spinner-ball:before{content:""}.ph.ph-spinner-gap:before{content:""}.ph.ph-spiral:before{content:""}.ph.ph-split-horizontal:before{content:""}.ph.ph-split-vertical:before{content:""}.ph.ph-spotify-logo:before{content:""}.ph.ph-spray-bottle:before{content:""}.ph.ph-square:before{content:""}.ph.ph-square-half:before{content:""}.ph.ph-square-half-bottom:before{content:""}.ph.ph-square-logo:before{content:""}.ph.ph-square-split-horizontal:before{content:""}.ph.ph-square-split-vertical:before{content:""}.ph.ph-squares-four:before{content:""}.ph.ph-stack:before{content:""}.ph.ph-stack-minus:before{content:""}.ph.ph-stack-overflow-logo:before{content:""}.ph.ph-stack-plus:before{content:""}.ph.ph-stack-simple:before{content:""}.ph.ph-stairs:before{content:""}.ph.ph-stamp:before{content:""}.ph.ph-standard-definition:before{content:""}.ph.ph-star:before{content:""}.ph.ph-star-and-crescent:before{content:""}.ph.ph-star-four:before{content:""}.ph.ph-star-half:before{content:""}.ph.ph-star-of-david:before{content:""}.ph.ph-steam-logo:before{content:""}.ph.ph-steering-wheel:before{content:""}.ph.ph-steps:before{content:""}.ph.ph-stethoscope:before{content:""}.ph.ph-sticker:before{content:""}.ph.ph-stool:before{content:""}.ph.ph-stop:before{content:""}.ph.ph-stop-circle:before{content:""}.ph.ph-storefront:before{content:""}.ph.ph-strategy:before{content:""}.ph.ph-stripe-logo:before{content:""}.ph.ph-student:before{content:""}.ph.ph-subset-of:before{content:""}.ph.ph-subset-proper-of:before{content:""}.ph.ph-subtitles:before{content:""}.ph.ph-subtitles-slash:before{content:""}.ph.ph-subtract:before{content:""}.ph.ph-subtract-square:before{content:""}.ph.ph-subway:before{content:""}.ph.ph-suitcase:before{content:""}.ph.ph-suitcase-rolling:before{content:""}.ph.ph-suitcase-simple:before{content:""}.ph.ph-sun:before{content:""}.ph.ph-sun-dim:before{content:""}.ph.ph-sun-horizon:before{content:""}.ph.ph-sunglasses:before{content:""}.ph.ph-superset-of:before{content:""}.ph.ph-superset-proper-of:before{content:""}.ph.ph-swap:before{content:""}.ph.ph-swatches:before{content:""}.ph.ph-swimming-pool:before{content:""}.ph.ph-sword:before{content:""}.ph.ph-synagogue:before{content:""}.ph.ph-syringe:before{content:""}.ph.ph-t-shirt:before{content:""}.ph.ph-table:before{content:""}.ph.ph-tabs:before{content:""}.ph.ph-tag:before{content:""}.ph.ph-tag-chevron:before{content:""}.ph.ph-tag-simple:before{content:""}.ph.ph-target:before{content:""}.ph.ph-taxi:before{content:""}.ph.ph-tea-bag:before{content:""}.ph.ph-telegram-logo:before{content:""}.ph.ph-television:before{content:""}.ph.ph-television-simple:before{content:""}.ph.ph-tennis-ball:before{content:""}.ph.ph-tent:before{content:""}.ph.ph-terminal:before{content:""}.ph.ph-terminal-window:before{content:""}.ph.ph-test-tube:before{content:""}.ph.ph-text-a-underline:before{content:""}.ph.ph-text-aa:before{content:""}.ph.ph-text-align-center:before{content:""}.ph.ph-text-align-justify:before{content:""}.ph.ph-text-align-left:before{content:""}.ph.ph-text-align-right:before{content:""}.ph.ph-text-b:before{content:""}.ph.ph-text-bolder:before{content:""}.ph.ph-text-columns:before{content:""}.ph.ph-text-h:before{content:""}.ph.ph-text-h-five:before{content:""}.ph.ph-text-h-four:before{content:""}.ph.ph-text-h-one:before{content:""}.ph.ph-text-h-six:before{content:""}.ph.ph-text-h-three:before{content:""}.ph.ph-text-h-two:before{content:""}.ph.ph-text-indent:before{content:""}.ph.ph-text-italic:before{content:""}.ph.ph-text-outdent:before{content:""}.ph.ph-text-strikethrough:before{content:""}.ph.ph-text-subscript:before{content:""}.ph.ph-text-superscript:before{content:""}.ph.ph-text-t:before{content:""}.ph.ph-text-t-slash:before{content:""}.ph.ph-text-underline:before{content:""}.ph.ph-textbox:before{content:""}.ph.ph-thermometer:before{content:""}.ph.ph-thermometer-cold:before{content:""}.ph.ph-thermometer-hot:before{content:""}.ph.ph-thermometer-simple:before{content:""}.ph.ph-threads-logo:before{content:""}.ph.ph-three-d:before{content:""}.ph.ph-thumbs-down:before{content:""}.ph.ph-thumbs-up:before{content:""}.ph.ph-ticket:before{content:""}.ph.ph-tidal-logo:before{content:""}.ph.ph-tiktok-logo:before{content:""}.ph.ph-tilde:before{content:""}.ph.ph-timer:before{content:""}.ph.ph-tip-jar:before{content:""}.ph.ph-tipi:before{content:""}.ph.ph-tire:before{content:""}.ph.ph-toggle-left:before{content:""}.ph.ph-toggle-right:before{content:""}.ph.ph-toilet:before{content:""}.ph.ph-toilet-paper:before{content:""}.ph.ph-toolbox:before{content:""}.ph.ph-tooth:before{content:""}.ph.ph-tornado:before{content:""}.ph.ph-tote:before{content:""}.ph.ph-tote-simple:before{content:""}.ph.ph-towel:before{content:""}.ph.ph-tractor:before{content:""}.ph.ph-trademark:before{content:""}.ph.ph-trademark-registered:before{content:""}.ph.ph-traffic-cone:before{content:""}.ph.ph-traffic-sign:before{content:""}.ph.ph-traffic-signal:before{content:""}.ph.ph-train:before{content:""}.ph.ph-train-regional:before{content:""}.ph.ph-train-simple:before{content:""}.ph.ph-tram:before{content:""}.ph.ph-translate:before{content:""}.ph.ph-trash:before{content:""}.ph.ph-trash-simple:before{content:""}.ph.ph-tray:before{content:""}.ph.ph-tray-arrow-down:before{content:""}.ph.ph-archive-tray:before{content:""}.ph.ph-tray-arrow-up:before{content:""}.ph.ph-treasure-chest:before{content:""}.ph.ph-tree:before{content:""}.ph.ph-tree-evergreen:before{content:""}.ph.ph-tree-palm:before{content:""}.ph.ph-tree-structure:before{content:""}.ph.ph-tree-view:before{content:""}.ph.ph-trend-down:before{content:""}.ph.ph-trend-up:before{content:""}.ph.ph-triangle:before{content:""}.ph.ph-triangle-dashed:before{content:""}.ph.ph-trolley:before{content:""}.ph.ph-trolley-suitcase:before{content:""}.ph.ph-trophy:before{content:""}.ph.ph-truck:before{content:""}.ph.ph-truck-trailer:before{content:""}.ph.ph-tumblr-logo:before{content:""}.ph.ph-twitch-logo:before{content:""}.ph.ph-twitter-logo:before{content:""}.ph.ph-umbrella:before{content:""}.ph.ph-umbrella-simple:before{content:""}.ph.ph-union:before{content:""}.ph.ph-unite:before{content:""}.ph.ph-unite-square:before{content:""}.ph.ph-upload:before{content:""}.ph.ph-upload-simple:before{content:""}.ph.ph-usb:before{content:""}.ph.ph-user:before{content:""}.ph.ph-user-check:before{content:""}.ph.ph-user-circle:before{content:""}.ph.ph-user-circle-check:before{content:""}.ph.ph-user-circle-dashed:before{content:""}.ph.ph-user-circle-gear:before{content:""}.ph.ph-user-circle-minus:before{content:""}.ph.ph-user-circle-plus:before{content:""}.ph.ph-user-focus:before{content:""}.ph.ph-user-gear:before{content:""}.ph.ph-user-list:before{content:""}.ph.ph-user-minus:before{content:""}.ph.ph-user-plus:before{content:""}.ph.ph-user-rectangle:before{content:""}.ph.ph-user-sound:before{content:""}.ph.ph-user-square:before{content:""}.ph.ph-user-switch:before{content:""}.ph.ph-users:before{content:""}.ph.ph-users-four:before{content:""}.ph.ph-users-three:before{content:""}.ph.ph-van:before{content:""}.ph.ph-vault:before{content:""}.ph.ph-vector-three:before{content:""}.ph.ph-vector-two:before{content:""}.ph.ph-vibrate:before{content:""}.ph.ph-video:before{content:""}.ph.ph-video-camera:before{content:""}.ph.ph-video-camera-slash:before{content:""}.ph.ph-video-conference:before{content:""}.ph.ph-vignette:before{content:""}.ph.ph-vinyl-record:before{content:""}.ph.ph-virtual-reality:before{content:""}.ph.ph-virus:before{content:""}.ph.ph-visor:before{content:""}.ph.ph-voicemail:before{content:""}.ph.ph-volleyball:before{content:""}.ph.ph-wall:before{content:""}.ph.ph-wallet:before{content:""}.ph.ph-warehouse:before{content:""}.ph.ph-warning:before{content:""}.ph.ph-warning-circle:before{content:""}.ph.ph-warning-diamond:before{content:""}.ph.ph-warning-octagon:before{content:""}.ph.ph-washing-machine:before{content:""}.ph.ph-watch:before{content:""}.ph.ph-wave-sawtooth:before{content:""}.ph.ph-wave-sine:before{content:""}.ph.ph-wave-square:before{content:""}.ph.ph-wave-triangle:before{content:""}.ph.ph-waveform:before{content:""}.ph.ph-waveform-slash:before{content:""}.ph.ph-waves:before{content:""}.ph.ph-webcam:before{content:""}.ph.ph-webcam-slash:before{content:""}.ph.ph-webhooks-logo:before{content:""}.ph.ph-wechat-logo:before{content:""}.ph.ph-whatsapp-logo:before{content:""}.ph.ph-wheelchair:before{content:""}.ph.ph-wheelchair-motion:before{content:""}.ph.ph-wifi-high:before{content:""}.ph.ph-wifi-low:before{content:""}.ph.ph-wifi-medium:before{content:""}.ph.ph-wifi-none:before{content:""}.ph.ph-wifi-slash:before{content:""}.ph.ph-wifi-x:before{content:""}.ph.ph-wind:before{content:""}.ph.ph-windmill:before{content:""}.ph.ph-windows-logo:before{content:""}.ph.ph-wine:before{content:""}.ph.ph-wrench:before{content:""}.ph.ph-x:before{content:""}.ph.ph-x-circle:before{content:""}.ph.ph-x-logo:before{content:""}.ph.ph-x-square:before{content:""}.ph.ph-yarn:before{content:""}.ph.ph-yin-yang:before{content:""}.ph.ph-youtube-logo:before{content:""}.container{padding:18px}.section{margin-bottom:48px}.section-title,.block{margin-bottom:34px}.block-title{margin-bottom:22px}p,.text{margin-bottom:15px}.hint{margin-top:8px}.list{padding-left:22px;margin-bottom:15px}.list-item{margin-bottom:8px}.list-nested{margin-top:8px}.table{margin-bottom:22px}.table-caption{margin-bottom:8px}.form-group{margin-bottom:15px}.label{margin-bottom:5px;display:block}.input,.textarea,.select{margin-top:5px}.toast{padding:15px}.toast-stack{gap:8px}*{scrollbar-width:thin;scrollbar-color:#414868 transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{width:8px;background:#414868;border-radius:9999px;cursor:default}*::-webkit-scrollbar-thumb:hover{background:#787c99}*::-webkit-scrollbar-corner{background:transparent}*::-webkit-scrollbar-button{display:none}.chat-header,.context-bar,.profile-badge,.msg-meta-row,.recall-banner,.app-sidebar,.input-bar,.tabs-list{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.chat-header input,.chat-header textarea,.context-bar input,.context-bar textarea,.profile-badge input,.profile-badge textarea,.msg-meta-row input,.msg-meta-row textarea,.recall-banner input,.recall-banner textarea,.app-sidebar input,.app-sidebar textarea,.input-bar input,.input-bar textarea,.tabs-list input,.tabs-list textarea{-webkit-user-select:auto;user-select:auto;-webkit-touch-callout:default}@media(max-width:767px){textarea,input:not([type=checkbox]):not([type=radio]):not([type=range]){font-size:16px!important}}html,body{height:100%;overflow:hidden;overscroll-behavior:none}#app{display:flex;height:100%;overflow:hidden}.app-main{flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:#16161e}.app-sidebar{width:380px;min-width:380px;max-width:380px;display:flex;flex-direction:column;background:#1f2335;border-right:2px solid rgba(192,202,245,.24);overflow:hidden;flex-shrink:0;transition:width .22s ease,min-width .22s ease,max-width .22s ease,border-color .22s ease,transform .28s ease}.app-sidebar.is-hidden-by-artifacts{width:0;min-width:0;max-width:0;border-right-color:transparent}@media(max-width:1279.98px){.app-sidebar{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:min(380px,92vw)!important;min-width:min(380px,92vw)!important;transform:translate(-100%);transition:transform .28s ease}.app-sidebar.is-mobile-open{transform:translate(0)}.app-sidebar.is-hidden-by-artifacts{width:min(380px,92vw)!important;min-width:min(380px,92vw)!important;max-width:min(380px,92vw)!important;border-right-color:#c0caf53d}}@media(max-width:980px){.app-sidebar,.app-sidebar.is-hidden-by-artifacts{width:100vw!important;min-width:100vw!important;max-width:100vw!important}}.sidebar-header{padding:15px;border-bottom:2px solid rgba(192,202,245,.24);display:flex;flex-direction:column;gap:8px}.sidebar-logo-row{display:flex;align-items:center;gap:8px}.sidebar-logo{display:flex;align-items:center;gap:8px;text-decoration:none;flex:1;min-width:0}.sidebar-logo img{width:42px;height:42px}.sidebar-logo span{font-size:16px;font-weight:700;color:#c0caf5}.sidebar-sessions{flex:1;overflow:hidden;display:flex;flex-direction:column}.sessions-header{display:flex;align-items:center;justify-content:space-between;padding:8px 15px;gap:8px}.sessions-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#787c99}.sessions-refresh-btn{font-size:14px;color:#787c99;transition:color .15s,transform .15s}.sessions-refresh-btn:hover{color:#c0caf5}.sessions-refresh-btn.is-spinning i{animation:spin .8s linear infinite}.session-item{display:flex;align-items:flex-start;gap:8px;padding:8px 15px;cursor:pointer;border-radius:0;transition:background .15s ease;position:relative}.session-item:hover{background:#1f2335}.session-item:hover .session-actions{opacity:1}@media(hover:none){.session-item .session-actions{opacity:1}}.session-item.is-active{background:#c0caf516;border-left:6px solid #7AA2F7;padding-left:9px}.session-item.is-pinned{background:#e0af6812}.session-item.is-pinned .session-name{color:#e0af68}.session-item.has-recall .session-actions{opacity:1}.session-item.is-special{opacity:.72}.session-item.is-special:hover{opacity:1}.session-item.is-special .session-name{font-weight:400}.session-icons{display:flex;flex-direction:column;align-items:center;gap:2px;flex-shrink:0;margin-top:2px;width:14px}.session-icons .session-pin-icon,.session-icons .session-recall-icon,.session-icons .session-special-icon{color:#787c99;font-size:14px;opacity:0;transition:opacity .15s ease}.session-icons .session-pin-icon{color:#e0af68}.session-icons .session-recall-icon,.session-icons .session-special-icon{color:var(--gn-color-secondary)}.is-pinned .session-icons .session-pin-icon,.has-recall .session-icons .session-recall-icon,.is-special .session-icons .session-special-icon{opacity:1}.session-info{flex:1;overflow:hidden}.session-name{font-size:13px;color:#c0caf5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}.session-time{font-size:11px;color:#787c99;line-height:1.4;margin-top:2px}.session-preview{font-size:12px;color:#c0caf5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;margin-top:3px}.session-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s ease;flex-shrink:0;align-self:flex-start;margin-top:1px}.session-actions .btn-icon{width:26px;height:26px;font-size:14px}.chat-area{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column;overflow:hidden;background:#16161e}.chat-header{display:flex;align-items:center;gap:8px;padding:8px 15px;border-bottom:2px solid rgba(192,202,245,.24);background:#1f2335;flex-shrink:0;min-height:54px}.chat-header-info{flex:1;display:flex;align-items:center;gap:8px;overflow:hidden;min-width:0}@media(max-width:768px){.chat-header-info{flex-direction:column;align-items:flex-start;gap:2px}}.chat-header-title{font-size:14px;font-weight:600;color:#c0caf5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0;cursor:text}.chat-header-rename{flex:1;min-width:0;height:32px;padding:0 10px;font-size:14px;font-weight:600;font-family:inherit;color:#c0caf5;background:#c0caf516;border:1px solid #7AA2F7;border-radius:3px;outline:none}.profile-badge{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;white-space:nowrap}.btn-sidebar-toggle{display:none}@media(max-width:1279.98px){.btn-sidebar-toggle{display:flex}}.context-bar{display:flex;align-items:center;flex-shrink:0;cursor:default}.msg-user{display:flex;justify-content:flex-end;gap:8px}.msg-user-bubble{background:#7aa2f7;color:#16161e;padding:8px 15px;border-radius:6px;font-size:14px;line-height:1.6;word-wrap:break-word;width:100%}.msg-user-bubble .msg-user-quote{margin:0 0 5px;padding:2px 0 2px 8px;border-left:3px solid rgba(22,22,30,.35);opacity:.7;font-size:13px}.msg-user--recall .msg-user-bubble{background:color-mix(in srgb,var(--gn-color-secondary) 12%,transparent);border:1px solid color-mix(in srgb,var(--gn-color-secondary) 25%,transparent)}.msg-user--recall .msg-user-bubble .msg-user-text{color:#c0caf5}.msg-recall-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--gn-color-secondary);margin-bottom:4px;opacity:.85}.msg-user--queued .msg-user-bubble{opacity:.75}.msg-queued-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:500;color:#414868;margin-bottom:4px}.msg-failed-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#f7768e;margin-bottom:4px}.msg-user-attachments{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}.msg-user-image{width:80px;height:80px;object-fit:cover;border-radius:6px;cursor:pointer;transition:opacity .15s}.msg-user-image:hover{opacity:.75}.msg-user-file-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;background:#16161e4d;border-radius:999px;font-size:12px}.msg-time{font-size:11px;color:#787c99;line-height:1;margin-top:4px}.msg-meta-row{display:flex;align-items:center;gap:8px;margin-top:2px;min-width:0}.msg-meta-item{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#787c99;white-space:nowrap}.msg-meta-item i{font-size:12px;opacity:.7}.msg-user-wrap{display:flex;flex-direction:column;align-items:flex-end;max-width:70%}@media(max-width:768px){.msg-user-wrap{max-width:90%}}.msg-user-footer{display:flex;align-items:center;gap:5px;align-self:flex-end}.msg-copy-btn{width:22px;height:22px;min-width:22px;padding:0;font-size:12px;opacity:.5;transition:opacity .15s}.msg-copy-btn:hover{opacity:1}.msg-meta-row>.msg-copy-btn{margin-left:auto}.msg-meta-row .msg-rate-btn{width:22px;height:22px;min-width:22px;padding:0;font-size:13px}.msg-assistant{display:flex;flex-direction:column;gap:8px;max-width:100%}.planning-indicator{display:flex;align-items:center;gap:8px;font-size:13px;font-style:italic;color:#787c99;padding:5px 0}.planning-indicator.is-executing{color:#a9b1d6;font-style:normal}.planning-label{opacity:.75;transition:opacity .2s}.msg-assistant-avatar{width:28px;height:28px;border-radius:50%;flex-shrink:0}.msg-assistant-content{font-size:14px;line-height:1.7;color:#c0caf5;display:flex;flex-wrap:wrap;gap:8px}.msg-assistant-content>p,.msg-assistant-content>ul,.msg-assistant-content>ol,.msg-assistant-content>blockquote,.msg-assistant-content>pre,.msg-assistant-content>.table-wrap,.msg-assistant-content>.code-block,.msg-assistant-content>h1,.msg-assistant-content>h2,.msg-assistant-content>h3,.msg-assistant-content>h4,.msg-assistant-content>hr{flex:1 1 100%;margin:0}.msg-assistant-content>p:has(>.msg-md-image-link:only-child){flex:0 0 calc((100% - 16px) / 3)}.msg-assistant-content h1,.msg-assistant-content h2,.msg-assistant-content h3,.msg-assistant-content h4{color:#c0caf5}.msg-assistant-content ul,.msg-assistant-content ol{padding-left:22px}.msg-assistant-content li{margin-bottom:8px}.msg-assistant-content blockquote{padding-left:15px;border-left:6px solid #7AA2F7;color:#a9b1d6}.msg-assistant-content a{color:#7aa2f7}.msg-assistant-content strong{color:#c0caf5}.msg-assistant-content hr{border:none;border-top:1px solid rgba(192,202,245,.24)}.msg-assistant-content .msg-md-image-link{display:block;width:100%;text-decoration:none;border:2px solid rgba(192,202,245,.12);border-radius:3px;overflow:hidden;transition:border-color .2s ease;cursor:zoom-in}.msg-assistant-content .msg-md-image-link:hover{border-color:#7aa2f7}.msg-assistant-content .msg-md-image{display:block;width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:2px}.msg-assistant-content .msg-md-image-link.is-broken{cursor:default;border-color:#f7768e66;background:#f7768e0f;display:flex;align-items:center;justify-content:center;aspect-ratio:1/1}.msg-assistant-content .msg-md-image-link.is-broken:before{content:"🖼️";font-size:32px;opacity:.4}.msg-assistant-content .msg-md-image-link.is-broken:hover{border-color:#f7768e66}.msg-assistant-content .msg-md-image-link.is-broken .msg-md-image{display:none}.msg-assistant-content .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:15px 0}.msg-assistant-content .table-wrap table{margin:0;border:2px solid rgba(192,202,245,.24);border-radius:3px}.msg-assistant-content .table-wrap table th,.msg-assistant-content .table-wrap table td{padding:8px 15px;font-size:13px;vertical-align:middle;text-align:left;border-bottom:2px solid rgba(192,202,245,.24)}.msg-assistant-content .table-wrap table th{font-weight:600;color:#a9b1d6;background:#1f2335}.msg-assistant-content .table-wrap table tr:last-child th,.msg-assistant-content .table-wrap table tr:last-child td{border-bottom:none}.msg-assistant-content :not(pre)>code{font-family:IBM Plex Mono,monospace;font-size:13px;background:#c0caf516;padding:1px 5px;color:#7dcfff}.msg-assistant-content .code-block{margin:15px 0;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:3px;overflow:hidden}.msg-assistant-content .code-block .code-header{display:flex;align-items:center;justify-content:space-between;padding:5px 15px;background:#c0caf516;border-bottom:2px solid rgba(192,202,245,.24);font-size:12px;color:#787c99;font-family:IBM Plex Mono,monospace}.msg-assistant-content .code-block pre{margin:0;background:#1f2335!important}.msg-assistant-content .code-block pre code{font-family:IBM Plex Mono,monospace;font-size:13px;display:block;padding:15px;overflow-x:auto}.thinking-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;color:#787c99;font-size:12px;font-style:italic;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;transition:background .15s ease;-webkit-user-select:none;user-select:none}.thinking-card summary::-webkit-details-marker{display:none}.thinking-card summary:hover{background:#c0caf516}.thinking-card[open] summary{border-bottom-color:transparent;border-radius:6px 6px 0 0}.thinking-card .thinking-chevron{margin-left:auto;font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.thinking-card[open] .thinking-chevron{transform:rotate(180deg)}.thinking-card .thinking-body{padding:8px 15px;font-size:12px;font-style:italic;color:#a9b1d6;line-height:1.5;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-top:none;border-radius:0 0 6px 6px;white-space:pre-wrap;word-break:break-word;max-height:800px;overflow-y:auto}.plan-card{border:2px solid #7AA2F7;border-left-width:6px;border-left-color:#7aa2f7;border-radius:6px;overflow:hidden;font-size:12px;margin-bottom:8px}.plan-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#7aa2f714;color:#7aa2f7;font-size:12px;-webkit-user-select:none;user-select:none}.plan-card summary::-webkit-details-marker{display:none}.plan-card summary:hover{background:#7aa2f724}.plan-card summary .plan-chevron{margin-left:auto;font-size:18px;color:#7aa2f799;transition:transform .15s ease;flex-shrink:0}.plan-card[open] .plan-chevron{transform:rotate(180deg)}.plan-card .plan-body{padding:8px 15px;font-size:12px;color:#a9b1d6;line-height:1.5;background:#7aa2f70a;border-top:2px solid rgba(122,162,247,.3)}.plan-card .plan-body p{margin:0 0 8px}.plan-card .plan-body p:last-child{margin-bottom:0}.plan-card .plan-body ul,.plan-card .plan-body ol{padding-left:22px;margin-bottom:8px}.plan-card .plan-body li{margin-bottom:5px}.plan-card .plan-body strong{color:#c0caf5}.tool-card{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-radius:6px;margin-bottom:8px;border-left-color:#7aa2f7;overflow:hidden;font-size:13px}.tool-card.is-success{border-left-color:#9ece6a}.tool-card.is-error{border-left-color:#f7768e}.tool-card>summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#1f2335;color:#a9b1d6;-webkit-user-select:none;user-select:none}.tool-card>summary::-webkit-details-marker{display:none}.tool-card>summary:hover{background:#c0caf516}.tool-card>summary .tool-chevron{font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.tool-card[open]>summary .tool-chevron{transform:rotate(180deg)}.tool-card .tool-name{flex:1;font-family:IBM Plex Mono,monospace;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-card .tool-running-time{font-family:IBM Plex Mono,monospace;font-size:11px;color:#787c99;white-space:nowrap}.tool-card .tool-status-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px;flex-shrink:0}.tool-card-body{background:#1f2335;border-top:2px solid rgba(192,202,245,.24)}.tool-running-banner{display:flex;align-items:center;gap:8px;padding:8px 15px;color:#a9b1d6;background:#7aa2f714;border-bottom:1px solid rgba(192,202,245,.24);font-size:12px}.tool-section{padding:8px 15px}.tool-section+.tool-section{border-top:1px solid rgba(192,202,245,.24)}.tool-section-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#787c99;margin-bottom:5px}.tool-code{font-family:IBM Plex Mono,monospace;font-size:12px;color:#a9b1d6;white-space:pre-wrap;word-break:break-word}.tool-args summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:#a9b1d6;background:#1f2335}.tool-args summary::-webkit-details-marker{display:none}.tool-args summary:hover{background:#c0caf516}.tool-args summary .tool-chevron{margin-left:auto;font-size:18px;color:#787c99;transition:transform .15s ease}.tool-args[open]>summary .tool-chevron{transform:rotate(180deg)}.tool-cards-summary{display:inline-flex;align-items:center;gap:8px;padding:5px 0}.tool-fade-item{display:grid;grid-template-rows:1fr;transition:none}.tool-fade-item>*{min-height:0;overflow:hidden}.tool-fade-enter-active,.tool-fade-leave-active{transition:opacity .2s ease,transform .2s ease,grid-template-rows .28s ease}.tool-fade-enter-from,.tool-fade-leave-to{opacity:0;transform:translateY(-4px);grid-template-rows:0fr}.tool-result{font-size:12px;line-height:1.5;color:#a9b1d6}.tool-result h1,.tool-result h2,.tool-result h3,.tool-result h4{color:#c0caf5;margin:8px 0}.tool-result p{margin:5px 0}.tool-result ul,.tool-result ol{padding-left:22px;margin:5px 0}.tool-result li{margin-bottom:2px}.tool-result blockquote{padding-left:8px;border-left:6px solid #7AA2F7;color:#a9b1d6;margin:5px 0}.tool-result code{font-family:IBM Plex Mono,monospace;background:#c0caf516;padding:1px 4px;color:#7dcfff;font-size:11px}.tool-result pre{margin:5px 0;background:#1f2335;border:2px solid rgba(192,202,245,.24);overflow:hidden}.tool-result pre code{display:block;padding:8px;overflow-x:auto}.result-line{font-family:IBM Plex Mono,monospace;padding:1px 0;white-space:pre-wrap;word-break:break-word}.result-line.diff-summary,.result-line.diff-hunk,.result-line.diff-add,.result-line.diff-del,.result-line.diff-ctx{padding:0;line-height:1.3}.result-line.diff-summary,.result-line.diff-hunk{color:#a9b1d6}.result-line.diff-add{color:#9ece6a}.result-line.diff-del{color:#f7768e}.result-line.diff-ctx{color:inherit}.diff-num-marker.diff-add{color:#9ece6a}.diff-num-marker.diff-del{color:#f7768e}.diff-num-marker.diff-ctx,.diff-content{color:inherit}.read-header-path{color:#ff9e64}.read-header-rest{color:#a9b1d6}.read-warning{color:#e0af68}.read-num{color:#ff9e64}.read-content{color:inherit}.json-object,.json-array{font-family:IBM Plex Mono,monospace;display:flex;flex-direction:column;gap:1px;padding:5px 0}.json-item{display:flex;align-items:baseline;gap:5px;padding:1px 0}.json-key{color:#c0caf5;font-weight:500;flex-shrink:0}.json-sep{color:#787c99}.json-value{color:#a9b1d6;word-break:break-word;white-space:pre-wrap}.json-string{color:#9ece6a}.json-number{color:#e0af68}.json-bool{color:#c0caf5}.json-null,.json-empty{color:#787c99;font-style:italic}.subagent-steps{display:flex;flex-direction:column;gap:5px;padding:5px 15px 15px;background:#1f2335}.subagent-planning-indicator{display:flex;align-items:center;gap:8px;padding:5px 15px;font-size:12px;font-style:italic;color:#787c99;background:#1f2335}.task-update-step{display:flex;align-items:baseline;gap:8px;padding:5px 15px;font-size:12px;color:#a9b1d6;background:#1f2335}.task-update-step i{font-size:14px;color:#e0af68;flex:none}.task-update-step .task-step-tool{color:#c0caf5;font-weight:500}.task-update-step .task-step-status{color:#787c99;font-style:italic}.task-update-step .task-step-preview{color:#a9b1d6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-update-step.completed i{color:#9ece6a}.task-update-step.completed .task-step-status{color:#9ece6a;font-style:normal}.task-update-step.failed i,.task-update-step.cancelled i{color:#f7768e}.task-update-step.failed .task-step-status,.task-update-step.cancelled .task-step-status{color:#f7768e;font-style:normal}.task-update-step .task-spin{animation:task-spin 1s linear infinite}@keyframes task-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.subagent-step{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-left-color:#7aa2f7;border-radius:6px;overflow:hidden;margin-bottom:8px;font-size:12px}.subagent-step.is-success{border-left-color:#9ece6a}.subagent-step.is-error{border-left-color:#f7768e}.subagent-step summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 15px;cursor:pointer;background:#1f2335;color:#a9b1d6;-webkit-user-select:none;user-select:none}.subagent-step summary::-webkit-details-marker{display:none}.subagent-step summary:hover{background:#c0caf516}.subagent-step .tool-name{flex:1;font-family:IBM Plex Mono,monospace;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.subagent-step .tool-running-time{font-family:IBM Plex Mono,monospace;font-size:11px;color:#787c99;white-space:nowrap}.subagent-step .tool-status-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:18px;flex-shrink:0}.subagent-step .tool-chevron{font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.subagent-step[open]>summary .tool-chevron{transform:rotate(180deg)}.summary-card{border:2px solid rgba(192,202,245,.24);border-left-width:6px;border-left-color:#bb9af7;border-radius:6px;overflow:hidden;font-size:13px}.summary-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:8px 15px;cursor:pointer;background:#bb9af714;color:#bb9af7;-webkit-user-select:none;user-select:none}.summary-card summary::-webkit-details-marker{display:none}.compression-notice{font-size:12px}.compression-notice summary{list-style:none;text-align:center;padding:8px;color:#787c99;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.compression-notice summary::-webkit-details-marker{display:none}.compression-notice summary:before,.compression-notice summary:after{content:"";flex:1;height:1px;background:#c0caf53d}.compression-notice .compression-counts{opacity:.7}.compression-notice .compression-chevron{font-size:18px;transition:transform .15s ease}.compression-notice[open] .compression-chevron{transform:rotate(180deg)}.compression-notice .compression-body{padding:15px;font-size:13px;color:#a9b1d6;line-height:1.6;background:#1f2335;border:2px solid rgba(192,202,245,.24)}.input-bar{flex-shrink:0;padding:8px 15px;background:#16161e;border-top:2px solid rgba(192,202,245,.24)}@media(max-width:767px){.input-bar{padding:0}}.input-dropzone{position:relative}.input-dropzone.is-dragging:after{content:"Drop files here";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#7aa2f71f;border:2px dashed #7AA2F7;font-size:14px;color:#7aa2f7;pointer-events:none;z-index:10}.file-preview-strip{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:5px;max-width:920px;margin-left:auto;margin-right:auto}@media(max-width:767px){.file-preview-strip{padding-top:8px}}.file-preview-image{position:relative;width:60px;height:60px}.file-preview-image img{width:100%;height:100%;object-fit:cover;border:2px solid rgba(192,202,245,.24)}.file-preview-pill.file-preview-pill{text-transform:none;max-width:180px}.file-preview-pill.file-preview-pill .file-preview-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-preview-image{border:2px solid rgba(192,202,245,.24);border-radius:3px;overflow:hidden;background:#1f2335}.file-preview-remove{background:none;border:none;cursor:pointer;color:#787c99;padding:0;display:flex;align-items:center;font-size:14px;transition:color .15s ease;flex-shrink:0}.file-preview-remove:hover{color:#f7768e}.upload-progress{height:2px;background:#c0caf516;margin-bottom:5px;overflow:hidden}.upload-progress-fill{height:100%;background:#7aa2f7;transition:width .2s ease}.upload-progress.is-indeterminate .upload-progress-fill{width:30%;transition:none;animation:upload-slide 1.1s ease-in-out infinite}@keyframes upload-slide{0%{transform:translate(-110%)}to{transform:translate(440%)}}.input-row{display:flex;align-items:center;gap:8px;background:#1f2335;border:2px solid #C0CAF5;border-radius:3px;padding:8px;max-width:920px;margin:0 auto}.input-row:hover{border-bottom-color:#787c99}.input-row:focus-within{border-color:#7aa2f7;background:transparent}@media(max-width:767px){.input-row{border:none;border-radius:0;max-width:none;padding:8px 15px}}.input-textarea{flex:1;background:none;border:none;outline:none;resize:none;color:#c0caf5;font-size:14px;line-height:1.5;font-family:inherit;min-height:24px;max-height:144px;overflow-y:auto;padding:2px 0}.input-textarea::placeholder{color:#787c99}.welcome-screen{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:safe center;overflow-y:auto;padding:34px;gap:34px;text-align:center}@media(max-width:768px){.welcome-screen{padding:52px 15px 15px;gap:15px;justify-content:flex-start}}.welcome-logo{display:flex;flex-direction:column;align-items:center;gap:8px}.welcome-logo img{width:64px;height:64px}.welcome-logo h1{font-size:30px;font-weight:600;color:#c0caf5;margin:0}.welcome-logo p{font-size:var(--gn-font-size-base);color:#a9b1d6;margin:0}@media(max-width:768px){.welcome-logo{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:8px}.welcome-logo img{width:36px;height:36px}.welcome-logo h1{font-size:22px}.welcome-logo p{font-size:13px;flex-basis:100%}}.welcome-profiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:1fr;flex-shrink:0;gap:15px;width:min(100%,880px)}@media(max-width:768px){.welcome-profiles{grid-template-columns:repeat(2,1fr);gap:10px;width:100%;max-width:100%}}.welcome-profile-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:15px;background:#1f2335;border:2px solid rgba(192,202,245,.24);border-radius:6px;cursor:pointer;transition:border-color .15s ease,background .15s ease;width:100%;text-align:center}.welcome-profile-card:hover{border-color:#7aa2f7;background:#c0caf516}.welcome-profile-card.is-creating{opacity:.6;pointer-events:none}.welcome-profile-card .profile-name{font-size:14px;font-weight:600;color:#c0caf5}.welcome-profile-card .profile-desc{font-size:12px;color:#787c99;line-height:1.4}@media(max-width:768px){.welcome-profile-card{width:auto;padding:10px;gap:6px}.welcome-profile-card .profile-name{font-size:13px}.welcome-profile-card .profile-desc{font-size:11px}}.empty-chat{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(192,202,245,.24);border-top-color:#7aa2f7;border-radius:50%;animation:spin .6s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .15s ease}.fade-enter-from,.fade-leave-to{opacity:0}.msg-enter{animation:msgEnter .2s ease both}@keyframes msgEnter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.slide-left-enter-active,.slide-left-leave-active{transition:transform .28s ease,opacity .28s ease}.slide-left-enter-from,.slide-left-leave-to{transform:translate(-100%);opacity:0}.modal-enter-active,.modal-leave-active{transition:opacity .28s ease}.modal-enter-active .modal-panel,.modal-leave-active .modal-panel{transition:opacity .28s ease,margin-top .28s ease}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal-panel,.modal-leave-to .modal-panel{opacity:0;margin-top:200px}.tool-card[open]>summary .tool-chevron,.thinking-card[open]>summary .tool-chevron{transform:rotate(180deg)!important}.hljs{background:transparent;color:inherit}.hljs-comment,.hljs-quote{color:#787c99;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag,.hljs-formula{color:#bb9af7}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-char.escape_{color:#9ece6a}.hljs-number,.hljs-symbol,.hljs-bullet,.hljs-link{color:#ff9e64}.hljs-title,.hljs-title.class_,.hljs-title.function_,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#7aa2f7}.hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable,.hljs-property{color:#7dcfff}.hljs-type,.hljs-built_in,.hljs-class .hljs-title,.hljs-params,.hljs-operator,.hljs-punctuation{color:#e0af68}.hljs-meta,.hljs-meta .hljs-keyword{color:#73daca}.hljs-deletion{color:#f7768e}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600}.msg-flash{animation:msgFlash 2.5s ease-out}@keyframes msgFlash{0%{filter:brightness(1)}15%{filter:brightness(1.4);background-color:#7aa2f71f}40%{filter:brightness(1.4);background-color:#7aa2f71f}to{filter:brightness(1)}} diff --git a/webclient/dist/index.html b/webclient/dist/index.html index 1cfbb60..42bdd57 100644 --- a/webclient/dist/index.html +++ b/webclient/dist/index.html @@ -63,8 +63,8 @@ Navi - - + +
    diff --git a/webclient/dist/sw.js b/webclient/dist/sw.js index 6da573f..86c2630 100644 --- a/webclient/dist/sw.js +++ b/webclient/dist/sw.js @@ -8,13 +8,13 @@ * - /images/*: cache-first, capped — except the app's own artwork (below); * - everything dynamic (/api, /ws, /auth, /push, /content, ...): pass-through. * - * e8ae37ee5941b0b8 is stamped at build time (vite.config.js closeBundle) + * d6e77de49cc41923 is stamped at build time (vite.config.js closeBundle) * with a digest of index.html + the hashed asset filenames — so sw.js bytes * change on every build, the browser picks the new SW up (served no-store), * and activation evicts caches from previous builds. */ -const VERSION = 'e8ae37ee5941b0b8'; +const VERSION = 'd6e77de49cc41923'; const SHELL_CACHE = `navi-shell-${VERSION}`; const ASSETS_CACHE = `navi-assets-${VERSION}`; const IMAGES_CACHE = 'navi-images'; diff --git a/webclient/src/components/chat/ChatArea.vue b/webclient/src/components/chat/ChatArea.vue index a81672e..ef17f4f 100644 --- a/webclient/src/components/chat/ChatArea.vue +++ b/webclient/src/components/chat/ChatArea.vue @@ -18,6 +18,32 @@ + + + + + {{ t(ws.fatalClose.value.code === 4004 ? 'chat.sessionGone' : 'chat.sessionAccessDenied') }} + + + + +