Select a profile.
@@ -416,12 +488,13 @@
// ═══════════════════════════════════════════════════════════
// State
// ═══════════════════════════════════════════════════════════
-let currentTab = 'context'
-let currentSession = null
-let currentProfile = null
-let autoTimer = null
-let allTools = []
-let allPrompts = []
+let currentTab = 'context'
+let currentSession = null
+let currentPlanSession = null
+let currentProfile = null
+let autoTimer = null
+let allTools = []
+let allPrompts = []
// ═══════════════════════════════════════════════════════════
// DOM refs
@@ -449,16 +522,20 @@
currentTab = tab
document.querySelectorAll('.tab').forEach(t => t.classList.toggle('active', t.dataset.tab === tab))
- setHidden('ctx-aside', tab !== 'context')
- setHidden('prompts-aside',tab !== 'prompts')
- setHidden('tools-aside', tab !== 'tools')
+ setHidden('ctx-aside', tab !== 'context')
+ setHidden('planning-aside', tab !== 'planning')
+ setHidden('prompts-aside', tab !== 'prompts')
+ setHidden('tools-aside', tab !== 'tools')
- setHidden('view-context', tab !== 'context')
- setHidden('view-prompts', tab !== 'prompts')
- setHidden('view-tools', tab !== 'tools')
+ setHidden('view-context', tab !== 'context')
+ setHidden('view-planning', tab !== 'planning')
+ setHidden('view-prompts', tab !== 'prompts')
+ setHidden('view-tools', tab !== 'tools')
- setHidden('ctx-controls', tab !== 'context')
- setHidden('pt-controls', tab === 'context')
+ setHidden('ctx-controls', tab !== 'context' && tab !== 'planning')
+ setHidden('pt-controls', tab === 'context' || tab === 'planning')
+
+ if (tab === 'planning') loadPlanningSessions()
}
document.querySelectorAll('.tab').forEach(t =>
@@ -480,9 +557,17 @@
if (idInput.value) loadContext(idInput.value)
-btnLoad.addEventListener('click', () => loadContext(idInput.value.trim()))
-idInput.addEventListener('keydown', e => { if (e.key === 'Enter') loadContext(idInput.value.trim()) })
-btnRefresh.addEventListener('click', () => { if (currentSession) loadContext(currentSession) })
+function loadById(id) {
+ if (!id) return
+ if (currentTab === 'planning') loadPlanningLogs(id)
+ else loadContext(id)
+}
+btnLoad.addEventListener('click', () => loadById(idInput.value.trim()))
+idInput.addEventListener('keydown', e => { if (e.key === 'Enter') loadById(idInput.value.trim()) })
+btnRefresh.addEventListener('click', () => {
+ if (currentTab === 'planning') { if (currentPlanSession) loadPlanningLogs(currentPlanSession) }
+ else { if (currentSession) loadContext(currentSession) }
+})
btnAuto.addEventListener('click', toggleAuto)
btnReloadPt.addEventListener('click', () => { loadPrompts(); loadTools() })
toolFilterEl.addEventListener('input', () => renderTools(allTools))
@@ -665,6 +750,135 @@
}
// ═══════════════════════════════════════════════════════════
+// Planning tab
+// ═══════════════════════════════════════════════════════════
+const planningSessionListEl = document.getElementById('planning-session-list')
+const planningContent = document.getElementById('planning-content')
+const planningPh = document.getElementById('planning-placeholder')
+
+async function loadPlanningSessions() {
+ try {
+ const sessions = await apiFetch('/sessions')
+ renderPlanningSessionList(sessions)
+ } catch {
+ planningSessionListEl.innerHTML = '
failed to load
'
+ }
+}
+
+function renderPlanningSessionList(sessions) {
+ planningSessionListEl.innerHTML = ''
+ if (!sessions.length) {
+ planningSessionListEl.innerHTML = '
no sessions
'
+ return
+ }
+ for (const s of sessions) {
+ const el = document.createElement('div')
+ el.className = 'list-item' + (s.session_id === currentPlanSession ? ' selected' : '')
+ el.dataset.id = s.session_id
+ el.innerHTML = `
+
${esc(s.name || s.preview || s.session_id.slice(0,14)+'…')}
+
+ ${esc(s.profile_id)}
+ ${s.message_count} msg
+
`
+ el.addEventListener('click', () => loadPlanningLogs(s.session_id))
+ planningSessionListEl.appendChild(el)
+ }
+}
+
+async function loadPlanningLogs(id) {
+ if (!id) return
+ currentPlanSession = id
+ idInput.value = id
+ location.hash = id
+ document.querySelectorAll('#planning-session-list .list-item').forEach(el =>
+ el.classList.toggle('selected', el.dataset.id === id))
+ planningContent.innerHTML = ''
+ planningPh.classList.add('hidden')
+
+ try {
+ const data = await apiFetch(`/sessions/${encodeURIComponent(id)}/planning`)
+ renderPlanningLogs(data.logs)
+ } catch (e) {
+ planningContent.innerHTML = `
${esc(e.message)}
`
+ }
+}
+
+function renderPlanningLogs(logs) {
+ planningContent.innerHTML = ''
+ if (!logs.length) {
+ planningPh.textContent = 'No planning logs for this session.'
+ planningPh.classList.remove('hidden')
+ return
+ }
+
+ const phaseLabels = { '1': 'Phase 1 — Analysis', '2': 'Phase 2 — Execution plan', '3': 'Phase 3 — Critic' }
+ const phaseClass = { '1': 'phase-1', '2': 'phase-2', '3': 'phase-3' }
+
+ // Show newest first
+ for (const log of [...logs].reverse()) {
+ const run = document.createElement('div')
+ run.className = 'plan-run'
+
+ const ts = new Date(log.timestamp).toLocaleString()
+ const resultCls = log.result === 'plan' ? 'result-plan' : log.result === 'direct' ? 'result-direct' : 'result-other'
+
+ const hdr = document.createElement('div')
+ hdr.className = 'plan-run-header'
+ hdr.innerHTML = `
+
▶
+
${esc(ts)}
+
${esc(log.result)}`
+
+ const body = document.createElement('div')
+ body.className = 'plan-run-body hidden'
+
+ const phases = log.phases || {}
+ for (const [num, phase] of Object.entries(phases)) {
+ const block = document.createElement('div')
+ block.className = 'phase-block'
+
+ const tok = (phase.prompt_tokens || 0) + (phase.completion_tokens || 0)
+ const changed = phase.changed ? '
changed' : ''
+
+ const phHdr = document.createElement('div')
+ phHdr.className = 'phase-header'
+ phHdr.innerHTML = `
+
▶
+
${esc(phaseLabels[num] || 'Phase ' + num)}
+ ${changed}
+
${tok.toLocaleString()} tok (↑${phase.prompt_tokens||0} ↓${phase.completion_tokens||0})`
+
+ const phBody = document.createElement('div')
+ phBody.className = 'phase-body'
+ const pre = document.createElement('pre')
+ pre.textContent = phase.output || '(empty)'
+ phBody.appendChild(pre)
+
+ const phChevron = phHdr.querySelector('.phase-chevron')
+ phHdr.addEventListener('click', () => {
+ const hidden = phBody.classList.toggle('hidden')
+ phChevron.classList.toggle('open', !hidden)
+ })
+
+ block.appendChild(phHdr)
+ block.appendChild(phBody)
+ body.appendChild(block)
+ }
+
+ const chevron = hdr.querySelector('.plan-run-chevron')
+ hdr.addEventListener('click', () => {
+ const isHidden = body.classList.toggle('hidden')
+ chevron.classList.toggle('open', !isHidden)
+ })
+
+ run.appendChild(hdr)
+ run.appendChild(body)
+ planningContent.appendChild(run)
+ }
+}
+
+// ═══════════════════════════════════════════════════════════
// Prompts tab
// ═══════════════════════════════════════════════════════════
async function loadPrompts() {
diff --git a/navi/api/routes/sessions.py b/navi/api/routes/sessions.py
index 9ecaa4f..2002c2d 100644
--- a/navi/api/routes/sessions.py
+++ b/navi/api/routes/sessions.py
@@ -162,6 +162,18 @@
}
+@router.get("/{session_id}/planning")
+async def get_session_planning(
+ session_id: str,
+ store: Annotated[SessionStore, Depends(get_session_store)],
+) -> dict:
+ """Return all planning phase debug logs for a session."""
+ session = await store.get(session_id)
+ if session is None:
+ raise HTTPException(status_code=404, detail="Session not found")
+ return {"session_id": session.id, "logs": session.planning_logs}
+
+
@router.post("/{session_id}/files", status_code=201)
async def upload_file(
session_id: str,
diff --git a/navi/core/agent.py b/navi/core/agent.py
index 79512ce..eb02464 100644
--- a/navi/core/agent.py
+++ b/navi/core/agent.py
@@ -34,6 +34,7 @@
AgentEvent,
AIHelperTokensUsed,
ContextCompressed,
+ PlanningDebugData,
PlanningStatus,
PlanReady,
StreamEnd,
@@ -149,6 +150,17 @@
return []
+def _parse_plan_steps(plan_text: str) -> list[str]:
+ """Extract numbered step lines from the **Steps:** section of a plan."""
+ import re
+ m = re.search(r'\*\*Steps:\*\*\s*\n(.*?)(?=\n\s*\*\*[A-Z]|\Z)', plan_text, re.DOTALL)
+ if not m:
+ return []
+ steps_block = m.group(1)
+ steps = re.findall(r'^\s*\d+[\.\)]\s*(.+)', steps_block, re.MULTILINE)
+ return [s.strip() for s in steps if s.strip()]
+
+
log = structlog.get_logger()
# Sentinel: placed in the event sink by the tool wrapper to signal completion.
@@ -537,8 +549,9 @@
if profile.planning_enabled:
async for _ev in self._run_planning(session.context, profile, llm, mem, tool_schemas, messages=session.messages):
if isinstance(_ev, AIHelperTokensUsed):
- # Accumulate planning token usage into the turn total (not forwarded to WS)
_subagent_tokens += _ev.total
+ elif isinstance(_ev, PlanningDebugData):
+ session.planning_logs.append(_ev.log)
else:
yield _ev
@@ -793,8 +806,11 @@
# Read stop event once — checked between all phases
_stop = current_stop_event.get()
+ # Debug log — collected across all phases, yielded at the end (main agent only)
+ _dbg: dict = {"timestamp": datetime.now(timezone.utc).isoformat(), "result": "plan", "phases": {}}
+
# ── Phase 1: Task analysis (with reasoning) ────────────────────────────
- yield PlanningStatus(phase=1, label="Analysing task...", is_subagent=is_subagent)
+ yield PlanningStatus(phase=1, label="Working on it...", is_subagent=is_subagent)
_base_sys = system_prompt_override if system_prompt_override is not None else self._build_system_prompt(profile)
phase1_system = Message(
role="system",
@@ -840,8 +856,17 @@
completion_tokens=r1.completion_tokens or 0,
)
+ _dbg["phases"]["1"] = {
+ "output": analysis,
+ "prompt_tokens": r1.prompt_tokens or 0,
+ "completion_tokens": r1.completion_tokens or 0,
+ }
+
if not analysis or analysis.upper().startswith("DIRECT"):
log.debug("agent.planning_skipped", reason="direct")
+ _dbg["result"] = "direct"
+ if not is_subagent:
+ yield PlanningDebugData(log=_dbg)
return
if _stop and _stop.is_set():
@@ -912,6 +937,12 @@
completion_tokens=r2.completion_tokens or 0,
)
+ _dbg["phases"]["2"] = {
+ "output": plan_text,
+ "prompt_tokens": r2.prompt_tokens or 0,
+ "completion_tokens": r2.completion_tokens or 0,
+ }
+
if not plan_text:
return
@@ -924,63 +955,7 @@
log.debug("agent.planning_stopped", phase=2)
return
- # ── Phase 3: AIHelper plan critic ──────────────────────────────────────
- yield PlanningStatus(phase=3, label="Reviewing plan...", is_subagent=is_subagent)
- # Independent pass: validates and corrects executor assignments against
- # the actual tool list. Falls back to Phase 2 plan on any failure.
- if tool_names_list:
- try:
- critic_system = (
- "You are a plan validator for an AI assistant. "
- "You receive a task analysis, an execution plan draft, and a list of available tools.\n\n"
- "Your job:\n"
- "1. Every \"TOOL:
\" step must use a name from the available tools list exactly. "
- "If a tool name is wrong or missing, replace it with the closest available tool, "
- "or change the executor to SELF.\n"
- "2. A TOOL step must require only a single tool call. "
- "If a step clearly needs multiple calls, change its executor to SELF.\n"
- "3. Steps must be in logical dependency order — no step may depend on a result "
- "from a later step.\n\n"
- "Rules:\n"
- "- Do not add or remove steps.\n"
- "- Do not rewrite descriptions unless fixing an executor.\n"
- "- Return the corrected plan in the same ## Plan format.\n"
- "- If the plan is already correct, return it unchanged.\n"
- "- No commentary. No preamble. Return the plan only."
- )
- critic_prompt = (
- f"Available tools: {tool_names_list}\n\n"
- f"Task analysis:\n{analysis}\n\n"
- f"Execution plan draft:\n{plan_text}"
- )
- phase3_ctx = [
- Message(role="system", content=critic_system),
- Message(role="user", content=critic_prompt),
- ]
-
- r3 = await asyncio.wait_for(
- llm.complete(phase3_ctx, tools=None, temperature=0.1, model=profile.model, think=False),
- timeout=settings.llm_complete_timeout,
- )
- reviewed = (r3.content or "").strip()
-
- if r3.prompt_tokens or r3.completion_tokens:
- yield AIHelperTokensUsed(
- prompt_tokens=r3.prompt_tokens or 0,
- completion_tokens=r3.completion_tokens or 0,
- )
-
- # Accept the reviewed plan only if it still has numbered steps
- if reviewed and _re.search(r"^\s*\d+[\.\)]", reviewed, _re.MULTILINE):
- plan_text = reviewed
- log.debug("agent.planning_phase3_applied", length=len(plan_text))
- else:
- log.warning("agent.planning_phase3_invalid", preview=reviewed[:120])
-
- except asyncio.TimeoutError:
- log.warning("agent.planning_phase3_timeout")
- except Exception:
- log.warning("agent.planning_phase3_failed", exc_info=True)
+ # ── Phase 3: disabled — to be reworked together with reflect ──────────
# Warn if executor assignments are still missing (plan may be malformed)
if not _re.search(r"(TOOL:|AGENT:|→\s*SELF)", plan_text):
@@ -991,7 +966,22 @@
context.append(Message(role="assistant", content=plan_text))
if messages is not None:
messages.append(Message(role="assistant", content=plan_text, is_plan=True))
- log.debug("agent.plan_ready", phases=3, length=len(plan_text))
+
+ # Auto-populate todo from plan steps — model only needs to call 'update' after each step.
+ _todo_steps = _parse_plan_steps(plan_text)
+ if _todo_steps:
+ try:
+ from navi.tools.todo import _plans, _Task
+ from navi.tools.base import current_session_id as _sid_var
+ _sid = _sid_var.get() or "__default__"
+ _plans[_sid] = [_Task(text=s) for s in _todo_steps]
+ log.debug("agent.todo_auto_populated", steps=len(_todo_steps), session=_sid)
+ except Exception:
+ log.warning("agent.todo_auto_populate_failed", exc_info=True)
+
+ log.debug("agent.plan_ready", phases=2, length=len(plan_text))
+ if not is_subagent:
+ yield PlanningDebugData(log=_dbg)
yield PlanReady(plan=plan_text, is_subagent=is_subagent)
async def _run_workers(
diff --git a/navi/core/events.py b/navi/core/events.py
index 7636058..bc355d9 100644
--- a/navi/core/events.py
+++ b/navi/core/events.py
@@ -126,6 +126,14 @@
@dataclass
+class PlanningDebugData:
+ """Internal: raw outputs from all planning phases, for debug storage in session.
+ Never forwarded to WebSocket clients. Only emitted for the main agent (not subagents)."""
+
+ log: dict # {timestamp, result, phases: {1: {output, prompt_tokens, completion_tokens}, ...}}
+
+
+@dataclass
class AIHelperTokensUsed:
"""Internal: emitted by AIHelper after each LLM call to report token usage.
Never forwarded to WebSocket clients."""
@@ -141,5 +149,5 @@
AgentEvent = (
ToolStarted | ToolEvent | TextDelta | ThinkingDelta | ThinkingEnd
| StreamEnd | StreamStopped | ContextCompressed | TurnThinking | ProfileSwitched
- | PlanningStatus | PlanReady | SubagentComplete | AIHelperTokensUsed
+ | PlanningStatus | PlanReady | SubagentComplete | AIHelperTokensUsed | PlanningDebugData
)
diff --git a/navi/core/pg_session_store.py b/navi/core/pg_session_store.py
index be9e2e2..211939e 100644
--- a/navi/core/pg_session_store.py
+++ b/navi/core/pg_session_store.py
@@ -25,7 +25,8 @@
"""
_MIGRATE = """
-ALTER TABLE sessions ADD COLUMN IF NOT EXISTS name TEXT
+ALTER TABLE sessions ADD COLUMN IF NOT EXISTS name TEXT;
+ALTER TABLE sessions ADD COLUMN IF NOT EXISTS planning_logs TEXT NOT NULL DEFAULT '[]'
"""
@@ -76,7 +77,7 @@
pool = await self._get_pool()
async with pool.acquire() as conn:
row = await conn.fetchrow(
- "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name "
+ "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name, planning_logs "
"FROM sessions WHERE id = $1",
session_id,
)
@@ -88,9 +89,10 @@
async with pool.acquire() as conn:
await conn.execute(
"UPDATE sessions SET profile_id = $1, messages = $2, context = $3, "
- "last_active = $4, context_token_count = $5 WHERE id = $6",
+ "last_active = $4, context_token_count = $5, planning_logs = $6 WHERE id = $7",
session.profile_id, _serialize(session.messages), _serialize(session.context),
- session.last_active, session.context_token_count, session.id,
+ session.last_active, session.context_token_count,
+ json.dumps(session.planning_logs, ensure_ascii=False), session.id,
)
async def set_pinned(self, session_id: str, pinned: bool) -> bool:
@@ -115,7 +117,7 @@
pool = await self._get_pool()
async with pool.acquire() as conn:
rows = await conn.fetch(
- "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name "
+ "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name, planning_logs "
"FROM sessions ORDER BY pinned DESC, last_active DESC"
)
return [self._row_to_session(r) for r in rows]
@@ -130,6 +132,8 @@
messages = _deserialize(row["messages"])
context_json = row["context"]
context = _deserialize(context_json) if context_json else list(messages)
+ planning_logs_raw = row["planning_logs"]
+ planning_logs = json.loads(planning_logs_raw) if planning_logs_raw else []
return Session(
id=row["id"],
profile_id=row["profile_id"],
@@ -140,4 +144,5 @@
created_at=row["created_at"],
last_active=row["last_active"],
context_token_count=row["context_token_count"] or 0,
+ planning_logs=planning_logs,
)
diff --git a/navi/core/session.py b/navi/core/session.py
index d3971dc..bc832f5 100644
--- a/navi/core/session.py
+++ b/navi/core/session.py
@@ -19,6 +19,7 @@
name: str | None = None
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
last_active: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
+ planning_logs: list[dict] = Field(default_factory=list) # raw planning phase outputs per turn
class SessionStore(ABC):
diff --git a/navi/core/sqlite_session_store.py b/navi/core/sqlite_session_store.py
index 88d9f98..f386613 100644
--- a/navi/core/sqlite_session_store.py
+++ b/navi/core/sqlite_session_store.py
@@ -55,6 +55,7 @@
"ALTER TABLE sessions ADD COLUMN context TEXT NOT NULL DEFAULT ''",
"ALTER TABLE sessions ADD COLUMN context_token_count INTEGER NOT NULL DEFAULT 0",
"ALTER TABLE sessions ADD COLUMN name TEXT",
+ "ALTER TABLE sessions ADD COLUMN planning_logs TEXT NOT NULL DEFAULT '[]'",
]:
try:
conn.execute(migration)
@@ -78,7 +79,7 @@
async def get(self, session_id: str) -> Session | None:
async with aiosqlite.connect(self._db_path) as db:
async with db.execute(
- "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name "
+ "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name, planning_logs "
"FROM sessions WHERE id = ?",
(session_id,),
) as cur:
@@ -90,9 +91,10 @@
async with aiosqlite.connect(self._db_path) as db:
await db.execute(
"UPDATE sessions SET profile_id = ?, messages = ?, context = ?, "
- "last_active = ?, context_token_count = ? WHERE id = ?",
+ "last_active = ?, context_token_count = ?, planning_logs = ? WHERE id = ?",
(session.profile_id, _serialize(session.messages), _serialize(session.context),
- session.last_active.isoformat(), session.context_token_count, session.id),
+ session.last_active.isoformat(), session.context_token_count,
+ json.dumps(session.planning_logs, ensure_ascii=False), session.id),
)
await db.commit()
@@ -117,7 +119,7 @@
async def list_all(self) -> list[Session]:
async with aiosqlite.connect(self._db_path) as db:
async with db.execute(
- "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name "
+ "SELECT id, profile_id, messages, context, pinned, created_at, last_active, context_token_count, name, planning_logs "
"FROM sessions ORDER BY pinned DESC, last_active DESC"
) as cur:
rows = await cur.fetchall()
@@ -130,12 +132,10 @@
return cur.rowcount > 0
def _row_to_session(self, row: tuple) -> Session:
- id_, profile_id, messages_json, context_json, pinned, created_at, last_active, context_token_count, *rest = row
- name = rest[0] if rest else None
+ id_, profile_id, messages_json, context_json, pinned, created_at, last_active, context_token_count, name, planning_logs_json = row
messages = _deserialize(messages_json)
- # Backward compat: existing sessions have empty context column —
- # initialize context from messages so they work without re-compression.
context = _deserialize(context_json) if context_json else list(messages)
+ planning_logs = json.loads(planning_logs_json) if planning_logs_json else []
return Session(
id=id_,
profile_id=profile_id,
@@ -146,4 +146,5 @@
created_at=_parse_dt(created_at),
last_active=_parse_dt(last_active),
context_token_count=context_token_count or 0,
+ planning_logs=planning_logs,
)
diff --git a/navi/tools/filesystem.py b/navi/tools/filesystem.py
index e664cf1..5d4b0ac 100644
--- a/navi/tools/filesystem.py
+++ b/navi/tools/filesystem.py
@@ -215,7 +215,8 @@
"write — create or overwrite a file; "
"append — add text to end; "
"list — directory contents with sizes; "
- "find — search files by glob pattern; "
+ "find — search files by glob pattern downward; "
+ "find_up — walk up the directory tree to find a file by name (pattern param); returns its path or 'not found'; "
"info — size, line count, dates, permissions; "
"move — rename or move; "
"delete — remove file or directory tree; "
@@ -228,7 +229,7 @@
"action": {
"type": "string",
"enum": [
- "read", "write", "append", "list", "find",
+ "read", "write", "append", "list", "find", "find_up",
"info", "move", "delete", "exists",
"query", "smart_edit",
],
@@ -248,7 +249,7 @@
},
"pattern": {
"type": "string",
- "description": "Glob pattern for find, e.g. '*.log' or '**/*.py'.",
+ "description": "Glob pattern for find (e.g. '*.log'), or exact filename for find_up.",
},
"offset": {
"type": "integer",
@@ -314,6 +315,7 @@
case "append": return self._append(path, params)
case "list": return self._list(path, params)
case "find": return self._find(path, params)
+ case "find_up": return self._find_up(path, params)
case "info": return self._info(path)
case "move": return self._move(path, params)
case "delete": return self._delete(path)
@@ -456,6 +458,20 @@
header = f"[{len(matches)} matches for '{pattern}' in {path}{extra}]\n"
return ToolResult(success=True, output=header + "\n".join(lines))
+ def _find_up(self, path: Path, params: dict) -> ToolResult:
+ filename = params.get("pattern", "NAVI.md")
+ current = path if path.is_dir() else path.parent
+ checked = []
+ while True:
+ target = current / filename
+ checked.append(str(target))
+ if target.exists():
+ return ToolResult(success=True, output=str(target))
+ parent = current.parent
+ if parent == current:
+ return ToolResult(success=True, output=f"not found (searched: {', '.join(checked)})")
+ current = parent
+
def _info(self, path: Path) -> ToolResult:
if not path.exists():
return ToolResult(success=False, output=f"Not found: {path}", error="not_found")
diff --git a/navi/tools/scratchpad.py b/navi/tools/scratchpad.py
index 15559a6..e2749d8 100644
--- a/navi/tools/scratchpad.py
+++ b/navi/tools/scratchpad.py
@@ -15,12 +15,11 @@
class ScratchpadTool(Tool):
name = "scratchpad"
description = (
- "Persistent working memory for the current session. Use it to record findings, "
- "track artifacts, and pass context to sub-agents. Organised into named sections. "
- "MANDATORY: at the start of any multi-step task, write a 'goal' section stating "
- "in one sentence what you are trying to achieve. Update it if the goal changes. "
- "Always read the relevant section before composing a final answer — "
- "it may contain findings from earlier tool calls."
+ "Working memory for the current session — for facts discovered mid-task, not for progress tracking. "
+ "Sections: goal (one-sentence objective), findings (key facts from tool results), "
+ "artifacts (file paths, URLs), errors (failures and what was tried). "
+ "Write 'goal' at the start of any multi-step task. "
+ "Read before composing a final answer — findings may contain facts needed for the response."
)
parameters = {
"type": "object",
@@ -38,11 +37,8 @@
"section": {
"type": "string",
"description": (
- "Which section to target. Conventional names: "
- "goal (current objective — always write this first), "
- "findings (discovered facts), artifacts (file paths, outputs), "
- "errors (tracebacks, failures), verification (DoD checklist), "
- "context_transfer (briefings for sub-agents), main (general). "
+ "Which section to target. Standard names: "
+ "goal, findings, artifacts, errors, main. "
"Defaults to 'main' when omitted on write/append. "
"Omit entirely on read/clear to target all sections."
),
diff --git a/navi/tools/todo.py b/navi/tools/todo.py
index 3183200..0a784f1 100644
--- a/navi/tools/todo.py
+++ b/navi/tools/todo.py
@@ -26,10 +26,12 @@
class TodoTool(Tool):
name = "todo"
description = (
- "The Orchestrator's Master Plan manager. Use 'set' at the start of any complex task to establish your 'Contract' — a list of high-level milestones (Master Plan). "
- "Use 'update' to track progress and, crucially, to record the outcome of each step after verification. "
- "Use 'view' to re-orient yourself after sub-agent execution or long tool chains. "
- "This tool is your primary mechanism for accountability and progress tracking."
+ "Task plan tracker. Your todo list is automatically populated from the plan at the start of each task — "
+ "you do NOT need to call 'set'. "
+ "Call 'update' (index + status) immediately after completing or failing each step — before moving to the next. "
+ "Call 'view' to re-orient yourself after sub-agent execution or long tool chains. "
+ "Use 'set' only when you need to replace the plan mid-task (rare). "
+ "Statuses: pending → in_progress → done / failed / skipped."
)
parameters = {
"type": "object",
diff --git a/navi/tools/web_search.py b/navi/tools/web_search.py
index 743bf99..6865781 100644
--- a/navi/tools/web_search.py
+++ b/navi/tools/web_search.py
@@ -1,18 +1,17 @@
-"""Web search tool — DDG multi-backend retry with Brave/SearXNG fallback."""
+"""Web search tool — DDG html backend (primary) with Brave/SearXNG fallback."""
import asyncio
import httpx
-from duckduckgo_search import DDGS
+from ddgs import DDGS
from navi.config import settings
from .base import Tool, ToolResult
-# DDG backends tried in order. Each hits a different DDG endpoint, so if one
-# is rate-limited or blocked the next one usually succeeds.
-_DDG_BACKENDS = ["auto", "html", "lite"]
-_DDG_RETRY_DELAY = 1.5 # seconds between backend attempts
+# html is the only DDG backend that reliably returns results; auto/lite are flaky.
+# On failure we fall back to html once more, then Brave/SearXNG.
+_DDG_RETRY_DELAY = 2.0 # seconds before second DDG attempt
class WebSearchTool(Tool):
@@ -39,51 +38,50 @@
async def execute(self, params: dict) -> ToolResult:
query = params["query"]
max_results = int(params.get("max_results", 5))
+ last_error: str = ""
- # 1. Try DuckDuckGo with each backend in sequence
- last_ddg_error: str = ""
- for backend in _DDG_BACKENDS:
+ # 1. SearXNG (primary — self-hosted, aggregates multiple engines)
+ if settings.searxng_url:
+ try:
+ results = await self._searxng(query, max_results)
+ if results:
+ return self._format(results, source="SearXNG")
+ last_error = "SearXNG: empty response"
+ except Exception as e:
+ last_error = f"SearXNG: {e}"
+
+ # 2. DuckDuckGo html fallback, retry once
+ for attempt in range(2):
try:
results = await asyncio.to_thread(
- lambda b=backend: list(
- DDGS().text(query, backend=b, max_results=max_results, region="wt-wt")
+ lambda: list(
+ DDGS().text(query, backend="html", max_results=max_results, region="ua-uk")
)
)
if results:
- return self._format(results, source=f"DDG/{backend}")
- # Empty list — DDG returned nothing (blocked or no results)
- last_ddg_error = "empty response"
+ return self._format(results, source="DDG")
+ last_error = "DDG: empty response"
except Exception as e:
- last_ddg_error = str(e)
- if backend != _DDG_BACKENDS[-1]:
+ last_error = f"DDG: {e}"
+ if attempt == 0:
await asyncio.sleep(_DDG_RETRY_DELAY)
- # 2. Brave Search fallback
+ # 3. Brave Search fallback
if settings.brave_search_api_key:
try:
results = await self._brave(query, max_results)
if results:
return self._format(results, source="Brave")
except Exception as e:
- last_ddg_error = f"Brave: {e}"
-
- # 3. SearXNG fallback
- if settings.searxng_url:
- try:
- results = await self._searxng(query, max_results)
- if results:
- return self._format(results, source="SearXNG")
- except Exception as e:
- last_ddg_error = f"SearXNG: {e}"
+ last_error = f"Brave: {e}"
return ToolResult(
success=False,
output=(
f"All search backends failed for query: {query!r}\n"
- f"Last error: {last_ddg_error}\n"
- "Tip: set BRAVE_SEARCH_API_KEY or SEARXNG_URL in .env for fallback backends."
+ f"Last error: {last_error}"
),
- error=last_ddg_error,
+ error=last_error,
)
# ── helpers ───────────────────────────────────────────────────────────────
@@ -128,7 +126,7 @@
"q": query,
"format": "json",
"engines": "google,bing,duckduckgo",
- "language": "all",
+ "language": "uk-UA",
},
)
resp.raise_for_status()
diff --git a/persona.txt b/persona.txt
index 1e43e34..8c78ad5 100644
--- a/persona.txt
+++ b/persona.txt
@@ -40,12 +40,35 @@
You have a reflect tool: Critic (challenges assumptions, surfaces risks), Pragmatist (finds simplest path), Detailer (spots missing requirements). All three run in parallel — it is fast.
Use reflect when:
-- About to plan a complex or ambiguous task — call it BEFORE setting your todo list.
+- About to plan a complex or ambiguous task — call it before the planning phase.
- Stuck on a problem and your current approach is not working.
- Unsure whether your reading of the user's request is correct.
Do NOT use reflect for simple, clearly-scoped tasks.
+SCRATCHPAD:
+Working memory for discovered facts — not for tracking progress (that's todo).
+
+Write to scratchpad when:
+- goal: one sentence at the start of any multi-step task. Rewrite if the goal shifts.
+- findings: key facts from tool results you'll need later (measurements, config values, API data).
+- artifacts: paths and URLs of files or resources you created or will reference again.
+- errors: what failed and what you tried — prevents repeating the same mistake.
+Do NOT write to scratchpad:
+- Step status or plan — use todo and the plan card instead.
+- Raw tool output verbatim — synthesise what matters.
+- Anything you won't need again this session.
+
+Read scratchpad(op="read") before composing any multi-step final answer — your findings may contain facts you'd otherwise miss.
+
+TODO:
+Your todo list is automatically populated from the plan steps — never call todo(op="set") yourself.
+After the plan is set, for each step:
+- Call todo(op="update", index=N, status="in_progress") when you start the step.
+- Call todo(op="update", index=N, status="done") after you verify the step is complete.
+- Call todo(op="update", index=N, status="failed") if the step fails — then decide whether to retry or skip.
+Call todo(op="view") to re-orient yourself after subagent execution or long tool chains.
+
MARKDOWN TABLES:
When outputting a table, always use a valid GFM separator row as the second row — cells must contain only dashes and optional colons (e.g. `| --- | :--- | ---: |`). Never mix separator row with data. Correct format:
```
@@ -68,6 +91,29 @@
For tool output (terminal, file reads, API responses): synthesise by default. Include raw output verbatim only when directly relevant or explicitly requested.
+NAVI.MD — PROJECT CONTEXT:
+Projects may have a NAVI.md file at their root — a compact knowledge base with environment facts, conventions, credentials, and project status. It complements your memory tool: memory stores personal user facts, NAVI.md stores project/environment facts.
+
+READ — at the start of any non-trivial task in a directory:
+1. filesystem(action="find_up", path="", pattern="NAVI.md") — locates the nearest NAVI.md by walking up the tree.
+2. If found: filesystem(action="query", path="", question="...") — ask a targeted question relevant to the task. Never dump the whole file. Examples: "what servers are available?", "what is the stack of this project?", "are there any known credentials?".
+
+WRITE — update NAVI.md when you discover stable, reusable facts:
+- A server: IP, OS, role, services, access method.
+- A credential or connection string the user has shared or you've used.
+- A project convention, constraint, or quirk (e.g. "deployment runs via make deploy, not npm run build").
+- Status of ongoing work worth remembering across sessions.
+
+HOW TO WRITE:
+1. query first — check if the fact is already recorded to avoid duplicates.
+2. filesystem(action="smart_edit", path="", instruction="...") — target a specific section. Example: "under ## Servers, add: 192.168.1.168 — Ubuntu 24.04, Docker, SearXNG :8088, SSH user: ubuntu".
+3. One targeted smart_edit per discovery. Never rewrite the whole file.
+4. If NAVI.md does not exist in the project root yet: create it with filesystem(action="write") using this template:
+ # NAVI — Project Context\n\n## Environment\n\n## Notes\n
+ Then immediately add the discovered fact via smart_edit.
+
+DO NOT WRITE: task progress, session state, one-off results, anything already in your memory tool.
+
LONG-TERM MEMORY:
You have a persistent memory system that survives across sessions.
diff --git a/webclient/dist/assets/index-C0zKwfri.css b/webclient/dist/assets/index-C0zKwfri.css
new file mode 100644
index 0000000..043d8a9
--- /dev/null
+++ b/webclient/dist/assets/index-C0zKwfri.css
@@ -0,0 +1 @@
+@charset "UTF-8";.vue-recycle-scroller__resize-observer[data-v-08cc04ab]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;z-index:-1}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.grid-mode:not(.page-mode){overflow:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.session-list-wrap[data-v-939e2f62]{flex:1;overflow:hidden;display:flex;flex-direction:column}.session-scroller[data-v-939e2f62]{flex:1;overflow-y:auto}.empty-sessions[data-v-939e2f62]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 16px;color:var(--color-text-dark, #787c99);font-size:13px}.empty-sessions i[data-v-939e2f62]{font-size:32px;opacity:.4}.empty-sessions p[data-v-939e2f62]{margin:0}.sidebar-close-btn[data-v-a910499a]{display:none}@media(max-width:768px){.sidebar-close-btn[data-v-a910499a]{display:flex;margin-left:auto}}.context-bar-pct[data-v-1dd6aa06]{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--color-success);white-space:nowrap}.context-bar-pct.is-warn[data-v-1dd6aa06]{color:var(--color-warning)}.context-bar-pct.is-crit[data-v-1dd6aa06]{color:var(--color-error)}.stream-cursor[data-v-6b0fbdc8]{display:inline-block;width:2px;height:1em;background:currentColor;margin-left:2px;vertical-align:text-bottom;animation:blink-6b0fbdc8 1s step-end infinite}@keyframes blink-6b0fbdc8{0%,to{opacity:1}50%{opacity:0}}.message-list-wrap[data-v-bdceaa82]{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.messages-group[data-v-bdceaa82]{display:flex;flex-direction:column;gap:32px}.scroll-to-bottom-btn[data-v-bdceaa82]{position:absolute;bottom:16px;right:16px;width:40px;height:40px;border-radius:50%;background:var(--color-secondary, #7aa2f7);color:var(--color-black, #1a1b2e);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-bdceaa82]:hover{opacity:1;transform:translateY(-2px)}.scroll-btn-enter-active[data-v-bdceaa82],.scroll-btn-leave-active[data-v-bdceaa82]{transition:opacity .2s ease,transform .2s ease}.scroll-btn-enter-from[data-v-bdceaa82],.scroll-btn-leave-to[data-v-bdceaa82]{opacity:0;transform:translateY(8px)}.file-preview-image[data-v-0239fe0c]{position:relative}.file-preview-image .file-preview-remove[data-v-0239fe0c]{position:absolute;top:-4px;right:-4px;background:var(--surface-panel, #1f2335);border:1px solid var(--border-color-muted);width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:10px;cursor:pointer;color:var(--color-text-dark)}.file-preview-image .file-preview-remove[data-v-0239fe0c]:hover{color:var(--color-error)}.reconnect-notice[data-v-f11eeb09]{display:flex;align-items:center;gap:6px;padding:4px 8px;font-size:12px;color:var(--color-warning, #e0af68);margin-bottom:4px}.reconnect-banner[data-v-722419a3]{display:flex;align-items:center;gap:8px;padding:6px 16px;background:#e0af681a;border-bottom:1px solid rgba(224,175,104,.3);font-size:13px;color:var(--color-warning, #e0af68)}.confirm-panel[data-v-49a56e4f]{max-width:420px;min-height:unset}.lightbox-panel[data-v-f5bd537d]{max-width:90vw;min-height:unset;width:fit-content;cursor:default}.lightbox-body[data-v-f5bd537d]{display:flex;align-items:center;justify-content:center;padding:0;max-height:calc(90vh - 60px);overflow:hidden}.lightbox-img[data-v-f5bd537d]{display:block;max-width:100%;max-height:calc(90vh - 60px);object-fit:contain}.selection-toolbar[data-v-615fec6a]{position:fixed;transform:translate(-50%);z-index:900;pointer-events:all;background:#e0af68;color:#000}.app-shell[data-v-b748f917]{display:flex;flex:1 1 0;min-height:0;min-width:0;overflow:hidden}.sidebar-backdrop[data-v-b748f917]{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:99}@media(max-width:768px){.sidebar-backdrop[data-v-b748f917]{display:block}}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-SemiBold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/fonts/IBM_Plex_Mono/IBMPlexMono-Italic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}.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}@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){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}html{font-size:100%}body{font-family:IBM Plex Mono,monospace;font-size:15px;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}h1{font-size:34px;letter-spacing:0}h2{font-size:26px}h3{font-size:22px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px;font-weight:500}.text,p{font-size:15px;line-height:1.6}.text-sm{font-size:13px;line-height:1.4}.text-lg{font-size:16px;line-height:1.6}.text-lead{max-width:760px;color:#c0caf5;font-size:16px;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: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,pre,.code{font-family:IBM Plex Mono,monospace;font-size:15px;line-height:1.4;background-color:#1f2335}.text-primary{color:#c0caf5}.text-secondary{color:#a9b1d6}pre{font-size:15px;line-height:1.6;white-space:pre-wrap}pre code,.code{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;color:#c0caf5;background:#c0caf50b;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;color:#a9b1d6;background:#c0caf50b;font-size:15px;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:15px;line-height:1.6}.list-item{font-size:inherit}.modal-title{font-size:20px;font-weight:600}.modal-body{font-size:15px}.toast-title{font-size:14px;font-weight:600}.toast-text{font-size:13px;line-height:1.4}.palette{display:flex;flex-direction:row;gap:8px}.palette .color .color-box{width:92px;height:68px}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);background:#c0caf50b}.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;background:#c0caf50b}.usage-meter .usage-meter-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;font-size:16px;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);color:#787c99;background:#c0caf50b;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:46px;font-family:IBM Plex Mono,monospace;font-size:15px;font-weight:600;line-height:1;letter-spacing:.04em;padding:12px 22px;border-radius:0;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:46px;position:relative}.btn.with-icon .ph,.btn.with-icon .ph-bold{position:absolute;color:#16161e;left:-46px;top:1px;font-size:26px;height:100%;display:inline-flex;align-items:center;width:46px;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:-28px}}@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:-28px}}.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:-28px}.btn.btn-small{font-size:13px;font-weight:500;min-height:38px;padding:8px}.btn.btn-small.with-icon{border-left-width:32px}.btn.btn-small.with-icon .ph,.btn.btn-small.with-icon .ph-bold{top:0;left:-40px;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:16px;font-weight:700;min-height:54px;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:38px;height:38px;background:transparent;color:#c0caf5;font-size:22px;border:2px solid transparent;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}.btn-icon .ph{transform:rotate(0);transition-duration:.2s;transition-property:transform}@media(hover:hover)and (pointer:fine){.btn-icon:not(.without-hover):hover{color:#e0af68;border-color:#e0af68}.btn-icon:not(.without-hover):hover .ph{transform:rotate(90deg)}}@media(hover:none)and (pointer:coarse){.btn-icon:not(.without-hover):active{color:#e0af68;border-color:#e0af68}.btn-icon:not(.without-hover):active .ph{transform:rotate(90deg)}}.form-group{width:100%;max-width:600px}.form-group .label{display:flex;flex-direction:column;font-size:15px;width:100%;position:relative}.form-group .label>.ph{position:absolute;color:#c0caf5;left:0;bottom:1px;font-size:26px;height:54px;display:inline-flex;align-items:center;width:46px;justify-content:center;transition-duration:.2s;transition-property:color,left}.form-group .label .input{min-height:54px;font-family:IBM Plex Mono,monospace;font-size:15px;font-weight:500;line-height:1;letter-spacing:.04em;padding:12px 22px;margin-top:8px;border-radius:0;border-width:2px;border-bottom-width:6px;border-style:solid;border-color:#c0caf5;color:#c0caf5;background-color:#c0caf50b;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::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 textarea.input{height:108px;line-height:1.25;resize:none}.form-group .label .ph+.input,.form-group .label .ph+.select-wrap .select{padding-left:46px}.form-group .label .select-wrap{margin-top:8px}.form-group .label .select{width:100%;height:54px;margin-top:0;appearance:none;-webkit-appearance:none;-moz-appearance:none}.form-group .label .select:focus{outline:none}.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:#c0caf50b}.legend{padding:5px 8px;color:#16161e;background:#c0caf5;font-size:13px;font-weight:700;line-height:1;text-transform:uppercase}.file-upload{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:8px 12px;border:2px solid #7AA2F7;border-left-width:6px;color:#7aa2f7;background:#c0caf50b;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}.range{width:100%;max-width:600px;accent-color:#7AA2F7}.range input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:46px;margin:0;background:transparent;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:18px;height:38px;margin-top:-19px;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:18px;height:38px;border:2px solid #7AA2F7;border-radius:0;background:#7aa2f7}@media(max-width:767px){.form-grid{grid-template-columns:1fr}}.radio{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.radio input[type=radio]{display:none}.radio .radio-control{display:inline-block;border-radius:100%;border:2px solid #C0CAF5;width:18px;height:18px;background:transparent;transition-duration:.2s;transition-property:background,border-color}@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+.radio-control{background:#c0caf5}.radio input[type=radio]:disabled+.radio-control{background:#414868;border-color:#414868}.radio input[type=radio]:focus-visible+.radio-control{outline:2px solid #E0AF68;outline-offset:3px}.radio .radio-label{font-size:15px}.checkbox{display:inline-flex;flex-direction:row;gap:8px;align-items:center}.checkbox input[type=checkbox]{display:none}.checkbox .checkbox-control{height:16px;width:32px;border:2px solid #C0CAF5;position:relative;background:transparent;transition-duration:.2s;transition-property:border-color,background;display:block}.checkbox .checkbox-control:before{content:"";display:block;height:20px;width:20px;background:#c0caf5;position:absolute;left:-5px;top:-5px;transition-duration:.2s;transition-property:left,background}@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:#7aa2f7;border-color:#7aa2f7}.checkbox input[type=checkbox]:checked+.checkbox-control:before{left:17px}.checkbox input[type=checkbox]:disabled+.checkbox-control{border-color:#414868}.checkbox input[type=checkbox]:focus-visible+.checkbox-control{outline:2px solid #E0AF68;outline-offset:3px}.checkbox input[type=checkbox]:disabled+.checkbox-control:before{background:#414868}.input-group{display:flex;align-items:stretch;width:100%;max-width:600px;min-height:54px;border:2px solid #C0CAF5;border-bottom-width:6px;background:#c0caf50b;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:transparent}.input-group .input-group-addon,.input-group .input-group-action{display:inline-flex;align-items:center;justify-content:center;min-width:54px;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}@media(hover:hover)and (pointer:fine){.input-group .input-group-action:hover{color:#16161e;background:#e0af68}}@media(hover:none)and (pointer:coarse){.input-group .input-group-action:active{color:#16161e;background:#e0af68}}.input-group .input-group-input{flex:1 1 auto;min-width:0;border:0;padding:12px 15px;color:#c0caf5;background:transparent;font-family:IBM Plex Mono,monospace;font-size:15px;font-weight:500;letter-spacing:.04em}.input-group .input-group-input:focus{outline:none}.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:46px}.input-group.input-group-compact .input-group-addon,.input-group.input-group-compact .input-group-action{min-width:46px}.input-group.input-group-compact .input-group-input{padding:8px 12px;font-size:13px}.search-field{max-width:420px}.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;background:#c0caf50b}.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: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;font-size:15px;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:16px;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;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-error,.badge.badge-danger{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:transparent;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);color:#a9b1d6;background:#c0caf50b;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:transparent;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-selected.chip-secondary,.chip.chip-secondary[aria-pressed=true],.chip.chip-secondary[aria-selected=true]{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}button.chip,a.chip{cursor:pointer}button.chip:focus-visible,a.chip:focus-visible{outline:2px solid #E0AF68;outline-offset:3px}@media(hover:hover)and (pointer:fine){button.chip:hover,a.chip:hover{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}button.chip:hover:before,a.chip:hover:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}@media(hover:none)and (pointer:coarse){button.chip:active,a.chip:active{color:#c0caf5;background:#c0caf516;border-color:#7aa2f7}button.chip:active:before,a.chip:active:before{background:#7aa2f7;animation:terminal_pulse .7s ease;transform:scale(1.12)}}.avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;flex:0 0 auto;overflow:hidden;border:2px solid rgba(192,202,245,.24);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%;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:38px;height:38px;font-size:12px}.avatar.avatar-sm .ph,.avatar.avatar-sm .ph-bold{font-size:18px}.avatar.avatar-lg{width:54px;height:54px;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:#c0caf50b;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:15px;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:46px;height:46px;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:collapse;background:#c0caf50b}.table .table-caption{text-align:left;font-size:16px;background:#c0caf5;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 th,.table .table-row td{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 th,.table .table-foot td{padding-top:15px}.table.table-compact .table-caption{font-size:14px}.table.table-compact .table-row th,.table.table-compact .table-row td{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;background:#c0caf50b}.toolbar .toolbar-group{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.toolbar .toolbar-title{margin:0;font-size:16px;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:38px;height:38px;padding:0 12px;border:2px solid rgba(192,202,245,.24);color:#a9b1d6;background:#c0caf50b;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:disabled,.pagination .pagination-item.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;background:#c0caf50b}.empty-state .empty-state-icon{display:inline-flex;align-items:center;justify-content:center;width:54px;height:54px;margin-bottom:15px;color:#16161e;background:#c0caf5;font-size:26px}.empty-state .empty-state-title{margin:0 0 8px;font-size:20px;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;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:54px;height:54px}.skeleton-stack{display:flex;flex-direction:column;gap:12px;max-width:520px;padding:15px;border:2px solid rgba(192,202,245,.24);background:#c0caf50b}@keyframes skeleton_shimmer{to{transform:translate(100%)}}.page-header{position:relative;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;background:#c0caf50b;overflow:hidden;animation:panel_boot .28s ease both}.page-header:after{content:"";position:absolute;top:0;left:0;width:34%;height:2px;background:linear-gradient(90deg,transparent,#7AA2F7,transparent);opacity:.72;pointer-events:none;transform:translate(-120%)}@media(hover:hover)and (pointer:fine){.page-header:hover:after{animation:terminal_scan_x .9s ease}}@media(hover:none)and (pointer:coarse){.page-header:active:after{animation:terminal_scan_x .9s ease}}.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:26px;font-weight:700;line-height:1.15}.page-header .page-header-subtitle{max-width:720px;margin:0;color:#a9b1d6;font-size:15px;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:20px}.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;background:#c0caf50b}.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:15px;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;background:#c0caf50b}.steps .step-marker{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;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}.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:46px minmax(0,1fr);gap:12px;min-height:88px}.timeline .timeline-item:before{content:"";position:absolute;top:46px;bottom:0;left:22px;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:46px;height:46px;border:2px solid rgba(192,202,245,.24);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;background:#c0caf50b;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-marker,.timeline .timeline-item-success .timeline-card{border-color:#9ece6a}.timeline .timeline-item-success .timeline-marker{color:#16161e;background:#9ece6a}.timeline .timeline-item-warning .timeline-marker,.timeline .timeline-item-warning .timeline-card{border-color:#e0af68}.timeline .timeline-item-warning .timeline-marker{color:#16161e;background:#e0af68}.timeline .timeline-item-danger .timeline-marker,.timeline .timeline-item-danger .timeline-card,.timeline .timeline-item-error .timeline-marker,.timeline .timeline-item-error .timeline-card{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;background:#c0caf50b}.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;background:#c0caf50b}.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;align-items:center;justify-content:space-between;gap:12px;min-height:46px;padding:12px 15px;color:#c0caf5;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);background:#c0caf50b}.disclosure .accordion-summary{min-height:38px;padding:8px 12px}.disclosure .accordion-panel{padding:12px}.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 #C0CAF5;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;background:#c0caf5;color:#16161e;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;background:#c0caf50b}.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;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}}.toast{position:fixed;z-index:1100;bottom:-100px;right:15px;max-width:420px;background:#1f2335;border:2px solid #C0CAF5;border-left-width:6px;padding:0;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,top,bottom}.toast.a-show{bottom:15px;opacity:1}.toast.a-hide{bottom:115px;opacity:0}.toast .toast-content{display:flex;flex-direction:column;gap:0}.toast .toast-content .toast-title{min-height:38px;font-size:16px;display:flex;flex-direction:row;gap:8px;align-items:center;color:#16161e;background:#c0caf5;padding:8px 42px 8px 12px;text-transform:uppercase}.toast .toast-content .toast-text{font-size:13px;padding:22px 15px;margin:0}.toast .toast-close{position:absolute;top:0;right:0;color:#16161e;height:38px;width:38px;border-color:transparent}@media(hover:hover)and (pointer:fine){.toast .toast-close:hover{color:#16161e;background:#16161e1f;border-color:#16161e6b}}@media(hover:none)and (pointer:coarse){.toast .toast-close:active{color:#16161e;background:#16161e1f;border-color:#16161e6b}}.toast.toast-info{border-color:#bb9af7}.toast.toast-info .toast-title{background:#bb9af7}.toast.toast-success{border-color:#9ece6a}.toast.toast-success .toast-title{background:#9ece6a}.toast.toast-warning{border-color:#e0af68}.toast.toast-warning .toast-title{background:#e0af68}.toast.toast-danger{border-color:#f7768e}.toast.toast-danger .toast-title{background:#f7768e}.card{position:relative;max-width:340px;width:100%;overflow:hidden;background:#c0caf50b;border:2px solid #C0CAF5;transition-duration:.2s;transition-timing-function:ease;transition-property:border-color,background,box-shadow,transform}.card:after{content:"";position:absolute;inset:0 auto 0 0;width:34%;background:linear-gradient(90deg,transparent,rgba(192,202,245,.08),transparent);opacity:0;pointer-events:none;transform:translate(-120%)}.card .card-title{color:#16161e;background:#c0caf5;padding:8px 12px;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;transition-duration:.2s;transition-timing-function:ease;transition-property:transform,filter}.card .card-content p{margin-top:8px;margin-bottom:0}.card .card-footer{padding:8px 15px 15px}@media(hover:hover)and (pointer:fine){.card:hover{border-color:#7aa2f7;background:#c0caf516;box-shadow:0 14px 32px #16161e57;transform:translateY(-2px)}.card:hover:after{opacity:1;animation:terminal_scan_x .85s ease}.card:hover .card-thumb{filter:saturate(1.12);transform:translateY(-2px)}}@media(hover:none)and (pointer:coarse){.card:active{border-color:#7aa2f7;background:#c0caf516;box-shadow:0 14px 32px #16161e57;transform:translateY(-2px)}.card:active:after{opacity:1;animation:terminal_scan_x .85s ease}.card:active .card-thumb{filter:saturate(1.12);transform:translateY(-2px)}}.card.status-card{max-width:220px;overflow:hidden;transition-duration:.2s;transition-property:border-color}.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:center;font-size:56px;height:108px;width:100%;transition-duration:.2s;transition-property:color,transform}.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;transition-duration:.2s;transition-property:background-color,color}.card.status-card .status-name{font-size:13px;line-height:1.4}@media(hover:hover)and (pointer:fine){.card.status-card:hover .status-icon{transform:translateY(-2px) scale(1.03)}}@media(hover:none)and (pointer:coarse){.card.status-card:active .status-icon{transform:translateY(-2px) scale(1.03)}}.card.status-card.card-success{border-color:#9ece6a}.card.status-card.card-success .card-title,.card.status-card.card-success .toast-title,.card.status-card.card-success .modal-title{color:#16161e;background:#9ece6a}.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 .toast-title,.card.status-card.card-warning .modal-title{color:#16161e;background:#e0af68}.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 .toast-title,.card.status-card.card-info .modal-title{color:#16161e;background:#bb9af7}.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 .toast-title,.card.status-card.card-secondary .modal-title{color:#16161e;background:#7aa2f7}.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 .toast-title,.card.status-card.card-danger .modal-title,.card.status-card.card-error .card-title,.card.status-card.card-error .toast-title,.card.status-card.card-error .modal-title{color:#16161e;background:#f7768e}.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:46px;height:46px;color:#16161e;background:#7aa2f7;font-size:22px;transition-duration:.2s;transition-timing-function:ease;transition-property:background,transform}.card.metric-card .metric-card-value{margin:0;color:#c0caf5;font-size:34px;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}@media(hover:hover)and (pointer:fine){.card.metric-card:hover .metric-card-icon{background:#c0caf5;transform:translateY(-2px)}}@media(hover:none)and (pointer:coarse){.card.metric-card:active .metric-card-icon{background:#c0caf5;transform:translateY(-2px)}}.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:max-content;padding:5px 8px;color:#16161e;background:#7aa2f7;font-size:12px;font-weight:700;line-height:1;text-transform:uppercase;transition-duration:.2s;transition-timing-function:ease;transition-property:background,transform}.card.action-card .action-card-title{margin:0;font-size:20px;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}@media(hover:hover)and (pointer:fine){.card.action-card:hover .action-card-kicker{background:#c0caf5;transform:translate(5px)}}@media(hover:none)and (pointer:coarse){.card.action-card:active .action-card-kicker{background:#c0caf5;transform:translate(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-panel{position:relative;z-index:1020;width:100%;max-width:960px;margin:200px 18px 18px;height:auto;min-height:200px;max-height:calc(100vh - 48px);padding:0;display:flex;flex-direction:column;gap:15px;background:#16161e;border:2px solid #C0CAF5;border-left-width:6px;opacity:0;transition-duration:.28s;transition-timing-function:ease;transition-property:opacity,margin-top}.modal .modal-panel .modal-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-right:15px}.modal .modal-panel .modal-header .modal-title{padding:12px 15px;background:#c0caf5;color:#16161e;text-transform:uppercase;letter-spacing:.04em}.modal .modal-panel .modal-body{max-height:700px;overflow-y:auto;padding:18px}.modal .modal-panel .modal-footer{padding:18px}.modal .modal-panel .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-panel{opacity:1;margin-top:0}.modal.a-hide .modal-backdrop{opacity:0}.modal.a-hide .modal-panel{opacity:0;margin-top:-200px}.alert{position:relative;overflow:hidden;margin-bottom:12px;padding:12px 15px;border:2px solid transparent;border-left-style:solid;border-left-width:6px;background:#c0caf50b;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-error,.alert.alert-danger{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;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:hover,.advanced-select .popup-options-container .options .option.focus{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 .edit-text-btn:hover,.component.editable-string-component .apply-changes-btn:hover,.component.editable-string-component .cancel-changes-btn:hover{color:#16161e;background:#e0af68}}@media(hover:none)and (pointer:coarse){.component.editable-string-component .edit-text-btn:active,.component.editable-string-component .apply-changes-btn:active,.component.editable-string-component .cancel-changes-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:38px;padding:8px 12px;border:2px solid rgba(192,202,245,.24);border-left-width:6px;color:#a9b1d6;background:#c0caf50b;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;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:38px;padding:8px 12px;border:0;color:#c0caf5;background:transparent;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: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:hover .tooltip-panel,.tooltip:focus-within .tooltip-panel,.tooltip.is-open .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{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{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{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{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{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{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{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{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{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{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{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{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{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: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{font-size:14px}.fs-base{font-size:15px}.fs-lg{font-size:16px}.fs-xl{font-size:20px}.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}html,body{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:transparent;height:1px}*::-webkit-scrollbar-button{display:none}.ph.normalize{position:relative;top:.15em}html,body{height:100%}#app{display:flex;height:100vh;height:100dvh;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;display:flex;flex-direction:column;background:#1f2335;border-right:2px solid rgba(192,202,245,.24);overflow:hidden;flex-shrink:0}@media(max-width:768px){.app-sidebar{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;width:100%!important;min-width:unset!important;transform:translate(-100%);transition:transform .28s ease}.app-sidebar.is-mobile-open{transform:translate(0)}}.sidebar-header{padding:15px;border-bottom:2px solid rgba(192,202,245,.24);display:flex;flex-direction:column;gap:8px}.sidebar-controls-row{display:flex;align-items:center;gap:8px}.sidebar-controls-row .sidebar-profile-select{flex:1;min-width:0}.sidebar-logo{display:flex;align-items:center;gap:8px;text-decoration:none}.sidebar-logo img{width:28px;height:28px}.sidebar-logo span{font-size:18px;font-weight:700;color:#c0caf5;letter-spacing:-.3px}.sidebar-sessions{flex:1;overflow:hidden;display:flex;flex-direction:column}.sessions-label{padding:8px 15px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#787c99}.sidebar-profile-select{position:relative}.sidebar-profile-select select{width:100%;-moz-appearance:none;appearance:none;-webkit-appearance:none;min-height:46px;font-family:inherit;font-size:13px;font-weight:500;padding:5px 34px 5px 15px;border:2px solid rgba(192,202,245,.24);border-bottom-width:6px;border-bottom-color:#c0caf5;color:#c0caf5;background-color:#c0caf50b;cursor:pointer;transition:border-color .2s ease,background-color .2s ease;outline:none}.sidebar-profile-select select:hover{border-bottom-color:#787c99}.sidebar-profile-select select:focus{outline:2px solid #E0AF68;outline-offset:3px;border-color:#7aa2f7;background-color:transparent}.sidebar-profile-select select option{background:#1f2335;color:#c0caf5}.sidebar-profile-select:after{content:"";position:absolute;right:15px;top:50%;transform:translateY(-50%);width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #A9B1D6;pointer-events:none}.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:#c0caf50b}.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-pin-icon{opacity:1;color:#e0af68}.session-item.is-pinned .session-name{color:#e0af68}.session-pin-icon{color:#787c99;font-size:14px;opacity:0;transition:opacity .15s ease;flex-shrink:0;margin-top:2px}.session-info{flex:1;overflow:hidden}.session-name{font-size:13px;color:#a9b1d6;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}.btn-sidebar-toggle{display:none}@media(max-width:768px){.btn-sidebar-toggle{display:flex}}.context-bar{display:flex;flex-direction:row;align-items:center;gap:6px;flex-shrink:0;cursor:default}.context-bar-track{width:60px;height:4px;background:#c0caf516;overflow:hidden;flex-shrink:0}.context-bar-fill{height:100%;transition:width .2s ease,background-color .2s ease;background:#9ece6a}.context-bar-fill.is-warn{background:#e0af68}.context-bar-fill.is-crit{background:#f7768e}.profile-badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;background:#c0caf50b;border:2px solid rgba(192,202,245,.24);font-size:12px;color:#a9b1d6;white-space:nowrap}.message-list{flex:1;overflow-y:auto;overflow-x:hidden;padding:22px 15px;display:flex;flex-direction:column;gap:15px;min-height:0}@media(max-width:768px){.message-list{padding-left:10px;padding-right:10px}}.message-list .vue-recycle-scroller{flex:1}.message-list-inner{display:flex;flex-direction:column;gap:34px;width:100%;max-width:920px;margin:0 auto;padding:34px 22px;transition:opacity .2s ease}@media(max-width:768px){.message-list-inner{padding-left:0;padding-right:0}}.message-list-inner.is-hidden{opacity:0;pointer-events:none}.msg-user{display:flex;justify-content:flex-end;gap:8px}.msg-user-bubble{background:#7aa2f7;color:#16161e;padding:8px 15px;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-attachments{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}.msg-user-image{width:80px;height:80px;object-fit:cover;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;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:15px;margin-top:5px;flex-wrap:wrap}.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{font-size:13px;opacity:.5;transition:opacity .15s}.msg-copy-btn:hover{opacity:1}.msg-meta-row .msg-copy-btn{margin-left:auto}.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-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}.msg-assistant-content p{margin:0 0 15px}.msg-assistant-content p:last-child{margin-bottom:0}.msg-assistant-content h1,.msg-assistant-content h2,.msg-assistant-content h3,.msg-assistant-content h4{margin:22px 0 8px;color:#c0caf5}.msg-assistant-content ul,.msg-assistant-content ol{padding-left:22px;margin-bottom:15px}.msg-assistant-content li{margin-bottom:8px}.msg-assistant-content blockquote{margin:8px 0;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);margin:15px 0}.msg-assistant-content .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:15px 0}.msg-assistant-content .table{margin:15px 0}.msg-assistant-content .table thead{border-bottom:2px solid #C0CAF5}.msg-assistant-content .table tbody tr{transition:background .2s ease}.msg-assistant-content .table tbody tr:hover{background:#7aa2f714}.msg-assistant-content .table tbody tr:hover td:first-child{color:#7aa2f7}.msg-assistant-content .table tr th,.msg-assistant-content .table tr td{padding:8px 15px;font-size:13px;vertical-align:middle;border-bottom:2px solid rgba(192,202,245,.08)}.msg-assistant-content .table tr th{color:#c0caf5;background:#c0caf50a;text-transform:uppercase;letter-spacing:.06em}.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);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{margin-bottom:8px}.thinking-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:8px 15px;cursor:pointer;color:#787c99;font-size:13px;font-style:italic;background:#c0caf50b;border:2px solid rgba(192,202,245,.24);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}.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:15px;font-size:13px;font-style:italic;color:#a9b1d6;line-height:1.6;background:#c0caf50b;border:2px solid rgba(192,202,245,.24);border-top:none;white-space:pre-wrap}.plan-card{border:2px solid #BB9AF7;border-left-width:6px;border-left-color:#bb9af7;overflow:hidden;font-size:13px;margin-bottom:8px}.plan-card summary{list-style:none;display:flex;align-items:center;gap:8px;padding:8px 15px;cursor:pointer;background:#bb9af714;color:#bb9af7;font-size:13px;-webkit-user-select:none;user-select:none}.plan-card summary::-webkit-details-marker{display:none}.plan-card summary:hover{background:#bb9af724}.plan-card summary .plan-chevron{margin-left:auto;font-size:18px;color:#bb9af799;transition:transform .15s ease;flex-shrink:0}.plan-card[open] .plan-chevron{transform:rotate(180deg)}.plan-card .plan-body{padding:15px;font-size:13px;color:#a9b1d6;line-height:1.6;background:#bb9af70a;border-top:2px solid rgba(187,154,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;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:8px 15px;cursor:pointer;background:#c0caf50b;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 .tool-name{flex:1;font-family:IBM Plex Mono,monospace;font-size:12px}.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 .tool-emoji{font-size:18px;line-height:1;flex-shrink:0}.tool-card .tool-chevron{font-size:18px;color:#787c99;flex-shrink:0;transition:transform .15s ease}.tool-card[open] .tool-chevron{transform:rotate(180deg)}.tool-card-body{background:#c0caf50b;border-top:2px solid rgba(192,202,245,.24)}.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-all;max-height:200px;overflow-y:auto}.subagent-steps{display:flex;flex-direction:column;gap:5px;padding:5px 15px 15px;background:#c0caf50b}.subagent-planning-indicator{display:flex;align-items:center;gap:8px;padding:5px 15px;font-size:12px;font-style:italic;color:#787c99;background:#c0caf50b}.summary-card{border:2px solid #BB9AF7;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{text-align:center;padding:8px;font-size:12px;color:#787c99;display:flex;align-items:center;justify-content:center;gap:8px}.compression-notice:before,.compression-notice:after{content:"";flex:1;height:1px;background:#c0caf53d}.input-bar{flex-shrink:0;padding:8px 15px 15px;background:#16161e;border-top:2px solid rgba(192,202,245,.24)}.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}.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{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;background:#c0caf50b;border:2px solid rgba(192,202,245,.24);font-size:12px;color:#a9b1d6;max-width:180px}.file-preview-pill span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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}.input-row{display:flex;align-items:center;gap:8px;background:#1f2335;border:2px solid rgba(192,202,245,.24);padding:8px;transition:border-color .15s ease;max-width:920px;margin:0 auto}.input-row:focus-within{border-color:#7aa2f7}.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;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:34px;gap:34px;text-align:center}.welcome-logo{display:flex;flex-direction:column;align-items:center;gap:8px}.welcome-logo img{width:64px;height:64px}.welcome-logo h1{font-size:32px;font-weight:700;letter-spacing:-.5px;color:#c0caf5;margin:0}.welcome-logo p{font-size:15px;color:#a9b1d6;margin:0}.welcome-profiles{display:flex;gap:15px;flex-wrap:wrap;justify-content:center;max-width:600px}.welcome-profile-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:15px;background:#c0caf50b;border:2px solid rgba(192,202,245,.24);cursor:pointer;transition:border-color .15s ease,background .15s ease;width:160px;text-align:center}.welcome-profile-card:hover,.welcome-profile-card.is-selected{border-color:#7aa2f7;background:#c0caf516}.welcome-profile-card.is-selected{border-color:#7aa2f7}.welcome-profile-card .profile-icon{font-size:32px;color:#7aa2f7}.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}.empty-chat{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:15px;color:#787c99;padding:34px}.empty-chat .empty-icon{font-size:56px;opacity:.4}.empty-chat p{font-size:15px;margin:0}.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}.btn-icon:not(.with-rotate) .ph{transform:none!important;transition:none!important}.tool-card[open] .tool-chevron,.thinking-card[open] .tool-chevron{transform:rotate(180deg)!important}
diff --git a/webclient/dist/assets/index-CPQvXfSf.js b/webclient/dist/assets/index-CPQvXfSf.js
deleted file mode 100644
index b248731..0000000
--- a/webclient/dist/assets/index-CPQvXfSf.js
+++ /dev/null
@@ -1,93 +0,0 @@
-var Vg=Object.defineProperty;var zg=(t,e,n)=>e in t?Vg(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var lt=(t,e,n)=>zg(t,typeof e!="symbol"?e+"":e,n);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function r(i){if(i.ep)return;i.ep=!0;const a=n(i);fetch(i.href,a)}})();/**
-* @vue/shared v3.5.32
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/function Cc(t){const e=Object.create(null);for(const n of t.split(","))e[n]=1;return n=>n in e}const ct={},mr=[],mn=()=>{},Qm=()=>!1,Li=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),xi=t=>t.startsWith("onUpdate:"),vt=Object.assign,hc=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},$g=Object.prototype.hasOwnProperty,tt=(t,e)=>$g.call(t,e),he=Array.isArray,Er=t=>Xr(t)==="[object Map]",Xm=t=>Xr(t)==="[object Set]",d_=t=>Xr(t)==="[object Date]",De=t=>typeof t=="function",mt=t=>typeof t=="string",Ht=t=>typeof t=="symbol",rt=t=>t!==null&&typeof t=="object",Zm=t=>(rt(t)||De(t))&&De(t.then)&&De(t.catch),Jm=Object.prototype.toString,Xr=t=>Jm.call(t),Wg=t=>Xr(t).slice(8,-1),jm=t=>Xr(t)==="[object Object]",wi=t=>mt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,wr=Cc(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pi=t=>{const e=Object.create(null);return(n=>e[n]||(e[n]=t(n)))},Kg=/-\w/g,Bt=Pi(t=>t.replace(Kg,e=>e.slice(1).toUpperCase())),Qg=/\B([A-Z])/g,Bn=Pi(t=>t.replace(Qg,"-$1").toLowerCase()),ki=Pi(t=>t.charAt(0).toUpperCase()+t.slice(1)),Ei=Pi(t=>t?`on${ki(t)}`:""),un=(t,e)=>!Object.is(t,e),gi=(t,...e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:r,value:n})},Nc=t=>{const e=parseFloat(t);return isNaN(e)?t:e},Xg=t=>{const e=mt(t)?Number(t):NaN;return isNaN(e)?t:e};let u_;const Ui=()=>u_||(u_=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function nr(t){if(he(t)){const e={};for(let n=0;n{if(n){const r=n.split(Jg);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function bt(t){let e="";if(mt(t))e=t;else if(he(t))for(let n=0;n!!(t&&t.__v_isRef===!0),nt=t=>mt(t)?t:t==null?"":he(t)||rt(t)&&(t.toString===Jm||!De(t.toString))?nE(t)?nt(t.value):JSON.stringify(t,rE,2):String(t),rE=(t,e)=>nE(e)?rE(t,e.value):Er(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((n,[r,i],a)=>(n[na(r,a)+" =>"]=i,n),{})}:Xm(e)?{[`Set(${e.size})`]:[...e.values()].map(n=>na(n))}:Ht(e)?na(e):rt(e)&&!he(e)&&!jm(e)?String(e):e,na=(t,e="")=>{var n;return Ht(t)?`Symbol(${(n=t.description)!=null?n:e})`:t};/**
-* @vue/reactivity v3.5.32
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/let At;class iE{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=At,!e&&At&&(this.index=(At.scopes||(At.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,n;if(this.scopes)for(e=0,n=this.scopes.length;e0&&--this._on===0&&(At=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(kr){let e=kr;for(kr=void 0;e;){const n=e.next;e.next=void 0,e.flags&=-9,e=n}}let t;for(;Pr;){let e=Pr;for(Pr=void 0;e;){const n=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(r){t||(t=r)}e=n}}if(t)throw t}function cE(t){for(let e=t.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function _E(t){let e,n=t.depsTail,r=n;for(;r;){const i=r.prevDep;r.version===-1?(r===n&&(n=i),yc(r),oS(r)):e=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=i}t.deps=e,t.depsTail=n}function jl(t){for(let e=t.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(dE(e.dep.computed)||e.dep.version!==e.version))return!0;return!!t._dirty}function dE(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===qr)||(t.globalVersion=qr,!t.isSSR&&t.flags&128&&(!t.deps&&!t._dirty||!jl(t))))return;t.flags|=2;const e=t.dep,n=dt,r=en;dt=t,en=!0;try{cE(t);const i=t.fn(t._value);(e.version===0||un(i,t._value))&&(t.flags|=128,t._value=i,e.version++)}catch(i){throw e.version++,i}finally{dt=n,en=r,_E(t),t.flags&=-3}}function yc(t,e=!1){const{dep:n,prevSub:r,nextSub:i}=t;if(r&&(r.nextSub=i,t.prevSub=void 0),i&&(i.prevSub=r,t.nextSub=void 0),n.subs===t&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let a=n.computed.deps;a;a=a.nextDep)yc(a,!0)}!e&&!--n.sc&&n.map&&n.map.delete(n.key)}function oS(t){const{prevDep:e,nextDep:n}=t;e&&(e.nextDep=n,t.prevDep=void 0),n&&(n.prevDep=e,t.nextDep=void 0)}let en=!0;const uE=[];function An(){uE.push(en),en=!1}function yn(){const t=uE.pop();en=t===void 0?!0:t}function p_(t){const{cleanup:e}=t;if(t.cleanup=void 0,e){const n=dt;dt=void 0;try{e()}finally{dt=n}}}let qr=0;class sS{constructor(e,n){this.sub=e,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Dc{constructor(e){this.computed=e,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(e){if(!dt||!en||dt===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==dt)n=this.activeLink=new sS(dt,this),dt.deps?(n.prevDep=dt.depsTail,dt.depsTail.nextDep=n,dt.depsTail=n):dt.deps=dt.depsTail=n,pE(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=dt.depsTail,n.nextDep=void 0,dt.depsTail.nextDep=n,dt.depsTail=n,dt.deps===n&&(dt.deps=r)}return n}trigger(e){this.version++,qr++,this.notify(e)}notify(e){Ic();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ac()}}}function pE(t){if(t.dep.sc++,t.sub.flags&4){const e=t.dep.computed;if(e&&!t.dep.subs){e.flags|=20;for(let r=e.deps;r;r=r.nextDep)pE(r)}const n=t.dep.subs;n!==t&&(t.prevSub=n,n&&(n.nextSub=t)),t.dep.subs=t}}const bi=new WeakMap,Jn=Symbol(""),ec=Symbol(""),Hr=Symbol("");function yt(t,e,n){if(en&&dt){let r=bi.get(t);r||bi.set(t,r=new Map);let i=r.get(n);i||(r.set(n,i=new Dc),i.map=r,i.key=n),i.track()}}function hn(t,e,n,r,i,a){const s=bi.get(t);if(!s){qr++;return}const o=c=>{c&&c.trigger()};if(Ic(),e==="clear")s.forEach(o);else{const c=he(t),_=c&&wi(n);if(c&&n==="length"){const l=Number(r);s.forEach((d,u)=>{(u==="length"||u===Hr||!Ht(u)&&u>=l)&&o(d)})}else switch((n!==void 0||s.has(void 0))&&o(s.get(n)),_&&o(s.get(Hr)),e){case"add":c?_&&o(s.get("length")):(o(s.get(Jn)),Er(t)&&o(s.get(ec)));break;case"delete":c||(o(s.get(Jn)),Er(t)&&o(s.get(ec)));break;case"set":Er(t)&&o(s.get(Jn));break}}Ac()}function lS(t,e){const n=bi.get(t);return n&&n.get(e)}function sr(t){const e=ze(t);return e===t?e:(yt(e,"iterate",Hr),qt(t)?e:e.map(tn))}function Fi(t){return yt(t=ze(t),"iterate",Hr),t}function _n(t,e){return Dn(t)?fr(In(t)?tn(e):e):tn(e)}const cS={__proto__:null,[Symbol.iterator](){return ia(this,Symbol.iterator,t=>_n(this,t))},concat(...t){return sr(this).concat(...t.map(e=>he(e)?sr(e):e))},entries(){return ia(this,"entries",t=>(t[1]=_n(this,t[1]),t))},every(t,e){return Tn(this,"every",t,e,void 0,arguments)},filter(t,e){return Tn(this,"filter",t,e,n=>n.map(r=>_n(this,r)),arguments)},find(t,e){return Tn(this,"find",t,e,n=>_n(this,n),arguments)},findIndex(t,e){return Tn(this,"findIndex",t,e,void 0,arguments)},findLast(t,e){return Tn(this,"findLast",t,e,n=>_n(this,n),arguments)},findLastIndex(t,e){return Tn(this,"findLastIndex",t,e,void 0,arguments)},forEach(t,e){return Tn(this,"forEach",t,e,void 0,arguments)},includes(...t){return aa(this,"includes",t)},indexOf(...t){return aa(this,"indexOf",t)},join(t){return sr(this).join(t)},lastIndexOf(...t){return aa(this,"lastIndexOf",t)},map(t,e){return Tn(this,"map",t,e,void 0,arguments)},pop(){return vr(this,"pop")},push(...t){return vr(this,"push",t)},reduce(t,...e){return m_(this,"reduce",t,e)},reduceRight(t,...e){return m_(this,"reduceRight",t,e)},shift(){return vr(this,"shift")},some(t,e){return Tn(this,"some",t,e,void 0,arguments)},splice(...t){return vr(this,"splice",t)},toReversed(){return sr(this).toReversed()},toSorted(t){return sr(this).toSorted(t)},toSpliced(...t){return sr(this).toSpliced(...t)},unshift(...t){return vr(this,"unshift",t)},values(){return ia(this,"values",t=>_n(this,t))}};function ia(t,e,n){const r=Fi(t),i=r[e]();return r!==t&&!qt(t)&&(i._next=i.next,i.next=()=>{const a=i._next();return a.done||(a.value=n(a.value)),a}),i}const _S=Array.prototype;function Tn(t,e,n,r,i,a){const s=Fi(t),o=s!==t&&!qt(t),c=s[e];if(c!==_S[e]){const d=c.apply(t,a);return o?tn(d):d}let _=n;s!==t&&(o?_=function(d,u){return n.call(this,_n(t,d),u,t)}:n.length>2&&(_=function(d,u){return n.call(this,d,u,t)}));const l=c.call(s,_,r);return o&&i?i(l):l}function m_(t,e,n,r){const i=Fi(t),a=i!==t&&!qt(t);let s=n,o=!1;i!==t&&(a?(o=r.length===0,s=function(_,l,d){return o&&(o=!1,_=_n(t,_)),n.call(this,_,_n(t,l),d,t)}):n.length>3&&(s=function(_,l,d){return n.call(this,_,l,d,t)}));const c=i[e](s,...r);return o?_n(t,c):c}function aa(t,e,n){const r=ze(t);yt(r,"iterate",Hr);const i=r[e](...n);return(i===-1||i===!1)&&Bi(n[0])?(n[0]=ze(n[0]),r[e](...n)):i}function vr(t,e,n=[]){An(),Ic();const r=ze(t)[e].apply(t,n);return Ac(),yn(),r}const dS=Cc("__proto__,__v_isRef,__isVue"),mE=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Ht));function uS(t){Ht(t)||(t=String(t));const e=ze(this);return yt(e,"has",t),e.hasOwnProperty(t)}class EE{constructor(e=!1,n=!1){this._isReadonly=e,this._isShallow=n}get(e,n,r){if(n==="__v_skip")return e.__v_skip;const i=this._isReadonly,a=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return a;if(n==="__v_raw")return r===(i?a?CS:TE:a?fE:SE).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(r)?e:void 0;const s=he(e);if(!i){let c;if(s&&(c=cS[n]))return c;if(n==="hasOwnProperty")return uS}const o=Reflect.get(e,n,ft(e)?e:r);if((Ht(n)?mE.has(n):dS(n))||(i||yt(e,"get",n),a))return o;if(ft(o)){const c=s&&wi(n)?o:o.value;return i&&rt(c)?nc(c):c}return rt(o)?i?nc(o):Zr(o):o}}class gE extends EE{constructor(e=!1){super(!1,e)}set(e,n,r,i){let a=e[n];const s=he(e)&&wi(n);if(!this._isShallow){const _=Dn(a);if(!qt(r)&&!Dn(r)&&(a=ze(a),r=ze(r)),!s&&ft(a)&&!ft(r))return _||(a.value=r),!0}const o=s?Number(n)t,li=t=>Reflect.getPrototypeOf(t);function SS(t,e,n){return function(...r){const i=this.__v_raw,a=ze(i),s=Er(a),o=t==="entries"||t===Symbol.iterator&&s,c=t==="keys"&&s,_=i[t](...r),l=n?tc:e?fr:tn;return!e&&yt(a,"iterate",c?ec:Jn),vt(Object.create(_),{next(){const{value:d,done:u}=_.next();return u?{value:d,done:u}:{value:o?[l(d[0]),l(d[1])]:l(d),done:u}}})}}function ci(t){return function(...e){return t==="delete"?!1:t==="clear"?void 0:this}}function fS(t,e){const n={get(i){const a=this.__v_raw,s=ze(a),o=ze(i);t||(un(i,o)&&yt(s,"get",i),yt(s,"get",o));const{has:c}=li(s),_=e?tc:t?fr:tn;if(c.call(s,i))return _(a.get(i));if(c.call(s,o))return _(a.get(o));a!==s&&a.get(i)},get size(){const i=this.__v_raw;return!t&&yt(ze(i),"iterate",Jn),i.size},has(i){const a=this.__v_raw,s=ze(a),o=ze(i);return t||(un(i,o)&&yt(s,"has",i),yt(s,"has",o)),i===o?a.has(i):a.has(i)||a.has(o)},forEach(i,a){const s=this,o=s.__v_raw,c=ze(o),_=e?tc:t?fr:tn;return!t&&yt(c,"iterate",Jn),o.forEach((l,d)=>i.call(a,_(l),_(d),s))}};return vt(n,t?{add:ci("add"),set:ci("set"),delete:ci("delete"),clear:ci("clear")}:{add(i){const a=ze(this),s=li(a),o=ze(i),c=!e&&!qt(i)&&!Dn(i)?o:i;return s.has.call(a,c)||un(i,c)&&s.has.call(a,i)||un(o,c)&&s.has.call(a,o)||(a.add(c),hn(a,"add",c,c)),this},set(i,a){!e&&!qt(a)&&!Dn(a)&&(a=ze(a));const s=ze(this),{has:o,get:c}=li(s);let _=o.call(s,i);_||(i=ze(i),_=o.call(s,i));const l=c.call(s,i);return s.set(i,a),_?un(a,l)&&hn(s,"set",i,a):hn(s,"add",i,a),this},delete(i){const a=ze(this),{has:s,get:o}=li(a);let c=s.call(a,i);c||(i=ze(i),c=s.call(a,i)),o&&o.call(a,i);const _=a.delete(i);return c&&hn(a,"delete",i,void 0),_},clear(){const i=ze(this),a=i.size!==0,s=i.clear();return a&&hn(i,"clear",void 0,void 0),s}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=SS(i,t,e)}),n}function Mc(t,e){const n=fS(t,e);return(r,i,a)=>i==="__v_isReactive"?!t:i==="__v_isReadonly"?t:i==="__v_raw"?r:Reflect.get(tt(n,i)&&i in r?n:r,i,a)}const TS={get:Mc(!1,!1)},bS={get:Mc(!1,!0)},RS={get:Mc(!0,!1)};const SE=new WeakMap,fE=new WeakMap,TE=new WeakMap,CS=new WeakMap;function hS(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function NS(t){return t.__v_skip||!Object.isExtensible(t)?0:hS(Wg(t))}function Zr(t){return Dn(t)?t:Lc(t,!1,mS,TS,SE)}function bE(t){return Lc(t,!1,gS,bS,fE)}function nc(t){return Lc(t,!0,ES,RS,TE)}function Lc(t,e,n,r,i){if(!rt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const a=NS(t);if(a===0)return t;const s=i.get(t);if(s)return s;const o=new Proxy(t,a===2?r:n);return i.set(t,o),o}function In(t){return Dn(t)?In(t.__v_raw):!!(t&&t.__v_isReactive)}function Dn(t){return!!(t&&t.__v_isReadonly)}function qt(t){return!!(t&&t.__v_isShallow)}function Bi(t){return t?!!t.__v_raw:!1}function ze(t){const e=t&&t.__v_raw;return e?ze(e):t}function Gi(t){return!tt(t,"__v_skip")&&Object.isExtensible(t)&&eE(t,"__v_skip",!0),t}const tn=t=>rt(t)?Zr(t):t,fr=t=>rt(t)?nc(t):t;function ft(t){return t?t.__v_isRef===!0:!1}function Ce(t){return RE(t,!1)}function pr(t){return RE(t,!0)}function RE(t,e){return ft(t)?t:new OS(t,e)}class OS{constructor(e,n){this.dep=new Dc,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?e:ze(e),this._value=n?e:tn(e),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(e){const n=this._rawValue,r=this.__v_isShallow||qt(e)||Dn(e);e=r?e:ze(e),un(e,n)&&(this._rawValue=e,this._value=r?e:tn(e),this.dep.trigger())}}function re(t){return ft(t)?t.value:t}function le(t){return De(t)?t():re(t)}const vS={get:(t,e,n)=>e==="__v_raw"?t:re(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const i=t[e];return ft(i)&&!ft(n)?(i.value=n,!0):Reflect.set(t,e,n,r)}};function CE(t){return In(t)?t:new Proxy(t,vS)}function IS(t){const e=he(t)?new Array(t.length):{};for(const n in t)e[n]=yS(t,n);return e}class AS{constructor(e,n,r){this._object=e,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0,this._key=Ht(n)?n:String(n),this._raw=ze(e);let i=!0,a=e;if(!he(e)||Ht(this._key)||!wi(this._key))do i=!Bi(a)||qt(a);while(i&&(a=a.__v_raw));this._shallow=i}get value(){let e=this._object[this._key];return this._shallow&&(e=re(e)),this._value=e===void 0?this._defaultValue:e}set value(e){if(this._shallow&&ft(this._raw[this._key])){const n=this._object[this._key];if(ft(n)){n.value=e;return}}this._object[this._key]=e}get dep(){return lS(this._raw,this._key)}}function yS(t,e,n){return new AS(t,e,n)}class DS{constructor(e,n,r){this.fn=e,this.setter=n,this._value=void 0,this.dep=new Dc(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=qr-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&dt!==this)return lE(this,!0),!0}get value(){const e=this.dep.track();return dE(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function MS(t,e,n=!1){let r,i;return De(t)?r=t:(r=t.get,i=t.set),new DS(r,i,n)}const _i={},Ri=new WeakMap;let Kn;function LS(t,e=!1,n=Kn){if(n){let r=Ri.get(n);r||Ri.set(n,r=[]),r.push(t)}}function xS(t,e,n=ct){const{immediate:r,deep:i,once:a,scheduler:s,augmentJob:o,call:c}=n,_=N=>i?N:qt(N)||i===!1||i===0?Nn(N,1):Nn(N);let l,d,u,p,m=!1,g=!1;if(ft(t)?(d=()=>t.value,m=qt(t)):In(t)?(d=()=>_(t),m=!0):he(t)?(g=!0,m=t.some(N=>In(N)||qt(N)),d=()=>t.map(N=>{if(ft(N))return N.value;if(In(N))return _(N);if(De(N))return c?c(N,2):N()})):De(t)?e?d=c?()=>c(t,2):t:d=()=>{if(u){An();try{u()}finally{yn()}}const N=Kn;Kn=l;try{return c?c(t,3,[p]):t(p)}finally{Kn=N}}:d=mn,e&&i){const N=d,D=i===!0?1/0:i;d=()=>Nn(N(),D)}const S=aE(),b=()=>{l.stop(),S&&S.active&&hc(S.effects,l)};if(a&&e){const N=e;e=(...D)=>{N(...D),b()}}let R=g?new Array(t.length).fill(_i):_i;const v=N=>{if(!(!(l.flags&1)||!l.dirty&&!N))if(e){const D=l.run();if(i||m||(g?D.some((C,I)=>un(C,R[I])):un(D,R))){u&&u();const C=Kn;Kn=l;try{const I=[D,R===_i?void 0:g&&R[0]===_i?[]:R,p];R=D,c?c(e,3,I):e(...I)}finally{Kn=C}}}else l.run()};return o&&o(v),l=new oE(d),l.scheduler=s?()=>s(v,!1):v,p=N=>LS(N,!1,l),u=l.onStop=()=>{const N=Ri.get(l);if(N){if(c)c(N,4);else for(const D of N)D();Ri.delete(l)}},e?r?v(!0):R=l.run():s?s(v.bind(null,!0),!0):l.run(),b.pause=l.pause.bind(l),b.resume=l.resume.bind(l),b.stop=b,b}function Nn(t,e=1/0,n){if(e<=0||!rt(t)||t.__v_skip||(n=n||new Map,(n.get(t)||0)>=e))return t;if(n.set(t,e),e--,ft(t))Nn(t.value,e,n);else if(he(t))for(let r=0;r{Nn(r,e,n)});else if(jm(t)){for(const r in t)Nn(t[r],e,n);for(const r of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,r)&&Nn(t[r],e,n)}return t}/**
-* @vue/runtime-core v3.5.32
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/function Jr(t,e,n,r){try{return r?t(...r):t()}catch(i){Yi(i,e,n)}}function nn(t,e,n,r){if(De(t)){const i=Jr(t,e,n,r);return i&&Zm(i)&&i.catch(a=>{Yi(a,e,n)}),i}if(he(t)){const i=[];for(let a=0;a>>1,i=Ut[r],a=Vr(i);a=Vr(n)?Ut.push(t):Ut.splice(PS(e),0,t),t.flags|=1,NE()}}function NE(){Ci||(Ci=hE.then(vE))}function kS(t){he(t)?gr.push(...t):Un&&t.id===-1?Un.splice(cr+1,0,t):t.flags&1||(gr.push(t),t.flags|=1),NE()}function E_(t,e,n=ln+1){for(;nVr(n)-Vr(r));if(gr.length=0,Un){Un.push(...e);return}for(Un=e,cr=0;crt.id==null?t.flags&2?-1:1/0:t.id;function vE(t){try{for(ln=0;ln{r._d&&vi(-1);const a=hi(e);let s;try{s=t(...i)}finally{hi(a),r._d&&vi(1)}return s};return r._n=!0,r._c=!0,r._d=!0,r}function AE(t,e){if(It===null)return t;const n=Wi(It),r=t.dirs||(t.dirs=[]);for(let i=0;i1)return n&&De(e)?e.call(r&&r.proxy):e}}function US(){return!!(Gc()||er)}const FS=Symbol.for("v-scx"),BS=()=>jn(FS);function Ue(t,e,n){return yE(t,e,n)}function yE(t,e,n=ct){const{immediate:r,deep:i,flush:a,once:s}=n,o=vt({},n),c=e&&r||!e&&a!=="post";let _;if(Kr){if(a==="sync"){const p=BS();_=p.__watcherHandles||(p.__watcherHandles=[])}else if(!c){const p=()=>{};return p.stop=mn,p.resume=mn,p.pause=mn,p}}const l=Mt;o.call=(p,m,g)=>nn(p,l,m,g);let d=!1;a==="post"?o.scheduler=p=>{kt(p,l&&l.suspense)}:a!=="sync"&&(d=!0,o.scheduler=(p,m)=>{m?p():xc(p)}),o.augmentJob=p=>{e&&(p.flags|=4),d&&(p.flags|=2,l&&(p.id=l.uid,p.i=l))};const u=xS(t,e,o);return Kr&&(_?_.push(u):c&&u()),u}function GS(t,e,n){const r=this.proxy,i=mt(t)?t.includes(".")?DE(r,t):()=>r[t]:t.bind(r,r);let a;De(e)?a=e:(a=e.handler,n=e);const s=ti(this),o=yE(i,a.bind(r),n);return s(),o}function DE(t,e){const n=e.split(".");return()=>{let r=t;for(let i=0;it.__isTeleport,Qn=t=>t&&(t.disabled||t.disabled===""),YS=t=>t&&(t.defer||t.defer===""),g_=t=>typeof SVGElement<"u"&&t instanceof SVGElement,S_=t=>typeof MathMLElement=="function"&&t instanceof MathMLElement,rc=(t,e)=>{const n=t&&t.to;return mt(n)?e?e(n):null:n},qS={name:"Teleport",__isTeleport:!0,process(t,e,n,r,i,a,s,o,c,_){const{mc:l,pc:d,pbc:u,o:{insert:p,querySelector:m,createText:g,createComment:S}}=_,b=Qn(e.props);let{dynamicChildren:R}=e;const v=(C,I,h)=>{C.shapeFlag&16&&l(C.children,I,h,i,a,s,o,c)},N=(C=e)=>{const I=Qn(C.props),h=C.target=rc(C.props,m),L=ic(h,C,g,p);h&&(s!=="svg"&&g_(h)?s="svg":s!=="mathml"&&S_(h)&&(s="mathml"),i&&i.isCE&&(i.ce._teleportTargets||(i.ce._teleportTargets=new Set)).add(h),I||(v(C,h,L),Mr(C,!1)))},D=C=>{const I=()=>{Vn.get(C)===I&&(Vn.delete(C),Qn(C.props)&&(v(C,n,C.anchor),Mr(C,!0)),N(C))};Vn.set(C,I),kt(I,a)};if(t==null){const C=e.el=g(""),I=e.anchor=g("");if(p(C,n,r),p(I,n,r),YS(e.props)||a&&a.pendingBranch){D(e);return}b&&(v(e,n,I),Mr(e,!0)),N()}else{e.el=t.el;const C=e.anchor=t.anchor,I=Vn.get(t);if(I){I.flags|=8,Vn.delete(t),D(e);return}e.targetStart=t.targetStart;const h=e.target=t.target,L=e.targetAnchor=t.targetAnchor,H=Qn(t.props),V=H?n:h,O=H?C:L;if(s==="svg"||g_(h)?s="svg":(s==="mathml"||S_(h))&&(s="mathml"),R?(u(t.dynamicChildren,R,V,i,a,s,o),Fc(t,e,!0)):c||d(t,e,V,O,i,a,s,o,!1),b)H?e.props&&t.props&&e.props.to!==t.props.to&&(e.props.to=t.props.to):di(e,n,C,_,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const W=e.target=rc(e.props,m);W&&di(e,W,null,_,0)}else H&&di(e,h,L,_,1);Mr(e,b)}},remove(t,e,n,{um:r,o:{remove:i}},a){const{shapeFlag:s,children:o,anchor:c,targetStart:_,targetAnchor:l,target:d,props:u}=t;let p=a||!Qn(u);const m=Vn.get(t);if(m&&(m.flags|=8,Vn.delete(t),p=!1),d&&(i(_),i(l)),a&&i(c),s&16)for(let g=0;g{t.isMounted=!0}),ei(()=>{t.isUnmounting=!0}),t}const Qt=[Function,Array],xE={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Qt,onEnter:Qt,onAfterEnter:Qt,onEnterCancelled:Qt,onBeforeLeave:Qt,onLeave:Qt,onAfterLeave:Qt,onLeaveCancelled:Qt,onBeforeAppear:Qt,onAppear:Qt,onAfterAppear:Qt,onAppearCancelled:Qt},wE=t=>{const e=t.subTree;return e.component?wE(e.component):e},zS={name:"BaseTransition",props:xE,setup(t,{slots:e}){const n=Gc(),r=VS();return()=>{const i=e.default&&UE(e.default(),!0);if(!i||!i.length)return;const a=PE(i),s=ze(t),{mode:o}=s;if(r.isLeaving)return oa(a);const c=f_(a);if(!c)return oa(a);let _=ac(c,s,r,n,d=>_=d);c.type!==Dt&&zr(c,_);let l=n.subTree&&f_(n.subTree);if(l&&l.type!==Dt&&!Xn(l,c)&&wE(n).type!==Dt){let d=ac(l,s,r,n);if(zr(l,d),o==="out-in"&&c.type!==Dt)return r.isLeaving=!0,d.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,l=void 0},oa(a);o==="in-out"&&c.type!==Dt?d.delayLeave=(u,p,m)=>{const g=kE(r,l);g[String(l.key)]=l,u[cn]=()=>{p(),u[cn]=void 0,delete _.delayedLeave,l=void 0},_.delayedLeave=()=>{m(),delete _.delayedLeave,l=void 0}}:l=void 0}else l&&(l=void 0);return a}}};function PE(t){let e=t[0];if(t.length>1){for(const n of t)if(n.type!==Dt){e=n;break}}return e}const $S=zS;function kE(t,e){const{leavingVNodes:n}=t;let r=n.get(e.type);return r||(r=Object.create(null),n.set(e.type,r)),r}function ac(t,e,n,r,i){const{appear:a,mode:s,persisted:o=!1,onBeforeEnter:c,onEnter:_,onAfterEnter:l,onEnterCancelled:d,onBeforeLeave:u,onLeave:p,onAfterLeave:m,onLeaveCancelled:g,onBeforeAppear:S,onAppear:b,onAfterAppear:R,onAppearCancelled:v}=e,N=String(t.key),D=kE(n,t),C=(L,H)=>{L&&nn(L,r,9,H)},I=(L,H)=>{const V=H[1];C(L,H),he(L)?L.every(O=>O.length<=1)&&V():L.length<=1&&V()},h={mode:s,persisted:o,beforeEnter(L){let H=c;if(!n.isMounted)if(a)H=S||c;else return;L[cn]&&L[cn](!0);const V=D[N];V&&Xn(t,V)&&V.el[cn]&&V.el[cn](),C(H,[L])},enter(L){if(D[N]===t)return;let H=_,V=l,O=d;if(!n.isMounted)if(a)H=b||_,V=R||l,O=v||d;else return;let W=!1;L[Ir]=y=>{W||(W=!0,y?C(O,[L]):C(V,[L]),h.delayedLeave&&h.delayedLeave(),L[Ir]=void 0)};const ie=L[Ir].bind(null,!1);H?I(H,[L,ie]):ie()},leave(L,H){const V=String(t.key);if(L[Ir]&&L[Ir](!0),n.isUnmounting)return H();C(u,[L]);let O=!1;L[cn]=ie=>{O||(O=!0,H(),ie?C(g,[L]):C(m,[L]),L[cn]=void 0,D[V]===t&&delete D[V])};const W=L[cn].bind(null,!1);D[V]=t,p?I(p,[L,W]):W()},clone(L){const H=ac(L,e,n,r,i);return i&&i(H),H}};return h}function oa(t){if(qi(t))return t=Fn(t),t.children=null,t}function f_(t){if(!qi(t))return LE(t.type)&&t.children?PE(t.children):t;if(t.component)return t.component.subTree;const{shapeFlag:e,children:n}=t;if(n){if(e&16)return n[0];if(e&32&&De(n.default))return n.default()}}function zr(t,e){t.shapeFlag&6&&t.component?(t.transition=e,zr(t.component.subTree,e)):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function UE(t,e=!1,n){let r=[],i=0;for(let a=0;a1)for(let a=0;aUr(g,e&&(he(e)?e[S]:e),n,r,i));return}if(Sr(r)&&!i){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Ur(t,e,n,r.component.subTree);return}const a=r.shapeFlag&4?Wi(r.component):r.el,s=i?null:a,{i:o,r:c}=t,_=e&&e.r,l=o.refs===ct?o.refs={}:o.refs,d=o.setupState,u=ze(d),p=d===ct?Qm:g=>T_(l,g)?!1:tt(u,g),m=(g,S)=>!(S&&T_(l,S));if(_!=null&&_!==c){if(b_(e),mt(_))l[_]=null,p(_)&&(d[_]=null);else if(ft(_)){const g=e;m(_,g.k)&&(_.value=null),g.k&&(l[g.k]=null)}}if(De(c))Jr(c,o,12,[s,l]);else{const g=mt(c),S=ft(c);if(g||S){const b=()=>{if(t.f){const R=g?p(c)?d[c]:l[c]:m()||!t.k?c.value:l[t.k];if(i)he(R)&&hc(R,a);else if(he(R))R.includes(a)||R.push(a);else if(g)l[c]=[a],p(c)&&(d[c]=l[c]);else{const v=[a];m(c,t.k)&&(c.value=v),t.k&&(l[t.k]=v)}}else g?(l[c]=s,p(c)&&(d[c]=s)):S&&(m(c,t.k)&&(c.value=s),t.k&&(l[t.k]=s))};if(s){const R=()=>{b(),Ni.delete(t)};R.id=-1,Ni.set(t,R),kt(R,n)}else b_(t),b()}}}function b_(t){const e=Ni.get(t);e&&(e.flags|=8,Ni.delete(t))}Ui().requestIdleCallback;Ui().cancelIdleCallback;const Sr=t=>!!t.type.__asyncLoader,qi=t=>t.type.__isKeepAlive;function Pc(t,e){GE(t,"a",e)}function BE(t,e){GE(t,"da",e)}function GE(t,e,n=Mt){const r=t.__wdc||(t.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return t()});if(Hi(e,r,n),n){let i=n.parent;for(;i&&i.parent;)qi(i.parent.vnode)&&WS(r,e,n,i),i=i.parent}}function WS(t,e,n,r){const i=Hi(e,t,r,!0);rr(()=>{hc(r[e],i)},n)}function Hi(t,e,n=Mt,r=!1){if(n){const i=n[t]||(n[t]=[]),a=e.__weh||(e.__weh=(...s)=>{An();const o=ti(n),c=nn(e,n,t,s);return o(),yn(),c});return r?i.unshift(a):i.push(a),a}}const Mn=t=>(e,n=Mt)=>{(!Kr||t==="sp")&&Hi(t,(...r)=>e(...r),n)},KS=Mn("bm"),Ln=Mn("m"),QS=Mn("bu"),XS=Mn("u"),ei=Mn("bum"),rr=Mn("um"),ZS=Mn("sp"),JS=Mn("rtg"),jS=Mn("rtc");function ef(t,e=Mt){Hi("ec",t,e)}const tf="components",YE=Symbol.for("v-ndc");function Vi(t){return mt(t)?nf(tf,t,!1)||t:t||YE}function nf(t,e,n=!0,r=!1){const i=It||Mt;if(i){const a=i.type;{const o=Yf(a,!1);if(o&&(o===e||o===Bt(e)||o===ki(Bt(e))))return a}const s=R_(i[t]||a[t],e)||R_(i.appContext[t],e);return!s&&r?a:s}}function R_(t,e){return t&&(t[e]||t[Bt(e)]||t[ki(Bt(e))])}function En(t,e,n,r){let i;const a=n,s=he(t);if(s||mt(t)){const o=s&&In(t);let c=!1,_=!1;o&&(c=!qt(t),_=Dn(t),t=Fi(t)),i=new Array(t.length);for(let l=0,d=t.length;le(o,c,void 0,a));else{const o=Object.keys(t);i=new Array(o.length);for(let c=0,_=o.length;c<_;c++){const l=o[c];i[c]=e(t[l],l,c,a)}}else i=[];return i}function rf(t,e){for(let n=0;n{const a=r.fn(...i);return a&&(a.key=r.key),a}:r.fn)}return t}function pn(t,e,n={},r,i){if(It.ce||It.parent&&Sr(It.parent)&&It.parent.ce){const _=Object.keys(n).length>0;return e!=="default"&&(n.name=e),$(),Tt(ut,null,[Ze("slot",n,r)],_?-2:64)}let a=t[e];a&&a._c&&(a._d=!1),$();const s=a&&qE(a(n)),o=n.key||s&&s.key,c=Tt(ut,{key:(o&&!Ht(o)?o:`_${e}`)+(!s&&r?"_fb":"")},s||[],s&&t._===1?64:-2);return c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),a&&a._c&&(a._d=!0),c}function qE(t){return t.some(e=>Wr(e)?!(e.type===Dt||e.type===ut&&!qE(e.children)):!0)?t:null}function af(t,e){const n={};for(const r in t)n[Ei(r)]=t[r];return n}const oc=t=>t?lg(t)?Wi(t):oc(t.parent):null,Fr=vt(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>oc(t.parent),$root:t=>oc(t.root),$host:t=>t.ce,$emit:t=>t.emit,$options:t=>VE(t),$forceUpdate:t=>t.f||(t.f=()=>{xc(t.update)}),$nextTick:t=>t.n||(t.n=Lt.bind(t.proxy)),$watch:t=>GS.bind(t)}),sa=(t,e)=>t!==ct&&!t.__isScriptSetup&&tt(t,e),of={get({_:t},e){if(e==="__v_skip")return!0;const{ctx:n,setupState:r,data:i,props:a,accessCache:s,type:o,appContext:c}=t;if(e[0]!=="$"){const u=s[e];if(u!==void 0)switch(u){case 1:return r[e];case 2:return i[e];case 4:return n[e];case 3:return a[e]}else{if(sa(r,e))return s[e]=1,r[e];if(i!==ct&&tt(i,e))return s[e]=2,i[e];if(tt(a,e))return s[e]=3,a[e];if(n!==ct&&tt(n,e))return s[e]=4,n[e];sc&&(s[e]=0)}}const _=Fr[e];let l,d;if(_)return e==="$attrs"&&yt(t.attrs,"get",""),_(t);if((l=o.__cssModules)&&(l=l[e]))return l;if(n!==ct&&tt(n,e))return s[e]=4,n[e];if(d=c.config.globalProperties,tt(d,e))return d[e]},set({_:t},e,n){const{data:r,setupState:i,ctx:a}=t;return sa(i,e)?(i[e]=n,!0):r!==ct&&tt(r,e)?(r[e]=n,!0):tt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(a[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:i,props:a,type:s}},o){let c;return!!(n[o]||t!==ct&&o[0]!=="$"&&tt(t,o)||sa(e,o)||tt(a,o)||tt(r,o)||tt(Fr,o)||tt(i.config.globalProperties,o)||(c=s.__cssModules)&&c[o])},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:tt(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};function C_(t){return he(t)?t.reduce((e,n)=>(e[n]=null,e),{}):t}let sc=!0;function sf(t){const e=VE(t),n=t.proxy,r=t.ctx;sc=!1,e.beforeCreate&&h_(e.beforeCreate,t,"bc");const{data:i,computed:a,methods:s,watch:o,provide:c,inject:_,created:l,beforeMount:d,mounted:u,beforeUpdate:p,updated:m,activated:g,deactivated:S,beforeDestroy:b,beforeUnmount:R,destroyed:v,unmounted:N,render:D,renderTracked:C,renderTriggered:I,errorCaptured:h,serverPrefetch:L,expose:H,inheritAttrs:V,components:O,directives:W,filters:ie}=e;if(_&&lf(_,r,null),s)for(const q in s){const de=s[q];De(de)&&(r[q]=de.bind(n))}if(i){const q=i.call(n,n);rt(q)&&(t.data=Zr(q))}if(sc=!0,a)for(const q in a){const de=a[q],Ge=De(de)?de.bind(n,n):De(de.get)?de.get.bind(n,n):mn,Pe=!De(de)&&De(de.set)?de.set.bind(n):mn,qe=$e({get:Ge,set:Pe});Object.defineProperty(r,q,{enumerable:!0,configurable:!0,get:()=>qe.value,set:xe=>qe.value=xe})}if(o)for(const q in o)HE(o[q],r,n,q);if(c){const q=De(c)?c.call(n):c;Reflect.ownKeys(q).forEach(de=>{_r(de,q[de])})}l&&h_(l,t,"c");function x(q,de){he(de)?de.forEach(Ge=>q(Ge.bind(n))):de&&q(de.bind(n))}if(x(KS,d),x(Ln,u),x(QS,p),x(XS,m),x(Pc,g),x(BE,S),x(ef,h),x(jS,C),x(JS,I),x(ei,R),x(rr,N),x(ZS,L),he(H))if(H.length){const q=t.exposed||(t.exposed={});H.forEach(de=>{Object.defineProperty(q,de,{get:()=>n[de],set:Ge=>n[de]=Ge,enumerable:!0})})}else t.exposed||(t.exposed={});D&&t.render===mn&&(t.render=D),V!=null&&(t.inheritAttrs=V),O&&(t.components=O),W&&(t.directives=W),L&&FE(t)}function lf(t,e,n=mn){he(t)&&(t=lc(t));for(const r in t){const i=t[r];let a;rt(i)?"default"in i?a=jn(i.from||r,i.default,!0):a=jn(i.from||r):a=jn(i),ft(a)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>a.value,set:s=>a.value=s}):e[r]=a}}function h_(t,e,n){nn(he(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function HE(t,e,n,r){let i=r.includes(".")?DE(n,r):()=>n[r];if(mt(t)){const a=e[t];De(a)&&Ue(i,a)}else if(De(t))Ue(i,t.bind(n));else if(rt(t))if(he(t))t.forEach(a=>HE(a,e,n,r));else{const a=De(t.handler)?t.handler.bind(n):e[t.handler];De(a)&&Ue(i,a,t)}}function VE(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:i,optionsCache:a,config:{optionMergeStrategies:s}}=t.appContext,o=a.get(e);let c;return o?c=o:!i.length&&!n&&!r?c=e:(c={},i.length&&i.forEach(_=>Oi(c,_,s,!0)),Oi(c,e,s)),rt(e)&&a.set(e,c),c}function Oi(t,e,n,r=!1){const{mixins:i,extends:a}=e;a&&Oi(t,a,n,!0),i&&i.forEach(s=>Oi(t,s,n,!0));for(const s in e)if(!(r&&s==="expose")){const o=cf[s]||n&&n[s];t[s]=o?o(t[s],e[s]):e[s]}return t}const cf={data:N_,props:O_,emits:O_,methods:Lr,computed:Lr,beforeCreate:Pt,created:Pt,beforeMount:Pt,mounted:Pt,beforeUpdate:Pt,updated:Pt,beforeDestroy:Pt,beforeUnmount:Pt,destroyed:Pt,unmounted:Pt,activated:Pt,deactivated:Pt,errorCaptured:Pt,serverPrefetch:Pt,components:Lr,directives:Lr,watch:df,provide:N_,inject:_f};function N_(t,e){return e?t?function(){return vt(De(t)?t.call(this,this):t,De(e)?e.call(this,this):e)}:e:t}function _f(t,e){return Lr(lc(t),lc(e))}function lc(t){if(he(t)){const e={};for(let n=0;ne==="modelValue"||e==="model-value"?t.modelModifiers:t[`${e}Modifiers`]||t[`${Bt(e)}Modifiers`]||t[`${Bn(e)}Modifiers`];function Ef(t,e,...n){if(t.isUnmounted)return;const r=t.vnode.props||ct;let i=n;const a=e.startsWith("update:"),s=a&&mf(r,e.slice(7));s&&(s.trim&&(i=n.map(l=>mt(l)?l.trim():l)),s.number&&(i=n.map(Nc)));let o,c=r[o=Ei(e)]||r[o=Ei(Bt(e))];!c&&a&&(c=r[o=Ei(Bn(e))]),c&&nn(c,t,6,i);const _=r[o+"Once"];if(_){if(!t.emitted)t.emitted={};else if(t.emitted[o])return;t.emitted[o]=!0,nn(_,t,6,i)}}const gf=new WeakMap;function $E(t,e,n=!1){const r=n?gf:e.emitsCache,i=r.get(t);if(i!==void 0)return i;const a=t.emits;let s={},o=!1;if(!De(t)){const c=_=>{const l=$E(_,e,!0);l&&(o=!0,vt(s,l))};!n&&e.mixins.length&&e.mixins.forEach(c),t.extends&&c(t.extends),t.mixins&&t.mixins.forEach(c)}return!a&&!o?(rt(t)&&r.set(t,null),null):(he(a)?a.forEach(c=>s[c]=null):vt(s,a),rt(t)&&r.set(t,s),s)}function zi(t,e){return!t||!Li(e)?!1:(e=e.slice(2).replace(/Once$/,""),tt(t,e[0].toLowerCase()+e.slice(1))||tt(t,Bn(e))||tt(t,e))}function v_(t){const{type:e,vnode:n,proxy:r,withProxy:i,propsOptions:[a],slots:s,attrs:o,emit:c,render:_,renderCache:l,props:d,data:u,setupState:p,ctx:m,inheritAttrs:g}=t,S=hi(t);let b,R;try{if(n.shapeFlag&4){const N=i||r,D=N;b=dn(_.call(D,N,l,d,p,u,m)),R=o}else{const N=e;b=dn(N.length>1?N(d,{attrs:o,slots:s,emit:c}):N(d,null)),R=e.props?o:Sf(o)}}catch(N){Br.length=0,Yi(N,t,1),b=Ze(Dt)}let v=b;if(R&&g!==!1){const N=Object.keys(R),{shapeFlag:D}=v;N.length&&D&7&&(a&&N.some(xi)&&(R=ff(R,a)),v=Fn(v,R,!1,!0))}return n.dirs&&(v=Fn(v,null,!1,!0),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&zr(v,n.transition),b=v,hi(S),b}const Sf=t=>{let e;for(const n in t)(n==="class"||n==="style"||Li(n))&&((e||(e={}))[n]=t[n]);return e},ff=(t,e)=>{const n={};for(const r in t)(!xi(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function Tf(t,e,n){const{props:r,children:i,component:a}=t,{props:s,children:o,patchFlag:c}=e,_=a.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?I_(r,s,_):!!s;if(c&8){const l=e.dynamicProps;for(let d=0;dObject.create(KE),XE=t=>Object.getPrototypeOf(t)===KE;function Rf(t,e,n,r=!1){const i={},a=QE();t.propsDefaults=Object.create(null),ZE(t,e,i,a);for(const s in t.propsOptions[0])s in i||(i[s]=void 0);n?t.props=r?i:bE(i):t.type.props?t.props=i:t.props=a,t.attrs=a}function Cf(t,e,n,r){const{props:i,attrs:a,vnode:{patchFlag:s}}=t,o=ze(i),[c]=t.propsOptions;let _=!1;if((r||s>0)&&!(s&16)){if(s&8){const l=t.vnode.dynamicProps;for(let d=0;d{c=!0;const[u,p]=JE(d,e,!0);vt(s,u),p&&o.push(...p)};!n&&e.mixins.length&&e.mixins.forEach(l),t.extends&&l(t.extends),t.mixins&&t.mixins.forEach(l)}if(!a&&!c)return rt(t)&&r.set(t,mr),mr;if(he(a))for(let l=0;lt==="_"||t==="_ctx"||t==="$stable",Uc=t=>he(t)?t.map(dn):[dn(t)],Nf=(t,e,n)=>{if(e._n)return e;const r=xt((...i)=>Uc(e(...i)),n);return r._c=!1,r},jE=(t,e,n)=>{const r=t._ctx;for(const i in t){if(kc(i))continue;const a=t[i];if(De(a))e[i]=Nf(i,a,r);else if(a!=null){const s=Uc(a);e[i]=()=>s}}},eg=(t,e)=>{const n=Uc(e);t.slots.default=()=>n},tg=(t,e,n)=>{for(const r in e)(n||!kc(r))&&(t[r]=e[r])},Of=(t,e,n)=>{const r=t.slots=QE();if(t.vnode.shapeFlag&32){const i=e._;i?(tg(r,e,n),n&&eE(r,"_",i,!0)):jE(e,r)}else e&&eg(t,e)},vf=(t,e,n)=>{const{vnode:r,slots:i}=t;let a=!0,s=ct;if(r.shapeFlag&32){const o=e._;o?n&&o===1?a=!1:tg(i,e,n):(a=!e.$stable,jE(e,i)),s=e}else e&&(eg(t,e),s={default:1});if(a)for(const o in i)!kc(o)&&s[o]==null&&delete i[o]},kt=Mf;function If(t){return Af(t)}function Af(t,e){const n=Ui();n.__VUE__=!0;const{insert:r,remove:i,patchProp:a,createElement:s,createText:o,createComment:c,setText:_,setElementText:l,parentNode:d,nextSibling:u,setScopeId:p=mn,insertStaticContent:m}=t,g=(E,T,M,G=null,F=null,Y=null,K=void 0,X=null,Q=!!T.dynamicChildren)=>{if(E===T)return;E&&!Xn(E,T)&&(G=A(E),xe(E,F,Y,!0),E=null),T.patchFlag===-2&&(Q=!1,T.dynamicChildren=null);const{type:z,ref:Se,shapeFlag:oe}=T;switch(z){case $i:S(E,T,M,G);break;case Dt:b(E,T,M,G);break;case ca:E==null&&R(T,M,G,K);break;case ut:O(E,T,M,G,F,Y,K,X,Q);break;default:oe&1?D(E,T,M,G,F,Y,K,X,Q):oe&6?W(E,T,M,G,F,Y,K,X,Q):(oe&64||oe&128)&&z.process(E,T,M,G,F,Y,K,X,Q,ce)}Se!=null&&F?Ur(Se,E&&E.ref,Y,T||E,!T):Se==null&&E&&E.ref!=null&&Ur(E.ref,null,Y,E,!0)},S=(E,T,M,G)=>{if(E==null)r(T.el=o(T.children),M,G);else{const F=T.el=E.el;T.children!==E.children&&_(F,T.children)}},b=(E,T,M,G)=>{E==null?r(T.el=c(T.children||""),M,G):T.el=E.el},R=(E,T,M,G)=>{[E.el,E.anchor]=m(E.children,T,M,G,E.el,E.anchor)},v=({el:E,anchor:T},M,G)=>{let F;for(;E&&E!==T;)F=u(E),r(E,M,G),E=F;r(T,M,G)},N=({el:E,anchor:T})=>{let M;for(;E&&E!==T;)M=u(E),i(E),E=M;i(T)},D=(E,T,M,G,F,Y,K,X,Q)=>{if(T.type==="svg"?K="svg":T.type==="math"&&(K="mathml"),E==null)C(T,M,G,F,Y,K,X,Q);else{const z=E.el&&E.el._isVueCE?E.el:null;try{z&&z._beginPatch(),L(E,T,F,Y,K,X,Q)}finally{z&&z._endPatch()}}},C=(E,T,M,G,F,Y,K,X)=>{let Q,z;const{props:Se,shapeFlag:oe,transition:ae,dirs:fe}=E;if(Q=E.el=s(E.type,Y,Se&&Se.is,Se),oe&8?l(Q,E.children):oe&16&&h(E.children,Q,null,G,F,la(E,Y),K,X),fe&&Hn(E,null,G,"created"),I(Q,E,E.scopeId,K,G),Se){for(const we in Se)we!=="value"&&!wr(we)&&a(Q,we,null,Se[we],Y,G);"value"in Se&&a(Q,"value",null,Se.value,Y),(z=Se.onVnodeBeforeMount)&&on(z,G,E)}fe&&Hn(E,null,G,"beforeMount");const Oe=yf(F,ae);Oe&&ae.beforeEnter(Q),r(Q,T,M),((z=Se&&Se.onVnodeMounted)||Oe||fe)&&kt(()=>{try{z&&on(z,G,E),Oe&&ae.enter(Q),fe&&Hn(E,null,G,"mounted")}finally{}},F)},I=(E,T,M,G,F)=>{if(M&&p(E,M),G)for(let Y=0;Y{for(let z=Q;z{const X=T.el=E.el;let{patchFlag:Q,dynamicChildren:z,dirs:Se}=T;Q|=E.patchFlag&16;const oe=E.props||ct,ae=T.props||ct;let fe;if(M&&zn(M,!1),(fe=ae.onVnodeBeforeUpdate)&&on(fe,M,T,E),Se&&Hn(T,E,M,"beforeUpdate"),M&&zn(M,!0),(oe.innerHTML&&ae.innerHTML==null||oe.textContent&&ae.textContent==null)&&l(X,""),z?H(E.dynamicChildren,z,X,M,G,la(T,F),Y):K||de(E,T,X,null,M,G,la(T,F),Y,!1),Q>0){if(Q&16)V(X,oe,ae,M,F);else if(Q&2&&oe.class!==ae.class&&a(X,"class",null,ae.class,F),Q&4&&a(X,"style",oe.style,ae.style,F),Q&8){const Oe=T.dynamicProps;for(let we=0;we{fe&&on(fe,M,T,E),Se&&Hn(T,E,M,"updated")},G)},H=(E,T,M,G,F,Y,K)=>{for(let X=0;X{if(T!==M){if(T!==ct)for(const Y in T)!wr(Y)&&!(Y in M)&&a(E,Y,T[Y],null,F,G);for(const Y in M){if(wr(Y))continue;const K=M[Y],X=T[Y];K!==X&&Y!=="value"&&a(E,Y,X,K,F,G)}"value"in M&&a(E,"value",T.value,M.value,F)}},O=(E,T,M,G,F,Y,K,X,Q)=>{const z=T.el=E?E.el:o(""),Se=T.anchor=E?E.anchor:o("");let{patchFlag:oe,dynamicChildren:ae,slotScopeIds:fe}=T;fe&&(X=X?X.concat(fe):fe),E==null?(r(z,M,G),r(Se,M,G),h(T.children||[],M,Se,F,Y,K,X,Q)):oe>0&&oe&64&&ae&&E.dynamicChildren&&E.dynamicChildren.length===ae.length?(H(E.dynamicChildren,ae,M,F,Y,K,X),(T.key!=null||F&&T===F.subTree)&&Fc(E,T,!0)):de(E,T,M,Se,F,Y,K,X,Q)},W=(E,T,M,G,F,Y,K,X,Q)=>{T.slotScopeIds=X,E==null?T.shapeFlag&512?F.ctx.activate(T,M,G,K,Q):ie(T,M,G,F,Y,K,Q):y(E,T,Q)},ie=(E,T,M,G,F,Y,K)=>{const X=E.component=kf(E,G,F);if(qi(E)&&(X.ctx.renderer=ce),Uf(X,!1,K),X.asyncDep){if(F&&F.registerDep(X,x,K),!E.el){const Q=X.subTree=Ze(Dt);b(null,Q,T,M),E.placeholder=Q.el}}else x(X,E,T,M,F,Y,K)},y=(E,T,M)=>{const G=T.component=E.component;if(Tf(E,T,M))if(G.asyncDep&&!G.asyncResolved){q(G,T,M);return}else G.next=T,G.update();else T.el=E.el,G.vnode=T},x=(E,T,M,G,F,Y,K)=>{const X=()=>{if(E.isMounted){let{next:oe,bu:ae,u:fe,parent:Oe,vnode:we}=E;{const B=ng(E);if(B){oe&&(oe.el=we.el,q(E,oe,K)),B.asyncDep.then(()=>{kt(()=>{E.isUnmounted||z()},F)});return}}let He=oe,je;zn(E,!1),oe?(oe.el=we.el,q(E,oe,K)):oe=we,ae&&gi(ae),(je=oe.props&&oe.props.onVnodeBeforeUpdate)&&on(je,Oe,oe,we),zn(E,!0);const Ve=v_(E),w=E.subTree;E.subTree=Ve,g(w,Ve,d(w.el),A(w),E,F,Y),oe.el=Ve.el,He===null&&bf(E,Ve.el),fe&&kt(fe,F),(je=oe.props&&oe.props.onVnodeUpdated)&&kt(()=>on(je,Oe,oe,we),F)}else{let oe;const{el:ae,props:fe}=T,{bm:Oe,m:we,parent:He,root:je,type:Ve}=E,w=Sr(T);zn(E,!1),Oe&&gi(Oe),!w&&(oe=fe&&fe.onVnodeBeforeMount)&&on(oe,He,T),zn(E,!0);{je.ce&&je.ce._hasShadowRoot()&&je.ce._injectChildStyle(Ve,E.parent?E.parent.type:void 0);const B=E.subTree=v_(E);g(null,B,M,G,E,F,Y),T.el=B.el}if(we&&kt(we,F),!w&&(oe=fe&&fe.onVnodeMounted)){const B=T;kt(()=>on(oe,He,B),F)}(T.shapeFlag&256||He&&Sr(He.vnode)&&He.vnode.shapeFlag&256)&&E.a&&kt(E.a,F),E.isMounted=!0,T=M=G=null}};E.scope.on();const Q=E.effect=new oE(X);E.scope.off();const z=E.update=Q.run.bind(Q),Se=E.job=Q.runIfDirty.bind(Q);Se.i=E,Se.id=E.uid,Q.scheduler=()=>xc(Se),zn(E,!0),z()},q=(E,T,M)=>{T.component=E;const G=E.vnode.props;E.vnode=T,E.next=null,Cf(E,T.props,G,M),vf(E,T.children,M),An(),E_(E),yn()},de=(E,T,M,G,F,Y,K,X,Q=!1)=>{const z=E&&E.children,Se=E?E.shapeFlag:0,oe=T.children,{patchFlag:ae,shapeFlag:fe}=T;if(ae>0){if(ae&128){Pe(z,oe,M,G,F,Y,K,X,Q);return}else if(ae&256){Ge(z,oe,M,G,F,Y,K,X,Q);return}}fe&8?(Se&16&&ve(z,F,Y),oe!==z&&l(M,oe)):Se&16?fe&16?Pe(z,oe,M,G,F,Y,K,X,Q):ve(z,F,Y,!0):(Se&8&&l(M,""),fe&16&&h(oe,M,G,F,Y,K,X,Q))},Ge=(E,T,M,G,F,Y,K,X,Q)=>{E=E||mr,T=T||mr;const z=E.length,Se=T.length,oe=Math.min(z,Se);let ae;for(ae=0;aeSe?ve(E,F,Y,!0,!1,oe):h(T,M,G,F,Y,K,X,Q,oe)},Pe=(E,T,M,G,F,Y,K,X,Q)=>{let z=0;const Se=T.length;let oe=E.length-1,ae=Se-1;for(;z<=oe&&z<=ae;){const fe=E[z],Oe=T[z]=Q?Cn(T[z]):dn(T[z]);if(Xn(fe,Oe))g(fe,Oe,M,null,F,Y,K,X,Q);else break;z++}for(;z<=oe&&z<=ae;){const fe=E[oe],Oe=T[ae]=Q?Cn(T[ae]):dn(T[ae]);if(Xn(fe,Oe))g(fe,Oe,M,null,F,Y,K,X,Q);else break;oe--,ae--}if(z>oe){if(z<=ae){const fe=ae+1,Oe=feae)for(;z<=oe;)xe(E[z],F,Y,!0),z++;else{const fe=z,Oe=z,we=new Map;for(z=Oe;z<=ae;z++){const ue=T[z]=Q?Cn(T[z]):dn(T[z]);ue.key!=null&&we.set(ue.key,z)}let He,je=0;const Ve=ae-Oe+1;let w=!1,B=0;const ne=new Array(Ve);for(z=0;z=Ve){xe(ue,F,Y,!0);continue}let ge;if(ue.key!=null)ge=we.get(ue.key);else for(He=Oe;He<=ae;He++)if(ne[He-Oe]===0&&Xn(ue,T[He])){ge=He;break}ge===void 0?xe(ue,F,Y,!0):(ne[ge-Oe]=z+1,ge>=B?B=ge:w=!0,g(ue,T[ge],M,null,F,Y,K,X,Q),je++)}const Re=w?Df(ne):mr;for(He=Re.length-1,z=Ve-1;z>=0;z--){const ue=Oe+z,ge=T[ue],Ie=T[ue+1],Ye=ue+1{const{el:Y,type:K,transition:X,children:Q,shapeFlag:z}=E;if(z&6){qe(E.component.subTree,T,M,G);return}if(z&128){E.suspense.move(T,M,G);return}if(z&64){K.move(E,T,M,ce);return}if(K===ut){r(Y,T,M);for(let oe=0;oeX.enter(Y),F);else{const{leave:oe,delayLeave:ae,afterLeave:fe}=X,Oe=()=>{E.ctx.isUnmounted?i(Y):r(Y,T,M)},we=()=>{Y._isLeaving&&Y[cn](!0),oe(Y,()=>{Oe(),fe&&fe()})};ae?ae(Y,Oe,we):we()}else r(Y,T,M)},xe=(E,T,M,G=!1,F=!1)=>{const{type:Y,props:K,ref:X,children:Q,dynamicChildren:z,shapeFlag:Se,patchFlag:oe,dirs:ae,cacheIndex:fe,memo:Oe}=E;if(oe===-2&&(F=!1),X!=null&&(An(),Ur(X,null,M,E,!0),yn()),fe!=null&&(T.renderCache[fe]=void 0),Se&256){T.ctx.deactivate(E);return}const we=Se&1&&ae,He=!Sr(E);let je;if(He&&(je=K&&K.onVnodeBeforeUnmount)&&on(je,T,E),Se&6)We(E.component,M,G);else{if(Se&128){E.suspense.unmount(M,G);return}we&&Hn(E,null,T,"beforeUnmount"),Se&64?E.type.remove(E,T,M,ce,G):z&&!z.hasOnce&&(Y!==ut||oe>0&&oe&64)?ve(z,T,M,!1,!0):(Y===ut&&oe&384||!F&&Se&16)&&ve(Q,T,M),G&&ot(E)}const Ve=Oe!=null&&fe==null;(He&&(je=K&&K.onVnodeUnmounted)||we||Ve)&&kt(()=>{je&&on(je,T,E),we&&Hn(E,null,T,"unmounted"),Ve&&(E.el=null)},M)},ot=E=>{const{type:T,el:M,anchor:G,transition:F}=E;if(T===ut){_t(M,G);return}if(T===ca){N(E);return}const Y=()=>{i(M),F&&!F.persisted&&F.afterLeave&&F.afterLeave()};if(E.shapeFlag&1&&F&&!F.persisted){const{leave:K,delayLeave:X}=F,Q=()=>K(M,Y);X?X(E.el,Y,Q):Q()}else Y()},_t=(E,T)=>{let M;for(;E!==T;)M=u(E),i(E),E=M;i(T)},We=(E,T,M)=>{const{bum:G,scope:F,job:Y,subTree:K,um:X,m:Q,a:z}=E;y_(Q),y_(z),G&&gi(G),F.stop(),Y&&(Y.flags|=8,xe(K,E,T,M)),X&&kt(X,T),kt(()=>{E.isUnmounted=!0},T)},ve=(E,T,M,G=!1,F=!1,Y=0)=>{for(let K=Y;K{if(E.shapeFlag&6)return A(E.component.subTree);if(E.shapeFlag&128)return E.suspense.next();const T=u(E.anchor||E.el),M=T&&T[ME];return M?u(M):T};let P=!1;const ee=(E,T,M)=>{let G;E==null?T._vnode&&(xe(T._vnode,null,null,!0),G=T._vnode.component):g(T._vnode||null,E,T,null,null,null,M),T._vnode=E,P||(P=!0,E_(G),OE(),P=!1)},ce={p:g,um:xe,m:qe,r:ot,mt:ie,mc:h,pc:de,pbc:H,n:A,o:t};return{render:ee,hydrate:void 0,createApp:pf(ee)}}function la({type:t,props:e},n){return n==="svg"&&t==="foreignObject"||n==="mathml"&&t==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:n}function zn({effect:t,job:e},n){n?(t.flags|=32,e.flags|=4):(t.flags&=-33,e.flags&=-5)}function yf(t,e){return(!t||t&&!t.pendingBranch)&&e&&!e.persisted}function Fc(t,e,n=!1){const r=t.children,i=e.children;if(he(r)&&he(i))for(let a=0;a>1,t[n[o]]<_?a=o+1:s=o;_0&&(e[r]=n[a-1]),n[a]=r)}}for(a=n.length,s=n[a-1];a-- >0;)n[a]=s,s=e[s];return n}function ng(t){const e=t.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:ng(e)}function y_(t){if(t)for(let e=0;et.__isSuspense;function Mf(t,e){e&&e.pendingBranch?he(t)?e.effects.push(...t):e.effects.push(t):kS(t)}const ut=Symbol.for("v-fgt"),$i=Symbol.for("v-txt"),Dt=Symbol.for("v-cmt"),ca=Symbol.for("v-stc"),Br=[];let Yt=null;function $(t=!1){Br.push(Yt=t?null:[])}function Lf(){Br.pop(),Yt=Br[Br.length-1]||null}let $r=1;function vi(t,e=!1){$r+=t,t<0&&Yt&&e&&(Yt.hasOnce=!0)}function ag(t){return t.dynamicChildren=$r>0?Yt||mr:null,Lf(),$r>0&&Yt&&Yt.push(t),t}function J(t,e,n,r,i,a){return ag(k(t,e,n,r,i,a,!0))}function Tt(t,e,n,r,i){return ag(Ze(t,e,n,r,i,!0))}function Wr(t){return t?t.__v_isVNode===!0:!1}function Xn(t,e){return t.type===e.type&&t.key===e.key}const og=({key:t})=>t??null,Si=({ref:t,ref_key:e,ref_for:n})=>(typeof t=="number"&&(t=""+t),t!=null?mt(t)||ft(t)||De(t)?{i:It,r:t,k:e,f:!!n}:t:null);function k(t,e=null,n=null,r=0,i=null,a=t===ut?0:1,s=!1,o=!1){const c={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&og(e),ref:e&&Si(e),scopeId:IE,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:a,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:It};return o?(Bc(c,n),a&128&&t.normalize(c)):n&&(c.shapeFlag|=mt(n)?8:16),$r>0&&!s&&Yt&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&Yt.push(c),c}const Ze=xf;function xf(t,e=null,n=null,r=0,i=null,a=!1){if((!t||t===YE)&&(t=Dt),Wr(t)){const o=Fn(t,e,!0);return n&&Bc(o,n),$r>0&&!a&&Yt&&(o.shapeFlag&6?Yt[Yt.indexOf(t)]=o:Yt.push(o)),o.patchFlag=-2,o}if(qf(t)&&(t=t.__vccOpts),e){e=sg(e);let{class:o,style:c}=e;o&&!mt(o)&&(e.class=bt(o)),rt(c)&&(Bi(c)&&!he(c)&&(c=vt({},c)),e.style=nr(c))}const s=mt(t)?1:ig(t)?128:LE(t)?64:rt(t)?4:De(t)?2:0;return k(t,e,n,r,i,s,a,!0)}function sg(t){return t?Bi(t)||XE(t)?vt({},t):t:null}function Fn(t,e,n=!1,r=!1){const{props:i,ref:a,patchFlag:s,children:o,transition:c}=t,_=e?Ii(i||{},e):i,l={__v_isVNode:!0,__v_skip:!0,type:t.type,props:_,key:_&&og(_),ref:e&&e.ref?n&&a?he(a)?a.concat(Si(e)):[a,Si(e)]:Si(e):a,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:o,target:t.target,targetStart:t.targetStart,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==ut?s===-1?16:s|16:s,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:c,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Fn(t.ssContent),ssFallback:t.ssFallback&&Fn(t.ssFallback),placeholder:t.placeholder,el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce};return c&&r&&zr(l,c.clone(l)),l}function wt(t=" ",e=0){return Ze($i,null,t,e)}function Be(t="",e=!1){return e?($(),Tt(Dt,null,t)):Ze(Dt,null,t)}function dn(t){return t==null||typeof t=="boolean"?Ze(Dt):he(t)?Ze(ut,null,t.slice()):Wr(t)?Cn(t):Ze($i,null,String(t))}function Cn(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Fn(t)}function Bc(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(he(e))n=16;else if(typeof e=="object")if(r&65){const i=e.default;i&&(i._c&&(i._d=!1),Bc(t,i()),i._c&&(i._d=!0));return}else{n=32;const i=e._;!i&&!XE(e)?e._ctx=It:i===3&&It&&(It.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else De(e)?(e={default:e,_ctx:It},n=32):(e=String(e),r&64?(n=16,e=[wt(e)]):n=8);t.children=e,t.shapeFlag|=n}function Ii(...t){const e={};for(let n=0;nMt||It;let Ai,_c;{const t=Ui(),e=(n,r)=>{let i;return(i=t[n])||(i=t[n]=[]),i.push(r),a=>{i.length>1?i.forEach(s=>s(a)):i[0](a)}};Ai=e("__VUE_INSTANCE_SETTERS__",n=>Mt=n),_c=e("__VUE_SSR_SETTERS__",n=>Kr=n)}const ti=t=>{const e=Mt;return Ai(t),t.scope.on(),()=>{t.scope.off(),Ai(e)}},D_=()=>{Mt&&Mt.scope.off(),Ai(null)};function lg(t){return t.vnode.shapeFlag&4}let Kr=!1;function Uf(t,e=!1,n=!1){e&&_c(e);const{props:r,children:i}=t.vnode,a=lg(t);Rf(t,r,a,e),Of(t,i,n||e);const s=a?Ff(t,e):void 0;return e&&_c(!1),s}function Ff(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=new Proxy(t.ctx,of);const{setup:r}=n;if(r){An();const i=t.setupContext=r.length>1?Gf(t):null,a=ti(t),s=Jr(r,t,0,[t.props,i]),o=Zm(s);if(yn(),a(),(o||t.sp)&&!Sr(t)&&FE(t),o){if(s.then(D_,D_),e)return s.then(c=>{M_(t,c)}).catch(c=>{Yi(c,t,0)});t.asyncDep=s}else M_(t,s)}else cg(t)}function M_(t,e,n){De(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:rt(e)&&(t.setupState=CE(e)),cg(t)}function cg(t,e,n){const r=t.type;t.render||(t.render=r.render||mn);{const i=ti(t);An();try{sf(t)}finally{yn(),i()}}}const Bf={get(t,e){return yt(t,"get",""),t[e]}};function Gf(t){const e=n=>{t.exposed=n||{}};return{attrs:new Proxy(t.attrs,Bf),slots:t.slots,emit:t.emit,expose:e}}function Wi(t){return t.exposed?t.exposeProxy||(t.exposeProxy=new Proxy(CE(Gi(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in Fr)return Fr[n](t)},has(e,n){return n in e||n in Fr}})):t.proxy}function Yf(t,e=!0){return De(t)?t.displayName||t.name:t.name||e&&t.__name}function qf(t){return De(t)&&"__vccOpts"in t}const $e=(t,e)=>MS(t,e,Kr);function Hf(t,e,n){try{vi(-1);const r=arguments.length;return r===2?rt(e)&&!he(e)?Wr(e)?Ze(t,null,[e]):Ze(t,e):Ze(t,null,e):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Wr(n)&&(n=[n]),Ze(t,e,n))}finally{vi(1)}}const Vf="3.5.32";/**
-* @vue/runtime-dom v3.5.32
-* (c) 2018-present Yuxi (Evan) You and Vue contributors
-* @license MIT
-**/let dc;const L_=typeof window<"u"&&window.trustedTypes;if(L_)try{dc=L_.createPolicy("vue",{createHTML:t=>t})}catch{}const _g=dc?t=>dc.createHTML(t):t=>t,zf="http://www.w3.org/2000/svg",$f="http://www.w3.org/1998/Math/MathML",Rn=typeof document<"u"?document:null,x_=Rn&&Rn.createElement("template"),Wf={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const i=e==="svg"?Rn.createElementNS(zf,t):e==="mathml"?Rn.createElementNS($f,t):n?Rn.createElement(t,{is:n}):Rn.createElement(t);return t==="select"&&r&&r.multiple!=null&&i.setAttribute("multiple",r.multiple),i},createText:t=>Rn.createTextNode(t),createComment:t=>Rn.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>Rn.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,i,a){const s=n?n.previousSibling:e.lastChild;if(i&&(i===a||i.nextSibling))for(;e.insertBefore(i.cloneNode(!0),n),!(i===a||!(i=i.nextSibling)););else{x_.innerHTML=_g(r==="svg"?``:r==="mathml"?``:t);const o=x_.content;if(r==="svg"||r==="mathml"){const c=o.firstChild;for(;c.firstChild;)o.appendChild(c.firstChild);o.removeChild(c)}e.insertBefore(o,n)}return[s?s.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},Pn="transition",Ar="animation",Qr=Symbol("_vtc"),dg={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},Kf=vt({},xE,dg),Qf=t=>(t.displayName="Transition",t.props=Kf,t),ni=Qf((t,{slots:e})=>Hf($S,Xf(t),e)),$n=(t,e=[])=>{he(t)?t.forEach(n=>n(...e)):t&&t(...e)},w_=t=>t?he(t)?t.some(e=>e.length>1):t.length>1:!1;function Xf(t){const e={};for(const O in t)O in dg||(e[O]=t[O]);if(t.css===!1)return e;const{name:n="v",type:r,duration:i,enterFromClass:a=`${n}-enter-from`,enterActiveClass:s=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:c=a,appearActiveClass:_=s,appearToClass:l=o,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:u=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=t,m=Zf(i),g=m&&m[0],S=m&&m[1],{onBeforeEnter:b,onEnter:R,onEnterCancelled:v,onLeave:N,onLeaveCancelled:D,onBeforeAppear:C=b,onAppear:I=R,onAppearCancelled:h=v}=e,L=(O,W,ie,y)=>{O._enterCancelled=y,Wn(O,W?l:o),Wn(O,W?_:s),ie&&ie()},H=(O,W)=>{O._isLeaving=!1,Wn(O,d),Wn(O,p),Wn(O,u),W&&W()},V=O=>(W,ie)=>{const y=O?I:R,x=()=>L(W,O,ie);$n(y,[W,x]),P_(()=>{Wn(W,O?c:a),bn(W,O?l:o),w_(y)||k_(W,r,g,x)})};return vt(e,{onBeforeEnter(O){$n(b,[O]),bn(O,a),bn(O,s)},onBeforeAppear(O){$n(C,[O]),bn(O,c),bn(O,_)},onEnter:V(!1),onAppear:V(!0),onLeave(O,W){O._isLeaving=!0;const ie=()=>H(O,W);bn(O,d),O._enterCancelled?(bn(O,u),B_(O)):(B_(O),bn(O,u)),P_(()=>{O._isLeaving&&(Wn(O,d),bn(O,p),w_(N)||k_(O,r,S,ie))}),$n(N,[O,ie])},onEnterCancelled(O){L(O,!1,void 0,!0),$n(v,[O])},onAppearCancelled(O){L(O,!0,void 0,!0),$n(h,[O])},onLeaveCancelled(O){H(O),$n(D,[O])}})}function Zf(t){if(t==null)return null;if(rt(t))return[_a(t.enter),_a(t.leave)];{const e=_a(t);return[e,e]}}function _a(t){return Xg(t)}function bn(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[Qr]||(t[Qr]=new Set)).add(e)}function Wn(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.remove(r));const n=t[Qr];n&&(n.delete(e),n.size||(t[Qr]=void 0))}function P_(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let Jf=0;function k_(t,e,n,r){const i=t._endId=++Jf,a=()=>{i===t._endId&&r()};if(n!=null)return setTimeout(a,n);const{type:s,timeout:o,propCount:c}=jf(t,e);if(!s)return r();const _=s+"end";let l=0;const d=()=>{t.removeEventListener(_,u),a()},u=p=>{p.target===t&&++l>=c&&d()};setTimeout(()=>{l(n[m]||"").split(", "),i=r(`${Pn}Delay`),a=r(`${Pn}Duration`),s=U_(i,a),o=r(`${Ar}Delay`),c=r(`${Ar}Duration`),_=U_(o,c);let l=null,d=0,u=0;e===Pn?s>0&&(l=Pn,d=s,u=a.length):e===Ar?_>0&&(l=Ar,d=_,u=c.length):(d=Math.max(s,_),l=d>0?s>_?Pn:Ar:null,u=l?l===Pn?a.length:c.length:0);const p=l===Pn&&/\b(?:transform|all)(?:,|$)/.test(r(`${Pn}Property`).toString());return{type:l,timeout:d,propCount:u,hasTransform:p}}function U_(t,e){for(;t.lengthF_(n)+F_(t[r])))}function F_(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function B_(t){return(t?t.ownerDocument:document).body.offsetHeight}function eT(t,e,n){const r=t[Qr];r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const G_=Symbol("_vod"),tT=Symbol("_vsh"),nT=Symbol(""),rT=/(?:^|;)\s*display\s*:/;function iT(t,e,n){const r=t.style,i=mt(n);let a=!1;if(n&&!i){if(e)if(mt(e))for(const s of e.split(";")){const o=s.slice(0,s.indexOf(":")).trim();n[o]==null&&fi(r,o,"")}else for(const s in e)n[s]==null&&fi(r,s,"");for(const s in n)s==="display"&&(a=!0),fi(r,s,n[s])}else if(i){if(e!==n){const s=r[nT];s&&(n+=";"+s),r.cssText=n,a=rT.test(n)}}else e&&t.removeAttribute("style");G_ in t&&(t[G_]=a?r.display:"",t[tT]&&(r.display="none"))}const Y_=/\s*!important$/;function fi(t,e,n){if(he(n))n.forEach(r=>fi(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=aT(t,e);Y_.test(n)?t.setProperty(Bn(r),n.replace(Y_,""),"important"):t[r]=n}}const q_=["Webkit","Moz","ms"],da={};function aT(t,e){const n=da[e];if(n)return n;let r=Bt(e);if(r!=="filter"&&r in t)return da[e]=r;r=ki(r);for(let i=0;iua||(cT.then(()=>ua=0),ua=Date.now());function dT(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;nn(uT(r,n.value),e,5,[r])};return n.value=t,n.attached=_T(),n}function uT(t,e){if(he(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>i=>!i._stopped&&r&&r(i))}else return e}const K_=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,pT=(t,e,n,r,i,a)=>{const s=i==="svg";e==="class"?eT(t,r,s):e==="style"?iT(t,n,r):Li(e)?xi(e)||sT(t,e,n,r,a):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):mT(t,e,r,s))?(z_(t,e,r),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&V_(t,e,r,s,a,e!=="value")):t._isVueCE&&(ET(t,e)||t._def.__asyncLoader&&(/[A-Z]/.test(e)||!mt(r)))?z_(t,Bt(e),r,a,e):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),V_(t,e,r,s))};function mT(t,e,n,r){if(r)return!!(e==="innerHTML"||e==="textContent"||e in t&&K_(e)&&De(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const i=t.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return K_(e)&&mt(n)?!1:e in t}function ET(t,e){const n=t._def.props;if(!n)return!1;const r=Bt(e);return Array.isArray(n)?n.some(i=>Bt(i)===r):Object.keys(n).some(i=>Bt(i)===r)}const Q_=t=>{const e=t.props["onUpdate:modelValue"]||!1;return he(e)?n=>gi(e,n):e};function gT(t){t.target.composing=!0}function X_(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const pa=Symbol("_assign");function Z_(t,e,n){return e&&(t=t.trim()),n&&(t=Nc(t)),t}const ST={created(t,{modifiers:{lazy:e,trim:n,number:r}},i){t[pa]=Q_(i);const a=r||i.props&&i.props.type==="number";dr(t,e?"change":"input",s=>{s.target.composing||t[pa](Z_(t.value,n,a))}),(n||a)&&dr(t,"change",()=>{t.value=Z_(t.value,n,a)}),e||(dr(t,"compositionstart",gT),dr(t,"compositionend",X_),dr(t,"change",X_))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},s){if(t[pa]=Q_(s),t.composing)return;const o=(a||t.type==="number")&&!/^0\d/.test(t.value)?Nc(t.value):t.value,c=e??"";if(o===c)return;const _=t.getRootNode();(_ instanceof Document||_ instanceof ShadowRoot)&&_.activeElement===t&&t.type!=="range"&&(r&&e===n||i&&t.value.trim()===c)||(t.value=c)}},fT=["ctrl","shift","alt","meta"],TT={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>fT.some(n=>t[`${n}Key`]&&!e.includes(n))},Tr=(t,e)=>{if(!t)return t;const n=t._withMods||(t._withMods={}),r=e.join(".");return n[r]||(n[r]=((i,...a)=>{for(let s=0;s{const n=t._withKeys||(t._withKeys={}),r=e.join(".");return n[r]||(n[r]=(i=>{if(!("key"in i))return;const a=Bn(i.key);if(e.some(s=>s===a||bT[s]===a))return t(i)}))},RT=vt({patchProp:pT},Wf);let j_;function CT(){return j_||(j_=If(RT))}const hT=((...t)=>{const e=CT().createApp(...t),{mount:n}=e;return e.mount=r=>{const i=OT(r);if(!i)return;const a=e._component;!De(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const s=n(i,!1,NT(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),s},e});function NT(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function OT(t){return mt(t)?document.querySelector(t):t}/*!
- * pinia v3.0.4
- * (c) 2025 Eduardo San Martin Morote
- * @license MIT
- */let ug;const Ki=t=>ug=t,pg=Symbol();function uc(t){return t&&typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"&&typeof t.toJSON!="function"}var Gr;(function(t){t.direct="direct",t.patchObject="patch object",t.patchFunction="patch function"})(Gr||(Gr={}));function vT(){const t=vc(!0),e=t.run(()=>Ce({}));let n=[],r=[];const i=Gi({install(a){Ki(i),i._a=a,a.provide(pg,i),a.config.globalProperties.$pinia=i,r.forEach(s=>n.push(s)),r=[]},use(a){return this._a?n.push(a):r.push(a),this},_p:n,_a:null,_e:t,_s:new Map,state:e});return i}const mg=()=>{};function ed(t,e,n,r=mg){t.add(e);const i=()=>{t.delete(e)&&r()};return!n&&aE()&&aS(i),i}function lr(t,...e){t.forEach(n=>{n(...e)})}const IT=t=>t(),td=Symbol(),ma=Symbol();function pc(t,e){t instanceof Map&&e instanceof Map?e.forEach((n,r)=>t.set(r,n)):t instanceof Set&&e instanceof Set&&e.forEach(t.add,t);for(const n in e){if(!e.hasOwnProperty(n))continue;const r=e[n],i=t[n];uc(i)&&uc(r)&&t.hasOwnProperty(n)&&!ft(r)&&!In(r)?t[n]=pc(i,r):t[n]=r}return t}const AT=Symbol();function yT(t){return!uc(t)||!Object.prototype.hasOwnProperty.call(t,AT)}const{assign:kn}=Object;function DT(t){return!!(ft(t)&&t.effect)}function MT(t,e,n,r){const{state:i,actions:a,getters:s}=e,o=n.state.value[t];let c;function _(){o||(n.state.value[t]=i?i():{});const l=IS(n.state.value[t]);return kn(l,a,Object.keys(s||{}).reduce((d,u)=>(d[u]=Gi($e(()=>{Ki(n);const p=n._s.get(t);return s[u].call(p,p)})),d),{}))}return c=Eg(t,_,e,n,r,!0),c}function Eg(t,e,n={},r,i,a){let s;const o=kn({actions:{}},n),c={deep:!0};let _,l,d=new Set,u=new Set,p;const m=r.state.value[t];!a&&!m&&(r.state.value[t]={});let g;function S(h){let L;_=l=!1,typeof h=="function"?(h(r.state.value[t]),L={type:Gr.patchFunction,storeId:t,events:p}):(pc(r.state.value[t],h),L={type:Gr.patchObject,payload:h,storeId:t,events:p});const H=g=Symbol();Lt().then(()=>{g===H&&(_=!0)}),l=!0,lr(d,L,r.state.value[t])}const b=a?function(){const{state:L}=n,H=L?L():{};this.$patch(V=>{kn(V,H)})}:mg;function R(){s.stop(),d.clear(),u.clear(),r._s.delete(t)}const v=(h,L="")=>{if(td in h)return h[ma]=L,h;const H=function(){Ki(r);const V=Array.from(arguments),O=new Set,W=new Set;function ie(q){O.add(q)}function y(q){W.add(q)}lr(u,{args:V,name:H[ma],store:D,after:ie,onError:y});let x;try{x=h.apply(this&&this.$id===t?this:D,V)}catch(q){throw lr(W,q),q}return x instanceof Promise?x.then(q=>(lr(O,q),q)).catch(q=>(lr(W,q),Promise.reject(q))):(lr(O,x),x)};return H[td]=!0,H[ma]=L,H},N={_p:r,$id:t,$onAction:ed.bind(null,u),$patch:S,$reset:b,$subscribe(h,L={}){const H=ed(d,h,L.detached,()=>V()),V=s.run(()=>Ue(()=>r.state.value[t],O=>{(L.flush==="sync"?l:_)&&h({storeId:t,type:Gr.direct,events:p},O)},kn({},c,L)));return H},$dispose:R},D=Zr(N);r._s.set(t,D);const I=(r._a&&r._a.runWithContext||IT)(()=>r._e.run(()=>(s=vc()).run(()=>e({action:v}))));for(const h in I){const L=I[h];if(ft(L)&&!DT(L)||In(L))a||(m&&yT(L)&&(ft(L)?L.value=m[h]:pc(L,m[h])),r.state.value[t][h]=L);else if(typeof L=="function"){const H=v(L,h);I[h]=H,o.actions[h]=L}}return kn(D,I),kn(ze(D),I),Object.defineProperty(D,"$state",{get:()=>r.state.value[t],set:h=>{S(L=>{kn(L,h)})}}),r._p.forEach(h=>{kn(D,s.run(()=>h({store:D,app:r._a,pinia:r,options:o})))}),m&&a&&n.hydrate&&n.hydrate(D.$state,m),_=!0,l=!0,D}/*! #__NO_SIDE_EFFECTS__ */function Yc(t,e,n){let r;const i=typeof e=="function";r=i?n:e;function a(s,o){const c=US();return s=s||(c?jn(pg,null):null),s&&Ki(s),s=ug,s._s.has(t)||(i?Eg(t,e,r,s):MT(t,r,s)),s._s.get(t)}return a.$id=t,a}const gg="";async function Gn(t,e,n){const r={method:t,headers:{}};n!==void 0&&(r.headers["Content-Type"]="application/json",r.body=JSON.stringify(n));const i=await fetch(`${gg}${e}`,r);if(!i.ok){const a=await i.text().catch(()=>"");throw new Error(`${t} ${e} → ${i.status}: ${a}`)}return i.status===204?null:i.json()}function LT(){return Gn("GET","/agents/profiles")}function xT(){return Gn("GET","/sessions")}function nd(t){return Gn("GET",`/sessions/${t}`)}function wT(t){return Gn("POST","/sessions",{profile_id:t})}function PT(t){return Gn("DELETE",`/sessions/${t}`)}function kT(t,e){return Gn("PATCH",`/sessions/${t}/pin`,{pinned:e})}function UT(t){return Gn("POST",`/sessions/${t}/stop`)}function FT(t){return Gn("POST",`/sessions/${t}/generate-name`)}async function BT(t,e){const n=new FormData;n.append("file",e);const r=await fetch(`${gg}/sessions/${t}/files`,{method:"POST",body:n});if(!r.ok){const i=await r.text().catch(()=>"");throw new Error(`Upload failed: ${r.status}: ${i}`)}return r.json()}const ir=Yc("sessions",()=>{const t=Ce([]),e=Ce(!1);async function n(){e.value=!0;try{t.value=await xT()}finally{e.value=!1}}async function r(c){const _=await wT(c);return t.value.unshift({session_id:_.session_id,profile_id:_.profile_id,created_at:_.created_at,last_active:_.created_at,message_count:0,preview:"",pinned:!1}),_}async function i(c){await PT(c),t.value=t.value.filter(_=>_.session_id!==c)}async function a(c,_){await kT(c,_);const l=t.value.map(d=>d.session_id===c?{...d,pinned:_}:d);l.sort((d,u)=>(u.pinned?1:0)-(d.pinned?1:0)),t.value=l}function s(c,_){const l=t.value.find(d=>d.session_id===c);l&&(l.preview=_)}function o(c,_){const l=t.value.find(d=>d.session_id===c);l&&(l.name=_)}return{sessions:t,loading:e,fetchSessions:n,createSession:r,deleteSession:i,pinSession:a,updatePreview:s,updateName:o}}),ri=Yc("profiles",()=>{const t=Ce([]),e=Ce(null),n=Ce(!1);async function r(){n.value=!0;try{t.value=await LT(),t.value.length&&!e.value&&(e.value=t.value[0].id)}finally{n.value=!1}}function i(a){return t.value.find(s=>s.id===a)??null}return{profiles:t,selectedProfileId:e,loading:n,fetchProfiles:r,getProfile:i}});async function GT(t){try{const e=ir(),n=e.sessions.find(i=>i.session_id===t);if(n!=null&&n.name)return;const{name:r}=await FT(t);r&&e.updateName(t,r)}catch{}}const Xt=Yc("chat",()=>{const t=Ce(null),e=Ce(null),n=Ce([]),r=Ce(!1),i=Ce([]),a=Ce([]),s=Ce(0),o=Ce(0),c=Ce(!1),_=pr(null);async function l(y){if(t.value!==y){c.value=!0,n.value=[],r.value=!1,_.value=null,t.value=y,s.value=0,o.value=0,location.hash=y;try{const x=await nd(y);e.value=x.profile_id??null,n.value=ie(x.messages??[]),x.context_token_count&&(s.value=x.context_token_count),x.max_context_tokens&&(o.value=x.max_context_tokens)}finally{c.value=!1}}}async function d(y){if(y)try{const x=await nd(y);e.value=x.profile_id??null,n.value=ie(x.messages??[]),x.context_token_count&&(s.value=x.context_token_count),x.max_context_tokens&&(o.value=x.max_context_tokens)}catch{}}function u(y){t.value&&(y?localStorage.setItem(`draft:${t.value}`,y):localStorage.removeItem(`draft:${t.value}`))}function p(y){return localStorage.getItem(`draft:${y}`)??""}function m(){_.value&&(_.value.done=!0,_.value=null),r.value=!0;const y={id:`stream_${Date.now()}`,role:"assistant",type:"stream",thinking:null,tools:[],text:"",done:!1,time:new Date().toISOString(),animate:!0,statusLabel:null};n.value.push(y),_.value=n.value[n.value.length-1]}function g(y){const x=_.value;x&&(x.thinking||(x.thinking={text:"",done:!1}),x.thinking.text+=y)}function S(){const y=_.value;y!=null&&y.thinking&&(y.thinking.done=!0)}function b(y){return[...y.tools].reverse().find(x=>x.kind==="tool"&&x.name==="spawn_agent")}function R(y){const x=_.value;if(!x)return;const q={kind:"turn_thinking",isSubagent:y.is_subagent??!1,thinking:{text:y.thinking??"",done:!0}};if(y.is_subagent){const de=b(x);if(de){de.steps.push(q);return}}x.tools.push(q)}function v(y){const x=_.value;x&&(x.statusLabel=y.label??"")}function N(y){const x=_.value;x&&(x.statusLabel=null,x.tools.push({kind:"plan",text:y.plan??""}))}function D(y){const x=_.value;if(!x)return;const q={kind:"tool",id:`tool_${Date.now()}`,name:y.tool,args:y.args,result:null,success:null,pending:!0,isSubagent:y.is_subagent??!1,steps:[]};if(y.is_subagent){const de=b(x);if(de){de.steps.push(q);return}}x.tools.push(q)}function C(y){const x=_.value;if(!x)return;if(y.is_subagent){const de=b(x);if(de){const Ge=de.steps.findLast(Pe=>Pe.kind==="tool"&&Pe.name===y.tool&&Pe.pending);if(Ge){Ge.result=y.result,Ge.success=y.success!==!1,Ge.pending=!1;return}}}const q=x.tools.findLast(de=>de.kind==="tool"&&de.name===y.tool&&de.pending);q&&(q.result=y.result,q.success=y.success!==!1,q.pending=!1)}function I(y){const x=_.value;x&&(x.text+=y)}function h(y){const x=_.value;x&&(x.done=!0,x.elapsed_seconds=(y==null?void 0:y.elapsed_seconds)??null,x.tool_call_count=(y==null?void 0:y.tool_call_count)??null,x.token_count=(y==null?void 0:y.token_count)??null,_.value=null,!x.thinking&&!x.tools.length&&!x.text&&(n.value=n.value.filter(q=>q!==x))),r.value=!1,y!=null&&y.context_tokens&&(s.value=y.context_tokens),y!=null&&y.max_context_tokens&&(o.value=y.max_context_tokens),t.value&&(x!=null&&x.text)&&ir().updatePreview(t.value,x.text.slice(0,80)),t.value&>(t.value)}function L(){const y=_.value;y&&(y.done=!0,_.value=null,!y.thinking&&!y.tools.length&&!y.text&&(n.value=n.value.filter(x=>x!==y))),r.value=!1}function H(y){e.value=y.profile_id}function V(y){n.value.push({id:`compress_${Date.now()}`,role:"system",type:"compression_notice",before:y.messages_before,after:y.messages_after})}function O(y){r.value=!1,_.value=null,n.value.push({id:`err_${Date.now()}`,role:"system",type:"error",text:y.message??"An error occurred"})}function W(y,x,q){n.value.push({id:`user_${Date.now()}`,role:"user",text:y,images:[...x],files:[...q],time:new Date().toISOString(),animate:!0})}function ie(y){var de,Ge;const x=[];let q=0;for(;qxe.startsWith("data:")?xe:`data:image/jpeg;base64,${xe}`);x.push({id:`h_${q}`,role:"user",text:Pe.content??"",images:qe,files:Pe.files??[],time:Pe.created_at??null}),q++;continue}if(Pe.role==="assistant"){const qe=`h_${q}`,xe=[];let ot=null,_t="",We=null;for(;q=y.length||y[q].role!=="assistant")break}}if(ot||xe.length||_t){let ve=null,A=null,P=null;const ee=Number(qe.slice(2));for(let ce=ee;ce>>0,1)},emit:function(e,n){(t.get(e)||[]).slice().map(function(r){r(n)}),(t.get("*")||[]).slice().map(function(r){r(e,n)})}}}function qc(t,e,n){if(!n)return e;const r=t==null?void 0:t[n];if(r==null)throw new Error(`Key is ${r} on item (keyField is '${n}')`);return r}function Zn(t,e){return t.map((n,r)=>qc(n,r,e))}function qT(t,e,n){const r=[],i=[];for(let a=0;a0?c:null)}return{keys:r,sizes:i}}function HT(t,e,n){if(!t||t.keys.length!==e.length||t.sizes.length!==e.length)return!1;for(let r=0;r0&&(r[t.keys[i]]=a)}return r}function fg(t,e){if(!t.length||e.length<=t.length)return 0;const n=t[0],r=e.indexOf(n);if(r<=0||r+t.lengthe.length-r)return 0;for(let i=0;i=n&&c<=o?null:t{}:n.onVscrollUpdate(S),d=$e(()=>{const O=le(t);if(n.vscrollData.simpleArray){if(O.index==null)throw new Error("index is required when using simple-array mode with dynamic item measurement");return O.index}if(n.vscrollData.keyField in O.item)return O.item[n.vscrollData.keyField];throw new Error(`keyField '${n.vscrollData.keyField}' not found in your item. You should set a valid keyField prop on your Scroller`)}),u=$e(()=>n.vscrollData.sizes[d.value]||0),p=$e(()=>le(t).active&&n.vscrollData.active);function m(){p.value?a!==d.value&&(a=d.value,i=null,s=null,N(d.value)):i=d.value}function g(){le(t).watchData&&!n.resizeObserver?c=Ue(()=>le(t).item,()=>{b()},{deep:!0}):c&&(c(),c=null)}function S({force:O}){!p.value&&O&&(s=d.value),(i===d.value||O||!u.value)&&m()}function b(){m()}function R(O){n.undefinedMap[O]&&n.undefinedSizeCount.value--,n.undefinedMap[O]=void 0}function v(O,W){if(n.vscrollData.sizes[O]){R(O);return}if(W){n.undefinedMap[O]||n.undefinedSizeCount.value++,n.undefinedMap[O]=!0;return}n.undefinedMap[O]&&(n.undefinedSizeCount.value--,n.undefinedMap[O]=!1)}function N(O){Lt(()=>{if(d.value===O){const W=le(e);if(!W)return;const ie=W.offsetWidth,y=W.offsetHeight;D(ie,y)}a=null})}function D(O,W){const ie=~~(n.direction.value==="vertical"?W:O);ie&&u.value!==ie&&C(ie)}function C(O){var W,ie;R(d.value),n.vscrollData.sizes[d.value]=O,le(t).emitResize&&((ie=(W=le(r))==null?void 0:W.onResize)==null||ie.call(W,d.value))}function I(){if(!n.resizeObserver||o)return;const O=le(e);O&&(n.resizeObserver.observe(O),O.$_vs_id=d.value,O.$_vs_onResize=L,o=!0)}function h(){if(!n.resizeObserver||!o)return;const O=le(e);O&&(n.resizeObserver.unobserve(O),O.$_vs_onResize=void 0,o=!1)}function L(O,W,ie){d.value===O&&D(W,ie)}_.push(Ue(()=>le(t).watchData,()=>{g()})),n.resizeObserver||_.push(Ue(()=>le(t).sizeDependencies,()=>{b()},{deep:!0})),_.push(Ue(d,(O,W)=>{const ie=le(e);ie&&(ie.$_vs_id=O),R(W),v(O,p.value);const y=n.vscrollData.sizes[O];if(!y){i=O,b();return}R(O),o&&(n.vscrollData.sizes[O]=y)})),_.push(Ue(p,O=>{v(d.value,O),n.resizeObserver?O?I():h():O&&s===d.value&&m()})),g();function H(){p.value&&(m(),I())}function V(){l(),h(),R(d.value);const O=le(e);O&&(O.$_vs_id=void 0,O.$_vs_onResize=void 0),c&&(c(),c=null);for(const W of _)W();_.length=0}return{id:d,size:u,finalActive:p,updateSize:m,mount:H,unmount:V}}const VT={itemsLimit:1e3};function bg(t){return typeof window<"u"&&t===window}const zT=(()=>{if(typeof document>"u")return"negative";const t=document.createElement("div"),e=document.createElement("div");t.style.width="4px",t.style.height="1px",t.style.overflow="auto",t.style.direction="rtl",e.style.width="8px",e.style.height="1px",t.appendChild(e),document.body.appendChild(t),t.scrollLeft=-1;const n=t.scrollLeft<0;return document.body.removeChild(t),n?"negative":"default"})();function ur(t,e,n){return e!=="horizontal"||!n||bg(n)||getComputedStyle(n).direction!=="rtl"?t:zT==="negative"?-t:t}function $T(t,e,n){return ur(t,e,n)}function Ea(t,e,n,r){const i=$T(n,e,t),a=!!(r!=null&&r.smooth);if(bg(t)){e==="vertical"?t.scrollTo({top:i,behavior:a?"smooth":"auto"}):t.scrollTo({left:i,behavior:a?"smooth":"auto"});return}if(typeof t.scrollTo=="function"){t.scrollTo(e==="vertical"?{top:i,behavior:a?"smooth":"auto"}:{left:i,behavior:a?"smooth":"auto"});return}e==="vertical"?t.scrollTop=i:t.scrollLeft=i}function WT(t,e,n){return n?e==="vertical"?window.innerHeight:window.innerWidth:e==="vertical"?t.clientHeight:t.clientWidth}const KT=/auto|scroll/;function Rg(t,e){return t.parentNode===null?e:Rg(t.parentNode,[...e,t])}function ga(t,e){return getComputedStyle(t,null).getPropertyValue(e)}function QT(t){return ga(t,"overflow")+ga(t,"overflow-y")+ga(t,"overflow-x")}function XT(t){return KT.test(QT(t))}function ui(t){if(!(t instanceof HTMLElement||t instanceof SVGElement))return;const e=Rg(t.parentNode,[]);for(let n=0;n{const w=le(t);return w.items.length>0&&typeof w.items[0]!="object"}),W=$e(()=>{const w=le(t);if(w.itemSize===null){const B={[-1]:{accumulator:0}},ne=w.items,Re=w.sizeField??"size",ue=w.minItemSize,ge=V.value;let Ie=1e4,Ye=0,ht;for(let Ae=0,Et=ne.length;Aea.value.filter(w=>w.nr.used).sort((w,B)=>w.nr.index-B.nr.index)),y=$e(()=>{const w=le(t),B=O.value?null:w.keyField;return qT(w.items,B,(ne,Re,ue)=>w.itemSize!=null?w.itemSize:V.value[ue]||(ne==null?void 0:ne[w.sizeField??"size"])||void 0)});function x(w){const B=le(t);return V.value=mc(w,B.items,O.value?null:B.keyField),Object.keys(V.value).length>0}function q(w){let B=d.get(w);return B||(B=[],d.set(w,B)),B}function de(w,B,ne,Re,ue){const ge=Gi({id:JT++,index:B,used:!0,key:Re,type:ue}),Ie=bE({item:ne,position:0,offset:0,nr:ge,_vs_styleStamp:0});return w.push(Ie),Ie}function Ge(w){const B=q(w);if(B&&B.length){const ne=B.pop();return ne.nr.used=!0,Sa(ne),ne}}function Pe(w){const B=w.nr.type;q(B).push(w),w.nr.used=!1,w.position=-9999,Sa(w),l.delete(w.nr.key)}function qe(){l.clear(),d.clear();for(let w=0,B=a.value.length;w{H.delete(B),w()}),H.add(B),B}function ot(){for(const w of H)cancelAnimationFrame(w);H.clear()}function _t(){S&&(clearTimeout(S),S=null),b&&(clearTimeout(b),b=null),R&&(clearTimeout(R),R=null),I&&(clearTimeout(I),I=null),h&&(clearTimeout(h),h=null)}function We(){var w;(w=i==null?void 0:i.onResize)==null||w.call(i),o.value&&ae(!1)}function ve(){C&&!L&&G();const w=le(t);if(!u){if(u=!0,S)return;const B=()=>xe(()=>{u=!1;const{continuous:ne}=ae(!1,!0);ne||(b&&clearTimeout(b),b=setTimeout(ve,w.updateInterval+100))});B(),w.updateInterval&&(S=setTimeout(()=>{S=null,u&&B()},w.updateInterval))}}function A(w,B){var ne,Re;o.value&&(w||B.boundingClientRect.width!==0||B.boundingClientRect.height!==0?((ne=i==null?void 0:i.onVisible)==null||ne.call(i),xe(()=>{ae(!1)})):(Re=i==null?void 0:i.onHidden)==null||Re.call(i))}function P(){const w=le(e),B=w?ui(w):void 0;return window.document&&(B===window.document.documentElement||B===window.document.body)?window:B||window}function ee(){const w=le(n);return w?le(t).direction==="vertical"?w.scrollHeight:w.scrollWidth:0}function ce(){const w=le(e);if(!w)return{start:0,end:0};const B=le(t),ne=B.direction==="vertical";let Re;if(B.pageMode){const ue=w.getBoundingClientRect(),ge=ne?ue.height:ue.width;let Ie=-(ne?ue.top:ue.left),Ye=ne?window.innerHeight:window.innerWidth;Ie<0&&(Ye+=Ie,Ie=0),Ie+Ye>ge&&(Ye=ge-Ie),Re={start:Ie,end:Ie+Ye}}else ne?Re={start:w.scrollTop,end:w.scrollTop+w.clientHeight}:Re={start:ur(w.scrollLeft,B.direction,w),end:ur(w.scrollLeft,B.direction,w)+w.clientWidth};return Re}function me(){const w=le(e);if(!w)return{start:0,end:0};if(le(t).direction==="vertical"){const B=ur(w.scrollLeft,"horizontal",w);return{start:B,end:B+w.clientWidth}}return{start:w.scrollTop,end:w.scrollTop+w.clientHeight}}function E(w){const B=le(t);if(B.itemSize!=null)return B.itemSize;const ne=W.value[w];return(ne==null?void 0:ne.size)||Number(B.minItemSize)||0}function T(w){var B;const ne=le(t),Re=ne.gridItems||1;return w<=0?0:ne.itemSize!=null?Math.floor(w/Re)*ne.itemSize:((B=W.value[w-1])==null?void 0:B.accumulator)||0}function M(w){const B=le(t),ne=B.items.length,Re=B.gridItems||1;if(!ne)return 0;if(B.itemSize!=null){const Ye=Math.floor(w/B.itemSize)*Re;return Math.min(Math.max(Ye,0),ne-1)}let ue=0,ge=ne-1,Ie=0;for(;ue<=ge;){const Ye=Math.floor((ue+ge)/2);T(Ye)<=w?(Ie=Ye,ue=Ye+1):ge=Ye-1}return Ie}function G(){I&&(clearTimeout(I),I=null),C=null}function F(){I&&clearTimeout(I),I=setTimeout(()=>{C=null,I=null},150)}function Y(w,B){if(!w.length){G();return}const ne=Math.max(ce().start-ee(),0),Re=Math.min(M(ne),w.length-1),ue=w[Re],ge=B?ue==null?void 0:ue[B]:Re;if(ge==null){G();return}const Ie=ee()+T(Re);C={key:ge,offset:ce().start-Ie}}function K(w){if(!C)return!1;const B=le(t),ne=w??B.items,Re=O.value?null:B.keyField,ue=Zn(ne,Re).indexOf(C.key);if(ue===-1)return G(),!1;const ge=ee()+T(ue)+C.offset,Ie=ce().start;return Math.abs(ge-Ie)<.5?!1:(L=!0,je(ge),xe(()=>{L=!1}),!0)}function X(){le(t).pageMode?Q():z()}function Q(){N=P(),N.addEventListener("scroll",ve,ZT()?{passive:!0}:!1),N.addEventListener("resize",We)}function z(){N&&(N.removeEventListener("scroll",ve),N.removeEventListener("resize",We),N=null)}function Se(w,B,ne,Re,ue,ge){const Ie=Math.ceil(w/B)*ne,Ye=Math.max(0,Math.floor(ue.start/ne)),ht=Math.min(Math.ceil(ue.end/ne),Math.ceil(w/B)),Ae=Math.max(0,Math.floor(ge.start/Re)),Et=Math.min(Math.ceil(ge.end/Re),B),gt=[];for(let U=Ye;U=w)break;gt.push(Qe)}}const Ke=gt[0]??0,f=gt.at(-1)??-1;return{renderedIndices:gt,startIndex:Ke,endIndex:f+1,visibleStartIndex:Ke,visibleEndIndex:f,totalSize:Ie}}function oe(){const w=le(t);if(!w.gridItems||w.itemSize==null)return!1;const B=le(e);if(!B)return!1;const ne=w.itemSecondarySize||w.itemSize,Re=w.direction==="vertical"?B.clientWidth:B.clientHeight;return ne*w.gridItems>Re}function ae(w,B=!1){var ne,Re;const ue=le(t),ge=ue.itemSize,Ie=ue.gridItems||1,Ye=ue.itemSecondarySize||ge,ht=v,Ae=ue.typeField,Et=O.value?null:ue.keyField,gt=ue.items,Ke=gt.length,f=W.value,U=l,j=a.value;let Te=null,Qe=null,Le,te,_e,Ee,et;if(!Ke)Le=te=Ee=et=_e=0;else if(g)Le=Ee=0,te=et=Math.min(ue.prerender,gt.length),_e=0;else{const ke=ce(),Rt=me();if(B){let St=ke.start-p;St<0&&(St=-St);let rn=Rt.start-m;rn<0&&(rn=-rn);const Yn=ge===null&&St>=ht||ge!==null&&St>=ge,pt=Ie>1&&ge!=null&&rn>=Ye;if(!Yn&&!pt)return{continuous:!0}}p=ke.start,m=Rt.start;const zt=ue.buffer;ke.start-=zt,ke.end+=zt,Rt.start-=zt,Rt.end+=zt;let Jt=0;const xn=le(n);xn&&(Jt=xn.scrollHeight,ke.start-=Jt);const wn=le(r);if(wn){const St=wn.scrollHeight;ke.end+=St}if(ge===null){let St,rn=0,Yn=Ke-1,pt=~~(Ke/2),or;do or=pt,St=f[pt].accumulator,Stke.start&&(Yn=pt),pt=~~((rn+Yn)/2);while(pt!==or);for(pt<0&&(pt=0),Le=pt,_e=f[Ke-1].accumulator,te=pt;teKe&&(te=Ke)),Ee=Le;Ee1){const St=Se(Ke,Ie,ge,Ye,ke,Rt);Te=St.renderedIndices,Qe=new Set(Te),Le=St.startIndex,te=St.endIndex,Ee=St.visibleStartIndex,et=St.visibleEndIndex,_e=St.totalSize}else{Le=~~(ke.start/ge*Ie);const St=Le%Ie;Le-=St,te=Math.ceil(ke.end/ge*Ie),Ee=Math.max(0,Math.floor((ke.start-Jt)/ge*Ie)),et=Math.floor((ke.end-Jt)/ge*Ie),Le<0&&(Le=0),te>Ke&&(te=Ke),Ee<0&&(Ee=0),et>Ke&&(et=Ke),_e=Math.ceil(Ke/Ie)*ge}}te-Le>VT.itemsLimit&&fe(),s.value=_e;let Ne;const gn=Le<=_&&te>=c;if(!gn||w)qe();else for(let ke=0,Rt=j.length;ke