{"version":3,"sources":["../src/devtools-ui.ts"],"sourcesContent":["import type { FarmDevtoolsDiagnostic, FarmDevtoolsRuntime, FarmDevtoolsSnapshot } from \"./devtools\";\n\ntype IconName =\n  | \"activity\"\n  | \"api\"\n  | \"app\"\n  | \"blocks\"\n  | \"book\"\n  | \"clock\"\n  | \"chevron\"\n  | \"close\"\n  | \"copy\"\n  | \"database\"\n  | \"external\"\n  | \"layers\"\n  | \"overview\"\n  | \"refresh\"\n  | \"route\"\n  | \"runtime\"\n  | \"search\"\n  | \"shield\"\n  | \"terminal\";\n\nconst ICON_PATHS: Record<IconName, string> = {\n  activity: '<path d=\"M22 12h-4l-3 9L9 3l-3 9H2\"/>',\n  api: '<path d=\"M8 3H7a2 2 0 0 0-2 2v4a2 2 0 0 1-2 2 2 2 0 0 1 2 2v4a2 2 0 0 0 2 2h1\"/><path d=\"M16 3h1a2 2 0 0 1 2 2v4a2 2 0 0 0 2 2 2 2 0 0 0-2 2v4a2 2 0 0 1-2 2h-1\"/>',\n  app: '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  blocks:\n    '<rect width=\"7\" height=\"7\" x=\"3\" y=\"3\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"3\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"14\"/><rect width=\"7\" height=\"7\" x=\"3\" y=\"14\"/>',\n  book: '<path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"/><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"/>',\n  clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 2\"/>',\n  chevron: '<path d=\"m9 18 6-6-6-6\"/>',\n  close: '<path d=\"M18 6 6 18M6 6l12 12\"/>',\n  copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n  database:\n    '<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"/><path d=\"M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5\"/><path d=\"M3 12c0 1.7 4 3 9 3s9-1.3 9-3\"/>',\n  external:\n    '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  layers:\n    '<path d=\"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"/><path d=\"m22 12.5-9.17 4.17a2 2 0 0 1-1.66 0L2 12.5\"/><path d=\"m22 17.5-9.17 4.17a2 2 0 0 1-1.66 0L2 17.5\"/>',\n  overview:\n    '<rect width=\"7\" height=\"9\" x=\"3\" y=\"3\"/><rect width=\"7\" height=\"5\" x=\"14\" y=\"3\"/><rect width=\"7\" height=\"9\" x=\"14\" y=\"12\"/><rect width=\"7\" height=\"5\" x=\"3\" y=\"16\"/>',\n  refresh:\n    '<path d=\"M20 11a8.1 8.1 0 0 0-15.5-2M4 4v5h5\"/><path d=\"M4 13a8.1 8.1 0 0 0 15.5 2M20 20v-5h-5\"/>',\n  route:\n    '<circle cx=\"6\" cy=\"19\" r=\"3\"/><path d=\"M9 19h5.5a3.5 3.5 0 0 0 0-7h-5a3.5 3.5 0 0 1 0-7H18\"/><circle cx=\"18\" cy=\"5\" r=\"3\"/>',\n  runtime:\n    '<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\"/><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"/><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"/>',\n  search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n  shield: '<path d=\"M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3z\"/><path d=\"m9 12 2 2 4-4\"/>',\n  terminal: '<polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"/>',\n};\n\nfunction icon(name: IconName, className = \"\"): string {\n  return `<svg class=\"icon ${className}\" data-lucide=\"${name}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${ICON_PATHS[name]}</svg>`;\n}\n\nfunction escapeHtml(value: unknown): string {\n  return String(value ?? \"\")\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nfunction escapeAttribute(value: unknown): string {\n  return escapeHtml(value).replace(/`/g, \"&#96;\");\n}\n\nfunction renderBadge(value: string, tone = \"neutral\"): string {\n  return `<span class=\"badge badge-${tone}\">${escapeHtml(value)}</span>`;\n}\n\nfunction renderRuntime(runtime: FarmDevtoolsRuntime | undefined): string {\n  if (!runtime) return '<span class=\"muted\">Inherited</span>';\n  const details = [\n    runtime.regions?.length ? runtime.regions.join(\", \") : null,\n    runtime.maxDuration ? `${runtime.maxDuration}s` : null,\n  ].filter(Boolean);\n  return `<span class=\"runtime-value\">${renderBadge(runtime.runtime, runtime.runtime)}${\n    details.length ? `<small>${escapeHtml(details.join(\" / \"))}</small>` : \"\"\n  }</span>`;\n}\n\nfunction renderEmpty(title: string, detail: string): string {\n  return `<div class=\"empty-state\">\n    ${icon(\"activity\")}\n    <strong>${escapeHtml(title)}</strong>\n    <span>${escapeHtml(detail)}</span>\n  </div>`;\n}\n\nfunction renderFilter(id: string, placeholder: string): string {\n  return `<label class=\"filter-control\">\n    ${icon(\"search\")}\n    <span class=\"sr-only\">${escapeHtml(placeholder)}</span>\n    <input type=\"search\" placeholder=\"${escapeAttribute(placeholder)}\" data-filter=\"${escapeAttribute(id)}\" autocomplete=\"off\">\n    <kbd>/</kbd>\n  </label>`;\n}\n\nfunction renderDiagnostics(diagnostics: FarmDevtoolsDiagnostic[]): string {\n  if (diagnostics.length === 0) {\n    return `<div class=\"diagnostic diagnostic-ready\">\n      <span class=\"diagnostic-mark\">${icon(\"shield\")}</span>\n      <div><strong>Framework checks passed</strong><p>Routes and configured systems are internally consistent.</p></div>\n      ${renderBadge(\"ready\", \"ready\")}\n    </div>`;\n  }\n\n  return diagnostics\n    .map(\n      (diagnostic) => `<article class=\"diagnostic diagnostic-${diagnostic.severity}\">\n        <span class=\"diagnostic-mark\">${icon(\n          diagnostic.severity === \"error\" ? \"activity\" : \"shield\",\n        )}</span>\n        <div>\n          <span class=\"diagnostic-code\">${escapeHtml(diagnostic.code)}</span>\n          <strong>${escapeHtml(diagnostic.title)}</strong>\n          <p>${escapeHtml(diagnostic.message)}</p>\n          ${diagnostic.action ? `<small>${escapeHtml(diagnostic.action)}</small>` : \"\"}\n        </div>\n        ${renderBadge(diagnostic.severity, diagnostic.severity)}\n      </article>`,\n    )\n    .join(\"\");\n}\n\nfunction renderSystemRows(snapshot: FarmDevtoolsSnapshot): string {\n  const rows = [\n    [\"Integrations\", snapshot.counts.integrations, \"Configured product adapters\", \"blocks\"],\n    [\"Storage\", snapshot.counts.storageMounts, \"Root driver and named mounts\", \"database\"],\n    [\"Cron\", snapshot.counts.cronJobs, \"Portable scheduled API routes\", \"clock\"],\n    [\"Workflows\", snapshot.counts.workflows, \"Discovered workflow modules\", \"activity\"],\n    [\"Docs\", snapshot.docs.enabled ? \"On\" : \"Off\", snapshot.docs.entry || \"No docs route\", \"book\"],\n  ] as const;\n\n  return rows\n    .map(\n      ([label, value, detail, rowIcon]) => `<div class=\"system-row\">\n        <span class=\"system-icon\">${icon(rowIcon)}</span>\n        <div><strong>${escapeHtml(label)}</strong><small>${escapeHtml(detail)}</small></div>\n        <span class=\"system-value\">${escapeHtml(value)}</span>\n      </div>`,\n    )\n    .join(\"\");\n}\n\nfunction renderIntegrations(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.integrations.length === 0) {\n    return renderEmpty(\n      \"No integrations configured\",\n      \"Register product systems through farm.config.ts when the app needs them.\",\n    );\n  }\n\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Registry key</th><th>Adapter</th><th>Routes</th><th>Runtime surface</th></tr></thead>\n    <tbody>${snapshot.integrations\n      .map(\n        (integration) => `<tr>\n          <td><code>${escapeHtml(integration.key)}</code><small class=\"cell-detail\">${escapeHtml(\n            integration.category,\n          )}</small></td>\n          <td>${escapeHtml(integration.type)}</td>\n          <td>${\n            integration.routes.length\n              ? integration.routes\n                  .map(\n                    (route) =>\n                      `<span class=\"route-operation\"><code>${escapeHtml(\n                        route.path,\n                      )}</code><small>${escapeHtml(route.methods.join(\", \"))}</small></span>`,\n                  )\n                  .join(\"\")\n              : '<span class=\"muted\">No HTTP routes</span>'\n          }</td>\n          <td><span class=\"runtime-facts\">${renderBadge(\n            integration.serverRuntime ? \"server\" : \"platform\",\n          )}<span>${integration.middlewareCount} middleware</span><span>${\n            integration.providerCount\n          } providers</span><span>${integration.schemaModelCount} models</span></span></td>\n        </tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderMiddleware(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.middleware.length === 0) {\n    return renderEmpty(\"No middleware configured\", \"Requests currently enter routes directly.\");\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Path</th><th>Source</th><th>Handlers</th><th>File</th></tr></thead>\n    <tbody>${snapshot.middleware\n      .map(\n        (entry) =>\n          `<tr><td><code>${escapeHtml(entry.path)}</code></td><td>${renderBadge(\n            entry.source,\n          )}</td><td>${entry.handlerCount}</td><td class=\"file-cell\">${escapeHtml(\n            entry.filePath,\n          )}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderStorage(snapshot: FarmDevtoolsSnapshot): string {\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Mount</th><th>Driver</th><th>State</th></tr></thead>\n    <tbody>${snapshot.storage\n      .map(\n        (entry) =>\n          `<tr><td><code>${escapeHtml(entry.mount)}</code></td><td>${escapeHtml(\n            entry.driver,\n          )}</td><td>${renderBadge(entry.default ? \"default\" : \"configured\")}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderCron(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.cron.length === 0) {\n    return renderEmpty(\n      \"No cron routes configured\",\n      \"Add named schedules under cron in farm.config.ts.\",\n    );\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Name</th><th>Schedule (UTC)</th><th>Target</th></tr></thead>\n    <tbody>${snapshot.cron\n      .map(\n        (job) =>\n          `<tr><td><code>${escapeHtml(job.name)}</code></td><td>${job.schedule\n            .map((schedule) => `<code class=\"schedule\">${escapeHtml(schedule)}</code>`)\n            .join(\"\")}</td><td><code>${escapeHtml(job.path)}</code></td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderWorkflows(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.workflows.length === 0) {\n    return renderEmpty(\n      \"No workflows discovered\",\n      \"Workflow directories are enabled but currently empty.\",\n    );\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Workflow</th><th>Schedule</th><th>Endpoint</th><th>Source</th></tr></thead>\n    <tbody>${snapshot.workflows\n      .map(\n        (workflow) =>\n          `<tr><td><code>${escapeHtml(workflow.id)}</code></td><td>${\n            workflow.schedule.length\n              ? workflow.schedule.map((schedule) => `<code>${escapeHtml(schedule)}</code>`).join(\"\")\n              : '<span class=\"muted\">Manual</span>'\n          }</td><td><code>${escapeHtml(workflow.routePath)}</code></td><td class=\"file-cell\">${escapeHtml(\n            workflow.filePath,\n          )}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderFeatureMatrix(snapshot: FarmDevtoolsSnapshot): string {\n  const features = [\n    [\"OpenAPI\", snapshot.features.openapi],\n    [\"Markdown\", snapshot.features.markdown],\n    [\"Server components\", snapshot.features.serverComponents],\n    [\"Server actions\", snapshot.features.serverActions],\n    [\"Optimized boundary\", snapshot.features.optimizedBoundary],\n    [\"Observability\", snapshot.features.observability],\n  ] as const;\n  return `<div class=\"feature-matrix\">${features\n    .map(\n      ([label, enabled]) =>\n        `<div><span>${escapeHtml(label)}</span>${renderBadge(\n          enabled ? \"enabled\" : \"disabled\",\n          enabled ? \"ready\" : \"neutral\",\n        )}</div>`,\n    )\n    .join(\"\")}</div>`;\n}\n\nfunction renderEnvironment(snapshot: FarmDevtoolsSnapshot): string {\n  const renderKeys = (keys: string[]) =>\n    keys.length\n      ? `<div class=\"key-list\">${keys.map((key) => `<code>${escapeHtml(key)}</code>`).join(\"\")}</div>`\n      : '<span class=\"muted\">No validated keys</span>';\n  return `<div class=\"environment-grid\">\n    <div><span class=\"mini-label\">Server keys</span>${renderKeys(snapshot.environment.server)}</div>\n    <div><span class=\"mini-label\">Public keys</span>${renderKeys(snapshot.environment.public)}</div>\n  </div>`;\n}\n\nfunction renderLayers(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.layers.length === 0) {\n    return renderEmpty(\n      \"No layers extended\",\n      \"This project owns its complete route and config surface.\",\n    );\n  }\n  return `<div class=\"layer-list\">${snapshot.layers\n    .map(\n      (layer) =>\n        `<div><span>${icon(\"layers\")}<strong>${escapeHtml(\n          layer.name,\n        )}</strong></span><code>${escapeHtml(layer.source)}</code><small>${escapeHtml(\n          layer.srcDir,\n        )}</small></div>`,\n    )\n    .join(\"\")}</div>`;\n}\n\ntype InspectorEntry = {\n  id: string;\n  label: string;\n  description: string;\n  value?: string | number;\n  searchValue?: string;\n  detailMeta?: string;\n  content: string;\n};\n\nfunction renderPropertyList(entries: Array<[label: string, value: string]>): string {\n  return `<dl class=\"property-list\">${entries\n    .map(([label, value]) => `<div><dt>${escapeHtml(label)}</dt><dd>${value}</dd></div>`)\n    .join(\"\")}</dl>`;\n}\n\nfunction renderDetailIntro(\n  label: string,\n  title: string,\n  description: string,\n  detailIcon: IconName,\n): string {\n  return `<div class=\"detail-intro\">\n    <span class=\"detail-icon\">${icon(detailIcon)}</span>\n    <div><span class=\"mini-label\">${escapeHtml(label)}</span><h2>${escapeHtml(\n      title,\n    )}</h2><p>${escapeHtml(description)}</p></div>\n  </div>`;\n}\n\nfunction renderInspector(\n  scope: string,\n  title: string,\n  entries: InspectorEntry[],\n  filterPlaceholder?: string,\n): string {\n  if (entries.length === 0) {\n    return `<div class=\"single-pane\">\n      <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>0 items</span></header>\n      ${renderEmpty(`No ${title.toLowerCase()} found`, \"Farm has no runtime data for this surface yet.\")}\n    </div>`;\n  }\n\n  return `<div class=\"split-view\" data-inspector=\"${escapeAttribute(scope)}\">\n    <section class=\"pane pane-list\">\n      <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>${entries.length} ${\n        entries.length === 1 ? \"item\" : \"items\"\n      }</span></header>\n      ${\n        filterPlaceholder\n          ? `<div class=\"pane-tools\">${renderFilter(scope, filterPlaceholder)}</div>`\n          : \"\"\n      }\n      <div class=\"pane-scroll inspector-list\" data-filter-rows=\"${escapeAttribute(scope)}\">\n        ${entries\n          .map(\n            (\n              entry,\n              index,\n            ) => `<button type=\"button\" class=\"inspector-row\" data-detail-trigger=\"${escapeAttribute(\n              scope,\n            )}\" data-detail-id=\"${escapeAttribute(entry.id)}\" data-search-value=\"${escapeAttribute(\n              entry.searchValue || `${entry.label} ${entry.description}`,\n            )}\" aria-selected=\"${index === 0 ? \"true\" : \"false\"}\">\n              <span class=\"inspector-row-copy\"><strong>${escapeHtml(\n                entry.label,\n              )}</strong><small>${escapeHtml(entry.description)}</small></span>\n              ${entry.value === undefined ? \"\" : `<span class=\"inspector-row-value\">${escapeHtml(entry.value)}</span>`}\n            </button>`,\n          )\n          .join(\"\")}\n        <div class=\"filtered-empty\" data-filter-empty=\"${escapeAttribute(\n          scope,\n        )}\" hidden>No items match this filter.</div>\n      </div>\n    </section>\n    <section class=\"pane pane-detail\">\n      ${entries\n        .map(\n          (entry, index) => `<article class=\"detail-panel\" data-detail-panel=\"${escapeAttribute(\n            scope,\n          )}\" data-detail-id=\"${escapeAttribute(entry.id)}\"${index === 0 ? \"\" : \" hidden\"}>\n            <header class=\"pane-header\"><strong>${escapeHtml(entry.label)}</strong><span>${escapeHtml(\n              entry.detailMeta || entry.description,\n            )}</span></header>\n            <div class=\"detail-scroll\">${entry.content}</div>\n          </article>`,\n        )\n        .join(\"\")}\n    </section>\n  </div>`;\n}\n\nfunction renderJson(value: unknown): string {\n  return `<pre class=\"json-viewer\"><code>${escapeHtml(JSON.stringify(value, null, 2))}</code></pre>`;\n}\n\nfunction renderOverviewInspector(\n  snapshot: FarmDevtoolsSnapshot,\n  healthLabel: string,\n  generatedTime: string,\n): string {\n  const scheduledCount = snapshot.counts.cronJobs + snapshot.counts.workflows;\n  return renderInspector(\"overview\", \"Project\", [\n    {\n      id: \"diagnostics\",\n      label: \"Diagnostics\",\n      description: \"Actionable framework checks\",\n      value: snapshot.counts.diagnostics,\n      detailMeta: healthLabel,\n      content: `${renderDetailIntro(\n        \"Project health\",\n        healthLabel,\n        snapshot.diagnostics.length\n          ? \"Farm found configuration details that deserve attention before production.\"\n          : \"Routes and configured systems are internally consistent.\",\n        \"shield\",\n      )}<div class=\"detail-section\">${renderDiagnostics(snapshot.diagnostics)}</div>`,\n    },\n    {\n      id: \"project\",\n      label: snapshot.project.name,\n      description: snapshot.project.root,\n      value: snapshot.project.srcDir,\n      detailMeta: \"Active project\",\n      content: `${renderDetailIntro(\n        \"Active project\",\n        snapshot.project.name,\n        \"The application currently resolved by the Farm development server.\",\n        \"app\",\n      )}${renderPropertyList([\n        [\"Root\", `<code>${escapeHtml(snapshot.project.root)}</code>`],\n        [\"Source directory\", `<code>${escapeHtml(snapshot.project.srcDir)}</code>`],\n        [\"Base path\", `<code>${escapeHtml(snapshot.project.basePath)}</code>`],\n        [\"Deployment ID\", `<code>${escapeHtml(snapshot.project.deploymentId)}</code>`],\n        [\"Snapshot\", `<span class=\"mono\">${escapeHtml(generatedTime)}</span>`],\n      ])}`,\n    },\n    {\n      id: \"routes\",\n      label: \"Route surface\",\n      description: \"Pages, boundaries, and typed endpoints\",\n      value: snapshot.counts.pages + snapshot.counts.apiRoutes,\n      detailMeta: `${snapshot.counts.pages} pages / ${snapshot.counts.apiRoutes} API`,\n      content: `${renderDetailIntro(\n        \"Application routing\",\n        `${snapshot.counts.pages + snapshot.counts.apiRoutes} registered routes`,\n        \"Farm resolves page boundaries and server endpoints from the same application tree.\",\n        \"route\",\n      )}${renderPropertyList([\n        [\"Pages\", `<strong>${snapshot.counts.pages}</strong>`],\n        [\"Layouts\", `<strong>${snapshot.counts.layouts}</strong>`],\n        [\"Loading boundaries\", `<strong>${snapshot.counts.loadingBoundaries}</strong>`],\n        [\"Error boundaries\", `<strong>${snapshot.counts.errorBoundaries}</strong>`],\n        [\"API routes\", `<strong>${snapshot.counts.apiRoutes}</strong>`],\n      ])}`,\n    },\n    {\n      id: \"systems\",\n      label: \"Connected systems\",\n      description: \"Integrations, storage, and request layers\",\n      value: snapshot.counts.integrations,\n      detailMeta: \"Configured surfaces\",\n      content: `${renderDetailIntro(\n        \"System map\",\n        \"Application services\",\n        \"Product integrations and framework services visible to the running application.\",\n        \"blocks\",\n      )}<div class=\"detail-section\">${renderSystemRows(snapshot)}</div>`,\n    },\n    {\n      id: \"deployment\",\n      label: \"Runtime\",\n      description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n      value: scheduledCount,\n      detailMeta: \"Deployment controls\",\n      content: `${renderDetailIntro(\n        \"Deployment runtime\",\n        snapshot.deployment.target,\n        \"The resolved deployment adapter, output contract, and enabled framework surfaces.\",\n        \"runtime\",\n      )}${renderPropertyList([\n        [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n        [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n        [\n          \"Output\",\n          `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n        ],\n        [\"Scheduled work\", `<strong>${scheduledCount}</strong>`],\n      ])}<div class=\"detail-section\">${renderFeatureMatrix(snapshot)}</div>`,\n    },\n  ]);\n}\n\nfunction renderRoutesInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\n    \"routes\",\n    \"Routes\",\n    snapshot.routes.map((route, index) => ({\n      id: `route-${index}`,\n      label: route.pattern,\n      description: route.filePath,\n      value: route.kind,\n      searchValue: `${route.kind} ${route.pattern} ${route.filePath} ${\n        route.runtime?.runtime || \"inherited\"\n      }`,\n      detailMeta: route.kind,\n      content: `${renderDetailIntro(\n        `${route.kind} route`,\n        route.pattern,\n        route.filePath,\n        \"route\",\n      )}${renderPropertyList([\n        [\"Kind\", renderBadge(route.kind, route.kind)],\n        [\"Pattern\", `<code>${escapeHtml(route.pattern)}</code>`],\n        [\"Runtime\", renderRuntime(route.runtime)],\n        [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n      ])}`,\n    })),\n    \"Filter routes or files\",\n  );\n}\n\nfunction renderApiInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\n    \"api\",\n    \"API routes\",\n    snapshot.apiRoutes.map((route, index) => ({\n      id: `api-${index}`,\n      label: route.path,\n      description: route.filePath,\n      value: route.methods.length,\n      searchValue: `${route.path} ${route.methods.join(\" \")} ${route.filePath} ${\n        route.runtime.runtime\n      }`,\n      detailMeta: route.methods.join(\" / \"),\n      content: `${renderDetailIntro(\n        \"Server endpoint\",\n        route.path,\n        route.filePath,\n        \"api\",\n      )}${renderPropertyList([\n        [\n          \"Methods\",\n          `<span class=\"method-list\">${route.methods\n            .map((method) => renderBadge(method, \"method\"))\n            .join(\"\")}</span>`,\n        ],\n        [\"Runtime\", renderRuntime(route.runtime)],\n        [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n      ])}`,\n    })),\n    \"Filter endpoints or methods\",\n  );\n}\n\nfunction renderSystemsInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"systems\", \"Systems\", [\n    {\n      id: \"integrations\",\n      label: \"Integrations\",\n      description: \"Configured product adapters\",\n      value: snapshot.integrations.length,\n      content: renderIntegrations(snapshot),\n    },\n    {\n      id: \"middleware\",\n      label: \"Middleware\",\n      description: \"Request layers and source modules\",\n      value: snapshot.middleware.length,\n      content: renderMiddleware(snapshot),\n    },\n    {\n      id: \"storage\",\n      label: \"Storage mounts\",\n      description: \"Root driver and named namespaces\",\n      value: snapshot.storage.length,\n      content: renderStorage(snapshot),\n    },\n    {\n      id: \"docs\",\n      label: \"Documentation\",\n      description: snapshot.docs.entry || \"No docs route\",\n      value: snapshot.docs.enabled ? \"on\" : \"off\",\n      content: `${renderDetailIntro(\n        \"Documentation\",\n        snapshot.docs.enabled ? \"Docs enabled\" : \"Docs disabled\",\n        \"Farm can serve application documentation from the same development runtime.\",\n        \"book\",\n      )}${renderPropertyList([\n        [\"State\", renderBadge(snapshot.docs.enabled ? \"enabled\" : \"disabled\")],\n        [\"Entry\", `<code>${escapeHtml(snapshot.docs.entry || \"Not configured\")}</code>`],\n      ])}`,\n    },\n  ]);\n}\n\nfunction renderRuntimeInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"runtime\", \"Runtime\", [\n    {\n      id: \"deployment\",\n      label: \"Deployment\",\n      description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n      content: `${renderDetailIntro(\n        \"Deployment target\",\n        snapshot.deployment.target,\n        \"Resolved platform adapter and build output for this application.\",\n        \"runtime\",\n      )}${renderPropertyList([\n        [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n        [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n        [\n          \"Output directory\",\n          `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n        ],\n      ])}`,\n    },\n    {\n      id: \"cron\",\n      label: \"Cron routes\",\n      description: \"Portable scheduled API routes\",\n      value: snapshot.cron.length,\n      content: renderCron(snapshot),\n    },\n    {\n      id: \"workflows\",\n      label: \"Workflows\",\n      description: \"Discovered workflow modules\",\n      value: snapshot.workflows.length,\n      content: renderWorkflows(snapshot),\n    },\n    {\n      id: \"features\",\n      label: \"Framework features\",\n      description: \"Resolved configuration switches\",\n      content: renderFeatureMatrix(snapshot),\n    },\n    {\n      id: \"environment\",\n      label: \"Environment\",\n      description: \"Validated key names only\",\n      value: snapshot.environment.server.length + snapshot.environment.public.length,\n      content: renderEnvironment(snapshot),\n    },\n    {\n      id: \"layers\",\n      label: \"Layers\",\n      description: \"Extended source roots\",\n      value: snapshot.layers.length,\n      content: renderLayers(snapshot),\n    },\n  ]);\n}\n\nfunction renderRawInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"raw\", \"Raw snapshot\", [\n    {\n      id: \"snapshot\",\n      label: \"Snapshot\",\n      description: \"Complete serialized runtime state\",\n      content: renderJson(snapshot),\n    },\n    {\n      id: \"routes\",\n      label: \"Routes\",\n      description: \"Pages and route boundaries\",\n      value: snapshot.routes.length,\n      content: renderJson(snapshot.routes),\n    },\n    {\n      id: \"api\",\n      label: \"API\",\n      description: \"Typed server endpoints\",\n      value: snapshot.apiRoutes.length,\n      content: renderJson(snapshot.apiRoutes),\n    },\n    {\n      id: \"systems\",\n      label: \"Systems\",\n      description: \"Integrations, middleware, and storage\",\n      content: renderJson({\n        integrations: snapshot.integrations,\n        middleware: snapshot.middleware,\n        storage: snapshot.storage,\n      }),\n    },\n    {\n      id: \"diagnostics\",\n      label: \"Diagnostics\",\n      description: \"Framework health findings\",\n      value: snapshot.diagnostics.length,\n      content: renderJson(snapshot.diagnostics),\n    },\n  ]);\n}\n\nfunction renderNavigationItem(view: string, label: string): string {\n  return `<button type=\"button\" class=\"nav-item\" data-view-trigger=\"${view}\" aria-selected=\"false\">\n    <span>${escapeHtml(label)}</span>\n  </button>`;\n}\n\nexport function renderFarmDevtoolsHtml(snapshot: FarmDevtoolsSnapshot): string {\n  const healthLabel =\n    snapshot.health === \"ready\" ? \"Ready\" : snapshot.health === \"error\" ? \"Error\" : \"Attention\";\n  const generatedTime = new Date(snapshot.generatedAt).toLocaleTimeString(\"en-US\", {\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    second: \"2-digit\",\n    hour12: false,\n  });\n\n  return `<!doctype html>\n<html lang=\"en\" class=\"devtools-frame\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"color-scheme\" content=\"dark\">\n  <title>Farm Devtools - ${escapeHtml(snapshot.project.name)}</title>\n  <style>\n    :root {\n      color-scheme: dark;\n      --background: #000;\n      --surface: #050505;\n      --surface-raised: #090909;\n      --foreground: #f5f5f5;\n      --muted: #858585;\n      --muted-strong: #a8a8a8;\n      --line: rgb(255 255 255 / 0.12);\n      --line-soft: rgb(255 255 255 / 0.065);\n      --line-strong: rgb(255 255 255 / 0.22);\n      --font-sans: \"Geist Sans\", Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n      --font-mono: \"Geist Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    }\n    * { box-sizing: border-box; }\n    html { min-width: 320px; min-height: 100%; background: var(--background); }\n    body { min-height: 100vh; min-height: 100dvh; margin: 0; overflow: hidden; background: #030303; color: var(--foreground); font-family: var(--font-sans); font-size: 14px; letter-spacing: 0; text-rendering: optimizeLegibility; }\n    button, input { color: inherit; font: inherit; letter-spacing: 0; }\n    button, a { -webkit-tap-highlight-color: transparent; }\n    button { cursor: pointer; }\n    a { color: inherit; }\n    [hidden] { display: none !important; }\n    code, kbd, .badge, .mono, .mini-label, .metric-label, .metric-detail, .section-index, .diagnostic-code, th, .statusbar, .eyebrow { font-family: var(--font-mono); letter-spacing: 0; }\n    .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }\n    .icon { width: 16px; height: 16px; flex: 0 0 auto; }\n    .stage { display: grid; min-height: 100vh; min-height: 100dvh; place-items: center; padding: 20px; }\n    .shell { display: flex; width: min(1280px, 100%); height: min(780px, calc(100dvh - 40px)); min-height: 560px; min-width: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--line-strong); background: var(--background); box-shadow: 0 24px 80px rgb(0 0 0 / 0.72); }\n    .topbar { z-index: 30; display: flex; min-height: 42px; flex: 0 0 auto; align-items: stretch; border-bottom: 1px solid var(--line); background: var(--background); }\n    .brand { display: flex; min-width: 170px; align-items: center; gap: 8px; padding: 0 12px; border-right: 1px solid var(--line); text-decoration: none; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }\n    .brand-mark { display: grid; width: 18px; height: 18px; place-items: center; border: 1px solid var(--line-strong); color: #fff; font-family: var(--font-sans); font-size: 9px; font-weight: 650; }\n    .brand-slash { color: #555; }\n    .brand-product { color: var(--muted-strong); }\n    .tabbar { display: flex; min-width: 0; flex: 1 1 auto; align-items: stretch; overflow-x: auto; scrollbar-width: none; }\n    .tabbar::-webkit-scrollbar { display: none; }\n    .nav-item { position: relative; display: flex; min-width: max-content; min-height: 41px; align-items: center; gap: 7px; padding: 0 11px; border: 0; background: transparent; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; transition: background-color 140ms ease-out, color 140ms ease-out; }\n    .nav-item::after { position: absolute; right: 10px; bottom: -1px; left: 10px; height: 1px; background: transparent; content: \"\"; }\n    .nav-item:hover, .nav-item:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n    .nav-item[aria-selected=\"true\"] { color: #fff; }\n    .nav-item[aria-selected=\"true\"]::after { background: #fff; }\n    .nav-item .icon { width: 13px; height: 13px; }\n    .nav-item small { color: #666; font-size: 9px; font-weight: 400; }\n    .topbar-meta { display: flex; flex: 0 0 auto; margin-left: auto; border-left: 1px solid var(--line); }\n    .deprecation-tag { display: inline-flex; align-items: center; padding: 0 10px; border-right: 1px solid var(--line); color: #d9a626; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }\n    .topbar-status { display: flex; min-width: max-content; align-items: center; gap: 7px; padding: 0 11px; color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .status-dot { width: 5px; height: 5px; background: #fff; box-shadow: 0 0 0 3px rgb(255 255 255 / 0.06); }\n    .status-dot-attention { background: #909090; animation: status-pulse 1.8s ease-in-out infinite; }\n    .status-dot-error { background: transparent; border: 1px solid #fff; }\n    .workspace { min-height: 0; flex: 1 1 auto; }\n    .eyebrow { display: block; color: var(--muted); font-size: 9px; font-weight: 400; text-transform: uppercase; }\n    .content { height: 100%; min-width: 0; }\n    .view { height: 100%; min-width: 0; overflow: hidden; }\n    .split-view { display: grid; height: 100%; min-height: 0; grid-template-columns: clamp(230px, 28%, 300px) minmax(0, 1fr); }\n    .pane { min-width: 0; min-height: 0; overflow: hidden; background: var(--background); }\n    .pane-list { display: flex; flex-direction: column; border-right: 1px solid var(--line); }\n    .pane-detail { position: relative; }\n    .pane-header { display: flex; min-height: 38px; align-items: center; justify-content: space-between; gap: 12px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--surface); }\n    .pane-header strong { overflow: hidden; font-size: 11px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }\n    .pane-header span { overflow: hidden; color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }\n    .pane-tools { border-bottom: 1px solid var(--line); }\n    .pane-tools .filter-control { width: 100%; min-height: 36px; border: 0; }\n    .pane-scroll, .detail-scroll { min-height: 0; overflow: auto; overscroll-behavior: contain; }\n    .pane-scroll { flex: 1 1 auto; }\n    .inspector-list { scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; }\n    .inspector-row { position: relative; display: grid; width: 100%; min-height: 54px; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 8px 11px; border: 0; border-bottom: 1px solid var(--line-soft); background: transparent; color: var(--muted); text-align: left; transition: background-color 120ms ease-out, color 120ms ease-out; }\n    .inspector-row::before { position: absolute; inset: 0 auto 0 0; width: 1px; background: transparent; content: \"\"; }\n    .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n    .inspector-row[aria-selected=\"true\"] { background: rgb(255 255 255 / 0.075); color: #fff; }\n    .inspector-row[aria-selected=\"true\"]::before { background: #fff; }\n    .inspector-row-copy { min-width: 0; }\n    .inspector-row-copy strong, .inspector-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .inspector-row-copy strong { color: inherit; font-size: 11px; font-weight: 520; }\n    .inspector-row-copy small { margin-top: 3px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .inspector-row-value { color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .detail-panel { display: flex; height: 100%; min-height: 0; flex-direction: column; }\n    .detail-scroll { flex: 1 1 auto; }\n    .detail-intro { display: grid; min-height: 132px; grid-template-columns: 34px minmax(0, 1fr); align-items: start; gap: 14px; padding: 22px; border-bottom: 1px solid var(--line); }\n    .detail-icon { display: grid; width: 32px; height: 32px; border: 1px solid var(--line); color: var(--muted-strong); place-items: center; }\n    .detail-icon .icon { width: 15px; height: 15px; }\n    .detail-intro .mini-label { margin: 1px 0 8px; }\n    .detail-intro h2 { margin: 0; overflow-wrap: anywhere; font-size: 20px; font-weight: 530; line-height: 1.2; }\n    .detail-intro p { max-width: 680px; margin: 8px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }\n    .detail-section { border-top: 1px solid var(--line); }\n    .detail-intro + .detail-section { border-top: 0; }\n    .property-list { margin: 0; }\n    .property-list > div { display: grid; min-height: 48px; grid-template-columns: minmax(120px, 0.32fr) minmax(0, 1fr); align-items: center; gap: 18px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }\n    .property-list dt { color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .property-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; color: var(--muted-strong); font-size: 11px; }\n    .property-list dd > code { color: var(--foreground); font-size: 10px; }\n    .single-pane { height: 100%; min-height: 0; }\n    .json-viewer { min-height: 100%; margin: 0; padding: 16px; overflow: auto; background: #000; color: var(--muted-strong); font-family: var(--font-mono); font-size: 10px; line-height: 1.65; tab-size: 2; white-space: pre-wrap; word-break: break-word; }\n    .diagnostic { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; align-items: start; gap: 12px; min-height: 88px; padding: 16px 18px; border-bottom: 1px solid var(--line-soft); }\n    .diagnostic:last-child { border-bottom: 0; }\n    .diagnostic-mark { display: grid; width: 28px; height: 28px; place-items: center; border: 1px solid var(--line); color: var(--muted-strong); }\n    .diagnostic-code { display: block; margin-bottom: 5px; color: var(--muted); font-size: 9px; }\n    .diagnostic strong { display: block; font-size: 12px; font-weight: 540; }\n    .diagnostic p { margin: 5px 0 0; color: var(--muted-strong); font-size: 11px; line-height: 1.5; }\n    .diagnostic small { display: block; margin-top: 6px; color: var(--muted); font-size: 10px; line-height: 1.5; }\n    .diagnostic-warning { box-shadow: inset 1px 0 var(--line-strong); }\n    .system-row { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; min-height: 64px; align-items: center; gap: 10px; padding: 11px 16px; border-bottom: 1px solid var(--line-soft); }\n    .system-row:last-child { border-bottom: 0; }\n    .system-icon { display: grid; width: 28px; height: 28px; place-items: center; color: var(--muted-strong); }\n    .system-row strong, .system-row small { display: block; }\n    .system-row strong { font-size: 12px; font-weight: 520; }\n    .system-row small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n    .system-value { font-family: var(--font-mono); font-size: 11px; }\n    .filter-control { display: flex; width: min(280px, 34vw); min-height: 34px; align-items: center; gap: 8px; padding: 0 9px; border: 1px solid var(--line); background: #000; color: var(--muted); }\n    .filter-control:focus-within { border-color: var(--line-strong); color: #fff; }\n    .filter-control input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--foreground); font-family: var(--font-mono); font-size: 10px; }\n    .filter-control input::placeholder { color: #666; }\n    .filter-control kbd { padding: 1px 5px; border: 1px solid var(--line); color: var(--muted); font-size: 9px; }\n    .table-scroll { width: 100%; overflow-x: auto; }\n    table { width: 100%; border-collapse: collapse; table-layout: auto; }\n    th { height: 36px; padding: 0 16px; border-bottom: 1px solid var(--line); background: #030303; color: var(--muted); font-size: 9px; font-weight: 400; text-align: left; text-transform: uppercase; white-space: nowrap; }\n    td { min-height: 48px; padding: 12px 16px; border-bottom: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 11px; line-height: 1.55; vertical-align: top; }\n    tr:last-child td { border-bottom: 0; }\n    tbody tr { transition: background-color 120ms ease-out; }\n    tbody tr:hover { background: rgb(255 255 255 / 0.035); }\n    td code { color: var(--foreground); font-size: 10px; white-space: nowrap; }\n    .file-cell { max-width: 420px; overflow: hidden; font-family: var(--font-mono); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n    .badge { display: inline-flex; min-height: 20px; align-items: center; padding: 1px 6px; border: 1px solid var(--line); color: var(--muted-strong); font-size: 9px; font-weight: 400; text-transform: uppercase; white-space: nowrap; }\n    .badge-ready, .badge-page, .badge-node { border-color: var(--line-strong); color: #fff; }\n    .badge-warning, .badge-attention, .badge-edge { border-style: dashed; color: #fff; }\n    .badge-error { background: #fff; color: #000; }\n    .badge-method { min-width: 36px; justify-content: center; border-color: var(--line-soft); color: #d0d0d0; }\n    .method-list, .runtime-value, .runtime-facts { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }\n    .runtime-value small, .runtime-facts span { color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .cell-detail { display: block; margin-top: 4px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .route-operation { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n    .route-operation + .route-operation { margin-top: 5px; }\n    .route-operation small { color: var(--muted); font-family: var(--font-mono); font-size: 9px; white-space: nowrap; }\n    .schedule { display: block; }\n    .schedule + .schedule { margin-top: 4px; }\n    .muted { color: var(--muted); }\n    .empty-state { display: grid; min-height: 156px; place-items: center; align-content: center; gap: 7px; padding: 24px; color: var(--muted); text-align: center; }\n    .empty-state strong { color: var(--muted-strong); font-size: 12px; font-weight: 520; }\n    .empty-state span { max-width: 420px; font-size: 10px; line-height: 1.5; }\n    .filtered-empty { padding: 24px; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-align: center; }\n    .feature-matrix > div { display: flex; min-height: 45px; align-items: center; justify-content: space-between; gap: 16px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }\n    .feature-matrix > div:last-child { border-bottom: 0; }\n    .feature-matrix span:first-child { font-size: 11px; }\n    .environment-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }\n    .environment-grid > div { min-height: 128px; padding: 16px; }\n    .environment-grid > div + div { border-left: 1px solid var(--line); }\n    .mini-label { display: block; margin-bottom: 12px; color: var(--muted); font-size: 9px; text-transform: uppercase; }\n    .key-list { display: flex; flex-wrap: wrap; gap: 6px; }\n    .key-list code { padding: 4px 6px; border: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 9px; }\n    .layer-list > div { display: grid; grid-template-columns: minmax(120px, 0.7fr) minmax(0, 1fr) auto; min-height: 52px; align-items: center; gap: 14px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }\n    .layer-list > div:last-child { border-bottom: 0; }\n    .layer-list span { display: flex; align-items: center; gap: 8px; }\n    .layer-list strong { font-size: 11px; font-weight: 520; }\n    .layer-list code, .layer-list small { color: var(--muted); font-size: 9px; }\n    .statusbar { display: flex; min-height: 29px; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 16px; padding: 0 10px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 9px; text-transform: uppercase; }\n    .statusbar span { display: flex; align-items: center; gap: 7px; }\n    @keyframes status-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n    @media (max-width: 1100px) {\n      .topbar-status { display: none; }\n    }\n    @media (max-width: 840px) {\n      .stage { display: block; padding: 0; }\n      .shell { width: 100%; height: 100dvh; min-height: 0; border: 0; }\n      .topbar { flex-wrap: wrap; }\n      .brand { min-width: auto; height: 40px; border-right: 0; }\n      .brand-product, .brand-slash { display: none; }\n      .tabbar { order: 3; width: 100%; flex-basis: 100%; border-top: 1px solid var(--line); }\n      .topbar-meta { height: 40px; }\n      .nav-item { min-height: 39px; }\n      .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(150px, 34%) minmax(0, 1fr); }\n      .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n      .filter-control { width: 100%; }\n    }\n    @media (max-width: 560px) {\n      .detail-intro { min-height: 112px; padding: 16px; }\n      .detail-intro h2 { font-size: 17px; }\n      .property-list > div { grid-template-columns: minmax(98px, 0.38fr) minmax(0, 1fr); gap: 12px; padding-inline: 12px; }\n      .environment-grid { grid-template-columns: 1fr; }\n      .environment-grid > div + div { border-top: 1px solid var(--line); border-left: 0; }\n      .statusbar span:last-child { display: none; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      html { scroll-behavior: auto; }\n      *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }\n    }\n  </style>\n  <style data-assistant-ui-layout>\n    :root {\n      --background: #0a0a0a;\n      --surface: #0a0a0a;\n      --surface-raised: #111111;\n      --foreground: #ededed;\n      --muted: #929299;\n      --muted-strong: #b4b4ba;\n      --line: rgb(255 255 255 / 0.11);\n      --line-soft: rgb(255 255 255 / 0.075);\n      --line-strong: rgb(255 255 255 / 0.16);\n      --accent: #1c1c1e;\n    }\n    html, body { width: 100%; height: 100%; background: #080808; }\n    body { position: relative; min-height: 100dvh; overflow: hidden; font-size: 13px; }\n    .stage {\n      position: fixed;\n      inset: 0;\n      z-index: 2;\n      display: grid;\n      min-height: 0;\n      padding: 20px;\n      place-items: center;\n      pointer-events: none;\n    }\n    .shell {\n      width: min(960px, 92vw);\n      height: min(560px, 80dvh);\n      min-width: 0;\n      min-height: 0;\n      border: 1px solid var(--line-strong);\n      border-radius: 12px;\n      background: var(--background);\n      box-shadow: 0 24px 80px rgb(0 0 0 / 0.72), 0 4px 18px rgb(0 0 0 / 0.45);\n      pointer-events: auto;\n      animation: devtools-window-in 180ms cubic-bezier(0.175, 0.885, 0.32, 1.08);\n    }\n    .topbar {\n      min-height: 40px;\n      height: 40px;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: nowrap;\n      border-bottom-color: var(--line);\n      background: var(--background);\n    }\n    .brand { display: none; }\n    .tabbar {\n      height: 100%;\n      flex: 1 1 auto;\n      align-items: stretch;\n      order: initial;\n      width: auto;\n      flex-basis: auto;\n      padding-inline-start: 8px;\n      border-top: 0;\n    }\n    .nav-item {\n      min-height: 39px;\n      height: 39px;\n      gap: 0;\n      padding: 0 12px;\n      border-radius: 0;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 13px;\n      font-weight: 500;\n      text-transform: none;\n    }\n    .nav-item::after {\n      right: 8px;\n      bottom: -1px;\n      left: 8px;\n      height: 2px;\n      border-radius: 999px;\n    }\n    .nav-item:hover, .nav-item:focus-visible { background: transparent; color: var(--foreground); }\n    .nav-item[aria-selected=\"true\"] { color: var(--foreground); }\n    .topbar-meta {\n      height: 100%;\n      align-items: center;\n      gap: 8px;\n      margin-left: 0;\n      padding: 0 8px 0 4px;\n      border-left: 0;\n    }\n    .project-select {\n      display: inline-flex;\n      height: 28px;\n      min-width: 0;\n      align-items: center;\n      gap: 5px;\n      padding: 0 9px;\n      border: 1px solid var(--line);\n      border-radius: 8px;\n      color: var(--muted-strong);\n      font-size: 12px;\n      white-space: nowrap;\n    }\n    .project-select .icon { width: 12px; height: 12px; transform: rotate(90deg); }\n    .topbar-status {\n      min-width: max-content;\n      gap: 6px;\n      padding: 0;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 11px;\n      text-transform: none;\n    }\n    .status-dot {\n      width: 6px;\n      height: 6px;\n      border: 0;\n      border-radius: 999px;\n      background: #2dd4bf;\n      box-shadow: none;\n    }\n    .status-dot-attention { background: #f59e0b; animation: none; }\n    .status-dot-error { background: #ef4444; }\n    .close-action {\n      display: inline-flex;\n      width: 28px;\n      height: 28px;\n      flex: 0 0 auto;\n      align-items: center;\n      justify-content: center;\n      padding: 0;\n      border: 0;\n      border-radius: 6px;\n      background: transparent;\n      color: var(--muted);\n      text-decoration: none;\n      transition: background-color 120ms ease-out, color 120ms ease-out;\n    }\n    .close-action:hover, .close-action:focus-visible { background: var(--accent); color: var(--foreground); outline: none; }\n    .close-action .icon { width: 14px; height: 14px; }\n    .workspace, .content, .view { min-height: 0; }\n    .split-view {\n      grid-template-columns: clamp(14rem, 28%, 18rem) minmax(0, 1fr);\n      grid-template-rows: minmax(0, 1fr);\n    }\n    .pane { background: var(--background); }\n    .pane-list { border-right: 1px solid var(--line); border-bottom: 0; }\n    .pane-header {\n      min-height: 32px;\n      height: 32px;\n      max-height: 32px;\n      flex: 0 0 32px;\n      padding: 0 12px;\n      border-bottom-color: var(--line);\n      background: var(--background);\n    }\n    .pane-header strong {\n      color: var(--muted);\n      font-size: 11px;\n      font-weight: 400;\n      line-height: 1;\n    }\n    .pane-header span {\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 10px;\n      line-height: 1;\n    }\n    .pane-tools { border-bottom-color: var(--line); }\n    .pane-tools .filter-control { min-height: 32px; height: 32px; }\n    .filter-control {\n      min-height: 32px;\n      gap: 7px;\n      padding: 0 10px;\n      border-color: var(--line);\n      border-radius: 0;\n      background: var(--background);\n    }\n    .filter-control .icon { width: 13px; height: 13px; }\n    .filter-control input { font-family: var(--font-sans); font-size: 11px; }\n    .filter-control input::placeholder { color: var(--muted); }\n    .filter-control kbd {\n      padding: 1px 5px;\n      border-color: var(--line);\n      border-radius: 4px;\n      color: var(--muted);\n      font-size: 9px;\n    }\n    .inspector-row {\n      min-height: 44px;\n      grid-template-columns: minmax(0, 1fr) auto;\n      gap: 8px;\n      padding: 6px 11px 6px 12px;\n      border: 0;\n      border-left: 2px solid transparent;\n      border-radius: 0;\n      color: var(--muted-strong);\n    }\n    .inspector-row::before { display: none; }\n    .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); }\n    .inspector-row[aria-selected=\"true\"] {\n      border-left-color: var(--foreground);\n      background: var(--accent);\n      color: var(--foreground);\n    }\n    .inspector-row-copy strong { font-size: 12px; font-weight: 500; }\n    .inspector-row-copy small {\n      margin-top: 2px;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 10px;\n    }\n    .inspector-row-value {\n      padding: 2px 6px;\n      border: 1px solid var(--line);\n      border-radius: 999px;\n      background: rgb(255 255 255 / 0.035);\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 9px;\n      line-height: 1.2;\n      text-transform: none;\n    }\n    .detail-intro {\n      display: block;\n      min-height: 0;\n      padding: 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .detail-icon { display: none; }\n    .detail-intro .mini-label { margin: 0 0 8px; }\n    .detail-intro h2 { font-size: 13px; font-weight: 500; line-height: 1.3; }\n    .detail-intro p { margin-top: 6px; font-size: 11px; line-height: 1.5; }\n    .detail-section, .detail-intro + .detail-section { border-top-color: var(--line); }\n    .property-list > div {\n      min-height: 36px;\n      grid-template-columns: minmax(96px, 0.28fr) minmax(0, 1fr);\n      gap: 14px;\n      padding: 7px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .property-list dt { font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n    .property-list dd { color: var(--foreground); font-size: 11px; }\n    .property-list dd > code { font-size: 10px; }\n    .json-viewer {\n      padding: 12px;\n      background: var(--background);\n      color: var(--muted-strong);\n      font-size: 10px;\n      line-height: 1.55;\n    }\n    .diagnostic {\n      min-height: 68px;\n      grid-template-columns: 24px minmax(0, 1fr) auto;\n      gap: 10px;\n      padding: 11px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .diagnostic-mark { width: 22px; height: 22px; border: 0; }\n    .diagnostic-mark .icon { width: 13px; height: 13px; }\n    .diagnostic-code { margin-bottom: 3px; font-size: 9px; }\n    .diagnostic strong { font-size: 11px; font-weight: 500; }\n    .diagnostic p { margin-top: 3px; font-size: 10px; line-height: 1.45; }\n    .diagnostic small { margin-top: 4px; font-size: 9px; }\n    .diagnostic-warning { box-shadow: none; }\n    .system-row {\n      min-height: 48px;\n      grid-template-columns: 24px minmax(0, 1fr) auto;\n      gap: 8px;\n      padding: 8px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .system-icon { width: 20px; height: 20px; }\n    .system-icon .icon { width: 13px; height: 13px; }\n    .system-row strong { font-size: 11px; font-weight: 500; }\n    .system-row small { margin-top: 2px; font-size: 10px; }\n    .system-value { color: var(--muted); font-size: 10px; }\n    table { font-size: 11px; }\n    th {\n      height: 32px;\n      padding: 0 12px;\n      background: var(--background);\n      font-family: var(--font-sans);\n      font-size: 10px;\n      font-weight: 400;\n      text-transform: none;\n    }\n    td { min-height: 40px; padding: 9px 12px; font-size: 10px; }\n    td code, .file-cell { font-size: 9px; }\n    .badge {\n      min-height: 18px;\n      padding: 1px 6px;\n      border-radius: 999px;\n      background: rgb(255 255 255 / 0.04);\n      font-family: var(--font-sans);\n      font-size: 9px;\n      text-transform: none;\n    }\n    .badge-error { background: var(--foreground); color: var(--background); }\n    .badge-warning, .badge-attention, .badge-edge { border-style: solid; }\n    .empty-state { min-height: 100%; padding: 24px; gap: 6px; }\n    .empty-state .icon { display: none; }\n    .empty-state strong { font-size: 12px; font-weight: 400; }\n    .empty-state span { font-size: 11px; }\n    .feature-matrix > div { min-height: 36px; padding: 7px 12px; border-bottom-color: var(--line-soft); }\n    .feature-matrix span:first-child { font-size: 11px; }\n    .environment-grid > div { min-height: 104px; padding: 12px; }\n    .mini-label { margin-bottom: 8px; font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n    .key-list code { border-radius: 4px; font-size: 9px; }\n    .layer-list > div { min-height: 44px; padding: 8px 12px; border-bottom-color: var(--line-soft); }\n    .layer-list strong { font-size: 11px; font-weight: 500; }\n    .statusbar { display: none; }\n    html.devtools-frame .stage { position: static; width: 100%; height: 100%; min-height: 100%; padding: 0; }\n    html.devtools-frame .shell { width: 100%; height: 100%; border-radius: 12px; box-shadow: none; animation: none; }\n    @keyframes devtools-window-in {\n      from { opacity: 0; transform: scale(0.985) translateY(4px); }\n      to { opacity: 1; transform: scale(1) translateY(0); }\n    }\n    @media (max-width: 700px) {\n      .stage { display: grid; padding: 0; }\n      .shell {\n        width: 100%;\n        height: 100%;\n        min-height: 0;\n        border: 1px solid var(--line-strong);\n        border-radius: 10px;\n      }\n      .topbar { flex-wrap: nowrap; }\n      .tabbar {\n        order: initial;\n        width: auto;\n        flex-basis: auto;\n        border-top: 0;\n        padding-inline-start: 4px;\n      }\n      .topbar-meta { height: 40px; }\n      .nav-item { min-height: 39px; height: 39px; padding-inline: 9px; }\n      .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(148px, 36%) minmax(0, 1fr); }\n      .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n    }\n    @media (max-width: 560px) {\n      .project-select { display: none; }\n      .topbar-status { display: none; }\n      .topbar-meta { gap: 4px; padding-left: 0; }\n      .status-label { display: none; }\n      .detail-intro { min-height: 0; padding: 12px; }\n      .detail-intro h2 { font-size: 13px; }\n      .property-list > div { grid-template-columns: minmax(82px, 0.34fr) minmax(0, 1fr); gap: 10px; padding-inline: 10px; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .shell { animation: none; }\n    }\n  </style>\n</head>\n<body>\n  <div class=\"stage\">\n    <div class=\"shell\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Farm.js DevTools\">\n      <header class=\"topbar\">\n        <nav class=\"tabbar\" aria-label=\"Devtools views\">\n          ${renderNavigationItem(\"overview\", \"Overview\")}\n          ${renderNavigationItem(\"routes\", \"Routes\")}\n          ${renderNavigationItem(\"api\", \"API\")}\n          ${renderNavigationItem(\"systems\", \"Systems\")}\n          ${renderNavigationItem(\"runtime\", \"Runtime\")}\n          ${renderNavigationItem(\"raw\", \"Raw\")}\n        </nav>\n        <div class=\"topbar-meta\">\n          <span class=\"deprecation-tag\" title=\"The built-in dashboard is deprecated. Install @farm.js/devtools for the maintained workspace.\">Deprecated &middot; use @farm.js/devtools</span>\n          <span class=\"project-select\">${escapeHtml(snapshot.project.name)} ${icon(\n            \"chevron\",\n          )}</span>\n          <span class=\"topbar-status\"><span class=\"status-dot\"></span><span class=\"status-label\">1 instance</span></span>\n          <button class=\"close-action\" type=\"button\" data-close-devtools aria-label=\"Close DevTools\" title=\"Close DevTools\">${icon(\n            \"close\",\n          )}</button>\n        </div>\n      </header>\n      <div class=\"workspace\">\n        <main class=\"content\">\n          <section class=\"view\" data-view-panel=\"overview\">${renderOverviewInspector(\n            snapshot,\n            healthLabel,\n            generatedTime,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"routes\" hidden>${renderRoutesInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"api\" hidden>${renderApiInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"systems\" hidden>${renderSystemsInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"runtime\" hidden>${renderRuntimeInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"raw\" hidden>${renderRawInspector(snapshot)}</section>\n        </main>\n      </div>\n    </div>\n  </div>\n  <script>\n    (() => {\n      const embedded = window.parent !== window;\n      const closeDevtools = () => {\n        if (embedded && window.parent !== window) {\n          window.parent.postMessage({ type: \"farm:devtools:close\" }, location.origin);\n          return;\n        }\n        location.assign(\"/\");\n      };\n      document.querySelector(\"[data-close-devtools]\")?.addEventListener(\"click\", closeDevtools);\n      document.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Escape\") {\n          event.preventDefault();\n          closeDevtools();\n          return;\n        }\n        if (embedded && window.parent !== window) {\n          window.parent.postMessage(\n            {\n              type: \"farm:devtools:keydown\",\n              event: {\n                key: event.key,\n                code: event.code,\n                altKey: event.altKey,\n                ctrlKey: event.ctrlKey,\n                metaKey: event.metaKey,\n                shiftKey: event.shiftKey,\n                repeat: event.repeat,\n              },\n            },\n            location.origin,\n          );\n        }\n      });\n\n      const validViews = new Set([\"overview\", \"routes\", \"api\", \"systems\", \"runtime\", \"raw\"]);\n      const triggers = Array.from(document.querySelectorAll(\"[data-view-trigger]\"));\n      const panels = Array.from(document.querySelectorAll(\"[data-view-panel]\"));\n      const selectView = (view, updateHash = true) => {\n        const nextView = validViews.has(view) ? view : \"overview\";\n        triggers.forEach((trigger) => {\n          trigger.setAttribute(\"aria-selected\", String(trigger.dataset.viewTrigger === nextView));\n        });\n        panels.forEach((panel) => {\n          panel.hidden = panel.dataset.viewPanel !== nextView;\n        });\n        if (updateHash) {\n          history.replaceState(null, \"\", nextView === \"overview\" ? location.pathname : \"#\" + nextView);\n          const activePanel = panels.find((panel) => panel.dataset.viewPanel === nextView);\n          if (activePanel) activePanel.scrollTop = 0;\n        }\n      };\n      triggers.forEach((trigger) => trigger.addEventListener(\"click\", () => selectView(trigger.dataset.viewTrigger)));\n      window.addEventListener(\"hashchange\", () => selectView(location.hash.slice(1), false));\n      selectView(location.hash.slice(1), false);\n\n      document.querySelectorAll(\"[data-detail-trigger]\").forEach((trigger) => {\n        trigger.addEventListener(\"click\", () => {\n          const scope = trigger.dataset.detailTrigger;\n          const id = trigger.dataset.detailId;\n          document.querySelectorAll('[data-detail-trigger=\"' + scope + '\"]').forEach((row) => {\n            row.setAttribute(\"aria-selected\", String(row.dataset.detailId === id));\n          });\n          document.querySelectorAll('[data-detail-panel=\"' + scope + '\"]').forEach((panel) => {\n            panel.hidden = panel.dataset.detailId !== id;\n          });\n        });\n      });\n\n      document.querySelectorAll(\"[data-filter]\").forEach((input) => {\n        input.addEventListener(\"input\", () => {\n          const id = input.dataset.filter;\n          const query = input.value.trim().toLowerCase();\n          const rows = Array.from(document.querySelectorAll('[data-filter-rows=\"' + id + '\"] [data-search-value]'));\n          let visible = 0;\n          rows.forEach((row) => {\n            const matches = !query || (row.dataset.searchValue || \"\").toLowerCase().includes(query);\n            row.hidden = !matches;\n            if (matches) visible += 1;\n          });\n          const selected = rows.find((row) => row.getAttribute(\"aria-selected\") === \"true\");\n          if (selected?.hidden) rows.find((row) => !row.hidden)?.click();\n          const empty = document.querySelector('[data-filter-empty=\"' + id + '\"]');\n          if (empty) empty.hidden = visible !== 0;\n        });\n      });\n\n      document.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"/\" || event.metaKey || event.ctrlKey || event.altKey) return;\n        const active = document.activeElement;\n        if (active && (active.tagName === \"INPUT\" || active.tagName === \"TEXTAREA\")) return;\n        const panel = document.querySelector(\"[data-view-panel]:not([hidden])\");\n        const input = panel?.querySelector(\"[data-filter]\");\n        if (input) {\n          event.preventDefault();\n          input.focus();\n        }\n      });\n\n    })();\n  </script>\n</body>\n</html>`;\n}\n"],"mappings":";;;;;AAuBA,IAAM,aAAuC;AAAA,EAC3C,UAAU;AAAA,EACV,KAAK;AAAA,EACL,KAAK;AAAA,EACL,QACE;AAAA,EACF,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UACE;AAAA,EACF,UACE;AAAA,EACF,QACE;AAAA,EACF,UACE;AAAA,EACF,SACE;AAAA,EACF,OACE;AAAA,EACF,SACE;AAAA,EACF,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;AAEA,SAAS,KAAK,MAAgB,YAAY,IAAY;AACpD,SAAO,oBAAoB,SAAS,kBAAkB,IAAI,gJAAgJ,WAAW,IAAI,CAAC;AAC5N;AAFS;AAIT,SAAS,WAAW,OAAwB;AAC1C,SAAO,OAAO,SAAS,EAAE,EACtB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO;AAC1B;AAPS;AAST,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,WAAW,KAAK,EAAE,QAAQ,MAAM,OAAO;AAChD;AAFS;AAIT,SAAS,YAAY,OAAe,OAAO,WAAmB;AAC5D,SAAO,4BAA4B,IAAI,KAAK,WAAW,KAAK,CAAC;AAC/D;AAFS;AAIT,SAAS,cAAc,SAAkD;AACvE,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU;AAAA,IACd,QAAQ,SAAS,SAAS,QAAQ,QAAQ,KAAK,IAAI,IAAI;AAAA,IACvD,QAAQ,cAAc,GAAG,QAAQ,WAAW,MAAM;AAAA,EACpD,EAAE,OAAO,OAAO;AAChB,SAAO,+BAA+B,YAAY,QAAQ,SAAS,QAAQ,OAAO,CAAC,GACjF,QAAQ,SAAS,UAAU,WAAW,QAAQ,KAAK,KAAK,CAAC,CAAC,aAAa,EACzE;AACF;AATS;AAWT,SAAS,YAAY,OAAe,QAAwB;AAC1D,SAAO;AAAA,MACH,KAAK,UAAU,CAAC;AAAA,cACR,WAAW,KAAK,CAAC;AAAA,YACnB,WAAW,MAAM,CAAC;AAAA;AAE9B;AANS;AAQT,SAAS,aAAa,IAAY,aAA6B;AAC7D,SAAO;AAAA,MACH,KAAK,QAAQ,CAAC;AAAA,4BACQ,WAAW,WAAW,CAAC;AAAA,wCACX,gBAAgB,WAAW,CAAC,kBAAkB,gBAAgB,EAAE,CAAC;AAAA;AAAA;AAGzG;AAPS;AAST,SAAS,kBAAkB,aAA+C;AACxE,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,sCAC2B,KAAK,QAAQ,CAAC;AAAA;AAAA,QAE5C,YAAY,SAAS,OAAO,CAAC;AAAA;AAAA,EAEnC;AAEA,SAAO,YACJ;AAAA,IACC,CAAC,eAAe,yCAAyC,WAAW,QAAQ;AAAA,wCAC1C;AAAA,MAC9B,WAAW,aAAa,UAAU,aAAa;AAAA,IACjD,CAAC;AAAA;AAAA,0CAEiC,WAAW,WAAW,IAAI,CAAC;AAAA,oBACjD,WAAW,WAAW,KAAK,CAAC;AAAA,eACjC,WAAW,WAAW,OAAO,CAAC;AAAA,YACjC,WAAW,SAAS,UAAU,WAAW,WAAW,MAAM,CAAC,aAAa,EAAE;AAAA;AAAA,UAE5E,YAAY,WAAW,UAAU,WAAW,QAAQ,CAAC;AAAA;AAAA,EAE3D,EACC,KAAK,EAAE;AACZ;AAzBS;AA2BT,SAAS,iBAAiB,UAAwC;AAChE,QAAM,OAAO;AAAA,IACX,CAAC,gBAAgB,SAAS,OAAO,cAAc,+BAA+B,QAAQ;AAAA,IACtF,CAAC,WAAW,SAAS,OAAO,eAAe,gCAAgC,UAAU;AAAA,IACrF,CAAC,QAAQ,SAAS,OAAO,UAAU,iCAAiC,OAAO;AAAA,IAC3E,CAAC,aAAa,SAAS,OAAO,WAAW,+BAA+B,UAAU;AAAA,IAClF,CAAC,QAAQ,SAAS,KAAK,UAAU,OAAO,OAAO,SAAS,KAAK,SAAS,iBAAiB,MAAM;AAAA,EAC/F;AAEA,SAAO,KACJ;AAAA,IACC,CAAC,CAAC,OAAO,OAAO,QAAQ,OAAO,MAAM;AAAA,oCACP,KAAK,OAAO,CAAC;AAAA,uBAC1B,WAAW,KAAK,CAAC,mBAAmB,WAAW,MAAM,CAAC;AAAA,qCACxC,WAAW,KAAK,CAAC;AAAA;AAAA,EAElD,EACC,KAAK,EAAE;AACZ;AAlBS;AAoBT,SAAS,mBAAmB,UAAwC;AAClE,MAAI,SAAS,aAAa,WAAW,GAAG;AACtC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA;AAAA,aAEI,SAAS,aACf;AAAA,IACC,CAAC,gBAAgB;AAAA,sBACH,WAAW,YAAY,GAAG,CAAC,qCAAqC;AAAA,MAC1E,YAAY;AAAA,IACd,CAAC;AAAA,gBACK,WAAW,YAAY,IAAI,CAAC;AAAA,gBAEhC,YAAY,OAAO,SACf,YAAY,OACT;AAAA,MACC,CAAC,UACC,uCAAuC;AAAA,QACrC,MAAM;AAAA,MACR,CAAC,iBAAiB,WAAW,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC;AAAA,IAC1D,EACC,KAAK,EAAE,IACV,2CACN;AAAA,4CACkC;AAAA,MAChC,YAAY,gBAAgB,WAAW;AAAA,IACzC,CAAC,SAAS,YAAY,eAAe,2BACnC,YAAY,aACd,0BAA0B,YAAY,gBAAgB;AAAA;AAAA,EAE1D,EACC,KAAK,EAAE,CAAC;AAAA;AAEf;AAtCS;AAwCT,SAAS,iBAAiB,UAAwC;AAChE,MAAI,SAAS,WAAW,WAAW,GAAG;AACpC,WAAO,YAAY,4BAA4B,2CAA2C;AAAA,EAC5F;AACA,SAAO;AAAA;AAAA,aAEI,SAAS,WACf;AAAA,IACC,CAAC,UACC,iBAAiB,WAAW,MAAM,IAAI,CAAC,mBAAmB;AAAA,MACxD,MAAM;AAAA,IACR,CAAC,YAAY,MAAM,YAAY,8BAA8B;AAAA,MAC3D,MAAM;AAAA,IACR,CAAC;AAAA,EACL,EACC,KAAK,EAAE,CAAC;AAAA;AAEf;AAjBS;AAmBT,SAAS,cAAc,UAAwC;AAC7D,SAAO;AAAA;AAAA,aAEI,SAAS,QACf;AAAA,IACC,CAAC,UACC,iBAAiB,WAAW,MAAM,KAAK,CAAC,mBAAmB;AAAA,MACzD,MAAM;AAAA,IACR,CAAC,YAAY,YAAY,MAAM,UAAU,YAAY,YAAY,CAAC;AAAA,EACtE,EACC,KAAK,EAAE,CAAC;AAAA;AAEf;AAZS;AAcT,SAAS,WAAW,UAAwC;AAC1D,MAAI,SAAS,KAAK,WAAW,GAAG;AAC9B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA;AAAA,aAEI,SAAS,KACf;AAAA,IACC,CAAC,QACC,iBAAiB,WAAW,IAAI,IAAI,CAAC,mBAAmB,IAAI,SACzD,IAAI,CAAC,aAAa,0BAA0B,WAAW,QAAQ,CAAC,SAAS,EACzE,KAAK,EAAE,CAAC,kBAAkB,WAAW,IAAI,IAAI,CAAC;AAAA,EACrD,EACC,KAAK,EAAE,CAAC;AAAA;AAEf;AAlBS;AAoBT,SAAS,gBAAgB,UAAwC;AAC/D,MAAI,SAAS,UAAU,WAAW,GAAG;AACnC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA;AAAA,aAEI,SAAS,UACf;AAAA,IACC,CAAC,aACC,iBAAiB,WAAW,SAAS,EAAE,CAAC,mBACtC,SAAS,SAAS,SACd,SAAS,SAAS,IAAI,CAAC,aAAa,SAAS,WAAW,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IACnF,mCACN,kBAAkB,WAAW,SAAS,SAAS,CAAC,qCAAqC;AAAA,MACnF,SAAS;AAAA,IACX,CAAC;AAAA,EACL,EACC,KAAK,EAAE,CAAC;AAAA;AAEf;AAtBS;AAwBT,SAAS,oBAAoB,UAAwC;AACnE,QAAM,WAAW;AAAA,IACf,CAAC,WAAW,SAAS,SAAS,OAAO;AAAA,IACrC,CAAC,YAAY,SAAS,SAAS,QAAQ;AAAA,IACvC,CAAC,qBAAqB,SAAS,SAAS,gBAAgB;AAAA,IACxD,CAAC,kBAAkB,SAAS,SAAS,aAAa;AAAA,IAClD,CAAC,sBAAsB,SAAS,SAAS,iBAAiB;AAAA,IAC1D,CAAC,iBAAiB,SAAS,SAAS,aAAa;AAAA,EACnD;AACA,SAAO,+BAA+B,SACnC;AAAA,IACC,CAAC,CAAC,OAAO,OAAO,MACd,cAAc,WAAW,KAAK,CAAC,UAAU;AAAA,MACvC,UAAU,YAAY;AAAA,MACtB,UAAU,UAAU;AAAA,IACtB,CAAC;AAAA,EACL,EACC,KAAK,EAAE,CAAC;AACb;AAlBS;AAoBT,SAAS,kBAAkB,UAAwC;AACjE,QAAM,aAAa,wBAAC,SAClB,KAAK,SACD,yBAAyB,KAAK,IAAI,CAAC,QAAQ,SAAS,WAAW,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,WACtF,gDAHa;AAInB,SAAO;AAAA,sDAC6C,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,sDACvC,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA;AAE7F;AATS;AAWT,SAAS,aAAa,UAAwC;AAC5D,MAAI,SAAS,OAAO,WAAW,GAAG;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,2BAA2B,SAAS,OACxC;AAAA,IACC,CAAC,UACC,cAAc,KAAK,QAAQ,CAAC,WAAW;AAAA,MACrC,MAAM;AAAA,IACR,CAAC,yBAAyB,WAAW,MAAM,MAAM,CAAC,iBAAiB;AAAA,MACjE,MAAM;AAAA,IACR,CAAC;AAAA,EACL,EACC,KAAK,EAAE,CAAC;AACb;AAjBS;AA6BT,SAAS,mBAAmB,SAAwD;AAClF,SAAO,6BAA6B,QACjC,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,YAAY,WAAW,KAAK,CAAC,YAAY,KAAK,aAAa,EACnF,KAAK,EAAE,CAAC;AACb;AAJS;AAMT,SAAS,kBACP,OACA,OACA,aACA,YACQ;AACR,SAAO;AAAA,gCACuB,KAAK,UAAU,CAAC;AAAA,oCACZ,WAAW,KAAK,CAAC,cAAc;AAAA,IAC7D;AAAA,EACF,CAAC,WAAW,WAAW,WAAW,CAAC;AAAA;AAEvC;AAZS;AAcT,SAAS,gBACP,OACA,OACA,SACA,mBACQ;AACR,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,4CACiC,WAAW,KAAK,CAAC;AAAA,QACrD,YAAY,MAAM,MAAM,YAAY,CAAC,UAAU,gDAAgD,CAAC;AAAA;AAAA,EAEtG;AAEA,SAAO,2CAA2C,gBAAgB,KAAK,CAAC;AAAA;AAAA,4CAE9B,WAAW,KAAK,CAAC,kBAAkB,QAAQ,MAAM,IACrF,QAAQ,WAAW,IAAI,SAAS,OAClC;AAAA,QAEE,oBACI,2BAA2B,aAAa,OAAO,iBAAiB,CAAC,WACjE,EACN;AAAA,kEAC4D,gBAAgB,KAAK,CAAC;AAAA,UAC9E,QACC;AAAA,IACC,CACE,OACA,UACG,oEAAoE;AAAA,MACvE;AAAA,IACF,CAAC,qBAAqB,gBAAgB,MAAM,EAAE,CAAC,wBAAwB;AAAA,MACrE,MAAM,eAAe,GAAG,MAAM,KAAK,IAAI,MAAM,WAAW;AAAA,IAC1D,CAAC,oBAAoB,UAAU,IAAI,SAAS,OAAO;AAAA,yDACN;AAAA,MACzC,MAAM;AAAA,IACR,CAAC,mBAAmB,WAAW,MAAM,WAAW,CAAC;AAAA,gBAC/C,MAAM,UAAU,SAAY,KAAK,qCAAqC,WAAW,MAAM,KAAK,CAAC,SAAS;AAAA;AAAA,EAE5G,EACC,KAAK,EAAE,CAAC;AAAA,yDACsC;AAAA,IAC/C;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA,QAID,QACC;AAAA,IACC,CAAC,OAAO,UAAU,oDAAoD;AAAA,MACpE;AAAA,IACF,CAAC,qBAAqB,gBAAgB,MAAM,EAAE,CAAC,IAAI,UAAU,IAAI,KAAK,SAAS;AAAA,kDACvC,WAAW,MAAM,KAAK,CAAC,kBAAkB;AAAA,MAC7E,MAAM,cAAc,MAAM;AAAA,IAC5B,CAAC;AAAA,yCAC4B,MAAM,OAAO;AAAA;AAAA,EAE9C,EACC,KAAK,EAAE,CAAC;AAAA;AAAA;AAGjB;AA7DS;AA+DT,SAAS,WAAW,OAAwB;AAC1C,SAAO,kCAAkC,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC,CAAC;AACrF;AAFS;AAIT,SAAS,wBACP,UACA,aACA,eACQ;AACR,QAAM,iBAAiB,SAAS,OAAO,WAAW,SAAS,OAAO;AAClE,SAAO,gBAAgB,YAAY,WAAW;AAAA,IAC5C;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,OAAO;AAAA,MACvB,YAAY;AAAA,MACZ,SAAS,GAAG;AAAA,QACV;AAAA,QACA;AAAA,QACA,SAAS,YAAY,SACjB,+EACA;AAAA,QACJ;AAAA,MACF,CAAC,+BAA+B,kBAAkB,SAAS,WAAW,CAAC;AAAA,IACzE;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO,SAAS,QAAQ;AAAA,MACxB,aAAa,SAAS,QAAQ;AAAA,MAC9B,OAAO,SAAS,QAAQ;AAAA,MACxB,YAAY;AAAA,MACZ,SAAS,GAAG;AAAA,QACV;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,QAAQ,SAAS,WAAW,SAAS,QAAQ,IAAI,CAAC,SAAS;AAAA,QAC5D,CAAC,oBAAoB,SAAS,WAAW,SAAS,QAAQ,MAAM,CAAC,SAAS;AAAA,QAC1E,CAAC,aAAa,SAAS,WAAW,SAAS,QAAQ,QAAQ,CAAC,SAAS;AAAA,QACrE,CAAC,iBAAiB,SAAS,WAAW,SAAS,QAAQ,YAAY,CAAC,SAAS;AAAA,QAC7E,CAAC,YAAY,sBAAsB,WAAW,aAAa,CAAC,SAAS;AAAA,MACvE,CAAC,CAAC;AAAA,IACJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAO;AAAA,MAC/C,YAAY,GAAG,SAAS,OAAO,KAAK,YAAY,SAAS,OAAO,SAAS;AAAA,MACzE,SAAS,GAAG;AAAA,QACV;AAAA,QACA,GAAG,SAAS,OAAO,QAAQ,SAAS,OAAO,SAAS;AAAA,QACpD;AAAA,QACA;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,SAAS,WAAW,SAAS,OAAO,KAAK,WAAW;AAAA,QACrD,CAAC,WAAW,WAAW,SAAS,OAAO,OAAO,WAAW;AAAA,QACzD,CAAC,sBAAsB,WAAW,SAAS,OAAO,iBAAiB,WAAW;AAAA,QAC9E,CAAC,oBAAoB,WAAW,SAAS,OAAO,eAAe,WAAW;AAAA,QAC1E,CAAC,cAAc,WAAW,SAAS,OAAO,SAAS,WAAW;AAAA,MAChE,CAAC,CAAC;AAAA,IACJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,OAAO;AAAA,MACvB,YAAY;AAAA,MACZ,SAAS,GAAG;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,+BAA+B,iBAAiB,QAAQ,CAAC;AAAA,IAC5D;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,GAAG,SAAS,WAAW,MAAM,MAAM,SAAS,WAAW,MAAM;AAAA,MAC1E,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS,GAAG;AAAA,QACV;AAAA,QACA,SAAS,WAAW;AAAA,QACpB;AAAA,QACA;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,UAAU,SAAS,WAAW,SAAS,WAAW,MAAM,CAAC,SAAS;AAAA,QACnE,CAAC,gBAAgB,SAAS,WAAW,SAAS,WAAW,MAAM,CAAC,SAAS;AAAA,QACzE;AAAA,UACE;AAAA,UACA,SAAS,WAAW,SAAS,WAAW,aAAa,mBAAmB,CAAC;AAAA,QAC3E;AAAA,QACA,CAAC,kBAAkB,WAAW,cAAc,WAAW;AAAA,MACzD,CAAC,CAAC,+BAA+B,oBAAoB,QAAQ,CAAC;AAAA,IAChE;AAAA,EACF,CAAC;AACH;AA/FS;AAiGT,SAAS,sBAAsB,UAAwC;AACrE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,OAAO,IAAI,CAAC,OAAO,WAAW;AAAA,MACrC,IAAI,SAAS,KAAK;AAAA,MAClB,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,aAAa,GAAG,MAAM,IAAI,IAAI,MAAM,OAAO,IAAI,MAAM,QAAQ,IAC3D,MAAM,SAAS,WAAW,WAC5B;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,SAAS,GAAG;AAAA,QACV,GAAG,MAAM,IAAI;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,QAAQ,YAAY,MAAM,MAAM,MAAM,IAAI,CAAC;AAAA,QAC5C,CAAC,WAAW,SAAS,WAAW,MAAM,OAAO,CAAC,SAAS;AAAA,QACvD,CAAC,WAAW,cAAc,MAAM,OAAO,CAAC;AAAA,QACxC,CAAC,UAAU,SAAS,WAAW,MAAM,QAAQ,CAAC,SAAS;AAAA,MACzD,CAAC,CAAC;AAAA,IACJ,EAAE;AAAA,IACF;AAAA,EACF;AACF;AA3BS;AA6BT,SAAS,mBAAmB,UAAwC;AAClE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,UAAU,IAAI,CAAC,OAAO,WAAW;AAAA,MACxC,IAAI,OAAO,KAAK;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM,QAAQ;AAAA,MACrB,aAAa,GAAG,MAAM,IAAI,IAAI,MAAM,QAAQ,KAAK,GAAG,CAAC,IAAI,MAAM,QAAQ,IACrE,MAAM,QAAQ,OAChB;AAAA,MACA,YAAY,MAAM,QAAQ,KAAK,KAAK;AAAA,MACpC,SAAS,GAAG;AAAA,QACV;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB;AAAA,UACE;AAAA,UACA,6BAA6B,MAAM,QAChC,IAAI,CAAC,WAAW,YAAY,QAAQ,QAAQ,CAAC,EAC7C,KAAK,EAAE,CAAC;AAAA,QACb;AAAA,QACA,CAAC,WAAW,cAAc,MAAM,OAAO,CAAC;AAAA,QACxC,CAAC,UAAU,SAAS,WAAW,MAAM,QAAQ,CAAC,SAAS;AAAA,MACzD,CAAC,CAAC;AAAA,IACJ,EAAE;AAAA,IACF;AAAA,EACF;AACF;AA/BS;AAiCT,SAAS,uBAAuB,UAAwC;AACtE,SAAO,gBAAgB,WAAW,WAAW;AAAA,IAC3C;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,aAAa;AAAA,MAC7B,SAAS,mBAAmB,QAAQ;AAAA,IACtC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,WAAW;AAAA,MAC3B,SAAS,iBAAiB,QAAQ;AAAA,IACpC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,QAAQ;AAAA,MACxB,SAAS,cAAc,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,SAAS,KAAK,SAAS;AAAA,MACpC,OAAO,SAAS,KAAK,UAAU,OAAO;AAAA,MACtC,SAAS,GAAG;AAAA,QACV;AAAA,QACA,SAAS,KAAK,UAAU,iBAAiB;AAAA,QACzC;AAAA,QACA;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,SAAS,YAAY,SAAS,KAAK,UAAU,YAAY,UAAU,CAAC;AAAA,QACrE,CAAC,SAAS,SAAS,WAAW,SAAS,KAAK,SAAS,gBAAgB,CAAC,SAAS;AAAA,MACjF,CAAC,CAAC;AAAA,IACJ;AAAA,EACF,CAAC;AACH;AAvCS;AAyCT,SAAS,uBAAuB,UAAwC;AACtE,SAAO,gBAAgB,WAAW,WAAW;AAAA,IAC3C;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,GAAG,SAAS,WAAW,MAAM,MAAM,SAAS,WAAW,MAAM;AAAA,MAC1E,SAAS,GAAG;AAAA,QACV;AAAA,QACA,SAAS,WAAW;AAAA,QACpB;AAAA,QACA;AAAA,MACF,CAAC,GAAG,mBAAmB;AAAA,QACrB,CAAC,UAAU,SAAS,WAAW,SAAS,WAAW,MAAM,CAAC,SAAS;AAAA,QACnE,CAAC,gBAAgB,SAAS,WAAW,SAAS,WAAW,MAAM,CAAC,SAAS;AAAA,QACzE;AAAA,UACE;AAAA,UACA,SAAS,WAAW,SAAS,WAAW,aAAa,mBAAmB,CAAC;AAAA,QAC3E;AAAA,MACF,CAAC,CAAC;AAAA,IACJ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,KAAK;AAAA,MACrB,SAAS,WAAW,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,UAAU;AAAA,MAC1B,SAAS,gBAAgB,QAAQ;AAAA,IACnC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS,oBAAoB,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,YAAY,OAAO,SAAS,SAAS,YAAY,OAAO;AAAA,MACxE,SAAS,kBAAkB,QAAQ;AAAA,IACrC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,OAAO;AAAA,MACvB,SAAS,aAAa,QAAQ;AAAA,IAChC;AAAA,EACF,CAAC;AACH;AAvDS;AAyDT,SAAS,mBAAmB,UAAwC;AAClE,SAAO,gBAAgB,OAAO,gBAAgB;AAAA,IAC5C;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS,WAAW,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,OAAO;AAAA,MACvB,SAAS,WAAW,SAAS,MAAM;AAAA,IACrC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,UAAU;AAAA,MAC1B,SAAS,WAAW,SAAS,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS,WAAW;AAAA,QAClB,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,QACrB,SAAS,SAAS;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,SAAS,YAAY;AAAA,MAC5B,SAAS,WAAW,SAAS,WAAW;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;AAxCS;AA0CT,SAAS,qBAAqB,MAAc,OAAuB;AACjE,SAAO,6DAA6D,IAAI;AAAA,YAC9D,WAAW,KAAK,CAAC;AAAA;AAE7B;AAJS;AAMF,SAAS,uBAAuB,UAAwC;AAC7E,QAAM,cACJ,SAAS,WAAW,UAAU,UAAU,SAAS,WAAW,UAAU,UAAU;AAClF,QAAM,gBAAgB,IAAI,KAAK,SAAS,WAAW,EAAE,mBAAmB,SAAS;AAAA,IAC/E,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAED,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMkB,WAAW,SAAS,QAAQ,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA4hBhD,qBAAqB,YAAY,UAAU,CAAC;AAAA,YAC5C,qBAAqB,UAAU,QAAQ,CAAC;AAAA,YACxC,qBAAqB,OAAO,KAAK,CAAC;AAAA,YAClC,qBAAqB,WAAW,SAAS,CAAC;AAAA,YAC1C,qBAAqB,WAAW,SAAS,CAAC;AAAA,YAC1C,qBAAqB,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,yCAIL,WAAW,SAAS,QAAQ,IAAI,CAAC,IAAI;AAAA,IAClE;AAAA,EACF,CAAC;AAAA;AAAA,8HAEmH;AAAA,IAClH;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6DAKkD;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,kEACuD;AAAA,IACtD;AAAA,EACF,CAAC;AAAA,+DACoD;AAAA,IACnD;AAAA,EACF,CAAC;AAAA,mEACwD;AAAA,IACvD;AAAA,EACF,CAAC;AAAA,mEACwD;AAAA,IACvD;AAAA,EACF,CAAC;AAAA,+DACoD,mBAAmB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6G3F;AA9rBgB;","names":[]}