@jefuriiij/synthra 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dashboard/server.ts","../../package.json","../../src/shared/logger.ts","../../src/server/port.ts","../../src/dashboard/arsenal.ts","../../src/dashboard/delta.ts","../../src/learn/store.ts","../../src/learn/usage.ts","../../src/shared/paths.ts","../../src/shared/pricing.ts","../../src/shared/project-registry.ts","../../src/dashboard/built/index.html","../../src/dashboard/public/favicon.svg"],"sourcesContent":["// Standalone dashboard server. Default port 8901 (override via\n// SYN_DASHBOARD_PORT); falls back through a small range 8901–8910 if the\n// preferred port is busy (so we can coexist with other co-installed\n// AI-context tools that also expose a dashboard).\n// Reads .synthra-graph/token_log.jsonl + .synthra-graph/gate_log.jsonl for the\n// given project and renders a live SPA backed by GET /data polled every 2s.\n\nimport { serve } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\n\n// Tsup inlines this import at build time so `c.html` can echo whatever\n// version is running. Replaces the v__SYN_VERSION__ placeholder in the\n// dashboard footer on every GET /.\nimport pkgJson from \"../../package.json\" with { type: \"json\" };\n\nimport { log } from \"../shared/logger.js\";\nimport type { SynthraPaths } from \"../shared/paths.js\";\nimport { findFreePort } from \"../server/port.js\";\nimport { computeArsenal } from \"./arsenal.js\";\nimport { computeDashboardData } from \"./delta.js\";\n\n// The dashboard UI is built by Vite (svelte + tailwind) into a single\n// self-contained HTML (JS+CSS inlined) at ./built/index.html; tsup text-inlines\n// it here. See vite.config.dashboard.ts. CSS is inside the HTML — no /style.css.\nimport indexHtml from \"./built/index.html\";\nimport faviconSvg from \"./public/favicon.svg\";\n\nconst FALLBACK_RANGE = 9; // try preferredPort + [0..9]\nconst VERSION = (pkgJson as { version: string }).version;\n// How many recent turns/gates the /data payload carries. The dashboard\n// paginates turns client-side (25/page); the donut uses the uncapped\n// per-project model aggregate, so it isn't bounded by this.\nconst RECENT_N = Number(process.env.SYN_DASHBOARD_RECENT_N) || 500;\n\nexport interface DashboardServerHandle {\n port: number;\n url: string;\n stop(): Promise<void>;\n}\n\nexport async function startDashboard(\n paths: SynthraPaths,\n preferredPort = 8901,\n): Promise<DashboardServerHandle> {\n const port = await findFreePort(preferredPort, preferredPort + FALLBACK_RANGE);\n if (port !== preferredPort) {\n log.info(\n `dashboard port ${preferredPort} was busy — bound to ${port} instead (likely another dashboard from a coexisting tool).`,\n );\n }\n const app = new Hono();\n\n app.get(\"/\", (c) => c.html(indexHtml.replaceAll(\"__SYN_VERSION__\", VERSION)));\n\n app.get(\"/favicon.svg\", (c) => {\n c.header(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\n c.header(\"Cache-Control\", \"public, max-age=86400\");\n return c.body(faviconSvg);\n });\n\n app.get(\"/health\", (c) => c.json({ ok: true }));\n\n // Installed skills / agents / MCP servers (project · personal · plugin).\n // Fetched lazily when the Arsenal drawer opens — not on the /data poll.\n app.get(\"/arsenal\", async (c) => c.json(await computeArsenal(paths.projectRoot)));\n\n app.get(\"/data\", async (c) => {\n const data = await computeDashboardData(paths, RECENT_N);\n return c.json(data);\n });\n\n const nodeServer = serve({ fetch: app.fetch, port, hostname: \"127.0.0.1\" });\n\n return {\n port,\n url: `http://127.0.0.1:${port}`,\n async stop() {\n await new Promise<void>((resolve, reject) => {\n nodeServer.close((err) => (err ? reject(err) : resolve()));\n });\n },\n };\n}\n","{\n \"name\": \"@jefuriiij/synthra\",\n \"version\": \"0.14.0\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"description\": \"Local context engine for AI coding assistants — graph-based context, branch-aware memory, real-time human-activity awareness, deterministic Grep/Glob gating, and a live token dashboard.\",\n \"type\": \"module\",\n \"bin\": {\n \"syn\": \"bin/syn\",\n \"synthra\": \"bin/syn\"\n },\n \"scripts\": {\n \"build\": \"npm run build:ui && tsup\",\n \"build:ui\": \"vite build --config vite.config.dashboard.ts\",\n \"dev\": \"tsup --watch\",\n \"dev:ui\": \"vite --config vite.config.dashboard.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"biome lint .\",\n \"format\": \"biome format --write .\",\n \"check\": \"biome check .\",\n \"check:fix\": \"biome check --write .\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"LICENSE\",\n \"ROADMAP.md\"\n ],\n \"keywords\": [\n \"claude-code\",\n \"mcp\",\n \"context-engine\",\n \"code-graph\",\n \"ai-coding\",\n \"token-savings\"\n ],\n \"author\": \"Jeff (@jefuriiij)\",\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/jefuriiij/synthra#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/jefuriiij/synthra.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/jefuriiij/synthra/issues\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"dependencies\": {\n \"@hono/node-server\": \"^1.18.0\",\n \"chokidar\": \"^5.0.0\",\n \"cross-spawn\": \"^7.0.6\",\n \"hono\": \"^4.12.23\",\n \"ignore\": \"^7.0.0\",\n \"sade\": \"^1.8.1\",\n \"tree-sitter-wasms\": \"^0.1.12\",\n \"web-tree-sitter\": \"^0.25.10\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.4.16\",\n \"@lucide/svelte\": \"^1.18.0\",\n \"@sveltejs/vite-plugin-svelte\": \"^7.1.2\",\n \"@tailwindcss/vite\": \"^4.3.1\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/node\": \"^25.9.1\",\n \"@vitest/coverage-v8\": \"^4.1.8\",\n \"bits-ui\": \"^2.18.1\",\n \"clsx\": \"^2.1.1\",\n \"svelte\": \"^5.56.3\",\n \"tailwind-merge\": \"^3.6.0\",\n \"tailwind-variants\": \"^3.2.2\",\n \"tailwindcss\": \"^4.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tw-animate-css\": \"^1.4.0\",\n \"typescript\": \"^6.0.3\",\n \"vite\": \"^8.0.16\",\n \"vite-plugin-singlefile\": \"^2.3.3\",\n \"vitest\": \"^4.1.7\"\n }\n}\n","// Minimal logger. Prefixes Synthra output with [syn].\n\ntype Level = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst LEVEL_PRIORITY: Record<Level, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nlet activeLevel: Level = (process.env.SYN_LOG_LEVEL as Level) ?? \"info\";\n\nexport function setLevel(level: Level): void {\n activeLevel = level;\n}\n\nfunction shouldLog(level: Level): boolean {\n return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[activeLevel];\n}\n\nfunction emit(level: Level, msg: string, ...args: unknown[]): void {\n if (!shouldLog(level)) return;\n const stream = level === \"error\" || level === \"warn\" ? process.stderr : process.stdout;\n stream.write(`[syn] ${msg}${args.length ? \" \" + args.map(String).join(\" \") : \"\"}\\n`);\n}\n\nexport const log = {\n debug: (m: string, ...a: unknown[]) => emit(\"debug\", m, ...a),\n info: (m: string, ...a: unknown[]) => emit(\"info\", m, ...a),\n warn: (m: string, ...a: unknown[]) => emit(\"warn\", m, ...a),\n error: (m: string, ...a: unknown[]) => emit(\"error\", m, ...a),\n};\n","// Finds a free port in the 8080–8099 range. Writes the chosen port to\n// .synthra-graph/mcp_port so PowerShell/Bash hook scripts can read it.\n// TODO: M2\n\nimport { createServer } from \"node:net\";\n\nexport const PORT_RANGE_START = 8080;\nexport const PORT_RANGE_END = 8099;\n\nexport async function findFreePort(\n start = PORT_RANGE_START,\n end = PORT_RANGE_END,\n): Promise<number> {\n for (let port = start; port <= end; port++) {\n if (await isFree(port)) return port;\n }\n throw new Error(`Synthra: no free port in ${start}-${end}`);\n}\n\nfunction isFree(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const s = createServer();\n s.once(\"error\", () => resolve(false));\n s.once(\"listening\", () => s.close(() => resolve(true)));\n s.listen(port, \"127.0.0.1\");\n });\n}\n","// Scans the user's Claude Code \"arsenal\" — installed skills, subagents, and MCP\n// servers — across project, personal (~/.claude), and plugin scopes, so the\n// dashboard can show what's available without dropping to the CLI.\n//\n// This reads Claude Code's own on-disk layout (NOT Synthra's graph):\n// skills ~/.claude/skills/<name>/SKILL.md, <project>/.claude/skills/…, plugin skills/\n// agents ~/.claude/agents/*.md, <project>/.claude/agents/*.md, plugin agents/\n// mcp <project>/.mcp.json, ~/.claude.json mcpServers, plugin .mcp.json\n// plugins ~/.claude/plugins/installed_plugins.json (index) + settings.json enabledPlugins\n//\n// Security: MCP configs frequently carry auth headers/env tokens. We emit ONLY\n// name / type / url(query stripped) / command — headers, env, and args are\n// dropped so nothing secret reaches the dashboard.\n\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nexport type ArsenalScope = \"project\" | \"personal\" | \"plugin\";\n\nexport interface ArsenalItem {\n name: string;\n description: string;\n scope: ArsenalScope;\n /** Plugin name when scope === \"plugin\". */\n source?: string;\n /** Plugin items: enabled state from settings.json; undefined = always-on (own files). */\n enabled?: boolean;\n /** Kind-specific extras: agents {tools,model}; skills {argument_hint,user_invocable}; mcp {type,url}. */\n meta?: Record<string, string>;\n}\n\nexport interface ArsenalData {\n skills: ArsenalItem[];\n agents: ArsenalItem[];\n mcp: ArsenalItem[];\n counts: { skills: number; agents: number; mcp: number; plugins: number };\n scanned_at: string;\n}\n\nconst DESC_MAX = 300;\nconst TOOLS_MAX = 200;\n\nasync function readText(path: string): Promise<string | null> {\n try {\n return await readFile(path, \"utf8\");\n } catch {\n return null;\n }\n}\n\nasync function readJson<T>(path: string): Promise<T | null> {\n const text = await readText(path);\n if (text === null) return null;\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\nasync function listNames(dir: string): Promise<string[]> {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n}\n\nfunction clip(s: string, max: number): string {\n const t = s.trim();\n return t.length > max ? `${t.slice(0, max - 1)}…` : t;\n}\n\n/**\n * Minimal YAML-frontmatter reader — no dependency (Synthra stays lean). Pulls\n * the column-0 `key: value` pairs from the leading `--- … ---` block. Supports\n * single-line values and quoted values that span multiple lines (agent\n * `description` blocks do). Nested/indented lines (e.g. under `metadata:`) are\n * ignored. Keys are returned verbatim (e.g. \"argument-hint\").\n */\nexport function parseFrontmatter(md: string): Record<string, string> {\n const m = md.match(/^?\\s*---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!m) return {};\n const lines = (m[1] ?? \"\").split(/\\r?\\n/);\n const out: Record<string, string> = {};\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i] ?? \"\";\n const kv = line.match(/^([A-Za-z][\\w-]*):\\s?(.*)$/); // column-0 keys only\n if (!kv) continue;\n const key = kv[1] ?? \"\";\n if (!key) continue;\n let val = kv[2] ?? \"\";\n // Quoted value that doesn't close on this line → consume until the closer.\n if ((val.startsWith('\"') && !/[^\\\\]\"\\s*$/.test(val.slice(1))) || val === '\"') {\n const buf = [val];\n while (i + 1 < lines.length && !/\"\\s*$/.test(buf[buf.length - 1] ?? \"\")) {\n i += 1;\n buf.push(lines[i] ?? \"\");\n }\n val = buf.join(\" \");\n }\n val = val\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\")\n .trim();\n out[key] = val;\n }\n return out;\n}\n\nfunction skillItem(\n fm: Record<string, string>,\n fallbackName: string,\n scope: ArsenalScope,\n source?: string,\n): ArsenalItem {\n const meta: Record<string, string> = {};\n if (fm[\"argument-hint\"]) meta.argument_hint = fm[\"argument-hint\"];\n if (fm[\"user-invocable\"]) meta.user_invocable = fm[\"user-invocable\"];\n return {\n name: fm.name || fallbackName,\n description: clip(fm.description || \"\", DESC_MAX),\n scope,\n ...(source ? { source } : {}),\n ...(Object.keys(meta).length ? { meta } : {}),\n };\n}\n\nfunction agentItem(\n fm: Record<string, string>,\n fallbackName: string,\n scope: ArsenalScope,\n source?: string,\n): ArsenalItem {\n const meta: Record<string, string> = {};\n if (fm.tools) meta.tools = clip(fm.tools, TOOLS_MAX);\n if (fm.model) meta.model = fm.model;\n return {\n name: fm.name || fallbackName,\n description: clip(fm.description || \"\", DESC_MAX),\n scope,\n ...(source ? { source } : {}),\n ...(Object.keys(meta).length ? { meta } : {}),\n };\n}\n\nasync function scanSkillsDir(\n dir: string,\n scope: ArsenalScope,\n source: string | undefined,\n out: ArsenalItem[],\n): Promise<void> {\n for (const name of await listNames(dir)) {\n const md = await readText(join(dir, name, \"SKILL.md\"));\n if (md === null) continue; // not a skill dir (or broken symlink) — skip\n out.push(skillItem(parseFrontmatter(md), name, scope, source));\n }\n}\n\nasync function scanAgentsDir(\n dir: string,\n scope: ArsenalScope,\n source: string | undefined,\n out: ArsenalItem[],\n): Promise<void> {\n for (const file of await listNames(dir)) {\n if (!file.endsWith(\".md\")) continue;\n const md = await readText(join(dir, file));\n if (md === null) continue;\n out.push(agentItem(parseFrontmatter(md), basename(file, \".md\"), scope, source));\n }\n}\n\n/** Redacted MCP server entries — name/type/url only, never headers/env/args. */\nfunction mcpItemsFrom(\n json: unknown,\n scope: ArsenalScope,\n source: string | undefined,\n): ArsenalItem[] {\n if (!json || typeof json !== \"object\") return [];\n const record = json as Record<string, unknown>;\n // Either { mcpServers: {...} } or a bare { name: {type,url} } map.\n const servers =\n record.mcpServers && typeof record.mcpServers === \"object\"\n ? (record.mcpServers as Record<string, unknown>)\n : record;\n const items: ArsenalItem[] = [];\n for (const [name, raw] of Object.entries(servers)) {\n if (!raw || typeof raw !== \"object\") continue;\n const cfg = raw as Record<string, unknown>;\n const type = typeof cfg.type === \"string\" ? cfg.type : cfg.command ? \"stdio\" : \"http\";\n const url =\n typeof cfg.url === \"string\"\n ? cfg.url.split(\"?\")[0]\n : typeof cfg.command === \"string\"\n ? cfg.command\n : \"\";\n const meta: Record<string, string> = { type };\n if (url) meta.url = url;\n items.push({ name, description: \"\", scope, ...(source ? { source } : {}), meta });\n }\n return items;\n}\n\ninterface InstalledEntry {\n scope?: string;\n installPath?: string;\n version?: string;\n}\n\nconst SCOPE_ORDER: Record<ArsenalScope, number> = { project: 0, personal: 1, plugin: 2 };\n\nfunction sortItems(items: ArsenalItem[]): ArsenalItem[] {\n return items.sort((a, b) => {\n if (a.scope !== b.scope) return SCOPE_ORDER[a.scope] - SCOPE_ORDER[b.scope];\n const sa = a.source ?? \"\";\n const sb = b.source ?? \"\";\n if (sa !== sb) return sa < sb ? -1 : 1;\n return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n });\n}\n\nlet cache: { key: string; at: number; data: ArsenalData } | null = null;\nconst CACHE_TTL_MS = 15_000;\n\nexport async function computeArsenal(\n projectRoot: string,\n homeDir = homedir(),\n): Promise<ArsenalData> {\n const key = `${projectRoot}\u0000${homeDir}`;\n const now = Date.now();\n if (cache && cache.key === key && now - cache.at < CACHE_TTL_MS) return cache.data;\n\n const homeClaude = join(homeDir, \".claude\");\n const projClaude = join(projectRoot, \".claude\");\n\n const skills: ArsenalItem[] = [];\n const agents: ArsenalItem[] = [];\n const mcp: ArsenalItem[] = [];\n\n // --- own files: project, then personal ---\n await scanSkillsDir(join(projClaude, \"skills\"), \"project\", undefined, skills);\n await scanSkillsDir(join(homeClaude, \"skills\"), \"personal\", undefined, skills);\n await scanAgentsDir(join(projClaude, \"agents\"), \"project\", undefined, agents);\n await scanAgentsDir(join(homeClaude, \"agents\"), \"personal\", undefined, agents);\n mcp.push(...mcpItemsFrom(await readJson(join(projectRoot, \".mcp.json\")), \"project\", undefined));\n mcp.push(\n ...mcpItemsFrom(\n (await readJson<Record<string, unknown>>(join(homeDir, \".claude.json\")))?.mcpServers,\n \"personal\",\n undefined,\n ),\n );\n\n // --- plugins: installed_plugins.json gives exact installPath per plugin ---\n // installed_plugins.json is `{ version, plugins: { \"<key>\": [entries] } }`\n // (v2); tolerate an older flat `{ \"<key>\": [entries] }` shape too.\n const installedRaw = await readJson<Record<string, unknown>>(\n join(homeClaude, \"plugins\", \"installed_plugins.json\"),\n );\n const pluginsMap = (installedRaw?.plugins ?? installedRaw ?? {}) as Record<\n string,\n InstalledEntry[]\n >;\n const settings = await readJson<{ enabledPlugins?: Record<string, boolean> }>(\n join(homeClaude, \"settings.json\"),\n );\n const enabledMap = settings?.enabledPlugins ?? {};\n let pluginCount = 0;\n for (const [pluginKey, entries] of Object.entries(pluginsMap)) {\n const entry = Array.isArray(entries) ? entries[0] : undefined;\n if (!entry?.installPath) continue;\n pluginCount += 1;\n const pluginName = pluginKey.split(\"@\")[0];\n const enabled = enabledMap[pluginKey] !== false;\n const root = entry.installPath;\n\n // Layouts vary: some plugins keep agents/skills in agents/ + skills/\n // subdirs (feature-dev), others at the plugin root listed in plugin.json\n // (voltagent). Take the UNION of both, deduped by file path.\n const manifest = await readJson<{ agents?: string[]; skills?: string[] }>(\n join(root, \".claude-plugin\", \"plugin.json\"),\n );\n\n const agentFiles = new Set<string>();\n for (const f of await listNames(join(root, \"agents\"))) {\n if (f.endsWith(\".md\")) agentFiles.add(join(root, \"agents\", f));\n }\n for (const rel of manifest?.agents ?? []) agentFiles.add(join(root, rel));\n const pAgents: ArsenalItem[] = [];\n for (const file of agentFiles) {\n const md = await readText(file);\n if (md !== null)\n pAgents.push(agentItem(parseFrontmatter(md), basename(file, \".md\"), \"plugin\", pluginName));\n }\n\n const skillMds = new Set<string>();\n for (const name of await listNames(join(root, \"skills\"))) {\n skillMds.add(join(root, \"skills\", name, \"SKILL.md\"));\n }\n for (const rel of manifest?.skills ?? []) {\n skillMds.add(rel.endsWith(\".md\") ? join(root, rel) : join(root, rel, \"SKILL.md\"));\n }\n const pSkills: ArsenalItem[] = [];\n for (const md of skillMds) {\n const text = await readText(md);\n if (text !== null)\n pSkills.push(\n skillItem(parseFrontmatter(text), basename(dirname(md)), \"plugin\", pluginName),\n );\n }\n\n const pMcp = mcpItemsFrom(await readJson(join(root, \".mcp.json\")), \"plugin\", pluginName);\n for (const it of [...pSkills, ...pAgents, ...pMcp]) it.enabled = enabled;\n skills.push(...pSkills);\n agents.push(...pAgents);\n mcp.push(...pMcp);\n }\n\n // dedupe skills by scope+source+name (symlink/dir overlaps)\n const seen = new Set<string>();\n const dedupedSkills = skills.filter((s) => {\n const k = `${s.scope}:${s.source ?? \"\"}:${s.name}`;\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n\n const data: ArsenalData = {\n skills: sortItems(dedupedSkills),\n agents: sortItems(agents),\n mcp: sortItems(mcp),\n counts: {\n skills: dedupedSkills.length,\n agents: agents.length,\n mcp: mcp.length,\n plugins: pluginCount,\n },\n scanned_at: new Date(now).toISOString(),\n };\n cache = { key, at: now, data };\n return data;\n}\n","// Reads token_log.jsonl + gate_log.jsonl for the active project AND every\n// project registered in ~/.synthra/projects.json, then computes the\n// dashboard's rendered shape: per-project + global aggregate + recent calls\n// across all projects.\n\nimport { readFile } from \"node:fs/promises\";\n\nimport { readLearnStore } from \"../learn/store.js\";\nimport { effectiveScores, emptyStore, type LearnStore } from \"../learn/usage.js\";\nimport { resolvePaths, type SynthraPaths } from \"../shared/paths.js\";\nimport { estimateCostUsd } from \"../shared/pricing.js\";\nimport { listProjects } from \"../shared/project-registry.js\";\n\nconst AVG_TOKENS_PER_BLOCKED_GREP = 500;\n\nexport interface TokenLogEntry {\n /** Stop-hook-supplied timestamp (preferred). */\n ts?: string;\n /** Server-side fallback added by handleLog when ts isn't provided. */\n written_at?: string;\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n model: string;\n description?: string;\n project: string;\n}\n\nexport interface GateLogEntry {\n ts: string;\n tool: string;\n decision: \"allow\" | \"block\";\n query: string | null;\n /** Truncated to ~240 chars in the log; the full block hint lives only in the deny response. */\n reason?: string;\n /** Full length of the block hint delivered to the agent (v0.4.0+). */\n hint_chars?: number;\n}\n\nexport interface ToolLogEntry {\n ts?: string;\n /** Synthra MCP tool name, e.g. \"graph_continue\", \"graph_read\". */\n tool: string;\n}\n\n/** A codebase-exploration Bash command the observer recorded (observe-only). */\nexport interface BashLogEntry {\n ts: string;\n kind: \"search\" | \"read\" | \"list\";\n tool: string;\n query: string | null;\n confidence: \"low\" | \"medium\" | \"high\" | null;\n /** True when the graph could have served this (a real Moat block, had we blocked Bash). */\n avoidable: boolean;\n command?: string;\n}\n\n/** Count Synthra MCP tool calls by tool name. (#2) */\nexport function countToolCalls(entries: ToolLogEntry[]): Record<string, number> {\n const out: Record<string, number> = {};\n for (const e of entries) {\n if (!e.tool) continue;\n out[e.tool] = (out[e.tool] ?? 0) + 1;\n }\n return out;\n}\n\nexport interface HotFile {\n path: string;\n score: number;\n}\n\n/** Top files by current (decayed-to-now) usage weight — surfaces what the\n * usage-learning layer has learned this repo leans on. Ranked by effective\n * score so recency matters; score rounded for display. */\nexport function topHotFiles(store: LearnStore, nowMs: number, limit = 8): HotFile[] {\n return [...effectiveScores(store, nowMs).entries()]\n .map(([path, score]) => ({ path, score: Math.round(score * 10) / 10 }))\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n\nexport interface ProjectStats {\n path: string;\n name: string;\n last_seen: string | null;\n total_turns: number;\n total_input_tokens: number;\n total_output_tokens: number;\n total_cache_read: number;\n total_cache_create: number;\n total_gate_calls: number;\n blocked_count: number;\n estimated_tokens_saved: number;\n estimated_cost_usd: number;\n total_tool_calls: number;\n tool_calls: Record<string, number>;\n /** Observe-only: codebase-exploration Bash calls (the Moat's terminal blind spot). */\n bash_explorations: number;\n /** Of those, how many the graph could have served (a would-be Moat block). */\n bash_avoidable: number;\n hot_files: HotFile[];\n hot_files_total: number;\n models: Record<string, number>;\n}\n\nexport interface RecentTurn {\n ts: string;\n project_name: string;\n project_path: string;\n input: number;\n output: number;\n cache_read: number;\n cache_create: number;\n model: string;\n cost_usd: number;\n}\n\nexport interface RecentGate {\n ts: string;\n project_name: string;\n project_path: string;\n tool: string;\n decision: \"allow\" | \"block\";\n query: string | null;\n}\n\nexport interface RecentBash {\n ts: string;\n project_name: string;\n project_path: string;\n kind: \"search\" | \"read\" | \"list\";\n tool: string;\n query: string | null;\n confidence: \"low\" | \"medium\" | \"high\" | null;\n avoidable: boolean;\n}\n\nexport interface DashboardData {\n active: {\n project_root: string;\n project_name: string;\n stats: ProjectStats;\n };\n global: {\n project_count: number;\n total_turns: number;\n total_input_tokens: number;\n total_output_tokens: number;\n total_cache_read: number;\n total_cache_create: number;\n total_gate_calls: number;\n blocked_count: number;\n estimated_tokens_saved: number;\n saved_percent: number;\n estimated_cost_usd: number;\n total_tool_calls: number;\n tool_calls: Record<string, number>;\n bash_explorations: number;\n bash_avoidable: number;\n };\n projects: ProjectStats[];\n recent_turns: RecentTurn[];\n recent_gates: RecentGate[];\n recent_bash: RecentBash[];\n}\n\nasync function readJsonl<T>(path: string): Promise<T[]> {\n try {\n const text = await readFile(path, \"utf8\");\n return text\n .split(/\\r?\\n/)\n .filter((l) => l.length > 0)\n .map((l) => {\n try {\n return JSON.parse(l) as T;\n } catch {\n return null;\n }\n })\n .filter((v): v is T => v !== null);\n } catch {\n return [];\n }\n}\n\nfunction basename(p: string): string {\n const parts = p.split(/[\\\\/]/);\n return parts[parts.length - 1] || p;\n}\n\ninterface ProjectFiles {\n path: string;\n name: string;\n last_seen: string | null;\n tokens: TokenLogEntry[];\n gates: GateLogEntry[];\n tools: ToolLogEntry[];\n bash: BashLogEntry[];\n learn: LearnStore;\n}\n\nfunction summarize(p: ProjectFiles): ProjectStats {\n let totalIn = 0;\n let totalOut = 0;\n let totalCacheRead = 0;\n let totalCacheCreate = 0;\n let costUsd = 0;\n const models: Record<string, number> = {};\n\n for (const t of p.tokens) {\n totalIn += t.input_tokens ?? 0;\n totalOut += t.output_tokens ?? 0;\n totalCacheRead += t.cache_read_input_tokens ?? 0;\n totalCacheCreate += t.cache_creation_input_tokens ?? 0;\n costUsd += estimateCostUsd(t);\n if (t.model) models[t.model] = (models[t.model] ?? 0) + 1;\n }\n\n const blocked = p.gates.filter((g) => g.decision === \"block\").length;\n const saved = blocked * AVG_TOKENS_PER_BLOCKED_GREP;\n const now = Date.now();\n\n return {\n path: p.path,\n name: p.name,\n last_seen: p.last_seen,\n total_turns: p.tokens.length,\n total_input_tokens: totalIn,\n total_output_tokens: totalOut,\n total_cache_read: totalCacheRead,\n total_cache_create: totalCacheCreate,\n total_gate_calls: p.gates.length,\n blocked_count: blocked,\n estimated_tokens_saved: saved,\n estimated_cost_usd: Math.round(costUsd * 100) / 100,\n total_tool_calls: p.tools.length,\n tool_calls: countToolCalls(p.tools),\n bash_explorations: p.bash.length,\n bash_avoidable: p.bash.filter((b) => b.avoidable).length,\n hot_files: topHotFiles(p.learn, now),\n hot_files_total: effectiveScores(p.learn, now).size,\n models,\n };\n}\n\n// Dedupe is ON by default; set SYN_DASHBOARD_DEDUPE=0 (or \"off\"/\"false\") to see\n// every raw token-log entry — including duplicates a co-installed AI tool's Stop\n// hook may write to the same token_log.jsonl. (#7)\nfunction dedupeEnabled(): boolean {\n const v = process.env.SYN_DASHBOARD_DEDUPE;\n return v !== \"0\" && v !== \"off\" && v !== \"false\";\n}\n\nasync function loadProjectFiles(\n path: string,\n name: string,\n lastSeen: string | null,\n): Promise<ProjectFiles> {\n const paths = resolvePaths(path);\n const [rawTokens, gates, tools, bash, learn] = await Promise.all([\n readJsonl<TokenLogEntry>(paths.tokenLog),\n readJsonl<GateLogEntry>(paths.gateLog),\n readJsonl<ToolLogEntry>(paths.toolLog),\n readJsonl<BashLogEntry>(paths.bashLog),\n readLearnStore(paths.learnStore),\n ]);\n const tokens = dedupeEnabled() ? dedupeTokens(rawTokens) : rawTokens;\n return { path, name, last_seen: lastSeen, tokens, gates, tools, bash, learn };\n}\n\n/**\n * Collapse duplicate token-log entries from co-installed AI tools.\n *\n * Synthra is friendly with other tools that share the .synthra-graph/\n * token_log.jsonl shape — if a second tool's Stop hook also writes to\n * it, both fire on the same turn and emit nearly-identical entries\n * within ~10ms, double-counting every metric in the dashboard.\n *\n * Strategy: group by (project, usage counts, second-rounded timestamp);\n * inside a group, keep the entry with the most credible model field —\n * a real Claude model > \"<synthetic>\" > empty.\n */\nfunction dedupeTokens(entries: TokenLogEntry[]): TokenLogEntry[] {\n const score = (model: string | undefined): number => {\n if (!model) return 0;\n if (model === \"<synthetic>\") return 1;\n return 2; // real model name\n };\n\n const groups = new Map<string, TokenLogEntry[]>();\n for (const e of entries) {\n const ts = e.ts ?? e.written_at ?? \"\";\n const second = ts.slice(0, 19); // YYYY-MM-DDTHH:mm:ss\n const key = [\n e.project ?? \"\",\n e.input_tokens ?? 0,\n e.output_tokens ?? 0,\n e.cache_creation_input_tokens ?? 0,\n e.cache_read_input_tokens ?? 0,\n second,\n ].join(\"|\");\n const arr = groups.get(key) ?? [];\n arr.push(e);\n groups.set(key, arr);\n }\n\n const out: TokenLogEntry[] = [];\n for (const arr of groups.values()) {\n if (arr.length === 1) {\n out.push(arr[0]!);\n continue;\n }\n arr.sort((a, b) => score(b.model) - score(a.model));\n out.push(arr[0]!);\n }\n\n // Preserve chronological order in the per-project list.\n out.sort((a, b) => {\n const at = a.ts ?? a.written_at ?? \"\";\n const bt = b.ts ?? b.written_at ?? \"\";\n return at.localeCompare(bt);\n });\n return out;\n}\n\nexport async function computeDashboardData(\n activePaths: SynthraPaths,\n recentN = 500,\n): Promise<DashboardData> {\n const registered = await listProjects();\n\n // Always include the active project, even if not yet in the registry.\n const activePath = activePaths.projectRoot;\n const activeName = basename(activePath);\n const knownPaths = new Set(registered.map((p) => p.path));\n const allEntries: Array<{ path: string; name: string; last_seen: string | null }> = [\n ...registered.map((p) => ({ path: p.path, name: p.name, last_seen: p.last_seen })),\n ];\n if (!knownPaths.has(activePath)) {\n allEntries.unshift({ path: activePath, name: activeName, last_seen: null });\n }\n\n const loaded = await Promise.all(\n allEntries.map((e) => loadProjectFiles(e.path, e.name, e.last_seen)),\n );\n\n const projects = loaded\n .map(summarize)\n .sort(\n (a, b) =>\n b.total_input_tokens +\n b.total_output_tokens -\n (a.total_input_tokens + a.total_output_tokens),\n );\n\n const activeFiles = loaded.find((p) => p.path === activePath) ?? {\n path: activePath,\n name: activeName,\n last_seen: null,\n tokens: [],\n gates: [],\n tools: [],\n bash: [],\n learn: emptyStore(),\n };\n const activeStats = summarize(activeFiles);\n\n // Global aggregates\n let g_in = 0,\n g_out = 0,\n g_cr = 0,\n g_cc = 0,\n g_gate = 0,\n g_block = 0,\n g_cost = 0,\n g_turns = 0,\n g_tools = 0,\n g_bash = 0,\n g_bash_avoid = 0;\n const g_tool_calls: Record<string, number> = {};\n for (const s of projects) {\n g_turns += s.total_turns;\n g_in += s.total_input_tokens;\n g_out += s.total_output_tokens;\n g_cr += s.total_cache_read;\n g_cc += s.total_cache_create;\n g_gate += s.total_gate_calls;\n g_block += s.blocked_count;\n g_cost += s.estimated_cost_usd;\n g_tools += s.total_tool_calls;\n g_bash += s.bash_explorations;\n g_bash_avoid += s.bash_avoidable;\n for (const [k, v] of Object.entries(s.tool_calls)) g_tool_calls[k] = (g_tool_calls[k] ?? 0) + v;\n }\n const g_saved = g_block * AVG_TOKENS_PER_BLOCKED_GREP;\n const g_used = g_in + g_out + g_cc;\n const g_saved_pct = g_used + g_saved > 0 ? (g_saved / (g_used + g_saved)) * 100 : 0;\n\n // Recent turns + gates + bash hunts across all projects, sorted by ts descending\n const allTurns: RecentTurn[] = [];\n const allGates: RecentGate[] = [];\n const allBash: RecentBash[] = [];\n for (const p of loaded) {\n for (const b of p.bash) {\n allBash.push({\n ts: b.ts,\n project_name: p.name,\n project_path: p.path,\n kind: b.kind,\n tool: b.tool,\n query: b.query,\n confidence: b.confidence,\n avoidable: b.avoidable,\n });\n }\n for (const t of p.tokens) {\n allTurns.push({\n // Fall back to written_at — the Stop hook today posts entries without\n // a `ts` field, and the server tags them with written_at on receive.\n ts: t.ts ?? t.written_at ?? \"\",\n project_name: p.name,\n project_path: p.path,\n input: t.input_tokens ?? 0,\n output: t.output_tokens ?? 0,\n cache_read: t.cache_read_input_tokens ?? 0,\n cache_create: t.cache_creation_input_tokens ?? 0,\n model: t.model ?? \"\",\n cost_usd: Math.round(estimateCostUsd(t) * 1000) / 1000,\n });\n }\n for (const gate of p.gates) {\n allGates.push({\n ts: gate.ts,\n project_name: p.name,\n project_path: p.path,\n tool: gate.tool,\n decision: gate.decision,\n query: gate.query,\n });\n }\n }\n allTurns.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n allGates.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n allBash.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n\n return {\n active: {\n project_root: activePath,\n project_name: activeName,\n stats: activeStats,\n },\n global: {\n project_count: projects.length,\n total_turns: g_turns,\n total_input_tokens: g_in,\n total_output_tokens: g_out,\n total_cache_read: g_cr,\n total_cache_create: g_cc,\n total_gate_calls: g_gate,\n blocked_count: g_block,\n estimated_tokens_saved: g_saved,\n saved_percent: Math.round(g_saved_pct * 10) / 10,\n estimated_cost_usd: Math.round(g_cost * 100) / 100,\n total_tool_calls: g_tools,\n tool_calls: g_tool_calls,\n bash_explorations: g_bash,\n bash_avoidable: g_bash_avoid,\n },\n projects,\n recent_turns: allTurns.slice(0, recentN),\n recent_gates: allGates.slice(0, recentN),\n recent_bash: allBash.slice(0, recentN),\n };\n}\n\n// Legacy shapes from the M2 stub — kept for compat.\nexport interface TurnBreakdown {\n systemPromptTokens: number;\n conversationHistoryTokens: number;\n synthraPackTokens: number;\n userMessageTokens: number;\n responseTokens: number;\n totalTokens: number;\n costUsd: number;\n}\n\nexport interface SavingsDelta {\n withSynthra: TurnBreakdown;\n estimatedWithoutSynthra: TurnBreakdown;\n savedUsd: number;\n savedPercent: number;\n}\n\nexport function computeDelta(breakdown: TurnBreakdown, blockedGreps: number): SavingsDelta {\n const savedTokens = blockedGreps * AVG_TOKENS_PER_BLOCKED_GREP;\n const without: TurnBreakdown = {\n ...breakdown,\n conversationHistoryTokens: breakdown.conversationHistoryTokens + savedTokens,\n totalTokens: breakdown.totalTokens + savedTokens,\n costUsd: breakdown.costUsd + (savedTokens / 1_000_000) * 3,\n };\n const savedUsd = without.costUsd - breakdown.costUsd;\n const savedPercent = without.totalTokens > 0 ? (savedTokens / without.totalTokens) * 100 : 0;\n return {\n withSynthra: breakdown,\n estimatedWithoutSynthra: without,\n savedUsd,\n savedPercent: Math.round(savedPercent * 10) / 10,\n };\n}\n","// I/O for the usage-learning layer. Two files, both in .synthra-graph/\n// (gitignored, machine-local — usage is per-developer):\n// - access_log.jsonl : append-only raw events (source of truth, replayable)\n// - learn_store.json : derived decayed aggregate (a cache of the log)\n//\n// Every read is best-effort: a missing / corrupt / schema-mismatched file yields\n// an empty store, so the ranker degrades to its deterministic behavior.\n\nimport { appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { emptyStore, LEARN_SCHEMA_VERSION, type AccessEvent, type LearnStore } from \"./usage.js\";\n\nexport async function readLearnStore(path: string): Promise<LearnStore> {\n try {\n const raw = await readFile(path, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<LearnStore>;\n if (\n parsed.schema_version !== LEARN_SCHEMA_VERSION ||\n typeof parsed.files !== \"object\" ||\n parsed.files === null\n ) {\n return emptyStore();\n }\n return {\n schema_version: LEARN_SCHEMA_VERSION,\n asOf: typeof parsed.asOf === \"string\" ? parsed.asOf : emptyStore().asOf,\n files: parsed.files as LearnStore[\"files\"],\n };\n } catch {\n return emptyStore();\n }\n}\n\nexport async function writeLearnStore(path: string, store: LearnStore): Promise<void> {\n try {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, JSON.stringify(store, null, 2) + \"\\n\", \"utf8\");\n } catch {\n // Persistence is best-effort; the log remains the source of truth.\n }\n}\n\nexport async function readAccessLog(path: string): Promise<AccessEvent[]> {\n try {\n const raw = await readFile(path, \"utf8\");\n const out: AccessEvent[] = [];\n for (const line of raw.split(\"\\n\")) {\n const t = line.trim();\n if (!t) continue;\n try {\n const ev = JSON.parse(t) as AccessEvent;\n if (\n ev &&\n typeof ev.ts === \"string\" &&\n typeof ev.path === \"string\" &&\n typeof ev.source === \"string\"\n ) {\n out.push(ev);\n }\n } catch {\n // Skip a malformed line rather than failing the whole replay.\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\nexport async function appendAccess(path: string, ev: AccessEvent): Promise<void> {\n try {\n await mkdir(dirname(path), { recursive: true });\n await appendFile(path, JSON.stringify(ev) + \"\\n\", \"utf8\");\n } catch {\n // Best-effort; never fail a tool call over telemetry.\n }\n}\n","// Pure decay/aggregate core for the usage-learning signal (\"the more it's used,\n// the smarter it gets\"). No I/O here — persistence + the raw access log live in\n// store.ts, and the stateful wrapper in runtime.ts.\n//\n// Files the AI actually pulls (graph_read) or edits (graph_register_edit) accrue\n// a time-decayed weight. retrieve() applies a bounded, capped boost so genuinely\n// \"hot\" files surface first — never dominating the deterministic ranker.\n\nexport type AccessSource = \"read\" | \"register_edit\" | \"continue\";\n\nexport interface AccessEvent {\n ts: string; // ISO timestamp\n path: string; // canonical FileNode.path (\"\" for source === \"continue\")\n source: AccessSource;\n query?: string; // only set for source === \"continue\" — reserved fuel for v2/v3\n}\n\nexport interface FileStat {\n /** Raw access count (never decayed) — diagnostic only. */\n count: number;\n /** Decayed weight as of `lastTs`. */\n decayed: number;\n /** ISO timestamp of the most recent folded event. */\n lastTs: string;\n}\n\nexport interface LearnStore {\n schema_version: number;\n asOf: string;\n files: Record<string, FileStat>;\n}\n\nexport const LEARN_SCHEMA_VERSION = 1;\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\n/** Usage-decay half-life. Env-overridable for dogfood tuning. */\nexport function halfLifeMs(): number {\n const env = Number(process.env.SYN_LEARN_HALFLIFE_DAYS);\n const days = Number.isFinite(env) && env > 0 ? env : 7;\n return days * DAY_MS;\n}\n\n/** Per-source accrual weight. `continue` never contributes to frequency — it's\n * logged only as query→outcome fuel for a future mechanism. */\nexport function weightFor(source: AccessSource): number {\n switch (source) {\n case \"register_edit\":\n return 2;\n case \"read\":\n return 1;\n default:\n return 0;\n }\n}\n\nexport function emptyStore(): LearnStore {\n return {\n schema_version: LEARN_SCHEMA_VERSION,\n asOf: new Date(0).toISOString(),\n files: {},\n };\n}\n\n/** exp(-λ·Δt) decay multiplier from `fromTs` forward to `toMs` epoch ms. */\nfunction decayFactor(fromTs: string, toMs: number, hl: number): number {\n const fromMs = Date.parse(fromTs);\n if (!Number.isFinite(fromMs)) return 1;\n const dt = toMs - fromMs;\n if (dt <= 0) return 1;\n return Math.exp(-(Math.LN2 / hl) * dt);\n}\n\n/** Fold one access event into the store: decay the file's prior weight up to the\n * event's timestamp, then add the event weight. Mutates and returns `store`.\n * Zero-weight (`continue`) and path-less events are ignored. Malformed\n * timestamps are dropped so the function stays deterministic. */\nexport function foldEvent(store: LearnStore, ev: AccessEvent): LearnStore {\n const w = weightFor(ev.source);\n if (w <= 0 || !ev.path) return store;\n const tMs = Date.parse(ev.ts);\n if (!Number.isFinite(tMs)) return store;\n\n const hl = halfLifeMs();\n const prev = store.files[ev.path];\n if (prev) {\n const decayed = prev.decayed * decayFactor(prev.lastTs, tMs, hl) + w;\n store.files[ev.path] = { count: prev.count + 1, decayed, lastTs: ev.ts };\n } else {\n store.files[ev.path] = { count: 1, decayed: w, lastTs: ev.ts };\n }\n return store;\n}\n\n/** Decayed weights as of `nowMs`, keyed by path. Effectively-zero entries are\n * omitted so an old/cold store contributes nothing. */\nexport function effectiveScores(store: LearnStore, nowMs: number): Map<string, number> {\n const hl = halfLifeMs();\n const out = new Map<string, number>();\n for (const [path, stat] of Object.entries(store.files)) {\n const eff = stat.decayed * decayFactor(stat.lastTs, nowMs, hl);\n if (eff > 0.01) out.set(path, eff);\n }\n return out;\n}\n\n/** Rebuild a store by replaying a raw access-log stream (the source of truth). */\nexport function recomputeFromLog(events: AccessEvent[]): LearnStore {\n const store = emptyStore();\n for (const ev of events) foldEvent(store, ev);\n return store;\n}\n","// Resolves Synthra's storage locations inside a project root.\n\nimport { join } from \"node:path\";\n\nexport interface SynthraPaths {\n projectRoot: string;\n graphDir: string;\n contextDir: string;\n infoGraph: string;\n symbolIndex: string;\n sessionState: string;\n activityLog: string;\n tokenLog: string;\n gateLog: string;\n bashLog: string;\n toolLog: string;\n accessLog: string;\n learnStore: string;\n parseCache: string;\n mcpPort: string;\n mcpServerLog: string;\n mcpServerErrLog: string;\n contextStore: string;\n contextMd: string;\n branchesDir: string;\n claudeDir: string;\n claudeSettings: string;\n claudeHooksDir: string;\n claudeMd: string;\n gitignore: string;\n}\n\nexport function resolvePaths(projectRoot: string): SynthraPaths {\n const graphDir = join(projectRoot, \".synthra-graph\");\n const contextDir = join(projectRoot, \".synthra\");\n const claudeDir = join(projectRoot, \".claude\");\n\n return {\n projectRoot,\n graphDir,\n contextDir,\n infoGraph: join(graphDir, \"info_graph.json\"),\n symbolIndex: join(graphDir, \"symbol_index.json\"),\n sessionState: join(graphDir, \"session.json\"),\n activityLog: join(graphDir, \"activity.jsonl\"),\n tokenLog: join(graphDir, \"token_log.jsonl\"),\n gateLog: join(graphDir, \"gate_log.jsonl\"),\n bashLog: join(graphDir, \"bash_log.jsonl\"),\n toolLog: join(graphDir, \"tool_log.jsonl\"),\n accessLog: join(graphDir, \"access_log.jsonl\"),\n learnStore: join(graphDir, \"learn_store.json\"),\n parseCache: join(graphDir, \"parse_cache.json\"),\n mcpPort: join(graphDir, \"mcp_port\"),\n mcpServerLog: join(graphDir, \"mcp_server.log\"),\n mcpServerErrLog: join(graphDir, \"mcp_server.err.log\"),\n contextStore: join(contextDir, \"context-store.json\"),\n contextMd: join(contextDir, \"CONTEXT.md\"),\n branchesDir: join(contextDir, \"branches\"),\n claudeDir,\n claudeSettings: join(claudeDir, \"settings.local.json\"),\n claudeHooksDir: join(claudeDir, \"hooks\"),\n claudeMd: join(projectRoot, \"CLAUDE.md\"),\n gitignore: join(projectRoot, \".gitignore\"),\n };\n}\n","// Approximate per-million-token pricing for Claude models, in USD.\n// Sourced from Anthropic's published rates. Tilde everywhere — these can shift.\n//\n// Used only for the dashboard's \"~$X\" estimate; not for billing.\n\nexport interface ModelPricing {\n /** Cost per 1M raw-input tokens. */\n input: number;\n /** Cost per 1M output tokens. */\n output: number;\n /** Cost per 1M cache-read tokens (typically ~10% of input). */\n cacheRead: number;\n /** Cost per 1M cache-creation tokens (typically input × 1.25). */\n cacheCreate: number;\n}\n\nconst PRICING: Record<string, ModelPricing> = {\n // Fable-class — frontier tier (same 0.1× cache-read / 1.25× cache-write\n // multipliers as the rest of the lineup, on a $10 input base)\n \"claude-fable-5\": { input: 10, output: 50, cacheRead: 1, cacheCreate: 12.5 },\n // Opus-class models — premium tier\n \"claude-opus-4-7\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n \"claude-opus-4-6\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n \"claude-opus-4-5\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n // Sonnet-class — workhorse\n \"claude-sonnet-4-6\": { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 },\n \"claude-sonnet-4-5\": { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 },\n // Haiku-class — fast and cheap\n \"claude-haiku-4-5\": { input: 1, output: 5, cacheRead: 0.1, cacheCreate: 1.25 },\n};\n\nconst FALLBACK: ModelPricing = { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 };\n\nexport function pricingFor(model: string | undefined | null): ModelPricing {\n if (!model) return FALLBACK;\n const direct = PRICING[model];\n if (direct) return direct;\n // Loose prefix match: \"claude-fable-…\" (incl. the \"[1m]\" long-context\n // variant) / \"claude-opus-…\" / \"claude-sonnet-…\" / \"claude-haiku-…\"\n if (model.includes(\"fable\")) return PRICING[\"claude-fable-5\"] ?? FALLBACK;\n if (model.includes(\"opus\")) return PRICING[\"claude-opus-4-7\"] ?? FALLBACK;\n if (model.includes(\"sonnet\")) return PRICING[\"claude-sonnet-4-6\"] ?? FALLBACK;\n if (model.includes(\"haiku\")) return PRICING[\"claude-haiku-4-5\"] ?? FALLBACK;\n return FALLBACK;\n}\n\nexport interface UsageRecord {\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n model?: string;\n}\n\n/** Approximate USD cost of a single usage record. */\nexport function estimateCostUsd(usage: UsageRecord): number {\n const p = pricingFor(usage.model);\n return (\n (usage.input_tokens / 1_000_000) * p.input +\n (usage.output_tokens / 1_000_000) * p.output +\n ((usage.cache_read_input_tokens ?? 0) / 1_000_000) * p.cacheRead +\n ((usage.cache_creation_input_tokens ?? 0) / 1_000_000) * p.cacheCreate\n );\n}\n","// Global registry of projects that have run `syn .` on this machine.\n// Stored at ~/.synthra/projects.json so the dashboard can enumerate them\n// without walking the filesystem.\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nconst REGISTRY_DIR = join(homedir(), \".synthra\");\nconst REGISTRY_PATH = join(REGISTRY_DIR, \"projects.json\");\nconst SCHEMA_VERSION = 1;\n\nexport interface ProjectRegistryEntry {\n path: string; // absolute project root\n name: string; // basename for display\n first_seen: string; // ISO timestamp\n last_seen: string; // ISO timestamp\n}\n\ninterface Registry {\n schema_version: number;\n projects: ProjectRegistryEntry[];\n}\n\nasync function readRegistry(): Promise<Registry> {\n try {\n const raw = await readFile(REGISTRY_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<Registry>;\n if (!Array.isArray(parsed.projects)) return { schema_version: SCHEMA_VERSION, projects: [] };\n return { schema_version: parsed.schema_version ?? SCHEMA_VERSION, projects: parsed.projects };\n } catch {\n return { schema_version: SCHEMA_VERSION, projects: [] };\n }\n}\n\nasync function writeRegistry(registry: Registry): Promise<void> {\n await mkdir(dirname(REGISTRY_PATH), { recursive: true });\n await writeFile(REGISTRY_PATH, JSON.stringify(registry, null, 2) + \"\\n\", \"utf8\");\n}\n\n/** Upsert this project's entry. Updates `last_seen`; preserves `first_seen`. */\nexport async function recordProject(projectRoot: string): Promise<void> {\n const now = new Date().toISOString();\n const registry = await readRegistry();\n const existing = registry.projects.find((p) => p.path === projectRoot);\n if (existing) {\n existing.last_seen = now;\n existing.name = basename(projectRoot);\n } else {\n registry.projects.push({\n path: projectRoot,\n name: basename(projectRoot),\n first_seen: now,\n last_seen: now,\n });\n }\n try {\n await writeRegistry(registry);\n } catch {\n // Registry is best-effort — a write failure shouldn't block the session.\n }\n}\n\n/** Remove this project's entry (exact-path match). Best-effort — a missing or\n * unwritable registry is not an error. `registryPath` is overridable for tests. */\nexport async function forgetProject(\n projectRoot: string,\n registryPath = REGISTRY_PATH,\n): Promise<boolean> {\n try {\n const raw = await readFile(registryPath, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<Registry>;\n const projects = Array.isArray(parsed.projects) ? parsed.projects : [];\n const filtered = projects.filter((p) => p.path !== projectRoot);\n if (filtered.length === projects.length) return false;\n const next: Registry = {\n schema_version: parsed.schema_version ?? SCHEMA_VERSION,\n projects: filtered,\n };\n await writeFile(registryPath, JSON.stringify(next, null, 2) + \"\\n\", \"utf8\");\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function listProjects(): Promise<ProjectRegistryEntry[]> {\n const registry = await readRegistry();\n // Sort by last_seen descending so the most active project surfaces first.\n return registry.projects\n .slice()\n .sort((a, b) => (a.last_seen > b.last_seen ? -1 : a.last_seen < b.last_seen ? 1 : 0));\n}\n\nexport { REGISTRY_PATH, REGISTRY_DIR };\n","<!doctype html>\n<html lang=\"en\" class=\"dark\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Synthra · Dashboard</title>\n <link rel=\"icon\" href=\"/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap\"\n rel=\"stylesheet\"\n />\n <script type=\"module\" crossorigin>(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel=\"modulepreload\"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t<e.length;t++)e[t]()}function m(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function h(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var g=1<<24,_=1024,v=2048,y=4096,b=8192,ee=16384,x=32768,te=1<<25,ne=65536,re=1<<19,ie=1<<20,ae=1<<25,oe=65536,se=1<<21,ce=1<<22,le=1<<23,ue=Symbol(`$state`),de=Symbol(`legacy props`),fe=Symbol(``),pe=Symbol(`attributes`),me=Symbol(`class`),he=Symbol(`style`),ge=Symbol(`text`),_e=Symbol(`form reset`),ve=new class extends Error{name=`StaleReactionError`;message=\"The reaction that called `getAbortSignal()` was re-run or destroyed\"},ye=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function be(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function xe(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function Se(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function Ce(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function we(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Te(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Ee(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function De(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Oe(){throw Error(`https://svelte.dev/e/set_context_after_init`)}function ke(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Ae(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function je(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Me(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Ne={},S=Symbol(`uninitialized`),Pe=`http://www.w3.org/1999/xhtml`,Fe=`http://www.w3.org/2000/svg`,Ie=`@attach`;function Le(){console.warn(`https://svelte.dev/e/derived_inert`)}function Re(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function ze(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Be(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var C=!1;function Ve(e){C=e}var w;function T(e){if(e===null)throw Re(),Ne;return w=e}function He(){return T(Cn(w))}function E(e){if(C){if(Cn(w)!==null)throw Re(),Ne;w=e}}function Ue(e=1){if(C){for(var t=e,n=w;t--;)n=Cn(n);w=n}}function We(e=!0){for(var t=0,n=w;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else (r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=Cn(n);e&&n.remove(),n=i}}function Ge(e){if(!e||e.nodeType!==8)throw Re(),Ne;return e.data}function Ke(e){return e===this.v}function qe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Je(e){return!qe(e,this.v)}var Ye=!1,Xe=!1;function Ze(){Xe=!0}var D=null;function Qe(e){D=e}function $e(e){return it(`getContext`).get(e)}function et(e,t){let n=it(`setContext`);if(Ye){var r=V.f;!B&&r&32&&!D.i||Oe()}return n.set(e,t),t}function tt(e){return it(`hasContext`).has(e)}function nt(){return it(`getAllContexts`)}function O(e,t=!1,n){D={p:D,i:!1,c:null,e:null,s:e,x:null,r:V,l:Xe&&!t?{s:null,u:null,$:[]}:null}}function k(e){var t=D,n=t.e;if(n!==null){t.e=null;for(var r of n)zn(r)}return e!==void 0&&(t.x=e),t.i=!0,D=t.p,e??{}}function rt(){return!Xe||D!==null&&D.l===null}function it(e){return D===null&&be(e),D.c??=new Map(at(D)||void 0)}function at(e){let t=e.p;for(;t!==null;){let e=t.c;if(e!==null)return e;t=t.p}return null}var ot=[];function st(){var e=ot;ot=[],p(e)}function ct(e){if(ot.length===0&&!Vt){var t=ot;queueMicrotask(()=>{t===ot&&st()})}ot.push(e)}function lt(){for(;ot.length>0;)st()}function ut(e){var t=V;if(t===null)return B.f|=le,e;if(!(t.f&32768)&&!(t.f&4))throw e;dt(e,t)}function dt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var ft=~(v|y|_);function A(e,t){e.f=e.f&ft|t}function pt(e){e.f&512||e.deps===null?A(e,_):A(e,y)}function mt(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=oe,mt(t.deps))}function ht(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),mt(e.deps),A(e,_)}var gt=!1,_t=!1;function vt(e){var t=_t;try{return _t=!1,[e(),_t]}finally{_t=t}}function yt(e){let t=0,n=sn(0),r;return()=>{In()&&(H(n),Gn(()=>(t===0&&(r=Mr(()=>e(()=>dn(n)))),t+=1,()=>{ct(()=>{--t,t===0&&(r?.(),r=void 0,dn(n))})})))}}var bt=ne|re;function xt(e,t,n,r){new St(e,t,n,r)}var St=class{parent;is_pending=!1;transform_error;#e;#t=C?w:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=yt(()=>(this.#m=sn(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=V;t.b=this,t.f|=128,n(e)},this.parent=V.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=Kn(()=>{if(C){let e=this.#t;He();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},bt),C&&(this.#e=w)}#g(){try{this.#a=Jn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=Jn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=Jn(()=>e(this.#e)),ct(()=>{var e=this.#c=document.createDocumentFragment(),t=xn();e.append(t),this.#a=this.#x(()=>Jn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,er(this.#o,()=>{this.#o=null}),this.#b(M))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=Jn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();ir(this.#a,e);let t=this.#n.pending;this.#o=Jn(()=>t(this.#e))}else this.#b(M)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){ht(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=V,n=B,r=D;dr(this.#i),ur(this.#i),Qe(this.#i.ctx);try{return qt.ensure(),e()}catch(e){return ut(e),null}finally{dr(t),ur(n),Qe(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&er(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,ct(()=>{this.#d=!1,this.#m&&ln(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),H(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;M?.is_fork?(this.#a&&M.skip_effect(this.#a),this.#o&&M.skip_effect(this.#o),this.#s&&M.skip_effect(this.#s),M.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(z(this.#a),null),this.#o&&=(z(this.#o),null),this.#s&&=(z(this.#s),null),C&&(T(this.#t),Ue(),T(We()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Be();return}r=!0,i&&Me(),this.#s!==null&&er(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){dt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return Jn(()=>{var t=V;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return dt(e,this.#i.parent),null}}))};ct(()=>{var t;try{t=this.transform_error(e)}catch(e){dt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>dt(e,this.#i&&this.#i.parent)):o(t)})}};function Ct(e,t,n,r){let i=rt()?Dt:At;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=V,c=wt(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){dt(e,s)}Tt()}}var d=Et();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>kt(e))).then(u).catch(e=>dt(e,s)).finally(d)}l?l.then(()=>{c(),f(),Tt()}):f()}function wt(){var e=V,t=B,n=D,r=M;return function(i=!0){dr(e),ur(t),Qe(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function Tt(e=!0){dr(null),ur(null),Qe(null),e&&M?.deactivate()}function Et(){var e=V,t=e.b,n=M,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function Dt(e){var t=2|v;return V!==null&&(V.f|=re),{ctx:D,deps:null,effects:null,equals:Ke,f:t,fn:e,reactions:null,rv:0,v:S,wv:0,parent:V,ac:null}}var Ot=Symbol(`obsolete`);function kt(e,t,n){let r=V;r===null&&xe();var i=void 0,a=sn(S),o=!B,s=new Set;return Wn(()=>{var t=V,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==ve&&n.reject(e)}).finally(Tt)}catch(e){n.reject(e),Tt()}var c=M;if(o){if(t.f&32768)var l=Et();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Ot);else for(let e of s.values())e.reject(Ot);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Ot&&(c.activate(),t?(a.f|=le,ln(a,t)):(a.f&8388608&&(a.f^=le),ln(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),Ln(()=>{for(let e of s)e.reject(Ot)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function j(e){let t=Dt(e);return Ye||pr(t),t}function At(e){let t=Dt(e);return t.equals=Je,t}function jt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)z(t[n])}}function Mt(e){var t,n=V,r=e.parent;if(!sr&&r!==null&&e.v!==S&&r.f&24576)return Le(),e.v;dr(r);try{e.f&=~oe,jt(e),t=Tr(e)}finally{dr(n)}return t}function Nt(e){var t=Mt(e);if(!e.equals(t)&&(e.wv=Sr(),(!M?.is_fork||e.deps===null)&&(M===null?e.v=t:(M.capture(e,t,!0),Rt?.capture(e,t,!0)),e.deps===null))){A(e,_);return}sr||(zt===null?pt(e):(In()||M?.is_fork)&&zt.set(e,t))}function Pt(e){if(e.effects!==null)for(let t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(ve),t.fn!==null&&(t.teardown=f),t.ac=null,Dr(t,0),Xn(t))}function Ft(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Or(t)}var It=null,Lt=null,M=null,Rt=null,zt=null,Bt=null,Vt=!1,Ht=!1,Ut=null,Wt=null,Gt=0,Kt=1,qt=class e{id=Kt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Lt===null?It=Lt=this:(Lt.#n=this,this.#t=Lt),Lt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)A(r,v),t(r);for(r of n.m)A(r,y),t(r)}this.#p.add(e)}#g(){this.#e=!0,Gt++>1e3&&(this.#S(),Yt());for(let e of this.#u)this.#d.delete(e),A(e,v),this.schedule(e);for(let e of this.#d)A(e,y),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Ut=[],r=[],i=Wt=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw nn(e),this.#h()||this.discard(),t}if(M=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Ut=null,Wt=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)tn(e,t);i.length>0&&M.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),Rt=this,Zt(r),Zt(n),Rt=null,this.#s?.resolve();var s=M;if(this.#a===0&&(this.#c.length===0||s!==null)&&(this.#S(),Ye&&(this.#x(),M=s)),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=_;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=_:i&4?t.push(r):Ye&&i&16777224?n.push(r):Cr(r)&&(i&16&&this.#d.add(r),Or(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null)for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),A(i,v),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#S(),M=this,this.#g()}#b(e){for(var t=0;t<e.length;t+=1)ht(e[t],this.#u,this.#d)}capture(e,t,n=!1){e.v!==S&&!this.previous.has(e)&&this.previous.set(e,e.v),e.f&8388608||(this.current.set(e,[t,n]),zt?.set(e,t)),this.is_fork||(e.v=t)}activate(){M=this}deactivate(){M=null,zt=null}flush(){try{Ht=!0,M=this,this.#g()}finally{Gt=0,Bt=null,Ut=null,Wt=null,Ht=!1,M=null,zt=null,an.clear()}}discard(){for(let e of this.#i)e(this);this.#i.clear();for(let e of this.async_deriveds.values())e.reject(Ot);this.#S(),this.#s?.resolve()}register_created_effect(e){this.#l.push(e)}#x(){for(let u=It;u!==null;u=u.#n){var e=u.id<this.id,t=[];for(let[r,[i,a]]of this.current){if(u.current.has(r)){var n=u.current.get(r)[0];if(e&&i!==n)u.current.set(r,[i,a]);else continue}t.push(r)}if(e)for(let[e,t]of this.async_deriveds){let n=u.async_deriveds.get(e);n&&t.promise.then(n.resolve).catch(n.reject)}var r=[...u.current.keys()].filter(e=>!u.current.get(e)[1]);if(!(!u.#e||r.length===0)){var i=r.filter(e=>!this.current.has(e));if(i.length===0)e&&u.discard();else if(t.length>0){if(e)for(let e of this.#p)u.unskip_effect(e,e=>{e.f&4194320?u.schedule(e):u.#b([e])});u.activate();var a=new Set,o=new Map;for(var s of t)Qt(s,i,a,o);o=new Map;var c=[...u.current].filter(([e,t])=>{let n=this.current.get(e);return n?n[0]!==t[0]||n[1]!==t[1]:!0}).map(([e])=>e);if(c.length>0)for(let e of this.#l)!(e.f&155648)&&$t(e,c,o)&&(e.f&4194320?(A(e,v),u.schedule(e)):u.#u.add(e));if(u.#c.length>0&&!u.#m){u.apply();for(var l of u.#c)u.#_(l,[],[]);u.#c=[]}u.deactivate()}}}}increment(e,t){if(this.#a+=1,e){let e=this.#o.get(t)??0;this.#o.set(t,e+1)}}decrement(e,t){if(--this.#a,e){let e=this.#o.get(t)??0;e===1?this.#o.delete(t):this.#o.set(t,e-1)}this.#m||(this.#m=!0,ct(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(M===null){let t=M=new e;!Ht&&!Vt&&ct(()=>{t.#e||t.flush()})}return M}apply(){if(!Ye||!this.is_fork&&this.#t===null&&this.#n===null){zt=null;return}zt=new Map;for(let[e,[t]]of this.current)zt.set(e,t);for(let t=It;t!==null;t=t.#n)if(!(t===this||t.is_fork)){var e=!1;if(t.id<this.id){for(let[n,[,r]]of t.current)if(!r&&this.current.has(n)){e=!0;break}}if(!e)for(let[e,n]of t.previous)zt.has(e)||zt.set(e,n)}}schedule(e){if(Bt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Ut!==null&&t===V&&(Ye||(B===null||!(B.f&2))&&!gt))return;if(n&96){if(!(n&1024))return;t.f^=_}}this.#c.push(t)}#S(){if(this.linked){var e=this.#t,t=this.#n;e===null?It=t:e.#n=t,t===null?Lt=e:t.#t=e,this.linked=!1}}};function Jt(e){var t=Vt;Vt=!0;try{var n;for(e&&(M!==null&&!M.is_fork&&M.flush(),n=e());;){if(lt(),M===null)return n;M.flush()}}finally{Vt=t}}function Yt(){try{Ee()}catch(e){dt(e,Bt)}}var Xt=null;function Zt(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if(!(r.f&24576)&&Cr(r)&&(Xt=new Set,Or(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&$n(r),Xt?.size>0)){an.clear();for(let e of Xt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)Xt.has(n)&&(Xt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Or(n)}}Xt.clear()}}Xt=null}}function Qt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Qt(i,t,n,r):e&4194320&&!(e&2048)&&$t(i,t,r)&&(A(i,v),en(i))}}function $t(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&$t(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function en(e){M.schedule(e)}function tn(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),A(e,_);for(var n=e.first;n!==null;)tn(n,t),n=n.next}}function nn(e){A(e,_);for(var t=e.first;t!==null;)nn(t),t=t.next}var rn=new Set,an=new Map,on=!1;function sn(e,t){return{f:0,v:e,reactions:null,equals:Ke,rv:0,wv:0}}function N(e,t){let n=sn(e,t);return pr(n),n}function cn(e,t=!1,n=!0){let r=sn(e);return t||(r.equals=Je),Xe&&n&&D!==null&&D.l!==null&&(D.l.s??=[]).push(r),r}function P(e,t,n=!1){return B!==null&&(!lr||B.f&131072)&&rt()&&B.f&4325394&&(fr===null||!fr.has(e))&&je(),ln(e,n?pn(t):t,Wt)}function ln(e,t,n=null){if(!e.equals(t)){an.set(e,sr?t:e.v);var r=qt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&Mt(t),zt===null&&pt(t)}e.wv=Sr(),fn(e,v,n),rt()&&V!==null&&V.f&1024&&!(V.f&96)&&(gr===null?_r([e]):gr.push(e)),!r.is_fork&&rn.size>0&&!on&&un()}return t}function un(){on=!1;for(let e of rn){e.f&1024&&A(e,y);let t;try{t=Cr(e)}catch{t=!0}t&&Or(e)}rn.clear()}function dn(e){P(e,e.v+1)}function fn(e,t,n){var r=e.reactions;if(r!==null)for(var i=rt(),a=r.length,o=0;o<a;o++){var s=r[o],c=s.f;if(!(!i&&s===V)){var l=(c&v)===0;if(l&&A(s,t),c&131072)rn.add(s);else if(c&2){var u=s;zt?.delete(u),c&65536||(c&512&&(V===null||!(V.f&2097152))&&(s.f|=oe),fn(u,y,n))}else if(l){var d=s;c&16&&Xt!==null&&Xt.add(d),n===null?en(d):n.push(d)}}}}function pn(t){if(typeof t!=`object`||!t||ue in t)return t;let n=l(t);if(n!==s&&n!==c)return t;var r=new Map,i=e(t),o=N(0),u=null,d=br,f=e=>{if(br===d)return e();var t=B,n=br;ur(null),xr(d);var r=e();return ur(t),xr(n),r};return i&&r.set(`length`,N(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&ke();var i=r.get(t);return i===void 0?f(()=>{var e=N(n.value,u);return r.set(t,e),e}):P(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>N(S,u));r.set(t,e),dn(o)}}else P(n,S),dn(o);return!0},get(e,n,i){if(n===ue)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>N(pn(s?e[n]:S),u)),r.set(n,o)),o!==void 0){var c=H(o);return c===S?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=H(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==S)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ue)return!0;var n=r.get(t),i=n!==void 0&&n.v!==S||Reflect.has(e,t);return(n!==void 0||V!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>N(i?pn(e[t]):S,u)),r.set(t,n)),H(n)===S)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;d<c.v;d+=1){var p=r.get(d+``);p===void 0?d in e&&(p=f(()=>N(S,u)),r.set(d+``,p)):P(p,S)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>N(void 0,u)),P(c,pn(n)),r.set(t,c));else{l=c.v!==S;var m=f(()=>pn(n));P(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&P(g,_+1)}dn(o)}return!0},ownKeys(e){H(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==S});for(var[n,i]of r)i.v!==S&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Ae()}})}function mn(e){try{if(typeof e==`object`&&e&&ue in e)return e[ue]}catch{}return e}function hn(e,t){return Object.is(mn(e),mn(t))}new Set([`copyWithin`,`fill`,`pop`,`push`,`reverse`,`shift`,`sort`,`splice`,`unshift`]);var gn,_n,vn,yn;function bn(){if(gn===void 0){gn=window,_n=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;vn=a(t,`firstChild`).get,yn=a(t,`nextSibling`).get,u(e)&&(e[me]=void 0,e[pe]=null,e[he]=void 0,e.__e=void 0),u(n)&&(n[ge]=void 0)}}function xn(e=``){return document.createTextNode(e)}function Sn(e){return vn.call(e)}function Cn(e){return yn.call(e)}function F(e,t){if(!C)return Sn(e);var n=Sn(w);if(n===null)n=w.appendChild(xn());else if(t&&n.nodeType!==3){var r=xn();return n?.before(r),T(r),r}return t&&Dn(n),T(n),n}function I(e,t=!1){if(!C){var n=Sn(e);return n instanceof Comment&&n.data===``?Cn(n):n}if(t){if(w?.nodeType!==3){var r=xn();return w?.before(r),T(r),r}Dn(w)}return w}function L(e,t=1,n=!1){let r=C?w:e;for(var i;t--;)i=r,r=Cn(r);if(!C)return r;if(n){if(r?.nodeType!==3){var a=xn();return r===null?i?.after(a):r.before(a),T(a),a}Dn(r)}return T(r),r}function wn(e){e.textContent=``}function Tn(){return!Ye||Xt!==null?!1:(V.f&x)!==0}function En(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function Dn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function On(e,t){if(t){let t=document.body;e.autofocus=!0,ct(()=>{document.activeElement===t&&e.focus()})}}var kn=!1;function An(){kn||(kn=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[_e]?.()})},{capture:!0}))}function jn(e){var t=B,n=V;ur(null),dr(null);try{return e()}finally{ur(t),dr(n)}}function Mn(e,t,n,r=n){e.addEventListener(t,()=>jn(n));let i=e[_e];i?e[_e]=()=>{i(),r(!0)}:e[_e]=()=>r(!0),An()}function Nn(e){V===null&&(B===null&&Te(e),we()),sr&&Ce(e)}function Pn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Fn(e,t){var n=V;n!==null&&n.f&8192&&(e|=b);var r={ctx:D,deps:null,nodes:null,f:e|v|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};M?.register_created_effect(r);var i=r;if(e&4)Ut===null?qt.ensure().schedule(r):Ut.push(r);else if(t!==null){try{Or(r)}catch(e){throw z(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=ne))}if(i!==null&&(i.parent=n,n!==null&&Pn(i,n),B!==null&&B.f&2&&!(e&64))){var a=B;(a.effects??=[]).push(i)}return r}function In(){return B!==null&&!lr}function Ln(e){let t=Fn(8,null);return A(t,_),t.teardown=e,t}function Rn(e){Nn(`$effect`);var t=V.f;if(!B&&t&32&&D!==null&&!D.i){var n=D;(n.e??=[]).push(e)}else return zn(e)}function zn(e){return Fn(4|ie,e)}function Bn(e){return Nn(`$effect.pre`),Fn(8|ie,e)}function Vn(e){qt.ensure();let t=Fn(64|re,e);return()=>{z(t)}}function Hn(e){qt.ensure();let t=Fn(64|re,e);return(e={})=>new Promise(n=>{e.outro?er(t,()=>{z(t),n(void 0)}):(z(t),n(void 0))})}function Un(e){return Fn(4,e)}function Wn(e){return Fn(ce|re,e)}function Gn(e,t=0){return Fn(8|t,e)}function R(e,t=[],n=[],r=[]){Ct(r,t,n,t=>{Fn(8,()=>{e(...t.map(H))})})}function Kn(e,t=0){return Fn(16|t,e)}function qn(e,t=0){return Fn(g|t,e)}function Jn(e){return Fn(32|re,e)}function Yn(e){var t=e.teardown;if(t!==null){let e=sr,n=B;cr(!0),ur(null);try{t.call(null)}finally{cr(e),ur(n)}}}function Xn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&jn(()=>{e.abort(ve)});var r=n.next;n.f&64?n.parent=null:z(n,t),n=r}}function Zn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||z(t),t=n}}function z(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Qn(e.nodes.start,e.nodes.end),n=!0),e.f|=te,Xn(e,t&&!n),Dr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();Yn(e),e.f^=te,e.f|=ee;var i=e.parent;i!==null&&i.first!==null&&$n(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Qn(e,t){for(;e!==null;){var n=e===t?null:Cn(e);e.remove(),e=n}}function $n(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function er(e,t,n=!0){var r=[];tr(e,r,!0);var i=()=>{n&&z(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function tr(e,t,n){if(!(e.f&8192)){e.f^=b;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;tr(i,t,o?n:!1)}i=a}}}function nr(e){rr(e,!0)}function rr(e,t){if(e.f&8192){e.f^=b,e.f&1024||(A(e,v),qt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;rr(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function ir(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:Cn(n);t.append(n),n=i}}var ar=null,or=!1,sr=!1;function cr(e){sr=e}var B=null,lr=!1;function ur(e){B=e}var V=null;function dr(e){V=e}var fr=null;function pr(e){B!==null&&(!Ye||B.f&2)&&(fr??=new Set).add(e)}var mr=null,hr=0,gr=null;function _r(e){gr=e}var vr=1,yr=0,br=yr;function xr(e){br=e}function Sr(){return++vr}function Cr(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~oe),t&4096){for(var n=e.deps,r=n.length,i=0;i<r;i++){var a=n[i];if(Cr(a)&&Nt(a),a.wv>e.wv)return!0}t&512&&zt===null&&A(e,_)}return!1}function wr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(!Ye&&fr!==null&&fr.has(e)))for(var i=0;i<r.length;i++){var a=r[i];a.f&2?wr(a,t,!1):t===a&&(n?A(a,v):a.f&1024&&A(a,y),en(a))}}function Tr(e){var t=mr,n=hr,r=gr,i=B,a=fr,o=D,s=lr,c=br,l=e.f;mr=null,hr=0,gr=null,B=l&96?null:e,fr=null,Qe(e.ctx),lr=!1,br=++yr,e.ac!==null&&(jn(()=>{e.ac.abort(ve)}),e.ac=null);try{e.f|=se;var u=e.fn,d=u();e.f|=x;var f=e.deps,p=M?.is_fork;if(mr!==null){var m;if(p||Dr(e,hr),f!==null&&hr>0)for(f.length=hr+mr.length,m=0;m<mr.length;m++)f[hr+m]=mr[m];else e.deps=f=mr;if(In()&&e.f&512)for(m=hr;m<f.length;m++)(f[m].reactions??=[]).push(e)}else !p&&f!==null&&hr<f.length&&(Dr(e,hr),f.length=hr);if(rt()&&gr!==null&&!lr&&f!==null&&!(e.f&6146))for(m=0;m<gr.length;m++)wr(gr[m],e);if(i!==null&&i!==e){if(yr++,i.deps!==null)for(let e=0;e<n;e+=1)i.deps[e].rv=yr;if(t!==null)for(let e of t)e.rv=yr;gr!==null&&(r===null?r=gr:r.push(...gr))}return e.f&8388608&&(e.f^=le),d}catch(e){return ut(e)}finally{e.f^=se,mr=t,hr=n,gr=r,B=i,fr=a,Qe(o),lr=s,br=c}}function Er(e,r){let i=r.reactions;if(i!==null){var a=t.call(i,e);if(a!==-1){var o=i.length-1;o===0?i=r.reactions=null:(i[a]=i[o],i.pop())}}if(i===null&&r.f&2&&(mr===null||!n.call(mr,r))){var s=r;s.f&512&&(s.f^=512,s.f&=~oe),s.v!==S&&pt(s),Pt(s),Dr(s,0)}}function Dr(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)Er(e,n[r])}function Or(e){var t=e.f;if(!(t&16384)){A(e,_);var n=V,r=or;V=e,or=!0;try{t&16777232?Zn(e):Xn(e),Yn(e);var i=Tr(e);e.teardown=typeof i==`function`?i:null,e.wv=vr}finally{or=r,V=n}}}async function kr(){if(Ye)return new Promise(e=>{requestAnimationFrame(()=>e()),setTimeout(()=>e())});await Promise.resolve(),Jt()}function H(e){var t=(e.f&2)!=0;if(ar?.add(e),B!==null&&!lr&&!(V!==null&&V.f&16384)&&(fr===null||!fr.has(e))){var r=B.deps;if(B.f&2097152)e.rv<yr&&(e.rv=yr,mr===null&&r!==null&&r[hr]===e?hr++:mr===null?mr=[e]:mr.push(e));else{B.deps??=[],n.call(B.deps,e)||B.deps.push(e);var i=e.reactions;i===null?e.reactions=[B]:n.call(i,B)||i.push(B)}}if(sr&&an.has(e))return an.get(e);if(t){var a=e;if(sr){var o=a.v;return(!(a.f&1024)&&a.reactions!==null||jr(a))&&(o=Mt(a)),an.set(a,o),o}var s=(a.f&512)==0&&!lr&&B!==null&&(or||(B.f&512)!=0),c=(a.f&x)===0;Cr(a)&&(s&&(a.f|=512),Nt(a)),s&&!c&&(Ft(a),Ar(a))}if(zt?.has(e))return zt.get(e);if(e.f&8388608)throw e.v;return e.v}function Ar(e){if(e.f|=512,e.deps!==null)for(let t of e.deps)(t.reactions??=[]).push(e),t.f&2&&!(t.f&512)&&(Ft(t),Ar(t))}function jr(e){if(e.v===S)return!0;if(e.deps===null)return!1;for(let t of e.deps)if(an.has(t)||t.f&2&&jr(t))return!0;return!1}function Mr(e){var t=lr;try{return lr=!0,e()}finally{lr=t}}function Nr(){return Symbol(Ie)}function Pr(e){return e.endsWith(`capture`)&&e!==`gotpointercapture`&&e!==`lostpointercapture`}var Fr=[`beforeinput`,`click`,`change`,`dblclick`,`contextmenu`,`focusin`,`focusout`,`input`,`keydown`,`keyup`,`mousedown`,`mousemove`,`mouseout`,`mouseover`,`mouseup`,`pointerdown`,`pointermove`,`pointerout`,`pointerover`,`pointerup`,`touchend`,`touchmove`,`touchstart`];function Ir(e){return Fr.includes(e)}var Lr=`allowfullscreen.async.autofocus.autoplay.checked.controls.default.disabled.formnovalidate.indeterminate.inert.ismap.loop.multiple.muted.nomodule.novalidate.open.playsinline.readonly.required.reversed.seamless.selected.webkitdirectory.defer.disablepictureinpicture.disableremoteplayback`.split(`.`),Rr={formnovalidate:`formNoValidate`,ismap:`isMap`,nomodule:`noModule`,playsinline:`playsInline`,readonly:`readOnly`,defaultvalue:`defaultValue`,defaultchecked:`defaultChecked`,srcobject:`srcObject`,novalidate:`noValidate`,allowfullscreen:`allowFullscreen`,disablepictureinpicture:`disablePictureInPicture`,disableremoteplayback:`disableRemotePlayback`};function zr(e){return e=e.toLowerCase(),Rr[e]??e}[...Lr];var Br=[`touchstart`,`touchmove`];function Vr(e){return Br.includes(e)}var Hr=[`textarea`,`script`,`style`,`title`];function Ur(e){return Hr.includes(e)}var Wr=Symbol(`events`),Gr=new Set,Kr=new Set;function qr(e,t,n,r={}){function i(e){if(r.capture||Qr.call(t,e),!e.cancelBubble)return jn(()=>n?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?ct(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Jr(e,t,n,r={}){var i=qr(t,e,n,r);return()=>{e.removeEventListener(t,i,r)}}function Yr(e,t,n){(t[Wr]??={})[e]=n}function Xr(e){for(var t=0;t<e.length;t++)Gr.add(e[t]);for(var n of Kr)n(e)}var Zr=null;function Qr(e){var t=this,n=t.ownerDocument,r=e.type,a=e.composedPath?.()||[],o=a[0]||e.target;Zr=e;var s=0,c=Zr===e&&e[Wr];if(c){var l=a.indexOf(c);if(l!==-1&&(t===document||t===window)){e[Wr]=t;return}var u=a.indexOf(t);if(u===-1)return;l<=u&&(s=l)}if(o=a[s]||e.target,o!==t){i(e,`currentTarget`,{configurable:!0,get(){return o||n}});var d=B,f=V;ur(null),dr(null);try{for(var p,m=[];o!==null&&o!==t;){try{var h=o[Wr]?.[r];h!=null&&(!o.disabled||e.target===o)&&h.call(o,e)}catch(e){p?m.push(e):p=e}if(e.cancelBubble)break;s++,o=s<a.length?a[s]:null}if(p){for(let e of m)queueMicrotask(()=>{throw e});throw p}}finally{e[Wr]=t,delete e.currentTarget,ur(d),dr(f)}}}var $r=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function ei(e){return $r?.createHTML(e)??e}function ti(e){var t=En(`template`);return t.innerHTML=ei(e.replaceAll(`<!>`,`\\x3C!---->`)),t.content}function ni(e,t){var n=V;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function U(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(`<!>`);return()=>{if(C)return ni(w,null),w;i===void 0&&(i=ti(a?e:`<!>`+e),n||(i=Sn(i)));var t=r||_n?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=Sn(t),s=t.lastChild;ni(o,s)}else ni(t,t);return t}}function ri(e,t,n=`svg`){var r=!e.startsWith(`<!>`),i=(t&1)!=0,a=`<${n}>${r?e:`<!>`+e}</${n}>`,o;return()=>{if(C)return ni(w,null),w;if(!o){var e=Sn(ti(a));if(i)for(o=document.createDocumentFragment();Sn(e);)o.appendChild(Sn(e));else o=Sn(e)}var t=o.cloneNode(!0);if(i){var n=Sn(t),r=t.lastChild;ni(n,r)}else ni(t,t);return t}}function ii(e,t){return ri(e,t,`svg`)}function ai(e=``){if(!C){var t=xn(e+``);return ni(t,t),t}var n=w;return n.nodeType===3?Dn(n):(n.before(n=xn()),T(n)),ni(n,n),n}function W(){if(C)return ni(w,null),w;var e=document.createDocumentFragment(),t=document.createComment(``),n=xn();return e.append(t,n),ni(t,n),e}function G(e,t){if(C){var n=V;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=w),He();return}e!==null&&e.before(t)}function oi(){if(C&&w&&w.nodeType===8&&w.textContent?.startsWith(`$`)){let e=w.textContent.substring(1);return He(),e}return(window.__svelte??={}).uid??=1,`c${window.__svelte.uid++}`}function K(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[ge]??=e.nodeValue)&&(e[ge]=n,e.nodeValue=`${n}`)}function si(e,t){return li(e,t)}var ci=new Map;function li(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){bn();var l=void 0,u=Hn(()=>{var s=n??t.appendChild(xn());xt(s,{pending:()=>{}},t=>{O({});var n=D;if(o&&(n.c=o),a&&(i.$$events=a),C&&ni(t,null),l=e(t,i)||{},C&&(V.nodes.end=w,w===null||w.nodeType!==8||w.data!==`]`))throw Re(),Ne;k()},c);var u=new Set,d=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!u.has(r)){u.add(r);var i=Vr(r);for(let e of[t,document]){var a=ci.get(e);a===void 0&&(a=new Map,ci.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,Qr,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return d(r(Gr)),Kr.add(d),()=>{for(var e of u)for(let n of[t,document]){var r=ci.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Qr),r.delete(e),r.size===0&&ci.delete(n)):r.set(e,i)}Kr.delete(d),s!==n&&s.parentNode?.removeChild(s)}});return ui.set(l,u),l}var ui=new WeakMap;function di(e,t){let n=ui.get(e);return n?(ui.delete(e),n(t)):Promise.resolve()}var fi=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)nr(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(nr(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(z(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();ir(r,t),t.append(xn()),this.#n.set(e,{effect:r,fragment:t})}else z(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),er(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(z(n.effect),this.#n.delete(e))};ensure(e,t){var n=M,r=Tn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=xn();i.append(a),this.#n.set(e,{effect:Jn(()=>t(a)),fragment:i})}else this.#t.set(e,Jn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else C&&(this.anchor=w),this.#a(n)}};function q(e,t,n=!1){var r;C&&(r=w,He());var i=new fi(e),a=n?ne:0;function o(e,t){if(C){var n=Ge(r);if(e!==parseInt(n.substring(1))){var a=We();T(a),i.anchor=a,Ve(!1),i.ensure(e,t),Ve(!0);return}}i.ensure(e,t)}Kn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}var pi=Symbol(`NaN`);function mi(e,t,n){C&&He();var r=new fi(e),i=!rt();Kn(()=>{var e=t();e!==e&&(e=pi),i&&typeof e==`object`&&e&&(e={}),r.ensure(e,n)})}function hi(e,t){return t}function gi(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c<a;c++){let n=t[c];er(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;_i(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else --s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;wn(d),d.append(u),e.items.clear()}_i(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function _i(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=ae,ir(a,document.createDocumentFragment())):z(t[i],n)}}var vi;function yi(t,n,i,a,o,s=null){var c=t,l=new Map;if(n&4){var u=t;c=C?T(Sn(u)):u.appendChild(xn())}C&&He();var d=null,f=At(()=>{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,xi(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=ae,Ci(d,null,c)):nr(d):er(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:Kn(()=>{p=H(f);var e=p.length;let t=!1;C&&Ge(c)===`[!`!=(e===0)&&(c=We(),T(c),Ve(!1),t=!0);for(var r=new Set,u=M,v=Tn(),y=0;y<e;y+=1){C&&w.nodeType===8&&w.data===`]`&&(c=w,t=!0,Ve(!1));var b=p[y],ee=a(b,y),x=h?null:l.get(ee);x?(x.v&&ln(x.v,b),x.i&&ln(x.i,y),v&&u.unskip_effect(x.e)):(x=Si(l,h?c:vi??=xn(),b,ee,y,o,n,i),h||(x.e.f|=ae),l.set(ee,x)),r.add(ee)}if(e===0&&s&&!d&&(h?d=Jn(()=>s(c)):(d=Jn(()=>s(vi??=xn())),d.f|=ae)),e>r.size&&Se(``,``,``),C&&e>0&&T(We()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&Ve(!0),H(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,C&&(c=w)}function bi(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function xi(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=bi(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=a(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if(h=t[v],g=a(h,v),_=c.get(g).e,e.outrogroups!==null)for(let t of e.outrogroups)t.pending.delete(_),t.done.delete(_);if(_.f&8192&&(nr(_),o&&(_.nodes?.a?.unfix(),(f??=new Set).delete(_))),_.f&33554432)if(_.f^=ae,_===l)Ci(_,null,n);else{var y=d?d.next:l;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),wi(e,d,_),wi(e,_,y),Ci(_,y,n),d=_,p=[],m=[],l=bi(d.next);continue}if(_!==l){if(u!==void 0&&u.has(_)){if(p.length<m.length){var b=m[0],ee;d=b.prev;var x=p[0],te=p[p.length-1];for(ee=0;ee<p.length;ee+=1)Ci(p[ee],b,n);for(ee=0;ee<m.length;ee+=1)u.delete(m[ee]);wi(e,x.prev,te.next),wi(e,d,x),wi(e,te,b),l=b,d=te,--v,p=[],m=[]}else u.delete(_),Ci(_,l,n),wi(e,_.prev,_.next),wi(e,_,d===null?e.effect.first:d.next),wi(e,d,_),d=_;continue}for(p=[],m=[];l!==null&&l!==_;)(u??=new Set).add(l),m.push(l),l=bi(l.next);if(l===null)continue}_.f&33554432||p.push(_),d=_,l=bi(_.next)}if(e.outrogroups!==null){for(let t of e.outrogroups)t.pending.size===0&&(_i(e,r(t.done)),e.outrogroups?.delete(t));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||u!==void 0){var ne=[];if(u!==void 0)for(_ of u)_.f&8192||ne.push(_);for(;l!==null;)!(l.f&8192)&&l!==e.fallback&&ne.push(l),l=bi(l.next);var re=ne.length;if(re>0){var ie=i&4&&s===0?n:null;if(o){for(v=0;v<re;v+=1)ne[v].nodes?.a?.measure();for(v=0;v<re;v+=1)ne[v].nodes?.a?.fix()}gi(e,ne,ie)}}o&&ct(()=>{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function Si(e,t,n,r,i,a,o,s){var c=o&1?o&16?sn(n):cn(n,!1,!1):null,l=o&2?sn(i):null;return{v:c,i:l,e:Jn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function Ci(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=Cn(r);if(a.before(r),r===i)return;r=o}}function wi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function J(e,t,...n){var r=new fi(e);Kn(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},ne)}function Ti(e,t,n){var r;C&&(r=w,He());var i=new fi(e);Kn(()=>{var e=t()??null;if(C&&Ge(r)===`[`!=(e!==null)){var a=We();T(a),i.anchor=a,Ve(!1),i.ensure(e,e&&(t=>n(t,e))),Ve(!0);return}i.ensure(e,e&&(t=>n(t,e)))},ne)}function Ei(e,t,n,r,i,a){let o=C;C&&He();var s=null;C&&w.nodeType===1&&(s=w,He());var c=C?w:e,l=new fi(c,!1);Kn(()=>{let e=t()||null;var a=i?i():n||e===`svg`?Fe:void 0;if(e===null){l.ensure(null,null);return}return l.ensure(e,t=>{if(e){if(s=C?s:En(e,a),ni(s,s),r){var n=null;C&&Ur(e)&&s.append(n=document.createComment(``));var i=C?Sn(s):s.appendChild(xn());C&&(i===null?Ve(!1):T(i)),r(s,i),n?.remove()}V.nodes.end=s,t.before(s)}C&&T(t)}),()=>{}},ne),Ln(()=>{}),o&&(Ve(!0),T(c))}function Di(e,t){var n=void 0,r;qn(()=>{n!==(n=t())&&(r&&=(z(r),null),n&&(r=Jn(()=>{Un(()=>n(e))})))})}function Oi(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=Oi(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function ki(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=Oi(e))&&(r&&(r+=` `),r+=t);return r}function Ai(e){return typeof e==`object`?ki(e):e??``}var ji=[...` \t\n\\r\\f\\xA0\\v`];function Mi(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||ji.includes(r[o-1]))&&(s===r.length||ji.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Ni(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function Pi(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Fi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(Pi)),i&&c.push(...Object.keys(i).map(Pi));var l=0,u=-1;let t=e.length;for(var d=0;d<t;d++){var f=e[d];if(s?f===`/`&&e[d-1]===`*`&&(s=!1):a?a===f&&(a=!1):f===`/`&&e[d+1]===`*`?s=!0:f===`\"`||f===`'`?a=f:f===`(`?o++:f===`)`&&o--,!s&&a===!1&&o===0){if(f===`:`&&u===-1)u=d;else if(f===`;`||d===t-1){if(u!==-1){var p=Pi(e.substring(l,u).trim());if(!c.includes(p)){f!==`;`&&d++;var m=e.substring(l,d).trim();n+=` `+m+`;`}}l=d+1,u=-1}}}}return r&&(n+=Ni(r)),i&&(n+=Ni(i,!0)),n=n.trim(),n===``?null:n}return e==null?null:String(e)}function Ii(e,t,n,r,i,a){var o=e[me];if(C||o!==n||o===void 0){var s=Mi(n,r,a);(!C||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[me]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}function Li(e,t={},n,r){for(var i in n){var a=n[i];t[i]!==a&&(n[i]==null?e.style.removeProperty(i):e.style.setProperty(i,a,r))}}function Ri(e,t,n,r){var i=e[he];if(C||i!==t){var a=Fi(t,r);(!C||a!==e.getAttribute(`style`))&&(a==null?e.removeAttribute(`style`):e.style.cssText=a),e[he]=t}else r&&(Array.isArray(r)?(Li(e,n?.[0],r[0]),Li(e,n?.[1],r[1],`important`)):Li(e,n,r));return r}function zi(t,n,r=!1){if(t.multiple){if(n==null)return;if(!e(n))return ze();for(var i of t.options)i.selected=n.includes(Vi(i));return}for(i of t.options)if(hn(Vi(i),n)){i.selected=!0;return}(!r||n!==void 0)&&(t.selectedIndex=-1)}function Bi(e){var t=new MutationObserver(()=>{zi(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),Ln(()=>{t.disconnect()})}function Vi(e){return`__value`in e?e.__value:e.value}var Hi=Symbol(`class`),Ui=Symbol(`style`),Wi=Symbol(`is custom element`),Gi=Symbol(`is html`),Ki=ye?`link`:`LINK`,qi=ye?`input`:`INPUT`,Ji=ye?`option`:`OPTION`,Yi=ye?`select`:`SELECT`;function Xi(e){if(C){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;Qi(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;Qi(e,`checked`,null),e.checked=r}}};e[_e]=n,ct(n),An()}}function Zi(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function Qi(e,t,n,r){var i=ta(e);C&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Ki)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[fe]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ra(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function $i(e,t,n,r,i=!1,a=!1){if(C&&i&&e.nodeName===qi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||Xi(o)}var s=ta(e),c=s[Wi],l=!s[Gi];let u=C&&c;u&&Ve(!1);var d=t||{},f=e.nodeName===Ji;for(var p in t)p in n||(n[p]=null);n.class?n.class=Ai(n.class):(r||n[Hi])&&(n.class=null),n[Ui]&&(n.style??=null);var m=ra(e);if(e.nodeName===qi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,Qi(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){Ii(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[Hi],n[Hi]),d[i]=o,d[Hi]=n[Hi];continue}if(i===`style`){Ri(e,o,t?.[Ui],n[Ui]),d[i]=o,d[Ui]=n[Ui];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=Ir(r);if(Pr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)Yr(r,e,o),Xr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=qr(r,e,a,t)}}else if(i===`style`)Qi(e,i,o);else if(i===`autofocus`)On(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)Zi(e,o);else{var y=i;l||(y=zr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=S)):typeof o!=`function`&&Qi(e,y,o,a)}}}return u&&Ve(!0),d}function ea(e,t,n=[],r=[],i=[],a,o=!1,s=!1){Ct(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===Yi,l=!1;if(qn(()=>{var u=t(...n.map(H)),d=$i(e,r,u,a,o,s);l&&c&&`value`in u&&zi(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||z(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&z(i[t]),i[t]=Jn(()=>Di(e,()=>f))),d[t]=f}r=d}),c){var u=e;Un(()=>{zi(u,r.value,!0),Bi(u)})}l=!0})}function ta(e){return e[pe]??={[Wi]:e.nodeName.includes(`-`),[Gi]:e.namespaceURI===Pe}}var na=new Map;function ra(e){var t=e.getAttribute(`is`)||e.nodeName,n=na.get(t);if(n)return n;na.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function ia(e,t,n=t){var r=new WeakSet;Mn(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=aa(e)?oa(a):a,n(a),M!==null&&r.add(M),await kr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(C&&e.defaultValue!==e.value||Mr(t)==null&&e.value)&&(n(aa(e)?oa(e.value):e.value),M!==null&&r.add(M)),Gn(()=>{var n=t();if(e===document.activeElement){var i=Ye?Rt:M;if(r.has(i))return}aa(e)&&n===oa(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function aa(e){var t=e.type;return t===`number`||t===`range`}function oa(e){return e===``?null:+e}var sa={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return e.exclude.has(t)?!1:t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function ca(e,t,n){return new Proxy({props:e,exclude:t},sa)}var la={get(e,t){let n=e.props.length;for(;n--;){let r=e.props[n];if(d(r)&&(r=r()),typeof r==`object`&&r&&t in r)return r[t]}},set(e,t,n){let r=e.props.length;for(;r--;){let i=e.props[r];d(i)&&(i=i());let o=a(i,t);if(o&&o.set)return o.set(n),!0}return!1},getOwnPropertyDescriptor(e,t){let n=e.props.length;for(;n--;){let r=e.props[n];if(d(r)&&(r=r()),typeof r==`object`&&r&&t in r){let e=a(r,t);return e&&!e.configurable&&(e.configurable=!0),e}}},has(e,t){if(t===ue||t===de)return!1;for(let n of e.props)if(d(n)&&(n=n()),n!=null&&t in n)return!0;return!1},ownKeys(e){let t=[];for(let n of e.props)if(d(n)&&(n=n()),n){for(let e in n)t.includes(e)||t.push(e);for(let e of Object.getOwnPropertySymbols(n))t.includes(e)||t.push(e)}return t}};function ua(...e){return new Proxy({props:e},la)}function Y(e,t,n,r){var i=!Xe||(n&2)!=0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=Dt(r),H(u)):(l&&(l=!1,c=s?Mr(r):r),c);let f;if(o){var p=ue in e||de in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=vt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&De(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?Dt:At)(()=>(v=!1,g()));o&&H(y);var b=V;return(function(e,t){if(arguments.length>0){let n=t?H(y):i&&o?pn(e):e;return P(y,n),v=!0,c!==void 0&&(c=n),e}return sr&&v||b.f&16384?y.v:H(y)})}function da(e){D===null&&be(`onMount`),Xe&&D.l!==null?fa(D).m.push(e):Rn(()=>{let t=Mr(e);if(typeof t==`function`)return t})}function fa(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var X=new class{#e=N(null);get data(){return H(this.#e)}set data(e){P(this.#e,e,!0)}#t=N(null);get arsenal(){return H(this.#t)}set arsenal(e){P(this.#t,e,!0)}#n=N(`connecting`);get status(){return H(this.#n)}set status(e){P(this.#n,e,!0)}#r=N(``);get clock(){return H(this.#r)}set clock(e){P(this.#r,e,!0)}#i=N(`overview`);get view(){return H(this.#i)}set view(e){P(this.#i,e,!0)}#a=N(!1);get arsenalLoading(){return H(this.#a)}set arsenalLoading(e){P(this.#a,e,!0)}#o=!1;#s=null;async tick(){try{let e=await fetch(`/data`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.data=await e.json(),this.status=`live`,this.clock=new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{this.status=`offline`}}start(){this.tick(),this.#s=setInterval(()=>void this.tick(),1e4)}stop(){this.#s&&clearInterval(this.#s)}async loadArsenal(e=!1){if(!(this.#o&&!e)){this.arsenalLoading=!0;try{let e=await fetch(`/arsenal`);e.ok&&(this.arsenal=await e.json(),this.#o=!0)}catch{}finally{this.arsenalLoading=!1}}}go(e){this.view=e,e===`arsenal`&&this.loadArsenal()}};function Z(e){return typeof e!=`number`||!Number.isFinite(e)?`0`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(Math.round(e))}function pa(e){return typeof e!=`number`||!Number.isFinite(e)?`$0.00`:`$${e.toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function ma(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):t.toLocaleDateString([],{month:`short`,day:`numeric`})}function ha(e){if(!e)return`unknown`;let t=e.toLowerCase();return t===`<synthetic>`?`unknown`:t.includes(`fable`)?`fable`:t.includes(`opus`)?`opus`:t.includes(`sonnet`)?`sonnet`:t.includes(`haiku`)?`haiku`:`unknown`}function ga(e){return!e||e===`<synthetic>`?`synthetic`:e.replace(/^claude-/,``)}function _a(e){if(!e)return``;let t=e.split(/[/\\\\]/).filter(Boolean);return t.length<=2?t.join(`/`):`…/${t.slice(-2).join(`/`)}`}var va=[220,75,20,155,285,330,250,45];function ya(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return`oklch(72% 0.15 ${va[t%va.length]})`}var ba={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,\"stroke-width\":2,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`},xa=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Sa=Symbol(`lucide-context`),Ca=()=>$e(Sa),wa=new Set([`$$slots`,`$$events`,`$$legacy`,`name`,`color`,`size`,`strokeWidth`,`absoluteStrokeWidth`,`iconNode`,`children`]),Ta=ii(`<svg><!><!></svg>`);function Ea(e,t){O(t,!0);let n=Ca()??{},r=Y(t,`color`,19,()=>n.color??`currentColor`),i=Y(t,`size`,19,()=>n.size??24),a=Y(t,`strokeWidth`,19,()=>n.strokeWidth??2),o=Y(t,`absoluteStrokeWidth`,19,()=>n.absoluteStrokeWidth??!1),s=Y(t,`iconNode`,19,()=>[]),c=ca(t,wa),l=j(()=>o()?Number(a())*24/Number(i()):a());var u=Ta();ea(u,e=>({...ba,...e,...c,width:i(),height:i(),stroke:r(),\"stroke-width\":H(l),class:[`lucide-icon lucide`,n.class,t.name&&`lucide-${t.name}`,t.class]}),[()=>!t.children&&!xa(c)&&{\"aria-hidden\":`true`}]);var d=F(u);yi(d,17,s,hi,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=W();Ei(I(a),r,!0,(e,t)=>{ea(e,()=>({...i()}))}),G(e,a)}),J(L(d),()=>t.children??f),E(u),G(e,u),k()}var Da=new Set([`$$slots`,`$$events`,`$$legacy`]);function Oa(e,t){let n=ca(t,Da),r=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]];Ea(e,ua({name:`layout-dashboard`},()=>n,{get iconNode(){return r}}))}var ka=new Set([`$$slots`,`$$events`,`$$legacy`]);function Aa(e,t){let n=ca(t,ka),r=[[`polyline`,{points:`14.5 17.5 3 6 3 3 6 3 17.5 14.5`}],[`line`,{x1:`13`,x2:`19`,y1:`19`,y2:`13`}],[`line`,{x1:`16`,x2:`20`,y1:`16`,y2:`20`}],[`line`,{x1:`19`,x2:`21`,y1:`21`,y2:`19`}],[`polyline`,{points:`14.5 6.5 18 3 21 3 21 6 17.5 9.5`}],[`line`,{x1:`5`,x2:`9`,y1:`14`,y2:`18`}],[`line`,{x1:`7`,x2:`4`,y1:`17`,y2:`20`}],[`line`,{x1:`3`,x2:`5`,y1:`19`,y2:`21`}]];Ea(e,ua({name:`swords`},()=>n,{get iconNode(){return r}}))}var ja=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ma(e,t){let n=ca(t,ja),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`}],[`path`,{d:`M12 17h.01`}]];Ea(e,ua({name:`circle-question-mark`},()=>n,{get iconNode(){return r}}))}var Na=new Set([`$$slots`,`$$events`,`$$legacy`]);function Pa(e,t){let n=ca(t,Na),r=[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M9 3v18`}]];Ea(e,ua({name:`panel-left`},()=>n,{get iconNode(){return r}}))}var Fa=U(`<div class=\"min-w-0\"><div class=\"font-serif text-lg leading-none text-foreground\">Synth<em>ra</em></div> <div class=\"font-mono text-[10px] uppercase tracking-[0.18em] text-muted-foreground\">Dashboard</div></div>`),Ia=U(`<span class=\"font-mono text-sm text-muted-foreground\"> </span>`),La=U(`<span> </span>`),Ra=U(`<button><!> <!></button>`),za=U(`<span>FAQ</span>`),Ba=U(`<div class=\"flex flex-col gap-1 rounded-lg bg-sidebar-accent/40 p-2.5\"><div class=\"font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground\">Active</div> <div class=\"truncate font-mono text-sm text-sidebar-foreground\"> </div> <div class=\"mt-1 flex items-center justify-between font-mono text-[10px] text-muted-foreground\"><span> </span> <span>v__SYN_VERSION__</span></div></div>`),Va=U(`<span class=\"text-xs\">Collapse</span>`),Ha=U(`<aside><div class=\"flex items-center gap-2.5 px-1 py-2\"><div class=\"grid size-8 shrink-0 place-items-center rounded-lg bg-primary/90 font-serif text-lg italic text-primary-foreground\">S</div> <!></div> <div><span></span> <!></div> <div class=\"my-1 h-px bg-sidebar-border\"></div> <nav class=\"flex flex-col gap-1\"><!> <button title=\"FAQ\"><!> <!></button></nav> <div class=\"flex-1\"></div> <!> <button title=\"Toggle sidebar\"><!> <!></button></aside>`);function Ua(e,t){O(t,!0);let n=N(!1),r=typeof window<`u`&&window.location.port||`8901`,i=[{id:`overview`,label:`Overview`,icon:Oa},{id:`arsenal`,label:`Arsenal`,icon:Aa}];var a=Ha(),o=F(a),s=L(F(o),2),c=e=>{G(e,Fa())};q(s,e=>{H(n)||e(c)}),E(o);var l=L(o,2),u=F(l);let d;var f=L(u,2),p=e=>{var t=Ia(),n=F(t,!0);E(t),R(()=>K(n,X.status===`live`?`live · ${X.clock}`:X.status)),G(e,t)};q(f,e=>{H(n)||e(p)}),E(l);var m=L(l,4),h=F(m);yi(h,17,()=>i,e=>e.id,(e,t)=>{var r=Ra(),i=F(r);Ti(i,()=>H(t).icon,(e,t)=>{t(e,{class:`size-4 shrink-0`})});var a=L(i,2),o=e=>{var n=La(),r=F(n,!0);E(n),R(()=>K(r,H(t).label)),G(e,n)};q(a,e=>{H(n)||e(o)}),E(r),R(()=>{Qi(r,`title`,H(t).label),Ii(r,1,`flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm transition-colors `+(X.view===H(t).id?`bg-sidebar-accent text-sidebar-accent-foreground`:`text-sidebar-foreground/75 hover:bg-sidebar-accent/50 hover:text-sidebar-foreground`)+(H(n)?` justify-center`:``))}),Yr(`click`,r,()=>X.go(H(t).id)),G(e,r)});var g=L(h,2),_=F(g);Ma(_,{class:`size-4 shrink-0`});var v=L(_,2),y=e=>{G(e,za())};q(v,e=>{H(n)||e(y)}),E(g),E(m);var b=L(m,4),ee=e=>{var t=Ba(),n=L(F(t),2),i=F(n,!0);E(n);var a=L(n,2),o=F(a),s=F(o);E(o),Ue(2),E(a),E(t),R(()=>{Qi(n,`title`,X.data?.active?.project_root??`—`),K(i,X.data?.active?.project_name??`—`),K(s,`port ${r??``}`)}),G(e,t)};q(b,e=>{H(n)||e(ee)});var x=L(b,2),te=F(x);Pa(te,{class:`size-4 shrink-0`});var ne=L(te,2),re=e=>{G(e,Va())};q(ne,e=>{H(n)||e(re)}),E(x),E(a),R(()=>{Ii(a,1,`flex h-screen shrink-0 flex-col gap-1 border-r border-sidebar-border bg-sidebar p-3 transition-[width] duration-200 `+(H(n)?`w-[64px] items-center`:`w-[248px]`)),Ii(l,1,`flex items-center gap-2 rounded-md px-2 py-1.5 `+(H(n)?`justify-center`:``)),d=Ii(u,1,`size-2 shrink-0 rounded-full `+(X.status===`live`?`bg-[var(--c-fable)]`:X.status===`offline`?`bg-destructive`:`bg-muted-foreground`),null,d,{\"animate-pulse\":X.status===`live`}),Ii(g,1,`flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm text-sidebar-foreground/75 transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-foreground `+(H(n)?`justify-center`:``)),Ii(x,1,`mt-1 flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sidebar-foreground/60 transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-foreground `+(H(n)?`justify-center`:``))}),Yr(`click`,g,function(...e){t.onFaq?.apply(this,e)}),Yr(`click`,x,()=>P(n,!H(n))),G(e,a),k()}Xr([`click`]),Ze();var Wa=U(`<div class=\"flex flex-col gap-1 bg-card/70 p-4\"><span class=\"font-mono text-xs uppercase tracking-[0.12em] text-muted-foreground\"> </span> <span class=\"font-mono text-2xl tabular-nums text-foreground\"> </span></div>`),Ga=U(`<div class=\"grid grid-cols-2 gap-px overflow-hidden rounded-xl border bg-border sm:grid-cols-3 lg:grid-cols-5\"></div>`);function Ka(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global;return[{label:`Turns`,v:e?.total_turns??0},{label:`↓ Input`,v:e?.total_input_tokens??0},{label:`↑ Output`,v:e?.total_output_tokens??0},{label:`⟲ Cache R`,v:e?.total_cache_read??0},{label:`+ Cache W`,v:e?.total_cache_create??0}]});var r=Ga();yi(r,21,()=>H(n),e=>e.label,(e,t)=>{var n=Wa(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(e=>{K(i,H(t).label),K(o,e)},[()=>Z(H(t).v)]),G(e,n)}),E(r),G(e,r),k()}var qa=U(`<span class=\"font-mono text-[10px] uppercase tracking-[0.12em] text-muted-foreground\"> </span>`),Ja=U(`<header class=\"flex items-baseline justify-between gap-3\"><span class=\"font-mono text-xs uppercase tracking-[0.14em] text-muted-foreground\"> </span> <!></header>`),Ya=U(`<section><!> <!></section>`);function Xa(e,t){let n=Y(t,`class`,3,``);var r=Ya(),i=F(r),a=e=>{var n=Ja(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=e=>{var n=qa(),r=F(n,!0);E(n),R(()=>K(r,t.meta)),G(e,n)};q(a,e=>{t.meta&&e(o)}),E(n),R(()=>K(i,t.title)),G(e,n)};q(i,e=>{t.title&&e(a)}),J(L(i,2),()=>t.children??f),E(r),R(()=>Ii(r,1,`flex h-full min-h-0 flex-col gap-3 rounded-xl border bg-card/55 p-4 transition-colors hover:bg-card/80 `+n())),G(e,r)}var Za=U(`<div class=\"flex flex-col gap-3\"><div><div class=\"font-mono text-3xl text-[var(--money)]\"> </div> <div class=\"font-mono text-sm text-muted-foreground\"> </div></div> <div class=\"flex h-2 overflow-hidden rounded-full bg-border\"><div class=\"h-full bg-muted-foreground/40\"></div> <div class=\"h-full bg-[var(--money)]\"></div></div> <div class=\"flex justify-between font-mono text-xs text-muted-foreground\"><span>you paid <b class=\"text-foreground\"> </b></span> <span>baseline <b class=\"text-foreground\"> </b></span></div> <div class=\"rounded-md border border-dashed border-border px-3 py-2 text-center font-mono text-xs text-muted-foreground\"><b class=\"text-foreground\"> </b> blocks × <b class=\"text-foreground\">500</b> tokens × <b class=\"text-foreground\">$3</b>/M = <b class=\"text-[var(--money)]\"> </b></div></div>`);function Qa(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global,t=e?.blocked_count??0,n=t*500*3/1e6,r=e?.estimated_cost_usd??0,i=r+n;return{blocks:t,money:n,paid:r,baseline:i,pct:i>0?n/i*100:0,tokens:e?.estimated_tokens_saved??0,paidWidth:i>0?r/i*100:100}});{let t=j(()=>`${H(n).pct.toFixed(1)}% off · floor`);Xa(e,{title:`Synthra savings`,get meta(){return H(t)},children:(e,t)=>{var r=Za(),i=F(r),a=F(i),o=F(a,!0);E(a);var s=L(a,2),c=F(s);E(s),E(i);var l=L(i,2),u=F(l),d=L(u,2);E(l);var f=L(l,2),p=F(f),m=L(F(p)),h=F(m,!0);E(m),E(p);var g=L(p,2),_=L(F(g)),v=F(_,!0);E(_),E(g),E(f);var y=L(f,2),b=F(y),ee=F(b,!0);E(b);var x=L(b,6),te=F(x,!0);E(x),E(y),E(r),R((e,t,r,i,a)=>{K(o,e),K(c,`${t??``} tokens avoided`),Ri(u,`width:${H(n).paidWidth}%`),Ri(d,`width:${100-H(n).paidWidth}%`),K(h,r),K(v,i),K(ee,H(n).blocks),K(te,a)},[()=>pa(H(n).money),()=>Z(H(n).tokens),()=>pa(H(n).paid),()=>pa(H(n).baseline),()=>pa(H(n).money)]),G(e,r)},$$slots:{default:!0}})}k()}var $a=U(`<div class=\"font-mono text-3xl text-[var(--money)]\"> </div> <div class=\"mt-1 flex flex-col gap-1 font-mono text-sm text-muted-foreground\"><div class=\"flex justify-between\"><span>Tokens (in+out)</span><span class=\"text-foreground\"> </span></div> <div class=\"flex justify-between\"><span>Avg / turn</span><span class=\"text-foreground\"> </span></div></div>`,1);function eo(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global,t=e?.total_turns??0,n=e?.estimated_cost_usd??0;return{cost:n,tokens:(e?.total_input_tokens??0)+(e?.total_output_tokens??0),avg:t>0?n/t:0}});Xa(e,{title:`Total spend`,meta:`all time`,children:(e,t)=>{var r=$a(),i=I(r),a=F(i,!0);E(i);var o=L(i,2),s=F(o),c=L(F(s)),l=F(c,!0);E(c),E(s);var u=L(s,2),d=L(F(u)),f=F(d,!0);E(d),E(u),E(o),R((e,t,n)=>{K(a,e),K(l,t),K(f,n)},[()=>pa(H(n).cost),()=>Z(H(n).tokens),()=>pa(H(n).avg)]),G(e,r)},$$slots:{default:!0}}),k()}var to=ii(`<circle cx=\"70\" cy=\"70\" r=\"52\" fill=\"none\" stroke-width=\"14\"></circle>`),no=U(`<div class=\"flex items-center gap-2 font-mono text-sm\"><span class=\"size-2 rounded-sm\"></span> <span class=\"flex-1 text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span> <span class=\"w-9 text-right tabular-nums text-muted-foreground\"> </span></div>`),ro=U(`<div class=\"text-sm text-muted-foreground\">No turns yet.</div>`),io=U(`<div class=\"flex items-center gap-4\"><div class=\"relative size-[116px] shrink-0\"><svg viewBox=\"0 0 140 140\" class=\"size-full -rotate-90\"><circle cx=\"70\" cy=\"70\" r=\"52\" fill=\"none\" stroke=\"var(--border)\" stroke-width=\"14\"></circle><!></svg> <div class=\"absolute inset-0 grid place-items-center\"><div class=\"text-center\"><div class=\"font-mono text-2xl text-foreground\"> </div> <div class=\"font-mono text-[10px] uppercase text-muted-foreground\">turns</div></div></div></div> <div class=\"flex min-w-0 flex-1 flex-col gap-1.5\"></div></div>`);function ao(e,t){O(t,!0);let n=[{fam:`fable`,label:`Fable`,color:`var(--c-fable)`},{fam:`opus`,label:`Opus`,color:`var(--c-opus)`},{fam:`sonnet`,label:`Sonnet`,color:`var(--c-sonnet)`},{fam:`haiku`,label:`Haiku`,color:`var(--c-haiku)`},{fam:`unknown`,label:`Other`,color:`var(--c-unknown)`}],r=2*Math.PI*52,i=j(()=>{let e={fable:0,opus:0,sonnet:0,haiku:0,unknown:0};for(let t of X.data?.projects??[])for(let[n,r]of Object.entries(t.models??{}))e[ha(n)]+=r;let t=n.reduce((t,n)=>t+e[n.fam],0),i=0;return{arcs:n.filter(t=>e[t.fam]>0).map(n=>{let a=e[n.fam],o=t>0?a/t*r:0,s={...n,n:a,len:o,offset:i,pct:t>0?Math.round(a/t*100):0};return i+=o,s}),total:t}});Xa(e,{title:`Model usage`,meta:`by turns`,children:(e,t)=>{var n=io(),a=F(n),o=F(a);yi(L(F(o)),17,()=>H(i).arcs,e=>e.fam,(e,t)=>{var n=to();R(()=>{Qi(n,`stroke`,H(t).color),Qi(n,`stroke-dasharray`,`${H(t).len} ${r}`),Qi(n,`stroke-dashoffset`,-H(t).offset),Qi(n,`stroke-linecap`,H(i).arcs.length===1?`round`:`butt`)}),G(e,n)}),E(o);var s=L(o,2),c=F(s),l=F(c),u=F(l,!0);E(l),Ue(2),E(c),E(s),E(a);var d=L(a,2);yi(d,21,()=>H(i).arcs,e=>e.fam,(e,t)=>{var n=no(),r=F(n),i=L(r,2),a=F(i,!0);E(i);var o=L(i,2),s=F(o,!0);E(o);var c=L(o,2),l=F(c);E(c),E(n),R(()=>{Ri(r,`background:${H(t).color}`),K(a,H(t).label),K(s,H(t).n),K(l,`${H(t).pct??``}%`)}),G(e,n)},e=>{G(e,ro())}),E(d),E(n),R(()=>K(u,H(i).total)),G(e,n)},$$slots:{default:!0}}),k()}function oo(e){return typeof e==`object`&&!!e}var so=[`string`,`number`,`bigint`,`boolean`];function co(e){return e==null||so.includes(typeof e)?!0:Array.isArray(e)?e.every(e=>co(e)):typeof e==`object`?Object.getPrototypeOf(e)===Object.prototype:!1}var lo=Symbol(`box`),uo=Symbol(`is-writable`);function Q(e,t){let n=j(e);return t?{[lo]:!0,[uo]:!0,get current(){return H(n)},set current(e){t(e)}}:{[lo]:!0,get current(){return e()}}}function fo(e){return oo(e)&&lo in e}function po(e){let t=N(pn(e));return{[lo]:!0,[uo]:!0,get current(){return H(t)},set current(e){P(t,e,!0)}}}function mo(...e){return function(t){for(let n of e)if(n){if(t.defaultPrevented)return;typeof n==`function`?n.call(this,t):n.current?.call(this,t)}}}var ho=/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g,go=/\\n/g,_o=/^\\s*/,vo=/^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/,yo=/^:\\s*/,bo=/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/,xo=/^[;\\s]*/,So=/^\\s+|\\s+$/g,Co=`\n`,wo=`/`,To=`*`,Eo=``,Do=`comment`,Oo=`declaration`;function ko(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var n=1,r=1;function i(e){var t=e.match(go);t&&(n+=t.length);var i=e.lastIndexOf(Co);r=~i?e.length-i:r+e.length}function a(){var e={line:n,column:r};return function(t){return t.position=new o(e),l(),t}}function o(e){this.start=e,this.end={line:n,column:r},this.source=t.source}o.prototype.content=e;function s(i){var a=Error(t.source+`:`+n+`:`+r+`: `+i);if(a.reason=i,a.filename=t.source,a.line=n,a.column=r,a.source=e,!t.silent)throw a}function c(t){var n=t.exec(e);if(n){var r=n[0];return i(r),e=e.slice(r.length),n}}function l(){c(_o)}function u(e){var t;for(e||=[];t=d();)t!==!1&&e.push(t);return e}function d(){var t=a();if(!(wo!=e.charAt(0)||To!=e.charAt(1))){for(var n=2;Eo!=e.charAt(n)&&(To!=e.charAt(n)||wo!=e.charAt(n+1));)++n;if(n+=2,Eo===e.charAt(n-1))return s(`End of comment missing`);var o=e.slice(2,n-2);return r+=2,i(o),e=e.slice(n),r+=2,t({type:Do,comment:o})}}function f(){var e=a(),t=c(vo);if(t){if(d(),!c(yo))return s(`property missing ':'`);var n=c(bo),r=e({type:Oo,property:Ao(t[0].replace(ho,Eo)),value:n?Ao(n[0].replace(ho,Eo)):Eo});return c(xo),r}}function p(){var e=[];u(e);for(var t;t=f();)t!==!1&&(e.push(t),u(e));return e}return l(),p()}function Ao(e){return e?e.replace(So,Eo):Eo}function jo(e,t){let n=null;if(!e||typeof e!=`string`)return n;let r=ko(e),i=typeof t==`function`;return r.forEach(e=>{if(e.type!==`declaration`)return;let{property:r,value:a}=e;i?t(r,a,e):a&&(n||={},n[r]=a)}),n}var Mo=/\\d/,No=[`-`,`_`,`/`,`.`];function Po(e=``){if(!Mo.test(e))return e!==e.toLowerCase()}function Fo(e){let t=[],n=``,r,i;for(let a of e){let e=No.includes(a);if(e===!0){t.push(n),n=``,r=void 0;continue}let o=Po(a);if(i===!1){if(r===!1&&o===!0){t.push(n),n=a,r=o;continue}if(r===!0&&o===!1&&n.length>1){let e=n.at(-1);t.push(n.slice(0,Math.max(0,n.length-1))),n=e+a,r=o;continue}}n+=a,r=o,i=e}return t.push(n),t}function Io(e){return e?Fo(e).map(e=>Ro(e)).join(``):``}function Lo(e){return zo(Io(e||``))}function Ro(e){return e?e[0].toUpperCase()+e.slice(1):``}function zo(e){return e?e[0].toLowerCase()+e.slice(1):``}function Bo(e){if(!e)return{};let t={};function n(e,n){if(e.startsWith(`-moz-`)||e.startsWith(`-webkit-`)||e.startsWith(`-ms-`)||e.startsWith(`-o-`)){t[Io(e)]=n;return}if(e.startsWith(`--`)){t[e]=n;return}t[Lo(e)]=n}return jo(e,n),t}function Vo(...e){return(...t)=>{for(let n of e)typeof n==`function`&&n(...t)}}function Ho(e,t){let n=RegExp(e,`g`);return e=>{if(typeof e!=`string`)throw TypeError(`expected an argument of type string, but got ${typeof e}`);return e.match(n)?e.replace(n,t):e}}var Uo=Ho(/[A-Z]/,e=>`-${e.toLowerCase()}`);function Wo(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`expected an argument of type object, but got ${typeof e}`);return Object.keys(e).map(t=>`${Uo(t)}: ${e[t]};`).join(`\n`)}function Go(e={}){return Wo(e).replace(`\n`,` `)}var Ko=new Set(`onabort.onanimationcancel.onanimationend.onanimationiteration.onanimationstart.onauxclick.onbeforeinput.onbeforetoggle.onblur.oncancel.oncanplay.oncanplaythrough.onchange.onclick.onclose.oncompositionend.oncompositionstart.oncompositionupdate.oncontextlost.oncontextmenu.oncontextrestored.oncopy.oncuechange.oncut.ondblclick.ondrag.ondragend.ondragenter.ondragleave.ondragover.ondragstart.ondrop.ondurationchange.onemptied.onended.onerror.onfocus.onfocusin.onfocusout.onformdata.ongotpointercapture.oninput.oninvalid.onkeydown.onkeypress.onkeyup.onload.onloadeddata.onloadedmetadata.onloadstart.onlostpointercapture.onmousedown.onmouseenter.onmouseleave.onmousemove.onmouseout.onmouseover.onmouseup.onpaste.onpause.onplay.onplaying.onpointercancel.onpointerdown.onpointerenter.onpointerleave.onpointermove.onpointerout.onpointerover.onpointerup.onprogress.onratechange.onreset.onresize.onscroll.onscrollend.onsecuritypolicyviolation.onseeked.onseeking.onselect.onselectionchange.onselectstart.onslotchange.onstalled.onsubmit.onsuspend.ontimeupdate.ontoggle.ontouchcancel.ontouchend.ontouchmove.ontouchstart.ontransitioncancel.ontransitionend.ontransitionrun.ontransitionstart.onvolumechange.onwaiting.onwebkitanimationend.onwebkitanimationiteration.onwebkitanimationstart.onwebkittransitionend.onwheel`.split(`.`));function qo(e){return Ko.has(e)}function Jo(...e){let t={...e[0]};for(let n=1;n<e.length;n++){let r=e[n];if(r){for(let e of Object.keys(r)){let n=t[e],i=r[e],a=typeof n==`function`,o=typeof i==`function`;if(a&&typeof o&&qo(e))t[e]=mo(n,i);else if(a&&o)t[e]=Vo(n,i);else if(e===`class`){let r=co(n),a=co(i);r&&a?t[e]=ki(n,i):r?t[e]=ki(n):a&&(t[e]=ki(i))}else if(e===`style`){let r=typeof n==`object`,a=typeof i==`object`,o=typeof n==`string`,s=typeof i==`string`;if(r&&a)t[e]={...n,...i};else if(r&&s){let r=Bo(i);t[e]={...n,...r}}else if(o&&a)t[e]={...Bo(n),...i};else if(o&&s){let r=Bo(n),a=Bo(i);t[e]={...r,...a}}else r?t[e]=n:a?t[e]=i:o?t[e]=n:s&&(t[e]=i)}else t[e]=i===void 0?n:i}for(let e of Object.getOwnPropertySymbols(r)){let n=t[e],i=r[e];t[e]=i===void 0?n:i}}}return typeof t.style==`object`&&(t.style=Go(t.style).replaceAll(`\n`,` `)),t.hidden===!1&&(t.hidden=void 0,delete t.hidden),t.disabled===!1&&(t.disabled=void 0,delete t.disabled),t}var Yo=typeof window<`u`?window:void 0;typeof window<`u`&&window.document,typeof window<`u`&&window.navigator,typeof window<`u`&&window.location;function Xo(e){let t=e.activeElement;for(;t?.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}var Zo=class extends Map{#e=new Map;#t=N(0);#n=N(0);#r=br||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return br===this.#r?N(e):sn(e)}has(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else return H(this.#t),!1;return H(n),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else{H(this.#t);return}return H(n),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),P(this.#n,super.size),dn(o);else if(i!==t){dn(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&dn(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),P(n,-1)),r&&(P(this.#n,super.size),dn(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;P(this.#n,0);for(var t of e.values())P(t,-1);dn(this.#t),e.clear()}}#a(){H(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var n=this.#i(0);e.set(t,n)}}for([,n]of this.#e)H(n)}keys(){return H(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return H(this.#n),super.size}};new class{#e;#t;constructor(e={}){let{window:t=Yo,document:n=t?.document}=e;t!==void 0&&(this.#e=n,this.#t=yt(e=>{let n=Jr(t,`focusin`,e),r=Jr(t,`focusout`,e);return()=>{n(),r()}}))}get current(){return this.#t?.(),this.#e?Xo(this.#e):null}};var Qo=class{#e;#t;constructor(e){this.#e=e,this.#t=Symbol(e)}get key(){return this.#t}exists(){return tt(this.#t)}get(){let e=$e(this.#t);if(e===void 0)throw Error(`Context \"${this.#e}\" not found`);return e}getOr(e){let t=$e(this.#t);return t===void 0?e:t}set(e){return et(this.#t,e)}};function $o(e,t){switch(e){case`post`:Rn(t);break;case`pre`:Bn(t);break}}function es(e,t,n,r={}){let{lazy:i=!1}=r,a=!i,o=Array.isArray(e)?[]:void 0;$o(t,()=>{let t=Array.isArray(e)?e.map(e=>e()):e();if(!a){a=!0,o=t;return}let r=Mr(()=>n(t,o));return o=t,r})}function ts(e,t,n){let r=Vn(()=>{let i=!1;es(e,t,(e,t)=>{if(i){r();return}let a=n(e,t);return i=!0,a},{lazy:!0})});Rn(()=>r)}function ns(e,t,n){es(e,`post`,t,n)}function rs(e,t,n){es(e,`pre`,t,n)}ns.pre=rs;function is(e,t){ts(e,`post`,t)}function as(e,t){ts(e,`pre`,t)}is.pre=as;function os(e,t){let n,r=null;return(...i)=>new Promise(a=>{r&&r(void 0),r=a,clearTimeout(n),n=setTimeout(async()=>{let t=await e(...i);r&&=(r(t),null)},t)})}function ss(e,t){let n=0,r=null;return(...i)=>{let a=Date.now();return n&&a-n<t?r??Promise.resolve(void 0):(n=a,r=e(...i),r)}}function cs(e,t,n={},r){let{lazy:i=!1,once:a=!1,initialValue:o,debounce:s,throttle:c}=n,l=N(pn(o)),u=N(!1),d=N(void 0),f=N(pn([])),p=()=>{H(f).forEach(e=>e()),P(f,[],!0)},m=e=>{P(f,[...H(f),e],!0)},h=async(e,n,r=!1)=>{try{P(u,!0),P(d,void 0),p();let i=new AbortController;m(()=>i.abort());let a=await t(e,n,{data:H(l),refetching:r,onCleanup:m,signal:i.signal});return P(l,a,!0),a}catch(e){e instanceof DOMException&&e.name===`AbortError`||P(d,e,!0);return}finally{P(u,!1)}},g=s?os(h,s):c?ss(h,c):h,_=Array.isArray(e)?e:[e],v;return r((t,n)=>{a&&v||(v=t,g(Array.isArray(e)?t:t[0],Array.isArray(e)?n:n?.[0]))},{lazy:i}),{get current(){return H(l)},get loading(){return H(u)},get error(){return H(d)},mutate:e=>{P(l,e,!0)},refetch:t=>{let n=_.map(e=>e());return g(Array.isArray(e)?n:n[0],Array.isArray(e)?n:n[0],t??!0)}}}function ls(e,t,n){return cs(e,t,n,(t,n)=>{let r=Array.isArray(e)?e:[e];ns(()=>r.map(e=>e()),(e,n)=>{t(e,n??[])},n)})}function us(e,t,n){return cs(e,t,n,(t,n)=>{let r=Array.isArray(e)?e:[e];ns.pre(()=>r.map(e=>e()),(e,n)=>{t(e,n??[])},n)})}ls.pre=us;function ds(e){Rn(()=>()=>{e()})}function fs(e,t){return setTimeout(t,e)}function ps(e){kr().then(e)}var ms=1,hs=9,gs=11;function _s(e){return oo(e)&&e.nodeType===ms&&typeof e.nodeName==`string`}function vs(e){return oo(e)&&e.nodeType===hs}function ys(e){return oo(e)&&e.constructor?.name===`VisualViewport`}function bs(e){return oo(e)&&e.nodeType!==void 0}function xs(e){return bs(e)&&e.nodeType===gs&&`host`in e}function Ss(e,t){if(!e||!t||!_s(e)||!_s(t))return!1;let n=t.getRootNode?.();if(e===t||e.contains(t))return!0;if(n&&xs(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function Cs(e){return vs(e)?e:ys(e)?e.document:e?.ownerDocument??document}function ws(e){let t=e.activeElement;for(;t?.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}var Ts=class{element;#e=j(()=>this.element.current?this.element.current.getRootNode()??document:document);get root(){return H(this.#e)}set root(e){P(this.#e,e)}constructor(e){typeof e==`function`?this.element=Q(e):this.element=e}getDocument=()=>Cs(this.root);getWindow=()=>this.getDocument().defaultView??window;getActiveElement=()=>ws(this.root);isActiveElement=e=>e===this.getActiveElement();getElementById(e){return this.root.getElementById(e)}querySelector=e=>this.root?this.root.querySelector(e):null;querySelectorAll=e=>this.root?this.root.querySelectorAll(e):[];setTimeout=(e,t)=>this.getWindow().setTimeout(e,t);clearTimeout=e=>this.getWindow().clearTimeout(e)};function Es(e,t){return{[Nr()]:n=>fo(e)?(e.current=n,Mr(()=>t?.(n)),()=>{`isConnected`in n&&n.isConnected||(e.current=null,t?.(null))}):(e(n),Mr(()=>t?.(n)),()=>{`isConnected`in n&&n.isConnected||(e(null),t?.(null))})}}function Ds(e){return e?``:void 0}function Os(e){return e?`open`:`closed`}function ks(e){return e===`starting`?{\"data-starting-style\":``}:e===`ending`?{\"data-ending-style\":``}:{}}var As=class{#e;#t;attrs;constructor(e){this.#e=e.getVariant?e.getVariant():null,this.#t=this.#e?`data-${this.#e}-`:`data-${e.component}-`,this.getAttr=this.getAttr.bind(this),this.selector=this.selector.bind(this),this.attrs=Object.fromEntries(e.parts.map(e=>[e,this.getAttr(e)]))}getAttr(e,t){return t?`data-${t}-${e}`:`${this.#t}${e}`}selector(e,t){return`[${this.getAttr(e,t)}]`}};function js(e){let t=new As(e);return{...t.attrs,selector:t.selector,getAttr:t.getAttr}}var Ms=typeof document<`u`,Ns=Ps();function Ps(){return Ms&&window?.navigator?.userAgent&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function Fs(e){return e instanceof HTMLElement}function Is(e){return e instanceof Element||e instanceof SVGElement}var Ls=class{#e;#t=null;#n=null;#r=0;constructor(e){this.#e=e,ds(()=>this.#i())}#i(){this.#t!==null&&(window.cancelAnimationFrame(this.#t),this.#t=null),this.#n?.disconnect(),this.#n=null,this.#r++}run(e){this.#i();let t=this.#e.ref.current;if(!t)return;if(typeof t.getAnimations!=`function`){this.#a(e);return}let n=this.#r,r=()=>{n===this.#r&&this.#a(e)},i=()=>{if(n!==this.#r)return;let e=t.getAnimations();if(e.length===0){r();return}Promise.all(e.map(e=>e.finished)).then(()=>{r()}).catch(()=>{if(n===this.#r){if(t.getAnimations().some(e=>e.pending||e.playState!==`finished`)){i();return}r()}})},a=()=>{this.#t=window.requestAnimationFrame(()=>{this.#t=null,i()})};if(!this.#e.afterTick.current){a();return}this.#t=window.requestAnimationFrame(()=>{this.#t=null;let e=`data-starting-style`;if(!t.hasAttribute(e)){a();return}this.#n=new MutationObserver(()=>{n===this.#r&&(t.hasAttribute(e)||(this.#n?.disconnect(),this.#n=null,a()))}),this.#n.observe(t,{attributes:!0,attributeFilter:[e]})})}#a(e){let t=()=>{e()};this.#e.afterTick?ps(t):t()}},Rs=class{#e;#t;#n;#r=N(!1);#i=N(void 0);#a=!1;#o=null;constructor(e){this.#e=e,P(this.#r,e.open.current,!0),this.#t=e.enabled??!0,this.#n=new Ls({ref:this.#e.ref,afterTick:this.#e.open}),ds(()=>this.#s()),ns(()=>this.#e.open.current,e=>{if(!this.#a){this.#a=!0;return}if(this.#s(),!e&&this.#e.shouldSkipExitAnimation?.()){P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.();return}if(e&&P(this.#r,!0),P(this.#i,e?`starting`:`ending`,!0),e&&(this.#o=window.requestAnimationFrame(()=>{this.#o=null,this.#e.open.current&&P(this.#i,void 0)})),!this.#t){e||P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.();return}this.#n.run(()=>{e===this.#e.open.current&&(this.#e.open.current||P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.())})})}get shouldRender(){return H(this.#r)}get transitionStatus(){return H(this.#i)}#s(){this.#o!==null&&(window.cancelAnimationFrame(this.#o),this.#o=null)}};function $(){}function zs(e,t){return t===void 0?`bits-${e}`:`bits-${e}-${t}`}var Bs=js({component:`dialog`,parts:[`content`,`trigger`,`overlay`,`title`,`description`,`close`,`cancel`,`action`]}),Vs=new Qo(`Dialog.Root | AlertDialog.Root`),Hs=class e{static create(t){let n=Vs.getOr(null);return Vs.set(new e(t,n))}opts;#e=N(null);get triggerNode(){return H(this.#e)}set triggerNode(e){P(this.#e,e,!0)}#t=N(null);get contentNode(){return H(this.#t)}set contentNode(e){P(this.#t,e,!0)}#n=N(null);get overlayNode(){return H(this.#n)}set overlayNode(e){P(this.#n,e,!0)}#r=N(null);get descriptionNode(){return H(this.#r)}set descriptionNode(e){P(this.#r,e,!0)}#i=N(void 0);get contentId(){return H(this.#i)}set contentId(e){P(this.#i,e,!0)}#a=N(void 0);get titleId(){return H(this.#a)}set titleId(e){P(this.#a,e,!0)}#o=N(void 0);get triggerId(){return H(this.#o)}set triggerId(e){P(this.#o,e,!0)}#s=N(void 0);get descriptionId(){return H(this.#s)}set descriptionId(e){P(this.#s,e,!0)}#c=N(null);get cancelNode(){return H(this.#c)}set cancelNode(e){P(this.#c,e,!0)}#l=N(0);get nestedOpenCount(){return H(this.#l)}set nestedOpenCount(e){P(this.#l,e,!0)}depth;parent;contentPresence;overlayPresence;constructor(e,t){this.opts=e,this.parent=t,this.depth=t?t.depth+1:0,this.handleOpen=this.handleOpen.bind(this),this.handleClose=this.handleClose.bind(this),this.contentPresence=new Rs({ref:Q(()=>this.contentNode),open:this.opts.open,enabled:!0,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new Rs({ref:Q(()=>this.overlayNode),open:this.opts.open,enabled:!0}),ns(()=>this.opts.open.current,e=>{this.parent&&(e?this.parent.incrementNested():this.parent.decrementNested())},{lazy:!0}),ds(()=>{this.opts.open.current&&this.parent?.decrementNested()})}handleOpen(){this.opts.open.current||(this.opts.open.current=!0)}handleClose(){this.opts.open.current&&(this.opts.open.current=!1)}getBitsAttr=e=>Bs.getAttr(e,this.opts.variant.current);incrementNested(){this.nestedOpenCount++,this.parent?.incrementNested()}decrementNested(){this.nestedOpenCount!==0&&(this.nestedOpenCount--,this.parent?.decrementNested())}#u=j(()=>({\"data-state\":Os(this.opts.open.current)}));get sharedProps(){return H(this.#u)}set sharedProps(e){P(this.#u,e)}},Us=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){this.opts.disabled.current||e.button>0||this.root.handleClose()}onkeydown(e){this.opts.disabled.current||(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),this.root.handleClose())}#e=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(this.opts.variant.current)]:``,onclick:this.onclick,onkeydown:this.onkeydown,disabled:this.opts.disabled.current?!0:void 0,tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Ws=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.root.titleId=this.opts.id.current,this.attachment=Es(this.opts.ref),ns.pre(()=>this.opts.id.current,e=>{this.root.titleId=e})}#e=j(()=>({id:this.opts.id.current,role:`heading`,\"aria-level\":this.opts.level.current,[this.root.getBitsAttr(`title`)]:``,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Gs=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.root.descriptionId=this.opts.id.current,this.attachment=Es(this.opts.ref,e=>{this.root.descriptionNode=e}),ns.pre(()=>this.opts.id.current,e=>{this.root.descriptionId=e})}#e=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(`description`)]:``,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Ks=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref,e=>{this.root.contentNode=e,this.root.contentId=e?.id})}#e=j(()=>({open:this.root.opts.open.current}));get snippetProps(){return H(this.#e)}set snippetProps(e){P(this.#e,e)}#t=j(()=>({id:this.opts.id.current,role:this.root.opts.variant.current===`alert-dialog`?`alertdialog`:`dialog`,\"aria-modal\":`true`,\"aria-describedby\":this.root.descriptionId,\"aria-labelledby\":this.root.titleId,[this.root.getBitsAttr(`content`)]:``,style:{pointerEvents:`auto`,outline:this.root.opts.variant.current===`alert-dialog`?`none`:void 0,\"--bits-dialog-depth\":this.root.depth,\"--bits-dialog-nested-count\":this.root.nestedOpenCount,contain:`layout style`},tabindex:this.root.opts.variant.current===`alert-dialog`?-1:void 0,\"data-nested-open\":Ds(this.root.nestedOpenCount>0),\"data-nested\":Ds(this.root.parent!==null),...ks(this.root.contentPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return H(this.#t)}set props(e){P(this.#t,e)}get shouldRender(){return this.root.contentPresence.shouldRender}},qs=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref,e=>this.root.overlayNode=e)}#e=j(()=>({open:this.root.opts.open.current}));get snippetProps(){return H(this.#e)}set snippetProps(e){P(this.#e,e)}#t=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(`overlay`)]:``,style:{pointerEvents:`auto`,\"--bits-dialog-depth\":this.root.depth,\"--bits-dialog-nested-count\":this.root.nestedOpenCount},\"data-nested-open\":Ds(this.root.nestedOpenCount>0),\"data-nested\":Ds(this.root.parent!==null),...ks(this.root.overlayPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return H(this.#t)}set props(e){P(this.#t,e)}get shouldRender(){return this.root.overlayPresence.shouldRender}},Js=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`ref`,`child`,`children`,`level`]),Ys=U(`<div><!></div>`);function Xs(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`level`,3,2),o=ca(t,Js),s=Ws.create({id:Q(()=>r()),level:Q(()=>a()),ref:Q(()=>i(),e=>i(e))}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(c)})),G(e,n)},p=e=>{var n=Ys();ea(n,()=>({...H(c)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(u,e=>{t.child?e(d):e(p,-1)}),G(e,l),k()}function Zs(e,t){var n=W();mi(I(n),()=>t.children,e=>{var n=W();J(I(n),()=>t.children??f),G(e,n)}),G(e,n)}var Qs=new Qo(`BitsConfig`);function $s(){let e=new ec(null,{});return Qs.getOr(e).opts}var ec=class{opts;constructor(e,t){let n=tc(e,t);this.opts={defaultPortalTo:n(e=>e.defaultPortalTo),defaultLocale:n(e=>e.defaultLocale)}}};function tc(e,t){return n=>Q(()=>{let r=n(t)?.current;if(r!==void 0)return r;if(e!==null)return n(e.opts)?.current})}function nc(e,t){return n=>{let r=$s();return Q(()=>{let i=n();if(i!==void 0)return i;let a=e(r).current;return a===void 0?t:a})}}var rc=nc(e=>e.defaultPortalTo,`body`);function ic(e,t){O(t,!0);let n=rc(()=>t.to),r=nt(),i=j(a);function a(){if(!Ms||t.disabled)return null;let e=null;return e=typeof n.current==`string`?document.querySelector(n.current):n.current,e}let o;function s(){o&&=(di(o),null)}ns([()=>H(i),()=>t.disabled],([e,n])=>{if(!e||n){s();return}return o=si(Zs,{target:e,props:{children:t.children},context:r}),()=>{s()}});var c=W(),l=I(c),u=e=>{var n=W();J(I(n),()=>t.children??f),G(e,n)};q(l,e=>{t.disabled&&e(u)}),G(e,c),k()}var ac=class{eventName;options;constructor(e,t={bubbles:!0,cancelable:!0}){this.eventName=e,this.options=t}createEvent(e){return new CustomEvent(this.eventName,{...this.options,detail:e})}dispatch(e,t){let n=this.createEvent(t);return e.dispatchEvent(n),n}listen(e,t,n){return Jr(e,this.eventName,e=>{t(e)},n)}};function oc(e,t=500){let n=null,r=(...r)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...r)},t)};return r.destroy=()=>{n!==null&&(clearTimeout(n),n=null)},r}function sc(e,t){return e===t||e.contains(t)}function cc(e){return e?.ownerDocument??document}function lc(e,t){let{clientX:n,clientY:r}=e,i=t.getBoundingClientRect();return n<i.left||n>i.right||r<i.top||r>i.bottom}var uc=[`input:not([inert]):not([inert] *)`,`select:not([inert]):not([inert] *)`,`textarea:not([inert]):not([inert] *)`,`a[href]:not([inert]):not([inert] *)`,`button:not([inert]):not([inert] *)`,`[tabindex]:not(slot):not([inert]):not([inert] *)`,`audio[controls]:not([inert]):not([inert] *)`,`video[controls]:not([inert]):not([inert] *)`,`[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)`,`details>summary:first-of-type:not([inert]):not([inert] *)`,`details:not([inert]):not([inert] *)`],dc=uc.join(`,`),fc=typeof Element>`u`,pc=fc?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,mc=!fc&&Element.prototype.getRootNode?function(e){return e?.getRootNode?.call(e)}:function(e){return e?.ownerDocument},hc=function(e,t){t===void 0&&(t=!0);var n=e?.getAttribute?.call(e,`inert`);return n===``||n===`true`||t&&e&&(typeof e.closest==`function`?e.closest(`[inert]`):hc(e.parentNode))},gc=function(e){var t=e?.getAttribute?.call(e,`contenteditable`);return t===``||t===`true`},_c=function(e,t,n){if(hc(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(dc));return t&&pc.call(e,dc)&&r.unshift(e),r=r.filter(n),r},vc=function(e,t,n){for(var r=[],i=Array.from(e);i.length;){var a=i.shift();if(!hc(a,!1))if(a.tagName===`SLOT`){var o=a.assignedElements(),s=vc(o.length?o:a.children,!0,n);n.flatten?r.push.apply(r,s):r.push({scopeParent:a,candidates:s})}else{pc.call(a,dc)&&n.filter(a)&&(t||!e.includes(a))&&r.push(a);var c=a.shadowRoot||typeof n.getShadowRoot==`function`&&n.getShadowRoot(a),l=!hc(c,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(a));if(c&&l){var u=vc(c===!0?a.children:c.children,!0,n);n.flatten?r.push.apply(r,u):r.push({scopeParent:a,candidates:u})}else i.unshift.apply(i,a.children)}}return r},yc=function(e){return!isNaN(parseInt(e.getAttribute(`tabindex`),10))},bc=function(e){if(!e)throw Error(`No node provided`);return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||gc(e))&&!yc(e)?0:e.tabIndex},xc=function(e,t){var n=bc(e);return n<0&&t&&!yc(e)?0:n},Sc=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Cc=function(e){return e.tagName===`INPUT`},wc=function(e){return Cc(e)&&e.type===`hidden`},Tc=function(e){return e.tagName===`DETAILS`&&Array.prototype.slice.apply(e.children).some(function(e){return e.tagName===`SUMMARY`})},Ec=function(e,t){for(var n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]},Dc=function(e){if(!e.name)return!0;var t=e.form||mc(e),n=function(e){return t.querySelectorAll(`input[type=\"radio\"][name=\"`+e+`\"]`)},r;if(typeof window<`u`&&window.CSS!==void 0&&typeof window.CSS.escape==`function`)r=n(window.CSS.escape(e.name));else try{r=n(e.name)}catch(e){return console.error(`Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s`,e.message),!1}var i=Ec(r,e.form);return!i||i===e},Oc=function(e){return Cc(e)&&e.type===`radio`},kc=function(e){return Oc(e)&&!Dc(e)},Ac=function(e){var t=e&&mc(e),n=t?.host,r=!1;if(t&&t!==e){var i,a,o;for(r=!!((i=n)!=null&&(a=i.ownerDocument)!=null&&a.contains(n)||e!=null&&(o=e.ownerDocument)!=null&&o.contains(e));!r&&n;){var s,c;t=mc(n),n=t?.host,r=!!((s=n)!=null&&(c=s.ownerDocument)!=null&&c.contains(n))}}return r},jc=function(e){var t=e.getBoundingClientRect(),n=t.width,r=t.height;return n===0&&r===0},Mc=function(e,t){var n=t.displayCheck,r=t.getShadowRoot;if(n===`full-native`&&`checkVisibility`in e)return!e.checkVisibility({checkOpacity:!1,opacityProperty:!1,contentVisibilityAuto:!0,visibilityProperty:!0,checkVisibilityCSS:!0});if(getComputedStyle(e).visibility===`hidden`)return!0;var i=pc.call(e,`details>summary:first-of-type`)?e.parentElement:e;if(pc.call(i,`details:not([open]) *`))return!0;if(!n||n===`full`||n===`full-native`||n===`legacy-full`){if(typeof r==`function`){for(var a=e;e;){var o=e.parentElement,s=mc(e);if(o&&!o.shadowRoot&&r(o)===!0)return jc(e);e=e.assignedSlot?e.assignedSlot:!o&&s!==e.ownerDocument?s.host:o}e=a}if(Ac(e))return!e.getClientRects().length;if(n!==`legacy-full`)return!0}else if(n===`non-zero-area`)return jc(e);return!1},Nc=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName===`FIELDSET`&&t.disabled){for(var n=0;n<t.children.length;n++){var r=t.children.item(n);if(r.tagName===`LEGEND`)return pc.call(t,`fieldset[disabled] *`)?!0:!r.contains(e)}return!0}t=t.parentElement}return!1},Pc=function(e,t){return!(t.disabled||wc(t)||Mc(t,e)||Tc(t)||Nc(t))},Fc=function(e,t){return!(kc(t)||bc(t)<0||!Pc(e,t))},Ic=function(e){var t=parseInt(e.getAttribute(`tabindex`),10);return!!(isNaN(t)||t>=0)},Lc=function(e){var t=[],n=[];return e.forEach(function(e,r){var i=!!e.scopeParent,a=i?e.scopeParent:e,o=xc(a,i),s=i?Lc(e.candidates):a;o===0?i?t.push.apply(t,s):t.push(a):n.push({documentOrder:r,tabIndex:o,item:e,isScope:i,content:s})}),n.sort(Sc).reduce(function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e},[]).concat(t)},Rc=function(e,t){return t||={},Lc(t.getShadowRoot?vc([e],t.includeContainer,{filter:Fc.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:Ic}):_c(e,t.includeContainer,Fc.bind(null,t)))},zc=function(e,t){return t||={},t.getShadowRoot?vc([e],t.includeContainer,{filter:Pc.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):_c(e,t.includeContainer,Pc.bind(null,t))},Bc=uc.concat(`iframe:not([inert]):not([inert] *)`).join(`,`),Vc=function(e,t){if(t||={},!e)throw Error(`No node provided`);return pc.call(e,Bc)===!1?!1:Pc(t,e)},Hc=`data-context-menu-trigger`,Uc=`data-context-menu-content`;new Qo(`Menu.Root`),new Qo(`Menu.Root | Menu.Sub`),new Qo(`Menu.Content`),new Qo(`Menu.Group | Menu.RadioGroup`),new Qo(`Menu.RadioGroup`),new Qo(`Menu.CheckboxGroup`),new ac(`bitsmenuopen`,{bubbles:!1,cancelable:!0}),js({component:`menu`,parts:[`trigger`,`content`,`sub-trigger`,`item`,`group`,`group-heading`,`checkbox-group`,`checkbox-item`,`radio-group`,`radio-item`,`separator`,`sub-content`,`arrow`]}),globalThis.bitsDismissableLayers??=new Map;var Wc=class e{static create(t){return new e(t)}opts;#e;#t;#n={pointerdown:!1};#r=!1;#i=!1;#a=void 0;#o;#s=$;constructor(e){this.opts=e,this.#t=e.interactOutsideBehavior,this.#e=e.onInteractOutside,this.#o=e.onFocusOutside,Rn(()=>{this.#a=cc(this.opts.ref.current)});let t=$,n=()=>{this.#g(),globalThis.bitsDismissableLayers.delete(this),this.#d.destroy(),t()};ns([()=>this.opts.enabled.current,()=>this.opts.ref.current],()=>{if(!(!this.opts.enabled.current||!this.opts.ref.current))return fs(1,()=>{this.opts.ref.current&&(globalThis.bitsDismissableLayers.set(this,this.#t),t(),t=this.#l())}),n}),ds(()=>{this.#g.destroy(),globalThis.bitsDismissableLayers.delete(this),this.#d.destroy(),this.#s(),t()})}#c=e=>{e.defaultPrevented||this.opts.ref.current&&ps(()=>{!this.opts.ref.current||this.#h(e.target)||e.target&&!this.#i&&this.#o.current?.(e)})};#l(){return Vo(Jr(this.#a,`pointerdown`,Vo(this.#f,this.#m),{capture:!0}),Jr(this.#a,`pointerdown`,Vo(this.#p,this.#d)),Jr(this.#a,`focusin`,this.#c))}#u=e=>{let t=e;t.defaultPrevented&&(t=Jc(e)),this.#e.current(e)};#d=oc(e=>{if(!this.opts.ref.current){this.#s();return}let t=this.opts.isValidEvent.current(e,this.opts.ref.current)||qc(e,this.opts.ref.current);if(!this.#r||this.#_()||!t){this.#s();return}let n=e;if(n.defaultPrevented&&(n=Jc(n)),this.#t.current!==`close`&&this.#t.current!==`defer-otherwise-close`){this.#s();return}e.pointerType===`touch`?(this.#s(),this.#s=Jr(this.#a,`click`,this.#u,{once:!0})):this.#e.current(n)},10);#f=e=>{this.#n[e.type]=!0};#p=e=>{this.#n[e.type]=!1};#m=()=>{this.opts.ref.current&&(this.#r=Kc(this.opts.ref.current))};#h=e=>this.opts.ref.current?sc(this.opts.ref.current,e):!1;#g=oc(()=>{for(let e in this.#n)this.#n[e]=!1;this.#r=!1},20);#_(){return Object.values(this.#n).some(Boolean)}#v=()=>{this.#i=!0};#y=()=>{this.#i=!1};props={onfocuscapture:this.#v,onblurcapture:this.#y}};function Gc(e=[...globalThis.bitsDismissableLayers]){return e.findLast(([e,{current:t}])=>t===`close`||t===`ignore`)}function Kc(e){let t=[...globalThis.bitsDismissableLayers],n=Gc(t);if(n)return n[0].opts.ref.current===e;let[r]=t[0];return r.opts.ref.current===e}function qc(e,t){let n=e.target;if(!Is(n))return!1;let r=!!n.closest(`[${Hc}]`),i=!!t.closest(`[${Uc}]`);return`button`in e&&e.button>0&&!r?!1:`button`in e&&e.button===0&&r&&i?!0:r&&i?!1:cc(n).documentElement.contains(n)&&!sc(t,n)&&lc(e,t)}function Jc(e){let t=e.currentTarget,n=e.target,r;r=e instanceof PointerEvent?new PointerEvent(e.type,e):new PointerEvent(`pointerdown`,e);let i=!1;return new Proxy(r,{get:(r,a)=>a===`currentTarget`?t:a===`target`?n:a===`preventDefault`?()=>{i=!0,typeof r.preventDefault==`function`&&r.preventDefault()}:a===`defaultPrevented`?i:a in r?r[a]:e[a]})}function Yc(e,t){O(t,!0);let n=Y(t,`interactOutsideBehavior`,3,`close`),r=Y(t,`onInteractOutside`,3,$),i=Y(t,`onFocusOutside`,3,$),a=Y(t,`isValidEvent`,3,()=>!1),o=Wc.create({id:Q(()=>t.id),interactOutsideBehavior:Q(()=>n()),onInteractOutside:Q(()=>r()),enabled:Q(()=>t.enabled),onFocusOutside:Q(()=>i()),isValidEvent:Q(()=>a()),ref:t.ref});var s=W();J(I(s),()=>t.children??f,()=>({props:o.props})),G(e,s),k()}globalThis.bitsEscapeLayers??=new Map;var Xc=class e{static create(t){return new e(t)}opts;domContext;constructor(e){this.opts=e,this.domContext=new Ts(this.opts.ref);let t=$;ns(()=>e.enabled.current,n=>(n&&(globalThis.bitsEscapeLayers.set(this,e.escapeKeydownBehavior),t=this.#e()),()=>{t(),globalThis.bitsEscapeLayers.delete(this)}))}#e=()=>Jr(this.domContext.getDocument(),`keydown`,this.#t,{passive:!1});#t=e=>{if(e.key!==`Escape`||!Zc(this))return;let t=new KeyboardEvent(e.type,e);e.preventDefault();let n=this.opts.escapeKeydownBehavior.current;n!==`close`&&n!==`defer-otherwise-close`||this.opts.onEscapeKeydown.current(t)}};function Zc(e){let t=[...globalThis.bitsEscapeLayers],n=t.findLast(([e,{current:t}])=>t===`close`||t===`ignore`);if(n)return n[0]===e;let[r]=t[0];return r===e}function Qc(e,t){O(t,!0);let n=Y(t,`escapeKeydownBehavior`,3,`close`),r=Y(t,`onEscapeKeydown`,3,$);Xc.create({escapeKeydownBehavior:Q(()=>n()),onEscapeKeydown:Q(()=>r()),enabled:Q(()=>t.enabled),ref:t.ref});var i=W();J(I(i),()=>t.children??f),G(e,i),k()}var $c=class e{static instance;#e=po([]);#t=new WeakMap;#n=new WeakMap;static getInstance(){return this.instance||=new e,this.instance}register(e){let t=this.getActive();t&&t!==e&&t.pause();let n=document.activeElement;n&&n!==document.body&&this.#n.set(e,n),this.#e.current=this.#e.current.filter(t=>t!==e),this.#e.current.unshift(e)}unregister(e){this.#e.current=this.#e.current.filter(t=>t!==e);let t=this.getActive();t&&t.resume()}getActive(){return this.#e.current[0]}setFocusMemory(e,t){this.#t.set(e,t)}getFocusMemory(e){return this.#t.get(e)}isActiveScope(e){return this.getActive()===e}setPreFocusMemory(e,t){this.#n.set(e,t)}getPreFocusMemory(e){return this.#n.get(e)}clearPreFocusMemory(e){this.#n.delete(e)}},el=class e{#e=!1;#t=null;#n=$c.getInstance();#r=[];#i;constructor(e){this.#i=e}get paused(){return this.#e}pause(){this.#e=!0}resume(){this.#e=!1}#a(){for(let e of this.#r)e();this.#r=[]}mount(e){this.#t&&this.unmount(),this.#t=e,this.#n.register(this),this.#c(),this.#o()}unmount(){this.#t&&=(this.#a(),this.#s(),this.#n.unregister(this),this.#n.clearPreFocusMemory(this),null)}#o(){if(!this.#t)return;let e=new CustomEvent(`focusScope.onOpenAutoFocus`,{bubbles:!1,cancelable:!0});this.#i.onOpenAutoFocus.current(e),e.defaultPrevented||requestAnimationFrame(()=>{if(!this.#t)return;let e=this.#u();e?(e.focus(),this.#n.setFocusMemory(this,e)):this.#t.focus()})}#s(){let e=new CustomEvent(`focusScope.onCloseAutoFocus`,{bubbles:!1,cancelable:!0});if(this.#i.onCloseAutoFocus.current?.(e),!e.defaultPrevented){let e=this.#n.getPreFocusMemory(this);if(e&&document.contains(e))try{e.focus()}catch{document.body.focus()}}}#c(){if(!this.#t||!this.#i.trap.current)return;let e=this.#t,t=e.ownerDocument;this.#r.push(Jr(t,`focusin`,t=>{if(this.#e||!this.#n.isActiveScope(this))return;let n=t.target;if(n)if(e.contains(n))this.#n.setFocusMemory(this,n);else{let n=this.#n.getFocusMemory(this);if(n&&e.contains(n)&&Vc(n))t.preventDefault(),n.focus();else{let t=this.#u(),n=this.#d()[0];(t||n||e).focus()}}},{capture:!0}),Jr(e,`keydown`,e=>{if(!this.#i.loop||this.#e||e.key!==`Tab`||!this.#n.isActiveScope(this))return;let n=this.#l();if(n.length===0)return;let r=n[0],i=n[n.length-1];!e.shiftKey&&t.activeElement===i?(e.preventDefault(),r.focus()):e.shiftKey&&t.activeElement===r&&(e.preventDefault(),i.focus())}));let n=new MutationObserver(()=>{let t=this.#n.getFocusMemory(this);if(t&&!e.contains(t)){let t=this.#u(),n=this.#d()[0],r=t||n;r?(r.focus(),this.#n.setFocusMemory(this,r)):e.focus()}});n.observe(e,{childList:!0,subtree:!0}),this.#r.push(()=>n.disconnect())}#l(){return this.#t?Rc(this.#t,{includeContainer:!1,getShadowRoot:!0}):[]}#u(){return this.#l()[0]||null}#d(){return this.#t?zc(this.#t,{includeContainer:!1,getShadowRoot:!0}):[]}static use(t){let n=null;return ns([()=>t.ref.current,()=>t.enabled.current],([r,i])=>{r&&i?(n||=new e(t),n.mount(r)):n&&=(n.unmount(),null)}),ds(()=>{n?.unmount()}),{get props(){return{tabindex:-1}}}}};function tl(e,t){O(t,!0);let n=Y(t,`enabled`,3,!1),r=Y(t,`trapFocus`,3,!1),i=Y(t,`loop`,3,!1),a=Y(t,`onCloseAutoFocus`,3,$),o=Y(t,`onOpenAutoFocus`,3,$),s=el.use({enabled:Q(()=>n()),trap:Q(()=>r()),loop:i(),onCloseAutoFocus:Q(()=>a()),onOpenAutoFocus:Q(()=>o()),ref:t.ref});var c=W();J(I(c),()=>t.focusScope??f,()=>({props:s.props})),G(e,c),k()}var nl=()=>{};globalThis.bitsTextSelectionLayers??=new Map;var rl=class e{static create(t){return new e(t)}opts;domContext;#e=$;#t=!1;#n=nl;#r=nl;constructor(e){this.opts=e,this.domContext=new Ts(e.ref);let t=$;ns(()=>[this.opts.enabled.current,this.opts.onPointerDown.current,this.opts.onPointerUp.current],([e,n,r])=>(this.#t=e,this.#n=n,this.#r=r,e&&(globalThis.bitsTextSelectionLayers.set(this,this.opts.enabled),t(),t=this.#i()),()=>{this.#t=!1,t(),this.#s(),globalThis.bitsTextSelectionLayers.delete(this)}))}#i(){return Vo(Jr(this.domContext.getDocument(),`pointerdown`,this.#o),Jr(this.domContext.getDocument(),`pointerup`,mo(this.#s,this.#a)))}#a=e=>{this.#r(e)};#o=e=>{let t=this.opts.ref.current,n=e.target;!Fs(t)||!Fs(n)||!this.#t||!sl(this)||!Ss(t,n)||(this.#n(e),!e.defaultPrevented&&(this.#e=al(t,this.domContext.getDocument().body)))};#s=()=>{this.#e(),this.#e=$}},il=e=>e.style.userSelect||e.style.webkitUserSelect;function al(e,t){let n=il(t),r=il(e);return ol(t,`none`),ol(e,`text`),()=>{ol(t,n),ol(e,r)}}function ol(e,t){e.style.userSelect=t,e.style.webkitUserSelect=t}function sl(e){let t=[...globalThis.bitsTextSelectionLayers];if(!t.length)return!1;let n=t.at(-1);return n?n[0]===e:!1}function cl(e,t){O(t,!0);let n=Y(t,`preventOverflowTextSelection`,3,!0),r=Y(t,`onPointerDown`,3,$),i=Y(t,`onPointerUp`,3,$);rl.create({id:Q(()=>t.id),onPointerDown:Q(()=>r()),onPointerUp:Q(()=>i()),enabled:Q(()=>t.enabled&&n()),ref:t.ref});var a=W();J(I(a),()=>t.children??f),G(e,a),k()}globalThis.bitsIdCounter??={current:0};function ll(e=`bits`){return globalThis.bitsIdCounter.current++,`${e}-${globalThis.bitsIdCounter.current}`}var ul=class{#e;#t=0;#n=N();#r;constructor(e){this.#e=e}#i(){--this.#t,this.#r&&this.#t<=0&&(this.#r(),P(this.#n,void 0),this.#r=void 0)}get(...e){return this.#t+=1,H(this.#n)===void 0&&(this.#r=Vn(()=>{P(this.#n,this.#e(...e),!0)})),Rn(()=>()=>{this.#i()}),H(this.#n)}},dl=new Zo,fl=N(null),pl=null,ml=null,hl=!1,gl=Q(()=>{for(let e of dl.values())if(e)return!0;return!1}),_l=null,vl=new ul(()=>{function e(){document.body.setAttribute(`style`,H(fl)??``),document.body.style.removeProperty(`--scrollbar-width`),Ns&&pl?.(),P(fl,null)}function t(){ml!==null&&(window.clearTimeout(ml),ml=null)}function n(e,n){t(),hl=!0,_l=Date.now();let r=_l,i=()=>{ml=null,_l===r&&(bl(dl)?hl=!1:(hl=!1,n()))},a=e===null?24:e;ml=window.setTimeout(i,a)}function r(){H(fl)===null&&dl.size===0&&!hl&&P(fl,document.body.getAttribute(`style`),!0)}return ns(()=>gl.current,()=>{if(!gl.current)return;r(),hl=!1;let e=getComputedStyle(document.documentElement),t=getComputedStyle(document.body),n=e.scrollbarGutter?.includes(`stable`)||t.scrollbarGutter?.includes(`stable`),i=window.innerWidth-document.documentElement.clientWidth,a={padding:Number.parseInt(t.paddingRight??`0`,10)+i,margin:Number.parseInt(t.marginRight??`0`,10)};i>0&&!n&&(document.body.style.paddingRight=`${a.padding}px`,document.body.style.marginRight=`${a.margin}px`,document.body.style.setProperty(`--scrollbar-width`,`${i}px`)),document.body.style.overflow=`hidden`,Ns&&(pl=Jr(document,`touchmove`,e=>{e.target===document.documentElement&&(e.touches.length>1||e.preventDefault())},{passive:!1})),ps(()=>{document.body.style.pointerEvents=`none`,document.body.style.overflow=`hidden`})}),ds(()=>()=>{pl?.()}),{get lockMap(){return dl},resetBodyStyle:e,scheduleCleanupIfNoNewLocks:n,cancelPendingCleanup:t,ensureInitialStyleCaptured:r}}),yl=class{#e=ll();#t;#n=()=>null;#r;locked;constructor(e,t=()=>null){this.#t=e,this.#n=t,this.#r=vl.get(),this.#r&&(this.#r.cancelPendingCleanup(),this.#r.ensureInitialStyleCaptured(),this.#r.lockMap.set(this.#e,this.#t??!1),this.locked=Q(()=>this.#r.lockMap.get(this.#e)??!1,e=>this.#r.lockMap.set(this.#e,e)),ds(()=>{if(this.#r.lockMap.delete(this.#e),bl(this.#r.lockMap))return;let e=this.#n();this.#r.scheduleCleanupIfNoNewLocks(e,()=>{this.#r.resetBodyStyle()})}))}};function bl(e){for(let[t,n]of e)if(n)return!0;return!1}function xl(e,t){O(t,!0);let n=Y(t,`preventScroll`,3,!0),r=Y(t,`restoreScrollDelay`,3,null);n()&&new yl(n(),()=>r()),k()}var Sl=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`forceMount`,`child`,`children`,`ref`]),Cl=U(`<div><!></div>`);function wl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`forceMount`,3,!1),a=Y(t,`ref`,15,null),o=ca(t,Sl),s=qs.create({id:Q(()=>r()),ref:Q(()=>a(),e=>a(e))}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W(),r=I(n),i=e=>{var n=W(),r=I(n);{let e=j(()=>({props:Jo(H(c)),...s.snippetProps}));J(r,()=>t.child,()=>H(e))}G(e,n)},a=e=>{var n=Cl();ea(n,e=>({...e}),[()=>Jo(H(c))]),J(F(n),()=>t.children??f,()=>s.snippetProps),E(n),G(e,n)};q(r,e=>{t.child?e(i):e(a,-1)}),G(e,n)};q(u,e=>{(s.shouldRender||i())&&e(d)}),G(e,l),k()}var Tl=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`children`,`child`,`ref`]),El=U(`<div><!></div>`);function Dl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=ca(t,Tl),o=Gs.create({id:Q(()=>r()),ref:Q(()=>i(),e=>i(e))}),s=j(()=>Jo(a,o.props));var c=W(),l=I(c),u=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(s)})),G(e,n)},d=e=>{var n=El();ea(n,()=>({...H(s)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(l,e=>{t.child?e(u):e(d,-1)}),G(e,c),k()}function Ol(e,t){O(t,!0);let n=Y(t,`open`,15,!1),r=Y(t,`onOpenChange`,3,$),i=Y(t,`onOpenChangeComplete`,3,$);Hs.create({variant:Q(()=>`dialog`),open:Q(()=>n(),e=>{n(e),r()(e)}),onOpenChangeComplete:Q(()=>i())});var a=W();J(I(a),()=>t.children??f),G(e,a),k()}var kl=new Set([`$$slots`,`$$events`,`$$legacy`,`children`,`child`,`id`,`ref`,`disabled`]),Al=U(`<button><!></button>`);function jl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`disabled`,3,!1),o=ca(t,kl),s=Us.create({variant:Q(()=>`close`),id:Q(()=>r()),ref:Q(()=>i(),e=>i(e)),disabled:Q(()=>!!a())}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(c)})),G(e,n)},p=e=>{var n=Al();ea(n,()=>({...H(c)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(u,e=>{t.child?e(d):e(p,-1)}),G(e,l),k()}var Ml=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`children`,`child`,`ref`,`forceMount`,`onCloseAutoFocus`,`onOpenAutoFocus`,`onEscapeKeydown`,`onInteractOutside`,`trapFocus`,`preventScroll`,`restoreScrollDelay`]),Nl=U(`<!> <!>`,1),Pl=U(`<!> <div><!></div>`,1);function Fl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`forceMount`,3,!1),o=Y(t,`onCloseAutoFocus`,3,$),s=Y(t,`onOpenAutoFocus`,3,$),c=Y(t,`onEscapeKeydown`,3,$),l=Y(t,`onInteractOutside`,3,$),u=Y(t,`trapFocus`,3,!0),d=Y(t,`preventScroll`,3,!0),p=Y(t,`restoreScrollDelay`,3,null),m=ca(t,Ml),h=Ks.create({id:Q(()=>r()),ref:Q(()=>i(),e=>i(e))}),g=j(()=>Jo(m,h.props));var _=W(),v=I(_),y=e=>{tl(e,{get ref(){return h.opts.ref},loop:!0,get trapFocus(){return u()},get enabled(){return h.root.opts.open.current},get onOpenAutoFocus(){return s()},get onCloseAutoFocus(){return o()},focusScope:(e,n)=>{let r=()=>n?.().props;Qc(e,ua(()=>H(g),{get enabled(){return h.root.opts.open.current},get ref(){return h.opts.ref},onEscapeKeydown:e=>{c()(e),!e.defaultPrevented&&h.root.handleClose()},children:(e,n)=>{Yc(e,ua(()=>H(g),{get ref(){return h.opts.ref},get enabled(){return h.root.opts.open.current},onInteractOutside:e=>{l()(e),!e.defaultPrevented&&h.root.handleClose()},children:(e,n)=>{cl(e,ua(()=>H(g),{get ref(){return h.opts.ref},get enabled(){return h.root.opts.open.current},children:(e,n)=>{var i=W(),a=I(i),o=e=>{var n=Nl(),i=I(n),a=e=>{xl(e,{get preventScroll(){return d()},get restoreScrollDelay(){return p()}})};q(i,e=>{h.root.opts.open.current&&e(a)});var o=L(i,2);{let e=j(()=>({props:Jo(H(g),r()),...h.snippetProps}));J(o,()=>t.child,()=>H(e))}G(e,n)},s=e=>{var n=Pl(),i=I(n);xl(i,{get preventScroll(){return d()}});var a=L(i,2);ea(a,e=>({...e}),[()=>Jo(H(g),r())]),J(F(a),()=>t.children??f),E(a),G(e,n)};q(a,e=>{t.child?e(o):e(s,-1)}),G(e,i)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})};q(v,e=>{(h.shouldRender||a())&&e(y)}),G(e,_),k()}var Il=U(`<button class=\"flex flex-col gap-1 text-left\"><div class=\"flex items-center gap-2 font-mono text-sm\"><span class=\"size-2 shrink-0 rounded-sm\"></span> <span class=\"flex-1 truncate text-foreground\"> </span> <span class=\"tabular-nums text-muted-foreground\"> </span></div> <div class=\"h-1 overflow-hidden rounded-full bg-border\"><div class=\"h-full\"></div></div></button>`),Ll=U(`<div class=\"text-sm text-muted-foreground\">No projects tracked yet — run <code class=\"text-foreground\">syn .</code></div>`),Rl=U(`<div class=\"flex max-h-[260px] flex-col gap-2 overflow-y-auto pr-1\"></div>`),zl=U(`<div class=\"flex flex-col gap-0.5 bg-card p-3\"><span class=\"font-mono text-[10px] uppercase tracking-[0.1em] text-muted-foreground\"> </span> <span class=\"font-mono text-sm text-foreground\"> </span></div>`),Bl=U(`<!> <!> <div class=\"mt-4 grid grid-cols-2 gap-px overflow-hidden rounded-lg border bg-border\"></div> <!>`,1),Vl=U(`<!> <!>`,1);function Hl(e,t){O(t,!0);let n=N(!1),r=N(null),i=j(()=>X.data?.projects??[]),a=j(()=>Math.max(1,...H(i).map(e=>e.total_turns)));function o(e){let t=(X.data?.recent_turns??[]).find(t=>t.project_path===e.path);return t?ma(t.ts):e.last_seen?ma(e.last_seen):`—`}function s(e){return[[`Cost`,pa(e.estimated_cost_usd)],[`Turns`,Z(e.total_turns)],[`Input`,Z(e.total_input_tokens)],[`Output`,Z(e.total_output_tokens)],[`Cache R`,Z(e.total_cache_read)],[`Cache W`,Z(e.total_cache_create)],[`Blocks`,Z(e.blocked_count)],[`Last active`,o(e)]]}var c=Vl(),l=I(c);Xa(l,{title:`Projects`,meta:`by turns`,children:(e,t)=>{var o=Rl();yi(o,21,()=>H(i),e=>e.path,(e,t)=>{var i=Il(),o=F(i),s=F(o),c=L(s,2),l=F(c,!0);E(c);var u=L(c,2),d=F(u,!0);E(u),E(o);var f=L(o,2),p=F(f);E(f),E(i),R((e,n,r)=>{Ri(s,e),K(l,H(t).name),K(d,n),Ri(p,r)},[()=>`background:${ya(H(t).name)}`,()=>Z(H(t).total_turns),()=>`width:${H(t).total_turns/H(a)*100}%; background:${ya(H(t).name)}`]),Yr(`click`,i,()=>{P(r,H(t),!0),P(n,!0)}),G(e,i)},e=>{G(e,Ll())}),E(o),G(e,o)},$$slots:{default:!0}}),Ti(L(l,2),()=>Ol,(e,t)=>{t(e,{get open(){return H(n)},set open(e){P(n,e,!0)},children:(e,t)=>{var n=W();Ti(I(n),()=>ic,(e,t)=>{t(e,{children:(e,t)=>{var n=Vl(),i=I(n);Ti(i,()=>wl,(e,t)=>{t(e,{class:`fixed inset-0 z-50 bg-black/60`})}),Ti(L(i,2),()=>Fl,(e,t)=>{t(e,{class:`fixed left-1/2 top-1/2 z-50 w-[min(440px,92vw)] -translate-x-1/2 -translate-y-1/2 rounded-xl border bg-card p-5 text-card-foreground shadow-2xl`,children:(e,t)=>{var n=W(),i=I(n),a=e=>{var t=Bl(),n=I(t);{let e=j(()=>`color:${ya(H(r).name)}`);Ti(n,()=>Xs,(t,n)=>{n(t,{class:`font-serif text-xl`,get style(){return H(e)},children:(e,t)=>{Ue();var n=ai();R(()=>K(n,H(r).name)),G(e,n)},$$slots:{default:!0}})})}var i=L(n,2);Ti(i,()=>Dl,(e,t)=>{t(e,{class:`truncate font-mono text-xs text-muted-foreground`,children:(e,t)=>{Ue();var n=ai();R(()=>K(n,H(r).path)),G(e,n)},$$slots:{default:!0}})});var a=L(i,2);yi(a,21,()=>s(H(r)),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=zl(),o=F(a),s=F(o,!0);E(o);var c=L(o,2),l=F(c,!0);E(c),E(a),R(()=>{K(s,r()),K(l,i())}),G(e,a)}),E(a),Ti(L(a,2),()=>jl,(e,t)=>{t(e,{class:`mt-4 w-full rounded-md border py-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Close`))},$$slots:{default:!0}})}),G(e,t)};q(i,e=>{H(r)&&e(a)}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,c),k()}Xr([`click`]);var Ul=U(`<div class=\"flex items-baseline justify-between font-mono text-sm\"><span class=\"text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span></div>`),Wl=U(`<div class=\"text-sm text-muted-foreground\">No graph-tool calls yet.</div>`),Gl=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">calls</span></div> <div class=\"flex flex-col gap-1.5\"></div>`,1);function Kl(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global?.tool_calls??{};return Object.entries(e).sort((e,t)=>t[1]-e[1]).slice(0,8)}),r=j(()=>X.data?.global?.total_tool_calls??0);Xa(e,{title:`Graph tools used`,meta:`all projects`,children:(e,t)=>{var i=Gl(),a=I(i),o=F(a);Ue(),E(a);var s=L(a,2);yi(s,21,()=>H(n),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=Ul(),o=F(a),s=F(o,!0);E(o);var c=L(o,2),l=F(c,!0);E(c),E(a),R(()=>{K(s,r()),K(l,i())}),G(e,a)},e=>{G(e,Wl())}),E(s),R(e=>K(o,`${e??``} `),[()=>Z(H(r))]),G(e,i)},$$slots:{default:!0}}),k()}var ql=U(`<tr class=\"border-t border-border/60\"><td class=\"py-1.5 pr-2 text-muted-foreground\"> </td><td class=\"max-w-[120px] truncate py-1.5 pr-2 text-foreground\"> </td><td class=\"py-1.5 pr-2\"><span class=\"inline-flex items-center gap-1.5 rounded px-1.5 py-0.5\"><span class=\"size-1.5 rounded-sm\"></span> </span></td><td class=\"py-1.5 pr-2 text-right tabular-nums text-foreground\"> </td><td class=\"py-1.5 pr-2 text-right tabular-nums text-foreground\"> </td><td class=\"py-1.5 pr-2 text-right tabular-nums text-muted-foreground\"> </td><td class=\"py-1.5 text-right tabular-nums text-[var(--money)]\"> </td></tr>`),Jl=U(`<tr><td colspan=\"7\" class=\"py-6 text-center text-muted-foreground\">No turns recorded yet.</td></tr>`),Yl=U(`<div class=\"flex items-center justify-end gap-3 pt-1 font-mono text-sm text-muted-foreground\"><button class=\"rounded border px-2 py-1 disabled:opacity-40 enabled:hover:text-foreground\">‹ Prev</button> <span> </span> <button class=\"rounded border px-2 py-1 disabled:opacity-40 enabled:hover:text-foreground\">Next ›</button></div>`),Xl=U(`<div class=\"min-h-0 flex-1 overflow-x-auto\"><table class=\"w-full border-collapse font-mono text-sm\"><thead><tr class=\"text-left text-[10px] uppercase tracking-[0.1em] text-muted-foreground\"><th class=\"py-1.5 pr-2 font-medium\">Time</th><th class=\"py-1.5 pr-2 font-medium\">Project</th><th class=\"py-1.5 pr-2 font-medium\">Model</th><th class=\"py-1.5 pr-2 text-right font-medium\">In</th><th class=\"py-1.5 pr-2 text-right font-medium\">Out</th><th class=\"py-1.5 pr-2 text-right font-medium\">Cache R/W</th><th class=\"py-1.5 text-right font-medium\">Cost</th></tr></thead><tbody></tbody></table></div> <!>`,1);function Zl(e,t){O(t,!0);let n=N(1),r=j(()=>X.data?.recent_turns??[]),i=j(()=>Math.max(1,Math.ceil(H(r).length/25)));Rn(()=>{H(n)>H(i)&&P(n,H(i),!0)});let a=j(()=>H(r).slice((H(n)-1)*25,(H(n)-1)*25+25)),o=j(()=>H(r).length?(H(n)-1)*25+1:0),s=j(()=>Math.min(H(n)*25,H(r).length));{let t=j(()=>`showing ${H(o)}–${H(s)} of ${H(r).length}`);Xa(e,{title:`Recent turns`,get meta(){return H(t)},children:(e,t)=>{var r=Xl(),o=I(r),s=F(o),c=L(F(s));yi(c,21,()=>H(a),e=>e.ts+e.project_path+e.model,(e,t)=>{var n=ql(),r=F(n),i=F(r,!0);E(r);var a=L(r),o=F(a,!0);E(a);var s=L(a),c=F(s),l=F(c),u=L(l);E(c),E(s);var d=L(s),f=F(d,!0);E(d);var p=L(d),m=F(p,!0);E(p);var h=L(p),g=F(h);E(h);var _=L(h),v=F(_,!0);E(_),E(n),R((e,n,r,s,d,p,h,_,y)=>{K(i,e),Qi(a,`title`,H(t).project_name),K(o,H(t).project_name),Ri(c,n),Ri(l,r),K(u,` ${s??``}`),K(f,d),K(m,p),K(g,`${h??``} / ${_??``}`),K(v,y)},[()=>ma(H(t).ts),()=>`color: var(--c-${ha(H(t).model)})`,()=>`background: var(--c-${ha(H(t).model)})`,()=>ga(H(t).model),()=>Z(H(t).input),()=>Z(H(t).output),()=>Z(H(t).cache_read),()=>Z(H(t).cache_create),()=>pa(H(t).cost_usd)]),G(e,n)},e=>{G(e,Jl())}),E(c),E(s),E(o);var l=L(o,2),u=e=>{var t=Yl(),r=F(t),a=L(r,2),o=F(a);E(a);var s=L(a,2);E(t),R(()=>{r.disabled=H(n)<=1,K(o,`page ${H(n)??``} of ${H(i)??``}`),s.disabled=H(n)>=H(i)}),Yr(`click`,r,()=>P(n,Math.max(1,H(n)-1),!0)),Yr(`click`,s,()=>P(n,Math.min(H(i),H(n)+1),!0)),G(e,t)};q(l,e=>{H(i)>1&&e(u)}),G(e,r)},$$slots:{default:!0}})}k()}Xr([`click`]);var Ql=U(`<div class=\"font-mono text-xs text-muted-foreground\" title=\"Codebase exploration via the terminal (rg / cat / find) — observe-only, not yet blocked\"> <span> </span></div>`),$l=U(`<div class=\"flex items-baseline gap-2 font-mono text-xs\"><span class=\"shrink-0 text-muted-foreground\"> </span> <span> </span> <span class=\"truncate text-foreground/80\"> </span></div>`),eu=U(`<div class=\"text-sm text-muted-foreground\">No gate decisions yet.</div>`),tu=U(`<div class=\"mt-2 border-t border-border pt-2 text-[10px] uppercase tracking-wide text-muted-foreground\">Terminal hunts (observe-only)</div> <!>`,1),nu=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">blocks</span></div> <!> <div class=\"flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto\"><!> <!></div>`,1);function ru(e,t){O(t,!0);let n=j(()=>(X.data?.recent_gates??[]).slice(0,50)),r=j(()=>X.data?.global?.blocked_count??0),i=j(()=>X.data?.global?.bash_explorations??0),a=j(()=>X.data?.global?.bash_avoidable??0),o=j(()=>(X.data?.recent_bash??[]).slice(0,12));Xa(e,{title:`The Moat`,meta:`PreToolUse`,children:(e,t)=>{var s=nu(),c=I(s),l=F(c);Ue(),E(c);var u=L(c,2),d=e=>{var t=Ql(),n=F(t),r=L(n),o=F(r);E(r),E(t),R((e,t)=>{K(n,`↳ ${e??``} terminal hunts · `),Ii(r,1,Ai(H(a)>0?`text-destructive`:``)),K(o,`${t??``} the graph could answer`)},[()=>Z(H(i)),()=>Z(H(a))]),G(e,t)};q(u,e=>{H(i)>0&&e(d)});var f=L(u,2),p=F(f);yi(p,17,()=>H(n),e=>e.ts+e.query,(e,t)=>{var n=$l(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a);var s=L(a,2),c=F(s,!0);E(s),E(n),R(e=>{K(i,e),Ii(a,1,`shrink-0 rounded px-1 text-[10px] uppercase `+(H(t).decision===`block`?`bg-destructive/15 text-destructive`:`bg-[var(--c-fable)]/12 text-[var(--c-fable)]`)),K(o,H(t).decision),Qi(s,`title`,H(t).query??``),K(c,H(t).query??`—`)},[()=>ma(H(t).ts)]),G(e,n)},e=>{G(e,eu())});var m=L(p,2),h=e=>{var t=tu();yi(L(I(t),2),17,()=>H(o),e=>e.ts+e.query,(e,t)=>{var n=$l(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a);var s=L(a,2),c=F(s,!0);E(s),E(n),R(e=>{K(i,e),Ii(a,1,`shrink-0 rounded px-1 text-[10px] uppercase `+(H(t).avoidable?`bg-destructive/15 text-destructive`:`bg-muted text-muted-foreground`)),K(o,H(t).tool),Qi(s,`title`,H(t).query??``),K(c,H(t).query??`—`)},[()=>ma(H(t).ts)]),G(e,n)}),G(e,t)};q(m,e=>{H(o).length>0&&e(h)}),E(f),R(e=>K(l,`${e??``} `),[()=>Z(H(r))]),G(e,s)},$$slots:{default:!0}}),k()}var iu=U(`<div class=\"flex items-baseline justify-between gap-3 font-mono text-sm\"><span class=\"truncate text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span></div>`),au=U(`<div class=\"text-sm text-muted-foreground\">No usage learned yet — Synthra learns as you read/edit files.</div>`),ou=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">tracked</span></div> <div class=\"flex max-h-[190px] flex-col gap-1.5 overflow-y-auto\"></div>`,1);function su(e,t){O(t,!0);let n=j(()=>X.data?.active),r=j(()=>H(n)?.stats?.hot_files??[]);{let t=j(()=>H(n)?.project_name??`active project`);Xa(e,{title:`Hot files`,get meta(){return H(t)},children:(e,t)=>{var i=ou(),a=I(i),o=F(a);Ue(),E(a);var s=L(a,2);yi(s,21,()=>H(r),e=>e.path,(e,t)=>{var n=iu(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(e=>{Qi(n,`title`,H(t).path),K(i,e),K(o,H(t).score)},[()=>_a(H(t).path)]),G(e,n)},e=>{G(e,au())}),E(s),R(e=>K(o,`${e??``} `),[()=>Z(H(n)?.stats?.hot_files_total??0)]),G(e,i)},$$slots:{default:!0}})}k()}var cu=U(`<div class=\"grid grid-cols-1 gap-4 p-5 lg:grid-cols-3\"><div class=\"lg:col-span-3 lg:row-start-1\"><!></div> <div class=\"lg:col-start-1 lg:row-start-2\"><!></div> <div class=\"lg:col-start-2 lg:row-start-2\"><!></div> <div class=\"lg:col-start-1 lg:row-start-3\"><!></div> <div class=\"lg:col-start-2 lg:row-start-3\"><!></div> <div class=\"lg:col-start-1 lg:row-start-4\"><!></div> <div class=\"lg:col-start-2 lg:row-start-4\"><!></div> <div class=\"relative lg:col-start-3 lg:row-start-2 lg:row-span-3\"><div class=\"lg:absolute lg:inset-0\"><!></div></div> <div class=\"lg:col-span-3 lg:row-start-5\"><!></div></div>`);function lu(e){var t=cu(),n=F(t);Ka(F(n),{}),E(n);var r=L(n,2);Qa(F(r),{}),E(r);var i=L(r,2);eo(F(i),{}),E(i);var a=L(i,2);ao(F(a),{}),E(a);var o=L(a,2);su(F(o),{}),E(o);var s=L(o,2);Hl(F(s),{}),E(s);var c=L(s,2);Kl(F(c),{}),E(c);var l=L(c,2),u=F(l);ru(F(u),{}),E(u),E(l);var d=L(l,2);Zl(F(d),{}),E(d),E(t),G(e,t)}var uu=U(`<p> </p>`),du=U(`<div class=\"break-all\"><span class=\"text-foreground/70\"> </span> </div>`),fu=U(`<div class=\"mt-1 flex flex-col gap-0.5 font-mono text-xs text-muted-foreground/80\"></div>`),pu=U(`<button class=\"flex flex-col gap-1.5 rounded-lg border bg-card/55 p-3 text-left transition-colors hover:bg-card/85\"><div class=\"flex items-center gap-2\"><span class=\"min-w-0 flex-1 truncate font-mono text-sm text-foreground\"> </span> <span> </span></div> <!> <!></button>`);function mu(e,t){O(t,!0);let n=N(!1),r=j(()=>t.item.scope===`plugin`?t.item.source??`plugin`:t.item.scope),i=j(()=>t.item.scope===`project`?`var(--c-fable)`:t.item.scope===`personal`?`var(--c-sonnet)`:`#9bc2ef`),a=j(()=>Object.entries(t.item.meta??{}));var o=pu(),s=F(o),c=F(s),l=F(c,!0);E(c);var u=L(c,2);let d;var f=F(u);E(u),E(s);var p=L(s,2),m=e=>{var r=uu(),i=F(r,!0);E(r),R(()=>{Ii(r,1,`text-sm leading-snug text-muted-foreground `+(H(n)?``:`line-clamp-2`)),K(i,t.item.description)}),G(e,r)};q(p,e=>{t.item.description&&e(m)});var g=L(p,2),_=e=>{var t=fu();yi(t,21,()=>H(a),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=du(),o=F(a),s=F(o);E(o);var c=L(o);E(a),R(()=>{K(s,`${r()??``}:`),K(c,` ${i()??``}`)}),G(e,a)}),E(t),G(e,t)};q(g,e=>{H(n)&&H(a).length&&e(_)}),E(o),R(()=>{K(l,t.item.name),d=Ii(u,1,`shrink-0 rounded border px-1.5 py-0.5 font-mono text-[9px] uppercase tracking-wide`,null,d,{\"opacity-50\":t.item.enabled===!1}),Ri(u,`color:${H(i)}; border-color:color-mix(in oklab, ${H(i)} 35%, transparent)`),K(f,`${H(r)??``}${t.item.enabled===!1?` · off`:``}`)}),Yr(`click`,o,()=>P(n,!H(n))),G(e,o),k()}Xr([`click`]);var hu=U(`<span> </span>`),gu=U(`<button> <span class=\"opacity-60\"> </span></button>`),_u=U(`<div class=\"text-sm text-muted-foreground\">Scanning your arsenal…</div>`),vu=U(`<div class=\"text-sm text-muted-foreground\"> </div>`),yu=U(`<section class=\"flex flex-col gap-2\"><div class=\"flex items-center gap-3 border-b border-border pb-1.5\"><span class=\"size-1.5 shrink-0 rounded-sm\"></span> <span class=\"font-mono text-xs uppercase tracking-[0.14em]\"> </span> <span class=\"font-mono text-xs tracking-[0.1em] text-muted-foreground\"> </span></div> <div class=\"grid grid-cols-1 gap-2 md:grid-cols-2 2xl:grid-cols-3\"></div></section>`),bu=U(`<div class=\"flex flex-col gap-6\"></div>`),xu=U(`<div class=\"flex h-full flex-col gap-4 p-5\"><div class=\"flex flex-wrap items-center justify-between gap-3\"><h1 class=\"font-serif text-2xl text-foreground\">⚔ Arsenal</h1> <div class=\"flex items-center gap-2 font-mono text-xs text-muted-foreground\"><!> <button class=\"rounded border px-2 py-1 transition-colors hover:text-foreground\">↻ Rescan</button></div></div> <div class=\"flex flex-wrap items-center gap-2\"><!> <input placeholder=\"Filter by name or description…\" autocomplete=\"off\" class=\"ml-auto w-full max-w-72 rounded-md border bg-card/60 px-3 py-1.5 text-sm outline-none transition-colors focus:border-ring\"/></div> <!></div>`);function Su(e,t){O(t,!0);let n=N(`skills`),r=N(``),i=j(()=>X.arsenal),a=[{id:`skills`,label:`Skills`},{id:`agents`,label:`Agents`},{id:`mcp`,label:`MCP`}],o=j(()=>{let e=H(i)?H(i)[H(n)]:[],t=H(r).toLowerCase().trim();return t?e.filter(e=>e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)||(e.source??``).toLowerCase().includes(t)):e}),s=j(()=>{let e=new Map;for(let t of H(o)){let n=t.scope===`plugin`?`plugin:${t.source??`plugin`}`:t.scope,r=e.get(n);r||(r={label:t.scope===`plugin`?t.source??`plugin`:t.scope===`project`?`In this project`:`Personal · this machine`,scope:t.scope,items:[]},e.set(n,r)),r.items.push(t)}return[...e.values()]});function c(e){return e===`project`?`var(--c-fable)`:e===`personal`?`var(--c-sonnet)`:`#9bc2ef`}let l=j(()=>H(i)?new Date(H(i).scanned_at).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):``);var u=xu(),d=F(u),f=L(F(d),2),p=F(f),m=e=>{var t=hu(),n=F(t);E(t),R(()=>K(n,`${H(i).counts.plugins??``} plugins · scanned ${H(l)??``}`)),G(e,t)};q(p,e=>{H(i)&&e(m)});var h=L(p,2);E(f),E(d);var g=L(d,2),_=F(g);yi(_,17,()=>a,e=>e.id,(e,t)=>{var r=gu(),a=F(r),o=L(a),s=F(o,!0);E(o),E(r),R(()=>{Ii(r,1,`rounded-lg px-3 py-1.5 font-mono text-xs transition-colors `+(H(n)===H(t).id?`bg-accent text-accent-foreground`:`text-muted-foreground hover:text-foreground`)),K(a,`${H(t).label??``} `),K(s,H(i)?.counts?.[H(t).id]??0)}),Yr(`click`,r,()=>P(n,H(t).id,!0)),G(e,r)});var v=L(_,2);Xi(v),E(g);var y=L(g,2),b=e=>{G(e,_u())},ee=e=>{var t=vu(),n=F(t,!0);E(t),R(()=>K(n,H(r)?`No matches.`:`Nothing installed in this category.`)),G(e,t)},x=e=>{var t=bu();yi(t,21,()=>H(s),e=>e.label+e.scope,(e,t)=>{var n=yu(),r=F(n),i=F(r),a=L(i,2),o=F(a,!0);E(a);var s=L(a,2),l=F(s,!0);E(s),E(r);var u=L(r,2);yi(u,21,()=>H(t).items,e=>e.scope+(e.source??``)+e.name,(e,t)=>{mu(e,{get item(){return H(t)}})}),E(u),E(n),R((e,n)=>{Ri(i,e),Ri(a,n),K(o,H(t).label),K(l,H(t).items.length)},[()=>`background:${c(H(t).scope)}`,()=>`color:${c(H(t).scope)}`]),G(e,n)}),E(t),G(e,t)};q(y,e=>{X.arsenalLoading&&!H(i)?e(b):H(s).length?e(x,-1):e(ee,1)}),E(u),Yr(`click`,h,()=>X.loadArsenal(!0)),ia(v,()=>H(r),e=>P(r,e)),G(e,u),k()}Xr([`click`]);var Cu=U(`<details class=\"rounded-lg border bg-card/50 p-3\"><summary class=\"cursor-pointer text-sm font-medium text-foreground\"> </summary> <p class=\"mt-2 text-[13px] leading-relaxed text-muted-foreground\"> </p></details>`),wu=U(`<!> <!> <div class=\"mt-4 flex flex-col gap-2\"></div> <!>`,1),Tu=U(`<!> <!>`,1);function Eu(e,t){O(t,!0);let n=Y(t,`open`,15,!1),r=[{q:`Where do these numbers come from?`,a:`Synthra's Stop hook reads Claude Code's transcript JSONL after each turn and logs token usage to .synthra-graph/token_log.jsonl. The gate logs to gate_log.jsonl, tool calls to tool_log.jsonl. The dashboard reads those — it never feeds back into retrieval.`},{q:`How is cost calculated?`,a:`Token counts × Anthropic's published per-model rates (in src/shared/pricing.ts), summed across input, output, cache-read and cache-write. These are API-equivalent estimates, not your plan billing — useful for comparing sessions.`},{q:`What is the savings floor?`,a:`Each time the Moat blocks an exploratory Grep/Glob, we credit a deliberately conservative 500 tokens × $3/M input rate. Real savings are usually higher (it ignores cache thrash and follow-up reads the block also prevents). It's a floor, not a guess.`},{q:`What is the Moat?`,a:`A PreToolUse hook that intercepts Grep/Glob and, when the graph has confident context, blocks them and hands back the exact graph_read targets + signatures — so the agent reads ~50-token slices instead of whole files.`},{q:`What is the Arsenal view?`,a:`A scan of every skill, subagent, and MCP server available to you — project, personal (~/.claude), and plugin — with descriptions, so you never have to drop to the CLI to recall what's installed. MCP entries show name/type/url only; auth tokens are never read.`},{q:`What's the codebase graph?`,a:`tree-sitter parses your project into a symbol graph (files, symbols, imports, call edges). graph_read returns a symbol's source plus its dependency surface; graph_continue packs a context bundle.`},{q:`Where is everything stored?`,a:`.synthra-graph/ (machine-local, gitignored) holds the graph + logs; .synthra/ (git-tracked) holds branch-aware memory. Nothing leaves your machine.`},{q:`Why is my bill not lower already?`,a:`Savings land only when the agent actually uses the cheap path. v0.4–0.6 push the answer to the point of use (block payloads, edit recipes, dependency footers); a real dogfood session on the latest version is the true test.`}];var i=W();Ti(I(i),()=>Ol,(e,t)=>{t(e,{get open(){return n()},set open(e){n(e)},children:(e,t)=>{var n=W();Ti(I(n),()=>ic,(e,t)=>{t(e,{children:(e,t)=>{var n=Tu(),i=I(n);Ti(i,()=>wl,(e,t)=>{t(e,{class:`fixed inset-0 z-50 bg-black/60`})}),Ti(L(i,2),()=>Fl,(e,t)=>{t(e,{class:`fixed left-1/2 top-1/2 z-50 max-h-[85vh] w-[min(640px,92vw)] -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-xl border bg-card p-6 text-card-foreground shadow-2xl`,children:(e,t)=>{var n=wu(),i=I(n);Ti(i,()=>Xs,(e,t)=>{t(e,{class:`font-serif text-2xl`,children:(e,t)=>{Ue(),G(e,ai(`FAQ`))},$$slots:{default:!0}})});var a=L(i,2);Ti(a,()=>Dl,(e,t)=>{t(e,{class:`text-xs text-muted-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Where every number on this dashboard comes from.`))},$$slots:{default:!0}})});var o=L(a,2);yi(o,21,()=>r,e=>e.q,(e,t)=>{var n=Cu(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(()=>{K(i,H(t).q),K(o,H(t).a)}),G(e,n)}),E(o),Ti(L(o,2),()=>jl,(e,t)=>{t(e,{class:`mt-4 w-full rounded-md border py-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Close`))},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,i),k()}var Du=U(`<div class=\"flex h-screen w-screen overflow-hidden\"><!> <main class=\"min-w-0 flex-1 overflow-y-auto\"><!></main></div> <!>`,1);function Ou(e,t){O(t,!0);let n=N(!1);da(()=>(X.start(),()=>X.stop()));var r=Du(),i=I(r),a=F(i);Ua(a,{onFaq:()=>P(n,!0)});var o=L(a,2),s=F(o),c=e=>{lu(e,{})},l=e=>{Su(e,{})};q(s,e=>{X.view===`overview`?e(c):e(l,-1)}),E(o),E(i),Eu(L(i,2),{get open(){return H(n)},set open(e){P(n,e,!0)}}),G(e,r),k()}var ku=document.getElementById(`app`);if(!ku)throw Error(`missing #app mount node`);si(Ou,{target:ku});</script>\n <style rel=\"stylesheet\" crossorigin>/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}html,body{height:100%}body{background:radial-gradient(1200px 800px at 14% 16%, #2c5db81f, transparent 60%), var(--background);color:var(--foreground);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:999px}::-webkit-scrollbar-track{background:0 0}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\\/2{top:50%}.left-1\\/2{left:50%}.z-50{z-index:50}.my-1{margin-block:var(--spacing)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\\[116px\\]{width:116px;height:116px}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\\[85vh\\]{max-height:85vh}.max-h-\\[190px\\]{max-height:190px}.max-h-\\[260px\\]{max-height:260px}.min-h-0{min-height:0}.w-9{width:calc(var(--spacing) * 9)}.w-\\[64px\\]{width:64px}.w-\\[248px\\]{width:248px}.w-\\[min\\(440px\\,92vw\\)\\]{width:min(440px,92vw)}.w-\\[min\\(640px\\,92vw\\)\\]{width:min(640px,92vw)}.w-full{width:100%}.w-screen{width:100vw}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-\\[120px\\]{max-width:120px}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border,.border-border\\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.bg-\\[var\\(--c-fable\\)\\],.bg-\\[var\\(--c-fable\\)\\]\\/12{background-color:var(--c-fable)}@supports (color:color-mix(in lab, red, red)){.bg-\\[var\\(--c-fable\\)\\]\\/12{background-color:color-mix(in oklab, var(--c-fable) 12%, transparent)}}.bg-\\[var\\(--money\\)\\]{background-color:var(--money)}.bg-accent{background-color:var(--accent)}.bg-black\\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\\/50{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/50{background-color:color-mix(in oklab, var(--card) 50%, transparent)}}.bg-card\\/55{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/55{background-color:color-mix(in oklab, var(--card) 55%, transparent)}}.bg-card\\/60{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/60{background-color:color-mix(in oklab, var(--card) 60%, transparent)}}.bg-card\\/70{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/70{background-color:color-mix(in oklab, var(--card) 70%, transparent)}}.bg-destructive,.bg-destructive\\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/15{background-color:color-mix(in oklab, var(--destructive) 15%, transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground,.bg-muted-foreground\\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.bg-primary\\/90{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/90{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent,.bg-sidebar-accent\\/40{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.bg-sidebar-accent\\/40{background-color:color-mix(in oklab, var(--sidebar-accent) 40%, transparent)}}.bg-sidebar-border{background-color:var(--sidebar-border)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\\[0\\.1em\\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\\[0\\.12em\\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\\[0\\.14em\\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\\[0\\.18em\\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-all{word-break:break-all}.text-\\[var\\(--c-fable\\)\\]{color:var(--c-fable)}.text-\\[var\\(--money\\)\\]{color:var(--money)}.text-accent-foreground{color:var(--accent-foreground)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-foreground,.text-foreground\\/70{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/70{color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab, var(--foreground) 80%, transparent)}}.text-muted-foreground,.text-muted-foreground\\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/80{color:color-mix(in oklab, var(--muted-foreground) 80%, transparent)}}.text-primary-foreground{color:var(--primary-foreground)}.text-sidebar-accent-foreground{color:var(--sidebar-accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\\/60{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\\/60{color:color-mix(in oklab, var(--sidebar-foreground) 60%, transparent)}}.text-sidebar-foreground\\/75{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\\/75{color:color-mix(in oklab, var(--sidebar-foreground) 75%, transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.hover\\:bg-card\\/80:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-card\\/80:hover{background-color:color-mix(in oklab, var(--card) 80%, transparent)}}.hover\\:bg-card\\/85:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-card\\/85:hover{background-color:color-mix(in oklab, var(--card) 85%, transparent)}}.hover\\:bg-sidebar-accent\\/50:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-sidebar-accent\\/50:hover{background-color:color-mix(in oklab, var(--sidebar-accent) 50%, transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-sidebar-foreground:hover{color:var(--sidebar-foreground)}}.focus\\:border-ring:focus{border-color:var(--ring)}@media (hover:hover){.enabled\\:hover\\:text-foreground:enabled:hover{color:var(--foreground)}}.disabled\\:opacity-40:disabled{opacity:.4}@media (width>=40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=48rem){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.lg\\:absolute{position:absolute}.lg\\:inset-0{inset:0}.lg\\:col-span-3{grid-column:span 3/span 3}.lg\\:col-start-1{grid-column-start:1}.lg\\:col-start-2{grid-column-start:2}.lg\\:col-start-3{grid-column-start:3}.lg\\:row-span-3{grid-row:span 3/span 3}.lg\\:row-start-1{grid-row-start:1}.lg\\:row-start-2{grid-row-start:2}.lg\\:row-start-3{grid-row-start:3}.lg\\:row-start-4{grid-row-start:4}.lg\\:row-start-5{grid-row-start:5}.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (width>=96rem){.\\32 xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}:root{--radius:.75rem;--background:#04081a;--foreground:#ecf2fb;--card:#0a1733;--card-foreground:#ecf2fb;--popover:#0a1733;--popover-foreground:#ecf2fb;--primary:#2c5db8;--primary-foreground:#f4f7fc;--secondary:#122549;--secondary-foreground:#d7e6f7;--muted:#102146;--muted-foreground:#8ba0c2;--accent:#1b3a78;--accent-foreground:#ecf2fb;--destructive:#ff5d5d;--destructive-foreground:#fff5f5;--border:#9bc2ef24;--input:#9bc2ef2e;--ring:#5c8fe6;--sidebar:#081226;--sidebar-foreground:#d7e6f7;--sidebar-primary:#2c5db8;--sidebar-primary-foreground:#f4f7fc;--sidebar-accent:#122549;--sidebar-accent-foreground:#ecf2fb;--sidebar-border:#9bc2ef1f;--sidebar-ring:#5c8fe6;--c-fable:#2ee08f;--c-opus:#ff6338;--c-sonnet:#ffb938;--c-haiku:#7438ff;--c-unknown:#12cbf5;--money:#4ade9b;--font-sans:\"Geist\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif;--font-serif:\"Instrument Serif\", \"Times New Roman\", serif;--font-mono:\"Geist Mono\", ui-monospace, \"SF Mono\", Menlo, Consolas, monospace}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:\"*\";inherits:false}@keyframes pulse{50%{opacity:.5}}\n/*$vite$:1*/</style>\n </head>\n <body>\n <div id=\"app\"></div>\n </body>\n</html>\n","<svg width=\"107\" height=\"107\" viewBox=\"0 0 107 107\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect x=\"0.5\" y=\"0.5\" width=\"106\" height=\"106\" rx=\"7.5\" fill=\"url(#paint0_radial_21_11)\"/>\n<rect x=\"0.5\" y=\"0.5\" width=\"106\" height=\"106\" rx=\"7.5\" stroke=\"url(#paint1_linear_21_11)\"/>\n<path d=\"M26.408 72.558C25.5813 72.558 24.6513 72.4753 23.618 72.31C22.626 72.1447 21.6753 71.938 20.766 71.69C19.898 71.442 19.216 71.1733 18.72 70.884C18.4307 70.7187 18.2033 70.5533 18.038 70.388C17.914 70.1813 17.852 69.8507 17.852 69.396L17.542 59.662C17.542 58.8353 17.8107 58.422 18.348 58.422C18.8027 58.422 19.1127 58.794 19.278 59.538L19.836 61.894C21.2413 67.8047 23.866 70.76 27.71 70.76C29.7767 70.76 31.4093 70.078 32.608 68.714C33.848 67.3087 34.468 65.3453 34.468 62.824C34.468 60.3853 33.8273 58.112 32.546 56.004C31.306 53.896 29.3013 51.8087 26.532 49.742C23.4733 47.5513 21.2413 45.4433 19.836 43.418C18.4307 41.3513 17.728 39.1607 17.728 36.846C17.728 33.7873 18.782 31.3487 20.89 29.53C23.0393 27.67 25.7673 26.74 29.074 26.74C30.314 26.74 31.5127 26.8847 32.67 27.174C33.8273 27.4633 34.778 27.8767 35.522 28.414C35.77 28.5793 35.956 28.7653 36.08 28.972C36.2453 29.1787 36.328 29.4473 36.328 29.778L36.514 39.14C36.514 39.8427 36.2453 40.194 35.708 40.194C35.336 40.194 35.0673 39.9047 34.902 39.326L34.468 37.776C33.5587 34.5933 32.608 32.2787 31.616 30.832C30.6653 29.344 29.2807 28.6 27.462 28.6C25.6847 28.6 24.2587 29.1787 23.184 30.336C22.1507 31.4933 21.634 33.126 21.634 35.234C21.634 37.0113 22.2127 38.706 23.37 40.318C24.5273 41.93 26.5527 43.8933 29.446 46.208C32.546 48.7293 34.7987 51.168 36.204 53.524C37.6507 55.8387 38.374 58.3187 38.374 60.964C38.374 63.2787 37.8573 65.304 36.824 67.04C35.7907 68.776 34.3647 70.14 32.546 71.132C30.7687 72.0827 28.7227 72.558 26.408 72.558ZM44.1831 84.71C43.0671 84.71 42.1784 84.3173 41.5171 83.532C40.8558 82.788 40.5251 81.92 40.5251 80.928C40.5251 80.1427 40.7524 79.4813 41.2071 78.944C41.6618 78.4067 42.2818 78.138 43.0671 78.138C43.7284 78.138 44.2038 78.2827 44.4931 78.572C44.7824 78.8613 44.9891 79.192 45.1131 79.564C45.2371 79.936 45.3611 80.2667 45.4851 80.556C45.6091 80.8453 45.8571 80.99 46.2291 80.99C46.6838 80.99 47.0971 80.6593 47.4691 79.998C47.8411 79.378 48.3578 78.0347 49.0191 75.968C49.4324 74.728 49.6804 73.6533 49.7631 72.744C49.8871 71.8347 49.8664 70.8633 49.7011 69.83C49.5771 68.7967 49.2671 67.536 48.7711 66.048L42.0131 44.534C41.7238 43.542 41.4344 42.9013 41.1451 42.612C40.8971 42.3227 40.4838 42.116 39.9051 41.992L38.9751 41.806C38.4378 41.682 38.1691 41.4133 38.1691 41C38.1691 40.5867 38.4584 40.38 39.0371 40.38H49.2671C49.8458 40.38 50.1351 40.5867 50.1351 41C50.1351 41.4547 49.8664 41.7233 49.3291 41.806L48.3371 41.93C47.3451 42.054 46.7044 42.302 46.4151 42.674C46.1671 43.0047 46.1878 43.6247 46.4771 44.534L51.9331 62.7C52.0571 63.1133 52.2431 63.32 52.4911 63.32C52.7804 63.32 52.9871 63.1133 53.1111 62.7L58.3811 45.65C58.7118 44.534 58.7944 43.7073 58.6291 43.17C58.5051 42.5913 57.9264 42.2193 56.8931 42.054L55.5911 41.806C55.0538 41.682 54.7851 41.4133 54.7851 41C54.7851 40.5867 55.0744 40.38 55.6531 40.38H63.5271C64.1058 40.38 64.3951 40.6073 64.3951 41.062C64.3951 41.4753 64.1471 41.7647 63.6511 41.93L63.0931 42.116C62.4731 42.3227 61.9564 42.6947 61.5431 43.232C61.1298 43.7693 60.6958 44.6993 60.2411 46.022L51.0031 74.852C50.0938 77.7453 49.2671 79.8947 48.5231 81.3C47.8204 82.7053 47.1384 83.6147 46.4771 84.028C45.8158 84.4827 45.0511 84.71 44.1831 84.71ZM64.9342 72C64.3142 72 64.0042 71.7727 64.0042 71.318C64.0042 70.946 64.2729 70.698 64.8102 70.574L65.5542 70.45C66.4222 70.2847 66.9802 70.0367 67.2282 69.706C67.5176 69.334 67.6622 68.714 67.6622 67.846V47.014C67.6622 46.27 67.5382 45.774 67.2902 45.526C67.0836 45.2367 66.6909 45.0507 66.1122 44.968L64.8102 44.782C64.2729 44.7407 64.0042 44.5133 64.0042 44.1C64.0042 43.7693 64.3349 43.542 64.9962 43.418C66.2776 43.2113 67.2489 42.8807 67.9102 42.426C68.6129 41.9713 69.3362 41.4133 70.0802 40.752C70.4522 40.38 70.7622 40.194 71.0102 40.194C71.3822 40.194 71.5682 40.442 71.5682 40.938V43.728C71.5682 44.1 71.6922 44.348 71.9402 44.472C72.2296 44.5547 72.5396 44.4307 72.8702 44.1C74.5236 42.5293 75.9702 41.4547 77.2102 40.876C78.4916 40.2973 79.8349 40.008 81.2402 40.008C83.1002 40.008 84.5882 40.6693 85.7042 41.992C86.8202 43.2733 87.3782 45.1747 87.3782 47.696V67.846C87.3782 68.714 87.5022 69.334 87.7502 69.706C88.0396 70.0367 88.6182 70.264 89.4862 70.388L90.8502 70.574C91.3049 70.6567 91.5322 70.9047 91.5322 71.318C91.5322 71.7727 91.2842 72 90.7882 72H80.3722C79.7936 72 79.5042 71.7727 79.5042 71.318C79.5042 70.9047 79.7316 70.6567 80.1862 70.574L81.0542 70.45C81.9222 70.326 82.4802 70.078 82.7282 69.706C83.0176 69.334 83.1622 68.714 83.1622 67.846V48.378C83.1622 46.3527 82.7902 44.9267 82.0462 44.1C81.3022 43.2733 80.2482 42.86 78.8842 42.86C77.5616 42.86 76.3629 43.2527 75.2882 44.038C74.2549 44.782 73.4282 45.7947 72.8082 47.076C72.1882 48.316 71.8782 49.7007 71.8782 51.23V67.846C71.8782 68.714 72.0022 69.334 72.2502 69.706C72.5396 70.078 73.1182 70.3053 73.9862 70.388L75.6602 70.574C76.1149 70.6567 76.3422 70.884 76.3422 71.256C76.3422 71.752 76.0322 72 75.4122 72H64.9342Z\" fill=\"white\"/>\n<defs>\n<radialGradient id=\"paint0_radial_21_11\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(14 16) rotate(43.5498) scale(167.638 156.2)\">\n<stop stop-color=\"#2C5DB8\"/>\n<stop offset=\"1\" stop-color=\"#04081A\"/>\n</radialGradient>\n<linearGradient id=\"paint1_linear_21_11\" x1=\"1.77511\" y1=\"1.50277e-06\" x2=\"105.225\" y2=\"107\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#5C8FE6\"/>\n<stop offset=\"1\" stop-color=\"#335080\"/>\n</linearGradient>\n</defs>\n</svg>\n"],"mappings":"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","names":["readFile","readFile","dirname","readFile","join","mkdir","readFile","writeFile","homedir","basename","dirname","join","readFile","basename"]}
1
+ {"version":3,"sources":["../../src/dashboard/server.ts","../../package.json","../../src/shared/logger.ts","../../src/server/port.ts","../../src/dashboard/arsenal.ts","../../src/dashboard/delta.ts","../../src/learn/store.ts","../../src/learn/usage.ts","../../src/shared/paths.ts","../../src/shared/pricing.ts","../../src/shared/project-registry.ts","../../src/dashboard/built/index.html","../../src/dashboard/public/favicon.svg"],"sourcesContent":["// Standalone dashboard server. Default port 8901 (override via\n// SYN_DASHBOARD_PORT); falls back through a small range 8901–8910 if the\n// preferred port is busy (so we can coexist with other co-installed\n// AI-context tools that also expose a dashboard).\n// Reads .synthra-graph/token_log.jsonl + .synthra-graph/gate_log.jsonl for the\n// given project and renders a live SPA backed by GET /data polled every 2s.\n\nimport { serve } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\n\n// Tsup inlines this import at build time so `c.html` can echo whatever\n// version is running. Replaces the v__SYN_VERSION__ placeholder in the\n// dashboard footer on every GET /.\nimport pkgJson from \"../../package.json\" with { type: \"json\" };\n\nimport { log } from \"../shared/logger.js\";\nimport type { SynthraPaths } from \"../shared/paths.js\";\nimport { findFreePort } from \"../server/port.js\";\nimport { computeArsenal } from \"./arsenal.js\";\nimport { computeDashboardData } from \"./delta.js\";\n\n// The dashboard UI is built by Vite (svelte + tailwind) into a single\n// self-contained HTML (JS+CSS inlined) at ./built/index.html; tsup text-inlines\n// it here. See vite.config.dashboard.ts. CSS is inside the HTML — no /style.css.\nimport indexHtml from \"./built/index.html\";\nimport faviconSvg from \"./public/favicon.svg\";\n\nconst FALLBACK_RANGE = 9; // try preferredPort + [0..9]\nconst VERSION = (pkgJson as { version: string }).version;\n// How many recent turns/gates the /data payload carries. The dashboard\n// paginates turns client-side (25/page); the donut uses the uncapped\n// per-project model aggregate, so it isn't bounded by this.\nconst RECENT_N = Number(process.env.SYN_DASHBOARD_RECENT_N) || 500;\n\nexport interface DashboardServerHandle {\n port: number;\n url: string;\n stop(): Promise<void>;\n}\n\nexport async function startDashboard(\n paths: SynthraPaths,\n preferredPort = 8901,\n): Promise<DashboardServerHandle> {\n const port = await findFreePort(preferredPort, preferredPort + FALLBACK_RANGE);\n if (port !== preferredPort) {\n log.info(\n `dashboard port ${preferredPort} was busy — bound to ${port} instead (likely another dashboard from a coexisting tool).`,\n );\n }\n const app = new Hono();\n\n app.get(\"/\", (c) => c.html(indexHtml.replaceAll(\"__SYN_VERSION__\", VERSION)));\n\n app.get(\"/favicon.svg\", (c) => {\n c.header(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\n c.header(\"Cache-Control\", \"public, max-age=86400\");\n return c.body(faviconSvg);\n });\n\n app.get(\"/health\", (c) => c.json({ ok: true }));\n\n // Installed skills / agents / MCP servers (project · personal · plugin).\n // Fetched lazily when the Arsenal drawer opens — not on the /data poll.\n app.get(\"/arsenal\", async (c) => c.json(await computeArsenal(paths.projectRoot)));\n\n app.get(\"/data\", async (c) => {\n const data = await computeDashboardData(paths, RECENT_N);\n return c.json(data);\n });\n\n const nodeServer = serve({ fetch: app.fetch, port, hostname: \"127.0.0.1\" });\n\n return {\n port,\n url: `http://127.0.0.1:${port}`,\n async stop() {\n await new Promise<void>((resolve, reject) => {\n nodeServer.close((err) => (err ? reject(err) : resolve()));\n });\n },\n };\n}\n","{\n \"name\": \"@jefuriiij/synthra\",\n \"version\": \"0.14.1\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"description\": \"Local context engine for AI coding assistants — graph-based context, branch-aware memory, real-time human-activity awareness, deterministic Grep/Glob gating, and a live token dashboard.\",\n \"type\": \"module\",\n \"bin\": {\n \"syn\": \"bin/syn\",\n \"synthra\": \"bin/syn\"\n },\n \"scripts\": {\n \"build\": \"npm run build:ui && tsup\",\n \"build:ui\": \"vite build --config vite.config.dashboard.ts\",\n \"dev\": \"tsup --watch\",\n \"dev:ui\": \"vite --config vite.config.dashboard.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"biome lint .\",\n \"format\": \"biome format --write .\",\n \"check\": \"biome check .\",\n \"check:fix\": \"biome check --write .\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"LICENSE\",\n \"ROADMAP.md\"\n ],\n \"keywords\": [\n \"claude-code\",\n \"mcp\",\n \"context-engine\",\n \"code-graph\",\n \"ai-coding\",\n \"token-savings\"\n ],\n \"author\": \"Jeff (@jefuriiij)\",\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/jefuriiij/synthra#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/jefuriiij/synthra.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/jefuriiij/synthra/issues\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"dependencies\": {\n \"@hono/node-server\": \"^1.18.0\",\n \"chokidar\": \"^5.0.0\",\n \"cross-spawn\": \"^7.0.6\",\n \"hono\": \"^4.12.23\",\n \"ignore\": \"^7.0.0\",\n \"sade\": \"^1.8.1\",\n \"tree-sitter-wasms\": \"^0.1.12\",\n \"web-tree-sitter\": \"^0.25.10\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.4.16\",\n \"@lucide/svelte\": \"^1.18.0\",\n \"@sveltejs/vite-plugin-svelte\": \"^7.1.2\",\n \"@tailwindcss/vite\": \"^4.3.1\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/node\": \"^25.9.1\",\n \"@vitest/coverage-v8\": \"^4.1.8\",\n \"bits-ui\": \"^2.18.1\",\n \"clsx\": \"^2.1.1\",\n \"svelte\": \"^5.56.3\",\n \"tailwind-merge\": \"^3.6.0\",\n \"tailwind-variants\": \"^3.2.2\",\n \"tailwindcss\": \"^4.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tw-animate-css\": \"^1.4.0\",\n \"typescript\": \"^6.0.3\",\n \"vite\": \"^8.0.16\",\n \"vite-plugin-singlefile\": \"^2.3.3\",\n \"vitest\": \"^4.1.7\"\n }\n}\n","// Minimal logger. Prefixes Synthra output with [syn].\n\ntype Level = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst LEVEL_PRIORITY: Record<Level, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n};\n\nlet activeLevel: Level = (process.env.SYN_LOG_LEVEL as Level) ?? \"info\";\n\nexport function setLevel(level: Level): void {\n activeLevel = level;\n}\n\nfunction shouldLog(level: Level): boolean {\n return LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[activeLevel];\n}\n\nfunction emit(level: Level, msg: string, ...args: unknown[]): void {\n if (!shouldLog(level)) return;\n const stream = level === \"error\" || level === \"warn\" ? process.stderr : process.stdout;\n stream.write(`[syn] ${msg}${args.length ? \" \" + args.map(String).join(\" \") : \"\"}\\n`);\n}\n\nexport const log = {\n debug: (m: string, ...a: unknown[]) => emit(\"debug\", m, ...a),\n info: (m: string, ...a: unknown[]) => emit(\"info\", m, ...a),\n warn: (m: string, ...a: unknown[]) => emit(\"warn\", m, ...a),\n error: (m: string, ...a: unknown[]) => emit(\"error\", m, ...a),\n};\n","// Finds a free port in the 8080–8099 range. Writes the chosen port to\n// .synthra-graph/mcp_port so PowerShell/Bash hook scripts can read it.\n// TODO: M2\n\nimport { createServer } from \"node:net\";\n\nexport const PORT_RANGE_START = 8080;\nexport const PORT_RANGE_END = 8099;\n\nexport async function findFreePort(\n start = PORT_RANGE_START,\n end = PORT_RANGE_END,\n): Promise<number> {\n for (let port = start; port <= end; port++) {\n if (await isFree(port)) return port;\n }\n throw new Error(`Synthra: no free port in ${start}-${end}`);\n}\n\nfunction isFree(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const s = createServer();\n s.once(\"error\", () => resolve(false));\n s.once(\"listening\", () => s.close(() => resolve(true)));\n s.listen(port, \"127.0.0.1\");\n });\n}\n","// Scans the user's Claude Code \"arsenal\" — installed skills, subagents, and MCP\n// servers — across project, personal (~/.claude), and plugin scopes, so the\n// dashboard can show what's available without dropping to the CLI.\n//\n// This reads Claude Code's own on-disk layout (NOT Synthra's graph):\n// skills ~/.claude/skills/<name>/SKILL.md, <project>/.claude/skills/…, plugin skills/\n// agents ~/.claude/agents/*.md, <project>/.claude/agents/*.md, plugin agents/\n// mcp <project>/.mcp.json, ~/.claude.json mcpServers, plugin .mcp.json\n// plugins ~/.claude/plugins/installed_plugins.json (index) + settings.json enabledPlugins\n//\n// Security: MCP configs frequently carry auth headers/env tokens. We emit ONLY\n// name / type / url(query stripped) / command — headers, env, and args are\n// dropped so nothing secret reaches the dashboard.\n\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nexport type ArsenalScope = \"project\" | \"personal\" | \"plugin\";\n\nexport interface ArsenalItem {\n name: string;\n description: string;\n scope: ArsenalScope;\n /** Plugin name when scope === \"plugin\". */\n source?: string;\n /** Plugin items: enabled state from settings.json; undefined = always-on (own files). */\n enabled?: boolean;\n /** Kind-specific extras: agents {tools,model}; skills {argument_hint,user_invocable}; mcp {type,url}. */\n meta?: Record<string, string>;\n}\n\nexport interface ArsenalData {\n skills: ArsenalItem[];\n agents: ArsenalItem[];\n mcp: ArsenalItem[];\n counts: { skills: number; agents: number; mcp: number; plugins: number };\n scanned_at: string;\n}\n\nconst DESC_MAX = 300;\nconst TOOLS_MAX = 200;\n\nasync function readText(path: string): Promise<string | null> {\n try {\n return await readFile(path, \"utf8\");\n } catch {\n return null;\n }\n}\n\nasync function readJson<T>(path: string): Promise<T | null> {\n const text = await readText(path);\n if (text === null) return null;\n try {\n return JSON.parse(text) as T;\n } catch {\n return null;\n }\n}\n\nasync function listNames(dir: string): Promise<string[]> {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n}\n\nfunction clip(s: string, max: number): string {\n const t = s.trim();\n return t.length > max ? `${t.slice(0, max - 1)}…` : t;\n}\n\n/**\n * Minimal YAML-frontmatter reader — no dependency (Synthra stays lean). Pulls\n * the column-0 `key: value` pairs from the leading `--- … ---` block. Supports\n * single-line values and quoted values that span multiple lines (agent\n * `description` blocks do). Nested/indented lines (e.g. under `metadata:`) are\n * ignored. Keys are returned verbatim (e.g. \"argument-hint\").\n */\nexport function parseFrontmatter(md: string): Record<string, string> {\n const m = md.match(/^?\\s*---\\r?\\n([\\s\\S]*?)\\r?\\n---/);\n if (!m) return {};\n const lines = (m[1] ?? \"\").split(/\\r?\\n/);\n const out: Record<string, string> = {};\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i] ?? \"\";\n const kv = line.match(/^([A-Za-z][\\w-]*):\\s?(.*)$/); // column-0 keys only\n if (!kv) continue;\n const key = kv[1] ?? \"\";\n if (!key) continue;\n let val = kv[2] ?? \"\";\n // Quoted value that doesn't close on this line → consume until the closer.\n if ((val.startsWith('\"') && !/[^\\\\]\"\\s*$/.test(val.slice(1))) || val === '\"') {\n const buf = [val];\n while (i + 1 < lines.length && !/\"\\s*$/.test(buf[buf.length - 1] ?? \"\")) {\n i += 1;\n buf.push(lines[i] ?? \"\");\n }\n val = buf.join(\" \");\n }\n val = val\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\")\n .trim();\n out[key] = val;\n }\n return out;\n}\n\nfunction skillItem(\n fm: Record<string, string>,\n fallbackName: string,\n scope: ArsenalScope,\n source?: string,\n): ArsenalItem {\n const meta: Record<string, string> = {};\n if (fm[\"argument-hint\"]) meta.argument_hint = fm[\"argument-hint\"];\n if (fm[\"user-invocable\"]) meta.user_invocable = fm[\"user-invocable\"];\n return {\n name: fm.name || fallbackName,\n description: clip(fm.description || \"\", DESC_MAX),\n scope,\n ...(source ? { source } : {}),\n ...(Object.keys(meta).length ? { meta } : {}),\n };\n}\n\nfunction agentItem(\n fm: Record<string, string>,\n fallbackName: string,\n scope: ArsenalScope,\n source?: string,\n): ArsenalItem {\n const meta: Record<string, string> = {};\n if (fm.tools) meta.tools = clip(fm.tools, TOOLS_MAX);\n if (fm.model) meta.model = fm.model;\n return {\n name: fm.name || fallbackName,\n description: clip(fm.description || \"\", DESC_MAX),\n scope,\n ...(source ? { source } : {}),\n ...(Object.keys(meta).length ? { meta } : {}),\n };\n}\n\nasync function scanSkillsDir(\n dir: string,\n scope: ArsenalScope,\n source: string | undefined,\n out: ArsenalItem[],\n): Promise<void> {\n for (const name of await listNames(dir)) {\n const md = await readText(join(dir, name, \"SKILL.md\"));\n if (md === null) continue; // not a skill dir (or broken symlink) — skip\n out.push(skillItem(parseFrontmatter(md), name, scope, source));\n }\n}\n\nasync function scanAgentsDir(\n dir: string,\n scope: ArsenalScope,\n source: string | undefined,\n out: ArsenalItem[],\n): Promise<void> {\n for (const file of await listNames(dir)) {\n if (!file.endsWith(\".md\")) continue;\n const md = await readText(join(dir, file));\n if (md === null) continue;\n out.push(agentItem(parseFrontmatter(md), basename(file, \".md\"), scope, source));\n }\n}\n\n/** Redacted MCP server entries — name/type/url only, never headers/env/args. */\nfunction mcpItemsFrom(\n json: unknown,\n scope: ArsenalScope,\n source: string | undefined,\n): ArsenalItem[] {\n if (!json || typeof json !== \"object\") return [];\n const record = json as Record<string, unknown>;\n // Either { mcpServers: {...} } or a bare { name: {type,url} } map.\n const servers =\n record.mcpServers && typeof record.mcpServers === \"object\"\n ? (record.mcpServers as Record<string, unknown>)\n : record;\n const items: ArsenalItem[] = [];\n for (const [name, raw] of Object.entries(servers)) {\n if (!raw || typeof raw !== \"object\") continue;\n const cfg = raw as Record<string, unknown>;\n const type = typeof cfg.type === \"string\" ? cfg.type : cfg.command ? \"stdio\" : \"http\";\n const url =\n typeof cfg.url === \"string\"\n ? cfg.url.split(\"?\")[0]\n : typeof cfg.command === \"string\"\n ? cfg.command\n : \"\";\n const meta: Record<string, string> = { type };\n if (url) meta.url = url;\n items.push({ name, description: \"\", scope, ...(source ? { source } : {}), meta });\n }\n return items;\n}\n\ninterface InstalledEntry {\n scope?: string;\n installPath?: string;\n version?: string;\n}\n\nconst SCOPE_ORDER: Record<ArsenalScope, number> = { project: 0, personal: 1, plugin: 2 };\n\nfunction sortItems(items: ArsenalItem[]): ArsenalItem[] {\n return items.sort((a, b) => {\n if (a.scope !== b.scope) return SCOPE_ORDER[a.scope] - SCOPE_ORDER[b.scope];\n const sa = a.source ?? \"\";\n const sb = b.source ?? \"\";\n if (sa !== sb) return sa < sb ? -1 : 1;\n return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n });\n}\n\nlet cache: { key: string; at: number; data: ArsenalData } | null = null;\nconst CACHE_TTL_MS = 15_000;\n\nexport async function computeArsenal(\n projectRoot: string,\n homeDir = homedir(),\n): Promise<ArsenalData> {\n const key = `${projectRoot}\u0000${homeDir}`;\n const now = Date.now();\n if (cache && cache.key === key && now - cache.at < CACHE_TTL_MS) return cache.data;\n\n const homeClaude = join(homeDir, \".claude\");\n const projClaude = join(projectRoot, \".claude\");\n\n const skills: ArsenalItem[] = [];\n const agents: ArsenalItem[] = [];\n const mcp: ArsenalItem[] = [];\n\n // --- own files: project, then personal ---\n await scanSkillsDir(join(projClaude, \"skills\"), \"project\", undefined, skills);\n await scanSkillsDir(join(homeClaude, \"skills\"), \"personal\", undefined, skills);\n await scanAgentsDir(join(projClaude, \"agents\"), \"project\", undefined, agents);\n await scanAgentsDir(join(homeClaude, \"agents\"), \"personal\", undefined, agents);\n mcp.push(...mcpItemsFrom(await readJson(join(projectRoot, \".mcp.json\")), \"project\", undefined));\n mcp.push(\n ...mcpItemsFrom(\n (await readJson<Record<string, unknown>>(join(homeDir, \".claude.json\")))?.mcpServers,\n \"personal\",\n undefined,\n ),\n );\n\n // --- plugins: installed_plugins.json gives exact installPath per plugin ---\n // installed_plugins.json is `{ version, plugins: { \"<key>\": [entries] } }`\n // (v2); tolerate an older flat `{ \"<key>\": [entries] }` shape too.\n const installedRaw = await readJson<Record<string, unknown>>(\n join(homeClaude, \"plugins\", \"installed_plugins.json\"),\n );\n const pluginsMap = (installedRaw?.plugins ?? installedRaw ?? {}) as Record<\n string,\n InstalledEntry[]\n >;\n const settings = await readJson<{ enabledPlugins?: Record<string, boolean> }>(\n join(homeClaude, \"settings.json\"),\n );\n const enabledMap = settings?.enabledPlugins ?? {};\n let pluginCount = 0;\n for (const [pluginKey, entries] of Object.entries(pluginsMap)) {\n const entry = Array.isArray(entries) ? entries[0] : undefined;\n if (!entry?.installPath) continue;\n pluginCount += 1;\n const pluginName = pluginKey.split(\"@\")[0];\n const enabled = enabledMap[pluginKey] !== false;\n const root = entry.installPath;\n\n // Layouts vary: some plugins keep agents/skills in agents/ + skills/\n // subdirs (feature-dev), others at the plugin root listed in plugin.json\n // (voltagent). Take the UNION of both, deduped by file path.\n const manifest = await readJson<{ agents?: string[]; skills?: string[] }>(\n join(root, \".claude-plugin\", \"plugin.json\"),\n );\n\n const agentFiles = new Set<string>();\n for (const f of await listNames(join(root, \"agents\"))) {\n if (f.endsWith(\".md\")) agentFiles.add(join(root, \"agents\", f));\n }\n for (const rel of manifest?.agents ?? []) agentFiles.add(join(root, rel));\n const pAgents: ArsenalItem[] = [];\n for (const file of agentFiles) {\n const md = await readText(file);\n if (md !== null)\n pAgents.push(agentItem(parseFrontmatter(md), basename(file, \".md\"), \"plugin\", pluginName));\n }\n\n const skillMds = new Set<string>();\n for (const name of await listNames(join(root, \"skills\"))) {\n skillMds.add(join(root, \"skills\", name, \"SKILL.md\"));\n }\n for (const rel of manifest?.skills ?? []) {\n skillMds.add(rel.endsWith(\".md\") ? join(root, rel) : join(root, rel, \"SKILL.md\"));\n }\n const pSkills: ArsenalItem[] = [];\n for (const md of skillMds) {\n const text = await readText(md);\n if (text !== null)\n pSkills.push(\n skillItem(parseFrontmatter(text), basename(dirname(md)), \"plugin\", pluginName),\n );\n }\n\n const pMcp = mcpItemsFrom(await readJson(join(root, \".mcp.json\")), \"plugin\", pluginName);\n for (const it of [...pSkills, ...pAgents, ...pMcp]) it.enabled = enabled;\n skills.push(...pSkills);\n agents.push(...pAgents);\n mcp.push(...pMcp);\n }\n\n // dedupe skills by scope+source+name (symlink/dir overlaps)\n const seen = new Set<string>();\n const dedupedSkills = skills.filter((s) => {\n const k = `${s.scope}:${s.source ?? \"\"}:${s.name}`;\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n\n const data: ArsenalData = {\n skills: sortItems(dedupedSkills),\n agents: sortItems(agents),\n mcp: sortItems(mcp),\n counts: {\n skills: dedupedSkills.length,\n agents: agents.length,\n mcp: mcp.length,\n plugins: pluginCount,\n },\n scanned_at: new Date(now).toISOString(),\n };\n cache = { key, at: now, data };\n return data;\n}\n","// Reads token_log.jsonl + gate_log.jsonl for the active project AND every\n// project registered in ~/.synthra/projects.json, then computes the\n// dashboard's rendered shape: per-project + global aggregate + recent calls\n// across all projects.\n\nimport { readFile } from \"node:fs/promises\";\n\nimport { readLearnStore } from \"../learn/store.js\";\nimport { effectiveScores, emptyStore, type LearnStore } from \"../learn/usage.js\";\nimport { resolvePaths, type SynthraPaths } from \"../shared/paths.js\";\nimport { estimateCostUsd } from \"../shared/pricing.js\";\nimport { listProjects } from \"../shared/project-registry.js\";\n\nconst AVG_TOKENS_PER_BLOCKED_GREP = 500;\n\nexport interface TokenLogEntry {\n /** Stop-hook-supplied timestamp (preferred). */\n ts?: string;\n /** Server-side fallback added by handleLog when ts isn't provided. */\n written_at?: string;\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n model: string;\n description?: string;\n project: string;\n}\n\nexport interface GateLogEntry {\n ts: string;\n tool: string;\n decision: \"allow\" | \"block\";\n query: string | null;\n /** Truncated to ~240 chars in the log; the full block hint lives only in the deny response. */\n reason?: string;\n /** Full length of the block hint delivered to the agent (v0.4.0+). */\n hint_chars?: number;\n}\n\nexport interface ToolLogEntry {\n ts?: string;\n /** Synthra MCP tool name, e.g. \"graph_continue\", \"graph_read\". */\n tool: string;\n}\n\n/** A codebase-exploration Bash command the observer recorded (observe-only). */\nexport interface BashLogEntry {\n ts: string;\n kind: \"search\" | \"read\" | \"list\";\n tool: string;\n query: string | null;\n confidence: \"low\" | \"medium\" | \"high\" | null;\n /** True when the graph could have served this (a real Moat block, had we blocked Bash). */\n avoidable: boolean;\n command?: string;\n}\n\n/** Count Synthra MCP tool calls by tool name. (#2) */\nexport function countToolCalls(entries: ToolLogEntry[]): Record<string, number> {\n const out: Record<string, number> = {};\n for (const e of entries) {\n if (!e.tool) continue;\n out[e.tool] = (out[e.tool] ?? 0) + 1;\n }\n return out;\n}\n\nexport interface HotFile {\n path: string;\n score: number;\n}\n\n/** Top files by current (decayed-to-now) usage weight — surfaces what the\n * usage-learning layer has learned this repo leans on. Ranked by effective\n * score so recency matters; score rounded for display. */\nexport function topHotFiles(store: LearnStore, nowMs: number, limit = 8): HotFile[] {\n return [...effectiveScores(store, nowMs).entries()]\n .map(([path, score]) => ({ path, score: Math.round(score * 10) / 10 }))\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n}\n\nexport interface ProjectStats {\n path: string;\n name: string;\n last_seen: string | null;\n total_turns: number;\n total_input_tokens: number;\n total_output_tokens: number;\n total_cache_read: number;\n total_cache_create: number;\n total_gate_calls: number;\n blocked_count: number;\n estimated_tokens_saved: number;\n estimated_cost_usd: number;\n total_tool_calls: number;\n tool_calls: Record<string, number>;\n /** Observe-only: codebase-exploration Bash calls (the Moat's terminal blind spot). */\n bash_explorations: number;\n /** Of those, how many the graph could have served (a would-be Moat block). */\n bash_avoidable: number;\n hot_files: HotFile[];\n hot_files_total: number;\n models: Record<string, number>;\n}\n\nexport interface RecentTurn {\n ts: string;\n project_name: string;\n project_path: string;\n input: number;\n output: number;\n cache_read: number;\n cache_create: number;\n model: string;\n cost_usd: number;\n}\n\nexport interface RecentGate {\n ts: string;\n project_name: string;\n project_path: string;\n tool: string;\n decision: \"allow\" | \"block\";\n query: string | null;\n}\n\nexport interface RecentBash {\n ts: string;\n project_name: string;\n project_path: string;\n kind: \"search\" | \"read\" | \"list\";\n tool: string;\n query: string | null;\n confidence: \"low\" | \"medium\" | \"high\" | null;\n avoidable: boolean;\n}\n\nexport interface DashboardData {\n active: {\n project_root: string;\n project_name: string;\n stats: ProjectStats;\n };\n global: {\n project_count: number;\n total_turns: number;\n total_input_tokens: number;\n total_output_tokens: number;\n total_cache_read: number;\n total_cache_create: number;\n total_gate_calls: number;\n blocked_count: number;\n estimated_tokens_saved: number;\n saved_percent: number;\n estimated_cost_usd: number;\n total_tool_calls: number;\n tool_calls: Record<string, number>;\n bash_explorations: number;\n bash_avoidable: number;\n };\n projects: ProjectStats[];\n recent_turns: RecentTurn[];\n recent_gates: RecentGate[];\n recent_bash: RecentBash[];\n}\n\nasync function readJsonl<T>(path: string): Promise<T[]> {\n try {\n const text = await readFile(path, \"utf8\");\n return text\n .split(/\\r?\\n/)\n .filter((l) => l.length > 0)\n .map((l) => {\n try {\n return JSON.parse(l) as T;\n } catch {\n return null;\n }\n })\n .filter((v): v is T => v !== null);\n } catch {\n return [];\n }\n}\n\nfunction basename(p: string): string {\n const parts = p.split(/[\\\\/]/);\n return parts[parts.length - 1] || p;\n}\n\ninterface ProjectFiles {\n path: string;\n name: string;\n last_seen: string | null;\n tokens: TokenLogEntry[];\n gates: GateLogEntry[];\n tools: ToolLogEntry[];\n bash: BashLogEntry[];\n learn: LearnStore;\n}\n\nfunction summarize(p: ProjectFiles): ProjectStats {\n let totalIn = 0;\n let totalOut = 0;\n let totalCacheRead = 0;\n let totalCacheCreate = 0;\n let costUsd = 0;\n const models: Record<string, number> = {};\n\n for (const t of p.tokens) {\n totalIn += t.input_tokens ?? 0;\n totalOut += t.output_tokens ?? 0;\n totalCacheRead += t.cache_read_input_tokens ?? 0;\n totalCacheCreate += t.cache_creation_input_tokens ?? 0;\n costUsd += estimateCostUsd(t);\n if (t.model) models[t.model] = (models[t.model] ?? 0) + 1;\n }\n\n const blocked = p.gates.filter((g) => g.decision === \"block\").length;\n const saved = blocked * AVG_TOKENS_PER_BLOCKED_GREP;\n const now = Date.now();\n\n return {\n path: p.path,\n name: p.name,\n last_seen: p.last_seen,\n total_turns: p.tokens.length,\n total_input_tokens: totalIn,\n total_output_tokens: totalOut,\n total_cache_read: totalCacheRead,\n total_cache_create: totalCacheCreate,\n total_gate_calls: p.gates.length,\n blocked_count: blocked,\n estimated_tokens_saved: saved,\n estimated_cost_usd: Math.round(costUsd * 100) / 100,\n total_tool_calls: p.tools.length,\n tool_calls: countToolCalls(p.tools),\n bash_explorations: p.bash.length,\n bash_avoidable: p.bash.filter((b) => b.avoidable).length,\n hot_files: topHotFiles(p.learn, now),\n hot_files_total: effectiveScores(p.learn, now).size,\n models,\n };\n}\n\n// Dedupe is ON by default; set SYN_DASHBOARD_DEDUPE=0 (or \"off\"/\"false\") to see\n// every raw token-log entry — including duplicates a co-installed AI tool's Stop\n// hook may write to the same token_log.jsonl. (#7)\nfunction dedupeEnabled(): boolean {\n const v = process.env.SYN_DASHBOARD_DEDUPE;\n return v !== \"0\" && v !== \"off\" && v !== \"false\";\n}\n\nasync function loadProjectFiles(\n path: string,\n name: string,\n lastSeen: string | null,\n): Promise<ProjectFiles> {\n const paths = resolvePaths(path);\n const [rawTokens, gates, tools, bash, learn] = await Promise.all([\n readJsonl<TokenLogEntry>(paths.tokenLog),\n readJsonl<GateLogEntry>(paths.gateLog),\n readJsonl<ToolLogEntry>(paths.toolLog),\n readJsonl<BashLogEntry>(paths.bashLog),\n readLearnStore(paths.learnStore),\n ]);\n const tokens = dedupeEnabled() ? dedupeTokens(rawTokens) : rawTokens;\n return { path, name, last_seen: lastSeen, tokens, gates, tools, bash, learn };\n}\n\n/**\n * Collapse duplicate token-log entries from co-installed AI tools.\n *\n * Synthra is friendly with other tools that share the .synthra-graph/\n * token_log.jsonl shape — if a second tool's Stop hook also writes to\n * it, both fire on the same turn and emit nearly-identical entries\n * within ~10ms, double-counting every metric in the dashboard.\n *\n * Strategy: group by (project, usage counts, second-rounded timestamp);\n * inside a group, keep the entry with the most credible model field —\n * a real Claude model > \"<synthetic>\" > empty.\n */\nfunction dedupeTokens(entries: TokenLogEntry[]): TokenLogEntry[] {\n const score = (model: string | undefined): number => {\n if (!model) return 0;\n if (model === \"<synthetic>\") return 1;\n return 2; // real model name\n };\n\n const groups = new Map<string, TokenLogEntry[]>();\n for (const e of entries) {\n const ts = e.ts ?? e.written_at ?? \"\";\n const second = ts.slice(0, 19); // YYYY-MM-DDTHH:mm:ss\n const key = [\n e.project ?? \"\",\n e.input_tokens ?? 0,\n e.output_tokens ?? 0,\n e.cache_creation_input_tokens ?? 0,\n e.cache_read_input_tokens ?? 0,\n second,\n ].join(\"|\");\n const arr = groups.get(key) ?? [];\n arr.push(e);\n groups.set(key, arr);\n }\n\n const out: TokenLogEntry[] = [];\n for (const arr of groups.values()) {\n if (arr.length === 1) {\n out.push(arr[0]!);\n continue;\n }\n arr.sort((a, b) => score(b.model) - score(a.model));\n out.push(arr[0]!);\n }\n\n // Preserve chronological order in the per-project list.\n out.sort((a, b) => {\n const at = a.ts ?? a.written_at ?? \"\";\n const bt = b.ts ?? b.written_at ?? \"\";\n return at.localeCompare(bt);\n });\n return out;\n}\n\nexport async function computeDashboardData(\n activePaths: SynthraPaths,\n recentN = 500,\n): Promise<DashboardData> {\n const registered = await listProjects();\n\n // Always include the active project, even if not yet in the registry.\n const activePath = activePaths.projectRoot;\n const activeName = basename(activePath);\n const knownPaths = new Set(registered.map((p) => p.path));\n const allEntries: Array<{ path: string; name: string; last_seen: string | null }> = [\n ...registered.map((p) => ({ path: p.path, name: p.name, last_seen: p.last_seen })),\n ];\n if (!knownPaths.has(activePath)) {\n allEntries.unshift({ path: activePath, name: activeName, last_seen: null });\n }\n\n const loaded = await Promise.all(\n allEntries.map((e) => loadProjectFiles(e.path, e.name, e.last_seen)),\n );\n\n const projects = loaded\n .map(summarize)\n .sort(\n (a, b) =>\n b.total_input_tokens +\n b.total_output_tokens -\n (a.total_input_tokens + a.total_output_tokens),\n );\n\n const activeFiles = loaded.find((p) => p.path === activePath) ?? {\n path: activePath,\n name: activeName,\n last_seen: null,\n tokens: [],\n gates: [],\n tools: [],\n bash: [],\n learn: emptyStore(),\n };\n const activeStats = summarize(activeFiles);\n\n // Global aggregates\n let g_in = 0,\n g_out = 0,\n g_cr = 0,\n g_cc = 0,\n g_gate = 0,\n g_block = 0,\n g_cost = 0,\n g_turns = 0,\n g_tools = 0,\n g_bash = 0,\n g_bash_avoid = 0;\n const g_tool_calls: Record<string, number> = {};\n for (const s of projects) {\n g_turns += s.total_turns;\n g_in += s.total_input_tokens;\n g_out += s.total_output_tokens;\n g_cr += s.total_cache_read;\n g_cc += s.total_cache_create;\n g_gate += s.total_gate_calls;\n g_block += s.blocked_count;\n g_cost += s.estimated_cost_usd;\n g_tools += s.total_tool_calls;\n g_bash += s.bash_explorations;\n g_bash_avoid += s.bash_avoidable;\n for (const [k, v] of Object.entries(s.tool_calls)) g_tool_calls[k] = (g_tool_calls[k] ?? 0) + v;\n }\n const g_saved = g_block * AVG_TOKENS_PER_BLOCKED_GREP;\n const g_used = g_in + g_out + g_cc;\n const g_saved_pct = g_used + g_saved > 0 ? (g_saved / (g_used + g_saved)) * 100 : 0;\n\n // Recent turns + gates + bash hunts across all projects, sorted by ts descending\n const allTurns: RecentTurn[] = [];\n const allGates: RecentGate[] = [];\n const allBash: RecentBash[] = [];\n for (const p of loaded) {\n for (const b of p.bash) {\n allBash.push({\n ts: b.ts,\n project_name: p.name,\n project_path: p.path,\n kind: b.kind,\n tool: b.tool,\n query: b.query,\n confidence: b.confidence,\n avoidable: b.avoidable,\n });\n }\n for (const t of p.tokens) {\n allTurns.push({\n // Fall back to written_at — the Stop hook today posts entries without\n // a `ts` field, and the server tags them with written_at on receive.\n ts: t.ts ?? t.written_at ?? \"\",\n project_name: p.name,\n project_path: p.path,\n input: t.input_tokens ?? 0,\n output: t.output_tokens ?? 0,\n cache_read: t.cache_read_input_tokens ?? 0,\n cache_create: t.cache_creation_input_tokens ?? 0,\n model: t.model ?? \"\",\n cost_usd: Math.round(estimateCostUsd(t) * 1000) / 1000,\n });\n }\n for (const gate of p.gates) {\n allGates.push({\n ts: gate.ts,\n project_name: p.name,\n project_path: p.path,\n tool: gate.tool,\n decision: gate.decision,\n query: gate.query,\n });\n }\n }\n allTurns.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n allGates.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n allBash.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));\n\n return {\n active: {\n project_root: activePath,\n project_name: activeName,\n stats: activeStats,\n },\n global: {\n project_count: projects.length,\n total_turns: g_turns,\n total_input_tokens: g_in,\n total_output_tokens: g_out,\n total_cache_read: g_cr,\n total_cache_create: g_cc,\n total_gate_calls: g_gate,\n blocked_count: g_block,\n estimated_tokens_saved: g_saved,\n saved_percent: Math.round(g_saved_pct * 10) / 10,\n estimated_cost_usd: Math.round(g_cost * 100) / 100,\n total_tool_calls: g_tools,\n tool_calls: g_tool_calls,\n bash_explorations: g_bash,\n bash_avoidable: g_bash_avoid,\n },\n projects,\n recent_turns: allTurns.slice(0, recentN),\n recent_gates: allGates.slice(0, recentN),\n recent_bash: allBash.slice(0, recentN),\n };\n}\n\n// Legacy shapes from the M2 stub — kept for compat.\nexport interface TurnBreakdown {\n systemPromptTokens: number;\n conversationHistoryTokens: number;\n synthraPackTokens: number;\n userMessageTokens: number;\n responseTokens: number;\n totalTokens: number;\n costUsd: number;\n}\n\nexport interface SavingsDelta {\n withSynthra: TurnBreakdown;\n estimatedWithoutSynthra: TurnBreakdown;\n savedUsd: number;\n savedPercent: number;\n}\n\nexport function computeDelta(breakdown: TurnBreakdown, blockedGreps: number): SavingsDelta {\n const savedTokens = blockedGreps * AVG_TOKENS_PER_BLOCKED_GREP;\n const without: TurnBreakdown = {\n ...breakdown,\n conversationHistoryTokens: breakdown.conversationHistoryTokens + savedTokens,\n totalTokens: breakdown.totalTokens + savedTokens,\n costUsd: breakdown.costUsd + (savedTokens / 1_000_000) * 3,\n };\n const savedUsd = without.costUsd - breakdown.costUsd;\n const savedPercent = without.totalTokens > 0 ? (savedTokens / without.totalTokens) * 100 : 0;\n return {\n withSynthra: breakdown,\n estimatedWithoutSynthra: without,\n savedUsd,\n savedPercent: Math.round(savedPercent * 10) / 10,\n };\n}\n","// I/O for the usage-learning layer. Two files, both in .synthra-graph/\n// (gitignored, machine-local — usage is per-developer):\n// - access_log.jsonl : append-only raw events (source of truth, replayable)\n// - learn_store.json : derived decayed aggregate (a cache of the log)\n//\n// Every read is best-effort: a missing / corrupt / schema-mismatched file yields\n// an empty store, so the ranker degrades to its deterministic behavior.\n\nimport { appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { emptyStore, LEARN_SCHEMA_VERSION, type AccessEvent, type LearnStore } from \"./usage.js\";\n\nexport async function readLearnStore(path: string): Promise<LearnStore> {\n try {\n const raw = await readFile(path, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<LearnStore>;\n if (\n parsed.schema_version !== LEARN_SCHEMA_VERSION ||\n typeof parsed.files !== \"object\" ||\n parsed.files === null\n ) {\n return emptyStore();\n }\n return {\n schema_version: LEARN_SCHEMA_VERSION,\n asOf: typeof parsed.asOf === \"string\" ? parsed.asOf : emptyStore().asOf,\n files: parsed.files as LearnStore[\"files\"],\n };\n } catch {\n return emptyStore();\n }\n}\n\nexport async function writeLearnStore(path: string, store: LearnStore): Promise<void> {\n try {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, JSON.stringify(store, null, 2) + \"\\n\", \"utf8\");\n } catch {\n // Persistence is best-effort; the log remains the source of truth.\n }\n}\n\nexport async function readAccessLog(path: string): Promise<AccessEvent[]> {\n try {\n const raw = await readFile(path, \"utf8\");\n const out: AccessEvent[] = [];\n for (const line of raw.split(\"\\n\")) {\n const t = line.trim();\n if (!t) continue;\n try {\n const ev = JSON.parse(t) as AccessEvent;\n if (\n ev &&\n typeof ev.ts === \"string\" &&\n typeof ev.path === \"string\" &&\n typeof ev.source === \"string\"\n ) {\n out.push(ev);\n }\n } catch {\n // Skip a malformed line rather than failing the whole replay.\n }\n }\n return out;\n } catch {\n return [];\n }\n}\n\nexport async function appendAccess(path: string, ev: AccessEvent): Promise<void> {\n try {\n await mkdir(dirname(path), { recursive: true });\n await appendFile(path, JSON.stringify(ev) + \"\\n\", \"utf8\");\n } catch {\n // Best-effort; never fail a tool call over telemetry.\n }\n}\n","// Pure decay/aggregate core for the usage-learning signal (\"the more it's used,\n// the smarter it gets\"). No I/O here — persistence + the raw access log live in\n// store.ts, and the stateful wrapper in runtime.ts.\n//\n// Files the AI actually pulls (graph_read) or edits (graph_register_edit) accrue\n// a time-decayed weight. retrieve() applies a bounded, capped boost so genuinely\n// \"hot\" files surface first — never dominating the deterministic ranker.\n\nexport type AccessSource = \"read\" | \"register_edit\" | \"continue\";\n\nexport interface AccessEvent {\n ts: string; // ISO timestamp\n path: string; // canonical FileNode.path (\"\" for source === \"continue\")\n source: AccessSource;\n query?: string; // only set for source === \"continue\" — reserved fuel for v2/v3\n}\n\nexport interface FileStat {\n /** Raw access count (never decayed) — diagnostic only. */\n count: number;\n /** Decayed weight as of `lastTs`. */\n decayed: number;\n /** ISO timestamp of the most recent folded event. */\n lastTs: string;\n}\n\nexport interface LearnStore {\n schema_version: number;\n asOf: string;\n files: Record<string, FileStat>;\n}\n\nexport const LEARN_SCHEMA_VERSION = 1;\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\n/** Usage-decay half-life. Env-overridable for dogfood tuning. */\nexport function halfLifeMs(): number {\n const env = Number(process.env.SYN_LEARN_HALFLIFE_DAYS);\n const days = Number.isFinite(env) && env > 0 ? env : 7;\n return days * DAY_MS;\n}\n\n/** Per-source accrual weight. `continue` never contributes to frequency — it's\n * logged only as query→outcome fuel for a future mechanism. */\nexport function weightFor(source: AccessSource): number {\n switch (source) {\n case \"register_edit\":\n return 2;\n case \"read\":\n return 1;\n default:\n return 0;\n }\n}\n\nexport function emptyStore(): LearnStore {\n return {\n schema_version: LEARN_SCHEMA_VERSION,\n asOf: new Date(0).toISOString(),\n files: {},\n };\n}\n\n/** exp(-λ·Δt) decay multiplier from `fromTs` forward to `toMs` epoch ms. */\nfunction decayFactor(fromTs: string, toMs: number, hl: number): number {\n const fromMs = Date.parse(fromTs);\n if (!Number.isFinite(fromMs)) return 1;\n const dt = toMs - fromMs;\n if (dt <= 0) return 1;\n return Math.exp(-(Math.LN2 / hl) * dt);\n}\n\n/** Fold one access event into the store: decay the file's prior weight up to the\n * event's timestamp, then add the event weight. Mutates and returns `store`.\n * Zero-weight (`continue`) and path-less events are ignored. Malformed\n * timestamps are dropped so the function stays deterministic. */\nexport function foldEvent(store: LearnStore, ev: AccessEvent): LearnStore {\n const w = weightFor(ev.source);\n if (w <= 0 || !ev.path) return store;\n const tMs = Date.parse(ev.ts);\n if (!Number.isFinite(tMs)) return store;\n\n const hl = halfLifeMs();\n const prev = store.files[ev.path];\n if (prev) {\n const decayed = prev.decayed * decayFactor(prev.lastTs, tMs, hl) + w;\n store.files[ev.path] = { count: prev.count + 1, decayed, lastTs: ev.ts };\n } else {\n store.files[ev.path] = { count: 1, decayed: w, lastTs: ev.ts };\n }\n return store;\n}\n\n/** Decayed weights as of `nowMs`, keyed by path. Effectively-zero entries are\n * omitted so an old/cold store contributes nothing. */\nexport function effectiveScores(store: LearnStore, nowMs: number): Map<string, number> {\n const hl = halfLifeMs();\n const out = new Map<string, number>();\n for (const [path, stat] of Object.entries(store.files)) {\n const eff = stat.decayed * decayFactor(stat.lastTs, nowMs, hl);\n if (eff > 0.01) out.set(path, eff);\n }\n return out;\n}\n\n/** Rebuild a store by replaying a raw access-log stream (the source of truth). */\nexport function recomputeFromLog(events: AccessEvent[]): LearnStore {\n const store = emptyStore();\n for (const ev of events) foldEvent(store, ev);\n return store;\n}\n","// Resolves Synthra's storage locations inside a project root.\n\nimport { join } from \"node:path\";\n\nexport interface SynthraPaths {\n projectRoot: string;\n graphDir: string;\n contextDir: string;\n infoGraph: string;\n symbolIndex: string;\n sessionState: string;\n activityLog: string;\n tokenLog: string;\n gateLog: string;\n bashLog: string;\n toolLog: string;\n accessLog: string;\n learnStore: string;\n parseCache: string;\n mcpPort: string;\n mcpServerLog: string;\n mcpServerErrLog: string;\n contextStore: string;\n contextMd: string;\n branchesDir: string;\n claudeDir: string;\n claudeSettings: string;\n claudeHooksDir: string;\n claudeMd: string;\n gitignore: string;\n}\n\nexport function resolvePaths(projectRoot: string): SynthraPaths {\n const graphDir = join(projectRoot, \".synthra-graph\");\n const contextDir = join(projectRoot, \".synthra\");\n const claudeDir = join(projectRoot, \".claude\");\n\n return {\n projectRoot,\n graphDir,\n contextDir,\n infoGraph: join(graphDir, \"info_graph.json\"),\n symbolIndex: join(graphDir, \"symbol_index.json\"),\n sessionState: join(graphDir, \"session.json\"),\n activityLog: join(graphDir, \"activity.jsonl\"),\n tokenLog: join(graphDir, \"token_log.jsonl\"),\n gateLog: join(graphDir, \"gate_log.jsonl\"),\n bashLog: join(graphDir, \"bash_log.jsonl\"),\n toolLog: join(graphDir, \"tool_log.jsonl\"),\n accessLog: join(graphDir, \"access_log.jsonl\"),\n learnStore: join(graphDir, \"learn_store.json\"),\n parseCache: join(graphDir, \"parse_cache.json\"),\n mcpPort: join(graphDir, \"mcp_port\"),\n mcpServerLog: join(graphDir, \"mcp_server.log\"),\n mcpServerErrLog: join(graphDir, \"mcp_server.err.log\"),\n contextStore: join(contextDir, \"context-store.json\"),\n contextMd: join(contextDir, \"CONTEXT.md\"),\n branchesDir: join(contextDir, \"branches\"),\n claudeDir,\n claudeSettings: join(claudeDir, \"settings.local.json\"),\n claudeHooksDir: join(claudeDir, \"hooks\"),\n claudeMd: join(projectRoot, \"CLAUDE.md\"),\n gitignore: join(projectRoot, \".gitignore\"),\n };\n}\n","// Approximate per-million-token pricing for Claude models, in USD.\n// Sourced from Anthropic's published rates. Tilde everywhere — these can shift.\n//\n// Used only for the dashboard's \"~$X\" estimate; not for billing.\n\nexport interface ModelPricing {\n /** Cost per 1M raw-input tokens. */\n input: number;\n /** Cost per 1M output tokens. */\n output: number;\n /** Cost per 1M cache-read tokens (typically ~10% of input). */\n cacheRead: number;\n /** Cost per 1M cache-creation tokens (typically input × 1.25). */\n cacheCreate: number;\n}\n\nconst PRICING: Record<string, ModelPricing> = {\n // Fable-class — frontier tier (same 0.1× cache-read / 1.25× cache-write\n // multipliers as the rest of the lineup, on a $10 input base)\n \"claude-fable-5\": { input: 10, output: 50, cacheRead: 1, cacheCreate: 12.5 },\n // Opus-class models — premium tier\n \"claude-opus-4-7\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n \"claude-opus-4-6\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n \"claude-opus-4-5\": { input: 15, output: 75, cacheRead: 1.5, cacheCreate: 18.75 },\n // Sonnet-class — workhorse\n \"claude-sonnet-4-6\": { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 },\n \"claude-sonnet-4-5\": { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 },\n // Haiku-class — fast and cheap\n \"claude-haiku-4-5\": { input: 1, output: 5, cacheRead: 0.1, cacheCreate: 1.25 },\n};\n\nconst FALLBACK: ModelPricing = { input: 3, output: 15, cacheRead: 0.3, cacheCreate: 3.75 };\n\nexport function pricingFor(model: string | undefined | null): ModelPricing {\n if (!model) return FALLBACK;\n const direct = PRICING[model];\n if (direct) return direct;\n // Loose prefix match: \"claude-fable-…\" (incl. the \"[1m]\" long-context\n // variant) / \"claude-opus-…\" / \"claude-sonnet-…\" / \"claude-haiku-…\"\n if (model.includes(\"fable\")) return PRICING[\"claude-fable-5\"] ?? FALLBACK;\n if (model.includes(\"opus\")) return PRICING[\"claude-opus-4-7\"] ?? FALLBACK;\n if (model.includes(\"sonnet\")) return PRICING[\"claude-sonnet-4-6\"] ?? FALLBACK;\n if (model.includes(\"haiku\")) return PRICING[\"claude-haiku-4-5\"] ?? FALLBACK;\n return FALLBACK;\n}\n\nexport interface UsageRecord {\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n model?: string;\n}\n\n/** Approximate USD cost of a single usage record. */\nexport function estimateCostUsd(usage: UsageRecord): number {\n const p = pricingFor(usage.model);\n return (\n (usage.input_tokens / 1_000_000) * p.input +\n (usage.output_tokens / 1_000_000) * p.output +\n ((usage.cache_read_input_tokens ?? 0) / 1_000_000) * p.cacheRead +\n ((usage.cache_creation_input_tokens ?? 0) / 1_000_000) * p.cacheCreate\n );\n}\n","// Global registry of projects that have run `syn .` on this machine.\n// Stored at ~/.synthra/projects.json so the dashboard can enumerate them\n// without walking the filesystem.\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\n\nconst REGISTRY_DIR = join(homedir(), \".synthra\");\nconst REGISTRY_PATH = join(REGISTRY_DIR, \"projects.json\");\nconst SCHEMA_VERSION = 1;\n\nexport interface ProjectRegistryEntry {\n path: string; // absolute project root\n name: string; // basename for display\n first_seen: string; // ISO timestamp\n last_seen: string; // ISO timestamp\n}\n\ninterface Registry {\n schema_version: number;\n projects: ProjectRegistryEntry[];\n}\n\nasync function readRegistry(): Promise<Registry> {\n try {\n const raw = await readFile(REGISTRY_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<Registry>;\n if (!Array.isArray(parsed.projects)) return { schema_version: SCHEMA_VERSION, projects: [] };\n return { schema_version: parsed.schema_version ?? SCHEMA_VERSION, projects: parsed.projects };\n } catch {\n return { schema_version: SCHEMA_VERSION, projects: [] };\n }\n}\n\nasync function writeRegistry(registry: Registry): Promise<void> {\n await mkdir(dirname(REGISTRY_PATH), { recursive: true });\n await writeFile(REGISTRY_PATH, JSON.stringify(registry, null, 2) + \"\\n\", \"utf8\");\n}\n\n/** Upsert this project's entry. Updates `last_seen`; preserves `first_seen`. */\nexport async function recordProject(projectRoot: string): Promise<void> {\n const now = new Date().toISOString();\n const registry = await readRegistry();\n const existing = registry.projects.find((p) => p.path === projectRoot);\n if (existing) {\n existing.last_seen = now;\n existing.name = basename(projectRoot);\n } else {\n registry.projects.push({\n path: projectRoot,\n name: basename(projectRoot),\n first_seen: now,\n last_seen: now,\n });\n }\n try {\n await writeRegistry(registry);\n } catch {\n // Registry is best-effort — a write failure shouldn't block the session.\n }\n}\n\n/** Remove this project's entry (exact-path match). Best-effort — a missing or\n * unwritable registry is not an error. `registryPath` is overridable for tests. */\nexport async function forgetProject(\n projectRoot: string,\n registryPath = REGISTRY_PATH,\n): Promise<boolean> {\n try {\n const raw = await readFile(registryPath, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<Registry>;\n const projects = Array.isArray(parsed.projects) ? parsed.projects : [];\n const filtered = projects.filter((p) => p.path !== projectRoot);\n if (filtered.length === projects.length) return false;\n const next: Registry = {\n schema_version: parsed.schema_version ?? SCHEMA_VERSION,\n projects: filtered,\n };\n await writeFile(registryPath, JSON.stringify(next, null, 2) + \"\\n\", \"utf8\");\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function listProjects(): Promise<ProjectRegistryEntry[]> {\n const registry = await readRegistry();\n // Sort by last_seen descending so the most active project surfaces first.\n return registry.projects\n .slice()\n .sort((a, b) => (a.last_seen > b.last_seen ? -1 : a.last_seen < b.last_seen ? 1 : 0));\n}\n\nexport { REGISTRY_PATH, REGISTRY_DIR };\n","<!doctype html>\n<html lang=\"en\" class=\"dark\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Synthra · Dashboard</title>\n <link rel=\"icon\" href=\"/favicon.svg\" type=\"image/svg+xml\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap\"\n rel=\"stylesheet\"\n />\n <script type=\"module\" crossorigin>(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel=\"modulepreload\"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t<e.length;t++)e[t]()}function m(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function h(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var g=1<<24,_=1024,v=2048,y=4096,b=8192,x=16384,S=32768,ee=1<<25,te=65536,ne=1<<19,re=1<<20,ie=1<<25,ae=65536,oe=1<<21,se=1<<22,ce=1<<23,le=Symbol(`$state`),ue=Symbol(`legacy props`),de=Symbol(``),fe=Symbol(`attributes`),pe=Symbol(`class`),me=Symbol(`style`),he=Symbol(`text`),ge=Symbol(`form reset`),_e=new class extends Error{name=`StaleReactionError`;message=\"The reaction that called `getAbortSignal()` was re-run or destroyed\"},ve=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function ye(e){throw Error(`https://svelte.dev/e/lifecycle_outside_component`)}function be(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function xe(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function Se(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function Ce(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function we(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Te(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function Ee(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function De(){throw Error(`https://svelte.dev/e/set_context_after_init`)}function Oe(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function ke(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Ae(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function je(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Me={},C=Symbol(`uninitialized`),Ne=`http://www.w3.org/1999/xhtml`,Pe=`http://www.w3.org/2000/svg`,Fe=`@attach`;function Ie(){console.warn(`https://svelte.dev/e/derived_inert`)}function Le(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Re(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function ze(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var w=!1;function Be(e){w=e}var T;function Ve(e){if(e===null)throw Le(),Me;return T=e}function He(){return Ve(Cn(T))}function E(e){if(w){if(Cn(T)!==null)throw Le(),Me;T=e}}function Ue(e=1){if(w){for(var t=e,n=T;t--;)n=Cn(n);T=n}}function We(e=!0){for(var t=0,n=T;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else (r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=Cn(n);e&&n.remove(),n=i}}function Ge(e){if(!e||e.nodeType!==8)throw Le(),Me;return e.data}function Ke(e){return e===this.v}function qe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Je(e){return!qe(e,this.v)}var Ye=!1,Xe=!1;function Ze(){Xe=!0}var D=null;function Qe(e){D=e}function $e(e){return it(`getContext`).get(e)}function et(e,t){let n=it(`setContext`);if(Ye){var r=V.f;!B&&r&32&&!D.i||De()}return n.set(e,t),t}function tt(e){return it(`hasContext`).has(e)}function nt(){return it(`getAllContexts`)}function O(e,t=!1,n){D={p:D,i:!1,c:null,e:null,s:e,x:null,r:V,l:Xe&&!t?{s:null,u:null,$:[]}:null}}function k(e){var t=D,n=t.e;if(n!==null){t.e=null;for(var r of n)zn(r)}return e!==void 0&&(t.x=e),t.i=!0,D=t.p,e??{}}function rt(){return!Xe||D!==null&&D.l===null}function it(e){return D===null&&ye(e),D.c??=new Map(at(D)||void 0)}function at(e){let t=e.p;for(;t!==null;){let e=t.c;if(e!==null)return e;t=t.p}return null}var ot=[];function st(){var e=ot;ot=[],p(e)}function ct(e){if(ot.length===0&&!Vt){var t=ot;queueMicrotask(()=>{t===ot&&st()})}ot.push(e)}function lt(){for(;ot.length>0;)st()}function ut(e){var t=V;if(t===null)return B.f|=ce,e;if(!(t.f&32768)&&!(t.f&4))throw e;dt(e,t)}function dt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var ft=~(v|y|_);function A(e,t){e.f=e.f&ft|t}function pt(e){e.f&512||e.deps===null?A(e,_):A(e,y)}function mt(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=ae,mt(t.deps))}function ht(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),mt(e.deps),A(e,_)}var gt=!1,_t=!1;function vt(e){var t=_t;try{return _t=!1,[e(),_t]}finally{_t=t}}function yt(e){let t=0,n=sn(0),r;return()=>{In()&&(H(n),Gn(()=>(t===0&&(r=Mr(()=>e(()=>dn(n)))),t+=1,()=>{ct(()=>{--t,t===0&&(r?.(),r=void 0,dn(n))})})))}}var bt=te|ne;function xt(e,t,n,r){new St(e,t,n,r)}var St=class{parent;is_pending=!1;transform_error;#e;#t=w?T:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=yt(()=>(this.#m=sn(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=V;t.b=this,t.f|=128,n(e)},this.parent=V.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=Kn(()=>{if(w){let e=this.#t;He();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},bt),w&&(this.#e=T)}#g(){try{this.#a=Jn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=Jn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=Jn(()=>e(this.#e)),ct(()=>{var e=this.#c=document.createDocumentFragment(),t=xn();e.append(t),this.#a=this.#x(()=>Jn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,er(this.#o,()=>{this.#o=null}),this.#b(M))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=Jn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();ir(this.#a,e);let t=this.#n.pending;this.#o=Jn(()=>t(this.#e))}else this.#b(M)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){ht(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=V,n=B,r=D;dr(this.#i),ur(this.#i),Qe(this.#i.ctx);try{return qt.ensure(),e()}catch(e){return ut(e),null}finally{dr(t),ur(n),Qe(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&er(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,ct(()=>{this.#d=!1,this.#m&&ln(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),H(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;M?.is_fork?(this.#a&&M.skip_effect(this.#a),this.#o&&M.skip_effect(this.#o),this.#s&&M.skip_effect(this.#s),M.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(z(this.#a),null),this.#o&&=(z(this.#o),null),this.#s&&=(z(this.#s),null),w&&(Ve(this.#t),Ue(),Ve(We()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){ze();return}r=!0,i&&je(),this.#s!==null&&er(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){dt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return Jn(()=>{var t=V;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return dt(e,this.#i.parent),null}}))};ct(()=>{var t;try{t=this.transform_error(e)}catch(e){dt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>dt(e,this.#i&&this.#i.parent)):o(t)})}};function Ct(e,t,n,r){let i=rt()?Dt:At;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=V,c=wt(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){dt(e,s)}Tt()}}var d=Et();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>kt(e))).then(u).catch(e=>dt(e,s)).finally(d)}l?l.then(()=>{c(),f(),Tt()}):f()}function wt(){var e=V,t=B,n=D,r=M;return function(i=!0){dr(e),ur(t),Qe(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function Tt(e=!0){dr(null),ur(null),Qe(null),e&&M?.deactivate()}function Et(){var e=V,t=e.b,n=M,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function Dt(e){var t=2|v;return V!==null&&(V.f|=ne),{ctx:D,deps:null,effects:null,equals:Ke,f:t,fn:e,reactions:null,rv:0,v:C,wv:0,parent:V,ac:null}}var Ot=Symbol(`obsolete`);function kt(e,t,n){let r=V;r===null&&be();var i=void 0,a=sn(C),o=!B,s=new Set;return Wn(()=>{var t=V,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==_e&&n.reject(e)}).finally(Tt)}catch(e){n.reject(e),Tt()}var c=M;if(o){if(t.f&32768)var l=Et();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Ot);else for(let e of s.values())e.reject(Ot);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Ot&&(c.activate(),t?(a.f|=ce,ln(a,t)):(a.f&8388608&&(a.f^=ce),ln(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),Ln(()=>{for(let e of s)e.reject(Ot)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function j(e){let t=Dt(e);return Ye||pr(t),t}function At(e){let t=Dt(e);return t.equals=Je,t}function jt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)z(t[n])}}function Mt(e){var t,n=V,r=e.parent;if(!sr&&r!==null&&e.v!==C&&r.f&24576)return Ie(),e.v;dr(r);try{e.f&=~ae,jt(e),t=Tr(e)}finally{dr(n)}return t}function Nt(e){var t=Mt(e);if(!e.equals(t)&&(e.wv=Sr(),(!M?.is_fork||e.deps===null)&&(M===null?e.v=t:(M.capture(e,t,!0),Rt?.capture(e,t,!0)),e.deps===null))){A(e,_);return}sr||(zt===null?pt(e):(In()||M?.is_fork)&&zt.set(e,t))}function Pt(e){if(e.effects!==null)for(let t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(_e),t.fn!==null&&(t.teardown=f),t.ac=null,Dr(t,0),Xn(t))}function Ft(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Or(t)}var It=null,Lt=null,M=null,Rt=null,zt=null,Bt=null,Vt=!1,Ht=!1,Ut=null,Wt=null,Gt=0,Kt=1,qt=class e{id=Kt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Lt===null?It=Lt=this:(Lt.#n=this,this.#t=Lt),Lt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)A(r,v),t(r);for(r of n.m)A(r,y),t(r)}this.#p.add(e)}#g(){this.#e=!0,Gt++>1e3&&(this.#S(),Yt());for(let e of this.#u)this.#d.delete(e),A(e,v),this.schedule(e);for(let e of this.#d)A(e,y),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Ut=[],r=[],i=Wt=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw nn(e),this.#h()||this.discard(),t}if(M=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Ut=null,Wt=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)tn(e,t);i.length>0&&M.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),Rt=this,Zt(r),Zt(n),Rt=null,this.#s?.resolve();var s=M;if(this.#a===0&&(this.#c.length===0||s!==null)&&(this.#S(),Ye&&(this.#x(),M=s)),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=_;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=_:i&4?t.push(r):Ye&&i&16777224?n.push(r):Cr(r)&&(i&16&&this.#d.add(r),Or(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null)for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),A(i,v),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#S(),M=this,this.#g()}#b(e){for(var t=0;t<e.length;t+=1)ht(e[t],this.#u,this.#d)}capture(e,t,n=!1){e.v!==C&&!this.previous.has(e)&&this.previous.set(e,e.v),e.f&8388608||(this.current.set(e,[t,n]),zt?.set(e,t)),this.is_fork||(e.v=t)}activate(){M=this}deactivate(){M=null,zt=null}flush(){try{Ht=!0,M=this,this.#g()}finally{Gt=0,Bt=null,Ut=null,Wt=null,Ht=!1,M=null,zt=null,an.clear()}}discard(){for(let e of this.#i)e(this);this.#i.clear();for(let e of this.async_deriveds.values())e.reject(Ot);this.#S(),this.#s?.resolve()}register_created_effect(e){this.#l.push(e)}#x(){for(let u=It;u!==null;u=u.#n){var e=u.id<this.id,t=[];for(let[r,[i,a]]of this.current){if(u.current.has(r)){var n=u.current.get(r)[0];if(e&&i!==n)u.current.set(r,[i,a]);else continue}t.push(r)}if(e)for(let[e,t]of this.async_deriveds){let n=u.async_deriveds.get(e);n&&t.promise.then(n.resolve).catch(n.reject)}var r=[...u.current.keys()].filter(e=>!u.current.get(e)[1]);if(!(!u.#e||r.length===0)){var i=r.filter(e=>!this.current.has(e));if(i.length===0)e&&u.discard();else if(t.length>0){if(e)for(let e of this.#p)u.unskip_effect(e,e=>{e.f&4194320?u.schedule(e):u.#b([e])});u.activate();var a=new Set,o=new Map;for(var s of t)Qt(s,i,a,o);o=new Map;var c=[...u.current].filter(([e,t])=>{let n=this.current.get(e);return n?n[0]!==t[0]||n[1]!==t[1]:!0}).map(([e])=>e);if(c.length>0)for(let e of this.#l)!(e.f&155648)&&$t(e,c,o)&&(e.f&4194320?(A(e,v),u.schedule(e)):u.#u.add(e));if(u.#c.length>0&&!u.#m){u.apply();for(var l of u.#c)u.#_(l,[],[]);u.#c=[]}u.deactivate()}}}}increment(e,t){if(this.#a+=1,e){let e=this.#o.get(t)??0;this.#o.set(t,e+1)}}decrement(e,t){if(--this.#a,e){let e=this.#o.get(t)??0;e===1?this.#o.delete(t):this.#o.set(t,e-1)}this.#m||(this.#m=!0,ct(()=>{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(M===null){let t=M=new e;!Ht&&!Vt&&ct(()=>{t.#e||t.flush()})}return M}apply(){if(!Ye||!this.is_fork&&this.#t===null&&this.#n===null){zt=null;return}zt=new Map;for(let[e,[t]]of this.current)zt.set(e,t);for(let t=It;t!==null;t=t.#n)if(!(t===this||t.is_fork)){var e=!1;if(t.id<this.id){for(let[n,[,r]]of t.current)if(!r&&this.current.has(n)){e=!0;break}}if(!e)for(let[e,n]of t.previous)zt.has(e)||zt.set(e,n)}}schedule(e){if(Bt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Ut!==null&&t===V&&(Ye||(B===null||!(B.f&2))&&!gt))return;if(n&96){if(!(n&1024))return;t.f^=_}}this.#c.push(t)}#S(){if(this.linked){var e=this.#t,t=this.#n;e===null?It=t:e.#n=t,t===null?Lt=e:t.#t=e,this.linked=!1}}};function Jt(e){var t=Vt;Vt=!0;try{var n;for(e&&(M!==null&&!M.is_fork&&M.flush(),n=e());;){if(lt(),M===null)return n;M.flush()}}finally{Vt=t}}function Yt(){try{Te()}catch(e){dt(e,Bt)}}var Xt=null;function Zt(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if(!(r.f&24576)&&Cr(r)&&(Xt=new Set,Or(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&$n(r),Xt?.size>0)){an.clear();for(let e of Xt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)Xt.has(n)&&(Xt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Or(n)}}Xt.clear()}}Xt=null}}function Qt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Qt(i,t,n,r):e&4194320&&!(e&2048)&&$t(i,t,r)&&(A(i,v),en(i))}}function $t(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&$t(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function en(e){M.schedule(e)}function tn(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),A(e,_);for(var n=e.first;n!==null;)tn(n,t),n=n.next}}function nn(e){A(e,_);for(var t=e.first;t!==null;)nn(t),t=t.next}var rn=new Set,an=new Map,on=!1;function sn(e,t){return{f:0,v:e,reactions:null,equals:Ke,rv:0,wv:0}}function N(e,t){let n=sn(e,t);return pr(n),n}function cn(e,t=!1,n=!0){let r=sn(e);return t||(r.equals=Je),Xe&&n&&D!==null&&D.l!==null&&(D.l.s??=[]).push(r),r}function P(e,t,n=!1){return B!==null&&(!lr||B.f&131072)&&rt()&&B.f&4325394&&(fr===null||!fr.has(e))&&Ae(),ln(e,n?pn(t):t,Wt)}function ln(e,t,n=null){if(!e.equals(t)){an.set(e,sr?t:e.v);var r=qt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&Mt(t),zt===null&&pt(t)}e.wv=Sr(),fn(e,v,n),rt()&&V!==null&&V.f&1024&&!(V.f&96)&&(gr===null?_r([e]):gr.push(e)),!r.is_fork&&rn.size>0&&!on&&un()}return t}function un(){on=!1;for(let e of rn){e.f&1024&&A(e,y);let t;try{t=Cr(e)}catch{t=!0}t&&Or(e)}rn.clear()}function dn(e){P(e,e.v+1)}function fn(e,t,n){var r=e.reactions;if(r!==null)for(var i=rt(),a=r.length,o=0;o<a;o++){var s=r[o],c=s.f;if(!(!i&&s===V)){var l=(c&v)===0;if(l&&A(s,t),c&131072)rn.add(s);else if(c&2){var u=s;zt?.delete(u),c&65536||(c&512&&(V===null||!(V.f&2097152))&&(s.f|=ae),fn(u,y,n))}else if(l){var d=s;c&16&&Xt!==null&&Xt.add(d),n===null?en(d):n.push(d)}}}}function pn(t){if(typeof t!=`object`||!t||le in t)return t;let n=l(t);if(n!==s&&n!==c)return t;var r=new Map,i=e(t),o=N(0),u=null,d=br,f=e=>{if(br===d)return e();var t=B,n=br;ur(null),xr(d);var r=e();return ur(t),xr(n),r};return i&&r.set(`length`,N(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&Oe();var i=r.get(t);return i===void 0?f(()=>{var e=N(n.value,u);return r.set(t,e),e}):P(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>N(C,u));r.set(t,e),dn(o)}}else P(n,C),dn(o);return!0},get(e,n,i){if(n===le)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>N(pn(s?e[n]:C),u)),r.set(n,o)),o!==void 0){var c=H(o);return c===C?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=H(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==C)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===le)return!0;var n=r.get(t),i=n!==void 0&&n.v!==C||Reflect.has(e,t);return(n!==void 0||V!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>N(i?pn(e[t]):C,u)),r.set(t,n)),H(n)===C)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;d<c.v;d+=1){var p=r.get(d+``);p===void 0?d in e&&(p=f(()=>N(C,u)),r.set(d+``,p)):P(p,C)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>N(void 0,u)),P(c,pn(n)),r.set(t,c));else{l=c.v!==C;var m=f(()=>pn(n));P(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&P(g,_+1)}dn(o)}return!0},ownKeys(e){H(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==C});for(var[n,i]of r)i.v!==C&&!(n in e)&&t.push(n);return t},setPrototypeOf(){ke()}})}function mn(e){try{if(typeof e==`object`&&e&&le in e)return e[le]}catch{}return e}function hn(e,t){return Object.is(mn(e),mn(t))}new Set([`copyWithin`,`fill`,`pop`,`push`,`reverse`,`shift`,`sort`,`splice`,`unshift`]);var gn,_n,vn,yn;function bn(){if(gn===void 0){gn=window,_n=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;vn=a(t,`firstChild`).get,yn=a(t,`nextSibling`).get,u(e)&&(e[pe]=void 0,e[fe]=null,e[me]=void 0,e.__e=void 0),u(n)&&(n[he]=void 0)}}function xn(e=``){return document.createTextNode(e)}function Sn(e){return vn.call(e)}function Cn(e){return yn.call(e)}function F(e,t){if(!w)return Sn(e);var n=Sn(T);if(n===null)n=T.appendChild(xn());else if(t&&n.nodeType!==3){var r=xn();return n?.before(r),Ve(r),r}return t&&Dn(n),Ve(n),n}function I(e,t=!1){if(!w){var n=Sn(e);return n instanceof Comment&&n.data===``?Cn(n):n}if(t){if(T?.nodeType!==3){var r=xn();return T?.before(r),Ve(r),r}Dn(T)}return T}function L(e,t=1,n=!1){let r=w?T:e;for(var i;t--;)i=r,r=Cn(r);if(!w)return r;if(n){if(r?.nodeType!==3){var a=xn();return r===null?i?.after(a):r.before(a),Ve(a),a}Dn(r)}return Ve(r),r}function wn(e){e.textContent=``}function Tn(){return!Ye||Xt!==null?!1:(V.f&S)!==0}function En(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function Dn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function On(e,t){if(t){let t=document.body;e.autofocus=!0,ct(()=>{document.activeElement===t&&e.focus()})}}var kn=!1;function An(){kn||(kn=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[ge]?.()})},{capture:!0}))}function jn(e){var t=B,n=V;ur(null),dr(null);try{return e()}finally{ur(t),dr(n)}}function Mn(e,t,n,r=n){e.addEventListener(t,()=>jn(n));let i=e[ge];i?e[ge]=()=>{i(),r(!0)}:e[ge]=()=>r(!0),An()}function Nn(e){V===null&&(B===null&&we(e),Ce()),sr&&Se(e)}function Pn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Fn(e,t){var n=V;n!==null&&n.f&8192&&(e|=b);var r={ctx:D,deps:null,nodes:null,f:e|v|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};M?.register_created_effect(r);var i=r;if(e&4)Ut===null?qt.ensure().schedule(r):Ut.push(r);else if(t!==null){try{Or(r)}catch(e){throw z(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=te))}if(i!==null&&(i.parent=n,n!==null&&Pn(i,n),B!==null&&B.f&2&&!(e&64))){var a=B;(a.effects??=[]).push(i)}return r}function In(){return B!==null&&!lr}function Ln(e){let t=Fn(8,null);return A(t,_),t.teardown=e,t}function Rn(e){Nn(`$effect`);var t=V.f;if(!B&&t&32&&D!==null&&!D.i){var n=D;(n.e??=[]).push(e)}else return zn(e)}function zn(e){return Fn(4|re,e)}function Bn(e){return Nn(`$effect.pre`),Fn(8|re,e)}function Vn(e){qt.ensure();let t=Fn(64|ne,e);return()=>{z(t)}}function Hn(e){qt.ensure();let t=Fn(64|ne,e);return(e={})=>new Promise(n=>{e.outro?er(t,()=>{z(t),n(void 0)}):(z(t),n(void 0))})}function Un(e){return Fn(4,e)}function Wn(e){return Fn(se|ne,e)}function Gn(e,t=0){return Fn(8|t,e)}function R(e,t=[],n=[],r=[]){Ct(r,t,n,t=>{Fn(8,()=>{e(...t.map(H))})})}function Kn(e,t=0){return Fn(16|t,e)}function qn(e,t=0){return Fn(g|t,e)}function Jn(e){return Fn(32|ne,e)}function Yn(e){var t=e.teardown;if(t!==null){let e=sr,n=B;cr(!0),ur(null);try{t.call(null)}finally{cr(e),ur(n)}}}function Xn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&jn(()=>{e.abort(_e)});var r=n.next;n.f&64?n.parent=null:z(n,t),n=r}}function Zn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||z(t),t=n}}function z(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Qn(e.nodes.start,e.nodes.end),n=!0),e.f|=ee,Xn(e,t&&!n),Dr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();Yn(e),e.f^=ee,e.f|=x;var i=e.parent;i!==null&&i.first!==null&&$n(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Qn(e,t){for(;e!==null;){var n=e===t?null:Cn(e);e.remove(),e=n}}function $n(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function er(e,t,n=!0){var r=[];tr(e,r,!0);var i=()=>{n&&z(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function tr(e,t,n){if(!(e.f&8192)){e.f^=b;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;tr(i,t,o?n:!1)}i=a}}}function nr(e){rr(e,!0)}function rr(e,t){if(e.f&8192){e.f^=b,e.f&1024||(A(e,v),qt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;rr(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function ir(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:Cn(n);t.append(n),n=i}}var ar=null,or=!1,sr=!1;function cr(e){sr=e}var B=null,lr=!1;function ur(e){B=e}var V=null;function dr(e){V=e}var fr=null;function pr(e){B!==null&&(!Ye||B.f&2)&&(fr??=new Set).add(e)}var mr=null,hr=0,gr=null;function _r(e){gr=e}var vr=1,yr=0,br=yr;function xr(e){br=e}function Sr(){return++vr}function Cr(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~ae),t&4096){for(var n=e.deps,r=n.length,i=0;i<r;i++){var a=n[i];if(Cr(a)&&Nt(a),a.wv>e.wv)return!0}t&512&&zt===null&&A(e,_)}return!1}function wr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(!Ye&&fr!==null&&fr.has(e)))for(var i=0;i<r.length;i++){var a=r[i];a.f&2?wr(a,t,!1):t===a&&(n?A(a,v):a.f&1024&&A(a,y),en(a))}}function Tr(e){var t=mr,n=hr,r=gr,i=B,a=fr,o=D,s=lr,c=br,l=e.f;mr=null,hr=0,gr=null,B=l&96?null:e,fr=null,Qe(e.ctx),lr=!1,br=++yr,e.ac!==null&&(jn(()=>{e.ac.abort(_e)}),e.ac=null);try{e.f|=oe;var u=e.fn,d=u();e.f|=S;var f=e.deps,p=M?.is_fork;if(mr!==null){var m;if(p||Dr(e,hr),f!==null&&hr>0)for(f.length=hr+mr.length,m=0;m<mr.length;m++)f[hr+m]=mr[m];else e.deps=f=mr;if(In()&&e.f&512)for(m=hr;m<f.length;m++)(f[m].reactions??=[]).push(e)}else !p&&f!==null&&hr<f.length&&(Dr(e,hr),f.length=hr);if(rt()&&gr!==null&&!lr&&f!==null&&!(e.f&6146))for(m=0;m<gr.length;m++)wr(gr[m],e);if(i!==null&&i!==e){if(yr++,i.deps!==null)for(let e=0;e<n;e+=1)i.deps[e].rv=yr;if(t!==null)for(let e of t)e.rv=yr;gr!==null&&(r===null?r=gr:r.push(...gr))}return e.f&8388608&&(e.f^=ce),d}catch(e){return ut(e)}finally{e.f^=oe,mr=t,hr=n,gr=r,B=i,fr=a,Qe(o),lr=s,br=c}}function Er(e,r){let i=r.reactions;if(i!==null){var a=t.call(i,e);if(a!==-1){var o=i.length-1;o===0?i=r.reactions=null:(i[a]=i[o],i.pop())}}if(i===null&&r.f&2&&(mr===null||!n.call(mr,r))){var s=r;s.f&512&&(s.f^=512,s.f&=~ae),s.v!==C&&pt(s),Pt(s),Dr(s,0)}}function Dr(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)Er(e,n[r])}function Or(e){var t=e.f;if(!(t&16384)){A(e,_);var n=V,r=or;V=e,or=!0;try{t&16777232?Zn(e):Xn(e),Yn(e);var i=Tr(e);e.teardown=typeof i==`function`?i:null,e.wv=vr}finally{or=r,V=n}}}async function kr(){if(Ye)return new Promise(e=>{requestAnimationFrame(()=>e()),setTimeout(()=>e())});await Promise.resolve(),Jt()}function H(e){var t=(e.f&2)!=0;if(ar?.add(e),B!==null&&!lr&&!(V!==null&&V.f&16384)&&(fr===null||!fr.has(e))){var r=B.deps;if(B.f&2097152)e.rv<yr&&(e.rv=yr,mr===null&&r!==null&&r[hr]===e?hr++:mr===null?mr=[e]:mr.push(e));else{B.deps??=[],n.call(B.deps,e)||B.deps.push(e);var i=e.reactions;i===null?e.reactions=[B]:n.call(i,B)||i.push(B)}}if(sr&&an.has(e))return an.get(e);if(t){var a=e;if(sr){var o=a.v;return(!(a.f&1024)&&a.reactions!==null||jr(a))&&(o=Mt(a)),an.set(a,o),o}var s=(a.f&512)==0&&!lr&&B!==null&&(or||(B.f&512)!=0),c=(a.f&S)===0;Cr(a)&&(s&&(a.f|=512),Nt(a)),s&&!c&&(Ft(a),Ar(a))}if(zt?.has(e))return zt.get(e);if(e.f&8388608)throw e.v;return e.v}function Ar(e){if(e.f|=512,e.deps!==null)for(let t of e.deps)(t.reactions??=[]).push(e),t.f&2&&!(t.f&512)&&(Ft(t),Ar(t))}function jr(e){if(e.v===C)return!0;if(e.deps===null)return!1;for(let t of e.deps)if(an.has(t)||t.f&2&&jr(t))return!0;return!1}function Mr(e){var t=lr;try{return lr=!0,e()}finally{lr=t}}function Nr(){return Symbol(Fe)}function Pr(e){return e.endsWith(`capture`)&&e!==`gotpointercapture`&&e!==`lostpointercapture`}var Fr=[`beforeinput`,`click`,`change`,`dblclick`,`contextmenu`,`focusin`,`focusout`,`input`,`keydown`,`keyup`,`mousedown`,`mousemove`,`mouseout`,`mouseover`,`mouseup`,`pointerdown`,`pointermove`,`pointerout`,`pointerover`,`pointerup`,`touchend`,`touchmove`,`touchstart`];function Ir(e){return Fr.includes(e)}var Lr=`allowfullscreen.async.autofocus.autoplay.checked.controls.default.disabled.formnovalidate.indeterminate.inert.ismap.loop.multiple.muted.nomodule.novalidate.open.playsinline.readonly.required.reversed.seamless.selected.webkitdirectory.defer.disablepictureinpicture.disableremoteplayback`.split(`.`),Rr={formnovalidate:`formNoValidate`,ismap:`isMap`,nomodule:`noModule`,playsinline:`playsInline`,readonly:`readOnly`,defaultvalue:`defaultValue`,defaultchecked:`defaultChecked`,srcobject:`srcObject`,novalidate:`noValidate`,allowfullscreen:`allowFullscreen`,disablepictureinpicture:`disablePictureInPicture`,disableremoteplayback:`disableRemotePlayback`};function zr(e){return e=e.toLowerCase(),Rr[e]??e}[...Lr];var Br=[`touchstart`,`touchmove`];function Vr(e){return Br.includes(e)}var Hr=[`textarea`,`script`,`style`,`title`];function Ur(e){return Hr.includes(e)}var Wr=Symbol(`events`),Gr=new Set,Kr=new Set;function qr(e,t,n,r={}){function i(e){if(r.capture||Qr.call(t,e),!e.cancelBubble)return jn(()=>n?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?ct(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Jr(e,t,n,r={}){var i=qr(t,e,n,r);return()=>{e.removeEventListener(t,i,r)}}function Yr(e,t,n){(t[Wr]??={})[e]=n}function Xr(e){for(var t=0;t<e.length;t++)Gr.add(e[t]);for(var n of Kr)n(e)}var Zr=null;function Qr(e){var t=this,n=t.ownerDocument,r=e.type,a=e.composedPath?.()||[],o=a[0]||e.target;Zr=e;var s=0,c=Zr===e&&e[Wr];if(c){var l=a.indexOf(c);if(l!==-1&&(t===document||t===window)){e[Wr]=t;return}var u=a.indexOf(t);if(u===-1)return;l<=u&&(s=l)}if(o=a[s]||e.target,o!==t){i(e,`currentTarget`,{configurable:!0,get(){return o||n}});var d=B,f=V;ur(null),dr(null);try{for(var p,m=[];o!==null&&o!==t;){try{var h=o[Wr]?.[r];h!=null&&(!o.disabled||e.target===o)&&h.call(o,e)}catch(e){p?m.push(e):p=e}if(e.cancelBubble)break;s++,o=s<a.length?a[s]:null}if(p){for(let e of m)queueMicrotask(()=>{throw e});throw p}}finally{e[Wr]=t,delete e.currentTarget,ur(d),dr(f)}}}var $r=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function ei(e){return $r?.createHTML(e)??e}function ti(e){var t=En(`template`);return t.innerHTML=ei(e.replaceAll(`<!>`,`\\x3C!---->`)),t.content}function ni(e,t){var n=V;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function U(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(`<!>`);return()=>{if(w)return ni(T,null),T;i===void 0&&(i=ti(a?e:`<!>`+e),n||(i=Sn(i)));var t=r||_n?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=Sn(t),s=t.lastChild;ni(o,s)}else ni(t,t);return t}}function ri(e,t,n=`svg`){var r=!e.startsWith(`<!>`),i=(t&1)!=0,a=`<${n}>${r?e:`<!>`+e}</${n}>`,o;return()=>{if(w)return ni(T,null),T;if(!o){var e=Sn(ti(a));if(i)for(o=document.createDocumentFragment();Sn(e);)o.appendChild(Sn(e));else o=Sn(e)}var t=o.cloneNode(!0);if(i){var n=Sn(t),r=t.lastChild;ni(n,r)}else ni(t,t);return t}}function ii(e,t){return ri(e,t,`svg`)}function ai(e=``){if(!w){var t=xn(e+``);return ni(t,t),t}var n=T;return n.nodeType===3?Dn(n):(n.before(n=xn()),Ve(n)),ni(n,n),n}function W(){if(w)return ni(T,null),T;var e=document.createDocumentFragment(),t=document.createComment(``),n=xn();return e.append(t,n),ni(t,n),e}function G(e,t){if(w){var n=V;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=T),He();return}e!==null&&e.before(t)}function oi(){if(w&&T&&T.nodeType===8&&T.textContent?.startsWith(`$`)){let e=T.textContent.substring(1);return He(),e}return(window.__svelte??={}).uid??=1,`c${window.__svelte.uid++}`}function K(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[he]??=e.nodeValue)&&(e[he]=n,e.nodeValue=`${n}`)}function si(e,t){return li(e,t)}var ci=new Map;function li(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){bn();var l=void 0,u=Hn(()=>{var s=n??t.appendChild(xn());xt(s,{pending:()=>{}},t=>{O({});var n=D;if(o&&(n.c=o),a&&(i.$$events=a),w&&ni(t,null),l=e(t,i)||{},w&&(V.nodes.end=T,T===null||T.nodeType!==8||T.data!==`]`))throw Le(),Me;k()},c);var u=new Set,d=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!u.has(r)){u.add(r);var i=Vr(r);for(let e of[t,document]){var a=ci.get(e);a===void 0&&(a=new Map,ci.set(e,a));var o=a.get(r);o===void 0?(e.addEventListener(r,Qr,{passive:i}),a.set(r,1)):a.set(r,o+1)}}}};return d(r(Gr)),Kr.add(d),()=>{for(var e of u)for(let n of[t,document]){var r=ci.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Qr),r.delete(e),r.size===0&&ci.delete(n)):r.set(e,i)}Kr.delete(d),s!==n&&s.parentNode?.removeChild(s)}});return ui.set(l,u),l}var ui=new WeakMap;function di(e,t){let n=ui.get(e);return n?(ui.delete(e),n(t)):Promise.resolve()}var fi=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)nr(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(nr(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(z(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();ir(r,t),t.append(xn()),this.#n.set(e,{effect:r,fragment:t})}else z(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),er(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(z(n.effect),this.#n.delete(e))};ensure(e,t){var n=M,r=Tn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=xn();i.append(a),this.#n.set(e,{effect:Jn(()=>t(a)),fragment:i})}else this.#t.set(e,Jn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else w&&(this.anchor=T),this.#a(n)}};function q(e,t,n=!1){var r;w&&(r=T,He());var i=new fi(e),a=n?te:0;function o(e,t){if(w){var n=Ge(r);if(e!==parseInt(n.substring(1))){var a=We();Ve(a),i.anchor=a,Be(!1),i.ensure(e,t),Be(!0);return}}i.ensure(e,t)}Kn(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}var pi=Symbol(`NaN`);function mi(e,t,n){w&&He();var r=new fi(e),i=!rt();Kn(()=>{var e=t();e!==e&&(e=pi),i&&typeof e==`object`&&e&&(e={}),r.ensure(e,n)})}function hi(e,t){return t}function gi(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c<a;c++){let n=t[c];er(n,()=>{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;_i(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else --s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;wn(d),d.append(u),e.items.clear()}_i(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function _i(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i<t.length;i++){var a=t[i];r?.has(a)?(a.f|=ie,ir(a,document.createDocumentFragment())):z(t[i],n)}}var vi;function yi(t,n,i,a,o,s=null){var c=t,l=new Map;if(n&4){var u=t;c=w?Ve(Sn(u)):u.appendChild(xn())}w&&He();var d=null,f=At(()=>{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,xi(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=ie,Ci(d,null,c)):nr(d):er(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:Kn(()=>{p=H(f);var e=p.length;let t=!1;w&&Ge(c)===`[!`!=(e===0)&&(c=We(),Ve(c),Be(!1),t=!0);for(var r=new Set,u=M,v=Tn(),y=0;y<e;y+=1){w&&T.nodeType===8&&T.data===`]`&&(c=T,t=!0,Be(!1));var b=p[y],x=a(b,y),S=h?null:l.get(x);S?(S.v&&ln(S.v,b),S.i&&ln(S.i,y),v&&u.unskip_effect(S.e)):(S=Si(l,h?c:vi??=xn(),b,x,y,o,n,i),h||(S.e.f|=ie),l.set(x,S)),r.add(x)}if(e===0&&s&&!d&&(h?d=Jn(()=>s(c)):(d=Jn(()=>s(vi??=xn())),d.f|=ie)),e>r.size&&xe(``,``,``),w&&e>0&&Ve(We()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&Be(!0),H(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,w&&(c=T)}function bi(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function xi(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=bi(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v<s;v+=1)h=t[v],g=a(h,v),_=c.get(g).e,_.f&33554432||(_.nodes?.a?.measure(),(f??=new Set).add(_));for(v=0;v<s;v+=1){if(h=t[v],g=a(h,v),_=c.get(g).e,e.outrogroups!==null)for(let t of e.outrogroups)t.pending.delete(_),t.done.delete(_);if(_.f&8192&&(nr(_),o&&(_.nodes?.a?.unfix(),(f??=new Set).delete(_))),_.f&33554432)if(_.f^=ie,_===l)Ci(_,null,n);else{var y=d?d.next:l;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),wi(e,d,_),wi(e,_,y),Ci(_,y,n),d=_,p=[],m=[],l=bi(d.next);continue}if(_!==l){if(u!==void 0&&u.has(_)){if(p.length<m.length){var b=m[0],x;d=b.prev;var S=p[0],ee=p[p.length-1];for(x=0;x<p.length;x+=1)Ci(p[x],b,n);for(x=0;x<m.length;x+=1)u.delete(m[x]);wi(e,S.prev,ee.next),wi(e,d,S),wi(e,ee,b),l=b,d=ee,--v,p=[],m=[]}else u.delete(_),Ci(_,l,n),wi(e,_.prev,_.next),wi(e,_,d===null?e.effect.first:d.next),wi(e,d,_),d=_;continue}for(p=[],m=[];l!==null&&l!==_;)(u??=new Set).add(l),m.push(l),l=bi(l.next);if(l===null)continue}_.f&33554432||p.push(_),d=_,l=bi(_.next)}if(e.outrogroups!==null){for(let t of e.outrogroups)t.pending.size===0&&(_i(e,r(t.done)),e.outrogroups?.delete(t));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||u!==void 0){var te=[];if(u!==void 0)for(_ of u)_.f&8192||te.push(_);for(;l!==null;)!(l.f&8192)&&l!==e.fallback&&te.push(l),l=bi(l.next);var ne=te.length;if(ne>0){var re=i&4&&s===0?n:null;if(o){for(v=0;v<ne;v+=1)te[v].nodes?.a?.measure();for(v=0;v<ne;v+=1)te[v].nodes?.a?.fix()}gi(e,te,re)}}o&&ct(()=>{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function Si(e,t,n,r,i,a,o,s){var c=o&1?o&16?sn(n):cn(n,!1,!1):null,l=o&2?sn(i):null;return{v:c,i:l,e:Jn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function Ci(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=Cn(r);if(a.before(r),r===i)return;r=o}}function wi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function J(e,t,...n){var r=new fi(e);Kn(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},te)}function Ti(e,t,n){var r;w&&(r=T,He());var i=new fi(e);Kn(()=>{var e=t()??null;if(w&&Ge(r)===`[`!=(e!==null)){var a=We();Ve(a),i.anchor=a,Be(!1),i.ensure(e,e&&(t=>n(t,e))),Be(!0);return}i.ensure(e,e&&(t=>n(t,e)))},te)}function Ei(e,t,n,r,i,a){let o=w;w&&He();var s=null;w&&T.nodeType===1&&(s=T,He());var c=w?T:e,l=new fi(c,!1);Kn(()=>{let e=t()||null;var a=i?i():n||e===`svg`?Pe:void 0;if(e===null){l.ensure(null,null);return}return l.ensure(e,t=>{if(e){if(s=w?s:En(e,a),ni(s,s),r){var n=null;w&&Ur(e)&&s.append(n=document.createComment(``));var i=w?Sn(s):s.appendChild(xn());w&&(i===null?Be(!1):Ve(i)),r(s,i),n?.remove()}V.nodes.end=s,t.before(s)}w&&Ve(t)}),()=>{}},te),Ln(()=>{}),o&&(Be(!0),Ve(c))}function Di(e,t){var n=void 0,r;qn(()=>{n!==(n=t())&&(r&&=(z(r),null),n&&(r=Jn(()=>{Un(()=>n(e))})))})}function Oi(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(n=Oi(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n);return r}function ki(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=Oi(e))&&(r&&(r+=` `),r+=t);return r}function Ai(e){return typeof e==`object`?ki(e):e??``}var ji=[...` \t\n\\r\\f\\xA0\\v`];function Mi(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||ji.includes(r[o-1]))&&(s===r.length||ji.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Ni(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function Pi(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Fi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(Pi)),i&&c.push(...Object.keys(i).map(Pi));var l=0,u=-1;let t=e.length;for(var d=0;d<t;d++){var f=e[d];if(s?f===`/`&&e[d-1]===`*`&&(s=!1):a?a===f&&(a=!1):f===`/`&&e[d+1]===`*`?s=!0:f===`\"`||f===`'`?a=f:f===`(`?o++:f===`)`&&o--,!s&&a===!1&&o===0){if(f===`:`&&u===-1)u=d;else if(f===`;`||d===t-1){if(u!==-1){var p=Pi(e.substring(l,u).trim());if(!c.includes(p)){f!==`;`&&d++;var m=e.substring(l,d).trim();n+=` `+m+`;`}}l=d+1,u=-1}}}}return r&&(n+=Ni(r)),i&&(n+=Ni(i,!0)),n=n.trim(),n===``?null:n}return e==null?null:String(e)}function Ii(e,t,n,r,i,a){var o=e[pe];if(w||o!==n||o===void 0){var s=Mi(n,r,a);(!w||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[pe]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}function Li(e,t={},n,r){for(var i in n){var a=n[i];t[i]!==a&&(n[i]==null?e.style.removeProperty(i):e.style.setProperty(i,a,r))}}function Ri(e,t,n,r){var i=e[me];if(w||i!==t){var a=Fi(t,r);(!w||a!==e.getAttribute(`style`))&&(a==null?e.removeAttribute(`style`):e.style.cssText=a),e[me]=t}else r&&(Array.isArray(r)?(Li(e,n?.[0],r[0]),Li(e,n?.[1],r[1],`important`)):Li(e,n,r));return r}function zi(t,n,r=!1){if(t.multiple){if(n==null)return;if(!e(n))return Re();for(var i of t.options)i.selected=n.includes(Vi(i));return}for(i of t.options)if(hn(Vi(i),n)){i.selected=!0;return}(!r||n!==void 0)&&(t.selectedIndex=-1)}function Bi(e){var t=new MutationObserver(()=>{zi(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),Ln(()=>{t.disconnect()})}function Vi(e){return`__value`in e?e.__value:e.value}var Hi=Symbol(`class`),Ui=Symbol(`style`),Wi=Symbol(`is custom element`),Gi=Symbol(`is html`),Ki=ve?`link`:`LINK`,qi=ve?`input`:`INPUT`,Ji=ve?`option`:`OPTION`,Yi=ve?`select`:`SELECT`;function Xi(e){if(w){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;Qi(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;Qi(e,`checked`,null),e.checked=r}}};e[ge]=n,ct(n),An()}}function Zi(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function Qi(e,t,n,r){var i=ta(e);w&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Ki)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[de]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ra(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function $i(e,t,n,r,i=!1,a=!1){if(w&&i&&e.nodeName===qi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||Xi(o)}var s=ta(e),c=s[Wi],l=!s[Gi];let u=w&&c;u&&Be(!1);var d=t||{},f=e.nodeName===Ji;for(var p in t)p in n||(n[p]=null);n.class?n.class=Ai(n.class):(r||n[Hi])&&(n.class=null),n[Ui]&&(n.style??=null);var m=ra(e);if(e.nodeName===qi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,Qi(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){Ii(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[Hi],n[Hi]),d[i]=o,d[Hi]=n[Hi];continue}if(i===`style`){Ri(e,o,t?.[Ui],n[Ui]),d[i]=o,d[Ui]=n[Ui];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=Ir(r);if(Pr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)Yr(r,e,o),Xr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=qr(r,e,a,t)}}else if(i===`style`)Qi(e,i,o);else if(i===`autofocus`)On(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)Zi(e,o);else{var y=i;l||(y=zr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=C)):typeof o!=`function`&&Qi(e,y,o,a)}}}return u&&Be(!0),d}function ea(e,t,n=[],r=[],i=[],a,o=!1,s=!1){Ct(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===Yi,l=!1;if(qn(()=>{var u=t(...n.map(H)),d=$i(e,r,u,a,o,s);l&&c&&`value`in u&&zi(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||z(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&z(i[t]),i[t]=Jn(()=>Di(e,()=>f))),d[t]=f}r=d}),c){var u=e;Un(()=>{zi(u,r.value,!0),Bi(u)})}l=!0})}function ta(e){return e[fe]??={[Wi]:e.nodeName.includes(`-`),[Gi]:e.namespaceURI===Ne}}var na=new Map;function ra(e){var t=e.getAttribute(`is`)||e.nodeName,n=na.get(t);if(n)return n;na.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function ia(e,t,n=t){var r=new WeakSet;Mn(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=aa(e)?oa(a):a,n(a),M!==null&&r.add(M),await kr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(w&&e.defaultValue!==e.value||Mr(t)==null&&e.value)&&(n(aa(e)?oa(e.value):e.value),M!==null&&r.add(M)),Gn(()=>{var n=t();if(e===document.activeElement){var i=Ye?Rt:M;if(r.has(i))return}aa(e)&&n===oa(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function aa(e){var t=e.type;return t===`number`||t===`range`}function oa(e){return e===``?null:+e}var sa={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return e.exclude.has(t)?!1:t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function ca(e,t,n){return new Proxy({props:e,exclude:t},sa)}var la={get(e,t){let n=e.props.length;for(;n--;){let r=e.props[n];if(d(r)&&(r=r()),typeof r==`object`&&r&&t in r)return r[t]}},set(e,t,n){let r=e.props.length;for(;r--;){let i=e.props[r];d(i)&&(i=i());let o=a(i,t);if(o&&o.set)return o.set(n),!0}return!1},getOwnPropertyDescriptor(e,t){let n=e.props.length;for(;n--;){let r=e.props[n];if(d(r)&&(r=r()),typeof r==`object`&&r&&t in r){let e=a(r,t);return e&&!e.configurable&&(e.configurable=!0),e}}},has(e,t){if(t===le||t===ue)return!1;for(let n of e.props)if(d(n)&&(n=n()),n!=null&&t in n)return!0;return!1},ownKeys(e){let t=[];for(let n of e.props)if(d(n)&&(n=n()),n){for(let e in n)t.includes(e)||t.push(e);for(let e of Object.getOwnPropertySymbols(n))t.includes(e)||t.push(e)}return t}};function ua(...e){return new Proxy({props:e},la)}function Y(e,t,n,r){var i=!Xe||(n&2)!=0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=Dt(r),H(u)):(l&&(l=!1,c=s?Mr(r):r),c);let f;if(o){var p=le in e||ue in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=vt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&Ee(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?Dt:At)(()=>(v=!1,g()));o&&H(y);var b=V;return(function(e,t){if(arguments.length>0){let n=t?H(y):i&&o?pn(e):e;return P(y,n),v=!0,c!==void 0&&(c=n),e}return sr&&v||b.f&16384?y.v:H(y)})}function da(e){D===null&&ye(`onMount`),Xe&&D.l!==null?fa(D).m.push(e):Rn(()=>{let t=Mr(e);if(typeof t==`function`)return t})}function fa(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var X=new class{#e=N(null);get data(){return H(this.#e)}set data(e){P(this.#e,e,!0)}#t=N(null);get arsenal(){return H(this.#t)}set arsenal(e){P(this.#t,e,!0)}#n=N(`connecting`);get status(){return H(this.#n)}set status(e){P(this.#n,e,!0)}#r=N(``);get clock(){return H(this.#r)}set clock(e){P(this.#r,e,!0)}#i=N(`overview`);get view(){return H(this.#i)}set view(e){P(this.#i,e,!0)}#a=N(!1);get arsenalLoading(){return H(this.#a)}set arsenalLoading(e){P(this.#a,e,!0)}#o=!1;#s=null;async tick(){try{let e=await fetch(`/data`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.data=await e.json(),this.status=`live`,this.clock=new Date().toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{this.status=`offline`}}start(){this.tick(),this.#s=setInterval(()=>void this.tick(),1e4)}stop(){this.#s&&clearInterval(this.#s)}async loadArsenal(e=!1){if(!(this.#o&&!e)){this.arsenalLoading=!0;try{let e=await fetch(`/arsenal`);e.ok&&(this.arsenal=await e.json(),this.#o=!0)}catch{}finally{this.arsenalLoading=!1}}}go(e){this.view=e,e===`arsenal`&&this.loadArsenal()}};function Z(e){return typeof e!=`number`||!Number.isFinite(e)?`0`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(Math.round(e))}function pa(e){return typeof e!=`number`||!Number.isFinite(e)?`$0.00`:`$${e.toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function ma(e){if(!e)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):t.toLocaleDateString([],{month:`short`,day:`numeric`})}function ha(e){if(!e)return`unknown`;let t=e.toLowerCase();return t===`<synthetic>`?`unknown`:t.includes(`fable`)?`fable`:t.includes(`opus`)?`opus`:t.includes(`sonnet`)?`sonnet`:t.includes(`haiku`)?`haiku`:`unknown`}function ga(e){return!e||e===`<synthetic>`?`synthetic`:e.replace(/^claude-/,``)}function _a(e){if(!e)return``;let t=e.split(/[/\\\\]/).filter(Boolean);return t.length<=2?t.join(`/`):`…/${t.slice(-2).join(`/`)}`}var va=[220,75,20,155,285,330,250,45];function ya(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)>>>0;return`oklch(72% 0.15 ${va[t%va.length]})`}var ba={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,\"stroke-width\":2,\"stroke-linecap\":`round`,\"stroke-linejoin\":`round`},xa=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Sa=Symbol(`lucide-context`),Ca=()=>$e(Sa),wa=new Set([`$$slots`,`$$events`,`$$legacy`,`name`,`color`,`size`,`strokeWidth`,`absoluteStrokeWidth`,`iconNode`,`children`]),Ta=ii(`<svg><!><!></svg>`);function Ea(e,t){O(t,!0);let n=Ca()??{},r=Y(t,`color`,19,()=>n.color??`currentColor`),i=Y(t,`size`,19,()=>n.size??24),a=Y(t,`strokeWidth`,19,()=>n.strokeWidth??2),o=Y(t,`absoluteStrokeWidth`,19,()=>n.absoluteStrokeWidth??!1),s=Y(t,`iconNode`,19,()=>[]),c=ca(t,wa),l=j(()=>o()?Number(a())*24/Number(i()):a());var u=Ta();ea(u,e=>({...ba,...e,...c,width:i(),height:i(),stroke:r(),\"stroke-width\":H(l),class:[`lucide-icon lucide`,n.class,t.name&&`lucide-${t.name}`,t.class]}),[()=>!t.children&&!xa(c)&&{\"aria-hidden\":`true`}]);var d=F(u);yi(d,17,s,hi,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=W();Ei(I(a),r,!0,(e,t)=>{ea(e,()=>({...i()}))}),G(e,a)}),J(L(d),()=>t.children??f),E(u),G(e,u),k()}var Da=new Set([`$$slots`,`$$events`,`$$legacy`]);function Oa(e,t){let n=ca(t,Da),r=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]];Ea(e,ua({name:`layout-dashboard`},()=>n,{get iconNode(){return r}}))}var ka=new Set([`$$slots`,`$$events`,`$$legacy`]);function Aa(e,t){let n=ca(t,ka),r=[[`polyline`,{points:`14.5 17.5 3 6 3 3 6 3 17.5 14.5`}],[`line`,{x1:`13`,x2:`19`,y1:`19`,y2:`13`}],[`line`,{x1:`16`,x2:`20`,y1:`16`,y2:`20`}],[`line`,{x1:`19`,x2:`21`,y1:`21`,y2:`19`}],[`polyline`,{points:`14.5 6.5 18 3 21 3 21 6 17.5 9.5`}],[`line`,{x1:`5`,x2:`9`,y1:`14`,y2:`18`}],[`line`,{x1:`7`,x2:`4`,y1:`17`,y2:`20`}],[`line`,{x1:`3`,x2:`5`,y1:`19`,y2:`21`}]];Ea(e,ua({name:`swords`},()=>n,{get iconNode(){return r}}))}var ja=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ma(e,t){let n=ca(t,ja),r=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`}],[`path`,{d:`M12 17h.01`}]];Ea(e,ua({name:`circle-question-mark`},()=>n,{get iconNode(){return r}}))}var Na=new Set([`$$slots`,`$$events`,`$$legacy`]);function Pa(e,t){let n=ca(t,Na),r=[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M9 3v18`}]];Ea(e,ua({name:`panel-left`},()=>n,{get iconNode(){return r}}))}var Fa=U(`<div class=\"min-w-0\"><div class=\"font-serif text-lg leading-none text-foreground\">Synth<em>ra</em></div> <div class=\"font-mono text-[10px] uppercase tracking-[0.18em] text-muted-foreground\">Dashboard</div></div>`),Ia=U(`<span class=\"font-mono text-sm text-muted-foreground\"> </span>`),La=U(`<span> </span>`),Ra=U(`<button><!> <!></button>`),za=U(`<span>FAQ</span>`),Ba=U(`<div class=\"flex flex-col gap-1 rounded-lg bg-sidebar-accent/40 p-2.5\"><div class=\"font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground\">Active</div> <div class=\"truncate font-mono text-sm text-sidebar-foreground\"> </div> <div class=\"mt-1 flex items-center justify-between font-mono text-[10px] text-muted-foreground\"><span> </span> <span>v__SYN_VERSION__</span></div></div>`),Va=U(`<span class=\"text-xs\">Collapse</span>`),Ha=U(`<aside><div class=\"flex items-center gap-2.5 px-1 py-2\"><div class=\"grid size-8 shrink-0 place-items-center rounded-lg bg-primary/90 font-serif text-lg italic text-primary-foreground\">S</div> <!></div> <div><span></span> <!></div> <div class=\"my-1 h-px bg-sidebar-border\"></div> <nav class=\"flex flex-col gap-1\"><!> <button title=\"FAQ\"><!> <!></button></nav> <div class=\"flex-1\"></div> <!> <button title=\"Toggle sidebar\"><!> <!></button></aside>`);function Ua(e,t){O(t,!0);let n=N(!1),r=typeof window<`u`&&window.location.port||`8901`,i=[{id:`overview`,label:`Overview`,icon:Oa},{id:`arsenal`,label:`Arsenal`,icon:Aa}];var a=Ha(),o=F(a),s=L(F(o),2),c=e=>{G(e,Fa())};q(s,e=>{H(n)||e(c)}),E(o);var l=L(o,2),u=F(l);let d;var f=L(u,2),p=e=>{var t=Ia(),n=F(t,!0);E(t),R(()=>K(n,X.status===`live`?`live · ${X.clock}`:X.status)),G(e,t)};q(f,e=>{H(n)||e(p)}),E(l);var m=L(l,4),h=F(m);yi(h,17,()=>i,e=>e.id,(e,t)=>{var r=Ra(),i=F(r);Ti(i,()=>H(t).icon,(e,t)=>{t(e,{class:`size-4 shrink-0`})});var a=L(i,2),o=e=>{var n=La(),r=F(n,!0);E(n),R(()=>K(r,H(t).label)),G(e,n)};q(a,e=>{H(n)||e(o)}),E(r),R(()=>{Qi(r,`title`,H(t).label),Ii(r,1,`flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm transition-colors `+(X.view===H(t).id?`bg-sidebar-accent text-sidebar-accent-foreground`:`text-sidebar-foreground/75 hover:bg-sidebar-accent/50 hover:text-sidebar-foreground`)+(H(n)?` justify-center`:``))}),Yr(`click`,r,()=>X.go(H(t).id)),G(e,r)});var g=L(h,2),_=F(g);Ma(_,{class:`size-4 shrink-0`});var v=L(_,2),y=e=>{G(e,za())};q(v,e=>{H(n)||e(y)}),E(g),E(m);var b=L(m,4),x=e=>{var t=Ba(),n=L(F(t),2),i=F(n,!0);E(n);var a=L(n,2),o=F(a),s=F(o);E(o),Ue(2),E(a),E(t),R(()=>{Qi(n,`title`,X.data?.active?.project_root??`—`),K(i,X.data?.active?.project_name??`—`),K(s,`port ${r??``}`)}),G(e,t)};q(b,e=>{H(n)||e(x)});var S=L(b,2),ee=F(S);Pa(ee,{class:`size-4 shrink-0`});var te=L(ee,2),ne=e=>{G(e,Va())};q(te,e=>{H(n)||e(ne)}),E(S),E(a),R(()=>{Ii(a,1,`flex h-screen shrink-0 flex-col gap-1 border-r border-sidebar-border bg-sidebar p-3 transition-[width] duration-200 `+(H(n)?`w-[64px] items-center`:`w-[248px]`)),Ii(l,1,`flex items-center gap-2 rounded-md px-2 py-1.5 `+(H(n)?`justify-center`:``)),d=Ii(u,1,`size-2 shrink-0 rounded-full `+(X.status===`live`?`bg-[var(--c-fable)]`:X.status===`offline`?`bg-destructive`:`bg-muted-foreground`),null,d,{\"animate-pulse\":X.status===`live`}),Ii(g,1,`flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm text-sidebar-foreground/75 transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-foreground `+(H(n)?`justify-center`:``)),Ii(S,1,`mt-1 flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sidebar-foreground/60 transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-foreground `+(H(n)?`justify-center`:``))}),Yr(`click`,g,function(...e){t.onFaq?.apply(this,e)}),Yr(`click`,S,()=>P(n,!H(n))),G(e,a),k()}Xr([`click`]),Ze();var Wa=U(`<div class=\"flex flex-col gap-1 bg-card/70 p-4\"><span class=\"font-mono text-xs uppercase tracking-[0.12em] text-muted-foreground\"> </span> <span class=\"font-mono text-2xl tabular-nums text-foreground\"> </span></div>`),Ga=U(`<div class=\"grid grid-cols-2 gap-px overflow-hidden rounded-xl border bg-border sm:grid-cols-3 lg:grid-cols-5\"></div>`);function Ka(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global;return[{label:`Turns`,v:e?.total_turns??0},{label:`↓ Input`,v:e?.total_input_tokens??0},{label:`↑ Output`,v:e?.total_output_tokens??0},{label:`⟲ Cache R`,v:e?.total_cache_read??0},{label:`+ Cache W`,v:e?.total_cache_create??0}]});var r=Ga();yi(r,21,()=>H(n),e=>e.label,(e,t)=>{var n=Wa(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(e=>{K(i,H(t).label),K(o,e)},[()=>Z(H(t).v)]),G(e,n)}),E(r),G(e,r),k()}var qa=U(`<span class=\"font-mono text-[10px] uppercase tracking-[0.12em] text-muted-foreground\"> </span>`),Ja=U(`<header class=\"flex items-baseline justify-between gap-3\"><span class=\"font-mono text-xs uppercase tracking-[0.14em] text-muted-foreground\"> </span> <!></header>`),Ya=U(`<section><!> <!></section>`);function Xa(e,t){let n=Y(t,`class`,3,``);var r=Ya(),i=F(r),a=e=>{var n=Ja(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=e=>{var n=qa(),r=F(n,!0);E(n),R(()=>K(r,t.meta)),G(e,n)};q(a,e=>{t.meta&&e(o)}),E(n),R(()=>K(i,t.title)),G(e,n)};q(i,e=>{t.title&&e(a)}),J(L(i,2),()=>t.children??f),E(r),R(()=>Ii(r,1,`flex h-full min-h-0 flex-col gap-3 rounded-xl border bg-card/55 p-4 transition-colors hover:bg-card/80 `+n())),G(e,r)}var Za=U(`<div class=\"flex flex-col gap-3\"><div><div class=\"font-mono text-3xl text-[var(--money)]\"> </div> <div class=\"font-mono text-sm text-muted-foreground\"> </div></div> <div class=\"flex h-2 overflow-hidden rounded-full bg-border\"><div class=\"h-full bg-muted-foreground/40\"></div> <div class=\"h-full bg-[var(--money)]\"></div></div> <div class=\"flex justify-between font-mono text-xs text-muted-foreground\"><span>you paid <b class=\"text-foreground\"> </b></span> <span>baseline <b class=\"text-foreground\"> </b></span></div> <div class=\"rounded-md border border-dashed border-border px-3 py-2 text-center font-mono text-xs text-muted-foreground\"><b class=\"text-foreground\"> </b> blocks × <b class=\"text-foreground\">500</b> tokens × <b class=\"text-foreground\">$3</b>/M = <b class=\"text-[var(--money)]\"> </b></div></div>`);function Qa(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global,t=e?.blocked_count??0,n=t*500*3/1e6,r=e?.estimated_cost_usd??0,i=r+n;return{blocks:t,money:n,paid:r,baseline:i,pct:i>0?n/i*100:0,tokens:e?.estimated_tokens_saved??0,paidWidth:i>0?r/i*100:100}});{let t=j(()=>`${H(n).pct.toFixed(1)}% off · floor`);Xa(e,{title:`Synthra savings`,get meta(){return H(t)},children:(e,t)=>{var r=Za(),i=F(r),a=F(i),o=F(a,!0);E(a);var s=L(a,2),c=F(s);E(s),E(i);var l=L(i,2),u=F(l),d=L(u,2);E(l);var f=L(l,2),p=F(f),m=L(F(p)),h=F(m,!0);E(m),E(p);var g=L(p,2),_=L(F(g)),v=F(_,!0);E(_),E(g),E(f);var y=L(f,2),b=F(y),x=F(b,!0);E(b);var S=L(b,6),ee=F(S,!0);E(S),E(y),E(r),R((e,t,r,i,a)=>{K(o,e),K(c,`${t??``} tokens avoided`),Ri(u,`width:${H(n).paidWidth}%`),Ri(d,`width:${100-H(n).paidWidth}%`),K(h,r),K(v,i),K(x,H(n).blocks),K(ee,a)},[()=>pa(H(n).money),()=>Z(H(n).tokens),()=>pa(H(n).paid),()=>pa(H(n).baseline),()=>pa(H(n).money)]),G(e,r)},$$slots:{default:!0}})}k()}var $a=U(`<div class=\"font-mono text-3xl text-[var(--money)]\"> </div> <div class=\"mt-1 flex flex-col gap-1 font-mono text-sm text-muted-foreground\"><div class=\"flex justify-between\"><span>Tokens (in+out)</span><span class=\"text-foreground\"> </span></div> <div class=\"flex justify-between\"><span>Avg / turn</span><span class=\"text-foreground\"> </span></div></div>`,1);function eo(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global,t=e?.total_turns??0,n=e?.estimated_cost_usd??0;return{cost:n,tokens:(e?.total_input_tokens??0)+(e?.total_output_tokens??0),avg:t>0?n/t:0}});Xa(e,{title:`Total spend`,meta:`all time`,children:(e,t)=>{var r=$a(),i=I(r),a=F(i,!0);E(i);var o=L(i,2),s=F(o),c=L(F(s)),l=F(c,!0);E(c),E(s);var u=L(s,2),d=L(F(u)),f=F(d,!0);E(d),E(u),E(o),R((e,t,n)=>{K(a,e),K(l,t),K(f,n)},[()=>pa(H(n).cost),()=>Z(H(n).tokens),()=>pa(H(n).avg)]),G(e,r)},$$slots:{default:!0}}),k()}var to=ii(`<circle cx=\"70\" cy=\"70\" r=\"52\" fill=\"none\" stroke-width=\"14\"></circle>`),no=U(`<div class=\"flex items-center gap-2 font-mono text-sm\"><span class=\"size-2 rounded-sm\"></span> <span class=\"flex-1 text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span> <span class=\"w-9 text-right tabular-nums text-muted-foreground\"> </span></div>`),ro=U(`<div class=\"text-sm text-muted-foreground\">No turns yet.</div>`),io=U(`<div class=\"flex items-center gap-4\"><div class=\"relative size-[116px] shrink-0\"><svg viewBox=\"0 0 140 140\" class=\"size-full -rotate-90\"><circle cx=\"70\" cy=\"70\" r=\"52\" fill=\"none\" stroke=\"var(--border)\" stroke-width=\"14\"></circle><!></svg> <div class=\"absolute inset-0 grid place-items-center\"><div class=\"text-center\"><div class=\"font-mono text-2xl text-foreground\"> </div> <div class=\"font-mono text-[10px] uppercase text-muted-foreground\">turns</div></div></div></div> <div class=\"flex min-w-0 flex-1 flex-col gap-1.5\"></div></div>`);function ao(e,t){O(t,!0);let n=[{fam:`fable`,label:`Fable`,color:`var(--c-fable)`},{fam:`opus`,label:`Opus`,color:`var(--c-opus)`},{fam:`sonnet`,label:`Sonnet`,color:`var(--c-sonnet)`},{fam:`haiku`,label:`Haiku`,color:`var(--c-haiku)`},{fam:`unknown`,label:`Other`,color:`var(--c-unknown)`}],r=2*Math.PI*52,i=j(()=>{let e={fable:0,opus:0,sonnet:0,haiku:0,unknown:0};for(let t of X.data?.projects??[])for(let[n,r]of Object.entries(t.models??{}))e[ha(n)]+=r;let t=n.reduce((t,n)=>t+e[n.fam],0),i=0;return{arcs:n.filter(t=>e[t.fam]>0).map(n=>{let a=e[n.fam],o=t>0?a/t*r:0,s={...n,n:a,len:o,offset:i,pct:t>0?Math.round(a/t*100):0};return i+=o,s}),total:t}});Xa(e,{title:`Model usage`,meta:`by turns`,children:(e,t)=>{var n=io(),a=F(n),o=F(a);yi(L(F(o)),17,()=>H(i).arcs,e=>e.fam,(e,t)=>{var n=to();R(()=>{Qi(n,`stroke`,H(t).color),Qi(n,`stroke-dasharray`,`${H(t).len} ${r}`),Qi(n,`stroke-dashoffset`,-H(t).offset),Qi(n,`stroke-linecap`,H(i).arcs.length===1?`round`:`butt`)}),G(e,n)}),E(o);var s=L(o,2),c=F(s),l=F(c),u=F(l,!0);E(l),Ue(2),E(c),E(s),E(a);var d=L(a,2);yi(d,21,()=>H(i).arcs,e=>e.fam,(e,t)=>{var n=no(),r=F(n),i=L(r,2),a=F(i,!0);E(i);var o=L(i,2),s=F(o,!0);E(o);var c=L(o,2),l=F(c);E(c),E(n),R(()=>{Ri(r,`background:${H(t).color}`),K(a,H(t).label),K(s,H(t).n),K(l,`${H(t).pct??``}%`)}),G(e,n)},e=>{G(e,ro())}),E(d),E(n),R(()=>K(u,H(i).total)),G(e,n)},$$slots:{default:!0}}),k()}function oo(e){return typeof e==`object`&&!!e}var so=[`string`,`number`,`bigint`,`boolean`];function co(e){return e==null||so.includes(typeof e)?!0:Array.isArray(e)?e.every(e=>co(e)):typeof e==`object`?Object.getPrototypeOf(e)===Object.prototype:!1}var lo=Symbol(`box`),uo=Symbol(`is-writable`);function Q(e,t){let n=j(e);return t?{[lo]:!0,[uo]:!0,get current(){return H(n)},set current(e){t(e)}}:{[lo]:!0,get current(){return e()}}}function fo(e){return oo(e)&&lo in e}function po(e){let t=N(pn(e));return{[lo]:!0,[uo]:!0,get current(){return H(t)},set current(e){P(t,e,!0)}}}function mo(...e){return function(t){for(let n of e)if(n){if(t.defaultPrevented)return;typeof n==`function`?n.call(this,t):n.current?.call(this,t)}}}var ho=/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g,go=/\\n/g,_o=/^\\s*/,vo=/^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/,yo=/^:\\s*/,bo=/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/,xo=/^[;\\s]*/,So=/^\\s+|\\s+$/g,Co=`\n`,wo=`/`,To=`*`,Eo=``,Do=`comment`,Oo=`declaration`;function ko(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var n=1,r=1;function i(e){var t=e.match(go);t&&(n+=t.length);var i=e.lastIndexOf(Co);r=~i?e.length-i:r+e.length}function a(){var e={line:n,column:r};return function(t){return t.position=new o(e),l(),t}}function o(e){this.start=e,this.end={line:n,column:r},this.source=t.source}o.prototype.content=e;function s(i){var a=Error(t.source+`:`+n+`:`+r+`: `+i);if(a.reason=i,a.filename=t.source,a.line=n,a.column=r,a.source=e,!t.silent)throw a}function c(t){var n=t.exec(e);if(n){var r=n[0];return i(r),e=e.slice(r.length),n}}function l(){c(_o)}function u(e){var t;for(e||=[];t=d();)t!==!1&&e.push(t);return e}function d(){var t=a();if(!(wo!=e.charAt(0)||To!=e.charAt(1))){for(var n=2;Eo!=e.charAt(n)&&(To!=e.charAt(n)||wo!=e.charAt(n+1));)++n;if(n+=2,Eo===e.charAt(n-1))return s(`End of comment missing`);var o=e.slice(2,n-2);return r+=2,i(o),e=e.slice(n),r+=2,t({type:Do,comment:o})}}function f(){var e=a(),t=c(vo);if(t){if(d(),!c(yo))return s(`property missing ':'`);var n=c(bo),r=e({type:Oo,property:Ao(t[0].replace(ho,Eo)),value:n?Ao(n[0].replace(ho,Eo)):Eo});return c(xo),r}}function p(){var e=[];u(e);for(var t;t=f();)t!==!1&&(e.push(t),u(e));return e}return l(),p()}function Ao(e){return e?e.replace(So,Eo):Eo}function jo(e,t){let n=null;if(!e||typeof e!=`string`)return n;let r=ko(e),i=typeof t==`function`;return r.forEach(e=>{if(e.type!==`declaration`)return;let{property:r,value:a}=e;i?t(r,a,e):a&&(n||={},n[r]=a)}),n}var Mo=/\\d/,No=[`-`,`_`,`/`,`.`];function Po(e=``){if(!Mo.test(e))return e!==e.toLowerCase()}function Fo(e){let t=[],n=``,r,i;for(let a of e){let e=No.includes(a);if(e===!0){t.push(n),n=``,r=void 0;continue}let o=Po(a);if(i===!1){if(r===!1&&o===!0){t.push(n),n=a,r=o;continue}if(r===!0&&o===!1&&n.length>1){let e=n.at(-1);t.push(n.slice(0,Math.max(0,n.length-1))),n=e+a,r=o;continue}}n+=a,r=o,i=e}return t.push(n),t}function Io(e){return e?Fo(e).map(e=>Ro(e)).join(``):``}function Lo(e){return zo(Io(e||``))}function Ro(e){return e?e[0].toUpperCase()+e.slice(1):``}function zo(e){return e?e[0].toLowerCase()+e.slice(1):``}function Bo(e){if(!e)return{};let t={};function n(e,n){if(e.startsWith(`-moz-`)||e.startsWith(`-webkit-`)||e.startsWith(`-ms-`)||e.startsWith(`-o-`)){t[Io(e)]=n;return}if(e.startsWith(`--`)){t[e]=n;return}t[Lo(e)]=n}return jo(e,n),t}function Vo(...e){return(...t)=>{for(let n of e)typeof n==`function`&&n(...t)}}function Ho(e,t){let n=RegExp(e,`g`);return e=>{if(typeof e!=`string`)throw TypeError(`expected an argument of type string, but got ${typeof e}`);return e.match(n)?e.replace(n,t):e}}var Uo=Ho(/[A-Z]/,e=>`-${e.toLowerCase()}`);function Wo(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`expected an argument of type object, but got ${typeof e}`);return Object.keys(e).map(t=>`${Uo(t)}: ${e[t]};`).join(`\n`)}function Go(e={}){return Wo(e).replace(`\n`,` `)}var Ko=new Set(`onabort.onanimationcancel.onanimationend.onanimationiteration.onanimationstart.onauxclick.onbeforeinput.onbeforetoggle.onblur.oncancel.oncanplay.oncanplaythrough.onchange.onclick.onclose.oncompositionend.oncompositionstart.oncompositionupdate.oncontextlost.oncontextmenu.oncontextrestored.oncopy.oncuechange.oncut.ondblclick.ondrag.ondragend.ondragenter.ondragleave.ondragover.ondragstart.ondrop.ondurationchange.onemptied.onended.onerror.onfocus.onfocusin.onfocusout.onformdata.ongotpointercapture.oninput.oninvalid.onkeydown.onkeypress.onkeyup.onload.onloadeddata.onloadedmetadata.onloadstart.onlostpointercapture.onmousedown.onmouseenter.onmouseleave.onmousemove.onmouseout.onmouseover.onmouseup.onpaste.onpause.onplay.onplaying.onpointercancel.onpointerdown.onpointerenter.onpointerleave.onpointermove.onpointerout.onpointerover.onpointerup.onprogress.onratechange.onreset.onresize.onscroll.onscrollend.onsecuritypolicyviolation.onseeked.onseeking.onselect.onselectionchange.onselectstart.onslotchange.onstalled.onsubmit.onsuspend.ontimeupdate.ontoggle.ontouchcancel.ontouchend.ontouchmove.ontouchstart.ontransitioncancel.ontransitionend.ontransitionrun.ontransitionstart.onvolumechange.onwaiting.onwebkitanimationend.onwebkitanimationiteration.onwebkitanimationstart.onwebkittransitionend.onwheel`.split(`.`));function qo(e){return Ko.has(e)}function Jo(...e){let t={...e[0]};for(let n=1;n<e.length;n++){let r=e[n];if(r){for(let e of Object.keys(r)){let n=t[e],i=r[e],a=typeof n==`function`,o=typeof i==`function`;if(a&&typeof o&&qo(e))t[e]=mo(n,i);else if(a&&o)t[e]=Vo(n,i);else if(e===`class`){let r=co(n),a=co(i);r&&a?t[e]=ki(n,i):r?t[e]=ki(n):a&&(t[e]=ki(i))}else if(e===`style`){let r=typeof n==`object`,a=typeof i==`object`,o=typeof n==`string`,s=typeof i==`string`;if(r&&a)t[e]={...n,...i};else if(r&&s){let r=Bo(i);t[e]={...n,...r}}else if(o&&a)t[e]={...Bo(n),...i};else if(o&&s){let r=Bo(n),a=Bo(i);t[e]={...r,...a}}else r?t[e]=n:a?t[e]=i:o?t[e]=n:s&&(t[e]=i)}else t[e]=i===void 0?n:i}for(let e of Object.getOwnPropertySymbols(r)){let n=t[e],i=r[e];t[e]=i===void 0?n:i}}}return typeof t.style==`object`&&(t.style=Go(t.style).replaceAll(`\n`,` `)),t.hidden===!1&&(t.hidden=void 0,delete t.hidden),t.disabled===!1&&(t.disabled=void 0,delete t.disabled),t}var Yo=typeof window<`u`?window:void 0;typeof window<`u`&&window.document,typeof window<`u`&&window.navigator,typeof window<`u`&&window.location;function Xo(e){let t=e.activeElement;for(;t?.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}var Zo=class extends Map{#e=new Map;#t=N(0);#n=N(0);#r=br||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return br===this.#r?N(e):sn(e)}has(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else return H(this.#t),!1;return H(n),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else{H(this.#t);return}return H(n),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),P(this.#n,super.size),dn(o);else if(i!==t){dn(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&dn(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),P(n,-1)),r&&(P(this.#n,super.size),dn(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;P(this.#n,0);for(var t of e.values())P(t,-1);dn(this.#t),e.clear()}}#a(){H(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var n=this.#i(0);e.set(t,n)}}for([,n]of this.#e)H(n)}keys(){return H(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return H(this.#n),super.size}};new class{#e;#t;constructor(e={}){let{window:t=Yo,document:n=t?.document}=e;t!==void 0&&(this.#e=n,this.#t=yt(e=>{let n=Jr(t,`focusin`,e),r=Jr(t,`focusout`,e);return()=>{n(),r()}}))}get current(){return this.#t?.(),this.#e?Xo(this.#e):null}};var Qo=class{#e;#t;constructor(e){this.#e=e,this.#t=Symbol(e)}get key(){return this.#t}exists(){return tt(this.#t)}get(){let e=$e(this.#t);if(e===void 0)throw Error(`Context \"${this.#e}\" not found`);return e}getOr(e){let t=$e(this.#t);return t===void 0?e:t}set(e){return et(this.#t,e)}};function $o(e,t){switch(e){case`post`:Rn(t);break;case`pre`:Bn(t);break}}function es(e,t,n,r={}){let{lazy:i=!1}=r,a=!i,o=Array.isArray(e)?[]:void 0;$o(t,()=>{let t=Array.isArray(e)?e.map(e=>e()):e();if(!a){a=!0,o=t;return}let r=Mr(()=>n(t,o));return o=t,r})}function ts(e,t,n){let r=Vn(()=>{let i=!1;es(e,t,(e,t)=>{if(i){r();return}let a=n(e,t);return i=!0,a},{lazy:!0})});Rn(()=>r)}function ns(e,t,n){es(e,`post`,t,n)}function rs(e,t,n){es(e,`pre`,t,n)}ns.pre=rs;function is(e,t){ts(e,`post`,t)}function as(e,t){ts(e,`pre`,t)}is.pre=as;function os(e,t){let n,r=null;return(...i)=>new Promise(a=>{r&&r(void 0),r=a,clearTimeout(n),n=setTimeout(async()=>{let t=await e(...i);r&&=(r(t),null)},t)})}function ss(e,t){let n=0,r=null;return(...i)=>{let a=Date.now();return n&&a-n<t?r??Promise.resolve(void 0):(n=a,r=e(...i),r)}}function cs(e,t,n={},r){let{lazy:i=!1,once:a=!1,initialValue:o,debounce:s,throttle:c}=n,l=N(pn(o)),u=N(!1),d=N(void 0),f=N(pn([])),p=()=>{H(f).forEach(e=>e()),P(f,[],!0)},m=e=>{P(f,[...H(f),e],!0)},h=async(e,n,r=!1)=>{try{P(u,!0),P(d,void 0),p();let i=new AbortController;m(()=>i.abort());let a=await t(e,n,{data:H(l),refetching:r,onCleanup:m,signal:i.signal});return P(l,a,!0),a}catch(e){e instanceof DOMException&&e.name===`AbortError`||P(d,e,!0);return}finally{P(u,!1)}},g=s?os(h,s):c?ss(h,c):h,_=Array.isArray(e)?e:[e],v;return r((t,n)=>{a&&v||(v=t,g(Array.isArray(e)?t:t[0],Array.isArray(e)?n:n?.[0]))},{lazy:i}),{get current(){return H(l)},get loading(){return H(u)},get error(){return H(d)},mutate:e=>{P(l,e,!0)},refetch:t=>{let n=_.map(e=>e());return g(Array.isArray(e)?n:n[0],Array.isArray(e)?n:n[0],t??!0)}}}function ls(e,t,n){return cs(e,t,n,(t,n)=>{let r=Array.isArray(e)?e:[e];ns(()=>r.map(e=>e()),(e,n)=>{t(e,n??[])},n)})}function us(e,t,n){return cs(e,t,n,(t,n)=>{let r=Array.isArray(e)?e:[e];ns.pre(()=>r.map(e=>e()),(e,n)=>{t(e,n??[])},n)})}ls.pre=us;function ds(e){Rn(()=>()=>{e()})}function fs(e,t){return setTimeout(t,e)}function ps(e){kr().then(e)}var ms=1,hs=9,gs=11;function _s(e){return oo(e)&&e.nodeType===ms&&typeof e.nodeName==`string`}function vs(e){return oo(e)&&e.nodeType===hs}function ys(e){return oo(e)&&e.constructor?.name===`VisualViewport`}function bs(e){return oo(e)&&e.nodeType!==void 0}function xs(e){return bs(e)&&e.nodeType===gs&&`host`in e}function Ss(e,t){if(!e||!t||!_s(e)||!_s(t))return!1;let n=t.getRootNode?.();if(e===t||e.contains(t))return!0;if(n&&xs(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function Cs(e){return vs(e)?e:ys(e)?e.document:e?.ownerDocument??document}function ws(e){let t=e.activeElement;for(;t?.shadowRoot;){let e=t.shadowRoot.activeElement;if(e===t)break;t=e}return t}var Ts=class{element;#e=j(()=>this.element.current?this.element.current.getRootNode()??document:document);get root(){return H(this.#e)}set root(e){P(this.#e,e)}constructor(e){typeof e==`function`?this.element=Q(e):this.element=e}getDocument=()=>Cs(this.root);getWindow=()=>this.getDocument().defaultView??window;getActiveElement=()=>ws(this.root);isActiveElement=e=>e===this.getActiveElement();getElementById(e){return this.root.getElementById(e)}querySelector=e=>this.root?this.root.querySelector(e):null;querySelectorAll=e=>this.root?this.root.querySelectorAll(e):[];setTimeout=(e,t)=>this.getWindow().setTimeout(e,t);clearTimeout=e=>this.getWindow().clearTimeout(e)};function Es(e,t){return{[Nr()]:n=>fo(e)?(e.current=n,Mr(()=>t?.(n)),()=>{`isConnected`in n&&n.isConnected||(e.current=null,t?.(null))}):(e(n),Mr(()=>t?.(n)),()=>{`isConnected`in n&&n.isConnected||(e(null),t?.(null))})}}function Ds(e){return e?``:void 0}function Os(e){return e?`open`:`closed`}function ks(e){return e===`starting`?{\"data-starting-style\":``}:e===`ending`?{\"data-ending-style\":``}:{}}var As=class{#e;#t;attrs;constructor(e){this.#e=e.getVariant?e.getVariant():null,this.#t=this.#e?`data-${this.#e}-`:`data-${e.component}-`,this.getAttr=this.getAttr.bind(this),this.selector=this.selector.bind(this),this.attrs=Object.fromEntries(e.parts.map(e=>[e,this.getAttr(e)]))}getAttr(e,t){return t?`data-${t}-${e}`:`${this.#t}${e}`}selector(e,t){return`[${this.getAttr(e,t)}]`}};function js(e){let t=new As(e);return{...t.attrs,selector:t.selector,getAttr:t.getAttr}}var Ms=typeof document<`u`,Ns=Ps();function Ps(){return Ms&&window?.navigator?.userAgent&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function Fs(e){return e instanceof HTMLElement}function Is(e){return e instanceof Element||e instanceof SVGElement}var Ls=class{#e;#t=null;#n=null;#r=0;constructor(e){this.#e=e,ds(()=>this.#i())}#i(){this.#t!==null&&(window.cancelAnimationFrame(this.#t),this.#t=null),this.#n?.disconnect(),this.#n=null,this.#r++}run(e){this.#i();let t=this.#e.ref.current;if(!t)return;if(typeof t.getAnimations!=`function`){this.#a(e);return}let n=this.#r,r=()=>{n===this.#r&&this.#a(e)},i=()=>{if(n!==this.#r)return;let e=t.getAnimations();if(e.length===0){r();return}Promise.all(e.map(e=>e.finished)).then(()=>{r()}).catch(()=>{if(n===this.#r){if(t.getAnimations().some(e=>e.pending||e.playState!==`finished`)){i();return}r()}})},a=()=>{this.#t=window.requestAnimationFrame(()=>{this.#t=null,i()})};if(!this.#e.afterTick.current){a();return}this.#t=window.requestAnimationFrame(()=>{this.#t=null;let e=`data-starting-style`;if(!t.hasAttribute(e)){a();return}this.#n=new MutationObserver(()=>{n===this.#r&&(t.hasAttribute(e)||(this.#n?.disconnect(),this.#n=null,a()))}),this.#n.observe(t,{attributes:!0,attributeFilter:[e]})})}#a(e){let t=()=>{e()};this.#e.afterTick?ps(t):t()}},Rs=class{#e;#t;#n;#r=N(!1);#i=N(void 0);#a=!1;#o=null;constructor(e){this.#e=e,P(this.#r,e.open.current,!0),this.#t=e.enabled??!0,this.#n=new Ls({ref:this.#e.ref,afterTick:this.#e.open}),ds(()=>this.#s()),ns(()=>this.#e.open.current,e=>{if(!this.#a){this.#a=!0;return}if(this.#s(),!e&&this.#e.shouldSkipExitAnimation?.()){P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.();return}if(e&&P(this.#r,!0),P(this.#i,e?`starting`:`ending`,!0),e&&(this.#o=window.requestAnimationFrame(()=>{this.#o=null,this.#e.open.current&&P(this.#i,void 0)})),!this.#t){e||P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.();return}this.#n.run(()=>{e===this.#e.open.current&&(this.#e.open.current||P(this.#r,!1),P(this.#i,void 0),this.#e.onComplete?.())})})}get shouldRender(){return H(this.#r)}get transitionStatus(){return H(this.#i)}#s(){this.#o!==null&&(window.cancelAnimationFrame(this.#o),this.#o=null)}};function $(){}function zs(e,t){return t===void 0?`bits-${e}`:`bits-${e}-${t}`}var Bs=js({component:`dialog`,parts:[`content`,`trigger`,`overlay`,`title`,`description`,`close`,`cancel`,`action`]}),Vs=new Qo(`Dialog.Root | AlertDialog.Root`),Hs=class e{static create(t){let n=Vs.getOr(null);return Vs.set(new e(t,n))}opts;#e=N(null);get triggerNode(){return H(this.#e)}set triggerNode(e){P(this.#e,e,!0)}#t=N(null);get contentNode(){return H(this.#t)}set contentNode(e){P(this.#t,e,!0)}#n=N(null);get overlayNode(){return H(this.#n)}set overlayNode(e){P(this.#n,e,!0)}#r=N(null);get descriptionNode(){return H(this.#r)}set descriptionNode(e){P(this.#r,e,!0)}#i=N(void 0);get contentId(){return H(this.#i)}set contentId(e){P(this.#i,e,!0)}#a=N(void 0);get titleId(){return H(this.#a)}set titleId(e){P(this.#a,e,!0)}#o=N(void 0);get triggerId(){return H(this.#o)}set triggerId(e){P(this.#o,e,!0)}#s=N(void 0);get descriptionId(){return H(this.#s)}set descriptionId(e){P(this.#s,e,!0)}#c=N(null);get cancelNode(){return H(this.#c)}set cancelNode(e){P(this.#c,e,!0)}#l=N(0);get nestedOpenCount(){return H(this.#l)}set nestedOpenCount(e){P(this.#l,e,!0)}depth;parent;contentPresence;overlayPresence;constructor(e,t){this.opts=e,this.parent=t,this.depth=t?t.depth+1:0,this.handleOpen=this.handleOpen.bind(this),this.handleClose=this.handleClose.bind(this),this.contentPresence=new Rs({ref:Q(()=>this.contentNode),open:this.opts.open,enabled:!0,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new Rs({ref:Q(()=>this.overlayNode),open:this.opts.open,enabled:!0}),ns(()=>this.opts.open.current,e=>{this.parent&&(e?this.parent.incrementNested():this.parent.decrementNested())},{lazy:!0}),ds(()=>{this.opts.open.current&&this.parent?.decrementNested()})}handleOpen(){this.opts.open.current||(this.opts.open.current=!0)}handleClose(){this.opts.open.current&&(this.opts.open.current=!1)}getBitsAttr=e=>Bs.getAttr(e,this.opts.variant.current);incrementNested(){this.nestedOpenCount++,this.parent?.incrementNested()}decrementNested(){this.nestedOpenCount!==0&&(this.nestedOpenCount--,this.parent?.decrementNested())}#u=j(()=>({\"data-state\":Os(this.opts.open.current)}));get sharedProps(){return H(this.#u)}set sharedProps(e){P(this.#u,e)}},Us=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){this.opts.disabled.current||e.button>0||this.root.handleClose()}onkeydown(e){this.opts.disabled.current||(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),this.root.handleClose())}#e=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(this.opts.variant.current)]:``,onclick:this.onclick,onkeydown:this.onkeydown,disabled:this.opts.disabled.current?!0:void 0,tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Ws=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.root.titleId=this.opts.id.current,this.attachment=Es(this.opts.ref),ns.pre(()=>this.opts.id.current,e=>{this.root.titleId=e})}#e=j(()=>({id:this.opts.id.current,role:`heading`,\"aria-level\":this.opts.level.current,[this.root.getBitsAttr(`title`)]:``,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Gs=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.root.descriptionId=this.opts.id.current,this.attachment=Es(this.opts.ref,e=>{this.root.descriptionNode=e}),ns.pre(()=>this.opts.id.current,e=>{this.root.descriptionId=e})}#e=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(`description`)]:``,...this.root.sharedProps,...this.attachment}));get props(){return H(this.#e)}set props(e){P(this.#e,e)}},Ks=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref,e=>{this.root.contentNode=e,this.root.contentId=e?.id})}#e=j(()=>({open:this.root.opts.open.current}));get snippetProps(){return H(this.#e)}set snippetProps(e){P(this.#e,e)}#t=j(()=>({id:this.opts.id.current,role:this.root.opts.variant.current===`alert-dialog`?`alertdialog`:`dialog`,\"aria-modal\":`true`,\"aria-describedby\":this.root.descriptionId,\"aria-labelledby\":this.root.titleId,[this.root.getBitsAttr(`content`)]:``,style:{pointerEvents:`auto`,outline:this.root.opts.variant.current===`alert-dialog`?`none`:void 0,\"--bits-dialog-depth\":this.root.depth,\"--bits-dialog-nested-count\":this.root.nestedOpenCount,contain:`layout style`},tabindex:this.root.opts.variant.current===`alert-dialog`?-1:void 0,\"data-nested-open\":Ds(this.root.nestedOpenCount>0),\"data-nested\":Ds(this.root.parent!==null),...ks(this.root.contentPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return H(this.#t)}set props(e){P(this.#t,e)}get shouldRender(){return this.root.contentPresence.shouldRender}},qs=class e{static create(t){return new e(t,Vs.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Es(this.opts.ref,e=>this.root.overlayNode=e)}#e=j(()=>({open:this.root.opts.open.current}));get snippetProps(){return H(this.#e)}set snippetProps(e){P(this.#e,e)}#t=j(()=>({id:this.opts.id.current,[this.root.getBitsAttr(`overlay`)]:``,style:{pointerEvents:`auto`,\"--bits-dialog-depth\":this.root.depth,\"--bits-dialog-nested-count\":this.root.nestedOpenCount},\"data-nested-open\":Ds(this.root.nestedOpenCount>0),\"data-nested\":Ds(this.root.parent!==null),...ks(this.root.overlayPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return H(this.#t)}set props(e){P(this.#t,e)}get shouldRender(){return this.root.overlayPresence.shouldRender}},Js=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`ref`,`child`,`children`,`level`]),Ys=U(`<div><!></div>`);function Xs(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`level`,3,2),o=ca(t,Js),s=Ws.create({id:Q(()=>r()),level:Q(()=>a()),ref:Q(()=>i(),e=>i(e))}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(c)})),G(e,n)},p=e=>{var n=Ys();ea(n,()=>({...H(c)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(u,e=>{t.child?e(d):e(p,-1)}),G(e,l),k()}function Zs(e,t){var n=W();mi(I(n),()=>t.children,e=>{var n=W();J(I(n),()=>t.children??f),G(e,n)}),G(e,n)}var Qs=new Qo(`BitsConfig`);function $s(){let e=new ec(null,{});return Qs.getOr(e).opts}var ec=class{opts;constructor(e,t){let n=tc(e,t);this.opts={defaultPortalTo:n(e=>e.defaultPortalTo),defaultLocale:n(e=>e.defaultLocale)}}};function tc(e,t){return n=>Q(()=>{let r=n(t)?.current;if(r!==void 0)return r;if(e!==null)return n(e.opts)?.current})}function nc(e,t){return n=>{let r=$s();return Q(()=>{let i=n();if(i!==void 0)return i;let a=e(r).current;return a===void 0?t:a})}}var rc=nc(e=>e.defaultPortalTo,`body`);function ic(e,t){O(t,!0);let n=rc(()=>t.to),r=nt(),i=j(a);function a(){if(!Ms||t.disabled)return null;let e=null;return e=typeof n.current==`string`?document.querySelector(n.current):n.current,e}let o;function s(){o&&=(di(o),null)}ns([()=>H(i),()=>t.disabled],([e,n])=>{if(!e||n){s();return}return o=si(Zs,{target:e,props:{children:t.children},context:r}),()=>{s()}});var c=W(),l=I(c),u=e=>{var n=W();J(I(n),()=>t.children??f),G(e,n)};q(l,e=>{t.disabled&&e(u)}),G(e,c),k()}var ac=class{eventName;options;constructor(e,t={bubbles:!0,cancelable:!0}){this.eventName=e,this.options=t}createEvent(e){return new CustomEvent(this.eventName,{...this.options,detail:e})}dispatch(e,t){let n=this.createEvent(t);return e.dispatchEvent(n),n}listen(e,t,n){return Jr(e,this.eventName,e=>{t(e)},n)}};function oc(e,t=500){let n=null,r=(...r)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...r)},t)};return r.destroy=()=>{n!==null&&(clearTimeout(n),n=null)},r}function sc(e,t){return e===t||e.contains(t)}function cc(e){return e?.ownerDocument??document}function lc(e,t){let{clientX:n,clientY:r}=e,i=t.getBoundingClientRect();return n<i.left||n>i.right||r<i.top||r>i.bottom}var uc=[`input:not([inert]):not([inert] *)`,`select:not([inert]):not([inert] *)`,`textarea:not([inert]):not([inert] *)`,`a[href]:not([inert]):not([inert] *)`,`button:not([inert]):not([inert] *)`,`[tabindex]:not(slot):not([inert]):not([inert] *)`,`audio[controls]:not([inert]):not([inert] *)`,`video[controls]:not([inert]):not([inert] *)`,`[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)`,`details>summary:first-of-type:not([inert]):not([inert] *)`,`details:not([inert]):not([inert] *)`],dc=uc.join(`,`),fc=typeof Element>`u`,pc=fc?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,mc=!fc&&Element.prototype.getRootNode?function(e){return e?.getRootNode?.call(e)}:function(e){return e?.ownerDocument},hc=function(e,t){t===void 0&&(t=!0);var n=e?.getAttribute?.call(e,`inert`);return n===``||n===`true`||t&&e&&(typeof e.closest==`function`?e.closest(`[inert]`):hc(e.parentNode))},gc=function(e){var t=e?.getAttribute?.call(e,`contenteditable`);return t===``||t===`true`},_c=function(e,t,n){if(hc(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(dc));return t&&pc.call(e,dc)&&r.unshift(e),r=r.filter(n),r},vc=function(e,t,n){for(var r=[],i=Array.from(e);i.length;){var a=i.shift();if(!hc(a,!1))if(a.tagName===`SLOT`){var o=a.assignedElements(),s=vc(o.length?o:a.children,!0,n);n.flatten?r.push.apply(r,s):r.push({scopeParent:a,candidates:s})}else{pc.call(a,dc)&&n.filter(a)&&(t||!e.includes(a))&&r.push(a);var c=a.shadowRoot||typeof n.getShadowRoot==`function`&&n.getShadowRoot(a),l=!hc(c,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(a));if(c&&l){var u=vc(c===!0?a.children:c.children,!0,n);n.flatten?r.push.apply(r,u):r.push({scopeParent:a,candidates:u})}else i.unshift.apply(i,a.children)}}return r},yc=function(e){return!isNaN(parseInt(e.getAttribute(`tabindex`),10))},bc=function(e){if(!e)throw Error(`No node provided`);return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||gc(e))&&!yc(e)?0:e.tabIndex},xc=function(e,t){var n=bc(e);return n<0&&t&&!yc(e)?0:n},Sc=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Cc=function(e){return e.tagName===`INPUT`},wc=function(e){return Cc(e)&&e.type===`hidden`},Tc=function(e){return e.tagName===`DETAILS`&&Array.prototype.slice.apply(e.children).some(function(e){return e.tagName===`SUMMARY`})},Ec=function(e,t){for(var n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]},Dc=function(e){if(!e.name)return!0;var t=e.form||mc(e),n=function(e){return t.querySelectorAll(`input[type=\"radio\"][name=\"`+e+`\"]`)},r;if(typeof window<`u`&&window.CSS!==void 0&&typeof window.CSS.escape==`function`)r=n(window.CSS.escape(e.name));else try{r=n(e.name)}catch(e){return console.error(`Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s`,e.message),!1}var i=Ec(r,e.form);return!i||i===e},Oc=function(e){return Cc(e)&&e.type===`radio`},kc=function(e){return Oc(e)&&!Dc(e)},Ac=function(e){var t=e&&mc(e),n=t?.host,r=!1;if(t&&t!==e){var i,a,o;for(r=!!((i=n)!=null&&(a=i.ownerDocument)!=null&&a.contains(n)||e!=null&&(o=e.ownerDocument)!=null&&o.contains(e));!r&&n;){var s,c;t=mc(n),n=t?.host,r=!!((s=n)!=null&&(c=s.ownerDocument)!=null&&c.contains(n))}}return r},jc=function(e){var t=e.getBoundingClientRect(),n=t.width,r=t.height;return n===0&&r===0},Mc=function(e,t){var n=t.displayCheck,r=t.getShadowRoot;if(n===`full-native`&&`checkVisibility`in e)return!e.checkVisibility({checkOpacity:!1,opacityProperty:!1,contentVisibilityAuto:!0,visibilityProperty:!0,checkVisibilityCSS:!0});if(getComputedStyle(e).visibility===`hidden`)return!0;var i=pc.call(e,`details>summary:first-of-type`)?e.parentElement:e;if(pc.call(i,`details:not([open]) *`))return!0;if(!n||n===`full`||n===`full-native`||n===`legacy-full`){if(typeof r==`function`){for(var a=e;e;){var o=e.parentElement,s=mc(e);if(o&&!o.shadowRoot&&r(o)===!0)return jc(e);e=e.assignedSlot?e.assignedSlot:!o&&s!==e.ownerDocument?s.host:o}e=a}if(Ac(e))return!e.getClientRects().length;if(n!==`legacy-full`)return!0}else if(n===`non-zero-area`)return jc(e);return!1},Nc=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName===`FIELDSET`&&t.disabled){for(var n=0;n<t.children.length;n++){var r=t.children.item(n);if(r.tagName===`LEGEND`)return pc.call(t,`fieldset[disabled] *`)?!0:!r.contains(e)}return!0}t=t.parentElement}return!1},Pc=function(e,t){return!(t.disabled||wc(t)||Mc(t,e)||Tc(t)||Nc(t))},Fc=function(e,t){return!(kc(t)||bc(t)<0||!Pc(e,t))},Ic=function(e){var t=parseInt(e.getAttribute(`tabindex`),10);return!!(isNaN(t)||t>=0)},Lc=function(e){var t=[],n=[];return e.forEach(function(e,r){var i=!!e.scopeParent,a=i?e.scopeParent:e,o=xc(a,i),s=i?Lc(e.candidates):a;o===0?i?t.push.apply(t,s):t.push(a):n.push({documentOrder:r,tabIndex:o,item:e,isScope:i,content:s})}),n.sort(Sc).reduce(function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e},[]).concat(t)},Rc=function(e,t){return t||={},Lc(t.getShadowRoot?vc([e],t.includeContainer,{filter:Fc.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:Ic}):_c(e,t.includeContainer,Fc.bind(null,t)))},zc=function(e,t){return t||={},t.getShadowRoot?vc([e],t.includeContainer,{filter:Pc.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):_c(e,t.includeContainer,Pc.bind(null,t))},Bc=uc.concat(`iframe:not([inert]):not([inert] *)`).join(`,`),Vc=function(e,t){if(t||={},!e)throw Error(`No node provided`);return pc.call(e,Bc)===!1?!1:Pc(t,e)},Hc=`data-context-menu-trigger`,Uc=`data-context-menu-content`;new Qo(`Menu.Root`),new Qo(`Menu.Root | Menu.Sub`),new Qo(`Menu.Content`),new Qo(`Menu.Group | Menu.RadioGroup`),new Qo(`Menu.RadioGroup`),new Qo(`Menu.CheckboxGroup`),new ac(`bitsmenuopen`,{bubbles:!1,cancelable:!0}),js({component:`menu`,parts:[`trigger`,`content`,`sub-trigger`,`item`,`group`,`group-heading`,`checkbox-group`,`checkbox-item`,`radio-group`,`radio-item`,`separator`,`sub-content`,`arrow`]}),globalThis.bitsDismissableLayers??=new Map;var Wc=class e{static create(t){return new e(t)}opts;#e;#t;#n={pointerdown:!1};#r=!1;#i=!1;#a=void 0;#o;#s=$;constructor(e){this.opts=e,this.#t=e.interactOutsideBehavior,this.#e=e.onInteractOutside,this.#o=e.onFocusOutside,Rn(()=>{this.#a=cc(this.opts.ref.current)});let t=$,n=()=>{this.#g(),globalThis.bitsDismissableLayers.delete(this),this.#d.destroy(),t()};ns([()=>this.opts.enabled.current,()=>this.opts.ref.current],()=>{if(!(!this.opts.enabled.current||!this.opts.ref.current))return fs(1,()=>{this.opts.ref.current&&(globalThis.bitsDismissableLayers.set(this,this.#t),t(),t=this.#l())}),n}),ds(()=>{this.#g.destroy(),globalThis.bitsDismissableLayers.delete(this),this.#d.destroy(),this.#s(),t()})}#c=e=>{e.defaultPrevented||this.opts.ref.current&&ps(()=>{!this.opts.ref.current||this.#h(e.target)||e.target&&!this.#i&&this.#o.current?.(e)})};#l(){return Vo(Jr(this.#a,`pointerdown`,Vo(this.#f,this.#m),{capture:!0}),Jr(this.#a,`pointerdown`,Vo(this.#p,this.#d)),Jr(this.#a,`focusin`,this.#c))}#u=e=>{let t=e;t.defaultPrevented&&(t=Jc(e)),this.#e.current(e)};#d=oc(e=>{if(!this.opts.ref.current){this.#s();return}let t=this.opts.isValidEvent.current(e,this.opts.ref.current)||qc(e,this.opts.ref.current);if(!this.#r||this.#_()||!t){this.#s();return}let n=e;if(n.defaultPrevented&&(n=Jc(n)),this.#t.current!==`close`&&this.#t.current!==`defer-otherwise-close`){this.#s();return}e.pointerType===`touch`?(this.#s(),this.#s=Jr(this.#a,`click`,this.#u,{once:!0})):this.#e.current(n)},10);#f=e=>{this.#n[e.type]=!0};#p=e=>{this.#n[e.type]=!1};#m=()=>{this.opts.ref.current&&(this.#r=Kc(this.opts.ref.current))};#h=e=>this.opts.ref.current?sc(this.opts.ref.current,e):!1;#g=oc(()=>{for(let e in this.#n)this.#n[e]=!1;this.#r=!1},20);#_(){return Object.values(this.#n).some(Boolean)}#v=()=>{this.#i=!0};#y=()=>{this.#i=!1};props={onfocuscapture:this.#v,onblurcapture:this.#y}};function Gc(e=[...globalThis.bitsDismissableLayers]){return e.findLast(([e,{current:t}])=>t===`close`||t===`ignore`)}function Kc(e){let t=[...globalThis.bitsDismissableLayers],n=Gc(t);if(n)return n[0].opts.ref.current===e;let[r]=t[0];return r.opts.ref.current===e}function qc(e,t){let n=e.target;if(!Is(n))return!1;let r=!!n.closest(`[${Hc}]`),i=!!t.closest(`[${Uc}]`);return`button`in e&&e.button>0&&!r?!1:`button`in e&&e.button===0&&r&&i?!0:r&&i?!1:cc(n).documentElement.contains(n)&&!sc(t,n)&&lc(e,t)}function Jc(e){let t=e.currentTarget,n=e.target,r;r=e instanceof PointerEvent?new PointerEvent(e.type,e):new PointerEvent(`pointerdown`,e);let i=!1;return new Proxy(r,{get:(r,a)=>a===`currentTarget`?t:a===`target`?n:a===`preventDefault`?()=>{i=!0,typeof r.preventDefault==`function`&&r.preventDefault()}:a===`defaultPrevented`?i:a in r?r[a]:e[a]})}function Yc(e,t){O(t,!0);let n=Y(t,`interactOutsideBehavior`,3,`close`),r=Y(t,`onInteractOutside`,3,$),i=Y(t,`onFocusOutside`,3,$),a=Y(t,`isValidEvent`,3,()=>!1),o=Wc.create({id:Q(()=>t.id),interactOutsideBehavior:Q(()=>n()),onInteractOutside:Q(()=>r()),enabled:Q(()=>t.enabled),onFocusOutside:Q(()=>i()),isValidEvent:Q(()=>a()),ref:t.ref});var s=W();J(I(s),()=>t.children??f,()=>({props:o.props})),G(e,s),k()}globalThis.bitsEscapeLayers??=new Map;var Xc=class e{static create(t){return new e(t)}opts;domContext;constructor(e){this.opts=e,this.domContext=new Ts(this.opts.ref);let t=$;ns(()=>e.enabled.current,n=>(n&&(globalThis.bitsEscapeLayers.set(this,e.escapeKeydownBehavior),t=this.#e()),()=>{t(),globalThis.bitsEscapeLayers.delete(this)}))}#e=()=>Jr(this.domContext.getDocument(),`keydown`,this.#t,{passive:!1});#t=e=>{if(e.key!==`Escape`||!Zc(this))return;let t=new KeyboardEvent(e.type,e);e.preventDefault();let n=this.opts.escapeKeydownBehavior.current;n!==`close`&&n!==`defer-otherwise-close`||this.opts.onEscapeKeydown.current(t)}};function Zc(e){let t=[...globalThis.bitsEscapeLayers],n=t.findLast(([e,{current:t}])=>t===`close`||t===`ignore`);if(n)return n[0]===e;let[r]=t[0];return r===e}function Qc(e,t){O(t,!0);let n=Y(t,`escapeKeydownBehavior`,3,`close`),r=Y(t,`onEscapeKeydown`,3,$);Xc.create({escapeKeydownBehavior:Q(()=>n()),onEscapeKeydown:Q(()=>r()),enabled:Q(()=>t.enabled),ref:t.ref});var i=W();J(I(i),()=>t.children??f),G(e,i),k()}var $c=class e{static instance;#e=po([]);#t=new WeakMap;#n=new WeakMap;static getInstance(){return this.instance||=new e,this.instance}register(e){let t=this.getActive();t&&t!==e&&t.pause();let n=document.activeElement;n&&n!==document.body&&this.#n.set(e,n),this.#e.current=this.#e.current.filter(t=>t!==e),this.#e.current.unshift(e)}unregister(e){this.#e.current=this.#e.current.filter(t=>t!==e);let t=this.getActive();t&&t.resume()}getActive(){return this.#e.current[0]}setFocusMemory(e,t){this.#t.set(e,t)}getFocusMemory(e){return this.#t.get(e)}isActiveScope(e){return this.getActive()===e}setPreFocusMemory(e,t){this.#n.set(e,t)}getPreFocusMemory(e){return this.#n.get(e)}clearPreFocusMemory(e){this.#n.delete(e)}},el=class e{#e=!1;#t=null;#n=$c.getInstance();#r=[];#i;constructor(e){this.#i=e}get paused(){return this.#e}pause(){this.#e=!0}resume(){this.#e=!1}#a(){for(let e of this.#r)e();this.#r=[]}mount(e){this.#t&&this.unmount(),this.#t=e,this.#n.register(this),this.#c(),this.#o()}unmount(){this.#t&&=(this.#a(),this.#s(),this.#n.unregister(this),this.#n.clearPreFocusMemory(this),null)}#o(){if(!this.#t)return;let e=new CustomEvent(`focusScope.onOpenAutoFocus`,{bubbles:!1,cancelable:!0});this.#i.onOpenAutoFocus.current(e),e.defaultPrevented||requestAnimationFrame(()=>{if(!this.#t)return;let e=this.#u();e?(e.focus(),this.#n.setFocusMemory(this,e)):this.#t.focus()})}#s(){let e=new CustomEvent(`focusScope.onCloseAutoFocus`,{bubbles:!1,cancelable:!0});if(this.#i.onCloseAutoFocus.current?.(e),!e.defaultPrevented){let e=this.#n.getPreFocusMemory(this);if(e&&document.contains(e))try{e.focus()}catch{document.body.focus()}}}#c(){if(!this.#t||!this.#i.trap.current)return;let e=this.#t,t=e.ownerDocument;this.#r.push(Jr(t,`focusin`,t=>{if(this.#e||!this.#n.isActiveScope(this))return;let n=t.target;if(n)if(e.contains(n))this.#n.setFocusMemory(this,n);else{let n=this.#n.getFocusMemory(this);if(n&&e.contains(n)&&Vc(n))t.preventDefault(),n.focus();else{let t=this.#u(),n=this.#d()[0];(t||n||e).focus()}}},{capture:!0}),Jr(e,`keydown`,e=>{if(!this.#i.loop||this.#e||e.key!==`Tab`||!this.#n.isActiveScope(this))return;let n=this.#l();if(n.length===0)return;let r=n[0],i=n[n.length-1];!e.shiftKey&&t.activeElement===i?(e.preventDefault(),r.focus()):e.shiftKey&&t.activeElement===r&&(e.preventDefault(),i.focus())}));let n=new MutationObserver(()=>{let t=this.#n.getFocusMemory(this);if(t&&!e.contains(t)){let t=this.#u(),n=this.#d()[0],r=t||n;r?(r.focus(),this.#n.setFocusMemory(this,r)):e.focus()}});n.observe(e,{childList:!0,subtree:!0}),this.#r.push(()=>n.disconnect())}#l(){return this.#t?Rc(this.#t,{includeContainer:!1,getShadowRoot:!0}):[]}#u(){return this.#l()[0]||null}#d(){return this.#t?zc(this.#t,{includeContainer:!1,getShadowRoot:!0}):[]}static use(t){let n=null;return ns([()=>t.ref.current,()=>t.enabled.current],([r,i])=>{r&&i?(n||=new e(t),n.mount(r)):n&&=(n.unmount(),null)}),ds(()=>{n?.unmount()}),{get props(){return{tabindex:-1}}}}};function tl(e,t){O(t,!0);let n=Y(t,`enabled`,3,!1),r=Y(t,`trapFocus`,3,!1),i=Y(t,`loop`,3,!1),a=Y(t,`onCloseAutoFocus`,3,$),o=Y(t,`onOpenAutoFocus`,3,$),s=el.use({enabled:Q(()=>n()),trap:Q(()=>r()),loop:i(),onCloseAutoFocus:Q(()=>a()),onOpenAutoFocus:Q(()=>o()),ref:t.ref});var c=W();J(I(c),()=>t.focusScope??f,()=>({props:s.props})),G(e,c),k()}var nl=()=>{};globalThis.bitsTextSelectionLayers??=new Map;var rl=class e{static create(t){return new e(t)}opts;domContext;#e=$;#t=!1;#n=nl;#r=nl;constructor(e){this.opts=e,this.domContext=new Ts(e.ref);let t=$;ns(()=>[this.opts.enabled.current,this.opts.onPointerDown.current,this.opts.onPointerUp.current],([e,n,r])=>(this.#t=e,this.#n=n,this.#r=r,e&&(globalThis.bitsTextSelectionLayers.set(this,this.opts.enabled),t(),t=this.#i()),()=>{this.#t=!1,t(),this.#s(),globalThis.bitsTextSelectionLayers.delete(this)}))}#i(){return Vo(Jr(this.domContext.getDocument(),`pointerdown`,this.#o),Jr(this.domContext.getDocument(),`pointerup`,mo(this.#s,this.#a)))}#a=e=>{this.#r(e)};#o=e=>{let t=this.opts.ref.current,n=e.target;!Fs(t)||!Fs(n)||!this.#t||!sl(this)||!Ss(t,n)||(this.#n(e),!e.defaultPrevented&&(this.#e=al(t,this.domContext.getDocument().body)))};#s=()=>{this.#e(),this.#e=$}},il=e=>e.style.userSelect||e.style.webkitUserSelect;function al(e,t){let n=il(t),r=il(e);return ol(t,`none`),ol(e,`text`),()=>{ol(t,n),ol(e,r)}}function ol(e,t){e.style.userSelect=t,e.style.webkitUserSelect=t}function sl(e){let t=[...globalThis.bitsTextSelectionLayers];if(!t.length)return!1;let n=t.at(-1);return n?n[0]===e:!1}function cl(e,t){O(t,!0);let n=Y(t,`preventOverflowTextSelection`,3,!0),r=Y(t,`onPointerDown`,3,$),i=Y(t,`onPointerUp`,3,$);rl.create({id:Q(()=>t.id),onPointerDown:Q(()=>r()),onPointerUp:Q(()=>i()),enabled:Q(()=>t.enabled&&n()),ref:t.ref});var a=W();J(I(a),()=>t.children??f),G(e,a),k()}globalThis.bitsIdCounter??={current:0};function ll(e=`bits`){return globalThis.bitsIdCounter.current++,`${e}-${globalThis.bitsIdCounter.current}`}var ul=class{#e;#t=0;#n=N();#r;constructor(e){this.#e=e}#i(){--this.#t,this.#r&&this.#t<=0&&(this.#r(),P(this.#n,void 0),this.#r=void 0)}get(...e){return this.#t+=1,H(this.#n)===void 0&&(this.#r=Vn(()=>{P(this.#n,this.#e(...e),!0)})),Rn(()=>()=>{this.#i()}),H(this.#n)}},dl=new Zo,fl=N(null),pl=null,ml=null,hl=!1,gl=Q(()=>{for(let e of dl.values())if(e)return!0;return!1}),_l=null,vl=new ul(()=>{function e(){document.body.setAttribute(`style`,H(fl)??``),document.body.style.removeProperty(`--scrollbar-width`),Ns&&pl?.(),P(fl,null)}function t(){ml!==null&&(window.clearTimeout(ml),ml=null)}function n(e,n){t(),hl=!0,_l=Date.now();let r=_l,i=()=>{ml=null,_l===r&&(bl(dl)?hl=!1:(hl=!1,n()))},a=e===null?24:e;ml=window.setTimeout(i,a)}function r(){H(fl)===null&&dl.size===0&&!hl&&P(fl,document.body.getAttribute(`style`),!0)}return ns(()=>gl.current,()=>{if(!gl.current)return;r(),hl=!1;let e=getComputedStyle(document.documentElement),t=getComputedStyle(document.body),n=e.scrollbarGutter?.includes(`stable`)||t.scrollbarGutter?.includes(`stable`),i=window.innerWidth-document.documentElement.clientWidth,a={padding:Number.parseInt(t.paddingRight??`0`,10)+i,margin:Number.parseInt(t.marginRight??`0`,10)};i>0&&!n&&(document.body.style.paddingRight=`${a.padding}px`,document.body.style.marginRight=`${a.margin}px`,document.body.style.setProperty(`--scrollbar-width`,`${i}px`)),document.body.style.overflow=`hidden`,Ns&&(pl=Jr(document,`touchmove`,e=>{e.target===document.documentElement&&(e.touches.length>1||e.preventDefault())},{passive:!1})),ps(()=>{document.body.style.pointerEvents=`none`,document.body.style.overflow=`hidden`})}),ds(()=>()=>{pl?.()}),{get lockMap(){return dl},resetBodyStyle:e,scheduleCleanupIfNoNewLocks:n,cancelPendingCleanup:t,ensureInitialStyleCaptured:r}}),yl=class{#e=ll();#t;#n=()=>null;#r;locked;constructor(e,t=()=>null){this.#t=e,this.#n=t,this.#r=vl.get(),this.#r&&(this.#r.cancelPendingCleanup(),this.#r.ensureInitialStyleCaptured(),this.#r.lockMap.set(this.#e,this.#t??!1),this.locked=Q(()=>this.#r.lockMap.get(this.#e)??!1,e=>this.#r.lockMap.set(this.#e,e)),ds(()=>{if(this.#r.lockMap.delete(this.#e),bl(this.#r.lockMap))return;let e=this.#n();this.#r.scheduleCleanupIfNoNewLocks(e,()=>{this.#r.resetBodyStyle()})}))}};function bl(e){for(let[t,n]of e)if(n)return!0;return!1}function xl(e,t){O(t,!0);let n=Y(t,`preventScroll`,3,!0),r=Y(t,`restoreScrollDelay`,3,null);n()&&new yl(n(),()=>r()),k()}var Sl=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`forceMount`,`child`,`children`,`ref`]),Cl=U(`<div><!></div>`);function wl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`forceMount`,3,!1),a=Y(t,`ref`,15,null),o=ca(t,Sl),s=qs.create({id:Q(()=>r()),ref:Q(()=>a(),e=>a(e))}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W(),r=I(n),i=e=>{var n=W(),r=I(n);{let e=j(()=>({props:Jo(H(c)),...s.snippetProps}));J(r,()=>t.child,()=>H(e))}G(e,n)},a=e=>{var n=Cl();ea(n,e=>({...e}),[()=>Jo(H(c))]),J(F(n),()=>t.children??f,()=>s.snippetProps),E(n),G(e,n)};q(r,e=>{t.child?e(i):e(a,-1)}),G(e,n)};q(u,e=>{(s.shouldRender||i())&&e(d)}),G(e,l),k()}var Tl=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`children`,`child`,`ref`]),El=U(`<div><!></div>`);function Dl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=ca(t,Tl),o=Gs.create({id:Q(()=>r()),ref:Q(()=>i(),e=>i(e))}),s=j(()=>Jo(a,o.props));var c=W(),l=I(c),u=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(s)})),G(e,n)},d=e=>{var n=El();ea(n,()=>({...H(s)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(l,e=>{t.child?e(u):e(d,-1)}),G(e,c),k()}function Ol(e,t){O(t,!0);let n=Y(t,`open`,15,!1),r=Y(t,`onOpenChange`,3,$),i=Y(t,`onOpenChangeComplete`,3,$);Hs.create({variant:Q(()=>`dialog`),open:Q(()=>n(),e=>{n(e),r()(e)}),onOpenChangeComplete:Q(()=>i())});var a=W();J(I(a),()=>t.children??f),G(e,a),k()}var kl=new Set([`$$slots`,`$$events`,`$$legacy`,`children`,`child`,`id`,`ref`,`disabled`]),Al=U(`<button><!></button>`);function jl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`disabled`,3,!1),o=ca(t,kl),s=Us.create({variant:Q(()=>`close`),id:Q(()=>r()),ref:Q(()=>i(),e=>i(e)),disabled:Q(()=>!!a())}),c=j(()=>Jo(o,s.props));var l=W(),u=I(l),d=e=>{var n=W();J(I(n),()=>t.child,()=>({props:H(c)})),G(e,n)},p=e=>{var n=Al();ea(n,()=>({...H(c)})),J(F(n),()=>t.children??f),E(n),G(e,n)};q(u,e=>{t.child?e(d):e(p,-1)}),G(e,l),k()}var Ml=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`children`,`child`,`ref`,`forceMount`,`onCloseAutoFocus`,`onOpenAutoFocus`,`onEscapeKeydown`,`onInteractOutside`,`trapFocus`,`preventScroll`,`restoreScrollDelay`]),Nl=U(`<!> <!>`,1),Pl=U(`<!> <div><!></div>`,1);function Fl(e,t){let n=oi();O(t,!0);let r=Y(t,`id`,19,()=>zs(n)),i=Y(t,`ref`,15,null),a=Y(t,`forceMount`,3,!1),o=Y(t,`onCloseAutoFocus`,3,$),s=Y(t,`onOpenAutoFocus`,3,$),c=Y(t,`onEscapeKeydown`,3,$),l=Y(t,`onInteractOutside`,3,$),u=Y(t,`trapFocus`,3,!0),d=Y(t,`preventScroll`,3,!0),p=Y(t,`restoreScrollDelay`,3,null),m=ca(t,Ml),h=Ks.create({id:Q(()=>r()),ref:Q(()=>i(),e=>i(e))}),g=j(()=>Jo(m,h.props));var _=W(),v=I(_),y=e=>{tl(e,{get ref(){return h.opts.ref},loop:!0,get trapFocus(){return u()},get enabled(){return h.root.opts.open.current},get onOpenAutoFocus(){return s()},get onCloseAutoFocus(){return o()},focusScope:(e,n)=>{let r=()=>n?.().props;Qc(e,ua(()=>H(g),{get enabled(){return h.root.opts.open.current},get ref(){return h.opts.ref},onEscapeKeydown:e=>{c()(e),!e.defaultPrevented&&h.root.handleClose()},children:(e,n)=>{Yc(e,ua(()=>H(g),{get ref(){return h.opts.ref},get enabled(){return h.root.opts.open.current},onInteractOutside:e=>{l()(e),!e.defaultPrevented&&h.root.handleClose()},children:(e,n)=>{cl(e,ua(()=>H(g),{get ref(){return h.opts.ref},get enabled(){return h.root.opts.open.current},children:(e,n)=>{var i=W(),a=I(i),o=e=>{var n=Nl(),i=I(n),a=e=>{xl(e,{get preventScroll(){return d()},get restoreScrollDelay(){return p()}})};q(i,e=>{h.root.opts.open.current&&e(a)});var o=L(i,2);{let e=j(()=>({props:Jo(H(g),r()),...h.snippetProps}));J(o,()=>t.child,()=>H(e))}G(e,n)},s=e=>{var n=Pl(),i=I(n);xl(i,{get preventScroll(){return d()}});var a=L(i,2);ea(a,e=>({...e}),[()=>Jo(H(g),r())]),J(F(a),()=>t.children??f),E(a),G(e,n)};q(a,e=>{t.child?e(o):e(s,-1)}),G(e,i)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})};q(v,e=>{(h.shouldRender||a())&&e(y)}),G(e,_),k()}var Il=U(`<button class=\"flex flex-col gap-1 text-left\"><div class=\"flex items-center gap-2 font-mono text-sm\"><span class=\"size-2 shrink-0 rounded-sm\"></span> <span class=\"flex-1 truncate text-foreground\"> </span> <span class=\"tabular-nums text-muted-foreground\"> </span></div> <div class=\"h-1 overflow-hidden rounded-full bg-border\"><div class=\"h-full\"></div></div></button>`),Ll=U(`<div class=\"text-sm text-muted-foreground\">No projects tracked yet — run <code class=\"text-foreground\">syn .</code></div>`),Rl=U(`<div class=\"flex max-h-[260px] flex-col gap-2 overflow-y-auto pr-1\"></div>`),zl=U(`<div class=\"flex flex-col gap-0.5 bg-card p-3\"><span class=\"font-mono text-[10px] uppercase tracking-[0.1em] text-muted-foreground\"> </span> <span class=\"font-mono text-sm text-foreground\"> </span></div>`),Bl=U(`<!> <!> <div class=\"mt-4 grid grid-cols-2 gap-px overflow-hidden rounded-lg border bg-border\"></div> <!>`,1),Vl=U(`<!> <!>`,1);function Hl(e,t){O(t,!0);let n=N(!1),r=N(null),i=j(()=>X.data?.projects??[]),a=j(()=>Math.max(1,...H(i).map(e=>e.total_turns)));function o(e){let t=(X.data?.recent_turns??[]).find(t=>t.project_path===e.path);return t?ma(t.ts):e.last_seen?ma(e.last_seen):`—`}function s(e){return[[`Cost`,pa(e.estimated_cost_usd)],[`Turns`,Z(e.total_turns)],[`Input`,Z(e.total_input_tokens)],[`Output`,Z(e.total_output_tokens)],[`Cache R`,Z(e.total_cache_read)],[`Cache W`,Z(e.total_cache_create)],[`Blocks`,Z(e.blocked_count)],[`Last active`,o(e)]]}var c=Vl(),l=I(c);Xa(l,{title:`Projects`,meta:`by turns`,children:(e,t)=>{var o=Rl();yi(o,21,()=>H(i),e=>e.path,(e,t)=>{var i=Il(),o=F(i),s=F(o),c=L(s,2),l=F(c,!0);E(c);var u=L(c,2),d=F(u,!0);E(u),E(o);var f=L(o,2),p=F(f);E(f),E(i),R((e,n,r)=>{Ri(s,e),K(l,H(t).name),K(d,n),Ri(p,r)},[()=>`background:${ya(H(t).name)}`,()=>Z(H(t).total_turns),()=>`width:${H(t).total_turns/H(a)*100}%; background:${ya(H(t).name)}`]),Yr(`click`,i,()=>{P(r,H(t),!0),P(n,!0)}),G(e,i)},e=>{G(e,Ll())}),E(o),G(e,o)},$$slots:{default:!0}}),Ti(L(l,2),()=>Ol,(e,t)=>{t(e,{get open(){return H(n)},set open(e){P(n,e,!0)},children:(e,t)=>{var n=W();Ti(I(n),()=>ic,(e,t)=>{t(e,{children:(e,t)=>{var n=Vl(),i=I(n);Ti(i,()=>wl,(e,t)=>{t(e,{class:`fixed inset-0 z-50 bg-black/60`})}),Ti(L(i,2),()=>Fl,(e,t)=>{t(e,{class:`fixed left-1/2 top-1/2 z-50 w-[min(440px,92vw)] -translate-x-1/2 -translate-y-1/2 rounded-xl border bg-card p-5 text-card-foreground shadow-2xl`,children:(e,t)=>{var n=W(),i=I(n),a=e=>{var t=Bl(),n=I(t);{let e=j(()=>`color:${ya(H(r).name)}`);Ti(n,()=>Xs,(t,n)=>{n(t,{class:`font-serif text-xl`,get style(){return H(e)},children:(e,t)=>{Ue();var n=ai();R(()=>K(n,H(r).name)),G(e,n)},$$slots:{default:!0}})})}var i=L(n,2);Ti(i,()=>Dl,(e,t)=>{t(e,{class:`truncate font-mono text-xs text-muted-foreground`,children:(e,t)=>{Ue();var n=ai();R(()=>K(n,H(r).path)),G(e,n)},$$slots:{default:!0}})});var a=L(i,2);yi(a,21,()=>s(H(r)),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=zl(),o=F(a),s=F(o,!0);E(o);var c=L(o,2),l=F(c,!0);E(c),E(a),R(()=>{K(s,r()),K(l,i())}),G(e,a)}),E(a),Ti(L(a,2),()=>jl,(e,t)=>{t(e,{class:`mt-4 w-full rounded-md border py-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Close`))},$$slots:{default:!0}})}),G(e,t)};q(i,e=>{H(r)&&e(a)}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,c),k()}Xr([`click`]);var Ul=U(`<div class=\"flex items-baseline justify-between font-mono text-sm\"><span class=\"text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span></div>`),Wl=U(`<div class=\"text-sm text-muted-foreground\">No graph-tool calls yet.</div>`),Gl=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">calls</span></div> <div class=\"flex flex-col gap-1.5\"></div>`,1);function Kl(e,t){O(t,!0);let n=j(()=>{let e=X.data?.global?.tool_calls??{};return Object.entries(e).sort((e,t)=>t[1]-e[1]).slice(0,8)}),r=j(()=>X.data?.global?.total_tool_calls??0);Xa(e,{title:`Graph tools used`,meta:`all projects`,children:(e,t)=>{var i=Gl(),a=I(i),o=F(a);Ue(),E(a);var s=L(a,2);yi(s,21,()=>H(n),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=Ul(),o=F(a),s=F(o,!0);E(o);var c=L(o,2),l=F(c,!0);E(c),E(a),R(()=>{K(s,r()),K(l,i())}),G(e,a)},e=>{G(e,Wl())}),E(s),R(e=>K(o,`${e??``} `),[()=>Z(H(r))]),G(e,i)},$$slots:{default:!0}}),k()}var ql=U(`<tr class=\"border-t border-border/60\"><td class=\"py-1.5 pr-2 text-muted-foreground\"> </td><td class=\"max-w-[120px] truncate py-1.5 pr-2 text-foreground\"> </td><td class=\"py-1.5 pr-2\"><span class=\"inline-flex items-center gap-1.5 rounded px-1.5 py-0.5\"><span class=\"size-1.5 rounded-sm\"></span> </span></td><td class=\"py-1.5 pr-2 text-right tabular-nums text-foreground\"> </td><td class=\"py-1.5 pr-2 text-right tabular-nums text-foreground\"> </td><td class=\"py-1.5 pr-2 text-right tabular-nums text-muted-foreground\"> </td><td class=\"py-1.5 text-right tabular-nums text-[var(--money)]\"> </td></tr>`),Jl=U(`<tr><td colspan=\"7\" class=\"py-6 text-center text-muted-foreground\">No turns recorded yet.</td></tr>`),Yl=U(`<div class=\"flex items-center justify-end gap-3 pt-1 font-mono text-sm text-muted-foreground\"><button class=\"rounded border px-2 py-1 disabled:opacity-40 enabled:hover:text-foreground\">‹ Prev</button> <span> </span> <button class=\"rounded border px-2 py-1 disabled:opacity-40 enabled:hover:text-foreground\">Next ›</button></div>`),Xl=U(`<div class=\"min-h-0 flex-1 overflow-x-auto\"><table class=\"w-full border-collapse font-mono text-sm\"><thead><tr class=\"text-left text-[10px] uppercase tracking-[0.1em] text-muted-foreground\"><th class=\"py-1.5 pr-2 font-medium\">Time</th><th class=\"py-1.5 pr-2 font-medium\">Project</th><th class=\"py-1.5 pr-2 font-medium\">Model</th><th class=\"py-1.5 pr-2 text-right font-medium\">In</th><th class=\"py-1.5 pr-2 text-right font-medium\">Out</th><th class=\"py-1.5 pr-2 text-right font-medium\">Cache R/W</th><th class=\"py-1.5 text-right font-medium\">Cost</th></tr></thead><tbody></tbody></table></div> <!>`,1);function Zl(e,t){O(t,!0);let n=N(1),r=j(()=>X.data?.recent_turns??[]),i=j(()=>Math.max(1,Math.ceil(H(r).length/25)));Rn(()=>{H(n)>H(i)&&P(n,H(i),!0)});let a=j(()=>H(r).slice((H(n)-1)*25,(H(n)-1)*25+25)),o=j(()=>H(r).length?(H(n)-1)*25+1:0),s=j(()=>Math.min(H(n)*25,H(r).length));{let t=j(()=>`showing ${H(o)}–${H(s)} of ${H(r).length}`);Xa(e,{title:`Recent turns`,get meta(){return H(t)},children:(e,t)=>{var r=Xl(),o=I(r),s=F(o),c=L(F(s));yi(c,21,()=>H(a),e=>e.ts+e.project_path+e.model,(e,t)=>{var n=ql(),r=F(n),i=F(r,!0);E(r);var a=L(r),o=F(a,!0);E(a);var s=L(a),c=F(s),l=F(c),u=L(l);E(c),E(s);var d=L(s),f=F(d,!0);E(d);var p=L(d),m=F(p,!0);E(p);var h=L(p),g=F(h);E(h);var _=L(h),v=F(_,!0);E(_),E(n),R((e,n,r,s,d,p,h,_,y)=>{K(i,e),Qi(a,`title`,H(t).project_name),K(o,H(t).project_name),Ri(c,n),Ri(l,r),K(u,` ${s??``}`),K(f,d),K(m,p),K(g,`${h??``} / ${_??``}`),K(v,y)},[()=>ma(H(t).ts),()=>`color: var(--c-${ha(H(t).model)})`,()=>`background: var(--c-${ha(H(t).model)})`,()=>ga(H(t).model),()=>Z(H(t).input),()=>Z(H(t).output),()=>Z(H(t).cache_read),()=>Z(H(t).cache_create),()=>pa(H(t).cost_usd)]),G(e,n)},e=>{G(e,Jl())}),E(c),E(s),E(o);var l=L(o,2),u=e=>{var t=Yl(),r=F(t),a=L(r,2),o=F(a);E(a);var s=L(a,2);E(t),R(()=>{r.disabled=H(n)<=1,K(o,`page ${H(n)??``} of ${H(i)??``}`),s.disabled=H(n)>=H(i)}),Yr(`click`,r,()=>P(n,Math.max(1,H(n)-1),!0)),Yr(`click`,s,()=>P(n,Math.min(H(i),H(n)+1),!0)),G(e,t)};q(l,e=>{H(i)>1&&e(u)}),G(e,r)},$$slots:{default:!0}})}k()}Xr([`click`]);var Ql=U(`<div class=\"font-mono text-xs text-muted-foreground\" title=\"Codebase exploration via the terminal (rg / cat / find) — observe-only, not yet blocked\"> <span> </span></div>`),$l=U(`<div class=\"flex items-baseline gap-2 font-mono text-xs\"><span class=\"shrink-0 text-muted-foreground\"> </span> <span> </span> <span class=\"truncate text-foreground/80\"> </span></div>`),eu=U(`<div class=\"text-sm text-muted-foreground\">No gate decisions yet.</div>`),tu=U(`<div class=\"mt-2 border-t border-border pt-2 text-[10px] uppercase tracking-wide text-muted-foreground\">Terminal hunts (observe-only)</div> <!>`,1),nu=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">blocks</span></div> <!> <div class=\"flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto\"><!> <!></div>`,1);function ru(e,t){O(t,!0);let n=j(()=>(X.data?.recent_gates??[]).slice(0,50)),r=j(()=>X.data?.global?.blocked_count??0),i=j(()=>X.data?.global?.bash_explorations??0),a=j(()=>X.data?.global?.bash_avoidable??0),o=j(()=>(X.data?.recent_bash??[]).slice(0,12));Xa(e,{title:`The Moat`,meta:`PreToolUse`,children:(e,t)=>{var s=nu(),c=I(s),l=F(c);Ue(),E(c);var u=L(c,2),d=e=>{var t=Ql(),n=F(t),r=L(n),o=F(r);E(r),E(t),R((e,t)=>{K(n,`↳ ${e??``} terminal hunts · `),Ii(r,1,Ai(H(a)>0?`text-destructive`:``)),K(o,`${t??``} the graph could answer`)},[()=>Z(H(i)),()=>Z(H(a))]),G(e,t)};q(u,e=>{H(i)>0&&e(d)});var f=L(u,2),p=F(f);yi(p,17,()=>H(n),e=>e.ts+e.query,(e,t)=>{var n=$l(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a);var s=L(a,2),c=F(s,!0);E(s),E(n),R(e=>{K(i,e),Ii(a,1,`shrink-0 rounded px-1 text-[10px] uppercase `+(H(t).decision===`block`?`bg-destructive/15 text-destructive`:`bg-[var(--c-fable)]/12 text-[var(--c-fable)]`)),K(o,H(t).decision),Qi(s,`title`,H(t).query??``),K(c,H(t).query??`—`)},[()=>ma(H(t).ts)]),G(e,n)},e=>{G(e,eu())});var m=L(p,2),h=e=>{var t=tu();yi(L(I(t),2),17,()=>H(o),e=>e.ts+e.query,(e,t)=>{var n=$l(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a);var s=L(a,2),c=F(s,!0);E(s),E(n),R(e=>{K(i,e),Ii(a,1,`shrink-0 rounded px-1 text-[10px] uppercase `+(H(t).avoidable?`bg-destructive/15 text-destructive`:`bg-muted text-muted-foreground`)),K(o,H(t).tool),Qi(s,`title`,H(t).query??``),K(c,H(t).query??`—`)},[()=>ma(H(t).ts)]),G(e,n)}),G(e,t)};q(m,e=>{H(o).length>0&&e(h)}),E(f),R(e=>K(l,`${e??``} `),[()=>Z(H(r))]),G(e,s)},$$slots:{default:!0}}),k()}var iu=U(`<div class=\"flex items-baseline justify-between gap-3 font-mono text-sm\"><span class=\"truncate text-muted-foreground\"> </span> <span class=\"tabular-nums text-foreground\"> </span></div>`),au=U(`<div class=\"text-sm text-muted-foreground\">No usage learned yet — Synthra learns as you read/edit files.</div>`),ou=U(`<div class=\"font-mono text-2xl text-foreground\"> <span class=\"text-sm text-muted-foreground\">tracked</span></div> <div class=\"flex max-h-[190px] flex-col gap-1.5 overflow-y-auto\"></div>`,1);function su(e,t){O(t,!0);let n=j(()=>X.data?.active),r=j(()=>H(n)?.stats?.hot_files??[]);{let t=j(()=>H(n)?.project_name??`active project`);Xa(e,{title:`Hot files`,get meta(){return H(t)},children:(e,t)=>{var i=ou(),a=I(i),o=F(a);Ue(),E(a);var s=L(a,2);yi(s,21,()=>H(r),e=>e.path,(e,t)=>{var n=iu(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(e=>{Qi(n,`title`,H(t).path),K(i,e),K(o,H(t).score)},[()=>_a(H(t).path)]),G(e,n)},e=>{G(e,au())}),E(s),R(e=>K(o,`${e??``} `),[()=>Z(H(n)?.stats?.hot_files_total??0)]),G(e,i)},$$slots:{default:!0}})}k()}var cu=U(`<div class=\"grid grid-cols-1 gap-4 p-5 lg:grid-cols-3\"><div class=\"lg:col-span-3 lg:row-start-1\"><!></div> <div class=\"lg:col-start-1 lg:row-start-2\"><!></div> <div class=\"lg:col-start-2 lg:row-start-2\"><!></div> <div class=\"lg:col-start-1 lg:row-start-3\"><!></div> <div class=\"lg:col-start-2 lg:row-start-3\"><!></div> <div class=\"lg:col-start-1 lg:row-start-4\"><!></div> <div class=\"lg:col-start-2 lg:row-start-4\"><!></div> <div class=\"relative lg:col-start-3 lg:row-start-2 lg:row-span-3\"><div class=\"lg:absolute lg:inset-0\"><!></div></div> <div class=\"lg:col-span-3 lg:row-start-5\"><!></div></div>`);function lu(e){var t=cu(),n=F(t);Ka(F(n),{}),E(n);var r=L(n,2);Qa(F(r),{}),E(r);var i=L(r,2);eo(F(i),{}),E(i);var a=L(i,2);ao(F(a),{}),E(a);var o=L(a,2);su(F(o),{}),E(o);var s=L(o,2);Hl(F(s),{}),E(s);var c=L(s,2);Kl(F(c),{}),E(c);var l=L(c,2),u=F(l);ru(F(u),{}),E(u),E(l);var d=L(l,2);Zl(F(d),{}),E(d),E(t),G(e,t)}var uu=new Set([`$$slots`,`$$events`,`$$legacy`]);function du(e,t){let n=ca(t,uu),r=[[`path`,{d:`M20 6 9 17l-5-5`}]];Ea(e,ua({name:`check`},()=>n,{get iconNode(){return r}}))}var fu=new Set([`$$slots`,`$$events`,`$$legacy`]);function pu(e,t){let n=ca(t,fu),r=[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`}]];Ea(e,ua({name:`copy`},()=>n,{get iconNode(){return r}}))}var mu=U(`<p> </p>`),hu=U(`<div class=\"break-all\"><span class=\"text-foreground/70\"> </span> </div>`),gu=U(`<div class=\"mt-1 flex flex-col gap-0.5 font-mono text-xs text-muted-foreground/80\"></div>`),_u=U(`<div role=\"button\" tabindex=\"0\" class=\"flex cursor-pointer flex-col gap-1.5 rounded-lg border bg-card/55 p-3 text-left transition-colors hover:bg-card/85\"><div class=\"flex items-center gap-1.5\"><span class=\"min-w-0 truncate font-mono text-sm text-foreground\"> </span> <button type=\"button\" title=\"Copy name\" class=\"inline-flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground/60 transition-colors hover:bg-accent hover:text-foreground\"><!></button> <span> </span></div> <!> <!></div>`);function vu(e,t){O(t,!0);let n=N(!1),r=N(!1),i,a=j(()=>t.item.scope===`plugin`?t.item.source??`plugin`:t.item.scope),o=j(()=>t.item.scope===`project`?`var(--c-fable)`:t.item.scope===`personal`?`var(--c-sonnet)`:`#9bc2ef`),s=j(()=>Object.entries(t.item.meta??{}));function c(){P(n,!H(n))}function l(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c())}async function u(e){e.stopPropagation();try{await navigator.clipboard.writeText(t.item.name),P(r,!0),clearTimeout(i),i=setTimeout(()=>P(r,!1),1200)}catch{}}var d=_u(),f=F(d),p=F(f),m=F(p,!0);E(p);var g=L(p,2),_=F(g),v=e=>{du(e,{class:`size-3.5`,style:`color: var(--c-fable)`})},y=e=>{pu(e,{class:`size-3.5`})};q(_,e=>{H(r)?e(v):e(y,-1)}),E(g);var b=L(g,2);let x;var S=F(b);E(b),E(f);var ee=L(f,2),te=e=>{var r=mu(),i=F(r,!0);E(r),R(()=>{Ii(r,1,`text-sm leading-snug text-muted-foreground `+(H(n)?``:`line-clamp-2`)),K(i,t.item.description)}),G(e,r)};q(ee,e=>{t.item.description&&e(te)});var ne=L(ee,2),re=e=>{var t=gu();yi(t,21,()=>H(s),([e,t])=>e,(e,t)=>{var n=j(()=>h(H(t),2));let r=()=>H(n)[0],i=()=>H(n)[1];var a=hu(),o=F(a),s=F(o);E(o);var c=L(o);E(a),R(()=>{K(s,`${r()??``}:`),K(c,` ${i()??``}`)}),G(e,a)}),E(t),G(e,t)};q(ne,e=>{H(n)&&H(s).length&&e(re)}),E(d),R(()=>{K(m,t.item.name),Qi(g,`aria-label`,`Copy \"${t.item.name}\"`),x=Ii(b,1,`ml-auto shrink-0 rounded border px-1.5 py-0.5 font-mono text-[9px] uppercase tracking-wide`,null,x,{\"opacity-50\":t.item.enabled===!1}),Ri(b,`color:${H(o)}; border-color:color-mix(in oklab, ${H(o)} 35%, transparent)`),K(S,`${H(a)??``}${t.item.enabled===!1?` · off`:``}`)}),Yr(`click`,d,c),Yr(`keydown`,d,l),Yr(`click`,g,u),G(e,d),k()}Xr([`click`,`keydown`]);var yu=U(`<span> </span>`),bu=U(`<button> <span class=\"opacity-60\"> </span></button>`),xu=U(`<div class=\"text-sm text-muted-foreground\">Scanning your arsenal…</div>`),Su=U(`<div class=\"text-sm text-muted-foreground\"> </div>`),Cu=U(`<section class=\"flex flex-col gap-2\"><div class=\"flex items-center gap-3 border-b border-border pb-1.5\"><span class=\"size-1.5 shrink-0 rounded-sm\"></span> <span class=\"font-mono text-xs uppercase tracking-[0.14em]\"> </span> <span class=\"font-mono text-xs tracking-[0.1em] text-muted-foreground\"> </span></div> <div class=\"grid grid-cols-1 items-start gap-2 md:grid-cols-2 2xl:grid-cols-3\"></div></section>`),wu=U(`<div class=\"flex flex-col gap-6\"></div>`),Tu=U(`<div class=\"flex h-full flex-col gap-4 p-5\"><div class=\"flex flex-wrap items-center justify-between gap-3\"><h1 class=\"font-serif text-2xl text-foreground\">⚔ Arsenal</h1> <div class=\"flex items-center gap-2 font-mono text-xs text-muted-foreground\"><!> <button class=\"rounded border px-2 py-1 transition-colors hover:text-foreground\">↻ Rescan</button></div></div> <div class=\"flex flex-wrap items-center gap-2\"><!> <input placeholder=\"Filter by name or description…\" autocomplete=\"off\" class=\"ml-auto w-full max-w-72 rounded-md border bg-card/60 px-3 py-1.5 text-sm outline-none transition-colors focus:border-ring\"/></div> <!></div>`);function Eu(e,t){O(t,!0);let n=N(`skills`),r=N(``),i=j(()=>X.arsenal),a=[{id:`skills`,label:`Skills`},{id:`agents`,label:`Agents`},{id:`mcp`,label:`MCP`}],o=j(()=>{let e=H(i)?H(i)[H(n)]:[],t=H(r).toLowerCase().trim();return t?e.filter(e=>e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)||(e.source??``).toLowerCase().includes(t)):e}),s=j(()=>{let e=new Map;for(let t of H(o)){let n=t.scope===`plugin`?`plugin:${t.source??`plugin`}`:t.scope,r=e.get(n);r||(r={label:t.scope===`plugin`?t.source??`plugin`:t.scope===`project`?`In this project`:`Personal · this machine`,scope:t.scope,items:[]},e.set(n,r)),r.items.push(t)}return[...e.values()]});function c(e){return e===`project`?`var(--c-fable)`:e===`personal`?`var(--c-sonnet)`:`#9bc2ef`}let l=j(()=>H(i)?new Date(H(i).scanned_at).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):``);var u=Tu(),d=F(u),f=L(F(d),2),p=F(f),m=e=>{var t=yu(),n=F(t);E(t),R(()=>K(n,`${H(i).counts.plugins??``} plugins · scanned ${H(l)??``}`)),G(e,t)};q(p,e=>{H(i)&&e(m)});var h=L(p,2);E(f),E(d);var g=L(d,2),_=F(g);yi(_,17,()=>a,e=>e.id,(e,t)=>{var r=bu(),a=F(r),o=L(a),s=F(o,!0);E(o),E(r),R(()=>{Ii(r,1,`rounded-lg px-3 py-1.5 font-mono text-xs transition-colors `+(H(n)===H(t).id?`bg-accent text-accent-foreground`:`text-muted-foreground hover:text-foreground`)),K(a,`${H(t).label??``} `),K(s,H(i)?.counts?.[H(t).id]??0)}),Yr(`click`,r,()=>P(n,H(t).id,!0)),G(e,r)});var v=L(_,2);Xi(v),E(g);var y=L(g,2),b=e=>{G(e,xu())},x=e=>{var t=Su(),n=F(t,!0);E(t),R(()=>K(n,H(r)?`No matches.`:`Nothing installed in this category.`)),G(e,t)},S=e=>{var t=wu();yi(t,21,()=>H(s),e=>e.label+e.scope,(e,t)=>{var n=Cu(),r=F(n),i=F(r),a=L(i,2),o=F(a,!0);E(a);var s=L(a,2),l=F(s,!0);E(s),E(r);var u=L(r,2);yi(u,21,()=>H(t).items,e=>e.scope+(e.source??``)+e.name,(e,t)=>{vu(e,{get item(){return H(t)}})}),E(u),E(n),R((e,n)=>{Ri(i,e),Ri(a,n),K(o,H(t).label),K(l,H(t).items.length)},[()=>`background:${c(H(t).scope)}`,()=>`color:${c(H(t).scope)}`]),G(e,n)}),E(t),G(e,t)};q(y,e=>{X.arsenalLoading&&!H(i)?e(b):H(s).length?e(S,-1):e(x,1)}),E(u),Yr(`click`,h,()=>X.loadArsenal(!0)),ia(v,()=>H(r),e=>P(r,e)),G(e,u),k()}Xr([`click`]);var Du=U(`<details class=\"rounded-lg border bg-card/50 p-3\"><summary class=\"cursor-pointer text-sm font-medium text-foreground\"> </summary> <p class=\"mt-2 text-[13px] leading-relaxed text-muted-foreground\"> </p></details>`),Ou=U(`<!> <!> <div class=\"mt-4 flex flex-col gap-2\"></div> <!>`,1),ku=U(`<!> <!>`,1);function Au(e,t){O(t,!0);let n=Y(t,`open`,15,!1),r=[{q:`Where do these numbers come from?`,a:`Synthra's Stop hook reads Claude Code's transcript JSONL after each turn and logs token usage to .synthra-graph/token_log.jsonl. The gate logs to gate_log.jsonl, tool calls to tool_log.jsonl. The dashboard reads those — it never feeds back into retrieval.`},{q:`How is cost calculated?`,a:`Token counts × Anthropic's published per-model rates (in src/shared/pricing.ts), summed across input, output, cache-read and cache-write. These are API-equivalent estimates, not your plan billing — useful for comparing sessions.`},{q:`What is the savings floor?`,a:`Each time the Moat blocks an exploratory Grep/Glob, we credit a deliberately conservative 500 tokens × $3/M input rate. Real savings are usually higher (it ignores cache thrash and follow-up reads the block also prevents). It's a floor, not a guess.`},{q:`What is the Moat?`,a:`A PreToolUse hook that intercepts Grep/Glob and, when the graph has confident context, blocks them and hands back the exact graph_read targets + signatures — so the agent reads ~50-token slices instead of whole files.`},{q:`What is the Arsenal view?`,a:`A scan of every skill, subagent, and MCP server available to you — project, personal (~/.claude), and plugin — with descriptions, so you never have to drop to the CLI to recall what's installed. MCP entries show name/type/url only; auth tokens are never read.`},{q:`What's the codebase graph?`,a:`tree-sitter parses your project into a symbol graph (files, symbols, imports, call edges). graph_read returns a symbol's source plus its dependency surface; graph_continue packs a context bundle.`},{q:`Where is everything stored?`,a:`.synthra-graph/ (machine-local, gitignored) holds the graph + logs; .synthra/ (git-tracked) holds branch-aware memory. Nothing leaves your machine.`},{q:`Why is my bill not lower already?`,a:`Savings land only when the agent actually uses the cheap path. v0.4–0.6 push the answer to the point of use (block payloads, edit recipes, dependency footers); a real dogfood session on the latest version is the true test.`}];var i=W();Ti(I(i),()=>Ol,(e,t)=>{t(e,{get open(){return n()},set open(e){n(e)},children:(e,t)=>{var n=W();Ti(I(n),()=>ic,(e,t)=>{t(e,{children:(e,t)=>{var n=ku(),i=I(n);Ti(i,()=>wl,(e,t)=>{t(e,{class:`fixed inset-0 z-50 bg-black/60`})}),Ti(L(i,2),()=>Fl,(e,t)=>{t(e,{class:`fixed left-1/2 top-1/2 z-50 max-h-[85vh] w-[min(640px,92vw)] -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-xl border bg-card p-6 text-card-foreground shadow-2xl`,children:(e,t)=>{var n=Ou(),i=I(n);Ti(i,()=>Xs,(e,t)=>{t(e,{class:`font-serif text-2xl`,children:(e,t)=>{Ue(),G(e,ai(`FAQ`))},$$slots:{default:!0}})});var a=L(i,2);Ti(a,()=>Dl,(e,t)=>{t(e,{class:`text-xs text-muted-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Where every number on this dashboard comes from.`))},$$slots:{default:!0}})});var o=L(a,2);yi(o,21,()=>r,e=>e.q,(e,t)=>{var n=Du(),r=F(n),i=F(r,!0);E(r);var a=L(r,2),o=F(a,!0);E(a),E(n),R(()=>{K(i,H(t).q),K(o,H(t).a)}),G(e,n)}),E(o),Ti(L(o,2),()=>jl,(e,t)=>{t(e,{class:`mt-4 w-full rounded-md border py-2 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:(e,t)=>{Ue(),G(e,ai(`Close`))},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,n)},$$slots:{default:!0}})}),G(e,i),k()}var ju=U(`<div class=\"flex h-screen w-screen overflow-hidden\"><!> <main class=\"min-w-0 flex-1 overflow-y-auto\"><!></main></div> <!>`,1);function Mu(e,t){O(t,!0);let n=N(!1);da(()=>(X.start(),()=>X.stop()));var r=ju(),i=I(r),a=F(i);Ua(a,{onFaq:()=>P(n,!0)});var o=L(a,2),s=F(o),c=e=>{lu(e,{})},l=e=>{Eu(e,{})};q(s,e=>{X.view===`overview`?e(c):e(l,-1)}),E(o),E(i),Au(L(i,2),{get open(){return H(n)},set open(e){P(n,e,!0)}}),G(e,r),k()}var Nu=document.getElementById(`app`);if(!Nu)throw Error(`missing #app mount node`);si(Mu,{target:Nu});</script>\n <style rel=\"stylesheet\" crossorigin>/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-black:#000;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}html,body{height:100%}body{background:radial-gradient(1200px 800px at 14% 16%, #2c5db81f, transparent 60%), var(--background);color:var(--foreground);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:999px}::-webkit-scrollbar-track{background:0 0}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\\/2{top:50%}.left-1\\/2{left:50%}.z-50{z-index:50}.my-1{margin-block:var(--spacing)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3\\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\\[116px\\]{width:116px;height:116px}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\\[85vh\\]{max-height:85vh}.max-h-\\[190px\\]{max-height:190px}.max-h-\\[260px\\]{max-height:260px}.min-h-0{min-height:0}.w-9{width:calc(var(--spacing) * 9)}.w-\\[64px\\]{width:64px}.w-\\[248px\\]{width:248px}.w-\\[min\\(440px\\,92vw\\)\\]{width:min(440px,92vw)}.w-\\[min\\(640px\\,92vw\\)\\]{width:min(640px,92vw)}.w-full{width:100%}.w-screen{width:100vw}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-\\[120px\\]{max-width:120px}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border,.border-border\\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.bg-\\[var\\(--c-fable\\)\\],.bg-\\[var\\(--c-fable\\)\\]\\/12{background-color:var(--c-fable)}@supports (color:color-mix(in lab, red, red)){.bg-\\[var\\(--c-fable\\)\\]\\/12{background-color:color-mix(in oklab, var(--c-fable) 12%, transparent)}}.bg-\\[var\\(--money\\)\\]{background-color:var(--money)}.bg-accent{background-color:var(--accent)}.bg-black\\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\\/50{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/50{background-color:color-mix(in oklab, var(--card) 50%, transparent)}}.bg-card\\/55{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/55{background-color:color-mix(in oklab, var(--card) 55%, transparent)}}.bg-card\\/60{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/60{background-color:color-mix(in oklab, var(--card) 60%, transparent)}}.bg-card\\/70{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\\/70{background-color:color-mix(in oklab, var(--card) 70%, transparent)}}.bg-destructive,.bg-destructive\\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/15{background-color:color-mix(in oklab, var(--destructive) 15%, transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground,.bg-muted-foreground\\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.bg-primary\\/90{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/90{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent,.bg-sidebar-accent\\/40{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.bg-sidebar-accent\\/40{background-color:color-mix(in oklab, var(--sidebar-accent) 40%, transparent)}}.bg-sidebar-border{background-color:var(--sidebar-border)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\\[0\\.1em\\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\\[0\\.12em\\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\\[0\\.14em\\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\\[0\\.18em\\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-all{word-break:break-all}.text-\\[var\\(--c-fable\\)\\]{color:var(--c-fable)}.text-\\[var\\(--money\\)\\]{color:var(--money)}.text-accent-foreground{color:var(--accent-foreground)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-foreground,.text-foreground\\/70{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/70{color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab, var(--foreground) 80%, transparent)}}.text-muted-foreground,.text-muted-foreground\\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/60{color:color-mix(in oklab, var(--muted-foreground) 60%, transparent)}}.text-muted-foreground\\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/80{color:color-mix(in oklab, var(--muted-foreground) 80%, transparent)}}.text-primary-foreground{color:var(--primary-foreground)}.text-sidebar-accent-foreground{color:var(--sidebar-accent-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\\/60{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\\/60{color:color-mix(in oklab, var(--sidebar-foreground) 60%, transparent)}}.text-sidebar-foreground\\/75{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\\/75{color:color-mix(in oklab, var(--sidebar-foreground) 75%, transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.hover\\:bg-accent:hover{background-color:var(--accent)}.hover\\:bg-card\\/80:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-card\\/80:hover{background-color:color-mix(in oklab, var(--card) 80%, transparent)}}.hover\\:bg-card\\/85:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-card\\/85:hover{background-color:color-mix(in oklab, var(--card) 85%, transparent)}}.hover\\:bg-sidebar-accent\\/50:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-sidebar-accent\\/50:hover{background-color:color-mix(in oklab, var(--sidebar-accent) 50%, transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-sidebar-foreground:hover{color:var(--sidebar-foreground)}}.focus\\:border-ring:focus{border-color:var(--ring)}@media (hover:hover){.enabled\\:hover\\:text-foreground:enabled:hover{color:var(--foreground)}}.disabled\\:opacity-40:disabled{opacity:.4}@media (width>=40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=48rem){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.lg\\:absolute{position:absolute}.lg\\:inset-0{inset:0}.lg\\:col-span-3{grid-column:span 3/span 3}.lg\\:col-start-1{grid-column-start:1}.lg\\:col-start-2{grid-column-start:2}.lg\\:col-start-3{grid-column-start:3}.lg\\:row-span-3{grid-row:span 3/span 3}.lg\\:row-start-1{grid-row-start:1}.lg\\:row-start-2{grid-row-start:2}.lg\\:row-start-3{grid-row-start:3}.lg\\:row-start-4{grid-row-start:4}.lg\\:row-start-5{grid-row-start:5}.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (width>=96rem){.\\32 xl\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@property --tw-animation-delay{syntax:\"*\";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:\"*\";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:\"*\";inherits:false}@property --tw-animation-fill-mode{syntax:\"*\";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:\"*\";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:\"*\";inherits:false;initial-value:0}:root{--radius:.75rem;--background:#04081a;--foreground:#ecf2fb;--card:#0a1733;--card-foreground:#ecf2fb;--popover:#0a1733;--popover-foreground:#ecf2fb;--primary:#2c5db8;--primary-foreground:#f4f7fc;--secondary:#122549;--secondary-foreground:#d7e6f7;--muted:#102146;--muted-foreground:#8ba0c2;--accent:#1b3a78;--accent-foreground:#ecf2fb;--destructive:#ff5d5d;--destructive-foreground:#fff5f5;--border:#9bc2ef24;--input:#9bc2ef2e;--ring:#5c8fe6;--sidebar:#081226;--sidebar-foreground:#d7e6f7;--sidebar-primary:#2c5db8;--sidebar-primary-foreground:#f4f7fc;--sidebar-accent:#122549;--sidebar-accent-foreground:#ecf2fb;--sidebar-border:#9bc2ef1f;--sidebar-ring:#5c8fe6;--c-fable:#2ee08f;--c-opus:#ff6338;--c-sonnet:#ffb938;--c-haiku:#7438ff;--c-unknown:#12cbf5;--money:#4ade9b;--font-sans:\"Geist\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif;--font-serif:\"Instrument Serif\", \"Times New Roman\", serif;--font-mono:\"Geist Mono\", ui-monospace, \"SF Mono\", Menlo, Consolas, monospace}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:\"*\";inherits:false}@keyframes pulse{50%{opacity:.5}}\n/*$vite$:1*/</style>\n </head>\n <body>\n <div id=\"app\"></div>\n </body>\n</html>\n","<svg width=\"107\" height=\"107\" viewBox=\"0 0 107 107\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect x=\"0.5\" y=\"0.5\" width=\"106\" height=\"106\" rx=\"7.5\" fill=\"url(#paint0_radial_21_11)\"/>\n<rect x=\"0.5\" y=\"0.5\" width=\"106\" height=\"106\" rx=\"7.5\" stroke=\"url(#paint1_linear_21_11)\"/>\n<path d=\"M26.408 72.558C25.5813 72.558 24.6513 72.4753 23.618 72.31C22.626 72.1447 21.6753 71.938 20.766 71.69C19.898 71.442 19.216 71.1733 18.72 70.884C18.4307 70.7187 18.2033 70.5533 18.038 70.388C17.914 70.1813 17.852 69.8507 17.852 69.396L17.542 59.662C17.542 58.8353 17.8107 58.422 18.348 58.422C18.8027 58.422 19.1127 58.794 19.278 59.538L19.836 61.894C21.2413 67.8047 23.866 70.76 27.71 70.76C29.7767 70.76 31.4093 70.078 32.608 68.714C33.848 67.3087 34.468 65.3453 34.468 62.824C34.468 60.3853 33.8273 58.112 32.546 56.004C31.306 53.896 29.3013 51.8087 26.532 49.742C23.4733 47.5513 21.2413 45.4433 19.836 43.418C18.4307 41.3513 17.728 39.1607 17.728 36.846C17.728 33.7873 18.782 31.3487 20.89 29.53C23.0393 27.67 25.7673 26.74 29.074 26.74C30.314 26.74 31.5127 26.8847 32.67 27.174C33.8273 27.4633 34.778 27.8767 35.522 28.414C35.77 28.5793 35.956 28.7653 36.08 28.972C36.2453 29.1787 36.328 29.4473 36.328 29.778L36.514 39.14C36.514 39.8427 36.2453 40.194 35.708 40.194C35.336 40.194 35.0673 39.9047 34.902 39.326L34.468 37.776C33.5587 34.5933 32.608 32.2787 31.616 30.832C30.6653 29.344 29.2807 28.6 27.462 28.6C25.6847 28.6 24.2587 29.1787 23.184 30.336C22.1507 31.4933 21.634 33.126 21.634 35.234C21.634 37.0113 22.2127 38.706 23.37 40.318C24.5273 41.93 26.5527 43.8933 29.446 46.208C32.546 48.7293 34.7987 51.168 36.204 53.524C37.6507 55.8387 38.374 58.3187 38.374 60.964C38.374 63.2787 37.8573 65.304 36.824 67.04C35.7907 68.776 34.3647 70.14 32.546 71.132C30.7687 72.0827 28.7227 72.558 26.408 72.558ZM44.1831 84.71C43.0671 84.71 42.1784 84.3173 41.5171 83.532C40.8558 82.788 40.5251 81.92 40.5251 80.928C40.5251 80.1427 40.7524 79.4813 41.2071 78.944C41.6618 78.4067 42.2818 78.138 43.0671 78.138C43.7284 78.138 44.2038 78.2827 44.4931 78.572C44.7824 78.8613 44.9891 79.192 45.1131 79.564C45.2371 79.936 45.3611 80.2667 45.4851 80.556C45.6091 80.8453 45.8571 80.99 46.2291 80.99C46.6838 80.99 47.0971 80.6593 47.4691 79.998C47.8411 79.378 48.3578 78.0347 49.0191 75.968C49.4324 74.728 49.6804 73.6533 49.7631 72.744C49.8871 71.8347 49.8664 70.8633 49.7011 69.83C49.5771 68.7967 49.2671 67.536 48.7711 66.048L42.0131 44.534C41.7238 43.542 41.4344 42.9013 41.1451 42.612C40.8971 42.3227 40.4838 42.116 39.9051 41.992L38.9751 41.806C38.4378 41.682 38.1691 41.4133 38.1691 41C38.1691 40.5867 38.4584 40.38 39.0371 40.38H49.2671C49.8458 40.38 50.1351 40.5867 50.1351 41C50.1351 41.4547 49.8664 41.7233 49.3291 41.806L48.3371 41.93C47.3451 42.054 46.7044 42.302 46.4151 42.674C46.1671 43.0047 46.1878 43.6247 46.4771 44.534L51.9331 62.7C52.0571 63.1133 52.2431 63.32 52.4911 63.32C52.7804 63.32 52.9871 63.1133 53.1111 62.7L58.3811 45.65C58.7118 44.534 58.7944 43.7073 58.6291 43.17C58.5051 42.5913 57.9264 42.2193 56.8931 42.054L55.5911 41.806C55.0538 41.682 54.7851 41.4133 54.7851 41C54.7851 40.5867 55.0744 40.38 55.6531 40.38H63.5271C64.1058 40.38 64.3951 40.6073 64.3951 41.062C64.3951 41.4753 64.1471 41.7647 63.6511 41.93L63.0931 42.116C62.4731 42.3227 61.9564 42.6947 61.5431 43.232C61.1298 43.7693 60.6958 44.6993 60.2411 46.022L51.0031 74.852C50.0938 77.7453 49.2671 79.8947 48.5231 81.3C47.8204 82.7053 47.1384 83.6147 46.4771 84.028C45.8158 84.4827 45.0511 84.71 44.1831 84.71ZM64.9342 72C64.3142 72 64.0042 71.7727 64.0042 71.318C64.0042 70.946 64.2729 70.698 64.8102 70.574L65.5542 70.45C66.4222 70.2847 66.9802 70.0367 67.2282 69.706C67.5176 69.334 67.6622 68.714 67.6622 67.846V47.014C67.6622 46.27 67.5382 45.774 67.2902 45.526C67.0836 45.2367 66.6909 45.0507 66.1122 44.968L64.8102 44.782C64.2729 44.7407 64.0042 44.5133 64.0042 44.1C64.0042 43.7693 64.3349 43.542 64.9962 43.418C66.2776 43.2113 67.2489 42.8807 67.9102 42.426C68.6129 41.9713 69.3362 41.4133 70.0802 40.752C70.4522 40.38 70.7622 40.194 71.0102 40.194C71.3822 40.194 71.5682 40.442 71.5682 40.938V43.728C71.5682 44.1 71.6922 44.348 71.9402 44.472C72.2296 44.5547 72.5396 44.4307 72.8702 44.1C74.5236 42.5293 75.9702 41.4547 77.2102 40.876C78.4916 40.2973 79.8349 40.008 81.2402 40.008C83.1002 40.008 84.5882 40.6693 85.7042 41.992C86.8202 43.2733 87.3782 45.1747 87.3782 47.696V67.846C87.3782 68.714 87.5022 69.334 87.7502 69.706C88.0396 70.0367 88.6182 70.264 89.4862 70.388L90.8502 70.574C91.3049 70.6567 91.5322 70.9047 91.5322 71.318C91.5322 71.7727 91.2842 72 90.7882 72H80.3722C79.7936 72 79.5042 71.7727 79.5042 71.318C79.5042 70.9047 79.7316 70.6567 80.1862 70.574L81.0542 70.45C81.9222 70.326 82.4802 70.078 82.7282 69.706C83.0176 69.334 83.1622 68.714 83.1622 67.846V48.378C83.1622 46.3527 82.7902 44.9267 82.0462 44.1C81.3022 43.2733 80.2482 42.86 78.8842 42.86C77.5616 42.86 76.3629 43.2527 75.2882 44.038C74.2549 44.782 73.4282 45.7947 72.8082 47.076C72.1882 48.316 71.8782 49.7007 71.8782 51.23V67.846C71.8782 68.714 72.0022 69.334 72.2502 69.706C72.5396 70.078 73.1182 70.3053 73.9862 70.388L75.6602 70.574C76.1149 70.6567 76.3422 70.884 76.3422 71.256C76.3422 71.752 76.0322 72 75.4122 72H64.9342Z\" fill=\"white\"/>\n<defs>\n<radialGradient id=\"paint0_radial_21_11\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(14 16) rotate(43.5498) scale(167.638 156.2)\">\n<stop stop-color=\"#2C5DB8\"/>\n<stop offset=\"1\" stop-color=\"#04081A\"/>\n</radialGradient>\n<linearGradient id=\"paint1_linear_21_11\" x1=\"1.77511\" y1=\"1.50277e-06\" x2=\"105.225\" y2=\"107\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#5C8FE6\"/>\n<stop offset=\"1\" stop-color=\"#335080\"/>\n</linearGradient>\n</defs>\n</svg>\n"],"mappings":"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","names":["readFile","readFile","dirname","readFile","join","mkdir","readFile","writeFile","homedir","basename","dirname","join","readFile","basename"]}