{"version":3,"sources":["../src/index.ts","../src/types/compare.ts","../src/compare/diff-runs.ts","../src/formatters/run-diff-changelog.ts","../src/formatters/run-diff-html.ts","../src/formatters/report-theme-css.ts","../src/formatters/run-diff-markdown.ts","../src/utils/ci-detect.ts","../src/converters/adapters/jest.ts","../src/converters/adapters/vitest.ts","../src/converters/adapters/playwright.ts","../src/sync/engine.ts","../src/sync/lockfile.ts","../src/sync/report.ts","../src/sync/adapters/case-text.ts","../src/sync/adapters/testrail.ts","../src/sync/adapters/xray.ts","../src/sync/adapters/registry.ts","../src/formatters/cucumber-json.ts","../src/formatters/story-report-json.ts","../src/formatters/scenario-index-json.ts","../src/formatters/agent-text.ts","../src/formatters/behavior-manifest-json.ts","../src/select-test-cases.ts","../src/coverage-index.ts","../src/watch.ts","../src/report-generator.ts","../src/generated/react-assets.ts","../src/formatters/span-graph.ts","../src/formatters/junit-xml.ts","../src/formatters/markdown.ts","../src/formatters/source-order.ts","../src/scenario-failure.ts","../src/formatters/release-manifest.ts","../src/review/build-review.ts","../src/review/diff-anchor.ts","../src/review/conventions.ts","../src/jev.ts","../src/formatters/traceability-matrix.ts","../src/formatters/cucumber-messages/synthesize-feature.ts","../src/formatters/cucumber-messages/build-gherkin-document.ts","../src/utils/cucumber-messages.ts","../src/formatters/cucumber-messages/build-pickles.ts","../src/formatters/cucumber-messages/build-execution.ts","../src/formatters/cucumber-messages/formatter.ts","../src/formatters/cucumber-html.ts","../src/colocated-index.ts","../src/file-reports.ts","../src/formatters/astro.ts","../src/formatters/confluence.ts","../src/formatters/astro-assets.ts","../src/bundler/copy-asset.ts","../src/bundler/bundle-assets.ts","../src/bundler/scan-html-assets.ts","../src/aggregate-reports.ts","../src/runs-lifecycle.ts","../src/behavior-diff.ts","../src/publishers/confluence.ts","../src/publishers/jira.ts","../src/utils/git-info.ts","../src/utils/metadata.ts","../src/notifiers/ansi-strip.ts","../src/notifiers/slack.ts","../src/notifiers/teams.ts","../src/notifiers/hmac.ts","../src/notifiers/webhook.ts","../src/notifiers/send-notifications.ts","../src/history/history-store.ts","../src/history/sample-policy.ts","../src/history/flakiness.ts","../src/history/performance.ts","../src/history/stability.ts","../src/history/metrics.ts","../src/list-scenarios.ts","../src/check.ts","../src/goal.ts","../src/codeowners.ts","../src/triage.ts","../src/compare/pr-summary.ts","../src/review/code-diff-sidecar.ts","../src/formatters/review-markdown.ts","../src/formatters/review-html.ts","../src/deploy/ledger.ts","../src/deploy/deployments.ts"],"sourcesContent":["/**\n * @executable-stories/formatters\n *\n * Cucumber-compatible report formats (JSON, HTML, JUnit, Markdown)\n * for Jest, Vitest, and Playwright test results.\n *\n * Architecture:\n * - Layer 1: Framework Adapters (adaptJestRun, adaptVitestRun, adaptPlaywrightRun)\n * - Layer 2: Anti-Corruption Layer (canonicalizeRun)\n * - Layer 3: Formatters (CucumberJsonFormatter, JUnitFormatter, MarkdownFormatter; the\n *   HTML report renders via executable-stories-react — the `html` format)\n */\n\nimport * as path from \"node:path\";\n\nimport * as fsPromises from \"node:fs/promises\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport type { CanonicalizeOptions } from \"./types/options\";\nimport type { RawRun } from \"executable-stories-core/types/raw\";\n\nimport { canonicalizeRun } from \"executable-stories-core/converters/acl/canonicalize\";\nimport { diffRuns } from \"./compare/diff-runs\";\nimport { RunDiffChangelogFormatter } from \"./formatters/run-diff-changelog\";\nimport { RunDiffHtmlFormatter } from \"./formatters/run-diff-html\";\nimport { RunDiffMarkdownFormatter } from \"./formatters/run-diff-markdown\";\n\n// Import adapters for convenience functions\nimport { adaptJestRun } from \"./converters/adapters/jest\";\nimport { adaptVitestRun } from \"./converters/adapters/vitest\";\nimport { adaptPlaywrightRun } from \"./converters/adapters/playwright\";\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\n// Story types (shared vocabulary for all adapters)\nexport type {\n  StepKeyword,\n  StepMode,\n  DocPhase,\n  DocEntry,\n  StoryStep,\n  StoryMeta,\n  NormalizedTicket,\n} from \"executable-stories-core/types/story\";\nexport { STORY_META_KEY } from \"executable-stories-core/types/story\";\n\n// OTel span types (trace waterfall rendering)\nexport type { OtelSpan, OtelAttributeValue } from \"executable-stories-core/types/otel\";\n\n// Canonical types (Layer 2 output - what formatters accept)\nexport type {\n  TestStatus,\n  StepResult,\n  Attachment,\n  TestCaseResult,\n  TestCaseAttempt,\n  TestCaseEvidence,\n  CIInfo,\n  CoverageSummary,\n  FeatureDeclaration,\n  GlossaryTerm,\n  TestRunResult,\n} from \"executable-stories-core/types/test-result\";\n\n// Raw types (Layer 1 - for adapter authors)\nexport type {\n  RawStatus,\n  RawAttachment,\n  RawStepEvent,\n  RawTestCase,\n  RawCIInfo,\n  RawRun,\n  RawFeature,\n  RawGlossaryTerm,\n} from \"executable-stories-core/types/raw\";\n\n// Cucumber JSON types (Layer 3 output)\nexport type {\n  IJsonTag,\n  IJsonDocString,\n  IJsonTableRow,\n  IJsonDataTable,\n  IJsonStepArgument,\n  IJsonEmbedding,\n  IJsonStepResult,\n  IJsonStep,\n  IJsonScenario,\n  IJsonFeature,\n} from \"./types/cucumber-json\";\n\n// Formatter plugin types\nexport type { Formatter, ExecutableStoriesConfig } from \"./types/formatter\";\n\n// Test-management sync: the port, the engine, and the built-in adapters.\n// The port is a plain object, so a third-party provider is a value someone can\n// construct — no plugin machinery needed if we ever expose it from config.\nexport type {\n  SyncProvider,\n  RemoteCase,\n  CaseBody,\n  CaseResult,\n  ResultAttachment,\n  RecordResultsSummary,\n  AdapterDeps,\n} from \"./sync/port\";\nexport {\n  analyzeSync,\n  applySync,\n  projectBehaviours,\n  toCaseBody,\n  collectAttachments,\n  type SyncAnalysis,\n  type SyncApplyResult,\n  type SyncEngineConfig,\n  type AttachPolicy,\n  type CoverageClass,\n} from \"./sync/engine\";\nexport {\n  renderCoverageText,\n  renderCoverageMarkdown,\n  renderPlan,\n  renderApplyResult,\n  buildCoverageJson,\n  type CoverageJson,\n} from \"./sync/report\";\nexport {\n  buildProvider,\n  isProviderName,\n  PROVIDER_NAMES,\n  type ProviderName,\n  type SyncTargets,\n} from \"./sync/adapters/registry\";\nexport { createTestRailProvider, type TestRailConfig } from \"./sync/adapters/testrail\";\nexport { createXrayProvider, type XrayConfig } from \"./sync/adapters/xray\";\nexport {\n  readLockfile,\n  writeLockfile,\n  parseLockfile,\n  serializeLockfile,\n  emptyLockfile,\n  hashCaseBody,\n  DEFAULT_LOCKFILE_PATH,\n  type Lockfile,\n  type LockEntry,\n} from \"./sync/lockfile\";\n\n// StoryReport public contract (consumed by UI renderers — additive-only within major)\nexport type {\n  StoryReportSchemaVersion,\n  ReportSummary,\n  ReportTicket,\n  ReportAttachment,\n  ReportCIInfo,\n  ReportCoverageSummary,\n  ReportDocEntry,\n  ReportDocNote,\n  ReportDocTag,\n  ReportDocKv,\n  ReportDocCode,\n  ReportDocTable,\n  ReportDocLink,\n  ReportDocSection,\n  ReportDocMermaid,\n  ReportDocScreenshot,\n  ReportDocCustom,\n  ReportStep,\n  ReportScenario,\n  ReportFeature,\n  StoryReport,\n} from \"executable-stories-core/types/story-report\";\nexport {\n  STORY_REPORT_SCHEMA_VERSION,\n  STORY_REPORT_SCHEMA_MAJOR,\n} from \"executable-stories-core/types/story-report\";\n\n// Options types\nexport type {\n  CanonicalizeOptions,\n  OutputFormat,\n  OutputMode,\n  ColocatedStyle,\n  OutputRule,\n  OutputConfig,\n  Logger,\n  WriteFile,\n  MarkdownFormatterOptions,\n  MarkdownRenderers,\n  FormatterOptions,\n  ResolvedFormatterOptions,\n  SortTestCasesMode,\n} from \"./types/options\";\nexport type {\n  ScenarioChangeKind,\n  ScenarioChangeFlags,\n  ScenarioSnapshot,\n  ScenarioDiff,\n  RunDiffSummary,\n  RunDiffResult,\n  CompareFormat,\n  CompareFormatterOptions,\n} from \"./types/compare\";\n\n// Review types (Evidence-Driven Review report)\nexport type {\n  ReviewAudience,\n  ChangeType,\n  EvidenceStrength,\n  ReviewBand,\n  FileChangeKind,\n  ChangedFile,\n  ReviewContext,\n  ReviewClaim,\n  ChangedFileReview,\n  ReviewSummary,\n  ReviewResult,\n  CodeDiffInput,\n  CodeDiffAnnotationInput,\n  CodeDiffEvidence,\n  CodeDiffAnnotation,\n  CodeDiffScenarioRef,\n} from \"./types/review\";\n\n// Canonical --es-* theme tokens (shared with executable-stories-react)\nexport { ES_THEME_TOKENS_CSS, ES_THEME_TOKEN_VALUES } from \"executable-stories-core/theme/tokens\";\n\n// ============================================================================\n// ACL Exports\n// ============================================================================\n\nexport { canonicalizeRun } from \"executable-stories-core/converters/acl/canonicalize\";\n\n/** @internal */\nexport { normalizeStatus } from \"executable-stories-core/converters/acl/status\";\n/** @internal */\nexport {\n  generateTestCaseId,\n  generateRunId,\n  slugify,\n} from \"executable-stories-core/converters/acl/ids\";\n/** @internal */\nexport {\n  deriveStepResults,\n  mergeStepResults,\n} from \"executable-stories-core/converters/acl/steps\";\n/** @internal */\nexport {\n  resolveAttachment,\n  resolveAttachments,\n} from \"executable-stories-core/converters/acl/attachments\";\n\nexport {\n  validateCanonicalRun,\n  assertValidRun,\n  type ValidationResult,\n} from \"executable-stories-core/converters/acl/validate\";\n\n// ============================================================================\n// Formatter Exports\n// ============================================================================\n\nexport {\n  CucumberJsonFormatter,\n  type CucumberJsonOptions,\n} from \"./formatters/cucumber-json\";\n\nexport {\n  StoryReportJsonFormatter,\n  type StoryReportJsonOptions,\n} from \"./formatters/story-report-json\";\n\nexport {\n  ScenarioIndexJsonFormatter,\n  toScenarioIndex,\n  type ScenarioIndex,\n  type ScenarioIndexFilters,\n  type ScenarioIndexItem,\n  type ScenarioIndexJsonOptions,\n  type ScenarioIndexStep,\n} from \"./formatters/scenario-index-json\";\n\nexport { AgentTextFormatter, toAgentText } from \"./formatters/agent-text\";\n\nexport {\n  BehaviorManifestJsonFormatter,\n  toBehaviorManifest,\n  type BehaviorDebuggerIssue,\n  type BehaviorManifest,\n  type BehaviorManifestJsonOptions,\n  type BehaviorSourceFile,\n  type BehaviorTag,\n} from \"./formatters/behavior-manifest-json\";\n\nexport { scenariosCoveringPaths } from \"./coverage-index\";\n\nexport {\n  regenerateArtifacts,\n  regenerateRun,\n  startWatch,\n  type WatchOptions,\n  type WatchDeps,\n  type WatchHandle,\n} from \"./watch\";\n\n// The session trajectory primitive lives in core.\nexport { advanceState, initialRunState, type RunState } from \"executable-stories-core\";\nexport { aggregateReports, type AggregateDeps, type AggregateResult } from \"./aggregate-reports\";\nexport { runsStatus, runsReset, type RunsStatusReport, type RunsResetResult } from \"./runs-lifecycle\";\n\nexport {\n  diffStoryReports,\n  classifyStatusChange,\n  type BehaviorDiff,\n  type BehaviorDiffEntry,\n} from \"./behavior-diff\";\n\nexport { toStoryReport } from \"executable-stories-core/converters/story-report\";\n\n// The HTML report renders via executable-stories-react (the `html` format) —\n// the single report renderer. The in-package HTML string renderer was removed.\n// To render a report programmatically, use `renderReportToHtml` from\n// executable-stories-react/ssr.\n\nexport {\n  JUnitFormatter,\n  type JUnitOptions,\n} from \"./formatters/junit-xml\";\n\nexport {\n  MarkdownFormatter,\n  type MarkdownOptions,\n} from \"./formatters/markdown\";\n\nexport {\n  AstroFormatter,\n  type AstroFormatterOptions as AstroFormatterOpts,\n  type StarlightBadge,\n} from \"./formatters/astro\";\n\nexport {\n  ConfluenceFormatter,\n  type ConfluenceFormatterOptions as ConfluenceFormatterOpts,\n} from \"./formatters/confluence\";\n\nexport {\n  publishConfluencePage,\n  type PublishConfluenceArgs,\n  type PublishConfluenceDeps,\n  type PublishConfluenceResult,\n  type ConfluenceAuth,\n  type FetchFn,\n} from \"./publishers/confluence\";\n\nexport {\n  publishJiraIssue,\n  type PublishJiraArgs,\n  type PublishJiraDeps,\n  type PublishJiraResult,\n  type JiraAuth,\n  type JiraPublishMode,\n} from \"./publishers/jira\";\n\nexport {\n  copyMarkdownAssets,\n  rewriteAssetPaths,\n  type AstroAssetResult,\n  type CopyMarkdownAssetsOptions,\n} from \"./formatters/astro-assets\";\n\nexport {\n  CucumberMessagesFormatter,\n  type CucumberMessagesOptions,\n} from \"./formatters/cucumber-messages/formatter\";\n\nexport {\n  CucumberHtmlFormatter,\n  type CucumberHtmlOptions,\n} from \"./formatters/cucumber-html\";\n\nexport {\n  RunDiffHtmlFormatter,\n  type RunDiffHtmlOptions,\n} from \"./formatters/run-diff-html\";\n\nexport {\n  RunDiffMarkdownFormatter,\n  type RunDiffMarkdownOptions,\n} from \"./formatters/run-diff-markdown\";\n\nexport {\n  RunDiffChangelogFormatter,\n  type RunDiffChangelogOptions,\n} from \"./formatters/run-diff-changelog\";\n\n// ============================================================================\n// NDJSON Parser (compat path: NDJSON → TestRunResult)\n// ============================================================================\n\nexport { parseNdjson, parseEnvelopes } from \"executable-stories-core/converters/ndjson-parser\";\n\n// ============================================================================\n// Utility Exports\n// ============================================================================\n\n/** @internal */\nexport { readGitSha } from \"./utils/git-info\";\n/** @internal */\nexport { findGitDir } from \"./utils/git-info\";\n/** @internal */\nexport { readBranchName } from \"./utils/git-info\";\n/** @internal */\nexport { formatDuration } from \"executable-stories-core/utils/duration\";\n/** @internal */\nexport { msToNanoseconds } from \"executable-stories-core/utils/duration\";\n/** @internal */\nexport { nanosecondsToMs } from \"executable-stories-core/utils/duration\";\n/** @internal */\nexport { readPackageVersion } from \"./utils/metadata\";\n/** @internal */\nexport { clearVersionCache } from \"./utils/metadata\";\nexport { detectCI } from \"./utils/ci-detect\";\nexport {\n  tryGetActiveOtelContext,\n  resolveTraceUrl,\n  type OtelTraceContext,\n} from \"executable-stories-core/utils/otel-detect\";\nexport { buildHtmlDocEntry, type HtmlDocOptions } from \"executable-stories-core/utils/doc-builders\";\n\n// ============================================================================\n// Notifier Exports\n// ============================================================================\n\nexport { sendNotifications } from \"./notifiers/send-notifications\";\nexport { sendSlackNotification } from \"./notifiers/slack\";\nexport { sendTeamsNotification } from \"./notifiers/teams\";\nexport { sendWebhookNotification } from \"./notifiers/webhook\";\nexport { signBody } from \"./notifiers/hmac\";\nexport { stripAnsi } from \"./notifiers/ansi-strip\";\nexport type { NotificationSummary, NotifyCondition, GenericWebhookNotifierOptions, WebhookSignerHmac, WebhookPayload } from \"./notifiers/types\";\n\n// ============================================================================\n// CI Type Exports\n// ============================================================================\n\nexport type { CIProvider, CIInfo as TypedCIInfo } from \"executable-stories-core/types/ci\";\nexport { toCIInfo, toRawCIInfo } from \"executable-stories-core/types/ci\";\n\n// ============================================================================\n// History Exports\n// ============================================================================\n\nexport { loadHistory, saveHistory, updateHistory } from \"./history/history-store\";\nexport { calculateFlakiness } from \"./history/flakiness\";\nexport { detectPerformanceTrend } from \"./history/performance\";\nexport { calculateStability } from \"./history/stability\";\nexport { computeTestMetrics } from \"./history/metrics\";\nexport {\n  MIN_PERF_SAMPLES,\n  MIN_METRIC_SAMPLES,\n  MIN_FLAKINESS_SAMPLES,\n  hasSufficientHistory,\n} from \"./history/sample-policy\";\n\nexport type {\n  HistoryEntry,\n  TestHistory,\n  HistoryStore,\n  StabilityGrade,\n  FlakinessLevel,\n  PerformanceTrend,\n  TestMetrics,\n} from \"./history/types\";\n\n// ============================================================================\n// List Scenarios\n// ============================================================================\n\nexport { listScenarios } from \"./list-scenarios\";\nexport type { ListScenariosArgs, ListScenariosDeps } from \"./list-scenarios\";\n\nexport { buildCheck, renderCheck } from \"./check\";\nexport type {\n  CheckArgs,\n  CheckDeps,\n  CheckReport,\n  CheckFailure,\n  CheckStep,\n} from \"./check\";\n\nexport { buildGoal, enrichGoal, renderGoal } from \"./goal\";\nexport type {\n  GoalArgs,\n  GoalDeps,\n  GoalReport,\n  GoalRequirementResult,\n  RatchetViolation,\n} from \"./goal\";\n\nexport { buildTriage, enrichTriage, renderTriage } from \"./triage\";\nexport type {\n  TriageArgs,\n  TriageDeps,\n  TriageReport,\n  TriageItem,\n  FailureKind,\n} from \"./triage\";\n\nexport { createJevClient, jevFromEnv } from \"./jev\";\nexport type { JevClient, JevQuestion, JevAnswer } from \"./jev\";\n\n// ============================================================================\n// ReportGenerator\n// ============================================================================\n\nimport { toPosix } from \"./report-generator\";\nimport type { GenerateCompareResult } from \"./report-generator\";\n\nexport {\n  ReportGenerator,\n  createReportGenerator,\n  joinNameAndExt,\n  normalizeFormats,\n  type GenerateArgs,\n  type GenerateDeps,\n  type GenerateResult,\n  type GenerateCompareResult,\n} from \"./report-generator\";\n\n\nexport async function generateRunComparison(args: {\n  baseline: TestRunResult;\n  current: TestRunResult;\n  formats: Array<\"html\" | \"markdown\" | \"changelog\">;\n  outputDir?: string;\n  outputName?: string;\n  title?: string;\n  /** Current run covers only some test files; see {@link DiffRunsOptions}. */\n  partialCurrent?: boolean;\n}): Promise<GenerateCompareResult> {\n  const outputDir = args.outputDir ?? \"reports\";\n  const outputName = args.outputName ?? \"test-results-diff\";\n  const diff = diffRuns(args.baseline, args.current, {\n    partialCurrent: args.partialCurrent,\n  });\n  const files: string[] = [];\n\n  await fsPromises.mkdir(outputDir, { recursive: true });\n\n  for (const format of args.formats) {\n    // The changelog gets its own suffix so requesting markdown + changelog\n    // together never writes both to the same file.\n    const ext = format === \"html\" ? \".html\" : format === \"changelog\" ? \".changelog.md\" : \".md\";\n    const outputPath = toPosix(path.join(outputDir, `${outputName}${ext}`));\n    const content =\n      format === \"html\"\n        ? new RunDiffHtmlFormatter({ title: args.title }).format(diff)\n        : format === \"changelog\"\n          ? new RunDiffChangelogFormatter().format(diff)\n          : new RunDiffMarkdownFormatter({ title: args.title }).format(diff);\n    await fsPromises.writeFile(outputPath, content, \"utf8\");\n    files.push(outputPath);\n  }\n\n  return { files, diff };\n}\n\nexport { diffRuns, type DiffRunsOptions } from \"./compare/diff-runs\";\nexport { createPrCommentSummary } from \"./compare/pr-summary\";\n\n// Review domain + formatter (Evidence-Driven Review report)\nexport { buildReview, enrichReview, gradeEvidence, codeDiffDiagnostics } from \"./review/build-review\";\nexport {\n  assembleCodeDiff,\n  type CodeDiffSidecar,\n  type CodeDiffSidecarAnnotation,\n} from \"./review/code-diff-sidecar\";\nexport { parseUnifiedDiff, createAnchor, relocateAnchor } from \"./review/diff-anchor\";\nexport type {\n  DiffAnchor,\n  AnchorResolution,\n  AnchorState,\n  FileDiff,\n  DiffHunk,\n  DiffLine,\n} from \"./types/diff\";\nexport {\n  deriveAudience,\n  deriveChangeType,\n  isReviewableSource,\n  isTestFile,\n} from \"./review/conventions\";\nexport {\n  ReviewMarkdownFormatter,\n  type ReviewMarkdownOptions,\n} from \"./formatters/review-markdown\";\nexport {\n  ReviewHtmlFormatter,\n  type ReviewHtmlOptions,\n} from \"./formatters/review-html\";\n\n// ============================================================================\n// Convenience Functions\n// ============================================================================\n\n// Re-export adapters\nexport { adaptJestRun, adaptVitestRun, adaptPlaywrightRun };\n\n// ============================================================================\n// Bundler Exports\n// ============================================================================\n\nexport { bundleAssets } from \"./bundler/bundle-assets\";\nexport type { BundleOptions, BundleResult } from \"./bundler/bundle-assets\";\n\n// Re-export adapter types\nexport type {\n  JestTestResult,\n  JestFileResult,\n  JestAggregatedResult,\n  StoryFileReport,\n  JestAdapterOptions,\n} from \"./converters/adapters/jest\";\nexport type {\n  VitestState,\n  VitestSerializedError,\n  VitestTestResult,\n  VitestTestCase,\n  VitestTestModule,\n  VitestAdapterOptions,\n} from \"./converters/adapters/vitest\";\nexport type {\n  PlaywrightStatus,\n  PlaywrightError,\n  PlaywrightAttachment,\n  PlaywrightTestResult,\n  PlaywrightAnnotation,\n  PlaywrightLocation,\n  PlaywrightTestCase,\n  PlaywrightAdapterOptions,\n} from \"./converters/adapters/playwright\";\n\n/**\n * Normalize Jest results to canonical TestRunResult.\n *\n * Combines adaptJestRun + canonicalizeRun.\n */\nexport function normalizeJestResults(\n  jestResults: Parameters<typeof adaptJestRun>[0],\n  storyReports: Parameters<typeof adaptJestRun>[1],\n  adapterOptions?: Parameters<typeof adaptJestRun>[2],\n  canonicalizeOptions?: CanonicalizeOptions\n): TestRunResult {\n  const raw: RawRun = adaptJestRun(jestResults, storyReports, adapterOptions);\n  return canonicalizeRun(raw, canonicalizeOptions);\n}\n\n/**\n * Normalize Vitest results to canonical TestRunResult.\n *\n * Combines adaptVitestRun + canonicalizeRun.\n */\nexport function normalizeVitestResults(\n  testModules: Parameters<typeof adaptVitestRun>[0],\n  adapterOptions?: Parameters<typeof adaptVitestRun>[1],\n  canonicalizeOptions?: CanonicalizeOptions\n): TestRunResult {\n  const raw: RawRun = adaptVitestRun(testModules, adapterOptions);\n  return canonicalizeRun(raw, canonicalizeOptions);\n}\n\n/**\n * Normalize Playwright results to canonical TestRunResult.\n *\n * Combines adaptPlaywrightRun + canonicalizeRun.\n */\nexport function normalizePlaywrightResults(\n  testResults: Parameters<typeof adaptPlaywrightRun>[0],\n  adapterOptions?: Parameters<typeof adaptPlaywrightRun>[1],\n  canonicalizeOptions?: CanonicalizeOptions\n): TestRunResult {\n  const raw: RawRun = adaptPlaywrightRun(testResults, adapterOptions);\n  return canonicalizeRun(raw, canonicalizeOptions);\n}\n\nexport type { DeploymentEntry, DeploymentLedger } from \"./deploy/ledger\";\nexport type { DeploymentStatus, EnvironmentDrift, RecordDeploymentArgs, RecordDeploymentResult } from \"./deploy/deployments\";\nexport { recordDeployment, getDeploymentStatus, getEnvironmentDrift } from \"./deploy/deployments\";\nexport { ReleaseManifestFormatter, toReleaseManifest, type ReleaseManifest } from \"./formatters/release-manifest\";\nexport {\n  TraceabilityMatrixFormatter,\n  TraceabilityCsvFormatter,\n  toTraceabilityMatrix,\n  type TraceabilityMatrix,\n  type TraceabilityRequirement,\n} from \"./formatters/traceability-matrix\";\n","import type { DocEntry, NormalizedTicket, StoryStep } from \"executable-stories-core/types/story\";\nimport type { Attachment, TestCaseResult, TestRunResult, TestStatus } from \"executable-stories-core/types/test-result\";\n\nexport type ScenarioChangeKind =\n  | \"added\"\n  | \"removed\"\n  | \"renamed\"\n  | \"moved\"\n  | \"regressed\"\n  | \"fixed\"\n  | \"changed\"\n  | \"unchanged\";\n\nexport interface ScenarioChangeFlags {\n  status: boolean;\n  steps: boolean;\n  docs: boolean;\n  tags: boolean;\n  tickets: boolean;\n  source: boolean;\n  duration: boolean;\n  attachments: boolean;\n  error: boolean;\n  titlePath: boolean;\n}\n\nexport interface ScenarioSnapshot {\n  id: string;\n  scenario: string;\n  sourceFile: string;\n  sourceLine: number;\n  status: TestStatus;\n  durationMs: number;\n  tags: string[];\n  titlePath: string[];\n  steps: StoryStep[];\n  docs: DocEntry[];\n  tickets: NormalizedTicket[];\n  attachments: Attachment[];\n  errorMessage?: string;\n}\n\nexport interface ScenarioDiff {\n  kind: ScenarioChangeKind;\n  id: string;\n  scenario: string;\n  sourceFile: string;\n  sourceLine: number;\n  baseline?: ScenarioSnapshot;\n  current?: ScenarioSnapshot;\n  flags: ScenarioChangeFlags;\n  changedFields: string[];\n  durationDeltaMs?: number;\n  /** For `renamed`/`moved`: the baseline test-case id this behaviour was matched from. */\n  previousId?: string;\n  /** For `renamed`/`moved`: match confidence in 0..1 (1 = exact content fingerprint). */\n  matchConfidence?: number;\n  /** For `renamed`/`moved`: how the baseline/current pair was re-identified. */\n  matchedBy?: \"fingerprint\" | \"similarity\";\n}\n\nexport interface RunDiffSummary {\n  totalBaseline: number;\n  totalCurrent: number;\n  added: number;\n  removed: number;\n  /** Behaviours re-identified across a title change (content preserved). */\n  renamed: number;\n  /** Behaviours re-identified across a file move (content preserved). */\n  moved: number;\n  changed: number;\n  regressed: number;\n  fixed: number;\n  unchanged: number;\n  /**\n   * Baseline scenarios skipped because the current run is partial and never\n   * touched their source file. Always 0 for a full-run diff.\n   */\n  notRun: number;\n}\n\nexport interface RunDiffResult {\n  baseline: TestRunResult;\n  current: TestRunResult;\n  summary: RunDiffSummary;\n  scenarios: ScenarioDiff[];\n}\n\nexport type CompareFormat = \"html\" | \"markdown\" | \"changelog\";\n\nexport interface CompareFormatterOptions {\n  title?: string;\n}\n\nexport function toScenarioSnapshot(tc: TestCaseResult): ScenarioSnapshot {\n  return {\n    id: tc.id,\n    scenario: tc.story.scenario,\n    sourceFile: tc.sourceFile,\n    sourceLine: tc.sourceLine,\n    status: tc.status,\n    durationMs: tc.durationMs,\n    tags: tc.tags,\n    titlePath: tc.titlePath,\n    steps: tc.story.steps,\n    docs: tc.story.docs ?? [],\n    tickets: tc.story.tickets ?? [],\n    attachments: tc.attachments,\n    errorMessage: tc.errorMessage,\n  };\n}\n","import type { TestCaseResult, TestRunResult } from \"executable-stories-core/types/test-result\";\nimport type {\n  RunDiffResult,\n  ScenarioChangeFlags,\n  ScenarioChangeKind,\n  ScenarioDiff,\n} from \"../types/compare\";\nimport { toScenarioSnapshot } from \"../types/compare\";\nimport {\n  behaviourFingerprint, pairByFingerprint,\n  behaviourSimilarity,\n  type BehaviourIdentityInput,\n} from \"executable-stories-core/converters/acl/ids\";\n\nfunction compareStringArrays(a: string[], b: string[]): boolean {\n  if (a.length !== b.length) return false;\n  return a.every((value, index) => value === b[index]);\n}\n\nfunction stableJson(value: unknown): string {\n  return JSON.stringify(value);\n}\n\nfunction isFailedStatus(status: TestCaseResult[\"status\"]): boolean {\n  return status === \"failed\";\n}\n\nfunction getPrimaryKind(\n  baseline: TestCaseResult,\n  current: TestCaseResult,\n  hasChanges: boolean\n): ScenarioChangeKind {\n  if (isFailedStatus(current.status) && !isFailedStatus(baseline.status)) {\n    return \"regressed\";\n  }\n  if (!isFailedStatus(current.status) && isFailedStatus(baseline.status)) {\n    return \"fixed\";\n  }\n  return hasChanges ? \"changed\" : \"unchanged\";\n}\n\nfunction buildFlags(\n  baseline: TestCaseResult,\n  current: TestCaseResult\n): ScenarioChangeFlags {\n  const baselineDocs = baseline.story.docs ?? [];\n  const currentDocs = current.story.docs ?? [];\n\n  return {\n    status: baseline.status !== current.status,\n    steps: stableJson(baseline.story.steps) !== stableJson(current.story.steps),\n    docs: stableJson(baselineDocs) !== stableJson(currentDocs),\n    tags: !compareStringArrays(baseline.tags, current.tags),\n    tickets: stableJson(baseline.story.tickets ?? []) !== stableJson(current.story.tickets ?? []),\n    source:\n      baseline.sourceFile !== current.sourceFile ||\n      baseline.sourceLine !== current.sourceLine,\n    duration: baseline.durationMs !== current.durationMs,\n    attachments:\n      stableJson(baseline.attachments) !== stableJson(current.attachments),\n    error:\n      (baseline.errorMessage ?? \"\") !== (current.errorMessage ?? \"\"),\n    titlePath: !compareStringArrays(baseline.titlePath, current.titlePath),\n  };\n}\n\nfunction sortDiffs(scenarios: ScenarioDiff[]): ScenarioDiff[] {\n  const rank: Record<ScenarioChangeKind, number> = {\n    regressed: 0,\n    fixed: 1,\n    added: 2,\n    removed: 3,\n    renamed: 4,\n    moved: 5,\n    changed: 6,\n    unchanged: 7,\n  };\n\n  return [...scenarios].sort((a, b) => {\n    if (rank[a.kind] !== rank[b.kind]) {\n      return rank[a.kind] - rank[b.kind];\n    }\n    if (a.sourceFile !== b.sourceFile) {\n      return a.sourceFile.localeCompare(b.sourceFile);\n    }\n    if (a.sourceLine !== b.sourceLine) {\n      return a.sourceLine - b.sourceLine;\n    }\n    return a.scenario.localeCompare(b.scenario);\n  });\n}\n\n/** Only re-pair fuzzy matches at or above this content similarity (0..1). */\nconst SIMILARITY_THRESHOLD = 0.75;\n\nfunction identityInput(tc: TestCaseResult): BehaviourIdentityInput {\n  return {\n    scenario: tc.story.scenario,\n    sourceFile: tc.sourceFile,\n    steps: tc.story.steps,\n    covers: tc.story.covers,\n  };\n}\n\nfunction changedFieldsOf(flags: ScenarioChangeFlags): string[] {\n  return Object.entries(flags)\n    .filter(([, changed]) => changed)\n    .map(([field]) => field);\n}\n\n/** Flags for a wholesale add/remove — every dimension differs from nothing. */\nfunction allChangedFlags(errorMessage?: string): ScenarioChangeFlags {\n  return {\n    status: true,\n    steps: true,\n    docs: true,\n    tags: true,\n    tickets: true,\n    source: true,\n    duration: true,\n    attachments: true,\n    error: Boolean(errorMessage),\n    titlePath: true,\n  };\n}\n\ninterface IdentityPair {\n  before: TestCaseResult;\n  after: TestCaseResult;\n  confidence: number;\n  matchedBy: \"fingerprint\" | \"similarity\";\n}\n\n/**\n * Re-pair id-unmatched removals and additions that are the same behaviour relabelled or\n * relocated. Conservative by design — a wrong pairing would hide a real deletion inside a\n * release gate, so we only match (1) one-to-one exact content fingerprints, then (2) a\n * unique fuzzy best above {@link SIMILARITY_THRESHOLD}. Anything ambiguous stays add/remove.\n */\nfunction matchIdentities(\n  removed: TestCaseResult[],\n  added: TestCaseResult[]\n): { pairs: IdentityPair[]; unmatchedRemoved: TestCaseResult[]; unmatchedAdded: TestCaseResult[] } {\n  const pairs: IdentityPair[] = [];\n  const remainingRemoved = new Set(removed);\n  const remainingAdded = new Set(added);\n\n  // Pass 1 — exact content fingerprint. `pairByFingerprint` carries the rules\n  // (the empty fingerprint never matches, and an ambiguous group is declined\n  // rather than guessed) so every consumer of behaviourFingerprint agrees on\n  // what counts as a rename.\n  for (const { removed: before, added: after } of pairByFingerprint(\n    [...remainingRemoved],\n    [...remainingAdded],\n    (tc) => behaviourFingerprint(identityInput(tc)),\n  )) {\n    pairs.push({ before, after, confidence: 1, matchedBy: \"fingerprint\" });\n    remainingRemoved.delete(before);\n    remainingAdded.delete(after);\n  }\n\n  // Pass 2 — guarded fuzzy: a unique best match above threshold.\n  for (const before of [...remainingRemoved]) {\n    let best: TestCaseResult | undefined;\n    let bestScore = 0;\n    let tied = false;\n    for (const after of remainingAdded) {\n      const score = behaviourSimilarity(identityInput(before), identityInput(after));\n      if (score > bestScore) {\n        bestScore = score;\n        best = after;\n        tied = false;\n      } else if (score === bestScore) {\n        tied = true;\n      }\n    }\n    if (best && !tied && bestScore >= SIMILARITY_THRESHOLD) {\n      pairs.push({ before, after: best, confidence: Math.round(bestScore * 100) / 100, matchedBy: \"similarity\" });\n      remainingRemoved.delete(before);\n      remainingAdded.delete(best);\n    }\n  }\n\n  return {\n    pairs,\n    unmatchedRemoved: [...remainingRemoved],\n    unmatchedAdded: [...remainingAdded],\n  };\n}\n\n/** A content-preserving identity change is a move when only the file differs, else a rename. */\nfunction identityKind(before: TestCaseResult, after: TestCaseResult): \"renamed\" | \"moved\" {\n  const titleChanged = before.story.scenario !== after.story.scenario;\n  const fileChanged = before.sourceFile !== after.sourceFile;\n  return fileChanged && !titleChanged ? \"moved\" : \"renamed\";\n}\n\nexport interface DiffRunsOptions {\n  /**\n   * The current run covers only some test files (a filtered local run, a CI\n   * shard, or a push from a watch session). A baseline scenario in a file the\n   * current run never touched is then \"not run\", not \"removed\" — without this\n   * a one-file run against a full baseline reports the whole suite as deleted.\n   *\n   * Deliberately opt-in: a file that is absent because it was deleted looks\n   * exactly like a file that is absent because it was not selected, and\n   * guessing wrong hides a real deletion from a release gate.\n   */\n  partialCurrent?: boolean;\n}\n\nexport function diffRuns(\n  baseline: TestRunResult,\n  current: TestRunResult,\n  options: DiffRunsOptions = {}\n): RunDiffResult {\n  const baselineById = new Map(baseline.testCases.map((tc) => [tc.id, tc]));\n  const currentById = new Map(current.testCases.map((tc) => [tc.id, tc]));\n  const ids = new Set([...baselineById.keys(), ...currentById.keys()]);\n\n  // The current run's own scenarios define its scope: the files it covered.\n  const coveredFiles = options.partialCurrent\n    ? new Set(current.testCases.map((tc) => tc.sourceFile))\n    : undefined;\n\n  const scenarios: ScenarioDiff[] = [];\n  const removedCases: TestCaseResult[] = [];\n  const addedCases: TestCaseResult[] = [];\n  let notRun = 0;\n\n  // First pass: id-matched scenarios diff in place; id-unique ones are collected so we can\n  // try to re-pair renames/moves before declaring them genuine additions/deletions.\n  for (const id of ids) {\n    const before = baselineById.get(id);\n    const after = currentById.get(id);\n\n    if (!before && after) {\n      addedCases.push(after);\n      continue;\n    }\n    if (before && !after) {\n      // Out of a partial run's scope: not observed, so nothing can be said about\n      // it. It also stays out of rename/move matching, since the file that would\n      // prove the move was never run.\n      if (coveredFiles && !coveredFiles.has(before.sourceFile)) {\n        notRun += 1;\n        continue;\n      }\n      removedCases.push(before);\n      continue;\n    }\n    if (!before || !after) continue;\n\n    const flags = buildFlags(before, after);\n    const changedFields = changedFieldsOf(flags);\n    const kind = getPrimaryKind(before, after, changedFields.length > 0);\n\n    scenarios.push({\n      kind,\n      id,\n      scenario: after.story.scenario,\n      sourceFile: after.sourceFile,\n      sourceLine: after.sourceLine,\n      baseline: toScenarioSnapshot(before),\n      current: toScenarioSnapshot(after),\n      flags,\n      changedFields,\n      durationDeltaMs: after.durationMs - before.durationMs,\n    });\n  }\n\n  // Second pass: re-pair relabelled/relocated behaviours so a rename is not a false\n  // delete + add. Matched pairs become `renamed`/`moved`; leftovers stay added/removed.\n  const { pairs, unmatchedRemoved, unmatchedAdded } = matchIdentities(removedCases, addedCases);\n\n  for (const { before, after, confidence, matchedBy } of pairs) {\n    const flags = buildFlags(before, after);\n    scenarios.push({\n      kind: identityKind(before, after),\n      id: after.id,\n      previousId: before.id,\n      scenario: after.story.scenario,\n      sourceFile: after.sourceFile,\n      sourceLine: after.sourceLine,\n      baseline: toScenarioSnapshot(before),\n      current: toScenarioSnapshot(after),\n      flags,\n      changedFields: changedFieldsOf(flags),\n      durationDeltaMs: after.durationMs - before.durationMs,\n      matchConfidence: confidence,\n      matchedBy,\n    });\n  }\n\n  for (const after of unmatchedAdded) {\n    const flags = allChangedFlags(after.errorMessage);\n    scenarios.push({\n      kind: \"added\",\n      id: after.id,\n      scenario: after.story.scenario,\n      sourceFile: after.sourceFile,\n      sourceLine: after.sourceLine,\n      current: toScenarioSnapshot(after),\n      flags,\n      changedFields: changedFieldsOf(flags),\n    });\n  }\n\n  for (const before of unmatchedRemoved) {\n    const flags = allChangedFlags(before.errorMessage);\n    scenarios.push({\n      kind: \"removed\",\n      id: before.id,\n      scenario: before.story.scenario,\n      sourceFile: before.sourceFile,\n      sourceLine: before.sourceLine,\n      baseline: toScenarioSnapshot(before),\n      flags,\n      changedFields: changedFieldsOf(flags),\n    });\n  }\n\n  const sorted = sortDiffs(scenarios);\n  const summary = {\n    totalBaseline: baseline.testCases.length,\n    totalCurrent: current.testCases.length,\n    added: sorted.filter((s) => s.kind === \"added\").length,\n    removed: sorted.filter((s) => s.kind === \"removed\").length,\n    renamed: sorted.filter((s) => s.kind === \"renamed\").length,\n    moved: sorted.filter((s) => s.kind === \"moved\").length,\n    changed: sorted.filter((s) => s.kind === \"changed\").length,\n    regressed: sorted.filter((s) => s.kind === \"regressed\").length,\n    fixed: sorted.filter((s) => s.kind === \"fixed\").length,\n    unchanged: sorted.filter((s) => s.kind === \"unchanged\").length,\n    notRun,\n  };\n\n  return {\n    baseline,\n    current,\n    summary,\n    scenarios: sorted,\n  };\n}\n\n","import type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nimport type { RunDiffResult, ScenarioChangeKind, ScenarioDiff } from \"../types/compare\";\n\nexport interface RunDiffChangelogOptions {\n  title?: string;\n}\n\n/**\n * Release-notes sections in reader order: what the release delivers first,\n * then what it repaired, broke, and dropped; refactors last because they\n * change no behavior.\n */\nconst SECTIONS: Array<{ kinds: ScenarioChangeKind[]; heading: string }> = [\n  { kinds: [\"added\"], heading: \"New behavior\" },\n  { kinds: [\"fixed\"], heading: \"Fixed\" },\n  { kinds: [\"regressed\"], heading: \"Broken\" },\n  { kinds: [\"removed\"], heading: \"Removed\" },\n  { kinds: [\"renamed\", \"moved\"], heading: \"Renamed or moved\" },\n  { kinds: [\"changed\"], heading: \"Changed\" },\n];\n\nfunction describeRun(run: TestRunResult): string {\n  const parts: string[] = [];\n  if (run.packageVersion) parts.push(run.packageVersion);\n  const sha = run.gitSha ?? run.ci?.commitSha;\n  if (sha) parts.push(`\\`${sha.slice(0, 8)}\\``);\n  parts.push(new Date(run.startedAtMs).toISOString().slice(0, 10));\n  return parts.join(\" · \");\n}\n\nfunction scenarioLine(diff: ScenarioDiff): string {\n  const title = diff.current?.scenario ?? diff.scenario;\n  const source = `\\`${diff.sourceFile}\\``;\n  switch (diff.kind) {\n    case \"renamed\":\n      return `- ${diff.baseline?.scenario ?? \"?\"} → **${title}** (${source})`;\n    case \"moved\":\n      return `- **${title}** moved from \\`${diff.baseline?.sourceFile ?? \"?\"}\\` to ${source}`;\n    case \"regressed\":\n      return `- **${title}** (${source})${diff.current?.errorMessage ? ` — ${firstLine(diff.current.errorMessage)}` : \"\"}`;\n    case \"changed\":\n      return `- **${title}** (${source}) — ${diff.changedFields.join(\", \")}`;\n    default:\n      return `- **${title}** (${source})`;\n  }\n}\n\nfunction firstLine(text: string): string {\n  return text.split(\"\\n\", 1)[0]!.trim();\n}\n\n/**\n * Behavior changelog between two runs: release-notes-style Markdown built\n * from the same RunDiffResult as `compare`'s review outputs, but written for\n * the reader of a release (\"what can the product do now\") rather than the\n * reviewer of a diff. New behaviors include their Given/When/Then steps so\n * the entry reads as a specification, not a test name.\n */\nexport class RunDiffChangelogFormatter {\n  private readonly title: string;\n\n  constructor(options: RunDiffChangelogOptions = {}) {\n    this.title = options.title ?? \"Behavior Changelog\";\n  }\n\n  format(diff: RunDiffResult): string {\n    const lines: string[] = [];\n    lines.push(`# ${this.title}`);\n    lines.push(\"\");\n    lines.push(`${describeRun(diff.baseline)} → ${describeRun(diff.current)}`);\n    if (diff.current.ci?.branch) lines.push(`Branch: \\`${diff.current.ci.branch}\\``);\n    lines.push(\"\");\n\n    let hasEntries = false;\n    for (const section of SECTIONS) {\n      const scenarios = diff.scenarios.filter((s) => section.kinds.includes(s.kind));\n      if (scenarios.length === 0) continue;\n      hasEntries = true;\n\n      lines.push(`## ${section.heading} (${scenarios.length})`);\n      lines.push(\"\");\n      for (const scenario of scenarios) {\n        lines.push(scenarioLine(scenario));\n        if (scenario.kind === \"added\" && scenario.current) {\n          for (const step of scenario.current.steps) {\n            lines.push(`  - _${step.keyword}_ ${step.text}`);\n          }\n        }\n      }\n      lines.push(\"\");\n    }\n\n    if (!hasEntries) {\n      lines.push(\"No behavior changes between these runs.\");\n      lines.push(\"\");\n    }\n\n    lines.push(`_${diff.summary.unchanged} unchanged scenario${diff.summary.unchanged === 1 ? \"\" : \"s\"}._`);\n\n    return lines.join(\"\\n\");\n  }\n}\n","import type { RunDiffResult, ScenarioDiff } from \"../types/compare\";\nimport type { DocEntry, StoryStep } from \"executable-stories-core/types/story\";\nimport { isLocalFsPath, safeImageUrl } from \"executable-stories-core\";\nimport { REPORT_THEME_CSS } from \"./report-theme-css\";\nimport { REPORT_FAVICON_LINK } from \"executable-stories-core/utils/report-favicon\";\n\nexport interface RunDiffHtmlOptions {\n  title?: string;\n  /** Enable dark mode toggle. Default: true */\n  darkMode?: boolean;\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nfunction statusLabel(kind: ScenarioDiff[\"kind\"]): string {\n  switch (kind) {\n    case \"regressed\":\n      return \"Regressed\";\n    case \"fixed\":\n      return \"Fixed\";\n    case \"added\":\n      return \"Added\";\n    case \"removed\":\n      return \"Removed\";\n    case \"renamed\":\n      return \"Renamed\";\n    case \"moved\":\n      return \"Moved\";\n    case \"changed\":\n      return \"Changed\";\n    default:\n      return \"Unchanged\";\n  }\n}\n\nfunction formatStep(step: StoryStep): string {\n  let content = `<strong>${escapeHtml(step.keyword)}</strong> ${escapeHtml(step.text)}`;\n  if (step.mode && step.mode !== \"normal\") {\n    content += ` <span class=\"field-pill\">${escapeHtml(step.mode)}</span>`;\n  }\n  if (step.docs && step.docs.length > 0) {\n    content += `<ul class=\"doc-list\">${step.docs.map((d) => `<li>${formatDocEntry(d)}</li>`).join(\"\")}</ul>`;\n  }\n  return `<li>${content}</li>`;\n}\n\nfunction formatSteps(steps: StoryStep[]): string {\n  if (steps.length === 0) return \"&nbsp;\";\n  return `<ul class=\"step-list\">${steps.map(formatStep).join(\"\")}</ul>`;\n}\n\nfunction formatDocEntry(doc: DocEntry): string {\n  switch (doc.kind) {\n    case \"note\":\n      return escapeHtml(doc.text);\n    case \"tag\":\n      return escapeHtml(doc.names.join(\", \"));\n    case \"kv\":\n      return `${escapeHtml(doc.label)}: ${escapeHtml(typeof doc.value === \"object\" && doc.value !== null ? JSON.stringify(doc.value) : String(doc.value))}`;\n    case \"code\":\n      return `${escapeHtml(doc.label)}${doc.lang ? ` (${escapeHtml(doc.lang)})` : \"\"}: <code>${escapeHtml(doc.content)}</code>`;\n    case \"table\": {\n      const header = `<tr>${doc.columns.map((c) => `<th>${escapeHtml(c)}</th>`).join(\"\")}</tr>`;\n      const rows = doc.rows.map((row) => `<tr>${row.map((cell) => `<td>${escapeHtml(cell)}</td>`).join(\"\")}</tr>`).join(\"\");\n      return `${escapeHtml(doc.label)}<table>${header}${rows}</table>`;\n    }\n    case \"link\":\n      return `${escapeHtml(doc.label)}: ${escapeHtml(doc.url)}`;\n    case \"section\":\n      return `${escapeHtml(doc.title)}: ${escapeHtml(doc.markdown)}`;\n    case \"mermaid\":\n      return `${escapeHtml(doc.title ?? \"mermaid diagram\")}: <code>${escapeHtml(doc.code)}</code>`;\n    case \"screenshot\":\n      return `${doc.alt ? `${escapeHtml(doc.alt)}: ` : \"\"}${escapeHtml(doc.path)}`;\n    case \"video\":\n      return `${doc.caption ? `${escapeHtml(doc.caption)}: ` : \"\"}${escapeHtml(doc.path)}`;\n    case \"html\":\n      return `${doc.title ? `${escapeHtml(doc.title)}: ` : \"\"}${escapeHtml(doc.url ?? doc.path ?? \"(inline html)\")}`;\n    case \"custom\":\n      return `${escapeHtml(doc.type)}: ${escapeHtml(JSON.stringify(doc.data))}`;\n    case \"state\":\n      return `${escapeHtml(doc.label ?? \"State\")}: <code>${escapeHtml(JSON.stringify(doc.value) ?? \"null\")}</code>`;\n  }\n}\n\nfunction formatDocs(docs: DocEntry[]): string {\n  if (docs.length === 0) return \"&nbsp;\";\n  return `<ul class=\"doc-list\">${docs.map((d) => `<li>${formatDocEntry(d)}</li>`).join(\"\")}</ul>`;\n}\n\n/** Depth-first search for the first screenshot doc on a step (covers grouped docs). */\nfunction firstScreenshot(docs: DocEntry[]): { path: string; alt?: string } | undefined {\n  for (const doc of docs) {\n    if (doc.kind === \"screenshot\") return doc;\n    if (doc.children) {\n      const nested = firstScreenshot(doc.children);\n      if (nested) return nested;\n    }\n  }\n  return undefined;\n}\n\n/**\n * Regression storyboard: for scenarios whose status flipped (regressed/fixed),\n * render the current run's step screenshots as a filmstrip so triage starts\n * from what the product looked like, not a stack trace. Frames come from the\n * same step-attached screenshots the report filmstrip uses; steps without a\n * browser-renderable screenshot contribute no frame.\n */\nfunction renderStoryboardStrip(scenario: ScenarioDiff): string {\n  if (scenario.kind !== \"regressed\" && scenario.kind !== \"fixed\") return \"\";\n  const steps = (scenario.current ?? scenario.baseline)?.steps ?? [];\n  const frames: string[] = [];\n  for (const step of steps) {\n    const shot = firstScreenshot(step.docs ?? []);\n    if (!shot || isLocalFsPath(shot.path)) continue;\n    const src = safeImageUrl(shot.path);\n    if (!src) continue;\n    frames.push(\n      `<figure class=\"storyboard-frame\"><img src=\"${escapeHtml(src)}\" alt=\"${escapeHtml(shot.alt ?? step.text)}\" loading=\"lazy\" /><figcaption><strong>${escapeHtml(step.keyword)}</strong> ${escapeHtml(step.text)}</figcaption></figure>`,\n    );\n  }\n  if (frames.length === 0) return \"\";\n  return `<div class=\"storyboard\" aria-label=\"Storyboard\">${frames.join(\"\")}</div>`;\n}\n\nfunction renderScenarioCard(scenario: ScenarioDiff): string {\n  const before = scenario.baseline;\n  const after = scenario.current;\n  const durationDelta = scenario.durationDeltaMs\n    ? `${scenario.durationDeltaMs > 0 ? \"+\" : \"\"}${scenario.durationDeltaMs}ms`\n    : \"\";\n\n  return `\n    <article class=\"scenario-card\" data-kind=\"${scenario.kind}\" data-search=\"${escapeHtml(\n      `${scenario.scenario} ${scenario.sourceFile} ${scenario.changedFields.join(\" \")}`\n    ).toLowerCase()}\">\n      <header class=\"scenario-header\">\n        <div>\n          <span class=\"kind-badge kind-${scenario.kind}\">${statusLabel(scenario.kind)}</span>\n          <h3>${escapeHtml(scenario.scenario)}</h3>\n          <p class=\"source\">${escapeHtml(`${scenario.sourceFile}:${scenario.sourceLine}`)}</p>\n        </div>\n        <div class=\"meta\">\n          ${\n            before && after\n              ? `<div class=\"status-pair\"><span>${escapeHtml(before.status)}</span><span>&rarr;</span><span>${escapeHtml(after.status)}</span></div>`\n              : before\n                ? `<div class=\"status-pair\"><span>${escapeHtml(before.status)}</span><span>&rarr;</span><span>removed</span></div>`\n                : `<div class=\"status-pair\"><span>new</span><span>&rarr;</span><span>${escapeHtml(after?.status ?? \"\")}</span></div>`\n          }\n          ${durationDelta ? `<div class=\"duration-delta\">${escapeHtml(durationDelta)}</div>` : \"\"}\n        </div>\n      </header>\n      ${renderStoryboardStrip(scenario)}\n      ${\n        scenario.changedFields.length > 0\n          ? `<div class=\"field-list\">${scenario.changedFields\n              .map((field) => `<span class=\"field-pill\">${escapeHtml(field)}</span>`)\n              .join(\"\")}</div>`\n          : \"\"\n      }\n      ${\n        before && after\n          ? `<div class=\"comparison-grid\">\n              <section>\n                <h4>Baseline</h4>\n                <dl>\n                  <dt>Tags</dt>\n                  <dd>${escapeHtml(before.tags.join(\", \")) || \"&nbsp;\"}</dd>\n                  <dt>Suite</dt>\n                  <dd>${escapeHtml(before.titlePath.join(\" > \")) || \"&nbsp;\"}</dd>\n                  <dt>Error</dt>\n                  <dd>${escapeHtml(before.errorMessage ?? \"\") || \"&nbsp;\"}</dd>\n                  ${scenario.flags.steps ? `<dt>Steps</dt><dd>${formatSteps(before.steps)}</dd>` : \"\"}\n                  ${scenario.flags.docs ? `<dt>Docs</dt><dd>${formatDocs(before.docs)}</dd>` : \"\"}\n                  ${scenario.flags.tickets ? `<dt>Tickets</dt><dd>${escapeHtml(before.tickets.map(t => t.id).join(\", \")) || \"&nbsp;\"}</dd>` : \"\"}\n                </dl>\n              </section>\n              <section>\n                <h4>Current</h4>\n                <dl>\n                  <dt>Tags</dt>\n                  <dd>${escapeHtml(after.tags.join(\", \")) || \"&nbsp;\"}</dd>\n                  <dt>Suite</dt>\n                  <dd>${escapeHtml(after.titlePath.join(\" > \")) || \"&nbsp;\"}</dd>\n                  <dt>Error</dt>\n                  <dd>${escapeHtml(after.errorMessage ?? \"\") || \"&nbsp;\"}</dd>\n                  ${scenario.flags.steps ? `<dt>Steps</dt><dd>${formatSteps(after.steps)}</dd>` : \"\"}\n                  ${scenario.flags.docs ? `<dt>Docs</dt><dd>${formatDocs(after.docs)}</dd>` : \"\"}\n                  ${scenario.flags.tickets ? `<dt>Tickets</dt><dd>${escapeHtml(after.tickets.map(t => t.id).join(\", \")) || \"&nbsp;\"}</dd>` : \"\"}\n                </dl>\n              </section>\n            </div>`\n          : (() => {\n              const snapshot = after ?? before;\n              if (!snapshot) return \"\";\n              const hasTags = snapshot.tags.length > 0;\n              const hasTickets = snapshot.tickets.length > 0;\n              const hasSteps = snapshot.steps.length > 0;\n              const hasDocs = snapshot.docs.length > 0;\n              if (!hasTags && !hasTickets && !hasSteps && !hasDocs) return \"\";\n              return `<div class=\"snapshot-detail\">\n                <dl>\n                  ${hasTags ? `<dt>Tags</dt><dd>${escapeHtml(snapshot.tags.join(\", \"))}</dd>` : \"\"}\n                  ${hasTickets ? `<dt>Tickets</dt><dd>${escapeHtml(snapshot.tickets.map(t => t.id).join(\", \"))}</dd>` : \"\"}\n                  ${hasSteps ? `<dt>Steps</dt><dd>${formatSteps(snapshot.steps)}</dd>` : \"\"}\n                  ${hasDocs ? `<dt>Docs</dt><dd>${formatDocs(snapshot.docs)}</dd>` : \"\"}\n                </dl>\n              </div>`;\n            })()\n      }\n    </article>\n  `;\n}\n\n/** Diff-specific CSS that references theme custom properties */\nconst DIFF_CSS = `\n      /* Diff layout — uses theme custom properties */\n      * { box-sizing: border-box; }\n      body {\n        margin: 0;\n        font-family: var(--font-sans, Georgia, \"Iowan Old Style\", serif);\n        background: var(--background);\n        color: var(--foreground);\n      }\n      main { max-width: 1200px; margin: 0 auto; padding: 32px 20px 80px; }\n      .diff-header {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        margin-bottom: 24px;\n      }\n      .diff-header-actions {\n        display: flex;\n        gap: 8px;\n        align-items: center;\n      }\n      .theme-toggle {\n        background: var(--secondary);\n        border: 1px solid var(--border);\n        border-radius: 8px;\n        padding: 8px 12px;\n        cursor: pointer;\n        font-size: 1.1rem;\n        color: var(--foreground);\n      }\n      .theme-toggle:hover { background: var(--accent); }\n      .hero { display: grid; gap: 16px; margin-bottom: 24px; }\n      .hero-card, .summary-card, .toolbar, .scenario-card {\n        background: var(--card);\n        border: 1px solid var(--border);\n        border-radius: var(--radius, 18px);\n        box-shadow: 0 1px 3px color-mix(in srgb, var(--foreground) 6%, transparent);\n      }\n      .hero-card { padding: 24px; }\n      h1, h2, h3, h4, p { margin: 0; }\n      .subtle { color: var(--muted-foreground); margin-top: 8px; }\n      .summary-grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n        gap: 12px;\n        margin: 20px 0 24px;\n      }\n      .priority-banner {\n        padding: 18px 20px;\n        margin-bottom: 20px;\n        background: linear-gradient(135deg, color-mix(in srgb, var(--destructive) 9%, transparent), var(--card));\n      }\n      .summary-card { padding: 16px; }\n      .summary-card strong { display: block; font-size: 1.8rem; }\n      .toolbar {\n        position: sticky;\n        top: 12px;\n        z-index: 2;\n        display: flex;\n        flex-wrap: wrap;\n        gap: 10px;\n        padding: 14px;\n        margin-bottom: 20px;\n      }\n      .toolbar input {\n        flex: 1 1 260px;\n        border: 1px solid var(--border);\n        border-radius: 999px;\n        padding: 10px 14px;\n        font: inherit;\n        background: var(--background);\n        color: var(--foreground);\n      }\n      .toolbar button {\n        border: 1px solid var(--border);\n        background: var(--secondary);\n        border-radius: 999px;\n        padding: 10px 14px;\n        font: inherit;\n        cursor: pointer;\n        color: var(--foreground);\n      }\n      .toolbar button.active { background: var(--foreground); color: var(--background); }\n      .scenario-list { display: grid; gap: 14px; }\n      .scenario-card { padding: 18px; }\n      .scenario-header {\n        display: flex;\n        justify-content: space-between;\n        gap: 16px;\n        align-items: flex-start;\n      }\n      .kind-badge, .field-pill {\n        display: inline-flex;\n        align-items: center;\n        padding: 4px 10px;\n        border-radius: 999px;\n        font-size: 0.85rem;\n        margin-right: 8px;\n        margin-bottom: 8px;\n        background: var(--secondary);\n      }\n      .kind-regressed { background: color-mix(in srgb, var(--destructive) 15%, transparent); color: var(--destructive); }\n      .kind-fixed { background: color-mix(in srgb, var(--success) 15%, transparent); color: var(--success); }\n      .kind-added { background: color-mix(in srgb, var(--primary) 15%, transparent); color: var(--primary); }\n      .kind-removed { background: color-mix(in srgb, var(--warning) 18%, transparent); color: var(--warning); }\n      .kind-changed { background: color-mix(in srgb, var(--ring, var(--primary)) 15%, transparent); color: var(--ring, var(--primary)); }\n      .source, .meta, dd { color: var(--muted-foreground); }\n      .status-pair { display: flex; gap: 8px; justify-content: flex-end; font-family: var(--font-mono, ui-monospace, monospace); }\n      .duration-delta { margin-top: 8px; text-align: right; color: var(--muted-foreground); }\n      .field-list { margin-top: 10px; }\n      .storyboard {\n        display: flex;\n        gap: 10px;\n        overflow-x: auto;\n        margin-top: 14px;\n        padding-bottom: 6px;\n      }\n      .storyboard-frame {\n        flex: 0 0 auto;\n        width: 220px;\n        margin: 0;\n        border: 1px solid var(--border);\n        border-radius: var(--radius, 10px);\n        overflow: hidden;\n        background: color-mix(in srgb, var(--card) 60%, var(--background));\n      }\n      .storyboard-frame img { width: 100%; height: 130px; object-fit: cover; object-position: top; display: block; }\n      .storyboard-frame figcaption {\n        padding: 6px 10px;\n        font-size: 0.8rem;\n        color: var(--muted-foreground);\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n      .comparison-grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n        gap: 12px;\n        margin-top: 16px;\n      }\n      .comparison-grid section {\n        background: color-mix(in srgb, var(--card) 60%, var(--background));\n        border: 1px solid var(--border);\n        border-radius: var(--radius, 14px);\n        padding: 12px;\n      }\n      dl {\n        margin: 10px 0 0;\n        display: grid;\n        grid-template-columns: minmax(70px, 90px) 1fr;\n        gap: 8px 12px;\n      }\n      @media (max-width: 720px) {\n        .scenario-header { flex-direction: column; }\n        .status-pair, .duration-delta { text-align: left; justify-content: flex-start; }\n      }\n`;\n\n/** Theme toggle JavaScript */\nconst JS_THEME_TOGGLE = `\nfunction getSystemTheme() {\n  return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\nfunction getEffectiveTheme() {\n  var saved = localStorage.getItem('diff-theme');\n  if (saved === 'dark' || saved === 'light') return saved;\n  return getSystemTheme();\n}\nfunction toggleTheme() {\n  var current = getEffectiveTheme();\n  var next = current === 'dark' ? 'light' : 'dark';\n  localStorage.setItem('diff-theme', next);\n  applyTheme(next);\n}\nfunction applyTheme(theme) {\n  document.documentElement.setAttribute('data-theme', theme);\n  var btn = document.querySelector('.theme-toggle');\n  if (btn) {\n    btn.textContent = theme === 'dark' ? '\\\\u2600\\\\ufe0f' : '\\\\ud83c\\\\udf19';\n    btn.setAttribute('aria-label', theme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode');\n  }\n}\n`;\n\nexport class RunDiffHtmlFormatter {\n  private title: string;\n  private darkMode: boolean;\n\n  constructor(options: RunDiffHtmlOptions = {}) {\n    this.title = options.title ?? \"Run Comparison\";\n    this.darkMode = options.darkMode ?? true;\n  }\n\n  format(diff: RunDiffResult): string {\n    const defaultFilter: \"all\" | \"regressed\" | \"fixed\" | \"added\" | \"removed\" | \"changed\" =\n      diff.summary.regressed > 0\n        ? \"regressed\"\n        : diff.summary.fixed > 0\n          ? \"fixed\"\n          : \"all\";\n    const scenarios = diff.scenarios\n      .filter((scenario) => scenario.kind !== \"unchanged\")\n      .map((scenario) => renderScenarioCard(scenario))\n      .join(\"\\n\");\n\n    const themeToggleHtml = this.darkMode\n      ? `<div class=\"diff-header-actions\"><button type=\"button\" class=\"theme-toggle\" onclick=\"toggleTheme()\" aria-label=\"Toggle theme\"></button></div>`\n      : \"\";\n\n    const themeInitJs = this.darkMode\n      ? `${JS_THEME_TOGGLE}\\napplyTheme(getEffectiveTheme());\\nwindow.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() { if (!localStorage.getItem('diff-theme')) applyTheme(getSystemTheme()); });`\n      : \"\";\n\n    const themeAttr = this.darkMode ? ' data-theme=\"light\"' : '';\n\n    return `<!doctype html>\n<html lang=\"en\"${themeAttr}>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    ${REPORT_FAVICON_LINK}\n    <title>${escapeHtml(this.title)}</title>\n    <style>\n      ${REPORT_THEME_CSS}\n      ${DIFF_CSS}\n    </style>\n  </head>\n  <body>\n    <main>\n      <section class=\"hero\">\n        <div class=\"hero-card\">\n          <div class=\"diff-header\">\n            <h1>${escapeHtml(this.title)}</h1>\n            ${themeToggleHtml}\n          </div>\n          <p class=\"subtle\">Baseline ${escapeHtml(new Date(diff.baseline.startedAtMs).toISOString())} against current ${escapeHtml(new Date(diff.current.startedAtMs).toISOString())}</p>\n        </div>\n      </section>\n      <section class=\"summary-grid\">\n        <div class=\"summary-card\"><strong>${diff.summary.regressed}</strong><span>Regressed</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.fixed}</strong><span>Fixed</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.added}</strong><span>Added</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.removed}</strong><span>Removed</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.renamed}</strong><span>Renamed</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.moved}</strong><span>Moved</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.changed}</strong><span>Changed</span></div>\n        <div class=\"summary-card\"><strong>${diff.summary.unchanged}</strong><span>Unchanged</span></div>\n        ${diff.summary.notRun > 0 ? `<div class=\"summary-card\"><strong>${diff.summary.notRun}</strong><span>Not run</span></div>` : \"\"}\n      </section>\n      <section class=\"hero-card priority-banner\">\n        <h2>Priority Review</h2>\n        <p class=\"subtle\">${\n          diff.summary.regressed > 0\n            ? `${diff.summary.regressed} regression(s) detected. The view is pre-filtered to regressions.`\n            : diff.summary.fixed > 0\n              ? `No regressions detected. The view is pre-filtered to fixed scenarios.`\n              : \"No regressions or fixes detected. Review neutral changes as needed.\"\n        }</p>\n      </section>\n      <section class=\"toolbar\">\n        <input type=\"search\" placeholder=\"Filter by scenario, file, or changed field\" aria-label=\"Filter scenarios\" />\n        <button type=\"button\" class=\"${defaultFilter === \"all\" ? \"active\" : \"\"}\" data-filter=\"all\">All</button>\n        <button type=\"button\" class=\"${defaultFilter === \"regressed\" ? \"active\" : \"\"}\" data-filter=\"regressed\">Regressed</button>\n        <button type=\"button\" class=\"${defaultFilter === \"fixed\" ? \"active\" : \"\"}\" data-filter=\"fixed\">Fixed</button>\n        <button type=\"button\" data-filter=\"added\">Added</button>\n        <button type=\"button\" data-filter=\"removed\">Removed</button>\n        <button type=\"button\" data-filter=\"changed\">Changed</button>\n      </section>\n      <section class=\"scenario-list\">${scenarios || \"<div class=\\\"hero-card\\\"><p>No scenario changes detected.</p></div>\"}</section>\n    </main>\n    <script>\n      ${themeInitJs}\n      const input = document.querySelector('input[type=\"search\"]');\n      const buttons = Array.from(document.querySelectorAll('[data-filter]'));\n      const cards = Array.from(document.querySelectorAll('.scenario-card'));\n      let activeFilter = '${defaultFilter}';\n      function applyFilters() {\n        const query = (input.value || '').trim().toLowerCase();\n        cards.forEach((card) => {\n          const kind = card.getAttribute('data-kind');\n          const haystack = card.getAttribute('data-search') || '';\n          const matchesFilter = activeFilter === 'all' || kind === activeFilter;\n          const matchesSearch = !query || haystack.includes(query);\n          card.style.display = matchesFilter && matchesSearch ? '' : 'none';\n        });\n      }\n      // Filter state lives in the URL fragment so a refresh keeps the view and\n      // the link can be shared. The fragment, not the query string: this file is\n      // usually opened from disk, where Chrome blocks History API URL changes.\n      function writeUrl() {\n        const params = new URLSearchParams();\n        if (input.value) params.set('q', input.value);\n        if (activeFilter !== 'all') params.set('kind', activeFilter);\n        const next = params.toString() ? '#?' + params.toString() : '';\n        if (next === location.hash) return;\n        try {\n          history.replaceState(history.state, '', next || location.href.split('#')[0]);\n        } catch {\n          location.hash = next.slice(1);\n        }\n      }\n      function readUrl() {\n        const raw = location.hash.replace(/^#\\\\??/, '');\n        if (!raw) return;\n        const params = new URLSearchParams(raw);\n        input.value = params.get('q') || '';\n        const kind = params.get('kind');\n        if (kind && buttons.some((b) => b.getAttribute('data-filter') === kind)) {\n          activeFilter = kind;\n          buttons.forEach((b) => b.classList.toggle('active', b.getAttribute('data-filter') === kind));\n        }\n      }\n      let writeTimer;\n      input.addEventListener('input', () => {\n        applyFilters();\n        clearTimeout(writeTimer);\n        writeTimer = setTimeout(writeUrl, 250);\n      });\n      buttons.forEach((button) => {\n        button.addEventListener('click', () => {\n          activeFilter = button.getAttribute('data-filter');\n          buttons.forEach((candidate) => candidate.classList.toggle('active', candidate === button));\n          applyFilters();\n          writeUrl();\n        });\n      });\n      readUrl();\n      applyFilters();\n    </script>\n  </body>\n</html>`;\n  }\n}\n","/**\n * Standalone theme-token CSS for the string-built HTML reports\n * (Evidence Review `review-html` and run-diff `run-diff-html`).\n *\n * These reports build their own markup + component CSS and only need the shared\n * design tokens — the `--es-*` canonical tokens plus the shadcn-style semantic\n * tokens (`--background`, `--foreground`, `--card`, `--primary`, `--destructive`,\n * `--success`, `--warning`, `--border`, `--radius`, fonts, …) in light/dark.\n *\n * This is the source of those shadcn tokens *for the standalone string reports*\n * with their fixed cucumber palette. (The Astro docs site intentionally re-maps\n * the same token names onto its Starlight-derived `--es-*` in `es.css`, so it\n * themes with the surrounding site instead.) Dark mode follows\n * `[data-theme=\"dark\"]` and the system preference, so the reports' dark-mode\n * toggles keep working.\n *\n * Override any token on `:root` (or any ancestor of the report) to re-theme.\n */\nimport { ES_THEME_TOKENS_CSS } from \"executable-stories-core/theme/tokens\";\n\n// Dark-mode token values, defined once and emitted into both the explicit\n// `[data-theme=\"dark\"]` toggle and the system-preference fallback below — the\n// two selectors differ, but the values must not drift.\nconst DARK_TOKENS = `\n  --background: hsl(0 0% 6%);\n  --foreground: hsl(0 0% 95%);\n  --card: hsl(0 0% 9%);\n  --card-foreground: hsl(0 0% 95%);\n  --popover: hsl(0 0% 9%);\n  --popover-foreground: hsl(0 0% 95%);\n\n  --primary: hsl(145 63% 50%);\n  --primary-foreground: hsl(0 0% 6%);\n\n  --secondary: hsl(0 0% 13%);\n  --secondary-foreground: hsl(0 0% 95%);\n  --muted: hsl(0 0% 13%);\n  --muted-foreground: hsl(0 0% 55%);\n  --accent: hsl(0 0% 13%);\n  --accent-foreground: hsl(0 0% 95%);\n  --destructive: hsl(0 72% 55%);\n  --destructive-foreground: hsl(0 0% 100%);\n  --border: hsl(0 0% 16%);\n  --input: hsl(0 0% 16%);\n  --ring: hsl(145 63% 50%);\n\n  --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.3);\n  --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.35);\n  --shadow: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.35);\n  --shadow-md: 0 10px 15px -3px rgb(0 0 0 / 0.45), 0 4px 6px -4px rgb(0 0 0 / 0.35);\n\n  --success: hsl(145 63% 55%);\n  --success-light: hsl(145 35% 14%);\n  --success-border: hsl(145 35% 22%);\n  --error: hsl(0 72% 60%);\n  --error-light: hsl(0 35% 14%);\n  --error-border: hsl(0 35% 22%);\n  --warning: hsl(38 92% 55%);\n  --warning-light: hsl(38 35% 14%);\n  --warning-border: hsl(38 35% 22%);\n  --pending: hsl(262 60% 65%);\n  --pending-light: hsl(262 25% 14%);\n  --pending-border: hsl(262 25% 22%);\n\n  --keyword-color: hsl(145 63% 60%);\n  --tag-bg: hsl(145 35% 14%);\n  --tag-color: hsl(145 63% 60%);\n  --tag-border: hsl(145 35% 22%);\n  --step-param-color: hsl(220 70% 70%);\n\n  --accordion-header-hover: hsl(0 0% 11%);\n  --accordion-content-bg: hsl(0 0% 7%);`;\n\nexport const REPORT_THEME_CSS = `\n@import url('https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap');\n\n/* executable-stories canonical tokens (--es-*), shared with executable-stories-react. */\n${ES_THEME_TOKENS_CSS}\n\n/* Light mode (default) — shadcn/ui base with cucumber accent. */\n:root {\n  /* Reference the canonical --es-* tokens (defined just above via\n     ES_THEME_TOKENS_CSS) instead of restating the font stack, so the report\n     shell and the shared token contract can't drift. */\n  --font-sans: var(--es-font-body);\n  --font-mono: var(--es-font-mono);\n\n  --background: hsl(0 0% 100%);\n  --foreground: hsl(0 0% 9%);\n  --card: hsl(0 0% 100%);\n  --card-foreground: hsl(0 0% 9%);\n  --popover: hsl(0 0% 100%);\n  --popover-foreground: hsl(0 0% 9%);\n\n  --primary: hsl(145 63% 42%);\n  --primary-foreground: hsl(0 0% 100%);\n\n  --secondary: hsl(0 0% 96.5%);\n  --secondary-foreground: hsl(0 0% 9%);\n  --muted: hsl(0 0% 96.5%);\n  --muted-foreground: hsl(0 0% 45%);\n  --accent: hsl(0 0% 96.5%);\n  --accent-foreground: hsl(0 0% 9%);\n  --destructive: hsl(0 84% 60%);\n  --destructive-foreground: hsl(0 0% 100%);\n  --border: hsl(0 0% 90%);\n  --input: hsl(0 0% 90%);\n  --ring: hsl(145 63% 42%);\n  --radius: var(--es-radius);\n\n  --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.03);\n  --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.06);\n  --shadow: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05);\n  --shadow-md: 0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.05);\n\n  --success: hsl(145 63% 42%);\n  --success-light: hsl(145 55% 96%);\n  --success-border: hsl(145 55% 88%);\n  --error: hsl(0 72% 51%);\n  --error-light: hsl(0 86% 97%);\n  --error-border: hsl(0 72% 92%);\n  --warning: hsl(38 92% 50%);\n  --warning-light: hsl(48 100% 96%);\n  --warning-border: hsl(48 96% 88%);\n  --pending: hsl(262 60% 55%);\n  --pending-light: hsl(262 55% 97%);\n  --pending-border: hsl(262 55% 90%);\n\n  --keyword-color: hsl(145 63% 32%);\n  --tag-bg: hsl(145 55% 95%);\n  --tag-color: hsl(145 63% 30%);\n  --tag-border: hsl(145 55% 85%);\n  --step-param-color: hsl(220 70% 50%);\n\n  --accordion-header-hover: hsl(0 0% 98%);\n  --accordion-content-bg: hsl(0 0% 98.5%);\n}\n\n/* Dark mode (explicit toggle). */\n[data-theme=\"dark\"] {${DARK_TOKENS}\n}\n\n/* Auto dark mode based on system preference (unless light is forced). */\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme=\"light\"]) {${DARK_TOKENS}\n  }\n}\n`;\n","import type { RunDiffResult, ScenarioDiff, ScenarioSnapshot } from \"../types/compare\";\nimport type { DocEntry, StoryStep } from \"executable-stories-core/types/story\";\n\nexport interface RunDiffMarkdownOptions {\n  title?: string;\n}\n\nfunction formatStatus(kind: ScenarioDiff[\"kind\"]): string {\n  switch (kind) {\n    case \"regressed\":\n      return \"Regressed\";\n    case \"fixed\":\n      return \"Fixed\";\n    case \"added\":\n      return \"Added\";\n    case \"removed\":\n      return \"Removed\";\n    case \"renamed\":\n      return \"Renamed\";\n    case \"moved\":\n      return \"Moved\";\n    case \"changed\":\n      return \"Changed\";\n    default:\n      return \"Unchanged\";\n  }\n}\n\nfunction formatDurationDelta(deltaMs?: number): string | null {\n  if (deltaMs === undefined || deltaMs === 0) return null;\n  return `${deltaMs > 0 ? \"+\" : \"\"}${deltaMs}ms`;\n}\n\nfunction renderScenario(lines: string[], scenario: ScenarioDiff): void {\n  const before = scenario.baseline;\n  const after = scenario.current;\n\n  lines.push(`## ${formatStatus(scenario.kind)}: ${scenario.scenario}`);\n  lines.push(\"\");\n  lines.push(`- File: \\`${scenario.sourceFile}:${scenario.sourceLine}\\``);\n  if (before && after) {\n    lines.push(`- Status: \\`${before.status}\\` -> \\`${after.status}\\``);\n  } else if (after) {\n    lines.push(`- Status: new \\`${after.status}\\``);\n  } else if (before) {\n    lines.push(`- Status: removed \\`${before.status}\\``);\n  }\n  if (scenario.changedFields.length > 0) {\n    lines.push(`- Changed: ${scenario.changedFields.map((field) => `\\`${field}\\``).join(\", \")}`);\n  }\n  const durationDelta = formatDurationDelta(scenario.durationDeltaMs);\n  if (durationDelta) {\n    lines.push(`- Duration delta: ${durationDelta}`);\n  }\n  lines.push(\"\");\n\n  if (before && after) {\n    lines.push(\"| Field | Baseline | Current |\");\n    lines.push(\"| --- | --- | --- |\");\n    lines.push(`| Scenario | ${escapeCell(before.scenario)} | ${escapeCell(after.scenario)} |`);\n    lines.push(`| Tags | ${escapeCell(before.tags.join(\", \"))} | ${escapeCell(after.tags.join(\", \"))} |`);\n    lines.push(`| Suite | ${escapeCell(before.titlePath.join(\" > \"))} | ${escapeCell(after.titlePath.join(\" > \"))} |`);\n    lines.push(`| Error | ${escapeCell(before.errorMessage ?? \"\")} | ${escapeCell(after.errorMessage ?? \"\")} |`);\n    if (scenario.flags.steps) {\n      lines.push(`| Steps | ${escapeCell(formatSteps(before.steps))} | ${escapeCell(formatSteps(after.steps))} |`);\n    }\n    if (scenario.flags.docs) {\n      lines.push(`| Docs | ${escapeCell(formatDocs(before.docs))} | ${escapeCell(formatDocs(after.docs))} |`);\n    }\n    if (scenario.flags.tickets) {\n      lines.push(`| Tickets | ${escapeCell(before.tickets.map(t => t.id).join(\", \"))} | ${escapeCell(after.tickets.map(t => t.id).join(\", \"))} |`);\n    }\n    lines.push(\"\");\n  } else {\n    const snapshot = after ?? before;\n    if (snapshot) {\n      renderSnapshotDetail(lines, snapshot);\n    }\n  }\n}\n\nfunction renderSnapshotDetail(lines: string[], snapshot: ScenarioSnapshot): void {\n  if (snapshot.tags.length > 0) {\n    lines.push(`**Tags:** ${snapshot.tags.join(\", \")}`);\n    lines.push(\"\");\n  }\n  if (snapshot.tickets.length > 0) {\n    lines.push(`**Tickets:** ${snapshot.tickets.map(t => t.id).join(\", \")}`);\n    lines.push(\"\");\n  }\n  if (snapshot.steps.length > 0) {\n    lines.push(\"**Steps:**\");\n    lines.push(\"\");\n    for (const step of snapshot.steps) {\n      lines.push(`- ${formatStep(step)}`);\n    }\n    lines.push(\"\");\n  }\n  if (snapshot.docs.length > 0) {\n    lines.push(\"**Docs:**\");\n    lines.push(\"\");\n    for (const doc of snapshot.docs) {\n      lines.push(`- ${formatDocEntry(doc)}`);\n    }\n    lines.push(\"\");\n  }\n}\n\nfunction escapeCell(value: string): string {\n  return value.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \"<br>\");\n}\n\nfunction formatStep(step: StoryStep): string {\n  let result = `**${step.keyword}** ${step.text}`;\n  if (step.mode && step.mode !== \"normal\") {\n    result += ` [${step.mode}]`;\n  }\n  if (step.docs && step.docs.length > 0) {\n    result += ` (${step.docs.map(formatDocEntry).join(\"; \")})`;\n  }\n  return result;\n}\n\nfunction formatSteps(steps: StoryStep[]): string {\n  if (steps.length === 0) return \"(none)\";\n  return steps.map(formatStep).join(\"; \");\n}\n\nfunction formatDocEntry(doc: DocEntry): string {\n  switch (doc.kind) {\n    case \"note\":\n      return doc.text;\n    case \"tag\":\n      return doc.names.join(\", \");\n    case \"kv\":\n      return `${doc.label}: ${typeof doc.value === \"object\" && doc.value !== null ? JSON.stringify(doc.value) : String(doc.value)}`;\n    case \"code\":\n      return `${doc.label}${doc.lang ? ` (${doc.lang})` : \"\"}: \\`${doc.content}\\``;\n    case \"table\":\n      return `${doc.label}: [${doc.columns.join(\", \")}] ${doc.rows.map((row) => row.join(\", \")).join(\"; \")}`;\n    case \"link\":\n      return `${doc.label}: ${doc.url}`;\n    case \"section\":\n      return `${doc.title}: ${doc.markdown}`;\n    case \"mermaid\":\n      return `${doc.title ?? \"mermaid diagram\"}: \\`${doc.code}\\``;\n    case \"screenshot\":\n      return `${doc.alt ? `${doc.alt}: ` : \"\"}${doc.path}`;\n    case \"video\":\n      return `${doc.caption ? `${doc.caption}: ` : \"\"}${doc.path}`;\n    case \"html\":\n      return `${doc.title ? `${doc.title}: ` : \"\"}${doc.url ?? doc.path ?? \"(inline html)\"}`;\n    case \"custom\":\n      return `${doc.type}: ${JSON.stringify(doc.data)}`;\n    case \"state\":\n      return `${doc.label ?? \"State\"}: ${JSON.stringify(doc.value) ?? \"null\"}`;\n  }\n}\n\nfunction formatDocs(docs: DocEntry[]): string {\n  if (docs.length === 0) return \"(none)\";\n  return docs.map(formatDocEntry).join(\"; \");\n}\n\nexport class RunDiffMarkdownFormatter {\n  private title: string;\n\n  constructor(options: RunDiffMarkdownOptions = {}) {\n    this.title = options.title ?? \"Run Comparison\";\n  }\n\n  format(diff: RunDiffResult): string {\n    const lines: string[] = [];\n\n    lines.push(`# ${this.title}`);\n    lines.push(\"\");\n    lines.push(`Baseline: \\`${new Date(diff.baseline.startedAtMs).toISOString()}\\``);\n    lines.push(`Current: \\`${new Date(diff.current.startedAtMs).toISOString()}\\``);\n    lines.push(\"\");\n    lines.push(\"## Review Priority\");\n    lines.push(\"\");\n    if (diff.summary.regressed > 0) {\n      lines.push(`Review regressions first: ${diff.summary.regressed} scenario(s) got worse.`);\n    } else if (diff.summary.fixed > 0) {\n      lines.push(`No regressions detected. Review ${diff.summary.fixed} fixed scenario(s) next.`);\n    } else {\n      lines.push(\"No regressions or fixes detected. Remaining changes are neutral.\");\n    }\n    lines.push(\"\");\n    lines.push(\"| Added | Removed | Renamed | Moved | Regressed | Fixed | Changed | Unchanged |\");\n    lines.push(\"| ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\");\n    lines.push(\n      `| ${diff.summary.added} | ${diff.summary.removed} | ${diff.summary.renamed} | ${diff.summary.moved} | ${diff.summary.regressed} | ${diff.summary.fixed} | ${diff.summary.changed} | ${diff.summary.unchanged} |`\n    );\n    lines.push(\"\");\n    if (diff.summary.notRun > 0) {\n      lines.push(\n        `Partial run: ${diff.summary.notRun} baseline scenario(s) in files this run did not cover are excluded from the diff.`\n      );\n      lines.push(\"\");\n    }\n\n    for (const kind of [\"regressed\", \"fixed\", \"added\", \"removed\", \"renamed\", \"moved\", \"changed\"] as const) {\n      const scenarios = diff.scenarios.filter((scenario) => scenario.kind === kind);\n      if (scenarios.length === 0) continue;\n      lines.push(`## ${formatStatus(kind)} (${scenarios.length})`);\n      lines.push(\"\");\n      for (const scenario of scenarios) {\n        renderScenario(lines, scenario);\n      }\n    }\n\n    return lines.join(\"\\n\").trimEnd();\n  }\n}\n","/**\n * CI environment auto-detection utility.\n *\n * Detects known CI providers from environment variables and populates\n * branch, commit SHA, PR number, build number, and URL metadata.\n *\n * Precedence (checked in order, first match wins):\n *   1. TF_BUILD=True        -> azure\n *   2. BUILDKITE=true        -> buildkite\n *   3. GITHUB_ACTIONS=true   -> github\n *   4. GITLAB_CI=true        -> gitlab\n *   5. CIRCLECI=true         -> circleci\n *   6. JENKINS_URL defined   -> jenkins\n *   7. TRAVIS=true           -> travis\n *   8. CI=true               -> unknown (generic fallback; note: fires in dev shells too)\n *   9. Nothing               -> undefined (not in CI)\n */\n\nimport type { RawCIInfo } from \"executable-stories-core/types/raw\";\n\n/**\n * Detect CI environment from process.env.\n * Returns undefined when not running in CI.\n */\nexport function detectCI(\n  env: Record<string, string | undefined> = process.env,\n): RawCIInfo | undefined {\n  // 1. Azure DevOps (TF_BUILD is \"True\" with capital T)\n  if (env.TF_BUILD === \"True\") {\n    const branch = env.BUILD_SOURCEBRANCH?.replace(/^refs\\/heads\\//, \"\");\n\n    // URL requires all three components\n    const serverUri = env.SYSTEM_TEAMFOUNDATIONSERVERURI;\n    const teamProject = env.SYSTEM_TEAMPROJECT;\n    const buildId = env.BUILD_BUILDID;\n    const url =\n      serverUri && teamProject && buildId\n        ? `${serverUri}${teamProject}/_build/results?buildId=${buildId}`\n        : undefined;\n\n    return {\n      name: \"azure\",\n      provider: \"azure\",\n      buildNumber: buildId,\n      url,\n      branch,\n      commitSha: env.BUILD_SOURCEVERSION,\n      prNumber: env.SYSTEM_PULLREQUEST_PULLREQUESTID,\n    };\n  }\n\n  // 2. Buildkite\n  if (env.BUILDKITE === \"true\") {\n    const prRaw = env.BUILDKITE_PULL_REQUEST;\n    const prNumber = prRaw && prRaw !== \"false\" ? prRaw : undefined;\n\n    return {\n      name: \"buildkite\",\n      provider: \"buildkite\",\n      buildNumber: env.BUILDKITE_BUILD_NUMBER,\n      url: env.BUILDKITE_BUILD_URL,\n      branch: env.BUILDKITE_BRANCH,\n      commitSha: env.BUILDKITE_COMMIT,\n      prNumber,\n    };\n  }\n\n  // 3. GitHub Actions\n  if (env.GITHUB_ACTIONS === \"true\") {\n    const url =\n      env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID\n        ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}`\n        : undefined;\n\n    // GITHUB_HEAD_REF is set on pull_request events; GITHUB_REF_NAME is always set\n    const branch = env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME;\n\n    // Parse PR number from GITHUB_REF: refs/pull/<n>/merge or refs/pull/<n>/head\n    const prMatch = env.GITHUB_REF?.match(/^refs\\/pull\\/(\\d+)\\/(merge|head)$/);\n    const prNumber = prMatch ? prMatch[1] : undefined;\n\n    return {\n      name: \"github\",\n      provider: \"github\",\n      buildNumber: env.GITHUB_RUN_NUMBER,\n      url,\n      branch,\n      commitSha: env.GITHUB_SHA,\n      prNumber,\n    };\n  }\n\n  // 4. GitLab CI\n  if (env.GITLAB_CI === \"true\") {\n    return {\n      name: \"gitlab\",\n      provider: \"gitlab\",\n      buildNumber: env.CI_PIPELINE_IID,\n      url: env.CI_PIPELINE_URL,\n      branch: env.CI_COMMIT_REF_NAME,\n      commitSha: env.CI_COMMIT_SHA,\n      prNumber: env.CI_MERGE_REQUEST_IID,\n    };\n  }\n\n  // 5. CircleCI\n  if (env.CIRCLECI === \"true\") {\n    // Parse PR number from trailing digits of CIRCLE_PULL_REQUEST URL\n    // e.g. https://github.com/org/repo/pull/42 -> \"42\"\n    const prUrl = env.CIRCLE_PULL_REQUEST;\n    const prMatch = prUrl?.match(/\\/(\\d+)$/);\n    const prNumber = prMatch ? prMatch[1] : undefined;\n\n    return {\n      name: \"circleci\",\n      provider: \"circleci\",\n      buildNumber: env.CIRCLE_BUILD_NUM,\n      url: env.CIRCLE_BUILD_URL,\n      branch: env.CIRCLE_BRANCH,\n      commitSha: env.CIRCLE_SHA1,\n      prNumber,\n    };\n  }\n\n  // 6. Jenkins (detected by JENKINS_URL being defined, any value)\n  if (env.JENKINS_URL !== undefined) {\n    return {\n      name: \"jenkins\",\n      provider: \"jenkins\",\n      buildNumber: env.BUILD_NUMBER,\n      url: env.BUILD_URL,\n      branch: env.GIT_BRANCH,\n      commitSha: env.GIT_COMMIT,\n    };\n  }\n\n  // 7. Travis CI\n  if (env.TRAVIS === \"true\") {\n    const prRaw = env.TRAVIS_PULL_REQUEST;\n    const prNumber = prRaw && prRaw !== \"false\" ? prRaw : undefined;\n\n    return {\n      name: \"travis\",\n      provider: \"travis\",\n      buildNumber: env.TRAVIS_BUILD_NUMBER,\n      url: env.TRAVIS_BUILD_WEB_URL,\n      branch: env.TRAVIS_BRANCH,\n      commitSha: env.TRAVIS_COMMIT,\n      prNumber,\n    };\n  }\n\n  // 8. Generic CI fallback (note: CI=true fires in many dev shells too)\n  if (env.CI === \"true\") {\n    return {\n      name: \"ci\",\n      provider: \"unknown\",\n    };\n  }\n\n  // 9. Not in CI\n  return undefined;\n}\n","/**\n * Jest Adapter - Layer 1.\n *\n * Transforms Jest test results and story reports into RawRun.\n */\n\nimport type { StoryMeta } from \"executable-stories-core/types/story\";\nimport type { RawFeature, RawRun, RawTestCase, RawStatus } from \"executable-stories-core/types/raw\";\nimport { detectCI } from \"../../utils/ci-detect\";\n\n/** Jest test result shape (subset of what Jest provides) */\nexport interface JestTestResult {\n  fullName: string;\n  status: \"passed\" | \"failed\" | \"pending\" | \"todo\";\n  duration?: number;\n  failureMessages?: string[];\n}\n\n/** Jest file result shape */\nexport interface JestFileResult {\n  testFilePath: string;\n  testResults: JestTestResult[];\n}\n\n/** Jest aggregated result shape */\nexport interface JestAggregatedResult {\n  testResults: JestFileResult[];\n  startTime?: number;\n}\n\n/** Story file report written by story.init() */\nexport interface StoryFileReport {\n  testFilePath: string;\n  scenarios: StoryMeta[];\n  /** Feature declaration from story.feature(), when the file made one. */\n  feature?: Omit<RawFeature, \"sourceFile\">;\n}\n\n/** Options for Jest adapter */\nexport interface JestAdapterOptions {\n  /** Project root directory */\n  projectRoot?: string;\n  /** Package version */\n  packageVersion?: string;\n  /** Git SHA */\n  gitSha?: string;\n}\n\n/**\n * Map Jest status to RawStatus.\n */\nfunction mapJestStatus(status: JestTestResult[\"status\"]): RawStatus {\n  switch (status) {\n    case \"passed\":\n      return \"pass\";\n    case \"failed\":\n      return \"fail\";\n    case \"pending\":\n      return \"pending\";\n    case \"todo\":\n      return \"todo\";\n    default:\n      return \"unknown\";\n  }\n}\n\n/**\n * Adapt Jest results and story reports to RawRun.\n *\n * @param jestResults - Jest aggregated results\n * @param storyReports - Story reports from story.init()\n * @param options - Adapter options\n * @returns RawRun for ACL processing\n */\nexport function adaptJestRun(\n  jestResults: JestAggregatedResult,\n  storyReports: StoryFileReport[],\n  options: JestAdapterOptions = {}\n): RawRun {\n  const testCases: RawTestCase[] = [];\n  const features: RawFeature[] = [];\n\n  // Build map of Jest results by file for lookup\n  const fileResultsMap = new Map<string, JestFileResult>();\n  for (const fileResult of jestResults.testResults) {\n    fileResultsMap.set(fileResult.testFilePath, fileResult);\n  }\n\n  // Process each story report\n  for (const report of storyReports) {\n    const fileResult = fileResultsMap.get(report.testFilePath);\n\n    if (report.feature?.title) {\n      features.push({ ...report.feature, sourceFile: report.testFilePath });\n    }\n\n    for (const meta of report.scenarios) {\n      if (!meta?.scenario) continue;\n\n      // Find matching Jest test result\n      const matchingTest = findMatchingJestTest(fileResult, meta);\n\n      testCases.push({\n        externalId: matchingTest?.fullName,\n        title: meta.scenario,\n        titlePath: meta.suitePath\n          ? [...meta.suitePath, meta.scenario]\n          : [meta.scenario],\n        story: meta,\n        sourceFile: report.testFilePath,\n        sourceLine: undefined, // Jest doesn't provide line numbers\n        status: matchingTest ? mapJestStatus(matchingTest.status) : \"unknown\",\n        durationMs: matchingTest?.duration,\n        error: matchingTest?.failureMessages?.length\n          ? { message: matchingTest.failureMessages.join(\"\\n\") }\n          : undefined,\n        stepEvents: undefined, // Jest doesn't provide step-level results\n        attachments: undefined, // Jest doesn't capture attachments\n        meta: { jestStatus: matchingTest?.status },\n        retry: 0,\n        retries: 0,\n        projectName: undefined,\n      });\n    }\n  }\n\n  return {\n    testCases,\n    ...(features.length > 0 ? { features } : {}),\n    startedAtMs: jestResults.startTime,\n    finishedAtMs: Date.now(),\n    projectRoot: options.projectRoot ?? process.cwd(),\n    packageVersion: options.packageVersion,\n    gitSha: options.gitSha,\n    ci: detectCI(),\n  };\n}\n\n/**\n * Find matching Jest test result for a story.\n *\n * Matches by constructing fullName from suitePath and scenario.\n */\nfunction findMatchingJestTest(\n  fileResult: JestFileResult | undefined,\n  meta: StoryMeta\n): JestTestResult | undefined {\n  if (!fileResult) return undefined;\n\n  // Construct expected fullName\n  const expectedFullName = meta.suitePath\n    ? [...meta.suitePath, meta.scenario].join(\" > \")\n    : meta.scenario;\n\n  return fileResult.testResults.find((test) => test.fullName === expectedFullName);\n}\n\n","/**\n * Vitest Adapter - Layer 1.\n *\n * Transforms Vitest test results into RawRun.\n */\n\nimport type { StoryMeta } from \"executable-stories-core/types/story\";\nimport type { RawRun, RawTestCase, RawStatus } from \"executable-stories-core/types/raw\";\nimport { detectCI } from \"../../utils/ci-detect\";\n\n/** Vitest test state */\nexport type VitestState = \"passed\" | \"failed\" | \"skipped\" | \"pending\";\n\n/** Vitest serialized error */\nexport interface VitestSerializedError {\n  message?: string;\n  stack?: string;\n  diff?: string;\n}\n\n/** Vitest test result shape */\nexport interface VitestTestResult {\n  state?: VitestState;\n  duration?: number;\n  errors?: VitestSerializedError[];\n}\n\n/** Vitest test case shape (minimal) */\nexport interface VitestTestCase {\n  name: string;\n  meta: () => Record<string, unknown>;\n  result: () => VitestTestResult | undefined;\n}\n\n/** Vitest test module shape (minimal) */\nexport interface VitestTestModule {\n  moduleId?: string;\n  relativeModuleId?: string;\n  children?: {\n    allTests: () => Iterable<VitestTestCase>;\n  };\n}\n\n/** Options for Vitest adapter */\nexport interface VitestAdapterOptions {\n  /** Project root directory */\n  projectRoot?: string;\n  /** Package version */\n  packageVersion?: string;\n  /** Git SHA */\n  gitSha?: string;\n  /** Start time (epoch ms) */\n  startedAtMs?: number;\n}\n\n/**\n * Map Vitest state to RawStatus.\n */\nfunction mapVitestStatus(state?: VitestState): RawStatus {\n  switch (state) {\n    case \"passed\":\n      return \"pass\";\n    case \"failed\":\n      return \"fail\";\n    case \"skipped\":\n      return \"skip\";\n    case \"pending\":\n      return \"pending\";\n    default:\n      return \"unknown\";\n  }\n}\n\n/**\n * Adapt Vitest test modules to RawRun.\n *\n * @param testModules - Vitest test modules\n * @param options - Adapter options\n * @returns RawRun for ACL processing\n */\nexport function adaptVitestRun(\n  testModules: ReadonlyArray<VitestTestModule>,\n  options: VitestAdapterOptions = {}\n): RawRun {\n  const testCases: RawTestCase[] = [];\n  const projectRoot = options.projectRoot ?? process.cwd();\n\n  for (const mod of testModules) {\n    const collection = mod.children;\n    if (!collection) continue;\n\n    // Get module path\n    const moduleId = mod.moduleId ?? mod.relativeModuleId ?? \"\";\n    const sourcePath = moduleId.startsWith(\"/\")\n      ? moduleId\n      : `${projectRoot}/${moduleId}`;\n\n    for (const test of collection.allTests()) {\n      const meta = test.meta();\n      const story = meta?.[\"story\"] as StoryMeta | undefined;\n\n      if (!story?.scenario || !Array.isArray(story.steps)) continue;\n\n      const result = test.result();\n      const state = result?.state;\n      const errors = state === \"failed\" && result ? result.errors : undefined;\n\n      testCases.push({\n        externalId: test.name,\n        title: story.scenario,\n        titlePath: story.suitePath\n          ? [...story.suitePath, story.scenario]\n          : [story.scenario],\n        story,\n        sourceFile: sourcePath,\n        sourceLine: undefined, // Vitest doesn't provide line numbers easily\n        status: mapVitestStatus(state),\n        durationMs: result?.duration,\n        error: errors?.length\n          ? {\n              message: formatVitestError(errors[0]),\n              stack: errors[0].stack,\n            }\n          : undefined,\n        stepEvents: undefined, // Vitest doesn't provide step-level results\n        attachments: undefined, // Vitest doesn't capture attachments\n        meta: { vitestState: state },\n        retry: 0,\n        retries: 0,\n        projectName: undefined,\n      });\n    }\n  }\n\n  return {\n    testCases,\n    startedAtMs: options.startedAtMs,\n    finishedAtMs: Date.now(),\n    projectRoot,\n    packageVersion: options.packageVersion,\n    gitSha: options.gitSha,\n    ci: detectCI(),\n  };\n}\n\n/**\n * Format Vitest error message.\n */\nfunction formatVitestError(error: VitestSerializedError): string {\n  const parts: string[] = [];\n\n  if (error.message) {\n    parts.push(error.message);\n  }\n\n  if (error.diff) {\n    parts.push(\"\", error.diff);\n  }\n\n  return parts.join(\"\\n\") || \"Unknown error\";\n}\n\n","/**\n * Playwright Adapter - Layer 1.\n *\n * Transforms Playwright test results into RawRun.\n */\n\nimport type { StoryMeta } from \"executable-stories-core/types/story\";\nimport type { RawFeature, RawRun, RawTestCase, RawStatus, RawAttachment } from \"executable-stories-core/types/raw\";\nimport { detectCI } from \"../../utils/ci-detect\";\n\n/** Playwright test status */\nexport type PlaywrightStatus =\n  | \"passed\"\n  | \"failed\"\n  | \"skipped\"\n  | \"timedOut\"\n  | \"interrupted\";\n\n/** Playwright test error */\nexport interface PlaywrightError {\n  message?: string;\n  stack?: string;\n}\n\n/** Playwright attachment */\nexport interface PlaywrightAttachment {\n  name: string;\n  contentType: string;\n  path?: string;\n  body?: Buffer;\n}\n\n/** Playwright test result */\nexport interface PlaywrightTestResult {\n  status: PlaywrightStatus;\n  duration: number;\n  errors: PlaywrightError[];\n  attachments: PlaywrightAttachment[];\n  retry: number;\n  /** Optional step events if caller captures Playwright step timing. */\n  stepEvents?: Array<{\n    index?: number;\n    stepId?: string;\n    title?: string;\n    status?: RawStatus;\n    durationMs?: number;\n    errorMessage?: string;\n  }>;\n}\n\n/** Playwright test case annotation */\nexport interface PlaywrightAnnotation {\n  type: string;\n  description?: string;\n}\n\n/** Playwright test location */\nexport interface PlaywrightLocation {\n  file: string;\n  line: number;\n  column: number;\n}\n\n/** Playwright test case shape (minimal) */\nexport interface PlaywrightTestCase {\n  title: string;\n  titlePath: () => string[];\n  annotations: PlaywrightAnnotation[];\n  location: PlaywrightLocation;\n  retries: number;\n}\n\n/** Options for Playwright adapter */\nexport interface PlaywrightAdapterOptions {\n  /** Project root directory */\n  projectRoot?: string;\n  /** Package version */\n  packageVersion?: string;\n  /** Git SHA */\n  gitSha?: string;\n  /** Start time (epoch ms) */\n  startedAtMs?: number;\n  /** Playwright project name */\n  projectName?: string;\n}\n\n/**\n * Map Playwright status to RawStatus.\n */\nfunction mapPlaywrightStatus(status: PlaywrightStatus): RawStatus {\n  switch (status) {\n    case \"passed\":\n      return \"pass\";\n    case \"failed\":\n      return \"fail\";\n    case \"skipped\":\n      return \"skip\";\n    case \"timedOut\":\n      return \"timeout\";\n    case \"interrupted\":\n      return \"interrupted\";\n    default:\n      return \"unknown\";\n  }\n}\n\n/**\n * Adapt Playwright test results to RawRun.\n *\n * @param testResults - Array of [testCase, result] tuples\n * @param options - Adapter options\n * @returns RawRun for ACL processing\n */\nexport function adaptPlaywrightRun(\n  testResults: Array<[PlaywrightTestCase, PlaywrightTestResult]>,\n  options: PlaywrightAdapterOptions = {}\n): RawRun {\n  const testCases: RawTestCase[] = [];\n  const featuresByFile = new Map<string, RawFeature>();\n  const projectRoot = options.projectRoot ?? process.cwd();\n\n  for (const [test, result] of testResults) {\n    // Find story-meta annotation\n    const storyAnnotation = test.annotations.find((a) => a.type === \"story-meta\");\n    if (!storyAnnotation?.description) continue;\n\n    const featureAnnotation = test.annotations.find((a) => a.type === \"story-feature\");\n    if (featureAnnotation?.description && !featuresByFile.has(test.location.file)) {\n      try {\n        const declared = JSON.parse(featureAnnotation.description) as RawFeature;\n        if (declared?.title) {\n          featuresByFile.set(test.location.file, { ...declared, sourceFile: test.location.file });\n        }\n      } catch {\n        // A malformed annotation should not lose the run's test cases.\n      }\n    }\n\n    let story: StoryMeta;\n    try {\n      story = JSON.parse(storyAnnotation.description);\n    } catch {\n      continue; // Skip if annotation is not valid JSON\n    }\n\n    if (!story?.scenario || !Array.isArray(story.steps)) continue;\n\n    // Convert attachments\n    const attachments = convertAttachments(result.attachments);\n\n    // Get error info\n    const error = result.errors?.length\n      ? {\n          message: result.errors[0].message,\n          stack: result.errors[0].stack,\n        }\n      : undefined;\n\n    const stepEvents =\n      result.stepEvents?.length\n        ? result.stepEvents\n        : story.steps\n            .map((step, index) =>\n              step.durationMs !== undefined\n                ? {\n                    index,\n                    stepId: step.id,\n                    title: step.text,\n                    durationMs: step.durationMs,\n                  }\n                : undefined,\n            )\n            .filter((e): e is NonNullable<typeof e> => e !== undefined);\n\n    testCases.push({\n      externalId: test.titlePath().join(\" > \"),\n      title: story.scenario,\n      titlePath: test.titlePath(),\n      story,\n      sourceFile: test.location.file,\n      sourceLine: test.location.line,\n      status: mapPlaywrightStatus(result.status),\n      durationMs: result.duration,\n      error,\n      stepEvents: stepEvents.length > 0 ? stepEvents : undefined,\n      attachments,\n      meta: {\n        playwrightStatus: result.status,\n        column: test.location.column,\n      },\n      retry: result.retry,\n      retries: test.retries,\n      projectName: options.projectName,\n    });\n  }\n\n  return {\n    testCases,\n    ...(featuresByFile.size > 0 ? { features: [...featuresByFile.values()] } : {}),\n    startedAtMs: options.startedAtMs,\n    finishedAtMs: Date.now(),\n    projectRoot,\n    packageVersion: options.packageVersion,\n    gitSha: options.gitSha,\n    ci: detectCI(),\n  };\n}\n\n/**\n * Convert Playwright attachments to raw attachments.\n */\nfunction convertAttachments(\n  attachments: PlaywrightAttachment[]\n): RawAttachment[] {\n  return attachments.map((att) => ({\n    name: att.name,\n    mediaType: att.contentType,\n    path: att.path,\n    body: att.body ? att.body.toString(\"base64\") : undefined,\n    encoding: att.body ? \"BASE64\" as const : undefined,\n    byteLength: att.body?.length,\n  }));\n}\n","/**\n * Provider-agnostic sync engine.\n *\n * Everything that is not a vendor API call lives here: projecting stories into\n * case bodies, binding them to remote cases, classifying what the provider\n * holds, building the plan, and applying it. Adapters stay thin.\n *\n * Two phases, deliberately separate so `--dry-run` and a real run share one code\n * path: {@link analyzeSync} reads and decides, {@link applySync} writes.\n *\n * fn(args, deps) throughout.\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport { behaviourFingerprint, behaviourSimilarity } from \"executable-stories-core/converters/acl/ids\";\nimport type { TestCaseResult, TestRunResult, Attachment } from \"executable-stories-core/types/test-result\";\nimport type { DocEntry } from \"executable-stories-core/types/story\";\n\nimport type {\n  CaseBody,\n  CaseResult,\n  RemoteCase,\n  ResultAttachment,\n  SyncProvider,\n} from \"./port\";\nimport {\n  entriesFor,\n  hashCaseBody,\n  setEntry,\n  type Lockfile,\n  type LockEntry,\n} from \"./lockfile\";\n\n/** Which executions get their evidence uploaded. */\nexport type AttachPolicy = \"failed\" | \"all\" | \"none\";\n\nexport interface SyncEngineConfig {\n  /**\n   * Ticket-id prefix that marks a `story.tickets` entry as this provider's case\n   * id (TestRail's \"C1234\"). Without it, only the lockfile binds.\n   */\n  ticketPrefix?: string;\n  /**\n   * Whether the prefix is decoration to strip (\"C1234\" -> \"1234\", TestRail) or\n   * part of the id itself (\"PROJ-42\" stays whole, Xray/Jira). Default true.\n   */\n  ticketPrefixStrip?: boolean;\n  /** Base URL of the published HTML report, used for links back from cases. */\n  reportUrl?: string;\n  /**\n   * Turns a scenario into the fragment appended to `reportUrl`, for a link that\n   * lands on the scenario rather than the top of the page.\n   *\n   * Caller-supplied for the same reason the markdown formatter's option is\n   * (`types/options.ts`): the correct slug depends on how the docs site routes,\n   * and guessing it produces links that 404. Without it, cases link to the\n   * report page itself.\n   */\n  scenarioAnchor?: (tc: TestCaseResult) => string | undefined;\n  /** Default \"failed\": nobody watches a passing test's video, and quotas are real. */\n  attach?: AttachPolicy;\n  /** Similarity at or above which an unlinked case is flagged as a possible duplicate. */\n  duplicateThreshold?: number;\n}\n\n/** A story, ready to be a case. */\nexport interface LocalBehaviour {\n  fingerprint: string;\n  testCase: TestCaseResult;\n  body: CaseBody;\n}\n\nexport type CoverageClass = \"automated\" | \"duplicated\" | \"possible-duplicate\" | \"manual-only\";\n\nexport interface ClassifiedCase {\n  case: RemoteCase;\n  classification: CoverageClass;\n  /** Scenario title this case resembles or duplicates, when one was found. */\n  resembles?: string;\n  /** 0..1, present for \"possible-duplicate\". */\n  similarity?: number;\n}\n\nexport interface PlanCreate {\n  fingerprint: string;\n  scenario: string;\n  body: CaseBody;\n}\n\nexport interface PlanUpdate {\n  fingerprint: string;\n  caseId: string;\n  url: string;\n  scenario: string;\n  body: CaseBody;\n}\n\nexport interface PlanSkip {\n  fingerprint: string;\n  caseId: string;\n  url: string;\n  title: string;\n  reason: \"remote-edited\" | \"case-missing\";\n}\n\nexport interface PlanOrphan {\n  fingerprint: string;\n  caseId: string;\n  url: string;\n  title: string;\n}\n\nexport interface AttachmentSummary {\n  files: number;\n  bytes: number;\n  oversized: Array<{ filename: string; bytes: number; limit: number }>;\n  byRole: Record<string, number>;\n}\n\nexport interface SyncAnalysis {\n  provider: string;\n  target?: string;\n  local: LocalBehaviour[];\n  remote: ClassifiedCase[];\n  create: PlanCreate[];\n  update: PlanUpdate[];\n  unchanged: PlanUpdate[];\n  /** Human-authored cases bound via `story.tickets`. Executions only, body untouched. */\n  adopted: PlanUpdate[];\n  skipped: PlanSkip[];\n  orphaned: PlanOrphan[];\n  /** Results for behaviours already bound. Newly created cases add theirs at apply time. */\n  results: CaseResult[];\n  attachments: AttachmentSummary;\n  /** Capabilities this provider lacks that the plan would otherwise use. */\n  unsupported: string[];\n  /**\n   * Bound cases the provider would not hand back a body for, so a human edit to\n   * them cannot be detected. Reported rather than assumed safe.\n   */\n  driftUncheckable: number;\n  /** Set when the orphan count suggests the run was filtered rather than complete. */\n  partialRunWarning?: string;\n}\n\nexport interface SyncApplyResult {\n  created: Array<{ scenario: string; caseId: string; url: string }>;\n  updated: Array<{ scenario: string; caseId: string; url: string }>;\n  resultsRecorded: number;\n  resultsSkipped: Array<{ caseId: string; reason: string }>;\n  attachmentsUploaded: number;\n  runUrl?: string;\n  errors: string[];\n}\n\n/**\n * `behaviourSimilarity` weights steps at 0.7 and the title at 0.3, so two cases\n * with byte-identical steps and unrelated titles score exactly 0.7. That is the\n * floor worth surfacing: identical steps is the strongest duplicate signal there\n * is, and a stricter default hid it behind a reworded title.\n *\n * Sensitivity is the right bias here because this label never binds anything. A\n * false flag costs a reviewer a few seconds; a missed one leaves a manual case\n * nobody ever retires, which is the cost this whole report exists to remove.\n */\nconst DEFAULT_DUPLICATE_THRESHOLD = 0.7;\n/** Above this share of bindings orphaning at once, assume a filtered run, not deletions. */\nconst PARTIAL_RUN_ORPHAN_RATIO = 0.25;\n\n// --- projection -------------------------------------------------------------\n\nfunction normalizeTitle(text: string): string {\n  return text\n    .toLowerCase()\n    .replace(/[^\\p{L}\\p{N}\\s]/gu, \" \")\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\n/** Render doc entries to markdown-ish plain text. Adapters convert to their own markup. */\nexport function renderDocs(docs: readonly DocEntry[] | undefined, depth = 0): string {\n  if (!docs || docs.length === 0) return \"\";\n  const lines: string[] = [];\n\n  for (const doc of docs) {\n    switch (doc.kind) {\n      case \"note\":\n        lines.push(doc.text);\n        break;\n      case \"kv\":\n        lines.push(`**${doc.label}:** ${formatValue(doc.value)}`);\n        break;\n      case \"state\":\n        lines.push(`**${doc.label ?? \"State\"}:** ${formatValue(doc.value)}`);\n        break;\n      case \"code\":\n        lines.push(`**${doc.label}**`, \"\", \"```\" + (doc.lang ?? \"\"), doc.content, \"```\");\n        break;\n      case \"table\":\n        lines.push(\n          `**${doc.label}**`,\n          \"\",\n          `| ${doc.columns.join(\" | \")} |`,\n          `| ${doc.columns.map(() => \"---\").join(\" | \")} |`,\n          ...doc.rows.map((row) => `| ${row.join(\" | \")} |`),\n        );\n        break;\n      case \"link\":\n        lines.push(`[${doc.label}](${doc.url})`);\n        break;\n      case \"section\":\n        lines.push(`${\"#\".repeat(Math.min(6, depth + 3))} ${doc.title}`, \"\", doc.markdown);\n        break;\n      case \"mermaid\":\n        lines.push(...(doc.title ? [`**${doc.title}**`, \"\"] : []), \"```mermaid\", doc.code, \"```\");\n        break;\n      case \"screenshot\":\n        lines.push(`_Screenshot: ${doc.alt ?? doc.path}_`);\n        break;\n      case \"video\":\n        lines.push(`_Video: ${doc.caption ?? doc.path}_`);\n        break;\n      case \"html\":\n        lines.push(`_Embedded: ${doc.title ?? doc.url ?? doc.path ?? \"html\"}_`);\n        break;\n      case \"custom\":\n        lines.push(`_${doc.type}_: ${formatValue(doc.data)}`);\n        break;\n      case \"tag\":\n        // Tags reach the case through their own field, not the description.\n        break;\n\n      default:\n        assertNever(doc, \"Sync description: unhandled doc kind\");\n    }\n\n    const children = renderDocs(doc.children, depth + 1);\n    if (children) lines.push(children);\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction formatValue(value: unknown): string {\n  if (typeof value === \"string\") return value;\n  return JSON.stringify(value);\n}\n\n/** Link into the published report, deep-linked when an anchor function is supplied. */\nfunction scenarioUrl(config: SyncEngineConfig, tc: TestCaseResult): string | undefined {\n  if (!config.reportUrl) return undefined;\n  const base = config.reportUrl.replace(/\\/$/, \"\");\n  const anchor = config.scenarioAnchor?.(tc);\n  return anchor ? `${base}#${anchor}` : base;\n}\n\n/** Project one canonical test case into provider-neutral case content. */\nexport function toCaseBody(tc: TestCaseResult, config: SyncEngineConfig): CaseBody {\n  const sections: string[] = [];\n\n  const docs = renderDocs(tc.story.docs);\n  if (docs) sections.push(docs);\n\n  const tickets = tc.story.tickets ?? [];\n  if (tickets.length > 0) {\n    sections.push(\n      `**Requirements:** ${tickets.map((t) => (t.url ? `[${t.id}](${t.url})` : t.id)).join(\", \")}`,\n    );\n  }\n  if (tc.story.covers?.length) {\n    sections.push(`**Covers:** ${tc.story.covers.join(\", \")}`);\n  }\n  sections.push(`_Generated from ${tc.sourceFile}:${tc.sourceLine} by executable-stories. Edit the test, not this case._`);\n\n  const links: Array<{ label: string; url: string }> = [];\n  const report = scenarioUrl(config, tc);\n  if (report) links.push({ label: \"Living documentation\", url: report });\n  for (const ticket of tickets) {\n    if (ticket.url) links.push({ label: ticket.id, url: ticket.url });\n  }\n\n  return {\n    title: tc.story.scenario,\n    steps: tc.story.steps.map((s) => ({ keyword: s.keyword, text: s.text })),\n    description: sections.join(\"\\n\\n\"),\n    links,\n  };\n}\n\n/**\n * Project a run into fingerprinted behaviours.\n *\n * `behaviourFingerprint` returns \"\" for a scenario with no steps and no\n * `covers`, and two scenarios with identical steps collide. Both fall back to\n * the canonical test-case id, which is unique within a run — less\n * rename-resilient, but a stable binding beats a shared one.\n */\nexport function projectBehaviours(\n  run: TestRunResult,\n  config: SyncEngineConfig,\n): LocalBehaviour[] {\n  const fingerprints = run.testCases.map((tc) =>\n    behaviourFingerprint({\n      scenario: tc.story.scenario,\n      sourceFile: tc.sourceFile,\n      steps: tc.story.steps.map((s) => ({ keyword: s.keyword, text: s.text })),\n      covers: tc.story.covers,\n    }),\n  );\n\n  const counts = new Map<string, number>();\n  for (const fp of fingerprints) {\n    if (fp) counts.set(fp, (counts.get(fp) ?? 0) + 1);\n  }\n\n  return run.testCases.map((tc, index) => {\n    const fp = fingerprints[index]!;\n    const unique = fp !== \"\" && counts.get(fp) === 1;\n    return {\n      fingerprint: unique ? fp : tc.id,\n      testCase: tc,\n      body: toCaseBody(tc, config),\n    };\n  });\n}\n\n// --- attachments ------------------------------------------------------------\n\nfunction roleFor(attachment: Attachment): ResultAttachment[\"role\"] {\n  const type = attachment.mediaType.toLowerCase();\n  if (type.startsWith(\"image/\")) return \"screenshot\";\n  if (type.startsWith(\"video/\")) return \"video\";\n  if (attachment.name.toLowerCase().includes(\"trace\")) return \"trace\";\n  return \"log\";\n}\n\nfunction decode(attachment: Attachment): Uint8Array {\n  return attachment.contentEncoding === \"BASE64\"\n    ? Uint8Array.from(Buffer.from(attachment.body, \"base64\"))\n    : new TextEncoder().encode(attachment.body);\n}\n\n/** Attachments for one test, filtered by policy and the provider's size limit. */\nexport function collectAttachments(\n  args: { testCase: TestCaseResult; policy: AttachPolicy; maxBytes?: number },\n): { attachments: ResultAttachment[]; oversized: Array<{ filename: string; bytes: number; limit: number }> } {\n  const { testCase, policy, maxBytes } = args;\n  if (policy === \"none\") return { attachments: [], oversized: [] };\n  if (policy === \"failed\" && testCase.status !== \"failed\") return { attachments: [], oversized: [] };\n\n  const attachments: ResultAttachment[] = [];\n  const oversized: Array<{ filename: string; bytes: number; limit: number }> = [];\n\n  for (const raw of testCase.attachments) {\n    const body = decode(raw);\n    if (maxBytes !== undefined && body.byteLength > maxBytes) {\n      oversized.push({ filename: raw.name, bytes: body.byteLength, limit: maxBytes });\n      continue;\n    }\n    attachments.push({\n      filename: raw.name,\n      mediaType: raw.mediaType,\n      body,\n      role: roleFor(raw),\n    });\n  }\n\n  return { attachments, oversized };\n}\n\nfunction toCaseResult(\n  args: { behaviour: LocalBehaviour; caseId: string; provider: SyncProvider; config: SyncEngineConfig },\n): { result: CaseResult; oversized: Array<{ filename: string; bytes: number; limit: number }> } | undefined {\n  const { behaviour, caseId, provider, config } = args;\n  const tc = behaviour.testCase;\n  // \"pending\" is a planned scenario (it.todo) — no execution happened, so there\n  // is nothing to record. Reporting it as skipped would misrepresent a spec as a\n  // test that ran and was ignored.\n  if (tc.status === \"pending\") return undefined;\n\n  const { attachments, oversized } = collectAttachments({\n    testCase: tc,\n    policy: config.attach ?? \"failed\",\n    maxBytes: provider.maxAttachmentBytes,\n  });\n\n  return {\n    result: {\n      caseId,\n      status: tc.status,\n      durationMs: tc.durationMs,\n      message: tc.errorMessage,\n      url: scenarioUrl(config, tc),\n      attachments: attachments.length > 0 ? attachments : undefined,\n    },\n    oversized,\n  };\n}\n\n// --- binding and classification ---------------------------------------------\n\n/** Case id carried on the story itself, e.g. `story.tickets` holding \"C1234\". */\nfunction ticketBinding(tc: TestCaseResult, config: SyncEngineConfig): string | undefined {\n  const prefix = config.ticketPrefix;\n  if (!prefix) return undefined;\n  const match = (tc.story.tickets ?? []).find((t) => t.id.startsWith(prefix));\n  if (!match) return undefined;\n  return config.ticketPrefixStrip === false ? match.id : match.id.slice(prefix.length);\n}\n\n// --- analysis ---------------------------------------------------------------\n\nexport interface AnalyzeSyncArgs {\n  run: TestRunResult;\n  provider: SyncProvider;\n  lockfile: Lockfile;\n  config: SyncEngineConfig;\n}\n\nexport async function analyzeSync(args: AnalyzeSyncArgs): Promise<SyncAnalysis> {\n  const { run, provider, lockfile, config } = args;\n\n  const local = projectBehaviours(run, config);\n  const remoteCases = await provider.listCases();\n  const remoteById = new Map(remoteCases.map((c) => [c.id, c]));\n  const locked = entriesFor(lockfile, provider.name);\n\n  const create: PlanCreate[] = [];\n  const update: PlanUpdate[] = [];\n  const unchanged: PlanUpdate[] = [];\n  const adopted: PlanUpdate[] = [];\n  const skipped: PlanSkip[] = [];\n  const results: CaseResult[] = [];\n  const oversized: AttachmentSummary[\"oversized\"] = [];\n  const boundCaseIds = new Set<string>();\n  let driftUncheckable = 0;\n\n  for (const behaviour of local) {\n    const entry = locked[behaviour.fingerprint];\n    const caseId = entry?.caseId ?? ticketBinding(behaviour.testCase, config);\n    const remote = caseId ? remoteById.get(caseId) : undefined;\n\n    if (!caseId) {\n      create.push({\n        fingerprint: behaviour.fingerprint,\n        scenario: behaviour.body.title,\n        body: behaviour.body,\n      });\n      continue;\n    }\n\n    if (!remote) {\n      // Bound to a case that is gone. Never silently re-create: someone deleted\n      // it on purpose, or the config points at the wrong project.\n      skipped.push({\n        fingerprint: behaviour.fingerprint,\n        caseId,\n        url: entry?.url ?? \"\",\n        title: entry?.title ?? behaviour.body.title,\n        reason: \"case-missing\",\n      });\n      continue;\n    }\n\n    boundCaseIds.add(caseId);\n\n    const pending = toCaseResult({ behaviour, caseId, provider, config });\n    if (pending) {\n      results.push(pending.result);\n      oversized.push(...pending.oversized);\n    }\n\n    const planned: PlanUpdate = {\n      fingerprint: behaviour.fingerprint,\n      caseId,\n      url: remote.url,\n      scenario: behaviour.body.title,\n      body: behaviour.body,\n    };\n\n    // Reached through a story ticket rather than a case we created: a human owns\n    // this body. Record the binding, push executions against it, leave the\n    // content alone.\n    if (!entry?.owned) {\n      adopted.push(planned);\n      continue;\n    }\n\n    // Drift guard: compare the provider's current copy against the hash of what\n    // it held right after our last write. Different means a human edited it.\n    const remoteHash = remote.body ? hashCaseBody(remote.body) : undefined;\n    if (remoteHash !== undefined && remoteHash !== entry.hash) {\n      skipped.push({\n        fingerprint: behaviour.fingerprint,\n        caseId,\n        url: remote.url,\n        title: remote.title,\n        reason: \"remote-edited\",\n      });\n      continue;\n    }\n\n    // A provider that cannot hand back a case body leaves nothing to compare\n    // against, so fall back to the stored hash: equal means nothing has changed\n    // on our side since the last write either, and re-sending an identical body\n    // every run would bury the real changes in a plan nobody reads. It cannot\n    // detect a human edit — only the provider's own copy can do that — so the\n    // plan says so rather than implying a guarantee it is not making.\n    const baseline = remoteHash ?? entry.hash;\n    if (baseline !== \"\" && hashCaseBody(behaviour.body) === baseline) {\n      unchanged.push(planned);\n    } else {\n      update.push(planned);\n    }\n    if (remoteHash === undefined) driftUncheckable += 1;\n  }\n\n  // Classify everything the provider holds that no story claims.\n  const byNormalizedTitle = new Map<string, LocalBehaviour>();\n  for (const behaviour of local) byNormalizedTitle.set(normalizeTitle(behaviour.body.title), behaviour);\n  const threshold = config.duplicateThreshold ?? DEFAULT_DUPLICATE_THRESHOLD;\n\n  const remote: ClassifiedCase[] = remoteCases.map((remoteCase) => {\n    if (boundCaseIds.has(remoteCase.id)) {\n      return { case: remoteCase, classification: \"automated\" as const };\n    }\n\n    const titleMatch = byNormalizedTitle.get(normalizeTitle(remoteCase.title));\n    if (titleMatch) {\n      return {\n        case: remoteCase,\n        classification: \"duplicated\" as const,\n        resembles: titleMatch.body.title,\n      };\n    }\n\n    // Similarity only ever labels. It never binds: auto-linking on a guess is\n    // how these tools corrupt someone's instance.\n    if (remoteCase.body && remoteCase.body.steps.length > 0) {\n      let best: { behaviour: LocalBehaviour; score: number } | undefined;\n      for (const behaviour of local) {\n        const score = behaviourSimilarity(\n          {\n            scenario: remoteCase.title,\n            sourceFile: \"\",\n            steps: remoteCase.body.steps,\n          },\n          {\n            scenario: behaviour.body.title,\n            sourceFile: behaviour.testCase.sourceFile,\n            steps: behaviour.body.steps,\n          },\n        );\n        if (!best || score > best.score) best = { behaviour, score };\n      }\n      if (best && best.score >= threshold) {\n        return {\n          case: remoteCase,\n          classification: \"possible-duplicate\" as const,\n          resembles: best.behaviour.body.title,\n          similarity: Number(best.score.toFixed(2)),\n        };\n      }\n    }\n\n    return { case: remoteCase, classification: \"manual-only\" as const };\n  });\n\n  // Orphans: bindings whose behaviour no longer exists in the codebase.\n  const localFingerprints = new Set(local.map((b) => b.fingerprint));\n  const orphaned: PlanOrphan[] = Object.entries(locked)\n    .filter(([fingerprint]) => !localFingerprints.has(fingerprint))\n    .map(([fingerprint, entry]) => ({\n      fingerprint,\n      caseId: entry.caseId,\n      url: entry.url,\n      title: entry.title,\n    }));\n\n  const lockedCount = Object.keys(locked).length;\n  const partialRunWarning =\n    lockedCount > 0 && orphaned.length / lockedCount > PARTIAL_RUN_ORPHAN_RATIO\n      ? `${orphaned.length} of ${lockedCount} bindings have no matching story. If this run was filtered (a -t/--grep flag, a single file), those are not deletions. Nothing is removed either way.`\n      : undefined;\n\n  const unsupported: string[] = [];\n  if (create.length > 0 && !provider.createCase) unsupported.push(\"createCase\");\n  if (update.length > 0 && !provider.updateCase) unsupported.push(\"updateCase\");\n  if (results.length > 0 && !provider.recordResults) unsupported.push(\"recordResults\");\n\n  const byRole: Record<string, number> = {};\n  let files = 0;\n  let bytes = 0;\n  for (const result of results) {\n    for (const attachment of result.attachments ?? []) {\n      files += 1;\n      bytes += attachment.body.byteLength;\n      const role = attachment.role ?? \"log\";\n      byRole[role] = (byRole[role] ?? 0) + 1;\n    }\n  }\n\n  return {\n    provider: provider.name,\n    target: provider.describeTarget?.(),\n    local,\n    remote,\n    create,\n    update,\n    unchanged,\n    adopted,\n    skipped,\n    orphaned,\n    results,\n    attachments: { files, bytes, oversized, byRole },\n    unsupported,\n    driftUncheckable,\n    partialRunWarning,\n  };\n}\n\n// --- apply ------------------------------------------------------------------\n\nexport interface ApplySyncArgs {\n  analysis: SyncAnalysis;\n  provider: SyncProvider;\n  lockfile: Lockfile;\n  config: SyncEngineConfig;\n}\n\nexport interface ApplySyncDeps {\n  logger: { warn(msg: string): void };\n}\n\n/**\n * Execute the plan. Mutates the passed lockfile so the caller can persist it\n * even when a later stage fails — a created case whose binding was lost would\n * be re-created on the next run, which is the one duplicate we can actually\n * cause.\n */\nexport async function applySync(\n  args: ApplySyncArgs,\n  deps: ApplySyncDeps,\n): Promise<SyncApplyResult> {\n  const { analysis, provider, lockfile, config } = args;\n\n  const result: SyncApplyResult = {\n    created: [],\n    updated: [],\n    resultsRecorded: 0,\n    resultsSkipped: [],\n    attachmentsUploaded: 0,\n    errors: [],\n  };\n\n  const byFingerprint = new Map(analysis.local.map((b) => [b.fingerprint, b]));\n  const results = [...analysis.results];\n\n  if (analysis.create.length > 0 && provider.createCase) {\n    for (const planned of analysis.create) {\n      try {\n        // Sequential on purpose. Providers rate-limit case creation hard, and a\n        // case created twice cannot be undone from here — there is no id to\n        // delete, because the duplicate is the one we failed to record.\n        const created = await provider.createCase(planned.body);\n        setEntry(lockfile, provider.name, planned.fingerprint, {\n          caseId: created.id,\n          url: created.url,\n          hash: hashCaseBody(created.body ?? planned.body),\n          title: created.title,\n          owned: true,\n        });\n        result.created.push({ scenario: planned.scenario, caseId: created.id, url: created.url });\n\n        const behaviour = byFingerprint.get(planned.fingerprint);\n        if (behaviour) {\n          const pending = toCaseResult({ behaviour, caseId: created.id, provider, config });\n          if (pending) results.push(pending.result);\n        }\n      } catch (err) {\n        result.errors.push(`create \"${planned.scenario}\": ${(err as Error).message}`);\n      }\n    }\n  }\n\n  if (analysis.update.length > 0 && provider.updateCase) {\n    for (const planned of analysis.update) {\n      try {\n        const updated = await provider.updateCase(planned.caseId, planned.body);\n        setEntry(lockfile, provider.name, planned.fingerprint, {\n          caseId: updated.id,\n          url: updated.url,\n          hash: hashCaseBody(updated.body ?? planned.body),\n          title: updated.title,\n          owned: true,\n        });\n        result.updated.push({ scenario: planned.scenario, caseId: updated.id, url: updated.url });\n      } catch (err) {\n        result.errors.push(`update \"${planned.scenario}\" (${planned.caseId}): ${(err as Error).message}`);\n      }\n    }\n  }\n\n  // Keep unchanged bindings' urls fresh without disturbing ownership or the\n  // stored hash the drift guard compares against.\n  for (const planned of analysis.unchanged) {\n    const existing: LockEntry | undefined = entriesFor(lockfile, provider.name)[planned.fingerprint];\n    if (existing) {\n      setEntry(lockfile, provider.name, planned.fingerprint, { ...existing, url: planned.url });\n    }\n  }\n\n  // Record ticket-bound cases so the binding survives a ticket id being removed\n  // from the test later. `hash` stays empty: we did not write this body and must\n  // never be tempted to compare against it.\n  for (const planned of analysis.adopted) {\n    setEntry(lockfile, provider.name, planned.fingerprint, {\n      caseId: planned.caseId,\n      url: planned.url,\n      hash: \"\",\n      title: planned.scenario,\n      owned: false,\n    });\n  }\n\n  if (results.length > 0 && provider.recordResults) {\n    try {\n      const summary = await provider.recordResults(results);\n      result.resultsRecorded = summary.recorded;\n      result.resultsSkipped = summary.skipped;\n      result.attachmentsUploaded = summary.attachmentsUploaded;\n      result.runUrl = summary.runUrl;\n    } catch (err) {\n      result.errors.push(`record results: ${(err as Error).message}`);\n    }\n  } else if (results.length > 0) {\n    deps.logger.warn(\n      `${provider.name} does not support recording results — ${results.length} execution(s) not pushed.`,\n    );\n  }\n\n  return result;\n}\n","/**\n * The sync lockfile: the binding between a behaviour in the codebase and a case\n * in someone else's system.\n *\n * Committed to the repo on purpose. When CI creates a case, the lockfile diff\n * shows up in the pull request that caused it, so a reviewer sees the new case\n * and its link before it lands anywhere else.\n *\n * Keyed on `behaviourFingerprint` (content-derived) rather than the canonical\n * test-case id (`sha1(sourceFile::scenario)`), which changes the moment someone\n * renames a test or moves a file. Keying on the volatile id would orphan every\n * case on the first rename, which is exactly how these integrations lose trust.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\nimport type { CaseBody } from \"./port\";\n\nexport const DEFAULT_LOCKFILE_PATH = \".executable-stories/sync.lock.json\";\n\nconst LOCKFILE_VERSION = 1;\n\n/** One behaviour-to-case binding. */\nexport interface LockEntry {\n  /** Provider-native case id. */\n  caseId: string;\n  url: string;\n  /**\n   * Hash of the provider's normalized copy as of our last write. A mismatch on\n   * the next run means a human edited the case in the provider's UI.\n   */\n  hash: string;\n  /** Last known title, so orphan reports are readable without a remote lookup. */\n  title: string;\n  /**\n   * True only for cases this tool created.\n   *\n   * A case reached through a `story.tickets` id was authored by a human, so we\n   * push executions against it and never touch its body. Without this flag the\n   * first sync would silently overwrite hand-written cases, which is the single\n   * fastest way to lose a QA team.\n   */\n  owned: boolean;\n}\n\nexport interface Lockfile {\n  version: number;\n  /** provider name -> behaviour fingerprint -> entry */\n  providers: Record<string, Record<string, LockEntry>>;\n}\n\nexport function emptyLockfile(): Lockfile {\n  return { version: LOCKFILE_VERSION, providers: {} };\n}\n\n/**\n * Hash provider-normalized case content.\n *\n * Deliberately excludes `links`: those embed report URLs that change with every\n * CI run (build number, artifact host), and treating that churn as a human edit\n * would make the drift guard fire constantly and get switched off.\n */\nexport function hashCaseBody(body: CaseBody): string {\n  const canonical = JSON.stringify({\n    title: body.title.trim(),\n    steps: body.steps.map((s) => `${s.keyword.toLowerCase()}:${s.text.trim()}`),\n    description: body.description.trim(),\n  });\n  return createHash(\"sha1\").update(canonical).digest(\"hex\").slice(0, 16);\n}\n\n/**\n * Parse lockfile text. `label` names the source in errors, so the caller decides\n * whether that is a path, a URL, or something else entirely.\n *\n * Split from {@link readLockfile} so the CLI can route every read and write\n * through its injected file dependencies and still share these error messages.\n */\nexport function parseLockfile(contents: string, label: string): Lockfile {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(contents);\n  } catch (err) {\n    throw new Error(\n      `Sync lockfile at ${label} is not valid JSON: ${(err as Error).message}\\n` +\n        `Fix or delete it — deleting orphans every existing case binding, so prefer fixing.`,\n      { cause: err },\n    );\n  }\n\n  if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n    throw new Error(`Sync lockfile at ${label} must contain an object.`);\n  }\n\n  const lock = parsed as Partial<Lockfile>;\n  if (lock.version !== LOCKFILE_VERSION) {\n    throw new Error(\n      `Sync lockfile at ${label} has version ${String(lock.version)}, expected ${LOCKFILE_VERSION}.`,\n    );\n  }\n\n  return { version: LOCKFILE_VERSION, providers: lock.providers ?? {} };\n}\n\n/** Serialize with sorted keys so the diff a reviewer sees is minimal and stable. */\nexport function serializeLockfile(lock: Lockfile): string {\n  const providers: Lockfile[\"providers\"] = {};\n  for (const provider of Object.keys(lock.providers).sort()) {\n    const entries = lock.providers[provider] ?? {};\n    const sorted: Record<string, LockEntry> = {};\n    for (const key of Object.keys(entries).sort()) sorted[key] = entries[key]!;\n    providers[provider] = sorted;\n  }\n\n  return `${JSON.stringify({ version: LOCKFILE_VERSION, providers }, null, 2)}\\n`;\n}\n\nexport function readLockfile(file: string): Lockfile {\n  if (!fs.existsSync(file)) return emptyLockfile();\n  return parseLockfile(fs.readFileSync(file, \"utf8\"), file);\n}\n\nexport function writeLockfile(file: string, lock: Lockfile): void {\n  fs.mkdirSync(path.dirname(path.resolve(file)), { recursive: true });\n  fs.writeFileSync(file, serializeLockfile(lock), \"utf8\");\n}\n\nexport function entriesFor(lock: Lockfile, provider: string): Record<string, LockEntry> {\n  return lock.providers[provider] ?? {};\n}\n\nexport function setEntry(\n  lock: Lockfile,\n  provider: string,\n  fingerprint: string,\n  entry: LockEntry,\n): void {\n  lock.providers[provider] ??= {};\n  lock.providers[provider]![fingerprint] = entry;\n}\n","/**\n * Rendering for the two things a human reads: the coverage report and the plan.\n *\n * Coverage answers \"what does my test-management system hold that my tests\n * already cover?\", which needs no write access and is the whole reason to try\n * this. The plan borrows `terraform plan` deliberately: the idiom is already in\n * everyone's head, and it is what makes pointing this at a company's TestRail\n * feel safe.\n *\n * Pure functions of a {@link SyncAnalysis}. No IO here.\n */\n\nimport type { ClassifiedCase, SyncAnalysis, SyncApplyResult } from \"./engine\";\n\n/**\n * Manual-only cases are the automation backlog, so they get listed rather than\n * merely counted. Capped because a first run against a real instance can return\n * hundreds, and the overflow is stated rather than silently dropped.\n */\nconst MANUAL_ONLY_LIMIT = 50;\n\nexport interface CoverageSummary {\n  provider: string;\n  target?: string;\n  totalCases: number;\n  automated: number;\n  duplicated: number;\n  possibleDuplicate: number;\n  manualOnly: number;\n  /** Stories with no case in the provider. */\n  untracked: number;\n  /** Stories whose case was reached through a human-authored ticket id. */\n  adopted: number;\n}\n\nexport interface CoverageJson extends CoverageSummary {\n  schema: \"executable-stories/sync-coverage/v1\";\n  cases: Array<{\n    id: string;\n    url: string;\n    title: string;\n    section?: string;\n    classification: ClassifiedCase[\"classification\"];\n    resembles?: string;\n    similarity?: number;\n  }>;\n  untrackedScenarios: string[];\n  orphaned: Array<{ caseId: string; url: string; title: string }>;\n  sections: Array<{ name: string; total: number; automated: number }>;\n}\n\nfunction summarize(analysis: SyncAnalysis): CoverageSummary {\n  const count = (kind: ClassifiedCase[\"classification\"]) =>\n    analysis.remote.filter((c) => c.classification === kind).length;\n\n  return {\n    provider: analysis.provider,\n    target: analysis.target,\n    totalCases: analysis.remote.length,\n    automated: count(\"automated\"),\n    duplicated: count(\"duplicated\"),\n    possibleDuplicate: count(\"possible-duplicate\"),\n    manualOnly: count(\"manual-only\"),\n    untracked: analysis.create.length,\n    adopted: analysis.adopted.length,\n  };\n}\n\nfunction sectionBreakdown(analysis: SyncAnalysis): Array<{ name: string; total: number; automated: number }> {\n  const sections = new Map<string, { total: number; automated: number }>();\n  for (const entry of analysis.remote) {\n    const name = entry.case.section ?? \"(no section)\";\n    const bucket = sections.get(name) ?? { total: 0, automated: 0 };\n    bucket.total += 1;\n    if (entry.classification === \"automated\") bucket.automated += 1;\n    sections.set(name, bucket);\n  }\n  return [...sections.entries()]\n    .map(([name, value]) => ({ name, ...value }))\n    .sort((a, b) => b.automated - a.automated || b.total - a.total);\n}\n\n/** Human-readable coverage, the first thing anyone sees. */\nexport function renderCoverageText(analysis: SyncAnalysis): string {\n  const summary = summarize(analysis);\n  const lines: string[] = [];\n\n  lines.push(`${analysis.provider}: ${analysis.target ?? \"(target not described)\"} (${summary.totalCases} cases)`);\n  lines.push(\"\");\n  lines.push(`  ${pad(summary.automated)}  automated        already covered by a story`);\n  lines.push(`  ${pad(summary.duplicated)}  duplicated       manual case duplicates an automated story`);\n  if (summary.possibleDuplicate > 0) {\n    lines.push(`  ${pad(summary.possibleDuplicate)}  possible dupe    similar to a story, needs a human to confirm`);\n  }\n  lines.push(`  ${pad(summary.manualOnly)}  manual only      no automated equivalent`);\n  lines.push(`  ${pad(summary.untracked)}  untracked        story with no case`);\n  if (summary.adopted > 0) {\n    lines.push(`  ${pad(summary.adopted)}  linked           story bound to a hand-authored case`);\n  }\n\n  const sections = sectionBreakdown(analysis).filter((s) => s.automated > 0);\n  if (sections.length > 0) {\n    const top = sections[0]!;\n    lines.push(\"\");\n    lines.push(`Biggest overlap: \"${top.name}\" section, ${top.automated} of ${top.total} automated.`);\n  }\n\n  if (analysis.orphaned.length > 0) {\n    lines.push(\"\");\n    lines.push(`${analysis.orphaned.length} case(s) bound to a story that no longer exists. Nothing was removed.`);\n  }\n  if (analysis.partialRunWarning) {\n    lines.push(\"\");\n    lines.push(`Note: ${analysis.partialRunWarning}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction pad(value: number): string {\n  return String(value).padStart(4, \" \");\n}\n\n/** The same content as Markdown, so it can be pasted, published, or PR-commented. */\nexport function renderCoverageMarkdown(analysis: SyncAnalysis): string {\n  const summary = summarize(analysis);\n  const lines: string[] = [];\n\n  lines.push(`# Test coverage vs ${analysis.provider}`);\n  lines.push(\"\");\n  if (analysis.target) lines.push(`**Target:** ${analysis.target}`, \"\");\n  lines.push(\"| Cases | Count | Meaning |\");\n  lines.push(\"| --- | ---: | --- |\");\n  lines.push(`| Automated | ${summary.automated} | Already covered by a story |`);\n  lines.push(`| Duplicated | ${summary.duplicated} | Manual case duplicates an automated story |`);\n  lines.push(`| Possible duplicate | ${summary.possibleDuplicate} | Similar to a story, needs review |`);\n  lines.push(`| Manual only | ${summary.manualOnly} | No automated equivalent |`);\n  lines.push(`| Untracked stories | ${summary.untracked} | Story with no case |`);\n  lines.push(\"\");\n\n  const duplicates = analysis.remote.filter(\n    (c) => c.classification === \"duplicated\" || c.classification === \"possible-duplicate\",\n  );\n  if (duplicates.length > 0) {\n    lines.push(\"## Retire these first\");\n    lines.push(\"\");\n    lines.push(\"Manual cases an automated story already covers.\");\n    lines.push(\"\");\n    lines.push(\"| Case | Title | Covered by | Confidence |\");\n    lines.push(\"| --- | --- | --- | --- |\");\n    for (const entry of duplicates) {\n      const confidence = entry.classification === \"duplicated\" ? \"exact title\" : `similarity ${entry.similarity}`;\n      lines.push(\n        `| [${entry.case.id}](${entry.case.url}) | ${escapeCell(entry.case.title)} | ${escapeCell(entry.resembles ?? \"\")} | ${confidence} |`,\n      );\n    }\n    lines.push(\"\");\n  }\n\n  const manualOnly = analysis.remote.filter((c) => c.classification === \"manual-only\");\n  if (manualOnly.length > 0) {\n    lines.push(\"## Not automated yet\");\n    lines.push(\"\");\n    lines.push(\"Cases with no automated equivalent. This is the backlog.\");\n    lines.push(\"\");\n    lines.push(\"| Case | Title | Section |\");\n    lines.push(\"| --- | --- | --- |\");\n    for (const entry of manualOnly.slice(0, MANUAL_ONLY_LIMIT)) {\n      lines.push(\n        `| [${entry.case.id}](${entry.case.url}) | ${escapeCell(entry.case.title)} | ${escapeCell(entry.case.section ?? \"\")} |`,\n      );\n    }\n    if (manualOnly.length > MANUAL_ONLY_LIMIT) {\n      lines.push(\"\");\n      lines.push(\n        `_${manualOnly.length - MANUAL_ONLY_LIMIT} more not listed here. The JSON artifact has all ${manualOnly.length}._`,\n      );\n    }\n    lines.push(\"\");\n  }\n\n  if (analysis.create.length > 0) {\n    lines.push(\"## Stories with no case\");\n    lines.push(\"\");\n    for (const planned of analysis.create) lines.push(`- ${planned.scenario}`);\n    lines.push(\"\");\n  }\n\n  if (analysis.orphaned.length > 0) {\n    lines.push(\"## Cases with no story\");\n    lines.push(\"\");\n    lines.push(\"Bound to a story that has since been deleted. Nothing was removed automatically.\");\n    lines.push(\"\");\n    for (const orphan of analysis.orphaned) {\n      lines.push(`- [${orphan.caseId}](${orphan.url}) ${escapeCell(orphan.title)}`);\n    }\n    lines.push(\"\");\n  }\n\n  const sections = sectionBreakdown(analysis);\n  if (sections.length > 1) {\n    lines.push(\"## By section\");\n    lines.push(\"\");\n    lines.push(\"| Section | Automated | Total |\");\n    lines.push(\"| --- | ---: | ---: |\");\n    for (const section of sections) {\n      lines.push(`| ${escapeCell(section.name)} | ${section.automated} | ${section.total} |`);\n    }\n    lines.push(\"\");\n  }\n\n  if (analysis.partialRunWarning) {\n    lines.push(`> ${analysis.partialRunWarning}`, \"\");\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction escapeCell(text: string): string {\n  return text.replace(/\\|/g, \"\\\\|\");\n}\n\nexport function buildCoverageJson(analysis: SyncAnalysis): CoverageJson {\n  return {\n    schema: \"executable-stories/sync-coverage/v1\",\n    ...summarize(analysis),\n    cases: analysis.remote.map((entry) => ({\n      id: entry.case.id,\n      url: entry.case.url,\n      title: entry.case.title,\n      section: entry.case.section,\n      classification: entry.classification,\n      resembles: entry.resembles,\n      similarity: entry.similarity,\n    })),\n    untrackedScenarios: analysis.create.map((c) => c.scenario),\n    orphaned: analysis.orphaned.map((o) => ({ caseId: o.caseId, url: o.url, title: o.title })),\n    sections: sectionBreakdown(analysis),\n  };\n}\n\n// --- plan -------------------------------------------------------------------\n\nfunction formatBytes(bytes: number): string {\n  if (bytes < 1024) return `${bytes} B`;\n  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/** terraform-plan-shaped output. Read before anything is written. */\nexport function renderPlan(analysis: SyncAnalysis, opts: { dryRun: boolean }): string {\n  const lines: string[] = [];\n\n  lines.push(`${analysis.provider}: ${analysis.target ?? \"(target not described)\"}`);\n  lines.push(\"\");\n  lines.push(`  + create    ${pad(analysis.create.length)} cases`);\n  lines.push(`  ~ update    ${pad(analysis.update.length)} cases`);\n  lines.push(`  = unchanged ${pad(analysis.unchanged.length)} cases`);\n  if (analysis.adopted.length > 0) {\n    lines.push(`  · linked    ${pad(analysis.adopted.length)} cases  (hand-authored, results only)`);\n  }\n  if (analysis.skipped.length > 0) {\n    const edited = analysis.skipped.filter((s) => s.reason === \"remote-edited\").length;\n    const missing = analysis.skipped.filter((s) => s.reason === \"case-missing\").length;\n    if (edited > 0) {\n      lines.push(`  ! skipped   ${pad(edited)} cases  (edited in ${analysis.provider} since last sync)`);\n    }\n    if (missing > 0) {\n      lines.push(`  ! skipped   ${pad(missing)} cases  (bound case no longer exists)`);\n    }\n  }\n  if (analysis.orphaned.length > 0) {\n    lines.push(`  ? orphaned  ${pad(analysis.orphaned.length)} cases  (story deleted from codebase, never removed)`);\n  }\n\n  lines.push(`  → results   ${pad(analysis.results.length)} executions`);\n\n  if (analysis.attachments.files > 0) {\n    const roles = Object.entries(analysis.attachments.byRole)\n      .map(([role, count]) => `${count} ${role}${count === 1 ? \"\" : \"s\"}`)\n      .join(\", \");\n    lines.push(\n      `  ↑ upload    ${pad(analysis.attachments.files)} attachments (${roles}, ${formatBytes(analysis.attachments.bytes)})`,\n    );\n  }\n  for (const oversized of analysis.attachments.oversized) {\n    lines.push(\n      `  ! oversized ${oversized.filename} (${formatBytes(oversized.bytes)}, provider limit ${formatBytes(oversized.limit)})`,\n    );\n  }\n\n  for (const capability of analysis.unsupported) {\n    lines.push(`  ! ${analysis.provider} does not support ${capability} — those changes are not applied`);\n  }\n\n  if (analysis.driftUncheckable > 0) {\n    lines.push(\n      `  ! ${analysis.driftUncheckable} case(s): ${analysis.provider} returned no body, so a hand edit to them cannot be detected`,\n    );\n  }\n\n  if (analysis.partialRunWarning) {\n    lines.push(\"\");\n    lines.push(`Note: ${analysis.partialRunWarning}`);\n  }\n\n  if (analysis.skipped.some((s) => s.reason === \"remote-edited\")) {\n    lines.push(\"\");\n    lines.push(\"Skipped cases were edited by hand after we last wrote them. Nothing overwrites them.\");\n    for (const skip of analysis.skipped.filter((s) => s.reason === \"remote-edited\")) {\n      lines.push(`  ${skip.caseId} ${skip.title} ${skip.url}`);\n    }\n  }\n\n  if (opts.dryRun && hasWork(analysis)) {\n    lines.push(\"\");\n    lines.push(\"Nothing was written. Run the same command with --apply to make these changes.\");\n  }\n\n  return lines.join(\"\\n\");\n}\n\nfunction hasWork(analysis: SyncAnalysis): boolean {\n  return (\n    analysis.create.length > 0 ||\n    analysis.update.length > 0 ||\n    analysis.results.length > 0\n  );\n}\n\n/** What actually happened, printed after a real run. */\nexport function renderApplyResult(result: SyncApplyResult): string {\n  const lines: string[] = [];\n\n  for (const created of result.created) {\n    lines.push(`  + ${created.caseId}  ${created.scenario}  ${created.url}`);\n  }\n  for (const updated of result.updated) {\n    lines.push(`  ~ ${updated.caseId}  ${updated.scenario}`);\n  }\n\n  lines.push(\"\");\n  lines.push(\n    `Created ${result.created.length}, updated ${result.updated.length}, recorded ${result.resultsRecorded} execution(s), uploaded ${result.attachmentsUploaded} attachment(s).`,\n  );\n  if (result.runUrl) lines.push(`Run: ${result.runUrl}`);\n\n  for (const skipped of result.resultsSkipped) {\n    lines.push(`  ! result for case ${skipped.caseId} not recorded: ${skipped.reason}`);\n  }\n  for (const error of result.errors) {\n    lines.push(`  ✗ ${error}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n","/**\n * Text round-tripping shared by adapters.\n *\n * Test-management systems store a step as one string with no notion of a BDD\n * keyword, and have one description field with no notion of links. Both get\n * flattened on the way out and parsed back on the way in.\n *\n * These must stay exactly symmetrical: the drift guard hashes what we read back\n * from the provider, so an asymmetric encode/decode would report every case as\n * edited by a human on the very next run.\n */\n\nconst BDD_KEYWORDS = [\"Given\", \"When\", \"Then\", \"And\", \"But\"];\n\nexport function encodeStepText(step: { keyword: string; text: string }): string {\n  const keyword = step.keyword.trim();\n  return keyword ? `${keyword} ${step.text}` : step.text;\n}\n\nexport function decodeStepText(content: string): { keyword: string; text: string } {\n  const trimmed = content.trim();\n  const firstSpace = trimmed.indexOf(\" \");\n  if (firstSpace > 0) {\n    const head = trimmed.slice(0, firstSpace);\n    if (BDD_KEYWORDS.some((keyword) => keyword.toLowerCase() === head.toLowerCase())) {\n      return { keyword: head, text: trimmed.slice(firstSpace + 1) };\n    }\n  }\n  return { keyword: \"\", text: trimmed };\n}\n\n/** Links become a trailing markdown list so they survive a round trip. */\nexport function encodeDescription(body: {\n  description: string;\n  links: ReadonlyArray<{ label: string; url: string }>;\n}): string {\n  if (body.links.length === 0) return body.description;\n  const links = body.links.map((link) => `- [${link.label}](${link.url})`).join(\"\\n\");\n  return `${body.description}\\n\\n${links}`;\n}\n\nexport function decodeDescription(raw: string): {\n  description: string;\n  links: Array<{ label: string; url: string }>;\n} {\n  const links: Array<{ label: string; url: string }> = [];\n  const lines = raw.split(\"\\n\");\n  let cut = lines.length;\n\n  for (let index = lines.length - 1; index >= 0; index--) {\n    const line = lines[index]!.trim();\n    if (line === \"\") continue;\n    const match = /^- \\[([^\\]]+)\\]\\(([^)]+)\\)$/.exec(line);\n    if (!match) break;\n    links.unshift({ label: match[1]!, url: match[2]! });\n    cut = index;\n  }\n\n  return { description: lines.slice(0, cut).join(\"\\n\").trim(), links };\n}\n","/**\n * TestRail adapter.\n *\n * Translates between the sync port and TestRail's API v2. All decisions about\n * what to write live in the engine; this file only knows how TestRail spells\n * things.\n *\n * Case templates differ per instance, which is why the step and description\n * field names are configurable. The defaults match TestRail's stock\n * \"Test Case (Steps)\" template.\n *\n * Auth: basic, with an API key rather than a password. Generate one under\n * My Settings -> API Keys.\n */\n\nimport type {\n  AdapterDeps,\n  CaseBody,\n  CaseResult,\n  RecordResultsSummary,\n  RemoteCase,\n  SyncProvider,\n} from \"../port\";\nimport {\n  decodeDescription,\n  decodeStepText,\n  encodeDescription,\n  encodeStepText,\n} from \"./case-text\";\n\nexport interface TestRailConfig {\n  /** Instance URL, e.g. https://acme.testrail.io */\n  url: string;\n  projectId: number | string;\n  /** Required on multi-suite projects. */\n  suiteId?: number | string;\n  /** Target section for created cases. Without it, creation is refused. */\n  sectionId?: number | string;\n  /** Reuse an existing run instead of creating one per sync. */\n  runId?: number | string;\n  /** Name for created runs. A UTC timestamp is appended. */\n  runName?: string;\n  /** Close the run after recording results. */\n  closeRun?: boolean;\n  /** Case template to create against, when the project uses a non-default one. */\n  templateId?: number;\n  /**\n   * Result status ids. TestRail ships 1=Passed and 5=Failed; there is no stock\n   * \"skipped\", so skipped results are dropped unless an id is configured.\n   */\n  statusIds?: { passed?: number; failed?: number; skipped?: number };\n  /** Field names, for instances with customised case templates. */\n  fields?: { steps?: string; description?: string };\n  /**\n   * Per-file attachment limit. Conservative by default: instances have storage\n   * quotas, and a surprise 200 MB of video is a support ticket.\n   */\n  maxAttachmentBytes?: number;\n}\n\nexport interface TestRailAuth {\n  username: string;\n  apiKey: string;\n}\n\nconst DEFAULT_STEPS_FIELD = \"custom_steps_separated\";\nconst DEFAULT_DESCRIPTION_FIELD = \"custom_preconds\";\nconst DEFAULT_MAX_ATTACHMENT_BYTES = 64 * 1024 * 1024;\nconst PAGE_LIMIT = 250;\n/** Attempts per request before a 429 becomes an error. */\nconst MAX_ATTEMPTS = 3;\n\ninterface TestRailCase {\n  id: number;\n  title: string;\n  section_id?: number;\n  [field: string]: unknown;\n}\n\ninterface TestRailStep {\n  content?: string;\n  expected?: string;\n}\n\n/** `{ cases: [...] }` on current TestRail, a bare array on older instances. */\nfunction unwrapList<T>(payload: unknown, key: string): T[] {\n  if (Array.isArray(payload)) return payload as T[];\n  if (payload && typeof payload === \"object\") {\n    const list = (payload as Record<string, unknown>)[key];\n    if (Array.isArray(list)) return list as T[];\n  }\n  return [];\n}\n\n/** TestRail rejects an elapsed under one second, and \"0s\" outright. */\nfunction encodeElapsed(durationMs: number): string | undefined {\n  const seconds = Math.floor(durationMs / 1000);\n  if (seconds < 1) return undefined;\n  if (seconds < 60) return `${seconds}s`;\n  const minutes = Math.floor(seconds / 60);\n  const rest = seconds % 60;\n  return rest === 0 ? `${minutes}m` : `${minutes}m ${rest}s`;\n}\n\n/**\n * Turn the two failures every first run hits into something actionable.\n *\n * A bare \"401: Authentication failed\" sends people to check the password they\n * already checked. The real causes are narrow and worth naming: TestRail\n * rejects passwords outright once an instance enforces API keys, and the API\n * itself is off by default until an admin enables it.\n */\nfunction authHint(status: number): string {\n  if (status === 401) {\n    return \"\\n  TESTRAIL_USERNAME must be the login email and TESTRAIL_API_KEY an API key from My Settings -> API Keys. A password fails here when the instance enforces API keys.\";\n  }\n  if (status === 403) {\n    return \"\\n  The credentials were accepted but the request was refused. Usually the API is disabled: an admin enables it under Administration -> Site Settings -> API.\";\n  }\n  return \"\";\n}\n\nexport function createTestRailProvider(\n  config: TestRailConfig,\n  auth: TestRailAuth,\n  deps: AdapterDeps,\n): SyncProvider {\n  const base = config.url.replace(/\\/$/, \"\");\n  const stepsField = config.fields?.steps ?? DEFAULT_STEPS_FIELD;\n  const descriptionField = config.fields?.description ?? DEFAULT_DESCRIPTION_FIELD;\n  const basicAuth = Buffer.from(`${auth.username}:${auth.apiKey}`).toString(\"base64\");\n\n  let projectName: string | undefined;\n  let suiteName: string | undefined;\n  const sectionNames = new Map<number, string>();\n\n  async function api(method: string, init?: { body?: unknown; form?: FormData }): Promise<unknown> {\n    const url = `${base}/index.php?/api/v2/${method}`;\n    const headers: Record<string, string> = {\n      Authorization: `Basic ${basicAuth}`,\n    };\n    // Spelled out rather than `BodyInit`: that name only exists when the DOM lib\n    // is loaded, and this source is type-checked by packages that do not load it.\n    let body: string | FormData | undefined;\n\n    if (init?.form) {\n      // Let fetch set the multipart boundary.\n      body = init.form;\n    } else if (init?.body !== undefined) {\n      headers[\"Content-Type\"] = \"application/json\";\n      body = JSON.stringify(init.body);\n    }\n\n    // TestRail rate-limits hard on cloud plans and answers 429 with Retry-After.\n    // Three attempts, honouring the header rather than backing off blindly: the\n    // server states how long it wants, and a per-run sync never needs more.\n    for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {\n      const response = await deps.fetch(url, {\n        method: body === undefined ? \"GET\" : \"POST\",\n        headers,\n        body,\n      });\n\n      if (response.status === 429 && attempt < MAX_ATTEMPTS - 1) {\n        const retryAfter = Number(response.headers.get(\"retry-after\") ?? \"1\");\n        deps.logger.warn(`TestRail rate limit hit, retrying in ${retryAfter}s`);\n        await new Promise((resolve) => setTimeout(resolve, Math.max(1, retryAfter) * 1000));\n        continue;\n      }\n\n      const text = await response.text();\n      if (text.length === 0) {\n        if (response.ok) return undefined;\n        throw new Error(\n          `TestRail ${method} failed (${response.status}) with an empty response${authHint(response.status)}`,\n        );\n      }\n\n      // Parse before branching on `ok`. A misconfigured `url` gets a login page\n      // back with a 200, so checking the status first would leave the real\n      // failure to surface as \"Unexpected token '<'\" further down.\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(text);\n      } catch {\n        throw new Error(\n          `TestRail ${method} returned HTML rather than JSON (status ${response.status}).\\n` +\n            `  Check that sync.testrail.url is the instance root, e.g. https://acme.testrail.io, with no path after it.`,\n        );\n      }\n\n      if (!response.ok) {\n        const detail = (parsed as { error?: string }).error ?? text;\n        throw new Error(\n          `TestRail ${method} failed (${response.status}): ${detail}${authHint(response.status)}`,\n        );\n      }\n\n      return parsed;\n    }\n\n    throw new Error(`TestRail ${method} failed: rate limited after ${MAX_ATTEMPTS} attempts`);\n  }\n\n  /** Walk TestRail's offset pagination. */\n  async function paginate<T>(method: string, key: string): Promise<T[]> {\n    const all: T[] = [];\n    for (let offset = 0; ; offset += PAGE_LIMIT) {\n      // The base URL already carries the \"?\", so every parameter appends with \"&\".\n      const page = await api(`${method}&limit=${PAGE_LIMIT}&offset=${offset}`);\n      const items = unwrapList<T>(page, key);\n      all.push(...items);\n      if (items.length < PAGE_LIMIT) return all;\n    }\n  }\n\n  function caseUrl(id: number | string): string {\n    return `${base}/index.php?/cases/view/${id}`;\n  }\n\n  /**\n   * @param context The call this case came back from, named in the error when\n   * the response is not a case at all. Without it a partial response fails much\n   * later as a TypeError from inside the hashing, pointing at nothing useful.\n   */\n  function toRemoteCase(raw: TestRailCase, context: string): RemoteCase {\n    if (raw?.id === undefined) {\n      throw new Error(\n        `TestRail ${context} returned no case id. The response was: ${JSON.stringify(raw)?.slice(0, 200)}`,\n      );\n    }\n    const title = typeof raw.title === \"string\" ? raw.title : \"\";\n    const steps = Array.isArray(raw[stepsField]) ? (raw[stepsField] as TestRailStep[]) : [];\n    const rawDescription = typeof raw[descriptionField] === \"string\" ? (raw[descriptionField] as string) : \"\";\n    const { description, links } = decodeDescription(rawDescription);\n\n    return {\n      id: String(raw.id),\n      url: caseUrl(raw.id),\n      title,\n      section: raw.section_id === undefined ? undefined : sectionNames.get(raw.section_id),\n      body: {\n        title,\n        steps: steps.map((step) => decodeStepText(step.content ?? \"\")),\n        description,\n        links,\n      },\n    };\n  }\n\n  function bodyToPayload(body: CaseBody): Record<string, unknown> {\n    const payload: Record<string, unknown> = {\n      title: body.title,\n      [stepsField]: body.steps.map((step) => ({ content: encodeStepText(step), expected: \"\" })),\n      [descriptionField]: encodeDescription(body),\n    };\n    if (config.templateId !== undefined) payload[\"template_id\"] = config.templateId;\n    return payload;\n  }\n\n  const suiteQuery = config.suiteId === undefined ? \"\" : `&suite_id=${config.suiteId}`;\n\n  return {\n    name: \"testrail\",\n    maxAttachmentBytes: config.maxAttachmentBytes ?? DEFAULT_MAX_ATTACHMENT_BYTES,\n\n    describeTarget() {\n      const project = projectName ?? `project ${config.projectId}`;\n      const suite = suiteName ?? (config.suiteId === undefined ? undefined : `suite ${config.suiteId}`);\n      return suite ? `${project} / ${suite}` : project;\n    },\n\n    async listCases() {\n      // Names are cosmetic (plan header, section breakdown), so a permissions\n      // failure here must not sink the whole read.\n      try {\n        const project = (await api(`get_project/${config.projectId}`)) as { name?: string } | undefined;\n        projectName = project?.name;\n        if (config.suiteId !== undefined) {\n          const suite = (await api(`get_suite/${config.suiteId}`)) as { name?: string } | undefined;\n          suiteName = suite?.name;\n        }\n        const sections = await paginate<{ id: number; name: string }>(\n          `get_sections/${config.projectId}${suiteQuery}`,\n          \"sections\",\n        );\n        for (const section of sections) sectionNames.set(section.id, section.name);\n      } catch (err) {\n        deps.logger.warn(`TestRail metadata lookup failed, continuing without names: ${(err as Error).message}`);\n      }\n\n      const cases = await paginate<TestRailCase>(`get_cases/${config.projectId}${suiteQuery}`, \"cases\");\n      return cases.map((raw) => toRemoteCase(raw, \"get_cases\"));\n    },\n\n    async createCase(body) {\n      if (config.sectionId === undefined) {\n        throw new Error(\n          \"TestRail needs a sectionId to create cases. Set sync.testrail.sectionId to the section new cases should land in.\",\n        );\n      }\n      const created = (await api(`add_case/${config.sectionId}`, {\n        body: bodyToPayload(body),\n      })) as TestRailCase;\n      return toRemoteCase(created, `add_case/${config.sectionId}`);\n    },\n\n    async updateCase(id, body) {\n      const updated = (await api(`update_case/${id}`, { body: bodyToPayload(body) })) as TestRailCase;\n      return toRemoteCase(updated, `update_case/${id}`);\n    },\n\n    async recordResults(results): Promise<RecordResultsSummary> {\n      const statusIds = {\n        passed: config.statusIds?.passed ?? 1,\n        failed: config.statusIds?.failed ?? 5,\n        skipped: config.statusIds?.skipped,\n      };\n\n      const skipped: RecordResultsSummary[\"skipped\"] = [];\n      const sendable: Array<{ result: CaseResult; caseId: number; statusId: number }> = [];\n\n      for (const result of results) {\n        const caseId = Number(result.caseId);\n        if (!Number.isFinite(caseId)) {\n          skipped.push({ caseId: result.caseId, reason: \"case id is not numeric\" });\n          continue;\n        }\n        const statusId = result.status === \"skipped\" ? statusIds.skipped : statusIds[result.status];\n        if (statusId === undefined) {\n          skipped.push({\n            caseId: result.caseId,\n            reason: \"no TestRail status id configured for skipped (set sync.testrail.statusIds.skipped)\",\n          });\n          continue;\n        }\n        sendable.push({ result, caseId, statusId });\n      }\n\n      if (sendable.length === 0) {\n        return { recorded: 0, skipped, attachmentsUploaded: 0 };\n      }\n\n      let runId = config.runId;\n      if (runId === undefined) {\n        const name = `${config.runName ?? \"executable-stories\"} ${new Date().toISOString()}`;\n        const run = (await api(`add_run/${config.projectId}`, {\n          body: {\n            ...(config.suiteId === undefined ? {} : { suite_id: config.suiteId }),\n            name,\n            include_all: false,\n            // Deduplicated: two stories can carry the same ticket id, and\n            // TestRail rejects a run whose case list repeats one.\n            case_ids: [...new Set(sendable.map((s) => s.caseId))],\n          },\n        })) as { id: number };\n        runId = run.id;\n      }\n      const runUrl = `${base}/index.php?/runs/view/${runId}`;\n\n      const payload = sendable.map(({ result, caseId, statusId }) => {\n        const elapsed = encodeElapsed(result.durationMs);\n        const comment = [result.message, result.url ? `Living documentation: ${result.url}` : undefined]\n          .filter(Boolean)\n          .join(\"\\n\\n\");\n        return {\n          case_id: caseId,\n          status_id: statusId,\n          ...(comment ? { comment } : {}),\n          ...(elapsed ? { elapsed } : {}),\n        };\n      });\n\n      const recorded = unwrapList<{ id: number; case_id: number }>(\n        await api(`add_results_for_cases/${runId}`, { body: { results: payload } }),\n        \"results\",\n      );\n\n      // TestRail answers in submission order, so pair positionally rather than\n      // trusting case_id, which repeats when a case appears twice in a run.\n      let attachmentsUploaded = 0;\n      for (const [index, entry] of recorded.entries()) {\n        const source = sendable[index]?.result;\n        for (const attachment of source?.attachments ?? []) {\n          try {\n            const form = new FormData();\n            // Handed to Blob as a plain ArrayBuffer. `BlobPart` only exists with\n            // the DOM lib loaded, and a Uint8Array view is not assignable to it\n            // under this TypeScript version, so neither name works across every\n            // package that type-checks this source.\n            const bytes = attachment.body.buffer.slice(\n              attachment.body.byteOffset,\n              attachment.body.byteOffset + attachment.body.byteLength,\n            ) as ArrayBuffer;\n            form.append(\n              \"attachment\",\n              new Blob([bytes], { type: attachment.mediaType }),\n              attachment.filename,\n            );\n            await api(`add_attachment_to_result/${entry.id}`, { form });\n            attachmentsUploaded += 1;\n          } catch (err) {\n            // Evidence is additive. A rejected upload must not lose the result\n            // that was already recorded.\n            deps.logger.warn(\n              `TestRail attachment \"${attachment.filename}\" failed: ${(err as Error).message}`,\n            );\n          }\n        }\n      }\n\n      if (config.closeRun && config.runId === undefined) {\n        await api(`close_run/${runId}`, { body: {} });\n      }\n\n      return {\n        runId: String(runId),\n        runUrl,\n        recorded: recorded.length,\n        skipped,\n        attachmentsUploaded,\n      };\n    },\n  };\n}\n","/**\n * Xray (Jira Cloud) adapter.\n *\n * Xray splits its API in two and this adapter has to speak both: a GraphQL API\n * for test definitions, and a REST endpoint for importing execution results.\n * Evidence rides along with the results as base64, so screenshots and video\n * land on the execution without a separate upload call.\n *\n * A case id here is a Jira issue key (\"PROJ-42\"), not a number, which is why\n * `ticketPrefixStrip: false` is the right engine setting for this provider.\n *\n * Auth: an Xray API key pair (client id + secret) from Jira Settings -> Apps ->\n * Xray -> API Keys. Updating an existing test's summary or description also\n * needs Jira credentials, because those are Jira fields Xray does not own.\n */\n\nimport type {\n  AdapterDeps,\n  RecordResultsSummary,\n  RemoteCase,\n  SyncProvider,\n} from \"../port\";\nimport {\n  decodeDescription,\n  decodeStepText,\n  encodeDescription,\n  encodeStepText,\n} from \"./case-text\";\n\nexport interface XrayConfig {\n  /** Jira site URL, e.g. https://acme.atlassian.net */\n  jiraBaseUrl: string;\n  projectKey: string;\n  /** Xray Cloud API base. */\n  xrayBaseUrl?: string;\n  /** Selects the existing tests to reconcile against. */\n  jql?: string;\n  /** Xray test type for created tests. */\n  testType?: string;\n  /** Link created executions to this test plan. */\n  testPlanKey?: string;\n  /** Push results into an existing execution instead of creating one. */\n  testExecutionKey?: string;\n  /** Summary for created executions. A UTC timestamp is appended. */\n  executionSummary?: string;\n  statuses?: { passed?: string; failed?: string; skipped?: string };\n  maxAttachmentBytes?: number;\n}\n\nexport interface XrayAuth {\n  clientId: string;\n  clientSecret: string;\n  /** Atlassian account email, needed only to update Jira summary/description. */\n  jiraEmail?: string;\n  /** Atlassian API token, needed only to update Jira summary/description. */\n  jiraToken?: string;\n}\n\nconst DEFAULT_XRAY_BASE = \"https://xray.cloud.getxray.app\";\nconst DEFAULT_TEST_TYPE = \"Manual\";\n/** Xray embeds evidence as base64 in the results payload, so keep files modest. */\nconst DEFAULT_MAX_ATTACHMENT_BYTES = 32 * 1024 * 1024;\nconst PAGE_LIMIT = 100;\n\ninterface XrayStep {\n  id: string;\n  action?: string;\n  data?: string;\n  result?: string;\n}\n\ninterface XrayTest {\n  issueId: string;\n  jira?: { key?: string; summary?: string; description?: unknown };\n  steps?: XrayStep[];\n}\n\n/**\n * Jira Cloud stores descriptions as ADF, so plain text has to be wrapped going\n * out and flattened coming back. Only paragraphs are produced: the description\n * is generated from the test, so nothing is lost by keeping the markup flat.\n */\nfunction toAdf(text: string): Record<string, unknown> {\n  const paragraphs = text.split(\"\\n\\n\").filter((block) => block.trim() !== \"\");\n  return {\n    version: 1,\n    type: \"doc\",\n    content:\n      paragraphs.length === 0\n        ? [{ type: \"paragraph\", content: [] }]\n        : paragraphs.map((block) => ({\n            type: \"paragraph\",\n            content: [{ type: \"text\", text: block }],\n          })),\n  };\n}\n\nfunction fromAdf(value: unknown): string {\n  if (typeof value === \"string\") return value;\n  if (!value || typeof value !== \"object\") return \"\";\n\n  const blocks: string[] = [];\n  const walk = (node: unknown, collected: string[]): void => {\n    if (!node || typeof node !== \"object\") return;\n    const typed = node as { type?: string; text?: string; content?: unknown[] };\n    if (typed.type === \"text\" && typeof typed.text === \"string\") collected.push(typed.text);\n    for (const child of typed.content ?? []) walk(child, collected);\n  };\n\n  for (const node of ((value as { content?: unknown[] }).content ?? [])) {\n    const collected: string[] = [];\n    walk(node, collected);\n    blocks.push(collected.join(\"\"));\n  }\n\n  return blocks.join(\"\\n\\n\").trim();\n}\n\nexport function createXrayProvider(\n  config: XrayConfig,\n  auth: XrayAuth,\n  deps: AdapterDeps,\n): SyncProvider {\n  const xrayBase = (config.xrayBaseUrl ?? DEFAULT_XRAY_BASE).replace(/\\/$/, \"\");\n  const jiraBase = config.jiraBaseUrl.replace(/\\/$/, \"\");\n  const jql = config.jql ?? `project = \"${config.projectKey}\" AND issuetype = Test`;\n  /** Issue key -> Xray internal issue id, needed for step mutations. */\n  const issueIds = new Map<string, string>();\n  let token: string | undefined;\n\n  async function authenticate(): Promise<string> {\n    if (token) return token;\n    const response = await deps.fetch(`${xrayBase}/api/v2/authenticate`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ client_id: auth.clientId, client_secret: auth.clientSecret }),\n    });\n    const text = await response.text();\n    if (!response.ok) {\n      // The commonest cause is reaching for the wrong pair of credentials: Jira\n      // API tokens and Xray API keys look alike and are not interchangeable.\n      throw new Error(\n        `Xray authentication failed (${response.status}): ${text}\\n` +\n          `  XRAY_CLIENT_ID and XRAY_CLIENT_SECRET come from Jira -> Apps -> Xray -> API Keys. A Jira API token is a different credential and is rejected here.`,\n      );\n    }\n    // The endpoint answers with a quoted JSON string, not an object.\n    token = (JSON.parse(text) as string).replace(/^\"|\"$/g, \"\");\n    return token;\n  }\n\n  async function graphql(query: string, variables?: Record<string, unknown>): Promise<unknown> {\n    const bearer = await authenticate();\n    const response = await deps.fetch(`${xrayBase}/api/v2/graphql`, {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${bearer}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({ query, variables }),\n    });\n\n    const text = await response.text();\n    if (!response.ok) throw new Error(`Xray GraphQL failed (${response.status}): ${text}`);\n\n    const payload = JSON.parse(text) as { data?: unknown; errors?: Array<{ message: string }> };\n    if (payload.errors?.length) {\n      throw new Error(`Xray GraphQL error: ${payload.errors.map((e) => e.message).join(\"; \")}`);\n    }\n    return payload.data;\n  }\n\n  function issueUrl(key: string): string {\n    return `${jiraBase}/browse/${key}`;\n  }\n\n  function toRemoteCase(test: XrayTest): RemoteCase {\n    const key = test.jira?.key ?? test.issueId;\n    if (!key) {\n      // Named here rather than left to fail later inside the engine's hashing,\n      // where the message would point at nothing.\n      throw new Error(\n        `Xray returned a test with neither a Jira key nor an issue id: ${JSON.stringify(test)?.slice(0, 200)}`,\n      );\n    }\n    if (test.jira?.key) issueIds.set(test.jira.key, test.issueId);\n\n    const { description, links } = decodeDescription(fromAdf(test.jira?.description));\n\n    return {\n      id: key,\n      url: issueUrl(key),\n      title: test.jira?.summary ?? key,\n      body: {\n        title: test.jira?.summary ?? key,\n        steps: (test.steps ?? []).map((step) => decodeStepText(step.action ?? \"\")),\n        description,\n        links,\n      },\n    };\n  }\n\n  async function jiraUpdate(key: string, fields: Record<string, unknown>): Promise<void> {\n    if (!auth.jiraEmail || !auth.jiraToken) {\n      deps.logger.warn(\n        `Xray: summary/description for ${key} left unchanged. Set JIRA_EMAIL and JIRA_TOKEN to update Jira fields (steps are updated either way).`,\n      );\n      return;\n    }\n    const basic = Buffer.from(`${auth.jiraEmail}:${auth.jiraToken}`).toString(\"base64\");\n    const response = await deps.fetch(`${jiraBase}/rest/api/3/issue/${key}`, {\n      method: \"PUT\",\n      headers: { Authorization: `Basic ${basic}`, \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ fields }),\n    });\n    if (!response.ok) {\n      throw new Error(`Jira update of ${key} failed (${response.status}): ${await response.text()}`);\n    }\n  }\n\n  return {\n    name: \"xray\",\n    maxAttachmentBytes: config.maxAttachmentBytes ?? DEFAULT_MAX_ATTACHMENT_BYTES,\n\n    describeTarget() {\n      return `${config.projectKey} (${jiraBase})`;\n    },\n\n    async listCases() {\n      const tests: XrayTest[] = [];\n      for (let start = 0; ; start += PAGE_LIMIT) {\n        const data = (await graphql(\n          `query($jql: String!, $limit: Int!, $start: Int!) {\n             getTests(jql: $jql, limit: $limit, start: $start) {\n               total\n               results {\n                 issueId\n                 jira(fields: [\"key\", \"summary\", \"description\"])\n                 steps { id action data result }\n               }\n             }\n           }`,\n          { jql, limit: PAGE_LIMIT, start },\n        )) as { getTests?: { total?: number; results?: XrayTest[] } };\n\n        const page = data.getTests?.results ?? [];\n        tests.push(...page);\n        if (page.length < PAGE_LIMIT) break;\n      }\n\n      return tests.map(toRemoteCase);\n    },\n\n    async createCase(body) {\n      const data = (await graphql(\n        `mutation($testType: UpdateTestTypeInput!, $steps: [CreateStepInput], $jira: JSON!) {\n           createTest(testType: $testType, steps: $steps, jira: $jira) {\n             test { issueId jira(fields: [\"key\", \"summary\", \"description\"]) }\n             warnings\n           }\n         }`,\n        {\n          testType: { name: config.testType ?? DEFAULT_TEST_TYPE },\n          steps: body.steps.map((step) => ({ action: encodeStepText(step), result: \"\" })),\n          jira: {\n            fields: {\n              summary: body.title,\n              description: toAdf(encodeDescription(body)),\n              project: { key: config.projectKey },\n            },\n          },\n        },\n      )) as { createTest?: { test?: XrayTest; warnings?: string[] } };\n\n      const created = data.createTest?.test;\n      if (!created) throw new Error(`Xray createTest returned no test for \"${body.title}\"`);\n      for (const warning of data.createTest?.warnings ?? []) deps.logger.warn(`Xray: ${warning}`);\n\n      return toRemoteCase(created);\n    },\n\n    async updateCase(id, body) {\n      const issueId = issueIds.get(id);\n      if (!issueId) {\n        throw new Error(`Xray: no internal issue id cached for ${id}. Run listCases first.`);\n      }\n\n      // Xray has no \"replace all steps\" mutation, and these calls are neither\n      // batched nor transactional, so reconcile position by position rather than\n      // clearing and rebuilding: overwrite the steps that already exist, append\n      // what is new, remove only the surplus.\n      //\n      // That matters because a failure part-way through is a question of which\n      // half-written state the test is left in. Rebuilding leaves the case with\n      // no steps at all if the run dies between the deletes and the adds. This\n      // way every prefix is a correct prefix, and a rerun finishes the job.\n      const current = (await graphql(\n        `query($issueId: String!) { getTest(issueId: $issueId) { steps { id } } }`,\n        { issueId },\n      )) as { getTest?: { steps?: Array<{ id: string }> } };\n      const existing = current.getTest?.steps ?? [];\n\n      for (const [index, step] of body.steps.entries()) {\n        const action = encodeStepText(step);\n        const target = existing[index];\n        if (target) {\n          await graphql(\n            `mutation($stepId: String!, $step: UpdateStepInput!) {\n               updateTestStep(stepId: $stepId, step: $step)\n             }`,\n            { stepId: target.id, step: { action, result: \"\" } },\n          );\n        } else {\n          await graphql(\n            `mutation($issueId: String!, $step: CreateStepInput!) {\n               addTestStep(issueId: $issueId, step: $step) { id }\n             }`,\n            { issueId, step: { action, result: \"\" } },\n          );\n        }\n      }\n\n      // Trailing steps the story no longer has. Removed last, and back to front,\n      // so an interrupted run never renumbers a step it has yet to visit.\n      for (const surplus of existing.slice(body.steps.length).reverse()) {\n        await graphql(`mutation($stepId: String!) { removeTestStep(stepId: $stepId) }`, {\n          stepId: surplus.id,\n        });\n      }\n\n      await jiraUpdate(id, {\n        summary: body.title,\n        description: toAdf(encodeDescription(body)),\n      });\n\n      return {\n        id,\n        url: issueUrl(id),\n        title: body.title,\n        body,\n      };\n    },\n\n    async recordResults(results): Promise<RecordResultsSummary> {\n      const statuses = {\n        passed: config.statuses?.passed ?? \"PASSED\",\n        failed: config.statuses?.failed ?? \"FAILED\",\n        skipped: config.statuses?.skipped ?? \"TODO\",\n      };\n\n      let attachmentsUploaded = 0;\n      const tests = results.map((result) => {\n        const evidence = (result.attachments ?? []).map((attachment) => {\n          attachmentsUploaded += 1;\n          return {\n            data: Buffer.from(attachment.body).toString(\"base64\"),\n            filename: attachment.filename,\n            contentType: attachment.mediaType,\n          };\n        });\n\n        const comment = [result.message, result.url ? `Living documentation: ${result.url}` : undefined]\n          .filter(Boolean)\n          .join(\"\\n\\n\");\n\n        return {\n          testKey: result.caseId,\n          status: statuses[result.status],\n          ...(comment ? { comment } : {}),\n          ...(evidence.length > 0 ? { evidence } : {}),\n        };\n      });\n\n      const bearer = await authenticate();\n      const payload = {\n        ...(config.testExecutionKey ? { testExecutionKey: config.testExecutionKey } : {}),\n        info: {\n          summary: `${config.executionSummary ?? \"executable-stories\"} ${new Date().toISOString()}`,\n          project: config.projectKey,\n          ...(config.testPlanKey ? { testPlanKey: config.testPlanKey } : {}),\n        },\n        tests,\n      };\n\n      const response = await deps.fetch(`${xrayBase}/api/v2/import/execution`, {\n        method: \"POST\",\n        headers: { Authorization: `Bearer ${bearer}`, \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(payload),\n      });\n\n      const text = await response.text();\n      if (!response.ok) {\n        throw new Error(`Xray import execution failed (${response.status}): ${text}`);\n      }\n\n      const imported = JSON.parse(text) as { id?: string; key?: string };\n      return {\n        runId: imported.key,\n        runUrl: imported.key ? issueUrl(imported.key) : undefined,\n        recorded: tests.length,\n        skipped: [],\n        attachmentsUploaded,\n      };\n    },\n  };\n}\n","/**\n * Provider registry.\n *\n * Adding a provider is one file next to this one plus one entry in the map\n * below. No dynamic import: the CLI ships as a Bun single binary, which cannot\n * see modules resolved at runtime, so adapters are in-tree by design.\n *\n * Credentials come from the environment only, never from the config file, so a\n * config can be committed without leaking anything.\n */\n\nimport type { AdapterDeps, SyncProvider } from \"../port\";\nimport type { SyncEngineConfig } from \"../engine\";\nimport { createTestRailProvider, type TestRailConfig } from \"./testrail\";\nimport { createXrayProvider, type XrayConfig } from \"./xray\";\n\nexport type ProviderName = \"testrail\" | \"xray\";\n\n/** Per-provider config as it appears under `sync` in executable-stories.config.mjs. */\nexport interface SyncTargets {\n  testrail?: TestRailConfig & Partial<SyncEngineConfig>;\n  xray?: XrayConfig & Partial<SyncEngineConfig>;\n}\n\nexport interface BuiltProvider {\n  provider: SyncProvider;\n  /** Engine defaults this provider implies, overridable per target in config. */\n  engineDefaults: SyncEngineConfig;\n}\n\nexport const PROVIDER_NAMES: ProviderName[] = [\"testrail\", \"xray\"];\n\nexport function isProviderName(value: string): value is ProviderName {\n  return (PROVIDER_NAMES as string[]).includes(value);\n}\n\nfunction required(env: Record<string, string | undefined>, name: string, hint: string): string {\n  const value = env[name];\n  if (!value) throw new Error(`Missing ${name}. ${hint}`);\n  return value;\n}\n\nexport function buildProvider(\n  args: { name: ProviderName; targets: SyncTargets; env: Record<string, string | undefined> },\n  deps: AdapterDeps,\n): BuiltProvider {\n  const { name, targets, env } = args;\n\n  if (name === \"testrail\") {\n    const config = targets.testrail;\n    if (!config) {\n      throw new Error(\n        'No TestRail config found. Add a `sync: { testrail: { url, projectId } }` block to executable-stories.config.mjs, or run \"executable-stories sync testrail --init\".',\n      );\n    }\n    const provider = createTestRailProvider(\n      config,\n      {\n        username: required(env, \"TESTRAIL_USERNAME\", \"This is the login email of the TestRail account.\"),\n        apiKey: required(\n          env,\n          \"TESTRAIL_API_KEY\",\n          \"Generate one in TestRail under My Settings -> API Keys. A password will not work when the instance requires API keys.\",\n        ),\n      },\n      deps,\n    );\n    return {\n      provider,\n      // TestRail ids are numeric and conventionally written \"C1234\" in a ticket,\n      // so the prefix is decoration and gets stripped.\n      engineDefaults: { ticketPrefix: \"C\", ticketPrefixStrip: true },\n    };\n  }\n\n  const config = targets.xray;\n  if (!config) {\n    throw new Error(\n      'No Xray config found. Add a `sync: { xray: { jiraBaseUrl, projectKey } }` block to executable-stories.config.mjs, or run \"executable-stories sync xray --init\".',\n    );\n  }\n  const provider = createXrayProvider(\n    config,\n    {\n      clientId: required(env, \"XRAY_CLIENT_ID\", \"Create an API key pair in Jira under Apps -> Xray -> API Keys.\"),\n      clientSecret: required(env, \"XRAY_CLIENT_SECRET\", \"This is the secret half of the Xray API key pair.\"),\n      jiraEmail: env[\"JIRA_EMAIL\"],\n      jiraToken: env[\"JIRA_TOKEN\"],\n    },\n    deps,\n  );\n  return {\n    provider,\n    // An Xray case id is a Jira issue key, so the project prefix is part of the\n    // id and must survive.\n    engineDefaults: { ticketPrefix: `${config.projectKey}-`, ticketPrefixStrip: false },\n  };\n}\n","/**\n * Cucumber JSON Formatter - Layer 3.\n *\n * Transforms canonical TestRunResult into Cucumber JSON format\n * compatible with cucumber-js v11.x output.\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport type { StoryStep, DocEntry } from \"executable-stories-core/types/story\";\nimport type {\n  TestRunResult,\n  TestCaseResult,\n  StepResult,\n  Attachment,\n} from \"executable-stories-core/types/test-result\";\nimport type {\n  IJsonFeature,\n  IJsonScenario,\n  IJsonStep,\n  IJsonTag,\n  IJsonEmbedding,\n  IJsonStepResult,\n} from \"../types/cucumber-json\";\nimport { generateFeatureId, generateScenarioId } from \"executable-stories-core/converters/acl/ids\";\nimport { createLineContext, advancePastFeature, advancePastScenario, generateStepLine } from \"executable-stories-core/converters/acl/lines\";\n\n/** Options for Cucumber JSON formatting */\nexport interface CucumberJsonOptions {\n  /** Pretty-print JSON output. Default: false */\n  pretty?: boolean;\n  /** Include trailing space in keywords. Default: true */\n  keywordSpacing?: boolean;\n}\n\n/**\n * Cucumber JSON Formatter.\n *\n * Transforms TestRunResult into an array of IJsonFeature objects\n * that match the Cucumber JSON format specification.\n */\nexport class CucumberJsonFormatter {\n  private options: Required<CucumberJsonOptions>;\n\n  constructor(options: CucumberJsonOptions = {}) {\n    this.options = {\n      pretty: options.pretty ?? false,\n      keywordSpacing: options.keywordSpacing ?? true,\n    };\n  }\n\n  /**\n   * Format a test run into Cucumber JSON features.\n   *\n   * Groups test cases by source file (one feature per file).\n   *\n   * @param run - Canonical test run result\n   * @returns Array of Cucumber JSON features\n   */\n  format(run: TestRunResult): IJsonFeature[] {\n    // Group test cases by source file\n    const byFile = new Map<string, TestCaseResult[]>();\n    for (const tc of run.testCases) {\n      const file = tc.sourceFile;\n      const existing = byFile.get(file);\n      if (existing) {\n        existing.push(tc);\n      } else {\n        byFile.set(file, [tc]);\n      }\n    }\n\n    // Build features\n    const features: IJsonFeature[] = [];\n    for (const [uri, testCases] of byFile) {\n      features.push(this.buildFeature(uri, testCases));\n    }\n\n    return features;\n  }\n\n  /**\n   * Format and serialize to JSON string.\n   *\n   * @param run - Canonical test run result\n   * @returns JSON string\n   */\n  formatToString(run: TestRunResult): string {\n    const features = this.format(run);\n    return this.options.pretty\n      ? JSON.stringify(features, null, 2)\n      : JSON.stringify(features);\n  }\n\n  /**\n   * Build a single feature from test cases in the same file.\n   */\n  private buildFeature(uri: string, testCases: TestCaseResult[]): IJsonFeature {\n    const featureName = this.extractFeatureName(uri, testCases);\n    const featureId = generateFeatureId(uri);\n\n    // Extract feature-level tags (union of all scenario tags)\n    const featureTags = this.extractFeatureTags(testCases);\n\n    // Build scenarios with deterministic line numbers\n    let lineCtx = createLineContext();\n    lineCtx = advancePastFeature(lineCtx);\n\n    const elements: IJsonScenario[] = [];\n    for (const tc of testCases) {\n      const [scenarioLine, nextCtx] = advancePastScenario(lineCtx, tc.story.steps.length);\n      elements.push(this.buildScenario(tc, featureId, scenarioLine));\n      lineCtx = nextCtx;\n    }\n\n    return {\n      description: \"\",\n      elements,\n      id: featureId,\n      keyword: \"Feature\",\n      line: 1,\n      name: featureName,\n      tags: featureTags,\n      uri,\n    };\n  }\n\n  /**\n   * Extract feature name from URI or test cases.\n   *\n   * Uses the top-level suite path if available, otherwise file name.\n   */\n  private extractFeatureName(uri: string, testCases: TestCaseResult[]): string {\n    // Try to get common suite path prefix\n    const suitePaths = testCases\n      .map((tc) => tc.titlePath)\n      .filter((p) => p.length > 0);\n\n    if (suitePaths.length > 0) {\n      // Use the first element of the first suite path as feature name\n      const firstPath = suitePaths[0];\n      if (firstPath.length > 0) {\n        return firstPath[0];\n      }\n    }\n\n    // Fall back to filename without extension\n    const filename = uri.split(\"/\").pop() ?? uri;\n    return filename.replace(/\\.[^.]+$/, \"\").replace(/[._-]/g, \" \");\n  }\n\n  /**\n   * Extract feature-level tags from all test cases.\n   */\n  private extractFeatureTags(testCases: TestCaseResult[]): IJsonTag[] {\n    // Collect all unique tags\n    const allTags = new Set<string>();\n    for (const tc of testCases) {\n      for (const tag of tc.tags) {\n        allTags.add(tag);\n      }\n    }\n\n    // Convert to IJsonTag format (with @ prefix if not present)\n    return [...allTags].sort().map((tag) => ({\n      name: tag.startsWith(\"@\") ? tag : `@${tag}`,\n      line: 1,\n    }));\n  }\n\n  /**\n   * Build a scenario from a test case.\n   */\n  private buildScenario(\n    tc: TestCaseResult,\n    featureId: string,\n    scenarioLine: number\n  ): IJsonScenario {\n    const scenarioName = tc.story.scenario;\n    const scenarioId = generateScenarioId(featureId, scenarioName);\n\n    // Build steps\n    const steps = this.buildSteps(tc, scenarioLine);\n\n    // Build scenario tags\n    const tags: IJsonTag[] = tc.tags.map((tag) => ({\n      name: tag.startsWith(\"@\") ? tag : `@${tag}`,\n      line: scenarioLine,\n    }));\n\n    return {\n      description: \"\",\n      id: scenarioId,\n      keyword: \"Scenario\",\n      line: scenarioLine,\n      name: scenarioName,\n      steps,\n      tags,\n      type: \"scenario\",\n    };\n  }\n\n  /**\n   * Build steps from story steps and step results.\n   */\n  private buildSteps(tc: TestCaseResult, scenarioLine: number): IJsonStep[] {\n    const storySteps = tc.story.steps;\n    const stepResults = tc.stepResults;\n\n    // Create a map of step results by index\n    const resultsByIndex = new Map<number, StepResult>();\n    for (const sr of stepResults) {\n      resultsByIndex.set(sr.index, sr);\n    }\n\n    // Check if any step failed (used to decide if last step gets attachments)\n    const hasFailedStep = stepResults.some(sr => sr.status === \"failed\");\n\n    const totalSteps = storySteps.length;\n    return storySteps.map((step, index) => {\n      const stepResult = resultsByIndex.get(index);\n      const stepLine = generateStepLine(scenarioLine, index);\n      const isLastStep = index === totalSteps - 1;\n      return this.buildStep(step, stepResult, stepLine, index, tc.attachments, isLastStep, hasFailedStep);\n    });\n  }\n\n  /**\n   * Build a single step.\n   */\n  private buildStep(\n    step: StoryStep,\n    result: StepResult | undefined,\n    line: number,\n    index: number,\n    attachments: Attachment[],\n    isLastStep: boolean,\n    hasFailedStep: boolean\n  ): IJsonStep {\n    // Keyword with optional trailing space\n    const keyword = this.options.keywordSpacing\n      ? `${step.keyword} `\n      : step.keyword;\n\n    // Build result\n    const stepResult = this.buildStepResult(result);\n\n    // Build embeddings for attachments (attach to failed step, or last step if no failure)\n    const embeddings = this.buildEmbeddings(attachments, result, isLastStep, hasFailedStep);\n\n    // Add screenshot docs as embeddings (always include with their step)\n    const screenshotEmbeddings = this.buildScreenshotEmbeddings(step);\n    embeddings.push(...screenshotEmbeddings);\n\n    const jsonStep: IJsonStep = {\n      keyword,\n      line,\n      name: step.text,\n      result: stepResult,\n    };\n\n    // Only include optional fields if they have values\n    if (embeddings.length > 0) {\n      jsonStep.embeddings = embeddings;\n    }\n\n    // Add step arguments (doc strings from docs, data tables)\n    const args = this.buildStepArguments(step);\n    if (args.length > 0) {\n      jsonStep.arguments = args;\n    }\n\n    return jsonStep;\n  }\n\n  /**\n   * Build embeddings from screenshot doc entries.\n   */\n  private buildScreenshotEmbeddings(step: StoryStep): IJsonEmbedding[] {\n    if (!step.docs) {\n      return [];\n    }\n\n    const embeddings: IJsonEmbedding[] = [];\n\n    for (const doc of step.docs) {\n      // Inline html content embeds as text/html — Cucumber HTML reporters\n      // render it natively. url/path variants degrade to step arguments.\n      if (doc.kind === \"html\" && doc.content !== undefined) {\n        embeddings.push({\n          data: Buffer.from(doc.content, \"utf8\").toString(\"base64\"),\n          mime_type: \"text/html\",\n          name: doc.title,\n        });\n        continue;\n      }\n\n      if (doc.kind !== \"screenshot\" || !doc.path.startsWith(\"data:\")) {\n        continue;\n      }\n\n      // Parse data URI: data:image/png;base64,ABC123...\n      const match = doc.path.match(/^data:([^;]+);base64,(.+)$/);\n      if (match) {\n        embeddings.push({\n          data: match[2],\n          mime_type: match[1],\n          name: doc.alt,\n        });\n      }\n    }\n\n    return embeddings;\n  }\n\n  /**\n   * Build step result.\n   */\n  private buildStepResult(result: StepResult | undefined): IJsonStepResult {\n    if (!result) {\n      return {\n        status: \"undefined\",\n        duration: 0,\n      };\n    }\n\n    // Map canonical status to Cucumber status\n    const statusMap: Record<string, IJsonStepResult[\"status\"]> = {\n      passed: \"passed\",\n      failed: \"failed\",\n      skipped: \"skipped\",\n      pending: \"pending\",\n    };\n\n    const stepResult: IJsonStepResult = {\n      status: statusMap[result.status] ?? \"undefined\",\n      // Duration in nanoseconds (Cucumber uses nanoseconds)\n      duration: result.durationMs * 1_000_000,\n    };\n\n    if (result.errorMessage) {\n      stepResult.error_message = result.errorMessage;\n    }\n\n    return stepResult;\n  }\n\n  /**\n   * Build embeddings (attachments) for a step.\n   *\n   * Cucumber convention: attach to the failing step, or last step if no failure.\n   */\n  private buildEmbeddings(\n    attachments: Attachment[],\n    result: StepResult | undefined,\n    isLastStep: boolean,\n    hasFailedStep: boolean\n  ): IJsonEmbedding[] {\n    const isFailed = result?.status === \"failed\";\n\n    // If this step failed, attach here\n    if (isFailed) {\n      // Continue to attach\n    } else if (isLastStep && !hasFailedStep) {\n      // No failed step in scenario, attach to last step\n    } else {\n      // Not a failed step, and either not last or there's a failed step elsewhere\n      return [];\n    }\n\n    // Only include BASE64 attachments - IDENTITY attachments are URLs/paths, not embeddable data\n    const base64Attachments = attachments.filter(\n      (att) => att.contentEncoding === \"BASE64\"\n    );\n\n    if (base64Attachments.length === 0) {\n      return [];\n    }\n\n    return base64Attachments.map((att) => ({\n      data: att.body,\n      mime_type: att.mediaType,\n      name: att.name,\n    }));\n  }\n\n  /**\n   * Build step arguments from step docs.\n   *\n   * Converts doc entries to Cucumber step arguments (doc strings, data tables).\n   */\n  private buildStepArguments(step: StoryStep): Array<{ doc_string?: { content: string; content_type?: string; line: number }; rows?: Array<{ cells: string[] }> }> {\n    if (!step.docs || step.docs.length === 0) {\n      return [];\n    }\n\n    const args: Array<{ doc_string?: { content: string; content_type?: string; line: number }; rows?: Array<{ cells: string[] }> }> = [];\n\n    for (const doc of step.docs) {\n      const arg = this.docEntryToArgument(doc);\n      if (arg) {\n        args.push(arg);\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Convert a doc entry to a Cucumber step argument.\n   */\n  private docEntryToArgument(doc: DocEntry): { doc_string?: { content: string; content_type?: string; line: number }; rows?: Array<{ cells: string[] }> } | null {\n    switch (doc.kind) {\n      case \"code\":\n        return {\n          doc_string: {\n            content: doc.content,\n            content_type: doc.lang,\n            line: 0,\n          },\n        };\n\n      case \"table\":\n        return {\n          rows: [\n            { cells: doc.columns },\n            ...doc.rows.map((row) => ({ cells: row })),\n          ],\n        };\n\n      case \"note\":\n        return {\n          doc_string: {\n            content: doc.text,\n            content_type: \"text/plain\",\n            line: 0,\n          },\n        };\n\n      case \"mermaid\":\n        return {\n          doc_string: {\n            content: doc.code,\n            content_type: \"text/x-mermaid\",\n            line: 0,\n          },\n        };\n\n      case \"section\":\n        return {\n          doc_string: {\n            content: `# ${doc.title}\\n\\n${doc.markdown}`,\n            content_type: \"text/markdown\",\n            line: 0,\n          },\n        };\n\n      case \"link\":\n        return {\n          doc_string: {\n            content: `[${doc.label}](${doc.url})`,\n            content_type: \"text/markdown\",\n            line: 0,\n          },\n        };\n\n      case \"kv\": {\n        const value = typeof doc.value === \"string\"\n          ? doc.value\n          : JSON.stringify(doc.value, null, 2);\n        return {\n          doc_string: {\n            content: `${doc.label}: ${value}`,\n            content_type: \"text/plain\",\n            line: 0,\n          },\n        };\n      }\n\n      case \"custom\":\n        if (doc.type === \"visual\" && doc.data && typeof doc.data === \"object\") {\n          const data = doc.data as Record<string, unknown>;\n          const status = typeof data.status === \"string\" ? data.status : \"unknown\";\n          const lines = [`Visual Check (${status})`];\n          if (typeof data.baseline === \"string\") lines.push(`Baseline: ${data.baseline}`);\n          if (typeof data.actual === \"string\") lines.push(`Actual: ${data.actual}`);\n          if (typeof data.diff === \"string\") lines.push(`Diff: ${data.diff}`);\n          return {\n            doc_string: {\n              content: lines.join(\"\\n\"),\n              content_type: \"text/plain\",\n              line: 0,\n            },\n          };\n        }\n        return {\n          doc_string: {\n            content: JSON.stringify(doc.data, null, 2),\n            content_type: \"application/json\",\n            line: 0,\n          },\n        };\n\n      case \"tag\":\n        return {\n          doc_string: {\n            content: doc.names.map((n) => `@${n}`).join(\" \"),\n            content_type: \"text/plain\",\n            line: 0,\n          },\n        };\n\n      case \"screenshot\":\n        // A `data:` screenshot is embedded by buildScreenshotEmbeddings. One\n        // that names a file cannot be, and returning null for it dropped the\n        // artifact from the report entirely, so it degrades to a link the way\n        // html does.\n        if (doc.path.startsWith(\"data:\")) return null;\n        return {\n          doc_string: {\n            content: `[${doc.alt ?? \"Screenshot\"}](${doc.path})`,\n            content_type: \"text/markdown\",\n            line: 0,\n          },\n        };\n\n      case \"video\":\n        // Never embedded: a clip is too large for a base64 payload in a JSON\n        // report, so the reference is the whole value.\n        return {\n          doc_string: {\n            content: `[${doc.caption ?? \"Video\"}](${doc.path})`,\n            content_type: \"text/markdown\",\n            line: 0,\n          },\n        };\n\n      case \"state\":\n        // State snapshots embed as JSON doc strings, label included.\n        return {\n          doc_string: {\n            content: JSON.stringify({ state: doc.label ?? \"State\", value: doc.value ?? null }, null, 2),\n            content_type: \"application/json\",\n            line: 0,\n          },\n        };\n\n      case \"html\":\n        // Inline html content is handled as a text/html embedding; url/path\n        // degrade to a markdown link argument so the reference survives.\n        if (doc.url !== undefined || doc.path !== undefined) {\n          return {\n            doc_string: {\n              content: `[${doc.title ?? \"Embedded HTML\"}](${doc.url ?? doc.path})`,\n              content_type: \"text/markdown\",\n              line: 0,\n            },\n          };\n        }\n        return null;\n    }\n\n    return assertNever(doc, \"Cucumber JSON: unhandled doc kind\");\n  }\n}\n","/**\n * StoryReportJsonFormatter — emit the public StoryReport contract as JSON.\n *\n * Wraps toStoryReport with a Formatter-compatible class interface and a\n * pretty-print option.\n */\n\nimport { toStoryReport } from \"executable-stories-core/converters/story-report\";\nimport type { StoryReport } from \"executable-stories-core/types/story-report\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nexport interface StoryReportJsonOptions {\n  /** Pretty-print JSON output with 2-space indent. Default: true. */\n  pretty?: boolean;\n  /**\n   * URL template for tickets that carry no URL of their own (`{ticket}` is the\n   * id). The same template the HTML report resolves with, so the contract an\n   * agent reads and the page a person opens link a ticket to the same place.\n   */\n  ticketUrlTemplate?: string;\n}\n\nexport class StoryReportJsonFormatter {\n  private options: StoryReportJsonOptions & { pretty: boolean };\n\n  constructor(options: StoryReportJsonOptions = {}) {\n    this.options = {\n      ...options,\n      pretty: options.pretty ?? true,\n    };\n  }\n\n  toReport(run: TestRunResult): StoryReport {\n    return toStoryReport(run, { ticketUrlTemplate: this.options.ticketUrlTemplate });\n  }\n\n  format(run: TestRunResult): string {\n    const report = this.toReport(run);\n    return this.options.pretty ? JSON.stringify(report, null, 2) : JSON.stringify(report);\n  }\n}\n","import { toStoryReport } from \"executable-stories-core/converters/story-report\";\nimport { scenarioContentHash } from \"executable-stories-core/explainer\";\nimport { assertionState } from \"executable-stories-core/utils/assertive-steps\";\nimport type { ReportFeature, ReportScenario, ReportStep, StoryReport, TestStatus } from \"executable-stories-core/types/story-report\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nexport interface ScenarioIndex {\n  schemaVersion: \"1.0\";\n  runId: string;\n  generatedAtMs: number;\n  summary: StoryReport[\"summary\"];\n  scenarios: ScenarioIndexItem[];\n}\n\n/**\n * One scenario as this formatter emits it.\n *\n * This is an OUTPUT type: it describes what `toScenarioIndex` produces, which\n * is why `hash` and `assertionState` are required here while\n * `scenario-index-v1.json` marks both optional. The schema is deliberately the\n * laxer of the two so artifacts written before either field existed still\n * validate; every artifact written since carries them.\n *\n * The consequence, and it is intended: parsing an arbitrary v1 file and casting\n * it to this type is not sound for those two fields. Validate against the\n * schema and treat them as optional if you are reading files you did not just\n * write.\n */\nexport interface ScenarioIndexItem {\n  id: string;\n  title: string;\n  /**\n   * Content hash (title + step keywords/texts) for explainer provenance —\n   * copy into an explainer's frontmatter `scenarios[].hash` so\n   * `check-explainers` can detect drift. Status is deliberately excluded.\n   */\n  hash: string;\n  status: TestStatus;\n  feature: string;\n  sourceFile: string;\n  sourceLine?: number;\n  tags: string[];\n  tickets: Array<{ id: string; url?: string }>;\n  covers: string[];\n  durationMs: number;\n  steps: ScenarioIndexStep[];\n  docKinds: string[];\n  error?: { message: string; stack?: string };\n  /**\n   * Whether the scenario's claim was checked: `asserted`, `unasserted`, or\n   * `unobserved` where the adapter cannot count. A passing scenario that is\n   * `unasserted` ran and proved nothing.\n   */\n  assertionState: \"asserted\" | \"unasserted\" | \"unobserved\";\n}\n\nexport interface ScenarioIndexStep {\n  id: string;\n  index: number;\n  keyword: ReportStep[\"keyword\"];\n  text: string;\n  status: TestStatus;\n  durationMs: number;\n  errorMessage?: string;\n  docKinds: string[];\n  /**\n   * Assertions the framework observed. Absent means the adapter has no counter;\n   * `0` means it counted none. Never defaulted — the difference is the point.\n   */\n  assertions?: number;\n}\n\nexport interface ScenarioIndexFilters {\n  statuses?: TestStatus[];\n  tags?: string[];\n  sourceFiles?: string[];\n}\n\nexport interface ScenarioIndexJsonOptions {\n  pretty?: boolean;\n  filters?: ScenarioIndexFilters;\n}\n\nexport class ScenarioIndexJsonFormatter {\n  private options: Required<Pick<ScenarioIndexJsonOptions, \"pretty\">> & {\n    filters?: ScenarioIndexFilters;\n  };\n\n  constructor(options: ScenarioIndexJsonOptions = {}) {\n    this.options = {\n      pretty: options.pretty ?? true,\n      filters: options.filters,\n    };\n  }\n\n  toIndex(run: TestRunResult): ScenarioIndex {\n    return toScenarioIndex(toStoryReport(run), this.options.filters);\n  }\n\n  format(run: TestRunResult): string {\n    const index = this.toIndex(run);\n    return this.options.pretty ? JSON.stringify(index, null, 2) : JSON.stringify(index);\n  }\n}\n\nexport function toScenarioIndex(\n  report: StoryReport,\n  filters: ScenarioIndexFilters = {},\n): ScenarioIndex {\n  const scenarios = report.features\n    .flatMap((feature) =>\n      feature.scenarios.map((scenario) => toScenarioIndexItem(feature, scenario)),\n    )\n    .filter((scenario) => matchesFilters(scenario, filters));\n\n  return {\n    schemaVersion: \"1.0\",\n    runId: report.runId,\n    generatedAtMs: report.finishedAtMs,\n    summary: summarize(scenarios),\n    scenarios,\n  };\n}\n\nfunction toScenarioIndexItem(\n  feature: ReportFeature,\n  scenario: ReportScenario,\n): ScenarioIndexItem {\n  return {\n    id: scenario.id,\n    title: scenario.title,\n    hash: scenarioContentHash(scenario),\n    status: scenario.status,\n    feature: feature.title,\n    sourceFile: feature.sourceFile,\n    sourceLine: scenario.sourceLine,\n    tags: scenario.tags,\n    tickets: scenario.tickets ?? [],\n    covers: scenario.covers ?? [],\n    durationMs: scenario.durationMs,\n    steps: scenario.steps.map((step) => ({\n      id: step.id,\n      index: step.index,\n      keyword: step.keyword,\n      text: step.text,\n      status: step.status,\n      durationMs: step.durationMs,\n      errorMessage: step.errorMessage,\n      docKinds: step.docEntries.map((entry) => entry.kind),\n      assertions: step.assertions,\n    })),\n    docKinds: scenario.docEntries.map((entry) => entry.kind),\n    assertionState: assertionState(scenario.steps),\n    error: scenario.errorMessage\n      ? { message: scenario.errorMessage, stack: scenario.errorStack }\n      : undefined,\n  };\n}\n\nfunction matchesFilters(\n  scenario: ScenarioIndexItem,\n  filters: ScenarioIndexFilters,\n): boolean {\n  if (filters.statuses?.length && !filters.statuses.includes(scenario.status)) {\n    return false;\n  }\n  if (\n    filters.tags?.length &&\n    !filters.tags.some((tag) => scenario.tags.includes(tag))\n  ) {\n    return false;\n  }\n  if (\n    filters.sourceFiles?.length &&\n    !filters.sourceFiles.some((sourceFile) => scenario.sourceFile.includes(sourceFile))\n  ) {\n    return false;\n  }\n  return true;\n}\n\nfunction summarize(scenarios: ScenarioIndexItem[]): StoryReport[\"summary\"] {\n  return {\n    total: scenarios.length,\n    passed: scenarios.filter((scenario) => scenario.status === \"passed\").length,\n    failed: scenarios.filter((scenario) => scenario.status === \"failed\").length,\n    skipped: scenarios.filter((scenario) => scenario.status === \"skipped\").length,\n    pending: scenarios.filter((scenario) => scenario.status === \"pending\").length,\n    durationMs: scenarios.reduce((total, scenario) => total + scenario.durationMs, 0),\n  };\n}\n","import { toStoryReport } from \"executable-stories-core/converters/story-report\";\nimport type { ReportDocEntry, ReportScenario, StoryReport } from \"executable-stories-core/types/story-report\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\n/**\n * agent-text — the full behaviour of a run as flat, token-lean plain text for\n * pasting into an LLM. Same content as the Markdown report (steps, doc\n * entries, errors) minus everything a model never reads: ids, hashes,\n * durations, source lines, HTML/Markdown chrome, and JSON punctuation. For a\n * structured contract use story-report-json; this format optimizes tokens,\n * not parseability.\n */\n\nconst STATUS_WORD: Record<string, string> = {\n  passed: \"PASS\",\n  failed: \"FAIL\",\n  skipped: \"SKIP\",\n  pending: \"PEND\",\n};\n\nexport class AgentTextFormatter {\n  format(run: TestRunResult): string {\n    return toAgentText(toStoryReport(run));\n  }\n}\n\nexport function toAgentText(report: StoryReport): string {\n  const s = report.summary;\n  const counts = [\n    s.passed && `${s.passed} passed`,\n    s.failed && `${s.failed} failed`,\n    s.skipped && `${s.skipped} skipped`,\n    s.pending && `${s.pending} pending`,\n  ]\n    .filter(Boolean)\n    .join(\", \");\n  const lines: string[] = [\n    `Test run: ${s.total} scenarios (${counts || \"none\"}).`,\n    \"Each block: STATUS Scenario title [tags]. Indented lines are its Given/When/Then steps; deeper lines are docs captured at that step.\",\n    \"\",\n  ];\n\n  for (const feature of report.features) {\n    lines.push(`feature ${feature.title} · ${feature.sourceFile}`);\n    for (const scenario of feature.scenarios) {\n      lines.push(\"\", ...scenarioLines(scenario));\n    }\n    lines.push(\"\");\n  }\n  return lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trimEnd() + \"\\n\";\n}\n\nfunction scenarioLines(scenario: ReportScenario): string[] {\n  const tags = scenario.tags.length ? ` [${scenario.tags.join(\" \")}]` : \"\";\n  const lines = [`${STATUS_WORD[scenario.status] ?? scenario.status.toUpperCase()} ${scenario.title}${tags}`];\n  for (const ticket of scenario.tickets ?? []) lines.push(`  ticket ${ticket.id}${ticket.url ? ` ${ticket.url}` : \"\"}`);\n  if (scenario.covers?.length) lines.push(`  covers ${scenario.covers.join(\", \")}`);\n  for (const step of scenario.steps) {\n    const failed = step.status === \"failed\" ? \" !! FAILED\" : \"\";\n    lines.push(`  ${step.keyword} ${step.text}${failed}`);\n    if (step.errorMessage) lines.push(indent(step.errorMessage, \"    ! \"));\n    if (step.expected !== undefined) lines.push(indent(`expected: ${step.expected}`, \"    ! \"));\n    if (step.actual !== undefined) lines.push(indent(`actual: ${step.actual}`, \"    ! \"));\n    for (const entry of step.docEntries) lines.push(...docLines(entry, \"    \"));\n  }\n  for (const entry of scenario.docEntries) lines.push(...docLines(entry, \"  \"));\n  if (scenario.errorMessage) lines.push(indent(`error: ${scenario.errorMessage}`, \"  \"));\n  return lines;\n}\n\nfunction docLines(entry: ReportDocEntry, pad: string): string[] {\n  const lines = ownDocLines(entry, pad);\n  for (const child of entry.children ?? []) lines.push(...docLines(child, pad + \"  \"));\n  return lines;\n}\n\nfunction ownDocLines(entry: ReportDocEntry, pad: string): string[] {\n  switch (entry.kind) {\n    case \"note\":\n      return [indent(entry.text, pad)];\n    case \"tag\":\n      // `story.tag()` writes a doc entry and nothing else: it never reaches\n      // `scenario.tags`, so returning [] here lost a step-level tag from the\n      // one format agents read. A scenario-level tag repeating its own tag\n      // line is the cheaper mistake.\n      return [`${pad}tag ${entry.names.join(\", \")}`];\n    case \"kv\":\n      return [`${pad}${entry.label}: ${compact(entry.value)}`];\n    case \"code\":\n      return [`${pad}code ${entry.label}${entry.lang ? ` (${entry.lang})` : \"\"}:`, indent(entry.content, pad + \"  \")];\n    case \"table\":\n      return [\n        `${pad}table ${entry.label}: ${entry.columns.join(\" | \")}`,\n        ...entry.rows.map((row) => `${pad}  ${row.join(\" | \")}`),\n      ];\n    case \"link\":\n      return [`${pad}link ${entry.label}: ${entry.url}`];\n    case \"section\":\n      return [`${pad}section ${entry.title}:`, indent(entry.markdown, pad + \"  \")];\n    case \"mermaid\":\n      return [`${pad}mermaid${entry.title ? ` ${entry.title}` : \"\"}:`, indent(entry.code, pad + \"  \")];\n    case \"screenshot\":\n      return [`${pad}screenshot ${entry.path}${entry.alt ? ` — ${entry.alt}` : \"\"}`];\n    case \"video\":\n      return [`${pad}video ${entry.path}${entry.caption ? ` — ${entry.caption}` : \"\"}`];\n    case \"html\":\n      return [`${pad}html ${entry.title ?? entry.path ?? entry.url ?? \"(inline)\"}`];\n    case \"state\":\n      return [`${pad}state${entry.label ? ` ${entry.label}` : \"\"}: ${compact(entry.value)}`];\n    case \"custom\":\n      return [`${pad}custom ${entry.type}: ${compact(entry.data)}`];\n  }\n}\n\nfunction compact(value: unknown): string {\n  return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nfunction indent(text: string, pad: string): string {\n  return text\n    .split(\"\\n\")\n    .map((line) => pad + line)\n    .join(\"\\n\");\n}\n","import { toScenarioIndex, type ScenarioIndex, type ScenarioIndexItem } from \"./scenario-index-json\";\nimport type { StoryReport } from \"executable-stories-core/types/story-report\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport { toStoryReport } from \"executable-stories-core/converters/story-report\";\n\nexport interface BehaviorManifest {\n  schemaVersion: \"1.0\";\n  runId: string;\n  generatedAtMs: number;\n  summary: ScenarioIndex[\"summary\"];\n  sourceFiles: BehaviorSourceFile[];\n  tags: BehaviorTag[];\n  docCoverage: {\n    scenariosWithDocs: number;\n    scenariosWithoutDocs: number;\n    docKinds: string[];\n  };\n  debugger: BehaviorDebuggerIssue[];\n}\n\nexport interface BehaviorSourceFile {\n  path: string;\n  scenarioCount: number;\n  failed: number;\n  tags: string[];\n}\n\nexport interface BehaviorTag {\n  name: string;\n  scenarioCount: number;\n}\n\nexport interface BehaviorDebuggerIssue {\n  severity: \"warning\";\n  code: \"missing-docs\" | \"missing-tags\" | \"missing-covers\" | \"missing-source-line\";\n  scenarioId: string;\n  title: string;\n  message: string;\n}\n\nexport interface BehaviorManifestJsonOptions {\n  pretty?: boolean;\n}\n\nexport class BehaviorManifestJsonFormatter {\n  private pretty: boolean;\n\n  constructor(options: BehaviorManifestJsonOptions = {}) {\n    this.pretty = options.pretty ?? true;\n  }\n\n  toManifest(run: TestRunResult): BehaviorManifest {\n    return toBehaviorManifest(toStoryReport(run));\n  }\n\n  format(run: TestRunResult): string {\n    const manifest = this.toManifest(run);\n    return this.pretty ? JSON.stringify(manifest, null, 2) : JSON.stringify(manifest);\n  }\n}\n\nexport function toBehaviorManifest(report: StoryReport): BehaviorManifest {\n  const index = toScenarioIndex(report);\n  const bySource = new Map<string, BehaviorSourceFile>();\n  const byTag = new Map<string, BehaviorTag>();\n  const docKinds = new Set<string>();\n  const debuggerIssues: BehaviorDebuggerIssue[] = [];\n\n  for (const scenario of index.scenarios) {\n    const source = bySource.get(scenario.sourceFile) ?? {\n      path: scenario.sourceFile,\n      scenarioCount: 0,\n      failed: 0,\n      tags: [],\n    };\n    source.scenarioCount += 1;\n    if (scenario.status === \"failed\") source.failed += 1;\n    source.tags = [...new Set([...source.tags, ...scenario.tags])].sort();\n    bySource.set(scenario.sourceFile, source);\n\n    for (const tag of scenario.tags) {\n      const tagEntry = byTag.get(tag) ?? { name: tag, scenarioCount: 0 };\n      tagEntry.scenarioCount += 1;\n      byTag.set(tag, tagEntry);\n    }\n\n    for (const kind of scenario.docKinds) docKinds.add(kind);\n    for (const step of scenario.steps) {\n      for (const kind of step.docKinds) docKinds.add(kind);\n    }\n\n    if (!scenarioHasDocs(scenario)) {\n      debuggerIssues.push({\n        severity: \"warning\",\n        code: \"missing-docs\",\n        scenarioId: scenario.id,\n        title: scenario.title,\n        message: \"Scenario has no doc entries.\",\n      });\n    }\n    if (scenario.tags.length === 0) {\n      debuggerIssues.push({\n        severity: \"warning\",\n        code: \"missing-tags\",\n        scenarioId: scenario.id,\n        title: scenario.title,\n        message: \"Scenario has no tags.\",\n      });\n    }\n    if (scenario.covers.length === 0) {\n      debuggerIssues.push({\n        severity: \"warning\",\n        code: \"missing-covers\",\n        scenarioId: scenario.id,\n        title: scenario.title,\n        message: \"Scenario declares no covers (product-code paths), so code→scenario lookup cannot find it.\",\n      });\n    }\n    if (scenario.sourceLine === undefined) {\n      debuggerIssues.push({\n        severity: \"warning\",\n        code: \"missing-source-line\",\n        scenarioId: scenario.id,\n        title: scenario.title,\n        message: \"Scenario has no source line.\",\n      });\n    }\n  }\n\n  const scenariosWithDocs = index.scenarios.filter(scenarioHasDocs).length;\n\n  return {\n    schemaVersion: \"1.0\",\n    runId: report.runId,\n    generatedAtMs: report.finishedAtMs,\n    summary: index.summary,\n    sourceFiles: [...bySource.values()].sort((a, b) => a.path.localeCompare(b.path)),\n    tags: [...byTag.values()].sort((a, b) => a.name.localeCompare(b.name)),\n    docCoverage: {\n      scenariosWithDocs,\n      scenariosWithoutDocs: index.scenarios.length - scenariosWithDocs,\n      docKinds: [...docKinds].sort(),\n    },\n    debugger: debuggerIssues,\n  };\n}\n\nfunction scenarioHasDocs(scenario: ScenarioIndexItem): boolean {\n  return (\n    scenario.docKinds.length > 0 ||\n    scenario.steps.some((step) => step.docKinds.length > 0)\n  );\n}\n","import type { SortTestCasesMode, Logger } from \"./types/options\";\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\n\nexport interface SelectTestCasesArgs {\n  testCases: TestCaseResult[];\n  include?: string[];\n  exclude?: string[];\n  includeTags?: string[];\n  excludeTags?: string[];\n  sortTestCases?: SortTestCasesMode;\n}\n\nexport interface SelectTestCasesDeps {\n  logger: Logger;\n}\n\nexport function matchesPattern(pattern: string, sourceFile: string): boolean {\n  const normalizedPattern = pattern.replace(/\\\\/g, \"/\");\n  const normalizedFile = sourceFile.replace(/\\\\/g, \"/\");\n\n  const regexStr = normalizedPattern\n    .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n    .replace(/\\*\\*/g, \"{{GLOBSTAR}}\")\n    .replace(/\\*/g, \"[^/]*\")\n    .replace(/{{GLOBSTAR}}/g, \".*\");\n\n  const regex = new RegExp(`^${regexStr}$`);\n  return regex.test(normalizedFile);\n}\n\nfunction filterTestCasesByGlobs(\n  testCases: TestCaseResult[],\n  include: string[],\n  exclude: string[],\n  logger: Logger\n): TestCaseResult[] {\n  if (include.length === 0 && exclude.length === 0) return testCases;\n\n  const filtered: TestCaseResult[] = [];\n  for (const tc of testCases) {\n    const sourceFile = tc.sourceFile.replace(/\\\\/g, \"/\");\n\n    if (include.length > 0) {\n      const included = include.some((pattern) => matchesPattern(pattern, sourceFile));\n      if (!included) continue;\n    }\n\n    if (exclude.length > 0) {\n      const excluded = exclude.some((pattern) => matchesPattern(pattern, sourceFile));\n      if (excluded) continue;\n    }\n\n    filtered.push(tc);\n  }\n\n  const dropped = testCases.length - filtered.length;\n  if (dropped > 0) {\n    logger.warn(\n      `Filtered ${dropped} test case(s) by include/exclude globs (${filtered.length} included)`\n    );\n  }\n\n  return filtered;\n}\n\nfunction filterTestCasesByTags(\n  testCases: TestCaseResult[],\n  includeTags: string[],\n  excludeTags: string[],\n  logger: Logger\n): TestCaseResult[] {\n  if (includeTags.length === 0 && excludeTags.length === 0) return testCases;\n\n  const filtered: TestCaseResult[] = [];\n  for (const tc of testCases) {\n    if (includeTags.length > 0) {\n      const included = tc.tags.some((tag) => includeTags.includes(tag));\n      if (!included) continue;\n    }\n\n    if (excludeTags.length > 0) {\n      const excluded = tc.tags.some((tag) => excludeTags.includes(tag));\n      if (excluded) continue;\n    }\n\n    filtered.push(tc);\n  }\n\n  const dropped = testCases.length - filtered.length;\n  if (dropped > 0) {\n    logger.warn(\n      `Filtered ${dropped} test case(s) by include/exclude tags (${filtered.length} included)`\n    );\n  }\n\n  return filtered;\n}\n\nfunction sortTestCases(\n  testCases: TestCaseResult[],\n  sortMode: SortTestCasesMode\n): TestCaseResult[] {\n  if (sortMode === \"none\") return testCases;\n\n  return [...testCases].sort((a, b) => {\n    if (sortMode === \"id\") {\n      return a.id.localeCompare(b.id);\n    }\n\n    if (a.sourceFile !== b.sourceFile) {\n      return a.sourceFile.localeCompare(b.sourceFile);\n    }\n    if (a.sourceLine !== b.sourceLine) {\n      return a.sourceLine - b.sourceLine;\n    }\n    if (a.story.scenario !== b.story.scenario) {\n      return a.story.scenario.localeCompare(b.story.scenario);\n    }\n    return a.id.localeCompare(b.id);\n  });\n}\n\n/**\n * A selector that matches nothing filters nothing, and says so to no one: the\n * run looks filtered, the report is the whole suite, and the usual cause is a\n * path that moved or a tag that was renamed since the flag was written. Name\n * every such selector once, so a stale filter is visible instead of silent.\n */\nfunction warnUnmatchedSelectors(\n  testCases: TestCaseResult[],\n  selectors: { flag: string; values: string[]; matches: (value: string, tc: TestCaseResult) => boolean }[],\n  logger: Logger\n): void {\n  const unmatched: string[] = [];\n  for (const { flag, values, matches } of selectors) {\n    for (const value of values) {\n      if (!testCases.some((tc) => matches(value, tc))) {\n        unmatched.push(`${flag} \"${value}\"`);\n      }\n    }\n  }\n  if (unmatched.length === 0) return;\n\n  logger.warn(\n    `${unmatched.length} selector(s) matched no test case and filtered nothing: ${unmatched.join(\", \")}. ` +\n      `The path or tag each names may have moved or been renamed.`\n  );\n}\n\nexport function selectTestCases(\n  args: SelectTestCasesArgs,\n  deps: SelectTestCasesDeps\n): TestCaseResult[] {\n  const include = args.include ?? [];\n  const exclude = args.exclude ?? [];\n  const includeTags = args.includeTags ?? [];\n  const excludeTags = args.excludeTags ?? [];\n  const sortMode = args.sortTestCases ?? \"none\";\n\n  const byGlob = (pattern: string, tc: TestCaseResult) =>\n    matchesPattern(pattern, tc.sourceFile.replace(/\\\\/g, \"/\"));\n  const byTag = (tag: string, tc: TestCaseResult) => tc.tags.includes(tag);\n  warnUnmatchedSelectors(\n    args.testCases,\n    [\n      { flag: \"--include\", values: include, matches: byGlob },\n      { flag: \"--exclude\", values: exclude, matches: byGlob },\n      { flag: \"--include-tags\", values: includeTags, matches: byTag },\n      { flag: \"--exclude-tags\", values: excludeTags, matches: byTag },\n    ],\n    deps.logger\n  );\n\n  let selected = filterTestCasesByGlobs(\n    args.testCases,\n    include,\n    exclude,\n    deps.logger\n  );\n\n  selected = filterTestCasesByTags(\n    selected,\n    includeTags,\n    excludeTags,\n    deps.logger\n  );\n\n  return sortTestCases(selected, sortMode);\n}\n","import { matchesPattern } from \"./select-test-cases\";\nimport type { ScenarioIndex, ScenarioIndexItem } from \"./formatters/scenario-index-json\";\n\n/** Strip a leading \"./\" so query paths and covers globs compare on equal footing. */\nfunction normalizePath(path: string): string {\n  return path.replace(/^\\.\\//, \"\");\n}\n\n/**\n * Return scenarios whose declared `covers` globs match any of the given paths.\n * Accepts many paths so callers can pass a whole changed-file list (e.g. a git diff).\n * Results are deduped (filter preserves index order, so each scenario appears once).\n */\nexport function scenariosCoveringPaths(\n  index: ScenarioIndex,\n  paths: string[],\n): ScenarioIndexItem[] {\n  const queries = paths.map(normalizePath);\n  return index.scenarios.filter((scenario) =>\n    scenario.covers.some((glob) =>\n      queries.some((path) => matchesPattern(normalizePath(glob), path)),\n    ),\n  );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport { canonicalizeRun } from \"executable-stories-core/converters/acl/canonicalize\";\nimport { synthesizeStories } from \"executable-stories-core/converters/synthesize\";\nimport { ReportGenerator } from \"./report-generator\";\nimport type { OutputFormat } from \"./types/options\";\nimport type { RawRun } from \"executable-stories-core/types/raw\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nexport interface WatchOptions {\n  /** Path to the raw-run (or canonical) JSON the framework adapter writes. */\n  input: string;\n  outputDir: string;\n  outputName: string;\n  formats: OutputFormat[];\n  /** Input is \"raw\" (default) or already-canonical \"canonical\". */\n  inputType?: \"raw\" | \"canonical\";\n  /** Synthesize story metadata for plain tests (raw input only). Default true. */\n  synthesize?: boolean;\n  /** Coalesce rapid change events. Default 150ms. */\n  debounceMs?: number;\n}\n\nexport interface RegenerateDeps {\n  readFile?: (filePath: string) => string;\n}\n\nfunction toRun(data: unknown, inputType: \"raw\" | \"canonical\", synthesize: boolean): TestRunResult {\n  if (inputType === \"canonical\") return data as TestRunResult;\n  let raw = data as RawRun;\n  if (synthesize) raw = synthesizeStories(raw);\n  return canonicalizeRun(raw);\n}\n\n/**\n * Read a raw-run (or canonical) file once, canonicalize it, and regenerate the\n * requested agent artifacts via the canonical {@link ReportGenerator}. Returns\n * both the written file paths and the canonical run, so a caller that also needs\n * the run (e.g. `serve`, to diff it) does not read and canonicalize a second\n * time. This is the unit of work the watcher repeats.\n */\nexport async function regenerateRun(\n  options: WatchOptions,\n  deps: RegenerateDeps = {},\n): Promise<{ files: string[]; run: TestRunResult }> {\n  const read = deps.readFile ?? ((filePath: string) => fs.readFileSync(filePath, \"utf8\"));\n  const data: unknown = JSON.parse(read(path.resolve(options.input)));\n  const run = toRun(data, options.inputType ?? \"raw\", options.synthesize !== false);\n\n  const generator = new ReportGenerator({\n    formats: options.formats,\n    outputDir: options.outputDir,\n    outputName: options.outputName,\n  });\n  const result = await generator.generate(run);\n  // The generator folds this run into what earlier runs accumulated, so the\n  // rendered run is what the artifacts on disk describe. A caller diffing or\n  // reporting against the run it handed in would see only the fraction this\n  // invocation read.\n  return { files: [...result.values()].flat(), run: generator.renderedRun ?? run };\n}\n\n/** Regenerate artifacts and return just the written file paths. */\nexport async function regenerateArtifacts(\n  options: WatchOptions,\n  deps: RegenerateDeps = {},\n): Promise<string[]> {\n  return (await regenerateRun(options, deps)).files;\n}\n\nexport interface WatchDeps extends RegenerateDeps {\n  /** Watch a path, calling the listener on every change. Injectable for tests. */\n  watch?: (filePath: string, listener: () => void) => { close: () => void };\n  /** Override the regenerate step (tests). */\n  regenerate?: (input: string) => Promise<string[]>;\n  log?: (message: string) => void;\n}\n\nexport interface WatchHandle {\n  close: () => void;\n}\n\n/**\n * Keep the agent artifacts fresh: regenerate them whenever the framework\n * rewrites its raw-run file. Language-agnostic — any adapter that emits a\n * raw-run drives it. Pair with the host framework's own `--watch` to get a\n * behavior index that tracks the code.\n */\nexport function startWatch(options: WatchOptions, deps: WatchDeps = {}): WatchHandle {\n  const log = deps.log ?? ((message: string) => console.log(message));\n  const regenerate =\n    deps.regenerate ?? ((input: string) => regenerateArtifacts({ ...options, input }, deps));\n  const watchFn =\n    deps.watch ?? ((filePath: string, listener: () => void) => fs.watch(filePath, listener));\n  const debounceMs = options.debounceMs ?? 150;\n\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  let running = false;\n  let pending = false;\n\n  const run = async (): Promise<void> => {\n    // A regenerate is already in flight; remember to run once more when it ends.\n    if (running) {\n      pending = true;\n      return;\n    }\n    running = true;\n    try {\n      const files = await regenerate(options.input);\n      log(`Regenerated ${files.length} artifact file(s) from ${options.input}`);\n    } catch (error) {\n      log(`Watch regeneration failed: ${(error as Error).message}`);\n    } finally {\n      running = false;\n      if (pending) {\n        pending = false;\n        trigger();\n      }\n    }\n  };\n\n  const trigger = (): void => {\n    if (timer) clearTimeout(timer);\n    timer = setTimeout(() => void run(), debounceMs);\n  };\n\n  trigger(); // initial build\n  const watcher = watchFn(path.resolve(options.input), trigger);\n\n  return {\n    close: () => {\n      if (timer) clearTimeout(timer);\n      watcher.close();\n    },\n  };\n}\n","/**\n * ReportGenerator — turns a canonical TestRunResult into report files.\n *\n * Its own module rather than part of the package barrel: `watch.ts` needs the\n * generator, and reaching for it through `./index` would pull every formatter\n * and the React SSR path into that module's graph.\n */\n\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport * as fsPromises from \"node:fs/promises\";\nimport { toStoryReportWithIndex } from \"executable-stories-core/converters/story-report\";\nimport type { ScenarioRunEvent } from \"executable-stories-react/ssr\";\nimport type { TestRunResult, TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type { FormatterOptions, ResolvedFormatterOptions, OutputFormat, FormatInput, OutputMode, ColocatedStyle, OutputRule, Logger, WriteFile } from \"./types/options\";\nimport type { RunDiffResult } from \"./types/compare\";\nimport { reactReportCss, reactIslandScript } from \"./generated/react-assets\";\nimport { CucumberJsonFormatter } from \"./formatters/cucumber-json\";\nimport { StoryReportJsonFormatter } from \"./formatters/story-report-json\";\nimport { ScenarioIndexJsonFormatter } from \"./formatters/scenario-index-json\";\nimport { BehaviorManifestJsonFormatter } from \"./formatters/behavior-manifest-json\";\nimport { AgentTextFormatter } from \"./formatters/agent-text\";\nimport { SpanGraphFormatter } from \"./formatters/span-graph\";\nimport { JUnitFormatter } from \"./formatters/junit-xml\";\nimport { MarkdownFormatter } from \"./formatters/markdown\";\nimport { ReleaseManifestFormatter } from \"./formatters/release-manifest\";\nimport { TraceabilityCsvFormatter, TraceabilityMatrixFormatter } from \"./formatters/traceability-matrix\";\nimport { CucumberMessagesFormatter } from \"./formatters/cucumber-messages/formatter\";\nimport { CucumberHtmlFormatter } from \"./formatters/cucumber-html\";\nimport { buildIndexEntries, renderColocatedIndex } from \"./colocated-index\";\nimport { updateFileReports } from \"./file-reports\";\nimport { matchesPattern, selectTestCases } from \"./select-test-cases\";\nimport { AstroFormatter } from \"./formatters/astro\";\nimport { cleanTestStem } from \"executable-stories-core/utils/source-file\";\nimport { ConfluenceFormatter } from \"./formatters/confluence\";\nimport { copyMarkdownAssets } from \"./formatters/astro-assets\";\nimport { bundleAssets } from \"./bundler/bundle-assets\";\n\n// ============================================================================\n// ReportGenerator Types (fn(args, deps) pattern)\n// ============================================================================\n\n/** Arguments for generate function */\nexport interface GenerateArgs {\n  /** Canonical test run result */\n  run: TestRunResult;\n  /** Optional options override */\n  options?: FormatterOptions;\n}\n\n/** Dependencies for generate function (injectable for testing) */\nexport interface GenerateDeps {\n  /** Logger for warnings */\n  logger: Logger;\n  /** File writer function */\n  writeFile: WriteFile;\n  /** Read a file. Throws when it is not there, like `fs.readFileSync`. */\n  readFile: (filePath: string) => string;\n  /** List a directory's entries, or undefined when it is not one. */\n  listDir: (dir: string) => string[] | undefined;\n  /** True when the path is present in the working tree. */\n  fileExists: (filePath: string) => boolean;\n  /** Delete a file. Absent paths are not an error. */\n  removeFile: (filePath: string) => Promise<void>;\n}\n\n/** Options for one `generate` call. */\nexport interface GenerateOptions {\n  /**\n   * Whether this run owns the reports of the files it covers and should update\n   * them. True for a test run. False when rendering an already-assembled run,\n   * such as the aggregate of a shard directory, which owns nothing.\n   */\n  persist?: boolean;\n}\n\n/**\n * Formats that describe one execution rather than the documented behaviour of a\n * suite. CI dashboards and Cucumber tooling read these as \"what this build ran\",\n * so they are rendered from the run in hand, never from accumulated reports.\n */\nconst EXECUTION_FORMATS: ReadonlySet<OutputFormat> = new Set<OutputFormat>([\n  \"junit\",\n  \"cucumber-json\",\n  \"cucumber-messages\",\n  \"cucumber-html\",\n  \"release-manifest\",\n]);\n\n/** Result of generate function: Map of format to array of file paths */\nexport type GenerateResult = Map<OutputFormat, string[]>;\n\nexport interface GenerateCompareResult {\n  files: string[];\n  diff: RunDiffResult;\n}\n\n/** Extension map for output formats */\n/**\n * Formats whose empty output means \"nothing to report\", not \"an empty report\".\n * Every other format writes its file even when the run is empty, and changing\n * that would silently stop producing artifacts CI expects to find.\n */\nconst SKIP_WHEN_EMPTY: ReadonlySet<string> = new Set([\"span-graph\"]);\n\nconst FORMAT_EXTENSIONS: Record<OutputFormat, string> = {\n  \"agent-text\": \".agent.txt\",\n  \"span-graph\": \".span-graph.md\",\n  \"astro-markdown\": \".md\",\n  \"behavior-manifest-json\": \".behavior-manifest.json\",\n  markdown: \".md\",\n  \"release-manifest\": \".release-manifest.md\",\n  \"traceability-matrix\": \".traceability-matrix.md\",\n  \"traceability-csv\": \".traceability.csv\",\n  html: \".html\",\n  \"cucumber-html\": \".cucumber.html\",\n  junit: \".junit.xml\",\n  \"cucumber-json\": \".cucumber.json\",\n  \"cucumber-messages\": \".ndjson\",\n  confluence: \".adf.json\",\n  \"scenario-index-json\": \".scenario-index.json\",\n  \"story-report-json\": \".story-report.json\",\n};\n\n/**\n * Join an output name with a format extension, collapsing a stutter when the\n * chosen name already carries the format's tag. With the default name \"index\",\n * `story-report-json` writes `index.story-report.json`; but if the caller names\n * the file `story-report`, this yields `story-report.json`, not\n * `story-report.story-report.json`.\n */\nexport function joinNameAndExt(name: string, ext: string): string {\n  const stutter = `.${name}.`;\n  return ext.startsWith(stutter) ? `${name}.${ext.slice(stutter.length)}` : `${name}${ext}`;\n}\n\nfunction quoteShellArgument(value: string): string {\n  return /^[a-zA-Z0-9_./:-]+$/.test(value)\n    ? value\n    : \"'\" + value.replaceAll(\"'\", \"'\\\"'\\\"'\") + \"'\";\n}\n\n/** Known test file extensions to strip for colocated naming */\nconst TEST_EXTENSIONS = [\n  \".test.ts\", \".test.tsx\", \".spec.ts\", \".spec.tsx\",\n  \".test.js\", \".spec.js\", \".story.test.ts\", \".story.spec.ts\",\n];\n\n// ============================================================================\n// Pure Functions for Output Routing\n// ============================================================================\n\n/**\n * Find the first matching rule for a source file.\n */\nfunction findMatchingRule(\n  sourceFile: string,\n  rules: OutputRule[]\n): OutputRule | undefined {\n  for (const rule of rules) {\n    if (matchesPattern(rule.match, sourceFile)) {\n      return rule;\n    }\n  }\n  return undefined;\n}\n\n/**\n * Effective output mode for a source file: the matching rule's mode, else the\n * global default. Mirrors the resolution in groupTestCasesByOutput, including\n * the fallback where a colocated file with no known source aggregates instead.\n */\nfunction effectiveOutputMode(\n  sourceFile: string,\n  options: ResolvedFormatterOptions\n): OutputMode {\n  const rule = findMatchingRule(sourceFile, options.output.rules);\n  const mode = rule?.mode ?? options.output.mode;\n  return mode === \"colocated\" && sourceFile === \"unknown\" ? \"aggregated\" : mode;\n}\n\n/**\n * Normalize path to posix format (forward slashes).\n */\nexport function toPosix(p: string): string {\n  return p.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Compute output path for a test case based on mode and settings.\n */\nfunction computeOutputPath(\n  sourceFile: string,\n  format: OutputFormat,\n  mode: OutputMode,\n  colocatedStyle: ColocatedStyle,\n  baseOutputDir: string,\n  outputName: string,\n  outputNameSuffix?: string\n): string {\n  const ext = FORMAT_EXTENSIONS[format];\n  const effectiveName = outputName + (outputNameSuffix ?? \"\");\n\n  if (mode === \"aggregated\") {\n    // Aggregated: single file in outputDir\n    return toPosix(path.join(baseOutputDir, joinNameAndExt(effectiveName, ext)));\n  }\n\n  // Colocated mode - normalize source file to posix first\n  const normalizedSource = toPosix(sourceFile);\n  const dirOfSource = path.posix.dirname(normalizedSource);\n  let baseName = path.posix.basename(normalizedSource);\n\n  // Strip test extension\n  for (const testExt of TEST_EXTENSIONS) {\n    if (baseName.endsWith(testExt)) {\n      baseName = baseName.slice(0, -testExt.length);\n      break;\n    }\n  }\n\n  const fileName = `${baseName}.${effectiveName}${ext}`;\n\n  if (colocatedStyle === \"adjacent\") {\n    // Adjacent: write next to source file (ignores outputDir)\n    return toPosix(path.posix.join(dirOfSource, fileName));\n  }\n\n  if (colocatedStyle === \"flat\") {\n    // Flat: one cleanly-named page per file directly under outputDir, for a\n    // browsable docs nav with tidy URLs (e.g. /stories/convert-currency/).\n    return toPosix(path.posix.join(baseOutputDir, `${cleanTestStem(normalizedSource)}${ext}`));\n  }\n\n  // Mirrored: preserve directory structure under outputDir\n  return toPosix(path.posix.join(baseOutputDir, dirOfSource, fileName));\n}\n\n/**\n * Group test cases by their computed output path.\n */\nfunction groupTestCasesByOutput(\n  testCases: TestCaseResult[],\n  format: OutputFormat,\n  options: ResolvedFormatterOptions,\n  logger: Logger,\n  outputNameSuffix?: string\n): Map<string, TestCaseResult[]> {\n  const groups = new Map<string, TestCaseResult[]>();\n  const rules = options.output.rules;\n  const defaultMode = options.output.mode;\n  const defaultColocatedStyle = options.output.colocatedStyle;\n  const defaultFormats = options.formats;\n  const defaultOutputDir = options.outputDir;\n  const defaultOutputName = options.outputName;\n\n  for (const tc of testCases) {\n    const sourceFile = tc.sourceFile;\n\n    // Check if colocated mode but missing sourceFile\n    if (defaultMode === \"colocated\" && sourceFile === \"unknown\") {\n      logger.warn(\n        `Test case \"${tc.story.scenario}\" missing sourceFile, falling back to aggregated`\n      );\n    }\n\n    // Find matching rule\n    const rule = findMatchingRule(sourceFile, rules);\n\n    // Determine effective settings (first match wins, fall back to defaults)\n    const mode = rule?.mode ?? defaultMode;\n    const colocatedStyle = rule?.colocatedStyle ?? defaultColocatedStyle;\n    const formats = normalizeFormats(rule?.formats ?? defaultFormats);\n    const outputDir = rule?.outputDir ?? defaultOutputDir;\n    const outputName = rule?.outputName ?? options.output.outputName ?? defaultOutputName;\n\n    // Warn if rule sets both adjacent style and outputDir\n    if (\n      rule &&\n      rule.colocatedStyle === \"adjacent\" &&\n      rule.outputDir !== undefined\n    ) {\n      logger.warn(\n        `Rule for \"${rule.match}\" sets both colocatedStyle: \"adjacent\" and outputDir. outputDir will be ignored for adjacent mode.`\n      );\n    }\n\n    // Skip if format not in effective formats\n    if (!formats.includes(format)) {\n      continue;\n    }\n\n    // Handle missing sourceFile in colocated mode\n    const effectiveMode =\n      mode === \"colocated\" && sourceFile === \"unknown\" ? \"aggregated\" : mode;\n\n    const outputPath = computeOutputPath(\n      sourceFile,\n      format,\n      effectiveMode,\n      colocatedStyle,\n      outputDir,\n      outputName,\n      outputNameSuffix\n    );\n\n    const existing = groups.get(outputPath);\n    if (existing) {\n      existing.push(tc);\n    } else {\n      groups.set(outputPath, [tc]);\n    }\n  }\n\n  return groups;\n}\n\n// ============================================================================\n// ReportGenerator\n// ============================================================================\n\n/**\n * High-level report generator that combines multiple formatters.\n *\n * Accepts ONLY canonical TestRunResult - use adapters + canonicalizeRun first.\n *\n * Supports output routing:\n * - Aggregated: All test cases in a single file\n * - Colocated mirrored: Files mirrored under outputDir preserving directory structure\n * - Colocated adjacent: Files written next to source files\n * - Rule-based: Different routing based on source file patterns\n */\n\nlet astroAliasWarned = false;\n\n/**\n * Normalise input formats to canonical {@link OutputFormat}s. Accepts the\n * deprecated `\"astro\"` alias (renamed to `\"astro-markdown\"`) and warns once per\n * process — so programmatic/config callers passing `\"astro\"` keep working\n * instead of throwing, matching the CLI's deprecation behaviour.\n */\nexport function normalizeFormats(formats: ReadonlyArray<FormatInput>): OutputFormat[] {\n  return formats.map((f) => {\n    if (f === \"astro\") {\n      if (!astroAliasWarned) {\n        astroAliasWarned = true;\n        console.warn(\n          \"⚠ The 'astro' output format was renamed to 'astro-markdown'. '\\\"astro\\\"' still works but \" +\n            \"will be removed in a future major; use 'astro-markdown'.\",\n        );\n      }\n      return \"astro-markdown\";\n    }\n    return f;\n  });\n}\n\nexport class ReportGenerator {\n  private options: ResolvedFormatterOptions;\n  private deps: GenerateDeps;\n  /**\n   * The run the last `generate()` actually rendered: this run folded into what\n   * previous runs accumulated. Callers that report on the output (the CLI's\n   * summary line) need to describe what was written, not just what was handed\n   * in. Undefined before the first generate.\n   */\n  private lastRenderedRun?: TestRunResult;\n  /**\n   * What the execution formats rendered: this run after the same selection the\n   * documentation set gets. The CLI counts whichever set its output actually\n   * contains, so an excluded scenario is not reported as written.\n   */\n  private lastExecutedRun?: TestRunResult;\n\n  constructor(options: FormatterOptions = {}, deps?: Partial<GenerateDeps>) {\n    this.options = this.resolveOptions(options);\n    this.deps = {\n      logger: deps?.logger ?? console,\n      writeFile: deps?.writeFile ?? ((p, c) => fsPromises.writeFile(p, c, \"utf8\")),\n      readFile: deps?.readFile ?? ((p) => fs.readFileSync(p, \"utf8\")),\n      listDir:\n        deps?.listDir ??\n        ((dir) => {\n          try {\n            return fs.readdirSync(dir);\n          } catch {\n            return undefined;\n          }\n        }),\n      fileExists: deps?.fileExists ?? ((p) => fs.existsSync(p)),\n      removeFile: deps?.removeFile ?? ((p) => fsPromises.rm(p, { force: true })),\n    };\n  }\n\n  /** The run the last `generate()` rendered, stored reports included. */\n  get renderedRun(): TestRunResult | undefined {\n    return this.lastRenderedRun;\n  }\n\n  /** What the last `generate()` handed the execution formats. */\n  get executedRun(): TestRunResult | undefined {\n    return this.lastExecutedRun;\n  }\n\n  /**\n   * Resolve options with defaults.\n   */\n  private resolveOptions(options: FormatterOptions): ResolvedFormatterOptions {\n    return {\n      include: options.include ?? [],\n      exclude: options.exclude ?? [],\n      includeTags: options.includeTags ?? [],\n      excludeTags: options.excludeTags ?? [],\n      formats: normalizeFormats(options.formats ?? [\"html\"]),\n      outputDir: options.outputDir ?? \"reports\",\n      outputName: options.outputName ?? \"index\",\n      outputNameTimestamp: options.outputNameTimestamp ?? false,\n      sortTestCases: options.sortTestCases ?? \"none\",\n      output: {\n        mode: options.output?.mode ?? \"aggregated\",\n        colocatedStyle: options.output?.colocatedStyle ?? \"mirrored\",\n        rules: options.output?.rules ?? [],\n        outputName: options.output?.outputName,\n      },\n      cucumberJson: {\n        pretty: options.cucumberJson?.pretty ?? false,\n      },\n      storyReportJson: {\n        pretty: options.storyReportJson?.pretty ?? true,\n      },\n      scenarioIndexJson: {\n        pretty: options.scenarioIndexJson?.pretty ?? true,\n      },\n      behaviorManifestJson: {\n        pretty: options.behaviorManifestJson?.pretty ?? true,\n      },\n      cucumberMessages: {\n        uriStrategy: options.cucumberMessages?.uriStrategy ?? \"sourceFile\",\n        includeSynthetics: options.cucumberMessages?.includeSynthetics ?? true,\n        idSalt: options.cucumberMessages?.idSalt ?? \"\",\n        meta: options.cucumberMessages?.meta,\n      },\n      // Top-level link templates are the default for every format that renders a\n      // link; a per-format option of the same name still wins below.\n      permalinkBaseUrl: options.permalinkBaseUrl,\n      ticketUrlTemplate: options.ticketUrlTemplate,\n      traceUrlTemplate: options.traceUrlTemplate,\n      html: {\n        title: options.html?.title ?? \"Test Results\",\n        syntaxHighlighting: options.html?.syntaxHighlighting ?? true,\n        mermaidEnabled: options.html?.mermaidEnabled ?? true,\n        staleAfterDays: options.html?.staleAfterDays ?? 7,\n        share: options.html?.share ?? false,\n        shareCommand: options.html?.shareCommand,\n        architecture: options.html?.architecture ?? false,\n      },\n      historyStore: options.historyStore,\n      junit: {\n        suiteName: options.junit?.suiteName ?? \"Test Suite\",\n        includeOutput: options.junit?.includeOutput ?? true,\n      },\n      markdown: {\n        title: options.markdown?.title ?? \"User Stories\",\n        includeStatusIcons: options.markdown?.includeStatusIcons ?? true,\n        includeMetadata: options.markdown?.includeMetadata ?? true,\n        includeErrors: options.markdown?.includeErrors ?? true,\n        scenarioHeadingLevel: options.markdown?.scenarioHeadingLevel ?? 3,\n        stepStyle: options.markdown?.stepStyle ?? \"bullets\",\n        groupBy: options.markdown?.groupBy ?? \"file\",\n        sortScenarios: options.markdown?.sortScenarios ?? \"source\",\n        suiteSeparator: options.markdown?.suiteSeparator ?? \" - \",\n        includeFrontMatter: options.markdown?.includeFrontMatter ?? false,\n        includeSummaryTable: options.markdown?.includeSummaryTable ?? false,\n        permalinkBaseUrl: options.markdown?.permalinkBaseUrl ?? options.permalinkBaseUrl,\n        ticketUrlTemplate: options.markdown?.ticketUrlTemplate ?? options.ticketUrlTemplate,\n        traceUrlTemplate: options.markdown?.traceUrlTemplate ?? options.traceUrlTemplate,\n        includeSourceLinks: options.markdown?.includeSourceLinks ?? true,\n        customRenderers: options.markdown?.customRenderers,\n        attachImages: options.markdown?.attachImages ?? false,\n      },\n      spanGraph: {\n        ...(options.spanGraph?.title === undefined ? {} : { title: options.spanGraph.title }),\n        ...(options.spanGraph?.delta === undefined ? {} : { delta: options.spanGraph.delta }),\n      },\n      confluence: {\n        title: options.confluence?.title ?? \"User Stories\",\n        includeStatusIcons: options.confluence?.includeStatusIcons ?? true,\n        includeMetadata: options.confluence?.includeMetadata ?? true,\n        includeSummaryTable: options.confluence?.includeSummaryTable ?? true,\n        includeErrors: options.confluence?.includeErrors ?? true,\n        scenarioHeadingLevel: options.confluence?.scenarioHeadingLevel ?? 3,\n        groupBy: options.confluence?.groupBy ?? \"file\",\n        sortScenarios: options.confluence?.sortScenarios ?? \"source\",\n        pretty: options.confluence?.pretty ?? true,\n        permalinkBaseUrl: options.confluence?.permalinkBaseUrl ?? options.permalinkBaseUrl,\n        ticketUrlTemplate: options.confluence?.ticketUrlTemplate ?? options.ticketUrlTemplate,\n      },\n      astro: {\n        assetsDir: options.astro?.assetsDir ?? \"public/stories/assets\",\n        assetsBaseUrl: options.astro?.assetsBaseUrl ?? \"/stories/assets\",\n        markdown: {\n          title: options.astro?.markdown?.title ?? \"User Stories\",\n          includeStatusIcons: options.astro?.markdown?.includeStatusIcons ?? true,\n          includeErrors: options.astro?.markdown?.includeErrors ?? true,\n          scenarioHeadingLevel: options.astro?.markdown?.scenarioHeadingLevel ?? 3,\n          groupBy: options.astro?.markdown?.groupBy ?? \"file\",\n          sortScenarios: options.astro?.markdown?.sortScenarios ?? \"source\",\n          suiteSeparator: options.astro?.markdown?.suiteSeparator ?? \" - \",\n          includeSourceLinks: options.astro?.markdown?.includeSourceLinks ?? true,\n          permalinkBaseUrl: options.astro?.markdown?.permalinkBaseUrl ?? options.permalinkBaseUrl,\n          ticketUrlTemplate: options.astro?.markdown?.ticketUrlTemplate ?? options.ticketUrlTemplate,\n          traceUrlTemplate: options.astro?.markdown?.traceUrlTemplate ?? options.traceUrlTemplate,\n          customRenderers: options.astro?.markdown?.customRenderers,\n          scenarioAnchor: options.astro?.markdown?.scenarioAnchor,\n          scenarioBadge: options.astro?.markdown?.scenarioBadge,\n          scenarioNoteLink: options.astro?.markdown?.scenarioNoteLink,\n        },\n      },\n      assetMode: options.assetMode ?? \"none\",\n      allowMissingAssets: options.allowMissingAssets ?? false,\n    };\n  }\n\n  /**\n   * Generate reports for a test run.\n   *\n   * @param run - Canonical TestRunResult (use canonicalizeRun to create from RawRun)\n   * @returns Map of output format to generated file paths\n   */\n  async generate(\n    run: TestRunResult,\n    options: GenerateOptions = {}\n  ): Promise<GenerateResult> {\n    // Two operations, deliberately kept apart.\n    //\n    // A test run owns the reports of the files it covered: it updates those,\n    // then renders. Rendering an already-assembled run (the shard directory)\n    // owns nothing, so it must not write reports or restamp anything — doing\n    // both from one path made reading a directory destroy the freshness data\n    // the whole design exists to protect.\n    const persist = options.persist ?? true;\n    const accumulated = persist\n      ? await updateFileReports({ run, outputDir: this.options.outputDir }, this.deps)\n      : run;\n\n    const testCases = selectTestCases(\n      {\n        testCases: accumulated.testCases,\n        include: this.options.include,\n        exclude: this.options.exclude,\n        includeTags: this.options.includeTags,\n        excludeTags: this.options.excludeTags,\n        sortTestCases: this.options.sortTestCases,\n      },\n      { logger: this.deps.logger }\n    );\n\n    const filteredRun: TestRunResult = { ...accumulated, testCases };\n    this.lastRenderedRun = filteredRun;\n\n    // Execution formats are a record of what this build ran. Handing them\n    // scenarios carried over from earlier runs would report tests to CI as\n    // having just passed when they did not run at all.\n    const executedRun: TestRunResult = {\n      ...run,\n      testCases: selectTestCases(\n        {\n          testCases: run.testCases,\n          include: this.options.include,\n          exclude: this.options.exclude,\n          includeTags: this.options.includeTags,\n          excludeTags: this.options.excludeTags,\n          sortTestCases: this.options.sortTestCases,\n        },\n        { logger: this.deps.logger }\n      ),\n    };\n\n    this.lastExecutedRun = executedRun;\n\n    const results: GenerateResult = new Map();\n\n    for (const format of this.options.formats) {\n      const source = EXECUTION_FORMATS.has(format) ? executedRun : filteredRun;\n      const paths = await this.generateFormat(source, format);\n      results.set(format, paths);\n    }\n\n    // Colocated output writes one HTML report per source file, which leaves a\n    // directory of files with no front door — someone handed the folder has\n    // nothing to open. Write an index listing them (failures first). An\n    // aggregated group is a single file that IS its own entry point, so only\n    // colocated groups are indexed. A per-rule colocated mode counts too, even\n    // when the global mode is aggregated (writeColocatedIndex filters to the\n    // colocated groups and returns undefined when there are none).\n    const htmlPaths = results.get(\"html\") ?? [];\n    if (this.hasColocatedOutput() && htmlPaths.length > 0) {\n      const indexPath = await this.writeColocatedIndex(filteredRun, htmlPaths);\n      if (indexPath) results.set(\"html\", [...htmlPaths, indexPath]);\n    }\n\n    if (this.options.assetMode === \"copy\") {\n      // The html report references screenshots/videos by path — DocScreenshot\n      // and DocVideo emit <img>/<video src=...> rather than inlining bytes — so\n      // a moved or hosted report would 404 its media. Bundle them: copy\n      // referenced local media into assets/ beside the report and rewrite the\n      // paths in both the static markup and the embedded report JSON the\n      // interactive island re-renders from.\n      const htmlPaths = results.get(\"html\");\n      if (htmlPaths) {\n        for (const htmlPath of htmlPaths) {\n          bundleAssets(htmlPath, { allowMissing: this.options.allowMissingAssets });\n        }\n      }\n\n      // Markdown renders the same media the html does, from paths pointing into\n      // the runner's output dir — which the next run wipes.\n      await this.bundleMarkdownAssets(results.get(\"markdown\"), (markdownDir) => ({\n        assetsDir: path.join(markdownDir, \"assets\"),\n        assetsBaseUrl: \"assets\",\n      }));\n\n      await this.bundleMarkdownAssets(results.get(\"astro-markdown\"), () => ({\n        // assetsDir is resolved from CWD (same as outputDir), not relative to outputDir\n        assetsDir: path.resolve(this.options.astro.assetsDir),\n        assetsBaseUrl: this.options.astro.assetsBaseUrl,\n      }));\n    }\n\n    return results;\n  }\n\n  /**\n   * Copy every local asset these markdown reports reference into an assets\n   * directory and rewrite the refs. The destination is computed per report\n   * because colocated output writes one per source file.\n   */\n  private async bundleMarkdownAssets(\n    markdownPaths: string[] | undefined,\n    target: (markdownDir: string) => { assetsDir: string; assetsBaseUrl: string },\n  ): Promise<void> {\n    if (!markdownPaths) return;\n\n    for (const markdownPath of markdownPaths) {\n      const markdown = await fsPromises.readFile(markdownPath, \"utf8\");\n      const markdownDir = path.dirname(markdownPath);\n      const result = copyMarkdownAssets({\n        markdown,\n        markdownDir,\n        allowMissing: this.options.allowMissingAssets,\n        ...target(markdownDir),\n      });\n      if (result.copiedCount > 0 || result.missingCount > 0) {\n        await this.deps.writeFile(markdownPath, result.markdown);\n      }\n    }\n  }\n\n  /**\n   * Whether any output is colocated — the global mode, or any per-rule mode.\n   * A colocated rule under a global aggregated mode still writes per-file\n   * reports that need an index.\n   */\n  private hasColocatedOutput(): boolean {\n    return (\n      this.options.output.mode === \"colocated\" ||\n      this.options.output.rules.some((rule) => rule.mode === \"colocated\")\n    );\n  }\n\n  /**\n   * Write the entry-point page for a colocated HTML report tree. `htmlPaths` is\n   * every HTML report already written this run. Returns the path written, or\n   * undefined when there is nothing to index or the index would clobber a report\n   * already at `index.html` — a colocated source file that produces it, or, in\n   * mixed mode, the global aggregate (whose default output name is also index).\n   */\n  private async writeColocatedIndex(\n    run: TestRunResult,\n    htmlPaths: string[]\n  ): Promise<string | undefined> {\n    const outputNameSuffix = this.options.outputNameTimestamp\n      ? `-${Math.floor(run.startedAtMs / 1000)}`\n      : undefined;\n    // Recompute the same grouping generateFormat used so the index links\n    // exactly the files that were written (deterministic, so this cannot drift).\n    const groups = groupTestCasesByOutput(\n      run.testCases,\n      \"html\",\n      this.options,\n      this.deps.logger,\n      outputNameSuffix,\n    );\n    const bySourceFile = new Map<string, string>();\n    for (const [outputPath, testCases] of groups) {\n      const sourceFile = testCases[0]?.sourceFile;\n      if (!sourceFile) continue;\n      // Index colocated groups only. An aggregated group covers many source\n      // files in one report — it is its own front door, and mapping it to\n      // testCases[0].sourceFile would list it as if it belonged to that one\n      // file while hiding the rest.\n      if (effectiveOutputMode(sourceFile, this.options) !== \"colocated\") continue;\n      bySourceFile.set(sourceFile, outputPath);\n    }\n    if (bySourceFile.size === 0) return undefined;\n\n    const indexPath = toPosix(path.join(this.options.outputDir, \"index.html\"));\n    if (htmlPaths.some((p) => toPosix(p) === indexPath)) {\n      this.deps.logger.warn?.(\n        `Skipping colocated index: a report already occupies ${indexPath}.`,\n      );\n      return undefined;\n    }\n\n    const entries = buildIndexEntries(run, bySourceFile, path.dirname(indexPath));\n    const html = renderColocatedIndex(entries, this.options.html.title);\n    await fsPromises.mkdir(path.dirname(indexPath), { recursive: true });\n    await this.deps.writeFile(indexPath, html);\n    return indexPath;\n  }\n\n  /**\n   * Generate reports for a single format.\n   */\n  private async generateFormat(\n    run: TestRunResult,\n    format: OutputFormat\n  ): Promise<string[]> {\n    const outputNameSuffix = this.options.outputNameTimestamp\n      ? `-${Math.floor(run.startedAtMs / 1000)}`\n      : undefined;\n\n    // Group test cases by output path\n    const groups = groupTestCasesByOutput(\n      run.testCases,\n      format,\n      this.options,\n      this.deps.logger,\n      outputNameSuffix\n    );\n\n    // Handle empty runs in aggregated mode - write a single empty file\n    if (groups.size === 0 && this.options.output.mode === \"aggregated\") {\n      const ext = FORMAT_EXTENSIONS[format];\n      const effectiveName = this.options.outputName + (outputNameSuffix ?? \"\");\n      const outputPath = toPosix(path.join(this.options.outputDir, joinNameAndExt(effectiveName, ext)));\n      const content = await this.formatContent(run, format, outputPath);\n      if (content === \"\" && SKIP_WHEN_EMPTY.has(format)) return [];\n      const dir = path.dirname(outputPath);\n      await fsPromises.mkdir(dir, { recursive: true });\n      await this.deps.writeFile(outputPath, content);\n      return [outputPath];\n    }\n\n    const writtenPaths: string[] = [];\n\n    for (const [outputPath, testCases] of groups) {\n      // Create a run with just these test cases\n      const groupRun: TestRunResult = {\n        ...run,\n        testCases,\n      };\n\n      // Format content\n      const content = await this.formatContent(groupRun, format, outputPath);\n      // A format that has nothing to say writes nothing: span-graph on an\n      // uninstrumented suite would otherwise leave a page saying \"no diagram\"\n      // in every report forever.\n      if (content === \"\" && SKIP_WHEN_EMPTY.has(format)) continue;\n\n      // Ensure directory exists\n      const dir = path.dirname(outputPath);\n      await fsPromises.mkdir(dir, { recursive: true });\n\n      // Write file\n      await this.deps.writeFile(outputPath, content);\n      writtenPaths.push(outputPath);\n    }\n\n    return writtenPaths;\n  }\n\n  /**\n   * Format content for a specific format.\n   */\n  private formatContent(run: TestRunResult, format: OutputFormat, outputPath: string): string | Promise<string> {\n    switch (format) {\n      case \"cucumber-json\": {\n        const formatter = new CucumberJsonFormatter({\n          pretty: this.options.cucumberJson.pretty,\n        });\n        return formatter.formatToString(run);\n      }\n\n      case \"html\": {\n        // The HTML report renders via executable-stories-react (the single\n        // report renderer). Lazy import keeps React + executable-stories-react\n        // out of the eager import graph (and the Bun single binary) unless the\n        // html format is requested.\n        return this.formatHtmlReact(run, outputPath);\n      }\n\n      case \"cucumber-html\": {\n        const formatter = new CucumberHtmlFormatter({\n          messages: {\n            uriStrategy: this.options.cucumberMessages.uriStrategy,\n            includeSynthetics: this.options.cucumberMessages.includeSynthetics,\n            idSalt: this.options.cucumberMessages.idSalt,\n            meta: this.options.cucumberMessages.meta,\n          },\n        });\n        return formatter.formatToString(run);\n      }\n\n      case \"junit\": {\n        const formatter = new JUnitFormatter({\n          suiteName: this.options.junit.suiteName,\n          includeOutput: this.options.junit.includeOutput,\n        });\n        return formatter.format(run);\n      }\n\n      case \"cucumber-messages\": {\n        const formatter = new CucumberMessagesFormatter({\n          uriStrategy: this.options.cucumberMessages.uriStrategy,\n          includeSynthetics: this.options.cucumberMessages.includeSynthetics,\n          idSalt: this.options.cucumberMessages.idSalt,\n          meta: this.options.cucumberMessages.meta,\n        });\n        return formatter.formatToString(run);\n      }\n\n      case \"astro-markdown\": {\n        const formatter = new AstroFormatter({\n          assetsBaseUrl: this.options.astro.assetsBaseUrl,\n          // Colocated = one page per file, so title each by its own suite/file.\n          perFileTitle: this.options.output.mode === \"colocated\",\n          markdown: this.options.astro.markdown,\n        });\n        return formatter.format(run);\n      }\n\n      case \"confluence\": {\n        const formatter = new ConfluenceFormatter({\n          title: this.options.confluence.title,\n          includeStatusIcons: this.options.confluence.includeStatusIcons,\n          includeMetadata: this.options.confluence.includeMetadata,\n          includeSummaryTable: this.options.confluence.includeSummaryTable,\n          includeErrors: this.options.confluence.includeErrors,\n          scenarioHeadingLevel: this.options.confluence.scenarioHeadingLevel,\n          groupBy: this.options.confluence.groupBy,\n          sortScenarios: this.options.confluence.sortScenarios,\n          pretty: this.options.confluence.pretty,\n          permalinkBaseUrl: this.options.confluence.permalinkBaseUrl,\n          ticketUrlTemplate: this.options.confluence.ticketUrlTemplate,\n        });\n        return formatter.format(run);\n      }\n\n      case \"markdown\": {\n        const formatter = new MarkdownFormatter({\n          title: this.options.markdown.title,\n          includeStatusIcons: this.options.markdown.includeStatusIcons,\n          includeMetadata: this.options.markdown.includeMetadata,\n          includeErrors: this.options.markdown.includeErrors,\n          scenarioHeadingLevel: this.options.markdown.scenarioHeadingLevel,\n          stepStyle: this.options.markdown.stepStyle,\n          groupBy: this.options.markdown.groupBy,\n          sortScenarios: this.options.markdown.sortScenarios,\n          suiteSeparator: this.options.markdown.suiteSeparator,\n          includeFrontMatter: this.options.markdown.includeFrontMatter,\n          includeSummaryTable: this.options.markdown.includeSummaryTable,\n          permalinkBaseUrl: this.options.markdown.permalinkBaseUrl,\n          ticketUrlTemplate: this.options.markdown.ticketUrlTemplate,\n          traceUrlTemplate: this.options.markdown.traceUrlTemplate,\n          includeSourceLinks: this.options.markdown.includeSourceLinks,\n          customRenderers: this.options.markdown.customRenderers,\n          attachImages: this.options.markdown.attachImages,\n        });\n        return formatter.format(run);\n      }\n\n      case \"release-manifest\": {\n        const formatter = new ReleaseManifestFormatter();\n        return formatter.format(run);\n      }\n\n      case \"traceability-matrix\": {\n        const formatter = new TraceabilityMatrixFormatter();\n        return formatter.format(run);\n      }\n\n      case \"traceability-csv\": {\n        const formatter = new TraceabilityCsvFormatter();\n        return formatter.format(run);\n      }\n\n      case \"story-report-json\": {\n        const formatter = new StoryReportJsonFormatter({\n          pretty: this.options.storyReportJson.pretty,\n          ticketUrlTemplate: this.options.ticketUrlTemplate,\n        });\n        return formatter.format(run);\n      }\n\n      case \"scenario-index-json\": {\n        const formatter = new ScenarioIndexJsonFormatter({\n          pretty: this.options.scenarioIndexJson.pretty,\n        });\n        return formatter.format(run);\n      }\n\n      case \"behavior-manifest-json\": {\n        const formatter = new BehaviorManifestJsonFormatter({\n          pretty: this.options.behaviorManifestJson.pretty,\n        });\n        return formatter.format(run);\n      }\n\n      case \"agent-text\": {\n        const formatter = new AgentTextFormatter();\n        return formatter.format(run);\n      }\n\n      case \"span-graph\": {\n        const formatter = new SpanGraphFormatter(this.options.spanGraph);\n        return formatter.format(run);\n      }\n\n      default:\n        throw new Error(`Unknown format: ${format}`);\n    }\n  }\n\n  /**\n   * Render a standalone HTML report via the shared React component tree\n   * (executable-stories-react). This is the same renderer the Astro docs site\n   * uses, so the two outputs cannot drift. Imported lazily so React stays out\n   * of the eager bundle unless this format is requested.\n   */\n  private async formatHtmlReact(run: TestRunResult, outputPath: string): Promise<string> {\n    // Lazy on purpose (see above): a static import would pull React into every\n    // bundle that touches this module, HTML output requested or not.\n    // eslint-disable-next-line no-restricted-syntax\n    const { renderReportToHtml } = await import(\"executable-stories-react/ssr\");\n    const { report, index } = toStoryReportWithIndex(run, {\n      ticketUrlTemplate: this.options.ticketUrlTemplate,\n    });\n\n    // Join the run-keyed history store onto report scenario ids so the\n    // interactive report can render a per-scenario run timeline.\n    let scenarioHistory: Record<string, ScenarioRunEvent[]> | undefined;\n    const store = this.options.historyStore;\n    if (store) {\n      scenarioHistory = {};\n      for (const [tcId, scenarioId] of Object.entries(index.scenarioIdByTestCaseId)) {\n        const entries = store.tests[tcId]?.entries;\n        if (!entries || entries.length === 0) continue;\n        scenarioHistory[scenarioId] = entries.map((e) => {\n          const event: ScenarioRunEvent = { timestamp: e.timestamp, status: e.status };\n          if (e.runId) event.runId = e.runId;\n          if (e.durationMs !== undefined) event.durationMs = e.durationMs;\n          if (e.ci?.commitSha) event.commitSha = e.ci.commitSha;\n          if (e.ci?.branch) event.branch = e.ci.branch;\n          return event;\n        });\n      }\n      if (Object.keys(scenarioHistory).length === 0) scenarioHistory = undefined;\n    }\n\n    return renderReportToHtml(report, {\n      title: this.options.html.title,\n      css: readReactReportCss(),\n      theme: \"light\",\n      syntaxHighlighting: this.options.html.syntaxHighlighting,\n      mermaid: this.options.html.mermaidEnabled,\n      staleAfterDays: this.options.html.staleAfterDays,\n      share: this.options.html.share,\n      architecture: this.options.html.architecture,\n      shareCommand:\n        this.options.html.shareCommand ??\n        `npx --package executable-stories-formatters executable-stories share ${quoteShellArgument(outputPath)}`,\n      scenarioHistory,\n      islandScript: readReactIslandScript(),\n    });\n  }\n}\n\n/**\n * The compiled Tailwind/shadcn stylesheet and the self-contained interactive\n * island IIFE shipped by executable-stories-react, embedded at build time by\n * scripts/embed-react-assets.mjs. Embedding (rather than resolving from\n * node_modules at runtime) is what lets `--format html` work from the\n * bun-compiled single-file binary, which has no node_modules. The reporters and\n * the binary therefore inline the version of these assets that formatters was\n * built against.\n */\nfunction readReactReportCss(): string {\n  return reactReportCss;\n}\n\nfunction readReactIslandScript(): string {\n  return reactIslandScript;\n}\n\n/**\n * Factory function to create a ReportGenerator with dependency injection.\n *\n * Useful for testing and custom configurations.\n */\nexport function createReportGenerator(\n  options?: FormatterOptions,\n  deps?: Partial<GenerateDeps>\n): ReportGenerator {\n  return new ReportGenerator(options, deps);\n}\n","/* eslint-disable */\n// AUTO-GENERATED by scripts/embed-react-assets.mjs — do not edit.\n// Regenerated on every build/type-check/test/compile from the built\n// executable-stories-react assets.\nexport const reactReportCss = \"/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\\n@layer properties,theme,base,components,utilities;@import \\\"https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600&family=Geist:wght@400;500;600;700&display=swap\\\";@layer theme{:root,:host{--font-sans:var(--es-font-body);--font-mono:var(--es-font-mono);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.\\\\@container\\\\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\\\\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-\\\\[50\\\\%\\\\]{top:50%}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.left-1\\\\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-2\\\\.5{left:calc(var(--spacing) * 2.5)}.left-\\\\[50\\\\%\\\\]{left:50%}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=\\\"1\\\"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:\\\"“\\\"\\\"”\\\"\\\"‘\\\"\\\"’\\\";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:\\\"`\\\"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\\\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\\\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\\\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.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-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-3{height:calc(var(--spacing) * 3)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.h-\\\\[1\\\\.15rem\\\\]{height:1.15rem}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\\\\[300px\\\\]{max-height:300px}.max-h-\\\\[var\\\\(--available-height\\\\)\\\\]{max-height:var(--available-height)}.max-h-none{max-height:none}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-6{min-height:calc(var(--spacing) * 6)}.w-1\\\\/2{width:50%}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-16{width:calc(var(--spacing) * 16)}.w-40{width:calc(var(--spacing) * 40)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\\\\[min\\\\(90vw\\\\,28rem\\\\)\\\\]{width:min(90vw,28rem)}.w-\\\\[min\\\\(90vw\\\\,32rem\\\\)\\\\]{width:min(90vw,32rem)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\\\[80vw\\\\]{max-width:80vw}.max-w-\\\\[calc\\\\(100\\\\%-2rem\\\\)\\\\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-\\\\[8rem\\\\]{min-width:8rem}.min-w-\\\\[11rem\\\\]{min-width:11rem}.min-w-\\\\[52px\\\\]{min-width:52px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-48{flex-basis:calc(var(--spacing) * 48)}.border-collapse{border-collapse:collapse}.origin-\\\\[var\\\\(--transform-origin\\\\)\\\\]{transform-origin:var(--transform-origin)}.-translate-x-1\\\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\\\\[-50\\\\%\\\\]{--tw-translate-x:-50%;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)}.translate-y-\\\\[-50\\\\%\\\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.scroll-py-1{scroll-padding-block:var(--spacing)}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\\\\[0_1fr\\\\]{grid-template-columns:0 1fr}.grid-cols-\\\\[auto_1fr\\\\]{grid-template-columns:auto 1fr}.grid-cols-\\\\[max-content_1fr\\\\]{grid-template-columns:max-content 1fr}.grid-cols-subgrid{grid-template-columns:subgrid}.grid-rows-\\\\[auto_auto\\\\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-items-start{justify-items:start}.gap-0{gap:0}.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-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-\\\\[3px\\\\]{gap:3px}:where(.space-y-0\\\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\\\\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\\\\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-2\\\\.5{row-gap:calc(var(--spacing) * 2.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.\\\\[overscroll-behavior\\\\:contain\\\\]{overscroll-behavior:contain}.rounded{border-radius:var(--es-radius)}.rounded-\\\\[4px\\\\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.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-destructive\\\\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\\\/40{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.border-fail-border{border-color:var(--es-fail-border)}.border-input{border-color:var(--input)}.border-pass-border{border-color:var(--es-pass-border)}.border-pend-border{border-color:var(--es-pend-border)}.border-primary,.border-primary\\\\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\\\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.border-skip-border{border-color:var(--es-skip-border)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-black\\\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border,.bg-border\\\\/40{background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.bg-border\\\\/40{background-color:color-mix(in oklab, var(--border) 40%, transparent)}}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\\\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\\\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-fail{background-color:var(--es-fail)}.bg-fail-bg{background-color:var(--es-fail-bg)}.bg-foreground{background-color:var(--foreground)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\\\\/50{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\\\/50{background-color:color-mix(in oklab, var(--muted-foreground) 50%, transparent)}}.bg-muted\\\\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/30{background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.bg-muted\\\\/40{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/40{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.bg-muted\\\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\\\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-pass{background-color:var(--es-pass)}.bg-pass-bg{background-color:var(--es-pass-bg)}.bg-pend{background-color:var(--es-pend)}.bg-pend-bg{background-color:var(--es-pend-bg)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\\\\/5{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\\\/5{background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-skip{background-color:var(--es-skip)}.bg-skip-bg{background-color:var(--es-skip-bg)}.bg-transparent{background-color:#0000}.object-cover{object-fit:cover}.object-top{object-position:top}.p-0{padding:0}.p-0\\\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\\\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.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)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.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-3{padding-block:calc(var(--spacing) * 3)}.py-3\\\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-0{padding-top:0}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-0{padding-left:0}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\\\\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--es-font-mono)}.font-sans{font-family:var(--es-font-body)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-sm\\\\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\\\[0\\\\.82rem\\\\]{font-size:.82rem}.text-\\\\[0\\\\.625rem\\\\]{font-size:.625rem}.text-\\\\[0\\\\.6875rem\\\\]{font-size:.6875rem}.text-\\\\[0\\\\.8125rem\\\\]{font-size:.8125rem}.text-\\\\[10px\\\\]{font-size:10px}.text-\\\\[11px\\\\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.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)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-fail{color:var(--es-fail)}.text-foreground{color:var(--foreground)}.text-keyword{color:var(--es-keyword)}.text-link{color:var(--es-link)}.text-muted-foreground{color:var(--muted-foreground)}.text-pass{color:var(--es-pass)}.text-pend{color:var(--es-pend)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-skip{color:var(--es-skip)}.text-step-param{color:var(--es-step-param)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.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,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-border{--tw-ring-color:var(--border)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.ring-offset-card{--tw-ring-offset-color:var(--card)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\\\\[color\\\\,background-color\\\\,border-color\\\\,box-shadow\\\\]{transition-property:color,background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\\\[color\\\\,background-color\\\\,box-shadow\\\\]{transition-property:color,background-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\\\[color\\\\,box-shadow\\\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\\\[opacity\\\\,transform\\\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;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}.select-none{-webkit-user-select:none;user-select:none}.group-open\\\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.selection\\\\:bg-primary ::selection{background-color:var(--primary)}.selection\\\\:bg-primary::selection{background-color:var(--primary)}.selection\\\\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\\\\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\\\\:inline-flex::file-selector-button{display:inline-flex}.file\\\\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\\\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\\\:bg-transparent::file-selector-button{background-color:#0000}.file\\\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\\\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\\\\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.backdrop\\\\:bg-black\\\\/40::backdrop{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.backdrop\\\\:bg-black\\\\/40::backdrop{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}@media (hover:hover){.hover\\\\:border-ring:hover{border-color:var(--ring)}.hover\\\\:bg-accent:hover{background-color:var(--accent)}.hover\\\\:bg-destructive\\\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-destructive\\\\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\\\\:bg-muted:hover{background-color:var(--muted)}.hover\\\\:bg-primary\\\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-primary\\\\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\\\\:bg-secondary\\\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:bg-secondary\\\\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\\\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\\\:text-foreground:hover,.hover\\\\:text-foreground\\\\/80:hover{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\\\:text-foreground\\\\/80:hover{color:color-mix(in oklab, var(--foreground) 80%, transparent)}}.hover\\\\:no-underline:hover{text-decoration-line:none}.hover\\\\:underline:hover{text-decoration-line:underline}.hover\\\\:opacity-100:hover{opacity:1}}.focus\\\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\\\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\\\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\\\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-\\\\[3px\\\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-destructive\\\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\\\\:ring-ring:focus-visible,.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\\\:ring-ring\\\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\\\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:opacity-50:disabled{opacity:.5}.has-data-\\\\[slot\\\\=card-action\\\\]\\\\:grid-cols-\\\\[1fr_auto\\\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\\\\[\\\\>svg\\\\]\\\\:grid-cols-\\\\[calc\\\\(var\\\\(--spacing\\\\)\\\\*4\\\\)_1fr\\\\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.has-\\\\[\\\\>svg\\\\]\\\\:gap-x-3:has(>svg){column-gap:calc(var(--spacing) * 3)}.has-\\\\[\\\\>svg\\\\]\\\\:px-1\\\\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\\\\[\\\\>svg\\\\]\\\\:px-2\\\\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\\\\[\\\\>svg\\\\]\\\\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\\\\[\\\\>svg\\\\]\\\\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\\\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\\\:ring-destructive\\\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\\\\[checked\\\\]\\\\:translate-x-\\\\[calc\\\\(100\\\\%-2px\\\\)\\\\][data-checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\\\[checked\\\\]\\\\:border-primary[data-checked]{border-color:var(--primary)}.data-\\\\[checked\\\\]\\\\:bg-primary[data-checked]{background-color:var(--primary)}.data-\\\\[checked\\\\]\\\\:text-primary-foreground[data-checked]{color:var(--primary-foreground)}.data-\\\\[disabled\\\\]\\\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\\\[disabled\\\\]\\\\:opacity-50[data-disabled]{opacity:.5}.data-\\\\[disabled\\\\=true\\\\]\\\\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\\\\[disabled\\\\=true\\\\]\\\\:opacity-50[data-disabled=true]{opacity:.5}.data-\\\\[ending-style\\\\]\\\\:-translate-x-full[data-ending-style]{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\\\[ending-style\\\\]\\\\:scale-95[data-ending-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\\\\[ending-style\\\\]\\\\:opacity-0[data-ending-style]{opacity:0}.data-\\\\[highlighted\\\\]\\\\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\\\\[highlighted\\\\]\\\\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\\\\[orientation\\\\=horizontal\\\\]\\\\:h-px[data-orientation=horizontal]{height:1px}.data-\\\\[orientation\\\\=horizontal\\\\]\\\\:w-full[data-orientation=horizontal]{width:100%}.data-\\\\[orientation\\\\=vertical\\\\]\\\\:h-full[data-orientation=vertical]{height:100%}.data-\\\\[orientation\\\\=vertical\\\\]\\\\:w-px[data-orientation=vertical]{width:1px}.data-\\\\[placeholder\\\\]\\\\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\\\\[pressed\\\\]\\\\:bg-background[data-pressed]{background-color:var(--background)}.data-\\\\[pressed\\\\]\\\\:text-foreground[data-pressed]{color:var(--foreground)}.data-\\\\[pressed\\\\]\\\\:shadow-sm[data-pressed]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\\\\[selected\\\\=true\\\\]\\\\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\\\\[selected\\\\=true\\\\]\\\\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\\\\[size\\\\=default\\\\]\\\\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\\\\[size\\\\=sm\\\\]\\\\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}:is(.\\\\*\\\\:data-\\\\[slot\\\\=alert-description\\\\]\\\\:text-destructive\\\\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\\\\*\\\\:data-\\\\[slot\\\\=alert-description\\\\]\\\\:text-destructive\\\\/90>*)[data-slot=alert-description]{color:color-mix(in oklab, var(--destructive) 90%, transparent)}}:is(.\\\\*\\\\*\\\\:data-\\\\[slot\\\\=command-input-wrapper\\\\]\\\\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing) * 12)}:is(.\\\\*\\\\:data-\\\\[slot\\\\=select-value\\\\]\\\\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\\\\*\\\\:data-\\\\[slot\\\\=select-value\\\\]\\\\:flex>*)[data-slot=select-value]{display:flex}:is(.\\\\*\\\\:data-\\\\[slot\\\\=select-value\\\\]\\\\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\\\\*\\\\:data-\\\\[slot\\\\=select-value\\\\]\\\\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\\\\[starting-style\\\\]\\\\:-translate-x-full[data-starting-style]{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\\\[starting-style\\\\]\\\\:scale-95[data-starting-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\\\\[starting-style\\\\]\\\\:opacity-0[data-starting-style]{opacity:0}.data-\\\\[unchecked\\\\]\\\\:translate-x-0[data-unchecked]{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\\\\[unchecked\\\\]\\\\:bg-input[data-unchecked]{background-color:var(--input)}@media (min-width:40rem){.sm\\\\:not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.sm\\\\:inline-flex{display:inline-flex}.sm\\\\:w-72{width:calc(var(--spacing) * 72)}.sm\\\\:max-w-lg{max-width:var(--container-lg)}.sm\\\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\\\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\\\\:flex-row{flex-direction:row}.sm\\\\:justify-end{justify-content:flex-end}.sm\\\\:text-left{text-align:left}}@media (min-width:48rem){.md\\\\:inline{display:inline}.md\\\\:p-12{padding:calc(var(--spacing) * 12)}.md\\\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:64rem){.lg\\\\:block{display:block}.lg\\\\:hidden{display:none}}.dark\\\\:border-input:where([data-theme=dark],[data-theme=dark] *){border-color:var(--input)}.dark\\\\:bg-destructive\\\\/60:where([data-theme=dark],[data-theme=dark] *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-destructive\\\\/60:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.dark\\\\:bg-input\\\\/30:where([data-theme=dark],[data-theme=dark] *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:bg-input\\\\/30:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}@media (hover:hover){.dark\\\\:hover\\\\:bg-accent\\\\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-accent\\\\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.dark\\\\:hover\\\\:bg-input\\\\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:hover\\\\:bg-input\\\\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}}.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:where([data-theme=dark],[data-theme=dark] *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:focus-visible\\\\:ring-destructive\\\\/40:where([data-theme=dark],[data-theme=dark] *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:where([data-theme=dark],[data-theme=dark] *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\\\:aria-invalid\\\\:ring-destructive\\\\/40:where([data-theme=dark],[data-theme=dark] *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.\\\\[\\\\&_\\\\[cmdk-group-heading\\\\]\\\\]\\\\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing) * 2)}.\\\\[\\\\&_\\\\[cmdk-group-heading\\\\]\\\\]\\\\:py-1\\\\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing) * 1.5)}.\\\\[\\\\&_\\\\[cmdk-group-heading\\\\]\\\\]\\\\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\\\[\\\\&_\\\\[cmdk-group-heading\\\\]\\\\]\\\\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\\\\[\\\\&_\\\\[cmdk-group-heading\\\\]\\\\]\\\\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\\\\[\\\\&_\\\\[cmdk-group\\\\]\\\\]\\\\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing) * 2)}.\\\\[\\\\&_\\\\[cmdk-group\\\\]\\\\:not\\\\(\\\\[hidden\\\\]\\\\)_\\\\~\\\\[cmdk-group\\\\]\\\\]\\\\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\\\[\\\\&_\\\\[cmdk-input-wrapper\\\\]_svg\\\\]\\\\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing) * 5)}.\\\\[\\\\&_\\\\[cmdk-input-wrapper\\\\]_svg\\\\]\\\\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing) * 5)}.\\\\[\\\\&_\\\\[cmdk-input\\\\]\\\\]\\\\:h-12 [cmdk-input]{height:calc(var(--spacing) * 12)}.\\\\[\\\\&_\\\\[cmdk-item\\\\]\\\\]\\\\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing) * 2)}.\\\\[\\\\&_\\\\[cmdk-item\\\\]\\\\]\\\\:py-3 [cmdk-item]{padding-block:calc(var(--spacing) * 3)}.\\\\[\\\\&_\\\\[cmdk-item\\\\]_svg\\\\]\\\\:h-5 [cmdk-item] svg{height:calc(var(--spacing) * 5)}.\\\\[\\\\&_\\\\[cmdk-item\\\\]_svg\\\\]\\\\:w-5 [cmdk-item] svg{width:calc(var(--spacing) * 5)}.\\\\[\\\\&_p\\\\]\\\\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:mx-auto svg{margin-inline:auto}.\\\\[\\\\&_svg\\\\]\\\\:size-3\\\\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\\\\[\\\\&_svg\\\\]\\\\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\&_svg\\\\]\\\\:h-auto svg{height:auto}.\\\\[\\\\&_svg\\\\]\\\\:max-w-full svg{max-width:100%}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'size-\\\\'\\\\]\\\\)\\\\]\\\\:size-6 svg:not([class*=size-]){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.\\\\[\\\\&_svg\\\\:not\\\\(\\\\[class\\\\*\\\\=\\\\'text-\\\\'\\\\]\\\\)\\\\]\\\\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\\\\[\\\\&\\\\:\\\\:-webkit-details-marker\\\\]\\\\:hidden::-webkit-details-marker{display:none}.\\\\[\\\\.border-b\\\\]\\\\:pb-6.border-b{padding-bottom:calc(var(--spacing) * 6)}.\\\\[\\\\.border-t\\\\]\\\\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}:is(.\\\\*\\\\:\\\\[span\\\\]\\\\:last\\\\:flex>*):is(span):last-child{display:flex}:is(.\\\\*\\\\:\\\\[span\\\\]\\\\:last\\\\:items-center>*):is(span):last-child{align-items:center}:is(.\\\\*\\\\:\\\\[span\\\\]\\\\:last\\\\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}.\\\\[\\\\&\\\\>a\\\\]\\\\:underline>a{text-decoration-line:underline}.\\\\[\\\\&\\\\>a\\\\]\\\\:underline-offset-4>a{text-underline-offset:4px}.\\\\[\\\\&\\\\>a\\\\:hover\\\\]\\\\:text-primary>a:hover{color:var(--primary)}.\\\\[\\\\&\\\\>svg\\\\]\\\\:pointer-events-none>svg{pointer-events:none}.\\\\[\\\\&\\\\>svg\\\\]\\\\:size-3>svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\\\\[\\\\&\\\\>svg\\\\]\\\\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\\\[\\\\&\\\\>svg\\\\]\\\\:translate-y-0\\\\.5>svg{--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.\\\\[\\\\&\\\\>svg\\\\]\\\\:text-current>svg{color:currentColor}@media (hover:hover){a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-accent:hover{background-color:var(--accent)}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-destructive\\\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-destructive\\\\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-muted:hover{background-color:var(--muted)}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-primary\\\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-primary\\\\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-secondary\\\\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:bg-secondary\\\\/90:hover{background-color:color-mix(in oklab, var(--secondary) 90%, transparent)}}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:text-accent-foreground:hover{color:var(--accent-foreground)}a.\\\\[a\\\\&\\\\]\\\\:hover\\\\:underline:hover{text-decoration-line:underline}}}:root,[data-theme=light]{--es-color-bg:#fff;--es-color-fg:#111827;--es-color-muted:#6b7280;--es-color-border:#e5e7eb;--es-color-surface:#f9fafb;--es-color-link:#2563eb;--es-color-passed:#16a34a;--es-color-failed:#dc2626;--es-color-skipped:#9ca3af;--es-color-pending:#d97706;--es-color-passed-bg:#f0fdf4;--es-color-failed-bg:#fef2f2;--es-color-skipped-bg:#f3f4f6;--es-color-pending-bg:#fffbeb;--es-warn-fg:#92400e;--es-font-body:\\\"Geist\\\", -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", system-ui, sans-serif;--es-font-mono:\\\"Geist Mono\\\", ui-monospace, SFMono-Regular, \\\"SF Mono\\\", Menlo, monospace;--es-size-base:1rem;--es-size-sm:.875rem;--es-size-xs:.75rem;--es-size-h1:1.875rem;--es-size-h2:1.5rem;--es-size-h3:1.25rem;--es-space-1:.25rem;--es-space-2:.5rem;--es-space-3:.75rem;--es-space-4:1rem;--es-space-6:1.5rem;--es-space-8:2rem;--es-radius:.625rem;--es-line:1.6;--es-measure:72ch}@media (prefers-color-scheme:dark){:root{--es-color-bg:#0b0f17;--es-color-fg:#e5e7eb;--es-color-muted:#9ca3af;--es-color-border:#1f2937;--es-color-surface:#111827;--es-color-link:#60a5fa;--es-color-passed:#4ade80;--es-color-failed:#f87171;--es-color-skipped:#6b7280;--es-color-pending:#fbbf24;--es-color-passed-bg:#4ade8014;--es-color-failed-bg:#f8717114;--es-color-skipped-bg:#6b728014;--es-color-pending-bg:#fbbf2414;--es-warn-fg:#fbbf24}}[data-theme=dark]{--es-color-bg:#0b0f17;--es-color-fg:#e5e7eb;--es-color-muted:#9ca3af;--es-color-border:#1f2937;--es-color-surface:#111827;--es-color-link:#60a5fa;--es-color-passed:#4ade80;--es-color-failed:#f87171;--es-color-skipped:#6b7280;--es-color-pending:#fbbf24;--es-color-passed-bg:#4ade8014;--es-color-failed-bg:#f8717114;--es-color-skipped-bg:#6b728014;--es-color-pending-bg:#fbbf2414;--es-warn-fg:#fbbf24}.es-report{background:var(--es-color-bg);color:var(--es-color-fg);font-family:var(--es-font-body);font-size:var(--es-size-base);line-height:var(--es-line);padding:var(--es-space-6);max-width:1100px;margin-inline:auto}.es-report-header{gap:var(--es-space-4);flex-direction:column;margin-block-end:var(--es-space-6);display:flex}.es-report-header h1{font-size:var(--es-size-h1);margin:0}.es-report-summary{color:var(--es-color-muted);font-size:var(--es-size-sm);margin:0 0 var(--es-space-6)}.es-report-summary [data-status]{margin-inline-end:var(--es-space-3)}.es-report-summary [data-status=passed]{color:var(--es-color-passed)}.es-report-summary [data-status=failed]{color:var(--es-color-failed)}.es-report-summary [data-status=skipped]{color:var(--es-color-skipped)}.es-report-summary [data-status=pending]{color:var(--es-color-pending)}.es-feature{border:1px solid var(--es-color-border);border-radius:var(--es-radius);padding:var(--es-space-6);margin-block-end:var(--es-space-6)}.es-feature-title{font-size:var(--es-size-h2);margin:0 0 var(--es-space-2)}.es-feature-source{color:var(--es-color-muted);font-family:var(--es-font-mono);font-size:var(--es-size-xs);margin:0 0 var(--es-space-4)}.es-feature-summary{color:var(--es-color-muted);font-size:var(--es-size-sm);margin-block-end:var(--es-space-4)}.es-scenario{padding:var(--es-space-4) 0;border-block-start:1px solid var(--es-color-border);scroll-margin-block-start:var(--es-space-8)}.es-scenario:first-of-type{border-block-start:0}.es-scenario-title{font-size:var(--es-size-h3);margin:0 0 var(--es-space-2);align-items:baseline;gap:var(--es-space-2);display:flex}.es-scenario-status{font-size:var(--es-size-xs);text-transform:uppercase;letter-spacing:.04em;border-radius:4px;padding:2px 6px}.es-status-passed .es-scenario-status{color:var(--es-color-passed);background:var(--es-color-passed-bg)}.es-status-failed .es-scenario-status{color:var(--es-color-failed);background:var(--es-color-failed-bg)}.es-status-skipped .es-scenario-status{color:var(--es-color-skipped);background:var(--es-color-skipped-bg)}.es-status-pending .es-scenario-status{color:var(--es-color-pending);background:var(--es-color-pending-bg)}.es-scenario-error{background:var(--es-color-failed-bg);color:var(--es-color-failed);padding:var(--es-space-3) var(--es-space-4);border-radius:var(--es-radius);font-family:var(--es-font-mono);font-size:var(--es-size-sm);white-space:pre-wrap}.es-steps{margin:var(--es-space-4) 0 0;padding:0;list-style:none}.es-step{padding:var(--es-space-2) 0}.es-step-keyword{color:var(--es-color-muted);margin-inline-end:var(--es-space-2);font-weight:600}.es-step-failed{color:var(--es-color-failed)}.es-step-skipped{color:var(--es-color-skipped)}.es-tags{gap:var(--es-space-2);margin:var(--es-space-2) 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}.es-tags li{font-size:var(--es-size-xs);background:var(--es-color-surface);color:var(--es-color-muted);border-radius:999px;padding:2px 8px}.es-doc{margin-block:var(--es-space-3);max-width:var(--es-measure)}.es-doc-kv dt{color:var(--es-color-muted);font-weight:600;font-size:var(--es-size-sm)}.es-doc-kv dd{margin-inline-start:0}.es-doc-code{background:var(--es-color-surface);border-radius:var(--es-radius);padding:var(--es-space-3);overflow-x:auto}.es-doc-code pre{font-family:var(--es-font-mono);font-size:var(--es-size-sm);margin:0}.es-doc-code figcaption{color:var(--es-color-muted);font-size:var(--es-size-xs);margin-block-end:var(--es-space-2)}.es-doc-table table{border-collapse:collapse;width:100%}.es-doc-table th,.es-doc-table td{text-align:start;padding:var(--es-space-2);border-block-end:1px solid var(--es-color-border)}.es-doc-link{color:var(--es-color-link)}.es-doc-section{background:var(--es-color-surface);padding:var(--es-space-4);border-radius:var(--es-radius)}.es-doc-mermaid pre{font-family:var(--es-font-mono);font-size:var(--es-size-sm);background:var(--es-color-surface);padding:var(--es-space-3);border-radius:var(--es-radius);overflow-x:auto}.es-doc-screenshot img{border-radius:var(--es-radius);max-width:100%;height:auto}.es-doc-custom{background:var(--es-color-surface);padding:var(--es-space-3);border-radius:var(--es-radius);font-family:var(--es-font-mono);font-size:var(--es-size-sm)}.es-empty,.es-schema-error{text-align:center;padding:var(--es-space-8);color:var(--es-color-muted)}.es-schema-error{background:var(--es-color-failed-bg);color:var(--es-fail,#b91c1c);border-radius:var(--es-radius)}.es-schema-error pre{font-family:var(--es-font-mono);font-size:var(--es-size-sm);text-align:start;margin-block-start:var(--es-space-3)}.es-failure-banner{align-items:center;gap:var(--es-space-3);padding:var(--es-space-3) var(--es-space-4);background:var(--es-color-failed-bg);color:var(--es-fail,#b91c1c);border:1px solid var(--es-color-failed);border-radius:var(--es-radius);flex-wrap:wrap;margin-block-end:var(--es-space-4);display:flex}.es-failure-banner-jump{color:inherit;border-radius:var(--es-radius);padding:var(--es-space-1) var(--es-space-3);cursor:pointer;font:inherit;background:0 0;border:1px solid}.es-failure-banner-jump:focus-visible{outline:2px solid var(--es-color-failed);outline-offset:2px}.es-freshness{color:var(--es-color-muted);font-size:var(--es-size-xs);margin:0}.es-freshness a{color:inherit}.es-stale-banner{justify-content:space-between;align-items:center;gap:var(--es-space-3);padding:var(--es-space-3) var(--es-space-4);border:1px solid var(--es-color-pending);border-radius:var(--es-radius);background:var(--es-color-pending-bg);color:var(--es-warn-fg,#92400e);font-size:var(--es-size-sm);display:flex}.es-stale-banner a{color:inherit;white-space:nowrap}.es-failure-banner-jump{touch-action:manipulation}@media print{.es-report{max-width:100%;padding:0}.es-feature,.es-scenario{break-inside:avoid}.es-failure-banner,.es-shortcuts-trigger,.es-search{display:none}}@layer base{.es-report-island,.es-report-island *,.es-report-island :before,.es-report-island :after{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--border)}.es-report-island button{appearance:none;font:inherit;color:inherit;cursor:pointer;background-color:#0000;background-image:none;padding:0}.es-report-island :where(h1,h2,h3,h4,h5,h6,p,ul,ol,dl,figure,pre,blockquote){margin:0}.es-report-island :where(ul,ol){padding:0;list-style:none}[data-detail-level=minimal] [data-es-docs]{display:none}}:root,[data-theme=light]{--background:#fff;--foreground:#171717;--card:#fff;--card-foreground:#171717;--popover:#fff;--popover-foreground:#171717;--primary:#229652;--primary-foreground:#fff;--secondary:#f6f6f6;--secondary-foreground:#171717;--muted:#f6f6f6;--muted-foreground:#616161;--accent:#e8e8e8;--accent-foreground:#171717;--destructive:#b81e1e;--destructive-foreground:#fff;--border:#e6e6e6;--input:#e6e6e6;--ring:#28af60;--es-pass:#1a7440;--es-pass-bg:#effaf4;--es-pass-border:#b3e6c8;--es-fail:#ad1f1f;--es-fail-bg:#fef1f1;--es-fail-border:#f4c2c2;--es-skip:#72501d;--es-skip-bg:#fffae6;--es-skip-border:#eedba0;--es-pend:#5d389f;--es-pend-bg:#f6f3fc;--es-pend-border:#d4c8ea;--es-keyword:#1a7440;--es-step-param:#2662d9;--es-link:#1a7440}[data-theme=dark]{--background:#0f0f0f;--foreground:#f2f2f2;--card:#171717;--card-foreground:#f2f2f2;--popover:#171717;--popover-foreground:#f2f2f2;--primary:#2fd072;--primary-foreground:#0f0f0f;--secondary:#212121;--secondary-foreground:#f2f2f2;--muted:#212121;--muted-foreground:#a3a3a3;--accent:#383838;--accent-foreground:#f2f2f2;--destructive:#e14747;--destructive-foreground:#fff;--border:#2b2b2b;--input:#2b2b2b;--ring:#2fd072;--es-pass:#64d894;--es-pass-bg:#0f291a;--es-pass-border:#255639;--es-fail:#f17e7e;--es-fail-bg:#2e0f0f;--es-fail-border:#6b2424;--es-skip:#f2cc5a;--es-skip-bg:#272211;--es-skip-border:#5a4e2b;--es-pend:#b697ed;--es-pend-bg:#231934;--es-pend-border:#4b396a;--es-keyword:#59d98e;--es-step-param:#7da1e8;--es-link:#61db94}.es-doc-prose{--tw-prose-body:var(--muted-foreground);--tw-prose-headings:var(--foreground);--tw-prose-lead:var(--muted-foreground);--tw-prose-links:var(--es-link);--tw-prose-bold:var(--foreground);--tw-prose-counters:var(--muted-foreground);--tw-prose-bullets:var(--border);--tw-prose-hr:var(--border);--tw-prose-quotes:var(--foreground);--tw-prose-quote-borders:var(--border);--tw-prose-captions:var(--muted-foreground);--tw-prose-kbd:var(--foreground);--tw-prose-code:var(--foreground);--tw-prose-pre-code:var(--foreground);--tw-prose-pre-bg:var(--muted);--tw-prose-th-borders:var(--border);--tw-prose-td-borders:var(--border);font-family:var(--font-sans)}.es-doc-prose :where(code):not(:where(pre code)){font-family:var(--font-mono);background:var(--muted);border-radius:4px;padding:.1em .3em}.es-doc-prose :where(code):before,.es-doc-prose :where(code):after{content:none}.es-doc-prose :where(a){text-underline-offset:2px}@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-space-y-reverse{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-outline-style{syntax:\\\"*\\\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\\\"*\\\";inherits:false}@property --tw-brightness{syntax:\\\"*\\\";inherits:false}@property --tw-contrast{syntax:\\\"*\\\";inherits:false}@property --tw-grayscale{syntax:\\\"*\\\";inherits:false}@property --tw-hue-rotate{syntax:\\\"*\\\";inherits:false}@property --tw-invert{syntax:\\\"*\\\";inherits:false}@property --tw-opacity{syntax:\\\"*\\\";inherits:false}@property --tw-saturate{syntax:\\\"*\\\";inherits:false}@property --tw-sepia{syntax:\\\"*\\\";inherits:false}@property --tw-drop-shadow{syntax:\\\"*\\\";inherits:false}@property --tw-drop-shadow-color{syntax:\\\"*\\\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\\\"<percentage>\\\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\\\"*\\\";inherits:false}@property --tw-duration{syntax:\\\"*\\\";inherits:false}@property --tw-scale-x{syntax:\\\"*\\\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\\\"*\\\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\\\"*\\\";inherits:false;initial-value:1}@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-space-y-reverse: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-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}\";\nexport const reactIslandScript = \"\\\"use strict\\\";var EsReportIsland=(()=>{var zP=Object.create;var _f=Object.defineProperty;var UP=Object.getOwnPropertyDescriptor;var qP=Object.getOwnPropertyNames;var VP=Object.getPrototypeOf,GP=Object.prototype.hasOwnProperty;var la=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ya=(e,t)=>{for(var a in t)_f(e,a,{get:t[a],enumerable:!0})},hv=(e,t,a,o)=>{if(t&&typeof t==\\\"object\\\"||typeof t==\\\"function\\\")for(let n of qP(t))!GP.call(e,n)&&n!==a&&_f(e,n,{get:()=>t[n],enumerable:!(o=UP(t,n))||o.enumerable});return e};var v=(e,t,a)=>(a=e!=null?zP(VP(e)):{},hv(t||!e||!e.__esModule?_f(a,\\\"default\\\",{value:e,enumerable:!0}):a,e)),XP=e=>hv(_f({},\\\"__esModule\\\",{value:!0}),e);var kv=la(Ie=>{\\\"use strict\\\";var kh=Symbol.for(\\\"react.transitional.element\\\"),jP=Symbol.for(\\\"react.portal\\\"),YP=Symbol.for(\\\"react.fragment\\\"),KP=Symbol.for(\\\"react.strict_mode\\\"),ZP=Symbol.for(\\\"react.profiler\\\"),$P=Symbol.for(\\\"react.consumer\\\"),QP=Symbol.for(\\\"react.context\\\"),WP=Symbol.for(\\\"react.forward_ref\\\"),JP=Symbol.for(\\\"react.suspense\\\"),eN=Symbol.for(\\\"react.memo\\\"),Cv=Symbol.for(\\\"react.lazy\\\"),tN=Symbol.for(\\\"react.activity\\\"),aN=Symbol.for(\\\"react.view_transition\\\"),xv=Symbol.iterator;function oN(e){return e===null||typeof e!=\\\"object\\\"?null:(e=xv&&e[xv]||e[\\\"@@iterator\\\"],typeof e==\\\"function\\\"?e:null)}var vv={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Lv=Object.assign,Rv={};function Ps(e,t,a){this.props=e,this.context=t,this.refs=Rv,this.updater=a||vv}Ps.prototype.isReactComponent={};Ps.prototype.setState=function(e,t){if(typeof e!=\\\"object\\\"&&typeof e!=\\\"function\\\"&&e!=null)throw Error(\\\"takes an object of state variables to update or a function which returns an object of state variables.\\\");this.updater.enqueueSetState(this,e,t,\\\"setState\\\")};Ps.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\\\"forceUpdate\\\")};function Iv(){}Iv.prototype=Ps.prototype;function Mh(e,t,a){this.props=e,this.context=t,this.refs=Rv,this.updater=a||vv}var Ah=Mh.prototype=new Iv;Ah.constructor=Mh;Lv(Ah,Ps.prototype);Ah.isPureReactComponent=!0;var bv=Array.isArray;function Eh(){}var pt={H:null,A:null,T:null,S:null},wv=Object.prototype.hasOwnProperty;function Oh(e,t,a){var o=a.ref;return{$$typeof:kh,type:e,key:t,ref:o!==void 0?o:null,props:a}}function nN(e,t){return Oh(e.type,t,e.props)}function Dh(e){return typeof e==\\\"object\\\"&&e!==null&&e.$$typeof===kh}function rN(e){var t={\\\"=\\\":\\\"=0\\\",\\\":\\\":\\\"=2\\\"};return\\\"$\\\"+e.replace(/[=:]/g,function(a){return t[a]})}var yv=/\\\\/+/g;function Th(e,t){return typeof e==\\\"object\\\"&&e!==null&&e.key!=null?rN(\\\"\\\"+e.key):t.toString(36)}function lN(e){switch(e.status){case\\\"fulfilled\\\":return e.value;case\\\"rejected\\\":throw e.reason;default:switch(typeof e.status==\\\"string\\\"?e.then(Eh,Eh):(e.status=\\\"pending\\\",e.then(function(t){e.status===\\\"pending\\\"&&(e.status=\\\"fulfilled\\\",e.value=t)},function(t){e.status===\\\"pending\\\"&&(e.status=\\\"rejected\\\",e.reason=t)})),e.status){case\\\"fulfilled\\\":return e.value;case\\\"rejected\\\":throw e.reason}}throw e}function Ds(e,t,a,o,n){var r=typeof e;(r===\\\"undefined\\\"||r===\\\"boolean\\\")&&(e=null);var l=!1;if(e===null)l=!0;else switch(r){case\\\"bigint\\\":case\\\"string\\\":case\\\"number\\\":l=!0;break;case\\\"object\\\":switch(e.$$typeof){case kh:case jP:l=!0;break;case Cv:return l=e._init,Ds(l(e._payload),t,a,o,n)}}if(l)return n=n(e),l=o===\\\"\\\"?\\\".\\\"+Th(e,0):o,bv(n)?(a=\\\"\\\",l!=null&&(a=l.replace(yv,\\\"$&/\\\")+\\\"/\\\"),Ds(n,t,a,\\\"\\\",function(u){return u})):n!=null&&(Dh(n)&&(n=nN(n,a+(n.key==null||e&&e.key===n.key?\\\"\\\":(\\\"\\\"+n.key).replace(yv,\\\"$&/\\\")+\\\"/\\\")+l)),t.push(n)),1;l=0;var s=o===\\\"\\\"?\\\".\\\":o+\\\":\\\";if(bv(e))for(var i=0;i<e.length;i++)o=e[i],r=s+Th(o,i),l+=Ds(o,t,a,r,n);else if(i=oN(e),typeof i==\\\"function\\\")for(e=i.call(e),i=0;!(o=e.next()).done;)o=o.value,r=s+Th(o,i++),l+=Ds(o,t,a,r,n);else if(r===\\\"object\\\"){if(typeof e.then==\\\"function\\\")return Ds(lN(e),t,a,o,n);throw t=String(e),Error(\\\"Objects are not valid as a React child (found: \\\"+(t===\\\"[object Object]\\\"?\\\"object with keys {\\\"+Object.keys(e).join(\\\", \\\")+\\\"}\\\":t)+\\\"). If you meant to render a collection of children, use an array instead.\\\")}return l}function Ff(e,t,a){if(e==null)return e;var o=[],n=0;return Ds(e,o,\\\"\\\",\\\"\\\",function(r){return t.call(a,r,n++)}),o}function sN(e){if(e._status===-1){var t=e._result,a=t();a.then(function(o){(e._status===0||e._status===-1)&&(e._status=1,e._result=o,a.status===void 0&&(a.status=\\\"fulfilled\\\",a.value=o))},function(o){(e._status===0||e._status===-1)&&(e._status=2,e._result=o,a.status===void 0&&(a.status=\\\"rejected\\\",a.reason=o))}),e._status===-1&&(e._status=0,e._result=a)}if(e._status===1)return e._result.default;throw e._result}var Sv=typeof reportError==\\\"function\\\"?reportError:function(e){if(typeof window==\\\"object\\\"&&typeof window.ErrorEvent==\\\"function\\\"){var t=new window.ErrorEvent(\\\"error\\\",{bubbles:!0,cancelable:!0,message:typeof e==\\\"object\\\"&&e!==null&&typeof e.message==\\\"string\\\"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==\\\"object\\\"&&typeof process.emit==\\\"function\\\"){process.emit(\\\"uncaughtException\\\",e);return}console.error(e)};function Tv(e){var t=pt.T,a={};a.types=t!==null?t.types:null,pt.T=a;try{var o=e(),n=pt.S;n!==null&&n(a,o),typeof o==\\\"object\\\"&&o!==null&&typeof o.then==\\\"function\\\"&&o.then(Eh,Sv)}catch(r){Sv(r)}finally{t!==null&&a.types!==null&&(t.types=a.types),pt.T=t}}function Ev(e){var t=pt.T;if(t!==null){var a=t.types;a===null?t.types=[e]:a.indexOf(e)===-1&&a.push(e)}else Tv(Ev.bind(null,e))}var iN={map:Ff,forEach:function(e,t,a){Ff(e,function(){t.apply(this,arguments)},a)},count:function(e){var t=0;return Ff(e,function(){t++}),t},toArray:function(e){return Ff(e,function(t){return t})||[]},only:function(e){if(!Dh(e))throw Error(\\\"React.Children.only expected to receive a single React element child.\\\");return e}};Ie.Activity=tN;Ie.Children=iN;Ie.Component=Ps;Ie.Fragment=YP;Ie.Profiler=ZP;Ie.PureComponent=Mh;Ie.StrictMode=KP;Ie.Suspense=JP;Ie.ViewTransition=aN;Ie.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=pt;Ie.__COMPILER_RUNTIME={__proto__:null,c:function(e){return pt.H.useMemoCache(e)}};Ie.addTransitionType=Ev;Ie.cache=function(e){return function(){return e.apply(null,arguments)}};Ie.cacheSignal=function(){return null};Ie.cloneElement=function(e,t,a){if(e==null)throw Error(\\\"The argument must be a React element, but you passed \\\"+e+\\\".\\\");var o=Lv({},e.props),n=e.key;if(t!=null)for(r in t.key!==void 0&&(n=\\\"\\\"+t.key),t)!wv.call(t,r)||r===\\\"key\\\"||r===\\\"__self\\\"||r===\\\"__source\\\"||r===\\\"ref\\\"&&t.ref===void 0||(o[r]=t[r]);var r=arguments.length-2;if(r===1)o.children=a;else if(1<r){for(var l=Array(r),s=0;s<r;s++)l[s]=arguments[s+2];o.children=l}return Oh(e.type,n,o)};Ie.createContext=function(e){return e={$$typeof:QP,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:$P,_context:e},e};Ie.createElement=function(e,t,a){var o,n={},r=null;if(t!=null)for(o in t.key!==void 0&&(r=\\\"\\\"+t.key),t)wv.call(t,o)&&o!==\\\"key\\\"&&o!==\\\"__self\\\"&&o!==\\\"__source\\\"&&(n[o]=t[o]);var l=arguments.length-2;if(l===1)n.children=a;else if(1<l){for(var s=Array(l),i=0;i<l;i++)s[i]=arguments[i+2];n.children=s}if(e&&e.defaultProps)for(o in l=e.defaultProps,l)n[o]===void 0&&(n[o]=l[o]);return Oh(e,r,n)};Ie.createRef=function(){return{current:null}};Ie.forwardRef=function(e){return{$$typeof:WP,render:e}};Ie.isValidElement=Dh;Ie.lazy=function(e){return{$$typeof:Cv,_payload:{_status:-1,_result:e},_init:sN}};Ie.memo=function(e,t){return{$$typeof:eN,type:e,compare:t===void 0?null:t}};Ie.startTransition=Tv;Ie.unstable_useCacheRefresh=function(){return pt.H.useCacheRefresh()};Ie.use=function(e){return pt.H.use(e)};Ie.useActionState=function(e,t,a){return pt.H.useActionState(e,t,a)};Ie.useCallback=function(e,t){return pt.H.useCallback(e,t)};Ie.useContext=function(e){return pt.H.useContext(e)};Ie.useDebugValue=function(){};Ie.useDeferredValue=function(e,t){return pt.H.useDeferredValue(e,t)};Ie.useEffect=function(e,t){return pt.H.useEffect(e,t)};Ie.useEffectEvent=function(e){return pt.H.useEffectEvent(e)};Ie.useId=function(){return pt.H.useId()};Ie.useImperativeHandle=function(e,t,a){return pt.H.useImperativeHandle(e,t,a)};Ie.useInsertionEffect=function(e,t){return pt.H.useInsertionEffect(e,t)};Ie.useLayoutEffect=function(e,t){return pt.H.useLayoutEffect(e,t)};Ie.useMemo=function(e,t){return pt.H.useMemo(e,t)};Ie.useOptimistic=function(e,t){return pt.H.useOptimistic(e,t)};Ie.useReducer=function(e,t,a){return pt.H.useReducer(e,t,a)};Ie.useRef=function(e){return pt.H.useRef(e)};Ie.useState=function(e){return pt.H.useState(e)};Ie.useSyncExternalStore=function(e,t,a){return pt.H.useSyncExternalStore(e,t,a)};Ie.useTransition=function(){return pt.H.useTransition()};Ie.version=\\\"19.3.0\\\"});var A=la((l4,Mv)=>{\\\"use strict\\\";Mv.exports=kv()});var zv=la(bt=>{\\\"use strict\\\";function _h(e,t){var a=e.length;e.push(t);e:for(;0<a;){var o=a-1>>>1,n=e[o];if(0<Hf(n,t))e[o]=t,e[a]=n,a=o;else break e}}function Wo(e){return e.length===0?null:e[0]}function Uf(e){if(e.length===0)return null;var t=e[0],a=e.pop();if(a!==t){e[0]=a;e:for(var o=0,n=e.length,r=n>>>1;o<r;){var l=2*(o+1)-1,s=e[l],i=l+1,u=e[i];if(0>Hf(s,a))i<n&&0>Hf(u,s)?(e[o]=u,e[i]=a,o=i):(e[o]=s,e[l]=a,o=l);else if(i<n&&0>Hf(u,a))e[o]=u,e[i]=a,o=i;else break e}}return t}function Hf(e,t){var a=e.sortIndex-t.sortIndex;return a!==0?a:e.id-t.id}bt.unstable_now=void 0;typeof performance==\\\"object\\\"&&typeof performance.now==\\\"function\\\"?(Av=performance,bt.unstable_now=function(){return Av.now()}):(Ph=Date,Ov=Ph.now(),bt.unstable_now=function(){return Ph.now()-Ov});var Av,Ph,Ov,Dn=[],pr=[],uN=1,mo=null,sa=3,Fh=!1,yu=!1,Su=!1,Hh=!1,Nv=typeof setTimeout==\\\"function\\\"?setTimeout:null,Bv=typeof clearTimeout==\\\"function\\\"?clearTimeout:null,Dv=typeof setImmediate<\\\"u\\\"?setImmediate:null;function zf(e){for(var t=Wo(pr);t!==null;){if(t.callback===null)Uf(pr);else if(t.startTime<=e)Uf(pr),t.sortIndex=t.expirationTime,_h(Dn,t);else break;t=Wo(pr)}}function zh(e){if(Su=!1,zf(e),!yu)if(Wo(Dn)!==null)yu=!0,Bs||(Bs=!0,Ns());else{var t=Wo(pr);t!==null&&Uh(zh,t.startTime-e)}}var Bs=!1,Cu=-1,_v=5,Fv=-1;function Hv(){return Hh?!0:!(bt.unstable_now()-Fv<_v)}function Nh(){if(Hh=!1,Bs){var e=bt.unstable_now();Fv=e;var t=!0;try{e:{yu=!1,Su&&(Su=!1,Bv(Cu),Cu=-1),Fh=!0;var a=sa;try{t:{for(zf(e),mo=Wo(Dn);mo!==null&&!(mo.expirationTime>e&&Hv());){var o=mo.callback;if(typeof o==\\\"function\\\"){mo.callback=null,sa=mo.priorityLevel;var n=o(mo.expirationTime<=e);if(e=bt.unstable_now(),typeof n==\\\"function\\\"){mo.callback=n,zf(e),t=!0;break t}mo===Wo(Dn)&&Uf(Dn),zf(e)}else Uf(Dn);mo=Wo(Dn)}if(mo!==null)t=!0;else{var r=Wo(pr);r!==null&&Uh(zh,r.startTime-e),t=!1}}break e}finally{mo=null,sa=a,Fh=!1}t=void 0}}finally{t?Ns():Bs=!1}}}var Ns;typeof Dv==\\\"function\\\"?Ns=function(){Dv(Nh)}:typeof MessageChannel<\\\"u\\\"?(Bh=new MessageChannel,Pv=Bh.port2,Bh.port1.onmessage=Nh,Ns=function(){Pv.postMessage(null)}):Ns=function(){Nv(Nh,0)};var Bh,Pv;function Uh(e,t){Cu=Nv(function(){e(bt.unstable_now())},t)}bt.unstable_IdlePriority=5;bt.unstable_ImmediatePriority=1;bt.unstable_LowPriority=4;bt.unstable_NormalPriority=3;bt.unstable_Profiling=null;bt.unstable_UserBlockingPriority=2;bt.unstable_cancelCallback=function(e){e.callback=null};bt.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\\\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\\\"):_v=0<e?Math.floor(1e3/e):5};bt.unstable_getCurrentPriorityLevel=function(){return sa};bt.unstable_next=function(e){switch(sa){case 1:case 2:case 3:var t=3;break;default:t=sa}var a=sa;sa=t;try{return e()}finally{sa=a}};bt.unstable_requestPaint=function(){Hh=!0};bt.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var a=sa;sa=e;try{return t()}finally{sa=a}};bt.unstable_scheduleCallback=function(e,t,a){var o=bt.unstable_now();switch(typeof a==\\\"object\\\"&&a!==null?(a=a.delay,a=typeof a==\\\"number\\\"&&0<a?o+a:o):a=o,e){case 1:var n=-1;break;case 2:n=250;break;case 5:n=1073741823;break;case 4:n=1e4;break;default:n=5e3}return n=a+n,e={id:uN++,callback:t,priorityLevel:e,startTime:a,expirationTime:n,sortIndex:-1},a>o?(e.sortIndex=a,_h(pr,e),Wo(Dn)===null&&e===Wo(pr)&&(Su?(Bv(Cu),Cu=-1):Su=!0,Uh(zh,a-o))):(e.sortIndex=n,_h(Dn,e),yu||Fh||(yu=!0,Bs||(Bs=!0,Ns()))),e};bt.unstable_shouldYield=Hv;bt.unstable_wrapCallback=function(e){var t=sa;return function(){var a=sa;sa=t;try{return e.apply(this,arguments)}finally{sa=a}}}});var qv=la((i4,Uv)=>{\\\"use strict\\\";Uv.exports=zv()});var Xv=la(ia=>{\\\"use strict\\\";var cN=A();function Gv(e){var t=\\\"https://react.dev/errors/\\\"+e;if(1<arguments.length){t+=\\\"?args[]=\\\"+encodeURIComponent(arguments[1]);for(var a=2;a<arguments.length;a++)t+=\\\"&args[]=\\\"+encodeURIComponent(arguments[a])}return\\\"Minified React error #\\\"+e+\\\"; visit \\\"+t+\\\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\\\"}function mr(){}var Ca={d:{f:mr,r:function(){throw Error(Gv(522))},D:mr,C:mr,L:mr,m:mr,X:mr,S:mr,M:mr},p:0,findDOMNode:null},fN=Symbol.for(\\\"react.portal\\\"),dN=Symbol.for(\\\"react.recoverable\\\"),Vv=Symbol.for(\\\"react.optimistic_key\\\");function pN(e,t,a){var o=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:fN,key:o==null?null:o===Vv?Vv:\\\"\\\"+o,children:e,containerInfo:t,implementation:a}}var vu=cN.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function qf(e,t){if(e===\\\"font\\\")return\\\"\\\";if(typeof t==\\\"string\\\")return t===\\\"use-credentials\\\"?t:\\\"\\\"}ia.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=Ca;ia.browser=function(e){return{$$typeof:dN,_reason:e}};ia.createPortal=function(e,t){var a=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(Gv(299));return pN(e,t,null,a)};ia.flushSync=function(e){var t=vu.T,a=Ca.p;try{if(vu.T=null,Ca.p=2,e)return e()}finally{vu.T=t,Ca.p=a,Ca.d.f()}};ia.preconnect=function(e,t){typeof e==\\\"string\\\"&&(t?(t=t.crossOrigin,t=typeof t==\\\"string\\\"?t===\\\"use-credentials\\\"?t:\\\"\\\":void 0):t=null,Ca.d.C(e,t))};ia.prefetchDNS=function(e){typeof e==\\\"string\\\"&&Ca.d.D(e)};ia.preinit=function(e,t){if(typeof e==\\\"string\\\"&&t&&typeof t.as==\\\"string\\\"){var a=t.as,o=qf(a,t.crossOrigin),n=typeof t.integrity==\\\"string\\\"?t.integrity:void 0,r=typeof t.fetchPriority==\\\"string\\\"?t.fetchPriority:void 0;a===\\\"style\\\"?Ca.d.S(e,typeof t.precedence==\\\"string\\\"?t.precedence:void 0,{crossOrigin:o,integrity:n,fetchPriority:r}):a===\\\"script\\\"&&Ca.d.X(e,{crossOrigin:o,integrity:n,fetchPriority:r,nonce:typeof t.nonce==\\\"string\\\"?t.nonce:void 0})}};ia.preinitModule=function(e,t){if(typeof e==\\\"string\\\")if(typeof t==\\\"object\\\"&&t!==null){if(t.as==null||t.as===\\\"script\\\"){var a=qf(t.as,t.crossOrigin);Ca.d.M(e,{crossOrigin:a,integrity:typeof t.integrity==\\\"string\\\"?t.integrity:void 0,nonce:typeof t.nonce==\\\"string\\\"?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==\\\"string\\\"?t.fetchPriority:void 0})}}else t==null&&Ca.d.M(e)};ia.preload=function(e,t){if(typeof e==\\\"string\\\"&&typeof t==\\\"object\\\"&&t!==null&&typeof t.as==\\\"string\\\"){var a=t.as,o=qf(a,t.crossOrigin);Ca.d.L(e,a,{crossOrigin:o,integrity:typeof t.integrity==\\\"string\\\"?t.integrity:void 0,nonce:typeof t.nonce==\\\"string\\\"?t.nonce:void 0,type:typeof t.type==\\\"string\\\"?t.type:void 0,fetchPriority:typeof t.fetchPriority==\\\"string\\\"?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==\\\"string\\\"?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==\\\"string\\\"?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==\\\"string\\\"?t.imageSizes:void 0,media:typeof t.media==\\\"string\\\"?t.media:void 0})}};ia.preloadModule=function(e,t){if(typeof e==\\\"string\\\")if(t){var a=qf(t.as,t.crossOrigin);Ca.d.m(e,{as:typeof t.as==\\\"string\\\"&&t.as!==\\\"script\\\"?t.as:void 0,crossOrigin:a,integrity:typeof t.integrity==\\\"string\\\"?t.integrity:void 0,nonce:typeof t.nonce==\\\"string\\\"?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==\\\"string\\\"?t.fetchPriority:void 0})}else Ca.d.m(e)};ia.requestFormReset=function(e){Ca.d.r(e)};ia.unstable_batchedUpdates=function(e,t){return e(t)};ia.useFormState=function(e,t,a){return vu.H.useFormState(e,t,a)};ia.useFormStatus=function(){return vu.H.useHostTransitionStatus()};ia.version=\\\"19.3.0\\\"});var Pn=la((c4,Yv)=>{\\\"use strict\\\";function jv(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\\\"u\\\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\\\"function\\\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(jv)}catch(e){console.error(e)}}jv(),Yv.exports=Xv()});var Dw=la(Lp=>{\\\"use strict\\\";var zt=qv(),OR=A(),mN=Pn();function F(e){var t=\\\"https://react.dev/errors/\\\"+e;if(1<arguments.length){t+=\\\"?args[]=\\\"+encodeURIComponent(arguments[1]);for(var a=2;a<arguments.length;a++)t+=\\\"&args[]=\\\"+encodeURIComponent(arguments[a])}return\\\"Minified React error #\\\"+e+\\\"; visit \\\"+t+\\\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\\\"}function DR(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function uc(e){for(var t=e,a=t;a&&!a.alternate;)t=a,(t.flags&4098)!==0&&(e=t.return),a=t.return;for(;t.return;)t=t.return;return t.tag===3?e:null}function PR(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function NR(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Kv(e){if(uc(e)!==e)throw Error(F(188))}function gN(e){var t=e.alternate;if(!t){if(t=uc(e),t===null)throw Error(F(188));return t!==e?null:e}for(var a=e,o=t;;){var n=a.return;if(n===null)break;var r=n.alternate;if(r===null){if(o=n.return,o!==null){a=o;continue}break}if(n.child===r.child){for(r=n.child;r;){if(r===a)return Kv(n),e;if(r===o)return Kv(n),t;r=r.sibling}throw Error(F(188))}if(a.return!==o.return)a=n,o=r;else{for(var l=!1,s=n.child;s;){if(s===a){l=!0,a=n,o=r;break}if(s===o){l=!0,o=n,a=r;break}s=s.sibling}if(!l){for(s=r.child;s;){if(s===a){l=!0,a=r,o=n;break}if(s===o){l=!0,o=r,a=n;break}s=s.sibling}if(!l)throw Error(F(189))}}if(a.alternate!==o)throw Error(F(190))}if(a.tag!==3)throw Error(F(188));return a.stateNode.current===a?e:t}function BR(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=BR(e),t!==null)return t;e=e.sibling}return null}function _a(e,t,a,o,n,r){for(;e!==null;){if((e.tag===5||e.tag===27||e.tag===6)&&a(e,o,n,r)||(e.tag!==22||e.memoizedState===null)&&(t||e.tag!==5&&e.tag!==27)&&_a(e.child,t,a,o,n,r))return!0;e=e.sibling}return!1}function Gl(e){for(e=e.return;e!==null;){if(e.tag===3||e.tag===5||e.tag===27)return e;e=e.return}return null}function Zv(e){var t=!1;for(e=e.return;e!==null&&(e.tag===4&&(t=!0),!(e.tag===3||e.tag===5||e.tag===27));)e=e.return;return t}function _R(e){var t=[null,null],a=Gl(e);return a===null||FR(t,e,a.child,{foundSelf:!1}),t}function FR(e,t,a,o){for(;a!==null;){if(a===t)o.foundSelf=!0;else if(a.tag===5||a.tag===27||a.tag===6){if(o.foundSelf)return e[1]=a,!0;e[0]=a}else if((a.tag!==22||a.memoizedState===null)&&FR(e,t,a.child,o))return!0;a=a.sibling}return!1}function Ht(e){switch(e.tag){case 5:case 27:case 6:return e.stateNode;case 3:return e.stateNode.containerInfo;default:throw Error(F(559))}}var Vs=null,yx=null;function hN(e,t,a){return e===a?!0:e===t?(Vs=e,!0):!1}function xN(e,t,a){return e===a?(yx=e,!1):e===t?(yx!==null&&(Vs=e),!0):!1}function $v(e){if(e===null)return null;do e=e===null?null:e.return;while(e&&e.tag!==5&&e.tag!==27&&e.tag!==3);return e||null}function Sx(e,t,a){for(var o=0,n=e;n;n=a(n))o++;n=0;for(var r=t;r;r=a(r))n++;for(;0<o-n;)e=a(e),o--;for(;0<n-o;)t=a(t),n--;for(;o--;){if(e===t||t!==null&&e===t.alternate)return e;e=a(e),t=a(t)}return null}var ct=Object.assign,bN=Symbol.for(\\\"react.element\\\"),Vf=Symbol.for(\\\"react.transitional.element\\\"),ku=Symbol.for(\\\"react.portal\\\"),Gs=Symbol.for(\\\"react.fragment\\\"),HR=Symbol.for(\\\"react.strict_mode\\\"),Cx=Symbol.for(\\\"react.profiler\\\"),zR=Symbol.for(\\\"react.consumer\\\"),nn=Symbol.for(\\\"react.context\\\"),Mb=Symbol.for(\\\"react.forward_ref\\\"),vx=Symbol.for(\\\"react.suspense\\\"),Lx=Symbol.for(\\\"react.suspense_list\\\"),Ab=Symbol.for(\\\"react.memo\\\"),br=Symbol.for(\\\"react.lazy\\\"),Rx=Symbol.for(\\\"react.activity\\\"),yN=Symbol.for(\\\"react.legacy_hidden\\\"),SN=Symbol.for(\\\"react.memo_cache_sentinel\\\"),Ix=Symbol.for(\\\"react.view_transition\\\"),CN=Symbol.for(\\\"react.recoverable\\\"),Qv=Symbol.iterator;function Lu(e){return e===null||typeof e!=\\\"object\\\"?null:(e=Qv&&e[Qv]||e[\\\"@@iterator\\\"],typeof e==\\\"function\\\"?e:null)}var vN=Symbol.for(\\\"react.client.reference\\\");function wx(e){if(e==null)return null;if(typeof e==\\\"function\\\")return e.$$typeof===vN?null:e.displayName||e.name||null;if(typeof e==\\\"string\\\")return e;switch(e){case Gs:return\\\"Fragment\\\";case Cx:return\\\"Profiler\\\";case HR:return\\\"StrictMode\\\";case vx:return\\\"Suspense\\\";case Lx:return\\\"SuspenseList\\\";case Rx:return\\\"Activity\\\";case Ix:return\\\"ViewTransition\\\"}if(typeof e==\\\"object\\\")switch(e.$$typeof){case ku:return\\\"Portal\\\";case nn:return e.displayName||\\\"Context\\\";case zR:return(e._context.displayName||\\\"Context\\\")+\\\".Consumer\\\";case Mb:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||\\\"\\\",e=e!==\\\"\\\"?\\\"ForwardRef(\\\"+e+\\\")\\\":\\\"ForwardRef\\\"),e;case Ab:return t=e.displayName||null,t!==null?t:wx(e.type)||\\\"Memo\\\";case br:t=e._payload,e=e._init;try{return wx(e(t))}catch{}}return null}var Mu=Array.isArray,ve=OR.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,$e=mN.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Al={pending:!1,data:null,method:null,action:null},Tx=[],Xs=-1;function dn(e){return{current:e}}function ea(e){0>Xs||(e.current=Tx[Xs],Tx[Xs]=null,Xs--)}function ht(e,t){Xs++,Tx[Xs]=e.current,e.current=t}var un=dn(null),Yu=dn(null),Tr=dn(null),kd=dn(null);function Md(e,t){switch(ht(Tr,t),ht(Yu,e),ht(un,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?fR(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=fR(t),e=iw(t,e);else switch(e){case\\\"svg\\\":e=1;break;case\\\"math\\\":e=2;break;default:e=0}}ea(un),ht(un,e)}function fi(){ea(un),ea(Yu),ea(Tr)}function Ex(e){var t=e.memoizedState;t!==null&&(Ci._currentValue=t.memoizedState,ht(kd,e)),t=un.current;var a=iw(t,e.type);t!==a&&(ht(Yu,e),ht(un,a))}function Ad(e){Yu.current===e&&(ea(un),ea(Yu)),kd.current===e&&(ea(kd),Ci._currentValue=Al)}var qh,Wv;function hr(e){if(qh===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\\\\n( *(at )?)/);qh=t&&t[1]||\\\"\\\",Wv=-1<a.stack.indexOf(`\\n    at`)?\\\" (<anonymous>)\\\":-1<a.stack.indexOf(\\\"@\\\")?\\\"@unknown:0:0\\\":\\\"\\\"}return`\\n`+qh+e+Wv}var Vh=!1;function Gh(e,t){if(!e||Vh)return\\\"\\\";Vh=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var o={DetermineComponentFrameRoot:function(){try{if(t){var d=function(){throw Error()};if(Object.defineProperty(d.prototype,\\\"props\\\",{set:function(){throw Error()}}),typeof Reflect==\\\"object\\\"&&Reflect.construct){try{Reflect.construct(d,[])}catch(h){var f=h}Reflect.construct(e,[],d)}else{try{d.call()}catch(h){f=h}d=!1;try{var p=Object.getOwnPropertyDescriptor(e.prototype,\\\"props\\\");Object.defineProperty(e.prototype,\\\"props\\\",{configurable:!0,set:function(){throw Error()}}),d=!0,new e}finally{d&&(p!==void 0?Object.defineProperty(e.prototype,\\\"props\\\",p):delete e.prototype.props)}}}else{try{throw Error()}catch(h){f=h}(d=e())&&typeof d.catch==\\\"function\\\"&&d.catch(function(){})}}catch(h){if(h&&f&&typeof h.stack==\\\"string\\\")return[h.stack,f.stack]}return[null,null]}};o.DetermineComponentFrameRoot.displayName=\\\"DetermineComponentFrameRoot\\\";var n=Object.getOwnPropertyDescriptor(o.DetermineComponentFrameRoot,\\\"name\\\");n&&n.configurable&&Object.defineProperty(o.DetermineComponentFrameRoot,\\\"name\\\",{value:\\\"DetermineComponentFrameRoot\\\"});var r=o.DetermineComponentFrameRoot(),l=r[0],s=r[1];if(l&&s){var i=l.split(`\\n`),u=s.split(`\\n`);for(n=o=0;o<i.length&&!i[o].includes(\\\"DetermineComponentFrameRoot\\\");)o++;for(;n<u.length&&!u[n].includes(\\\"DetermineComponentFrameRoot\\\");)n++;if(o===i.length||n===u.length)for(o=i.length-1,n=u.length-1;1<=o&&0<=n&&i[o]!==u[n];)n--;for(;1<=o&&0<=n;o--,n--)if(i[o]!==u[n]){if(o!==1||n!==1)do if(o--,n--,0>n||i[o]!==u[n]){var c=`\\n`+i[o].replace(\\\" at new \\\",\\\" at \\\");return e.displayName&&c.includes(\\\"<anonymous>\\\")&&(c=c.replace(\\\"<anonymous>\\\",e.displayName)),c}while(1<=o&&0<=n);break}}}finally{Vh=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:\\\"\\\")?hr(a):\\\"\\\"}function LN(e,t){switch(e.tag){case 26:case 27:case 5:return hr(e.type);case 16:return hr(\\\"Lazy\\\");case 13:return e.child!==t&&t!==null?hr(\\\"Suspense Fallback\\\"):hr(\\\"Suspense\\\");case 19:return hr(\\\"SuspenseList\\\");case 0:case 15:return Gh(e.type,!1);case 11:return Gh(e.type.render,!1);case 1:return Gh(e.type,!0);case 31:return hr(\\\"Activity\\\");case 30:return hr(\\\"ViewTransition\\\");default:return\\\"\\\"}}function Jv(e){try{var t=\\\"\\\",a=null;do t+=LN(e,a),a=e,e=e.return;while(e);return t}catch(o){return`\\nError generating stack: `+o.message+`\\n`+o.stack}}var kx=Object.prototype.hasOwnProperty,Ob=zt.unstable_scheduleCallback,Xh=zt.unstable_cancelCallback,RN=zt.unstable_shouldYield,IN=zt.unstable_requestPaint,Ja=zt.unstable_now,wN=zt.unstable_getCurrentPriorityLevel,UR=zt.unstable_ImmediatePriority,qR=zt.unstable_UserBlockingPriority,Od=zt.unstable_NormalPriority,TN=zt.unstable_LowPriority,VR=zt.unstable_IdlePriority,EN=zt.log,kN=zt.unstable_setDisableYieldValue,cc=null,eo=null;function Cr(e){if(typeof EN==\\\"function\\\"&&kN(e),eo&&typeof eo.setStrictMode==\\\"function\\\")try{eo.setStrictMode(cc,e)}catch{}}var to=Math.clz32?Math.clz32:ON,MN=Math.log,AN=Math.LN2;function ON(e){return e>>>=0,e===0?32:31-(MN(e)/AN|0)|0}var Gf=256,Xf=262144,jf=4194304;function wl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function np(e,t,a){var o=e.pendingLanes;if(o===0)return 0;var n=0,r=e.suspendedLanes,l=e.pingedLanes;e=e.warmLanes;var s=o&134217727;return s!==0?(o=s&~r,o!==0?n=wl(o):(l&=s,l!==0?n=wl(l):a||(a=s&~e,a!==0&&(n=wl(a))))):(s=o&~r,s!==0?n=wl(s):l!==0?n=wl(l):a||(a=o&~e,a!==0&&(n=wl(a)))),n===0?0:t!==0&&t!==n&&(t&r)===0&&(r=n&-n,a=t&-t,r>=a||r===32&&(a&4194048)!==0)?t:n}function fc(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function GR(e,t){(t&8)!==0&&(t|=t&32);var a=e.entangledLanes;if(a!==0)for(e=e.entanglements,a&=t;0<a;){var o=31-to(a),n=1<<o;t|=e[o],a&=~n}return t}function DN(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function XR(){var e=jf;return jf<<=1,(jf&62914560)===0&&(jf=4194304),e}function jh(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function dc(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function PN(e,t,a,o,n,r){var l=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var s=e.entanglements,i=e.expirationTimes,u=e.hiddenUpdates;for(a=l&~a;0<a;){var c=31-to(a),d=1<<c;s[c]=0,i[c]=-1;var f=u[c];if(f!==null)for(u[c]=null,c=0;c<f.length;c++){var p=f[c];p!==null&&(p.lane&=-536870913)}a&=~d}o!==0&&jR(e,o,0),r!==0&&n===0&&e.tag!==0&&(e.suspendedLanes|=r&~(l&~t))}function jR(e,t,a){e.pendingLanes|=t,e.suspendedLanes&=~t;var o=31-to(t);e.entangledLanes|=t,e.entanglements[o]=e.entanglements[o]|1073741824|a&261930}function YR(e,t){var a=e.entangledLanes|=t;for(e=e.entanglements;a;){var o=31-to(a),n=1<<o;n&t|e[o]&t&&(e[o]|=t),a&=~n}}function KR(e,t){var a=t&-t;return a=(a&42)!==0?1:Db(a),(a&(e.suspendedLanes|t))!==0?0:a}function Db(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Pb(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function ZR(){var e=$e.p;return e!==0?e:(e=window.event,e===void 0?32:Mw(e.type))}function eL(e,t){var a=$e.p;try{return $e.p=e,t()}finally{$e.p=a}}var Yn=Math.random().toString(36).slice(2),Wt=\\\"__reactFiber$\\\"+Yn,Fa=\\\"__reactProps$\\\"+Yn,Ri=\\\"__reactContainer$\\\"+Yn,tL=\\\"__reactEvents$\\\"+Yn,NN=\\\"__reactListeners$\\\"+Yn,BN=\\\"__reactHandles$\\\"+Yn,aL=\\\"__reactResources$\\\"+Yn,pc=\\\"__reactMarker$\\\"+Yn,Dd=\\\"__reactLoad$\\\"+Yn;function rp(e){delete e[Wt],delete e[Fa],delete e[NN],delete e[BN]}function kl(e){var t;if(t=e[Wt])return t;for(var a=e.parentNode;a;){if(t=a[Ri]||a[Wt]){if(a=t.alternate,t.child!==null||a!==null&&a.child!==null)for(e=yR(e);e!==null;){if(a=e[Wt])return a;e=yR(e)}return t}e=a,a=e.parentNode}return null}function Ii(e){if(e=e[Wt]||e[Ri]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Au(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(F(33))}function ti(e){var t=e[aL];return t||(t=e[aL]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function jt(e){e[pc]=!0}function $R(e){e[Dd]=void 0}var QR=new Set,WR={};function Xl(e,t){di(e,t),di(e+\\\"Capture\\\",t)}function di(e,t){for(WR[e]=t,e=0;e<t.length;e++)QR.add(t[e])}var _N=RegExp(\\\"^[:A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD][:A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD\\\\\\\\-.0-9\\\\\\\\u00B7\\\\\\\\u0300-\\\\\\\\u036F\\\\\\\\u203F-\\\\\\\\u2040]*$\\\"),oL={},nL={};function FN(e){return kx.call(nL,e)?!0:kx.call(oL,e)?!1:_N.test(e)?nL[e]=!0:(oL[e]=!0,!1)}var je=!1;function rL(){var e=je;return je=!1,e}function cd(e,t,a){if(FN(t))if(a===null)e.removeAttribute(t);else{switch(typeof a){case\\\"undefined\\\":case\\\"function\\\":case\\\"symbol\\\":e.removeAttribute(t);return;case\\\"boolean\\\":var o=t.toLowerCase().slice(0,5);if(o!==\\\"data-\\\"&&o!==\\\"aria-\\\"){e.removeAttribute(t);return}}e.setAttribute(t,a)}}function Yf(e,t,a){if(a===null)e.removeAttribute(t);else{switch(typeof a){case\\\"undefined\\\":case\\\"function\\\":case\\\"symbol\\\":case\\\"boolean\\\":e.removeAttribute(t);return}e.setAttribute(t,a)}}function Nn(e,t,a,o){if(o===null)e.removeAttribute(a);else{switch(typeof o){case\\\"undefined\\\":case\\\"function\\\":case\\\"symbol\\\":case\\\"boolean\\\":e.removeAttribute(a);return}e.setAttributeNS(t,a,o)}}function Za(e){switch(typeof e){case\\\"bigint\\\":case\\\"boolean\\\":case\\\"number\\\":case\\\"string\\\":case\\\"undefined\\\":return e;case\\\"object\\\":return e;default:return\\\"\\\"}}function JR(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===\\\"input\\\"&&(t===\\\"checkbox\\\"||t===\\\"radio\\\")}function HN(e,t,a){var o=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof o<\\\"u\\\"&&typeof o.get==\\\"function\\\"&&typeof o.set==\\\"function\\\"){var n=o.get,r=o.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return n.call(this)},set:function(l){a=\\\"\\\"+l,r.call(this,l)}}),Object.defineProperty(e,t,{enumerable:o.enumerable}),{getValue:function(){return a},setValue:function(l){a=\\\"\\\"+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Mx(e){if(!e._valueTracker){var t=JR(e)?\\\"checked\\\":\\\"value\\\";e._valueTracker=HN(e,t,\\\"\\\"+e[t])}}function eI(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var a=t.getValue(),o=\\\"\\\";return e&&(o=JR(e)?e.checked?\\\"true\\\":\\\"false\\\":e.value),e=o,e!==a?(t.setValue(e),!0):!1}var zN=/[\\\\n\\\"\\\\\\\\]/g;function yo(e){return e.replace(zN,function(t){return\\\"\\\\\\\\\\\"+t.charCodeAt(0).toString(16)+\\\" \\\"})}function Ax(e,t,a,o,n,r,l,s){e.name=\\\"\\\",l!=null&&typeof l!=\\\"function\\\"&&typeof l!=\\\"symbol\\\"&&typeof l!=\\\"boolean\\\"?e.type=l:e.removeAttribute(\\\"type\\\"),t!=null?l===\\\"number\\\"?(t===0&&e.value===\\\"\\\"||e.value!=t)&&(e.value=\\\"\\\"+Za(t)):e.value!==\\\"\\\"+Za(t)&&(e.value=\\\"\\\"+Za(t)):l!==\\\"submit\\\"&&l!==\\\"reset\\\"||e.removeAttribute(\\\"value\\\"),t!=null?l===\\\"number\\\"&&e.value==t?Yh(e,Za(e.value)):Yh(e,Za(t)):a!=null?Yh(e,Za(a)):o!=null&&e.removeAttribute(\\\"value\\\"),n==null&&r!=null&&(e.defaultChecked=!!r),n!=null&&(e.checked=n&&typeof n!=\\\"function\\\"&&typeof n!=\\\"symbol\\\"),s!=null&&typeof s!=\\\"function\\\"&&typeof s!=\\\"symbol\\\"&&typeof s!=\\\"boolean\\\"?e.name=\\\"\\\"+Za(s):e.removeAttribute(\\\"name\\\")}function tI(e,t,a,o,n,r,l,s){if(r!=null&&typeof r!=\\\"function\\\"&&typeof r!=\\\"symbol\\\"&&typeof r!=\\\"boolean\\\"&&(e.type=r),t!=null||a!=null){if(!(r!==\\\"submit\\\"&&r!==\\\"reset\\\"||t!=null)){Mx(e);return}a=a!=null?\\\"\\\"+Za(a):\\\"\\\",t=t!=null?\\\"\\\"+Za(t):a,s||t===e.value||(e.value=t),e.defaultValue=t}o=o??n,o=typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\"&&!!o,e.checked=s?e.checked:!!o,e.defaultChecked=!!o,l!=null&&typeof l!=\\\"function\\\"&&typeof l!=\\\"symbol\\\"&&typeof l!=\\\"boolean\\\"&&(e.name=l),Mx(e)}function Yh(e,t){e.defaultValue!==\\\"\\\"+t&&(e.defaultValue=\\\"\\\"+t)}function ai(e,t,a,o){if(e=e.options,t){t={};for(var n=0;n<a.length;n++)t[\\\"$\\\"+a[n]]=!0;for(a=0;a<e.length;a++)n=t.hasOwnProperty(\\\"$\\\"+e[a].value),e[a].selected!==n&&(e[a].selected=n),n&&o&&(e[a].defaultSelected=!0)}else{for(a=\\\"\\\"+Za(a),t=null,n=0;n<e.length;n++){if(e[n].value===a){e[n].selected=!0,o&&(e[n].defaultSelected=!0);return}t!==null||e[n].disabled||(t=e[n])}t!==null&&(t.selected=!0)}}function aI(e,t,a){if(t!=null&&(t=\\\"\\\"+Za(t),t!==e.value&&(e.value=t),a==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=a!=null?\\\"\\\"+Za(a):\\\"\\\"}function oI(e,t,a,o){if(t==null){if(o!=null){if(a!=null)throw Error(F(92));if(Mu(o)){if(1<o.length)throw Error(F(93));o=o[0]}a=o}a==null&&(a=\\\"\\\"),t=a}a=Za(t),e.defaultValue=a,o=e.textContent,o===a&&o!==\\\"\\\"&&o!==null&&(e.value=o),Mx(e)}function pi(e,t){if(t){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=t;return}}e.textContent=t}var UN=new Set(\\\"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\\\".split(\\\" \\\"));function lL(e,t,a){var o=t.indexOf(\\\"--\\\")===0;a==null||typeof a==\\\"boolean\\\"||a===\\\"\\\"?o?e.setProperty(t,\\\"\\\"):t===\\\"float\\\"?e.cssFloat=\\\"\\\":e[t]=\\\"\\\":o?e.setProperty(t,a):typeof a!=\\\"number\\\"||a===0||UN.has(t)?t===\\\"float\\\"?e.cssFloat=a:e[t]=(\\\"\\\"+a).trim():e[t]=a+\\\"px\\\"}function nI(e,t,a){if(t!=null&&typeof t!=\\\"object\\\")throw Error(F(62));if(e=e.style,a!=null){for(var o in a)!a.hasOwnProperty(o)||t!=null&&t.hasOwnProperty(o)||(o.indexOf(\\\"--\\\")===0?e.setProperty(o,\\\"\\\"):o===\\\"float\\\"?e.cssFloat=\\\"\\\":e[o]=\\\"\\\",je=!0);for(var n in t)o=t[n],t.hasOwnProperty(n)&&a[n]!==o&&(lL(e,n,o),je=!0)}else for(var r in t)t.hasOwnProperty(r)&&lL(e,r,t[r])}function Nb(e){if(e.indexOf(\\\"-\\\")===-1)return!1;switch(e){case\\\"annotation-xml\\\":case\\\"color-profile\\\":case\\\"font-face\\\":case\\\"font-face-src\\\":case\\\"font-face-uri\\\":case\\\"font-face-format\\\":case\\\"font-face-name\\\":case\\\"missing-glyph\\\":return!1;default:return!0}}var qN=new Map([[\\\"acceptCharset\\\",\\\"accept-charset\\\"],[\\\"htmlFor\\\",\\\"for\\\"],[\\\"httpEquiv\\\",\\\"http-equiv\\\"],[\\\"crossOrigin\\\",\\\"crossorigin\\\"],[\\\"accentHeight\\\",\\\"accent-height\\\"],[\\\"alignmentBaseline\\\",\\\"alignment-baseline\\\"],[\\\"arabicForm\\\",\\\"arabic-form\\\"],[\\\"baselineShift\\\",\\\"baseline-shift\\\"],[\\\"capHeight\\\",\\\"cap-height\\\"],[\\\"clipPath\\\",\\\"clip-path\\\"],[\\\"clipRule\\\",\\\"clip-rule\\\"],[\\\"colorInterpolation\\\",\\\"color-interpolation\\\"],[\\\"colorInterpolationFilters\\\",\\\"color-interpolation-filters\\\"],[\\\"colorProfile\\\",\\\"color-profile\\\"],[\\\"colorRendering\\\",\\\"color-rendering\\\"],[\\\"dominantBaseline\\\",\\\"dominant-baseline\\\"],[\\\"enableBackground\\\",\\\"enable-background\\\"],[\\\"fillOpacity\\\",\\\"fill-opacity\\\"],[\\\"fillRule\\\",\\\"fill-rule\\\"],[\\\"floodColor\\\",\\\"flood-color\\\"],[\\\"floodOpacity\\\",\\\"flood-opacity\\\"],[\\\"fontFamily\\\",\\\"font-family\\\"],[\\\"fontSize\\\",\\\"font-size\\\"],[\\\"fontSizeAdjust\\\",\\\"font-size-adjust\\\"],[\\\"fontStretch\\\",\\\"font-stretch\\\"],[\\\"fontStyle\\\",\\\"font-style\\\"],[\\\"fontVariant\\\",\\\"font-variant\\\"],[\\\"fontWeight\\\",\\\"font-weight\\\"],[\\\"glyphName\\\",\\\"glyph-name\\\"],[\\\"glyphOrientationHorizontal\\\",\\\"glyph-orientation-horizontal\\\"],[\\\"glyphOrientationVertical\\\",\\\"glyph-orientation-vertical\\\"],[\\\"horizAdvX\\\",\\\"horiz-adv-x\\\"],[\\\"horizOriginX\\\",\\\"horiz-origin-x\\\"],[\\\"imageRendering\\\",\\\"image-rendering\\\"],[\\\"letterSpacing\\\",\\\"letter-spacing\\\"],[\\\"lightingColor\\\",\\\"lighting-color\\\"],[\\\"markerEnd\\\",\\\"marker-end\\\"],[\\\"markerMid\\\",\\\"marker-mid\\\"],[\\\"markerStart\\\",\\\"marker-start\\\"],[\\\"maskType\\\",\\\"mask-type\\\"],[\\\"overlinePosition\\\",\\\"overline-position\\\"],[\\\"overlineThickness\\\",\\\"overline-thickness\\\"],[\\\"paintOrder\\\",\\\"paint-order\\\"],[\\\"panose-1\\\",\\\"panose-1\\\"],[\\\"pointerEvents\\\",\\\"pointer-events\\\"],[\\\"renderingIntent\\\",\\\"rendering-intent\\\"],[\\\"shapeRendering\\\",\\\"shape-rendering\\\"],[\\\"stopColor\\\",\\\"stop-color\\\"],[\\\"stopOpacity\\\",\\\"stop-opacity\\\"],[\\\"strikethroughPosition\\\",\\\"strikethrough-position\\\"],[\\\"strikethroughThickness\\\",\\\"strikethrough-thickness\\\"],[\\\"strokeDasharray\\\",\\\"stroke-dasharray\\\"],[\\\"strokeDashoffset\\\",\\\"stroke-dashoffset\\\"],[\\\"strokeLinecap\\\",\\\"stroke-linecap\\\"],[\\\"strokeLinejoin\\\",\\\"stroke-linejoin\\\"],[\\\"strokeMiterlimit\\\",\\\"stroke-miterlimit\\\"],[\\\"strokeOpacity\\\",\\\"stroke-opacity\\\"],[\\\"strokeWidth\\\",\\\"stroke-width\\\"],[\\\"textAnchor\\\",\\\"text-anchor\\\"],[\\\"textDecoration\\\",\\\"text-decoration\\\"],[\\\"textRendering\\\",\\\"text-rendering\\\"],[\\\"transformOrigin\\\",\\\"transform-origin\\\"],[\\\"underlinePosition\\\",\\\"underline-position\\\"],[\\\"underlineThickness\\\",\\\"underline-thickness\\\"],[\\\"unicodeBidi\\\",\\\"unicode-bidi\\\"],[\\\"unicodeRange\\\",\\\"unicode-range\\\"],[\\\"unitsPerEm\\\",\\\"units-per-em\\\"],[\\\"vAlphabetic\\\",\\\"v-alphabetic\\\"],[\\\"vHanging\\\",\\\"v-hanging\\\"],[\\\"vIdeographic\\\",\\\"v-ideographic\\\"],[\\\"vMathematical\\\",\\\"v-mathematical\\\"],[\\\"vectorEffect\\\",\\\"vector-effect\\\"],[\\\"vertAdvY\\\",\\\"vert-adv-y\\\"],[\\\"vertOriginX\\\",\\\"vert-origin-x\\\"],[\\\"vertOriginY\\\",\\\"vert-origin-y\\\"],[\\\"wordSpacing\\\",\\\"word-spacing\\\"],[\\\"writingMode\\\",\\\"writing-mode\\\"],[\\\"xmlnsXlink\\\",\\\"xmlns:xlink\\\"],[\\\"xHeight\\\",\\\"x-height\\\"]]),VN=/^[\\\\u0000-\\\\u001F ]*j[\\\\r\\\\n\\\\t]*a[\\\\r\\\\n\\\\t]*v[\\\\r\\\\n\\\\t]*a[\\\\r\\\\n\\\\t]*s[\\\\r\\\\n\\\\t]*c[\\\\r\\\\n\\\\t]*r[\\\\r\\\\n\\\\t]*i[\\\\r\\\\n\\\\t]*p[\\\\r\\\\n\\\\t]*t[\\\\r\\\\n\\\\t]*:/i;function fd(e){return VN.test(\\\"\\\"+e)?\\\"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\\\":e}function rn(){}var Ox=null;function Bb(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var js=null,oi=null;function sL(e){var t=Ii(e);if(t&&(e=t.stateNode)){var a=e[Fa]||null;e:switch(e=t.stateNode,t.type){case\\\"input\\\":if(Ax(e,a.value,a.defaultValue,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name),t=a.name,a.type===\\\"radio\\\"&&t!=null){for(a=e;a.parentNode;)a=a.parentNode;for(a=a.querySelectorAll('input[name=\\\"'+yo(\\\"\\\"+t)+'\\\"][type=\\\"radio\\\"]'),t=0;t<a.length;t++){var o=a[t];if(o!==e&&o.form===e.form){var n=o[Fa]||null;if(!n)throw Error(F(90));Ax(o,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name)}}for(t=0;t<a.length;t++)o=a[t],o.form===e.form&&eI(o)}break e;case\\\"textarea\\\":aI(e,a.value,a.defaultValue);break e;case\\\"select\\\":t=a.value,t!=null&&ai(e,!!a.multiple,t,!1)}}}var Kh=!1;function rI(e,t,a){if(Kh)return e(t,a);Kh=!0;try{var o=e(t);return o}finally{if(Kh=!1,(js!==null||oi!==null)&&(yp(),js&&(t=js,e=oi,oi=js=null,sL(t),e)))for(t=0;t<e.length;t++)sL(e[t])}}function Ku(e,t){var a=e.stateNode;if(a===null)return null;var o=a[Fa]||null;if(o===null)return null;a=o[t];e:switch(t){case\\\"onClick\\\":case\\\"onClickCapture\\\":case\\\"onDoubleClick\\\":case\\\"onDoubleClickCapture\\\":case\\\"onMouseDown\\\":case\\\"onMouseDownCapture\\\":case\\\"onMouseMove\\\":case\\\"onMouseMoveCapture\\\":case\\\"onMouseUp\\\":case\\\"onMouseUpCapture\\\":case\\\"onMouseEnter\\\":(o=!o.disabled)||(e=e.type,o=!(e===\\\"button\\\"||e===\\\"input\\\"||e===\\\"select\\\"||e===\\\"textarea\\\")),e=!o;break e;default:e=!1}if(e)return null;if(a&&typeof a!=\\\"function\\\")throw Error(F(231,t,typeof a));return a}var Un=!(typeof window>\\\"u\\\"||typeof window.document>\\\"u\\\"||typeof window.document.createElement>\\\"u\\\"),Dx=!1;if(Un)try{_s={},Object.defineProperty(_s,\\\"passive\\\",{get:function(){Dx=!0}}),window.addEventListener(\\\"test\\\",_s,_s),window.removeEventListener(\\\"test\\\",_s,_s)}catch{Dx=!1}var _s,vr=null,_b=null,dd=null;function lI(){if(dd)return dd;var e,t=_b,a=t.length,o,n=\\\"value\\\"in vr?vr.value:vr.textContent,r=n.length;for(e=0;e<a&&t[e]===n[e];e++);var l=a-e;for(o=1;o<=l&&t[a-o]===n[r-o];o++);return dd=n.slice(e,1<o?1-o:void 0)}function pd(e){var t=e.keyCode;return\\\"charCode\\\"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Kf(){return!0}function iL(){return!1}function Ia(e){function t(a,o,n,r,l){this._reactName=a,this._targetInst=n,this.type=o,this.nativeEvent=r,this.target=l,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(a=e[s],this[s]=a?a(r):r[s]);return this.isDefaultPrevented=(r.defaultPrevented!=null?r.defaultPrevented:r.returnValue===!1)?Kf:iL,this.isPropagationStopped=iL,this}return ct(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():typeof a.returnValue!=\\\"unknown\\\"&&(a.returnValue=!1),this.isDefaultPrevented=Kf)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():typeof a.cancelBubble!=\\\"unknown\\\"&&(a.cancelBubble=!0),this.isPropagationStopped=Kf)},persist:function(){},isPersistent:Kf}),t}var qr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},lp=Ia(qr),mc=ct({},qr,{view:0,detail:0}),GN=Ia(mc),Zh,$h,Ru,sp=ct({},mc,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Fb,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\\\"movementX\\\"in e?e.movementX:(e!==Ru&&(Ru&&e.type===\\\"mousemove\\\"?(Zh=e.screenX-Ru.screenX,$h=e.screenY-Ru.screenY):$h=Zh=0,Ru=e),Zh)},movementY:function(e){return\\\"movementY\\\"in e?e.movementY:$h}}),uL=Ia(sp),XN=ct({},sp,{dataTransfer:0}),jN=Ia(XN),YN=ct({},mc,{relatedTarget:0}),Qh=Ia(YN),KN=ct({},qr,{animationName:0,elapsedTime:0,pseudoElement:0}),ZN=Ia(KN),$N=ct({},qr,{clipboardData:function(e){return\\\"clipboardData\\\"in e?e.clipboardData:window.clipboardData}}),QN=Ia($N),WN=ct({},qr,{data:0}),cL=Ia(WN),JN={Esc:\\\"Escape\\\",Spacebar:\\\" \\\",Left:\\\"ArrowLeft\\\",Up:\\\"ArrowUp\\\",Right:\\\"ArrowRight\\\",Down:\\\"ArrowDown\\\",Del:\\\"Delete\\\",Win:\\\"OS\\\",Menu:\\\"ContextMenu\\\",Apps:\\\"ContextMenu\\\",Scroll:\\\"ScrollLock\\\",MozPrintableKey:\\\"Unidentified\\\"},e2={8:\\\"Backspace\\\",9:\\\"Tab\\\",12:\\\"Clear\\\",13:\\\"Enter\\\",16:\\\"Shift\\\",17:\\\"Control\\\",18:\\\"Alt\\\",19:\\\"Pause\\\",20:\\\"CapsLock\\\",27:\\\"Escape\\\",32:\\\" \\\",33:\\\"PageUp\\\",34:\\\"PageDown\\\",35:\\\"End\\\",36:\\\"Home\\\",37:\\\"ArrowLeft\\\",38:\\\"ArrowUp\\\",39:\\\"ArrowRight\\\",40:\\\"ArrowDown\\\",45:\\\"Insert\\\",46:\\\"Delete\\\",112:\\\"F1\\\",113:\\\"F2\\\",114:\\\"F3\\\",115:\\\"F4\\\",116:\\\"F5\\\",117:\\\"F6\\\",118:\\\"F7\\\",119:\\\"F8\\\",120:\\\"F9\\\",121:\\\"F10\\\",122:\\\"F11\\\",123:\\\"F12\\\",144:\\\"NumLock\\\",145:\\\"ScrollLock\\\",224:\\\"Meta\\\"},t2={Alt:\\\"altKey\\\",Control:\\\"ctrlKey\\\",Meta:\\\"metaKey\\\",Shift:\\\"shiftKey\\\"};function a2(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=t2[e])?!!t[e]:!1}function Fb(){return a2}var o2=ct({},mc,{key:function(e){if(e.key){var t=JN[e.key]||e.key;if(t!==\\\"Unidentified\\\")return t}return e.type===\\\"keypress\\\"?(e=pd(e),e===13?\\\"Enter\\\":String.fromCharCode(e)):e.type===\\\"keydown\\\"||e.type===\\\"keyup\\\"?e2[e.keyCode]||\\\"Unidentified\\\":\\\"\\\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Fb,charCode:function(e){return e.type===\\\"keypress\\\"?pd(e):0},keyCode:function(e){return e.type===\\\"keydown\\\"||e.type===\\\"keyup\\\"?e.keyCode:0},which:function(e){return e.type===\\\"keypress\\\"?pd(e):e.type===\\\"keydown\\\"||e.type===\\\"keyup\\\"?e.keyCode:0}}),n2=Ia(o2),r2=ct({},sp,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),fL=Ia(r2),l2=ct({},qr,{submitter:0}),s2=Ia(l2),i2=ct({},mc,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Fb}),u2=Ia(i2),c2=ct({},qr,{propertyName:0,elapsedTime:0,pseudoElement:0}),f2=Ia(c2),d2=ct({},sp,{deltaX:function(e){return\\\"deltaX\\\"in e?e.deltaX:\\\"wheelDeltaX\\\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\\\"deltaY\\\"in e?e.deltaY:\\\"wheelDeltaY\\\"in e?-e.wheelDeltaY:\\\"wheelDelta\\\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),p2=Ia(d2),m2=ct({},qr,{newState:0,oldState:0,source:0}),g2=Ia(m2),h2=[9,13,27,32],Hb=Un&&\\\"CompositionEvent\\\"in window,Pu=null;Un&&\\\"documentMode\\\"in document&&(Pu=document.documentMode);var x2=Un&&\\\"TextEvent\\\"in window&&!Pu,sI=Un&&(!Hb||Pu&&8<Pu&&11>=Pu),dL=\\\" \\\",pL=!1;function iI(e,t){switch(e){case\\\"keyup\\\":return h2.indexOf(t.keyCode)!==-1;case\\\"keydown\\\":return t.keyCode!==229;case\\\"keypress\\\":case\\\"mousedown\\\":case\\\"focusout\\\":return!0;default:return!1}}function uI(e){return e=e.detail,typeof e==\\\"object\\\"&&\\\"data\\\"in e?e.data:null}var Ys=!1;function b2(e,t){switch(e){case\\\"compositionend\\\":return uI(t);case\\\"keypress\\\":return t.which!==32?null:(pL=!0,dL);case\\\"textInput\\\":return e=t.data,e===dL&&pL?null:e;default:return null}}function y2(e,t){if(Ys)return e===\\\"compositionend\\\"||!Hb&&iI(e,t)?(e=lI(),dd=_b=vr=null,Ys=!1,e):null;switch(e){case\\\"paste\\\":return null;case\\\"keypress\\\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\\\"compositionend\\\":return sI&&t.locale!==\\\"ko\\\"?null:t.data;default:return null}}var S2={color:!0,date:!0,datetime:!0,\\\"datetime-local\\\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function mL(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t===\\\"input\\\"?!!S2[e.type]:t===\\\"textarea\\\"}function cI(e,t,a,o){js?oi?oi.push(o):oi=[o]:js=o,t=tp(t,\\\"onChange\\\"),0<t.length&&(a=new lp(\\\"onChange\\\",\\\"change\\\",null,a,o),e.push({event:a,listeners:t}))}var Nu=null,Zu=null;function C2(e){rw(e,0)}function ip(e){var t=Au(e);if(eI(t))return e}function gL(e,t){if(e===\\\"change\\\")return t}var fI=!1;Un&&(Un?($f=\\\"oninput\\\"in document,$f||(Wh=document.createElement(\\\"div\\\"),Wh.setAttribute(\\\"oninput\\\",\\\"return;\\\"),$f=typeof Wh.oninput==\\\"function\\\"),Zf=$f):Zf=!1,fI=Zf&&(!document.documentMode||9<document.documentMode));var Zf,$f,Wh;function hL(){Nu&&(Nu.detachEvent(\\\"onpropertychange\\\",dI),Zu=Nu=null)}function dI(e){if(e.propertyName===\\\"value\\\"&&ip(Zu)){var t=[];cI(t,Zu,e,Bb(e)),rI(C2,t)}}function v2(e,t,a){e===\\\"focusin\\\"?(hL(),Nu=t,Zu=a,Nu.attachEvent(\\\"onpropertychange\\\",dI)):e===\\\"focusout\\\"&&hL()}function L2(e){if(e===\\\"selectionchange\\\"||e===\\\"keyup\\\"||e===\\\"keydown\\\")return ip(Zu)}function R2(e,t){if(e===\\\"click\\\")return ip(t)}function I2(e,t){if(e===\\\"input\\\"||e===\\\"change\\\")return ip(t)}function w2(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var oo=typeof Object.is==\\\"function\\\"?Object.is:w2;function $u(e,t){if(oo(e,t))return!0;if(typeof e!=\\\"object\\\"||e===null||typeof t!=\\\"object\\\"||t===null)return!1;var a=Object.keys(e),o=Object.keys(t);if(a.length!==o.length)return!1;for(o=0;o<a.length;o++){var n=a[o];if(!kx.call(t,n)||!oo(e[n],t[n]))return!1}return!0}function Px(e){if(e=e||(typeof document<\\\"u\\\"?document:void 0),typeof e>\\\"u\\\")return null;try{return e.activeElement||e.body}catch{return e.body}}function xL(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function bL(e,t){var a=xL(e);e=0;for(var o;a;){if(a.nodeType===3){if(o=e+a.textContent.length,e<=t&&o>=t)return{node:a,offset:t-e};e=o}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=xL(a)}}function pI(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?pI(e,t.parentNode):\\\"contains\\\"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function mI(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Px(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href==\\\"string\\\"}catch{a=!1}if(a)e=t.contentWindow;else break;t=Px(e.document)}return t}function zb(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===\\\"input\\\"&&(e.type===\\\"text\\\"||e.type===\\\"search\\\"||e.type===\\\"tel\\\"||e.type===\\\"url\\\"||e.type===\\\"password\\\")||t===\\\"textarea\\\"||e.contentEditable===\\\"true\\\")}var T2=Un&&\\\"documentMode\\\"in document&&11>=document.documentMode,Ks=null,Nx=null,Bu=null,Bx=!1;function yL(e,t,a){var o=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Bx||Ks==null||Ks!==Px(o)||(o=Ks,\\\"selectionStart\\\"in o&&zb(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),Bu&&$u(Bu,o)||(Bu=o,o=tp(Nx,\\\"onSelect\\\"),0<o.length&&(t=new lp(\\\"onSelect\\\",\\\"select\\\",null,t,a),e.push({event:t,listeners:o}),t.target=Ks)))}function Rl(e,t){var a={};return a[e.toLowerCase()]=t.toLowerCase(),a[\\\"Webkit\\\"+e]=\\\"webkit\\\"+t,a[\\\"Moz\\\"+e]=\\\"moz\\\"+t,a}var Zs={animationend:Rl(\\\"Animation\\\",\\\"AnimationEnd\\\"),animationiteration:Rl(\\\"Animation\\\",\\\"AnimationIteration\\\"),animationstart:Rl(\\\"Animation\\\",\\\"AnimationStart\\\"),transitionrun:Rl(\\\"Transition\\\",\\\"TransitionRun\\\"),transitionstart:Rl(\\\"Transition\\\",\\\"TransitionStart\\\"),transitioncancel:Rl(\\\"Transition\\\",\\\"TransitionCancel\\\"),transitionend:Rl(\\\"Transition\\\",\\\"TransitionEnd\\\")},Jh={},gI={};Un&&(gI=document.createElement(\\\"div\\\").style,\\\"AnimationEvent\\\"in window||(delete Zs.animationend.animation,delete Zs.animationiteration.animation,delete Zs.animationstart.animation),\\\"TransitionEvent\\\"in window||delete Zs.transitionend.transition);function jl(e){if(Jh[e])return Jh[e];if(!Zs[e])return e;var t=Zs[e],a;for(a in t)if(t.hasOwnProperty(a)&&a in gI)return Jh[e]=t[a];return e}var hI=jl(\\\"animationend\\\"),xI=jl(\\\"animationiteration\\\"),bI=jl(\\\"animationstart\\\"),E2=jl(\\\"transitionrun\\\"),k2=jl(\\\"transitionstart\\\"),M2=jl(\\\"transitioncancel\\\"),yI=jl(\\\"transitionend\\\"),SI=new Map,_x=\\\"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\\\".split(\\\" \\\");_x.push(\\\"scrollEnd\\\");function zo(e,t){SI.set(e,t),Xl(t,[e])}var A2=0;function qn(e,t){if(e.name!=null&&e.name!==\\\"auto\\\")return e.name;if(t.autoName!==null)return t.autoName;e=Ho.identifierPrefix;var a=A2++;return e=\\\"_\\\"+e+\\\"t_\\\"+a.toString(32)+\\\"_\\\",t.autoName=e}function SL(e){if(e==null||typeof e==\\\"string\\\")return e;var t=null,a=ci;if(a!==null)for(var o=0;o<a.length;o++){var n=e[a[o]];if(n!=null){if(n===\\\"none\\\")return\\\"none\\\";t=t==null?n:t+(\\\" \\\"+n)}}return t??e.default}function Kn(e,t){return e=SL(e),t=SL(t),t==null?e===\\\"auto\\\"?null:e:t===\\\"auto\\\"?null:t}var Pd=typeof reportError==\\\"function\\\"?reportError:function(e){if(typeof window==\\\"object\\\"&&typeof window.ErrorEvent==\\\"function\\\"){var t=new window.ErrorEvent(\\\"error\\\",{bubbles:!0,cancelable:!0,message:typeof e==\\\"object\\\"&&e!==null&&typeof e.message==\\\"string\\\"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==\\\"object\\\"&&typeof process.emit==\\\"function\\\"){process.emit(\\\"uncaughtException\\\",e);return}console.error(e)},ho=[],$s=0,Ub=0;function up(){for(var e=$s,t=Ub=$s=0;t<e;){var a=ho[t];ho[t++]=null;var o=ho[t];ho[t++]=null;var n=ho[t];ho[t++]=null;var r=ho[t];if(ho[t++]=null,o!==null&&n!==null){var l=o.pending;l===null?n.next=n:(n.next=l.next,l.next=n),o.pending=n}r!==0&&CI(a,n,r)}}function cp(e,t,a,o){ho[$s++]=e,ho[$s++]=t,ho[$s++]=a,ho[$s++]=o,Ub|=o,e.lanes|=o,e=e.alternate,e!==null&&(e.lanes|=o)}function qb(e,t,a,o){return cp(e,t,a,o),Nd(e)}function Yl(e,t){return cp(e,null,null,t),Nd(e)}function CI(e,t,a){e.lanes|=a;var o=e.alternate;o!==null&&(o.lanes|=a);for(var n=!1,r=e.return;r!==null;)r.childLanes|=a,o=r.alternate,o!==null&&(o.childLanes|=a),r.tag===22&&(e=r.stateNode,e===null||e._visibility&1||(n=!0)),e=r,r=r.return;return e.tag===3?(r=e.stateNode,n&&t!==null&&(n=31-to(a),e=r.hiddenUpdates,o=e[n],o===null?e[n]=[t]:o.push(t),t.lane=a|536870912),r):null}function Nd(e){if(50<ju)throw ju=0,Ld=null,Error(F(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var Qs={};function O2(e,t,a,o){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Na(e,t,a,o){return new O2(e,t,a,o)}function Vb(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Hn(e,t){var a=e.alternate;return a===null?(a=Na(e.tag,t,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=t,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&1206910976,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,t=e.dependencies,a.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a.refCleanup=e.refCleanup,a}function vI(e,t){e.flags&=1206910978;var a=e.alternate;return a===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=a.childLanes,e.lanes=a.lanes,e.child=a.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,e.type=a.type,t=a.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function md(e,t,a,o,n,r){var l=0;if(o=e,typeof o==\\\"function\\\")Vb(o)&&(l=1);else if(typeof o==\\\"string\\\")l=n_(e,a,un.current)?26:e===\\\"html\\\"||e===\\\"head\\\"||e===\\\"body\\\"?27:5;else e:switch(o){case Rx:return e=Na(31,a,t,n),e.elementType=Rx,e.lanes=r,e;case Gs:return Ol(a.children,n,r,t);case HR:l=8,n|=24;break;case Cx:return e=Na(12,a,t,n|2),e.elementType=Cx,e.lanes=r,e;case vx:return e=Na(13,a,t,n),e.elementType=vx,e.lanes=r,e;case Lx:return e=Na(19,a,t,n),e.elementType=Lx,e.lanes=r,e;case yN:case Ix:return e=n|32,e=Na(30,a,t,e),e.elementType=Ix,e.lanes=r,e.stateNode={autoName:null,paired:null,clones:null,ref:null},e;default:if(typeof o==\\\"object\\\"&&o!==null)switch(o.$$typeof){case nn:l=10;break e;case zR:l=9;break e;case Mb:l=11;break e;case Ab:l=14;break e;case br:l=16,o=null;break e}l=29,a=Error(F(130,e===null?\\\"null\\\":typeof e,\\\"\\\")),o=null}return t=Na(l,a,t,n),t.elementType=e,t.type=o,t.lanes=r,t}function Ol(e,t,a,o){return e=Na(7,e,o,t),e.lanes=a,e}function ex(e,t,a){return e=Na(6,e,null,t),e.lanes=a,e}function LI(e){var t=Na(18,null,null,0);return t.stateNode=e,t}function tx(e,t,a){return t=Na(4,e.children!==null?e.children:[],e.key,t),t.lanes=a,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var CL=new WeakMap;function So(e,t){if(typeof e==\\\"object\\\"&&e!==null){var a=CL.get(e);return a!==void 0?a:(t={value:e,source:t,stack:Jv(t)},CL.set(e,t),t)}return{value:e,source:t,stack:Jv(t)}}var Ws=[],Js=0,Bd=null,Qu=0,xo=[],bo=0,_r=null,ln=1,sn=\\\"\\\";function _n(e,t){Ws[Js++]=Qu,Ws[Js++]=Bd,Bd=e,Qu=t}function RI(e,t,a){xo[bo++]=ln,xo[bo++]=sn,xo[bo++]=_r,_r=e;var o=ln;e=sn;var n=32-to(o)-1;o&=~(1<<n),a+=1;var r=32-to(t)+n;if(30<r){var l=n-n%5;r=(o&(1<<l)-1).toString(32),o>>=l,n-=l,ln=1<<32-to(t)+n|a<<n|o,sn=r+e}else ln=1<<r|a<<n|o,sn=e}function fp(e){e.return!==null&&(_n(e,1),RI(e,1,0))}function Gb(e){for(;e===Bd;)Bd=Ws[--Js],Ws[Js]=null,Qu=Ws[--Js],Ws[Js]=null;for(;e===_r;)_r=xo[--bo],xo[bo]=null,sn=xo[--bo],xo[bo]=null,ln=xo[--bo],xo[bo]=null}function II(e,t){xo[bo++]=ln,xo[bo++]=sn,xo[bo++]=_r,ln=t.id,sn=t.overflow,_r=e}var Yt=null,gt=null,_e=!1,Er=null,Co=!1,Fx=Error(F(519));function Fr(e){var t=Error(F(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?\\\"text\\\":\\\"HTML\\\",\\\"\\\"));throw Wu(So(t,e)),Fx}function vL(e){var t=e.stateNode,a=e.type,o=e.memoizedProps;switch(t[Wt]=e,t[Fa]=o,a){case\\\"dialog\\\":Ue(\\\"cancel\\\",t),Ue(\\\"close\\\",t);break;case\\\"iframe\\\":case\\\"object\\\":case\\\"embed\\\":Ue(\\\"load\\\",t);break;case\\\"video\\\":case\\\"audio\\\":for(a=0;a<ac.length;a++)Ue(ac[a],t);break;case\\\"source\\\":Ue(\\\"error\\\",t);break;case\\\"img\\\":case\\\"image\\\":case\\\"link\\\":Ue(\\\"error\\\",t),Ue(\\\"load\\\",t);break;case\\\"details\\\":Ue(\\\"toggle\\\",t);break;case\\\"input\\\":Ue(\\\"invalid\\\",t),tI(t,o.value,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name,!0);break;case\\\"select\\\":Ue(\\\"invalid\\\",t);break;case\\\"textarea\\\":Ue(\\\"invalid\\\",t),oI(t,o.value,o.defaultValue,o.children)}a=o.children,typeof a!=\\\"string\\\"&&typeof a!=\\\"number\\\"&&typeof a!=\\\"bigint\\\"||t.textContent===\\\"\\\"+a||o.suppressHydrationWarning===!0||sw(t.textContent,a)?(o.popover!=null&&(Ue(\\\"beforetoggle\\\",t),Ue(\\\"toggle\\\",t)),o.onScroll!=null&&Ue(\\\"scroll\\\",t),o.onScrollEnd!=null&&Ue(\\\"scrollend\\\",t),o.onClick!=null&&(t.onclick=rn),t=!0):t=!1,t||Fr(e,!0)}function _d(e){for(Yt=e.return;Yt;)switch(Yt.tag){case 5:case 31:case 13:Co=!1;return;case 27:case 3:Co=!0;return;default:Yt=Yt.return}}function Fs(e){if(e!==Yt)return!1;if(!_e)return _d(e),_e=!0,!1;var t=e.tag,a;if((a=t!==3&&t!==27)&&((a=t===5)&&(a=e.type,a=!(a!==\\\"form\\\"&&a!==\\\"button\\\")||vb(e.type,e.memoizedProps)),a=!a),a&&gt&&Fr(e),_d(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(F(317));gt=bR(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(F(317));gt=bR(e)}else t===27?(t=gt,Vr(e.type)?(e=wb,wb=null,gt=e):gt=t):gt=Yt?vo(e.stateNode.nextSibling):null;return!0}function Bl(){gt=Yt=null,_e=!1}function ax(){var e=Er;return e!==null&&(Da===null?Da=e:Da.push.apply(Da,e),Er=null),e}function Wu(e){Er===null?Er=[e]:Er.push(e)}var Hx=dn(null),Kl=null,Fn=null;function Lr(e,t,a){ht(Hx,t._currentValue),t._currentValue=a}function zn(e){e._currentValue=Hx.current,ea(Hx)}function gd(e,t,a){for(;e!==null;){var o=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,o!==null&&(o.childLanes|=t)):o!==null&&(o.childLanes&t)!==t&&(o.childLanes|=t),e===a)break;e=e.return}}function zx(e,t,a,o){var n=e.child;for(n!==null&&(n.return=e);n!==null;){var r=n.dependencies;if(r!==null){var l=n.child;r=r.firstContext;e:for(;r!==null;){var s=r;r=n;for(var i=0;i<t.length;i++)if(s.context===t[i]){r.lanes|=a,s=r.alternate,s!==null&&(s.lanes|=a),gd(r.return,a,e),o||(l=null);break e}r=s.next}}else if(n.tag===18){if(l=n.return,l===null)throw Error(F(341));l.lanes|=a,r=l.alternate,r!==null&&(r.lanes|=a),gd(l,a,e),l=null}else n.tag===13&&n.memoizedState!==null&&n.memoizedState.dehydrated===null?(n.lanes|=a,l=n.alternate,l!==null&&(l.lanes|=a),gd(n.return,a,e),l=n.child,l=l!==null?l.sibling:null):l=n.child;if(l!==null)l.return=n;else for(l=n;l!==null;){if(l===e){l=null;break}if(n=l.sibling,n!==null){n.return=l.return,l=n;break}l=l.return}n=l}}function _l(e,t,a,o){e=null;for(var n=t,r=!1;n!==null;){if(!r){if((n.flags&524288)!==0)r=!0;else if((n.flags&262144)!==0)break}if(n.tag===10){var l=n.alternate;if(l===null)throw Error(F(387));if(l=l.memoizedProps,l!==null){var s=n.type;oo(n.pendingProps.value,l.value)||(e!==null?e.push(s):e=[s])}}else if(n===kd.current){if(l=n.alternate,l===null)throw Error(F(387));l.memoizedState.memoizedState!==n.memoizedState.memoizedState&&(e!==null?e.push(Ci):e=[Ci])}n=n.return}return e!==null&&zx(t,e,a,o),t.flags|=262144,e!==null}function Fd(e){for(e=e.firstContext;e!==null;){if(!oo(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function Fl(e){Kl=e,Fn=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function Jt(e){return wI(Kl,e)}function Qf(e,t){return Kl===null&&Fl(e),wI(e,t)}function wI(e,t){var a=t._currentValue;if(t={context:t,memoizedValue:a,next:null},Fn===null){if(e===null)throw Error(F(308));Fn=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else Fn=Fn.next=t;return a}var D2=typeof AbortController<\\\"u\\\"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(a,o){e.push(o)}};this.abort=function(){t.aborted=!0,e.forEach(function(a){return a()})}},P2=zt.unstable_scheduleCallback,N2=zt.unstable_NormalPriority,Nt={$$typeof:nn,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Xb(){return{controller:new D2,data:new Map,refCount:0}}function gc(e){e.refCount--,e.refCount===0&&P2(N2,function(){e.controller.abort()})}function LL(e,t){if((e.pendingLanes&4194048)!==0){var a=e.transitionTypes;for(a===null&&(a=e.transitionTypes=[]),e=0;e<t.length;e++){var o=t[e];a.indexOf(o)===-1&&a.push(o)}}}var Ou=null;function B2(e){var t=e.transitionTypes;return e.transitionTypes=null,t}var _u=null,Ux=0,Hl=0,ni=null;function _2(e,t){if(_u===null){var a=_u=[];Ux=0,Hl=yy(),ni={status:\\\"pending\\\",value:void 0,then:function(o){a.push(o)}}}return Ux++,t.then(RL,RL),t}function RL(){if(--Ux===0&&(Ou=null,_u!==null)){ni!==null&&(ni.status=\\\"fulfilled\\\");var e=_u;_u=null,Hl=0,ni=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function F2(e,t){var a=[],o={status:\\\"pending\\\",value:null,reason:null,then:function(n){a.push(n)}};return e.then(function(){o.status=\\\"fulfilled\\\",o.value=t;for(var n=0;n<a.length;n++)(0,a[n])(t)},function(n){for(o.status=\\\"rejected\\\",o.reason=n,n=0;n<a.length;n++)(0,a[n])(void 0)}),o}var IL=ve.S;ve.S=function(e,t){if(G0=Ja(),typeof t==\\\"object\\\"&&t!==null&&typeof t.then==\\\"function\\\"&&_2(e,t),Ou!==null)for(var a=bi;a!==null;)LL(a,Ou),a=a.next;if(a=e.types,a!==null){for(var o=bi;o!==null;)LL(o,a),o=o.next;if(Hl!==0){o=Ou,o===null&&(o=Ou=[]);for(var n=0;n<a.length;n++){var r=a[n];o.indexOf(r)===-1&&o.push(r)}}}IL!==null&&IL(e,t)};var Dl=dn(null);function jb(){var e=Dl.current;return e!==null?e:ut.pooledCache}function hd(e,t){t===null?ht(Dl,Dl.current):ht(Dl,t.pool)}function TI(){var e=jb();return e===null?null:{parent:Nt._currentValue,pool:e}}var wi=Error(F(460)),Yb=Error(F(474)),dp=Error(F(542)),Hd={then:function(){}};function wL(e){return e=e.status,e===\\\"fulfilled\\\"||e===\\\"rejected\\\"}function EI(e,t,a){switch(a=e[a],a===void 0?e.push(t):a!==t&&(t.then(rn,rn),t=a),t.status){case\\\"fulfilled\\\":return t.value;case\\\"rejected\\\":throw e=t.reason,EL(e),e===void 0&&!(\\\"reason\\\"in t)?Error(F(600)):e;default:if(typeof t.status==\\\"string\\\")t.then(rn,rn);else{if(e=ut,e!==null&&100<e.shellSuspendCounter)throw Error(F(482));e=t,e.status=\\\"pending\\\",e.then(function(o){if(t.status===\\\"pending\\\"){var n=t;n.status=\\\"fulfilled\\\",n.value=o}},function(o){if(t.status===\\\"pending\\\"){var n=t;n.status=\\\"rejected\\\",n.reason=o}})}switch(t.status){case\\\"fulfilled\\\":return t.value;case\\\"rejected\\\":throw e=t.reason,EL(e),e}throw Pl=t,wi}}function Tl(e){try{var t=e._init;return t(e._payload)}catch(a){throw a!==null&&typeof a==\\\"object\\\"&&typeof a.then==\\\"function\\\"?(Pl=a,wi):a}}var Pl=null;function TL(){if(Pl===null)throw Error(F(459));var e=Pl;return Pl=null,e}function EL(e){if(e===wi||e===dp)throw Error(F(483))}var ri=null,Ju=0;function Wf(e){var t=Ju;return Ju+=1,ri===null&&(ri=[]),EI(ri,e,t)}function gr(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function Jf(e,t){throw t.$$typeof===bN?Error(F(525)):(e=Object.prototype.toString.call(t),Error(F(31,e===\\\"[object Object]\\\"?\\\"object with keys {\\\"+Object.keys(t).join(\\\", \\\")+\\\"}\\\":e)))}function kI(e){function t(g,m){if(e){var x=g.deletions;x===null?(g.deletions=[m],g.flags|=16):x.push(m)}}function a(g,m){if(!e)return null;for(;m!==null;)t(g,m),m=m.sibling;return null}function o(g){for(var m=new Map;g!==null;)g.key===null?m.set(g.index,g):m.set(g.key,g),g=g.sibling;return m}function n(g,m){return g=Hn(g,m),g.index=0,g.sibling=null,g}function r(g,m,x){return g.index=x,e?(x=g.alternate,x!==null?(x=x.index,x<m?(g.flags|=2,m):x):(g.flags|=134217730,m)):(g.flags|=1048576,m)}function l(g){return e&&g.alternate===null&&(g.flags|=134217730),g}function s(g,m,x,y){return m===null||m.tag!==6?(m=ex(x,g.mode,y),m.return=g,m):(m=n(m,x),m.return=g,m)}function i(g,m,x,y){var L=x.type;return L===Gs?(g=c(g,m,x.props.children,y,x.key),gr(g,x),g):m!==null&&(m.elementType===L||typeof L==\\\"object\\\"&&L!==null&&L.$$typeof===br&&Tl(L)===m.type)?(m=n(m,x.props),gr(m,x),m.return=g,m):(m=md(x.type,x.key,x.props,null,g.mode,y),gr(m,x),m.return=g,m)}function u(g,m,x,y){return m===null||m.tag!==4||m.stateNode.containerInfo!==x.containerInfo||m.stateNode.implementation!==x.implementation?(m=tx(x,g.mode,y),m.return=g,m):(m=n(m,x.children||[]),m.return=g,m)}function c(g,m,x,y,L){return m===null||m.tag!==7?(m=Ol(x,g.mode,y,L),m.return=g,m):(m=n(m,x),m.return=g,m)}function d(g,m,x){if(typeof m==\\\"string\\\"&&m!==\\\"\\\"||typeof m==\\\"number\\\"||typeof m==\\\"bigint\\\")return m=ex(\\\"\\\"+m,g.mode,x),m.return=g,m;if(typeof m==\\\"object\\\"&&m!==null){switch(m.$$typeof){case Vf:return x=md(m.type,m.key,m.props,null,g.mode,x),gr(x,m),x.return=g,x;case ku:return m=tx(m,g.mode,x),m.return=g,m;case br:return m=Tl(m),d(g,m,x)}if(Mu(m)||Lu(m))return m=Ol(m,g.mode,x,null),m.return=g,m;if(typeof m.then==\\\"function\\\")return d(g,Wf(m),x);if(m.$$typeof===nn)return d(g,Qf(g,m),x);Jf(g,m)}return null}function f(g,m,x,y){var L=m!==null?m.key:null;if(typeof x==\\\"string\\\"&&x!==\\\"\\\"||typeof x==\\\"number\\\"||typeof x==\\\"bigint\\\")return L!==null?null:s(g,m,\\\"\\\"+x,y);if(typeof x==\\\"object\\\"&&x!==null){switch(x.$$typeof){case Vf:return x.key===L?i(g,m,x,y):null;case ku:return x.key===L?u(g,m,x,y):null;case br:return x=Tl(x),f(g,m,x,y)}if(Mu(x)||Lu(x))return L!==null?null:c(g,m,x,y,null);if(typeof x.then==\\\"function\\\")return f(g,m,Wf(x),y);if(x.$$typeof===nn)return f(g,m,Qf(g,x),y);Jf(g,x)}return null}function p(g,m,x,y,L){if(typeof y==\\\"string\\\"&&y!==\\\"\\\"||typeof y==\\\"number\\\"||typeof y==\\\"bigint\\\")return g=g.get(x)||null,s(m,g,\\\"\\\"+y,L);if(typeof y==\\\"object\\\"&&y!==null){switch(y.$$typeof){case Vf:return g=g.get(y.key===null?x:y.key)||null,i(m,g,y,L);case ku:return g=g.get(y.key===null?x:y.key)||null,u(m,g,y,L);case br:return y=Tl(y),p(g,m,x,y,L)}if(Mu(y)||Lu(y))return g=g.get(x)||null,c(m,g,y,L,null);if(typeof y.then==\\\"function\\\")return p(g,m,x,Wf(y),L);if(y.$$typeof===nn)return p(g,m,x,Qf(m,y),L);Jf(m,y)}return null}function h(g,m,x,y){for(var L=null,I=null,R=m,C=m=0,k=null;R!==null&&C<x.length;C++){R.index>C?(k=R,R=null):k=R.sibling;var E=f(g,R,x[C],y);if(E===null){R===null&&(R=k);break}e&&R&&E.alternate===null&&t(g,R),m=r(E,m,C),I===null?L=E:I.sibling=E,I=E,R=k}if(C===x.length)return a(g,R),_e&&_n(g,C),L;if(R===null){for(;C<x.length;C++)R=d(g,x[C],y),R!==null&&(m=r(R,m,C),I===null?L=R:I.sibling=R,I=R);return _e&&_n(g,C),L}for(R=o(R);C<x.length;C++)k=p(R,g,C,x[C],y),k!==null&&(e&&(E=k.alternate,E!==null&&R.delete(E.key===null?C:E.key)),m=r(k,m,C),I===null?L=k:I.sibling=k,I=k);return e&&R.forEach(function(T){return t(g,T)}),_e&&_n(g,C),L}function b(g,m,x,y){if(x==null)throw Error(F(151));for(var L=null,I=null,R=m,C=m=0,k=null,E=x.next();R!==null&&!E.done;C++,E=x.next()){R.index>C?(k=R,R=null):k=R.sibling;var T=f(g,R,E.value,y);if(T===null){R===null&&(R=k);break}e&&R&&T.alternate===null&&t(g,R),m=r(T,m,C),I===null?L=T:I.sibling=T,I=T,R=k}if(E.done)return a(g,R),_e&&_n(g,C),L;if(R===null){for(;!E.done;C++,E=x.next())E=d(g,E.value,y),E!==null&&(m=r(E,m,C),I===null?L=E:I.sibling=E,I=E);return _e&&_n(g,C),L}for(R=o(R);!E.done;C++,E=x.next())E=p(R,g,C,E.value,y),E!==null&&(e&&(k=E.alternate,k!==null&&R.delete(k.key===null?C:k.key)),m=r(E,m,C),I===null?L=E:I.sibling=E,I=E);return e&&R.forEach(function(w){return t(g,w)}),_e&&_n(g,C),L}function S(g,m,x,y){if(typeof x==\\\"object\\\"&&x!==null&&x.type===Gs&&x.key===null&&x.props.ref===void 0&&(x=x.props.children),typeof x==\\\"object\\\"&&x!==null){switch(x.$$typeof){case Vf:e:{for(var L=x.key;m!==null;){if(m.key===L){if(L=x.type,L===Gs){if(m.tag===7){a(g,m.sibling),y=n(m,x.props.children),gr(y,x),y.return=g,g=y;break e}}else if(m.elementType===L||typeof L==\\\"object\\\"&&L!==null&&L.$$typeof===br&&Tl(L)===m.type){a(g,m.sibling),y=n(m,x.props),gr(y,x),y.return=g,g=y;break e}a(g,m);break}else t(g,m);m=m.sibling}x.type===Gs?(y=Ol(x.props.children,g.mode,y,x.key),gr(y,x),y.return=g,g=y):(y=md(x.type,x.key,x.props,null,g.mode,y),gr(y,x),y.return=g,g=y)}return l(g);case ku:e:{for(L=x.key;m!==null;){if(m.key===L)if(m.tag===4&&m.stateNode.containerInfo===x.containerInfo&&m.stateNode.implementation===x.implementation){a(g,m.sibling),y=n(m,x.children||[]),y.return=g,g=y;break e}else{a(g,m);break}else t(g,m);m=m.sibling}y=tx(x,g.mode,y),y.return=g,g=y}return l(g);case br:return x=Tl(x),S(g,m,x,y)}if(Mu(x))return h(g,m,x,y);if(Lu(x)){if(L=Lu(x),typeof L!=\\\"function\\\")throw Error(F(150));return x=L.call(x),b(g,m,x,y)}if(typeof x.then==\\\"function\\\")return S(g,m,Wf(x),y);if(x.$$typeof===nn)return S(g,m,Qf(g,x),y);Jf(g,x)}return typeof x==\\\"string\\\"&&x!==\\\"\\\"||typeof x==\\\"number\\\"||typeof x==\\\"bigint\\\"?(x=\\\"\\\"+x,m!==null&&m.tag===6?(a(g,m.sibling),y=n(m,x),y.return=g,g=y):(a(g,m),y=ex(x,g.mode,y),y.return=g,g=y),l(g)):a(g,m)}return function(g,m,x,y){try{Ju=0;var L=S(g,m,x,y);return ri=null,L}catch(R){if(R===wi||R===dp)throw R;var I=Na(29,R,null,g.mode);return I.lanes=y,I.return=g,I}}}var zl=kI(!0),MI=kI(!1),yr=!1;function Kb(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function qx(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function kr(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Mr(e,t,a){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,(Ze&2)!==0){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,t=Nd(e),CI(e,null,a),t}return cp(e,o,t,a),Nd(e)}function Fu(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var o=t.lanes;o&=e.pendingLanes,a|=o,t.lanes=a,YR(e,a)}}function ox(e,t){var a=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,a===o)){var n=null,r=null;if(a=a.firstBaseUpdate,a!==null){do{var l={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};r===null?n=r=l:r=r.next=l,a=a.next}while(a!==null);r===null?n=r=t:r=r.next=t}else n=r=t;a={baseState:o.baseState,firstBaseUpdate:n,lastBaseUpdate:r,shared:o.shared,callbacks:o.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Vx=!1;function Hu(){if(Vx){var e=ni;if(e!==null)throw e}}function zu(e,t,a,o){Vx=!1;var n=e.updateQueue;yr=!1;var r=n.firstBaseUpdate,l=n.lastBaseUpdate,s=n.shared.pending;if(s!==null){n.shared.pending=null;var i=s,u=i.next;i.next=null,l===null?r=u:l.next=u,l=i;var c=e.alternate;c!==null&&(c=c.updateQueue,s=c.lastBaseUpdate,s!==l&&(s===null?c.firstBaseUpdate=u:s.next=u,c.lastBaseUpdate=i))}if(r!==null){var d=n.baseState;l=0,c=u=i=null,s=r;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Ge&f)===f:(o&f)===f){f!==0&&f===Hl&&(Vx=!0),c!==null&&(c=c.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var h=e,b=s;f=t;var S=a;switch(b.tag){case 1:if(h=b.payload,typeof h==\\\"function\\\"){d=h.call(S,d,f);break e}d=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=b.payload,f=typeof h==\\\"function\\\"?h.call(S,d,f):h,f==null)break e;d=ct({},d,f);break e;case 2:yr=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=n.callbacks,p===null?n.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},c===null?(u=c=p,i=d):c=c.next=p,l|=f;if(s=s.next,s===null){if(s=n.shared.pending,s===null)break;p=s,s=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);c===null&&(i=d),n.baseState=i,n.firstBaseUpdate=u,n.lastBaseUpdate=c,r===null&&(n.shared.lanes=0),Ur|=l,e.lanes=l,e.memoizedState=d}}function AI(e,t){if(typeof e!=\\\"function\\\")throw Error(F(191,e));e.call(t)}function OI(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;e<a.length;e++)AI(a[e],t)}var Hr=dn(null),zd=dn(0);function kL(e,t){e=jn,ht(zd,e),ht(Hr,t),jn=e|t.baseLanes}function Gx(){ht(zd,jn),ht(Hr,Hr.current)}function Zb(){jn=zd.current,ea(Hr),ea(zd)}var oa=dn(null),ua=null;function Ar(e){var t=e.alternate;ht(ta,ta.current&1),ht(oa,e),ua===null&&(t===null||Hr.current!==null||t.memoizedState!==null)&&(ua=e)}function Xx(e){ht(ta,ta.current),ht(oa,e),ua===null&&(ua=e)}function DI(e){e.tag===22?(ht(ta,ta.current),ht(oa,e),ua===null&&(ua=e)):Or()}function Or(){ht(ta,ta.current),ht(oa,oa.current)}function $a(e){ea(oa),ua===e&&(ua=null),ea(ta)}var ta=dn(0);function ec(e,t){ht(oa,oa.current),ht(ta,t)}function $b(e){ea(ta),ea(oa),ua===e&&(ua=null)}function Ud(e){for(var t=e;t!==null;){if(t.tag===13){var a=t.memoizedState;if(a!==null&&(a=a.dehydrated,a===null||Ib(a)||Ly(a)))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==\\\"independent\\\"){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Vn=0,Me=null,nt=null,Pt=null,qd=!1,li=!1,Ul=!1,Vd=0,tc=0,si=null,H2=0;function Et(){throw Error(F(321))}function Qb(e,t){if(t===null)return!1;for(var a=0;a<t.length&&a<e.length;a++)if(!oo(e[a],t[a]))return!1;return!0}function Wb(e,t,a,o,n,r){return Vn=r,Me=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,ve.H=e===null||e.memoizedState===null?c0:f0,Ul=!1,r=a(o,n),Ul=!1,li&&(r=NI(t,a,o,n)),PI(e),r}function PI(e){ve.H=Gd;var t=nt!==null&&nt.next!==null;if(Vn=0,Pt=nt=Me=null,qd=!1,tc=0,si=null,t)throw Error(F(300));e===null||Bt||(e=e.dependencies,e!==null&&Fd(e)&&(Bt=!0))}function NI(e,t,a,o){Me=e;var n=0;do{if(li&&(si=null),tc=0,li=!1,25<=n)throw Error(F(301));if(n+=1,Pt=nt=null,e.updateQueue!=null){var r=e.updateQueue;r.lastEffect=null,r.events=null,r.stores=null,r.memoCache!=null&&(r.memoCache.index=0)}ve.H=Y2,r=t(a,o)}while(li);return r}function z2(){var e=ve.H,t=e.useState()[0];return t=typeof t.then==\\\"function\\\"?hc(t):t,e=e.useState()[0],(nt!==null?nt.memoizedState:null)!==e&&(Me.flags|=1024),t}function Jb(){var e=Vd!==0;return Vd=0,e}function ey(e,t,a){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a}function ty(e){if(qd){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}qd=!1}Vn=0,Pt=nt=Me=null,li=!1,tc=Vd=0,si=null}function Ra(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Pt===null?Me.memoizedState=Pt=e:Pt=Pt.next=e,Pt}function At(){if(nt===null){var e=Me.alternate;e=e!==null?e.memoizedState:null}else e=nt.next;var t=Pt===null?Me.memoizedState:Pt.next;if(t!==null)Pt=t,nt=e;else{if(e===null)throw Me.alternate===null?Error(F(467)):Error(F(310));nt=e,e={memoizedState:nt.memoizedState,baseState:nt.baseState,baseQueue:nt.baseQueue,queue:nt.queue,next:null},Pt===null?Me.memoizedState=Pt=e:Pt=Pt.next=e}return Pt}function pp(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function hc(e){var t=tc;return tc+=1,si===null&&(si=[]),e=EI(si,e,t),t=Me,(Pt===null?t.memoizedState:Pt.next)===null&&(t=t.alternate,ve.H=t===null||t.memoizedState===null?c0:f0),e}function mp(e){if(e!==null&&typeof e==\\\"object\\\"){if(typeof e.then==\\\"function\\\")return hc(e);if(e.$$typeof===CN)return;if(e.$$typeof===nn)return Jt(e)}throw Error(F(438,String(e)))}function ay(e){var t=null,a=Me.updateQueue;if(a!==null&&(t=a.memoCache),t==null){var o=Me.alternate;o!==null&&(o=o.updateQueue,o!==null&&(o=o.memoCache,o!=null&&(t={data:o.data.map(function(n){return n.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),a===null&&(a=pp(),Me.updateQueue=a),a.memoCache=t,a=t.data[t.index],a===void 0)for(a=t.data[t.index]=Array(e),o=0;o<e;o++)a[o]=SN;return t.index++,a}function Gn(e,t){return typeof t==\\\"function\\\"?t(e):t}function xd(e){var t=At();return oy(t,nt,e)}function oy(e,t,a){var o=e.queue;if(o===null)throw Error(F(311));o.lastRenderedReducer=a;var n=e.baseQueue,r=o.pending;if(r!==null){if(n!==null){var l=n.next;n.next=r.next,r.next=l}t.baseQueue=n=r,o.pending=null}if(r=e.baseState,n===null)e.memoizedState=r;else{t=n.next;var s=l=null,i=null,u=t,c=!1;do{var d=u.lane&-536870913;if(d!==u.lane?(Ge&d)===d:(Vn&d)===d){var f=u.revertLane;if(f===0)i!==null&&(i=i.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),d===Hl&&(c=!0);else if((Vn&f)===f){u=u.next,f===Hl&&(c=!0);continue}else d={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},i===null?(s=i=d,l=r):i=i.next=d,Me.lanes|=f,Ur|=f;d=u.action,Ul&&a(r,d),r=u.hasEagerState?u.eagerState:a(r,d)}else f={lane:d,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},i===null?(s=i=f,l=r):i=i.next=f,Me.lanes|=d,Ur|=d;u=u.next}while(u!==null&&u!==t);if(i===null?l=r:i.next=s,!oo(r,e.memoizedState)&&(Bt=!0,c&&(a=ni,a!==null)))throw a;e.memoizedState=r,e.baseState=l,e.baseQueue=i,o.lastRenderedState=r}return n===null&&(o.lanes=0),[e.memoizedState,o.dispatch]}function nx(e){var t=At(),a=t.queue;if(a===null)throw Error(F(311));a.lastRenderedReducer=e;var o=a.dispatch,n=a.pending,r=t.memoizedState;if(n!==null){a.pending=null;var l=n=n.next;do r=e(r,l.action),l=l.next;while(l!==n);oo(r,t.memoizedState)||(Bt=!0),t.memoizedState=r,t.baseQueue===null&&(t.baseState=r),a.lastRenderedState=r}return[r,o]}function BI(e,t,a){var o=Me,n=At(),r=_e;if(r){if(a===void 0)throw Error(F(407));a=a()}else a=t();var l=!oo((nt||n).memoizedState,a);if(l&&(n.memoizedState=a,Bt=!0),n=n.queue,ny(HI.bind(null,o,n,e),[e]),e=n.getSnapshot!==t||l||Pt!==null&&(Pt.memoizedState.tag&1)!==0,mi(e?9:8,{destroy:void 0},FI.bind(null,o,n,a,t),null),e){if(o.flags|=2048,ut===null)throw Error(F(349));r||(Vn&127)!==0||_I(o,t,a)}return a}function _I(e,t,a){e.flags|=16384,e={getSnapshot:t,value:a},t=Me.updateQueue,t===null?(t=pp(),Me.updateQueue=t,t.stores=[e]):(a=t.stores,a===null?t.stores=[e]:a.push(e))}function FI(e,t,a,o){t.value=a,t.getSnapshot=o,zI(t)&&UI(e)}function HI(e,t,a){return a(function(){zI(t)&&UI(e)})}function zI(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!oo(e,a)}catch{return!0}}function UI(e){var t=Yl(e,2);t!==null&&Ba(t,e,2)}function jx(e){var t=Ra();if(typeof e==\\\"function\\\"){var a=e;if(e=a(),Ul){Cr(!0);try{a()}finally{Cr(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Gn,lastRenderedState:e},t}function qI(e,t,a,o){return e.baseState=a,oy(e,nt,typeof o==\\\"function\\\"?o:Gn)}function U2(e,t,a,o,n){if(hp(e))throw Error(F(485));if(e=t.action,e!==null){var r={payload:n,action:e,next:null,isTransition:!0,status:\\\"pending\\\",value:null,reason:null,listeners:[],then:function(l){r.listeners.push(l)}};ve.T!==null?a(!0):r.isTransition=!1,o(r),a=t.pending,a===null?(r.next=t.pending=r,VI(t,r)):(r.next=a.next,t.pending=a.next=r)}}function VI(e,t){var a=t.action,o=t.payload,n=e.state;if(t.isTransition){var r=ve.T,l={};l.types=r!==null?r.types:null,ve.T=l;try{var s=a(n,o),i=ve.S;i!==null&&i(l,s),ML(e,t,s)}catch(u){Yx(e,t,u)}finally{r!==null&&l.types!==null&&(r.types=l.types),ve.T=r}}else try{r=a(n,o),ML(e,t,r)}catch(u){Yx(e,t,u)}}function ML(e,t,a){a!==null&&typeof a==\\\"object\\\"&&typeof a.then==\\\"function\\\"?a.then(function(o){AL(e,t,o)},function(o){return Yx(e,t,o)}):AL(e,t,a)}function AL(e,t,a){t.status=\\\"fulfilled\\\",t.value=a,GI(t),e.state=a,t=e.pending,t!==null&&(a=t.next,a===t?e.pending=null:(a=a.next,t.next=a,VI(e,a)))}function Yx(e,t,a){var o=e.pending;if(e.pending=null,o!==null){o=o.next;do t.status=\\\"rejected\\\",t.reason=a,GI(t),t=t.next;while(t!==o)}e.action=null}function GI(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function XI(e,t){return t}function OL(e,t){if(_e){var a=ut.formState;if(a!==null){e:{var o=Me;if(_e){if(gt){t:{for(var n=gt,r=Co;n.nodeType!==8;){if(!r){n=null;break t}if(n=vo(n.nextSibling),n===null){n=null;break t}}r=n.data,n=r===\\\"F!\\\"||r===\\\"F\\\"?n:null}if(n){gt=vo(n.nextSibling),o=n.data===\\\"F!\\\";break e}}Fr(o)}o=!1}o&&(t=a[0])}}return a=Ra(),a.memoizedState=a.baseState=t,o={pending:null,lanes:0,dispatch:null,lastRenderedReducer:XI,lastRenderedState:t},a.queue=o,a=s0.bind(null,Me,o),o.dispatch=a,o=jx(!1),r=iy.bind(null,Me,!1,o.queue),o=Ra(),n={state:t,dispatch:null,action:e,pending:null},o.queue=n,a=U2.bind(null,Me,n,r,a),n.dispatch=a,o.memoizedState=e,[t,a,!1]}function DL(e){var t=At();return jI(t,nt,e)}function jI(e,t,a){if(t=oy(e,t,XI)[0],e=xd(Gn)[0],typeof t==\\\"object\\\"&&t!==null&&typeof t.then==\\\"function\\\")try{var o=hc(t)}catch(l){throw l===wi?dp:l}else o=t;t=At();var n=t.queue,r=n.dispatch;return a!==t.memoizedState&&(Me.flags|=2048,mi(9,{destroy:void 0},q2.bind(null,n,a),null)),[o,r,e]}function q2(e,t){e.action=t}function PL(e){var t=At(),a=nt;if(a!==null)return jI(t,a,e);At(),t=t.memoizedState,a=At();var o=a.queue.dispatch;return a.memoizedState=e,[t,o,!1]}function mi(e,t,a,o){return e={tag:e,create:a,deps:o,inst:t,next:null},t=Me.updateQueue,t===null&&(t=pp(),Me.updateQueue=t),a=t.lastEffect,a===null?t.lastEffect=e.next=e:(o=a.next,a.next=e,e.next=o,t.lastEffect=e),e}function YI(){return At().memoizedState}function bd(e,t,a,o){var n=Ra();Me.flags|=e,n.memoizedState=mi(1|t,{destroy:void 0},a,o===void 0?null:o)}function gp(e,t,a,o){var n=At();o=o===void 0?null:o;var r=n.memoizedState.inst;nt!==null&&o!==null&&Qb(o,nt.memoizedState.deps)?n.memoizedState=mi(t,r,a,o):(Me.flags|=e,n.memoizedState=mi(1|t,r,a,o))}function NL(e,t){bd(8390656,8,e,t)}function ny(e,t){gp(2048,8,e,t)}function V2(e){Me.flags|=4;var t=Me.updateQueue;if(t===null)t=pp(),Me.updateQueue=t,t.events=[e];else{var a=t.events;a===null?t.events=[e]:a.push(e)}}function KI(e){var t=At().memoizedState;return V2({ref:t,nextImpl:e}),function(){if((Ze&2)!==0)throw Error(F(440));return t.impl.apply(void 0,arguments)}}function ZI(e,t){return gp(4,2,e,t)}function $I(e,t){return gp(4,4,e,t)}function QI(e,t){if(typeof t==\\\"function\\\"){e=e();var a=t(e);return function(){typeof a==\\\"function\\\"?a():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function WI(e,t,a){a=a!=null?a.concat([e]):null,gp(4,4,QI.bind(null,t,e),a)}function ry(){}function JI(e,t){var a=At();t=t===void 0?null:t;var o=a.memoizedState;return t!==null&&Qb(t,o[1])?o[0]:(a.memoizedState=[e,t],e)}function e0(e,t){var a=At();t=t===void 0?null:t;var o=a.memoizedState;if(t!==null&&Qb(t,o[1]))return o[0];if(o=e(),Ul){Cr(!0);try{e()}finally{Cr(!1)}}return a.memoizedState=[o,t],o}function ly(e,t,a){return a===void 0||(Vn&1073741824)!==0&&(Ge&261930)===0?e.memoizedState=t:(e.memoizedState=a,e=j0(),Me.lanes|=e,Ur|=e,a)}function t0(e,t,a,o){return oo(a,t)?a:Hr.current!==null?(e=ly(e,a,o),oo(e,t)||(Bt=!0),e):(Vn&106)===0||(Vn&1073741824)!==0&&(Ge&261930)===0?(Bt=!0,e.memoizedState=a):(e=j0(),Me.lanes|=e,Ur|=e,t)}function a0(e,t,a,o,n){var r=$e.p;$e.p=r!==0&&8>r?r:8;var l=ve.T,s={};s.types=l!==null?l.types:null,ve.T=s,iy(e,!1,t,a);try{var i=n(),u=ve.S;if(u!==null&&u(s,i),i!==null&&typeof i==\\\"object\\\"&&typeof i.then==\\\"function\\\"){var c=F2(i,o);Uu(e,t,c,ao(e))}else Uu(e,t,o,ao(e))}catch(d){Uu(e,t,{then:function(){},status:\\\"rejected\\\",reason:d},ao())}finally{$e.p=r,l!==null&&s.types!==null&&(l.types=s.types),ve.T=l}}function G2(){}function Kx(e,t,a,o){if(e.tag!==5)throw Error(F(476));var n=o0(e).queue;a0(e,n,t,Al,a===null?G2:function(){return n0(e),a(o)})}function o0(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:Al,baseState:Al,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Gn,lastRenderedState:Al},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Gn,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function n0(e){var t=o0(e);t.next===null&&(t=e.alternate.memoizedState),Uu(e,t.next.queue,{},ao())}function sy(){return Jt(Ci)}function r0(){return At().memoizedState}function l0(){return At().memoizedState}function X2(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=ao();e=kr(a);var o=Mr(t,e,a);o!==null&&(Ba(o,t,a),Fu(o,t,a)),t={cache:Xb()},e.payload=t;return}t=t.return}}function j2(e,t,a){var o=ao();a={lane:o,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},hp(e)?i0(t,a):(a=qb(e,t,a,o),a!==null&&(Ba(a,e,o),u0(a,t,o)))}function s0(e,t,a){var o=ao();Uu(e,t,a,o)}function Uu(e,t,a,o){var n={lane:o,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(hp(e))i0(t,n);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=t.lastRenderedReducer,r!==null))try{var l=t.lastRenderedState,s=r(l,a);if(n.hasEagerState=!0,n.eagerState=s,oo(s,l))return cp(e,t,n,0),ut===null&&up(),!1}catch{}if(a=qb(e,t,n,o),a!==null)return Ba(a,e,o),u0(a,t,o),!0}return!1}function iy(e,t,a,o){if(o={lane:2,revertLane:yy(),gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},hp(e)){if(t)throw Error(F(479))}else t=qb(e,a,o,2),t!==null&&Ba(t,e,2)}function hp(e){var t=e.alternate;return e===Me||t!==null&&t===Me}function i0(e,t){li=qd=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function u0(e,t,a){if((a&4194048)!==0){var o=t.lanes;o&=e.pendingLanes,a|=o,t.lanes=a,YR(e,a)}}var Gd={readContext:Jt,use:mp,useCallback:Et,useContext:Et,useEffect:Et,useImperativeHandle:Et,useLayoutEffect:Et,useInsertionEffect:Et,useMemo:Et,useReducer:Et,useRef:Et,useState:Et,useDebugValue:Et,useDeferredValue:Et,useTransition:Et,useSyncExternalStore:Et,useId:Et,useHostTransitionStatus:Et,useFormState:Et,useActionState:Et,useOptimistic:Et,useMemoCache:Et,useCacheRefresh:Et,useEffectEvent:Et},c0={readContext:Jt,use:mp,useCallback:function(e,t){return Ra().memoizedState=[e,t===void 0?null:t],e},useContext:Jt,useEffect:NL,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,bd(4194308,4,QI.bind(null,t,e),a)},useLayoutEffect:function(e,t){return bd(4194308,4,e,t)},useInsertionEffect:function(e,t){bd(4,2,e,t)},useMemo:function(e,t){var a=Ra();t=t===void 0?null:t;var o=e();if(Ul){Cr(!0);try{e()}finally{Cr(!1)}}return a.memoizedState=[o,t],o},useReducer:function(e,t,a){var o=Ra();if(a!==void 0){var n=a(t);if(Ul){Cr(!0);try{a(t)}finally{Cr(!1)}}}else n=t;return o.memoizedState=o.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},o.queue=e,e=e.dispatch=j2.bind(null,Me,e),[o.memoizedState,e]},useRef:function(e){var t=Ra();return e={current:e},t.memoizedState=e},useState:function(e){e=jx(e);var t=e.queue,a=s0.bind(null,Me,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:ry,useDeferredValue:function(e,t){var a=Ra();return ly(a,e,t)},useTransition:function(){var e=jx(!1);return e=a0.bind(null,Me,e.queue,!0,!1),Ra().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var o=Me,n=Ra();if(_e){if(a===void 0)throw Error(F(407));a=a()}else{if(a=t(),ut===null)throw Error(F(349));(Ge&127)!==0||_I(o,t,a)}n.memoizedState=a;var r={value:a,getSnapshot:t};return n.queue=r,NL(HI.bind(null,o,r,e),[e]),o.flags|=2048,mi(9,{destroy:void 0},FI.bind(null,o,r,a,t),null),a},useId:function(){var e=Ra(),t=ut.identifierPrefix;if(_e){var a=sn,o=ln;a=(o&~(1<<32-to(o)-1)).toString(32)+a,t=\\\"_\\\"+t+\\\"R_\\\"+a,a=Vd++,0<a&&(t+=\\\"H\\\"+a.toString(32)),t+=\\\"_\\\"}else a=H2++,t=\\\"_\\\"+t+\\\"r_\\\"+a.toString(32)+\\\"_\\\";return e.memoizedState=t},useHostTransitionStatus:sy,useFormState:OL,useActionState:OL,useOptimistic:function(e){var t=Ra();t.memoizedState=t.baseState=e;var a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=a,t=iy.bind(null,Me,!0,a),a.dispatch=t,[e,t]},useMemoCache:ay,useCacheRefresh:function(){return Ra().memoizedState=X2.bind(null,Me)},useEffectEvent:function(e){var t=Ra(),a={impl:e};return t.memoizedState=a,function(){if((Ze&2)!==0)throw Error(F(440));return a.impl.apply(void 0,arguments)}}},f0={readContext:Jt,use:mp,useCallback:JI,useContext:Jt,useEffect:ny,useImperativeHandle:WI,useInsertionEffect:ZI,useLayoutEffect:$I,useMemo:e0,useReducer:xd,useRef:YI,useState:function(){return xd(Gn)},useDebugValue:ry,useDeferredValue:function(e,t){var a=At();return t0(a,nt.memoizedState,e,t)},useTransition:function(){var e=xd(Gn)[0],t=At().memoizedState;return[typeof e==\\\"boolean\\\"?e:hc(e),t]},useSyncExternalStore:BI,useId:r0,useHostTransitionStatus:sy,useFormState:DL,useActionState:DL,useOptimistic:function(e,t){var a=At();return qI(a,nt,e,t)},useMemoCache:ay,useCacheRefresh:l0,useEffectEvent:KI},Y2={readContext:Jt,use:mp,useCallback:JI,useContext:Jt,useEffect:ny,useImperativeHandle:WI,useInsertionEffect:ZI,useLayoutEffect:$I,useMemo:e0,useReducer:nx,useRef:YI,useState:function(){return nx(Gn)},useDebugValue:ry,useDeferredValue:function(e,t){var a=At();return nt===null?ly(a,e,t):t0(a,nt.memoizedState,e,t)},useTransition:function(){var e=nx(Gn)[0],t=At().memoizedState;return[typeof e==\\\"boolean\\\"?e:hc(e),t]},useSyncExternalStore:BI,useId:r0,useHostTransitionStatus:sy,useFormState:PL,useActionState:PL,useOptimistic:function(e,t){var a=At();return nt!==null?qI(a,nt,e,t):(a.baseState=e,[e,a.queue.dispatch])},useMemoCache:ay,useCacheRefresh:l0,useEffectEvent:KI};function rx(e,t,a,o){t=e.memoizedState,a=a(o,t),a=a==null?t:ct({},t,a),e.memoizedState=a,e.lanes===0&&(e.updateQueue.baseState=a)}var Zx={enqueueSetState:function(e,t,a){e=e._reactInternals;var o=ao(),n=kr(o);n.payload=t,a!=null&&(n.callback=a),t=Mr(e,n,o),t!==null&&(Ba(t,e,o),Fu(t,e,o))},enqueueReplaceState:function(e,t,a){e=e._reactInternals;var o=ao(),n=kr(o);n.tag=1,n.payload=t,a!=null&&(n.callback=a),t=Mr(e,n,o),t!==null&&(Ba(t,e,o),Fu(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var a=ao(),o=kr(a);o.tag=2,t!=null&&(o.callback=t),t=Mr(e,o,a),t!==null&&(Ba(t,e,a),Fu(t,e,a))}};function BL(e,t,a,o,n,r,l){return e=e.stateNode,typeof e.shouldComponentUpdate==\\\"function\\\"?e.shouldComponentUpdate(o,r,l):t.prototype&&t.prototype.isPureReactComponent?!$u(a,o)||!$u(n,r):!0}function _L(e,t,a,o){e=t.state,typeof t.componentWillReceiveProps==\\\"function\\\"&&t.componentWillReceiveProps(a,o),typeof t.UNSAFE_componentWillReceiveProps==\\\"function\\\"&&t.UNSAFE_componentWillReceiveProps(a,o),t.state!==e&&Zx.enqueueReplaceState(t,t.state,null)}function ql(e,t){var a=t;if(\\\"ref\\\"in t){a={};for(var o in t)o!==\\\"ref\\\"&&(a[o]=t[o])}if(e=e.defaultProps){a===t&&(a=ct({},a));for(var n in e)a[n]===void 0&&(a[n]=e[n])}return a}function d0(e){Pd(e)}function p0(e){console.error(e)}function m0(e){Pd(e)}function Xd(e,t){try{var a=e.onUncaughtError;a(t.value,{componentStack:t.stack})}catch(o){setTimeout(function(){throw o})}}function FL(e,t,a){try{var o=e.onCaughtError;o(a.value,{componentStack:a.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(n){setTimeout(function(){throw n})}}function $x(e,t,a){return a=kr(a),a.tag=3,a.payload={element:null},a.callback=function(){Xd(e,t)},a}function g0(e){return e=kr(e),e.tag=3,e}function h0(e,t,a,o){var n=a.type.getDerivedStateFromError;if(typeof n==\\\"function\\\"){var r=o.value;e.payload=function(){return n(r)},e.callback=function(){FL(t,a,o)}}var l=a.stateNode;l!==null&&typeof l.componentDidCatch==\\\"function\\\"&&(e.callback=function(){FL(t,a,o),typeof n!=\\\"function\\\"&&(Dr===null?Dr=new Set([this]):Dr.add(this));var s=o.stack;this.componentDidCatch(o.value,{componentStack:s!==null?s:\\\"\\\"})})}function K2(e,t,a,o,n){if(a.flags|=32768,o!==null&&typeof o==\\\"object\\\"&&typeof o.then==\\\"function\\\"){if(t=a.alternate,t!==null&&_l(t,a,n,!0),a=oa.current,a!==null){switch(a.tag){case 31:case 13:case 19:return ua===null?Jd():a.alternate===null&&kt===0&&(kt=3),a.flags&=-257,a.flags|=65536,a.lanes=n,o===Hd?a.flags|=16384:(t=a.updateQueue,t===null?a.updateQueue=new Set([o]):t.add(o),dx(e,o,n)),!1;case 22:return a.flags|=65536,o===Hd?a.flags|=16384:(t=a.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([o])},a.updateQueue=t):(a=t.retryQueue,a===null?t.retryQueue=new Set([o]):a.add(o)),dx(e,o,n)),!1}throw Error(F(435,a.tag))}return dx(e,o,n),Jd(),!1}if(_e)return t=oa.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=n,o!==Fx&&(e=Error(F(422),{cause:o}),Wu(So(e,a)))):(o!==Fx&&(t=Error(F(423),{cause:o}),Wu(So(t,a))),e=e.current.alternate,e.flags|=65536,n&=-n,e.lanes|=n,o=So(o,a),n=$x(e.stateNode,o,n),ox(e,n),kt!==4&&(kt=2)),!1;var r=Error(F(520),{cause:o});if(r=So(r,a),Xu===null?Xu=[r]:Xu.push(r),kt!==4&&(kt=2),t===null)return!0;o=So(o,a),a=t;do{switch(a.tag){case 3:return a.flags|=65536,e=n&-n,a.lanes|=e,e=$x(a.stateNode,o,e),ox(a,e),!1;case 1:if(t=a.type,r=a.stateNode,(a.flags&128)===0&&(typeof t.getDerivedStateFromError==\\\"function\\\"||r!==null&&typeof r.componentDidCatch==\\\"function\\\"&&(Dr===null||!Dr.has(r))))return a.flags|=65536,n&=-n,a.lanes|=n,n=g0(n),h0(n,e,a,o),ox(a,n),!1;break;case 22:if(a.memoizedState!==null)return a.flags|=65536,!1}a=a.return}while(a!==null);return!1}var uy=Error(F(461)),Bt=!1;function Ft(e,t,a,o){t.child=e===null?MI(t,null,a,o):zl(t,e.child,a,o)}function HL(e,t,a,o,n){a=a.render;var r=t.ref;if(\\\"ref\\\"in o){var l={};for(var s in o)s!==\\\"ref\\\"&&(l[s]=o[s])}else l=o;return Fl(t),o=Wb(e,t,a,l,r,n),s=Jb(),e!==null&&!Bt?(ey(e,t,n),Xn(e,t,n)):(_e&&s&&fp(t),t.flags|=1,Ft(e,t,o,n),t.child)}function zL(e,t,a,o,n){if(e===null){var r=a.type;return typeof r==\\\"function\\\"&&!Vb(r)&&r.defaultProps===void 0&&a.compare===null?(t.tag=15,t.type=r,x0(e,t,r,o,n)):(e=md(a.type,null,o,t,t.mode,n),e.ref=t.ref,e.return=t,t.child=e)}if(r=e.child,!fy(e,n)){var l=r.memoizedProps;if(a=a.compare,a=a!==null?a:$u,a(l,o)&&e.ref===t.ref)return Xn(e,t,n)}return t.flags|=1,e=Hn(r,o),e.ref=t.ref,e.return=t,t.child=e}function x0(e,t,a,o,n){if(e!==null){var r=e.memoizedProps;if($u(r,o)&&e.ref===t.ref)if(Bt=!1,t.pendingProps=o=r,fy(e,n))(e.flags&131072)!==0&&(Bt=!0);else return t.lanes=e.lanes,Xn(e,t,n)}return Qx(e,t,a,o,n)}function b0(e,t,a,o){var n=o.children,r=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),o.mode===\\\"hidden\\\"){if((t.flags&128)!==0){if(r=r!==null?r.baseLanes|a:a,e!==null){for(o=t.child=e.child,n=0;o!==null;)n=n|o.lanes|o.childLanes,o=o.sibling;o=n&~r}else o=0,t.child=null;return UL(e,t,r,a,o)}if((a&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&hd(t,r!==null?r.cachePool:null),r!==null?kL(t,r):Gx(),DI(t);else return o=t.lanes=536870912,UL(e,t,r!==null?r.baseLanes|a:a,a,o)}else r!==null?(hd(t,r.cachePool),kL(t,r),Or(),t.memoizedState=null):(e!==null&&hd(t,null),Gx(),Or());return Ft(e,t,n,a),t.child}function qu(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function UL(e,t,a,o,n){var r=jb();return r=r===null?null:{parent:Nt._currentValue,pool:r},t.memoizedState={baseLanes:a,cachePool:r},e!==null&&hd(t,null),Gx(),DI(t),e!==null&&_l(e,t,o,!0),t.childLanes=n,null}function yd(e,t){return t=xp({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function qL(e,t,a){return zl(t,e.child,null,a),e=yd(t,t.pendingProps),e.flags|=2,$a(t),t.memoizedState=null,e}function Z2(e,t,a){var o=t.pendingProps,n=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(_e){if(o.mode===\\\"hidden\\\")return e=yd(t,o),t.lanes=536870912,e.memoizedState={baseLanes:0,cachePool:null},qu(null,e);if(Xx(t),(e=gt)?(e=bw(e,Co),e=e!==null&&e.data===\\\"&\\\"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:_r!==null?{id:ln,overflow:sn}:null,retryLane:536870912,hydrationErrors:null},a=LI(e),a.return=t,t.child=a,Yt=t,gt=null)):e=null,e===null)throw Fr(t);return t.lanes=536870912,null}return yd(t,o)}var r=e.memoizedState;if(r!==null){var l=r.dehydrated;if(Xx(t),n)if(t.flags&256)t.flags&=-257,t=qL(e,t,a);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(F(558));else if(Bt||_l(e,t,a,!1),n=(a&e.childLanes)!==0,Bt||n){if(Hr.current===null){if(o=ut,o!==null&&(l=KR(o,a),l!==0&&l!==r.retryLane))throw r.retryLane=l,Yl(e,l),Ba(o,e,l),uy;Jd()}t=qL(e,t,a)}else e=r.treeContext,gt=vo(l.nextSibling),Yt=t,_e=!0,Er=null,Co=!1,e!==null&&II(t,e),t=yd(t,o),t.flags|=134221824;return t}return e=Hn(e.child,{mode:o.mode,children:o.children}),e.ref=t.ref,t.child=e,e.return=t,e}function zs(e,t){var a=t.ref;if(a===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof a!=\\\"function\\\"&&typeof a!=\\\"object\\\")throw Error(F(284));(e===null||e.ref!==a)&&(t.flags|=4194816)}}function Qx(e,t,a,o,n){return Fl(t),a=Wb(e,t,a,o,void 0,n),o=Jb(),e!==null&&!Bt?(ey(e,t,n),Xn(e,t,n)):(_e&&o&&fp(t),t.flags|=1,Ft(e,t,a,n),t.child)}function VL(e,t,a,o,n,r){return Fl(t),t.updateQueue=null,a=NI(t,o,a,n),PI(e),o=Jb(),e!==null&&!Bt?(ey(e,t,r),Xn(e,t,r)):(_e&&o&&fp(t),t.flags|=1,Ft(e,t,a,r),t.child)}function GL(e,t,a,o,n){if(Fl(t),t.stateNode===null){var r=Qs,l=a.contextType;typeof l==\\\"object\\\"&&l!==null&&(r=Jt(l)),r=new a(o,r),t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,r.updater=Zx,t.stateNode=r,r._reactInternals=t,r=t.stateNode,r.props=o,r.state=t.memoizedState,r.refs={},Kb(t),l=a.contextType,r.context=typeof l==\\\"object\\\"&&l!==null?Jt(l):Qs,r.state=t.memoizedState,l=a.getDerivedStateFromProps,typeof l==\\\"function\\\"&&(rx(t,a,l,o),r.state=t.memoizedState),typeof a.getDerivedStateFromProps==\\\"function\\\"||typeof r.getSnapshotBeforeUpdate==\\\"function\\\"||typeof r.UNSAFE_componentWillMount!=\\\"function\\\"&&typeof r.componentWillMount!=\\\"function\\\"||(l=r.state,typeof r.componentWillMount==\\\"function\\\"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount==\\\"function\\\"&&r.UNSAFE_componentWillMount(),l!==r.state&&Zx.enqueueReplaceState(r,r.state,null),zu(t,o,r,n),Hu(),r.state=t.memoizedState),typeof r.componentDidMount==\\\"function\\\"&&(t.flags|=4194308),o=!0}else if(e===null){r=t.stateNode;var s=t.memoizedProps,i=ql(a,s);r.props=i;var u=r.context,c=a.contextType;l=Qs,typeof c==\\\"object\\\"&&c!==null&&(l=Jt(c));var d=a.getDerivedStateFromProps;c=typeof d==\\\"function\\\"||typeof r.getSnapshotBeforeUpdate==\\\"function\\\",s=t.pendingProps!==s,c||typeof r.UNSAFE_componentWillReceiveProps!=\\\"function\\\"&&typeof r.componentWillReceiveProps!=\\\"function\\\"||(s||u!==l)&&_L(t,r,o,l),yr=!1;var f=t.memoizedState;r.state=f,zu(t,o,r,n),Hu(),u=t.memoizedState,s||f!==u||yr?(typeof d==\\\"function\\\"&&(rx(t,a,d,o),u=t.memoizedState),(i=yr||BL(t,a,i,o,f,u,l))?(c||typeof r.UNSAFE_componentWillMount!=\\\"function\\\"&&typeof r.componentWillMount!=\\\"function\\\"||(typeof r.componentWillMount==\\\"function\\\"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount==\\\"function\\\"&&r.UNSAFE_componentWillMount()),typeof r.componentDidMount==\\\"function\\\"&&(t.flags|=4194308)):(typeof r.componentDidMount==\\\"function\\\"&&(t.flags|=4194308),t.memoizedProps=o,t.memoizedState=u),r.props=o,r.state=u,r.context=l,o=i):(typeof r.componentDidMount==\\\"function\\\"&&(t.flags|=4194308),o=!1)}else{r=t.stateNode,qx(e,t),l=t.memoizedProps,c=ql(a,l),r.props=c,d=t.pendingProps,f=r.context,u=a.contextType,i=Qs,typeof u==\\\"object\\\"&&u!==null&&(i=Jt(u)),s=a.getDerivedStateFromProps,(u=typeof s==\\\"function\\\"||typeof r.getSnapshotBeforeUpdate==\\\"function\\\")||typeof r.UNSAFE_componentWillReceiveProps!=\\\"function\\\"&&typeof r.componentWillReceiveProps!=\\\"function\\\"||(l!==d||f!==i)&&_L(t,r,o,i),yr=!1,f=t.memoizedState,r.state=f,zu(t,o,r,n),Hu();var p=t.memoizedState;l!==d||f!==p||yr||e!==null&&e.dependencies!==null&&Fd(e.dependencies)?(typeof s==\\\"function\\\"&&(rx(t,a,s,o),p=t.memoizedState),(c=yr||BL(t,a,c,o,f,p,i)||e!==null&&e.dependencies!==null&&Fd(e.dependencies))?(u||typeof r.UNSAFE_componentWillUpdate!=\\\"function\\\"&&typeof r.componentWillUpdate!=\\\"function\\\"||(typeof r.componentWillUpdate==\\\"function\\\"&&r.componentWillUpdate(o,p,i),typeof r.UNSAFE_componentWillUpdate==\\\"function\\\"&&r.UNSAFE_componentWillUpdate(o,p,i)),typeof r.componentDidUpdate==\\\"function\\\"&&(t.flags|=4),typeof r.getSnapshotBeforeUpdate==\\\"function\\\"&&(t.flags|=1024)):(typeof r.componentDidUpdate!=\\\"function\\\"||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof r.getSnapshotBeforeUpdate!=\\\"function\\\"||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=o,t.memoizedState=p),r.props=o,r.state=p,r.context=i,o=c):(typeof r.componentDidUpdate!=\\\"function\\\"||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof r.getSnapshotBeforeUpdate!=\\\"function\\\"||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),o=!1)}return r=o,zs(e,t),o=(t.flags&128)!==0,r||o?(r=t.stateNode,a=o&&typeof a.getDerivedStateFromError!=\\\"function\\\"?null:r.render(),t.flags|=1,e!==null&&o?(t.child=zl(t,e.child,null,n),t.child=zl(t,null,a,n)):Ft(e,t,a,n),t.memoizedState=r.state,e=t.child):e=Xn(e,t,n),e}function XL(e,t,a,o){return Bl(),t.flags|=256,Ft(e,t,a,o),t.child}var Wx={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Jx(e){return{baseLanes:e,cachePool:TI()}}function eb(e,t,a){return e=e!==null?e.childLanes&~a:0,t&&(e|=Wa),e}function y0(e,t,a){var o=t.pendingProps,n=!1,r=(t.flags&128)!==0,l;if((l=r)||(l=e!==null&&e.memoizedState===null?!1:(ta.current&2)!==0),l&&(n=!0,t.flags&=-129),l=(t.flags&32)!==0,t.flags&=-33,e===null){if(_e){if(n?Ar(t):Or(),(e=gt)?(e=bw(e,Co),e=e!==null&&e.data!==\\\"&\\\"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:_r!==null?{id:ln,overflow:sn}:null,retryLane:536870912,hydrationErrors:null},a=LI(e),a.return=t,t.child=a,Yt=t,gt=null)):e=null,e===null)throw Fr(t);return Ly(e)?t.lanes=32:t.lanes=536870912,null}return r=o.children,o=o.fallback,n?(Or(),n=t.mode,r=xp({mode:\\\"hidden\\\",children:r},n),o=Ol(o,n,a,null),r.return=t,o.return=t,r.sibling=o,t.child=r,o=t.child,o.memoizedState=Jx(a),o.childLanes=eb(e,l,a),t.memoizedState=Wx,qu(null,o)):(Ar(t),cy(t,r))}var s=e.memoizedState;if(s!==null){var i=s.dehydrated;if(i!==null)return $2(e,t,r,l,o,i,s,a)}return n?(Or(),n=o.fallback,r=t.mode,s=e.child,i=s.sibling,o=Hn(s,{mode:\\\"hidden\\\",children:o.children}),o.subtreeFlags=s.subtreeFlags&1206910976,i!==null?n=Hn(i,n):(n=Ol(n,r,a,null),n.flags|=2),n.return=t,o.return=t,o.sibling=n,t.child=o,qu(null,o),o=t.child,n=e.child.memoizedState,n===null?n=Jx(a):(r=n.cachePool,r!==null?(s=Nt._currentValue,r=r.parent!==s?{parent:s,pool:s}:r):r=TI(),n={baseLanes:n.baseLanes|a,cachePool:r}),o.memoizedState=n,o.childLanes=eb(e,l,a),t.memoizedState=Wx,qu(e.child,o)):(Ar(t),a=e.child,e=a.sibling,a=Hn(a,{mode:\\\"visible\\\",children:o.children}),a.return=t,a.sibling=null,e!==null&&(l=t.deletions,l===null?(t.deletions=[e],t.flags|=16):l.push(e)),t.child=a,t.memoizedState=null,a)}function cy(e,t){return t=xp({mode:\\\"visible\\\",children:t},e.mode),t.return=e,e.child=t}function xp(e,t){return e=Na(22,e,null,t),e.lanes=0,e}function ed(e,t,a){return zl(t,e.child,null,a),e=cy(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function $2(e,t,a,o,n,r,l,s){if(a)return t.flags&256?(Ar(t),t.flags&=-257,ed(e,t,s)):t.memoizedState!==null?(Or(),t.child=e.child,t.flags|=128,null):(Or(),r=n.fallback,l=t.mode,n=xp({mode:\\\"visible\\\",children:n.children},l),r=Ol(r,l,s,null),r.flags|=2,n.return=t,r.return=t,n.sibling=r,t.child=n,zl(t,e.child,null,s),n=t.child,n.memoizedState=Jx(s),n.childLanes=eb(e,o,s),t.memoizedState=Wx,qu(null,n));if(Ar(t),Ly(r)){if(o=r.nextSibling&&r.nextSibling.dataset,o)var i=o.dgst;return o=i,o!==\\\"\\\"&&(n=Error(F(419)),n.stack=\\\"\\\",n.digest=o,Wu({value:n,source:null,stack:null})),ed(e,t,s)}if(Bt||_l(e,t,s,!1),o=(s&e.childLanes)!==0,Bt||o){if(Hr.current!==null)return ed(e,t,s);if(o=ut,o!==null&&(n=KR(o,s),n!==0&&n!==l.retryLane))throw l.retryLane=n,Yl(e,n),Ba(o,e,n),uy;return Ib(r)||Jd(),ed(e,t,s)}return Ib(r)?(t.flags|=192,t.child=e.child,null):(e=l.treeContext,gt=vo(r.nextSibling),Yt=t,_e=!0,Er=null,Co=!1,e!==null&&II(t,e),t=cy(t,n.children),t.flags|=134221824,t)}function jL(e,t,a){e.lanes|=t;var o=e.alternate;o!==null&&(o.lanes|=t),gd(e.return,t,a)}function YL(e){for(var t=null;e!==null;){var a=e.alternate;a!==null&&Ud(a)===null&&(t=e),e=e.sibling}return t}function td(e,t,a,o,n,r){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:o,tail:a,tailMode:n,treeForkCount:r}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=o,l.tail=a,l.tailMode=n,l.treeForkCount=r)}function lx(e){var t=e.child;for(e.child=null;t!==null;){var a=t.sibling;t.sibling=e.child,e.child=t,t=a}}function tb(e,t,a){var o=t.pendingProps,n=o.revealOrder,r=o.tail;o=o.children;var l=ta.current;if(t.flags&128)return ec(t,l),null;var s=(l&2)!==0;if(s?(l=l&1|2,t.flags|=128):l&=1,ec(t,l),n===\\\"backwards\\\"&&e!==null?(lx(e),Ft(e,t,o,a),lx(e)):Ft(e,t,o,a),o=_e?Qu:0,!s&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&jL(e,a,t);else if(e.tag===19)jL(e,a,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(n){case\\\"backwards\\\":a=YL(t.child),a===null?(n=t.child,t.child=null):(n=a.sibling,a.sibling=null,lx(t)),td(t,!0,n,null,r,o);break;case\\\"unstable_legacy-backwards\\\":for(a=null,n=t.child,t.child=null;n!==null;){if(e=n.alternate,e!==null&&Ud(e)===null){t.child=n;break}e=n.sibling,n.sibling=a,a=n,n=e}td(t,!0,a,null,r,o);break;case\\\"together\\\":td(t,!1,null,null,void 0,o);break;case\\\"independent\\\":t.memoizedState=null;break;default:a=YL(t.child),a===null?(n=t.child,t.child=null):(n=a.sibling,a.sibling=null),td(t,!1,n,a,r,o)}return t.child}function KL(e,t,a){var o=t.pendingProps;return Lr(t,t.type,o.value),Ft(e,t,o.children,a),t.child}function Xn(e,t,a){if(e!==null&&(t.dependencies=e.dependencies),Ur|=t.lanes,(a&t.childLanes)===0)if(e!==null){if(_l(e,t,a,!1),(a&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(F(153));if(t.child!==null){for(e=t.child,a=Hn(e,e.pendingProps),t.child=a,a.return=t;e.sibling!==null;)e=e.sibling,a=a.sibling=Hn(e,e.pendingProps),a.return=t;a.sibling=null}return t.child}function fy(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&Fd(e)))}function Q2(e,t,a){switch(t.tag){case 3:Md(t,t.stateNode.containerInfo),Lr(t,Nt,e.memoizedState.cache),Bl();break;case 27:case 5:Ex(t);break;case 4:Md(t,t.stateNode.containerInfo);break;case 10:Lr(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,Xx(t),null;break;case 13:var o=t.memoizedState;if(o!==null){if(o.dehydrated!==null)return Ar(t),t.flags|=128,null;o=_l(e,t,a,!1);var n=t.child.childLanes;return o||(a&n)!==0?y0(e,t,a):(Ar(t),e=Xn(e,t,a),e!==null?e.sibling:null)}Ar(t);break;case 19:if(t.flags&128)return tb(e,t,a);if(n=(e.flags&128)!==0,o=(a&t.childLanes)!==0,o||(_l(e,t,a,!1),o=(a&t.childLanes)!==0),n){if(o)return tb(e,t,a);t.flags|=128}if(n=t.memoizedState,n!==null&&(n.rendering=null,n.tail=null,n.lastEffect=null),ec(t,ta.current),o)break;return null;case 22:return t.lanes=0,b0(e,t,a,t.pendingProps);case 24:Lr(t,Nt,e.memoizedState.cache)}return Xn(e,t,a)}function S0(e,t,a){if(e!==null)if(e.memoizedProps!==t.pendingProps)Bt=!0;else{if(!fy(e,a)&&(t.flags&128)===0)return Bt=!1,Q2(e,t,a);Bt=(e.flags&131072)!==0}else Bt=!1,_e&&(t.flags&1048576)!==0&&RI(t,Qu,t.index);switch(t.lanes=0,t.tag){case 16:e:{var o=t.pendingProps;if(e=Tl(t.elementType),t.type=e,typeof e==\\\"function\\\")Vb(e)?(o=ql(e,o),t.tag=1,t=GL(null,t,e,o,a)):(t.tag=0,t=Qx(null,t,e,o,a));else{if(e!=null){var n=e.$$typeof;if(n===Mb){t.tag=11,t=HL(null,t,e,o,a);break e}else if(n===Ab){t.tag=14,t=zL(null,t,e,o,a);break e}else if(n===nn){t.tag=10,t.type=e,t=KL(null,t,a);break e}}throw t=wx(e)||e,Error(F(306,t,\\\"\\\"))}}return t;case 0:return Qx(e,t,t.type,t.pendingProps,a);case 1:return o=t.type,n=ql(o,t.pendingProps),GL(e,t,o,n,a);case 3:e:{if(Md(t,t.stateNode.containerInfo),e===null)throw Error(F(387));o=t.pendingProps;var r=t.memoizedState;n=r.element,qx(e,t),zu(t,o,null,a);var l=t.memoizedState;if(o=l.cache,Lr(t,Nt,o),o!==r.cache&&zx(t,[Nt],a,!0),Hu(),o=l.element,r.isDehydrated)if(r={element:o,isDehydrated:!1,cache:l.cache},t.updateQueue.baseState=r,t.memoizedState=r,t.flags&256){t=XL(e,t,o,a);break e}else if(o!==n){n=So(Error(F(424)),t),Wu(n),t=XL(e,t,o,a);break e}else for(e=t.stateNode.containerInfo,e.nodeType===9?e=e.body:e=e.nodeName===\\\"HTML\\\"?e.ownerDocument.body:e,gt=vo(e.firstChild),Yt=t,_e=!0,Er=null,Co=!0,a=MI(t,null,o,a),t.child=a;a;)a.flags=a.flags&-3|134221824,a=a.sibling;else{if(Bl(),o===n){t=Xn(e,t,a);break e}Ft(e,t,o,a)}t=t.child}return t;case 26:return zs(e,t),e===null?(a=CR(t.type,null,t.pendingProps,null))?t.memoizedState=a:_e||(t.stateNode=uw(t.type,t.pendingProps,Tr.current,t)):t.memoizedState=CR(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return Ex(t),e===null&&_e&&(o=t.stateNode=yw(t.type,t.pendingProps,Tr.current),Yt=t,Co=!0,n=gt,Vr(t.type)?(wb=n,gt=vo(o.firstChild)):gt=n),Ft(e,t,t.pendingProps.children,a),zs(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&_e&&((n=o=gt)&&(o=VB(o,t.type,t.pendingProps,Co),o!==null?(t.stateNode=o,Yt=t,gt=vo(o.firstChild),Co=!1,n=!0):n=!1),n||Fr(t)),Ex(t),n=t.type,r=t.pendingProps,l=e!==null?e.memoizedProps:null,o=r.children,vb(n,r)?o=null:l!==null&&vb(n,l)&&(t.flags|=32),t.memoizedState!==null&&(n=Wb(e,t,z2,null,null,a),Ci._currentValue=n),zs(e,t),Ft(e,t,o,a),t.child;case 6:return e===null&&_e&&((e=a=gt)&&(a=GB(a,t.pendingProps,Co),a!==null?(t.stateNode=a,Yt=t,gt=null,e=!0):e=!1),e||Fr(t)),null;case 13:return y0(e,t,a);case 4:return Md(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=zl(t,null,o,a):Ft(e,t,o,a),t.child;case 11:return HL(e,t,t.type,t.pendingProps,a);case 7:return o=t.pendingProps,zs(e,t),Ft(e,t,o,a),t.child;case 8:return Ft(e,t,t.pendingProps.children,a),t.child;case 12:return Ft(e,t,t.pendingProps.children,a),t.child;case 10:return KL(e,t,a);case 9:return n=t.type._context,o=t.pendingProps.children,Fl(t),n=Jt(n),o=o(n),t.flags|=1,Ft(e,t,o,a),t.child;case 14:return zL(e,t,t.type,t.pendingProps,a);case 15:return x0(e,t,t.type,t.pendingProps,a);case 19:return tb(e,t,a);case 31:return Z2(e,t,a);case 22:return b0(e,t,a,t.pendingProps);case 24:return Fl(t),o=Jt(Nt),e===null?(n=jb(),n===null&&(n=ut,r=Xb(),n.pooledCache=r,r.refCount++,r!==null&&(n.pooledCacheLanes|=a),n=r),t.memoizedState={parent:o,cache:n},Kb(t),Lr(t,Nt,n)):((e.lanes&a)!==0&&(qx(e,t),zu(t,null,null,a),Hu()),n=e.memoizedState,r=t.memoizedState,n.parent!==o?(n={parent:o,cache:o},t.memoizedState=n,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=n),Lr(t,Nt,o)):(o=r.cache,Lr(t,Nt,o),o!==n.cache&&zx(t,[Nt],a,!0))),Ft(e,t,t.pendingProps.children,a),t.child;case 30:return t.stateNode===null&&(t.stateNode={autoName:null,paired:null,clones:null,ref:null}),o=t.pendingProps,o.name!=null&&o.name!==\\\"auto\\\"?t.flags|=e===null?18882560:18874368:_e&&fp(t),e!==null&&e.memoizedProps.name!==o.name?t.flags|=4194816:zs(e,t),Ft(e,t,o.children,a),t.child;case 29:throw t.pendingProps}throw Error(F(156,t.tag))}function Bn(e){e.flags|=4}function sx(e,t,a,o,n){var r;if((r=(e.mode&32)!==0)&&(r=a===null?RR(t,o):RR(t,o)&&(o.src!==a.src||o.srcSet!==a.srcSet)),r){if(e.flags|=16777216,(n&335544128)===n)if(e.stateNode.complete)e.flags|=8192;else if(Z0())e.flags|=8192;else throw Pl=Hd,Yb}else e.flags&=-16777217}function ZL(e,t){if(t.type!==\\\"stylesheet\\\"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!Lw(t))if(Z0())e.flags|=8192;else throw Pl=Hd,Yb}function ad(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?XR():536870912,e.lanes|=t,gi|=t)}function Iu(e,t){if(!_e)switch(e.tailMode){case\\\"visible\\\":break;case\\\"collapsed\\\":for(var a=e.tail,o=null;a!==null;)a.alternate!==null&&(o=a),a=a.sibling;o===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:o.sibling=null;break;default:for(t=e.tail,a=null;t!==null;)t.alternate!==null&&(a=t),t=t.sibling;a===null?e.tail=null:a.sibling=null}}function mt(e){var t=e.alternate!==null&&e.alternate.child===e.child,a=0,o=0;if(t)for(var n=e.child;n!==null;)a|=n.lanes|n.childLanes,o|=n.subtreeFlags&1206910976,o|=n.flags&1206910976,n.return=e,n=n.sibling;else for(n=e.child;n!==null;)a|=n.lanes|n.childLanes,o|=n.subtreeFlags,o|=n.flags,n.return=e,n=n.sibling;return e.subtreeFlags|=o,e.childLanes=a,t}function W2(e,t,a){var o=t.pendingProps;switch(Gb(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return mt(t),null;case 1:return mt(t),null;case 3:return a=t.stateNode,o=null,e!==null&&(o=e.memoizedState.cache),t.memoizedState.cache!==o&&(t.flags|=2048),zn(Nt),fi(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),(e===null||e.child===null)&&(Fs(t)?Bn(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,ax())),mt(t),null;case 26:var n=t.type,r=t.memoizedState;return e===null?(Bn(t),r!==null?(mt(t),ZL(t,r)):(mt(t),sx(t,n,null,o,a))):r?r!==e.memoizedState?(Bn(t),mt(t),ZL(t,r)):(mt(t),t.flags&=-16777217):(e=e.memoizedProps,e!==o&&Bn(t),mt(t),sx(t,n,e,o,a)),null;case 27:if(Ad(t),a=Tr.current,n=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==o&&Bn(t);else{if(!o){if(t.stateNode===null)throw Error(F(166));return mt(t),t.subtreeFlags&=-33554433,null}e=un.current,Fs(t)?vL(t,e):(e=yw(n,o,a),t.stateNode=e,Bn(t))}return mt(t),t.subtreeFlags&=-33554433,null;case 5:if(Ad(t),n=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==o&&Bn(t);else{if(!o){if(t.stateNode===null)throw Error(F(166));return mt(t),t.subtreeFlags&=-33554433,null}if(r=un.current,Fs(t))vL(t,r);else{var l=nc(Tr.current);switch(r){case 1:r=l.createElementNS(\\\"http://www.w3.org/2000/svg\\\",n);break;case 2:r=l.createElementNS(\\\"http://www.w3.org/1998/Math/MathML\\\",n);break;default:switch(n){case\\\"svg\\\":r=l.createElementNS(\\\"http://www.w3.org/2000/svg\\\",n);break;case\\\"math\\\":r=l.createElementNS(\\\"http://www.w3.org/1998/Math/MathML\\\",n);break;case\\\"script\\\":r=l.createElement(\\\"div\\\"),r.innerHTML=\\\"<script><\\\\/script>\\\",r=r.removeChild(r.firstChild);break;case\\\"select\\\":r=typeof o.is==\\\"string\\\"?l.createElement(\\\"select\\\",{is:o.is}):l.createElement(\\\"select\\\"),o.multiple?r.multiple=!0:o.size&&(r.size=o.size);break;default:r=typeof o.is==\\\"string\\\"?l.createElement(n,{is:o.is}):l.createElement(n)}}r[Wt]=t,r[Fa]=o;e:for(l=t.child;l!==null;){if(l.tag===5||l.tag===6)r.appendChild(l.stateNode);else if(l.tag!==4&&l.tag!==27&&l.child!==null){l.child.return=l,l=l.child;continue}if(l===t)break e;for(;l.sibling===null;){if(l.return===null||l.return===t)break e;l=l.return}l.sibling.return=l.return,l=l.sibling}t.stateNode=r;e:switch(aa(r,n,o),n){case\\\"button\\\":case\\\"input\\\":case\\\"select\\\":case\\\"textarea\\\":o=!!o.autoFocus;break e;case\\\"img\\\":o=!0;break e;default:o=!1}o&&Bn(t)}}return mt(t),t.subtreeFlags&=-33554433,sx(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==o&&Bn(t);else{if(typeof o!=\\\"string\\\"&&t.stateNode===null)throw Error(F(166));if(e=Tr.current,Fs(t)){if(e=t.stateNode,a=t.memoizedProps,o=null,n=Yt,n!==null)switch(n.tag){case 27:case 5:o=n.memoizedProps}e[Wt]=t,e=!!(e.nodeValue===a||o!==null&&o.suppressHydrationWarning===!0||sw(e.nodeValue,a)),e||Fr(t,!0)}else e=nc(e).createTextNode(o),e[Wt]=t,t.stateNode=e}return mt(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(o=Fs(t),a!==null){if(e===null){if(!o)throw Error(F(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(F(557));e[Wt]=t}else Bl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;mt(t),e=!1}else a=ax(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?($a(t),t):($a(t),null);if((t.flags&128)!==0)throw Error(F(558))}return mt(t),null;case 13:if(o=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=Fs(t),o!==null&&o.dehydrated!==null){if(e===null){if(!n)throw Error(F(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(F(317));n[Wt]=t}else Bl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;mt(t),n=!1}else n=ax(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?($a(t),t):($a(t),null)}return $a(t),(t.flags&128)!==0?(t.lanes=a,t):(a=o!==null,e=e!==null&&e.memoizedState!==null,a&&(o=t.child,n=null,o.alternate!==null&&o.alternate.memoizedState!==null&&o.alternate.memoizedState.cachePool!==null&&(n=o.alternate.memoizedState.cachePool.pool),r=null,o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(r=o.memoizedState.cachePool.pool),r!==n&&(o.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),ad(t,t.updateQueue),mt(t),null);case 4:return fi(),e===null&&Sy(t.stateNode.containerInfo),t.flags|=67108864,mt(t),null;case 10:return zn(t.type),mt(t),null;case 19:if($b(t),o=t.memoizedState,o===null)return mt(t),null;if(n=(t.flags&128)!==0,r=o.rendering,r===null)if(n)Iu(o,!1);else{if(kt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(r=Ud(e),r!==null){for(t.flags|=128,Iu(o,!1),e=r.updateQueue,t.updateQueue=e,ad(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)vI(a,e),a=a.sibling;return ec(t,ta.current&1|2),_e&&_n(t,o.treeForkCount),t.child}e=e.sibling}o.tail!==null&&Ja()>Qd&&(t.flags|=128,n=!0,Iu(o,!1),t.lanes=4194304)}else{if(!n)if(e=Ud(r),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,ad(t,e),Iu(o,!0),o.tail===null&&o.tailMode!==\\\"collapsed\\\"&&o.tailMode!==\\\"visible\\\"&&!r.alternate&&!_e)return mt(t),null}else 2*Ja()-o.renderingStartTime>Qd&&a!==536870912&&(t.flags|=128,n=!0,Iu(o,!1),t.lanes=4194304);o.isBackwards?(r.sibling=t.child,t.child=r):(e=o.last,e!==null?e.sibling=r:t.child=r,o.last=r)}if(o.tail!==null){e=o.tail;e:{for(a=e;a!==null;){if(a.alternate!==null){a=!1;break e}a=a.sibling}a=!0}return o.rendering=e,o.tail=e.sibling,o.renderingStartTime=Ja(),e.sibling=null,r=ta.current,r=n?r&1|2:r&1,o.tailMode===\\\"visible\\\"||o.tailMode===\\\"collapsed\\\"||!a||_e?ec(t,r):(a=r,ht(oa,t),ht(ta,a),ua===null&&(ua=t)),_e&&_n(t,o.treeForkCount),e}return mt(t),null;case 22:case 23:return $a(t),Zb(),o=t.memoizedState!==null,e!==null?e.memoizedState!==null!==o&&(t.flags|=8192):o&&(t.flags|=8192),o?(a&536870912)!==0&&(t.flags&128)===0&&(mt(t),t.subtreeFlags&6&&(t.flags|=8192)):mt(t),a=t.updateQueue,a!==null&&ad(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),o=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(o=t.memoizedState.cachePool.pool),o!==a&&(t.flags|=2048),e!==null&&ea(Dl),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),zn(Nt),mt(t),null;case 25:return null;case 30:return t.flags|=33554432,mt(t),null}throw Error(F(156,t.tag))}function J2(e,t){switch(Gb(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return zn(Nt),fi(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ad(t),null;case 31:if(t.memoizedState!==null){if($a(t),t.alternate===null)throw Error(F(340));Bl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if($a(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(F(340));Bl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $b(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return fi(),null;case 10:return zn(t.type),null;case 22:case 23:return $a(t),Zb(),e!==null&&ea(Dl),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return zn(Nt),null;case 25:return null;default:return null}}function C0(e,t){switch(Gb(t),t.tag){case 3:zn(Nt),fi();break;case 26:case 27:case 5:Ad(t);break;case 4:fi();break;case 31:t.memoizedState!==null&&$a(t);break;case 13:$a(t);break;case 19:$b(t);break;case 10:zn(t.type);break;case 22:case 23:$a(t),Zb(),e!==null&&ea(Dl);break;case 24:zn(Nt)}}function xc(e,t){try{var a=t.updateQueue,o=a!==null?a.lastEffect:null;if(o!==null){var n=o.next;a=n;do{if((a.tag&e)===e){o=void 0;var r=a.create,l=a.inst;o=r(),l.destroy=o}a=a.next}while(a!==n)}}catch(s){tt(t,t.return,s)}}function zr(e,t,a){try{var o=t.updateQueue,n=o!==null?o.lastEffect:null;if(n!==null){var r=n.next;o=r;do{if((o.tag&e)===e){var l=o.inst,s=l.destroy;if(s!==void 0){l.destroy=void 0,n=t;var i=a,u=s;try{u()}catch(c){tt(n,i,c)}}}o=o.next}while(o!==r)}}catch(c){tt(t,t.return,c)}}function v0(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{OI(t,a)}catch(o){tt(e,e.return,o)}}}function L0(e,t,a){a.props=ql(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(o){tt(e,t,o)}}function an(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var o=e.stateNode;break;case 30:var n=e.stateNode,r=qn(e.memoizedProps,n);(n.ref===null||n.ref.name!==r)&&(n.ref=pw(r)),o=n.ref;break;case 7:if(e.stateNode===null){var l=new no(e);_a(e.child,!1,UB,l,void 0,void 0),e.stateNode=l}o=e.stateNode;break;default:o=e.stateNode}typeof a==\\\"function\\\"?e.refCleanup=a(o):a.current=o}}catch(s){tt(e,t,s)}}function Qt(e,t){var a=e.ref,o=e.refCleanup;if(a!==null)if(typeof o==\\\"function\\\")try{o()}catch(n){tt(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a==\\\"function\\\")try{a(null)}catch(n){tt(e,t,n)}else a.current=null}function jd(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var a=0;a<t.length;a++)xw(e.stateNode,t[a])}function $L(e){for(var t=e.return;t!==null&&(py(t)&&xw(e.stateNode,t.stateNode),!dy(t));)t=t.return}function Vu(e){for(var t=e.return;t!==null&&(py(t)&&qB(e.stateNode,t.stateNode),!dy(t));)t=t.return}function dy(e){return e.tag===5||e.tag===3||e.tag===27}function py(e){return e&&e.tag===7&&e.stateNode!==null}function ab(e){var t=e.type,a=e.memoizedProps,o=e.stateNode;try{e:switch(t){case\\\"button\\\":case\\\"input\\\":case\\\"select\\\":case\\\"textarea\\\":a.autoFocus&&o.focus();break e;case\\\"img\\\":a.src?o.src=a.src:a.srcSet&&(o.srcset=a.srcSet)}}catch(n){tt(e,e.return,n)}}function ix(e,t,a){try{var o=e.stateNode;LB(o,e.type,a,t),o[Fa]=t}catch(n){tt(e,e.return,n)}}function R0(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Vr(e.type)||e.tag===4}function ux(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||R0(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Vr(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ob(e,t,a,o){var n=e.tag;if(n===5||n===6)n=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName===\\\"HTML\\\"?a.ownerDocument.body:a).insertBefore(n,t):(t=a.nodeType===9?a.body:a.nodeName===\\\"HTML\\\"?a.ownerDocument.body:a,t.appendChild(n),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=rn)),jd(e,o),je=!0;else if(n!==4&&(n===27&&(jd(e,o),o=null,Vr(e.type)&&(a=e.stateNode,t=null)),e=e.child,e!==null))for(ob(e,t,a,o),e=e.sibling;e!==null;)ob(e,t,a,o),e=e.sibling}function Yd(e,t,a,o){var n=e.tag;if(n===5||n===6)n=e.stateNode,t?a.insertBefore(n,t):a.appendChild(n),jd(e,o),je=!0;else if(n!==4&&(n===27&&(jd(e,o),o=null,Vr(e.type)&&(a=e.stateNode)),e=e.child,e!==null))for(Yd(e,t,a,o),e=e.sibling;e!==null;)Yd(e,t,a,o),e=e.sibling}function I0(e){var t=e.stateNode,a=e.memoizedProps;try{for(var o=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);aa(t,o,a),t[Wt]=e,t[Fa]=a}catch(r){tt(e,e.return,r)}}var Kd=!1,Qa=null;function QL(e){(e.tag===30||(e.subtreeFlags&33554432)!==0)&&(Kd=!0)}var on=null;function WL(){var e=on;return on=null,e}var Pa=0;function Ti(e,t,a,o,n){return Pa=0,w0(e.child,t,a,o,n)}function w0(e,t,a,o,n){for(var r=!1;e!==null;){if(e.tag===5){var l=e.stateNode;if(o!==null){var s=Lb(l);o.push(s),s.view&&(r=!0)}else r||Lb(l).view&&(r=!0);Kd=!0,cw(l,Pa===0?t:t+\\\"_\\\"+Pa,a),Pa++}else(e.tag!==22||e.memoizedState===null)&&(e.tag===30&&n||w0(e.child,t,a,o,n)&&(r=!0));e=e.sibling}return r}function fn(e,t){for(;e!==null;)e.tag===5?fw(e.stateNode,e.memoizedProps):(e.tag!==22||e.memoizedState===null)&&(e.tag===30&&t||fn(e.child,t)),e=e.sibling}function Sd(e){if((e.subtreeFlags&18874368)!==0)for(e=e.child;e!==null;){if((e.tag!==22||e.memoizedState===null)&&(Sd(e),e.tag===30&&(e.flags&18874368)!==0&&e.stateNode.paired)){var t=e.memoizedProps;if(t.name==null||t.name===\\\"auto\\\")throw Error(F(544));var a=t.name;t=Kn(t.default,t.share),t!==\\\"none\\\"&&(Ti(e,a,t,null,!1)||fn(e.child,!1))}e=e.sibling}}function nb(e,t){if(e.tag===30){var a=e.stateNode,o=e.memoizedProps,n=qn(o,a),r=Kn(o.default,a.paired?o.share:o.enter);r!==\\\"none\\\"?Ti(e,n,r,null,!1)?(Sd(e),a.paired||t||hi(e,o.onEnter)):fn(e.child,!1):Sd(e)}else if((e.subtreeFlags&33554432)!==0)for(e=e.child;e!==null;)nb(e,t),e=e.sibling;else Sd(e)}function rb(e){if(Qa!==null&&Qa.size!==0){var t=Qa;if((e.subtreeFlags&18874368)!==0)for(e=e.child;e!==null;){if(e.tag!==22||e.memoizedState===null){if(e.tag===30&&(e.flags&18874368)!==0){var a=e.memoizedProps,o=a.name;if(o!=null&&o!==\\\"auto\\\"){var n=t.get(o);if(n!==void 0){var r=Kn(a.default,a.share);if(r!==\\\"none\\\"&&(Ti(e,o,r,null,!1)?(r=e.stateNode,n.paired=r,r.paired=n,hi(e,a.onShare)):fn(e.child,!1)),t.delete(o),t.size===0)break}}}rb(e)}e=e.sibling}}}function lb(e){if(e.tag===30){var t=e.memoizedProps,a=qn(t,e.stateNode),o=Qa!==null?Qa.get(a):void 0,n=Kn(t.default,o!==void 0?t.share:t.exit);n!==\\\"none\\\"&&(Ti(e,a,n,null,!1)?o!==void 0?(n=e.stateNode,o.paired=n,n.paired=o,Qa.delete(a),hi(e,t.onShare)):hi(e,t.onExit):fn(e.child,!1)),Qa!==null&&rb(e)}else if((e.subtreeFlags&33554432)!==0)for(e=e.child;e!==null;)lb(e),e=e.sibling;else Qa!==null&&rb(e)}function T0(e){for(e=e.child;e!==null;){if(e.tag===30){var t=e.memoizedProps,a=qn(t,e.stateNode);t=Kn(t.default,t.update),e.flags&=-5,t!==\\\"none\\\"&&Ti(e,a,t,e.memoizedState=[],!1)}else(e.subtreeFlags&33554432)!==0&&T0(e);e=e.sibling}}function sb(e){if((e.subtreeFlags&18874368)!==0)for(e=e.child;e!==null;){if(e.tag!==22||e.memoizedState===null){if(e.tag===30&&(e.flags&18874368)!==0){var t=e.stateNode;t.paired!==null&&(t.paired=null,fn(e.child,!1))}sb(e)}e=e.sibling}}function Cd(e){if(e.tag===30)e.stateNode.paired=null,fn(e.child,!1),sb(e);else if((e.subtreeFlags&33554432)!==0)for(e=e.child;e!==null;)Cd(e),e=e.sibling;else sb(e)}function E0(e){for(e=e.child;e!==null;)e.tag===30?fn(e.child,!1):(e.subtreeFlags&33554432)!==0&&E0(e),e=e.sibling}function my(e,t,a,o,n,r,l){for(var s=!1;t!==null;){if(t.tag===5){var i=t.stateNode;if(r!==null&&Pa<r.length){var u=r[Pa],c=Lb(i);(u.view||c.view)&&(s=!0);var d;if(d=(e.flags&4)===0)if(c.clip)d=!0;else{d=u.rect;var f=c.rect;d=d.y!==f.y||d.x!==f.x||d.height!==f.height||d.width!==f.width}d&&(e.flags|=4),c.abs?c=!u.abs:(u=u.rect,c=c.rect,c=u.height!==c.height||u.width!==c.width),c&&(e.flags|=32)}else e.flags|=32;(e.flags&4)!==0&&cw(i,Pa===0?a:a+\\\"_\\\"+Pa,n),s&&(e.flags&4)!==0||(on===null&&(on=[]),on.push(i,Pa===0?o:o+\\\"_\\\"+Pa,t.memoizedProps)),Pa++}else(t.tag!==22||t.memoizedState===null)&&(t.tag===30&&l?e.flags|=t.flags&32:my(e,t.child,a,o,n,r,l)&&(s=!0));t=t.sibling}return s}function k0(e,t){for(e=e.child;e!==null;){if(e.tag===30){var a=e.memoizedProps,o=e.stateNode,n=qn(a,o),r=Kn(a.default,a.update);if(t){o=o.clones;var l=o===null?null:o.map(kB)}else l=e.memoizedState,e.memoizedState=null;o=e;var s=e.child;Pa=0,n=my(o,s,n,n,r,l,!1),(e.flags&4)!==0&&n&&(t||hi(e,a.onUpdate))}else(e.subtreeFlags&33554432)!==0&&k0(e,t);e=e.sibling}}var Gt=!1,Qe=!1,Jo=!1,cx=!1,JL=typeof WeakSet==\\\"function\\\"?WeakSet:Set,Xt=null,en=!1,Du=!1,Zd=!1,ib=!1;function eB(e,t,a){if(e=e.containerInfo,Sb=vi,e=mI(e),zb(e)){if(\\\"selectionStart\\\"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var n=o.getSelection&&o.getSelection();if(n&&n.rangeCount!==0){o=n.anchorNode;var r=n.anchorOffset,l=n.focusNode;n=n.focusOffset;try{o.nodeType,l.nodeType}catch{o=null;break e}var s=0,i=-1,u=-1,c=0,d=0,f=e,p=null;t:for(;;){for(var h;f!==o||r!==0&&f.nodeType!==3||(i=s+r),f!==l||n!==0&&f.nodeType!==3||(u=s+n),f.nodeType===3&&(s+=f.nodeValue.length),(h=f.firstChild)!==null;)p=f,f=h;for(;;){if(f===e)break t;if(p===o&&++c===r&&(i=s),p===l&&++d===n&&(u=s),(h=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=h}o=i===-1||u===-1?null:{start:i,end:u}}else o=null}o=o||{start:0,end:0}}else o=null;for(Cb={focusedElem:e,selectionRange:o},vi=!1,a=(a&335544064)===a,Xt=t,t=a?9270:1024;Xt!==null;){if(e=Xt,a&&(o=e.deletions,o!==null))for(r=0;r<o.length;r++)a&&lb(o[r]);if(e.alternate===null&&(e.flags&2)!==0)a&&QL(e),od(a);else{if(e.tag===22){if(o=e.alternate,e.memoizedState!==null){o!==null&&o.memoizedState===null&&a&&lb(o),od(a);continue}else if(o!==null&&o.memoizedState!==null){a&&QL(e),od(a);continue}}o=e.child,(e.subtreeFlags&t)!==0&&o!==null?(o.return=e,Xt=o):(a&&T0(e),od(a))}}Qa=null}function od(e){for(;Xt!==null;){var t=Xt,a=e,o=t.alternate,n=t.flags;switch(t.tag){case 0:case 11:case 15:break;case 1:if((n&1024)!==0&&o!==null){a=void 0,n=o.memoizedProps,o=o.memoizedState;var r=t.stateNode;try{var l=ql(t.type,n);a=r.getSnapshotBeforeUpdate(l,o),r.__reactInternalSnapshotBeforeUpdate=a}catch(s){tt(t,t.return,s)}}break;case 3:if((n&1024)!==0){if(o=t.stateNode.containerInfo,a=o.nodeType,a===9)Rb(o);else if(a===1)switch(o.nodeName){case\\\"HEAD\\\":case\\\"HTML\\\":case\\\"BODY\\\":Rb(o);break;default:o.textContent=\\\"\\\"}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;case 30:a&&o!==null&&(a=qn(o.memoizedProps,o.stateNode),n=t.memoizedProps,n=Kn(n.default,n.update),n!==\\\"none\\\"&&Ti(o,a,n,o.memoizedState=[],!0));break;default:if((n&1024)!==0)throw Error(F(163))}if(o=t.sibling,o!==null){o.return=t.return,Xt=o;break}Xt=t.return}}function M0(e,t,a){var o=a.flags;switch(a.tag){case 0:case 11:case 15:tn(e,a),o&4&&xc(5,a);break;case 1:if(tn(e,a),o&4)if(e=a.stateNode,t===null)try{e.componentDidMount()}catch(l){tt(a,a.return,l)}else{var n=ql(a.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(n,t,e.__reactInternalSnapshotBeforeUpdate)}catch(l){tt(a,a.return,l)}}o&64&&v0(a),o&512&&an(a,a.return);break;case 3:if(tn(e,a),o&64&&(e=a.updateQueue,e!==null)){if(t=null,a.child!==null)switch(a.child.tag){case 27:case 5:t=a.child.stateNode;break;case 1:t=a.child.stateNode}try{OI(e,t)}catch(l){tt(a,a.return,l)}}break;case 27:t===null&&o&4&&I0(a);case 26:case 5:tn(e,a),t===null&&o&4&&ab(a),o&512&&an(a,a.return);break;case 12:tn(e,a);break;case 31:tn(e,a),o&4&&P0(e,a);break;case 13:tn(e,a),o&4&&N0(e,a),o&64&&(e=a.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(a=dB.bind(null,a),XB(e,a))));break;case 22:if(o=a.memoizedState!==null||Gt,!o){var r=t!==null&&t.memoizedState!==null||Qe;t=Gt,n=Qe,Gt=o,(Qe=r)&&!n?(o=2,(a.subtreeFlags&8772)!==0&&(o|=1),Bo(e,a,o)):tn(e,a),Gt=t,Qe=n}break;case 30:tn(e,a),o&512&&an(a,a.return);break;case 7:o&512&&an(a,a.return);default:tn(e,a)}}function ub(e,t){for(e=e.child;e!==null;)A0(e,t),e=e.sibling}function A0(e,t){switch(e.tag){case 5:case 26:try{var a=e.stateNode;if(t){var o=a.style;typeof o.setProperty==\\\"function\\\"?o.setProperty(\\\"display\\\",\\\"none\\\",\\\"important\\\"):o.display=\\\"none\\\"}else{var n=e.stateNode,r=e.memoizedProps.style,l=r!=null&&r.hasOwnProperty(\\\"display\\\")?r.display:null;n.style.display=l==null||typeof l==\\\"boolean\\\"?\\\"\\\":(\\\"\\\"+l).trim()}}catch(i){tt(e,e.return,i)}cb(e,t);break;case 6:try{e.stateNode.nodeValue=t?\\\"\\\":e.memoizedProps,je=!0}catch(i){tt(e,e.return,i)}break;case 18:try{var s=e.stateNode;t?gR(s,!0):gR(e.stateNode,!1)}catch(i){tt(e,e.return,i)}break;case 22:case 23:e.memoizedState===null&&ub(e,t);break;default:ub(e,t)}}function cb(e,t){if(e.subtreeFlags&67108864)for(e=e.child;e!==null;){e:{var a=e,o=t;switch(a.tag){case 4:A0(a,o);break e;case 22:a.memoizedState===null&&cb(a,o);break e;default:cb(a,o)}}e=e.sibling}}function O0(e){var t=e.alternate;t!==null&&(e.alternate=null,O0(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&rp(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var yt=null,Oa=!1;function No(e,t,a){for(a=a.child;a!==null;)D0(e,t,a),a=a.sibling}function D0(e,t,a){if(eo&&typeof eo.onCommitFiberUnmount==\\\"function\\\")try{eo.onCommitFiberUnmount(cc,a)}catch{}switch(a.tag){case 26:Qe||Qt(a,t),No(e,t,a),a.memoizedState?a.memoizedState.count--:a.stateNode&&!Qe&&(a=a.stateNode,a.parentNode.removeChild(a));break;case 27:Qe||Qt(a,t),Vu(a);var o=yt,n=Oa;Vr(a.type)&&(yt=a.stateNode,Oa=!1),No(e,t,a),Sw(a.stateNode,a.type,a.memoizedProps),yt=o,Oa=n;break;case 5:Qe||Qt(a,t),Vu(a);case 6:if(a.tag===6&&Vu(a),o=yt,n=Oa,yt=null,No(e,t,a),yt=o,Oa=n,yt!==null)if(Oa)try{(yt.nodeType===9?yt.body:yt.nodeName===\\\"HTML\\\"?yt.ownerDocument.body:yt).removeChild(a.stateNode),je=!0}catch(r){tt(a,t,r)}else try{yt.removeChild(a.stateNode),je=!0}catch(r){tt(a,t,r)}break;case 18:yt!==null&&(Oa?(e=yt,mR(e.nodeType===9?e.body:e.nodeName===\\\"HTML\\\"?e.ownerDocument.body:e,a.stateNode),Li(e)):mR(yt,a.stateNode));break;case 4:o=yt,n=Oa,yt=a.stateNode.containerInfo,Oa=!0,No(e,t,a),yt=o,Oa=n;break;case 0:case 11:case 14:case 15:zr(2,a,t),Qe||zr(4,a,t),No(e,t,a);break;case 1:Qe||(Qt(a,t),o=a.stateNode,typeof o.componentWillUnmount==\\\"function\\\"&&L0(a,t,o)),No(e,t,a);break;case 21:No(e,t,a);break;case 22:Qe=(o=Qe)||a.memoizedState!==null,No(e,t,a),Qe=o;break;case 30:Qt(a,t),No(e,t,a);break;case 7:Qe||Qt(a,t),No(e,t,a);break;default:No(e,t,a)}}function P0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Li(e)}catch(a){tt(t,t.return,a)}}}function N0(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Li(e)}catch(a){tt(t,t.return,a)}}function tB(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new JL),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new JL),t;default:throw Error(F(435,e.tag))}}function nd(e,t){var a=tB(e);t.forEach(function(o){if(!a.has(o)){a.add(o);var n=pB.bind(null,e,o);o.then(n,n)}})}function va(e,t,a){var o=t.deletions;if(o!==null)for(var n=0;n<o.length;n++){var r=o[n],l=e,s=t,i=s;e:for(;i!==null;){switch(i.tag){case 27:if(Vr(i.type)){yt=i.stateNode,Oa=!1;break e}break;case 5:yt=i.stateNode,Oa=!1;break e;case 3:case 4:yt=i.stateNode.containerInfo,Oa=!0;break e}i=i.return}if(yt===null)throw Error(F(160));D0(l,s,r),yt=null,Oa=!1,l=r.alternate,l!==null&&(l.return=null),r.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)B0(t,e,a),t=t.sibling}var _o=null;function B0(e,t,a){var o=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(n&4&&(o=e.updateQueue,o=o!==null?o.events:null,o!==null))for(var r=0;r<o.length;r++){var l=o[r];l.ref.impl=l.nextImpl}va(t,e,a),La(e),n&4&&(zr(3,e,e.return),xc(3,e),zr(5,e,e.return));break;case 1:va(t,e,a),La(e),n&512&&(Qe||o===null||Qt(o,o.return)),n&64&&Gt&&(e=e.updateQueue,e!==null&&(t=e.callbacks,t!==null&&(a=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=a===null?t:a.concat(t))));break;case 26:if(r=_o,va(t,e,a),La(e),n&512&&(Qe||o===null||Qt(o,o.return)),n&4)if(n=o!==null?o.memoizedState:null,a=e.memoizedState,o===null)if(a===null)if(e.stateNode===null)if(Gt)e.stateNode=uw(e.type,e.memoizedProps,t.containerInfo,e);else{e:{t=e.type,a=e.memoizedProps,n=r.ownerDocument||r;t:switch(t){case\\\"title\\\":o=n.getElementsByTagName(\\\"title\\\")[0],(!o||o[pc]||o[Wt]||o.namespaceURI===\\\"http://www.w3.org/2000/svg\\\"||o.hasAttribute(\\\"itemprop\\\"))&&(o=n.createElement(t),n.head.insertBefore(o,n.querySelector(\\\"head > title\\\"))),aa(o,t,a),o[Wt]=e,jt(o),t=o;break e;case\\\"link\\\":if(r=LR(\\\"link\\\",\\\"href\\\",n).get(t+(a.href||\\\"\\\"))){for(l=0;l<r.length;l++)if(o=r[l],o.getAttribute(\\\"href\\\")===(a.href==null||a.href===\\\"\\\"?null:a.href)&&o.getAttribute(\\\"rel\\\")===(a.rel==null?null:a.rel)&&o.getAttribute(\\\"title\\\")===(a.title==null?null:a.title)&&o.getAttribute(\\\"crossorigin\\\")===(a.crossOrigin==null?null:a.crossOrigin)){r.splice(l,1);break t}}o=n.createElement(t),aa(o,t,a),n.head.appendChild(o);break;case\\\"meta\\\":if(r=LR(\\\"meta\\\",\\\"content\\\",n).get(t+(a.content||\\\"\\\"))){for(l=0;l<r.length;l++)if(o=r[l],o.getAttribute(\\\"content\\\")===(a.content==null?null:\\\"\\\"+a.content)&&o.getAttribute(\\\"name\\\")===(a.name==null?null:a.name)&&o.getAttribute(\\\"property\\\")===(a.property==null?null:a.property)&&o.getAttribute(\\\"http-equiv\\\")===(a.httpEquiv==null?null:a.httpEquiv)&&o.getAttribute(\\\"charset\\\")===(a.charSet==null?null:a.charSet)){r.splice(l,1);break t}}o=n.createElement(t),aa(o,t,a),n.head.appendChild(o);break;default:throw Error(F(468,t))}o[Wt]=e,jt(o),t=o}e.stateNode=t}else Gt||Tb(r,e.type,e.stateNode);else e.stateNode=vR(r,a,e.memoizedProps);else n!==a?(n===null?(t=o.stateNode,t===null||Qe||t.parentNode.removeChild(t)):n.count--,a===null?Gt||Tb(r,e.type,e.stateNode):vR(r,a,e.memoizedProps)):a===null&&e.stateNode!==null&&ix(e,e.memoizedProps,o.memoizedProps);break;case 27:va(t,e,a),La(e),n&512&&(Qe||o===null||Qt(o,o.return)),o!==null&&n&4&&ix(e,e.memoizedProps,o.memoizedProps);break;case 5:if(r=Jo,Jo=!1,va(t,e,a),Jo=r,La(e),n&512&&(Qe||o===null||Qt(o,o.return)),e.flags&32){t=e.stateNode;try{pi(t,\\\"\\\"),je=!0}catch(c){tt(e,e.return,c)}}n&4&&e.stateNode!=null&&(t=e.memoizedProps,ix(e,t,o!==null?o.memoizedProps:t)),n&1024&&(cx=!0);break;case 6:if(va(t,e,a),La(e),n&4){if(e.stateNode===null)throw Error(F(162));t=e.memoizedProps,a=e.stateNode;try{a.nodeValue=t,je=!0}catch(c){tt(e,e.return,c)}}break;case 3:if(je=!1,Id=null,r=_o,_o=rc(t.containerInfo),va(t,e,a),_o=r,La(e),n&4&&o!==null&&o.memoizedState.isDehydrated)try{Li(t.containerInfo)}catch(c){tt(e,e.return,c)}cx&&(cx=!1,_0(e)),je=!1;break;case 4:n=Jo,Jo=Gt,o=rL(),r=_o,_o=rc(e.stateNode.containerInfo),va(t,e,a),La(e),_o=r,je&&Du&&(Zd=!0),je=o,Jo=n;break;case 12:va(t,e,a),La(e);break;case 31:va(t,e,a),La(e),n&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,nd(e,t)));break;case 13:va(t,e,a),La(e),e.child.flags&8192&&e.memoizedState!==null!=(o!==null&&o.memoizedState!==null)&&(bp=Ja()),n&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,nd(e,t)));break;case 22:r=e.memoizedState!==null,l=o!==null&&o.memoizedState!==null;var s=Gt,i=Qe,u=Jo;Gt=s||r,Jo=u||r,Qe=i||l,va(t,e,a),Qe=i,Jo=u,Gt=s,La(e),n&8192&&(t=e.stateNode,t._visibility=r?t._visibility&-2:t._visibility|1,!r||o===null||l||Gt||Qe||(t=l||Qe,a=Gt,o=Qe,Gt=r||Gt,Qe=t,xr(e,2),Gt=a,Qe=o),!r&&Jo||ub(e,r)),n&4&&(t=e.updateQueue,t!==null&&(a=t.retryQueue,a!==null&&(t.retryQueue=null,nd(e,a))));break;case 19:va(t,e,a),La(e),n&4&&(t=e.updateQueue,t!==null&&(e.updateQueue=null,nd(e,t)));break;case 30:n&512&&(Qe||o===null||Qt(o,o.return)),n=rL(),r=Du,l=(a&335544064)===a,s=e.memoizedProps,Du=l&&Kn(s.default,s.update)!==\\\"none\\\",va(t,e,a),La(e),l&&o!==null&&je&&(e.flags|=4),Du=r,je=n;break;case 21:break;case 7:n&512&&(Qe||o===null||Qt(o,o.return)),o&&o.stateNode!==null&&(o.stateNode._fragmentFiber=e);default:va(t,e,a),La(e)}}function La(e){var t=e.flags;if(t&2){try{for(var a,o=e.return;o!==null;){if(R0(o)){a=o;break}o=o.return}o=null;for(var n=e.return;n!==null;){if(py(n)){var r=n.stateNode;o===null?o=[r]:o.push(r)}if(dy(n))break;n=n.return}var l=o;if(a==null)throw Error(F(160));switch(a.tag){case 27:var s=a.stateNode,i=ux(e);Yd(e,i,s,l);break;case 5:var u=a.stateNode;a.flags&32&&(pi(u,\\\"\\\"),a.flags&=-33);var c=ux(e);Yd(e,c,u,l);break;case 3:case 4:var d=a.stateNode.containerInfo,f=ux(e);ob(e,f,d,l);break;default:throw Error(F(161))}}catch(p){tt(e,e.return,p)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function _0(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;_0(t),t.tag===5&&t.flags&1024&&(t=t.stateNode,vi=!0,t.reset(),vi=!1),e=e.sibling}}function Hs(e,t){if(t.subtreeFlags&9270)for(t=t.child;t!==null;)F0(t,e),t=t.sibling;else k0(t,!1)}function F0(e,t){var a=e.alternate;if(a===null)nb(e,!1);else switch(e.tag){case 3:if(ib=en=!1,WL(),Hs(t,e),!en&&!Zd){if(e=on,e!==null)for(var o=0;o<e.length;o+=3){a=e[o];var n=e[o+1];fw(a,e[o+2]),a=a.ownerDocument.documentElement,a!==null&&a.animate({opacity:[0,0],pointerEvents:[\\\"none\\\",\\\"none\\\"]},{duration:0,fill:\\\"forwards\\\",pseudoElement:\\\"::view-transition-group(\\\"+n+\\\")\\\"})}e=t.containerInfo,e=e.nodeType===9?e.documentElement:e.ownerDocument.documentElement,e!==null&&e.style.viewTransitionName===\\\"\\\"&&(e.style.viewTransitionName=\\\"none\\\",e.animate({opacity:[0,0],pointerEvents:[\\\"none\\\",\\\"none\\\"]},{duration:0,fill:\\\"forwards\\\",pseudoElement:\\\"::view-transition-group(root)\\\"}),e.animate({width:[0,0],height:[0,0]},{duration:0,fill:\\\"forwards\\\",pseudoElement:\\\"::view-transition\\\"})),ib=!0}on=null;break;case 5:Hs(t,e);break;case 4:o=en,en=!1,Hs(t,e),en&&(Zd=!0),en=o;break;case 22:e.memoizedState===null&&(a.memoizedState!==null?nb(e,!1):Hs(t,e));break;case 30:o=en,n=WL(),en=!1,Hs(t,e),en&&(e.flags|=4);var r=e.memoizedProps,l=e.stateNode;t=qn(r,l),l=qn(a.memoizedProps,l);var s=Kn(r.default,r.update);s===\\\"none\\\"?t=!1:(r=a.memoizedState,a.memoizedState=null,a=e.child,Pa=0,t=my(e,a,t,l,s,r,!0),Pa!==(r===null?0:r.length)&&(e.flags|=32)),(e.flags&4)!==0&&t?(hi(e,e.memoizedProps.onUpdate),on=n):n!==null&&(n.push.apply(n,on),on=n),en=(e.flags&32)!==0?!0:o;break;default:Hs(t,e)}}function tn(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)M0(e,t.alternate,t),t=t.sibling}function xr(e,t){for(e=e.child;e!==null;){var a=e,o=t;switch(a.tag){case 0:case 11:case 14:case 15:zr(4,a,a.return),xr(a,o);break;case 1:Qt(a,a.return);var n=a.stateNode;typeof n.componentWillUnmount==\\\"function\\\"&&L0(a,a.return,n),xr(a,o);break;case 27:(o&2)!==0&&Sw(a.stateNode,a.type,a.memoizedProps);case 5:Qt(a,a.return),a.tag!==5&&a.tag!==27||Vu(a),xr(a,o);break;case 6:Vu(a);break;case 26:Qt(a,a.return),n=a.stateNode,a.memoizedState!==null||n===null||Qe||n.parentNode.removeChild(n),xr(a,o);break;case 22:a.memoizedState===null&&xr(a,o);break;case 30:Qt(a,a.return),xr(a,o);break;case 7:Qt(a,a.return);default:xr(a,o)}e=e.sibling}}function Bo(e,t,a){for(a=(t.subtreeFlags&8772)!==0?a:a&-2,t=t.child;t!==null;){var o=t.alternate,n=e,r=t,l=r.flags,s=(a&1)!==0;switch(r.tag){case 0:case 11:case 15:Bo(n,r,a),xc(4,r);break;case 1:if(Bo(n,r,a),o=r,n=o.stateNode,typeof n.componentDidMount==\\\"function\\\")try{n.componentDidMount()}catch(c){tt(o,o.return,c)}if(o=r,n=o.updateQueue,n!==null){var i=o.stateNode;try{var u=n.shared.hiddenCallbacks;if(u!==null)for(n.shared.hiddenCallbacks=null,n=0;n<u.length;n++)AI(u[n],i)}catch(c){tt(o,o.return,c)}}s&&l&64&&v0(r),an(r,r.return);break;case 27:(a&2)!==0&&I0(r);case 5:r.tag!==5&&r.tag!==27||$L(r),Bo(n,r,a),s&&o===null&&l&4&&ab(r),an(r,r.return);break;case 6:$L(r);break;case 26:i=r.stateNode,r.memoizedState!==null||i===null||Gt||Tb(rc(i.ownerDocument),r.type,i),Bo(n,r,a),s&&o===null&&l&4&&ab(r),an(r,r.return);break;case 12:Bo(n,r,a);break;case 31:Bo(n,r,a),s&&l&4&&P0(n,r);break;case 13:Bo(n,r,a),s&&l&4&&N0(n,r);break;case 22:r.memoizedState===null&&Bo(n,r,a),an(r,r.return);break;case 30:Bo(n,r,a),an(r,r.return);break;case 7:an(r,r.return);default:Bo(n,r,a)}t=t.sibling}}function gy(e,t){var a=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==a&&(e!=null&&e.refCount++,a!=null&&gc(a))}function hy(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&gc(e))}function go(e,t,a,o){var n=(a&335544064)===a;if(t.subtreeFlags&(n?10262:10256))for(t=t.child;t!==null;)H0(e,t,a,o),t=t.sibling;else n&&E0(t)}function H0(e,t,a,o){var n=(a&335544064)===a;n&&t.alternate===null&&t.return!==null&&t.return.alternate!==null&&Cd(t);var r=t.flags;switch(t.tag){case 0:case 11:case 15:go(e,t,a,o),r&2048&&xc(9,t);break;case 1:go(e,t,a,o);break;case 3:go(e,t,a,o),n&&ib&&(e=e.containerInfo,e=e.nodeType===9?e.body:e.nodeName===\\\"HTML\\\"?e.ownerDocument.body:e,e.style.viewTransitionName===\\\"root\\\"&&(e.style.viewTransitionName=\\\"\\\"),e=e.ownerDocument.documentElement,e!==null&&e.style.viewTransitionName===\\\"none\\\"&&(e.style.viewTransitionName=\\\"\\\")),r&2048&&(r=null,t.alternate!==null&&(r=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==r&&(t.refCount++,r!=null&&gc(r)));break;case 12:if(r&2048){go(e,t,a,o),r=t.stateNode;try{var l=t.memoizedProps,s=l.id,i=l.onPostCommit;typeof i==\\\"function\\\"&&i(s,t.alternate===null?\\\"mount\\\":\\\"update\\\",r.passiveEffectDuration,-0)}catch(u){tt(t,t.return,u)}}else go(e,t,a,o);break;case 31:go(e,t,a,o);break;case 13:go(e,t,a,o);break;case 23:break;case 22:l=t.stateNode,s=t.alternate,t.memoizedState!==null?(n&&s!==null&&s.memoizedState===null&&Cd(s),l._visibility&2?go(e,t,a,o):Gu(e,t)):(n&&s!==null&&s.memoizedState!==null&&Cd(t),l._visibility&2?go(e,t,a,o):(l._visibility|=2,Us(e,t,a,o,(t.subtreeFlags&10256)!==0||!1))),r&2048&&gy(s,t);break;case 24:go(e,t,a,o),r&2048&&hy(t.alternate,t);break;case 30:n&&(r=t.alternate,r!==null&&(fn(r.child,!0),fn(t.child,!0))),go(e,t,a,o);break;default:go(e,t,a,o)}}function Us(e,t,a,o,n){for(n=n&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var r=e,l=t,s=a,i=o,u=l.flags;switch(l.tag){case 0:case 11:case 15:Us(r,l,s,i,n),xc(8,l);break;case 23:break;case 22:var c=l.stateNode;l.memoizedState!==null?c._visibility&2?Us(r,l,s,i,n):Gu(r,l):(c._visibility|=2,Us(r,l,s,i,n)),n&&u&2048&&gy(l.alternate,l);break;case 24:Us(r,l,s,i,n),n&&u&2048&&hy(l.alternate,l);break;default:Us(r,l,s,i,n)}t=t.sibling}}function Gu(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var a=e,o=t,n=o.flags;switch(o.tag){case 22:Gu(a,o),n&2048&&gy(o.alternate,o);break;case 24:Gu(a,o),n&2048&&hy(o.alternate,o);break;default:Gu(a,o)}t=t.sibling}}var El=8192;function Il(e,t,a){if(e.subtreeFlags&El)for(e=e.child;e!==null;)z0(e,t,a),e=e.sibling}function z0(e,t,a){switch(e.tag){case 26:Il(e,t,a),e.flags&El&&(e.memoizedState!==null?r_(a,_o,e.memoizedState,e.memoizedProps):(e=e.stateNode,(t&335544128)===t&&IR(a,e)));break;case 5:Il(e,t,a),e.flags&El&&(e=e.stateNode,(t&335544128)===t&&IR(a,e));break;case 3:case 4:var o=_o;_o=rc(e.stateNode.containerInfo),Il(e,t,a),_o=o;break;case 22:e.memoizedState===null&&(o=e.alternate,o!==null&&o.memoizedState!==null?(o=El,El=16777216,Il(e,t,a),El=o):Il(e,t,a));break;case 30:if((e.flags&El)!==0&&(o=e.memoizedProps.name,o!=null&&o!==\\\"auto\\\")){var n=e.stateNode;n.paired=null,Qa===null&&(Qa=new Map),Qa.set(o,n)}Il(e,t,a);break;default:Il(e,t,a)}}function U0(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function wu(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var a=0;a<t.length;a++){var o=t[a];Xt=o,V0(o,e)}U0(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)q0(e),e=e.sibling}function q0(e){switch(e.tag){case 0:case 11:case 15:wu(e),e.flags&2048&&zr(9,e,e.return);break;case 3:wu(e);break;case 12:wu(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,vd(e)):wu(e);break;default:wu(e)}}function vd(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var a=0;a<t.length;a++){var o=t[a];Xt=o,V0(o,e)}U0(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:zr(8,t,t.return),vd(t);break;case 22:a=t.stateNode,a._visibility&2&&(a._visibility&=-3,vd(t));break;default:vd(t)}e=e.sibling}}function V0(e,t){for(;Xt!==null;){var a=Xt;switch(a.tag){case 0:case 11:case 15:zr(8,a,t);break;case 23:case 22:if(a.memoizedState!==null&&a.memoizedState.cachePool!==null){var o=a.memoizedState.cachePool.pool;o!=null&&o.refCount++}break;case 24:gc(a.memoizedState.cache)}if(o=a.child,o!==null)o.return=a,Xt=o;else e:for(a=e;Xt!==null;){o=Xt;var n=o.sibling,r=o.return;if(O0(o),o===a){Xt=null;break e}if(n!==null){n.return=r,Xt=n;break e}Xt=r}}}var aB={getCacheForType:function(e){var t=Jt(Nt),a=t.data.get(e);return a===void 0&&(a=e(),t.data.set(e,a)),a},cacheSignal:function(){return Jt(Nt).controller.signal}},oB=typeof WeakMap==\\\"function\\\"?WeakMap:Map,Ze=0,ut=null,qe=null,Ge=0,Je=0,Ka=null,Rr=!1,Ei=!1,xy=!1,jn=0,kt=0,Ur=0,Nl=0,$d=0,Wa=0,gi=0,Xu=null,Da=null,fb=!1,bp=0,G0=0,Qd=1/0,Wd=null,Dr=null,vt=0,Ho=null,Vl=null,cn=0,db=0,pb=null,X0=null,ii=null,ui=null,ci=null,ju=0,Ld=null;function ao(){return(Ze&2)!==0&&Ge!==0?Ge&-Ge:ve.T!==null?yy():ZR()}function j0(){if(Wa===0)if((Ge&536870912)===0||_e){var e=Xf;Xf<<=1,(Xf&3932160)===0&&(Xf=262144),Wa=e}else Wa=536870912;return e=oa.current,e!==null&&(e.flags|=32),Wa}function hi(e,t){if(t!=null){var a=e.stateNode,o=a.ref;o===null&&(o=a.ref=pw(qn(e.memoizedProps,a))),ui===null&&(ui=[]),ui.push(t.bind(null,o))}}function Ba(e,t,a){(e===ut&&(Je===2||Je===9)||e.cancelPendingCommit!==null)&&(xi(e,0),Ir(e,Ge,Wa,!1)),dc(e,a),((Ze&2)===0||e!==ut)&&(e===ut&&((Ze&2)===0&&(Nl|=a),kt===4&&Ir(e,Ge,Wa,!1)),pn(e))}function Y0(e,t,a){if((Ze&6)!==0)throw Error(F(327));var o=!a&&(t&127)===0&&(t&e.expiredLanes)===0||fc(e,t),n=o?lB(e,t):fx(e,t,!0),r=o;do{if(n===0){Ei&&!o&&Ir(e,t,0,!1);break}else{if(a=e.current.alternate,r&&!nB(a)){n=fx(e,t,!1),r=!1;continue}if(n===2){if(r=t,e.errorRecoveryDisabledLanes&r)var l=0;else l=e.pendingLanes&-536870913,l=l!==0?l:l&536870912?536870912:0;if(l!==0){t=l;e:{var s=e;n=Xu;var i=s.current.memoizedState.isDehydrated;if(i&&(xi(s,l).flags|=256),l=fx(s,l,!1),l!==2&&l!==6){if(xy&&!i){s.errorRecoveryDisabledLanes|=r,Nl|=r,n=4;break e}r=Da,Da=n,r!==null&&(Da===null?Da=r:Da.push.apply(Da,r))}n=l}if(r=!1,n!==2)continue}}if(n===1){xi(e,0),Ir(e,t,0,!0);break}e:{switch(o=e,r=n,r){case 0:case 1:throw Error(F(345));case 4:if((t&4194048)!==t&&(t&62914560)!==t)break;case 6:Ir(o,t,Wa,!Rr);break e;case 2:Da=null;break;case 3:case 5:break;default:throw Error(F(329))}if((t&62914560)===t&&(n=bp+300-Ja(),10<n)){if(Ir(o,t,Wa,!Rr),np(o,0,!0)!==0)break e;cn=t,o.timeoutHandle=Cy(eR.bind(null,o,a,Da,Wd,fb,t,Wa,Nl,gi,Rr,r,\\\"Throttled\\\",-0,0),n);break e}eR(o,a,Da,Wd,fb,t,Wa,Nl,gi,Rr,r,null,-0,0)}}break}while(!0);pn(e)}function eR(e,t,a,o,n,r,l,s,i,u,c,d,f,p){e.timeoutHandle=-1;var h=t.subtreeFlags,b=(r&335544064)===r;if(d=null,(b||h&8192||(h&16785408)===16785408)&&(d={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:rn},Qa=null,z0(t,r,d),b&&(h=d,b=e.containerInfo,b=(b.nodeType===9?b:b.ownerDocument).__reactViewTransition,b!=null&&(h.count++,h.waitingForViewTransition=!0,h=lc.bind(h),b.finished.then(h,h))),h=(r&62914560)===r?bp-Ja():(r&4194048)===r?G0-Ja():0,h=l_(d,h),h!==null)){cn=r,e.cancelPendingCommit=h(aR.bind(null,e,t,r,a,o,n,l,s,i,u,c,d,null,f,p)),Ir(e,r,l,!u);return}aR(e,t,r,a,o,n,l,s,i,u,c,d)}function nB(e){for(var t=e;;){var a=t.tag;if((a===0||a===11||a===15)&&t.flags&16384&&(a=t.updateQueue,a!==null&&(a=a.stores,a!==null)))for(var o=0;o<a.length;o++){var n=a[o],r=n.getSnapshot;n=n.value;try{if(!oo(r(),n))return!1}catch{return!1}}if(a=t.child,t.subtreeFlags&16384&&a!==null)a.return=t,t=a;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Ir(e,t,a,o){t=GR(e,t),t&=~$d,t&=~Nl,e.suspendedLanes|=t,e.pingedLanes&=~t,o&&(e.warmLanes|=t),o=e.expirationTimes;for(var n=t;0<n;){var r=31-to(n),l=1<<r;o[r]=-1,n&=~l}a!==0&&jR(e,a,t)}function yp(){return(Ze&6)===0?(bc(0,!1),!1):!0}function by(){if(qe!==null){if(Je===0)var e=qe.return;else e=qe,Fn=Kl=null,ty(e),ri=null,Ju=0,e=qe;for(;e!==null;)C0(e.alternate,e),e=e.return;qe=null}}function xi(e,t){var a=e.timeoutHandle;return a!==-1&&(e.timeoutHandle=-1,wB(a)),a=e.cancelPendingCommit,a!==null&&(e.cancelPendingCommit=null,a()),cn=0,by(),ut=e,qe=a=Hn(e.current,null),Ge=t,Je=0,Ka=null,Rr=!1,Ei=fc(e,t),xy=!1,gi=Wa=$d=Nl=Ur=kt=0,Da=Xu=null,fb=!1,jn=GR(e,t),up(),a}function K0(e,t){Me=null,ve.H=Gd,t===wi||t===dp?(t=TL(),Je=3):t===Yb?(t=TL(),Je=4):Je=t===uy?8:t!==null&&typeof t==\\\"object\\\"&&typeof t.then==\\\"function\\\"?6:1,Ka=t,qe===null&&(kt=1,Xd(e,So(t,e.current)))}function Z0(){var e=oa.current;return e===null?!0:(Ge&4194048)===Ge?ua===null:(Ge&62914560)===Ge||(Ge&536870912)!==0?e===ua:!1}function $0(){var e=ve.H;return ve.H=Gd,e===null?Gd:e}function Q0(){var e=ve.A;return ve.A=aB,e}function Jd(){kt=4,Rr||(Ge&4194048)!==Ge&&oa.current!==null||(Ei=!0),(Ur&134217727)===0&&(Nl&134217727)===0||ut===null||Ir(ut,Ge,Wa,!1)}function fx(e,t,a){var o=Ze;Ze|=2;var n=$0(),r=Q0();(ut!==e||Ge!==t)&&(Wd=null,xi(e,t)),t=!1;var l=kt;e:do try{if(Je!==0&&qe!==null){var s=qe,i=Ka;switch(Je){case 8:by(),l=6;break e;case 3:case 2:case 9:case 6:oa.current===null&&(t=!0);var u=Je;if(Je=0,Ka=null,ei(e,s,i,u),a&&Ei){l=0;break e}break;default:u=Je,Je=0,Ka=null,ei(e,s,i,u)}}rB(),l=kt;break}catch(c){K0(e,c)}while(!0);return t&&e.shellSuspendCounter++,Fn=Kl=null,Ze=o,ve.H=n,ve.A=r,qe===null&&(ut=null,Ge=0,up()),l}function rB(){for(;qe!==null;)W0(qe)}function lB(e,t){var a=Ze;Ze|=2;var o=$0(),n=Q0();ut!==e||Ge!==t?(Wd=null,Qd=Ja()+500,xi(e,t)):Ei=fc(e,t);e:do try{if(Je!==0&&qe!==null){t=qe;var r=Ka;t:switch(Je){case 1:Je=0,Ka=null,ei(e,t,r,1);break;case 2:case 9:if(wL(r)){Je=0,Ka=null,tR(t);break}t=function(){Je!==2&&Je!==9||ut!==e||(Je=7),pn(e)},r.then(t,t);break e;case 3:Je=7;break e;case 4:Je=5;break e;case 7:wL(r)?(Je=0,Ka=null,tR(t)):(Je=0,Ka=null,ei(e,t,r,7));break;case 5:var l=null;switch(qe.tag){case 26:l=qe.memoizedState;case 5:case 27:var s=qe;if(l?Lw(l):s.stateNode.complete){Je=0,Ka=null;var i=s.sibling;if(i!==null)qe=i;else{var u=s.return;u!==null?(qe=u,Sp(u)):qe=null}break t}}Je=0,Ka=null,ei(e,t,r,5);break;case 6:Je=0,Ka=null,ei(e,t,r,6);break;case 8:by(),kt=6;break e;default:throw Error(F(462))}}sB();break}catch(c){K0(e,c)}while(!0);return Fn=Kl=null,ve.H=o,ve.A=n,Ze=a,qe!==null?0:(ut=null,Ge=0,up(),kt)}function sB(){for(;qe!==null&&!RN();)W0(qe)}function W0(e){var t=S0(e.alternate,e,jn);e.memoizedProps=e.pendingProps,t===null?Sp(e):qe=t}function tR(e){var t=e,a=t.alternate;switch(t.tag){case 15:case 0:t=VL(a,t,t.pendingProps,t.type,void 0,Ge);break;case 11:t=VL(a,t,t.pendingProps,t.type.render,t.ref,Ge);break;case 5:ty(t);var o=t;o===Yt&&(_e?(_d(o),o.tag===5&&o.stateNode!=null&&(gt=o.stateNode)):(_d(o),_e=!0));default:C0(a,t),t=qe=vI(t,jn),t=S0(a,t,jn)}e.memoizedProps=e.pendingProps,t===null?Sp(e):qe=t}function ei(e,t,a,o){Fn=Kl=null,ty(t),ri=null,Ju=0;var n=t.return;try{if(K2(e,n,t,a,Ge)){kt=1,Xd(e,So(a,e.current)),qe=null;return}}catch(r){if(n!==null)throw qe=n,r;kt=1,Xd(e,So(a,e.current)),qe=null;return}t.flags&32768?(_e||o===1?e=!0:Ei||(Ge&536870912)!==0?e=!1:(Rr=e=!0,(o===2||o===9||o===3||o===6)&&(o=oa.current,o!==null&&o.tag===13&&(o.flags|=16384))),J0(t,e)):Sp(t)}function Sp(e){var t=e;do{if((t.flags&32768)!==0){J0(t,Rr);return}e=t.return;var a=W2(t.alternate,t,jn);if(a!==null){qe=a;return}if(t=t.sibling,t!==null){qe=t;return}qe=t=e}while(t!==null);kt===0&&(kt=5)}function J0(e,t){do{var a=J2(e.alternate,e);if(a!==null){a.flags&=32767,qe=a;return}if(a=e.return,a!==null&&(a.flags|=32768,a.subtreeFlags=0,a.deletions=null),!t&&(e=e.sibling,e!==null)){qe=e;return}qe=e=a}while(e!==null);kt=6,qe=null}function aR(e,t,a,o,n,r,l,s,i,u,c,d){e.cancelPendingCommit=null;do Cp();while(vt!==0);if((Ze&6)!==0)throw Error(F(327));if(t!==null){if(t===e.current)throw Error(F(177));e===ut&&(qe=ut=null,Ge=0),Vl=t,Ho=e,cn=a,pb=n,X0=o,iB(e,t,a,l,s,i,d)}}function iB(e,t,a,o,n,r,l){var s=t.lanes|t.childLanes;if(db=s,s|=Ub,PN(e,a,s,o,n,r),ui=null,(a&335544064)===a?(ci=B2(e),o=10262):(ci=null,o=10256),(t.subtreeFlags&o)!==0||(t.flags&o)!==0?(e.callbackNode=null,e.callbackPriority=0,mB(Od,function(){return xb(),null})):(e.callbackNode=null,e.callbackPriority=0),Kd=!1,o=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||o){o=ve.T,ve.T=null,n=$e.p,$e.p=2,r=Ze,Ze|=4;try{eB(e,t,a)}finally{Ze=r,$e.p=n,ve.T=o}}vt=1,Kd?ii=OB(l,e.containerInfo,ci,mb,gb,cB,hb,xb,uB,null,null):(mb(),gb(),hb())}function uB(e){if(vt!==0){var t=Ho.onRecoverableError;t(e,{componentStack:null})}}function cB(){vt===3&&(vt=0,F0(Vl,Ho),vt=4)}function mb(){if(vt===1){vt=0;var e=Ho,t=Vl,a=cn,o=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||o){o=ve.T,ve.T=null;var n=$e.p;$e.p=2;var r=Ze;Ze|=4;try{Du=Zd=!1,B0(t,e,a),a=Cb;var l=mI(e.containerInfo),s=a.focusedElem,i=a.selectionRange;if(l!==s&&s&&s.ownerDocument&&pI(s.ownerDocument.documentElement,s)){if(i!==null&&zb(s)){var u=i.start,c=i.end;if(c===void 0&&(c=u),\\\"selectionStart\\\"in s)s.selectionStart=u,s.selectionEnd=Math.min(c,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=s.textContent.length,b=Math.min(i.start,h),S=i.end===void 0?b:Math.min(i.end,h);!p.extend&&b>S&&(l=S,S=b,b=l);var g=bL(s,b),m=bL(s,S);if(g&&m&&(p.rangeCount!==1||p.anchorNode!==g.node||p.anchorOffset!==g.offset||p.focusNode!==m.node||p.focusOffset!==m.offset)){var x=d.createRange();x.setStart(g.node,g.offset),p.removeAllRanges(),b>S?(p.addRange(x),p.extend(m.node,m.offset)):(x.setEnd(m.node,m.offset),p.addRange(x))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==\\\"function\\\"&&s.focus(),s=0;s<d.length;s++){var y=d[s];y.element.scrollLeft=y.left,y.element.scrollTop=y.top}}vi=!!Sb,Cb=Sb=null}finally{Ze=r,$e.p=n,ve.T=o}}e.current=t,vt=2}}function gb(){if(vt===2){vt=0;var e=Ho,t=Vl,a=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||a){a=ve.T,ve.T=null;var o=$e.p;$e.p=2;var n=Ze;Ze|=4;try{M0(e,t.alternate,t)}finally{Ze=n,$e.p=o,ve.T=a}}vt=3}}function hb(){if(vt===4||vt===3){vt=0;var e=ii;ii=null,IN();var t=Ho,a=Vl,o=cn,n=X0,r=(o&335544064)===o?10262:10256;if((a.subtreeFlags&r)!==0||(a.flags&r)!==0?vt=5:(vt=0,Vl=Ho=null,ew(t,t.pendingLanes)),r=t.pendingLanes,r===0&&(Dr=null),Pb(o),a=a.stateNode,eo&&typeof eo.onCommitFiberRoot==\\\"function\\\")try{eo.onCommitFiberRoot(cc,a,void 0,(a.current.flags&128)===128)}catch{}if(n!==null){a=ve.T,r=$e.p,$e.p=2,ve.T=null;try{for(var l=t.onRecoverableError,s=0;s<n.length;s++){var i=n[s];l(i.value,{componentStack:i.stack})}}finally{ve.T=a,$e.p=r}}if(n=ui,l=ci,ci=null,n!==null&&(ui=null,l===null&&(l=[]),e!==null))for(i=0;i<n.length;i++)a=(0,n[i])(l),a!==void 0&&e.finished.finally(a);(cn&3)!==0&&Cp(),pn(t),r=t.pendingLanes,(o&261930)!==0&&(r&42)!==0?t===Ld?ju++:(ju=0,Ld=t):(ju=0,Ld=null),bc(0,!1)}}function ew(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,gc(t)))}function Cp(){return ii!==null&&(ii.skipTransition(),ii=null),mb(),gb(),hb(),xb()}function xb(){if(vt!==5)return!1;var e=Ho,t=db;db=0;var a=Pb(cn),o=ve.T,n=$e.p;try{$e.p=32>a?32:a,ve.T=null,a=pb,pb=null;var r=Ho,l=cn;if(vt=0,Vl=Ho=null,cn=0,(Ze&6)!==0)throw Error(F(331));var s=Ze;if(Ze|=4,q0(r.current),H0(r,r.current,l,a),Ze=s,bc(0,!1),eo&&typeof eo.onPostCommitFiberRoot==\\\"function\\\")try{eo.onPostCommitFiberRoot(cc,r)}catch{}return!0}finally{$e.p=n,ve.T=o,ew(e,t)}}function oR(e,t,a){t=So(a,t),t=$x(e.stateNode,t,2),e=Mr(e,t,2),e!==null&&(dc(e,2),pn(e))}function tt(e,t,a){if(e.tag===3)oR(e,e,a);else for(;t!==null;){if(t.tag===3){oR(t,e,a);break}else if(t.tag===1){var o=t.stateNode;if(typeof t.type.getDerivedStateFromError==\\\"function\\\"||typeof o.componentDidCatch==\\\"function\\\"&&(Dr===null||!Dr.has(o))){e=So(a,e),a=g0(2),o=Mr(t,a,2),o!==null&&(h0(a,o,t,e),dc(o,2),pn(o));break}}t=t.return}}function dx(e,t,a){var o=e.pingCache;if(o===null){o=e.pingCache=new oB;var n=new Set;o.set(t,n)}else n=o.get(t),n===void 0&&(n=new Set,o.set(t,n));n.has(a)||(xy=!0,n.add(a),e=fB.bind(null,e,t,a),t.then(e,e))}function fB(e,t,a){var o=e.pingCache;o!==null&&o.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,ut===e&&(Ge&a)===a&&((kt===4||kt===3&&(Ge&62914560)===Ge&&300>Ja()-bp)&&(Ze&2)===0?xi(e,0):$d|=a,gi===Ge&&(gi=0)),pn(e)}function tw(e,t){t===0&&(t=XR()),e=Yl(e,t),e!==null&&(dc(e,t),pn(e))}function dB(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),tw(e,a)}function pB(e,t){var a=0;switch(e.tag){case 31:case 13:var o=e.stateNode,n=e.memoizedState;n!==null&&(a=n.retryLane);break;case 19:o=e.stateNode;break;case 22:o=e.stateNode._retryCache;break;default:throw Error(F(314))}o!==null&&o.delete(t),tw(e,a)}function mB(e,t){return Ob(e,t)}var bi=null,qs=null,bb=!1,ep=!1,px=!1,wr=0;function pn(e){e!==qs&&e.next===null&&(qs===null?bi=qs=e:qs=qs.next=e),ep=!0,bb||(bb=!0,hB())}function bc(e,t){if(!px&&ep){px=!0;do for(var a=!1,o=bi;o!==null;){if(!t)if(e!==0){var n=o.pendingLanes;if(n===0)var r=0;else{var l=o.suspendedLanes,s=o.pingedLanes;r=(1<<31-to(42|e)+1)-1,r&=n&~(l&~s),r=r&201326741?r&201326741|1:r?r|2:0}r!==0&&(a=!0,nR(o,r))}else r=Ge,r=np(o,o===ut?r:0,o.cancelPendingCommit!==null||o.timeoutHandle!==-1),(r&3)===0||fc(o,r)||(a=!0,nR(o,r));o=o.next}while(a);px=!1}}function gB(){aw()}function aw(){ep=bb=!1;var e=0;wr!==0&&IB()&&(e=wr);for(var t=Ja(),a=null,o=bi;o!==null;){var n=o.next,r=ow(o,t);r===0?(o.next=null,a===null?bi=n:a.next=n,n===null&&(qs=a)):(a=o,(e!==0||(r&3)!==0)&&(ep=!0)),o=n}vt!==0&&vt!==5||bc(e,!1),wr!==0&&(wr=0)}function ow(e,t){for(var a=e.suspendedLanes,o=e.pingedLanes,n=e.expirationTimes,r=e.pendingLanes&-62914561;0<r;){var l=31-to(r),s=1<<l,i=n[l];i===-1?((s&a)===0||(s&o)!==0)&&(n[l]=DN(s,t)):i<=t&&(e.expiredLanes|=s),r&=~s}if(t=ut,a=Ge,a=np(e,e===t?a:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),o=e.callbackNode,a===0||e===t&&(Je===2||Je===9)||e.cancelPendingCommit!==null)return o!==null&&o!==null&&Xh(o),e.callbackNode=null,e.callbackPriority=0;if((a&3)===0||fc(e,a)){if(t=a&-a,t===e.callbackPriority)return t;switch(o!==null&&Xh(o),Pb(a)){case 2:case 8:a=qR;break;case 32:a=Od;break;case 268435456:a=VR;break;default:a=Od}return o=nw.bind(null,e),a=Ob(a,o),e.callbackPriority=t,e.callbackNode=a,t}return o!==null&&o!==null&&Xh(o),e.callbackPriority=2,e.callbackNode=null,2}function nw(e,t){if(vt!==0&&vt!==5)return e.callbackNode=null,e.callbackPriority=0,null;var a=e.callbackNode;if(Cp()&&e.callbackNode!==a)return null;var o=Ge;return o=np(e,e===ut?o:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),o===0?null:(Y0(e,o,t),ow(e,Ja()),e.callbackNode!=null&&e.callbackNode===a?nw.bind(null,e):null)}function nR(e,t){if(Cp())return null;Y0(e,t,!0)}function hB(){TB(function(){(Ze&6)!==0?Ob(UR,gB):aw()})}function yy(){if(wr===0){var e=Hl;e===0&&(e=Gf,Gf<<=1,(Gf&261888)===0&&(Gf=256)),wr=e}return wr}function rR(e){return e==null||typeof e==\\\"symbol\\\"||typeof e==\\\"boolean\\\"?null:typeof e==\\\"function\\\"?e:fd(e)}function xB(e,t,a,o,n){if(t===\\\"submit\\\"&&a&&a.stateNode===n){var r=rR((n[Fa]||null).action),l=o.submitter;l&&(t=(t=l[Fa]||null)?rR(t.formAction):l.getAttribute(\\\"formAction\\\"),t!==null&&(r=t,l=null));var s=new lp(\\\"action\\\",\\\"action\\\",null,o,n);e.push({event:s,listeners:[{instance:null,listener:function(){if(o.defaultPrevented){if(wr!==0){var i=new FormData(n,l);Kx(a,{pending:!0,data:i,method:n.method,action:r},null,i)}}else typeof r==\\\"function\\\"&&(s.preventDefault(),i=new FormData(n,l),Kx(a,{pending:!0,data:i,method:n.method,action:r},r,i))},currentTarget:n}]})}}for(rd=0;rd<_x.length;rd++)ld=_x[rd],lR=ld.toLowerCase(),sR=ld[0].toUpperCase()+ld.slice(1),zo(lR,\\\"on\\\"+sR);var ld,lR,sR,rd;zo(hI,\\\"onAnimationEnd\\\");zo(xI,\\\"onAnimationIteration\\\");zo(bI,\\\"onAnimationStart\\\");zo(\\\"dblclick\\\",\\\"onDoubleClick\\\");zo(\\\"focusin\\\",\\\"onFocus\\\");zo(\\\"focusout\\\",\\\"onBlur\\\");zo(E2,\\\"onTransitionRun\\\");zo(k2,\\\"onTransitionStart\\\");zo(M2,\\\"onTransitionCancel\\\");zo(yI,\\\"onTransitionEnd\\\");di(\\\"onMouseEnter\\\",[\\\"mouseout\\\",\\\"mouseover\\\"]);di(\\\"onMouseLeave\\\",[\\\"mouseout\\\",\\\"mouseover\\\"]);di(\\\"onPointerEnter\\\",[\\\"pointerout\\\",\\\"pointerover\\\"]);di(\\\"onPointerLeave\\\",[\\\"pointerout\\\",\\\"pointerover\\\"]);Xl(\\\"onChange\\\",\\\"change click focusin focusout input keydown keyup selectionchange\\\".split(\\\" \\\"));Xl(\\\"onSelect\\\",\\\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\\\".split(\\\" \\\"));Xl(\\\"onBeforeInput\\\",[\\\"compositionend\\\",\\\"keypress\\\",\\\"textInput\\\",\\\"paste\\\"]);Xl(\\\"onCompositionEnd\\\",\\\"compositionend focusout keydown keypress keyup mousedown\\\".split(\\\" \\\"));Xl(\\\"onCompositionStart\\\",\\\"compositionstart focusout keydown keypress keyup mousedown\\\".split(\\\" \\\"));Xl(\\\"onCompositionUpdate\\\",\\\"compositionupdate focusout keydown keypress keyup mousedown\\\".split(\\\" \\\"));var ac=\\\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\\\".split(\\\" \\\"),bB=new Set(\\\"beforetoggle cancel close invalid load scroll scrollend toggle\\\".split(\\\" \\\").concat(ac));function rw(e,t){t=(t&4)!==0;for(var a=0;a<e.length;a++){var o=e[a],n=o.event;o=o.listeners;e:{var r=void 0;if(t)for(var l=o.length-1;0<=l;l--){var s=o[l],i=s.instance,u=s.currentTarget;if(s=s.listener,i!==r&&n.isPropagationStopped())break e;r=s,n.currentTarget=u;try{r(n)}catch(c){Pd(c)}n.currentTarget=null,r=i}else for(l=0;l<o.length;l++){if(s=o[l],i=s.instance,u=s.currentTarget,s=s.listener,i!==r&&n.isPropagationStopped())break e;r=s,n.currentTarget=u;try{r(n)}catch(c){Pd(c)}n.currentTarget=null,r=i}}}}function Ue(e,t){var a=t[tL];a===void 0&&(a=t[tL]=new Set);var o=e+\\\"__bubble\\\";a.has(o)||(lw(t,e,2,!1),a.add(o))}function mx(e,t,a){var o=0;t&&(o|=4),lw(a,e,o,t)}var sd=\\\"_reactListening\\\"+Math.random().toString(36).slice(2);function Sy(e){if(!e[sd]){e[sd]=!0,QR.forEach(function(a){a!==\\\"selectionchange\\\"&&(bB.has(a)||mx(a,!1,e),mx(a,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[sd]||(t[sd]=!0,mx(\\\"selectionchange\\\",!1,t))}}function lw(e,t,a,o){switch(Mw(t)){case 2:var n=c_;break;case 8:n=f_;break;default:n=Ty}a=n.bind(null,t,a,e),n=void 0,!Dx||t!==\\\"touchstart\\\"&&t!==\\\"touchmove\\\"&&t!==\\\"wheel\\\"||(n=!0),o?n!==void 0?e.addEventListener(t,a,{capture:!0,passive:n}):e.addEventListener(t,a,!0):n!==void 0?e.addEventListener(t,a,{passive:n}):e.addEventListener(t,a,!1)}function gx(e,t,a,o,n){var r=o;if((t&1)===0&&(t&2)===0&&o!==null)e:for(;;){if(o===null)return;var l=o.tag;if(l===3||l===4){var s=o.stateNode.containerInfo;if(s===n)break;if(l===4)for(l=o.return;l!==null;){var i=l.tag;if((i===3||i===4)&&l.stateNode.containerInfo===n)return;l=l.return}for(;s!==null;){if(l=kl(s),l===null)return;if(i=l.tag,i===5||i===6||i===26||i===27){o=r=l;continue e}s=s.parentNode}}o=o.return}rI(function(){var u=r,c=Bb(a),d=[];e:{var f=SI.get(e);if(f!==void 0){var p=lp,h=e;switch(e){case\\\"keypress\\\":if(pd(a)===0)break e;case\\\"keydown\\\":case\\\"keyup\\\":p=n2;break;case\\\"focusin\\\":h=\\\"focus\\\",p=Qh;break;case\\\"focusout\\\":h=\\\"blur\\\",p=Qh;break;case\\\"beforeblur\\\":case\\\"afterblur\\\":p=Qh;break;case\\\"click\\\":if(a.button===2)break e;case\\\"auxclick\\\":case\\\"dblclick\\\":case\\\"mousedown\\\":case\\\"mousemove\\\":case\\\"mouseup\\\":case\\\"mouseout\\\":case\\\"mouseover\\\":case\\\"contextmenu\\\":p=uL;break;case\\\"drag\\\":case\\\"dragend\\\":case\\\"dragenter\\\":case\\\"dragexit\\\":case\\\"dragleave\\\":case\\\"dragover\\\":case\\\"dragstart\\\":case\\\"drop\\\":p=jN;break;case\\\"touchcancel\\\":case\\\"touchend\\\":case\\\"touchmove\\\":case\\\"touchstart\\\":p=u2;break;case hI:case xI:case bI:p=ZN;break;case yI:p=f2;break;case\\\"scroll\\\":case\\\"scrollend\\\":p=GN;break;case\\\"wheel\\\":p=p2;break;case\\\"copy\\\":case\\\"cut\\\":case\\\"paste\\\":p=QN;break;case\\\"gotpointercapture\\\":case\\\"lostpointercapture\\\":case\\\"pointercancel\\\":case\\\"pointerdown\\\":case\\\"pointermove\\\":case\\\"pointerout\\\":case\\\"pointerover\\\":case\\\"pointerup\\\":p=fL;break;case\\\"submit\\\":p=s2;break;case\\\"toggle\\\":case\\\"beforetoggle\\\":p=g2}var b=(t&4)!==0,S=!b&&(e===\\\"scroll\\\"||e===\\\"scrollend\\\"),g=b?f!==null?f+\\\"Capture\\\":null:f;b=[];for(var m=u,x;m!==null;){var y=m;if(x=y.stateNode,y=y.tag,y!==5&&y!==26&&y!==27||x===null||g===null||(y=Ku(m,g),y!=null&&b.push(oc(m,y,x))),S)break;m=m.return}0<b.length&&(f=new p(f,h,null,a,c),d.push({event:f,listeners:b}))}}if((t&7)===0){e:{if(p=e===\\\"mouseover\\\"||e===\\\"pointerover\\\",f=e===\\\"mouseout\\\"||e===\\\"pointerout\\\",p&&a!==Ox&&(h=a.relatedTarget||a.fromElement)&&(kl(h)||h[Ri]))break e;(f||p)&&(h=c.window===c?c:(p=c.ownerDocument)?p.defaultView||p.parentWindow:window,f?(p=a.relatedTarget||a.toElement,f=u,p=p?kl(p):null,p!==null&&(S=uc(p),b=p.tag,p!==S||b!==5&&b!==27&&b!==6)&&(p=null)):(f=null,p=u),f!==p&&(b=uL,y=\\\"onMouseLeave\\\",g=\\\"onMouseEnter\\\",m=\\\"mouse\\\",(e===\\\"pointerout\\\"||e===\\\"pointerover\\\")&&(b=fL,y=\\\"onPointerLeave\\\",g=\\\"onPointerEnter\\\",m=\\\"pointer\\\"),S=f==null?h:Au(f),x=p==null?h:Au(p),h=new b(y,m+\\\"leave\\\",f,a,c),h.target=S,h.relatedTarget=x,y=null,kl(c)===u&&(b=new b(g,m+\\\"enter\\\",p,a,c),b.target=x,b.relatedTarget=S,y=b),S=y,b=f&&p?Sx(f,p,yB):null,f!==null&&iR(d,h,f,b,!1),p!==null&&S!==null&&iR(d,S,p,b,!0)))}e:{if(f=u?Au(u):window,p=f.nodeName&&f.nodeName.toLowerCase(),p===\\\"select\\\"||p===\\\"input\\\"&&f.type===\\\"file\\\")var L=gL;else if(mL(f))if(fI)L=I2;else{L=L2;var I=v2}else p=f.nodeName,!p||p.toLowerCase()!==\\\"input\\\"||f.type!==\\\"checkbox\\\"&&f.type!==\\\"radio\\\"?u&&Nb(u.elementType)&&(L=gL):L=R2;if(L&&(L=L(e,u))){cI(d,L,a,c);break e}I&&I(e,f,u)}switch(I=u?Au(u):window,e){case\\\"focusin\\\":(mL(I)||I.contentEditable===\\\"true\\\")&&(Ks=I,Nx=u,Bu=null);break;case\\\"focusout\\\":Bu=Nx=Ks=null;break;case\\\"mousedown\\\":Bx=!0;break;case\\\"contextmenu\\\":case\\\"mouseup\\\":case\\\"dragend\\\":Bx=!1,yL(d,a,c);break;case\\\"selectionchange\\\":if(T2)break;case\\\"keydown\\\":case\\\"keyup\\\":yL(d,a,c)}var R;if(Hb)e:{switch(e){case\\\"compositionstart\\\":var C=\\\"onCompositionStart\\\";break e;case\\\"compositionend\\\":C=\\\"onCompositionEnd\\\";break e;case\\\"compositionupdate\\\":C=\\\"onCompositionUpdate\\\";break e}C=void 0}else Ys?iI(e,a)&&(C=\\\"onCompositionEnd\\\"):e===\\\"keydown\\\"&&a.keyCode===229&&(C=\\\"onCompositionStart\\\");C&&(sI&&a.locale!==\\\"ko\\\"&&(Ys||C!==\\\"onCompositionStart\\\"?C===\\\"onCompositionEnd\\\"&&Ys&&(R=lI()):(vr=c,_b=\\\"value\\\"in vr?vr.value:vr.textContent,Ys=!0)),I=tp(u,C),0<I.length&&(C=new cL(C,e,null,a,c),d.push({event:C,listeners:I}),R?C.data=R:(R=uI(a),R!==null&&(C.data=R)))),(R=x2?b2(e,a):y2(e,a))&&(C=tp(u,\\\"onBeforeInput\\\"),0<C.length&&(I=new cL(\\\"onBeforeInput\\\",\\\"beforeinput\\\",null,a,c),d.push({event:I,listeners:C}),I.data=R)),xB(d,e,u,a,c)}rw(d,t)})}function oc(e,t,a){return{instance:e,listener:t,currentTarget:a}}function tp(e,t){for(var a=t+\\\"Capture\\\",o=[];e!==null;){var n=e,r=n.stateNode;if(n=n.tag,n!==5&&n!==26&&n!==27||r===null||(n=Ku(e,a),n!=null&&o.unshift(oc(e,n,r)),n=Ku(e,t),n!=null&&o.push(oc(e,n,r))),e.tag===3)return o;e=e.return}return[]}function yB(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function iR(e,t,a,o,n){for(var r=t._reactName,l=[];a!==null&&a!==o;){var s=a,i=s.alternate,u=s.stateNode;if(s=s.tag,i!==null&&i===o)break;s!==5&&s!==26&&s!==27||u===null||(i=u,n?(u=Ku(a,r),u!=null&&l.unshift(oc(a,u,i))):n||(u=Ku(a,r),u!=null&&l.push(oc(a,u,i)))),a=a.return}l.length!==0&&e.push({event:t,listeners:l})}var SB=/\\\\r\\\\n?/g,CB=/\\\\u0000|\\\\uFFFD/g;function uR(e){return(typeof e==\\\"string\\\"?e:\\\"\\\"+e).replace(SB,`\\n`).replace(CB,\\\"\\\")}function sw(e,t){return t=uR(t),uR(e)===t}function et(e,t,a,o,n,r){switch(a){case\\\"children\\\":if(typeof o==\\\"string\\\")t===\\\"body\\\"||t===\\\"textarea\\\"&&o===\\\"\\\"||pi(e,o);else if(typeof o==\\\"number\\\"||typeof o==\\\"bigint\\\")t!==\\\"body\\\"&&pi(e,\\\"\\\"+o);else return;break;case\\\"className\\\":Yf(e,\\\"class\\\",o);break;case\\\"tabIndex\\\":Yf(e,\\\"tabindex\\\",o);break;case\\\"dir\\\":case\\\"role\\\":case\\\"viewBox\\\":case\\\"width\\\":case\\\"height\\\":Yf(e,a,o);break;case\\\"style\\\":nI(e,o,r);return;case\\\"data\\\":if(t!==\\\"object\\\"){Yf(e,\\\"data\\\",o);break}case\\\"src\\\":case\\\"href\\\":if(o===\\\"\\\"&&(t!==\\\"a\\\"||a!==\\\"href\\\")){e.removeAttribute(a);break}if(o==null||typeof o==\\\"function\\\"||typeof o==\\\"symbol\\\"||typeof o==\\\"boolean\\\"){e.removeAttribute(a);break}o=fd(o),e.setAttribute(a,o);break;case\\\"action\\\":case\\\"formAction\\\":if(typeof o==\\\"function\\\"){e.setAttribute(a,\\\"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\\\");break}else typeof r==\\\"function\\\"&&(a===\\\"formAction\\\"?(t!==\\\"input\\\"&&et(e,t,\\\"name\\\",n.name,n,null),et(e,t,\\\"formEncType\\\",n.formEncType,n,null),et(e,t,\\\"formMethod\\\",n.formMethod,n,null),et(e,t,\\\"formTarget\\\",n.formTarget,n,null)):(et(e,t,\\\"encType\\\",n.encType,n,null),et(e,t,\\\"method\\\",n.method,n,null),et(e,t,\\\"target\\\",n.target,n,null)));if(o==null||typeof o==\\\"symbol\\\"||typeof o==\\\"boolean\\\"){e.removeAttribute(a);break}o=fd(o),e.setAttribute(a,o);break;case\\\"onClick\\\":o!=null&&(e.onclick=rn);return;case\\\"onScroll\\\":o!=null&&Ue(\\\"scroll\\\",e);return;case\\\"onScrollEnd\\\":o!=null&&Ue(\\\"scrollend\\\",e);return;case\\\"dangerouslySetInnerHTML\\\":if(o!=null){if(typeof o!=\\\"object\\\"||!(\\\"__html\\\"in o))throw Error(F(61));if(a=o.__html,a!=null){if(n.children!=null)throw Error(F(60));r?.__html!==a&&(e.innerHTML=a)}}break;case\\\"multiple\\\":e.multiple=o&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\";break;case\\\"muted\\\":e.muted=o&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\";break;case\\\"suppressContentEditableWarning\\\":case\\\"suppressHydrationWarning\\\":case\\\"defaultValue\\\":case\\\"defaultChecked\\\":case\\\"innerHTML\\\":case\\\"ref\\\":break;case\\\"autoFocus\\\":break;case\\\"xlinkHref\\\":if(o==null||typeof o==\\\"function\\\"||typeof o==\\\"boolean\\\"||typeof o==\\\"symbol\\\"){e.removeAttribute(\\\"xlink:href\\\");break}a=fd(o),e.setAttributeNS(\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:href\\\",a);break;case\\\"contentEditable\\\":case\\\"spellCheck\\\":case\\\"draggable\\\":case\\\"value\\\":case\\\"autoReverse\\\":case\\\"externalResourcesRequired\\\":case\\\"focusable\\\":case\\\"preserveAlpha\\\":o!=null&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\"?e.setAttribute(a,o):e.removeAttribute(a);break;case\\\"inert\\\":case\\\"allowFullScreen\\\":case\\\"async\\\":case\\\"autoPlay\\\":case\\\"controls\\\":case\\\"credentialless\\\":case\\\"default\\\":case\\\"defer\\\":case\\\"disabled\\\":case\\\"disablePictureInPicture\\\":case\\\"disableRemotePlayback\\\":case\\\"formNoValidate\\\":case\\\"hidden\\\":case\\\"loop\\\":case\\\"noModule\\\":case\\\"noValidate\\\":case\\\"open\\\":case\\\"playsInline\\\":case\\\"readOnly\\\":case\\\"required\\\":case\\\"reversed\\\":case\\\"scoped\\\":case\\\"seamless\\\":case\\\"itemScope\\\":o&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\"?e.setAttribute(a,\\\"\\\"):e.removeAttribute(a);break;case\\\"capture\\\":case\\\"download\\\":o===!0?e.setAttribute(a,\\\"\\\"):o!==!1&&o!=null&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\"?e.setAttribute(a,o):e.removeAttribute(a);break;case\\\"cols\\\":case\\\"rows\\\":case\\\"size\\\":case\\\"span\\\":o!=null&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\"&&!isNaN(o)&&1<=o?e.setAttribute(a,o):e.removeAttribute(a);break;case\\\"rowSpan\\\":case\\\"start\\\":o==null||typeof o==\\\"function\\\"||typeof o==\\\"symbol\\\"||isNaN(o)?e.removeAttribute(a):e.setAttribute(a,o);break;case\\\"popover\\\":Ue(\\\"beforetoggle\\\",e),Ue(\\\"toggle\\\",e),cd(e,\\\"popover\\\",o);break;case\\\"xlinkActuate\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:actuate\\\",o);break;case\\\"xlinkArcrole\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:arcrole\\\",o);break;case\\\"xlinkRole\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:role\\\",o);break;case\\\"xlinkShow\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:show\\\",o);break;case\\\"xlinkTitle\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:title\\\",o);break;case\\\"xlinkType\\\":Nn(e,\\\"http://www.w3.org/1999/xlink\\\",\\\"xlink:type\\\",o);break;case\\\"xmlBase\\\":Nn(e,\\\"http://www.w3.org/XML/1998/namespace\\\",\\\"xml:base\\\",o);break;case\\\"xmlLang\\\":Nn(e,\\\"http://www.w3.org/XML/1998/namespace\\\",\\\"xml:lang\\\",o);break;case\\\"xmlSpace\\\":Nn(e,\\\"http://www.w3.org/XML/1998/namespace\\\",\\\"xml:space\\\",o);break;case\\\"is\\\":cd(e,\\\"is\\\",o);break;case\\\"innerText\\\":case\\\"textContent\\\":return;default:if(!(2<a.length)||a[0]!==\\\"o\\\"&&a[0]!==\\\"O\\\"||a[1]!==\\\"n\\\"&&a[1]!==\\\"N\\\")a=qN.get(a)||a,cd(e,a,o);else return}je=!0}function yb(e,t,a,o,n,r){switch(a){case\\\"style\\\":nI(e,o,r);return;case\\\"dangerouslySetInnerHTML\\\":if(o!=null){if(typeof o!=\\\"object\\\"||!(\\\"__html\\\"in o))throw Error(F(61));if(a=o.__html,a!=null){if(n.children!=null)throw Error(F(60));r?.__html!==a&&(e.innerHTML=a)}}break;case\\\"children\\\":if(typeof o==\\\"string\\\")pi(e,o);else if(typeof o==\\\"number\\\"||typeof o==\\\"bigint\\\")pi(e,\\\"\\\"+o);else return;break;case\\\"onScroll\\\":o!=null&&Ue(\\\"scroll\\\",e);return;case\\\"onScrollEnd\\\":o!=null&&Ue(\\\"scrollend\\\",e);return;case\\\"onClick\\\":o!=null&&(e.onclick=rn);return;case\\\"suppressContentEditableWarning\\\":case\\\"suppressHydrationWarning\\\":case\\\"innerHTML\\\":case\\\"ref\\\":return;case\\\"innerText\\\":case\\\"textContent\\\":return;default:if(!WR.hasOwnProperty(a))e:{if(a[0]===\\\"o\\\"&&a[1]===\\\"n\\\"&&(n=a.endsWith(\\\"Capture\\\"),r=a.slice(2,n?a.length-7:void 0),t=e[Fa]||null,t=t!=null?t[a]:null,typeof t==\\\"function\\\"&&e.removeEventListener(r,t,n),typeof o==\\\"function\\\")){typeof t!=\\\"function\\\"&&t!==null&&(a in e?e[a]=null:e.hasAttribute(a)&&e.removeAttribute(a)),e.addEventListener(r,o,n);break e}je=!0,a in e?e[a]=o:o===!0?e.setAttribute(a,\\\"\\\"):cd(e,a,o)}return}je=!0}function aa(e,t,a){switch(t){case\\\"div\\\":case\\\"span\\\":case\\\"svg\\\":case\\\"path\\\":case\\\"a\\\":case\\\"g\\\":case\\\"p\\\":case\\\"li\\\":break;case\\\"img\\\":Ue(\\\"error\\\",e),Ue(\\\"load\\\",e);var o=!1,n=!1,r;for(r in a)if(a.hasOwnProperty(r)){var l=a[r];if(l!=null)switch(r){case\\\"src\\\":o=!0;break;case\\\"srcSet\\\":n=!0;break;case\\\"children\\\":case\\\"dangerouslySetInnerHTML\\\":throw Error(F(137,t));default:et(e,t,r,l,a,null)}}n&&et(e,t,\\\"srcSet\\\",a.srcSet,a,null),o&&et(e,t,\\\"src\\\",a.src,a,null);return;case\\\"input\\\":Ue(\\\"invalid\\\",e);var s=r=l=n=null,i=null,u=null;for(o in a)if(a.hasOwnProperty(o)){var c=a[o];if(c!=null)switch(o){case\\\"name\\\":n=c;break;case\\\"type\\\":l=c;break;case\\\"checked\\\":i=c;break;case\\\"defaultChecked\\\":u=c;break;case\\\"value\\\":r=c;break;case\\\"defaultValue\\\":s=c;break;case\\\"children\\\":case\\\"dangerouslySetInnerHTML\\\":if(c!=null)throw Error(F(137,t));break;default:et(e,t,o,c,a,null)}}tI(e,r,s,i,u,l,n,!1);return;case\\\"select\\\":Ue(\\\"invalid\\\",e),o=l=r=null;for(n in a)if(a.hasOwnProperty(n)&&(s=a[n],s!=null))switch(n){case\\\"value\\\":r=s;break;case\\\"defaultValue\\\":l=s;break;case\\\"multiple\\\":o=s;default:et(e,t,n,s,a,null)}t=r,a=l,e.multiple=!!o,t!=null?ai(e,!!o,t,!1):a!=null&&ai(e,!!o,a,!0);return;case\\\"textarea\\\":Ue(\\\"invalid\\\",e),r=n=o=null;for(l in a)if(a.hasOwnProperty(l)&&(s=a[l],s!=null))switch(l){case\\\"value\\\":o=s;break;case\\\"defaultValue\\\":n=s;break;case\\\"children\\\":r=s;break;case\\\"dangerouslySetInnerHTML\\\":if(s!=null)throw Error(F(91));break;default:et(e,t,l,s,a,null)}oI(e,o,n,r);return;case\\\"option\\\":for(i in a)a.hasOwnProperty(i)&&(o=a[i],o!=null)&&(i===\\\"selected\\\"?e.selected=o&&typeof o!=\\\"function\\\"&&typeof o!=\\\"symbol\\\":et(e,t,i,o,a,null));return;case\\\"dialog\\\":Ue(\\\"beforetoggle\\\",e),Ue(\\\"toggle\\\",e),Ue(\\\"cancel\\\",e),Ue(\\\"close\\\",e);break;case\\\"iframe\\\":case\\\"object\\\":Ue(\\\"load\\\",e);break;case\\\"video\\\":case\\\"audio\\\":for(o=0;o<ac.length;o++)Ue(ac[o],e);break;case\\\"image\\\":Ue(\\\"error\\\",e),Ue(\\\"load\\\",e);break;case\\\"details\\\":Ue(\\\"toggle\\\",e);break;case\\\"embed\\\":case\\\"source\\\":case\\\"link\\\":Ue(\\\"error\\\",e),Ue(\\\"load\\\",e);case\\\"area\\\":case\\\"base\\\":case\\\"br\\\":case\\\"col\\\":case\\\"hr\\\":case\\\"keygen\\\":case\\\"meta\\\":case\\\"param\\\":case\\\"track\\\":case\\\"wbr\\\":case\\\"menuitem\\\":for(u in a)if(a.hasOwnProperty(u)&&(o=a[u],o!=null))switch(u){case\\\"children\\\":case\\\"dangerouslySetInnerHTML\\\":throw Error(F(137,t));default:et(e,t,u,o,a,null)}return;default:if(Nb(t)){for(c in a)a.hasOwnProperty(c)&&(o=a[c],o!==void 0&&yb(e,t,c,o,a,void 0));return}}for(s in a)a.hasOwnProperty(s)&&(o=a[s],o!=null&&et(e,t,s,o,a,null))}var vB={};function LB(e,t,a,o){switch(t){case\\\"div\\\":case\\\"span\\\":case\\\"svg\\\":case\\\"path\\\":case\\\"a\\\":case\\\"g\\\":case\\\"p\\\":case\\\"li\\\":break;case\\\"input\\\":var n=null,r=null,l=null,s=null,i=null,u=null,c=null;for(p in a){var d=a[p];if(a.hasOwnProperty(p)&&d!=null)switch(p){case\\\"checked\\\":break;case\\\"value\\\":break;case\\\"defaultValue\\\":i=d;default:o.hasOwnProperty(p)||et(e,t,p,null,o,d)}}for(var f in o){var p=o[f];if(d=a[f],o.hasOwnProperty(f)&&(p!=null||d!=null))switch(f){case\\\"type\\\":p!==d&&(je=!0),r=p;break;case\\\"name\\\":p!==d&&(je=!0),n=p;break;case\\\"checked\\\":p!==d&&(je=!0),u=p;break;case\\\"defaultChecked\\\":p!==d&&(je=!0),c=p;break;case\\\"value\\\":p!==d&&(je=!0),l=p;break;case\\\"defaultValue\\\":p!==d&&(je=!0),s=p;break;case\\\"children\\\":case\\\"dangerouslySetInnerHTML\\\":if(p!=null)throw Error(F(137,t));break;default:p!==d&&et(e,t,f,p,o,d)}}Ax(e,l,s,i,u,c,r,n);return;case\\\"select\\\":p=l=s=f=null;for(r in a)if(i=a[r],a.hasOwnProperty(r)&&i!=null)switch(r){case\\\"value\\\":break;case\\\"multiple\\\":p=i;default:o.hasOwnProperty(r)||et(e,t,r,null,o,i)}for(n in o)if(r=o[n],i=a[n],o.hasOwnProperty(n)&&(r!=null||i!=null))switch(n){case\\\"value\\\":r!==i&&(je=!0),f=r;break;case\\\"defaultValue\\\":r!==i&&(je=!0),s=r;break;case\\\"multiple\\\":r!==i&&(je=!0),l=r;default:r!==i&&et(e,t,n,r,o,i)}t=s,a=l,o=p,f!=null?ai(e,!!a,f,!1):!!o!=!!a&&(t!=null?ai(e,!!a,t,!0):ai(e,!!a,a?[]:\\\"\\\",!1));return;case\\\"textarea\\\":p=f=null;for(s in a)if(n=a[s],a.hasOwnProperty(s)&&n!=null&&!o.hasOwnProperty(s))switch(s){case\\\"value\\\":break;case\\\"children\\\":break;default:et(e,t,s,null,o,n)}for(l in o)if(n=o[l],r=a[l],o.hasOwnProperty(l)&&(n!=null||r!=null))switch(l){case\\\"value\\\":n!==r&&(je=!0),f=n;break;case\\\"defaultValue\\\":n!==r&&(je=!0),p=n;break;case\\\"children\\\":break;case\\\"dangerouslySetInnerHTML\\\":if(n!=null)throw Error(F(91));break;default:n!==r&&et(e,t,l,n,o,r)}aI(e,f,p);return;case\\\"option\\\":for(var h in a)f=a[h],a.hasOwnProperty(h)&&f!=null&&!o.hasOwnProperty(h)&&(h===\\\"selected\\\"?e.selected=!1:et(e,t,h,null,o,f));for(i in o)f=o[i],p=a[i],o.hasOwnProperty(i)&&f!==p&&(f!=null||p!=null)&&(i===\\\"selected\\\"?(f!==p&&(je=!0),e.selected=f&&typeof f!=\\\"function\\\"&&typeof f!=\\\"symbol\\\"):et(e,t,i,f,o,p));return;case\\\"img\\\":case\\\"link\\\":case\\\"area\\\":case\\\"base\\\":case\\\"br\\\":case\\\"col\\\":case\\\"embed\\\":case\\\"hr\\\":case\\\"keygen\\\":case\\\"meta\\\":case\\\"param\\\":case\\\"source\\\":case\\\"track\\\":case\\\"wbr\\\":case\\\"menuitem\\\":for(var b in a)f=a[b],a.hasOwnProperty(b)&&f!=null&&!o.hasOwnProperty(b)&&et(e,t,b,null,o,f);for(u in o)if(f=o[u],p=a[u],o.hasOwnProperty(u)&&f!==p&&(f!=null||p!=null))switch(u){case\\\"children\\\":case\\\"dangerouslySetInnerHTML\\\":if(f!=null)throw Error(F(137,t));break;default:et(e,t,u,f,o,p)}return;default:if(Nb(t)){for(var S in a)f=a[S],a.hasOwnProperty(S)&&f!==void 0&&!o.hasOwnProperty(S)&&yb(e,t,S,void 0,o,f);for(c in o)f=o[c],p=a[c],!o.hasOwnProperty(c)||f===p||f===void 0&&p===void 0||yb(e,t,c,f,o,p);return}}for(var g in a)f=a[g],a.hasOwnProperty(g)&&f!=null&&!o.hasOwnProperty(g)&&et(e,t,g,null,o,f);for(d in o)f=o[d],p=a[d],!o.hasOwnProperty(d)||f===p||f==null&&p==null||et(e,t,d,f,o,p)}function cR(e){switch(e){case\\\"css\\\":case\\\"script\\\":case\\\"font\\\":case\\\"img\\\":case\\\"image\\\":case\\\"input\\\":case\\\"link\\\":return!0;default:return!1}}function RB(){if(typeof performance.getEntriesByType==\\\"function\\\"){for(var e=0,t=0,a=performance.getEntriesByType(\\\"resource\\\"),o=0;o<a.length;o++){var n=a[o],r=n.transferSize,l=n.initiatorType,s=n.duration;if(r&&s&&cR(l)){for(l=0,s=n.responseEnd,o+=1;o<a.length;o++){var i=a[o],u=i.startTime;if(u>s)break;var c=i.transferSize,d=i.initiatorType;c&&cR(d)&&(i=i.responseEnd,l+=c*(i<s?1:(s-u)/(i-u)))}if(--o,t+=8*(r+l)/(n.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e==\\\"number\\\")?e:5}var Sb=null,Cb=null;function nc(e){return e.nodeType===9?e:e.ownerDocument}function fR(e){switch(e){case\\\"http://www.w3.org/2000/svg\\\":return 1;case\\\"http://www.w3.org/1998/Math/MathML\\\":return 2;default:return 0}}function iw(e,t){if(e===0)switch(t){case\\\"svg\\\":return 1;case\\\"math\\\":return 2;default:return 0}return e===1&&t===\\\"foreignObject\\\"?0:e}function uw(e,t,a,o){return a=nc(a).createElement(e),a[Wt]=o,a[Fa]=t,aa(a,e,t),jt(a),a}function vb(e,t){return e===\\\"textarea\\\"||e===\\\"noscript\\\"||typeof t.children==\\\"string\\\"||typeof t.children==\\\"number\\\"||typeof t.children==\\\"bigint\\\"||typeof t.dangerouslySetInnerHTML==\\\"object\\\"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var hx=null;function IB(){var e=window.event;return e&&e.type===\\\"popstate\\\"?e===hx?!1:(hx=e,!0):(hx=null,!1)}var Cy=typeof setTimeout==\\\"function\\\"?setTimeout:void 0,wB=typeof clearTimeout==\\\"function\\\"?clearTimeout:void 0,dR=typeof Promise==\\\"function\\\"?Promise:void 0,pR=typeof requestAnimationFrame==\\\"function\\\"?requestAnimationFrame:Cy,TB=typeof queueMicrotask==\\\"function\\\"?queueMicrotask:typeof dR<\\\"u\\\"?function(e){return dR.resolve(null).then(e).catch(EB)}:Cy;function EB(e){setTimeout(function(){throw e})}function Vr(e){return e===\\\"head\\\"}function mR(e,t){var a=t,o=0;do{var n=a.nextSibling;if(e.removeChild(a),n&&n.nodeType===8)if(a=n.data,a===\\\"/$\\\"||a===\\\"/&\\\"){if(o===0){e.removeChild(n),Li(t);return}o--}else if(a===\\\"$\\\"||a===\\\"$?\\\"||a===\\\"$~\\\"||a===\\\"$!\\\"||a===\\\"&\\\")o++;else if(a===\\\"html\\\")bx(e.ownerDocument.documentElement);else if(a===\\\"head\\\"){a=e.ownerDocument.head,bx(a);for(var r=a.firstChild;r;){var l=r.nextSibling,s=r.nodeName;r[pc]||s===\\\"SCRIPT\\\"||s===\\\"STYLE\\\"||s===\\\"LINK\\\"&&r.rel.toLowerCase()===\\\"stylesheet\\\"||a.removeChild(r),r=l}}else a===\\\"body\\\"&&bx(e.ownerDocument.body);a=n}while(a);Li(t)}function gR(e,t){var a=e;e=0;do{var o=a.nextSibling;if(a.nodeType===1?t?(a._stashedDisplay=a.style.display,a.style.display=\\\"none\\\"):(a.style.display=a._stashedDisplay||\\\"\\\",a.getAttribute(\\\"style\\\")===\\\"\\\"&&a.removeAttribute(\\\"style\\\")):a.nodeType===3&&(t?(a._stashedText=a.nodeValue,a.nodeValue=\\\"\\\"):a.nodeValue=a._stashedText||\\\"\\\"),o&&o.nodeType===8)if(a=o.data,a===\\\"/$\\\"){if(e===0)break;e--}else a!==\\\"$\\\"&&a!==\\\"$?\\\"&&a!==\\\"$~\\\"&&a!==\\\"$!\\\"||e++;a=o}while(a)}function cw(e,t,a){if(t=CSS.escape(t)!==t?\\\"r-\\\"+btoa(t).replace(/=/g,\\\"\\\"):t,e.style.viewTransitionName=t,a!=null&&(e.style.viewTransitionClass=a),a=getComputedStyle(e),a.display===\\\"inline\\\"){if(t=e.getClientRects(),t.length===1)var o=1;else for(var n=o=0;n<t.length;n++){var r=t[n];0<r.width&&0<r.height&&o++}o===1&&(e=e.style,e.display=t.length===1?\\\"inline-block\\\":\\\"block\\\",e.marginTop=\\\"-\\\"+a.paddingTop,e.marginBottom=\\\"-\\\"+a.paddingBottom)}}function fw(e,t){e=e.style,t=t.style;var a=t!=null?t.hasOwnProperty(\\\"viewTransitionName\\\")?t.viewTransitionName:t.hasOwnProperty(\\\"view-transition-name\\\")?t[\\\"view-transition-name\\\"]:null:null;e.viewTransitionName=a==null||typeof a==\\\"boolean\\\"?\\\"\\\":(\\\"\\\"+a).trim(),a=t!=null?t.hasOwnProperty(\\\"viewTransitionClass\\\")?t.viewTransitionClass:t.hasOwnProperty(\\\"view-transition-class\\\")?t[\\\"view-transition-class\\\"]:null:null,e.viewTransitionClass=a==null||typeof a==\\\"boolean\\\"?\\\"\\\":(\\\"\\\"+a).trim(),e.display===\\\"inline-block\\\"&&(t==null?e.display=e.margin=\\\"\\\":(a=t.display,e.display=a==null||typeof a==\\\"boolean\\\"?\\\"\\\":a,a=t.margin,a!=null?e.margin=a:(a=t.hasOwnProperty(\\\"marginTop\\\")?t.marginTop:t[\\\"margin-top\\\"],e.marginTop=a==null||typeof a==\\\"boolean\\\"?\\\"\\\":a,t=t.hasOwnProperty(\\\"marginBottom\\\")?t.marginBottom:t[\\\"margin-bottom\\\"],e.marginBottom=t==null||typeof t==\\\"boolean\\\"?\\\"\\\":t)))}function dw(e,t,a){return a=a.ownerDocument.defaultView,{rect:e,abs:t.position===\\\"absolute\\\"||t.position===\\\"fixed\\\",clip:t.clipPath!==\\\"none\\\"||t.overflow!==\\\"visible\\\"||t.filter!==\\\"none\\\"||t.mask!==\\\"none\\\"||t.mask!==\\\"none\\\"||t.borderRadius!==\\\"0px\\\",view:0<=e.bottom&&0<=e.right&&e.top<=a.innerHeight&&e.left<=a.innerWidth}}function Lb(e){var t=e.getBoundingClientRect(),a=getComputedStyle(e);return dw(t,a,e)}function kB(e){var t=e.getBoundingClientRect();t=new DOMRect(t.x+2e4,t.y+2e4,t.width,t.height);var a=getComputedStyle(e);return dw(t,a,e)}function MB(e){return e.documentElement.clientHeight}function AB(e){this.addEventListener(\\\"load\\\",e),this.addEventListener(\\\"error\\\",e)}function OB(e,t,a,o,n,r,l,s,i){var u=t.nodeType===9?t:t.ownerDocument;try{var c=u.startViewTransition({update:function(){var f=u.defaultView,p=f.navigation&&f.navigation.transition,h=u.fonts.status;o();var b=[];if(h===\\\"loaded\\\"&&(MB(u),u.fonts.status===\\\"loading\\\"&&b.push(u.fonts.ready)),h=b.length,e!==null)for(var S=e.suspenseyImages,g=0,m=0;m<S.length;m++){var x=S[m];if(!x.complete){var y=x.getBoundingClientRect();if(0<y.bottom&&0<y.right&&y.top<f.innerHeight&&y.left<f.innerWidth){if(g+=Rw(x),g>wd){b.length=h;break}x=new Promise(AB.bind(x)),b.push(x)}}}if(0<b.length)return f=Promise.race([Promise.all(b),new Promise(function(L){return setTimeout(L,500)})]).then(n,n),(p?Promise.allSettled([p.finished,f]):f).then(r,r);if(n(),p)return p.finished.then(r,r);r()},types:a});u.__reactViewTransition=c;var d=[];return c.ready.then(function(){for(var f=u.documentElement.getAnimations({subtree:!0}),p=0;p<f.length;p++){var h=f[p],b=h.effect,S=b.pseudoElement;if(S!=null&&S.startsWith(\\\"::view-transition\\\")){d.push(h),h=b.getKeyframes();for(var g=S=void 0,m=!0,x=0;x<h.length;x++){var y=h[x],L=y.width;if(S===void 0)S=L;else if(S!==L){m=!1;break}if(L=y.height,g===void 0)g=L;else if(g!==L){m=!1;break}delete y.width,delete y.height,y.transform===\\\"none\\\"&&delete y.transform}m&&S!==void 0&&g!==void 0&&(b.setKeyframes(h),m=getComputedStyle(b.target,b.pseudoElement),m.width!==S||m.height!==g)&&(m=h[0],m.width=S,m.height=g,m=h[h.length-1],m.width=S,m.height=g,b.setKeyframes(h))}}l()},function(f){u.__reactViewTransition===c&&(u.__reactViewTransition=null);try{typeof f==\\\"object\\\"&&f!==null&&f.name===\\\"InvalidStateError\\\"&&(f.message===\\\"View transition was skipped because document visibility state is hidden.\\\"||f.message===\\\"Skipping view transition because document visibility state has become hidden.\\\"||f.message===\\\"Skipping view transition because viewport size changed.\\\"||f.message===\\\"Transition was aborted because of invalid state\\\")&&(f=null),f!==null&&i(f)}finally{o(),n(),l()}}),c.finished.finally(function(){for(var f=0;f<d.length;f++)d[f].cancel();u.__reactViewTransition===c&&(u.__reactViewTransition=null),s()}),c}catch{return o(),n(),l(),null}}function Ml(e,t){this._scope=document.documentElement,this._selector=\\\"::view-transition-\\\"+e+\\\"(\\\"+t+\\\")\\\"}Ml.prototype.animate=function(e,t){return t=typeof t==\\\"number\\\"?{duration:t}:ct({},t),t.pseudoElement=this._selector,this._scope.animate(e,t)};Ml.prototype.getAnimations=function(){for(var e=this._scope,t=this._selector,a=e.getAnimations({subtree:!0}),o=[],n=0;n<a.length;n++){var r=a[n].effect;r!==null&&r.target===e&&r.pseudoElement===t&&o.push(a[n])}return o};Ml.prototype.getComputedStyle=function(){return getComputedStyle(this._scope,this._selector)};function pw(e){return{name:e,group:new Ml(\\\"group\\\",e),imagePair:new Ml(\\\"image-pair\\\",e),old:new Ml(\\\"old\\\",e),new:new Ml(\\\"new\\\",e)}}function no(e){this._fragmentFiber=e,this._observers=this._eventListeners=null}no.prototype.addEventListener=function(e,t,a){var o=null,n=null;if(!(a!=null&&typeof a!=\\\"boolean\\\"&&(o=a.signal||null,o!==null&&o.aborted))){this._eventListeners===null&&(this._eventListeners=[]);var r=this._eventListeners;if(mw(r,e,t,a)===-1){var l=this,s=t;a!=null&&typeof a!=\\\"boolean\\\"&&a.once===!0&&(s=function(i){l.removeEventListener(e,t,a),typeof t==\\\"function\\\"?t.call(this,i):t.handleEvent(i)}),o!==null&&(n=l.removeEventListener.bind(l,e,t,a),o.addEventListener(\\\"abort\\\",n,{once:!0}),n=o.removeEventListener.bind(o,\\\"abort\\\",n)),o=yi(a),r.push({type:e,listener:t,optionsOrUseCapture:a,attachedListener:s,cleanup:n}),_a(this._fragmentFiber.child,!1,DB,e,s,o)}this._eventListeners=r}};function DB(e,t,a,o){return Ht(e).addEventListener(t,a,o),!1}no.prototype.removeEventListener=function(e,t,a){var o=this._eventListeners;if(o!==null&&(t=mw(o,e,t,a),t!==-1)){var n=o[t];a=n.attachedListener;var r=n.cleanup;n=yi(n.optionsOrUseCapture),_a(this._fragmentFiber.child,!1,PB,e,a,n),o.splice(t,1),r!==null&&r()}};function PB(e,t,a,o){return Ht(e).removeEventListener(t,a,o),!1}function yi(e){return e!=null&&typeof e!=\\\"boolean\\\"&&(e.once===!0||e.signal instanceof AbortSignal)?{capture:e.capture,passive:e.passive}:e}function hR(e){return e==null?\\\"c=0\\\":typeof e==\\\"boolean\\\"?\\\"c=\\\"+(e?\\\"1\\\":\\\"0\\\"):\\\"c=\\\"+(e.capture?\\\"1\\\":\\\"0\\\")}function mw(e,t,a,o){if(e.length===0)return-1;o=hR(o);for(var n=0;n<e.length;n++){var r=e[n];if(r.type===t&&r.listener===a&&hR(r.optionsOrUseCapture)===o)return n}return-1}no.prototype.dispatchEvent=function(e){var t=Gl(this._fragmentFiber);if(t===null)return!0;t=Ht(t);var a=this._eventListeners;if(a!==null&&0<a.length||!e.bubbles){var o=t.nodeType===9?t.createComment(\\\"\\\"):document.createTextNode(\\\"\\\");if(a)for(var n=0;n<a.length;n++){var r=a[n];o.addEventListener(r.type,r.attachedListener,yi(r.optionsOrUseCapture))}if(t.appendChild(o),e=o.dispatchEvent(e),a)for(n=0;n<a.length;n++)r=a[n],o.removeEventListener(r.type,r.attachedListener,yi(r.optionsOrUseCapture));return t.removeChild(o),e}return t.dispatchEvent(e)};no.prototype.focus=function(e){_a(this._fragmentFiber.child,!0,gw,e,void 0,void 0)};function gw(e,t){return e.tag===6?!1:(e=Ht(e),jB(e,t))}no.prototype.focusLast=function(e){var t=[];_a(this._fragmentFiber.child,!0,vy,t,void 0,void 0);for(var a=t.length-1;0<=a&&!gw(t[a],e);a--);};function vy(e,t){return t.push(e),!1}no.prototype.blur=function(){var e=Gl(this._fragmentFiber);e!==null&&(e=Ht(e),e=nc(e).activeElement,e!==null&&_a(this._fragmentFiber.child,!1,NB,e,void 0,void 0))};function NB(e,t){return e.tag===6?!1:(e=Ht(e),e===t||e.contains(t)?(t.blur(),!0):!1)}no.prototype.observeUsing=function(e){this._observers===null&&(this._observers=new Set),this._observers.add(e),_a(this._fragmentFiber.child,!1,BB,e,void 0,void 0)};function BB(e,t){return e.tag===6||(e=Ht(e),t.observe(e)),!1}no.prototype.unobserveUsing=function(e){var t=this._observers;if(t!==null&&t.has(e)){t.delete(e),_a(this._fragmentFiber.child,!1,_B,e,void 0,void 0);for(var a=t=0;a<Fo.length;a++){var o=Fo[a];o.fragmentInstance===this&&o.observer===e?e.unobserve(o.instance):Fo[t++]=o}Fo.length=t}};function _B(e,t){return e.tag===6||(e=Ht(e),t.unobserve(e)),!1}var Fo=[],xx=!1;function FB(e,t,a){Fo.push({fragmentInstance:e,observer:t,instance:a}),xx||(xx=!0,YB(function(){xx=!1;var o=Fo;Fo=[];for(var n=0;n<o.length;n++){var r=o[n];r.observer.unobserve(r.instance)}}))}no.prototype.getClientRects=function(){var e=[];return _a(this._fragmentFiber.child,!1,HB,e,void 0,void 0),e};function HB(e,t){if(e.tag===6){e=e.stateNode;var a=e.ownerDocument.createRange();a.selectNodeContents(e),t.push.apply(t,a.getClientRects())}else e=Ht(e),t.push.apply(t,e.getClientRects());return!1}no.prototype.getRootNode=function(e){var t=Gl(this._fragmentFiber);return t===null?this:Ht(t).getRootNode(e)};no.prototype.compareDocumentPosition=function(e){var t=Gl(this._fragmentFiber);if(t===null)return Node.DOCUMENT_POSITION_DISCONNECTED;var a=[];_a(this._fragmentFiber.child,!1,vy,a,void 0,void 0);var o=Ht(t);if(a.length===0){if(a=o,Zv(this._fragmentFiber)){e:{for(t=this._fragmentFiber.return;t!==null;){if(t.tag===4){t=t.stateNode.containerInfo;break e}if(t.tag===3||t.tag===5||t.tag===27)break;t=t.return}t=null}t!=null&&(a=t)}t=this._fragmentFiber;var n=o=a.compareDocumentPosition(e);return a===e?n=Node.DOCUMENT_POSITION_CONTAINS:o&Node.DOCUMENT_POSITION_CONTAINED_BY&&(a=_R(t)[1],a===null?n=Node.DOCUMENT_POSITION_PRECEDING:(e=Ht(a).compareDocumentPosition(e),n=e===0||e&Node.DOCUMENT_POSITION_FOLLOWING?Node.DOCUMENT_POSITION_FOLLOWING:Node.DOCUMENT_POSITION_PRECEDING)),n|=Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC}t=Ht(a[0]),n=Ht(a[a.length-1]);var r=Zv(this._fragmentFiber)?t.parentElement:o;if(r==null)return Node.DOCUMENT_POSITION_DISCONNECTED;o=r.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY,r=r.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY;var l=t.compareDocumentPosition(e),s=n.compareDocumentPosition(e),i=l&Node.DOCUMENT_POSITION_CONTAINED_BY||s&Node.DOCUMENT_POSITION_CONTAINED_BY;return s=o&&r&&l&Node.DOCUMENT_POSITION_FOLLOWING&&s&Node.DOCUMENT_POSITION_PRECEDING,t=o&&t===e||r&&n===e||i||s?Node.DOCUMENT_POSITION_CONTAINED_BY:!o&&t===e||!r&&n===e?Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:l,t&Node.DOCUMENT_POSITION_DISCONNECTED||t&Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC||zB(t,this._fragmentFiber,a[0],a[a.length-1],e)?t:Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC};function zB(e,t,a,o,n){var r=kl(n);if(e&Node.DOCUMENT_POSITION_CONTAINED_BY){if(a=!!r)e:{for(;r!==null;){if(r.tag===7&&(r===t||r.alternate===t)){a=!0;break e}r=r.return}a=!1}return a}if(e&Node.DOCUMENT_POSITION_CONTAINS){if(r===null)return r=n.ownerDocument,n===r||n===r.documentElement||n===r.body;e:{for(r=t,t=Gl(t);r!==null;){if(!(r.tag!==5&&r.tag!==3&&r.tag!==27||r!==t&&r.alternate!==t)){r=!0;break e}r=r.return}r=!1}return r}return e&Node.DOCUMENT_POSITION_PRECEDING?((t=!!r)&&!(t=r===a)&&(t=Sx(a,r,$v),t===null?t=!1:(_a(t,!0,hN,r,a),r=Vs,Vs=null,t=r!==null)),t):e&Node.DOCUMENT_POSITION_FOLLOWING?((t=!!r)&&!(t=r===o)&&(t=Sx(o,r,$v),t===null?t=!1:(_a(t,!0,xN,r,o),r=Vs,yx=Vs=null,t=r!==null)),t):!1}function xR(e,t){var a=e.ownerDocument.createRange();a.selectNodeContents(e),e=a.getBoundingClientRect(),window.scrollTo(window.scrollX+e.left,t?window.scrollY+e.top:window.scrollY+e.bottom-window.innerHeight)}no.prototype.scrollIntoView=function(e){if(typeof e==\\\"object\\\")throw Error(F(566));var t=[];_a(this._fragmentFiber.child,!1,vy,t,void 0,void 0);var a=e!==!1;if(t.length===0){var o=_R(this._fragmentFiber);if(o=a?o[1]||o[0]||Gl(this._fragmentFiber):o[0]||o[1],o===null)return;if(o.tag===6){e=Ht(o),xR(e,a);return}if(o=Ht(o),o.nodeType!==9){if(o.nodeType===11){a=\\\"host\\\"in o?o.host:null,a!==null&&a.scrollIntoView(e);return}o.scrollIntoView(e)}}for(o=a?t.length-1:0;o!==(a?-1:t.length);){var n=t[o];n.tag===6?(n=Ht(n),xR(n,a)):Ht(n).scrollIntoView(e),o+=a?-1:1}};function UB(e,t){return e=Ht(e),hw(e,t),!1}function hw(e,t){e.reactFragments==null&&(e.reactFragments=new Set),e.reactFragments.add(t)}function xw(e,t){var a=t._eventListeners;if(a!==null)for(var o=0;o<a.length;o++){var n=a[o];e.addEventListener(n.type,n.attachedListener,yi(n.optionsOrUseCapture))}e.nodeType!==3&&(a=t._observers,a!==null&&a.forEach(function(r){for(var l=0,s=0;s<Fo.length;s++){var i=Fo[s];(i.fragmentInstance!==t||i.observer!==r||i.instance!==e)&&(Fo[l++]=i)}Fo.length=l,r.observe(e)}),hw(e,t))}function qB(e,t){var a=t._eventListeners;if(a!==null)for(var o=0;o<a.length;o++){var n=a[o];e.removeEventListener(n.type,n.attachedListener,yi(n.optionsOrUseCapture))}e.nodeType!==3&&(a=t._observers,a!==null&&a.forEach(function(r){typeof r.rootMargin==\\\"string\\\"?FB(t,r,e):r.unobserve(e)}),e.reactFragments!=null&&e.reactFragments.delete(t))}function Rb(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var a=t;switch(t=t.nextSibling,a.nodeName){case\\\"HTML\\\":case\\\"HEAD\\\":case\\\"BODY\\\":Rb(a),rp(a);continue;case\\\"SCRIPT\\\":case\\\"STYLE\\\":continue;case\\\"LINK\\\":if(a.rel.toLowerCase()===\\\"stylesheet\\\")continue}e.removeChild(a)}}function VB(e,t,a,o){for(;e.nodeType===1;){var n=a;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!o&&(e.nodeName!==\\\"INPUT\\\"||e.type!==\\\"hidden\\\"))break}else if(o){if(!e[pc])switch(t){case\\\"meta\\\":if(!e.hasAttribute(\\\"itemprop\\\"))break;return e;case\\\"link\\\":if(r=e.getAttribute(\\\"rel\\\"),r===\\\"stylesheet\\\"&&e.hasAttribute(\\\"data-precedence\\\"))break;if(r!==n.rel||e.getAttribute(\\\"href\\\")!==(n.href==null||n.href===\\\"\\\"?null:n.href)||e.getAttribute(\\\"crossorigin\\\")!==(n.crossOrigin==null?null:n.crossOrigin)||e.getAttribute(\\\"title\\\")!==(n.title==null?null:n.title))break;return e;case\\\"style\\\":if(e.hasAttribute(\\\"data-precedence\\\"))break;return e;case\\\"script\\\":if(r=e.getAttribute(\\\"src\\\"),(r!==(n.src==null?null:n.src)||e.getAttribute(\\\"type\\\")!==(n.type==null?null:n.type)||e.getAttribute(\\\"crossorigin\\\")!==(n.crossOrigin==null?null:n.crossOrigin))&&r&&e.hasAttribute(\\\"async\\\")&&!e.hasAttribute(\\\"itemprop\\\"))break;return e;default:return e}}else if(t===\\\"input\\\"&&e.type===\\\"hidden\\\"){var r=n.name==null?null:\\\"\\\"+n.name;if(n.type===\\\"hidden\\\"&&e.getAttribute(\\\"name\\\")===r)return e}else return e;if(e=vo(e.nextSibling),e===null)break}return null}function GB(e,t,a){if(t===\\\"\\\")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!==\\\"INPUT\\\"||e.type!==\\\"hidden\\\")&&!a||(e=vo(e.nextSibling),e===null))return null;return e}function bw(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!==\\\"INPUT\\\"||e.type!==\\\"hidden\\\")&&!t||(e=vo(e.nextSibling),e===null))return null;return e}function Ib(e){return e.data===\\\"$?\\\"||e.data===\\\"$~\\\"}function Ly(e){return e.data===\\\"$!\\\"||e.data===\\\"$?\\\"&&e.ownerDocument.readyState!==\\\"loading\\\"}function XB(e,t){var a=e.ownerDocument;if(e.data===\\\"$~\\\")e._reactRetry=t;else if(e.data!==\\\"$?\\\"||a.readyState!==\\\"loading\\\")t();else{var o=function(){t(),a.removeEventListener(\\\"DOMContentLoaded\\\",o)};a.addEventListener(\\\"DOMContentLoaded\\\",o),e._reactRetry=o}}function vo(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t===\\\"$\\\"||t===\\\"$!\\\"||t===\\\"$?\\\"||t===\\\"$~\\\"||t===\\\"&\\\"||t===\\\"F!\\\"||t===\\\"F\\\")break;if(t===\\\"/$\\\"||t===\\\"/&\\\")return null}}return e}var wb=null;function bR(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var a=e.data;if(a===\\\"/$\\\"||a===\\\"/&\\\"){if(t===0)return vo(e.nextSibling);t--}else a!==\\\"$\\\"&&a!==\\\"$!\\\"&&a!==\\\"$?\\\"&&a!==\\\"$~\\\"&&a!==\\\"&\\\"||t++}e=e.nextSibling}return null}function yR(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var a=e.data;if(a===\\\"$\\\"||a===\\\"$!\\\"||a===\\\"$?\\\"||a===\\\"$~\\\"||a===\\\"&\\\"){if(t===0)return e;t--}else a!==\\\"/$\\\"&&a!==\\\"/&\\\"||t++}e=e.previousSibling}return null}function jB(e,t){function a(){o=!0}if(e.ownerDocument.activeElement===e)return!0;var o=!1;try{e.ownerDocument.addEventListener(\\\"focus\\\",a,!0),(e.focus||HTMLElement.prototype.focus).call(e,t)}finally{e.ownerDocument.removeEventListener(\\\"focus\\\",a,!0)}return o}function YB(e){pR(function(){pR(function(t){return e(t)})})}function yw(e,t,a){switch(t=nc(a),e){case\\\"html\\\":if(e=t.documentElement,!e)throw Error(F(452));return e;case\\\"head\\\":if(e=t.head,!e)throw Error(F(453));return e;case\\\"body\\\":if(e=t.body,!e)throw Error(F(454));return e;default:throw Error(F(451))}}function Sw(e,t,a){for(var o in a){var n=a[o];a.hasOwnProperty(o)&&n!=null&&et(e,t,o,null,vB,n)}a.dangerouslySetInnerHTML!=null&&(e.textContent=\\\"\\\"),e.onclick===rn&&(e.onclick=null),rp(e)}function bx(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);rp(e)}var Lo=new Map,SR=new Set;function rc(e){if(typeof e.getRootNode==\\\"function\\\"){var t=e.getRootNode();if(t.nodeType===9||t.nodeType===11)return t}return e.nodeType===9?e:e.ownerDocument}var Zn=$e.d;$e.d={f:KB,r:ZB,D:$B,C:QB,L:WB,m:JB,X:t_,S:e_,M:a_};function KB(){var e=Zn.f(),t=yp();return e||t}function ZB(e){var t=Ii(e);t!==null&&t.tag===5&&t.type===\\\"form\\\"?n0(t):Zn.r(e)}var ki=typeof document>\\\"u\\\"?null:document;function Cw(e,t,a){var o=ki;if(o&&typeof t==\\\"string\\\"&&t){var n=yo(t);n='link[rel=\\\"'+e+'\\\"][href=\\\"'+n+'\\\"]',typeof a==\\\"string\\\"&&(n+='[crossorigin=\\\"'+a+'\\\"]'),SR.has(n)||(SR.add(n),e={rel:e,crossOrigin:a,href:t},o.querySelector(n)===null&&(t=o.createElement(\\\"link\\\"),aa(t,\\\"link\\\",e),jt(t),o.head.appendChild(t)))}}function $B(e){Zn.D(e),Cw(\\\"dns-prefetch\\\",e,null)}function QB(e,t){Zn.C(e,t),Cw(\\\"preconnect\\\",e,t)}function WB(e,t,a){Zn.L(e,t,a);var o=ki;if(o&&e&&t){var n='link[rel=\\\"preload\\\"][as=\\\"'+yo(t)+'\\\"]';t===\\\"image\\\"&&a&&a.imageSrcSet?(n+='[imagesrcset=\\\"'+yo(a.imageSrcSet)+'\\\"]',typeof a.imageSizes==\\\"string\\\"&&(n+='[imagesizes=\\\"'+yo(a.imageSizes)+'\\\"]')):n+='[href=\\\"'+yo(e)+'\\\"]';var r=n;switch(t){case\\\"style\\\":r=Si(e);break;case\\\"script\\\":r=Mi(e)}if(!(Lo.has(r)||(e=ct({rel:\\\"preload\\\",href:t===\\\"image\\\"&&a&&a.imageSrcSet?void 0:e,as:t},a),Lo.set(r,e),o.querySelector(n)!==null||t===\\\"style\\\"&&o.querySelector(yc(r))||t===\\\"script\\\"&&o.querySelector(Sc(r))))){var l=o.createElement(\\\"link\\\");aa(l,\\\"link\\\",e),t===\\\"style\\\"&&(l[Dd]=!0,l.onload=l.onerror=function(){$R(l)}),jt(l),o.head.appendChild(l)}}}function JB(e,t){Zn.m(e,t);var a=ki;if(a&&e){var o=t&&typeof t.as==\\\"string\\\"?t.as:\\\"script\\\",n='link[rel=\\\"modulepreload\\\"][as=\\\"'+yo(o)+'\\\"][href=\\\"'+yo(e)+'\\\"]',r=n;switch(o){case\\\"audioworklet\\\":case\\\"paintworklet\\\":case\\\"serviceworker\\\":case\\\"sharedworker\\\":case\\\"worker\\\":case\\\"script\\\":r=Mi(e)}if(!Lo.has(r)&&(e=ct({rel:\\\"modulepreload\\\",href:e},t),Lo.set(r,e),a.querySelector(n)===null)){switch(o){case\\\"audioworklet\\\":case\\\"paintworklet\\\":case\\\"serviceworker\\\":case\\\"sharedworker\\\":case\\\"worker\\\":case\\\"script\\\":if(a.querySelector(Sc(r)))return}o=a.createElement(\\\"link\\\"),aa(o,\\\"link\\\",e),jt(o),a.head.appendChild(o)}}}function e_(e,t,a){Zn.S(e,t,a);var o=ki;if(o&&e){var n=ti(o).hoistableStyles,r=Si(e);t=t||\\\"default\\\";var l=n.get(r);if(!l){var s={loading:0,preload:null};if(l=o.querySelector(yc(r)))s.loading=5;else{e=ct({rel:\\\"stylesheet\\\",href:e,\\\"data-precedence\\\":t},a),(a=Lo.get(r))&&Ry(e,a);var i=l=o.createElement(\\\"link\\\");jt(i),aa(i,\\\"link\\\",e),i._p=new Promise(function(u,c){i.onload=u,i.onerror=c}),i.addEventListener(\\\"load\\\",function(){s.loading|=1}),i.addEventListener(\\\"error\\\",function(){s.loading|=2}),s.loading|=4,Rd(l,t,o)}l={type:\\\"stylesheet\\\",instance:l,count:1,state:s},n.set(r,l)}}}function t_(e,t){Zn.X(e,t);var a=ki;if(a&&e){var o=ti(a).hoistableScripts,n=Mi(e),r=o.get(n);r||(r=a.querySelector(Sc(n)),r||(e=ct({src:e,async:!0},t),(t=Lo.get(n))&&Iy(e,t),r=a.createElement(\\\"script\\\"),jt(r),aa(r,\\\"link\\\",e),a.head.appendChild(r)),r={type:\\\"script\\\",instance:r,count:1,state:null},o.set(n,r))}}function a_(e,t){Zn.M(e,t);var a=ki;if(a&&e){var o=ti(a).hoistableScripts,n=Mi(e),r=o.get(n);r||(r=a.querySelector(Sc(n)),r||(e=ct({src:e,async:!0,type:\\\"module\\\"},t),(t=Lo.get(n))&&Iy(e,t),r=a.createElement(\\\"script\\\"),jt(r),aa(r,\\\"link\\\",e),a.head.appendChild(r)),r={type:\\\"script\\\",instance:r,count:1,state:null},o.set(n,r))}}function CR(e,t,a,o){var n=(n=Tr.current)?rc(n):null;if(!n)throw Error(F(446));switch(e){case\\\"meta\\\":case\\\"title\\\":return null;case\\\"style\\\":return typeof a.precedence==\\\"string\\\"&&typeof a.href==\\\"string\\\"?(a=Si(a.href),t=ti(n).hoistableStyles,o=t.get(a),o||(o={type:\\\"style\\\",instance:null,count:0,state:null},t.set(a,o)),o):{type:\\\"void\\\",instance:null,count:0,state:null};case\\\"link\\\":if(a.rel===\\\"stylesheet\\\"&&typeof a.href==\\\"string\\\"&&typeof a.precedence==\\\"string\\\"){e=Si(a.href);var r=ti(n).hoistableStyles,l=r.get(e);if(l||(n=n.ownerDocument||n,l={type:\\\"stylesheet\\\",instance:null,count:0,state:{loading:0,preload:null}},r.set(e,l),(r=n.querySelector(yc(e)))?r._p||(l.instance=r,l.state.loading=5):(r=Lo.get(e),r||(r={rel:\\\"preload\\\",as:\\\"style\\\",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Lo.set(e,r)),o_(n,e,r,l.state))),t&&o===null)throw Error(F(528,\\\"\\\"));return l}if(t&&o!==null)throw Error(F(529,\\\"\\\"));return null;case\\\"script\\\":return t=a.async,a=a.src,typeof a==\\\"string\\\"&&t&&typeof t!=\\\"function\\\"&&typeof t!=\\\"symbol\\\"?(a=Mi(a),t=ti(n).hoistableScripts,o=t.get(a),o||(o={type:\\\"script\\\",instance:null,count:0,state:null},t.set(a,o)),o):{type:\\\"void\\\",instance:null,count:0,state:null};default:throw Error(F(444,e))}}function Si(e){return'href=\\\"'+yo(e)+'\\\"'}function yc(e){return'link[rel=\\\"stylesheet\\\"]['+e+\\\"]\\\"}function vw(e){return ct({},e,{\\\"data-precedence\\\":e.precedence,precedence:null})}function o_(e,t,a,o){if(t=e.querySelector('link[rel=\\\"preload\\\"][as=\\\"style\\\"]['+t+\\\"]\\\")){if(t[Dd]!==!0){o.loading=1;return}}else t=e.createElement(\\\"link\\\"),t[Dd]=!0,t.onload=t.onerror=$R.bind(null,t),aa(t,\\\"link\\\",a),jt(t),e.head.appendChild(t);o.preload=t,t.addEventListener(\\\"load\\\",function(){return o.loading|=1}),t.addEventListener(\\\"error\\\",function(){return o.loading|=2})}function Mi(e){return'[src=\\\"'+yo(e)+'\\\"]'}function Sc(e){return\\\"script[async]\\\"+e}function vR(e,t,a){if(t.count++,t.instance===null)switch(t.type){case\\\"style\\\":var o=e.querySelector('style[data-href~=\\\"'+yo(a.href)+'\\\"]');if(o)return t.instance=o,jt(o),o;var n=ct({},a,{\\\"data-href\\\":a.href,\\\"data-precedence\\\":a.precedence,href:null,precedence:null});return o=(e.ownerDocument||e).createElement(\\\"style\\\"),jt(o),aa(o,\\\"style\\\",n),Rd(o,a.precedence,e),t.instance=o;case\\\"stylesheet\\\":n=Si(a.href);var r=e.querySelector(yc(n));if(r)return t.state.loading|=4,t.instance=r,jt(r),r;o=vw(a),(n=Lo.get(n))&&Ry(o,n),r=(e.ownerDocument||e).createElement(\\\"link\\\"),jt(r);var l=r;return l._p=new Promise(function(s,i){l.onload=s,l.onerror=i}),aa(r,\\\"link\\\",o),t.state.loading|=4,Rd(r,a.precedence,e),t.instance=r;case\\\"script\\\":return r=Mi(a.src),(n=e.querySelector(Sc(r)))?(t.instance=n,jt(n),n):(o=a,(n=Lo.get(r))&&(o=ct({},a),Iy(o,n)),e=e.ownerDocument||e,n=e.createElement(\\\"script\\\"),jt(n),aa(n,\\\"link\\\",o),e.head.appendChild(n),t.instance=n);case\\\"void\\\":return null;default:throw Error(F(443,t.type))}else t.type===\\\"stylesheet\\\"&&(t.state.loading&4)===0&&(o=t.instance,t.state.loading|=4,Rd(o,a.precedence,e));return t.instance}function Rd(e,t,a){for(var o=a.querySelectorAll('link[rel=\\\"stylesheet\\\"][data-precedence],style[data-precedence]'),n=o.length?o[o.length-1]:null,r=n,l=0;l<o.length;l++){var s=o[l];if(s.dataset.precedence===t)r=s;else if(r!==n)break}r?r.parentNode.insertBefore(e,r.nextSibling):(t=a.nodeType===9?a.head:a,t.insertBefore(e,t.firstChild))}function Ry(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function Iy(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var Id=null;function LR(e,t,a){if(Id===null){var o=new Map,n=Id=new Map;n.set(a,o)}else n=Id,o=n.get(a),o||(o=new Map,n.set(a,o));if(o.has(e))return o;for(o.set(e,null),a=a.getElementsByTagName(e),n=0;n<a.length;n++){var r=a[n];if(!(r[pc]||r[Wt]||e===\\\"link\\\"&&r.getAttribute(\\\"rel\\\")===\\\"stylesheet\\\")&&r.namespaceURI!==\\\"http://www.w3.org/2000/svg\\\"){var l=r.getAttribute(t)||\\\"\\\";l=e+l;var s=o.get(l);s?s.push(r):o.set(l,[r])}}return o}function Tb(e,t,a){e=e.ownerDocument||e,e.head.insertBefore(a,t===\\\"title\\\"?e.querySelector(\\\"head > title\\\"):null)}function n_(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case\\\"meta\\\":case\\\"title\\\":return!0;case\\\"style\\\":if(typeof t.precedence!=\\\"string\\\"||typeof t.href!=\\\"string\\\"||t.href===\\\"\\\")break;return!0;case\\\"link\\\":if(typeof t.rel!=\\\"string\\\"||typeof t.href!=\\\"string\\\"||t.href===\\\"\\\"||t.onLoad||t.onError)break;return t.rel===\\\"stylesheet\\\"?(e=t.disabled,typeof t.precedence==\\\"string\\\"&&e==null):!0;case\\\"script\\\":if(t.async&&typeof t.async!=\\\"function\\\"&&typeof t.async!=\\\"symbol\\\"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==\\\"string\\\")return!0}return!1}function RR(e,t){return e===\\\"img\\\"&&t.src!=null&&t.src!==\\\"\\\"&&t.onLoad==null&&t.loading!==\\\"lazy\\\"}function Lw(e){return!(e.type===\\\"stylesheet\\\"&&(e.state.loading&3)===0)}function Rw(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==\\\"number\\\"?devicePixelRatio:1)*.25}function IR(e,t){typeof t.decode==\\\"function\\\"&&(e.imgCount++,t.complete||(e.imgBytes+=Rw(t),e.suspenseyImages.push(t)),e=s_.bind(e),t.decode().then(e,e))}function r_(e,t,a,o){if(a.type===\\\"stylesheet\\\"&&(typeof o.media!=\\\"string\\\"||matchMedia(o.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=Si(o.href),r=t.querySelector(yc(n));if(r){t=r._p,t!==null&&typeof t==\\\"object\\\"&&typeof t.then==\\\"function\\\"&&(e.count++,e=lc.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=r,jt(r);return}r=t.ownerDocument||t,o=vw(o),(n=Lo.get(n))&&Ry(o,n),r=r.createElement(\\\"link\\\"),jt(r);var l=r;l._p=new Promise(function(s,i){l.onload=s,l.onerror=i}),aa(r,\\\"link\\\",o),a.instance=r}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=lc.bind(e),t.addEventListener(\\\"load\\\",a),t.addEventListener(\\\"error\\\",a))}}var wd=0;function l_(e,t){return e.stylesheets&&e.count===0&&Td(e,e.stylesheets),0<e.count||0<e.imgCount?function(a){var o=setTimeout(function(){if(e.stylesheets&&Td(e,e.stylesheets),e.unsuspend){var r=e.unsuspend;e.unsuspend=null,r()}},6e4+t);0<e.imgBytes&&wd===0&&(wd=62500*RB());var n=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Td(e,e.stylesheets),e.unsuspend)){var r=e.unsuspend;e.unsuspend=null,r()}},(e.imgBytes>wd?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(o),clearTimeout(n)}}:null}function Iw(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)Td(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function lc(){this.count--,Iw(this)}function s_(){this.imgCount--,Iw(this)}var ap=null;function Td(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ap=new Map,t.forEach(i_,e),ap=null,lc.call(e))}function i_(e,t){if(!(t.state.loading&4)){var a=ap.get(e);if(a)var o=a.get(null);else{a=new Map,ap.set(e,a);for(var n=e.querySelectorAll(\\\"link[data-precedence],style[data-precedence]\\\"),r=0;r<n.length;r++){var l=n[r];(l.nodeName===\\\"LINK\\\"||l.getAttribute(\\\"media\\\")!==\\\"not all\\\")&&(a.set(l.dataset.precedence,l),o=l)}o&&a.set(null,o)}n=t.instance,l=n.getAttribute(\\\"data-precedence\\\"),r=a.get(l)||o,r===o&&a.set(null,n),a.set(l,n),this.count++,o=lc.bind(this),n.addEventListener(\\\"load\\\",o),n.addEventListener(\\\"error\\\",o),r?r.parentNode.insertBefore(n,r.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(n,e.firstChild)),t.state.loading|=4}}var Ci={$$typeof:nn,Provider:null,Consumer:null,_currentValue:Al,_currentValue2:Al,_threadCount:0};function u_(e,t,a,o,n,r,l,s,i){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=jh(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=jh(0),this.hiddenUpdates=jh(null),this.identifierPrefix=o,this.onUncaughtError=n,this.onCaughtError=r,this.onRecoverableError=l,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=i,this.transitionTypes=null,this.incompleteTransitions=new Map}function ww(e,t,a,o,n,r,l,s,i,u,c,d){return e=new u_(e,t,a,l,i,u,c,d,s),t=1,r===!0&&(t|=24),r=Na(3,null,null,t),e.current=r,r.stateNode=e,t=Xb(),t.refCount++,e.pooledCache=t,t.refCount++,r.memoizedState={element:o,isDehydrated:a,cache:t},Kb(r),e}function Tw(e){return e?(e=Qs,e):Qs}function Ew(e,t,a,o,n,r){n=Tw(n),o.context===null?o.context=n:o.pendingContext=n,o=kr(t),o.payload={element:a},r=r===void 0?null:r,r!==null&&(o.callback=r),a=Mr(e,o,t),a!==null&&(Ba(a,e,t),Fu(a,e,t))}function wR(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var a=e.retryLane;e.retryLane=a!==0&&a<t?a:t}}function wy(e,t){wR(e,t),(e=e.alternate)&&wR(e,t)}function kw(e){if(e.tag===13||e.tag===31){var t=Yl(e,67108864);t!==null&&Ba(t,e,67108864),wy(e,67108864)}}function TR(e){if(e.tag===13||e.tag===31){var t=ao();t=Db(t);var a=Yl(e,t);a!==null&&Ba(a,e,t),wy(e,t)}}var vi=!0;function c_(e,t,a,o){var n=ve.T;ve.T=null;var r=$e.p;try{$e.p=2,Ty(e,t,a,o)}finally{$e.p=r,ve.T=n}}function f_(e,t,a,o){var n=ve.T;ve.T=null;var r=$e.p;try{$e.p=8,Ty(e,t,a,o)}finally{$e.p=r,ve.T=n}}function Ty(e,t,a,o){if(vi){var n=Eb(o);if(n===null)gx(e,t,o,op,a),ER(e,o);else if(p_(n,e,t,a,o))o.stopPropagation();else if(ER(e,o),t&4&&-1<d_.indexOf(e)){for(;n!==null;){var r=Ii(n);if(r!==null)switch(r.tag){case 3:if(r=r.stateNode,r.current.memoizedState.isDehydrated){var l=wl(r.pendingLanes);if(l!==0){var s=r;for(s.pendingLanes|=2,s.entangledLanes|=2;l;){var i=1<<31-to(l);s.entanglements[1]|=i,l&=~i}pn(r),(Ze&6)===0&&(Qd=Ja()+500,bc(0,!1))}}break;case 31:case 13:s=Yl(r,2),s!==null&&Ba(s,r,2),yp(),wy(r,2)}if(r=Eb(o),r===null&&gx(e,t,o,op,a),r===n)break;n=r}n!==null&&o.stopPropagation()}else gx(e,t,o,null,a)}}function Eb(e){return e=Bb(e),Ey(e)}var op=null;function Ey(e){if(op=null,e=kl(e),e!==null){var t=uc(e);if(t===null)e=null;else{var a=t.tag;if(a===13){if(e=PR(t),e!==null)return e;e=null}else if(a===31){if(e=NR(t),e!==null)return e;e=null}else if(a===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return op=e,null}function Mw(e){switch(e){case\\\"beforetoggle\\\":case\\\"cancel\\\":case\\\"click\\\":case\\\"close\\\":case\\\"contextmenu\\\":case\\\"copy\\\":case\\\"cut\\\":case\\\"auxclick\\\":case\\\"dblclick\\\":case\\\"dragend\\\":case\\\"dragstart\\\":case\\\"drop\\\":case\\\"focusin\\\":case\\\"focusout\\\":case\\\"input\\\":case\\\"invalid\\\":case\\\"keydown\\\":case\\\"keypress\\\":case\\\"keyup\\\":case\\\"mousedown\\\":case\\\"mouseup\\\":case\\\"paste\\\":case\\\"pause\\\":case\\\"play\\\":case\\\"pointercancel\\\":case\\\"pointerdown\\\":case\\\"pointerup\\\":case\\\"ratechange\\\":case\\\"reset\\\":case\\\"seeked\\\":case\\\"submit\\\":case\\\"toggle\\\":case\\\"touchcancel\\\":case\\\"touchend\\\":case\\\"touchstart\\\":case\\\"volumechange\\\":case\\\"change\\\":case\\\"selectionchange\\\":case\\\"textInput\\\":case\\\"compositionstart\\\":case\\\"compositionend\\\":case\\\"compositionupdate\\\":case\\\"beforeblur\\\":case\\\"afterblur\\\":case\\\"beforeinput\\\":case\\\"blur\\\":case\\\"fullscreenchange\\\":case\\\"fullscreenerror\\\":case\\\"focus\\\":case\\\"hashchange\\\":case\\\"popstate\\\":case\\\"select\\\":case\\\"selectstart\\\":return 2;case\\\"drag\\\":case\\\"dragenter\\\":case\\\"dragexit\\\":case\\\"dragleave\\\":case\\\"dragover\\\":case\\\"mousemove\\\":case\\\"mouseout\\\":case\\\"mouseover\\\":case\\\"pointermove\\\":case\\\"pointerout\\\":case\\\"pointerover\\\":case\\\"resize\\\":case\\\"scroll\\\":case\\\"touchmove\\\":case\\\"wheel\\\":case\\\"mouseenter\\\":case\\\"mouseleave\\\":case\\\"pointerenter\\\":case\\\"pointerleave\\\":return 8;case\\\"message\\\":switch(wN()){case UR:return 2;case qR:return 8;case Od:case TN:return 32;case VR:return 268435456;default:return 32}default:return 32}}var kb=!1,Pr=null,Nr=null,Br=null,sc=new Map,ic=new Map,Sr=[],d_=\\\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\\\".split(\\\" \\\");function ER(e,t){switch(e){case\\\"focusin\\\":case\\\"focusout\\\":Pr=null;break;case\\\"dragenter\\\":case\\\"dragleave\\\":Nr=null;break;case\\\"mouseover\\\":case\\\"mouseout\\\":Br=null;break;case\\\"pointerover\\\":case\\\"pointerout\\\":sc.delete(t.pointerId);break;case\\\"gotpointercapture\\\":case\\\"lostpointercapture\\\":ic.delete(t.pointerId)}}function Tu(e,t,a,o,n,r){return e===null||e.nativeEvent!==r?(e={blockedOn:t,domEventName:a,eventSystemFlags:o,nativeEvent:r,targetContainers:[n]},t!==null&&(t=Ii(t),t!==null&&kw(t)),e):(e.eventSystemFlags|=o,t=e.targetContainers,n!==null&&t.indexOf(n)===-1&&t.push(n),e)}function p_(e,t,a,o,n){switch(t){case\\\"focusin\\\":return Pr=Tu(Pr,e,t,a,o,n),!0;case\\\"dragenter\\\":return Nr=Tu(Nr,e,t,a,o,n),!0;case\\\"mouseover\\\":return Br=Tu(Br,e,t,a,o,n),!0;case\\\"pointerover\\\":var r=n.pointerId;return sc.set(r,Tu(sc.get(r)||null,e,t,a,o,n)),!0;case\\\"gotpointercapture\\\":return r=n.pointerId,ic.set(r,Tu(ic.get(r)||null,e,t,a,o,n)),!0}return!1}function Aw(e){var t=kl(e.target);if(t!==null){var a=uc(t);if(a!==null){if(t=a.tag,t===13){if(t=PR(a),t!==null){e.blockedOn=t,eL(e.priority,function(){TR(a)});return}}else if(t===31){if(t=NR(a),t!==null){e.blockedOn=t,eL(e.priority,function(){TR(a)});return}}else if(t===3&&a.stateNode.current.memoizedState.isDehydrated){e.blockedOn=a.tag===3?a.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ed(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var a=Eb(e.nativeEvent);if(a===null){a=e.nativeEvent;var o=new a.constructor(a.type,a);Ox=o,a.target.dispatchEvent(o),Ox=null}else return t=Ii(a),t!==null&&kw(t),e.blockedOn=a,!1;t.shift()}return!0}function kR(e,t,a){Ed(e)&&a.delete(t)}function m_(){kb=!1,Pr!==null&&Ed(Pr)&&(Pr=null),Nr!==null&&Ed(Nr)&&(Nr=null),Br!==null&&Ed(Br)&&(Br=null),sc.forEach(kR),ic.forEach(kR)}function id(e,t){e.blockedOn===t&&(e.blockedOn=null,kb||(kb=!0,zt.unstable_scheduleCallback(zt.unstable_NormalPriority,m_)))}var ud=null;function MR(e){ud!==e&&(ud=e,zt.unstable_scheduleCallback(zt.unstable_NormalPriority,function(){ud===e&&(ud=null);for(var t=0;t<e.length;t+=3){var a=e[t],o=e[t+1],n=e[t+2];if(typeof o!=\\\"function\\\"){if(Ey(o||a)===null)continue;break}var r=Ii(a);r!==null&&(e.splice(t,3),t-=3,Kx(r,{pending:!0,data:n,method:a.method,action:o},o,n))}}))}function Li(e){function t(i){return id(i,e)}Pr!==null&&id(Pr,e),Nr!==null&&id(Nr,e),Br!==null&&id(Br,e),sc.forEach(t),ic.forEach(t);for(var a=0;a<Sr.length;a++){var o=Sr[a];o.blockedOn===e&&(o.blockedOn=null)}for(;0<Sr.length&&(a=Sr[0],a.blockedOn===null);)Aw(a),a.blockedOn===null&&Sr.shift();if(a=(e.ownerDocument||e).$$reactFormReplay,a!=null)for(o=0;o<a.length;o+=3){var n=a[o],r=a[o+1],l=n[Fa]||null;if(typeof r==\\\"function\\\")l||MR(a);else if(l){var s=null;if(r&&r.hasAttribute(\\\"formAction\\\")){if(n=r,l=r[Fa]||null)s=l.formAction;else if(Ey(n)!==null)continue}else s=l.action;typeof s==\\\"function\\\"?a[o+1]=s:(a.splice(o,3),o-=3),MR(a)}}}function Ow(){function e(r){r.canIntercept&&r.info===\\\"react-transition\\\"&&r.intercept({handler:function(){return new Promise(function(l){return n=l})},focusReset:\\\"manual\\\",scroll:\\\"manual\\\"})}function t(){n!==null&&(n(),n=null),o||setTimeout(a,20)}function a(){if(!o&&!navigation.transition){var r=navigation.currentEntry;r&&r.url!=null&&navigation.navigate(r.url,{state:r.getState(),info:\\\"react-transition\\\",history:\\\"replace\\\"})}}if(typeof navigation==\\\"object\\\"){var o=!1,n=null;return navigation.addEventListener(\\\"navigate\\\",e),navigation.addEventListener(\\\"navigatesuccess\\\",t),navigation.addEventListener(\\\"navigateerror\\\",t),setTimeout(a,100),function(){o=!0,navigation.removeEventListener(\\\"navigate\\\",e),navigation.removeEventListener(\\\"navigatesuccess\\\",t),navigation.removeEventListener(\\\"navigateerror\\\",t),n!==null&&(n(),n=null)}}}function ky(e){this._internalRoot=e}vp.prototype.render=ky.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(F(409));var a=t.current,o=ao();Ew(a,o,e,t,null,null)};vp.prototype.unmount=ky.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Ew(e.current,2,null,e,null,null),yp(),t[Ri]=null}};function vp(e){this._internalRoot=e}vp.prototype.unstable_scheduleHydration=function(e){if(e){var t=ZR();e={blockedOn:null,target:e,priority:t};for(var a=0;a<Sr.length&&t!==0&&t<Sr[a].priority;a++);Sr.splice(a,0,e),a===0&&Aw(e)}};var AR=OR.version;if(AR!==\\\"19.3.0\\\")throw Error(F(527,AR,\\\"19.3.0\\\"));$e.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render==\\\"function\\\"?Error(F(188)):(e=Object.keys(e).join(\\\",\\\"),Error(F(268,e)));return e=gN(t),e=e!==null?BR(e):null,e=e===null?null:e.stateNode,e};var g_={bundleType:0,version:\\\"19.3.0\\\",rendererPackageName:\\\"react-dom\\\",currentDispatcherRef:ve,reconcilerVersion:\\\"19.3.0\\\"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<\\\"u\\\"&&(Eu=__REACT_DEVTOOLS_GLOBAL_HOOK__,!Eu.isDisabled&&Eu.supportsFiber))try{cc=Eu.inject(g_),eo=Eu}catch{}var Eu;Lp.createRoot=function(e,t){if(!DR(e))throw Error(F(299));var a=!1,o=\\\"\\\",n=d0,r=p0,l=m0;return t!=null&&(t.unstable_strictMode===!0&&(a=!0),t.identifierPrefix!==void 0&&(o=t.identifierPrefix),t.onUncaughtError!==void 0&&(n=t.onUncaughtError),t.onCaughtError!==void 0&&(r=t.onCaughtError),t.onRecoverableError!==void 0&&(l=t.onRecoverableError)),t=ww(e,1,!1,null,null,a,o,null,n,r,l,Ow),e[Ri]=t.current,Sy(e),new ky(t)};Lp.hydrateRoot=function(e,t,a){if(!DR(e))throw Error(F(299));var o=!1,n=\\\"\\\",r=d0,l=p0,s=m0,i=null;return a!=null&&(a.unstable_strictMode===!0&&(o=!0),a.identifierPrefix!==void 0&&(n=a.identifierPrefix),a.onUncaughtError!==void 0&&(r=a.onUncaughtError),a.onCaughtError!==void 0&&(l=a.onCaughtError),a.onRecoverableError!==void 0&&(s=a.onRecoverableError),a.formState!==void 0&&(i=a.formState)),t=ww(e,1,!0,t,a??null,o,n,i,r,l,s,Ow),t.context=Tw(null),a=t.current,o=ao(),o=Db(o),n=kr(o),n.callback=null,Mr(a,n,o),a=o,t.current.lanes=a,dc(t,a),pn(t),e[Ri]=t.current,Sy(e),new vp(t)};Lp.version=\\\"19.3.0\\\"});var Bw=la((d4,Nw)=>{\\\"use strict\\\";function Pw(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>\\\"u\\\"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=\\\"function\\\"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Pw)}catch(e){console.error(e)}}Pw(),Nw.exports=Dw()});var BT=la(Ep=>{\\\"use strict\\\";var hF=Symbol.for(\\\"react.transitional.element\\\"),xF=Symbol.for(\\\"react.fragment\\\");function NT(e,t,a){var o=null;if(a!==void 0&&(o=\\\"\\\"+a),t.key!==void 0&&(o=\\\"\\\"+t.key),\\\"key\\\"in t){a={};for(var n in t)n!==\\\"key\\\"&&(a[n]=t[n])}else a=t;return t=a.ref,{$$typeof:hF,type:e,key:o,ref:t!==void 0?t:null,props:a}}Ep.Fragment=xF;Ep.jsx=NT;Ep.jsxs=NT});var O=la((DG,_T)=>{\\\"use strict\\\";_T.exports=BT()});var vA=la(CA=>{\\\"use strict\\\";var ou=A();function b3(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var y3=typeof Object.is==\\\"function\\\"?Object.is:b3,S3=ou.useState,C3=ou.useEffect,v3=ou.useLayoutEffect,L3=ou.useDebugValue;function R3(e,t){var a=t(),o=S3({inst:{value:a,getSnapshot:t}}),n=o[0].inst,r=o[1];return v3(function(){n.value=a,n.getSnapshot=t,uC(n)&&r({inst:n})},[e,a,t]),C3(function(){return uC(n)&&r({inst:n}),e(function(){uC(n)&&r({inst:n})})},[e]),L3(a),a}function uC(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!y3(e,a)}catch{return!0}}function I3(e,t){return t()}var w3=typeof window>\\\"u\\\"||typeof window.document>\\\"u\\\"||typeof window.document.createElement>\\\"u\\\"?I3:R3;CA.useSyncExternalStore=ou.useSyncExternalStore!==void 0?ou.useSyncExternalStore:w3});var cC=la((OY,LA)=>{\\\"use strict\\\";LA.exports=vA()});var IA=la(RA=>{\\\"use strict\\\";var Gm=A(),T3=cC();function E3(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var k3=typeof Object.is==\\\"function\\\"?Object.is:E3,M3=T3.useSyncExternalStore,A3=Gm.useRef,O3=Gm.useEffect,D3=Gm.useMemo,P3=Gm.useDebugValue;RA.useSyncExternalStoreWithSelector=function(e,t,a,o,n){var r=A3(null);if(r.current===null){var l={hasValue:!1,value:null};r.current=l}else l=r.current;r=D3(function(){function i(p){if(!u){if(u=!0,c=p,p=o(p),n!==void 0&&l.hasValue){var h=l.value;if(n(h,p))return d=h}return d=p}if(h=d,k3(c,p))return h;var b=o(p);return n!==void 0&&n(h,b)?(c=p,h):(c=p,d=b)}var u=!1,c,d,f=a===void 0?null:a;return[function(){return i(t())},f===null?void 0:function(){return i(f())}]},[t,a,o,n]);var s=M3(e,r[0],r[1]);return O3(function(){l.hasValue=!0,l.value=s},[s]),P3(s),s}});var TA=la((PY,wA)=>{\\\"use strict\\\";wA.exports=IA()});var qA=la(UA=>{\\\"use strict\\\";var ru=A();function G3(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var X3=typeof Object.is==\\\"function\\\"?Object.is:G3,j3=ru.useState,Y3=ru.useEffect,K3=ru.useLayoutEffect,Z3=ru.useDebugValue;function $3(e,t){var a=t(),o=j3({inst:{value:a,getSnapshot:t}}),n=o[0].inst,r=o[1];return K3(function(){n.value=a,n.getSnapshot=t,xC(n)&&r({inst:n})},[e,a,t]),Y3(function(){return xC(n)&&r({inst:n}),e(function(){xC(n)&&r({inst:n})})},[e]),Z3(a),a}function xC(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!X3(e,a)}catch{return!0}}function Q3(e,t){return t()}var W3=typeof window>\\\"u\\\"||typeof window.document>\\\"u\\\"||typeof window.document.createElement>\\\"u\\\"?Q3:$3;UA.useSyncExternalStore=ru.useSyncExternalStore!==void 0?ru.useSyncExternalStore:W3});var GA=la((SK,VA)=>{\\\"use strict\\\";VA.exports=qA()});var o4={};Ya(o4,{mountReportIsland:()=>gv});var BP=v(A(),1),_P=v(Bw(),1);var Rp=v(A(),1);var _w=e=>e?.replace(/([a-z0-9])([A-Z])/g,\\\"$1-$2\\\").toLowerCase();function Fw(e,t,a=[]){if(t==null)throw new Error(\\\"[lucide]: iconNode is required when icon name is used\\\");return{name:_w(e),size:24,node:t,...a.length>0?{aliases:a}:{}}}var Hw=e=>{let t=\\\"\\\",a=!1;for(let o of e){if(o===\\\"-\\\"||o===\\\"_\\\"||o<=\\\" \\\"){a=t.length>0;continue}t.length===0?t+=o.toLowerCase():t+=a?o.toUpperCase():o,a=!1}return t};var zw=e=>{let t=Hw(e);return t.charAt(0).toUpperCase()+t.slice(1)};var vc=v(A(),1);var Cc=(...e)=>e.filter((t,a,o)=>!!t&&t.trim()!==\\\"\\\"&&o.indexOf(t)===a).join(\\\" \\\").trim();var Gr={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\\\"};function My(e){return e!=null}function Uw(e,t={}){let a=t.attributeNames??{},o=f=>a[f]??f,n=e.size??e.width??Gr.width,r=e.size??e.height??Gr.height,l=e.aliases?.filter(f=>typeof f==\\\"string\\\"&&f.trim()!==\\\"\\\").map(f=>`lucide-${f}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...l],i=t.className?.split(\\\" \\\").filter(Boolean)??[],u=t.includeDefaultClasses===!1?Cc(...i):Cc(\\\"lucide\\\",...s,...i),c=t.absoluteStrokeWidth?Number(t.strokeWidth??Gr[\\\"stroke-width\\\"])*Number(e.size??e.width??Gr.width)/Number(t.size??t.width??Gr.width):t.strokeWidth??Gr[\\\"stroke-width\\\"];return[\\\"svg\\\",{...Object.entries(Gr).reduce((f,[p,h])=>(f[o(p)]=h,f),{}),...\\\"color\\\"in t&&t.color&&{[o(\\\"stroke\\\")]:t.color},...\\\"size\\\"in t&&My(t.size)&&{[o(\\\"width\\\")]:t.size,[o(\\\"height\\\")]:t.size},...\\\"width\\\"in t&&My(t.width)&&{[o(\\\"width\\\")]:t.width},...\\\"height\\\"in t&&My(t.height)&&{[o(\\\"height\\\")]:t.height},[o(\\\"stroke-width\\\")]:c,...u&&{[o(\\\"class\\\")]:u},[o(\\\"viewBox\\\")]:`0 0 ${n} ${r}`,...t.hasA11yProp===!1?{[o(\\\"aria-hidden\\\")]:\\\"true\\\"}:{},...\\\"attributes\\\"in t&&t.attributes},e.node.map(f=>{let[p,h,b]=f,S=t.nonScalingStroke?{[o(\\\"vector-effect\\\")]:\\\"non-scaling-stroke\\\",...h}:h;return b?[p,S,b]:[p,S]})]}function qw(e,t={}){return Uw(e,{...t,attributeNames:{...t.attributeNames,class:\\\"className\\\",\\\"stroke-width\\\":\\\"strokeWidth\\\",\\\"stroke-linecap\\\":\\\"strokeLinecap\\\",\\\"stroke-linejoin\\\":\\\"strokeLinejoin\\\",\\\"vector-effect\\\":\\\"vectorEffect\\\"}})}var Vw=e=>{for(let t in e)if(t.startsWith(\\\"aria-\\\")||t===\\\"role\\\"||t===\\\"title\\\")return!0;return!1};var Ai=v(A(),1);var h_=(0,Ai.createContext)({});var Gw=()=>(0,Ai.useContext)(h_);var Xw=(0,vc.forwardRef)(({color:e,size:t,width:a,height:o,strokeWidth:n,absoluteStrokeWidth:r,nonScalingStroke:l,className:s=\\\"\\\",children:i,iconNode:u=[],icon:c={node:u,aliases:[],size:24},...d},f)=>{let{size:p=24,strokeWidth:h=2,absoluteStrokeWidth:b=!1,nonScalingStroke:S=!1,color:g=\\\"currentColor\\\",className:m=\\\"\\\"}=Gw()??{},x=!!i||Vw(d),[y,L,I=[]]=qw(c,{color:e??g,width:a??t??p,height:o??t??p,strokeWidth:n??h,absoluteStrokeWidth:r??b,nonScalingStroke:l??S,className:Cc(m,s),hasA11yProp:x,attributes:d});return(0,vc.createElement)(y,{ref:f,...L},[...I.map(([R,C])=>(0,vc.createElement)(R,C)),...Array.isArray(i)?i:[i]])});function St(e,t=[],a=[]){let o=typeof e==\\\"string\\\"?Fw(e,t,a):e,n=(0,Rp.forwardRef)(({className:r,...l},s)=>(0,Rp.createElement)(Xw,{ref:s,icon:o,className:r,...l}));return o.name&&(n.displayName=zw(o.name)),n}var jw={name:\\\"bot\\\",size:24,node:[[\\\"path\\\",{d:\\\"M12 8V4H8\\\",key:\\\"hb8ula\\\"}],[\\\"rect\\\",{width:\\\"16\\\",height:\\\"12\\\",x:\\\"4\\\",y:\\\"8\\\",rx:\\\"2\\\",key:\\\"enze0r\\\"}],[\\\"path\\\",{d:\\\"M2 14h2\\\",key:\\\"vft8re\\\"}],[\\\"path\\\",{d:\\\"M20 14h2\\\",key:\\\"4cs60a\\\"}],[\\\"path\\\",{d:\\\"M15 13v2\\\",key:\\\"1xurst\\\"}],[\\\"path\\\",{d:\\\"M9 13v2\\\",key:\\\"rq6x2g\\\"}]]};jw.node;var Lc=St(jw);var Yw={name:\\\"ellipsis\\\",size:24,node:[[\\\"circle\\\",{cx:\\\"12\\\",cy:\\\"12\\\",r:\\\"1\\\",key:\\\"41hilf\\\"}],[\\\"circle\\\",{cx:\\\"19\\\",cy:\\\"12\\\",r:\\\"1\\\",key:\\\"1wjl8i\\\"}],[\\\"circle\\\",{cx:\\\"5\\\",cy:\\\"12\\\",r:\\\"1\\\",key:\\\"1pcz8c\\\"}]],aliases:[\\\"more-horizontal\\\"]};Yw.node;var Xr=St(Yw);var Kw={name:\\\"file-text\\\",size:24,node:[[\\\"path\\\",{d:\\\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\\\",key:\\\"1oefj6\\\"}],[\\\"path\\\",{d:\\\"M14 2v5a1 1 0 0 0 1 1h5\\\",key:\\\"wfsgrz\\\"}],[\\\"path\\\",{d:\\\"M10 9H8\\\",key:\\\"b1mrlr\\\"}],[\\\"path\\\",{d:\\\"M16 13H8\\\",key:\\\"t4e002\\\"}],[\\\"path\\\",{d:\\\"M16 17H8\\\",key:\\\"z1uh3a\\\"}]]};Kw.node;var Rc=St(Kw);var Zw={name:\\\"link\\\",size:24,node:[[\\\"path\\\",{d:\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\",key:\\\"1cjeqo\\\"}],[\\\"path\\\",{d:\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\",key:\\\"19qd67\\\"}]]};Zw.node;var Ic=St(Zw);var $w={name:\\\"list\\\",size:24,node:[[\\\"path\\\",{d:\\\"M3 5h.01\\\",key:\\\"18ugdj\\\"}],[\\\"path\\\",{d:\\\"M3 12h.01\\\",key:\\\"nlz23k\\\"}],[\\\"path\\\",{d:\\\"M3 19h.01\\\",key:\\\"noohij\\\"}],[\\\"path\\\",{d:\\\"M8 5h13\\\",key:\\\"1pao27\\\"}],[\\\"path\\\",{d:\\\"M8 12h13\\\",key:\\\"1za7za\\\"}],[\\\"path\\\",{d:\\\"M8 19h13\\\",key:\\\"m83p4d\\\"}]]};$w.node;var wc=St($w);var Qw={name:\\\"monitor\\\",size:24,node:[[\\\"rect\\\",{width:\\\"20\\\",height:\\\"14\\\",x:\\\"2\\\",y:\\\"3\\\",rx:\\\"2\\\",key:\\\"48i651\\\"}],[\\\"line\\\",{x1:\\\"8\\\",x2:\\\"16\\\",y1:\\\"21\\\",y2:\\\"21\\\",key:\\\"1svkeh\\\"}],[\\\"line\\\",{x1:\\\"12\\\",x2:\\\"12\\\",y1:\\\"17\\\",y2:\\\"21\\\",key:\\\"vw1qmm\\\"}]]};Qw.node;var Tc=St(Qw);var Ww={name:\\\"moon\\\",size:24,node:[[\\\"path\\\",{d:\\\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\\\",key:\\\"kfwtm\\\"}]]};Ww.node;var Ec=St(Ww);var Jw={name:\\\"search\\\",size:24,node:[[\\\"path\\\",{d:\\\"m21 21-4.34-4.34\\\",key:\\\"14j7rj\\\"}],[\\\"circle\\\",{cx:\\\"11\\\",cy:\\\"11\\\",r:\\\"8\\\",key:\\\"4ej97u\\\"}]]};Jw.node;var kc=St(Jw);var eT={name:\\\"share-2\\\",size:24,node:[[\\\"circle\\\",{cx:\\\"18\\\",cy:\\\"5\\\",r:\\\"3\\\",key:\\\"gq8acd\\\"}],[\\\"circle\\\",{cx:\\\"6\\\",cy:\\\"12\\\",r:\\\"3\\\",key:\\\"w7nqdw\\\"}],[\\\"circle\\\",{cx:\\\"18\\\",cy:\\\"19\\\",r:\\\"3\\\",key:\\\"1xt0gg\\\"}],[\\\"line\\\",{x1:\\\"8.59\\\",x2:\\\"15.42\\\",y1:\\\"13.51\\\",y2:\\\"17.49\\\",key:\\\"47mynk\\\"}],[\\\"line\\\",{x1:\\\"15.41\\\",x2:\\\"8.59\\\",y1:\\\"6.51\\\",y2:\\\"10.49\\\",key:\\\"1n3mei\\\"}]]};eT.node;var Mc=St(eT);var tT={name:\\\"sparkles\\\",size:24,node:[[\\\"path\\\",{d:\\\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\\\",key:\\\"1s2grr\\\"}],[\\\"path\\\",{d:\\\"M20 2v4\\\",key:\\\"1rf3ol\\\"}],[\\\"path\\\",{d:\\\"M22 4h-4\\\",key:\\\"gwowj6\\\"}],[\\\"circle\\\",{cx:\\\"4\\\",cy:\\\"20\\\",r:\\\"2\\\",key:\\\"6kqj1y\\\"}]],aliases:[\\\"stars\\\"]};tT.node;var jr=St(tT);var aT={name:\\\"sun\\\",size:24,node:[[\\\"circle\\\",{cx:\\\"12\\\",cy:\\\"12\\\",r:\\\"4\\\",key:\\\"4exip2\\\"}],[\\\"path\\\",{d:\\\"M12 2v2\\\",key:\\\"tus03m\\\"}],[\\\"path\\\",{d:\\\"M12 20v2\\\",key:\\\"1lh1kg\\\"}],[\\\"path\\\",{d:\\\"m4.93 4.93 1.41 1.41\\\",key:\\\"149t6j\\\"}],[\\\"path\\\",{d:\\\"m17.66 17.66 1.41 1.41\\\",key:\\\"ptbguv\\\"}],[\\\"path\\\",{d:\\\"M2 12h2\\\",key:\\\"1t8f8n\\\"}],[\\\"path\\\",{d:\\\"M20 12h2\\\",key:\\\"1q8mjw\\\"}],[\\\"path\\\",{d:\\\"m6.34 17.66-1.41 1.41\\\",key:\\\"1m8zz5\\\"}],[\\\"path\\\",{d:\\\"m19.07 4.93-1.41 1.41\\\",key:\\\"1shlcs\\\"}]]};aT.node;var Ac=St(aT);var oT={name:\\\"x\\\",size:24,node:[[\\\"path\\\",{d:\\\"M18 6 6 18\\\",key:\\\"1bl5f8\\\"}],[\\\"path\\\",{d:\\\"m6 6 12 12\\\",key:\\\"d8bk6v\\\"}]]};oT.node;var Zl=St(oT);function nT(){if(typeof document>\\\"u\\\")throw new Error(\\\"WebMCP is unavailable outside a browser document.\\\");let e=document.modelContext;if(!e)throw new Error(\\\"WebMCP is unavailable: document.modelContext is undefined. Use a browser with WebMCP enabled, or installTestModelContext() from webmcpable/testing.\\\");return e}async function x_(e){let t;try{t=await e()}catch(a){return`Error: ${a instanceof Error?a.message:String(a)}`}return typeof t==\\\"string\\\"?t:t===void 0?\\\"\\\":JSON.stringify(t)??\\\"\\\"}function b_(e){let t=new WeakSet;try{return JSON.stringify(e,(a,o)=>{if(typeof o==\\\"bigint\\\")return`${o}`;if(o instanceof Map)return Object.fromEntries(o);if(o instanceof Set)return[...o];if(typeof o==\\\"object\\\"&&o!==null){if(t.has(o))return\\\"[circular]\\\";t.add(o)}return o})??\\\"\\\"}catch{return String(e)}}function y_(e){let t=`${e.name} ${b_(e.input)}`,a=e.title??e.description;return e.descriptorChanged?`${t}\\n${a}\\nThis tool has changed since page load.`:`${t}\\n${a}`}async function S_(e,t){return e===void 0||e===!1?!0:typeof e==\\\"function\\\"?e(t):typeof globalThis.confirm==\\\"function\\\"?globalThis.confirm(y_(t)):!1}var lT=e=>typeof e==\\\"object\\\"&&e!==null&&\\\"~standard\\\"in e;function sT(e){if(!e)return{properties:{},type:\\\"object\\\"};let t=e;if(typeof t.toJSONSchema==\\\"function\\\")return t.toJSONSchema();if(typeof t.toJsonSchema==\\\"function\\\")return t.toJsonSchema();if(lT(e))throw new TypeError(`Cannot derive a JSON Schema from \\\"${e[\\\"~standard\\\"].vendor}\\\". Pass a JSON Schema object as \\\\`input\\\\` instead.`);return e}async function C_(e,t){if(!e)return{value:t};if(!lT(e)){let o=e.required;if(Array.isArray(o)){let n=typeof t==\\\"object\\\"&&t!==null?t:{},r=o.filter(l=>typeof l==\\\"string\\\"&&n[l]===void 0);if(r.length>0)return{error:`Invalid input \\\\u2014 missing required: ${r.join(\\\", \\\")}`}}return{value:t}}let a=await e[\\\"~standard\\\"].validate(t);return a.issues?{error:`Invalid input \\\\u2014 ${a.issues.map(o=>`${o.path?.map(n=>typeof n==\\\"object\\\"?n.key:n).join(\\\".\\\")??\\\"\\\"}: ${o.message}`).join(\\\"; \\\")}`}:{value:a.value}}var v_=e=>e,iT=e=>e.when?.()??!0,L_=(e,t)=>t===!0?void 0:t||`${e} is not available right now.`,Ay=(e,t)=>t===\\\"off\\\"?void 0:e.title,rT=(e,t,a)=>JSON.stringify([e,Ay(t,a),t.description,sT(t.input),t.annotations,t.exposedTo]),R_=()=>new AbortController().signal;function I_(e,t,a={},o=()=>!1,n=R_()){let r=Ay(t,a.titles),l=async(i,u)=>{let c=u??{signal:n},d=await C_(t.input,i);return\\\"error\\\"in d?d.error:x_(async()=>{let f=L_(e,iT(t));if(f)return f;let p=t.confirm??(t.annotations?.readOnlyHint===!0?!1:a.confirm);return p&&!await S_(p,{description:t.description,descriptorChanged:o(),input:d.value,name:e,...r!==void 0&&{title:r}})?`${e} was not confirmed.`:t.execute(v_(d.value),c)})};if(!a.onCall)return l;let{onCall:s}=a;return async(i,u)=>{let c=Date.now(),d=await l(i,u);try{s({input:i,ms:Date.now()-c,name:e,result:d})}catch{}return d}}function uT(e,t={}){let a=new Map,o=new Map;async function n(s,i,u){let c=new AbortController;a.set(s,{controller:c,key:u});try{let d=Ay(i,t.titles);await nT().registerTool({description:i.description,name:s,...d!==void 0&&{title:d},inputSchema:sT(i.input),...i.annotations&&{annotations:i.annotations},execute:I_(s,i,t,()=>o.get(s)!==rT(s,i,t.titles),c.signal)},{signal:c.signal,...i.exposedTo&&{exposedTo:i.exposedTo}}),o.has(s)||o.set(s,u)}catch(d){throw a.get(s)?.controller===c&&a.delete(s),new Error(`webmcpable could not register \\\"${s}\\\": ${d instanceof Error?`${d.name}: ${d.message}`:String(d)}`,{cause:d})}}function r(s){a.get(s)?.controller.abort(),a.delete(s)}async function l(){if(typeof document>\\\"u\\\"||!document.modelContext)return;let s=new Set(Object.keys(e));for(let i of[...a.keys()])s.has(i)||r(i);for(let[i,u]of Object.entries(e)){let c=a.get(i);if(iT(u)===!1){c&&r(i);continue}let d=rT(i,u,t.titles);c?c.key!==d&&(r(i),await n(i,u,d)):await n(i,u,d)}}return{mount:l,revalidate:l,unmount(){for(let s of[...a.keys()])r(s);o.clear()}}}var $l=v(A(),1),cT=e=>{console.error(\\\"[webmcpable] Tool registration failed.\\\",e)};function fT(e,t={}){let a=(0,$l.useRef)(void 0),o=(0,$l.useRef)(e),n=(0,$l.useRef)(t);o.current=e,n.current=t,(0,$l.useEffect)(()=>{let r=new Proxy({},{get(s,i){if(typeof i!=\\\"string\\\")return;let u=()=>o.current[i];return{get annotations(){return u().annotations},get description(){return u().description},get exposedTo(){return u().exposedTo},get input(){return u().input},get title(){return u().title},execute:(c,d)=>u().execute(c,d),when:()=>u().when?.()??!0}},getOwnPropertyDescriptor:()=>({configurable:!0,enumerable:!0}),has:(s,i)=>typeof i==\\\"string\\\"&&i in o.current,ownKeys:()=>Object.keys(o.current)}),l=uT(r,{get confirm(){return n.current.confirm},get titles(){return n.current.titles}});return a.current=l,l.mount().catch(cT),()=>{l.unmount(),a.current=void 0}},[]),(0,$l.useEffect)(()=>{a.current?.revalidate().catch(cT)})}var ze=v(A(),1);function dT(e){var t,a,o=\\\"\\\";if(typeof e==\\\"string\\\"||typeof e==\\\"number\\\")o+=e;else if(typeof e==\\\"object\\\")if(Array.isArray(e)){var n=e.length;for(t=0;t<n;t++)e[t]&&(a=dT(e[t]))&&(o&&(o+=\\\" \\\"),o+=a)}else for(a in e)e[a]&&(o&&(o+=\\\" \\\"),o+=a);return o}function Ip(){for(var e,t,a=0,o=\\\"\\\",n=arguments.length;a<n;a++)(e=arguments[a])&&(t=dT(e))&&(o&&(o+=\\\" \\\"),o+=t);return o}var pT=e=>typeof e==\\\"boolean\\\"?`${e}`:e===0?\\\"0\\\":e,mT=Ip,Yr=(e,t)=>a=>{var o;if(t?.variants==null)return mT(e,a?.class,a?.className);let{variants:n,defaultVariants:r}=t,l=Object.keys(n).map(u=>{let c=a?.[u],d=r?.[u];if(c===null)return null;let f=pT(c)||pT(d);return n[u][f]}),s=a&&Object.entries(a).reduce((u,c)=>{let[d,f]=c;return f===void 0||(u[d]=f),u},{}),i=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((u,c)=>{let{class:d,className:f,...p}=c;return Object.entries(p).every(h=>{let[b,S]=h;return Array.isArray(S)?S.includes({...r,...s}[b]):{...r,...s}[b]===S})?[...u,d,f]:u},[]);return mT(e,l,i,a?.class,a?.className)};var w_=(e,t)=>{let a=new Array(e.length+t.length);for(let o=0;o<e.length;o++)a[o]=e[o];for(let o=0;o<t.length;o++)a[e.length+o]=t[o];return a},T_=(e,t)=>({classGroupId:e,validator:t}),ST=(e=new Map,t=null,a)=>({nextPart:e,validators:t,classGroupId:a});var gT=[],E_=\\\"arbitrary..\\\",k_=e=>{let t=A_(e),{conflictingClassGroups:a,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:l=>{if(l.startsWith(\\\"[\\\")&&l.endsWith(\\\"]\\\"))return M_(l);let s=l.split(\\\"-\\\"),i=s[0]===\\\"\\\"&&s.length>1?1:0;return CT(s,i,t)},getConflictingClassGroupIds:(l,s)=>{if(s){let i=o[l],u=a[l];return i?u?w_(u,i):i:u||gT}return a[l]||gT}}},CT=(e,t,a)=>{if(e.length-t===0)return a.classGroupId;let n=e[t],r=a.nextPart.get(n);if(r){let u=CT(e,t+1,r);if(u)return u}let l=a.validators;if(l===null)return;let s=t===0?e.join(\\\"-\\\"):e.slice(t).join(\\\"-\\\"),i=l.length;for(let u=0;u<i;u++){let c=l[u];if(c.validator(s))return c.classGroupId}},M_=e=>e.slice(1,-1).indexOf(\\\":\\\")===-1?void 0:(()=>{let t=e.slice(1,-1),a=t.indexOf(\\\":\\\"),o=t.slice(0,a);return o?E_+o:void 0})(),A_=e=>{let{theme:t,classGroups:a}=e;return O_(a,t)},O_=(e,t)=>{let a=ST();for(let o in e){let n=e[o];Dy(n,a,o,t)}return a},Dy=(e,t,a,o)=>{let n=e.length;for(let r=0;r<n;r++){let l=e[r];D_(l,t,a,o)}},D_=(e,t,a,o)=>{if(typeof e==\\\"string\\\"){P_(e,t,a);return}if(typeof e==\\\"function\\\"){N_(e,t,a,o);return}B_(e,t,a,o)},P_=(e,t,a)=>{let o=e===\\\"\\\"?t:vT(t,e);o.classGroupId=a},N_=(e,t,a,o)=>{if(__(e)){Dy(e(o),t,a,o);return}t.validators===null&&(t.validators=[]),t.validators.push(T_(a,e))},B_=(e,t,a,o)=>{let n=Object.entries(e),r=n.length;for(let l=0;l<r;l++){let[s,i]=n[l];Dy(i,vT(t,s),a,o)}},vT=(e,t)=>{let a=e,o=t.split(\\\"-\\\"),n=o.length;for(let r=0;r<n;r++){let l=o[r],s=a.nextPart.get(l);s||(s=ST(),a.nextPart.set(l,s)),a=s}return a},__=e=>\\\"isThemeGetter\\\"in e&&e.isThemeGetter===!0,F_=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,a=Object.create(null),o=Object.create(null),n=(r,l)=>{a[r]=l,t++,t>e&&(t=0,o=a,a=Object.create(null))};return{get(r){let l=a[r];if(l!==void 0)return l;if((l=o[r])!==void 0)return n(r,l),l},set(r,l){r in a?a[r]=l:n(r,l)}}};var H_=[],hT=(e,t,a,o,n)=>({modifiers:e,hasImportantModifier:t,baseClassName:a,maybePostfixModifierPosition:o,isExternal:n}),z_=e=>{let{prefix:t,experimentalParseClassName:a}=e,o=n=>{let r=[],l=0,s=0,i=0,u,c=n.length;for(let b=0;b<c;b++){let S=n[b];if(l===0&&s===0){if(S===\\\":\\\"){r.push(n.slice(i,b)),i=b+1;continue}if(S===\\\"/\\\"){u=b;continue}}S===\\\"[\\\"?l++:S===\\\"]\\\"?l--:S===\\\"(\\\"?s++:S===\\\")\\\"&&s--}let d=r.length===0?n:n.slice(i),f=d,p=!1;d.endsWith(\\\"!\\\")?(f=d.slice(0,-1),p=!0):d.startsWith(\\\"!\\\")&&(f=d.slice(1),p=!0);let h=u&&u>i?u-i:void 0;return hT(r,p,f,h)};if(t){let n=t+\\\":\\\",r=o;o=l=>l.startsWith(n)?r(l.slice(n.length)):hT(H_,!1,l,void 0,!0)}if(a){let n=o;o=r=>a({className:r,parseClassName:n})}return o},U_=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((a,o)=>{t.set(a,1e6+o)}),a=>{let o=[],n=[];for(let r=0;r<a.length;r++){let l=a[r],s=l[0]===\\\"[\\\",i=t.has(l);s||i?(n.length>0&&(n.sort(),o.push(...n),n=[]),o.push(l)):n.push(l)}return n.length>0&&(n.sort(),o.push(...n)),o}},q_=e=>({cache:F_(e.cacheSize),parseClassName:z_(e),sortModifiers:U_(e),postfixLookupClassGroupIds:V_(e),...k_(e)}),V_=e=>{let t=Object.create(null),a=e.postfixLookupClassGroups;if(a)for(let o=0;o<a.length;o++)t[a[o]]=!0;return t},G_=/\\\\s+/,X_=(e,t)=>{let{parseClassName:a,getClassGroupId:o,getConflictingClassGroupIds:n,sortModifiers:r,postfixLookupClassGroupIds:l}=t,s=[],i=e.trim().split(G_),u=\\\"\\\";for(let c=i.length-1;c>=0;c-=1){let d=i[c],{isExternal:f,modifiers:p,hasImportantModifier:h,baseClassName:b,maybePostfixModifierPosition:S}=a(d);if(f){u=d+(u.length>0?\\\" \\\"+u:u);continue}let g=!!S,m;if(g){let R=b.substring(0,S);m=o(R);let C=m&&l[m]?o(b):void 0;C&&C!==m&&(m=C,g=!1)}else m=o(b);if(!m){if(!g){u=d+(u.length>0?\\\" \\\"+u:u);continue}if(m=o(b),!m){u=d+(u.length>0?\\\" \\\"+u:u);continue}g=!1}let x=p.length===0?\\\"\\\":p.length===1?p[0]:r(p).join(\\\":\\\"),y=h?x+\\\"!\\\":x,L=y+m;if(s.indexOf(L)>-1)continue;s.push(L);let I=n(m,g);for(let R=0;R<I.length;++R){let C=I[R];s.push(y+C)}u=d+(u.length>0?\\\" \\\"+u:u)}return u},j_=(...e)=>{let t=0,a,o,n=\\\"\\\";for(;t<e.length;)(a=e[t++])&&(o=LT(a))&&(n&&(n+=\\\" \\\"),n+=o);return n},LT=e=>{if(typeof e==\\\"string\\\")return e;let t,a=\\\"\\\";for(let o=0;o<e.length;o++)e[o]&&(t=LT(e[o]))&&(a&&(a+=\\\" \\\"),a+=t);return a},Y_=(e,...t)=>{let a,o,n,r,l=i=>{let u=t.reduce((c,d)=>d(c),e());return a=q_(u),o=a.cache.get,n=a.cache.set,r=s,s(i)},s=i=>{let u=o(i);if(u)return u;let c=X_(i,a);return n(i,c),c};return r=l,(...i)=>r(j_(...i))},K_=[],Ut=e=>{let t=a=>a[e]||K_;return t.isThemeGetter=!0,t.themeKey=e,t},RT=/^\\\\[(?:(\\\\w[\\\\w-]*):)?(.+)\\\\]$/i,IT=/^\\\\((?:(\\\\w[\\\\w-]*):)?(.+)\\\\)$/i,Z_=/^\\\\d+(?:\\\\.\\\\d+)?\\\\/\\\\d+(?:\\\\.\\\\d+)?$/,$_=/^(\\\\d+(\\\\.\\\\d+)?)?(xs|sm|md|lg|xl)$/,Q_=/\\\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\\\b(calc|min|max|clamp)\\\\(.+\\\\)|^0$/,W_=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\\\\(.+\\\\)$/,J_=/^(inset_)?-?((\\\\d+)?\\\\.?(\\\\d+)[a-z]+|0)_-?((\\\\d+)?\\\\.?(\\\\d+)[a-z]+|0)/,eF=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\\\(.+\\\\)$/,Kr=e=>Z_.test(e),Fe=e=>!!e&&!Number.isNaN(Number(e)),mn=e=>!!e&&Number.isInteger(Number(e)),Oy=e=>e.endsWith(\\\"%\\\")&&Fe(e.slice(0,-1)),$n=e=>$_.test(e),wT=()=>!0,tF=e=>Q_.test(e)&&!W_.test(e),Py=()=>!1,aF=e=>J_.test(e),oF=e=>eF.test(e),nF=e=>!ne(e)&&!re(e),rF=e=>e.startsWith(\\\"@container\\\")&&(e[10]===\\\"/\\\"&&e[11]!==void 0||e[11]===\\\"s\\\"&&e[16]!==void 0&&e.startsWith(\\\"-size/\\\",10)||e[11]===\\\"n\\\"&&e[18]!==void 0&&e.startsWith(\\\"-normal/\\\",10)),lF=e=>Zr(e,kT,Py),ne=e=>RT.test(e),Ql=e=>Zr(e,MT,tF),xT=e=>Zr(e,mF,Fe),sF=e=>Zr(e,OT,wT),iF=e=>Zr(e,AT,Py),bT=e=>Zr(e,TT,Py),uF=e=>Zr(e,ET,oF),wp=e=>Zr(e,DT,aF),re=e=>IT.test(e),Oc=e=>Wl(e,MT),cF=e=>Wl(e,AT),yT=e=>Wl(e,TT),fF=e=>Wl(e,kT),dF=e=>Wl(e,ET),Tp=e=>Wl(e,DT,!0),pF=e=>Wl(e,OT,!0),Zr=(e,t,a)=>{let o=RT.exec(e);return o?o[1]?t(o[1]):a(o[2]):!1},Wl=(e,t,a=!1)=>{let o=IT.exec(e);return o?o[1]?t(o[1]):a:!1},TT=e=>e===\\\"position\\\"||e===\\\"percentage\\\",ET=e=>e===\\\"image\\\"||e===\\\"url\\\",kT=e=>e===\\\"length\\\"||e===\\\"size\\\"||e===\\\"bg-size\\\",MT=e=>e===\\\"length\\\",mF=e=>e===\\\"number\\\",AT=e=>e===\\\"family-name\\\",OT=e=>e===\\\"number\\\"||e===\\\"weight\\\",DT=e=>e===\\\"shadow\\\";var gF=()=>{let e=Ut(\\\"color\\\"),t=Ut(\\\"font\\\"),a=Ut(\\\"text\\\"),o=Ut(\\\"font-weight\\\"),n=Ut(\\\"tracking\\\"),r=Ut(\\\"leading\\\"),l=Ut(\\\"breakpoint\\\"),s=Ut(\\\"container\\\"),i=Ut(\\\"spacing\\\"),u=Ut(\\\"radius\\\"),c=Ut(\\\"shadow\\\"),d=Ut(\\\"inset-shadow\\\"),f=Ut(\\\"text-shadow\\\"),p=Ut(\\\"drop-shadow\\\"),h=Ut(\\\"blur\\\"),b=Ut(\\\"perspective\\\"),S=Ut(\\\"aspect\\\"),g=Ut(\\\"ease\\\"),m=Ut(\\\"animate\\\"),x=()=>[\\\"auto\\\",\\\"avoid\\\",\\\"all\\\",\\\"avoid-page\\\",\\\"page\\\",\\\"left\\\",\\\"right\\\",\\\"column\\\"],y=()=>[\\\"center\\\",\\\"top\\\",\\\"bottom\\\",\\\"left\\\",\\\"right\\\",\\\"top-left\\\",\\\"left-top\\\",\\\"top-right\\\",\\\"right-top\\\",\\\"bottom-right\\\",\\\"right-bottom\\\",\\\"bottom-left\\\",\\\"left-bottom\\\"],L=()=>[...y(),re,ne],I=()=>[\\\"auto\\\",\\\"hidden\\\",\\\"clip\\\",\\\"visible\\\",\\\"scroll\\\"],R=()=>[\\\"auto\\\",\\\"contain\\\",\\\"none\\\"],C=()=>[re,ne,i],k=()=>[Kr,\\\"full\\\",\\\"auto\\\",...C()],E=()=>[mn,\\\"none\\\",\\\"subgrid\\\",re,ne],T=()=>[\\\"auto\\\",{span:[\\\"full\\\",mn,re,ne]},mn,re,ne],w=()=>[mn,\\\"auto\\\",re,ne],P=()=>[\\\"auto\\\",\\\"min\\\",\\\"max\\\",\\\"fr\\\",re,ne],D=()=>[\\\"start\\\",\\\"end\\\",\\\"center\\\",\\\"between\\\",\\\"around\\\",\\\"evenly\\\",\\\"stretch\\\",\\\"baseline\\\",\\\"center-safe\\\",\\\"end-safe\\\"],M=()=>[\\\"start\\\",\\\"end\\\",\\\"center\\\",\\\"stretch\\\",\\\"center-safe\\\",\\\"end-safe\\\"],_=()=>[\\\"auto\\\",...C()],U=()=>[Kr,\\\"auto\\\",\\\"full\\\",\\\"dvw\\\",\\\"dvh\\\",\\\"lvw\\\",\\\"lvh\\\",\\\"svw\\\",\\\"svh\\\",\\\"min\\\",\\\"max\\\",\\\"fit\\\",...C()],B=()=>[s,Kr,\\\"screen\\\",\\\"full\\\",\\\"dvw\\\",\\\"lvw\\\",\\\"svw\\\",\\\"min\\\",\\\"max\\\",\\\"fit\\\",...C()],z=()=>[Kr,\\\"screen\\\",\\\"full\\\",\\\"lh\\\",\\\"dvh\\\",\\\"lvh\\\",\\\"svh\\\",\\\"min\\\",\\\"max\\\",\\\"fit\\\",...C()],N=()=>[e,re,ne],j=()=>[...y(),yT,bT,{position:[re,ne]}],ae=()=>[\\\"no-repeat\\\",{repeat:[\\\"\\\",\\\"x\\\",\\\"y\\\",\\\"space\\\",\\\"round\\\"]}],oe=()=>[\\\"auto\\\",\\\"cover\\\",\\\"contain\\\",fF,lF,{size:[re,ne]}],q=()=>[Oy,Oc,Ql],Y=()=>[\\\"\\\",\\\"none\\\",\\\"full\\\",u,re,ne],G=()=>[\\\"\\\",Fe,Oc,Ql],xe=()=>[\\\"solid\\\",\\\"dashed\\\",\\\"dotted\\\",\\\"double\\\"],Q=()=>[\\\"normal\\\",\\\"multiply\\\",\\\"screen\\\",\\\"overlay\\\",\\\"darken\\\",\\\"lighten\\\",\\\"color-dodge\\\",\\\"color-burn\\\",\\\"hard-light\\\",\\\"soft-light\\\",\\\"difference\\\",\\\"exclusion\\\",\\\"hue\\\",\\\"saturation\\\",\\\"color\\\",\\\"luminosity\\\"],W=()=>[Fe,Oy,yT,bT],ge=()=>[\\\"\\\",\\\"none\\\",h,re,ne],ye=()=>[\\\"none\\\",Fe,re,ne],ee=()=>[\\\"none\\\",Fe,re,ne],be=()=>[Fe,re,ne],me=()=>[Kr,\\\"full\\\",...C()];return{cacheSize:500,theme:{animate:[\\\"spin\\\",\\\"ping\\\",\\\"pulse\\\",\\\"bounce\\\"],aspect:[\\\"video\\\"],blur:[$n],breakpoint:[$n],color:[wT],container:[$n],\\\"drop-shadow\\\":[$n],ease:[\\\"in\\\",\\\"out\\\",\\\"in-out\\\"],font:[nF],\\\"font-weight\\\":[\\\"thin\\\",\\\"extralight\\\",\\\"light\\\",\\\"normal\\\",\\\"medium\\\",\\\"semibold\\\",\\\"bold\\\",\\\"extrabold\\\",\\\"black\\\"],\\\"inset-shadow\\\":[$n],leading:[\\\"none\\\",\\\"tight\\\",\\\"snug\\\",\\\"normal\\\",\\\"relaxed\\\",\\\"loose\\\"],perspective:[\\\"dramatic\\\",\\\"near\\\",\\\"normal\\\",\\\"midrange\\\",\\\"distant\\\",\\\"none\\\"],radius:[$n],shadow:[$n],spacing:[\\\"px\\\",Fe],text:[$n],\\\"text-shadow\\\":[$n],tracking:[\\\"tighter\\\",\\\"tight\\\",\\\"normal\\\",\\\"wide\\\",\\\"wider\\\",\\\"widest\\\"]},classGroups:{aspect:[{aspect:[\\\"auto\\\",\\\"square\\\",Kr,ne,re,S]}],container:[\\\"container\\\"],\\\"container-type\\\":[{\\\"@container\\\":[\\\"\\\",\\\"normal\\\",\\\"size\\\",re,ne]}],\\\"container-named\\\":[rF],columns:[{columns:[Fe,\\\"auto\\\",ne,re,s]}],\\\"break-after\\\":[{\\\"break-after\\\":x()}],\\\"break-before\\\":[{\\\"break-before\\\":x()}],\\\"break-inside\\\":[{\\\"break-inside\\\":[\\\"auto\\\",\\\"avoid\\\",\\\"avoid-page\\\",\\\"avoid-column\\\"]}],\\\"box-decoration\\\":[{\\\"box-decoration\\\":[\\\"slice\\\",\\\"clone\\\"]}],box:[{box:[\\\"border\\\",\\\"content\\\"]}],display:[\\\"block\\\",\\\"inline-block\\\",\\\"inline\\\",\\\"flex\\\",\\\"inline-flex\\\",\\\"table\\\",\\\"inline-table\\\",\\\"table-caption\\\",\\\"table-cell\\\",\\\"table-column\\\",\\\"table-column-group\\\",\\\"table-footer-group\\\",\\\"table-header-group\\\",\\\"table-row-group\\\",\\\"table-row\\\",\\\"flow-root\\\",\\\"grid\\\",\\\"inline-grid\\\",\\\"contents\\\",\\\"list-item\\\",\\\"hidden\\\"],sr:[\\\"sr-only\\\",\\\"not-sr-only\\\"],float:[{float:[\\\"right\\\",\\\"left\\\",\\\"none\\\",\\\"start\\\",\\\"end\\\"]}],clear:[{clear:[\\\"left\\\",\\\"right\\\",\\\"both\\\",\\\"none\\\",\\\"start\\\",\\\"end\\\"]}],isolation:[\\\"isolate\\\",\\\"isolation-auto\\\"],\\\"object-fit\\\":[{object:[\\\"contain\\\",\\\"cover\\\",\\\"fill\\\",\\\"none\\\",\\\"scale-down\\\"]}],\\\"object-position\\\":[{object:L()}],overflow:[{overflow:I()}],\\\"overflow-x\\\":[{\\\"overflow-x\\\":I()}],\\\"overflow-y\\\":[{\\\"overflow-y\\\":I()}],overscroll:[{overscroll:R()}],\\\"overscroll-x\\\":[{\\\"overscroll-x\\\":R()}],\\\"overscroll-y\\\":[{\\\"overscroll-y\\\":R()}],position:[\\\"static\\\",\\\"fixed\\\",\\\"absolute\\\",\\\"relative\\\",\\\"sticky\\\"],inset:[{inset:k()}],\\\"inset-x\\\":[{\\\"inset-x\\\":k()}],\\\"inset-y\\\":[{\\\"inset-y\\\":k()}],start:[{\\\"inset-s\\\":k(),start:k()}],end:[{\\\"inset-e\\\":k(),end:k()}],\\\"inset-bs\\\":[{\\\"inset-bs\\\":k()}],\\\"inset-be\\\":[{\\\"inset-be\\\":k()}],top:[{top:k()}],right:[{right:k()}],bottom:[{bottom:k()}],left:[{left:k()}],visibility:[\\\"visible\\\",\\\"invisible\\\",\\\"collapse\\\"],z:[{z:[mn,\\\"auto\\\",re,ne]}],basis:[{basis:[Kr,\\\"full\\\",\\\"auto\\\",s,...C()]}],\\\"flex-direction\\\":[{flex:[\\\"row\\\",\\\"row-reverse\\\",\\\"col\\\",\\\"col-reverse\\\"]}],\\\"flex-wrap\\\":[{flex:[\\\"nowrap\\\",\\\"wrap\\\",\\\"wrap-reverse\\\"]}],flex:[{flex:[Fe,Kr,\\\"auto\\\",\\\"initial\\\",\\\"none\\\",ne]}],grow:[{grow:[\\\"\\\",Fe,re,ne]}],shrink:[{shrink:[\\\"\\\",Fe,re,ne]}],order:[{order:[mn,\\\"first\\\",\\\"last\\\",\\\"none\\\",re,ne]}],\\\"grid-cols\\\":[{\\\"grid-cols\\\":E()}],\\\"col-start-end\\\":[{col:T()}],\\\"col-start\\\":[{\\\"col-start\\\":w()}],\\\"col-end\\\":[{\\\"col-end\\\":w()}],\\\"grid-rows\\\":[{\\\"grid-rows\\\":E()}],\\\"row-start-end\\\":[{row:T()}],\\\"row-start\\\":[{\\\"row-start\\\":w()}],\\\"row-end\\\":[{\\\"row-end\\\":w()}],\\\"grid-flow\\\":[{\\\"grid-flow\\\":[\\\"row\\\",\\\"col\\\",\\\"dense\\\",\\\"row-dense\\\",\\\"col-dense\\\"]}],\\\"auto-cols\\\":[{\\\"auto-cols\\\":P()}],\\\"auto-rows\\\":[{\\\"auto-rows\\\":P()}],gap:[{gap:C()}],\\\"gap-x\\\":[{\\\"gap-x\\\":C()}],\\\"gap-y\\\":[{\\\"gap-y\\\":C()}],\\\"justify-content\\\":[{justify:[...D(),\\\"normal\\\"]}],\\\"justify-items\\\":[{\\\"justify-items\\\":[...M(),\\\"normal\\\"]}],\\\"justify-self\\\":[{\\\"justify-self\\\":[\\\"auto\\\",...M()]}],\\\"align-content\\\":[{content:[\\\"normal\\\",...D()]}],\\\"align-items\\\":[{items:[...M(),{baseline:[\\\"\\\",\\\"last\\\"]}]}],\\\"align-self\\\":[{self:[\\\"auto\\\",...M(),{baseline:[\\\"\\\",\\\"last\\\"]}]}],\\\"place-content\\\":[{\\\"place-content\\\":D()}],\\\"place-items\\\":[{\\\"place-items\\\":[...M(),\\\"baseline\\\"]}],\\\"place-self\\\":[{\\\"place-self\\\":[\\\"auto\\\",...M()]}],p:[{p:C()}],px:[{px:C()}],py:[{py:C()}],ps:[{ps:C()}],pe:[{pe:C()}],pbs:[{pbs:C()}],pbe:[{pbe:C()}],pt:[{pt:C()}],pr:[{pr:C()}],pb:[{pb:C()}],pl:[{pl:C()}],m:[{m:_()}],mx:[{mx:_()}],my:[{my:_()}],ms:[{ms:_()}],me:[{me:_()}],mbs:[{mbs:_()}],mbe:[{mbe:_()}],mt:[{mt:_()}],mr:[{mr:_()}],mb:[{mb:_()}],ml:[{ml:_()}],\\\"space-x\\\":[{\\\"space-x\\\":C()}],\\\"space-x-reverse\\\":[\\\"space-x-reverse\\\"],\\\"space-y\\\":[{\\\"space-y\\\":C()}],\\\"space-y-reverse\\\":[\\\"space-y-reverse\\\"],size:[{size:U()}],\\\"inline-size\\\":[{inline:[\\\"auto\\\",...B()]}],\\\"min-inline-size\\\":[{\\\"min-inline\\\":[\\\"auto\\\",...B()]}],\\\"max-inline-size\\\":[{\\\"max-inline\\\":[\\\"none\\\",...B()]}],\\\"block-size\\\":[{block:[\\\"auto\\\",...z()]}],\\\"min-block-size\\\":[{\\\"min-block\\\":[\\\"auto\\\",...z()]}],\\\"max-block-size\\\":[{\\\"max-block\\\":[\\\"none\\\",...z()]}],w:[{w:[s,\\\"screen\\\",...U()]}],\\\"min-w\\\":[{\\\"min-w\\\":[s,\\\"screen\\\",\\\"none\\\",...U()]}],\\\"max-w\\\":[{\\\"max-w\\\":[s,\\\"screen\\\",\\\"none\\\",\\\"prose\\\",{screen:[l]},...U()]}],h:[{h:[\\\"screen\\\",\\\"lh\\\",...U()]}],\\\"min-h\\\":[{\\\"min-h\\\":[\\\"screen\\\",\\\"lh\\\",\\\"none\\\",...U()]}],\\\"max-h\\\":[{\\\"max-h\\\":[\\\"screen\\\",\\\"lh\\\",\\\"none\\\",...U()]}],\\\"font-size\\\":[{text:[\\\"base\\\",a,Oc,Ql]}],\\\"font-smoothing\\\":[\\\"antialiased\\\",\\\"subpixel-antialiased\\\"],\\\"font-style\\\":[\\\"italic\\\",\\\"not-italic\\\"],\\\"font-weight\\\":[{font:[o,pF,sF]}],\\\"font-stretch\\\":[{\\\"font-stretch\\\":[\\\"ultra-condensed\\\",\\\"extra-condensed\\\",\\\"condensed\\\",\\\"semi-condensed\\\",\\\"normal\\\",\\\"semi-expanded\\\",\\\"expanded\\\",\\\"extra-expanded\\\",\\\"ultra-expanded\\\",Oy,ne]}],\\\"font-family\\\":[{font:[cF,iF,t]}],\\\"font-features\\\":[{\\\"font-features\\\":[ne]}],\\\"fvn-normal\\\":[\\\"normal-nums\\\"],\\\"fvn-ordinal\\\":[\\\"ordinal\\\"],\\\"fvn-slashed-zero\\\":[\\\"slashed-zero\\\"],\\\"fvn-figure\\\":[\\\"lining-nums\\\",\\\"oldstyle-nums\\\"],\\\"fvn-spacing\\\":[\\\"proportional-nums\\\",\\\"tabular-nums\\\"],\\\"fvn-fraction\\\":[\\\"diagonal-fractions\\\",\\\"stacked-fractions\\\"],tracking:[{tracking:[n,re,ne]}],\\\"line-clamp\\\":[{\\\"line-clamp\\\":[Fe,\\\"none\\\",re,xT]}],leading:[{leading:[\\\"none\\\",r,...C()]}],\\\"list-image\\\":[{\\\"list-image\\\":[\\\"none\\\",re,ne]}],\\\"list-style-position\\\":[{list:[\\\"inside\\\",\\\"outside\\\"]}],\\\"list-style-type\\\":[{list:[\\\"disc\\\",\\\"decimal\\\",\\\"none\\\",re,ne]}],\\\"text-alignment\\\":[{text:[\\\"left\\\",\\\"center\\\",\\\"right\\\",\\\"justify\\\",\\\"start\\\",\\\"end\\\"]}],\\\"placeholder-color\\\":[{placeholder:N()}],\\\"text-color\\\":[{text:N()}],\\\"text-decoration\\\":[\\\"underline\\\",\\\"overline\\\",\\\"line-through\\\",\\\"no-underline\\\"],\\\"text-decoration-style\\\":[{decoration:[...xe(),\\\"wavy\\\"]}],\\\"text-decoration-thickness\\\":[{decoration:[Fe,\\\"from-font\\\",\\\"auto\\\",re,Ql]}],\\\"text-decoration-color\\\":[{decoration:N()}],\\\"underline-offset\\\":[{\\\"underline-offset\\\":[Fe,\\\"auto\\\",re,ne]}],\\\"text-transform\\\":[\\\"uppercase\\\",\\\"lowercase\\\",\\\"capitalize\\\",\\\"normal-case\\\"],\\\"text-overflow\\\":[\\\"truncate\\\",\\\"text-ellipsis\\\",\\\"text-clip\\\"],\\\"text-wrap\\\":[{text:[\\\"wrap\\\",\\\"nowrap\\\",\\\"balance\\\",\\\"pretty\\\"]}],indent:[{indent:C()}],\\\"tab-size\\\":[{tab:[mn,re,ne]}],\\\"vertical-align\\\":[{align:[\\\"baseline\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\",\\\"text-top\\\",\\\"text-bottom\\\",\\\"sub\\\",\\\"super\\\",re,ne]}],whitespace:[{whitespace:[\\\"normal\\\",\\\"nowrap\\\",\\\"pre\\\",\\\"pre-line\\\",\\\"pre-wrap\\\",\\\"break-spaces\\\"]}],break:[{break:[\\\"normal\\\",\\\"words\\\",\\\"all\\\",\\\"keep\\\"]}],wrap:[{wrap:[\\\"break-word\\\",\\\"anywhere\\\",\\\"normal\\\"]}],hyphens:[{hyphens:[\\\"none\\\",\\\"manual\\\",\\\"auto\\\"]}],content:[{content:[\\\"none\\\",re,ne]}],\\\"bg-attachment\\\":[{bg:[\\\"fixed\\\",\\\"local\\\",\\\"scroll\\\"]}],\\\"bg-clip\\\":[{\\\"bg-clip\\\":[\\\"border\\\",\\\"padding\\\",\\\"content\\\",\\\"text\\\"]}],\\\"bg-origin\\\":[{\\\"bg-origin\\\":[\\\"border\\\",\\\"padding\\\",\\\"content\\\"]}],\\\"bg-position\\\":[{bg:j()}],\\\"bg-repeat\\\":[{bg:ae()}],\\\"bg-size\\\":[{bg:oe()}],\\\"bg-image\\\":[{bg:[\\\"none\\\",{linear:[{to:[\\\"t\\\",\\\"tr\\\",\\\"r\\\",\\\"br\\\",\\\"b\\\",\\\"bl\\\",\\\"l\\\",\\\"tl\\\"]},mn,re,ne],radial:[\\\"\\\",re,ne],conic:[\\\"\\\",mn,re,ne]},dF,uF]}],\\\"bg-color\\\":[{bg:N()}],\\\"gradient-from-pos\\\":[{from:q()}],\\\"gradient-via-pos\\\":[{via:q()}],\\\"gradient-to-pos\\\":[{to:q()}],\\\"gradient-from\\\":[{from:N()}],\\\"gradient-via\\\":[{via:N()}],\\\"gradient-to\\\":[{to:N()}],rounded:[{rounded:Y()}],\\\"rounded-s\\\":[{\\\"rounded-s\\\":Y()}],\\\"rounded-e\\\":[{\\\"rounded-e\\\":Y()}],\\\"rounded-t\\\":[{\\\"rounded-t\\\":Y()}],\\\"rounded-r\\\":[{\\\"rounded-r\\\":Y()}],\\\"rounded-b\\\":[{\\\"rounded-b\\\":Y()}],\\\"rounded-l\\\":[{\\\"rounded-l\\\":Y()}],\\\"rounded-ss\\\":[{\\\"rounded-ss\\\":Y()}],\\\"rounded-se\\\":[{\\\"rounded-se\\\":Y()}],\\\"rounded-ee\\\":[{\\\"rounded-ee\\\":Y()}],\\\"rounded-es\\\":[{\\\"rounded-es\\\":Y()}],\\\"rounded-tl\\\":[{\\\"rounded-tl\\\":Y()}],\\\"rounded-tr\\\":[{\\\"rounded-tr\\\":Y()}],\\\"rounded-br\\\":[{\\\"rounded-br\\\":Y()}],\\\"rounded-bl\\\":[{\\\"rounded-bl\\\":Y()}],\\\"border-w\\\":[{border:G()}],\\\"border-w-x\\\":[{\\\"border-x\\\":G()}],\\\"border-w-y\\\":[{\\\"border-y\\\":G()}],\\\"border-w-s\\\":[{\\\"border-s\\\":G()}],\\\"border-w-e\\\":[{\\\"border-e\\\":G()}],\\\"border-w-bs\\\":[{\\\"border-bs\\\":G()}],\\\"border-w-be\\\":[{\\\"border-be\\\":G()}],\\\"border-w-t\\\":[{\\\"border-t\\\":G()}],\\\"border-w-r\\\":[{\\\"border-r\\\":G()}],\\\"border-w-b\\\":[{\\\"border-b\\\":G()}],\\\"border-w-l\\\":[{\\\"border-l\\\":G()}],\\\"divide-x\\\":[{\\\"divide-x\\\":G()}],\\\"divide-x-reverse\\\":[\\\"divide-x-reverse\\\"],\\\"divide-y\\\":[{\\\"divide-y\\\":G()}],\\\"divide-y-reverse\\\":[\\\"divide-y-reverse\\\"],\\\"border-style\\\":[{border:[...xe(),\\\"hidden\\\",\\\"none\\\"]}],\\\"divide-style\\\":[{divide:[...xe(),\\\"hidden\\\",\\\"none\\\"]}],\\\"border-color\\\":[{border:N()}],\\\"border-color-x\\\":[{\\\"border-x\\\":N()}],\\\"border-color-y\\\":[{\\\"border-y\\\":N()}],\\\"border-color-s\\\":[{\\\"border-s\\\":N()}],\\\"border-color-e\\\":[{\\\"border-e\\\":N()}],\\\"border-color-bs\\\":[{\\\"border-bs\\\":N()}],\\\"border-color-be\\\":[{\\\"border-be\\\":N()}],\\\"border-color-t\\\":[{\\\"border-t\\\":N()}],\\\"border-color-r\\\":[{\\\"border-r\\\":N()}],\\\"border-color-b\\\":[{\\\"border-b\\\":N()}],\\\"border-color-l\\\":[{\\\"border-l\\\":N()}],\\\"divide-color\\\":[{divide:N()}],\\\"outline-style\\\":[{outline:[...xe(),\\\"none\\\",\\\"hidden\\\"]}],\\\"outline-offset\\\":[{\\\"outline-offset\\\":[Fe,re,ne]}],\\\"outline-w\\\":[{outline:[\\\"\\\",Fe,Oc,Ql]}],\\\"outline-color\\\":[{outline:N()}],shadow:[{shadow:[\\\"\\\",\\\"inner\\\",\\\"none\\\",c,Tp,wp]}],\\\"shadow-color\\\":[{shadow:N()}],\\\"inset-shadow\\\":[{\\\"inset-shadow\\\":[\\\"none\\\",d,Tp,wp]}],\\\"inset-shadow-color\\\":[{\\\"inset-shadow\\\":N()}],\\\"ring-w\\\":[{ring:G()}],\\\"ring-w-inset\\\":[\\\"ring-inset\\\"],\\\"ring-color\\\":[{ring:N()}],\\\"ring-offset-w\\\":[{\\\"ring-offset\\\":[Fe,Ql]}],\\\"ring-offset-color\\\":[{\\\"ring-offset\\\":N()}],\\\"inset-ring-w\\\":[{\\\"inset-ring\\\":G()}],\\\"inset-ring-color\\\":[{\\\"inset-ring\\\":N()}],\\\"text-shadow\\\":[{\\\"text-shadow\\\":[\\\"none\\\",f,Tp,wp]}],\\\"text-shadow-color\\\":[{\\\"text-shadow\\\":N()}],opacity:[{opacity:[Fe,re,ne]}],\\\"mix-blend\\\":[{\\\"mix-blend\\\":[...Q(),\\\"plus-darker\\\",\\\"plus-lighter\\\"]}],\\\"bg-blend\\\":[{\\\"bg-blend\\\":Q()}],\\\"mask-clip\\\":[{\\\"mask-clip\\\":[\\\"border\\\",\\\"padding\\\",\\\"content\\\",\\\"fill\\\",\\\"stroke\\\",\\\"view\\\"]},\\\"mask-no-clip\\\"],\\\"mask-composite\\\":[{mask:[\\\"add\\\",\\\"subtract\\\",\\\"intersect\\\",\\\"exclude\\\"]}],\\\"mask-image-linear-pos\\\":[{\\\"mask-linear\\\":[Fe]}],\\\"mask-image-linear-from-pos\\\":[{\\\"mask-linear-from\\\":W()}],\\\"mask-image-linear-to-pos\\\":[{\\\"mask-linear-to\\\":W()}],\\\"mask-image-linear-from-color\\\":[{\\\"mask-linear-from\\\":N()}],\\\"mask-image-linear-to-color\\\":[{\\\"mask-linear-to\\\":N()}],\\\"mask-image-t-from-pos\\\":[{\\\"mask-t-from\\\":W()}],\\\"mask-image-t-to-pos\\\":[{\\\"mask-t-to\\\":W()}],\\\"mask-image-t-from-color\\\":[{\\\"mask-t-from\\\":N()}],\\\"mask-image-t-to-color\\\":[{\\\"mask-t-to\\\":N()}],\\\"mask-image-r-from-pos\\\":[{\\\"mask-r-from\\\":W()}],\\\"mask-image-r-to-pos\\\":[{\\\"mask-r-to\\\":W()}],\\\"mask-image-r-from-color\\\":[{\\\"mask-r-from\\\":N()}],\\\"mask-image-r-to-color\\\":[{\\\"mask-r-to\\\":N()}],\\\"mask-image-b-from-pos\\\":[{\\\"mask-b-from\\\":W()}],\\\"mask-image-b-to-pos\\\":[{\\\"mask-b-to\\\":W()}],\\\"mask-image-b-from-color\\\":[{\\\"mask-b-from\\\":N()}],\\\"mask-image-b-to-color\\\":[{\\\"mask-b-to\\\":N()}],\\\"mask-image-l-from-pos\\\":[{\\\"mask-l-from\\\":W()}],\\\"mask-image-l-to-pos\\\":[{\\\"mask-l-to\\\":W()}],\\\"mask-image-l-from-color\\\":[{\\\"mask-l-from\\\":N()}],\\\"mask-image-l-to-color\\\":[{\\\"mask-l-to\\\":N()}],\\\"mask-image-x-from-pos\\\":[{\\\"mask-x-from\\\":W()}],\\\"mask-image-x-to-pos\\\":[{\\\"mask-x-to\\\":W()}],\\\"mask-image-x-from-color\\\":[{\\\"mask-x-from\\\":N()}],\\\"mask-image-x-to-color\\\":[{\\\"mask-x-to\\\":N()}],\\\"mask-image-y-from-pos\\\":[{\\\"mask-y-from\\\":W()}],\\\"mask-image-y-to-pos\\\":[{\\\"mask-y-to\\\":W()}],\\\"mask-image-y-from-color\\\":[{\\\"mask-y-from\\\":N()}],\\\"mask-image-y-to-color\\\":[{\\\"mask-y-to\\\":N()}],\\\"mask-image-radial\\\":[{\\\"mask-radial\\\":[re,ne]}],\\\"mask-image-radial-from-pos\\\":[{\\\"mask-radial-from\\\":W()}],\\\"mask-image-radial-to-pos\\\":[{\\\"mask-radial-to\\\":W()}],\\\"mask-image-radial-from-color\\\":[{\\\"mask-radial-from\\\":N()}],\\\"mask-image-radial-to-color\\\":[{\\\"mask-radial-to\\\":N()}],\\\"mask-image-radial-shape\\\":[{\\\"mask-radial\\\":[\\\"circle\\\",\\\"ellipse\\\"]}],\\\"mask-image-radial-size\\\":[{\\\"mask-radial\\\":[{closest:[\\\"side\\\",\\\"corner\\\"],farthest:[\\\"side\\\",\\\"corner\\\"]}]}],\\\"mask-image-radial-pos\\\":[{\\\"mask-radial-at\\\":y()}],\\\"mask-image-conic-pos\\\":[{\\\"mask-conic\\\":[Fe]}],\\\"mask-image-conic-from-pos\\\":[{\\\"mask-conic-from\\\":W()}],\\\"mask-image-conic-to-pos\\\":[{\\\"mask-conic-to\\\":W()}],\\\"mask-image-conic-from-color\\\":[{\\\"mask-conic-from\\\":N()}],\\\"mask-image-conic-to-color\\\":[{\\\"mask-conic-to\\\":N()}],\\\"mask-mode\\\":[{mask:[\\\"alpha\\\",\\\"luminance\\\",\\\"match\\\"]}],\\\"mask-origin\\\":[{\\\"mask-origin\\\":[\\\"border\\\",\\\"padding\\\",\\\"content\\\",\\\"fill\\\",\\\"stroke\\\",\\\"view\\\"]}],\\\"mask-position\\\":[{mask:j()}],\\\"mask-repeat\\\":[{mask:ae()}],\\\"mask-size\\\":[{mask:oe()}],\\\"mask-type\\\":[{\\\"mask-type\\\":[\\\"alpha\\\",\\\"luminance\\\"]}],\\\"mask-image\\\":[{mask:[\\\"none\\\",re,ne]}],filter:[{filter:[\\\"\\\",\\\"none\\\",re,ne]}],blur:[{blur:ge()}],brightness:[{brightness:[Fe,re,ne]}],contrast:[{contrast:[Fe,re,ne]}],\\\"drop-shadow\\\":[{\\\"drop-shadow\\\":[\\\"\\\",\\\"none\\\",p,Tp,wp]}],\\\"drop-shadow-color\\\":[{\\\"drop-shadow\\\":N()}],grayscale:[{grayscale:[\\\"\\\",Fe,re,ne]}],\\\"hue-rotate\\\":[{\\\"hue-rotate\\\":[Fe,re,ne]}],invert:[{invert:[\\\"\\\",Fe,re,ne]}],saturate:[{saturate:[Fe,re,ne]}],sepia:[{sepia:[\\\"\\\",Fe,re,ne]}],\\\"backdrop-filter\\\":[{\\\"backdrop-filter\\\":[\\\"\\\",\\\"none\\\",re,ne]}],\\\"backdrop-blur\\\":[{\\\"backdrop-blur\\\":ge()}],\\\"backdrop-brightness\\\":[{\\\"backdrop-brightness\\\":[Fe,re,ne]}],\\\"backdrop-contrast\\\":[{\\\"backdrop-contrast\\\":[Fe,re,ne]}],\\\"backdrop-grayscale\\\":[{\\\"backdrop-grayscale\\\":[\\\"\\\",Fe,re,ne]}],\\\"backdrop-hue-rotate\\\":[{\\\"backdrop-hue-rotate\\\":[Fe,re,ne]}],\\\"backdrop-invert\\\":[{\\\"backdrop-invert\\\":[\\\"\\\",Fe,re,ne]}],\\\"backdrop-opacity\\\":[{\\\"backdrop-opacity\\\":[Fe,re,ne]}],\\\"backdrop-saturate\\\":[{\\\"backdrop-saturate\\\":[Fe,re,ne]}],\\\"backdrop-sepia\\\":[{\\\"backdrop-sepia\\\":[\\\"\\\",Fe,re,ne]}],\\\"border-collapse\\\":[{border:[\\\"collapse\\\",\\\"separate\\\"]}],\\\"border-spacing\\\":[{\\\"border-spacing\\\":C()}],\\\"border-spacing-x\\\":[{\\\"border-spacing-x\\\":C()}],\\\"border-spacing-y\\\":[{\\\"border-spacing-y\\\":C()}],\\\"table-layout\\\":[{table:[\\\"auto\\\",\\\"fixed\\\"]}],caption:[{caption:[\\\"top\\\",\\\"bottom\\\"]}],transition:[{transition:[\\\"\\\",\\\"all\\\",\\\"colors\\\",\\\"opacity\\\",\\\"shadow\\\",\\\"transform\\\",\\\"none\\\",re,ne]}],\\\"transition-behavior\\\":[{transition:[\\\"normal\\\",\\\"discrete\\\"]}],duration:[{duration:[Fe,\\\"initial\\\",re,ne]}],ease:[{ease:[\\\"linear\\\",\\\"initial\\\",g,re,ne]}],delay:[{delay:[Fe,re,ne]}],animate:[{animate:[\\\"none\\\",m,re,ne]}],backface:[{backface:[\\\"hidden\\\",\\\"visible\\\"]}],perspective:[{perspective:[b,re,ne]}],\\\"perspective-origin\\\":[{\\\"perspective-origin\\\":L()}],rotate:[{rotate:ye()}],\\\"rotate-x\\\":[{\\\"rotate-x\\\":ye()}],\\\"rotate-y\\\":[{\\\"rotate-y\\\":ye()}],\\\"rotate-z\\\":[{\\\"rotate-z\\\":ye()}],scale:[{scale:ee()}],\\\"scale-x\\\":[{\\\"scale-x\\\":ee()}],\\\"scale-y\\\":[{\\\"scale-y\\\":ee()}],\\\"scale-z\\\":[{\\\"scale-z\\\":ee()}],\\\"scale-3d\\\":[\\\"scale-3d\\\"],skew:[{skew:be()}],\\\"skew-x\\\":[{\\\"skew-x\\\":be()}],\\\"skew-y\\\":[{\\\"skew-y\\\":be()}],transform:[{transform:[re,ne,\\\"\\\",\\\"none\\\",\\\"gpu\\\",\\\"cpu\\\"]}],\\\"transform-origin\\\":[{origin:L()}],\\\"transform-style\\\":[{transform:[\\\"3d\\\",\\\"flat\\\"]}],translate:[{translate:me()}],\\\"translate-x\\\":[{\\\"translate-x\\\":me()}],\\\"translate-y\\\":[{\\\"translate-y\\\":me()}],\\\"translate-z\\\":[{\\\"translate-z\\\":me()}],\\\"translate-none\\\":[\\\"translate-none\\\"],zoom:[{zoom:[mn,re,ne]}],accent:[{accent:N()}],appearance:[{appearance:[\\\"none\\\",\\\"auto\\\"]}],\\\"caret-color\\\":[{caret:N()}],\\\"color-scheme\\\":[{scheme:[\\\"normal\\\",\\\"dark\\\",\\\"light\\\",\\\"light-dark\\\",\\\"only-dark\\\",\\\"only-light\\\"]}],cursor:[{cursor:[\\\"auto\\\",\\\"default\\\",\\\"pointer\\\",\\\"wait\\\",\\\"text\\\",\\\"move\\\",\\\"help\\\",\\\"not-allowed\\\",\\\"none\\\",\\\"context-menu\\\",\\\"progress\\\",\\\"cell\\\",\\\"crosshair\\\",\\\"vertical-text\\\",\\\"alias\\\",\\\"copy\\\",\\\"no-drop\\\",\\\"grab\\\",\\\"grabbing\\\",\\\"all-scroll\\\",\\\"col-resize\\\",\\\"row-resize\\\",\\\"n-resize\\\",\\\"e-resize\\\",\\\"s-resize\\\",\\\"w-resize\\\",\\\"ne-resize\\\",\\\"nw-resize\\\",\\\"se-resize\\\",\\\"sw-resize\\\",\\\"ew-resize\\\",\\\"ns-resize\\\",\\\"nesw-resize\\\",\\\"nwse-resize\\\",\\\"zoom-in\\\",\\\"zoom-out\\\",re,ne]}],\\\"field-sizing\\\":[{\\\"field-sizing\\\":[\\\"fixed\\\",\\\"content\\\"]}],\\\"pointer-events\\\":[{\\\"pointer-events\\\":[\\\"auto\\\",\\\"none\\\"]}],resize:[{resize:[\\\"none\\\",\\\"\\\",\\\"y\\\",\\\"x\\\"]}],\\\"scroll-behavior\\\":[{scroll:[\\\"auto\\\",\\\"smooth\\\"]}],\\\"scrollbar-thumb-color\\\":[{\\\"scrollbar-thumb\\\":N()}],\\\"scrollbar-track-color\\\":[{\\\"scrollbar-track\\\":N()}],\\\"scrollbar-gutter\\\":[{\\\"scrollbar-gutter\\\":[\\\"auto\\\",\\\"stable\\\",\\\"both\\\"]}],\\\"scrollbar-w\\\":[{scrollbar:[\\\"auto\\\",\\\"thin\\\",\\\"none\\\"]}],\\\"scroll-m\\\":[{\\\"scroll-m\\\":C()}],\\\"scroll-mx\\\":[{\\\"scroll-mx\\\":C()}],\\\"scroll-my\\\":[{\\\"scroll-my\\\":C()}],\\\"scroll-ms\\\":[{\\\"scroll-ms\\\":C()}],\\\"scroll-me\\\":[{\\\"scroll-me\\\":C()}],\\\"scroll-mbs\\\":[{\\\"scroll-mbs\\\":C()}],\\\"scroll-mbe\\\":[{\\\"scroll-mbe\\\":C()}],\\\"scroll-mt\\\":[{\\\"scroll-mt\\\":C()}],\\\"scroll-mr\\\":[{\\\"scroll-mr\\\":C()}],\\\"scroll-mb\\\":[{\\\"scroll-mb\\\":C()}],\\\"scroll-ml\\\":[{\\\"scroll-ml\\\":C()}],\\\"scroll-p\\\":[{\\\"scroll-p\\\":C()}],\\\"scroll-px\\\":[{\\\"scroll-px\\\":C()}],\\\"scroll-py\\\":[{\\\"scroll-py\\\":C()}],\\\"scroll-ps\\\":[{\\\"scroll-ps\\\":C()}],\\\"scroll-pe\\\":[{\\\"scroll-pe\\\":C()}],\\\"scroll-pbs\\\":[{\\\"scroll-pbs\\\":C()}],\\\"scroll-pbe\\\":[{\\\"scroll-pbe\\\":C()}],\\\"scroll-pt\\\":[{\\\"scroll-pt\\\":C()}],\\\"scroll-pr\\\":[{\\\"scroll-pr\\\":C()}],\\\"scroll-pb\\\":[{\\\"scroll-pb\\\":C()}],\\\"scroll-pl\\\":[{\\\"scroll-pl\\\":C()}],\\\"snap-align\\\":[{snap:[\\\"start\\\",\\\"end\\\",\\\"center\\\",\\\"align-none\\\"]}],\\\"snap-stop\\\":[{snap:[\\\"normal\\\",\\\"always\\\"]}],\\\"snap-type\\\":[{snap:[\\\"none\\\",\\\"x\\\",\\\"y\\\",\\\"both\\\"]}],\\\"snap-strictness\\\":[{snap:[\\\"mandatory\\\",\\\"proximity\\\"]}],touch:[{touch:[\\\"auto\\\",\\\"none\\\",\\\"manipulation\\\"]}],\\\"touch-x\\\":[{\\\"touch-pan\\\":[\\\"x\\\",\\\"left\\\",\\\"right\\\"]}],\\\"touch-y\\\":[{\\\"touch-pan\\\":[\\\"y\\\",\\\"up\\\",\\\"down\\\"]}],\\\"touch-pz\\\":[\\\"touch-pinch-zoom\\\"],select:[{select:[\\\"none\\\",\\\"text\\\",\\\"all\\\",\\\"auto\\\"]}],\\\"will-change\\\":[{\\\"will-change\\\":[\\\"auto\\\",\\\"scroll\\\",\\\"contents\\\",\\\"transform\\\",re,ne]}],fill:[{fill:[\\\"none\\\",...N()]}],\\\"stroke-w\\\":[{stroke:[Fe,Oc,Ql,xT]}],stroke:[{stroke:[\\\"none\\\",...N()]}],\\\"forced-color-adjust\\\":[{\\\"forced-color-adjust\\\":[\\\"auto\\\",\\\"none\\\"]}]},conflictingClassGroups:{\\\"container-named\\\":[\\\"container-type\\\"],overflow:[\\\"overflow-x\\\",\\\"overflow-y\\\"],overscroll:[\\\"overscroll-x\\\",\\\"overscroll-y\\\"],inset:[\\\"inset-x\\\",\\\"inset-y\\\",\\\"inset-bs\\\",\\\"inset-be\\\",\\\"start\\\",\\\"end\\\",\\\"top\\\",\\\"right\\\",\\\"bottom\\\",\\\"left\\\"],\\\"inset-x\\\":[\\\"start\\\",\\\"end\\\",\\\"right\\\",\\\"left\\\"],\\\"inset-y\\\":[\\\"inset-bs\\\",\\\"inset-be\\\",\\\"top\\\",\\\"bottom\\\"],flex:[\\\"basis\\\",\\\"grow\\\",\\\"shrink\\\"],gap:[\\\"gap-x\\\",\\\"gap-y\\\"],p:[\\\"px\\\",\\\"py\\\",\\\"ps\\\",\\\"pe\\\",\\\"pbs\\\",\\\"pbe\\\",\\\"pt\\\",\\\"pr\\\",\\\"pb\\\",\\\"pl\\\"],px:[\\\"ps\\\",\\\"pe\\\",\\\"pr\\\",\\\"pl\\\"],py:[\\\"pbs\\\",\\\"pbe\\\",\\\"pt\\\",\\\"pb\\\"],m:[\\\"mx\\\",\\\"my\\\",\\\"ms\\\",\\\"me\\\",\\\"mbs\\\",\\\"mbe\\\",\\\"mt\\\",\\\"mr\\\",\\\"mb\\\",\\\"ml\\\"],mx:[\\\"ms\\\",\\\"me\\\",\\\"mr\\\",\\\"ml\\\"],my:[\\\"mbs\\\",\\\"mbe\\\",\\\"mt\\\",\\\"mb\\\"],size:[\\\"w\\\",\\\"h\\\"],\\\"font-size\\\":[\\\"leading\\\"],\\\"fvn-normal\\\":[\\\"fvn-ordinal\\\",\\\"fvn-slashed-zero\\\",\\\"fvn-figure\\\",\\\"fvn-spacing\\\",\\\"fvn-fraction\\\"],\\\"fvn-ordinal\\\":[\\\"fvn-normal\\\"],\\\"fvn-slashed-zero\\\":[\\\"fvn-normal\\\"],\\\"fvn-figure\\\":[\\\"fvn-normal\\\"],\\\"fvn-spacing\\\":[\\\"fvn-normal\\\"],\\\"fvn-fraction\\\":[\\\"fvn-normal\\\"],\\\"line-clamp\\\":[\\\"display\\\",\\\"overflow\\\"],rounded:[\\\"rounded-s\\\",\\\"rounded-e\\\",\\\"rounded-t\\\",\\\"rounded-r\\\",\\\"rounded-b\\\",\\\"rounded-l\\\",\\\"rounded-ss\\\",\\\"rounded-se\\\",\\\"rounded-ee\\\",\\\"rounded-es\\\",\\\"rounded-tl\\\",\\\"rounded-tr\\\",\\\"rounded-br\\\",\\\"rounded-bl\\\"],\\\"rounded-s\\\":[\\\"rounded-ss\\\",\\\"rounded-es\\\"],\\\"rounded-e\\\":[\\\"rounded-se\\\",\\\"rounded-ee\\\"],\\\"rounded-t\\\":[\\\"rounded-tl\\\",\\\"rounded-tr\\\"],\\\"rounded-r\\\":[\\\"rounded-tr\\\",\\\"rounded-br\\\"],\\\"rounded-b\\\":[\\\"rounded-br\\\",\\\"rounded-bl\\\"],\\\"rounded-l\\\":[\\\"rounded-tl\\\",\\\"rounded-bl\\\"],\\\"border-spacing\\\":[\\\"border-spacing-x\\\",\\\"border-spacing-y\\\"],\\\"border-w\\\":[\\\"border-w-x\\\",\\\"border-w-y\\\",\\\"border-w-s\\\",\\\"border-w-e\\\",\\\"border-w-bs\\\",\\\"border-w-be\\\",\\\"border-w-t\\\",\\\"border-w-r\\\",\\\"border-w-b\\\",\\\"border-w-l\\\"],\\\"border-w-x\\\":[\\\"border-w-s\\\",\\\"border-w-e\\\",\\\"border-w-r\\\",\\\"border-w-l\\\"],\\\"border-w-y\\\":[\\\"border-w-bs\\\",\\\"border-w-be\\\",\\\"border-w-t\\\",\\\"border-w-b\\\"],\\\"border-color\\\":[\\\"border-color-x\\\",\\\"border-color-y\\\",\\\"border-color-s\\\",\\\"border-color-e\\\",\\\"border-color-bs\\\",\\\"border-color-be\\\",\\\"border-color-t\\\",\\\"border-color-r\\\",\\\"border-color-b\\\",\\\"border-color-l\\\"],\\\"border-color-x\\\":[\\\"border-color-s\\\",\\\"border-color-e\\\",\\\"border-color-r\\\",\\\"border-color-l\\\"],\\\"border-color-y\\\":[\\\"border-color-bs\\\",\\\"border-color-be\\\",\\\"border-color-t\\\",\\\"border-color-b\\\"],translate:[\\\"translate-x\\\",\\\"translate-y\\\",\\\"translate-none\\\"],\\\"translate-none\\\":[\\\"translate\\\",\\\"translate-x\\\",\\\"translate-y\\\",\\\"translate-z\\\"],\\\"scroll-m\\\":[\\\"scroll-mx\\\",\\\"scroll-my\\\",\\\"scroll-ms\\\",\\\"scroll-me\\\",\\\"scroll-mbs\\\",\\\"scroll-mbe\\\",\\\"scroll-mt\\\",\\\"scroll-mr\\\",\\\"scroll-mb\\\",\\\"scroll-ml\\\"],\\\"scroll-mx\\\":[\\\"scroll-ms\\\",\\\"scroll-me\\\",\\\"scroll-mr\\\",\\\"scroll-ml\\\"],\\\"scroll-my\\\":[\\\"scroll-mbs\\\",\\\"scroll-mbe\\\",\\\"scroll-mt\\\",\\\"scroll-mb\\\"],\\\"scroll-p\\\":[\\\"scroll-px\\\",\\\"scroll-py\\\",\\\"scroll-ps\\\",\\\"scroll-pe\\\",\\\"scroll-pbs\\\",\\\"scroll-pbe\\\",\\\"scroll-pt\\\",\\\"scroll-pr\\\",\\\"scroll-pb\\\",\\\"scroll-pl\\\"],\\\"scroll-px\\\":[\\\"scroll-ps\\\",\\\"scroll-pe\\\",\\\"scroll-pr\\\",\\\"scroll-pl\\\"],\\\"scroll-py\\\":[\\\"scroll-pbs\\\",\\\"scroll-pbe\\\",\\\"scroll-pt\\\",\\\"scroll-pb\\\"],touch:[\\\"touch-x\\\",\\\"touch-y\\\",\\\"touch-pz\\\"],\\\"touch-x\\\":[\\\"touch\\\"],\\\"touch-y\\\":[\\\"touch\\\"],\\\"touch-pz\\\":[\\\"touch\\\"]},conflictingClassGroupModifiers:{\\\"font-size\\\":[\\\"leading\\\"]},postfixLookupClassGroups:[\\\"container-type\\\"],orderSensitiveModifiers:[\\\"*\\\",\\\"**\\\",\\\"after\\\",\\\"backdrop\\\",\\\"before\\\",\\\"details-content\\\",\\\"file\\\",\\\"first-letter\\\",\\\"first-line\\\",\\\"marker\\\",\\\"placeholder\\\",\\\"selection\\\"]}};var PT=Y_(gF);function J(...e){return PT(Ip(e))}var kp=v(O(),1);function FT({className:e,...t}){return(0,kp.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"empty\\\",className:J(\\\"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\\\",e),...t})}function HT({className:e,...t}){return(0,kp.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"empty-header\\\",className:J(\\\"flex max-w-sm flex-col items-center gap-2 text-center\\\",e),...t})}var BG=Yr(\\\"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\\\",{variants:{variant:{default:\\\"bg-transparent\\\",icon:\\\"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\\\"}},defaultVariants:{variant:\\\"default\\\"}});function zT({className:e,...t}){return(0,kp.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"empty-title\\\",className:J(\\\"text-lg font-medium tracking-tight\\\",e),...t})}var Mp=v(O(),1);function UT({message:e}){return(0,Mp.jsx)(FT,{\\\"aria-live\\\":\\\"polite\\\",className:\\\"border\\\",children:(0,Mp.jsx)(HT,{children:(0,Mp.jsx)(zT,{children:e??\\\"No scenarios in this report.\\\"})})})}var VT=v(A(),1);var qT=v(A(),1),Jl=(0,qT.createContext)(null);function ro(){let e=(0,VT.useContext)(Jl);if(!e)throw new Error(\\\"useReport must be used inside <ReportRoot> or <Report>. Wrap your tree with one of those.\\\");return e.report}function gn(e){if(e<1e3)return`${Math.round(e)} ms`;if(e<6e4)return`${(e/1e3).toFixed(2)} s`;let t=Math.floor(e/6e4),a=Math.floor(e%6e4/1e3);if(t<60)return a>0?`${t}m ${a}s`:`${t}m`;let o=Math.floor(t/60),n=t%60;return`${o}h ${n}m`}var XT=v(O(),1),bF=/\\\"[^\\\"]*\\\"|(?<![\\\\w.-])\\\\d+(?:\\\\.\\\\d+)?(?![\\\\w.-])/g;function GT(e){let t=Array.from(e.matchAll(bF));if(t.length===0)return e;let a=[],o=0;return t.forEach((n,r)=>{let l=n.index,s=l+n[0].length;l>o&&a.push(e.slice(o,l)),a.push((0,XT.jsx)(\\\"span\\\",{className:\\\"font-medium text-step-param italic\\\",children:n[0]},r)),o=s}),o<e.length&&a.push(e.slice(o)),a}function Ny(e){let t=\\\"Given\\\",a=[];for(let o of e)(o.keyword===\\\"Given\\\"||o.keyword===\\\"When\\\"||o.keyword===\\\"Then\\\")&&(t=o.keyword),t===\\\"Then\\\"&&a.push(o);return a}function Ap(e){let t=Ny(e).filter(a=>typeof a.assertions==\\\"number\\\");return t.length===0?\\\"unobserved\\\":t.some(a=>(a.assertions??0)>0)?\\\"asserted\\\":\\\"unasserted\\\"}var YT=v(O(),1);function jT({entry:e}){return(0,YT.jsx)(\\\"p\\\",{className:\\\"my-2 text-sm text-muted-foreground\\\",children:e.text})}var y5=v(A(),1);function yF(e,t){return function(o,...n){let r=new URL(e);return r.searchParams.set(\\\"code\\\",o.toString()),n.forEach(l=>r.searchParams.append(\\\"args[]\\\",l)),`${t} error #${o}; visit ${r} for the full message.`}}var SF=yF(\\\"https://base-ui.com/production-error\\\",\\\"Base UI\\\"),Ne=SF;var $r=v(A(),1);var ZT=v(A(),1),KT={};function We(e,t){let a=ZT.useRef(KT);return a.current===KT&&(a.current=e(t)),a}function Ha(e,t,a,o){let n=We(QT).current;return CF(n,e,t,a,o)&&WT(n,[e,t,a,o]),n.callback}function $T(e){let t=We(QT).current;return vF(t,e)&&WT(t,e),t.callback}function QT(){return{callback:null,cleanup:null,refs:[]}}function CF(e,t,a,o,n){return e.refs[0]!==t||e.refs[1]!==a||e.refs[2]!==o||e.refs[3]!==n}function vF(e,t){return e.refs.length!==t.length||e.refs.some((a,o)=>a!==t[o])}function WT(e,t){if(e.refs=t,t.every(a=>a==null)){e.callback=null;return}e.callback=a=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),a!=null){let o=Array(t.length).fill(null);for(let n=0;n<t.length;n+=1){let r=t[n];if(r!=null)switch(typeof r){case\\\"function\\\":{let l=r(a);typeof l==\\\"function\\\"&&(o[n]=l);break}case\\\"object\\\":{r.current=a;break}default:}}e.cleanup=()=>{for(let n=0;n<t.length;n+=1){let r=t[n];if(r!=null)switch(typeof r){case\\\"function\\\":{let l=o[n];typeof l==\\\"function\\\"?l():r(null);break}case\\\"object\\\":{r.current=null;break}default:}}}}}}var eE=v(A(),1);var JT=v(A(),1),LF=parseInt(JT.version,10);function Oi(e){return LF>=e}function By(e){if(!eE.isValidElement(e))return null;let t=e,a=t.props;return(Oi(19)?a?.ref:t.ref)??null}function Dc(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}function He(){}var ca=Object.freeze([]),Ae=Object.freeze({});function tE(e,t){let a={};for(let o in e){let n=e[o];if(t?.hasOwnProperty(o)){let r=t[o](n);r!=null&&Object.assign(a,r);continue}n===!0?a[`data-${o.toLowerCase()}`]=\\\"\\\":n&&(a[`data-${o.toLowerCase()}`]=n.toString())}return a}function aE(e,t){return typeof e==\\\"function\\\"?e(t):e}function oE(e,t){return typeof e==\\\"function\\\"?e(t):e}var _y={};function wa(e,t,a,o,n){if(!a&&!o&&!n&&!e)return Op(t);let r=Op(e);return t&&(r=Pc(r,t)),a&&(r=Pc(r,a)),o&&(r=Pc(r,o)),n&&(r=Pc(r,n)),r}function nE(e){if(e.length===0)return _y;if(e.length===1)return Op(e[0]);let t=Op(e[0]);for(let a=1;a<e.length;a+=1)t=Pc(t,e[a]);return t}function Op(e){return Fy(e)?{...lE(e,_y)}:RF(e)}function Pc(e,t){return Fy(t)?lE(t,e):IF(e,t)}function RF(e){let t={...e};for(let a in t){let o=t[a];rE(a,o)&&(t[a]=sE(o))}return t}function IF(e,t){if(!t)return e;for(let a in t){let o=t[a];switch(a){case\\\"style\\\":{e[a]=Dc(e.style,o);break}case\\\"className\\\":{e[a]=Hy(e.className,o);break}default:rE(a,o)?e[a]=wF(e[a],o):e[a]=o}}return e}function rE(e,t){let a=e.charCodeAt(0),o=e.charCodeAt(1),n=e.charCodeAt(2);return a===111&&o===110&&n>=65&&n<=90&&(typeof t==\\\"function\\\"||typeof t>\\\"u\\\")}function Fy(e){return typeof e==\\\"function\\\"}function lE(e,t){return Fy(e)?e(t):e??_y}function wF(e,t){return t?e?(...a)=>{let o=a[0];if(iE(o)){let r=o;Nc(r);let l=t(...a);return r.baseUIHandlerPrevented||e?.(...a),l}let n=t(...a);return e?.(...a),n}:sE(t):e}function sE(e){return e&&((...t)=>{let a=t[0];return iE(a)&&Nc(a),e(...t)})}function Nc(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function Hy(e,t){return t?e?t+\\\" \\\"+e:t:e}function iE(e){return e!=null&&typeof e==\\\"object\\\"&&\\\"nativeEvent\\\"in e}var zy=v(A(),1);function se(e,t,a={}){let o=t.render;a.enabled!==!1&&(o=MF(o));let n=TF(t,a,o);if(a.enabled===!1)return null;let r=a.state??Ae;return AF(e,o,n,r)}function TF(e,t,a){let{className:o,style:n}=e,{state:r=Ae,ref:l,props:s,stateAttributesMapping:i,enabled:u=!0}=t,c=u?aE(o,r):void 0,d=u?oE(n,r):void 0,f=u?tE(r,i):Ae,p=u&&s?EF(s):void 0,h=u?Dc(f,p)??{}:Ae;return typeof document<\\\"u\\\"&&(u?Array.isArray(l)?h.ref=$T([h.ref,By(a),...l]):h.ref=Ha(h.ref,By(a),l):Ha(null,null)),u?(c!==void 0&&(h.className=Hy(h.className,c)),d!==void 0&&(h.style=Dc(h.style,d)),h):Ae}function EF(e){return Array.isArray(e)?nE(e):wa(void 0,e)}var kF=Symbol.for(\\\"react.lazy\\\");function MF(e){if(e?.$$typeof!==kF)return e;let t=$r.Children.toArray(e)[0];return $r.isValidElement(t)?t:e}function AF(e,t,a,o){if(t){if(typeof t==\\\"function\\\")return t(a,o);let n=wa(a,t.props);return n.ref=a.ref,$r.cloneElement(t,n)}if(e&&typeof e==\\\"string\\\")return OF(e,a);throw new Error(Ne(8))}function OF(e,t){return e===\\\"button\\\"?(0,zy.createElement)(\\\"button\\\",{type:\\\"button\\\",...t,key:t.key}):e===\\\"img\\\"?(0,zy.createElement)(\\\"img\\\",{alt:\\\"\\\",...t,key:t.key}):$r.createElement(e,t)}function Dp(e){return se(e.defaultTagName??\\\"div\\\",e,e)}var DF=Yr(\\\"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\\\",{variants:{variant:{default:\\\"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\\\",secondary:\\\"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\\\",destructive:\\\"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\\\",outline:\\\"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\\\",ghost:\\\"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\\\",link:\\\"text-primary underline-offset-4 [a&]:hover:underline\\\",passed:\\\"border-pass-border text-pass font-mono uppercase\\\",failed:\\\"border-fail-border bg-fail-bg text-fail font-mono uppercase\\\",skipped:\\\"border-skip-border text-skip font-mono uppercase\\\",pending:\\\"border-pend-border text-pend font-mono uppercase\\\",tag:\\\"border-border text-muted-foreground font-mono font-medium [a&]:hover:bg-muted\\\"}},defaultVariants:{variant:\\\"default\\\"}});function fa({className:e,variant:t=\\\"default\\\",render:a,...o}){return Dp({defaultTagName:\\\"span\\\",render:a,props:{\\\"data-slot\\\":\\\"badge\\\",\\\"data-variant\\\":t,className:J(DF({variant:t}),e),...o}})}var Pp=v(O(),1);function uE({entry:e}){return(0,Pp.jsx)(\\\"ul\\\",{className:\\\"my-2 flex flex-wrap gap-1.5\\\",\\\"aria-label\\\":\\\"Tags\\\",children:e.names.map(t=>(0,Pp.jsx)(\\\"li\\\",{children:(0,Pp.jsx)(fa,{variant:\\\"tag\\\",children:t})},t))})}var Di=v(O(),1);function PF(e){if(e===null)return\\\"null\\\";if(typeof e==\\\"string\\\")return e;if(typeof e==\\\"number\\\"||typeof e==\\\"boolean\\\")return String(e);try{return JSON.stringify(e)}catch{return String(e)}}function Np({entries:e}){return(0,Di.jsx)(\\\"dl\\\",{className:\\\"my-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-sm\\\",children:e.map((t,a)=>(0,Di.jsxs)(\\\"div\\\",{className:\\\"contents\\\",children:[(0,Di.jsx)(\\\"dt\\\",{className:\\\"font-semibold text-muted-foreground\\\",children:t.label}),(0,Di.jsx)(\\\"dd\\\",{className:\\\"min-w-0 break-words font-mono text-foreground\\\",children:PF(t.value)})]},a))})}var Uy=v(A(),1);var NF={},BF={};function cE(){return(0,Uy.useContext)(Jl)?.customRenderers??NF}function Pi(){return(0,Uy.useContext)(Jl)?.renderers??BF}var hn=v(O(),1);function Bc({label:e,children:t}){return(0,hn.jsxs)(\\\"figure\\\",{className:\\\"my-3\\\",children:[e?(0,hn.jsx)(\\\"figcaption\\\",{className:\\\"mb-1.5 text-xs font-medium text-muted-foreground\\\",children:e}):null,(0,hn.jsx)(\\\"pre\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md bg-muted p-3\\\",children:t})]})}function fE({entry:e}){let t=Pi();return t.code?(0,hn.jsx)(hn.Fragment,{children:t.code(e)}):(0,hn.jsx)(Bc,{label:e.label,children:(0,hn.jsx)(\\\"code\\\",{className:J(\\\"font-mono text-xs\\\",e.lang&&`language-${e.lang}`),children:e.content})})}var Ro=v(O(),1);function dE({entry:e}){return(0,Ro.jsxs)(\\\"figure\\\",{className:\\\"my-3\\\",children:[e.label?(0,Ro.jsx)(\\\"figcaption\\\",{className:\\\"mb-1.5 text-xs font-medium text-muted-foreground\\\",children:e.label}):null,(0,Ro.jsx)(\\\"div\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md border border-border\\\",children:(0,Ro.jsxs)(\\\"table\\\",{className:\\\"w-full border-collapse text-sm\\\",children:[(0,Ro.jsx)(\\\"thead\\\",{children:(0,Ro.jsx)(\\\"tr\\\",{className:\\\"bg-muted/50\\\",children:e.columns.map(t=>(0,Ro.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"border-b border-border px-3 py-2 text-left font-semibold\\\",children:t},t))})}),(0,Ro.jsx)(\\\"tbody\\\",{children:e.rows.map((t,a)=>(0,Ro.jsx)(\\\"tr\\\",{children:t.map((o,n)=>(0,Ro.jsx)(\\\"td\\\",{className:\\\"border-b border-border px-3 py-2 text-foreground\\\",children:o},n))},a))})]})})]})}var mE=v(O(),1);function pE({entry:e}){return(0,mE.jsx)(\\\"a\\\",{className:\\\"text-sm font-medium text-primary underline underline-offset-2 hover:no-underline\\\",href:e.url,rel:\\\"noreferrer noopener\\\",target:\\\"_blank\\\",children:e.label})}function Xy(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var as=Xy();function RE(e){as=e}var es={exec:()=>null};function Ni(e){let t=[];return a=>{let o=Math.max(0,Math.min(3,a-1)),n=t[o];return n||(n=e(o),t[o]=n),n}}function Oe(e,t=\\\"\\\"){let a=typeof e==\\\"string\\\"?e:e.source,o={replace:(n,r)=>{let l=typeof r==\\\"string\\\"?r:r.source;return l=l.replace(da.caret,\\\"$1\\\"),a=a.replace(n,l),o},getRegex:()=>new RegExp(a,t)};return o}var _F=((e=\\\"\\\")=>{try{return!!new RegExp(\\\"(?<=1)(?<!1)\\\"+e)}catch{return!1}})(),da={codeRemoveIndent:/^(?: {0,3}\\\\t| {1,4})/gm,outputLinkReplace:/\\\\\\\\([\\\\[\\\\]])/g,indentCodeCompensation:/^(\\\\s+)(?:```)/,beginningSpace:/^\\\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \\\\t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\\\n/g,tabCharGlobal:/\\\\t/g,multipleSpaceGlobal:/\\\\s+/g,blankLine:/^[ \\\\t]*$/,doubleBlankLine:/\\\\n[ \\\\t]*\\\\n[ \\\\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\\\n {0,3}((?:=+|-+) *)(?=\\\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\\\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\\\[[ xX]\\\\] +\\\\S/,listReplaceTask:/^\\\\[[ xX]\\\\] +/,listTaskCheckbox:/\\\\[[ xX]\\\\]/,anyLine:/\\\\n.*\\\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\\\||\\\\| *$/g,tableRowBlankLine:/\\\\n[ \\\\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\\\s|>)/i,endPreScriptTag:/^<\\\\/(pre|code|kbd|script)(\\\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\\\"]*[^\\\\s])\\\\s+(['\\\"])(.*)\\\\2/,unicodeAlphaNumeric:/[\\\\p{L}\\\\p{N}]/u,escapeTest:/[&<>\\\"']/,escapeReplace:/[&<>\\\"']/g,escapeTestNoEncode:/[<>\\\"']|&(?!(#\\\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\\\w+);)/,escapeReplaceNoEncode:/[<>\\\"']|&(?!(#\\\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\\\w+);)/g,caret:/(^|[^\\\\[])\\\\^/g,percentDecode:/%25/g,findPipe:/\\\\|/g,splitPipe:/ \\\\|/,slashPipe:/\\\\\\\\\\\\|/g,carriageReturn:/\\\\r\\\\n|\\\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\\\S*/,endingNewline:/\\\\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[\\t ][^\\\\\\\\n]*)?(?:\\\\\\\\n|$))`),nextBulletRegex:Ni(e=>new RegExp(`^ {0,${e}}(?:[*+-]|\\\\\\\\d{1,9}[.)])((?:[ \\t][^\\\\\\\\n]*)?(?:\\\\\\\\n|$))`)),hrRegex:Ni(e=>new RegExp(`^ {0,${e}}((?:-[ \\t]*){3,}|(?:_[ \\t]*){3,}|(?:\\\\\\\\*[ \\t]*){3,})(?:\\\\\\\\n+|$)`)),fencesBeginRegex:Ni(e=>new RegExp(`^ {0,${e}}(?:\\\\`\\\\`\\\\`|~~~)`)),headingBeginRegex:Ni(e=>new RegExp(`^ {0,${e}}#`)),htmlBeginRegex:Ni(e=>new RegExp(`^ {0,${e}}(?:</?(?:${zc})(?: +|$|/?>)|<(?:script|pre|style|textarea|!--))`,\\\"i\\\")),blockquoteBeginRegex:Ni(e=>new RegExp(`^ {0,${e}}>`))},FF=/^(?:[ \\\\t]*(?:\\\\n|$))+/,HF=/^((?: {4}| {0,3}\\\\t)[^\\\\n]+(?:\\\\n(?:[ \\\\t]*(?:\\\\n|$))*)?)+/,zF=/^ {0,3}(`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~{3,})([^\\\\n]*)(?:\\\\n|$)(?:|([\\\\s\\\\S]*?)(?:\\\\n|$))(?: {0,3}\\\\1[~`]* *(?=\\\\n|$)|$)/,Hc=/^ {0,3}((?:-[\\\\t ]*){3,}|(?:_[ \\\\t]*){3,}|(?:\\\\*[ \\\\t]*){3,})(?:\\\\n+|$)/,UF=/^ {0,3}(#{1,6})(?=\\\\s|$)(.*)(?:\\\\n+|$)/,jy=/ {0,3}(?:[*+-]|\\\\d{1,9}[.)])/,IE=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\\\n(?!\\\\s*?\\\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\\\n {0,3}(=+|-+) *(?:\\\\n+|$)/,wE=Oe(IE).replace(/bull/g,jy).replace(/blockCode/g,/(?: {4}| {0,3}\\\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\\\s|$)/).replace(/html/g,/ {0,3}<[^\\\\n>]+>\\\\n/).replace(/\\\\|table/g,\\\"\\\").getRegex(),qF=Oe(IE).replace(/bull/g,jy).replace(/blockCode/g,/(?: {4}| {0,3}\\\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\\\s|$)/).replace(/html/g,/ {0,3}<[^\\\\n>]+>\\\\n/).replace(/table/g,/ {0,3}\\\\|?(?:[:\\\\- ]*\\\\|)+[\\\\:\\\\- ]*\\\\n/).getRegex(),Yy=/^([^\\\\n]+(?:\\\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\\\t]+\\\\n)[^\\\\n]+)*)/,VF=/^[^\\\\n]+/,Ky=/(?!\\\\s*\\\\])(?:\\\\\\\\[\\\\s\\\\S]|[^\\\\[\\\\]\\\\\\\\])+/,GF=Oe(/^ {0,3}\\\\[(label)\\\\]: *(?:\\\\n[ \\\\t]*)?([^<\\\\s][^\\\\s]*|<.*?>)(?:(?: +(?:\\\\n[ \\\\t]*)?| *\\\\n[ \\\\t]*)(title))? *(?:\\\\n+|$)/).replace(\\\"label\\\",Ky).replace(\\\"title\\\",/(?:\\\"(?:\\\\\\\\\\\"?|[^\\\"\\\\\\\\])*\\\"|'[^'\\\\n]*(?:\\\\n[^'\\\\n]+)*\\\\n?'|\\\\([^()]*\\\\))/).getRegex(),XF=Oe(/^(bull)([ \\\\t][^\\\\n]*?)?(?:\\\\n|$)/).replace(/bull/g,jy).getRegex(),zc=\\\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\\\",Zy=/<!--(?:-?>|[\\\\s\\\\S]*?(?:-->|$))/,jF=Oe(\\\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\\\\\s>][\\\\\\\\s\\\\\\\\S]*?(?:</\\\\\\\\1>[^\\\\\\\\n]*\\\\\\\\n*|$)|comment[^\\\\\\\\n]*(\\\\\\\\n+|$)|<\\\\\\\\?[\\\\\\\\s\\\\\\\\S]*?(?:\\\\\\\\?>[^\\\\\\\\n]*\\\\\\\\n*|$)|<![A-Z][\\\\\\\\s\\\\\\\\S]*?(?:>[^\\\\\\\\n]*\\\\\\\\n*|$)|<!\\\\\\\\[CDATA\\\\\\\\[[\\\\\\\\s\\\\\\\\S]*?(?:\\\\\\\\]\\\\\\\\]>[^\\\\\\\\n]*\\\\\\\\n*|$)|</?(tag)(?: +|\\\\\\\\n|/?>)[\\\\\\\\s\\\\\\\\S]*?(?:(?:\\\\\\\\n[ \\t]*)+\\\\\\\\n|$)|<(?!script|pre|style|textarea)([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\\\\\\\t]*(?:\\\\\\\\n|$))[\\\\\\\\s\\\\\\\\S]*?(?:(?:\\\\\\\\n[ \\t]*)+\\\\\\\\n|$)|</(?!script|pre|style|textarea)[a-z][a-z0-9-]*\\\\\\\\s*>(?=[ \\\\\\\\t]*(?:\\\\\\\\n|$))[\\\\\\\\s\\\\\\\\S]*?(?:(?:\\\\\\\\n[ \\t]*)+\\\\\\\\n|$))\\\",\\\"i\\\").replace(\\\"comment\\\",Zy).replace(\\\"tag\\\",zc).replace(\\\"attribute\\\",/ +[a-zA-Z:_][\\\\w.:-]*(?: *= *\\\"[^\\\"\\\\n]*\\\"| *= *'[^'\\\\n]*'| *= *[^\\\\s\\\"'=<>`]+)?/).getRegex(),TE=e=>Oe(Yy).replace(\\\"hr\\\",Hc).replace(\\\"heading\\\",\\\" {0,3}#{1,6}(?:\\\\\\\\s|$)\\\").replace(\\\"|lheading\\\",\\\"\\\").replace(\\\"|table\\\",\\\"\\\").replace(\\\"blockquote\\\",\\\" {0,3}>\\\").replace(\\\"fences\\\",\\\" {0,3}(?:`{3,}(?=[^`\\\\\\\\n]*(?:\\\\\\\\n|$))|~~~)[^\\\\\\\\n]*(?:\\\\\\\\n|$)\\\").replace(\\\"list\\\",e).replace(\\\"html\\\",\\\"</?(?:tag)(?: +|\\\\\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\\\").replace(\\\"tag\\\",zc).getRegex(),YF=TE(/ {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]/),KF=TE(/ {0,3}(?:[*+-]|\\\\d{1,9}[.)])(?:[ \\\\t]|\\\\n|$)/),ZF=Oe(/^( {0,3}> ?(paragraph|[^\\\\n]*)(?:\\\\n|$))+/).replace(\\\"paragraph\\\",KF).getRegex(),$y={blockquote:ZF,code:HF,def:GF,fences:zF,heading:UF,hr:Hc,html:jF,lheading:wE,list:XF,newline:FF,paragraph:YF,table:es,text:VF},gE=Oe(\\\"^ *([^\\\\\\\\n ].*)\\\\\\\\n {0,3}((?:\\\\\\\\| *)?:?-+:? *(?:\\\\\\\\| *:?-+:? *)*(?:\\\\\\\\| *)?)(?:\\\\\\\\n((?:(?! *\\\\\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\\\\\n|$))*)\\\\\\\\n*|$)\\\").replace(\\\"hr\\\",Hc).replace(\\\"heading\\\",\\\" {0,3}#{1,6}(?:\\\\\\\\s|$)\\\").replace(\\\"blockquote\\\",\\\" {0,3}>\\\").replace(\\\"code\\\",\\\"(?: {4}| {0,3}\\t)[^\\\\\\\\n]\\\").replace(\\\"fences\\\",\\\" {0,3}(?:`{3,}(?=[^`\\\\\\\\n]*(?:\\\\\\\\n|$))|~~~)[^\\\\\\\\n]*(?:\\\\\\\\n|$)\\\").replace(\\\"list\\\",\\\" {0,3}(?:[*+-]|1[.)])[ \\\\\\\\t]\\\").replace(\\\"html\\\",\\\"</?(?:tag)(?: +|\\\\\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\\\").replace(\\\"tag\\\",zc).getRegex(),$F={...$y,lheading:qF,table:gE,paragraph:Oe(Yy).replace(\\\"hr\\\",Hc).replace(\\\"heading\\\",\\\" {0,3}#{1,6}(?:\\\\\\\\s|$)\\\").replace(\\\"|lheading\\\",\\\"\\\").replace(\\\"table\\\",gE).replace(\\\"blockquote\\\",\\\" {0,3}>\\\").replace(\\\"fences\\\",\\\" {0,3}(?:`{3,}(?=[^`\\\\\\\\n]*(?:\\\\\\\\n|$))|~~~)[^\\\\\\\\n]*(?:\\\\\\\\n|$)\\\").replace(\\\"list\\\",\\\" {0,3}(?:[*+-]|1[.)])[ \\\\\\\\t]+[^ \\\\\\\\t\\\\\\\\n]\\\").replace(\\\"html\\\",\\\"</?(?:tag)(?: +|\\\\\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\\\").replace(\\\"tag\\\",zc).getRegex()},QF={...$y,html:Oe(`^ *(?:comment *(?:\\\\\\\\n|\\\\\\\\s*$)|<(tag)[\\\\\\\\s\\\\\\\\S]+?</\\\\\\\\1> *(?:\\\\\\\\n{2,}|\\\\\\\\s*$)|<tag(?:\\\"[^\\\"]*\\\"|'[^']*'|\\\\\\\\s[^'\\\"/>\\\\\\\\s]*)*?/?> *(?:\\\\\\\\n{2,}|\\\\\\\\s*$))`).replace(\\\"comment\\\",Zy).replace(/tag/g,\\\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\\\\\b)\\\\\\\\w+(?!:|[^\\\\\\\\w\\\\\\\\s@]*@)\\\\\\\\b\\\").getRegex(),def:/^ *\\\\[([^\\\\]]+)\\\\]: *<?([^\\\\s>]+)>?(?: +([\\\"(][^\\\\n]+[\\\")]))? *(?:\\\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\\\n+|$)/,fences:es,lheading:/^(.+?)\\\\n {0,3}(=+|-+) *(?:\\\\n+|$)/,paragraph:Oe(Yy).replace(\\\"hr\\\",Hc).replace(\\\"heading\\\",` *#{1,6} *[^\\n]`).replace(\\\"lheading\\\",wE).replace(\\\"|table\\\",\\\"\\\").replace(\\\"blockquote\\\",\\\" {0,3}>\\\").replace(\\\"|fences\\\",\\\"\\\").replace(\\\"|list\\\",\\\"\\\").replace(\\\"|html\\\",\\\"\\\").replace(\\\"|tag\\\",\\\"\\\").getRegex()},WF=/^\\\\\\\\([!\\\"#$%&'()*+,\\\\-./:;<=>?@\\\\[\\\\]\\\\\\\\^_`{|}~])/,JF=/^(`+)([^`]|[^`][\\\\s\\\\S]*?[^`])\\\\1(?!`)/,EE=/^( {2,}|\\\\\\\\)\\\\n(?!\\\\s*$)[ \\\\t]*/,eH=/^(`+|[^`])(?:(?= {2,}\\\\n)|[\\\\s\\\\S]*?(?:(?=[\\\\\\\\<!\\\\[`*_]|\\\\b_|$)|[^ ](?= {2,}\\\\n)))/,Qn=/[\\\\p{P}\\\\p{S}]/u,Bi=/[\\\\s\\\\p{P}\\\\p{S}]/u,Uc=/[^\\\\s\\\\p{P}\\\\p{S}]/u,tH=Oe(/^((?![*_])punctSpace)/,\\\"u\\\").replace(/punctSpace/g,Bi).getRegex(),aH=/[\\\\p{Pi}\\\\p{Ps}\\\"']/u,kE=/(?!~)[\\\\p{P}\\\\p{S}]/u,oH=/(?!~)[\\\\s\\\\p{P}\\\\p{S}]/u,nH=/(?:[^\\\\s\\\\p{P}\\\\p{S}]|~)/u,rH=Oe(/link|precode-code|html/,\\\"g\\\").replace(\\\"link\\\",/\\\\[(?:[^\\\\[\\\\]`]|(?<a>`+)[^`]+\\\\k<a>(?!`))*?\\\\]\\\\((?:\\\\\\\\[\\\\s\\\\S]|[^\\\\\\\\\\\\(\\\\)]|\\\\((?:\\\\\\\\[\\\\s\\\\S]|[^\\\\\\\\\\\\(\\\\)])*\\\\))*\\\\)/).replace(\\\"precode-\\\",_F?\\\"(?<!`)()\\\":\\\"(^^|[^`])\\\").replace(\\\"code\\\",/(?<b>`+)[^`]+\\\\k<b>(?!`)/).replace(\\\"html\\\",/<(?! )[^<>]*?>/).getRegex(),ME=/^(?:\\\\*+(?:((?!\\\\*)punct)|([^\\\\s*]))?)|^_+(?:((?!_)punct)|([^\\\\s_]))?/,lH=Oe(ME,\\\"u\\\").replace(/punct/g,Qn).getRegex(),sH=Oe(ME,\\\"u\\\").replace(/punct/g,kE).getRegex(),iH=/^(?:\\\\*+(?:((?!\\\\*)(?!openQuote)punct)|([^\\\\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\\\\s_]))?/,uH=Oe(iH,\\\"u\\\").replace(/openQuote/g,aH).replace(/punct/g,Qn).getRegex(),AE=\\\"^[^_*]*?__[^_*]*?\\\\\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\\\\\*)punct(\\\\\\\\*+)(?=[\\\\\\\\s]|$)|notPunctSpace(\\\\\\\\*+)(?!\\\\\\\\*)(?=punctSpace|$)|(?!\\\\\\\\*)punctSpace(\\\\\\\\*+)(?=notPunctSpace)|[\\\\\\\\s](\\\\\\\\*+)(?!\\\\\\\\*)(?=punct)|(?!\\\\\\\\*)punct(\\\\\\\\*+)(?!\\\\\\\\*)(?=punct)|notPunctSpace(\\\\\\\\*+)(?=notPunctSpace)\\\",cH=Oe(AE,\\\"gu\\\").replace(/notPunctSpace/g,Uc).replace(/punctSpace/g,Bi).replace(/punct/g,Qn).getRegex(),fH=Oe(AE,\\\"gu\\\").replace(/notPunctSpace/g,nH).replace(/punctSpace/g,oH).replace(/punct/g,kE).getRegex(),dH=\\\"^[^_*]*?__[^_*]*?\\\\\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\\\\\*)punct(\\\\\\\\*+)(?=[\\\\\\\\s]|$)|notPunctSpace(\\\\\\\\*+)(?!\\\\\\\\*)(?=punctSpace|$)|(?!\\\\\\\\*)[\\\\\\\\s](\\\\\\\\*+)(?=notPunctSpace)|[\\\\\\\\s](\\\\\\\\*+)(?!\\\\\\\\*)(?=punct)|(?!\\\\\\\\*)punct(\\\\\\\\*+)(?!\\\\\\\\*)(?=punct)|(?:(?!\\\\\\\\*)punct|notPunctSpace)(\\\\\\\\*+)(?!\\\\\\\\*)(?=notPunctSpace)\\\",pH=Oe(dH,\\\"gu\\\").replace(/notPunctSpace/g,Uc).replace(/punctSpace/g,Bi).replace(/punct/g,Qn).getRegex(),mH=Oe(\\\"^[^_*]*?\\\\\\\\*\\\\\\\\*[^_*]*?_[^_*]*?(?=\\\\\\\\*\\\\\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\\\",\\\"gu\\\").replace(/notPunctSpace/g,Uc).replace(/punctSpace/g,Bi).replace(/punct/g,Qn).getRegex(),gH=\\\"^[^_*]*?\\\\\\\\*\\\\\\\\*[^_*]*?_[^_*]*?(?=\\\\\\\\*\\\\\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\\\\\\\s](_+)(?=notPunctSpace)|[\\\\\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)\\\",hH=Oe(gH,\\\"gu\\\").replace(/notPunctSpace/g,Uc).replace(/punctSpace/g,Bi).replace(/punct/g,Qn).getRegex(),xH=Oe(/^~~?(?:((?!~)punct)|[^\\\\s~])/,\\\"u\\\").replace(/punct/g,Qn).getRegex(),bH=\\\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\\\",yH=Oe(bH,\\\"gu\\\").replace(/notPunctSpace/g,Uc).replace(/punctSpace/g,Bi).replace(/punct/g,Qn).getRegex(),SH=Oe(/\\\\\\\\(punct)/,\\\"gu\\\").replace(/punct/g,Qn).getRegex(),CH=Oe(/^<(scheme:[^\\\\s\\\\x00-\\\\x1f<>]*|email)>/).replace(\\\"scheme\\\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\\\"email\\\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),vH=Oe(Zy).replace(\\\"(?:-->|$)\\\",\\\"-->\\\").getRegex(),LH=Oe(\\\"^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\\\\\\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\\\\\\\s*/?>|^<\\\\\\\\?[\\\\\\\\s\\\\\\\\S]*?\\\\\\\\?>|^<![a-zA-Z]+\\\\\\\\s[\\\\\\\\s\\\\\\\\S]*?>|^<!\\\\\\\\[CDATA\\\\\\\\[[\\\\\\\\s\\\\\\\\S]*?\\\\\\\\]\\\\\\\\]>\\\").replace(\\\"comment\\\",vH).replace(\\\"attribute\\\",/\\\\s+[a-zA-Z:_][\\\\w.:-]*(?:\\\\s*=\\\\s*\\\"[^\\\"]*\\\"|\\\\s*=\\\\s*'[^']*'|\\\\s*=\\\\s*[^\\\\s\\\"'=<>`]+)?/).getRegex(),OE=/\\\\[(?:\\\\\\\\[\\\\s\\\\S]|[^\\\\[\\\\]\\\\\\\\])*\\\\]/,_p=Oe(/(?:\\\\[(?:brackets|\\\\\\\\[\\\\s\\\\S]|[^\\\\[\\\\]\\\\\\\\])*\\\\]|\\\\\\\\[\\\\s\\\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\\\])|[^\\\\[\\\\]\\\\\\\\`])*?/).replace(\\\"brackets\\\",OE).getRegex(),RH=Oe(/^!?\\\\[(label)\\\\]\\\\(\\\\s*(href)(?:(?:[ \\\\t]+(?:\\\\n[ \\\\t]*)?|\\\\n[ \\\\t]*)(title))?\\\\s*\\\\)/).replace(\\\"label\\\",_p).replace(\\\"href\\\",/<(?:\\\\\\\\.|[^\\\\n<>\\\\\\\\])+>|[^ \\\\t\\\\n\\\\x00-\\\\x1f]+|(?=\\\\))/).replace(\\\"title\\\",/\\\"(?:\\\\\\\\\\\"?|[^\\\"\\\\\\\\])*\\\"|'(?:\\\\\\\\'?|[^'\\\\\\\\])*'|\\\\((?:\\\\\\\\\\\\)?|[^)\\\\\\\\])*\\\\)/).getRegex(),IH=Oe(/^!?\\\\[(label)\\\\]\\\\[(ref)\\\\]/).replace(\\\"label\\\",_p).replace(\\\"ref\\\",Ky).getRegex(),wH=Oe(/^!?\\\\[(ref)\\\\](?:\\\\[\\\\])?/).replace(\\\"ref\\\",Ky).getRegex(),hE=/(?!\\\\s*\\\\])(?:\\\\\\\\[\\\\s\\\\S]|[^\\\\[\\\\]\\\\\\\\]){1,999}/,TH=Oe(/(?:[^\\\\[\\\\]\\\\\\\\`]*(?:\\\\[(?:brackets|\\\\\\\\[\\\\s\\\\S]|[^\\\\[\\\\]\\\\\\\\])*\\\\]|\\\\\\\\[\\\\s\\\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\\\]))){0,999}?[^\\\\[\\\\]\\\\\\\\`]*?/).replace(\\\"brackets\\\",OE).getRegex(),EH=Oe(\\\"reflink|nolink(?!\\\\\\\\()\\\",\\\"g\\\").replace(\\\"reflink\\\",Oe(/^!?\\\\[(label)\\\\]\\\\[(ref)\\\\]/).replace(\\\"label\\\",TH).replace(\\\"ref\\\",hE).getRegex()).replace(\\\"nolink\\\",Oe(/^!?\\\\[(ref)\\\\](?:\\\\[\\\\])?/).replace(\\\"ref\\\",hE).getRegex()).getRegex(),xE=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Qy={_backpedal:es,anyPunctuation:SH,autolink:CH,blockSkip:rH,br:EE,code:JF,del:es,delLDelim:es,delRDelim:es,emStrongLDelim:lH,emStrongRDelimAst:cH,emStrongRDelimUnd:mH,escape:WF,link:RH,nolink:wH,punctuation:tH,reflink:IH,reflinkSearch:EH,tag:LH,text:eH,url:es},kH={...Qy,emStrongLDelim:uH,emStrongRDelimAst:pH,emStrongRDelimUnd:hH,link:Oe(/^!?\\\\[(label)\\\\]\\\\((.*?)\\\\)/).replace(\\\"label\\\",_p).getRegex(),reflink:Oe(/^!?\\\\[(label)\\\\]\\\\s*\\\\[([^\\\\]]*)\\\\]/).replace(\\\"label\\\",_p).getRegex()},qy={...Qy,emStrongRDelimAst:fH,emStrongLDelim:sH,delLDelim:xH,delRDelim:yH,url:Oe(/^((?:protocol):\\\\/\\\\/|www\\\\.)(?:[a-zA-Z0-9\\\\-]+\\\\.?)+[^\\\\s<]*|^email/).replace(\\\"protocol\\\",xE).replace(\\\"email\\\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\\\\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\\\"~()&]+|\\\\([^)]*\\\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\\\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\\\s~])((?:\\\\\\\\[\\\\s\\\\S]|[^\\\\\\\\])*?(?:\\\\\\\\[\\\\s\\\\S]|[^\\\\s~\\\\\\\\]))\\\\1(?=[^~]|$)/,text:Oe(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\\\/=?_`{\\\\|}~-]+@)|[\\\\s\\\\S]*?(?:(?=[\\\\\\\\<!\\\\[`*~_]|\\\\b_|protocol:\\\\/\\\\/|www\\\\.|$)|[^ ](?= {2,}\\\\n)|[^a-zA-Z0-9.!#$%&'*+\\\\/=?_`{\\\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\\\/=?_`{\\\\|}~-]+@)))/).replace(\\\"protocol\\\",xE).getRegex()},MH={...qy,br:Oe(EE).replace(\\\"{2,}\\\",\\\"*\\\").getRegex(),text:Oe(qy.text).replace(\\\"\\\\\\\\b_\\\",\\\"\\\\\\\\b_| {2,}\\\\\\\\n\\\").replace(/\\\\{2,\\\\}/g,\\\"*\\\").getRegex()},Bp={normal:$y,gfm:$F,pedantic:QF},_c={normal:Qy,gfm:qy,breaks:MH,pedantic:kH},AH={\\\"&\\\":\\\"&amp;\\\",\\\"<\\\":\\\"&lt;\\\",\\\">\\\":\\\"&gt;\\\",'\\\"':\\\"&quot;\\\",\\\"'\\\":\\\"&#39;\\\"},bE=e=>AH[e];function lo(e,t){if(t){if(da.escapeTest.test(e))return e.replace(da.escapeReplace,bE)}else if(da.escapeTestNoEncode.test(e))return e.replace(da.escapeReplaceNoEncode,bE);return e}function yE(e){try{e=encodeURI(e).replace(da.percentDecode,\\\"%\\\")}catch{return null}return e}function SE(e,t){let a=e.replace(da.findPipe,(r,l,s)=>{let i=!1,u=l;for(;--u>=0&&s[u]===\\\"\\\\\\\\\\\";)i=!i;return i?\\\"|\\\":\\\" |\\\"}),o=a.split(da.splitPipe),n=0;if(o[0].trim()||o.shift(),o.length>0&&!o.at(-1)?.trim()&&o.pop(),t)if(o.length>t)o.splice(t);else for(;o.length<t;)o.push(\\\"\\\");for(;n<o.length;n++)o[n]=o[n].trim().replace(da.slashPipe,\\\"|\\\");return o}function Qr(e,t,a){let o=e.length;if(o===0)return\\\"\\\";let n=0;for(;n<o;){let r=e.charAt(o-n-1);if(r===t&&!a)n++;else if(r!==t&&a)n++;else break}return e.slice(0,o-n)}function CE(e){let t=e.split(`\\n`),a=t.length-1;for(;a>=0&&da.blankLine.test(t[a]);)a--;return t.length-a<=2?e:t.slice(0,a+1).join(`\\n`)}function Fp(e){return e.toLowerCase().toUpperCase().toLowerCase()}function OH(e,t){if(e.indexOf(t[1])===-1)return-1;let a=0;for(let o=0;o<e.length;o++)if(e[o]===\\\"\\\\\\\\\\\")o++;else if(e[o]===t[0])a++;else if(e[o]===t[1]&&(a--,a<0))return o;return a>0?-2:-1}function DH(e,t=0){let a=t,o=\\\"\\\";for(let n of e)if(n===\\\"\\t\\\"){let r=4-a%4;o+=\\\" \\\".repeat(r),a+=r}else o+=n,a++;return o}function vE(e,t,a,o,n){let r=t.href,l=t.title||null,s=e[1].replace(n.other.outputLinkReplace,\\\"$1\\\"),i=e[0].charAt(0)===\\\"!\\\";o.state.inLink=!0;let u=o.state.linkEmitted,c=o.state.inRawBlock;o.state.linkEmitted=!1;let d=o.inlineTokens(s),f=o.state.linkEmitted;if(o.state.linkEmitted=u,o.state.inLink=!1,!i){if(f){o.state.inRawBlock=c;return}o.state.linkEmitted=!0}return{type:i?\\\"image\\\":\\\"link\\\",raw:a,href:r,title:l,text:s,tokens:d}}function PH(e,t,a){let o=e.match(a.other.indentCodeCompensation);if(o===null)return t;let n=o[1];return t.split(`\\n`).map(r=>{let l=r.match(a.other.beginningSpace);if(l===null)return r;let[s]=l;return r.slice(Math.min(s.length,n.length))}).join(`\\n`)}function LE(e,t,a,o){if(!t.includes(\\\"<\\\"))return!1;for(let n=0;n<t.length;n++){if(t[n]===\\\"\\\\\\\\\\\"){n++;continue}if(t[n]===\\\"`\\\"){let s=o.inline.code.exec(t.slice(n));if(s){n+=s[0].length-1;continue}}if(t[n]!==\\\"<\\\")continue;let r=e.slice(a+n),l=o.inline.tag.exec(r)||o.inline.autolink.exec(r);if(l){if(l[0].length>t.length-n)return!0;n+=l[0].length-1}}return!1}var Hp=class{options;rules;lexer;constructor(e){this.options=e||as}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\\\"space\\\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let a=this.options.pedantic?t[0]:CE(t[0]),o=a.replace(this.rules.other.codeRemoveIndent,\\\"\\\");return{type:\\\"code\\\",raw:a,codeBlockStyle:\\\"indented\\\",text:o}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let a=t[0],o=PH(a,t[3]||\\\"\\\",this.rules);return{type:\\\"code\\\",raw:a,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\\\"$1\\\"):t[2],text:o}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let a=t[2].trim();if(this.rules.other.endingHash.test(a)){let o=Qr(a,\\\"#\\\");(this.options.pedantic||!o||this.rules.other.endingSpaceTabChar.test(o))&&(a=o.trim())}return{type:\\\"heading\\\",raw:Qr(t[0],`\\n`),depth:t[1].length,text:a,tokens:this.lexer.inline(a)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\\\"hr\\\",raw:Qr(t[0],`\\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let a=Qr(t[0],`\\n`).split(`\\n`),o=\\\"\\\",n=\\\"\\\",r=[];for(;a.length>0;){let l=!1,s=[],i;for(i=0;i<a.length;i++)if(this.rules.other.blockquoteStart.test(a[i]))s.push(a[i]),l=!0;else if(!l)s.push(a[i]);else break;a=a.slice(i);let u=s.join(`\\n`),c=u.replace(this.rules.other.blockquoteSetextReplace,`\\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\\\"\\\");o=o?`${o}\\n${u}`:u,n=n?`${n}\\n${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,r,!0),this.lexer.state.top=d,a.length===0)break;let f=r.at(-1);if(f?.type===\\\"code\\\")break;if(f?.type===\\\"blockquote\\\"){let p=f,h=a.join(`\\n`),b=p.raw+`\\n`+h.replace(this.rules.other.blockquoteSetextReplace2,\\\"\\\"),S=this.blockquote(b);r[r.length-1]=S,o=`${o}\\n${h}`,n=n.substring(0,n.length-p.text.length)+S.text;break}else if(f?.type===\\\"list\\\"){let p=f,h=p.raw+`\\n`+a.join(`\\n`),b=this.list(h);r[r.length-1]=b,o=o.substring(0,o.length-f.raw.length)+b.raw,n=n.substring(0,n.length-p.raw.length)+b.raw,a=h.substring(r.at(-1).raw.length).split(`\\n`);continue}}return{type:\\\"blockquote\\\",raw:o,tokens:r,text:n}}}list(e){let t=this.rules.block.list.exec(e);if(t){let a=t[1].trim(),o=a.length>1,n={type:\\\"list\\\",raw:\\\"\\\",ordered:o,start:o?+a.slice(0,-1):\\\"\\\",loose:!1,items:[]};a=o?`\\\\\\\\d{1,9}\\\\\\\\${a.slice(-1)}`:`\\\\\\\\${a}`,this.options.pedantic&&(a=o?a:\\\"[*+-]\\\");let r=this.rules.other.listItemRegex(a),l=!1;for(;e;){let i=!1,u=\\\"\\\",c=\\\"\\\";if(!(t=r.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let d=DH(t[2].split(`\\n`,1)[0],t[1].length),f=e.split(`\\n`,1)[0],p=!d.trim(),h=0;if(this.options.pedantic?(h=2,c=d.trimStart()):p?h=t[1].length+1:(h=d.search(this.rules.other.nonSpaceChar),h=h>4?1:h,c=d.slice(h),h+=t[1].length),p&&this.rules.other.blankLine.test(f)&&(u+=f+`\\n`,e=e.substring(f.length+1),i=!0),!i){let b=this.rules.other.nextBulletRegex(h),S=this.rules.other.hrRegex(h),g=this.rules.other.fencesBeginRegex(h),m=this.rules.other.headingBeginRegex(h),x=this.rules.other.htmlBeginRegex(h),y=this.rules.other.blockquoteBeginRegex(h);for(;e;){let L=e.split(`\\n`,1)[0],I;if(f=L,this.options.pedantic?(f=f.replace(this.rules.other.listReplaceNesting,\\\"  \\\"),I=f):I=f.replace(this.rules.other.tabCharGlobal,\\\"    \\\"),g.test(f)||m.test(f)||x.test(f)||y.test(f)||b.test(f)||S.test(f))break;if(I.search(this.rules.other.nonSpaceChar)>=h||!f.trim())c+=`\\n`+I.slice(h);else{if(p||d.replace(this.rules.other.tabCharGlobal,\\\"    \\\").search(this.rules.other.nonSpaceChar)>=4||g.test(d)||m.test(d)||S.test(d))break;c+=`\\n`+f}p=!f.trim(),u+=L+`\\n`,e=e.substring(L.length+1),d=I.slice(h)}}n.loose||(l?n.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(l=!0)),n.items.push({type:\\\"list_item\\\",raw:u,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),n.raw+=u}let s=n.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let i of n.items)if(this.lexer.state.top=!1,i.tokens=this.lexer.blockTokens(i.text,[]),!n.loose){let u=i.tokens.filter(d=>d.type===\\\"space\\\"),c=u.length>0&&u.some(d=>this.rules.other.anyLine.test(d.raw));n.loose=c}for(let i of n.items){let u=i.tokens[0];if(i.task&&(u?.type===\\\"text\\\"||u?.type===\\\"paragraph\\\")){i.text=i.text.replace(this.rules.other.listReplaceTask,\\\"\\\"),u.raw=u.raw.replace(this.rules.other.listReplaceTask,\\\"\\\"),u.text=u.text.replace(this.rules.other.listReplaceTask,\\\"\\\");for(let d=this.lexer.inlineQueue.length-1;d>=0;d--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[d].src)){this.lexer.inlineQueue[d].src=this.lexer.inlineQueue[d].src.replace(this.rules.other.listReplaceTask,\\\"\\\");break}let c=this.rules.other.listTaskCheckbox.exec(i.raw);if(c){let d={type:\\\"checkbox\\\",raw:c[0]+\\\" \\\",checked:c[0]!==\\\"[ ]\\\"};i.checked=d.checked,n.loose?i.tokens[0]&&[\\\"paragraph\\\",\\\"text\\\"].includes(i.tokens[0].type)&&\\\"tokens\\\"in i.tokens[0]&&i.tokens[0].tokens?(i.tokens[0].raw=d.raw+i.tokens[0].raw,i.tokens[0].text=d.raw+i.tokens[0].text,i.tokens[0].tokens.unshift(d)):i.tokens.unshift({type:\\\"paragraph\\\",raw:d.raw,text:d.raw,tokens:[d]}):i.tokens.unshift(d)}}else i.task&&(i.task=!1)}if(n.loose)for(let i of n.items){i.loose=!0;for(let u of i.tokens)u.type===\\\"text\\\"&&(u.type=\\\"paragraph\\\")}return n}}html(e){let t=this.rules.block.html.exec(e);if(t){let a=CE(t[0]);return{type:\\\"html\\\",block:!0,raw:a,pre:t[1]===\\\"pre\\\"||t[1]===\\\"script\\\"||t[1]===\\\"style\\\",text:a}}}def(e){let t=this.rules.block.def.exec(e);if(t){let a=Fp(t[1]).replace(this.rules.other.multipleSpaceGlobal,\\\" \\\"),o=t[2]?t[2].replace(this.rules.other.hrefBrackets,\\\"$1\\\").replace(this.rules.inline.anyPunctuation,\\\"$1\\\"):\\\"\\\",n=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\\\"$1\\\"):t[3];return{type:\\\"def\\\",tag:a,raw:Qr(t[0],`\\n`),href:o,title:n}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let a=SE(t[1]),o=t[2].replace(this.rules.other.tableAlignChars,\\\"\\\").split(\\\"|\\\"),n=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\\\"\\\").split(`\\n`):[],r={type:\\\"table\\\",raw:Qr(t[0],`\\n`),header:[],align:[],rows:[]};if(a.length===o.length){for(let l of o)this.rules.other.tableAlignRight.test(l)?r.align.push(\\\"right\\\"):this.rules.other.tableAlignCenter.test(l)?r.align.push(\\\"center\\\"):this.rules.other.tableAlignLeft.test(l)?r.align.push(\\\"left\\\"):r.align.push(null);for(let l=0;l<a.length;l++)r.header.push({text:a[l],tokens:this.lexer.inline(a[l]),header:!0,align:r.align[l]});for(let l of n)r.rows.push(SE(l,r.header.length).map((s,i)=>({text:s,tokens:this.lexer.inline(s),header:!1,align:r.align[i]})));return r}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let a=t[1].trim();return{type:\\\"heading\\\",raw:Qr(t[0],`\\n`),depth:t[2].charAt(0)===\\\"=\\\"?1:2,text:a,tokens:this.lexer.inline(a)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let a=t[1].charAt(t[1].length-1)===`\\n`?t[1].slice(0,-1):t[1];return{type:\\\"paragraph\\\",raw:t[0],text:a,tokens:this.lexer.inline(a)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\\\"text\\\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\\\"escape\\\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\\\"html\\\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let a=t[0].charAt(0)===\\\"!\\\"?2:1;if(!this.options.pedantic&&LE(e,t[1],a,this.rules))return;let o=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(o)){if(!this.rules.other.endAngleBracket.test(o))return;let l=Qr(o.slice(0,-1),\\\"\\\\\\\\\\\");if((o.length-l.length)%2===0)return}else{let l=OH(t[2],\\\"()\\\");if(l===-2)return;if(l>-1){let s=(t[0].indexOf(\\\"!\\\")===0?5:4)+t[1].length+l;t[2]=t[2].substring(0,l),t[0]=t[0].substring(0,s).trim(),t[3]=\\\"\\\"}}let n=t[2],r=\\\"\\\";if(this.options.pedantic){let l=this.rules.other.pedanticHrefTitle.exec(n);l&&(n=l[1],r=l[3])}else r=t[3]?t[3].slice(1,-1):\\\"\\\";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(o)?n=n.slice(1):n=n.slice(1,-1)),vE(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,\\\"$1\\\"),title:r&&r.replace(this.rules.inline.anyPunctuation,\\\"$1\\\")},t[0],this.lexer,this.rules)}}reflink(e,t){let a;if((a=this.rules.inline.reflink.exec(e))||(a=this.rules.inline.nolink.exec(e))){let o=a[0].charAt(0)===\\\"!\\\"?2:1;if(!this.options.pedantic&&LE(e,a[1],o,this.rules))return;let n=(a[2]||a[1]).replace(this.rules.other.multipleSpaceGlobal,\\\" \\\"),r=t[Fp(n)];if(!r){let l=a[0].charAt(0);return{type:\\\"text\\\",raw:l,text:l}}return vE(a,r,a[0],this.lexer,this.rules)}}emStrong(e,t,a=\\\"\\\"){let o=this.rules.inline.emStrongLDelim.exec(e);if(!(!o||!o[1]&&!o[2]&&!o[3]&&!o[4]||o[4]&&a.match(this.rules.other.unicodeAlphaNumeric))&&(!(o[1]||o[3])||!a||this.rules.inline.punctuation.exec(a))){let n=[...o[0]].length-1,r,l,s=n,i=0,u=o[0][0],c=a===u,d=u===\\\"*\\\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+n);(o=d.exec(t))!==null;){if(r=o[1]||o[2]||o[3]||o[4]||o[5]||o[6],!r)continue;if(l=[...r].length,o[3]||o[4]){s+=l;continue}else if(o[5]||o[6]){if(n%3&&!((n+l)%3)){i+=l;continue}if(c)break}if(s-=l,s>0)continue;l=Math.min(l,l+s+i);let f=[...o[0]][0].length,p=e.slice(0,n+o.index+f+l);if(Math.min(n,l)%2){let b=p.slice(1,-1);return{type:\\\"em\\\",raw:p,text:b,tokens:this.lexer.inlineTokens(b)}}let h=p.slice(2,-2);return{type:\\\"strong\\\",raw:p,text:h,tokens:this.lexer.inlineTokens(h)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let a=t[2].replace(this.rules.other.newLineCharGlobal,\\\" \\\"),o=this.rules.other.nonSpaceChar.test(a),n=this.rules.other.startingSpaceChar.test(a)&&this.rules.other.endingSpaceChar.test(a);return o&&n&&(a=a.substring(1,a.length-1)),{type:\\\"codespan\\\",raw:t[0],text:a}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\\\"br\\\",raw:t[0]}}del(e,t,a=\\\"\\\"){let o=this.rules.inline.delLDelim.exec(e);if(o&&(!o[1]||!a||this.rules.inline.punctuation.exec(a))){let n=[...o[0]].length-1,r,l,s=n,i=this.rules.inline.delRDelim;for(i.lastIndex=0,t=t.slice(-1*e.length+n);(o=i.exec(t))!==null;){if(r=o[1]||o[2]||o[3]||o[4]||o[5]||o[6],!r||(l=[...r].length,l!==n))continue;if(o[3]||o[4]){s+=l;continue}if(s-=l,s>0)continue;l=Math.min(l,l+s);let u=[...o[0]][0].length,c=e.slice(0,n+o.index+u+l),d=c.slice(n,-n);return{type:\\\"del\\\",raw:c,text:d,tokens:this.lexer.inlineTokens(d)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let a,o;return t[2]===\\\"@\\\"?(a=t[1],o=\\\"mailto:\\\"+a):(a=t[1],o=a),{type:\\\"link\\\",raw:t[0],text:a,href:o,autolink:!0,tokens:[{type:\\\"text\\\",raw:a,text:a}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let a,o;if(t[2]===\\\"@\\\")a=t[0],o=\\\"mailto:\\\"+a;else{let n;do n=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\\\"\\\";while(n!==t[0]);a=t[0],t[1]===\\\"www.\\\"?o=\\\"http://\\\"+t[0]:o=t[0]}return{type:\\\"link\\\",raw:t[0],text:a,href:o,autolink:!0,tokens:[{type:\\\"text\\\",raw:a,text:a}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let a=this.lexer.state.inRawBlock;return{type:\\\"text\\\",raw:t[0],text:t[0],escaped:a}}}},Uo=class Vy{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||as,this.options.tokenizer=this.options.tokenizer||new Hp,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,top:!0};let a={other:da,block:Bp.normal,inline:_c.normal};this.options.pedantic?(a.block=Bp.pedantic,a.inline=_c.pedantic):this.options.gfm&&(a.block=Bp.gfm,this.options.breaks?a.inline=_c.breaks:a.inline=_c.gfm),this.tokenizer.rules=a}static get rules(){return{block:Bp,inline:_c}}static lex(t,a){return new Vy(a).lex(t)}static lexInline(t,a){return new Vy(a).inlineTokens(t)}lex(t){t=t.replace(da.carriageReturn,`\\n`),this.blockTokens(t,this.tokens);for(let a=0;a<this.inlineQueue.length;a++){let o=this.inlineQueue[a];this.inlineTokens(o.src,o.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,a=[],o=!1){this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace(da.tabCharGlobal,\\\"    \\\").replace(da.spaceLine,\\\"\\\"));let n=1/0;for(;t;){if(t.length<n)n=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},t,a))?(t=t.substring(r.raw.length),a.push(r),!0):!1))continue;if(r=this.tokenizer.space(t)){t=t.substring(r.raw.length);let s=a.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\\n`:a.push(r);continue}if(r=this.tokenizer.code(t)){t=t.substring(r.raw.length);let s=a.at(-1);s?.type===\\\"paragraph\\\"||s?.type===\\\"text\\\"?(s.raw+=(s.raw.endsWith(`\\n`)?\\\"\\\":`\\n`)+r.raw,s.text+=`\\n`+r.text,this.inlineQueue.at(-1).src=s.text):a.push(r);continue}if(r=this.tokenizer.fences(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.heading(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.hr(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.blockquote(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.list(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.html(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.def(t)){t=t.substring(r.raw.length);let s=a.at(-1);s?.type===\\\"paragraph\\\"||s?.type===\\\"text\\\"?(s.raw+=(s.raw.endsWith(`\\n`)?\\\"\\\":`\\n`)+r.raw,s.text+=`\\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},a.push(r));continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),a.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),a.push(r);continue}let l=t;if(this.options.extensions?.startBlock){let s=1/0,i=t.slice(1),u;this.options.extensions.startBlock.forEach(c=>{u=c.call({lexer:this},i),typeof u==\\\"number\\\"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(l=t.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(l))){let s=a.at(-1);o&&s?.type===\\\"paragraph\\\"?(s.raw+=(s.raw.endsWith(`\\n`)?\\\"\\\":`\\n`)+r.raw,s.text+=`\\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):a.push(r),o=l.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length);let s=a.at(-1);s?.type===\\\"text\\\"?(s.raw+=(s.raw.endsWith(`\\n`)?\\\"\\\":`\\n`)+r.raw,s.text+=`\\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):a.push(r);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,a}inline(t,a=[]){return this.inlineQueue.push({src:t,tokens:a}),a}linkInText(t){if(!t.includes(\\\"[\\\"))return!1;let a=this.tokenizer.rules.inline.link;for(let o of t.matchAll(this.tokenizer.rules.inline.blockSkip))if(a.test(o[0])&&t.charAt(o.index-1)!==\\\"!\\\")return!0;for(let o of t.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let n=o[0],r=n.lastIndexOf(\\\"[\\\");if(!(n.charAt(0)===\\\"!\\\"||!Object.hasOwn(this.tokens.links,Fp(n.slice(r+1,-1))))&&!(r>1&&this.linkInText(n.slice(1,r-1))))return!0}return!1}inlineTokens(t,a=[]){this.tokenizer.lexer=this;let o=t;if(this.tokens.links&&t.includes(\\\"[\\\")){let s=this.tokenizer.rules.inline.reflinkSearch,i=u=>{let c=u.lastIndexOf(\\\"[\\\");if(!Object.hasOwn(this.tokens.links,Fp(u.slice(c+1,-1))))return u;if(c>1&&u.charAt(0)!==\\\"!\\\"){let d=u.slice(1,c-1);if(this.linkInText(d))return\\\"[\\\"+d.replace(s,i)+\\\"][\\\"+\\\"a\\\".repeat(u.length-c-2)+\\\"]\\\"}return\\\"[\\\"+\\\"a\\\".repeat(u.length-2)+\\\"]\\\"};o=o.replace(s,i)}o=o.replace(this.tokenizer.rules.inline.anyPunctuation,s=>\\\"+\\\".repeat(s.length)),o=o.replace(this.tokenizer.rules.inline.blockSkip,(s,i,u)=>{let c=u?u.length:0;return s.slice(0,c)+\\\"[\\\"+\\\"a\\\".repeat(s.length-c-2)+\\\"]\\\"}),o=this.options.hooks?.emStrongMask?.call({lexer:this},o)??o;let n=!1,r=\\\"\\\",l=1/0;for(;t;){if(t.length<l)l=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}n||(r=\\\"\\\"),n=!1;let s;if(this.options.extensions?.inline?.some(u=>(s=u.call({lexer:this},t,a))?(t=t.substring(s.raw.length),a.push(s),!0):!1))continue;if(s=this.tokenizer.escape(t)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.tag(t)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.link(t)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(s.raw.length);let u=a.at(-1);s.type===\\\"text\\\"&&u?.type===\\\"text\\\"?(u.raw+=s.raw,u.text+=s.text):a.push(s);continue}if(s=this.tokenizer.emStrong(t,o,r)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.codespan(t)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.br(t)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.del(t,o,r)){t=t.substring(s.raw.length),a.push(s);continue}if(s=this.tokenizer.autolink(t)){t=t.substring(s.raw.length),a.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(t))){t=t.substring(s.raw.length),a.push(s);continue}let i=t;if(this.options.extensions?.startInline){let u=1/0,c=t.slice(1),d;this.options.extensions.startInline.forEach(f=>{d=f.call({lexer:this},c),typeof d==\\\"number\\\"&&d>=0&&(u=Math.min(u,d))}),u<1/0&&u>=0&&(i=t.substring(0,u+1))}if(s=this.tokenizer.inlineText(i)){t=t.substring(s.raw.length),s.raw.slice(-1)!==\\\"_\\\"&&(r=s.raw.slice(-1)),n=!0;let u=a.at(-1);u?.type===\\\"text\\\"?(u.raw+=s.raw,u.text+=s.text):a.push(s);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return a}infiniteLoopError(t){let a=\\\"Infinite loop on byte: \\\"+t;if(this.options.silent)console.error(a);else throw new Error(a)}},zp=class{options;parser;constructor(e){this.options=e||as}space(e){return\\\"\\\"}code({text:e,lang:t,escaped:a}){let o=(t||\\\"\\\").match(da.notSpaceStart)?.[0],n=e?e.replace(da.endingNewline,\\\"\\\")+`\\n`:\\\"\\\";return o?'<pre><code class=\\\"language-'+lo(o)+'\\\">'+(a?n:lo(n,!0))+`</code></pre>\\n`:\\\"<pre><code>\\\"+(a?n:lo(n,!0))+`</code></pre>\\n`}blockquote({tokens:e}){return`<blockquote>\\n${this.parser.parse(e)}</blockquote>\\n`}html({text:e}){return e}def(e){return\\\"\\\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\\n`}hr(e){return`<hr>\\n`}list(e){let t=e.ordered,a=e.start,o=\\\"\\\";for(let l=0;l<e.items.length;l++){let s=e.items[l];o+=this.listitem(s)}let n=t?\\\"ol\\\":\\\"ul\\\",r=t&&a!==1?' start=\\\"'+a+'\\\"':\\\"\\\";return\\\"<\\\"+n+r+`>\\n`+o+\\\"</\\\"+n+`>\\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\\n`}checkbox({checked:e}){return\\\"<input \\\"+(e?'checked=\\\"\\\" ':\\\"\\\")+'disabled=\\\"\\\" type=\\\"checkbox\\\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\\n`}table(e){let t=\\\"\\\",a=\\\"\\\";for(let n=0;n<e.header.length;n++)a+=this.tablecell(e.header[n]);t+=this.tablerow({text:a});let o=\\\"\\\";for(let n=0;n<e.rows.length;n++){let r=e.rows[n];a=\\\"\\\";for(let l=0;l<r.length;l++)a+=this.tablecell(r[l]);o+=this.tablerow({text:a})}return o&&(o=`<tbody>${o}</tbody>`),`<table>\\n<thead>\\n`+t+`</thead>\\n`+o+`</table>\\n`}tablerow({text:e}){return`<tr>\\n${e}</tr>\\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),a=e.header?\\\"th\\\":\\\"td\\\";return(e.align?`<${a} align=\\\"${e.align}\\\">`:`<${a}>`)+t+`</${a}>\\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${lo(e,!0)}</code>`}br(e){return\\\"<br>\\\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:a,tokens:o,autolink:n}){let r=n?lo(a,!0):this.parser.parseInline(o),l=yE(e);if(l===null)return r;e=lo(l,n);let s='<a href=\\\"'+e+'\\\"';return t&&(s+=' title=\\\"'+lo(t)+'\\\"'),s+=\\\">\\\"+r+\\\"</a>\\\",s}image({href:e,title:t,text:a,tokens:o}){o&&(a=this.parser.parseInline(o,this.parser.textRenderer));let n=yE(e);if(n===null)return lo(a);e=n;let r=`<img src=\\\"${lo(e)}\\\" alt=\\\"${lo(a)}\\\"`;return t&&(r+=` title=\\\"${lo(t)}\\\"`),r+=\\\">\\\",r}text(e){return\\\"tokens\\\"in e&&e.tokens?this.parser.parseInline(e.tokens):\\\"escaped\\\"in e&&e.escaped?e.text:lo(e.text)}},Wy=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\\\"\\\"+e}image({text:e}){return\\\"\\\"+e}br(){return\\\"\\\"}checkbox({raw:e}){return e}},qo=class Gy{options;renderer;textRenderer;constructor(t){this.options=t||as,this.options.renderer=this.options.renderer||new zp,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Wy}static parse(t,a){return new Gy(a).parse(t)}static parseInline(t,a){return new Gy(a).parseInline(t)}parse(t){this.renderer.parser=this;let a=\\\"\\\";for(let o=0;o<t.length;o++){let n=t[o];if(this.options.extensions?.renderers?.[n.type]){let l=n,s=this.options.extensions.renderers[l.type].call({parser:this},l);if(s!==!1||![\\\"space\\\",\\\"hr\\\",\\\"heading\\\",\\\"code\\\",\\\"table\\\",\\\"blockquote\\\",\\\"list\\\",\\\"checkbox\\\",\\\"html\\\",\\\"def\\\",\\\"paragraph\\\",\\\"text\\\"].includes(l.type)){a+=s||\\\"\\\";continue}}let r=n;switch(r.type){case\\\"space\\\":{a+=this.renderer.space(r);break}case\\\"hr\\\":{a+=this.renderer.hr(r);break}case\\\"heading\\\":{a+=this.renderer.heading(r);break}case\\\"code\\\":{a+=this.renderer.code(r);break}case\\\"table\\\":{a+=this.renderer.table(r);break}case\\\"blockquote\\\":{a+=this.renderer.blockquote(r);break}case\\\"list\\\":{a+=this.renderer.list(r);break}case\\\"checkbox\\\":{a+=this.renderer.checkbox(r);break}case\\\"html\\\":{a+=this.renderer.html(r);break}case\\\"def\\\":{a+=this.renderer.def(r);break}case\\\"paragraph\\\":{a+=this.renderer.paragraph(r);break}case\\\"text\\\":{a+=this.renderer.text(r);break}default:{let l='Token with \\\"'+r.type+'\\\" type was not found.';if(this.options.silent)return console.error(l),\\\"\\\";throw new Error(l)}}}return a}parseInline(t,a=this.renderer){this.renderer.parser=this;let o=\\\"\\\";for(let n=0;n<t.length;n++){let r=t[n];if(this.options.extensions?.renderers?.[r.type]){let s=this.options.extensions.renderers[r.type].call({parser:this},r);if(s!==!1||![\\\"escape\\\",\\\"html\\\",\\\"link\\\",\\\"image\\\",\\\"checkbox\\\",\\\"strong\\\",\\\"em\\\",\\\"codespan\\\",\\\"br\\\",\\\"del\\\",\\\"text\\\"].includes(r.type)){o+=s||\\\"\\\";continue}}let l=r;switch(l.type){case\\\"escape\\\":{o+=a.text(l);break}case\\\"html\\\":{o+=a.html(l);break}case\\\"link\\\":{o+=a.link(l);break}case\\\"image\\\":{o+=a.image(l);break}case\\\"checkbox\\\":{o+=a.checkbox(l);break}case\\\"strong\\\":{o+=a.strong(l);break}case\\\"em\\\":{o+=a.em(l);break}case\\\"codespan\\\":{o+=a.codespan(l);break}case\\\"br\\\":{o+=a.br(l);break}case\\\"del\\\":{o+=a.del(l);break}case\\\"text\\\":{o+=a.text(l);break}default:{let s='Token with \\\"'+l.type+'\\\" type was not found.';if(this.options.silent)return console.error(s),\\\"\\\";throw new Error(s)}}}return o}},Fc=class{options;block;constructor(e){this.options=e||as}static passThroughHooks=new Set([\\\"preprocess\\\",\\\"postprocess\\\",\\\"processAllTokens\\\",\\\"emStrongMask\\\"]);static passThroughHooksRespectAsync=new Set([\\\"preprocess\\\",\\\"postprocess\\\",\\\"processAllTokens\\\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?Uo.lex:Uo.lexInline}provideParser(e=this.block){return e?qo.parse:qo.parseInline}},NH=class{defaults=Xy();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=qo;Renderer=zp;TextRenderer=Wy;Lexer=Uo;Tokenizer=Hp;Hooks=Fc;constructor(...e){this.use(...e)}walkTokens(e,t){let a=[];for(let o of e)switch(a=a.concat(t.call(this,o)),o.type){case\\\"table\\\":{let n=o;for(let r of n.header)a=a.concat(this.walkTokens(r.tokens,t));for(let r of n.rows)for(let l of r)a=a.concat(this.walkTokens(l.tokens,t));break}case\\\"list\\\":{let n=o;a=a.concat(this.walkTokens(n.items,t));break}default:{let n=o;this.defaults.extensions?.childTokens?.[n.type]?this.defaults.extensions.childTokens[n.type].forEach(r=>{let l=n[r].flat(1/0);a=a.concat(this.walkTokens(l,t))}):n.tokens&&(a=a.concat(this.walkTokens(n.tokens,t)))}}return a}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(a=>{let o={...a};if(o.async=this.defaults.async||o.async||!1,a.extensions&&(a.extensions.forEach(n=>{if(!n.name)throw new Error(\\\"extension name required\\\");if(\\\"renderer\\\"in n){let r=t.renderers[n.name];r?t.renderers[n.name]=function(...l){let s=n.renderer.apply(this,l);return s===!1&&(s=r.apply(this,l)),s}:t.renderers[n.name]=n.renderer}if(\\\"tokenizer\\\"in n){if(!n.level||n.level!==\\\"block\\\"&&n.level!==\\\"inline\\\")throw new Error(\\\"extension level must be 'block' or 'inline'\\\");let r=t[n.level];r?r.unshift(n.tokenizer):t[n.level]=[n.tokenizer],n.start&&(n.level===\\\"block\\\"?t.startBlock?t.startBlock.push(n.start):t.startBlock=[n.start]:n.level===\\\"inline\\\"&&(t.startInline?t.startInline.push(n.start):t.startInline=[n.start]))}\\\"childTokens\\\"in n&&n.childTokens&&(t.childTokens[n.name]=n.childTokens)}),o.extensions=t),a.renderer){let n=this.defaults.renderer||new zp(this.defaults);for(let r in a.renderer){if(!(r in n))throw new Error(`renderer '${r}' does not exist`);if([\\\"options\\\",\\\"parser\\\"].includes(r))continue;let l=r,s=a.renderer[l],i=n[l];n[l]=(...u)=>{let c=s.apply(n,u);return c===!1&&(c=i.apply(n,u)),c||\\\"\\\"}}o.renderer=n}if(a.tokenizer){let n=this.defaults.tokenizer||new Hp(this.defaults);for(let r in a.tokenizer){if(!(r in n))throw new Error(`tokenizer '${r}' does not exist`);if([\\\"options\\\",\\\"rules\\\",\\\"lexer\\\"].includes(r))continue;let l=r,s=a.tokenizer[l],i=n[l];n[l]=(...u)=>{let c=s.apply(n,u);return c===!1&&(c=i.apply(n,u)),c}}o.tokenizer=n}if(a.hooks){let n=this.defaults.hooks||new Fc;for(let r in a.hooks){if(!(r in n))throw new Error(`hook '${r}' does not exist`);if([\\\"options\\\",\\\"block\\\"].includes(r))continue;let l=r,s=a.hooks[l],i=n[l];Fc.passThroughHooks.has(r)?n[l]=u=>{if(this.defaults.async&&Fc.passThroughHooksRespectAsync.has(r))return(async()=>{let d=await s.call(n,u);return i.call(n,d)})();let c=s.call(n,u);return i.call(n,c)}:n[l]=(...u)=>{if(this.defaults.async)return(async()=>{let d=await s.apply(n,u);return d===!1&&(d=await i.apply(n,u)),d})();let c=s.apply(n,u);return c===!1&&(c=i.apply(n,u)),c}}o.hooks=n}if(a.walkTokens){let n=this.defaults.walkTokens,r=a.walkTokens;o.walkTokens=function(l){let s=[];return s.push(r.call(this,l)),n&&(s=s.concat(n.call(this,l))),s}}this.defaults={...this.defaults,...o}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Uo.lex(e,t??this.defaults)}parser(e,t){return qo.parse(e,t??this.defaults)}parseMarkdown(e){return(t,a)=>{let o={...a},n={...this.defaults,...o},r=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&o.async===!1)return r(new Error(\\\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\\\"));if(typeof t>\\\"u\\\"||t===null)return r(new Error(\\\"marked(): input parameter is undefined or null\\\"));if(typeof t!=\\\"string\\\")return r(new Error(\\\"marked(): input parameter is of type \\\"+Object.prototype.toString.call(t)+\\\", string expected\\\"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=e),n.async)return(async()=>{let l=n.hooks?await n.hooks.preprocess(t):t,s=await(n.hooks?await n.hooks.provideLexer(e):e?Uo.lex:Uo.lexInline)(l,n),i=n.hooks?await n.hooks.processAllTokens(s):s;n.walkTokens&&await Promise.all(this.walkTokens(i,n.walkTokens));let u=await(n.hooks?await n.hooks.provideParser(e):e?qo.parse:qo.parseInline)(i,n);return n.hooks?await n.hooks.postprocess(u):u})().catch(r);try{n.hooks&&(t=n.hooks.preprocess(t));let l=(n.hooks?n.hooks.provideLexer(e):e?Uo.lex:Uo.lexInline)(t,n);n.hooks&&(l=n.hooks.processAllTokens(l)),n.walkTokens&&this.walkTokens(l,n.walkTokens);let s=(n.hooks?n.hooks.provideParser(e):e?qo.parse:qo.parseInline)(l,n);return n.hooks&&(s=n.hooks.postprocess(s)),s}catch(l){return r(l)}}}onError(e,t){return a=>{if(a.message+=`\\nPlease report this to https://github.com/markedjs/marked.`,e){let o=\\\"<p>An error occurred:</p><pre>\\\"+lo(a.message+\\\"\\\",!0)+\\\"</pre>\\\";return t?Promise.resolve(o):o}if(t)return Promise.reject(a);throw a}}},ts=new NH;function at(e,t){return ts.parse(e,t)}at.options=at.setOptions=function(e){return ts.setOptions(e),at.defaults=ts.defaults,RE(at.defaults),at};at.getDefaults=Xy;at.defaults=as;function BH(...e){return ts.use(...e),at.defaults=ts.defaults,RE(at.defaults),at}at.use=BH;at.walkTokens=function(e,t){return ts.walkTokens(e,t)};at.parseInline=ts.parseInline;at.Parser=qo;at.parser=qo.parse;at.Renderer=zp;at.TextRenderer=Wy;at.Lexer=Uo;at.lexer=Uo.lex;at.Tokenizer=Hp;at.Hooks=Fc;at.parse=at;var P5=at.options,N5=at.setOptions,B5=at.walkTokens,_5=at.parseInline;var F5=qo.parse,H5=Uo.lex;function Vo(e){if(!e)return;let t=e.trim(),a=/^([a-z][a-z0-9+.-]*):/i.exec(t);if(!(a&&!/^https?$/i.test(a[1]??\\\"\\\")))return t}function os(e){if(!e)return;let t=e.trim();return/^data:image\\\\//i.test(t)?t:Vo(t)}function ns(e){return/^(?:[/\\\\\\\\]|[A-Za-z]:[/\\\\\\\\])/.test(e)}function _i(e){return at.parse(e,{async:!1}).replace(/<script\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/script>/gi,\\\"\\\").replace(/<style\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/style>/gi,\\\"\\\").replace(/<\\\\/?(?:iframe|object|embed|form|base)\\\\b[^>]*>/gi,\\\"\\\").replace(/\\\\son[a-z]+\\\\s*=\\\\s*\\\"[^\\\"]*\\\"/gi,\\\"\\\").replace(/\\\\son[a-z]+\\\\s*=\\\\s*'[^']*'/gi,\\\"\\\").replace(/\\\\son[a-z]+\\\\s*=\\\\s*[^\\\\s>]+/gi,\\\"\\\").replace(/(href|src)\\\\s*=\\\\s*\\\"([^\\\"]*)\\\"/gi,(a,o,n)=>`${o}=\\\"${DE(n)}\\\"`).replace(/(href|src)\\\\s*=\\\\s*'([^']*)'/gi,(a,o,n)=>`${o}='${DE(n)}'`)}function Up(e){let t=e.replace(/\\\\t/g,\\\"  \\\").split(`\\n`),a=t.filter(n=>n.trim().length>0).map(n=>n.length-n.trimStart().length),o=a.length>0?Math.min(...a):0;return t.map(n=>n.slice(o)).join(`\\n`).trim()}function DE(e){return Vo(e)??\\\"#\\\"}var Wr=v(O(),1);function PE({entry:e}){let t=Pi();if(t.section)return(0,Wr.jsx)(Wr.Fragment,{children:t.section(e)});let a=_i(Up(e.markdown));return(0,Wr.jsxs)(\\\"section\\\",{className:\\\"my-3 text-sm\\\",\\\"aria-label\\\":e.title,children:[e.title?(0,Wr.jsx)(\\\"h4\\\",{className:\\\"mb-1 font-semibold text-foreground\\\",children:e.title}):null,(0,Wr.jsx)(\\\"div\\\",{className:\\\"es-doc-prose prose prose-sm max-w-none\\\",dangerouslySetInnerHTML:{__html:a}})]})}var Wn=v(O(),1);function Jy({entry:e,ref:t}){return(0,Wn.jsxs)(\\\"figure\\\",{ref:t,className:\\\"my-3\\\",\\\"aria-label\\\":e.title??\\\"Diagram\\\",children:[e.title?(0,Wn.jsx)(\\\"figcaption\\\",{className:\\\"mb-1.5 text-xs font-medium text-muted-foreground\\\",children:e.title}):null,(0,Wn.jsx)(\\\"pre\\\",{\\\"data-mermaid\\\":!0,tabIndex:0,className:\\\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs text-foreground\\\",children:e.code})]})}function qp({entry:e}){let t=Pi();return t.mermaid?(0,Wn.jsx)(Wn.Fragment,{children:t.mermaid(e)}):(0,Wn.jsx)(Jy,{entry:e})}var Jn=v(O(),1);function NE({entry:e}){let t=ns(e.path)?void 0:os(e.path);return t?(0,Jn.jsxs)(\\\"figure\\\",{className:\\\"my-3\\\",children:[(0,Jn.jsx)(\\\"img\\\",{src:t,alt:e.alt??\\\"\\\",loading:\\\"lazy\\\",className:\\\"max-w-full rounded-md border border-border\\\"}),e.alt?(0,Jn.jsx)(\\\"figcaption\\\",{className:\\\"mt-1.5 text-xs text-muted-foreground\\\",children:e.alt}):null]}):(0,Jn.jsxs)(\\\"figure\\\",{className:\\\"my-3 rounded-md border border-dashed border-border p-3 text-sm text-muted-foreground\\\",children:[(0,Jn.jsx)(\\\"div\\\",{className:\\\"font-medium\\\",children:\\\"Screenshot unavailable\\\"}),(0,Jn.jsx)(\\\"div\\\",{className:\\\"mt-1 break-all font-mono text-xs\\\",children:e.path}),e.alt?(0,Jn.jsx)(\\\"figcaption\\\",{className:\\\"mt-1.5 text-xs\\\",children:e.alt}):null]})}var er=v(O(),1);function BE({entry:e}){if(ns(e.path))return(0,er.jsxs)(\\\"figure\\\",{className:\\\"my-3 rounded-md border border-dashed border-border p-3 text-sm text-muted-foreground\\\",children:[(0,er.jsx)(\\\"div\\\",{className:\\\"font-medium\\\",children:\\\"Video unavailable\\\"}),(0,er.jsx)(\\\"div\\\",{className:\\\"mt-1 break-all font-mono text-xs\\\",children:e.path}),e.caption?(0,er.jsx)(\\\"figcaption\\\",{className:\\\"mt-1.5 text-xs\\\",children:e.caption}):null]});let t=Vo(e.path),a=Vo(e.poster);return(0,er.jsxs)(\\\"figure\\\",{className:\\\"my-3\\\",children:[(0,er.jsx)(\\\"video\\\",{controls:!0,preload:\\\"metadata\\\",...t?{src:t}:{},...a?{poster:a}:{},className:\\\"max-w-full rounded-md border border-border\\\"}),e.caption?(0,er.jsx)(\\\"figcaption\\\",{className:\\\"mt-1 text-xs text-muted-foreground\\\",children:e.caption}):null]})}var Fi=v(A(),1);var rs=v(O(),1),_H=\\\"<script>(function(){if(parent===window)return;var last=0,queued=false;var measure=function(){var kids=document.body.children,h=0;for(var i=0;i<kids.length;i++)h=Math.max(h,kids[i].getBoundingClientRect().bottom);return Math.ceil(h||document.body.getBoundingClientRect().bottom)};var post=function(){queued=false;var h=measure();if(h===last)return;last=h;parent.postMessage({__esHtmlHeight:h},'*')};var schedule=function(){if(queued)return;queued=true;requestAnimationFrame(post)};var start=function(){new ResizeObserver(schedule).observe(document.body);new MutationObserver(schedule).observe(document.body,{subtree:true,childList:true,attributes:true,characterData:true});addEventListener('load',schedule);post()};if(document.body)start();else addEventListener('DOMContentLoaded',start)})();<\\\\/script>\\\",FH=5e3;function Vp({entry:e}){let t=typeof e.height==\\\"number\\\"?`${e.height}px`:e.height??\\\"400px\\\",a=e.title??\\\"Embedded HTML\\\",o=Vo(e.url??e.path),n=(0,Fi.useRef)(null),[r,l]=(0,Fi.useState)();(0,Fi.useEffect)(()=>{if(e.content===void 0)return;let u=c=>{if(c.source!==n.current?.contentWindow)return;let d=c.data?.__esHtmlHeight;typeof d!=\\\"number\\\"||!Number.isFinite(d)||d<=0||l(Math.min(d,FH))};return window.addEventListener(\\\"message\\\",u),()=>window.removeEventListener(\\\"message\\\",u)},[e.content]);let s=r===void 0?t:`${r}px`,i=e.content!==void 0?{srcDoc:e.content+_H}:{src:o??\\\"\\\"};return(0,rs.jsxs)(\\\"figure\\\",{className:\\\"my-3 overflow-hidden rounded-md border border-border\\\",children:[(0,rs.jsxs)(\\\"figcaption\\\",{className:\\\"flex items-center justify-between border-b border-border bg-muted/40 px-3 py-1.5 text-xs font-medium text-muted-foreground\\\",children:[(0,rs.jsx)(\\\"span\\\",{children:e.title??\\\"HTML\\\"}),o?(0,rs.jsx)(\\\"a\\\",{href:o,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",\\\"aria-label\\\":\\\"Open in new tab\\\",title:\\\"Open in new tab\\\",className:\\\"text-primary\\\",children:\\\"\\\\u2197\\\"}):null]}),(0,rs.jsx)(\\\"iframe\\\",{ref:n,...i,sandbox:\\\"allow-scripts\\\",loading:\\\"lazy\\\",title:a,className:\\\"block w-full border-0\\\",style:{height:s,colorScheme:\\\"light\\\",background:\\\"#fff\\\"}})]})}var eS=v(O(),1);function _E({entry:e}){let t;try{t=JSON.stringify(e.value,null,2)??String(e.value)}catch{t=String(e.value)}return(0,eS.jsx)(Bc,{label:e.label??\\\"State\\\",children:(0,eS.jsx)(\\\"code\\\",{className:\\\"font-mono text-xs language-json\\\",children:t})})}var Jr=v(O(),1);function FE({entry:e}){let a=cE()[e.type];return a?(0,Jr.jsx)(Jr.Fragment,{children:a(e)}):(0,Jr.jsxs)(\\\"div\\\",{className:\\\"my-2\\\",\\\"data-type\\\":e.type,children:[(0,Jr.jsx)(\\\"p\\\",{className:\\\"mb-1 text-xs font-medium text-muted-foreground\\\",children:e.type}),(0,Jr.jsx)(\\\"pre\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs text-foreground\\\",children:HH(e.data)})]})}function HH(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}var za=v(O(),1);function HE({entry:e}){switch(e.kind){case\\\"note\\\":return(0,za.jsx)(jT,{entry:e});case\\\"tag\\\":return(0,za.jsx)(uE,{entry:e});case\\\"kv\\\":return(0,za.jsx)(Np,{entries:[e]});case\\\"code\\\":return(0,za.jsx)(fE,{entry:e});case\\\"table\\\":return(0,za.jsx)(dE,{entry:e});case\\\"link\\\":return(0,za.jsx)(pE,{entry:e});case\\\"section\\\":return(0,za.jsx)(PE,{entry:e});case\\\"mermaid\\\":return(0,za.jsx)(qp,{entry:e});case\\\"screenshot\\\":return(0,za.jsx)(NE,{entry:e});case\\\"video\\\":return(0,za.jsx)(BE,{entry:e});case\\\"html\\\":return(0,za.jsx)(Vp,{entry:e});case\\\"state\\\":return(0,za.jsx)(_E,{entry:e});case\\\"custom\\\":return(0,za.jsx)(FE,{entry:e})}}var Hi=v(O(),1);function Gp({entries:e}){if(e.length===0)return null;let t=[];for(let a of e){let o=t[t.length-1];a.kind===\\\"kv\\\"&&Array.isArray(o)?o.push(a):t.push(a.kind===\\\"kv\\\"?[a]:a)}return(0,Hi.jsx)(Hi.Fragment,{children:t.map((a,o)=>Array.isArray(a)?(0,Hi.jsx)(Np,{entries:a},o):(0,Hi.jsx)(HE,{entry:a},o))})}var Ct=v(O(),1),zH={passed:\\\"\\\\u2713\\\",failed:\\\"\\\\u2717\\\",skipped:\\\"\\\\u25CB\\\",pending:\\\"\\\\u25CB\\\"},UH={passed:\\\"text-pass\\\",failed:\\\"text-fail\\\",skipped:\\\"text-skip\\\",pending:\\\"text-pend\\\"};function zE({scenario:e}){if(e.steps.length===0)return null;let t=new Set(Ap(e.steps)===\\\"unasserted\\\"?Ny(e.steps).map(a=>a.id):[]);return(0,Ct.jsx)(\\\"ol\\\",{\\\"data-slot\\\":\\\"steps\\\",className:\\\"flex flex-col\\\",children:e.steps.map(a=>(0,Ct.jsx)(qH,{step:a,unasserted:t.has(a.id)},a.id))})}function qH({step:e,unasserted:t=!1}){let a=e.keyword.toLowerCase(),o=a===\\\"and\\\"||a===\\\"but\\\";return(0,Ct.jsxs)(\\\"li\\\",{id:e.id,\\\"data-status\\\":e.status,className:J(\\\"py-1.5 text-[0.8125rem] leading-normal\\\",o&&\\\"pl-5\\\"),children:[(0,Ct.jsxs)(\\\"div\\\",{className:\\\"flex items-baseline gap-2\\\",children:[(0,Ct.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"w-4 shrink-0 text-center text-xs\\\",UH[e.status]),children:zH[e.status]??\\\"\\\\u25CB\\\"}),(0,Ct.jsx)(\\\"span\\\",{className:J(\\\"min-w-[52px] shrink-0 font-mono text-xs font-semibold capitalize\\\",o?\\\"font-medium text-muted-foreground\\\":\\\"text-keyword\\\"),children:e.keyword}),(0,Ct.jsx)(\\\"span\\\",{className:\\\"flex-1 text-foreground\\\",children:GT(e.text)}),t?(0,Ct.jsx)(\\\"span\\\",{className:\\\"shrink-0 rounded-full border border-pend-border bg-pend-bg px-2 py-0.5 text-[0.6875rem] font-medium text-pend\\\",children:\\\"No assertion\\\"}):null,e.durationMs>0?(0,Ct.jsx)(\\\"span\\\",{className:\\\"shrink-0 whitespace-nowrap font-mono text-[0.6875rem] text-muted-foreground\\\",children:gn(e.durationMs)}):null]}),e.errorMessage?(0,Ct.jsx)(\\\"pre\\\",{role:\\\"alert\\\",className:\\\"mt-2.5 ml-6 overflow-x-auto rounded-md border border-fail-border bg-fail-bg px-4 py-3.5 font-mono text-xs leading-relaxed whitespace-pre-wrap text-fail\\\",children:e.errorMessage}):null,e.expected!==void 0||e.actual!==void 0?(0,Ct.jsxs)(\\\"dl\\\",{\\\"data-slot\\\":\\\"step-comparison\\\",className:\\\"mt-1.5 ml-6 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 font-mono text-xs\\\",children:[e.expected!==void 0?(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsx)(\\\"dt\\\",{className:\\\"text-muted-foreground\\\",children:\\\"Expected\\\"}),(0,Ct.jsx)(\\\"dd\\\",{className:\\\"overflow-x-auto whitespace-pre-wrap text-pass\\\",children:e.expected})]}):null,e.actual!==void 0?(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsx)(\\\"dt\\\",{className:\\\"text-muted-foreground\\\",children:\\\"Actual\\\"}),(0,Ct.jsx)(\\\"dd\\\",{className:\\\"overflow-x-auto whitespace-pre-wrap text-fail\\\",children:e.actual})]}):null]}):null,e.docEntries.length>0?(0,Ct.jsx)(\\\"div\\\",{\\\"data-es-docs\\\":!0,className:\\\"mt-2 ml-6\\\",children:(0,Ct.jsx)(Gp,{entries:e.docEntries})}):null]})}var Xp=e=>typeof e==\\\"object\\\"&&e!==null&&!Array.isArray(e);function aS(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((a,o)=>aS(a,t[o]));if(Xp(e)&&Xp(t)){let a=Object.keys(e),o=Object.keys(t);return a.length===o.length&&a.every(n=>n in t&&aS(e[n],t[n]))}return!1}var UE=(e,t)=>e===\\\"\\\"?t:`${e}.${t}`;function oS(e,t,a,o){if(!Object.is(t,a)){if(Array.isArray(t)&&Array.isArray(a)){let n=Math.min(t.length,a.length);for(let r=0;r<n;r++)oS(`${e}[${r}]`,t[r],a[r],o);for(let r=n;r<a.length;r++)o.push({path:`${e}[${r}]`,kind:\\\"added\\\",after:a[r]});for(let r=n;r<t.length;r++)o.push({path:`${e}[${r}]`,kind:\\\"removed\\\",before:t[r]});return}if(Xp(t)&&Xp(a)){for(let n of Object.keys(a)){let r=UE(e,n);n in t?oS(r,t[n],a[n],o):o.push({path:r,kind:\\\"added\\\",after:a[n]})}for(let n of Object.keys(t))n in a||o.push({path:UE(e,n),kind:\\\"removed\\\",before:t[n]});return}aS(t,a)||o.push({path:e,kind:\\\"changed\\\",before:t,after:a})}}function jp(e,t){let a=[];return oS(\\\"\\\",e,t,a),a}function tS(e,t=60){let a=e===void 0?\\\"undefined\\\":JSON.stringify(e);return a.length>t?`${a.slice(0,t-1)}\\\\u2026`:a}function Yp(e){return e.map(t=>{let a=t.path===\\\"\\\"?\\\"(root)\\\":t.path;switch(t.kind){case\\\"added\\\":return`+ ${a}: ${tS(t.after)}`;case\\\"removed\\\":return`\\\\u2212 ${a}`;case\\\"changed\\\":return`${a}: ${tS(t.before)} \\\\u2192 ${tS(t.after)}`}})}function qE(e){for(let t of e){if(t.kind===\\\"screenshot\\\")return t;if(t.children){let a=qE(t.children);if(a)return a}}}function VE(e,t=[]){for(let a of e)a.kind===\\\"state\\\"&&t.push(a),a.children&&VE(a.children,t);return t}var VH=e=>e??\\\"\\\";function GE(e){let t=[],a=[],o=new Map;for(let n of e.steps){let r=qE(n.docEntries),l=VE(n.docEntries);if(!r&&l.length===0)continue;let s=new Map;for(let u of l){let c=VH(u.label);!s.has(c)&&!a.includes(c)&&a.push(c),s.set(c,u)}let i=[];for(let u of a){let c=s.get(u);if(!c)continue;let d={...c.label!==void 0&&{label:c.label},value:c.value};o.has(u)&&(d.changes=jp(o.get(u),c.value)),o.set(u,c.value),i.push(d)}t.push({stepId:n.id,stepIndex:n.index,keyword:n.keyword,text:n.text,status:n.status,...r&&{screenshot:{path:r.path,...r.alt!==void 0&&{alt:r.alt}}},states:i})}return t}var ot=v(O(),1),GH={passed:\\\"\\\\u2713\\\",failed:\\\"\\\\u2717\\\",skipped:\\\"\\\\u25CB\\\",pending:\\\"\\\\u25CB\\\"},XH={passed:\\\"text-pass\\\",failed:\\\"text-fail\\\",skipped:\\\"text-skip\\\",pending:\\\"text-pend\\\"};function XE({scenario:e}){let t=GE(e);return t.length<2?null:(0,ot.jsxs)(\\\"section\\\",{\\\"data-slot\\\":\\\"storyboard\\\",\\\"aria-label\\\":\\\"Storyboard\\\",className:\\\"mb-3\\\",children:[(0,ot.jsx)(\\\"h4\\\",{className:\\\"mb-1.5 text-xs font-semibold tracking-wide text-muted-foreground uppercase\\\",children:\\\"Storyboard\\\"}),(0,ot.jsx)(\\\"ol\\\",{className:\\\"flex items-start gap-3 overflow-x-auto pb-2\\\",children:t.map(a=>(0,ot.jsx)(jH,{frame:a},a.stepId))})]})}function jH({frame:e}){let t=`${e.keyword} ${e.text}`,a=e.states.length>0,o=(0,ot.jsxs)(\\\"p\\\",{className:\\\"mt-1 flex items-baseline gap-1.5 text-[0.6875rem] leading-snug\\\",children:[(0,ot.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"shrink-0\\\",XH[e.status]),children:GH[e.status]??\\\"\\\\u25CB\\\"}),(0,ot.jsxs)(\\\"span\\\",{className:\\\"min-w-0\\\",children:[(0,ot.jsx)(\\\"span\\\",{className:\\\"font-mono font-semibold text-keyword\\\",children:e.keyword}),\\\" \\\",(0,ot.jsx)(\\\"span\\\",{className:\\\"text-muted-foreground\\\",children:e.screenshot?.alt??e.text})]})]});return(0,ot.jsxs)(\\\"li\\\",{className:J(\\\"shrink-0\\\",a?\\\"w-64\\\":\\\"w-40\\\"),children:[e.screenshot?(0,ot.jsx)(YH,{frame:e,label:t}):null,a?(0,ot.jsx)(\\\"div\\\",{className:J(\\\"flex flex-col gap-1.5\\\",e.screenshot&&\\\"mt-1.5\\\"),children:e.states.map((n,r)=>(0,ot.jsx)($H,{card:n},n.label??r))}):null,e.screenshot?o:(0,ot.jsx)(\\\"a\\\",{href:`#${e.stepId}`,\\\"aria-label\\\":`Jump to step: ${t}`,className:\\\"block hover:underline\\\",children:o})]})}function YH({frame:e,label:t}){let a=e.screenshot?.path??\\\"\\\",o=ns(a)?void 0:os(a);return(0,ot.jsx)(\\\"a\\\",{href:`#${e.stepId}`,\\\"aria-label\\\":`Jump to step: ${t}`,className:\\\"block overflow-hidden rounded-md border border-border transition-colors hover:border-ring\\\",children:o?(0,ot.jsx)(\\\"img\\\",{src:o,alt:e.screenshot?.alt??t,loading:\\\"lazy\\\",className:\\\"h-24 w-full bg-muted object-cover object-top\\\"}):(0,ot.jsx)(\\\"span\\\",{className:\\\"flex h-24 w-full items-center justify-center border-b border-dashed border-border bg-muted px-2 text-center text-[0.6875rem] text-muted-foreground\\\",children:\\\"Screenshot unavailable\\\"})})}var KH={added:\\\"bg-pass-bg text-pass\\\",removed:\\\"bg-fail-bg text-fail\\\",changed:\\\"bg-skip-bg text-skip\\\"};function ZH(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}function $H({card:e}){let t=ZH(e.value),a=e.changes===void 0;return(0,ot.jsxs)(\\\"div\\\",{\\\"data-slot\\\":\\\"state-card\\\",className:\\\"rounded-md border border-border bg-card p-2\\\",children:[(0,ot.jsxs)(\\\"p\\\",{className:\\\"flex flex-wrap items-baseline gap-1.5\\\",children:[(0,ot.jsx)(\\\"span\\\",{className:\\\"inline-flex rounded-full border border-border px-1.5 font-mono text-[0.625rem] font-medium text-muted-foreground\\\",children:e.label??\\\"State\\\"}),a?(0,ot.jsx)(\\\"span\\\",{className:\\\"text-[0.625rem] text-muted-foreground italic\\\",children:\\\"first capture\\\"}):null]}),!a&&(e.changes&&e.changes.length>0?(0,ot.jsx)(\\\"ul\\\",{className:\\\"mt-1.5 flex flex-col gap-0.5\\\",children:e.changes.map((o,n)=>(0,ot.jsx)(\\\"li\\\",{className:J(\\\"rounded-sm px-1.5 py-0.5 font-mono text-[0.625rem] leading-snug break-all\\\",KH[o.kind]),children:Yp([o])[0]},n))}):(0,ot.jsx)(\\\"p\\\",{className:\\\"mt-1.5 text-[0.625rem] text-muted-foreground\\\",children:\\\"No changes\\\"})),(0,ot.jsxs)(\\\"details\\\",{open:a&&t.length<=240,className:J(a?\\\"mt-1.5\\\":\\\"mt-1\\\"),children:[(0,ot.jsx)(\\\"summary\\\",{className:\\\"cursor-pointer text-[0.625rem] text-muted-foreground hover:text-foreground\\\",children:\\\"Snapshot\\\"}),(0,ot.jsx)(\\\"pre\\\",{tabIndex:0,className:\\\"mt-1 max-h-48 overflow-auto rounded-sm bg-muted p-1.5 font-mono text-[0.625rem] leading-snug\\\",children:t})]})]})}var Lt=v(O(),1);function QH(e){if(e.contentEncoding!==\\\"BASE64\\\")return e.body;try{return new TextDecoder().decode(Uint8Array.from(atob(e.body),t=>t.charCodeAt(0)))}catch{return}}function WH(e){let t=e.mediaType.split(\\\";\\\")[0].trim().toLowerCase(),a=QH(e);return a===void 0?null:t===\\\"text/plain\\\"?(0,Lt.jsx)(\\\"pre\\\",{className:\\\"max-h-96 overflow-auto rounded-md border border-border bg-muted/40 p-3 text-xs whitespace-pre-wrap\\\",children:a}):t===\\\"text/markdown\\\"?(0,Lt.jsx)(\\\"div\\\",{className:\\\"es-doc-prose prose prose-sm max-w-none rounded-md border border-border p-3\\\",dangerouslySetInnerHTML:{__html:_i(a)}}):t===\\\"text/html\\\"?(0,Lt.jsx)(Vp,{entry:{kind:\\\"html\\\",content:a,title:e.name,phase:\\\"runtime\\\"}}):null}function YE(e){let t=e.external?void 0:e.contentEncoding===\\\"BASE64\\\"?`data:${e.mediaType};base64,${e.body}`:`data:${e.mediaType},${encodeURIComponent(e.body)}`;return{href:t??Vo(e.body),imageSrc:t??os(e.body)}}var JH=/^(.*)-(expected|actual|diff|previous)\\\\.png$/i,jE=[\\\"expected\\\",\\\"actual\\\",\\\"diff\\\",\\\"previous\\\"];function ez(e){let t=new Map;for(let n of e){let r=n.mediaType.startsWith(\\\"image/\\\")?JH.exec(n.name):null;if(!r)continue;let l=t.get(r[1])??{stem:r[1],images:[]};l.images.push({role:r[2].toLowerCase(),att:n}),t.set(l.stem,l)}let a=[...t.values()].filter(n=>n.images.length>1);for(let n of a)n.images.sort((r,l)=>jE.indexOf(r.role)-jE.indexOf(l.role));let o=new Set(a.flatMap(n=>n.images.map(r=>r.att)));return{comparisons:a,rest:e.filter(n=>!o.has(n))}}function tz({comparison:e}){let t=`Screenshot comparison: ${e.stem}`;return(0,Lt.jsxs)(\\\"div\\\",{role:\\\"group\\\",\\\"aria-label\\\":t,className:\\\"rounded-md border border-border p-2\\\",children:[(0,Lt.jsx)(\\\"p\\\",{className:\\\"m-0 mb-2 text-xs font-medium\\\",children:t}),(0,Lt.jsx)(\\\"div\\\",{className:\\\"grid grid-cols-1 gap-2 sm:grid-cols-3\\\",children:e.images.map(({role:a,att:o})=>{let{imageSrc:n}=YE(o);return(0,Lt.jsxs)(\\\"figure\\\",{className:\\\"m-0\\\",children:[n?(0,Lt.jsx)(\\\"img\\\",{src:n,alt:`${e.stem} ${a}`,loading:\\\"lazy\\\",className:\\\"max-w-full rounded-md border border-border\\\"}):null,(0,Lt.jsx)(\\\"figcaption\\\",{className:\\\"mt-1 text-xs text-muted-foreground capitalize\\\",children:a})]},a)})})]})}function KE({attachments:e}){if(e.length===0)return null;let{comparisons:t,rest:a}=ez(e);return(0,Lt.jsxs)(\\\"div\\\",{role:\\\"group\\\",\\\"aria-label\\\":\\\"Attachments\\\",className:\\\"mt-3 flex flex-col gap-2\\\",children:[t.map(o=>(0,Lt.jsx)(tz,{comparison:o},o.stem)),a.map((o,n)=>{let{href:r,imageSrc:l}=YE(o),s=o.mediaType.startsWith(\\\"image/\\\")&&l!==void 0;return(0,Lt.jsx)(\\\"figure\\\",{className:\\\"m-0\\\",children:s?(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsx)(\\\"img\\\",{src:l,alt:o.name,loading:\\\"lazy\\\",className:\\\"max-w-full rounded-md border border-border\\\"}),(0,Lt.jsx)(\\\"figcaption\\\",{className:\\\"mt-1 text-xs text-muted-foreground\\\",children:o.name})]}):(0,Lt.jsxs)(Lt.Fragment,{children:[o.external?null:WH(o),(0,Lt.jsxs)(\\\"a\\\",{href:r,download:o.name,className:\\\"text-xs text-link underline underline-offset-2\\\",children:[o.name,\\\" \\\",(0,Lt.jsxs)(\\\"span\\\",{className:\\\"text-muted-foreground\\\",children:[\\\"(\\\",o.mediaType,\\\")\\\"]})]})]})},`${o.name}-${n}`)})]})}var az=new Set([\\\"ok\\\",\\\"error\\\",\\\"unset\\\"]),oz=e=>az.has(e)?e:\\\"unset\\\";function nz(e){let t=[];for(let a of e){if(!a||typeof a.spanId!=\\\"string\\\"||typeof a.name!=\\\"string\\\")continue;let o,n;if(a.startTimeMs!=null&&a.durationMs!=null)o=a.startTimeMs,n=a.durationMs;else if(a.startTimeUnixNano!=null&&a.endTimeUnixNano!=null)o=a.startTimeUnixNano/1e6,n=(a.endTimeUnixNano-a.startTimeUnixNano)/1e6;else continue;n=Math.max(0,n),!(!isFinite(o)||!isFinite(n))&&t.push({spanId:a.spanId,parentSpanId:a.parentSpanId,name:a.name,startTimeMs:o,durationMs:n,status:oz(a.status),statusMessage:a.statusMessage})}return t}function ZE(e){let t=nz(e);if(t.length===0)return[];let a=new Map;for(let s of t){let i=s.spanId,u=2;for(;a.has(i);)i=`${s.spanId}__dup${u++}`;a.set(i,{span:{...s,spanId:i},children:[],depth:0})}let o=[];for(let s of a.values()){let i=s.span.parentSpanId?a.get(s.span.parentSpanId):void 0;i&&i!==s?i.children.push(s):o.push(s)}for(let s of a.values())s.children.sort((i,u)=>i.span.startTimeMs-u.span.startTimeMs);o.sort((s,i)=>s.span.startTimeMs-i.span.startTimeMs);let n=[],r=new Set,l=(s,i)=>{if(!r.has(s.span.spanId)){r.add(s.span.spanId),n.push({...s.span,depth:i});for(let u of s.children)l(u,i+1)}};for(let s of o)l(s,0);for(let s of a.values())r.has(s.span.spanId)||l(s,0);return n}function $E(e){let t=1/0,a=-1/0;for(let n of e)t=Math.min(t,n.startTimeMs),a=Math.max(a,n.startTimeMs+n.durationMs);let o=a-t;return{minStartMs:isFinite(t)?t:0,totalMs:o>0?o:1}}var xn=v(O(),1),rz={ok:\\\"bg-pass\\\",error:\\\"bg-fail\\\",unset:\\\"bg-skip\\\"};function QE({spans:e}){if(!e||e.length===0)return null;let t=ZE(e);if(t.length===0)return null;let{minStartMs:a,totalMs:o}=$E(t);return(0,xn.jsxs)(\\\"details\\\",{className:\\\"mt-3 rounded-md border border-border bg-muted/30\\\",children:[(0,xn.jsxs)(\\\"summary\\\",{className:\\\"cursor-pointer px-3 py-2 text-xs font-medium text-muted-foreground\\\",children:[\\\"Trace (\\\",t.length,\\\" span\\\",t.length===1?\\\"\\\":\\\"s\\\",\\\", \\\",gn(o),\\\")\\\"]}),(0,xn.jsx)(\\\"ul\\\",{className:\\\"flex flex-col gap-0.5 px-3 pb-3 font-mono text-[0.6875rem]\\\",children:t.map((n,r)=>{let l=(n.startTimeMs-a)/o*100,s=Math.max(n.durationMs/o*100,.5);return(0,xn.jsxs)(\\\"li\\\",{className:\\\"flex items-center gap-2\\\",children:[(0,xn.jsx)(\\\"span\\\",{className:\\\"min-w-0 flex-1 truncate text-foreground\\\",style:{paddingLeft:`${n.depth*12}px`},title:n.statusMessage?`${n.name}: ${n.statusMessage}`:n.name,children:n.name}),(0,xn.jsx)(\\\"span\\\",{className:\\\"relative h-3 w-1/2 shrink-0 overflow-hidden rounded-sm bg-border/40\\\",children:(0,xn.jsx)(\\\"span\\\",{className:J(\\\"absolute top-0 h-full rounded-sm\\\",rz[n.status]),style:{left:`${l}%`,width:`${s}%`}})}),(0,xn.jsx)(\\\"span\\\",{className:\\\"w-16 shrink-0 text-right text-muted-foreground\\\",children:gn(n.durationMs)})]},`${n.spanId}-${r}`)})})]})}var Kp=v(A(),1),WE=(0,Kp.createContext)(null),JE=WE.Provider;function ek(){return(0,Kp.useContext)(WE)}function lz(e){let t=e[e.length-1];if(!t)return;let a=0;for(let o=e.length-1;o>=0&&e[o].status===t.status;o--)a++;return{status:t.status,count:a}}var sz={passed:\\\"Passing\\\",failed:\\\"Failing\\\",skipped:\\\"Skipped\\\",pending:\\\"Pending\\\"};function nS(e){let a=`${e.filter(n=>n.status===\\\"passed\\\").length}/${e.length} runs passed`,o=lz(e);return!o||e.length<2?a:`${a} \\\\xB7 ${sz[o.status]} for the last ${o.count===1?\\\"run\\\":`${o.count} runs`}`}var iz=3;function tk(e){let t=e.filter(r=>r.status===\\\"passed\\\"||r.status===\\\"failed\\\");if(t.length<iz)return\\\"stable\\\";let a=0;for(let r=1;r<t.length;r++)t[r].status!==t[r-1].status&&a++;let o=a/(t.length-1),n=t.filter(r=>r.status===\\\"failed\\\").length/t.length;return o>.5||o>.3&&n>.2?\\\"flaky\\\":o>.2||n>.3?\\\"unstable\\\":\\\"stable\\\"}function ak(e,t){let a=!1,o={newlyFailing:[],newlyPassing:[],added:[]};for(let n of t){let r=e[n.id];if(!r||r.length===0)continue;let l=r[r.length-1],s=r[r.length-2];if(!s){o.added.push(n);continue}a=!0,l.status===\\\"failed\\\"&&s.status!==\\\"failed\\\"?o.newlyFailing.push(n):l.status===\\\"passed\\\"&&s.status===\\\"failed\\\"&&o.newlyPassing.push(n)}return a?o:void 0}var el=v(O(),1),uz=10,cz={passed:\\\"bg-pass\\\",failed:\\\"bg-fail\\\",skipped:\\\"bg-skip\\\",pending:\\\"bg-pend\\\"};function fz(e){let t=[new Date(e.timestamp).toLocaleString(),e.status];return e.commitSha&&t.push(e.commitSha.slice(0,8)),t.join(\\\" \\\\xB7 \\\")}function ok({scenarioId:e}){let a=ek()?.[e];if(!a||a.length<2)return null;let o=a.slice(-uz),n=tk(o)===\\\"flaky\\\",r=n?`${nS(o)} \\\\xB7 Flaky`:nS(o);return(0,el.jsxs)(el.Fragment,{children:[n?(0,el.jsx)(fa,{variant:\\\"pending\\\",\\\"aria-label\\\":\\\"Flaky: status flips between recent runs\\\",title:r,children:\\\"Flaky\\\"}):null,(0,el.jsx)(\\\"span\\\",{role:\\\"img\\\",\\\"aria-label\\\":`Run history: ${r}`,title:r,className:\\\"flex shrink-0 items-center gap-[3px]\\\",children:o.map((l,s)=>(0,el.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,title:fz(l),className:J(\\\"inline-block size-1.5 rounded-full\\\",cz[l.status],s===o.length-1&&\\\"ring-1 ring-border ring-offset-1 ring-offset-card\\\")},`${l.timestamp}-${s}`))})]})}var Qp=v(A(),1);function nk(e){if(e.finishedAtMs&&e.finishedAtMs>0)return e.finishedAtMs;if(e.startedAtMs&&e.startedAtMs>0)return e.startedAtMs}function zi(e,t){let a=Math.max(0,t-e),o=Math.floor(a/6e4);if(o<1)return\\\"just now\\\";if(o<60)return`${o} minute${o===1?\\\"\\\":\\\"s\\\"} ago`;let n=Math.floor(o/60);if(n<24)return`${n} hour${n===1?\\\"\\\":\\\"s\\\"} ago`;let r=Math.floor(n/24);return`${r} day${r===1?\\\"\\\":\\\"s\\\"} ago`}function Zp(e,t,a){return e===void 0||t<=0?!1:a-e>=t*864e5}var dz={github:\\\"GitHub Actions\\\",gitlab:\\\"GitLab CI\\\",circleci:\\\"CircleCI\\\",jenkins:\\\"Jenkins\\\",azure:\\\"Azure DevOps\\\",buildkite:\\\"Buildkite\\\",travis:\\\"Travis CI\\\",ci:\\\"CI\\\"};function rS(e){return dz[e]??e}function rk(e,t){let a=e?.commitSha??t;if(!e?.url||!a)return;let o=e.url.match(/^(https?:\\\\/\\\\/[^/]+\\\\/[^/]+\\\\/[^/]+)\\\\/actions\\\\/runs\\\\//);if(o)return`${o[1]}/commit/${a}`;let n=e.url.match(/^(https?:\\\\/\\\\/.+)\\\\/-\\\\/pipelines\\\\//);if(n)return`${n[1]}/-/commit/${a}`}function lk(e){if(!e?.url||!e.prNumber)return;let t=e.url.match(/^(https?:\\\\/\\\\/[^/]+\\\\/[^/]+\\\\/[^/]+)\\\\/actions\\\\/runs\\\\//);if(t)return`${t[1]}/pull/${e.prNumber}`}var $p=v(A(),1),sk=(0,$p.createContext)(null),ik=sk.Provider;function uk(){return(0,$p.useContext)(sk)}var fk=v(O(),1);function ck({scenario:e}){let t=uk(),a=t?.nowMs,[o,n]=(0,Qp.useState)(a);if((0,Qp.useEffect)(()=>{a===void 0&&n(Date.now())},[a]),!t||o===void 0)return null;let r=e.lastRunAtMs;return!r||r<=0||!Zp(r,t.staleAfterDays,o)?null:(0,fk.jsxs)(fa,{variant:\\\"outline\\\",\\\"aria-label\\\":\\\"Scenario freshness\\\",children:[\\\"Last ran \\\",zi(r,o)]})}var Go=v(A(),1),dk=(0,Go.createContext)(null),pk=dk.Provider;function Wp(){return(0,Go.useContext)(dk)}var mk=\\\"es-collapsed-ids\\\";function pz(){if(typeof localStorage>\\\"u\\\")return null;try{let e=localStorage.getItem(mk);return e?new Set(JSON.parse(e)):null}catch{return null}}function lS(e){if(!(typeof localStorage>\\\"u\\\"))try{localStorage.setItem(mk,JSON.stringify([...e]))}catch{}}function gk(e){let[t,a]=(0,Go.useState)(()=>pz()??e?.()??new Set),o=(0,Go.useCallback)(s=>t.has(s),[t]),n=(0,Go.useCallback)(s=>{a(i=>{let u=new Set(i);return u.has(s)?u.delete(s):u.add(s),lS(u),u})},[]),r=(0,Go.useCallback)(s=>{a(()=>{let i=new Set(s);return lS(i),i})},[]),l=(0,Go.useCallback)(()=>{a(()=>{let s=new Set;return lS(s),s})},[]);return{api:{isCollapsed:o,toggle:n},collapseAll:r,expandAll:l}}var Jp=v(A(),1);function hk(e){return e.replaceAll(\\\"|\\\",\\\"\\\\\\\\|\\\").replaceAll(`\\n`,\\\" \\\")}function sS(e){if(typeof e==\\\"string\\\")return e;try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}function iS(e,t){let a=[];switch(e.kind){case\\\"note\\\":a.push(e.text);break;case\\\"tag\\\":a.push(e.names.map(o=>`\\\\`@${o}\\\\``).join(\\\" \\\"));break;case\\\"kv\\\":a.push(`**${e.label}:** ${sS(e.value)}`);break;case\\\"code\\\":a.push(`**${e.label}**`,\\\"\\\",\\\"```\\\"+(e.lang??\\\"\\\"),e.content,\\\"```\\\");break;case\\\"table\\\":{a.push(`**${e.label}**`,\\\"\\\"),a.push(`| ${e.columns.map(hk).join(\\\" | \\\")} |`),a.push(`| ${e.columns.map(()=>\\\"---\\\").join(\\\" | \\\")} |`);for(let o of e.rows)a.push(`| ${o.map(hk).join(\\\" | \\\")} |`);break}case\\\"link\\\":a.push(`[${e.label}](${e.url})`);break;case\\\"section\\\":a.push(`### ${e.title}`,\\\"\\\",e.markdown);break;case\\\"mermaid\\\":e.title&&a.push(`**${e.title}**`,\\\"\\\"),a.push(\\\"```mermaid\\\",e.code,\\\"```\\\");break;case\\\"screenshot\\\":a.push(`![${e.alt??\\\"screenshot\\\"}](${e.path})`);break;case\\\"video\\\":a.push(`Video: ${e.path}${e.caption?` \\\\u2014 ${e.caption}`:\\\"\\\"}`);break;case\\\"html\\\":{let o=e.title??\\\"Embedded HTML\\\";e.content?a.push(`**${o}**`,\\\"\\\",\\\"```html\\\",e.content,\\\"```\\\"):e.url?a.push(`[${o}](${e.url})`):a.push(`Embedded HTML: ${e.path??\\\"(inline)\\\"}`);break}case\\\"custom\\\":a.push(`**${e.type}**`,\\\"\\\",\\\"```json\\\",sS(e.data),\\\"```\\\");break;case\\\"state\\\":{let o=e.label??\\\"\\\";if(a.push(`**${e.label??\\\"State\\\"}**`),t?.has(o)){let n=Yp(jp(t.get(o),e.value));n.length>0&&a.push(\\\"\\\",...n.map(r=>`- ${r}`))}t?.set(o,e.value),a.push(\\\"\\\",\\\"<details>\\\",\\\"<summary>snapshot</summary>\\\",\\\"\\\",\\\"```json\\\",sS(e.value??null),\\\"```\\\",\\\"\\\",\\\"</details>\\\");break}}for(let o of e.children??[])a.push(\\\"\\\",...iS(o,t));return a}function mz(e,t,a,o){let n=e.status===\\\"passed\\\"?\\\"\\\":` \\\\u2014 **${e.status}**`,r=[`${t}. **${e.keyword}** ${e.text}${n}`];if(!a)return r;e.errorMessage&&r.push(...e.errorMessage.split(`\\n`).map(l=>`   > ${l}`));for(let[l,s]of[[\\\"Expected\\\",e.expected],[\\\"Actual\\\",e.actual]])s!==void 0&&r.push(...`${l}: ${s}`.split(`\\n`).map(i=>`   > ${i}`));for(let l of e.docEntries)r.push(\\\"\\\",...iS(l,o).map(s=>s===\\\"\\\"?s:`   ${s}`));return r}function xk(e,t={}){let{variant:a=\\\"full\\\",meta:o=[]}=t,n=a===\\\"full\\\",r=n?[`# ${e.title}`,\\\"\\\"]:[`## ${e.title} _(${e.status})_`,\\\"\\\"];n&&o.length>0&&r.push(...o);let l=new Map;if(e.steps.length>0&&(n&&r.push(\\\"\\\",\\\"## Steps\\\",\\\"\\\"),e.steps.forEach((s,i)=>r.push(...mz(s,i+1,n,l)))),e.errorMessage&&(n?r.push(\\\"\\\",\\\"## Failure\\\",\\\"\\\"):r.push(\\\"\\\"),r.push(\\\"```\\\",e.errorMessage.trim(),\\\"```\\\")),n&&e.docEntries.length>0){r.push(\\\"\\\",\\\"## Docs\\\",\\\"\\\");for(let s of e.docEntries)r.push(...iS(s,l),\\\"\\\")}return r.join(`\\n`).replaceAll(/\\\\n{3,}/g,`\\n\\n`).trimEnd()+(n?`\\n`:\\\"\\\")}var bk=(0,Jp.createContext)(null),yk=bk.Provider;function Sk(){return(0,Jp.useContext)(bk)}function Ck(e){return xk(e,{variant:\\\"compact\\\"})}function vk(e){let t=[`A test scenario is ${e.status}. Investigate the likely cause and propose a fix.`,\\\"\\\",`Scenario: ${e.title}`,\\\"Steps:\\\"];for(let a of e.steps){let o=a.status===\\\"failed\\\"?\\\" \\\\u27F5 failed here\\\":\\\"\\\";t.push(`  ${a.keyword} ${a.text}${o}`)}return e.errorMessage&&t.push(\\\"\\\",\\\"Error:\\\",e.errorMessage.trim()),e.errorStack&&t.push(\\\"\\\",\\\"Stack:\\\",e.errorStack.trim()),t.join(`\\n`)}function Lk(e){if(e.length===0)return\\\"\\\";let t=e.length===1?\\\"test scenario is\\\":\\\"test scenarios are\\\",a=[`${e.length} ${t} failing. Investigate the likely cause (they may share one) and propose a fix.`];return e.forEach((o,n)=>{a.push(\\\"\\\",`${n+1}. ${o.title}`,\\\"Steps:\\\");for(let r of o.steps){let l=r.status===\\\"failed\\\"?\\\" \\\\u27F5 failed here\\\":\\\"\\\";a.push(`  ${r.keyword} ${r.text}${l}`)}o.errorMessage&&a.push(\\\"Error:\\\",o.errorMessage.trim())}),a.join(`\\n`)}function Rk(e){return typeof location>\\\"u\\\"?`#${e.id}`:`${location.href.split(\\\"#\\\")[0]}#${e.id}`}var x8=v(A(),1);var em=v(O(),1);function Ik({className:e,...t}){return(0,em.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"card\\\",className:J(\\\"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-xs\\\",e),...t})}function wk({className:e,...t}){return(0,em.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"card-header\\\",className:J(\\\"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\\\",e),...t})}function Tk({className:e,...t}){return(0,em.jsx)(\\\"div\\\",{\\\"data-slot\\\":\\\"card-content\\\",className:J(\\\"px-6\\\",e),...t})}var Ate=v(A(),1);var ir={};Ya(ir,{Arrow:()=>kk,Backdrop:()=>Ak,CheckboxItem:()=>$k,CheckboxItemIndicator:()=>Jk,Group:()=>aM,GroupLabel:()=>nM,Handle:()=>Lf,Item:()=>lM,LinkItem:()=>sM,Popup:()=>JA,Portal:()=>a1,Positioner:()=>E1,RadioGroup:()=>M1,RadioItem:()=>D1,RadioItemIndicator:()=>P1,Root:()=>Ug,Separator:()=>fO,SubmenuRoot:()=>V1,SubmenuTrigger:()=>pO,Trigger:()=>$1,Viewport:()=>uO,createHandle:()=>mO});var Ek=v(A(),1);var tm=v(A(),1),uS=tm.createContext(void 0);function pa(e){let t=tm.useContext(uS);if(t===void 0&&!e)throw new Error(Ne(33));return t}var am=v(A(),1),cS=am.createContext(void 0);function rt(e){let t=am.useContext(cS);if(t===void 0&&!e)throw new Error(Ne(36));return t}var Ui=\\\"data-starting-style\\\",om=\\\"data-ending-style\\\";var gz={[Ui]:\\\"\\\"},hz={[om]:\\\"\\\"},qi={transitionStatus(e){return e===\\\"starting\\\"?gz:e===\\\"ending\\\"?hz:null}};var ls={};Ya(ls,{align:()=>Sz,anchorHidden:()=>mS,closed:()=>pS,endingStyle:()=>bz,open:()=>dS,side:()=>yz,startingStyle:()=>xz});var dS=\\\"data-open\\\",pS=\\\"data-closed\\\",xz=Ui,bz=om,mS=\\\"data-anchor-hidden\\\",yz=\\\"data-side\\\",Sz=\\\"data-align\\\";var rm={};Ya(rm,{popupOpen:()=>nm,pressed:()=>gS});var nm=\\\"data-popup-open\\\",gS=\\\"data-pressed\\\";var Cz={[nm]:\\\"\\\"},vz={[nm]:\\\"\\\",[gS]:\\\"\\\"},Lz={[dS]:\\\"\\\"},Rz={[pS]:\\\"\\\"},Iz={[mS]:\\\"\\\"},lm={open(e){return e?Cz:null}},hS={open(e){return e?vz:null}},ss={open(e){return e?Lz:Rz},anchorHidden(e){return e?Iz:null}},Vi={...ss,...qi};var kk=Ek.forwardRef(function(t,a){let{render:o,className:n,style:r,...l}=t,{store:s}=rt(),{arrowRef:i,side:u,align:c,arrowUncentered:d,arrowStyles:f}=pa(),h={open:s.useState(\\\"open\\\"),side:u,align:c,uncentered:d};return se(\\\"div\\\",t,{ref:[i,a],stateAttributesMapping:ss,state:h,props:{style:f,\\\"aria-hidden\\\":!0,...l}})});var Mk=v(A(),1);var sm=v(A(),1),wz=sm.createContext(void 0);function tl(e=!0){let t=sm.useContext(wz);if(t===void 0&&!e)throw new Error(Ne(25));return t}var $={};Ya($,{cancelOpen:()=>eU,chipRemovePress:()=>Bz,clearPress:()=>Nz,closePress:()=>Dz,closeWatcher:()=>Yz,decrementPress:()=>Hz,disabled:()=>aU,drag:()=>Qz,escapeKey:()=>jz,focusOut:()=>Xz,imperativeAction:()=>rU,incrementPress:()=>Fz,initial:()=>nU,inputBlur:()=>qz,inputChange:()=>zz,inputClear:()=>Uz,inputPaste:()=>Vz,inputPress:()=>Gz,itemPress:()=>Oz,keyboard:()=>Zz,linkPress:()=>Pz,listNavigation:()=>Kz,missing:()=>oU,none:()=>Tz,outsidePress:()=>Az,pointer:()=>$z,scrub:()=>Jz,siblingOpen:()=>tU,swipe:()=>lU,trackPress:()=>_z,triggerFocus:()=>Mz,triggerHover:()=>kz,triggerPress:()=>Ez,wheel:()=>Wz,windowResize:()=>sU});var Tz=\\\"none\\\",Ez=\\\"trigger-press\\\",kz=\\\"trigger-hover\\\",Mz=\\\"trigger-focus\\\",Az=\\\"outside-press\\\",Oz=\\\"item-press\\\",Dz=\\\"close-press\\\",Pz=\\\"link-press\\\",Nz=\\\"clear-press\\\",Bz=\\\"chip-remove-press\\\",_z=\\\"track-press\\\",Fz=\\\"increment-press\\\",Hz=\\\"decrement-press\\\",zz=\\\"input-change\\\",Uz=\\\"input-clear\\\",qz=\\\"input-blur\\\",Vz=\\\"input-paste\\\",Gz=\\\"input-press\\\",Xz=\\\"focus-out\\\",jz=\\\"escape-key\\\",Yz=\\\"close-watcher\\\",Kz=\\\"list-navigation\\\",Zz=\\\"keyboard\\\",$z=\\\"pointer\\\",Qz=\\\"drag\\\",Wz=\\\"wheel\\\",Jz=\\\"scrub\\\",eU=\\\"cancel-open\\\",tU=\\\"sibling-open\\\",aU=\\\"disabled\\\",oU=\\\"missing\\\",nU=\\\"initial\\\",rU=\\\"imperative-action\\\",lU=\\\"swipe\\\",sU=\\\"window-resize\\\";var Ak=Mk.forwardRef(function(t,a){let{render:o,className:n,style:r,...l}=t,{store:s}=rt(),i=s.useState(\\\"open\\\"),u=s.useState(\\\"mounted\\\"),c=s.useState(\\\"transitionStatus\\\"),d=s.useState(\\\"lastOpenChangeReason\\\"),f=tl(),p={open:i,transitionStatus:c};return se(\\\"div\\\",t,{ref:f?.backdropRef?[a,f.backdropRef]:a,state:p,stateAttributesMapping:Vi,props:[{role:\\\"presentation\\\",hidden:!u,style:{pointerEvents:d===$.triggerHover?\\\"none\\\":void 0,userSelect:\\\"none\\\",WebkitUserSelect:\\\"none\\\"}},l]})});var bm=v(A(),1);var is=v(A(),1);function bn({controlled:e,default:t,name:a,state:o=\\\"value\\\"}){let{current:n}=is.useRef(e!==void 0),[r,l]=is.useState(t),s=n&&e!==void 0?e:r,i=is.useCallback(u=>{n||l(u)},[]);return[s,i]}var im=v(A(),1),xS=im.createContext(void 0);function Ok(){let e=im.useContext(xS);if(e===void 0)throw new Error(Ne(30));return e}var ji=v(A(),1);var Xi=v(A(),1);function um(){return typeof window<\\\"u\\\"}function Ot(e){return cm(e)?(e.nodeName||\\\"\\\").toLowerCase():\\\"#document\\\"}function Ye(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Sn(e){var t;return(t=(cm(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function cm(e){return um()?e instanceof Node||e instanceof Ye(e).Node:!1}function ke(e){return um()?e instanceof Element||e instanceof Ye(e).Element:!1}function Be(e){return um()?e instanceof HTMLElement||e instanceof Ye(e).HTMLElement:!1}function yn(e){return!um()||typeof ShadowRoot>\\\"u\\\"?!1:e instanceof ShadowRoot||e instanceof Ye(e).ShadowRoot}function cs(e){let{overflow:t,overflowX:a,overflowY:o,display:n}=qt(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+a)&&n!==\\\"inline\\\"&&n!==\\\"contents\\\"}function Dk(e){return/^(table|td|th)$/.test(Ot(e))}function qc(e){try{if(e.matches(\\\":popover-open\\\"))return!0}catch{}try{return e.matches(\\\":modal\\\")}catch{return!1}}var iU=/transform|translate|scale|rotate|perspective|filter/,uU=/paint|layout|strict|content/,us=e=>!!e&&e!==\\\"none\\\",bS;function fm(e){let t=ke(e)?qt(e):e;return us(t.transform)||us(t.translate)||us(t.scale)||us(t.rotate)||us(t.perspective)||!dm()&&(us(t.backdropFilter)||us(t.filter))||iU.test(t.willChange||\\\"\\\")||uU.test(t.contain||\\\"\\\")}function Pk(e){let t=Io(e);for(;Be(t)&&!wo(t);){if(fm(t))return t;if(qc(t))return null;t=Io(t)}return null}function dm(){return bS==null&&(bS=typeof CSS<\\\"u\\\"&&CSS.supports&&CSS.supports(\\\"-webkit-backdrop-filter\\\",\\\"none\\\")),bS}function wo(e){return/^(html|body|#document)$/.test(Ot(e))}function qt(e){return Ye(e).getComputedStyle(e)}function Vc(e){return ke(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Io(e){if(Ot(e)===\\\"html\\\")return e;let t=e.assignedSlot||e.parentNode||yn(e)&&e.host||Sn(e);return yn(t)?t.host:t}function Nk(e){let t=Io(e);return wo(t)?(e.ownerDocument||e).body:Be(t)&&cs(t)?t:Nk(t)}function al(e,t,a){var o;t===void 0&&(t=[]),a===void 0&&(a=!0);let n=Nk(e),r=n===((o=e.ownerDocument)==null?void 0:o.body),l=Ye(n);if(r){let s=pm(l);return t.concat(l,l.visualViewport||[],cs(n)?n:[],s&&a?al(s):[])}else return t.concat(n,al(n,[],a))}function pm(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var cU=v(A(),1),Gc={...cU};var yS=Gc.useInsertionEffect,fU=yS&&yS!==Gc.useLayoutEffect?yS:e=>e();function Z(e){let t=We(dU).current;return t.next=e,fU(t.effect),t.trampoline}function dU(){let e={next:void 0,callback:pU,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function pU(){}var Bk=v(A(),1),mU=()=>{},V=typeof document<\\\"u\\\"?Bk.useLayoutEffect:mU;var mm=v(A(),1),SS=mm.createContext(void 0);function Gi(e=!1){let t=mm.useContext(SS);if(t===void 0&&!e)throw new Error(Ne(16));return t}var _k=v(A(),1);function Fk(e){let{focusableWhenDisabled:t,disabled:a,composite:o=!1,tabIndex:n=0,isNativeButton:r}=e,l=o&&t!==!1,s=o&&t===!1;return{props:_k.useMemo(()=>{let u={onKeyDown(c){a&&t&&c.key!==\\\"Tab\\\"&&c.preventDefault()}};return o||(u.tabIndex=n,!r&&a&&(u.tabIndex=t?n:-1)),(r&&(t||l)||!r&&a)&&(u[\\\"aria-disabled\\\"]=a),r&&(!t||s)&&(u.disabled=a),u},[o,a,t,l,s,r,n])}}function Ce(e){return e?.ownerDocument||document}function ol(e,t,{detail:a=0}={}){e.dispatchEvent(new(Ye(e)).PointerEvent(\\\"click\\\",{bubbles:!0,cancelable:!0,composed:!0,detail:a,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function Ta(e={}){let{disabled:t=!1,focusableWhenDisabled:a,tabIndex:o=0,native:n=!0,composite:r}=e,l=Xi.useRef(null),s=Gi(!0),i=r??s!==void 0,{props:u}=Fk({focusableWhenDisabled:a,disabled:t,composite:i,tabIndex:o,isNativeButton:n}),c=Xi.useCallback(()=>{let p=l.current;CS(p)&&i&&t&&u.disabled===void 0&&p.disabled&&(p.disabled=!1)},[t,u.disabled,i]);V(c,[c]);let d=Xi.useCallback((p={})=>{let{onClick:h,onMouseDown:b,onKeyUp:S,onKeyDown:g,onPointerDown:m,...x}=p;return wa({onClick(y){if(t){y.preventDefault();return}h?.(y)},onMouseDown(y){t||b?.(y)},onKeyDown(y){if(t||(Nc(y),g?.(y),y.baseUIHandlerPrevented))return;let L=y.target===y.currentTarget,I=y.currentTarget,R=CS(I),C=!n&&gU(I),k=L&&(n?R:!C),E=y.key===\\\"Enter\\\",T=y.key===\\\" \\\",w=I.getAttribute(\\\"role\\\"),P=w?.startsWith(\\\"menuitem\\\")||w===\\\"option\\\"||w===\\\"gridcell\\\";if(L&&i&&T){if(y.defaultPrevented&&P)return;y.preventDefault(),(!n||R)&&(y.preventBaseUIHandler(),ol(I,y));return}if(!k||n||!T&&!E){L&&C&&T&&y.preventDefault();return}y.defaultPrevented||(y.preventDefault(),E&&(y.preventBaseUIHandler(),ol(I,y)))},onKeyUp(y){if(!t){if(Nc(y),S?.(y),y.target===y.currentTarget&&n&&i&&CS(y.currentTarget)&&y.key===\\\" \\\"){y.preventDefault();return}y.baseUIHandlerPrevented||y.target===y.currentTarget&&!n&&!i&&!y.defaultPrevented&&y.key===\\\" \\\"&&(y.preventBaseUIHandler(),ol(y.currentTarget,y))}},onPointerDown(y){if(t){y.preventDefault();return}m?.(y)}},n?{type:\\\"button\\\"}:{role:\\\"button\\\"},u,x)},[t,u,i,n]),f=Z(p=>{l.current=p,c()});return{getButtonProps:d,buttonRef:f}}function CS(e){return Be(e)&&e.tagName===\\\"BUTTON\\\"}function gU(e){return Be(e)&&e.tagName===\\\"A\\\"&&!!e.href}var Vk=v(A(),1);var Ke={};Ya(Ke,{engine:()=>wS,env:()=>ES,mediaQuery:()=>kS,os:()=>RS,screenReader:()=>TS});var RS={};Ya(RS,{android:()=>Uk,apple:()=>LS,ios:()=>vS,linux:()=>SU,mac:()=>qk,windows:()=>yU});function hU(){return typeof navigator>\\\"u\\\"?{userAgent:\\\"\\\",platform:\\\"\\\",maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??\\\"\\\",maxTouchPoints:navigator.maxTouchPoints??0}}var{userAgent:xU,platform:bU,maxTouchPoints:Hk}=hU(),fs=xU.toLowerCase(),ds=bU.toLowerCase();var vS=/^i(os$|p)/.test(ds)||ds===\\\"macintel\\\"&&Hk>1,zk=\\\"android\\\",Uk=ds===zk||fs.includes(zk),qk=!vS&&ds.startsWith(\\\"mac\\\"),yU=ds.startsWith(\\\"win\\\"),SU=!Uk&&/^(linux|chrome os)/.test(ds),LS=qk||vS;var wS={};Ya(wS,{blink:()=>vU,gecko:()=>CU,webkit:()=>IS});var IS=typeof CSS<\\\"u\\\"&&!!CSS.supports?.(\\\"-webkit-backdrop-filter:none\\\"),CU=!IS&&fs.includes(\\\"firefox\\\"),vU=!IS&&fs.includes(\\\"chrom\\\");var TS={};Ya(TS,{voiceOver:()=>LU});var LU=LS;var ES={};Ya(ES,{jsdom:()=>RU});var RU=/jsdom|happydom/.test(fs);var kS={};Ya(kS,{iOS:()=>IU});var IU=\\\"@supports (-webkit-touch-callout: none)\\\";function gm(e){let{closeOnClick:t,highlighted:a,id:o,nodeId:n,store:r,typingRef:l,itemRef:s,itemMetadata:i}=e,{events:u}=r.useState(\\\"floatingTreeRoot\\\"),c=r.useState(\\\"open\\\"),d=tl(!0),f=d!==void 0;return Vk.useMemo(()=>({id:o,role:\\\"menuitem\\\",tabIndex:c&&a?0:-1,onKeyDown(p){p.key===\\\" \\\"&&l?.current&&p.preventDefault()},onMouseMove(p){n&&u.emit(\\\"itemhover\\\",{nodeId:n,target:p.currentTarget})},onClick(p){t&&u.emit(\\\"close\\\",{domEvent:p,reason:$.itemPress})},onMouseUp(p){if(d){let h=d.initialCursorPointRef.current;if(d.initialCursorPointRef.current=null,f&&h&&Math.abs(p.clientX-h.x)<=1&&Math.abs(p.clientY-h.y)<=1||f&&!Ke.os.mac&&p.button===2)return}s.current&&r.context.allowMouseUpTriggerRef.current&&(!f||p.button===2)&&i.type===\\\"regular-item\\\"&&ol(s.current,p,{detail:1})}}),[t,a,o,u,n,c,r,l,s,d,f,i])}var nl={type:\\\"regular-item\\\"};function rl(e){let{closeOnClick:t,disabled:a,highlighted:o,id:n,store:r,typingRef:l=r.context.typingRef,nativeButton:s,itemMetadata:i,nodeId:u}=e,c=ji.useRef(null),{getButtonProps:d,buttonRef:f}=Ta({disabled:a,focusableWhenDisabled:!0,native:s,composite:!0}),p=gm({closeOnClick:t,highlighted:o,id:n,nodeId:u,store:r,typingRef:l,itemRef:c,itemMetadata:i}),h=ji.useCallback(S=>wa(p,{onMouseEnter(){i.type===\\\"submenu-trigger\\\"&&i.setActive()}},S,d),[p,d,i]),b=Ha(c,f);return ji.useMemo(()=>({getItemProps:h,itemRef:b}),[h,b])}var ps=v(A(),1);var hm=v(A(),1),MS=hm.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function Gk(){return hm.useContext(MS)}function To(e={}){let{guess:t,label:a,metadata:o,textRef:n,index:r}=e,{register:l,unregister:s,subscribeMapChange:i,nextIndexRef:u}=Gk(),c=ps.useRef(-1),[d,f]=ps.useState(r==null&&t?()=>{if(c.current===-1){let S=u.current;u.current+=1,c.current=S}return c.current}:-1),p=r??d,h=ps.useRef(null),b=ps.useCallback(S=>{let g=h.current;g&&s(g),h.current=S,S&&l(S,{metadata:o??null,index:r??null,label:a,textRef:n})},[r,l,s,o,a,n]);return V(()=>{if(r==null)return i(S=>{let g=h.current?S.get(h.current)?.index:null;g!=null&&f(g)})},[r,i]),{ref:b,index:p}}var xm=v(A(),1);var Xk=0;function wU(e,t=\\\"mui\\\"){let[a,o]=xm.useState(e),n=e||a;return xm.useEffect(()=>{a==null&&(Xk+=1,o(`${t}-${Xk}`))},[a,t]),n}var jk=Gc.useId;function Xo(e,t){if(jk!==void 0){let a=jk();return e??(t?`${t}-${a}`:a)}return wU(e,t)}function lt(e){return Xo(e,\\\"base-ui\\\")}var Yk=\\\"data-checked\\\",Kk=\\\"data-unchecked\\\";var ll={checked(e){return e?{[Yk]:\\\"\\\"}:{[Kk]:\\\"\\\"}},...qi};function de(e,t,a,o){let n=!1,r=!1,l=o??Ae;return{reason:e,event:t??new Event(\\\"base-ui\\\"),cancel(){n=!0},allowPropagation(){r=!0},get isCanceled(){return n},get isPropagationAllowed(){return r},trigger:a,...l}}var Zk=v(O(),1),$k=bm.forwardRef(function(t,a){let{render:o,className:n,id:r,label:l,nativeButton:s=!1,disabled:i=!1,closeOnClick:u=!1,checked:c,defaultChecked:d,onCheckedChange:f,style:p,...h}=t,b=To({guess:!0,label:l}),S=pa(!0),g=lt(r),{store:m}=rt(),x=m.useState(\\\"disabled\\\"),y=i||x,L=m.useState(\\\"isActive\\\",b.index),I=m.useState(\\\"itemProps\\\"),[R,C]=bn({controlled:c,default:d??!1,name:\\\"MenuCheckboxItem\\\",state:\\\"checked\\\"}),{getItemProps:k,itemRef:E}=rl({closeOnClick:u,disabled:y,highlighted:L,id:g,store:m,nativeButton:s,nodeId:S?.context.nodeId,itemMetadata:nl}),T=bm.useMemo(()=>({disabled:y,highlighted:L,checked:R}),[y,L,R]);function w(D){let M=de($.itemPress,D.nativeEvent,void 0,{preventUnmountOnClose:He});f?.(!R,M),!M.isCanceled&&C(_=>!_)}let P=se(\\\"div\\\",t,{state:T,stateAttributesMapping:ll,props:[I,{role:\\\"menuitemcheckbox\\\",\\\"aria-checked\\\":R,onClick:w},h,k],ref:[E,a,b.ref]});return(0,Zk.jsx)(xS.Provider,{value:T,children:P})});var vm=v(A(),1);var OS=v(A(),1);var Qk=v(A(),1);function Yi(e){Qk.useEffect(e,ca)}var ym=null,n7=globalThis.requestAnimationFrame,AS=class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=t=>{this.isScheduled=!1;let a=this.callbacks,o=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,o>0)for(let n=0;n<a.length;n+=1)a[n]?.(t)};request(t){let a=this.nextId;return this.nextId+=1,this.callbacks.push(t),this.callbacksCount+=1,!this.isScheduled&&(requestAnimationFrame(this.tick),this.isScheduled=!0),a}cancel(t){let a=t-this.startId;a<0||a>=this.callbacks.length||this.callbacks[a]!==null&&(this.callbacks[a]=null,this.callbacksCount-=1)}},Sm=new AS;var Eo=class e{static create(){return new e}static request(t){return Sm.request(t)}static cancel(t){return Sm.cancel(t)}currentId=ym;request(t){this.cancel(),this.currentId=Sm.request(()=>{this.currentId=ym,t()})}cancel=()=>{this.currentId!==ym&&(Sm.cancel(this.currentId),this.currentId=ym)};disposeEffect=()=>this.cancel};function so(){let e=We(Eo.create).current;return Yi(e.disposeEffect),e}function Ki(e,t=!1,a=!1,o=!1){let[n,r]=OS.useState(e&&t?\\\"idle\\\":void 0),[l,s]=OS.useState(e&&!o);return e&&!l&&(s(!0),r(\\\"starting\\\")),!e&&l&&n!==\\\"ending\\\"&&!a&&r(\\\"ending\\\"),!e&&!l&&n===\\\"ending\\\"&&r(void 0),V(()=>{if(!e&&l&&n!==\\\"ending\\\"&&a){let i=Eo.request(()=>{r(\\\"ending\\\")});return()=>{Eo.cancel(i)}}},[e,l,n,a]),V(()=>{if(!e||t)return;let i=Eo.request(()=>{r(void 0)});return()=>{Eo.cancel(i)}},[t,e]),V(()=>{if(!e||!t)return;e&&l&&n!==\\\"idle\\\"&&r(\\\"starting\\\");let i=Eo.request(()=>{r(\\\"idle\\\")});return()=>{Eo.cancel(i)}},[t,e,l,n]),{mounted:l,setMounted:s,transitionStatus:n}}var Wk=v(A(),1);var DS=v(Pn(),1);function jo(e){return e==null?e:\\\"current\\\"in e?e.current:e}var Cm=null;function EU(e){if(!Cm){let t=[];Cm=t,queueMicrotask(()=>{Cm=null,DS.flushSync(()=>{for(let a of t)a()})})}Cm.push(e)}function Cn(e,t=!1,a=!1){let o=so();return Z((n,r=null)=>{o.cancel();let l=jo(e);if(l==null)return;let s=l,i=()=>{if(!a){DS.flushSync(n);return}EU(()=>{r?.aborted||n()})};if(typeof s.getAnimations!=\\\"function\\\"||globalThis.BASE_UI_ANIMATIONS_DISABLED){n();return}function u(){Promise.all(s.getAnimations().map(c=>c.finished)).then(()=>{r?.aborted||i()},()=>{if(r?.aborted)return;if(s.getAnimations().some(d=>d.pending||d.playState!==\\\"finished\\\")){u();return}i()})}if(t){let c=Ui;if(!s.hasAttribute(c)){o.request(u);return}let d=new MutationObserver(()=>{s.hasAttribute(c)||(d.disconnect(),u())});d.observe(s,{attributes:!0,attributeFilter:[c]}),r?.addEventListener(\\\"abort\\\",()=>d.disconnect(),{once:!0});return}o.request(u)})}function vn(e){let{enabled:t=!0,open:a,ref:o,batch:n=!1,onComplete:r}=e,l=Z(r),s=Cn(o,a,n);Wk.useEffect(()=>{if(!t)return;let i=new AbortController;return s(l,i.signal),()=>{i.abort()}},[t,a,l,s])}var Jk=vm.forwardRef(function(t,a){let{render:o,className:n,style:r,keepMounted:l=!1,...s}=t,i=Ok(),u=vm.useRef(null),{transitionStatus:c,mounted:d,setMounted:f}=Ki(i.checked);vn({batch:!0,enabled:!i.checked,open:i.checked,ref:u,onComplete(){i.checked||f(!1)}});let p={checked:i.checked,disabled:i.disabled,highlighted:i.highlighted,transitionStatus:c};return se(\\\"span\\\",t,{state:p,ref:[a,u],stateAttributesMapping:ll,props:{\\\"aria-hidden\\\":!0,...s},enabled:l||d})});var Rm=v(A(),1);var Lm=v(A(),1),Xc=Lm.createContext(void 0);function eM(){let e=Lm.useContext(Xc);if(e===void 0)throw new Error(Ne(31));return e}var tM=v(O(),1),aM=Rm.forwardRef(function(t,a){let{render:o,className:n,style:r,...l}=t,[s,i]=Rm.useState(void 0),u=se(\\\"div\\\",t,{ref:a,props:{role:\\\"group\\\",\\\"aria-labelledby\\\":s,...l}});return(0,tM.jsx)(Xc.Provider,{value:i,children:u})});var oM=v(A(),1);var nM=oM.forwardRef(function(t,a){let{render:o,className:n,style:r,id:l,...s}=t,i=lt(l),u=eM();return V(()=>(u(i),()=>{u(c=>c===i?void 0:c)}),[u,i]),se(\\\"div\\\",t,{ref:a,props:{id:i,\\\"aria-hidden\\\":!0,...s}})});var rM=v(A(),1);var lM=rM.forwardRef(function(t,a){let{render:o,className:n,id:r,label:l,nativeButton:s=!1,disabled:i=!1,closeOnClick:u=!0,style:c,...d}=t,f=To({guess:!0,label:l}),p=pa(!0),h=lt(r),{store:b}=rt(),S=b.useState(\\\"disabled\\\"),g=i||S,m=b.useState(\\\"isActive\\\",f.index),x=b.useState(\\\"itemProps\\\"),{getItemProps:y,itemRef:L}=rl({closeOnClick:u,disabled:g,highlighted:m,id:h,store:b,nativeButton:s,nodeId:p?.context.nodeId,itemMetadata:nl});return se(\\\"div\\\",t,{state:{disabled:g,highlighted:m},props:[x,d,y],ref:[L,a,f.ref]})});var Im=v(A(),1);var sM=Im.forwardRef(function(t,a){let{render:o,className:n,id:r,label:l,closeOnClick:s=!1,style:i,...u}=t,c=Im.useRef(null),d=To({guess:!0,label:l}),p=pa(!0)?.context.nodeId,h=lt(r),{store:b}=rt(),S=b.useState(\\\"isActive\\\",d.index),g=b.useState(\\\"itemProps\\\"),m=b.context.typingRef,{getButtonProps:x,buttonRef:y}=Ta({native:!1,composite:!0}),L=gm({closeOnClick:s,highlighted:S,id:h,nodeId:p,store:b,typingRef:m,itemRef:c,itemMetadata:nl});function I(C){return wa(L,C,x)}return se(\\\"a\\\",t,{state:{highlighted:S},props:[g,u,I],ref:[c,y,a,d.ref]})});var vg=v(A(),1);var jc=0,Ua=class e{static create(){return new e}currentId=jc;start(t,a){this.clear(),this.currentId=setTimeout(()=>{this.currentId=jc,a()},t)}isStarted(){return this.currentId!==jc}clear=()=>{this.currentId!==jc&&(clearTimeout(this.currentId),this.currentId=jc)};disposeEffect=()=>this.clear};function Mt(){let e=We(Ua.create).current;return Yi(e.disposeEffect),e}function qa(e){e.preventDefault(),e.stopPropagation()}function iM(e){return\\\"nativeEvent\\\"in e}function Zi(e){return e.pointerType===\\\"\\\"&&e.isTrusted?!0:Ke.os.android&&e.pointerType?e.type===\\\"click\\\"&&e.buttons===1:e.detail===0&&!e.pointerType}function $i(e){return Ke.env.jsdom?!1:!Ke.os.android&&e.width===0&&e.height===0||Ke.os.android&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType===\\\"mouse\\\"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType===\\\"touch\\\"}function tr(e,t){let a=[\\\"mouse\\\",\\\"pen\\\"];return t||a.push(\\\"\\\",void 0),a.includes(e)}function uM(e){let t=e.type;return t===\\\"click\\\"||t===\\\"mousedown\\\"||t===\\\"keydown\\\"||t===\\\"keyup\\\"}function Vt(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function ie(e,t){if(!e||!t)return!1;let a=t.getRootNode?.();if(e.contains(t))return!0;if(a&&yn(a)){let o=t;for(;o;){if(e===o)return!0;o=o.parentNode||o.host}}return!1}function ft(e){return\\\"composedPath\\\"in e?e.composedPath()[0]??e.target:e.target}var Yc=\\\"data-base-ui-focusable\\\";var PS=\\\"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\\\",Kc=\\\"ArrowLeft\\\",Zc=\\\"ArrowRight\\\",NS=\\\"ArrowUp\\\",wm=\\\"ArrowDown\\\";var rX=rm.popupOpen,BS=\\\"data-trigger-disabled\\\";function sl(e,t){if(!ke(e))return!1;let a=e;if(t.hasElement(a))return!a.hasAttribute(BS);for(let[,o]of t.entries())if(ie(o,a))return!o.hasAttribute(BS);return!1}function Tm(e,t){if(t==null)return!1;if(\\\"composedPath\\\"in e)return e.composedPath().includes(t);let a=e;return a.target!=null&&t.contains(a.target)}function cM(e){return e.matches(\\\"html,body\\\")}function ms(e){return Be(e)&&e.matches(PS)}function _S(e){return e?.closest(`button,a[href],[role=\\\"button\\\"],select,[tabindex]:not([tabindex=\\\"-1\\\"]),${PS}`)!=null}function $c(e){return e?e.getAttribute(\\\"role\\\")===\\\"combobox\\\"&&ms(e):!1}function fM(e){if(!e||Ke.env.jsdom)return!0;try{return e.matches(\\\":focus-visible\\\")}catch{return!0}}function Qc(e){return e?e.hasAttribute(Yc)?e:e.querySelector(`[${Yc}]`)||e:null}function MU(e,t){return t!=null&&!tr(t)?0:typeof e==\\\"function\\\"?e():e}function Wc(e,t,a){let o=MU(e,a);return typeof o==\\\"number\\\"?o:o?.[t]}function FS(e){return typeof e==\\\"function\\\"?e():e}function Em(e,t){return t||e===\\\"click\\\"||e===\\\"mousedown\\\"}function dM(e){return e?.includes(\\\"mouse\\\")&&e!==\\\"mousedown\\\"}var xa=v(A(),1);function we(e,t,a,o){return e.addEventListener(t,a,o),()=>{e.removeEventListener(t,a,o)}}function ma(...e){return()=>{for(let t=0;t<e.length;t+=1){let a=e[t];a&&a()}}}function Rt(e){let t=We(AU,e).current;return t.next=e,V(t.effect),t}function AU(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}var Mm=v(A(),1);var pM={clipPath:\\\"inset(50%)\\\",overflow:\\\"hidden\\\",whiteSpace:\\\"nowrap\\\",border:0,padding:0,width:1,height:1,margin:-1},km={...pM,position:\\\"fixed\\\",top:0,left:0},mM={...pM,position:\\\"absolute\\\"};var gM=v(O(),1),ar=Mm.forwardRef(function(t,a){let[o,n]=Mm.useState();return V(()=>{Ke.screenReader.voiceOver&&Ke.engine.webkit&&n(\\\"button\\\")},[]),(0,gM.jsx)(\\\"span\\\",{...t,ref:a,style:km,\\\"aria-hidden\\\":o?void 0:!0,...{tabIndex:0,role:o},\\\"data-base-ui-focus-guard\\\":\\\"\\\"})});var il=Math.min,Yo=Math.max,ul=Math.round,ef=Math.floor,Ln=e=>({x:e,y:e}),OU={left:\\\"right\\\",right:\\\"left\\\",bottom:\\\"top\\\",top:\\\"bottom\\\"};function Om(e,t,a){return Yo(e,il(t,a))}function Rn(e,t){return typeof e==\\\"function\\\"?e(t):e}function ga(e){return e.split(\\\"-\\\")[0]}function ko(e){return e.split(\\\"-\\\")[1]}function Dm(e){return e===\\\"x\\\"?\\\"y\\\":\\\"x\\\"}function tf(e){return e===\\\"y\\\"?\\\"height\\\":\\\"width\\\"}function Va(e){let t=e[0];return t===\\\"t\\\"||t===\\\"b\\\"?\\\"y\\\":\\\"x\\\"}function af(e){return Dm(Va(e))}function bM(e,t,a){a===void 0&&(a=!1);let o=ko(e),n=af(e),r=tf(n),l=n===\\\"x\\\"?o===(a?\\\"end\\\":\\\"start\\\")?\\\"right\\\":\\\"left\\\":o===\\\"start\\\"?\\\"bottom\\\":\\\"top\\\";return t.reference[r]>t.floating[r]&&(l=Jc(l)),[l,Jc(l)]}function yM(e){let t=Jc(e);return[Am(e),t,Am(t)]}function Am(e){return e.includes(\\\"start\\\")?e.replace(\\\"start\\\",\\\"end\\\"):e.replace(\\\"end\\\",\\\"start\\\")}var hM=[\\\"left\\\",\\\"right\\\"],xM=[\\\"right\\\",\\\"left\\\"],DU=[\\\"top\\\",\\\"bottom\\\"],PU=[\\\"bottom\\\",\\\"top\\\"];function NU(e,t,a){switch(e){case\\\"top\\\":case\\\"bottom\\\":return a?t?xM:hM:t?hM:xM;case\\\"left\\\":case\\\"right\\\":return t?DU:PU;default:return[]}}function SM(e,t,a,o){let n=ko(e),r=NU(ga(e),a===\\\"start\\\",o);return n&&(r=r.map(l=>l+\\\"-\\\"+n),t&&(r=r.concat(r.map(Am)))),r}function Jc(e){let t=ga(e);return OU[t]+e.slice(t.length)}function BU(e){var t,a,o,n;return{top:(t=e.top)!=null?t:0,right:(a=e.right)!=null?a:0,bottom:(o=e.bottom)!=null?o:0,left:(n=e.left)!=null?n:0}}function Pm(e){return typeof e!=\\\"number\\\"?BU(e):{top:e,right:e,bottom:e,left:e}}function gs(e){let{x:t,y:a,width:o,height:n}=e;return{width:o,height:n,top:a,left:t,right:t+o,bottom:a+n,x:t,y:a}}function cl(e,t){return t<0||t>=e.length}function hs(e,t){return Mo(e.current,{disabledIndices:t})}function Qi(e,t){return Mo(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function Mo(e,{startingIndex:t=-1,decrement:a=!1,disabledIndices:o,amount:n=1}={}){let r=t;do r+=a?-n:n;while(r>=0&&r<=e.length-1&&or(e,r,o));return r}function or(e,t,a){if(typeof a==\\\"function\\\"?a(t):a?.includes(t)??!1)return!0;let n=e[t];return n?!xs(n)||n.matches(\\\":disabled\\\")?!0:!a&&(n.hasAttribute(\\\"disabled\\\")||n.getAttribute(\\\"aria-disabled\\\")===\\\"true\\\"):!1}function _U(e){return e.visibility===\\\"hidden\\\"||e.visibility===\\\"collapse\\\"}function xs(e,t=e?qt(e):null){return!e||!e.isConnected||!t||_U(t)?!1:typeof e.checkVisibility==\\\"function\\\"?e.checkVisibility():t.display!==\\\"none\\\"&&t.display!==\\\"contents\\\"}var FU='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable=\\\"false\\\"]),audio[controls],video[controls]';function HU(e){let t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;let a=e.getRootNode();return yn(a)?a.host:null}function zS(e){for(let t of Array.from(e.children))if(Ot(t)===\\\"summary\\\")return t;return null}function zU(e,t){let a=zS(t);return!!a&&(e===a||ie(a,e))}function CM(e){let t=e?Ot(e):\\\"\\\";return e!=null&&e.matches(FU)&&(t!==\\\"summary\\\"||e.parentElement!=null&&Ot(e.parentElement)===\\\"details\\\"&&zS(e.parentElement)===e)&&(t!==\\\"details\\\"||zS(e)==null)&&(t!==\\\"input\\\"||e.type!==\\\"hidden\\\")}function vM(e){if(!CM(e)||!e.isConnected||e.matches(\\\":disabled\\\"))return!1;for(let t=e;t;t=HU(t)){let a=t!==e,o=Ot(t)===\\\"slot\\\";if(t.hasAttribute(\\\"inert\\\")||a&&Ot(t)===\\\"details\\\"&&!t.open&&!zU(e,t)||t.hasAttribute(\\\"hidden\\\")||!o&&!UU(t,a))return!1}return!0}function UU(e,t){let a=qt(e);return t?a.display!==\\\"none\\\":xs(e,a)}function LM(e){let t=e.tabIndex;if(t<0){let a=Ot(e);if(a===\\\"details\\\"||a===\\\"audio\\\"||a===\\\"video\\\"||Be(e)&&e.isContentEditable)return 0}return t}function HS(e){if(Ot(e)!==\\\"input\\\")return null;let t=e;return t.type===\\\"radio\\\"&&t.name!==\\\"\\\"?t:null}function qU(e,t){let a=HS(e);if(!a)return!0;let o=t.find(n=>{let r=HS(n);return r?.name===a.name&&r.form===a.form&&r.checked});return o?o===a:t.find(n=>{let r=HS(n);return r?.name===a.name&&r.form===a.form})===a}function RM(e){if(Be(e)&&Ot(e)===\\\"slot\\\"){let t=e.assignedElements({flatten:!0});if(t.length>0)return t}return Be(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function IM(e,t){RM(e).forEach(a=>{CM(a)&&t.push(a),IM(a,t)})}function wM(e,t,a){RM(e).forEach(o=>{Be(o)&&o.matches(t)&&a.push(o),wM(o,t,a)})}function Nm(e){return vM(e)&&LM(e)>=0}function US(e){let t=[];return IM(e,t),t.filter(vM)}function Wi(e){let t=US(e);return t.filter(a=>LM(a)>=0&&qU(a,t))}function TM(e,t){let a=Wi(e),o=a.length;if(o===0)return;let n=Vt(Ce(e)),r=a.indexOf(n),l=r===-1?t===1?0:o-1:r+t;return a[l]}function Ji(e){return TM(Ce(e).body,1)||e}function Bm(e){return TM(Ce(e).body,-1)||e}function EM(e,t){if(!e)return null;let a=Wi(Ce(e).body),o=a.length;if(o===0)return null;let n=a.indexOf(e);if(n===-1)return null;let r=(n+t+o)%o;return a[r]}function kM(e){return EM(e,1)}function MM(e){return EM(e,-1)}function nr(e,t){let a=t||e.currentTarget,o=e.relatedTarget;return!o||!ie(a,o)}function AM(e){Wi(e).forEach(a=>{a.dataset.tabindex=a.getAttribute(\\\"tabindex\\\")||\\\"\\\",a.setAttribute(\\\"tabindex\\\",\\\"-1\\\")})}function qS(e){let t=[];wM(e,\\\"[data-tabindex]\\\",t),t.forEach(a=>{let o=a.dataset.tabindex;delete a.dataset.tabindex,o?a.setAttribute(\\\"tabindex\\\",o):a.removeAttribute(\\\"tabindex\\\")})}function Ao(e,t,a=!0){return e.filter(n=>n.parentId===t).flatMap(n=>[...!a||n.context?.open?[n]:[],...Ao(e,n.id,a)])}function VS(e,t){let a=[],o=e.find(n=>n.id===t)?.parentId;for(;o;){let n=e.find(r=>r.id===o);o=n?.parentId,n&&(a=a.concat(n))}return a}function rr(e){return`data-base-ui-${e}`}var _m=0;function eu(e,t={}){let{preventScroll:a=!1,sync:o=!1,shouldFocus:n}=t;cancelAnimationFrame(_m);function r(){n&&!n()||e?.focus({preventScroll:a})}if(o)return r(),He;let l=requestAnimationFrame(r);return _m=l,()=>{_m===l&&(cancelAnimationFrame(l),_m=0)}}var GS={inert:new WeakMap,\\\"aria-hidden\\\":new WeakMap},OM=\\\"data-base-ui-inert\\\",jS={inert:new WeakSet,\\\"aria-hidden\\\":new WeakSet},of=new WeakMap,XS=0;function VU(e){return jS[e]}function BM(e){return e?yn(e)?e.host:BM(e.parentNode):null}var DM=(e,t)=>t.map(a=>{if(e.contains(a))return a;let o=BM(a);return e.contains(o)?o:null}).filter(a=>a!=null),PM=e=>{let t=new Set;return e.forEach(a=>{let o=a;for(;o&&!t.has(o);)t.add(o),o=o.parentNode}),t},NM=(e,t,a)=>{let o=[],n=r=>{!r||a.has(r)||Array.from(r.children).forEach(l=>{Ot(l)!==\\\"script\\\"&&(t.has(l)?n(l):o.push(l))})};return n(e),o};function GU(e,t,a,o,{mark:n=!0}){let r=null;o?r=\\\"inert\\\":a&&(r=\\\"aria-hidden\\\");let l=null,s=null,i=DM(t,e),u=n?NM(t,PM(i),new Set(i)):[],c=[],d=[];if(r){let f=GS[r],p=VU(r);s=p,l=f;let h=DM(t,Array.from(t.querySelectorAll(\\\"[aria-live]\\\"))),b=i.concat(h);NM(t,PM(b),new Set(b)).forEach(g=>{let m=g.getAttribute(r),x=m!==null&&m!==\\\"false\\\",y=(f.get(g)||0)+1;f.set(g,y),c.push(g),y===1&&x&&p.add(g),x||g.setAttribute(r,r===\\\"inert\\\"?\\\"\\\":\\\"true\\\")})}return n&&u.forEach(f=>{let p=(of.get(f)||0)+1;of.set(f,p),d.push(f),p===1&&f.setAttribute(OM,\\\"\\\")}),XS+=1,()=>{l&&c.forEach(f=>{let h=(l.get(f)||0)-1;l.set(f,h),h||(!s?.has(f)&&r&&f.removeAttribute(r),s?.delete(f))}),n&&d.forEach(f=>{let p=(of.get(f)||0)-1;of.set(f,p),p||f.removeAttribute(OM)}),XS-=1,XS||(GS.inert=new WeakMap,GS[\\\"aria-hidden\\\"]=new WeakMap,jS.inert=new WeakSet,jS[\\\"aria-hidden\\\"]=new WeakSet,of=new WeakMap)}}function YS(e,t={}){let{ariaHidden:a=!1,inert:o=!1,mark:n=!0}=t,r=Ce(e[0]).body;return GU(e,r,a,o,{mark:n})}var xt=v(A(),1),KS=v(Pn(),1);var _M={style:{transition:\\\"none\\\"}},Fm=\\\"data-base-ui-click-trigger\\\",XU=\\\"data-base-ui-swipe-ignore\\\",jU=\\\"data-swipe-ignore\\\",HX=`[${XU}]`,zX=`[${jU}]`,FM={fallbackAxisSide:\\\"none\\\"},HM={fallbackAxisSide:\\\"end\\\"},zM={clipPath:\\\"inset(50%)\\\",position:\\\"fixed\\\",top:0,left:0};var bs=v(O(),1),UM=xt.createContext(null),ZS=()=>xt.useContext(UM),YU=rr(\\\"portal\\\");function qM(e={}){let{ref:t,container:a,componentProps:o=Ae,elementProps:n}=e,r=Xo(),s=ZS()?.portalNode,[i,u]=xt.useState(null),[c,d]=xt.useState(null),f=Z(S=>{S!==null&&d(S)}),p=xt.useRef(null);V(()=>{if(a===null){p.current&&(p.current=null,d(null),u(null));return}let S=(a&&(cm(a)?a:a.current))??s??document.body;if(S==null){p.current&&(p.current=null,d(null),u(null));return}p.current!==S&&(p.current=S,d(null),u(S))},[a,s]);let h=se(\\\"div\\\",o,{ref:[t,f],props:[{id:r,[YU]:\\\"\\\"},n]}),b=i&&h?KS.createPortal(h,i):null;return{node:c,nodeId:xt.isValidElement(h)?h.props.id:void 0,subtree:b}}var nf=xt.forwardRef(function(t,a){let{render:o,className:n,style:r,children:l,container:s,portalOwnerRole:i,...u}=t,{node:c,nodeId:d,subtree:f}=qM({container:s,ref:a,componentProps:t,elementProps:u}),p=xt.useRef(null),h=xt.useRef(null),b=xt.useRef(null),S=xt.useRef(null),[g,m]=xt.useState(null),x=xt.useRef(!1),y=g?.modal,L=g?.open,I=!!g&&!g.modal&&g.open&&!!c;xt.useEffect(()=>{if(!c||y)return;function C(k){c&&k.relatedTarget&&nr(k)&&(k.type===\\\"focusin\\\"?x.current&&(qS(c),x.current=!1):(AM(c),x.current=!0))}return ma(we(c,\\\"focusin\\\",C,!0),we(c,\\\"focusout\\\",C,!0))},[c,y]),V(()=>{!c||L!==!0||!x.current||(qS(c),x.current=!1)},[L,c]);let R=xt.useMemo(()=>({beforeOutsideRef:p,afterOutsideRef:h,beforeInsideRef:b,afterInsideRef:S,portalNode:c,setFocusManagerState:m}),[c]);return(0,bs.jsxs)(xt.Fragment,{children:[f,(0,bs.jsxs)(UM.Provider,{value:R,children:[I&&c&&(0,bs.jsx)(ar,{\\\"data-type\\\":\\\"outside\\\",ref:p,onFocus:C=>{if(nr(C,c))b.current?.focus();else{let k=g?g.domReference:null;Bm(k)?.focus()}}}),I&&c&&(0,bs.jsx)(\\\"span\\\",{role:i,\\\"aria-owns\\\":d,style:zM}),c&&KS.createPortal(l,c),I&&c&&(0,bs.jsx)(ar,{\\\"data-type\\\":\\\"outside\\\",ref:h,onFocus:C=>{if(nr(C,c))S.current?.focus();else{let k=g?g.domReference:null;Ji(k)?.focus(),g?.closeOnFocusOut&&g?.onOpenChange(!1,de($.focusOut,C.nativeEvent))}}})]})]})});var dl=v(A(),1);function Hm(){let e=new Map;return{emit(t,a){e.get(t)?.forEach(o=>o(a))},on(t,a){e.has(t)||e.set(t,new Set),e.get(t).add(a)},off(t,a){e.get(t)?.delete(a)}}}var fl=class{nodesRef={current:[]};events=Hm();addNode(t){this.nodesRef.current.push(t)}removeNode(t){let a=this.nodesRef.current.findIndex(o=>o===t);a!==-1&&this.nodesRef.current.splice(a,1)}};var $S=v(O(),1),VM=dl.createContext(null),GM=dl.createContext(null),io=()=>dl.useContext(VM)?.id||null,ha=e=>{let t=dl.useContext(GM);return e??t};function rf(e){let t=Xo(),a=ha(e),o=io();return V(()=>{if(!t)return;let n={id:t,parentId:o};return a?.addNode(n),()=>{a?.removeNode(n)}},[a,t,o]),t}function QS(e){let{children:t,id:a}=e,o=io();return(0,$S.jsx)(VM.Provider,{value:dl.useMemo(()=>({id:a,parentId:o}),[a,o]),children:t})}function WS(e){let{children:t,externalTree:a}=e,o=We(()=>a??new fl).current;return(0,$S.jsx)(GM.Provider,{value:o,children:t})}var lf=v(O(),1);function KU(e,t){let a=Ye(ft(e));return e instanceof a.KeyboardEvent?\\\"keyboard\\\":e instanceof a.FocusEvent?t||\\\"keyboard\\\":\\\"pointerType\\\"in e?e.pointerType||\\\"keyboard\\\":\\\"touches\\\"in e?\\\"touch\\\":e instanceof a.MouseEvent?t||(e.detail===0?\\\"keyboard\\\":\\\"mouse\\\"):\\\"\\\"}var XM=20,pl=[];function JS(){pl=pl.filter(e=>e.deref()?.isConnected)}function jM(e){JS(),e&&Ot(e)!==\\\"body\\\"&&(pl.push(new WeakRef(e)),pl.length>XM&&(pl=pl.slice(-XM)))}function YM(){return JS(),pl[pl.length-1]?.deref()}function ZU(e){return e?Nm(e)?e:Wi(e)[0]||e:null}function KM(e){if(e.hasAttribute(\\\"tabindex\\\")&&!e.hasAttribute(\\\"data-tabindex\\\")||!e.getAttribute(\\\"role\\\")?.includes(\\\"dialog\\\"))return;let a=US(e).filter(n=>{let r=n.getAttribute(\\\"data-tabindex\\\")||\\\"\\\";return Nm(n)||n.hasAttribute(\\\"data-tabindex\\\")&&!r.startsWith(\\\"-\\\")}),o=e.getAttribute(\\\"tabindex\\\");a.length===0?o!==\\\"0\\\"&&(e.setAttribute(\\\"tabindex\\\",\\\"0\\\"),e.setAttribute(\\\"data-tabindex\\\",\\\"0\\\")):(o!==\\\"-1\\\"||e.hasAttribute(\\\"data-tabindex\\\")&&e.getAttribute(\\\"data-tabindex\\\")!==\\\"-1\\\")&&(e.setAttribute(\\\"tabindex\\\",\\\"-1\\\"),e.setAttribute(\\\"data-tabindex\\\",\\\"-1\\\"))}function sf(e){let{context:t,children:a,disabled:o=!1,initialFocus:n=!0,returnFocus:r=!0,restoreFocus:l=!1,modal:s=!0,closeOnFocusOut:i=!0,openInteractionType:u=\\\"\\\",nextFocusableElement:c,previousFocusableElement:d,beforeContentFocusGuardRef:f,externalTree:p,getInsideElements:h}=e,b=\\\"rootStore\\\"in t?t.rootStore:t,S=b.useState(\\\"open\\\"),g=b.useState(\\\"domReferenceElement\\\"),m=b.useState(\\\"floatingElement\\\"),{events:x,dataRef:y}=b.context,L=Z(()=>y.current.floatingContext?.nodeId),I=n===!1,R=$c(g)&&I,C=Rt(n),k=Rt(r),E=Rt(u),T=Rt(S),w=ha(p),P=ZS(),D=xa.useRef(!1),M=xa.useRef(!1),_=xa.useRef(!1),U=xa.useRef(null),B=xa.useRef(\\\"\\\"),z=xa.useRef(\\\"\\\"),N=xa.useRef(null),j=xa.useRef(null),ae=Ha(N,f,P?.beforeInsideRef),oe=Ha(j,P?.afterInsideRef),q=Mt(),Y=Mt(),G=so(),xe=P!=null,Q=Qc(m),W=Z((ee=Q)=>ee?Wi(ee):[]),ge=Z(()=>h?.().filter(ee=>ee!=null)??[]);xa.useEffect(()=>{if(o||!s)return;function ee(me){me.key===\\\"Tab\\\"&&ie(Q,Vt(Ce(Q)))&&W().length===0&&!R&&qa(me)}let be=Ce(Q);return we(be,\\\"keydown\\\",ee)},[o,Q,s,R,W]),xa.useEffect(()=>{if(o||!S)return;let ee=Ce(Q);function be(){_.current=!1}function me(Ee){let le=ft(Ee),Te=ge(),ue=ie(m,le)||ie(g,le)||ie(P?.portalNode,le)||Te.some(ce=>ce===le||ie(ce,le));_.current=!ue,z.current=Ee.pointerType||\\\"keyboard\\\",le?.closest(`[${Fm}]`)&&(M.current=!0,Y.start(0,()=>{M.current=!1}))}function Le(){z.current=\\\"keyboard\\\"}return ma(we(ee,\\\"pointerdown\\\",me,!0),we(ee,\\\"pointerup\\\",be,!0),we(ee,\\\"pointercancel\\\",be,!0),we(ee,\\\"keydown\\\",Le,!0),be)},[o,m,g,Q,S,P,Y,ge]),xa.useEffect(()=>{if(o||!i)return;let ee=Ce(Q);function be(){M.current=!0,Y.start(0,()=>{M.current=!1})}function me(Te){let ue=ft(Te);Nm(ue)&&(U.current=ue)}function Le(Te){let ue=Te.relatedTarget,ce=Te.currentTarget,pe=ft(Te);s&&ue==null&&pe!=null&&ie(m,pe)&&jM(pe),queueMicrotask(()=>{let Ve=L(),wt=b.context.triggerElements,te=ge(),fe=ue?.hasAttribute(rr(\\\"focus-guard\\\"))&&[N.current,j.current,P?.beforeInsideRef.current,P?.afterInsideRef.current,P?.beforeOutsideRef.current,P?.afterOutsideRef.current,jo(d),jo(c)].includes(ue),K=!(ie(g,ue)||ie(m,ue)||ie(ue,m)||ie(P?.portalNode,ue)||te.some(H=>H===ue||ie(H,ue))||wt.hasMatchingElement(H=>ie(H,ue))||fe||w&&(Ao(w.nodesRef.current,Ve).find(H=>ie(H.context?.elements.floating,ue)||ie(H.context?.elements.domReference,ue))||VS(w.nodesRef.current,Ve).find(H=>[H.context?.elements.floating,Qc(H.context?.elements.floating)].includes(ue)||H.context?.elements.domReference===ue)));if(ce===g&&Q&&KM(Q),l&&ce!==g&&!xs(pe)&&Vt(ee)===ee.body){if(Be(Q)&&(Q.focus(),l===\\\"popup\\\")){G.request(()=>{Q.focus()});return}let H=W(),X=U.current,Re=(X&&H.includes(X)?X:null)||H[H.length-1]||Q;Be(Re)&&Re.focus()}if(y.current.insideReactTree){y.current.insideReactTree=!1;return}(R||!s)&&ue&&K&&!M.current&&(R||ue!==YM())&&(D.current=!0,b.setOpen(!1,de($.focusOut,Te)))})}function Ee(){_.current||(y.current.insideReactTree=!0,q.start(0,()=>{y.current.insideReactTree=!1}))}let le=Be(g)?g:null;if(!(!m&&!le))return ma(le&&we(le,\\\"focusout\\\",Le),le&&we(le,\\\"pointerdown\\\",be),m&&we(m,\\\"focusin\\\",me),m&&we(m,\\\"focusout\\\",Le),m&&P&&we(m,\\\"focusout\\\",Ee,!0))},[o,g,m,Q,s,w,P,b,i,l,W,R,L,y,q,Y,G,c,d,ge]),xa.useEffect(()=>{if(o||!m||!S)return;let ee=Array.from(P?.portalNode?.querySelectorAll(`[${rr(\\\"portal\\\")}]`)||[]),me=(w?VS(w.nodesRef.current,L()):[]).find(ce=>$c(ce.context?.elements.domReference||null))?.context?.elements.domReference,Ee=[...[m,...ee,N.current,j.current,P?.beforeOutsideRef.current,P?.afterOutsideRef.current,...ge()],me,jo(d),jo(c),R?g:null].filter(ce=>ce!=null),le=YS(Ee,{ariaHidden:s||R,mark:!1}),Te=[m,...ee].filter(ce=>ce!=null),ue=YS(Te);return()=>{ue(),le()}},[S,o,g,m,s,P,R,w,L,c,d,ge]),V(()=>{if(!S||o||!Be(Q))return;B.current=\\\"\\\",z.current=\\\"\\\";let ee=Ce(Q),be=Vt(ee);queueMicrotask(()=>{let me=C.current,Le=typeof me==\\\"function\\\"?me(E.current||\\\"\\\"):me;if(Le===void 0||Le===!1||ie(Q,be))return;let le=null,Te=()=>(le==null&&(le=W(Q)),le[0]||Q),ue;Le===!0||Le===null?ue=Te():ue=jo(Le),ue=ue||Te();let ce=ie(Q,Vt(ee));eu(ue,{preventScroll:ue===Q,shouldFocus(){if(!T.current)return!1;if(ce)return!0;let pe=Vt(ee);return!(pe!==ue&&ie(Q,pe))}})})},[o,S,Q,W,C,E,T]),V(()=>{if(o||!Q)return;let ee=Ce(Q),be=Vt(ee),me=E.current==null;jM(be);function Le(le){if(le.open||(B.current=KU(le.nativeEvent,z.current)),le.reason===$.triggerHover&&le.nativeEvent.type===\\\"mouseleave\\\"&&(D.current=!0),le.reason===$.outsidePress)if(le.nested)D.current=!1;else if(Zi(le.nativeEvent)||$i(le.nativeEvent))D.current=!1;else{let Te=!1;Ce(Q).createElement(\\\"div\\\").focus({get preventScroll(){return Te=!0,!1}}),Te?D.current=!1:D.current=!0}}x.on(\\\"openchange\\\",Le);function Ee(le){let Te=k.current,ue=typeof Te==\\\"function\\\"?Te(le):Te;if(ue===void 0||ue===!1)return null;ue===null&&(ue=!0);let ce=g?.isConnected?g:null,pe=be?.isConnected&&Ot(be)!==\\\"body\\\"?be:null,Ve=me?pe||ce:ce||pe;return Ve||(Ve=YM()||null),typeof ue==\\\"boolean\\\"?Ve:jo(ue)||Ve||null}return()=>{x.off(\\\"openchange\\\",Le);let le=Vt(ee),Te=ge(),ue=ie(m,le)||Te.some(wt=>wt===le||ie(wt,le))||w&&Ao(w.nodesRef.current,L(),!1).some(wt=>ie(wt.context?.elements.floating,le)),ce=k.current,pe=B.current,Ve=Ee(pe);queueMicrotask(()=>{let wt=ZU(Ve),te=typeof ce!=\\\"boolean\\\";if(ce&&!D.current&&Be(wt)&&(!(!te&&wt!==le&&le!==ee.body)||ue)){let fe={preventScroll:!0};pe===\\\"keyboard\\\"&&(fe.focusVisible=!0),wt.focus(fe)}D.current=!1})}},[o,m,Q,k,E,x,w,g,L,ge]),V(()=>{if(!Ke.engine.webkit||S||!m)return;let ee=Vt(Ce(m));!Be(ee)||!ms(ee)||ie(m,ee)&&ee.blur()},[S,m]),V(()=>{if(!(o||!P))return P.setFocusManagerState({modal:s,closeOnFocusOut:i,open:S,onOpenChange:b.setOpen,domReference:g}),()=>{P.setFocusManagerState(null)}},[o,P,s,S,b,i,g]),V(()=>{if(!(o||!Q))return KM(Q),()=>{queueMicrotask(JS)}},[o,Q]);let ye=!o&&(s?!R:!0)&&(xe||s);return(0,lf.jsxs)(xa.Fragment,{children:[ye&&(0,lf.jsx)(ar,{\\\"data-type\\\":\\\"inside\\\",ref:ae,onFocus:ee=>{if(s){let be=W();eu(be[be.length-1])}else P?.portalNode&&(D.current=!1,nr(ee,P.portalNode)?Ji(g)?.focus():jo(d??P.beforeOutsideRef)?.focus())}}),a,ye&&(0,lf.jsx)(ar,{\\\"data-type\\\":\\\"inside\\\",ref:oe,onFocus:ee=>{s?eu(W()[0]):P?.portalNode&&(i&&(D.current=!0),nr(ee,P.portalNode)?Bm(g)?.focus():jo(c??P.afterOutsideRef)?.focus())}})]})}var uf=v(A(),1);function ys(e,t={}){let{enabled:a=!0,event:o=\\\"click\\\",toggle:n=!0,ignoreMouse:r=!1,stickIfOpen:l=!0,touchOpenDelay:s=0,reason:i=$.triggerPress}=t,u=\\\"rootStore\\\"in e?e.rootStore:e,c=u.context.dataRef,d=uf.useRef(void 0),f=so(),p=Mt(),h=uf.useMemo(()=>{function b(g,m,x,y){let L=de(i,m,x);g&&y===\\\"touch\\\"&&s>0?p.start(s,()=>{u.setOpen(!0,L)}):u.setOpen(g,L)}function S(g,m,x){let y=c.current.openEvent,L=u.select(\\\"domReferenceElement\\\")!==m;return g&&L||!g||!n?!0:y&&l?!x(y.type):!1}return{onPointerDown(g){d.current=tr(g.pointerType,!0)&&$i(g.nativeEvent)?\\\"virtual\\\":g.pointerType},onMouseDown(g){let m=d.current,x=g.nativeEvent,y=u.select(\\\"open\\\");if(g.button!==0||o===\\\"click\\\"||tr(m,!0)&&r)return;let L=S(y,g.currentTarget,C=>C===\\\"click\\\"||C===\\\"mousedown\\\"),I=ft(x);if(ms(I)){b(L,x,I,m);return}let R=g.currentTarget;f.request(()=>{b(L,x,R,m)})},onClick(g){if(o===\\\"mousedown-only\\\")return;let m=d.current;if(o===\\\"mousedown\\\"&&m){d.current=void 0;return}if(tr(m,!0)&&r)return;let x=u.select(\\\"open\\\"),y=S(x,g.currentTarget,L=>L===\\\"click\\\"||L===\\\"mousedown\\\"||L===\\\"keydown\\\"||L===\\\"keyup\\\");b(y,g.nativeEvent,g.currentTarget,m)},onKeyDown(){d.current=void 0}}},[c,o,r,i,u,l,n,f,p,s]);return uf.useMemo(()=>a?{reference:h}:Ae,[a,h])}var Ea=v(A(),1);function $U(){return!1}function QU(e){return{escapeKey:typeof e==\\\"boolean\\\"?e:e?.escapeKey??!1,outsidePress:typeof e==\\\"boolean\\\"?e:e?.outsidePress??!0}}function cf(e,t={}){let{enabled:a=!0,escapeKey:o=!0,outsidePress:n=!0,outsidePressEvent:r=\\\"sloppy\\\",referencePress:l=$U,bubbles:s,externalTree:i}=t,u=\\\"rootStore\\\"in e?e.rootStore:e,c=u.useState(\\\"open\\\"),d=u.useState(\\\"floatingElement\\\"),{dataRef:f,events:p}=u.context,h=ha(i),b=Z(typeof n==\\\"function\\\"?n:()=>!1),S=typeof n==\\\"function\\\"?b:n,g=S!==!1,m=Z(()=>r),{escapeKey:x,outsidePress:y}=QU(s),L=Ea.useRef(!1),I=Ea.useRef(!1),R=Ea.useRef(!1),C=Ea.useRef(!1),k=Ea.useRef(!1),E=Ea.useRef(\\\"\\\"),T=Ea.useRef(null),w=Mt(),P=Mt(),D=Z(()=>{P.clear(),f.current.insideReactTree=!1}),M=Z(q=>{let Y=f.current.floatingContext?.nodeId;return(h?Ao(h.nodesRef.current,Y):[]).some(xe=>xe.context?.open&&!xe.context.dataRef.current[q])}),_=Z(q=>Tm(q,u.select(\\\"floatingElement\\\"))||Tm(q,u.select(\\\"domReferenceElement\\\"))),U=Z(q=>{l()&&u.setOpen(!1,de($.triggerPress,q.nativeEvent))}),B=Z(q=>{if(!c||!a||!o||q.key!==\\\"Escape\\\"||k.current||!x&&M(\\\"__escapeKeyBubbles\\\"))return;let Y=iM(q)?q.nativeEvent:q,G=de($.escapeKey,Y);u.setOpen(!1,G),G.isCanceled||q.preventDefault(),!x&&!G.isPropagationAllowed&&q.stopPropagation()}),z=Z(()=>{f.current.insideReactTree=!0,P.start(0,D)}),N=Z(q=>{if(!c||!a||q.button!==0)return;let Y=ft(q.nativeEvent);ie(u.select(\\\"floatingElement\\\"),Y)&&(L.current||(L.current=!0,I.current=!1))}),j=Z(q=>{!c||!a||(q.defaultPrevented||q.nativeEvent.defaultPrevented)&&L.current&&(I.current=!0)});Ea.useEffect(()=>{function q(Y){Y.open||(C.current=!1)}return p.on(\\\"openchange\\\",q),()=>{p.off(\\\"openchange\\\",q)}},[p]),Ea.useEffect(()=>{if(!c||!a)return c||(C.current=!1),D;f.current.__escapeKeyBubbles=x,f.current.__outsidePressBubbles=y;let q=new Ua,Y=new Ua,G=Ce(d);function xe(){q.clear(),k.current=!0}function Q(){q.start(Ke.engine.webkit?5:0,()=>{k.current=!1})}function W(){R.current=!0,Y.start(0,()=>{R.current=!1})}function ge(){L.current=!1,I.current=!1}function ye(){let K=E.current,H=K===\\\"pen\\\"||!K?\\\"mouse\\\":K,X=m(),Re=typeof X==\\\"function\\\"?X():X;return typeof Re==\\\"string\\\"?Re:Re[H]}function ee(K){let H=ye();return H===\\\"intentional\\\"&&K.type!==\\\"click\\\"||H===\\\"sloppy\\\"&&K.type===\\\"click\\\"}function be(K){let H=f.current.floatingContext?.nodeId,X=h&&Ao(h.nodesRef.current,H).some(Re=>Tm(K,Re.context?.elements.floating));return _(K)||X}function me(K){if(ee(K)){K.type!==\\\"click\\\"&&!_(K)&&(Y.clear(),R.current=!1),D();return}if(f.current.insideReactTree){D();return}let H=ft(K),X=`[${rr(\\\"inert\\\")}]`,Re=ke(H)?H.getRootNode():null,Ga=Array.from((yn(Re)?Re:Ce(u.select(\\\"floatingElement\\\"))).querySelectorAll(X)),Zo=u.context.triggerElements;if(H&&(Zo.hasElement(H)||Zo.hasMatchingElement(he=>ie(he,H))))return;let Xa=ke(H)?H:null;for(;Xa&&!wo(Xa);){let he=Io(Xa);if(wo(he)||!ke(he))break;Xa=he}if(!(Ga.length&&ke(H)&&!cM(H)&&!ie(H,u.select(\\\"floatingElement\\\"))&&Ga.every(he=>!ie(Xa,he)))){if(Be(H)&&!(\\\"touches\\\"in K)){let he=wo(H),dt=qt(H),Tt=/auto|scroll/,$o=he||Tt.test(dt.overflowX),cr=he||Tt.test(dt.overflowY),Ll=$o&&H.clientWidth>0&&H.scrollWidth>H.clientWidth,As=cr&&H.clientHeight>0&&H.scrollHeight>H.clientHeight,Qo=dt.direction===\\\"rtl\\\",Df=As&&(Qo?K.offsetX<=H.offsetWidth-H.clientWidth:K.offsetX>H.clientWidth),Xe=Ll&&K.offsetY>H.clientHeight;if(Df||Xe)return}if(!be(K)){if(ye()===\\\"intentional\\\"){if(K.detail!==0&&!Zi(K)&&!C.current)return;if(R.current){Y.clear(),R.current=!1;return}}typeof S==\\\"function\\\"&&!S(K)||M(\\\"__outsidePressBubbles\\\")||(u.setOpen(!1,de($.outsidePress,K)),D())}}}function Le(K){ye()!==\\\"sloppy\\\"||K.pointerType===\\\"touch\\\"||!u.select(\\\"open\\\")||!a||_(K)||me(K)}function Ee(K){if(ye()!==\\\"sloppy\\\"||!u.select(\\\"open\\\")||!a||_(K))return;let H=K.touches[0];H&&(T.current={startTime:Date.now(),startX:H.clientX,startY:H.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},w.start(1e3,()=>{T.current&&(T.current.dismissOnTouchEnd=!1,T.current.dismissOnMouseDown=!1)}))}function le(K,H){let X=ft(K);if(!X)return;let Re=we(X,K.type,()=>{H(K),Re()})}function Te(K){E.current=\\\"touch\\\",le(K,Ee)}function ue(K){w.clear(),K.type===\\\"pointerdown\\\"&&(K.button===0&&(C.current=!0),E.current=K.pointerType),!(K.type===\\\"mousedown\\\"&&T.current&&!T.current.dismissOnMouseDown)&&le(K,H=>{H.type===\\\"pointerdown\\\"?Le(H):me(H)})}function ce(K){if(K.type===\\\"pointercancel\\\"&&(C.current=!1),!L.current)return;let H=I.current;if(ge(),ye()===\\\"intentional\\\"){if(K.type===\\\"pointercancel\\\"){H&&W();return}if(!be(K)){if(H){W();return}typeof S==\\\"function\\\"&&!S(K)||(Y.clear(),R.current=!0,D())}}}function pe(K){if(ye()!==\\\"sloppy\\\"||!T.current||_(K))return;let H=K.touches[0];if(!H)return;let X=Math.abs(H.clientX-T.current.startX),Re=Math.abs(H.clientY-T.current.startY),Ga=Math.sqrt(X*X+Re*Re);Ga>5&&(T.current.dismissOnTouchEnd=!0),Ga>10&&(me(K),w.clear(),T.current=null)}function Ve(K){le(K,pe)}function wt(K){ye()!==\\\"sloppy\\\"||!T.current||_(K)||(T.current.dismissOnTouchEnd&&me(K),w.clear(),T.current=null)}function te(K){le(K,wt)}let fe=ma(o&&ma(we(G,\\\"keydown\\\",B),we(G,\\\"compositionstart\\\",xe),we(G,\\\"compositionend\\\",Q)),g&&ma(we(G,\\\"click\\\",ue,!0),we(G,\\\"pointerdown\\\",ue,!0),we(G,\\\"pointerup\\\",ce,!0),we(G,\\\"pointercancel\\\",ce,!0),we(G,\\\"mousedown\\\",ue,!0),we(G,\\\"mouseup\\\",ce,!0),we(G,\\\"touchstart\\\",Te,{capture:!0,passive:!0}),we(G,\\\"touchmove\\\",Ve,{capture:!0,passive:!0}),we(G,\\\"touchend\\\",te,{capture:!0,passive:!0})));return()=>{fe(),q.clear(),Y.clear(),ge(),R.current=!1,D()}},[f,d,o,g,S,c,a,x,y,B,D,m,M,_,h,u,w]);let ae=Ea.useMemo(()=>({onKeyDown:B,onPointerDown:U,onClick:U}),[B,U]),oe=Ea.useMemo(()=>({onKeyDown:B,onPointerDown:j,onMouseDown:j,onClickCapture:z,onMouseDownCapture(q){z(),N(q)},onPointerDownCapture(q){z(),N(q)},onMouseUpCapture:z,onTouchEndCapture:z,onTouchMoveCapture:z}),[B,z,N,j]);return Ea.useMemo(()=>a?{reference:ae,floating:oe,trigger:ae}:{},[a,ae,oe])}var ba=v(A(),1);function ZM(e,t,a){let{reference:o,floating:n}=e,r=Va(t),l=af(t),s=tf(l),i=ga(t),u=r===\\\"y\\\",c=o.x+o.width/2-n.width/2,d=o.y+o.height/2-n.height/2,f=o[s]/2-n[s]/2,p;switch(i){case\\\"top\\\":p={x:c,y:o.y-n.height};break;case\\\"bottom\\\":p={x:c,y:o.y+o.height};break;case\\\"right\\\":p={x:o.x+o.width,y:d};break;case\\\"left\\\":p={x:o.x-n.width,y:d};break;default:p={x:o.x,y:o.y}}let h=ko(t);return h&&(p[l]+=f*(h===\\\"end\\\"?1:-1)*(a&&u?-1:1)),p}async function $M(e,t){var a;t===void 0&&(t={});let{x:o,y:n,platform:r,rects:l,elements:s,strategy:i}=e,{boundary:u=\\\"clippingAncestors\\\",rootBoundary:c=\\\"viewport\\\",elementContext:d=\\\"floating\\\",altBoundary:f=!1,padding:p=0}=Rn(t,e),h=Pm(p),S=s[f?d===\\\"floating\\\"?\\\"reference\\\":\\\"floating\\\":d],g=gs(await r.getClippingRect({element:(a=await(r.isElement==null?void 0:r.isElement(S)))==null||a?S:S.contextElement||await(r.getDocumentElement==null?void 0:r.getDocumentElement(s.floating)),boundary:u,rootBoundary:c,strategy:i})),m=d===\\\"floating\\\"?{x:o,y:n,width:l.floating.width,height:l.floating.height}:l.reference,x=await(r.getOffsetParent==null?void 0:r.getOffsetParent(s.floating)),y=await(r.isElement==null?void 0:r.isElement(x))&&await(r.getScale==null?void 0:r.getScale(x))||{x:1,y:1},L=gs(r.convertOffsetParentRelativeRectToViewportRelativeRect?await r.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:m,offsetParent:x,strategy:i}):m);return{top:(g.top-L.top+h.top)/y.y,bottom:(L.bottom-g.bottom+h.bottom)/y.y,left:(g.left-L.left+h.left)/y.x,right:(L.right-g.right+h.right)/y.x}}var WU=50,QM=async(e,t,a)=>{let{placement:o=\\\"bottom\\\",strategy:n=\\\"absolute\\\",middleware:r=[],platform:l}=a,s=l.detectOverflow?l:{...l,detectOverflow:$M},i=await(l.isRTL==null?void 0:l.isRTL(t)),u=await l.getElementRects({reference:e,floating:t,strategy:n}),{x:c,y:d}=ZM(u,o,i),f=o,p=0,h={};for(let b=0;b<r.length;b++){let S=r[b];if(!S)continue;let{name:g,fn:m}=S,{x,y,data:L,reset:I}=await m({x:c,y:d,initialPlacement:o,placement:f,strategy:n,middlewareData:h,rects:u,platform:s,elements:{reference:e,floating:t}});c=x??c,d=y??d,h[g]={...h[g],...L},I&&p<WU&&(p++,typeof I==\\\"object\\\"&&(I.placement&&(f=I.placement),I.rects&&(u=I.rects===!0?await l.getElementRects({reference:e,floating:t,strategy:n}):I.rects),{x:c,y:d}=ZM(u,f,i)),b=-1)}return{x:c,y:d,placement:f,strategy:n,middlewareData:h}};var WM=function(e){return e===void 0&&(e={}),{name:\\\"flip\\\",options:e,async fn(t){var a,o;let{placement:n,middlewareData:r,rects:l,initialPlacement:s,platform:i,elements:u}=t,{mainAxis:c=!0,crossAxis:d=!0,fallbackPlacements:f,fallbackStrategy:p=\\\"bestFit\\\",fallbackAxisSideDirection:h=\\\"none\\\",flipAlignment:b=!0,...S}=Rn(e,t);if((a=r.arrow)!=null&&a.alignmentOffset)return{};let g=ga(n),m=Va(s),x=ga(s)===s,y=await(i.isRTL==null?void 0:i.isRTL(u.floating)),L=f||(x||!b?[Jc(s)]:yM(s)),I=h!==\\\"none\\\";!f&&I&&L.push(...SM(s,b,h,y));let R=[s,...L],C=await i.detectOverflow(t,S),k=[],E=((o=r.flip)==null?void 0:o.overflows)||[];if(c&&k.push(C[g]),d){let D=bM(n,l,y);k.push(C[D[0]],C[D[1]])}if(E=[...E,{placement:n,overflows:k}],!k.every(D=>D<=0)){var T,w;let D=(((T=r.flip)==null?void 0:T.index)||0)+1,M=R[D];if(M&&(!(d===\\\"alignment\\\"?m!==Va(M):!1)||E.every(B=>Va(B.placement)===m?B.overflows[0]>0:!0)))return{data:{index:D,overflows:E},reset:{placement:M}};let _=(w=E.filter(U=>U.overflows[0]<=0).sort((U,B)=>U.overflows[1]-B.overflows[1])[0])==null?void 0:w.placement;if(!_)switch(p){case\\\"bestFit\\\":{var P;let U=(P=E.filter(B=>{if(I){let z=Va(B.placement);return z===m||z===\\\"y\\\"}return!0}).map(B=>[B.placement,B.overflows.filter(z=>z>0).reduce((z,N)=>z+N,0)]).sort((B,z)=>B[1]-z[1])[0])==null?void 0:P[0];U&&(_=U);break}case\\\"initialPlacement\\\":_=s;break}if(n!==_)return{reset:{placement:_}}}return{}}}};var JM=new Set([\\\"left\\\",\\\"top\\\"]);async function JU(e,t){let{placement:a,platform:o,elements:n}=e,r=await(o.isRTL==null?void 0:o.isRTL(n.floating)),l=ga(a),s=ko(a),i=Va(a)===\\\"y\\\",u=JM.has(l)?-1:1,c=r&&i?-1:1,d=Rn(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d==\\\"number\\\"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof h==\\\"number\\\"&&(p=s===\\\"end\\\"?h*-1:h),i?{x:p*c,y:f*u}:{x:f*u,y:p*c}}var eA=function(e){return e===void 0&&(e=0),{name:\\\"offset\\\",options:e,async fn(t){var a,o;let{x:n,y:r,placement:l,middlewareData:s}=t,i=await JU(t,e);return l===((a=s.offset)==null?void 0:a.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:n+i.x,y:r+i.y,data:{...i,placement:l}}}}},tA=function(e){return e===void 0&&(e={}),{name:\\\"shift\\\",options:e,async fn(t){let{x:a,y:o,placement:n,platform:r}=t,{mainAxis:l=!0,crossAxis:s=!1,limiter:i={fn:m=>{let{x,y}=m;return{x,y}}},...u}=Rn(e,t),c={x:a,y:o},d=await r.detectOverflow(t,u),f=Va(n),p=Dm(f),h=c[p],b=c[f],S=(m,x)=>Om(x+d[m===\\\"y\\\"?\\\"top\\\":\\\"left\\\"],x,x-d[m===\\\"y\\\"?\\\"bottom\\\":\\\"right\\\"]);l&&(h=S(p,h)),s&&(b=S(f,b));let g=i.fn({...t,[p]:h,[f]:b});return{...g,data:{x:g.x-a,y:g.y-o,enabled:{[p]:l,[f]:s}}}}}},aA=function(e){return e===void 0&&(e={}),{options:e,fn(t){var a,o;let{x:n,y:r,placement:l,rects:s,middlewareData:i}=t,{offset:u=0,mainAxis:c=!0,crossAxis:d=!0}=Rn(e,t),f={x:n,y:r},p=Va(l),h=Dm(p),b=f[h],S=f[p],g=Rn(u,t),m=typeof g==\\\"number\\\"?{mainAxis:g,crossAxis:0}:{mainAxis:(a=g.mainAxis)!=null?a:0,crossAxis:(o=g.crossAxis)!=null?o:0};if(c){let L=h===\\\"y\\\"?\\\"height\\\":\\\"width\\\",I=s.reference[h]-s.floating[L]+m.mainAxis,R=s.reference[h]+s.reference[L]-m.mainAxis;b<I?b=I:b>R&&(b=R)}if(d){var x,y;let L=h===\\\"y\\\"?\\\"width\\\":\\\"height\\\",I=JM.has(ga(l)),R=s.reference[p]-s.floating[L]+(I&&((x=i.offset)==null?void 0:x[p])||0)+(I?0:m.crossAxis),C=s.reference[p]+s.reference[L]+(I?0:((y=i.offset)==null?void 0:y[p])||0)-(I?m.crossAxis:0);S<R?S=R:S>C&&(S=C)}return{[h]:b,[p]:S}}}},oA=function(e){return e===void 0&&(e={}),{name:\\\"size\\\",options:e,async fn(t){let{placement:a,rects:o,platform:n,elements:r}=t,{apply:l=()=>{},...s}=Rn(e,t),i=await n.detectOverflow(t,s),u=ga(a),c=ko(a),d=Va(a)===\\\"y\\\",{width:f,height:p}=o.floating,h,b;u===\\\"top\\\"||u===\\\"bottom\\\"?(h=u,b=c===(await(n.isRTL==null?void 0:n.isRTL(r.floating))?\\\"start\\\":\\\"end\\\")?\\\"left\\\":\\\"right\\\"):(b=u,h=c===\\\"end\\\"?\\\"top\\\":\\\"bottom\\\");let S=p-i.top-i.bottom,g=f-i.left-i.right,m=il(p-i[h],S),x=il(f-i[b],g),y=t.middlewareData.shift,L=!y,I=m,R=x;y!=null&&y.enabled.x&&(R=g),y!=null&&y.enabled.y&&(I=S),L&&!c&&(d?R=f-2*Yo(i.left,i.right):I=p-2*Yo(i.top,i.bottom)),await l({...t,availableWidth:R,availableHeight:I});let C=await n.getDimensions(r.floating);return f!==C.width||p!==C.height?{reset:{rects:!0}}:{}}}};function lA(e){let t=qt(e),a=parseFloat(t.width)||0,o=parseFloat(t.height)||0,n=Be(e),r=n?e.offsetWidth:a,l=n?e.offsetHeight:o,s=ul(a)!==r||ul(o)!==l;return s&&(a=r,o=l),{width:a,height:o,$:s}}function tC(e){return ke(e)?e:e.contextElement}function tu(e){let t=tC(e);if(!Be(t))return Ln(1);let a=t.getBoundingClientRect(),{width:o,height:n,$:r}=lA(t),l=(r?ul(a.width):a.width)/o,s=(r?ul(a.height):a.height)/n;return(!l||!Number.isFinite(l))&&(l=1),(!s||!Number.isFinite(s))&&(s=1),{x:l,y:s}}var e3=Ln(0);function sA(e){let t=Ye(e);return!dm()||!t.visualViewport?e3:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function t3(e,t,a){return t===void 0&&(t=!1),!!a&&t&&a===Ye(e)}function Ss(e,t,a,o){t===void 0&&(t=!1),a===void 0&&(a=!1);let n=e.getBoundingClientRect(),r=tC(e),l=Ln(1);t&&(o?ke(o)&&(l=tu(o)):l=tu(e));let s=t3(r,a,o)?sA(r):Ln(0),i=(n.left+s.x)/l.x,u=(n.top+s.y)/l.y,c=n.width/l.x,d=n.height/l.y;if(r&&o){let f=Ye(r),p=ke(o)?Ye(o):o,h=f,b=pm(h);for(;b&&p!==h;){let S=tu(b),g=b.getBoundingClientRect(),m=qt(b),x=g.left+(b.clientLeft+parseFloat(m.paddingLeft))*S.x,y=g.top+(b.clientTop+parseFloat(m.paddingTop))*S.y;i*=S.x,u*=S.y,c*=S.x,d*=S.y,i+=x,u+=y,h=Ye(b),b=pm(h)}}return gs({width:c,height:d,x:i,y:u})}function zm(e,t){let a=Vc(e).scrollLeft;return t?t.left+a:Ss(Sn(e)).left+a}function iA(e,t){let a=e.getBoundingClientRect(),o=a.left+t.scrollLeft-zm(e,a),n=a.top+t.scrollTop;return{x:o,y:n}}function a3(e){let{elements:t,rect:a,offsetParent:o,strategy:n}=e,r=n===\\\"fixed\\\",l=Sn(o),s=t?qc(t.floating):!1;if(o===l||s&&r)return a;let i={scrollLeft:0,scrollTop:0},u=Ln(1),c=Ln(0),d=Be(o);if((d||!r)&&((Ot(o)!==\\\"body\\\"||cs(l))&&(i=Vc(o)),d)){let p=Ss(o);u=tu(o),c.x=p.x+o.clientLeft,c.y=p.y+o.clientTop}let f=l&&!d&&!r?iA(l,i):Ln(0);return{width:a.width*u.x,height:a.height*u.y,x:a.x*u.x-i.scrollLeft*u.x+c.x+f.x,y:a.y*u.y-i.scrollTop*u.y+c.y+f.y}}function o3(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function n3(e){let t=Vc(e),a=e.ownerDocument.body,o=Yo(e.scrollWidth,e.clientWidth,a.scrollWidth,a.clientWidth),n=Yo(e.scrollHeight,e.clientHeight,a.scrollHeight,a.clientHeight),r=-t.scrollLeft+zm(e),l=-t.scrollTop;return qt(a).direction===\\\"rtl\\\"&&(r+=Yo(e.clientWidth,a.clientWidth)-o),{width:o,height:n,x:r,y:l}}var r3=25;function l3(e,t,a){a===void 0&&(a=\\\"viewport\\\");let o=a===\\\"layoutViewport\\\",n=Ye(e),r=Sn(e),l=n.visualViewport,s=r.clientWidth,i=r.clientHeight,u=0,c=0;if(l){let f=!dm()||t===\\\"fixed\\\";o?f||(u=-l.offsetLeft,c=-l.offsetTop):(s=l.width,i=l.height,f&&(u=l.offsetLeft,c=l.offsetTop))}if(zm(r)<=0){let f=r.ownerDocument,p=f.body,h=getComputedStyle(p),b=f.compatMode===\\\"CSS1Compat\\\"&&parseFloat(h.marginLeft)+parseFloat(h.marginRight)||0,S=Math.abs(r.clientWidth-p.clientWidth-b),g=getComputedStyle(r).scrollbarGutter===\\\"stable both-edges\\\"?S/2:S;g<=r3&&(s-=g)}return{width:s,height:i,x:u,y:c}}function s3(e,t){let a=Ss(e,!0,t===\\\"fixed\\\"),o=a.top+e.clientTop,n=a.left+e.clientLeft,r=tu(e),l=e.clientWidth*r.x,s=e.clientHeight*r.y,i=n*r.x,u=o*r.y;return{width:l,height:s,x:i,y:u}}function nA(e,t,a){let o;if(t===\\\"viewport\\\"||t===\\\"layoutViewport\\\")o=l3(e,a,t);else if(t===\\\"document\\\")o=n3(Sn(e));else if(ke(t))o=s3(t,a);else{let n=sA(e);o={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return gs(o)}function i3(e,t){let a=t.get(e);if(a)return a;let o=al(e,[],!1).filter(s=>ke(s)&&Ot(s)!==\\\"body\\\"),n=null,r=qt(e).position===\\\"fixed\\\",l=r?Io(e):e;for(;ke(l)&&!wo(l);){let s=qt(l),i=fm(l),u=n?n.position:r?\\\"fixed\\\":\\\"\\\";!i&&(u===\\\"fixed\\\"||u===\\\"absolute\\\"&&s.position===\\\"static\\\")?o=o.filter(d=>d!==l):n=s,l=Io(l)}return t.set(e,o),o}function u3(e){let{element:t,boundary:a,rootBoundary:o,strategy:n}=e,l=[...a===\\\"clippingAncestors\\\"?qc(t)?[]:i3(t,this._c):[].concat(a),o],s=nA(t,l[0],n),i=s.top,u=s.right,c=s.bottom,d=s.left;for(let f=1;f<l.length;f++){let p=nA(t,l[f],n);i=Yo(p.top,i),u=il(p.right,u),c=il(p.bottom,c),d=Yo(p.left,d)}return{width:u-d,height:c-i,x:d,y:i}}function c3(e){let{width:t,height:a}=lA(e);return{width:t,height:a}}function f3(e,t,a){let o=Be(t),n=Sn(t),r=a===\\\"fixed\\\",l=Ss(e,!0,r,t),s={scrollLeft:0,scrollTop:0},i=Ln(0);if((o||!r)&&((Ot(t)!==\\\"body\\\"||cs(n))&&(s=Vc(t)),o)){let f=Ss(t,!0,r,t);i.x=f.x+t.clientLeft,i.y=f.y+t.clientTop}!o&&n&&(i.x=zm(n));let u=n&&!o&&!r?iA(n,s):Ln(0),c=l.left+s.scrollLeft-i.x-u.x,d=l.top+s.scrollTop-i.y-u.y;return{x:c,y:d,width:l.width,height:l.height}}function eC(e){return qt(e).position===\\\"static\\\"}function rA(e,t){if(!Be(e)||qt(e).position===\\\"fixed\\\")return null;if(t)return t(e);let a=e.offsetParent;return Sn(e)===a&&(a=a.ownerDocument.body),a}function uA(e,t){let a=Ye(e);if(qc(e))return a;if(!Be(e)){let n=Io(e);for(;n&&!wo(n);){if(ke(n)&&!eC(n))return n;n=Io(n)}return a}let o=rA(e,t);for(;o&&Dk(o)&&eC(o);)o=rA(o,t);return o&&wo(o)&&eC(o)&&!fm(o)?a:o||Pk(e)||a}var d3=async function(e){let t=this.getOffsetParent||uA,a=this.getDimensions,o=await a(e.floating);return{reference:f3(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function p3(e){return qt(e).direction===\\\"rtl\\\"}var aC={convertOffsetParentRelativeRectToViewportRelativeRect:a3,getDocumentElement:Sn,getClippingRect:u3,getOffsetParent:uA,getElementRects:d3,getClientRects:o3,getDimensions:c3,getScale:tu,isElement:ke,isRTL:p3};function cA(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function m3(e,t,a){let o=null,n,r=Sn(e);function l(){var c;clearTimeout(n),(c=o)==null||c.disconnect(),o=null}function s(c,d){c===void 0&&(c=!1),d===void 0&&(d=1),l();let f=e.getBoundingClientRect(),{left:p,top:h,width:b,height:S}=f;if(c||t(),!b||!S)return;let g=ef(h),m=ef(r.clientWidth-(p+b)),x=ef(r.clientHeight-(h+S)),y=ef(p),I={rootMargin:-g+\\\"px \\\"+-m+\\\"px \\\"+-x+\\\"px \\\"+-y+\\\"px\\\",threshold:Yo(0,il(1,d))||1},R=!0;function C(k){let E=k[0].intersectionRatio;if(!cA(f,e.getBoundingClientRect()))return s();if(E!==d){if(!R)return s();E?s(!1,E):n=setTimeout(()=>{s(!1,1e-7)},1e3)}R=!1}try{o=new IntersectionObserver(C,{...I,root:r.ownerDocument})}catch{o=new IntersectionObserver(C,I)}o.observe(e)}let i=Ye(e),u=()=>s(a);return i.addEventListener(\\\"resize\\\",u),s(!0),()=>{i.removeEventListener(\\\"resize\\\",u),l()}}function ff(e,t,a,o){o===void 0&&(o={});let{ancestorScroll:n=!0,ancestorResize:r=!0,elementResize:l=typeof ResizeObserver==\\\"function\\\",layoutShift:s=typeof IntersectionObserver==\\\"function\\\",animationFrame:i=!1}=o,u=tC(e),c=n||r?[...u?al(u):[],...t?al(t):[]]:[];c.forEach(g=>{n&&g.addEventListener(\\\"scroll\\\",a),r&&g.addEventListener(\\\"resize\\\",a)});let d=u&&s?m3(u,a,r):null,f=-1,p=null;l&&(p=new ResizeObserver(g=>{let[m]=g;m&&m.target===u&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var x;(x=p)==null||x.observe(t)})),a()}),u&&!i&&p.observe(u),t&&p.observe(t));let h,b=i?Ss(e):null;i&&S();function S(){let g=Ss(e);b&&!cA(b,g)&&a(),b=g,h=requestAnimationFrame(S)}return a(),()=>{var g;c.forEach(m=>{n&&m.removeEventListener(\\\"scroll\\\",a),r&&m.removeEventListener(\\\"resize\\\",a)}),d?.(),(g=p)==null||g.disconnect(),p=null,i&&cancelAnimationFrame(h)}}var fA=eA;var dA=tA,pA=WM,mA=oA;var gA=aA,Um=(e,t,a)=>{let o=new Map,n=a??{},r={...aC,...n.platform,_c:o};return QM(e,t,{...n,platform:r})};var _t=v(A(),1),xA=v(A(),1),bA=v(Pn(),1),h3=typeof document<\\\"u\\\",x3=function(){},qm=h3?xA.useLayoutEffect:x3;function Vm(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==\\\"function\\\"&&e.toString()===t.toString())return!0;let a,o,n;if(e&&t&&typeof e==\\\"object\\\"){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(o=a;o--!==0;)if(!Vm(e[o],t[o]))return!1;return!0}if(n=Object.keys(e),a=n.length,a!==Object.keys(t).length)return!1;for(o=a;o--!==0;)if(!{}.hasOwnProperty.call(t,n[o]))return!1;for(o=a;o--!==0;){let r=n[o];if(!(r===\\\"_owner\\\"&&e.$$typeof)&&!Vm(e[r],t[r]))return!1}return!0}return e!==e&&t!==t}function yA(e){return typeof window>\\\"u\\\"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function hA(e,t){let a=yA(e);return Math.round(t*a)/a}function oC(e){let t=_t.useRef(e);return qm(()=>{t.current=e}),t}function SA(e){e===void 0&&(e={});let{placement:t=\\\"bottom\\\",strategy:a=\\\"absolute\\\",middleware:o=[],platform:n,elements:{reference:r,floating:l}={},transform:s=!0,whileElementsMounted:i,open:u}=e,[c,d]=_t.useState({x:0,y:0,strategy:a,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=_t.useState(o);Vm(f,o)||p(o);let[h,b]=_t.useState(null),[S,g]=_t.useState(null),m=_t.useCallback(B=>{B!==I.current&&(I.current=B,b(B))},[]),x=_t.useCallback(B=>{B!==R.current&&(R.current=B,g(B))},[]),y=r||h,L=l||S,I=_t.useRef(null),R=_t.useRef(null),C=_t.useRef(c),k=i!=null,E=oC(i),T=oC(n),w=oC(u),P=_t.useCallback(()=>{if(!I.current||!R.current)return;let B={placement:t,strategy:a,middleware:f};T.current&&(B.platform=T.current),Um(I.current,R.current,B).then(z=>{let N={...z,isPositioned:w.current!==!1};D.current&&!Vm(C.current,N)&&(C.current=N,bA.flushSync(()=>{d(N)}))})},[f,t,a,T,w]);qm(()=>{u===!1&&C.current.isPositioned&&(C.current.isPositioned=!1,d(B=>({...B,isPositioned:!1})))},[u]);let D=_t.useRef(!1);qm(()=>(D.current=!0,()=>{D.current=!1}),[]),qm(()=>{if(y&&(I.current=y),L&&(R.current=L),y&&L){if(E.current)return E.current(y,L,P);P()}},[y,L,P,E,k]);let M=_t.useMemo(()=>({reference:I,floating:R,setReference:m,setFloating:x}),[m,x]),_=_t.useMemo(()=>({reference:y,floating:L}),[y,L]),U=_t.useMemo(()=>{let B={position:a,left:0,top:0};if(!_.floating)return B;let z=hA(_.floating,c.x),N=hA(_.floating,c.y);return s?{...B,transform:\\\"translate(\\\"+z+\\\"px, \\\"+N+\\\"px)\\\",...yA(_.floating)>=1.5&&{willChange:\\\"transform\\\"}}:{position:a,left:z,top:N}},[a,s,_.floating,c.x,c.y]);return _t.useMemo(()=>({...c,update:P,refs:M,elements:_,floatingStyles:U}),[c,P,M,_,U])}var nC=(e,t)=>{let a=fA(e);return{name:a.name,fn:a.fn,options:[e,t]}},rC=(e,t)=>{let a=dA(e);return{name:a.name,fn:a.fn,options:[e,t]}},lC=(e,t)=>({fn:gA(e).fn,options:[e,t]}),sC=(e,t)=>{let a=pA(e);return{name:a.name,fn:a.fn,options:[e,t]}},iC=(e,t)=>{let a=mA(e);return{name:a.name,fn:a.fn,options:[e,t]}};var au=class{attachedStores=[];attachedStoreValue=null;storeListeners=new Set;constructor(t,a,o=!0){this.fallbackStore=t,this.componentName=a,this.throwOnMissingTrigger=o}get attachedStore(){return this.attachedStoreValue}get store(){return this.attachedStoreValue??this.fallbackStore}get serverStore(){return this.fallbackStore}subscribeStore(t){return this.storeListeners.add(t),()=>{this.storeListeners.delete(t)}}attachStore(t){return this.attachedStores.push(t),this.setActiveStore(t),()=>{let a=this.attachedStores.lastIndexOf(t);a!==-1&&this.attachedStores.splice(a,1),this.setActiveStore(this.attachedStores[this.attachedStores.length-1]??null)}}setActiveStore(t){this.attachedStoreValue!==t&&(this.attachedStoreValue=t,this.storeListeners.forEach(a=>{a()}))}openByTrigger(t){let a=this.attachedStore;if(a===null)return;let o;if(t){for(let n=this.attachedStores.length-1;n>=0&&!o;n-=1)o=this.attachedStores[n].context.triggerElements.getById(t);o??=this.fallbackStore.context.triggerElements.getById(t)}if(t&&!o&&this.throwOnMissingTrigger)throw new Error(Ne(99,this.componentName,t,this.componentName));a.setOpen(!0,de($.imperativeAction,void 0,o))}closePopup(){let t=this.attachedStore;t!==null&&t.setOpen(!1,de($.imperativeAction))}};var mC=v(A(),1),q3=v(Pn(),1);var DA=v(A(),1);var AA=v(A(),1),pC=v(cC(),1),OA=v(TA(),1);var EA=v(A(),1);var fC=[],dC;function kA(){return dC}function MA(e){fC.push(e)}function df(e){let t=(a,o)=>{let n=We(N3).current,r;try{dC=n;for(let l of fC)l.before(n);r=e(a,o);for(let l of fC)l.after(n);n.didInitialize=!0}finally{dC=void 0}return r};return t.displayName=e.displayName||e.name,t}function Xm(e){return EA.forwardRef(df(e))}function N3(){return{didInitialize:!1}}var B3=Oi(19),_3=B3?H3:z3;function jm(e,t,a,o,n){return _3(e,t,a,o,n)}function F3(e,t,a,o,n){let r=AA.useCallback(()=>t(e.getSnapshot(),a,o,n),[e,t,a,o,n]);return(0,pC.useSyncExternalStore)(e.subscribe,r,r)}MA({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let a=0;a<e.syncHooks.length;a+=1){let o=e.syncHooks[a],n=o.selector(o.store.state,o.a1,o.a2,o.a3);Object.is(o.value,n)||(t=!0,o.value=n)}return t&&(e.syncTick+=1),e.syncTick})},after(e){e.syncHooks.length>0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{let a=new Set;for(let n of e.syncHooks)a.add(n.store);let o=[];for(let n of a)o.push(n.subscribe(t));return()=>{for(let n of o)n()}}),(0,pC.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot))}});function H3(e,t,a,o,n){let r=kA();if(!r)return F3(e,t,a,o,n);let l=r.syncIndex;r.syncIndex+=1;let s;return r.didInitialize?(s=r.syncHooks[l],(s.store!==e||s.selector!==t||!Object.is(s.a1,a)||!Object.is(s.a2,o)||!Object.is(s.a3,n))&&(s.store!==e&&(r.didChangeStore=!0),s.store=e,s.selector=t,s.a1=a,s.a2=o,s.a3=n,s.value=t(e.getSnapshot(),a,o,n))):(s={store:e,selector:t,a1:a,a2:o,a3:n,value:t(e.getSnapshot(),a,o,n)},r.syncHooks.push(s)),s.value}function z3(e,t,a,o,n){return(0,OA.useSyncExternalStoreWithSelector)(e.subscribe,e.getSnapshot,e.getSnapshot,r=>t(r,a,o,n))}var Ym=class{static create(t){return new this(t)}constructor(t){this.state=t,this.listeners=new Set,this.updateTick=0}subscribe=t=>(this.listeners.add(t),()=>{this.listeners.delete(t)});getSnapshot=()=>this.state;setState(t){if(this.state===t)return;this.state=t,this.updateTick+=1;let a=this.updateTick;for(let o of this.listeners){if(a!==this.updateTick)return;o(t)}}update(t){for(let a in t)if(!Object.is(this.state[a],t[a])){this.setState({...this.state,...t});return}}set(t,a){Object.is(this.state[t],a)||this.setState({...this.state,[t]:a})}notifyAll(){let t={...this.state};this.setState(t)}use(t,a,o,n){return jm(this,t,a,o,n)}};var Cs=v(A(),1);var In=class extends Ym{constructor(t,a={},o){super(t),this.context=a,this.selectors=o}useSyncedValue(t,a){Cs.useDebugValue(t);let o=this;V(()=>{o.state[t]!==a&&o.set(t,a)},[o,t,a])}useSyncedValueWithCleanup(t,a){let o=this;V(()=>(o.state[t]!==a&&o.set(t,a),()=>{o.set(t,void 0)}),[o,t,a])}useSyncedValues(t){let a=this,o=Object.values(t);V(()=>{a.update(t)},[a,...o])}useControlledProp(t,a){Cs.useDebugValue(t);let o=this,n=a!==void 0;V(()=>{n&&!Object.is(o.state[t],a)&&o.setState({...o.state,[t]:a})},[o,t,a,n])}select(t,a,o,n){let r=this.selectors[t];return r(this.state,a,o,n)}useState(t,a,o,n){return Cs.useDebugValue(t),jm(this,this.selectors[t],a,o,n)}useContextCallback(t,a){Cs.useDebugValue(t);let o=Z(a??He);this.context[t]=o}useStateSetter(t){let a=Cs.useRef(void 0);return a.current===void 0&&(a.current=o=>{this.set(t,o)}),a.current}observe(t,a){let o;typeof t==\\\"function\\\"?o=t:o=this.selectors[t];let n=o(this.state);return a(n,n,this),this.subscribe(r=>{let l=o(r);if(!Object.is(n,l)){let s=n;n=l,a(l,s,this)}})}};var U3={open:e=>e.open,transitionStatus:e=>e.transitionStatus,domReferenceElement:e=>e.domReferenceElement,referenceElement:e=>e.positionReference??e.referenceElement,floatingElement:e=>e.floatingElement,floatingId:e=>e.floatingId},nu=class extends In{constructor(t){let{syncOnly:a,nested:o,onOpenChange:n,triggerElements:r,...l}=t;super({...l,positionReference:l.referenceElement,domReferenceElement:l.referenceElement},{onOpenChange:n,dataRef:{current:{}},events:Hm(),nested:o,triggerElements:r},U3),this.syncOnly=a}syncOpenEvent=(t,a)=>{(!t||!this.state.open||a!=null&&uM(a))&&(this.context.dataRef.current.openEvent=t?a:void 0)};dispatchOpenChange=(t,a)=>{this.syncOpenEvent(t,a.event);let o={open:t,reason:a.reason,nativeEvent:a.event,nested:this.context.nested,triggerElement:a.trigger};this.context.events.emit(\\\"openchange\\\",o)};setOpen=(t,a)=>{if(this.syncOnly){this.context.onOpenChange?.(t,a);return}this.dispatchOpenChange(t,a),this.context.onOpenChange?.(t,a)}};function pf(e){let{popupStore:t,treatPopupAsFloatingElement:a=!1,floatingRootContext:o,floatingId:n,nested:r,onOpenChange:l}=e,s=t.useState(\\\"open\\\"),i=t.useState(\\\"activeTriggerElement\\\"),u=t.useState(a?\\\"popupElement\\\":\\\"positionerElement\\\"),c=t.context.triggerElements,d=l,f=DA.useRef(null);o===void 0&&f.current===null&&(f.current=new nu({open:s,transitionStatus:void 0,referenceElement:i,floatingElement:u,triggerElements:c,onOpenChange:d,floatingId:n,syncOnly:!0,nested:r}));let p=o??f.current;return t.useSyncedValue(\\\"floatingId\\\",n),V(()=>{let h={open:s,floatingId:n,referenceElement:i,floatingElement:u};ke(i)&&(h.domReferenceElement=i),p.state.positionReference===p.state.referenceElement&&(h.positionReference=i),p.update(h)},[s,n,i,u,p]),p.context.onOpenChange=d,p.context.nested=r,p}var Km={tabIndex:-1,[Yc]:\\\"\\\"};function NA(e){return t=>t===\\\"touch\\\"?e.current:!0}function BA(e,t=!1){let a=Xo(),o=io()!=null,n=We(()=>e(a,o)).current;return pf({popupStore:n,treatPopupAsFloatingElement:t,floatingRootContext:n.state.floatingRootContext,floatingId:a,nested:o,onOpenChange:n.setOpen}),n}function Zm({handle:e,store:t}){return V(()=>e.attachStore(t),[e,t]),null}function PA(e){let t=e.context.triggerElements.size;e.select(\\\"open\\\")&&e.state.triggerCount!==t&&e.set(\\\"triggerCount\\\",t)}function gC(e,t){let a=mC.useRef(null);return Z(o=>{let n=a.current;if(n!==null){if(n.element===o&&n.store===t&&n.id===e)return;a.current=null;let r=n.store;r.context.triggerElements.getById(n.id)===n.element&&(r.context.triggerElements.delete(n.id),PA(r))}o!==null&&e!==void 0&&(a.current={store:t,id:e,element:o},t.context.triggerElements.add(e,o),PA(t))})}function $m(e,t,a,o=!1){let n=e.preventUnmountingOnClose;t?n=!1:o&&(n=!0);let r=a?.id??null,l=e.activeTriggerId,s=e.activeTriggerElement;return(r||t)&&(l=r,s=a??null),{open:t,preventUnmountingOnClose:n,activeTriggerId:l,activeTriggerElement:s}}function _A(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function Qm(e,t,a,o){let n=a.useState(\\\"isMountedByTrigger\\\",e),r=gC(e,a),l=Z(i=>{let u=a.select(\\\"open\\\"),c=a.select(\\\"activeTriggerId\\\");if(c===e){let d={activeTriggerElement:i,...u?o:null};a.update(d);return}if(c==null&&u){let d={activeTriggerId:e??null,activeTriggerElement:i,...o};a.update(d)}}),s=Z(i=>{r(i),i&&l(i)});return V(()=>(s(t.current),()=>s(null)),[s,t,a,e]),V(()=>{if(n){let i={activeTriggerElement:t.current,...o};a.update(i)}},[n,a,t,...Object.values(o)]),{registerTrigger:s,isMountedByThisTrigger:n}}function Wm(e,t={}){let{closeOnActiveTriggerUnmount:a=!1}=t,o=mC.useRef(null),n=e.useState(\\\"open\\\"),r=e.useState(\\\"triggerCount\\\"),l=e.useState(\\\"activeTriggerId\\\"),s=e.useState(\\\"activeTriggerElement\\\");V(()=>{if(!n){o.current=null,e.state.triggerCount!==0&&e.set(\\\"triggerCount\\\",0);return}let i=e.context.triggerElements.size,u={};e.state.triggerCount!==i&&(u.triggerCount=i);let c=e.select(\\\"activeTriggerId\\\"),d=null;if(c){let f=e.context.triggerElements.getById(c);if(f)o.current=c,f!==e.state.activeTriggerElement&&(u.activeTriggerElement=f);else{for(let[p,h]of e.context.triggerElements.entries())if(h===e.state.activeTriggerElement){u.activeTriggerId=p,u.activeTriggerElement=h,o.current=p;break}u.activeTriggerId===void 0&&(o.current===c?d=c:o.current=null)}}else o.current=null;if(!d&&!c&&i===1){let f=e.context.triggerElements.entries().next();if(!f.done){let[p,h]=f.value;u.activeTriggerId=p,u.activeTriggerElement=h,o.current=p}}(u.triggerCount!==void 0||u.activeTriggerId!==void 0||u.activeTriggerElement!==void 0)&&e.update(u),d&&a&&queueMicrotask(()=>{if(e.select(\\\"open\\\")&&e.select(\\\"activeTriggerId\\\")===d&&!e.context.triggerElements.getById(d)){let f=de($.none);e.setOpen(!1,f),f.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[n,e,r,l,s,a])}function Jm(e,t,a,o){let{mounted:n,setMounted:r,transitionStatus:l}=Ki(e,!1,!1,o),s=t.useState(\\\"preventUnmountingOnClose\\\"),i=e?!1:s;t.useSyncedValues({mounted:n,transitionStatus:l,preventUnmountingOnClose:i});let u=Z(()=>{r(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),a?.(),t.context.onOpenChangeComplete?.(!1)});return vn({enabled:n&&!e&&!i,open:e,ref:t.context.popupRef,onComplete(){e||u()}}),{forceUnmount:u,transitionStatus:l}}function eg(e,t){e.useSyncedValues(t),V(()=>()=>{e.update({activeTriggerProps:Ae,inactiveTriggerProps:Ae,popupProps:Ae})},[e])}function FA(e,t){V(()=>{!t&&e.state.openMethod!==null&&e.set(\\\"openMethod\\\",null)},[t,e]),V(()=>()=>{e.state.openMethod!==null&&e.set(\\\"openMethod\\\",null)},[e])}var ml=class{constructor(){this.idMap=new Map}add(t,a){this.idMap.set(t,a)}delete(t){this.idMap.delete(t)}hasElement(t){for(let a of this.idMap.values())if(a===t)return!0;return!1}hasMatchingElement(t){for(let a of this.idMap.values())if(t(a))return!0;return!1}getById(t){return this.idMap.get(t)}entries(){return this.idMap.entries()}elements(){return this.idMap.values()}get size(){return this.idMap.size}};function tg(e,t,a=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new nu({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:t,syncOnly:!0,nested:a,onOpenChange:void 0}),floatingId:t,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:Ae,inactiveTriggerProps:Ae,popupProps:Ae}}var mf=e=>e.triggerIdProp??e.activeTriggerId,hC=e=>e.openProp??e.open,HA=e=>(e.popupElement?.id??e.floatingId)||void 0;function zA(e,t){return t!==void 0&&hC(e)&&mf(e)===t}function V3(e,t){return zA(e,t)?!0:t!==void 0&&hC(e)&&mf(e)==null&&e.triggerCount===1}var ag={open:hC,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:mf,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:HA,isTriggerActive:(e,t)=>t!==void 0&&mf(e)===t,isOpenedByTrigger:(e,t)=>zA(e,t),isMountedByTrigger:(e,t)=>t!==void 0&&mf(e)===t&&e.mounted,triggerProps:(e,t)=>t?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,t)=>V3(e,t)?HA(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement};var bC=v(A(),1),XA=v(GA(),1);function og(e){let t=bC.useCallback(o=>e===void 0?He:e.subscribeStore(o),[e]),a=bC.useCallback(()=>e===void 0?void 0:e.store,[e]);return(0,XA.useSyncExternalStore)(t,a,()=>e?.serverStore)}function jA(e){return J3(e,e.rootContext)}function J3(e,t){let{nodeId:a,externalTree:o}=e,n=t.useState(\\\"referenceElement\\\"),r=t.useState(\\\"floatingElement\\\"),l=t.useState(\\\"domReferenceElement\\\"),s=t.useState(\\\"open\\\"),i=t.useState(\\\"floatingId\\\"),[u,c]=ba.useState(null),[d,f]=ba.useState(void 0),[p,h]=ba.useState(void 0),b=ba.useRef(null),S=ha(o),g=ba.useMemo(()=>({reference:n,floating:r,domReference:l}),[n,r,l]),m=SA({...e,elements:{...g,...u&&{reference:u}}}),x=ke(d)?d:null,y=p===void 0?t.state.floatingElement:p;t.useSyncedValue(\\\"referenceElement\\\",d??null),t.useSyncedValue(\\\"domReferenceElement\\\",d===void 0?l:x),t.useSyncedValue(\\\"floatingElement\\\",y);let L=ba.useCallback(T=>{let w=ke(T)?{getBoundingClientRect:()=>T.getBoundingClientRect(),getClientRects:()=>T.getClientRects(),contextElement:T}:T;c(w),m.refs.setReference(w)},[m.refs]),I=ba.useCallback(T=>{(ke(T)||T===null)&&(b.current=T,f(T)),(ke(m.refs.reference.current)||m.refs.reference.current===null||T!==null&&!ke(T))&&m.refs.setReference(T)},[m.refs,f]),R=ba.useCallback(T=>{h(T),m.refs.setFloating(T)},[m.refs]),C=ba.useMemo(()=>({...m.refs,setReference:I,setFloating:R,setPositionReference:L,domReference:b}),[m.refs,I,R,L]),k=ba.useMemo(()=>({...m.elements,domReference:l}),[m.elements,l]),E=ba.useMemo(()=>({...m,dataRef:t.context.dataRef,open:s,onOpenChange:t.setOpen,events:t.context.events,floatingId:i,refs:C,elements:k,nodeId:a,rootStore:t}),[m,C,k,a,t,s,i]);return V(()=>{l&&(b.current=l)},[l]),V(()=>{t.context.dataRef.current.floatingContext=E;let T=S?.nodesRef.current.find(w=>w.id===a);T&&(T.context=E)}),ba.useMemo(()=>({...m,context:E,refs:C,elements:k,rootStore:t}),[m,C,k,E,t])}var wn=v(A(),1);var yC=Ke.os.mac&&Ke.engine.webkit;function SC(e,t={}){let{enabled:a=!0,delay:o}=t,n=\\\"rootStore\\\"in e?e.rootStore:e,{events:r,dataRef:l}=n.context,s=wn.useRef(!1),i=wn.useRef(null),u=wn.useRef(!0),c=Mt();wn.useEffect(()=>{let f=n.select(\\\"domReferenceElement\\\");if(!a)return;let p=Ye(f);function h(){let g=n.select(\\\"domReferenceElement\\\");!n.select(\\\"open\\\")&&Be(g)&&g===Vt(Ce(g))&&(s.current=!0,i.current=g)}function b(){u.current=!0}function S(){u.current=!1}return ma(we(p,\\\"blur\\\",h),yC&&we(p,\\\"keydown\\\",b,!0),yC&&we(p,\\\"pointerdown\\\",S,!0))},[n,a]),wn.useEffect(()=>{if(!a)return;function f(p){if(p.reason===$.triggerPress||p.reason===$.escapeKey){let h=n.select(\\\"domReferenceElement\\\");ke(h)&&(i.current=h,s.current=!0)}}return r.on(\\\"openchange\\\",f),()=>{r.off(\\\"openchange\\\",f)}},[r,a,n]);let d=wn.useMemo(()=>{function f(){s.current=!1,i.current=null}return{onMouseLeave(){f()},onFocus(p){let h=p.currentTarget;if(s.current){if(i.current===h)return;f()}let b=ft(p.nativeEvent);if(ke(b)){if(yC&&!p.relatedTarget){if(!u.current&&!ms(b))return}else if(!fM(b))return}let S=sl(p.relatedTarget,n.context.triggerElements),{nativeEvent:g,currentTarget:m}=p,x=typeof o==\\\"function\\\"?o():o;if(n.select(\\\"open\\\")&&S||x===0||x===void 0){n.setOpen(!0,de($.triggerFocus,g,m));return}c.start(x,()=>{s.current||n.setOpen(!0,de($.triggerFocus,g,m))})},onBlur(p){f();let h=p.relatedTarget,b=p.nativeEvent,S=ke(h)&&h.hasAttribute(rr(\\\"focus-guard\\\"))&&h.getAttribute(\\\"data-type\\\")===\\\"outside\\\";c.start(0,()=>{let g=n.select(\\\"domReferenceElement\\\"),m=Vt(Ce(g));!h&&m===g||ie(l.current.floatingContext?.refs.floating.current,m)||ie(g,m)||S||sl(h??m,n.context.triggerElements)||n.setOpen(!1,de($.triggerFocus,b))})}}},[l,o,n,c]);return wn.useMemo(()=>a?{reference:d,trigger:d}:{},[a,d])}var vC=v(A(),1);var CC=class e{constructor(){this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Ua,this.restTimeout=new Ua,this.handleCloseOptions=void 0}static create(){return new e}dispose=()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()};disposeEffect=()=>this.dispose},ng=new WeakMap;function lu(e){if(!e.performedPointerEventsMutation)return;let t=e.pointerEventsScopeElement;t&&ng.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty(\\\"pointer-events\\\"),e.pointerEventsReferenceElement?.style.removeProperty(\\\"pointer-events\\\"),e.pointerEventsFloatingElement?.style.removeProperty(\\\"pointer-events\\\"),ng.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function rg(e,t){let{scopeElement:a,referenceElement:o,floatingElement:n}=t,r=ng.get(a);r&&r!==e&&lu(r),lu(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=a,e.pointerEventsReferenceElement=o,e.pointerEventsFloatingElement=n,ng.set(a,e),a.style.pointerEvents=\\\"none\\\",o.style.pointerEvents=\\\"auto\\\",n.style.pointerEvents=\\\"auto\\\"}function lg(e){let t=e.context.dataRef.current,a=We(()=>t.hoverInteractionState??CC.create()).current;return t.hoverInteractionState||(t.hoverInteractionState=a),Yi(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function LC(e,t={}){let{enabled:a=!0,closeDelay:o=0,nodeId:n}=t,r=\\\"rootStore\\\"in e?e.rootStore:e,l=r.useState(\\\"open\\\"),s=r.useState(\\\"floatingElement\\\"),i=r.useState(\\\"domReferenceElement\\\"),{dataRef:u}=r.context,c=ha(),d=io(),f=lg(r),p=Mt(),h=Z(()=>Em(u.current.openEvent?.type,f.interactedInside)),b=Z(()=>dM(u.current.openEvent?.type)),S=Z(()=>{lu(f)});V(()=>{l||(f.pointerType=void 0,f.restTimeoutPending=!1,f.interactedInside=!1,S())},[l,f,S]),vC.useEffect(()=>S,[S]),V(()=>{if(a&&l&&f.handleCloseOptions?.blockPointerEvents&&b()&&ke(i)&&s){let g=i,m=s,x=Ce(s),y=c?.nodesRef.current.find(C=>C.id===d)?.context?.elements.floating;y&&(y.style.pointerEvents=\\\"\\\");let L=f.pointerEventsScopeElement!==m?f.pointerEventsScopeElement:null,I=y!==m?y:null,R=f.handleCloseOptions?.getScope?.()??L??I??g.closest(\\\"[data-rootownerid]\\\")??x.body;return rg(f,{scopeElement:R,referenceElement:g,floatingElement:m}),()=>{S()}}},[a,l,i,s,f,b,c,d,S]),vC.useEffect(()=>{if(!a)return;function g(){return!!(c&&d&&Ao(c.nodesRef.current,d).length>0)}function m(C){let k=Wc(o,\\\"close\\\",f.pointerType),E=()=>{r.setOpen(!1,de($.triggerHover,C)),c?.events.emit(\\\"floating.closed\\\",C)};k?f.openChangeTimeout.start(k,E):(f.openChangeTimeout.clear(),E())}function x(C){let k=ft(C);if(!_S(k)){f.interactedInside=!1;return}f.interactedInside=k?.closest(\\\"[aria-haspopup]\\\")!=null}function y(){f.openChangeTimeout.clear(),p.clear(),c?.events.off(\\\"floating.closed\\\",I),S()}function L(C){if(g()&&c){c.events.on(\\\"floating.closed\\\",I);return}if(sl(C.relatedTarget,r.context.triggerElements))return;let k=u.current.floatingContext?.nodeId??n,E=C.relatedTarget;if(!(c&&k&&ke(E)&&Ao(c.nodesRef.current,k,!1).some(w=>ie(w.context?.elements.floating,E)))){if(f.handler){f.handler(C);return}S(),b()&&!h()&&m(C)}}function I(C){!c||!d||g()||p.start(0,()=>{c.events.off(\\\"floating.closed\\\",I),r.setOpen(!1,de($.triggerHover,C)),c.events.emit(\\\"floating.closed\\\",C)})}let R=s;return ma(R&&we(R,\\\"mouseenter\\\",y),R&&we(R,\\\"mouseleave\\\",L),R&&we(R,\\\"pointerdown\\\",x,!0),()=>{c?.events.off(\\\"floating.closed\\\",I)})},[a,s,r,u,o,n,b,h,S,f,c,d,p])}var gl=v(A(),1),YA=v(Pn(),1);var eq={current:null};function gf(e,t={}){let{enabled:a=!0,delay:o=0,handleClose:n=null,mouseOnly:r=!1,restMs:l=0,move:s=!0,triggerElementRef:i=eq,externalTree:u,isActiveTrigger:c=!0,getHandleCloseContext:d,isClosing:f,shouldOpen:p,guardStaleOpen:h=!1}=t,b=\\\"rootStore\\\"in e?e.rootStore:e,{dataRef:S,events:g}=b.context,m=ha(u),x=lg(b),y=gl.useRef(!1),L=Rt(n),I=Rt(o),R=Rt(l),C=Rt(a),k=Rt(p),E=Rt(f),T=Z(()=>Em(S.current.openEvent?.type,x.interactedInside)),w=Z(()=>k.current?.()!==!1),P=Z((_,U,B)=>{let z=b.context.triggerElements;if(z.hasElement(U))return!_||!ie(_,U);if(!ke(B))return!1;let N=B;return z.hasMatchingElement(j=>ie(j,N))&&(!_||!ie(_,N))}),D=Z(()=>{if(!x.handler)return;Ce(b.select(\\\"domReferenceElement\\\")).removeEventListener(\\\"mousemove\\\",x.handler),x.handler=void 0}),M=Z(()=>{lu(x)});return c&&(x.handleCloseOptions=n?.__options),gl.useEffect(()=>D,[D]),gl.useEffect(()=>{if(!a)return;function _(U){U.open?y.current=!1:(y.current=U.reason===$.triggerHover,D(),x.openChangeTimeout.clear(),x.restTimeout.clear(),x.blockMouseMove=!0,x.restTimeoutPending=!1)}return g.on(\\\"openchange\\\",_),()=>{g.off(\\\"openchange\\\",_)}},[a,g,x,D]),gl.useEffect(()=>{if(!a)return;function _(ae,oe=!0){let q=Wc(I.current,\\\"close\\\",x.pointerType);q?x.openChangeTimeout.start(q,()=>{b.setOpen(!1,de($.triggerHover,ae)),m?.events.emit(\\\"floating.closed\\\",ae)}):oe&&(x.openChangeTimeout.clear(),b.setOpen(!1,de($.triggerHover,ae)),m?.events.emit(\\\"floating.closed\\\",ae))}let U=i.current??(c?b.select(\\\"domReferenceElement\\\"):null);if(!ke(U))return;function B(ae){if(x.openChangeTimeout.clear(),x.blockMouseMove=!1,r&&!tr(x.pointerType))return;let oe=FS(R.current),q=Wc(I.current,\\\"open\\\",x.pointerType),Y=ft(ae),G=ae.currentTarget??null,xe=b.select(\\\"domReferenceElement\\\"),Q=G;if(ke(Y)&&!b.context.triggerElements.hasElement(Y)){for(let le of b.context.triggerElements.elements())if(ie(le,Y)){Q=le;break}}ke(G)&&ke(xe)&&!b.context.triggerElements.hasElement(G)&&ie(G,xe)&&(Q=xe);let W=Q==null?!1:P(xe,Q,Y),ge=b.select(\\\"open\\\"),ye=E.current?.()??b.select(\\\"transitionStatus\\\")===\\\"ending\\\",ee=!ge&&ye&&y.current,be=!W&&ke(Q)&&ke(xe)&&ie(xe,Q)&&ee,me=oe>0&&!q,Le=W&&(ge||ee)||be,Ee=!ge||W;if(Le){w()&&b.setOpen(!0,de($.triggerHover,ae,Q));return}me||(q?x.openChangeTimeout.start(q,()=>{Ee&&w()&&b.setOpen(!0,de($.triggerHover,ae,Q))}):Ee&&w()&&b.setOpen(!0,de($.triggerHover,ae,Q)))}function z(ae){if(T()){M();return}D();let oe=b.select(\\\"domReferenceElement\\\"),q=Ce(oe);x.restTimeout.clear(),x.restTimeoutPending=!1;let Y=S.current.floatingContext??d?.();if(sl(ae.relatedTarget,b.context.triggerElements))return;if(L.current&&Y){b.select(\\\"open\\\")||x.openChangeTimeout.clear();let xe=i.current;x.handler=L.current({...Y,tree:m,x:ae.clientX,y:ae.clientY,onClose(){M(),D(),C.current&&!T()&&xe===b.select(\\\"domReferenceElement\\\")&&_(ae,!0)}}),q.addEventListener(\\\"mousemove\\\",x.handler),x.handler(ae);return}(x.pointerType!==\\\"touch\\\"||!ie(b.select(\\\"floatingElement\\\"),ae.relatedTarget))&&_(ae)}function N(ae){ie(U,ae.relatedTarget)||(x.openChangeTimeout.clear(),x.restTimeout.clear(),x.restTimeoutPending=!1)}let j=h?we(U,\\\"mouseout\\\",N):void 0;return s?ma(we(U,\\\"mousemove\\\",B,{once:!0}),we(U,\\\"mouseenter\\\",B),we(U,\\\"mouseleave\\\",z),j):ma(we(U,\\\"mouseenter\\\",B),we(U,\\\"mouseleave\\\",z),j)},[D,M,S,I,b,a,L,x,c,P,T,r,s,R,i,m,C,d,E,w,h]),gl.useMemo(()=>{if(!a)return;function _(U){x.pointerType=U.pointerType}return{onPointerDown:_,onPointerEnter:_,onMouseMove(U){let{nativeEvent:B}=U,z=U.currentTarget,N=b.select(\\\"domReferenceElement\\\"),j=b.select(\\\"open\\\"),ae=P(N,z,U.target);if(r&&!tr(x.pointerType))return;if(j&&ae&&x.handleCloseOptions?.blockPointerEvents){let Y=b.select(\\\"floatingElement\\\");if(Y){let G=x.handleCloseOptions?.getScope?.()??z.ownerDocument.body;rg(x,{scopeElement:G,referenceElement:z,floatingElement:Y})}}let oe=FS(R.current);if(j&&!ae||oe===0||!ae&&x.restTimeoutPending&&U.movementX**2+U.movementY**2<2)return;x.restTimeout.clear();function q(){if(x.restTimeoutPending=!1,T())return;let Y=b.select(\\\"open\\\");!x.blockMouseMove&&(!Y||ae)&&w()&&b.setOpen(!0,de($.triggerHover,B,z))}x.pointerType===\\\"touch\\\"?YA.flushSync(()=>{q()}):ae&&j?q():(x.restTimeoutPending=!0,x.restTimeout.start(oe,q))}}},[a,x,T,P,r,b,R,w])}var na=v(A(),1);var tq=\\\"Escape\\\";function KA(e){return Ke.engine.webkit&&e.movementX===0&&e.movementY===0}function ig(e,t,a){switch(e){case\\\"vertical\\\":return t;case\\\"horizontal\\\":return a;default:return t||a}}function sg(e,t){return ig(t,e===NS||e===wm,e===Kc||e===Zc)}function RC(e,t,a){return ig(t,e===wm,a?e===Kc:e===Zc)||e===\\\"Enter\\\"||e===\\\" \\\"||e===\\\"\\\"}function aq(e,t,a){return ig(t,a?e===Kc:e===Zc,e===wm)}function oq(e,t,a,o){let n=a?e===Zc:e===Kc,r=e===NS;return t===\\\"both\\\"||t===\\\"horizontal\\\"&&o?e===tq:ig(t,n,r)}function IC(e,t){let{listRef:a,activeIndex:o,onNavigate:n=()=>{},enabled:r=!0,selectedIndex:l=null,allowEscape:s=!1,loopFocus:i=!1,nested:u=!1,rtl:c=!1,virtual:d=!1,focusItemOnOpen:f=\\\"auto\\\",focusItemOnHover:p=!0,openOnArrowKeyDown:h=!0,disabledIndices:b=void 0,orientation:S=\\\"vertical\\\",parentOrientation:g,id:m,resetOnPointerLeave:x=!0,externalTree:y,grid:L}=t,I=L!=null,R=\\\"rootStore\\\"in e?e.rootStore:e,C=R.useState(\\\"open\\\"),k=R.useState(\\\"floatingElement\\\"),E=R.useState(\\\"domReferenceElement\\\"),T=R.context.dataRef,w=Qc(k),P=$c(E),D=Rt(w),M=io(),_=ha(y),U=na.useRef(f),B=na.useRef(l??-1),z=na.useRef(null),N=na.useRef(!0),j=Z(te=>{n(B.current===-1?null:B.current,te)}),ae=na.useRef(!!k),oe=na.useRef(C),q=na.useRef(!1),Y=na.useRef(!1),G=na.useRef(null),xe=Rt(b),Q=Rt(C),W=Rt(l),ge=Rt(x),ye=so(),ee=so(),be=Z(()=>{function te(X){d?_?.events.emit(\\\"virtualfocus\\\",X):G.current=eu(X,{sync:q.current,preventScroll:!0})}let fe=a.current[B.current],K=Y.current;fe&&te(fe),(q.current?X=>X():X=>ye.request(X))(()=>{let X=a.current[B.current]||fe;if(!X)return;fe||te(X),ue&&(K||!N.current)&&X.scrollIntoView?.({block:\\\"nearest\\\",inline:\\\"nearest\\\"})})});V(()=>{T.current.orientation=S},[T,S]),V(()=>{r&&(C&&k?(B.current=l??-1,U.current&&l!=null&&(Y.current=!0,j())):ae.current&&(B.current=-1,j()))},[r,C,k,l,j]),V(()=>{if(r){if(!C){q.current=!1;return}if(k)if(o==null){if(q.current=!1,W.current!=null)return;if(ae.current&&(B.current=-1,be()),(!oe.current||!ae.current)&&U.current&&(z.current!=null||U.current===!0&&z.current==null)){let te=0,fe=()=>{a.current[0]==null?(te<2&&(te?H=>ee.request(H):queueMicrotask)(fe),te+=1):(B.current=z.current==null||RC(z.current,S,c)||u?hs(a):Qi(a),z.current=null,j())};fe()}}else cl(a.current,o)||(B.current=o,be(),Y.current=!1)}},[r,C,k,o,W,u,a,S,c,j,be,ee]),V(()=>{if(!r||k||!_||d||!ae.current)return;let te=_.nodesRef.current,fe=te.find(X=>X.id===M)?.context?.elements.floating,K=Vt(Ce(E??fe??null)),H=te.some(X=>X.context&&ie(X.context.elements.floating,K));fe&&!H&&N.current&&fe.focus({preventScroll:!0})},[r,k,E,_,M,d]),V(()=>{oe.current=C,ae.current=!!k}),V(()=>{C||(z.current=null,U.current=f)},[C,f]);let me=o!=null,Le=Z(te=>{if(!Q.current)return;let fe=a.current.indexOf(te.currentTarget);fe!==-1&&(B.current!==fe||o!==fe)&&(B.current=fe,j(te))}),Ee=Z(()=>g??_?.nodesRef.current.find(te=>te.id===M)?.context?.dataRef?.current.orientation),le=Z(()=>hs(a,xe.current)),Te=Z(te=>{if(N.current=!1,q.current=!0,te.which===229||!Q.current&&te.currentTarget===D.current)return;if(u&&oq(te.key,S,c,I)){sg(te.key,Ee())||qa(te),R.setOpen(!1,de($.listNavigation,te.nativeEvent)),Be(E)&&(d?_?.events.emit(\\\"virtualfocus\\\",E):E.focus());return}let fe=B.current,K=hs(a,b),H=Qi(a,b);if(P||(te.key===\\\"Home\\\"&&(qa(te),B.current=K,j(te)),te.key===\\\"End\\\"&&(qa(te),B.current=H,j(te))),L!=null){let X=L(te,B.current,a,S,i,c,b,K,H);if(X!=null&&(B.current=X,j(te)),S===\\\"both\\\")return}if(sg(te.key,S)){if(qa(te),C&&!d&&Vt(te.currentTarget.ownerDocument)===te.currentTarget){B.current=RC(te.key,S,c)?K:H,j(te);return}RC(te.key,S,c)?i?fe>=H?s&&fe!==a.current.length?B.current=-1:(q.current=!1,B.current=K):B.current=Mo(a.current,{startingIndex:fe,disabledIndices:b}):B.current=Math.min(H,Mo(a.current,{startingIndex:fe,disabledIndices:b})):i?fe<=K?s&&fe!==-1?B.current=a.current.length:(q.current=!1,B.current=H):B.current=Mo(a.current,{startingIndex:fe,decrement:!0,disabledIndices:b}):B.current=Math.max(K,Mo(a.current,{startingIndex:fe,decrement:!0,disabledIndices:b})),cl(a.current,B.current)&&(B.current=-1),j(te)}}),ue=na.useMemo(()=>({onFocus(fe){q.current=!0,Le(fe)},onClick:({currentTarget:fe})=>fe.focus({preventScroll:!0}),onMouseMove(fe){KA(fe)||(q.current=!0,Y.current=!1,p&&Le(fe))},onPointerLeave(fe){if(!Q.current||!N.current||fe.pointerType===\\\"touch\\\")return;q.current=!0;let K=fe.relatedTarget;if(!(!p||a.current.includes(K))&&ge.current&&(G.current?.(),G.current=null,B.current=-1,j(fe),!d)){let H=D.current,X=Vt(Ce(H));H&&ie(H,X)&&H.focus({preventScroll:!0})}}}),[Le,Q,D,p,a,j,ge,d]),ce=na.useMemo(()=>d&&C&&me&&{\\\"aria-activedescendant\\\":`${m}-${o}`},[d,C,me,m,o]),pe=na.useMemo(()=>({...P?{}:ce,onKeyDown(te){if(te.key===\\\"Tab\\\"&&te.shiftKey&&C&&!d){let fe=ft(te.nativeEvent);if(fe&&!ie(D.current,fe))return;qa(te),R.setOpen(!1,de($.focusOut,te.nativeEvent)),Be(E)&&E.focus();return}Te(te)},onPointerMove(te){KA(te)||(N.current=!0)}}),[ce,Te,D,P,R,C,d,E]),Ve=na.useMemo(()=>{function te(H){R.setOpen(!0,de($.listNavigation,H.nativeEvent,H.currentTarget))}function fe(H){f===\\\"auto\\\"&&Zi(H.nativeEvent)&&(U.current=!d)}function K(H){U.current=f,f===\\\"auto\\\"&&$i(H.nativeEvent)&&(U.current=!0)}return{onKeyDown(H){let X=R.select(\\\"open\\\");N.current=!1;let Re=H.key.startsWith(\\\"Arrow\\\"),Ga=aq(H.key,Ee(),c),Zo=sg(H.key,S),Xa=(u?Ga:Zo)||H.key===\\\"Enter\\\"||H.key.trim()===\\\"\\\";if(d&&X)return Te(H);if(!(!X&&!h&&Re)){if(Xa){let he=sg(H.key,Ee());z.current=u&&he?null:H.key}if(u){Ga&&(qa(H),X?(B.current=le(),j(H)):te(H));return}Zo&&(W.current!=null&&(B.current=W.current),qa(H),!X&&h?te(H):Te(H),X&&j(H))}},onFocus(H){R.select(\\\"open\\\")&&!d&&(B.current=-1,j(H))},onPointerDown:K,onPointerEnter:K,onMouseDown:fe,onClick:fe}},[Te,f,le,u,j,R,h,S,Ee,c,W,d]),wt=na.useMemo(()=>({...ce,...Ve}),[ce,Ve]);return na.useMemo(()=>r?{reference:wt,floating:pe,item:ue,trigger:Ve}:{},[r,wt,pe,Ve,ue])}var vs=v(A(),1);function wC(e,t){let{listRef:a,elementsRef:o,activeIndex:n,onMatch:r,disabledIndices:l,onTyping:s,enabled:i=!0,resetMs:u=750,selectedIndex:c=null}=t,d=\\\"rootStore\\\"in e?e.rootStore:e,f=d.useState(\\\"open\\\"),p=Mt(),h=vs.useRef(\\\"\\\"),b=vs.useRef(c??n??-1),S=vs.useRef(null),g=Z(y=>{function L(D){return o?.current[D]}function I(D){let M=L(D);return M&&!xs(M)||M?.matches(\\\":disabled\\\")?!1:l==null||!or(ca,D,l)}function R(D,M,_=0){if(D.length===0)return-1;let U=(_%D.length+D.length)%D.length,B=M.toLowerCase();for(let z=0;z<D.length;z+=1){let N=(U+z)%D.length;if(!(!D[N]?.toLowerCase().startsWith(B)||!I(N)))return N}return-1}let C=a.current;if(h.current.length>0&&y.key===\\\" \\\"&&(qa(y),s?.(!0)),h.current.length>0&&h.current[0]!==\\\" \\\"&&R(C,h.current)===-1&&y.key!==\\\" \\\"&&s?.(!1),C==null||y.key.length!==1||y.ctrlKey||y.metaKey||y.altKey)return;f&&y.key!==\\\" \\\"&&(qa(y),s?.(!0));let k=h.current===\\\"\\\";k&&(b.current=c??n??-1),C.every((D,M)=>D&&I(M)?D[0]?.toLowerCase()!==D[1]?.toLowerCase():!0)&&h.current===y.key&&(h.current=\\\"\\\",b.current=S.current),h.current+=y.key,p.start(u,()=>{h.current=\\\"\\\",b.current=S.current,s?.(!1)});let w=((k?c??n??-1:b.current)??0)+1,P=R(C,h.current,w);P!==-1?(r?.(P),S.current=P):y.key!==\\\" \\\"&&(h.current=\\\"\\\",s?.(!1))}),m=Z(y=>{let L=y.relatedTarget,I=d.select(\\\"domReferenceElement\\\"),R=d.select(\\\"floatingElement\\\");ie(I,L)||ie(R,L)||(p.clear(),h.current=\\\"\\\",b.current=S.current,s?.(!1))});V(()=>{!f&&c!==null||(p.clear(),S.current=null,h.current!==\\\"\\\"&&(h.current=\\\"\\\"))},[f,c,p]);let x=vs.useMemo(()=>({onKeyDown:g,onBlur:m}),[g,m]);return vs.useMemo(()=>i?{reference:x,floating:x}:{},[i,x])}var ZA=.1,nq=ZA*ZA,st=.5;function ug(e,t,a,o,n,r){return o>=t!=r>=t&&e<=(n-a)*(t-o)/(r-o)+a}function cg(e,t,a,o,n,r,l,s,i,u){let c=!1;return ug(e,t,a,o,n,r)&&(c=!c),ug(e,t,n,r,l,s)&&(c=!c),ug(e,t,l,s,i,u)&&(c=!c),ug(e,t,i,u,a,o)&&(c=!c),c}function rq(e,t,a){return e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height}function fg(e,t,a,o,n,r){let l=Math.min(a,n),s=Math.max(a,n),i=Math.min(o,r),u=Math.max(o,r);return e>=l&&e<=s&&t>=i&&t<=u}function hf(e={}){let{blockPointerEvents:t=!1}=e,a=new Ua,o=({x:n,y:r,placement:l,elements:s,onClose:i,nodeId:u,tree:c})=>{let d=l?.split(\\\"-\\\")[0],f=!1,p=null,h=null,b=typeof performance<\\\"u\\\"?performance.now():0;function S(m,x){let y=performance.now(),L=y-b;if(p===null||h===null||L===0)return p=m,h=x,b=y,!1;let I=m-p,R=x-h,C=I*I+R*R,k=L*L*nq;return p=m,h=x,b=y,C<k}function g(){a.clear(),i()}return function(x){a.clear();let y=s.domReference,L=s.floating;if(!y||!L||d==null||n==null||r==null)return;let{clientX:I,clientY:R}=x,C=ft(x),k=x.type===\\\"mouseleave\\\",E=ie(L,C),T=ie(y,C);if(E&&(f=!0,!k))return;if(T&&(f=!1,!k)){f=!0;return}if(k&&ke(x.relatedTarget)&&ie(L,x.relatedTarget))return;function w(){return!!(c&&Ao(c.nodesRef.current,u).length>0)}function P(){w()||g()}if(w())return;let D=y.getBoundingClientRect(),M=L.getBoundingClientRect(),_=n>M.right-M.width/2,U=r>M.bottom-M.height/2,B=M.width>D.width,z=M.height>D.height,N=(B?D:M).left,j=(B?D:M).right,ae=(z?D:M).top,oe=(z?D:M).bottom;if(d===\\\"top\\\"&&r>=D.bottom-1||d===\\\"bottom\\\"&&r<=D.top+1||d===\\\"left\\\"&&n>=D.right-1||d===\\\"right\\\"&&n<=D.left+1){P();return}let q=!1;switch(d){case\\\"top\\\":q=fg(I,R,N,D.top+1,j,M.bottom-1);break;case\\\"bottom\\\":q=fg(I,R,N,M.top+1,j,D.bottom-1);break;case\\\"left\\\":q=fg(I,R,M.right-1,oe,D.left+1,ae);break;case\\\"right\\\":q=fg(I,R,D.right-1,oe,M.left+1,ae);break;default:}if(q)return;if(f&&!rq(I,R,D)){P();return}if(!k&&S(I,R)){P();return}let Y=!1;switch(d){case\\\"top\\\":{let G=B?st/2:st*4,xe=B||_?n+G:n-G,Q=B?n-G:_?n+G:n-G,W=r+st+1,ge=_||B?M.bottom-st:M.top,ye=_?B?M.bottom-st:M.top:M.bottom-st;Y=cg(I,R,xe,W,Q,W,M.left,ge,M.right,ye);break}case\\\"bottom\\\":{let G=B?st/2:st*4,xe=B||_?n+G:n-G,Q=B?n-G:_?n+G:n-G,W=r-st,ge=_||B?M.top+st:M.bottom,ye=_?B?M.top+st:M.bottom:M.top+st;Y=cg(I,R,xe,W,Q,W,M.left,ge,M.right,ye);break}case\\\"left\\\":{let G=z?st/2:st*4,xe=z||U?r+G:r-G,Q=z?r-G:U?r+G:r-G,W=n+st+1,ge=U||z?M.right-st:M.left,ye=U?z?M.right-st:M.left:M.right-st;Y=cg(I,R,ge,M.top,ye,M.bottom,W,xe,W,Q);break}case\\\"right\\\":{let G=z?st/2:st*4,xe=z||U?r+G:r-G,Q=z?r-G:U?r+G:r-G,W=n-st,ge=U||z?M.left+st:M.right,ye=U?z?M.left+st:M.right:M.left+st;Y=cg(I,R,W,xe,W,Q,ge,M.top,ye,M.bottom);break}default:}Y?f||a.start(40,P):P()}};return o.__options={...e,blockPointerEvents:t},o}var dg=v(A(),1),lq=dg.createContext(void 0);function pg(e){let t=dg.useContext(lq);if(t===void 0&&!e)throw new Error(Ne(69));return t}var gg=\\\"ArrowUp\\\",hg=\\\"ArrowDown\\\",xg=\\\"ArrowLeft\\\",bg=\\\"ArrowRight\\\",yg=\\\"Home\\\",Sg=\\\"End\\\";var su=new Set([gg,hg,xg,bg,yg,Sg]),sq=\\\"Shift\\\",QA=[sq,\\\"Control\\\",\\\"Alt\\\",\\\"Meta\\\"];function iq(e){return Be(e)&&e.tagName===\\\"INPUT\\\"}function TC(e){return!!(iq(e)&&e.selectionStart!=null||Be(e)&&e.tagName===\\\"TEXTAREA\\\")}function EC(e,t,a,o){if(!e||!t||!t.scrollTo)return;let n=e.scrollLeft,r=e.scrollTop,l=e.clientWidth<e.scrollWidth,s=e.clientHeight<e.scrollHeight;if(l&&o!==\\\"vertical\\\"){let i=$A(e,t,\\\"left\\\"),u=mg(e),c=mg(t);a===\\\"ltr\\\"&&(i+t.offsetWidth+c.scrollMarginRight>e.scrollLeft+e.clientWidth-u.scrollPaddingRight?n=i+t.offsetWidth+c.scrollMarginRight-e.clientWidth+u.scrollPaddingRight:i-c.scrollMarginLeft<e.scrollLeft+u.scrollPaddingLeft&&(n=i-c.scrollMarginLeft-u.scrollPaddingLeft)),a===\\\"rtl\\\"&&(i-c.scrollMarginLeft<e.scrollLeft+u.scrollPaddingLeft?n=i-c.scrollMarginLeft-u.scrollPaddingLeft:i+t.offsetWidth+c.scrollMarginRight>e.scrollLeft+e.clientWidth-u.scrollPaddingRight&&(n=i+t.offsetWidth+c.scrollMarginRight-e.clientWidth+u.scrollPaddingRight))}if(s&&o!==\\\"horizontal\\\"){let i=$A(e,t,\\\"top\\\"),u=mg(e),c=mg(t);i-c.scrollMarginTop<e.scrollTop+u.scrollPaddingTop?r=i-c.scrollMarginTop-u.scrollPaddingTop:i+t.offsetHeight+c.scrollMarginBottom>e.scrollTop+e.clientHeight-u.scrollPaddingBottom&&(r=i+t.offsetHeight+c.scrollMarginBottom-e.clientHeight+u.scrollPaddingBottom)}e.scrollTo({left:n,top:r,behavior:\\\"auto\\\"})}function $A(e,t,a){let o=a===\\\"left\\\"?\\\"offsetLeft\\\":\\\"offsetTop\\\",n=0;for(;t.offsetParent&&(n+=t[o],t.offsetParent!==e);)t=t.offsetParent;return n}function mg(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}function Cg(e){return e===\\\"starting\\\"?_M:Ae}var WA=v(O(),1),JA=vg.forwardRef(function(t,a){let{render:o,className:n,style:r,finalFocus:l,...s}=t,{store:i}=rt(),{side:u,align:c}=pa(),d=pg(!0)!=null,f=i.useState(\\\"open\\\"),p=i.useState(\\\"transitionStatus\\\"),h=i.useState(\\\"popupProps\\\"),b=i.useState(\\\"mounted\\\"),S=i.useState(\\\"instantType\\\"),g=i.useState(\\\"activeTriggerElement\\\"),m=i.useState(\\\"parent\\\"),x=i.useState(\\\"lastOpenChangeReason\\\"),y=i.useState(\\\"rootId\\\"),L=i.useState(\\\"floatingRootContext\\\"),I=i.useState(\\\"floatingTreeRoot\\\"),R=i.useState(\\\"closeDelay\\\"),C=i.useState(\\\"hoverEnabled\\\"),k=i.useState(\\\"disabled\\\"),E=i.useState(\\\"openMethod\\\"),T=m.type===\\\"context-menu\\\";vn({open:f,ref:i.context.popupRef,onComplete(){f&&i.context.onOpenChangeComplete?.(!0)}}),vg.useEffect(()=>{function _(U){i.setOpen(!1,de(U.reason,U.domEvent))}return I.events.on(\\\"close\\\",_),()=>{I.events.off(\\\"close\\\",_)}},[I.events,i]),LC(L,{enabled:C&&!k&&!T&&m.type!==\\\"menubar\\\",closeDelay:R});let w=i.useStateSetter(\\\"popupElement\\\"),P={transitionStatus:p,side:u,align:c,open:f,nested:m.type===\\\"menu\\\",instant:S},D=se(\\\"div\\\",t,{state:P,ref:[a,i.context.popupRef,w],stateAttributesMapping:Vi,props:[h,{onKeyDown(_){d&&su.has(_.key)&&_.stopPropagation()}},Cg(p),s,{\\\"data-rootownerid\\\":y}]}),M=m.type===void 0||T;return(g||m.type===\\\"menubar\\\"&&x!==$.outsidePress)&&(M=!0),(0,WA.jsx)(sf,{context:L,openInteractionType:E,modal:T,disabled:!b,returnFocus:l===void 0?M:l,initialFocus:m.type!==\\\"menu\\\",restoreFocus:!0,externalTree:m.type!==\\\"menubar\\\"?I:void 0,previousFocusableElement:g,nextFocusableElement:m.type===void 0?i.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:m.type===void 0?i.context.beforeContentFocusGuardRef:void 0,children:D})});var t1=v(A(),1);var Lg=v(A(),1),kC=Lg.createContext(void 0);function e1(){let e=Lg.useContext(kC);if(e===void 0)throw new Error(Ne(32));return e}var MC=v(O(),1),a1=t1.forwardRef(function(t,a){let{keepMounted:o=!1,...n}=t,{store:r,parent:l}=rt();if(!(r.useState(\\\"mounted\\\")||o))return null;let u=l.type===\\\"menu\\\"||l.type===\\\"menubar\\\"?\\\"group\\\":void 0;return(0,MC.jsx)(kC.Provider,{value:o,children:(0,MC.jsx)(nf,{ref:a,...n,portalOwnerRole:u})})});var En=v(A(),1);function iu(e){return Oi(19)?e:e?\\\"true\\\":void 0}var uo=v(A(),1);var Rg=v(A(),1),uq=Rg.createContext(void 0);function Tn(){return Rg.useContext(uq)?.direction??\\\"ltr\\\"}var cq=e=>({name:\\\"arrow\\\",options:e,async fn(t){let{x:a,y:o,placement:n,rects:r,platform:l,elements:s,middlewareData:i}=t,{element:u,padding:c=0,offsetParent:d=\\\"real\\\"}=Rn(e,t)||{};if(u==null)return{};let f=Pm(c),p={x:a,y:o},h=af(n),b=tf(h),S=await l.getDimensions(u),g=h===\\\"y\\\",m=g?\\\"top\\\":\\\"left\\\",x=g?\\\"bottom\\\":\\\"right\\\",y=g?\\\"clientHeight\\\":\\\"clientWidth\\\",L=r.reference[b]+r.reference[h]-p[h]-r.floating[b],I=p[h]-r.reference[h],R=d===\\\"real\\\"?await l.getOffsetParent?.(u):s.floating,C=s.floating[y]||r.floating[b];(!C||!await l.isElement?.(R))&&(C=s.floating[y]||r.floating[b]);let k=L/2-I/2,E=C/2-S[b]/2-1,T=Math.min(f[m],E),w=Math.min(f[x],E),P=T,D=C-S[b]-w,M=C/2-S[b]/2+k,_=Om(P,M,D),U=!i.arrow&&ko(n)!=null&&M!==_&&r.reference[b]/2-(M<P?T:w)-S[b]/2<0,B=U?M<P?M-P:M-D:0;return{[h]:p[h]+B,data:{[h]:_,centerOffset:M-_-B,...U&&{alignmentOffset:B}},reset:U}}}),o1=(e,t)=>{let{name:a,fn:o}=cq(e);return{name:a,fn:o,options:[e,t]}};var n1={name:\\\"hide\\\",async fn(e){let{width:t,height:a,x:o,y:n}=e.rects.reference,r=t===0&&a===0&&o===0&&n===0,l=await e.platform.detectOverflow(e,{elementContext:\\\"reference\\\"});return{data:{referenceHidden:l.top-a>=0||l.right-t>=0||l.bottom-a>=0||l.left-t>=0||r}}}};var uu={sideX:\\\"left\\\",sideY:\\\"top\\\"};var Ig=\\\"--available-width\\\",wg=\\\"--available-height\\\",r1=\\\"--anchor-width\\\",l1=\\\"--anchor-height\\\",s1=\\\"--transform-origin\\\",i1=\\\"--positioner-width\\\",u1=\\\"--positioner-height\\\";var f1=Ig,d1=wg;function g1(e,t,a){let o=e===\\\"inline-start\\\"||e===\\\"inline-end\\\";return{top:\\\"top\\\",right:o?a?\\\"inline-start\\\":\\\"inline-end\\\":\\\"right\\\",bottom:\\\"bottom\\\",left:o?a?\\\"inline-end\\\":\\\"inline-start\\\":\\\"left\\\"}[t]}function p1(e,t,a){let{rects:o,placement:n}=e;return{side:g1(t,ga(n),a),align:ko(n)||\\\"center\\\",anchor:{width:o.reference.width,height:o.reference.height},positioner:{width:o.floating.width,height:o.floating.height}}}function h1(e){return fq(e,jA)}function fq(e,t){let{anchor:a,positionMethod:o=\\\"absolute\\\",side:n=\\\"bottom\\\",sideOffset:r=0,align:l=\\\"center\\\",alignOffset:s=0,collisionBoundary:i,collisionPadding:u=5,sticky:c=!1,arrowPadding:d=5,disableAnchorTracking:f=!1,inline:p,keepMounted:h=!1,floatingRootContext:b,mounted:S,collisionAvoidance:g,shift:m,nodeId:x,adaptiveOrigin:y,lazyFlip:L=!1,externalTree:I}=e,[R,C]=uo.useState(null);!S&&R!==null&&C(null);let k=g.side||\\\"flip\\\",E=g.align||\\\"flip\\\",T=g.fallbackAxisSide||\\\"end\\\",w=m?.crossAxis??!1,P=m?.rootBoundary,D=typeof a==\\\"function\\\"?a:void 0,M=Z(D),_=D?M:a,U=Rt(a),B=Rt(S),N=Tn()===\\\"rtl\\\",j=R||{top:\\\"top\\\",right:\\\"right\\\",bottom:\\\"bottom\\\",left:\\\"left\\\",\\\"inline-end\\\":N?\\\"left\\\":\\\"right\\\",\\\"inline-start\\\":N?\\\"right\\\":\\\"left\\\"}[n],ae=l===\\\"center\\\"?j:`${j}-${l}`,oe=u;typeof oe==\\\"number\\\"?oe={top:oe,right:oe,bottom:oe,left:oe}:oe&&(oe={top:oe.top||0,right:oe.right||0,bottom:oe.bottom||0,left:oe.left||0});let q=1,Y=n===\\\"bottom\\\"?q:0,G=n===\\\"top\\\"?q:0,xe=n===\\\"right\\\"?q:0,Q=n===\\\"left\\\"?q:0,W={boundary:i===\\\"clipping-ancestors\\\"?\\\"clippingAncestors\\\":i,padding:oe},ge=uo.useRef(null),ye=Rt(r),ee=Rt(s),be=typeof r!=\\\"function\\\"?r:0,me=typeof s!=\\\"function\\\"?s:0,Le=[];p&&Le.push(p),Le.push(nC(Xe=>{let ja=p1(Xe,n,N),po=typeof ye.current==\\\"function\\\"?ye.current(ja):ye.current,Aa=typeof ee.current==\\\"function\\\"?ee.current(ja):ee.current;return{mainAxis:po,crossAxis:Aa,alignmentAxis:Aa}},[be,me,N,n]));let Ee=E===\\\"none\\\"&&k!==\\\"shift\\\",le=!Ee&&(c||w||k===\\\"shift\\\"),Te=k===\\\"none\\\"?null:sC({...W,padding:{top:oe.top+q+Y,right:oe.right+q+Q,bottom:oe.bottom+q+G,left:oe.left+q+xe},mainAxis:!w&&k===\\\"flip\\\",crossAxis:E===\\\"flip\\\"?\\\"alignment\\\":!1,fallbackAxisSideDirection:T}),ue=Ee?null:rC({...W,rootBoundary:P,mainAxis:E!==\\\"none\\\",crossAxis:le,limiter:c||w?void 0:lC(Xe=>{if(!ge.current)return{};let{width:ja,height:po}=ge.current.getBoundingClientRect(),Aa=Va(ga(Xe.placement)),fr=Aa===\\\"y\\\"?ja:po,Po=Aa===\\\"y\\\"?oe.left+oe.right:oe.top+oe.bottom;return{offset:fr/2+Po/2}})},[W,c,w,P,oe,E]);k===\\\"shift\\\"||E===\\\"shift\\\"||l===\\\"center\\\"?Le.push(ue,Te):Le.push(Te,ue),Le.push(iC({...W,apply({elements:{floating:Xe},availableWidth:ja,availableHeight:po,rects:Aa}){if(!B.current)return;let fr=Xe.style;fr.setProperty(f1,`${ja}px`),fr.setProperty(d1,`${po}px`);let Po=Ye(Xe).devicePixelRatio||1,{x:Pf,y:Os,width:Nf,height:dr}=Aa.reference,xu=(Math.round((Pf+Nf)*Po)-Math.round(Pf*Po))/Po,bu=(Math.round((Os+dr)*Po)-Math.round(Os*Po))/Po;fr.setProperty(r1,`${xu}px`),fr.setProperty(l1,`${bu}px`)}}),o1(Xe=>({element:ge.current||Ce(Xe.elements.floating).createElement(\\\"div\\\"),padding:ge.current?d:0,offsetParent:\\\"floating\\\"}),[d]),{name:\\\"transformOrigin\\\",fn(Xe){let{elements:{floating:ja},middlewareData:po,placement:Aa,platform:fr,rects:Po,y:Pf}=Xe,Os=ga(Aa),Nf=ko(Aa),dr=Va(Os)===\\\"y\\\",xu=ge.current,bu=typeof r==\\\"function\\\"?r(p1(Xe,n,N)):r,Bf;if(!xu&&Nf&&Math.abs(dr?po.shift?.x||0:po.shift?.y||0)<=1)Bf=Nf===\\\"start\\\"===(dr&&fr.isRTL?.(ja)===!0)?\\\"100%\\\":\\\"0%\\\";else{let FP=dr?po.arrow?.x||0:po.arrow?.y||0,HP=dr?xu?.clientWidth||0:xu?.clientHeight||0;Bf=`${FP+HP/2}px`}let wh=Os===\\\"top\\\"||Os===\\\"left\\\"?`calc(100% + ${bu}px)`:`${-bu}px`;return le&&dr&&Math.abs(po.shift?.y||0)>bu&&(wh=`${Po.reference.y+Po.reference.height/2-Pf}px`),ja.style.setProperty(s1,dr?`${Bf} ${wh}`:`${wh} ${Bf}`),{}}},n1,y),V(()=>{!S&&b&&b.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[S,b]);let ce=uo.useMemo(()=>({ancestorScroll:!f,elementResize:!f&&typeof ResizeObserver<\\\"u\\\",layoutShift:!f&&typeof IntersectionObserver<\\\"u\\\"}),[f]),{refs:pe,elements:Ve,x:wt,y:te,middlewareData:fe,update:K,placement:H,context:X,isPositioned:Re,floatingStyles:Ga}=t({rootContext:b,open:h?S:void 0,placement:ae,middleware:Le,strategy:o,whileElementsMounted:h?void 0:(...Xe)=>ff(...Xe,ce),nodeId:x,externalTree:I}),{sideX:Zo,sideY:Xa}=fe.adaptiveOrigin||uu,he=Re?o:\\\"fixed\\\",dt=uo.useMemo(()=>{let Xe;return Re?y?Xe={position:he,[Zo]:wt,[Xa]:te}:Xe={...Ga,position:he}:Xe={position:he,top:0,left:0},Xe[f1]=\\\"100vw\\\",Xe[d1]=\\\"100vh\\\",Re||(Xe.opacity=0),Xe},[y,he,Zo,wt,Xa,te,Ga,Re]),Tt=uo.useRef(null);V(()=>{if(!S)return;let Xe=U.current,ja=typeof Xe==\\\"function\\\"?Xe():Xe,Aa=(m1(ja)?ja.current:ja)||null||null;Aa!==Tt.current&&(pe.setPositionReference(Aa),Tt.current=Aa)},[S,pe,_,U]),uo.useEffect(()=>{if(!S)return;let Xe=U.current;typeof Xe!=\\\"function\\\"&&m1(Xe)&&Xe.current!==Tt.current&&(pe.setPositionReference(Xe.current),Tt.current=Xe.current)},[S,pe,_,U]),uo.useEffect(()=>{if(h&&S&&Ve.reference&&Ve.floating)return ff(Ve.reference,Ve.floating,K,ce)},[h,S,Ve,K,ce]);let $o=ga(H),cr=g1(n,$o,N),Ll=ko(H)||\\\"center\\\",As=!!fe.hide?.referenceHidden;V(()=>{L&&S&&Re&&$o!==j&&C($o)},[L,S,Re,$o,j]);let Qo=uo.useMemo(()=>({position:\\\"absolute\\\",top:fe.arrow?.y,left:fe.arrow?.x}),[fe.arrow]),Df=fe.arrow?.centerOffset!==0;return uo.useMemo(()=>({positionerStyles:dt,arrowStyles:Qo,arrowRef:ge,arrowUncentered:Df,side:cr,align:Ll,physicalSide:$o,anchorHidden:As,refs:pe,context:X,isPositioned:Re,update:K}),[dt,Qo,ge,Df,cr,Ll,$o,As,pe,X,Re,K])}function m1(e){return e!=null&&\\\"current\\\"in e}var lr=v(A(),1);var x1=v(O(),1);function Tg(e){let{children:t,elementsRef:a,labelsRef:o,onMapChange:n}=e,r=Z(n),[,l]=lr.useState(!1),s=We(pq).current,i=We(dq).current,u=lr.useRef(0),c=lr.useRef(!0),d=lr.useRef(null),f=lr.useRef(null),p=Z(()=>{c.current||(c.current=!0,l(L=>!L))}),h=Z((L,I)=>{i.set(L,I),p()}),b=Z(L=>{i.delete(L),p()}),S=Z(L=>{let I=new Map;return a.current.length=0,o&&(o.current.length=0),L.forEach(R=>{I.set(R.element,{...R.registration.metadata??{},index:R.index}),a.current[R.index]=R.element,o&&(o.current[R.index]=R.registration.label!==void 0?R.registration.label:R.registration.textRef?.current?.textContent??R.element.textContent)}),u.current=a.current.length,I});function g(L){if(f.current?.disconnect(),f.current=null,typeof MutationObserver!=\\\"function\\\"||L.length<2)return;let I=new MutationObserver(C=>{if(!hq(C))return;let k=null;for(let E of L)if(E.isConnected){if(k&&b1(k,E)>0){I.disconnect(),p();return}k=E}});f.current=I;let R=new Set;for(let C=1;C<L.length;C+=1){let k=gq(L[C-1],L[C]);k&&R.add(k)}R.forEach(C=>I.observe(C,{childList:!0}))}let m=Z(()=>{let[L,I]=mq(i),R=S(L),C=d.current,k=!C||C.length!==L.length||L.some((E,T)=>{let w=C[T];return E.index!==w.index||E.element!==w.element||E.registration.index!==w.registration.index||E.registration.metadata!==w.registration.metadata});g(I),d.current=L,c.current=!1,k&&(s.forEach(E=>E(R)),r(R))});V(()=>(!c.current&&d.current&&S(d.current),()=>{a.current=[],o&&(o.current=[])}),[a,o,S]),V(()=>{c.current&&m()}),V(()=>()=>{f.current?.disconnect(),c.current=!0},[]);let x=Z(L=>(s.add(L),()=>{s.delete(L)})),y=lr.useMemo(()=>({register:h,unregister:b,subscribeMapChange:x,nextIndexRef:u}),[h,b,x,u]);return(0,x1.jsx)(MS.Provider,{value:y,children:t})}function dq(){return new Map}function pq(){return new Set}function mq(e){let t=new Set,a=[],o=[];e.forEach((r,l)=>{if(!l.isConnected)return;let s=r.index,i={index:s??-1,element:l,registration:r};s===null?o.push(i):s>=0&&(t.add(s),a.push(i))});let n=0;return o.sort((r,l)=>b1(r.element,l.element)),o.forEach(r=>{for(;t.has(n);)n+=1;r.index=n,a.push(r),n+=1}),t.size>0&&a.sort((r,l)=>r.index-l.index),[a,o.map(r=>r.element)]}function gq(e,t){let a=e.parentElement;for(;a&&!a.contains(t);)a=a.parentElement;return a}function hq(e){for(let t of e)for(let a=0;a<t.removedNodes.length;a+=1)if(t.removedNodes[a].isConnected)return!0;return!1}function b1(e,t){return e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}var y1=v(A(),1),S1=v(O(),1),Eg=y1.forwardRef(function(t,a){let{cutout:o,...n}=t,r;if(o){let l=o.getBoundingClientRect();r=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${l.left}px ${l.top}px,${l.left}px ${l.bottom}px,${l.right}px ${l.bottom}px,${l.right}px ${l.top}px,${l.left}px ${l.top}px)`}return(0,S1.jsx)(\\\"div\\\",{ref:a,role:\\\"presentation\\\",\\\"data-base-ui-inert\\\":\\\"\\\",...n,style:{position:\\\"fixed\\\",inset:0,userSelect:\\\"none\\\",WebkitUserSelect:\\\"none\\\",clipPath:r}})});function C1(e,t,{styles:a,transitionStatus:o,props:n,refs:r,hidden:l,inert:s=!1}){let i={...a};return s&&(i.pointerEvents=\\\"none\\\"),se(\\\"div\\\",e,{state:t,ref:r,props:[{role:\\\"presentation\\\",hidden:l,style:i},Cg(o),n],stateAttributesMapping:ss})}var w1=v(A(),1);var v1={},L1={},R1=\\\"\\\";function kg(e,t){return cs(e)?e:t}function I1(e,t,a){return/hidden|clip/.test(e.getComputedStyle(kg(t,a)).overflowY)}function xq(e){if(typeof document>\\\"u\\\")return!1;let t=Ce(e);return Ye(t).innerWidth-t.documentElement.clientWidth>0}function bq(e){if(!(typeof CSS<\\\"u\\\"&&CSS.supports&&CSS.supports(\\\"scrollbar-gutter\\\",\\\"stable\\\"))||typeof document>\\\"u\\\")return!1;let a=Ce(e),o=a.documentElement,n=a.body,r=kg(o,n),l=r.style.overflowY,s=o.style.scrollbarGutter;o.style.scrollbarGutter=\\\"stable\\\",r.style.overflowY=\\\"scroll\\\";let i=r.offsetWidth;r.style.overflowY=\\\"hidden\\\";let u=r.offsetWidth;return r.style.overflowY=l,o.style.scrollbarGutter=s,i===u}function yq(e){let t=Ce(e),a=t.documentElement,o=t.body,n=kg(a,o),r={overflowY:n.style.overflowY,overflowX:n.style.overflowX};return Object.assign(n.style,{overflowY:\\\"hidden\\\",overflowX:\\\"hidden\\\"}),()=>{Object.assign(n.style,r)}}function Sq(e){let t=Ce(e),a=t.documentElement,o=t.body,n=Ye(a),r=0,l=0,s=!1,i=Eo.create();if(Ke.engine.webkit&&(n.visualViewport?.scale??1)!==1)return()=>{};function u(){let p=n.getComputedStyle(a),h=n.getComputedStyle(o),g=(p.scrollbarGutter||\\\"\\\").includes(\\\"both-edges\\\")?\\\"stable both-edges\\\":\\\"stable\\\";r=a.scrollTop,l=a.scrollLeft,v1={scrollbarGutter:a.style.scrollbarGutter,overflowY:a.style.overflowY,overflowX:a.style.overflowX},R1=a.style.scrollBehavior,L1={position:o.style.position,height:o.style.height,width:o.style.width,boxSizing:o.style.boxSizing,overflowY:o.style.overflowY,overflowX:o.style.overflowX,scrollBehavior:o.style.scrollBehavior};let m=a.scrollHeight>a.clientHeight,x=a.scrollWidth>a.clientWidth,y=p.overflowY===\\\"scroll\\\"||h.overflowY===\\\"scroll\\\",L=p.overflowX===\\\"scroll\\\"||h.overflowX===\\\"scroll\\\",I=Math.max(0,n.innerWidth-o.clientWidth),R=Math.max(0,n.innerHeight-o.clientHeight),C=parseFloat(h.marginTop)+parseFloat(h.marginBottom),k=parseFloat(h.marginLeft)+parseFloat(h.marginRight),E=kg(a,o);if(s=bq(e),s){a.style.scrollbarGutter=g,E.style.overflowY=\\\"hidden\\\",E.style.overflowX=\\\"hidden\\\";return}Object.assign(a.style,{scrollbarGutter:g,overflowY:\\\"hidden\\\",overflowX:\\\"hidden\\\"}),(m||y)&&(a.style.overflowY=\\\"scroll\\\"),(x||L)&&(a.style.overflowX=\\\"scroll\\\"),Object.assign(o.style,{position:\\\"relative\\\",height:C||R?`calc(100dvh - ${C+R}px)`:\\\"100dvh\\\",width:k||I?`calc(100vw - ${k+I}px)`:\\\"100vw\\\",boxSizing:\\\"border-box\\\",overflowY:\\\"hidden\\\",overflowX:\\\"hidden\\\",scrollBehavior:\\\"unset\\\"}),o.scrollTop=r,o.scrollLeft=l,a.setAttribute(\\\"data-base-ui-scroll-locked\\\",\\\"\\\"),a.style.scrollBehavior=\\\"unset\\\"}function c(){Object.assign(a.style,v1),Object.assign(o.style,L1),s||(a.scrollTop=r,a.scrollLeft=l,a.removeAttribute(\\\"data-base-ui-scroll-locked\\\"),a.style.scrollBehavior=R1)}function d(){c(),i.request(u)}u();let f=we(n,\\\"resize\\\",d);return()=>{i.cancel(),c(),typeof n.removeEventListener==\\\"function\\\"&&f()}}var AC=class{lockCount=0;restore=null;timeoutLock=Ua.create();timeoutUnlock=Ua.create();acquire(t){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(t)),this.release}release=()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(t){if(this.lockCount===0||this.restore!==null)return;let a=Ce(t),o=a.documentElement,n=a.body,r=Ye(o);if(I1(r,o,n)){let s=new r.MutationObserver(()=>{I1(r,o,n)||(s.disconnect(),this.restore=null,this.lock(t))}),i={attributes:!0};s.observe(o,i),s.observe(n,i),this.restore=()=>s.disconnect();return}let l=Ke.os.ios||!xq(t);this.restore=l?yq(t):Sq(t)}},Cq=new AC;function Mg(e=!0,t=null){V(()=>{if(e)return Cq.acquire(t)},[e,t])}var vq=20;function T1(e,t,a,o){let[n,r]=w1.useState(!1);V(()=>{if(!e||!t||a==null){r(!1);return}let l=Ce(a).documentElement.clientWidth,s=a.offsetWidth;r(l>0&&s>0&&s>=l-vq)},[e,t,a]),Mg(e&&(!t||n),o)}var cu=v(O(),1),E1=En.forwardRef(function(t,a){let{anchor:o,positionMethod:n=\\\"absolute\\\",className:r,render:l,side:s,align:i,sideOffset:u=0,alignOffset:c=0,collisionBoundary:d=\\\"clipping-ancestors\\\",collisionPadding:f=5,arrowPadding:p=5,sticky:h=!1,disableAnchorTracking:b=!1,collisionAvoidance:S=FM,style:g,...m}=t,{store:x}=rt(),y=e1(),L=tl(!0),I=x.useState(\\\"parent\\\"),R=x.useState(\\\"floatingRootContext\\\"),C=x.useState(\\\"floatingTreeRoot\\\"),k=x.useState(\\\"mounted\\\"),E=x.useState(\\\"open\\\"),T=x.useState(\\\"modal\\\"),w=x.useState(\\\"openMethod\\\"),P=x.useState(\\\"activeTriggerElement\\\"),D=x.useState(\\\"transitionStatus\\\"),M=x.useState(\\\"positionerElement\\\"),_=x.useState(\\\"instantType\\\"),U=x.useState(\\\"adaptiveOrigin\\\"),B=x.useState(\\\"lastOpenChangeReason\\\"),z=x.useState(\\\"floatingNodeId\\\"),N=x.useState(\\\"floatingParentNodeId\\\"),j=R.useState(\\\"domReferenceElement\\\"),ae=En.useRef(null),oe=Cn(M),q=o,Y=u,G=c,xe=i,Q=S;I.type===\\\"context-menu\\\"&&(q=o??I.context?.anchor,xe=xe??\\\"start\\\",!s&&xe!==\\\"center\\\"&&(G=t.alignOffset??2,Y=t.sideOffset??-5));let W=s,ge=xe;I.type===\\\"menu\\\"?(W=W??\\\"inline-end\\\",ge=ge??\\\"start\\\",Q=t.collisionAvoidance??HM):I.type===\\\"menubar\\\"&&(W=W??(I.context.orientation===\\\"vertical\\\"?\\\"inline-end\\\":\\\"bottom\\\"),ge=ge??\\\"start\\\");let ye=I.type===\\\"context-menu\\\",ee=h1({anchor:q,floatingRootContext:R,positionMethod:L?\\\"fixed\\\":n,mounted:k,side:W,sideOffset:Y,align:ge,alignOffset:G,arrowPadding:ye?0:p,collisionBoundary:d,collisionPadding:f,sticky:h,nodeId:z,keepMounted:y,disableAnchorTracking:b,collisionAvoidance:Q,shift:ye?{crossAxis:!(\\\"side\\\"in Q&&Q.side===\\\"flip\\\"),rootBoundary:\\\"layoutViewport\\\"}:void 0,externalTree:C,adaptiveOrigin:U});En.useEffect(()=>{function ce(pe){pe.open&&(pe.parentNodeId===z&&x.set(\\\"hoverEnabled\\\",!1),pe.nodeId!==z&&pe.parentNodeId===x.select(\\\"floatingParentNodeId\\\")&&x.setOpen(!1,de($.siblingOpen)))}return C.events.on(\\\"menuopenchange\\\",ce),()=>{C.events.off(\\\"menuopenchange\\\",ce)}},[x,C.events,z]),En.useEffect(()=>{if(x.select(\\\"floatingParentNodeId\\\")==null)return;function ce(pe){if(pe.open||pe.nodeId!==x.select(\\\"floatingParentNodeId\\\"))return;let Ve=pe.reason??$.siblingOpen;x.setOpen(!1,de(Ve))}return C.events.on(\\\"menuopenchange\\\",ce),()=>{C.events.off(\\\"menuopenchange\\\",ce)}},[C.events,x]);let be=Mt();En.useEffect(()=>{E||be.clear()},[E,be]),En.useEffect(()=>{function ce(pe){if(!(!E||pe.nodeId!==x.select(\\\"floatingParentNodeId\\\")))if(pe.target&&P&&P!==pe.target){let Ve=x.select(\\\"closeDelay\\\");Ve>0?be.isStarted()||be.start(Ve,()=>{x.setOpen(!1,de($.siblingOpen))}):x.setOpen(!1,de($.siblingOpen))}else be.clear()}return C.events.on(\\\"itemhover\\\",ce),()=>{C.events.off(\\\"itemhover\\\",ce)}},[C.events,E,P,x,be]),En.useEffect(()=>{let ce={open:E,nodeId:z,parentNodeId:N,reason:x.select(\\\"lastOpenChangeReason\\\")};C.events.emit(\\\"menuopenchange\\\",ce)},[C.events,E,x,z,N]),V(()=>{let ce=j,pe=ae.current;if(ce&&(ae.current=ce),pe&&ce&&ce!==pe){x.set(\\\"instantType\\\",void 0);let Ve=new AbortController;return oe(()=>{x.set(\\\"instantType\\\",\\\"trigger-change\\\")},Ve.signal),()=>{Ve.abort()}}},[j,oe,x]);let me={open:E,side:ee.side,align:ee.align,anchorHidden:ee.anchorHidden,nested:I.type===\\\"menu\\\",instant:_},Le=I.type===\\\"menubar\\\"&&I.context.modal,Ee=T&&B!==$.triggerHover;T1(E&&(Le||Ee),w===\\\"touch\\\",M,P);let le=C1(t,me,{styles:ee.positionerStyles,transitionStatus:D,props:m,refs:[a,x.useStateSetter(\\\"positionerElement\\\")],hidden:!k,inert:!E}),Te=k&&I.type!==\\\"menu\\\"&&(I.type!==\\\"menubar\\\"&&T&&B!==$.triggerHover||I.type===\\\"menubar\\\"&&I.context.modal),ue=null;return I.type===\\\"menubar\\\"?ue=I.context.contentElement:I.type===void 0&&(ue=P),(0,cu.jsxs)(uS.Provider,{value:ee,children:[Te&&(0,cu.jsx)(Eg,{ref:I.type===\\\"context-menu\\\"||I.type===\\\"nested-context-menu\\\"?I.context.internalBackdropRef:null,inert:iu(!E),cutout:ue}),(0,cu.jsx)(QS,{id:z,children:(0,cu.jsx)(Tg,{elementsRef:x.context.itemDomElements,labelsRef:x.context.itemLabels,children:le})})]})});var hl=v(A(),1);var Ag=v(A(),1),OC=Ag.createContext(void 0);function k1(){let e=Ag.useContext(OC);if(e===void 0)throw new Error(Ne(34));return e}var DC=v(O(),1),M1=hl.memo(hl.forwardRef(function(t,a){let{render:o,className:n,value:r,defaultValue:l,onValueChange:s,disabled:i=!1,style:u,\\\"aria-labelledby\\\":c,...d}=t,[f,p]=hl.useState(void 0),[h,b]=bn({controlled:r,default:l,name:\\\"MenuRadioGroup\\\"}),S=Z((y,L)=>{s?.(y,L),!L.isCanceled&&b(y)}),m=se(\\\"div\\\",t,{state:{disabled:i},ref:a,props:{role:\\\"group\\\",\\\"aria-labelledby\\\":c??f,\\\"aria-disabled\\\":i||void 0,...d}}),x=hl.useMemo(()=>({value:h,setValue:S,disabled:i}),[h,S,i]);return(0,DC.jsx)(Xc.Provider,{value:p,children:(0,DC.jsx)(OC.Provider,{value:x,children:m})})}));var Dg=v(A(),1);var Og=v(A(),1),PC=Og.createContext(void 0);function A1(){let e=Og.useContext(PC);if(e===void 0)throw new Error(Ne(35));return e}var O1=v(O(),1),D1=Dg.forwardRef(function(t,a){let{render:o,className:n,id:r,label:l,nativeButton:s=!1,disabled:i=!1,closeOnClick:u=!1,value:c,style:d,...f}=t,p=To({guess:!0,label:l}),h=pa(!0),b=lt(r),{store:S}=rt(),g=S.useState(\\\"isActive\\\",p.index),m=S.useState(\\\"itemProps\\\"),{value:x,setValue:y,disabled:L}=k1(),I=S.useState(\\\"disabled\\\"),R=i||L||I,C=x===c,{getItemProps:k,itemRef:E}=rl({closeOnClick:u,disabled:R,highlighted:g,id:b,store:S,nativeButton:s,nodeId:h?.context.nodeId,itemMetadata:nl}),T=Dg.useMemo(()=>({disabled:R,highlighted:g,checked:C}),[R,g,C]);function w(D){let M=de($.itemPress,D.nativeEvent,void 0,{preventUnmountOnClose:He});y(c,M)}let P=se(\\\"div\\\",t,{state:T,stateAttributesMapping:ll,props:[m,{role:\\\"menuitemradio\\\",\\\"aria-checked\\\":C,onClick:w},f,k],ref:[E,a,p.ref]});return(0,O1.jsx)(PC.Provider,{value:T,children:P})});var Pg=v(A(),1);var P1=Pg.forwardRef(function(t,a){let{render:o,className:n,style:r,keepMounted:l=!1,...s}=t,i=A1(),u=Pg.useRef(null),{transitionStatus:c,mounted:d,setMounted:f}=Ki(i.checked);vn({batch:!0,enabled:!i.checked,open:i.checked,ref:u,onComplete(){i.checked||f(!1)}});let p={checked:i.checked,disabled:i.disabled,highlighted:i.highlighted,transitionStatus:c};return se(\\\"span\\\",t,{state:p,stateAttributesMapping:ll,ref:[a,u],props:{\\\"aria-hidden\\\":!0,...s},enabled:l||d})});var Dt=v(A(),1);var Ng=v(A(),1),Lq=Ng.createContext(null);function Bg(e){let t=Ng.useContext(Lq);if(t===null&&!e)throw new Error(Ne(5));return t}var bf=v(A(),1);var xf=v(A(),1);function N1(e){let t=xf.useRef(\\\"\\\"),a=xf.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:xf.useCallback(n=>{if(n.detail===0){e(n,\\\"keyboard\\\");return}\\\"pointerType\\\"in n?e(n,n.pointerType):e(n,t.current),t.current=\\\"\\\"},[e]),onPointerDown:a}}var B1=v(A(),1);function _g(e,t){let a=B1.useRef(e),o=Z(t);V(()=>{a.current!==e&&o(a.current),a.current=e},[e,o])}function NC(e,t){let a=Z((r,l)=>{(typeof e==\\\"function\\\"?e():e)||t(l||(Ke.os.ios?\\\"touch\\\":\\\"\\\"))}),{onClick:o,onPointerDown:n}=N1(a);return bf.useMemo(()=>({onClick:o,onPointerDown:n}),[o,n])}function _1(e){let[t,a]=bf.useState(null),o=NC(e,a);return _g(e,n=>{n&&!e&&a(null)}),bf.useMemo(()=>({openMethod:t,triggerProps:o}),[t,o])}var yf=v(A(),1);var fu=class extends In{setState(t){}update(t){}set(t,a){}notifyAll(){}};var F1={...ag,disabled:e=>e.parent.type===\\\"menubar\\\"&&e.parent.context.disabled||e.disabled,modal:e=>(e.parent.type===void 0||e.parent.type===\\\"context-menu\\\")&&(e.modal??!0),openMethod:e=>e.openMethod,allowMouseEnter:e=>e.allowMouseEnter,highlightItemOnHover:e=>e.highlightItemOnHover,parent:e=>e.parent,rootId:e=>e.parent.type===\\\"menu\\\"?e.parent.store.select(\\\"rootId\\\"):e.parent.type!==void 0?e.parent.context.rootId:e.rootId,activeIndex:e=>e.activeIndex,isActive:(e,t)=>e.activeIndex===t,hoverEnabled:e=>e.hoverEnabled,instantType:e=>e.instantType,lastOpenChangeReason:e=>e.openChangeReason,floatingTreeRoot:e=>e.parent.type===\\\"menu\\\"?e.parent.store.select(\\\"floatingTreeRoot\\\"):e.floatingTreeRoot,floatingNodeId:e=>e.floatingNodeId,floatingParentNodeId:e=>e.floatingParentNodeId,itemProps:e=>e.itemProps,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin,keyboardEventRelay:e=>{if(e.keyboardEventRelay)return e.keyboardEventRelay;if(e.parent.type===\\\"menu\\\")return e.parent.store.select(\\\"keyboardEventRelay\\\")}},Fg=class extends In{constructor(t,a,o=!1){let n=new ml,r=U1(n,a,o,t);super(r,z1(n),F1),this.unsubscribeParentListener=this.observe(\\\"parent\\\",l=>{if(this.unsubscribeParentListener?.(),l.type===\\\"menu\\\"){let s=l.store.select(\\\"rootId\\\"),i=l.store.select(\\\"floatingTreeRoot\\\"),u=l.store.select(\\\"keyboardEventRelay\\\");this.unsubscribeParentListener=l.store.subscribe(()=>{let c=l.store.select(\\\"rootId\\\"),d=l.store.select(\\\"floatingTreeRoot\\\"),f=l.store.select(\\\"keyboardEventRelay\\\");s===c&&i===d&&u===f||(s=c,i=d,u=f,this.notifyAll())}),this.context.allowMouseUpTriggerRef=l.store.context.allowMouseUpTriggerRef;return}l.type!==void 0&&(this.context.allowMouseUpTriggerRef=l.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(t,a){this.state.floatingRootContext.context.events.emit(\\\"setOpen\\\",{open:t,eventDetails:a})}unsubscribeParentListener=null};function H1(){let e=new ml,t=new fu(Object.freeze(U1(e)),Object.freeze(z1(e)),F1);return Object.assign(t,{setOpen:He})}function z1(e){return{positionerRef:yf.createRef(),popupRef:yf.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:yf.createRef(),beforeContentFocusGuardRef:yf.createRef(),onOpenChangeComplete:void 0,triggerElements:e}}function U1(e,t,a=!1,o){return{...tg(e,t,a),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,highlightItemOnHover:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new fl,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Ae,keyboardEventRelay:void 0,closeDelay:0,adaptiveOrigin:void 0,...o}}var Hg=v(A(),1),BC=Hg.createContext(void 0);function zg(){return Hg.useContext(BC)}var Sf=v(O(),1),Ug=df(function(t){let{children:a,open:o,onOpenChange:n,onOpenChangeComplete:r,defaultOpen:l=!1,disabled:s=!1,modal:i,loopFocus:u=!0,orientation:c=\\\"vertical\\\",actionsRef:d,closeParentOnEsc:f=!1,handle:p,triggerId:h,defaultTriggerId:b=null,highlightItemOnHover:S=!0}=t,g=tl(!0),m=rt(!0),x=Bg(!0),y=zg(),L=Dt.useMemo(()=>y&&m?{type:\\\"menu\\\",store:m.store}:x?{type:\\\"menubar\\\",context:x}:g&&!m?{type:\\\"context-menu\\\",context:g}:{type:void 0},[g,m,x,y]),I=Xo(),R=Xo(),C=io(),k=L.type===\\\"menu\\\"?L.store:void 0,E=(o??l)&&k?.state.transitionStatus===\\\"starting\\\",T=We(()=>E?k?.state.instantType:void 0).current,w=Rq({open:l,openProp:o,activeTriggerId:b,triggerIdProp:h,parent:L,disabled:s,highlightItemOnHover:S,modal:L.type===void 0?i:void 0,rootId:I,instantType:T},R,C!=null);w.useControlledProp(\\\"openProp\\\",o),w.useControlledProp(\\\"triggerIdProp\\\",h),w.useContextCallback(\\\"onOpenChangeComplete\\\",r);let P=w.useState(\\\"floatingTreeRoot\\\"),D=rf(P),M=w.useState(\\\"open\\\"),_=w.useState(\\\"activeTriggerElement\\\"),U=w.useState(\\\"positionerElement\\\"),B=w.useState(\\\"hoverEnabled\\\"),z=w.useState(\\\"disabled\\\"),N=w.useState(\\\"lastOpenChangeReason\\\"),j=w.useState(\\\"parent\\\"),ae=w.useState(\\\"activeIndex\\\"),oe=w.useState(\\\"payload\\\"),q=w.useState(\\\"floatingParentNodeId\\\"),Y=Dt.useRef(null),G=Dt.useRef(j.type!==\\\"context-menu\\\"),xe=Mt(),Q=Dt.useRef(!0),W=Mt(),ge=q!=null,{openMethod:ye,triggerProps:ee}=_1(M);w.useSyncedValues({disabled:s,highlightItemOnHover:S,modal:j.type===void 0?i:void 0,openMethod:ye,rootId:I}),Wm(w);let{forceUnmount:be,transitionStatus:me}=Jm(M,w,()=>{w.set(\\\"allowMouseEnter\\\",!1)},E),Le=Cn(w.context.popupRef);Dt.useEffect(()=>{if(T===void 0)return;let he=()=>{w.state.instantType===T&&w.set(\\\"instantType\\\",void 0)};if(!M){he();return}if(me!==void 0)return;if(w.context.popupRef.current==null){he();return}let dt=new AbortController;return Le(he,dt.signal),()=>{dt.abort()}},[T,M,me,Le,w]),V(()=>{g&&!m?w.update({parent:{type:\\\"context-menu\\\",context:g},floatingNodeId:D,floatingParentNodeId:C}):m&&w.update({floatingNodeId:D,floatingParentNodeId:C})},[g,m,D,C,w]),Dt.useEffect(()=>{if(M||(Y.current=null),j.type===\\\"context-menu\\\"){if(!M){xe.clear(),G.current=!1;return}xe.start(500,()=>{G.current=!0})}},[xe,M,j.type]),V(()=>{!M&&!B&&w.set(\\\"hoverEnabled\\\",!0)},[M,B,w]);let Ee=Z((he,dt)=>{let Tt=dt.reason;if(!he&&!w.select(\\\"open\\\")||M===he&&dt.trigger===_&&N===Tt)return;let $o=_A(dt);if(!he&&dt.trigger==null&&(dt.trigger=_??void 0),n?.(he,dt),dt.isCanceled)return;w.state.floatingRootContext.dispatchOpenChange(he,dt);let cr=dt.event;if(he===!1&&cr?.type===\\\"click\\\"&&cr.pointerType===\\\"touch\\\"&&!Q.current)return;he&&Tt===$.triggerFocus?(Q.current=!1,W.start(300,()=>{Q.current=!0})):(Q.current=!0,W.clear());let Ll=(Tt===$.triggerPress||Tt===$.itemPress)&&cr.detail===0,As=!he&&(Tt===$.escapeKey||Tt==null);Y.current=dt.event;let Qo=$m(w.state,he,dt.trigger,$o());Qo.openChangeReason=Tt,j.type===\\\"menubar\\\"&&(Tt===$.triggerFocus||Tt===$.focusOut||Tt===$.triggerHover||Tt===$.listNavigation||Tt===$.siblingOpen)?Qo.instantType=\\\"group\\\":Ll||As?Qo.instantType=Ll?\\\"click\\\":\\\"dismiss\\\":Qo.instantType=void 0,w.update(Qo)}),le=pf({popupStore:w,floatingRootContext:w.state.floatingRootContext,floatingId:R,nested:C!=null,onOpenChange:Ee}),Te=le.context.events;V(()=>{let he=({open:dt,eventDetails:Tt})=>Ee(dt,Tt);return Te.on(\\\"setOpen\\\",he),()=>{Te?.off(\\\"setOpen\\\",he)}},[Te,Ee]);let ue=Dt.useCallback(()=>{w.setOpen(!1,de($.imperativeAction))},[w]);Dt.useImperativeHandle(d,()=>({unmount:be,close:ue}),[be,ue]);let ce;j.type===\\\"context-menu\\\"&&(ce=j.context),Dt.useImperativeHandle(ce?.positionerRef,()=>U,[U]),Dt.useImperativeHandle(ce?.actionsRef,()=>({setOpen:Ee}),[Ee]);let pe=cf(le,{enabled:!z,bubbles:{escapeKey:f&&j.type===\\\"menu\\\"},outsidePress(){return j.type!==\\\"context-menu\\\"||Y.current?.type===\\\"contextmenu\\\"?!0:G.current},externalTree:ge?P:void 0}),Ve=Tn(),wt=Dt.useCallback(he=>{w.select(\\\"activeIndex\\\")!==he&&w.set(\\\"activeIndex\\\",he)},[w]),te=IC(le,{enabled:!z,listRef:w.context.itemDomElements,activeIndex:ae,nested:j.type!==void 0,loopFocus:u,orientation:c,parentOrientation:j.type===\\\"menubar\\\"?j.context.orientation:void 0,rtl:Ve===\\\"rtl\\\",disabledIndices:ca,onNavigate:wt,openOnArrowKeyDown:j.type!==\\\"context-menu\\\",externalTree:ge?P:void 0,focusItemOnHover:S}),fe=Dt.useCallback(he=>{w.context.typingRef.current=he},[w]),K=wC(le,{enabled:!z,listRef:w.context.itemLabels,elementsRef:w.context.itemDomElements,activeIndex:ae,resetMs:500,onMatch:he=>{M&&he!==ae&&w.set(\\\"activeIndex\\\",he)},onTyping:fe}),H=Dt.useMemo(()=>{let he=wa(K.reference,te.reference,pe.reference,{onMouseMove(){w.set(\\\"allowMouseEnter\\\",!0)}},ee);return he[\\\"aria-haspopup\\\"]=\\\"menu\\\",he[\\\"aria-expanded\\\"]=M,he},[w,K.reference,te.reference,pe.reference,ee,M]),X=Dt.useMemo(()=>{let he=wa(te.trigger,pe.trigger,ee);return he[\\\"aria-haspopup\\\"]=\\\"menu\\\",he[\\\"aria-expanded\\\"]=!1,he},[te.trigger,pe.trigger,ee]);We(()=>(w.update({inactiveTriggerProps:X}),null));let Re=Dt.useMemo(()=>wa(Km,{id:R,role:\\\"menu\\\",\\\"aria-orientation\\\":c===\\\"horizontal\\\"?\\\"horizontal\\\":void 0,\\\"aria-labelledby\\\":_?.id,onMouseMove(){w.set(\\\"allowMouseEnter\\\",!0),j.type===\\\"menu\\\"&&w.set(\\\"hoverEnabled\\\",!1)},onClick(){w.select(\\\"hoverEnabled\\\")&&w.set(\\\"hoverEnabled\\\",!1)},onKeyDown(he){let dt=w.select(\\\"keyboardEventRelay\\\");dt&&!he.isPropagationStopped()&&dt(he)}},K.floating,te.floating,pe.floating),[_,R,c,j.type,w,K.floating,te.floating,pe.floating]),Ga=te.item??Ae;eg(w,{floatingRootContext:le,activeTriggerProps:H,inactiveTriggerProps:X,popupProps:Re,itemProps:Ga});let Zo=Dt.useMemo(()=>({store:w,parent:L}),[w,L]),Xa=(0,Sf.jsxs)(cS.Provider,{value:Zo,children:[p&&(0,Sf.jsx)(Zm,{handle:p,store:w}),typeof a==\\\"function\\\"?a({payload:oe}):a]});return j.type===void 0||j.type===\\\"context-menu\\\"?(0,Sf.jsx)(WS,{externalTree:P,children:Xa}):Xa});function Rq(e,t,a){return We(()=>new Fg(e,t,a)).current}var q1=v(A(),1);var _C=v(O(),1);function V1(e){let t=rt().store,a=q1.useMemo(()=>({parentMenu:t}),[t]);return(0,_C.jsx)(BC.Provider,{value:a,children:(0,_C.jsx)(Ug,{...e})})}var ya=v(A(),1);var qg=5;function G1(e,t){let a=Iq(t);return e.clientX>=a.left-qg&&e.clientX<=a.right+qg&&e.clientY>=a.top-qg&&e.clientY<=a.bottom+qg}function Iq(e){let t=e.getBoundingClientRect(),a=Ye(e);if(Ke.env.jsdom)return t;let o=a.getComputedStyle(e,\\\"::before\\\"),n=a.getComputedStyle(e,\\\"::after\\\");if(!(o.content!==\\\"none\\\"||n.content!==\\\"none\\\"))return t;let l=parseFloat(o.width)||0,s=parseFloat(o.height)||0,i=parseFloat(n.width)||0,u=parseFloat(n.height)||0,c=Math.max(t.width,l,i),d=Math.max(t.height,s,u),f=c-t.width,p=d-t.height;return{left:t.left-f/2,right:t.right+f/2,top:t.top-p/2,bottom:t.bottom+p/2}}var X1=v(A(),1);function j1(e={}){let{highlightItemOnHover:t,highlightedIndex:a,onHighlightedIndexChange:o}=Gi(),{ref:n,index:r}=To(e),l=a===r,s=X1.useRef(null),i=Ha(n,s);return{compositeProps:{tabIndex:l?0:-1,onFocus(){o(r)},onMouseMove(){let c=s.current;if(!t||!c)return;let d=c.hasAttribute(\\\"disabled\\\")||c.ariaDisabled===\\\"true\\\";!l&&!d&&c.focus()}},compositeRef:i,index:r}}function Vg(e){let{render:t,className:a,style:o,state:n=Ae,props:r=ca,refs:l=ca,metadata:s,stateAttributesMapping:i,tag:u=\\\"div\\\",...c}=e,{compositeProps:d,compositeRef:f}=j1({metadata:s});return se(u,e,{state:n,ref:[f,...l],props:[d,...r,c],stateAttributesMapping:i})}function FC(e){if(Be(e)&&e.hasAttribute(\\\"data-rootownerid\\\"))return e.getAttribute(\\\"data-rootownerid\\\");if(!wo(e))return FC(Io(e))}var Y1=v(A(),1),HC=v(Pn(),1);function K1(e,t){let a=Y1.useRef(null);function o(r){HC.flushSync(()=>{e.setOpen(!1,de($.focusOut,r.nativeEvent,r.currentTarget))}),MM(a.current)?.focus()}function n(r){let l=e.select(\\\"positionerElement\\\");if(l&&nr(r,l))e.context.beforeContentFocusGuardRef.current?.focus();else{HC.flushSync(()=>{e.setOpen(!1,de($.focusOut,r.nativeEvent,r.currentTarget))});let s=kM(e.context.triggerFocusTargetRef.current||t.current);for(;s!==null&&ie(l,s);){let i=s;if(s=Ji(s),s===i)break}s?.focus()}}return{preFocusGuardRef:a,handlePreFocusGuardFocus:o,handleFocusTargetFocus:n}}var Gg=v(A(),1);function Z1(e){let{enabled:t=!0,mouseDownAction:a,open:o}=e,n=Gg.useRef(!1);return Gg.useMemo(()=>t?{onMouseDown:r=>{(a===\\\"open\\\"&&!o||a===\\\"close\\\"&&o)&&(n.current=!0,Ce(r.currentTarget).addEventListener(\\\"click\\\",()=>{n.current=!1},{once:!0}))},onClick:r=>{n.current&&(n.current=!1,r.preventBaseUIHandler())}}:Ae,[t,a,o])}var xl=v(O(),1),$1=Xm(function(t,a){let{render:o,className:n,style:r,disabled:l=!1,nativeButton:s=!0,id:i,openOnHover:u,delay:c=100,closeDelay:d=0,handle:f,payload:p,...h}=t,b=rt(!0),g=og(f)??b?.store;if(!g)throw new Error(Ne(85));let m=lt(i),x=g.useState(\\\"isTriggerActive\\\",m),y=g.useState(\\\"floatingRootContext\\\"),L=g.useState(\\\"isOpenedByTrigger\\\",m),I=g.useState(\\\"triggerPopupId\\\",m),R=ya.useRef(null),C=Tq(),k=Gi(!0),E=ha(),T=ya.useMemo(()=>E??new fl,[E]),w=rf(T),P=io(),{registerTrigger:D,isMountedByThisTrigger:M}=Qm(m,R,g,{payload:p,closeDelay:d,parent:C,floatingTreeRoot:T,floatingNodeId:w,floatingParentNodeId:P,keyboardEventRelay:k?.relayKeyboardEvent}),_=C.type===\\\"menubar\\\",U=g.useState(\\\"disabled\\\"),B=l||U||_&&C.context.disabled,{getButtonProps:z,buttonRef:N}=Ta({disabled:B,native:s});ya.useEffect(()=>{!L&&C.type===void 0&&(g.context.allowMouseUpTriggerRef.current=!1)},[g,L,C.type]);let j=ya.useRef(null),ae=Mt(),oe=Z(ce=>{if(!j.current)return;ae.clear(),g.context.allowMouseUpTriggerRef.current=!1;let pe=ce.target;ie(j.current,pe)||ie(g.select(\\\"positionerElement\\\"),pe)||pe===j.current||pe!=null&&FC(pe)===g.select(\\\"rootId\\\")||G1(ce,j.current)||T.events.emit(\\\"close\\\",{domEvent:ce,reason:$.cancelOpen})});ya.useEffect(()=>{L&&g.select(\\\"lastOpenChangeReason\\\")===$.triggerHover&&Ce(j.current).addEventListener(\\\"mouseup\\\",oe,{once:!0})},[L,oe,g]);let q=_&&C.context.hasSubmenuOpen,G=gf(y,{enabled:(u??q)&&!B&&(!_||q&&!M),handleClose:hf({blockPointerEvents:!_}),mouseOnly:!0,move:!1,restMs:C.type===void 0?c:void 0,delay:{close:d},triggerElementRef:R,externalTree:T,isActiveTrigger:x,isClosing:()=>g.select(\\\"transitionStatus\\\")===\\\"ending\\\"}),xe=wq(L,g.select(\\\"lastOpenChangeReason\\\")),Q=ys(y,{enabled:!B,event:L&&_?\\\"click\\\":\\\"mousedown\\\",toggle:!0,ignoreMouse:!1,stickIfOpen:C.type===void 0?xe:!1}),W=SC(y,{enabled:!B&&q}),ge=Z1({open:L,enabled:_,mouseDownAction:\\\"open\\\"}),ye=ya.useMemo(()=>wa(W.reference,Q.reference),[W.reference,Q.reference]),ee=g.useState(\\\"triggerProps\\\",M),{preFocusGuardRef:be,handlePreFocusGuardFocus:me,handleFocusTargetFocus:Le}=K1(g,R),Ee={disabled:B,open:L},le=[j,a,N,D,R],Te=[ye,G??Ae,ee,{\\\"aria-haspopup\\\":\\\"menu\\\",\\\"aria-controls\\\":I,id:m,onMouseDown:ce=>{if(g.select(\\\"open\\\"))return;ae.start(200,()=>{g.context.allowMouseUpTriggerRef.current=!0}),Ce(ce.currentTarget).addEventListener(\\\"mouseup\\\",oe,{once:!0})}},_?{role:\\\"menuitem\\\"}:{},ge,h,z],ue=se(\\\"button\\\",t,{enabled:!_,stateAttributesMapping:hS,state:Ee,ref:le,props:Te});return _?(0,xl.jsx)(Vg,{tag:\\\"button\\\",render:o,className:n,style:r,state:Ee,refs:le,props:Te,stateAttributesMapping:hS}):L?(0,xl.jsxs)(ya.Fragment,{children:[(0,xl.jsx)(ar,{ref:be,onFocus:me},`${m}-pre-focus-guard`),(0,xl.jsx)(ya.Fragment,{children:ue},m),(0,xl.jsx)(ar,{ref:g.context.triggerFocusTargetRef,onFocus:Le},`${m}-post-focus-guard`)]}):(0,xl.jsx)(ya.Fragment,{children:ue},m)});function wq(e,t){let a=Mt(),[o,n]=ya.useState(!1);return V(()=>{e&&t===$.triggerHover?(n(!0),a.start(500,()=>{n(!1)})):e||(a.clear(),n(!1))},[e,t,a]),o}function Tq(){let e=Bg(!0);return ya.useMemo(()=>e?{type:\\\"menubar\\\",context:e}:{type:void 0},[e])}var iO=v(A(),1);var ra=v(A(),1),rO=v(Pn(),1);var Q1=v(A(),1);function W1(e){let[t,a]=Q1.useState({current:e,previous:null});return Object.is(e,t.current)||a({current:e,previous:t.current}),t.previous}var du=v(A(),1);function zC(e){let t=qt(e),a=parseFloat(t.width)||0,o=parseFloat(t.height)||0,n=Be(e),r=n?e.offsetWidth:a,l=n?e.offsetHeight:o;return(ul(a)!==r||ul(o)!==l)&&(a=r,o=l),{width:a,height:o}}var Cf=\\\"--popup-width\\\",vf=\\\"--popup-height\\\";function tO(e){let{popupElement:t,positionerElement:a,content:o,mounted:n,onMeasureLayout:r,onMeasureLayoutComplete:l,side:s,direction:i}=e,u=Cn(t,!0),c=so(),d=du.useRef(null),f=du.useRef(!0),p=du.useRef(He),h=Z(r),b=Z(l),S=du.useMemo(()=>Eq(s,i),[s,i]);V(()=>{if(!n){p.current=He,f.current=!0,d.current=null;return}if(!t||!a)return;p.current=eO(t,S),UC(t,\\\"auto\\\");let g=jg(t,\\\"position\\\",\\\"static\\\"),m=jg(t,\\\"transform\\\",\\\"none\\\"),x=jg(t,\\\"scale\\\",\\\"1\\\"),y=eO(a,{[Ig]:\\\"max-content\\\",[wg]:\\\"max-content\\\"});function L(){g(),m(),y()}function I(){L(),x()}if(h?.(),f.current||d.current===null){Xg(a,\\\"max-content\\\");let E=zC(t);return d.current=E,Xg(a,E),I(),b?.(null,E),f.current=!1,()=>{p.current(),p.current=He}}Xg(a,\\\"max-content\\\");let R=d.current,C=zC(t);d.current=C,UC(t,R),I(),b?.(R,C),Xg(a,C);let k=new AbortController;return c.request(()=>{UC(t,C),u(()=>{t.style.setProperty(Cf,\\\"auto\\\"),t.style.setProperty(vf,\\\"auto\\\")},k.signal)}),()=>{k.abort(),c.cancel(),p.current(),p.current=He}},[o,t,a,u,c,n,h,b,S])}function Eq(e,t){let a=e===\\\"top\\\",o=e===\\\"left\\\"||e===(t===\\\"rtl\\\"?\\\"inline-end\\\":\\\"inline-start\\\");return!a&&!o?Ae:{position:\\\"absolute\\\",[a?\\\"bottom\\\":\\\"top\\\"]:\\\"0\\\",[o?\\\"right\\\":\\\"left\\\"]:\\\"0\\\"}}function jg(e,t,a){let o=e.style.getPropertyValue(t);return e.style.setProperty(t,a),()=>{e.style.setProperty(t,o)}}function eO(e,t){let a=[];for(let[o,n]of Object.entries(t))a.push(jg(e,o,n));return a.length?()=>{a.forEach(o=>o())}:He}function UC(e,t){let a=t===\\\"auto\\\"?\\\"auto\\\":`${t.width}px`,o=t===\\\"auto\\\"?\\\"auto\\\":`${t.height}px`;e.style.setProperty(Cf,a),e.style.setProperty(vf,o)}function Xg(e,t){let a=t===\\\"max-content\\\"?\\\"max-content\\\":`${t.width}px`,o=t===\\\"max-content\\\"?\\\"max-content\\\":`${t.height}px`;e.style.setProperty(i1,a),e.style.setProperty(u1,o)}var aO={name:\\\"adaptiveOrigin\\\",async fn(e){let{x:t,y:a,rects:{floating:o},elements:{floating:n},platform:r,strategy:l,placement:s}=e,i=Ye(n),u=i.getComputedStyle(n);if(!(u.transitionDuration!==\\\"0s\\\"&&u.transitionDuration!==\\\"\\\"))return{x:t,y:a,data:uu};let d=await r.getOffsetParent?.(n),f={width:0,height:0};if(l===\\\"fixed\\\"&&i?.visualViewport)f={width:i.visualViewport.width,height:i.visualViewport.height};else if(d===i){let m=Ce(n);f={width:m.documentElement.clientWidth,height:m.documentElement.clientHeight}}else await r.isElement?.(d)&&(f=await r.getDimensions(d));let p=ga(s),h=t,b=a;p===\\\"left\\\"&&(h=f.width-(t+o.width)),p===\\\"top\\\"&&(b=f.height-(a+o.height));let S=p===\\\"left\\\"?\\\"right\\\":uu.sideX,g=p===\\\"top\\\"?\\\"bottom\\\":uu.sideY;return{x:h,y:b,data:{sideX:S,sideY:g}}}};var oO=\\\"data-activation-direction\\\";var pu=v(O(),1),lO={activationDirection:e=>e?{[oO]:e}:null};function sO(e){let{store:t,side:a,children:o}=e,n=Tn(),r=t.useState(\\\"activeTriggerElement\\\"),l=t.useState(\\\"activeTriggerId\\\"),s=t.useState(\\\"open\\\"),i=t.useState(\\\"payload\\\"),u=t.useState(\\\"mounted\\\"),c=t.useState(\\\"popupElement\\\"),d=t.useState(\\\"positionerElement\\\"),f=W1(s?r:null),p=Oq(l,i),h=ra.useRef(null),[b,S]=ra.useState(null),[g,m]=ra.useState(null),x=ra.useRef(null),y=ra.useRef(null),L=Cn(x,!0),I=so(),R=ra.useRef(null),[C,k]=ra.useState(null),[E,T]=ra.useState(!1);V(()=>(t.set(\\\"adaptiveOrigin\\\",aO),()=>{t.set(\\\"adaptiveOrigin\\\",void 0)}),[t]);let w=Z(()=>{x.current?.style.setProperty(\\\"animation\\\",\\\"none\\\"),x.current?.style.setProperty(\\\"transition\\\",\\\"none\\\"),y.current?.style.setProperty(\\\"display\\\",\\\"none\\\")}),P=Z(z=>{x.current?.style.removeProperty(\\\"animation\\\"),x.current?.style.removeProperty(\\\"transition\\\"),y.current?.style.removeProperty(\\\"display\\\"),z&&k(z)}),D=Z(()=>{R.current?.abort();let z=new AbortController;R.current=z,L(()=>{S(null),k(null),h.current=null},z.signal)}),M=ra.useRef(null);V(()=>{(!s||!u)&&(M.current=null)},[s,u]),V(()=>{if(r&&f&&r!==f&&M.current!==r&&h.current){S(h.current),T(!0);let z=Aq(f,r);m(z),M.current=r}},[r,f]),V(()=>{b!=null&&(R.current?.abort(),T(!0),I.request(()=>{rO.flushSync(()=>{T(!1)}),D()}))},[p,b,D,I]),V(()=>{let z=x.current;if(!z)return;let N=Ce(z).createElement(\\\"div\\\");for(let j of Array.from(z.childNodes))N.appendChild(j.cloneNode(!0));h.current=N});let _=b!=null,U;_?U=(0,pu.jsxs)(ra.Fragment,{children:[(0,pu.jsx)(\\\"div\\\",{\\\"data-previous\\\":!0,inert:iu(!0),ref:y,style:{...C?{[Cf]:`${C.width}px`,[vf]:`${C.height}px`}:null,position:\\\"absolute\\\"},\\\"data-ending-style\\\":E?void 0:\\\"\\\"},\\\"previous\\\"),(0,pu.jsx)(\\\"div\\\",{\\\"data-current\\\":!0,ref:x,\\\"data-starting-style\\\":E?\\\"\\\":void 0,children:o},p)]}):U=(0,pu.jsx)(\\\"div\\\",{\\\"data-current\\\":!0,ref:x,children:o},p),V(()=>{let z=y.current;!z||!b||z.replaceChildren(...Array.from(b.childNodes))},[b]),tO({popupElement:c,positionerElement:d,mounted:u,content:i,onMeasureLayout:w,onMeasureLayoutComplete:P,side:a,direction:n});let B={activationDirection:Mq(g),transitioning:_};return{children:U,state:B}}function Mq(e){if(e)return`${nO(e.horizontal,5,\\\"right\\\",\\\"left\\\")} ${nO(e.vertical,5,\\\"down\\\",\\\"up\\\")}`}function nO(e,t,a,o){return e>t?a:e<-t?o:\\\"\\\"}function Aq(e,t){let a=e.getBoundingClientRect(),o=t.getBoundingClientRect(),n={x:a.left+a.width/2,y:a.top+a.height/2},r={x:o.left+o.width/2,y:o.top+o.height/2};return{horizontal:r.x-n.x,vertical:r.y-n.y}}function Oq(e,t){let[a,o]=ra.useState(0),n=ra.useRef(e),r=ra.useRef(t),l=ra.useRef(!1);return V(()=>{let s=n.current,i=r.current,u=e!==s,c=t!==i;u?(o(d=>d+1),l.current=!c):l.current&&c&&(o(d=>d+1),l.current=!1),n.current=e,r.current=t},[e,t]),`${e??\\\"current\\\"}-${a}`}var uO=iO.forwardRef(function(t,a){let{render:o,className:n,style:r,children:l,...s}=t,{store:i}=rt(),{side:u}=pa(),c=i.useState(\\\"instantType\\\"),{children:d,state:f}=sO({store:i,side:u,children:l}),p={activationDirection:f.activationDirection,transitioning:f.transitioning,instant:c};return se(\\\"div\\\",t,{state:p,ref:a,props:[s,{children:d}],stateAttributesMapping:lO})});var cO=v(A(),1);var fO=cO.forwardRef(function(t,a){let{className:o,render:n,orientation:r=\\\"horizontal\\\",style:l,...s}=t;return se(\\\"div\\\",t,{state:{orientation:r},ref:a,props:[{role:\\\"separator\\\",\\\"aria-orientation\\\":r},s]})});var sr=v(A(),1);function dO(e){return e==null||e.hasAttribute(\\\"disabled\\\")||e.getAttribute(\\\"aria-disabled\\\")===\\\"true\\\"}var Dq={\\\"aria-expanded\\\":void 0},pO=sr.forwardRef(function(t,a){let{render:o,className:n,style:r,label:l,id:s,nativeButton:i=!1,openOnHover:u=!0,delay:c=100,closeDelay:d=0,disabled:f=!1,...p}=t,h=zg();if(!h?.parentMenu)throw new Error(Ne(37));let b=To({guess:!0,label:l}),S=pa(),{store:g}=rt(),m=lt(s),x=g.useState(\\\"open\\\"),y=g.useState(\\\"floatingRootContext\\\"),L=g.useState(\\\"floatingTreeRoot\\\"),I=g.useState(\\\"triggerPopupId\\\",m),R=gC(m,g),C=Z(ye=>{R(ye),ye!==null&&g.select(\\\"open\\\")&&g.select(\\\"activeTriggerId\\\")==null&&g.update({activeTriggerId:m??null,activeTriggerElement:ye,closeDelay:d})}),k=sr.useRef(null),E=sr.useCallback(ye=>{k.current=ye,g.set(\\\"activeTriggerElement\\\",ye)},[g]);V(()=>(C(k.current),()=>C(null)),[C,m,g]),g.useSyncedValue(\\\"closeDelay\\\",d);let T=h.parentMenu,w=g.useState(\\\"disabled\\\"),P=T.useState(\\\"disabled\\\"),D=f||w||P,M=T.useState(\\\"itemProps\\\"),_=T.useState(\\\"isActive\\\",b.index),U=sr.useMemo(()=>({type:\\\"submenu-trigger\\\",setActive(){T.select(\\\"highlightItemOnHover\\\")&&T.set(\\\"activeIndex\\\",b.index)}}),[T,b.index]),{getItemProps:B,itemRef:z}=rl({closeOnClick:!1,disabled:D,highlighted:_,id:m,store:g,typingRef:T.context.typingRef,nativeButton:i,itemMetadata:U,nodeId:S?.context.nodeId}),N=g.useState(\\\"hoverEnabled\\\"),j=gf(y,{enabled:N&&u&&!D,handleClose:hf({blockPointerEvents:!0}),mouseOnly:!0,move:!0,restMs:c,delay:{open:c,close:d},shouldOpen:c>0?()=>T.select(\\\"allowMouseEnter\\\"):void 0,triggerElementRef:k,externalTree:L,isClosing:()=>g.select(\\\"transitionStatus\\\")===\\\"ending\\\",guardStaleOpen:!0}),oe=ys(y,{enabled:!D,event:\\\"mousedown\\\",toggle:!u,ignoreMouse:u,stickIfOpen:!1}).reference??Ae,q=g.useState(\\\"triggerProps\\\",!0);delete q.id;let Y={disabled:D,highlighted:_,open:x},G=g.useState(\\\"openMethod\\\"),Q=g.useState(\\\"lastOpenChangeReason\\\")===$.listNavigation||G===\\\"keyboard\\\",W=x&&Q&&Ke.screenReader.voiceOver;return se(\\\"div\\\",t,{state:Y,stateAttributesMapping:lm,props:[oe,j,q,M,W?Dq:void 0,{\\\"aria-controls\\\":I,tabIndex:x||_?0:-1,onBlur(){_&&T.set(\\\"activeIndex\\\",null)}},p,B],ref:[a,b.ref,z,C,E]})});var Lf=class extends au{constructor(){super(H1(),\\\"Menu\\\")}open(t){this.openByTrigger(t)}close(){this.closePopup()}get isOpen(){return this.attachedStore?.select(\\\"open\\\")??!1}};function mO(){return new Lf}var bl=v(O(),1),Pq=\\\"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground\\\";function gO(e){return(0,bl.jsx)(ir.Root,{\\\"data-slot\\\":\\\"dropdown-menu\\\",...e})}function hO(e){return(0,bl.jsx)(ir.Trigger,{\\\"data-slot\\\":\\\"dropdown-menu-trigger\\\",...e})}function xO({className:e,align:t=\\\"end\\\",sideOffset:a=4,...o}){return(0,bl.jsx)(ir.Portal,{children:(0,bl.jsx)(ir.Positioner,{\\\"data-slot\\\":\\\"dropdown-menu-positioner\\\",className:\\\"z-50\\\",align:t,sideOffset:a,children:(0,bl.jsx)(ir.Popup,{\\\"data-slot\\\":\\\"dropdown-menu-content\\\",className:J(\\\"z-50 min-w-[11rem] origin-[var(--transform-origin)] overflow-hidden rounded-md border border-border bg-popover p-1 font-sans text-sm text-popover-foreground shadow-md transition-[opacity,transform] data-[ending-style]:scale-95 data-[ending-style]:opacity-0 data-[starting-style]:scale-95 data-[starting-style]:opacity-0\\\",e),...o})})})}function Yg({className:e,...t}){return(0,bl.jsx)(ir.Item,{\\\"data-slot\\\":\\\"dropdown-menu-item\\\",className:J(Pq,e),...t})}var De=v(O(),1),Nq={passed:{label:\\\"Passed\\\",glyph:\\\"\\\\u2713\\\",glyphColor:\\\"text-pass\\\",badgeVariant:\\\"passed\\\",showPill:!1},failed:{label:\\\"Failed\\\",glyph:\\\"\\\\u2717\\\",glyphColor:\\\"text-fail\\\",badgeVariant:\\\"failed\\\",showPill:!0},skipped:{label:\\\"Skipped\\\",glyph:\\\"\\\\u25CB\\\",glyphColor:\\\"text-skip\\\",badgeVariant:\\\"skipped\\\",showPill:!0},pending:{label:\\\"Pending\\\",glyph:\\\"\\\\u25CB\\\",glyphColor:\\\"text-pend\\\",badgeVariant:\\\"pending\\\",showPill:!0}};function bO({scenario:e,hideTitle:t=!1}){let a=`${e.id}-title`,o=`${e.id}-body`,n=Nq[e.status],r=e.planned?\\\"Planned\\\":n.label,l=Wp(),s=l!==null&&!t,i=s?l.isCollapsed(e.id):!1,u=Sk();return(0,De.jsxs)(Ik,{id:e.id,\\\"data-status\\\":e.status,...t?{\\\"aria-label\\\":`${e.title}, ${r}`}:{\\\"aria-labelledby\\\":a},className:\\\"gap-0 py-0\\\",children:[(0,De.jsxs)(wk,{className:\\\"px-4 py-3\\\",children:[(0,De.jsxs)(\\\"div\\\",{className:J(\\\"flex flex-wrap items-start gap-x-4 gap-y-1\\\",t?\\\"justify-end\\\":\\\"justify-between\\\"),children:[t?null:(0,De.jsxs)(\\\"h3\\\",{id:a,className:\\\"flex min-w-0 flex-1 basis-48 items-center gap-2 text-sm font-medium text-foreground\\\",children:[s?(0,De.jsx)(\\\"button\\\",{type:\\\"button\\\",onClick:()=>l.toggle(e.id),\\\"aria-expanded\\\":!i,\\\"aria-controls\\\":o,\\\"aria-label\\\":`Toggle ${e.title}`,className:\\\"shrink-0 cursor-pointer text-muted-foreground hover:text-foreground\\\",children:(0,De.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"inline-block text-xs transition-transform\\\",!i&&\\\"rotate-90\\\"),children:\\\"\\\\u25B8\\\"})}):null,(0,De.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"text-sm leading-none\\\",n.glyphColor),children:n.glyph}),(0,De.jsx)(\\\"span\\\",{children:e.title})]}),(0,De.jsxs)(\\\"div\\\",{className:\\\"flex shrink-0 items-center gap-2\\\",children:[(0,De.jsx)(ok,{scenarioId:e.id}),(0,De.jsx)(ck,{scenario:e}),e.durationMs>0?(0,De.jsx)(\\\"span\\\",{className:\\\"whitespace-nowrap font-mono text-[0.6875rem] text-muted-foreground\\\",children:gn(e.durationMs)}):null,n.showPill?(0,De.jsx)(fa,{variant:n.badgeVariant,\\\"aria-label\\\":`Status: ${r}`,children:r}):(0,De.jsx)(\\\"span\\\",{className:\\\"sr-only\\\",children:`Status: ${r}`}),u?(0,De.jsxs)(gO,{children:[(0,De.jsx)(hO,{\\\"aria-label\\\":`Actions for ${e.title}`,className:\\\"cursor-pointer rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-4\\\",children:(0,De.jsx)(Xr,{\\\"aria-hidden\\\":!0})}),(0,De.jsxs)(xO,{align:\\\"end\\\",children:[(0,De.jsxs)(Yg,{onClick:()=>u.copyLink(e),children:[(0,De.jsx)(Ic,{}),\\\" Copy link\\\"]}),(0,De.jsxs)(Yg,{onClick:()=>u.copyMarkdown(e),children:[(0,De.jsx)(Rc,{}),\\\" Copy as Markdown\\\"]}),(0,De.jsxs)(Yg,{onClick:()=>u.copyPrompt(e),children:[(0,De.jsx)(jr,{}),\\\" Explain with AI\\\"]})]})]}):null]})]}),e.tags.length>0||(e.tickets?.length??0)>0?(0,De.jsxs)(\\\"ul\\\",{\\\"aria-label\\\":\\\"Tags and tickets\\\",className:\\\"flex flex-wrap gap-1.5\\\",children:[e.tags.map(c=>(0,De.jsx)(\\\"li\\\",{children:(0,De.jsx)(fa,{variant:\\\"tag\\\",children:c})},`tag-${c}`)),(e.tickets??[]).map(c=>(0,De.jsx)(\\\"li\\\",{children:c.url?(0,De.jsx)(\\\"a\\\",{href:c.url,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",className:\\\"inline-flex min-h-6 items-center\\\",children:(0,De.jsx)(fa,{variant:\\\"outline\\\",children:c.id})}):(0,De.jsx)(fa,{variant:\\\"outline\\\",children:c.id})},`ticket-${c.id}`))]}):null]}),(0,De.jsxs)(Tk,{id:o,hidden:i,className:\\\"px-4 pt-0 pb-4\\\",children:[e.errorMessage?(0,De.jsx)(\\\"pre\\\",{role:\\\"alert\\\",className:\\\"mb-1 overflow-x-auto rounded-md border border-fail-border bg-fail-bg px-4 py-3.5 font-mono text-xs leading-relaxed whitespace-pre-wrap text-fail\\\",children:e.errorMessage}):null,(0,De.jsx)(XE,{scenario:e}),(0,De.jsx)(zE,{scenario:e}),e.docEntries.length>0?(0,De.jsx)(\\\"div\\\",{\\\"data-es-docs\\\":!0,className:\\\"mt-3\\\",children:(0,De.jsx)(Gp,{entries:e.docEntries})}):null,(0,De.jsx)(KE,{attachments:e.attachments}),(0,De.jsx)(QE,{spans:e.otelSpans})]})]})}var Rf=v(O(),1);function yO({feature:e}){return(0,Rf.jsx)(Rf.Fragment,{children:e.scenarios.map(t=>(0,Rf.jsx)(bO,{scenario:t},t.id))})}var yl=v(O(),1);function SO({feature:e}){let t=!!e.narrative?.trim(),a=!!e.glossary?.length;return!t&&!a?null:(0,yl.jsxs)(\\\"div\\\",{className:\\\"flex flex-col gap-3 border-l-2 border-border pl-4 text-sm\\\",children:[t?(0,yl.jsx)(\\\"div\\\",{className:\\\"es-doc-prose prose prose-sm max-w-none text-muted-foreground\\\",dangerouslySetInnerHTML:{__html:_i(Up(e.narrative))}}):null,a?(0,yl.jsx)(\\\"dl\\\",{className:\\\"grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5 text-xs\\\",\\\"aria-label\\\":\\\"Glossary\\\",children:e.glossary.map(o=>(0,yl.jsxs)(\\\"div\\\",{className:\\\"contents\\\",children:[(0,yl.jsx)(\\\"dt\\\",{className:\\\"font-medium text-foreground\\\",children:o.term}),(0,yl.jsx)(\\\"dd\\\",{className:\\\"text-muted-foreground\\\",children:o.definition})]},o.term))}):null]})}function CO(e){return e===\\\"ability\\\"?\\\"Ability\\\":e===\\\"business-need\\\"?\\\"Business need\\\":e===\\\"feature\\\"?\\\"Feature\\\":null}var it=v(O(),1);function vO({feature:e}){let t=`${e.id}-title`,a=`${e.id}-body`,o=e.summary,n=Wp(),r=n?.isCollapsed(e.id)??!1,l=CO(e.kind);return(0,it.jsxs)(\\\"section\\\",{id:e.id,\\\"data-slot\\\":\\\"feature\\\",\\\"aria-labelledby\\\":t,className:\\\"flex flex-col gap-3\\\",children:[(0,it.jsxs)(\\\"div\\\",{className:\\\"flex items-end justify-between gap-4 border-b border-border pb-2\\\",children:[(0,it.jsxs)(\\\"div\\\",{className:\\\"min-w-0\\\",children:[(0,it.jsx)(\\\"h2\\\",{id:t,className:\\\"text-base font-semibold tracking-tight text-foreground\\\",children:n?(0,it.jsxs)(\\\"button\\\",{type:\\\"button\\\",onClick:()=>n.toggle(e.id),\\\"aria-expanded\\\":!r,\\\"aria-controls\\\":a,className:\\\"flex w-full cursor-pointer items-center gap-2 text-left hover:text-foreground/80\\\",children:[(0,it.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"shrink-0 text-xs text-muted-foreground transition-transform\\\",!r&&\\\"rotate-90\\\"),children:\\\"\\\\u25B8\\\"}),(0,it.jsx)(\\\"span\\\",{className:\\\"truncate\\\",children:e.title})]}):e.title}),(0,it.jsxs)(\\\"p\\\",{className:J(\\\"mt-0.5 flex items-center gap-2 text-xs text-muted-foreground\\\",n&&\\\"pl-5\\\"),children:[l?(0,it.jsx)(\\\"span\\\",{className:\\\"shrink-0 rounded-sm bg-muted px-1.5 py-0.5 font-medium text-foreground\\\",children:l}):null,(0,it.jsx)(\\\"span\\\",{className:\\\"truncate font-mono\\\",children:e.sourceFile})]})]}),(0,it.jsxs)(\\\"p\\\",{className:\\\"flex shrink-0 items-center gap-1.5 text-xs text-muted-foreground\\\",\\\"aria-label\\\":[`${o.passed} passed`,`${o.failed} failed`,o.skipped>0&&`${o.skipped} skipped`,o.pending>0&&`${o.pending} pending`].filter(Boolean).join(\\\", \\\"),children:[(0,it.jsxs)(\\\"span\\\",{children:[o.passed,\\\" passed\\\"]}),(0,it.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,children:\\\"\\\\xB7\\\"}),(0,it.jsxs)(\\\"span\\\",{className:J(o.failed>0&&\\\"font-medium text-fail\\\"),children:[o.failed,\\\" failed\\\"]}),o.skipped>0?(0,it.jsxs)(it.Fragment,{children:[(0,it.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,children:\\\"\\\\xB7\\\"}),(0,it.jsxs)(\\\"span\\\",{children:[o.skipped,\\\" skipped\\\"]})]}):null,o.pending>0?(0,it.jsxs)(it.Fragment,{children:[(0,it.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,children:\\\"\\\\xB7\\\"}),(0,it.jsxs)(\\\"span\\\",{children:[o.pending,\\\" pending\\\"]})]}):null]})]}),(0,it.jsxs)(\\\"div\\\",{id:a,hidden:r,className:\\\"flex flex-col gap-3\\\",children:[(0,it.jsx)(SO,{feature:e}),(0,it.jsx)(yO,{feature:e})]})]})}var qC=v(O(),1);function VC(){let e=ro();return(0,qC.jsx)(\\\"div\\\",{className:\\\"flex flex-col gap-8\\\",children:e.features.map(t=>(0,qC.jsx)(vO,{feature:t},t.id))})}function RO(e,t){let a=[];for(let o of e.features)for(let n of o.scenarios)n.durationMs>0&&a.push({id:n.id,title:n.title,sourceFile:o.sourceFile,durationMs:n.durationMs});return a.sort((o,n)=>n.durationMs-o.durationMs).slice(0,t)}function GC(e,t){return{id:t.id,title:t.title,status:t.status,feature:e.title,sourceFile:e.sourceFile,sourceLine:t.sourceLine,tags:t.tags,tickets:t.tickets??[],covers:t.covers??[],durationMs:t.durationMs,steps:t.steps.map(a=>({id:a.id,index:a.index,keyword:a.keyword,text:a.text,status:a.status,durationMs:a.durationMs,errorMessage:a.errorMessage,docKinds:a.docEntries.map(o=>o.kind),assertions:a.assertions})),docKinds:t.docEntries.map(a=>a.kind),assertionState:Ap(t.steps),error:t.errorMessage?{message:t.errorMessage,stack:t.errorStack}:void 0}}function Bq(e,t){return!(t.statuses?.length&&!t.statuses.includes(e.status)||t.tags?.length&&!t.tags.some(a=>e.tags.includes(a))||t.sourceFiles?.length&&!t.sourceFiles.some(a=>e.sourceFile.includes(a)))}function IO(e,t={}){return e.features.flatMap(a=>a.scenarios.map(o=>GC(a,o))).filter(a=>Bq(a,t))}function wO(e,t){return LO(e,a=>a.id===t)??LO(e,a=>a.title===t)}function LO(e,t){for(let a of e.features){let o=a.scenarios.find(t);if(o)return{feature:a,scenario:o}}}function TO(e){return e.features.map(t=>({id:t.id,title:t.title,sourceFile:t.sourceFile,total:t.summary.total,passed:t.summary.passed,failed:t.summary.failed,skipped:t.summary.skipped,pending:t.summary.pending,durationMs:t.summary.durationMs}))}function EO(e,t){let a=e.ci?.commitSha??e.gitSha;return{runId:e.runId,startedAtMs:e.startedAtMs,finishedAtMs:e.finishedAtMs,...a!==void 0&&{gitSha:a},...e.ci?.branch!==void 0&&{branch:e.ci.branch},...e.packageVersion!==void 0&&{packageVersion:e.packageVersion},ageDays:Math.max(0,Math.floor((t-e.finishedAtMs)/864e5))}}var Kt=v(O(),1);function kO(){let e=ro(),t=[],a=\\\"text-primary underline underline-offset-2\\\";e.startedAtMs&&t.push({label:\\\"Started\\\",value:new Date(e.startedAtMs).toLocaleString()}),e.durationMs&&t.push({label:\\\"Duration\\\",value:gn(e.durationMs)}),e.packageVersion&&t.push({label:\\\"Version\\\",value:e.packageVersion}),e.ci?.branch&&t.push({label:\\\"Branch\\\",value:e.ci.branch});let o=e.ci?.commitSha??e.gitSha;if(o){let l=rk(e.ci,e.gitSha),s=o.slice(0,8);t.push({label:\\\"Commit\\\",value:l?(0,Kt.jsx)(\\\"a\\\",{href:l,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",className:a,children:s}):s})}if(e.ci&&t.push({label:\\\"CI\\\",value:e.ci.url?(0,Kt.jsxs)(\\\"a\\\",{href:e.ci.url,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",className:a,children:[rS(e.ci.name),e.ci.buildNumber?` #${e.ci.buildNumber}`:\\\"\\\"]}):`${rS(e.ci.name)}${e.ci.buildNumber?` #${e.ci.buildNumber}`:\\\"\\\"}`}),e.ci?.prNumber){let l=lk(e.ci),s=`#${e.ci.prNumber}`;t.push({label:\\\"PR\\\",value:l?(0,Kt.jsx)(\\\"a\\\",{href:l,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",className:a,children:s}):s})}let n=RO(e,5),r=n.length>=3;return t.length===0&&!r?null:(0,Kt.jsxs)(\\\"details\\\",{\\\"data-es-meta-card\\\":!0,className:\\\"es-run-details group rounded-lg border border-border bg-card text-xs\\\",children:[(0,Kt.jsxs)(\\\"summary\\\",{className:\\\"flex cursor-pointer list-none select-none items-center gap-1.5 px-4 py-2 font-medium text-muted-foreground [&::-webkit-details-marker]:hidden\\\",children:[(0,Kt.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:\\\"text-xs transition-transform group-open:rotate-90\\\",children:\\\"\\\\u25B8\\\"}),\\\"Run details\\\"]}),(0,Kt.jsx)(\\\"dl\\\",{className:\\\"flex flex-wrap gap-x-5 gap-y-2 border-t border-border px-4 py-3 text-muted-foreground\\\",\\\"aria-label\\\":\\\"Run metadata\\\",children:t.map(l=>(0,Kt.jsxs)(\\\"div\\\",{className:\\\"flex items-baseline gap-1.5\\\",children:[(0,Kt.jsx)(\\\"dt\\\",{className:\\\"font-medium\\\",children:l.label}),(0,Kt.jsx)(\\\"dd\\\",{className:\\\"font-mono text-foreground\\\",children:l.value})]},l.label))}),r?(0,Kt.jsxs)(\\\"div\\\",{className:\\\"border-t border-border px-4 py-3\\\",children:[(0,Kt.jsx)(\\\"div\\\",{className:\\\"mb-1.5 font-medium text-muted-foreground\\\",children:\\\"Slowest scenarios\\\"}),(0,Kt.jsx)(\\\"ol\\\",{className:\\\"flex flex-col gap-1\\\",\\\"aria-label\\\":\\\"Slowest scenarios\\\",children:n.map(l=>(0,Kt.jsxs)(\\\"li\\\",{className:\\\"flex items-baseline justify-between gap-4\\\",children:[(0,Kt.jsx)(\\\"a\\\",{href:`#${l.id}`,className:\\\"min-w-0 text-primary underline underline-offset-2\\\",children:l.title}),(0,Kt.jsx)(\\\"span\\\",{className:\\\"shrink-0 font-mono tabular-nums text-muted-foreground\\\",children:gn(l.durationMs)})]},l.id))})]}):null]})}var Sl=v(O(),1);function MO({className:e}){let t=ro();return(0,Sl.jsx)(Fq,{summary:t.summary,...e!==void 0&&{className:e},ariaLabel:\\\"Run summary\\\"})}var _q={total:{num:\\\"text-foreground\\\",dot:\\\"bg-muted-foreground/50\\\"},passed:{num:\\\"text-pass\\\",dot:\\\"bg-pass\\\"},failed:{num:\\\"text-fail\\\",dot:\\\"bg-fail\\\"},skipped:{num:\\\"text-skip\\\",dot:\\\"bg-skip\\\"},pending:{num:\\\"text-pend\\\",dot:\\\"bg-pend\\\"}};function Fq({summary:e,className:t,ariaLabel:a}){let o=[{status:\\\"total\\\",label:\\\"Total\\\",value:e.total},{status:\\\"passed\\\",label:\\\"Passed\\\",value:e.passed},{status:\\\"failed\\\",label:\\\"Failed\\\",value:e.failed},{status:\\\"skipped\\\",label:\\\"Skipped\\\",value:e.skipped}];return e.pending>0&&o.push({status:\\\"pending\\\",label:\\\"Pending\\\",value:e.pending}),(0,Sl.jsx)(\\\"dl\\\",{className:J(\\\"grid grid-cols-2 gap-3\\\",o.length===5?\\\"sm:grid-cols-5\\\":\\\"sm:grid-cols-4\\\",t),\\\"aria-label\\\":a,children:o.map(n=>{let r=_q[n.status];return(0,Sl.jsxs)(\\\"div\\\",{\\\"data-status\\\":n.status,className:\\\"rounded-lg border bg-card px-4 py-3\\\",children:[(0,Sl.jsxs)(\\\"dt\\\",{className:\\\"flex items-center gap-1.5 font-mono text-[11px] font-medium uppercase tracking-wider text-muted-foreground\\\",children:[(0,Sl.jsx)(\\\"span\\\",{className:J(\\\"size-1.5 shrink-0 rounded-full\\\",r.dot),\\\"aria-hidden\\\":\\\"true\\\"}),n.label]}),(0,Sl.jsx)(\\\"dd\\\",{className:J(\\\"mt-2 text-3xl font-semibold leading-none tracking-tight tabular-nums\\\",r.num),children:n.value})]},n.status)})})}var Ko=v(O(),1);function AO({error:e}){return(0,Ko.jsxs)(\\\"section\\\",{className:\\\"es-schema-error\\\",role:\\\"alert\\\",\\\"aria-live\\\":\\\"assertive\\\",children:[(0,Ko.jsx)(\\\"p\\\",{children:(0,Ko.jsx)(\\\"strong\\\",{children:\\\"Report could not be displayed.\\\"})}),(0,Ko.jsx)(\\\"p\\\",{children:e.message}),e.code===\\\"SCHEMA_VERSION_MISMATCH\\\"?(0,Ko.jsxs)(\\\"p\\\",{children:[\\\"The report bundle is newer than this version of \\\",(0,Ko.jsx)(\\\"code\\\",{children:\\\"executable-stories-react\\\"}),\\\". Upgrade the package, or regenerate the report with an older formatters CLI.\\\"]}):null,e.issues&&e.issues.length>0?(0,Ko.jsxs)(\\\"details\\\",{children:[(0,Ko.jsxs)(\\\"summary\\\",{children:[e.issues.length,\\\" validation issue\\\",e.issues.length===1?\\\"\\\":\\\"s\\\"]}),(0,Ko.jsx)(\\\"pre\\\",{children:e.issues.slice(0,20).map(t=>`${t.path}: ${t.message}`).join(`\\n`)})]}):null]})}var If=v(O(),1);function OO({error:e,className:t,title:a,dataTheme:o}){return(0,If.jsx)(\\\"main\\\",{className:J(\\\"es-report\\\",t),\\\"aria-label\\\":a??\\\"Test report\\\",\\\"data-theme\\\":o,children:(0,If.jsx)(AO,{error:e})})}var Hq=2,zq=\\\"\\\\0\\\";function DO(e){let t=e.attributes??{},a=i=>{let u=t[i];return typeof u==\\\"string\\\"&&u.length>0?u:void 0},o=a(\\\"db.system\\\");if(o){let i=a(\\\"db.namespace\\\")??a(\\\"db.name\\\");return{id:i?`${o}:${i}`:o,kind:\\\"datastore\\\"}}let n=a(\\\"messaging.destination.name\\\");if(n)return{id:n,kind:\\\"queue\\\"};let r=a(\\\"peer.service\\\");if(r)return{id:r,kind:\\\"service\\\"};let l=e.name.split(\\\".\\\")[0]?.trim();return{id:a(\\\"service.name\\\")??(l||e.name.trim()||\\\"(unnamed span)\\\"),kind:a(\\\"http.route\\\")?\\\"edge\\\":\\\"service\\\"}}function PO(e,t){return e===\\\"error\\\"||t===\\\"error\\\"?\\\"error\\\":\\\"ok\\\"}function Uq(e,t){let a=new Set(t.added),o=new Set(t.changed),n=[];for(let r of e){let l=r.scenarioIds.filter(s=>a.has(s)||o.has(s));if(l.length!==0){if(r.scenarioIds.every(s=>a.has(s))){r.delta=\\\"added\\\";continue}n.push({node:r,share:l.length/r.scenarioIds.length})}}n.sort((r,l)=>l.share-r.share||r.node.scenarioIds.length-l.node.scenarioIds.length||r.node.id.localeCompare(l.node.id)).slice(0,Hq).forEach(({node:r})=>{r.delta=\\\"changed\\\"})}function BO(e,t){let a=new Map,o=new Map;for(let l of e){let s=l.otelSpans;if(!s||s.length===0)continue;let i=new Map(s.map(u=>[u.spanId,u]));for(let u of s){let c=DO(u),d=u.status===\\\"error\\\"?\\\"error\\\":\\\"ok\\\",f=a.get(c.id);f?(f.status=PO(f.status,d),f.scenarioIds.includes(l.id)||f.scenarioIds.push(l.id)):a.set(c.id,{...c,status:d,scenarioIds:[l.id]});let p=u.parentSpanId?i.get(u.parentSpanId):void 0;if(!p)continue;let h=DO(p);if(h.id===c.id)continue;let b=`${h.id}${zq}${c.id}`,S=o.get(b)??{from:h.id,to:c.id,status:\\\"ok\\\",calls:0,scenarioIds:[]};S.status=PO(S.status,d),S.calls+=1,S.scenarioIds.includes(l.id)||S.scenarioIds.push(l.id),o.set(b,S)}}let r={nodes:[...a.values()].sort((l,s)=>s.scenarioIds.length-l.scenarioIds.length||l.id.localeCompare(s.id)),edges:[...o.values()]};return t&&Uq(r.nodes,t),r}function XC(e){return e.status===\\\"error\\\"?\\\"failing\\\":e.delta}var _O=[{kind:\\\"edge\\\",label:\\\"Edge\\\"},{kind:\\\"service\\\",label:\\\"Services\\\"},{kind:\\\"queue\\\",label:\\\"Queues\\\"},{kind:\\\"datastore\\\",label:\\\"Data\\\"}];function qq(e){let t=new Map,a=new Set(_O.map(o=>`es_${o.kind}`));for(let o of e){let n=o.id.replace(/[^A-Za-z0-9_]/g,\\\"_\\\")||\\\"node\\\",r=n;for(let l=2;a.has(r);l++)r=`${n}_${l}`;a.add(r),t.set(o.id,r)}return t}function Vq(e,t){return`${e.replace(/&/g,\\\"&amp;\\\").replace(/</g,\\\"&lt;\\\").replace(/>/g,\\\"&gt;\\\").replace(/\\\"/g,\\\"&quot;\\\")}<br/>${t} scenario${t===1?\\\"\\\":\\\"s\\\"}`}var NO={esFailing:\\\"classDef esFailing stroke:#d1242f,stroke-width:2px;\\\",esAdded:\\\"classDef esAdded stroke:#1a7f37,stroke-width:2px;\\\",esChanged:\\\"classDef esChanged stroke:#9a6700,stroke-width:2px;\\\"},Gq={failing:\\\"esFailing\\\",added:\\\"esAdded\\\",changed:\\\"esChanged\\\"};function FO(e){if(e.nodes.length===0)return\\\"\\\";let t=[\\\"flowchart LR\\\"],a=qq(e.nodes),o=r=>a.get(r)??r.replace(/[^A-Za-z0-9_]/g,\\\"_\\\");for(let r of _O){let l=e.nodes.filter(s=>s.kind===r.kind);if(l.length!==0){t.push(`  subgraph es_${r.kind}[\\\"${r.label}\\\"]`);for(let s of l){let i=Vq(s.id,s.scenarioIds.length);t.push(s.kind===\\\"datastore\\\"?`    ${o(s.id)}[(\\\"${i}\\\")]`:`    ${o(s.id)}[\\\"${i}\\\"]`)}t.push(\\\"  end\\\")}}for(let r of e.edges){let l=r.status===\\\"error\\\"?\\\"-.->\\\":\\\"-->\\\";t.push(`  ${o(r.from)} ${l}|${r.calls}| ${o(r.to)}`)}let n=new Set;for(let r of e.nodes){let l=XC(r);if(!l)continue;let s=Gq[l];n.add(s),t.push(`  class ${o(r.id)} ${s}`)}for(let r of Object.keys(NO))n.has(r)&&t.push(`  ${NO[r]}`);return t.join(`\\n`)}var HO=v(A(),1);var It=v(O(),1),Xq={edge:\\\"Edge\\\",service:\\\"Service\\\",queue:\\\"Queue\\\",datastore:\\\"Data\\\"},jq={failing:\\\"Failing\\\",added:\\\"New\\\",changed:\\\"Changed\\\"},Yq={failing:\\\"text-fail\\\",added:\\\"text-pass\\\",changed:\\\"text-pend\\\"};function Kq({node:e}){let t=XC(e);return t?(0,It.jsx)(\\\"span\\\",{className:J(\\\"ml-2 text-xs font-medium\\\",Yq[t]),children:jq[t]}):null}function zO(){let e=ro(),{code:t,graph:a,titleById:o}=(0,HO.useMemo)(()=>{let n=e.features.flatMap(l=>l.scenarios),r=BO(n);return{graph:r,code:FO(r),titleById:new Map(n.map(l=>[l.id,l.title]))}},[e]);return t===\\\"\\\"?null:(0,It.jsxs)(\\\"section\\\",{className:\\\"es-span-graph mt-6\\\",\\\"aria-labelledby\\\":\\\"es-span-graph-heading\\\",children:[(0,It.jsx)(\\\"h2\\\",{id:\\\"es-span-graph-heading\\\",className:\\\"text-base font-semibold text-foreground\\\",children:\\\"Architecture, as it ran\\\"}),(0,It.jsx)(\\\"p\\\",{className:\\\"mt-1 text-sm text-muted-foreground\\\",children:\\\"Derived from this run\\\\u2019s traces. Every component was named by a span while a scenario ran, so nothing here is inferred from the code. Instrumented, exercised paths only: a component no scenario reaches does not appear.\\\"}),(0,It.jsx)(qp,{entry:{kind:\\\"mermaid\\\",phase:\\\"static\\\",code:t}}),(0,It.jsxs)(\\\"table\\\",{className:\\\"mt-2 w-full border-collapse text-left text-sm\\\",children:[(0,It.jsx)(\\\"caption\\\",{className:\\\"sr-only\\\",children:\\\"Each component and the scenarios that exercised it\\\"}),(0,It.jsx)(\\\"thead\\\",{children:(0,It.jsxs)(\\\"tr\\\",{className:\\\"text-xs text-muted-foreground\\\",children:[(0,It.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"py-1 pr-4 font-medium\\\",children:\\\"Component\\\"}),(0,It.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"py-1 pr-4 font-medium\\\",children:\\\"Lane\\\"}),(0,It.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"py-1 font-medium\\\",children:\\\"Covered by\\\"})]})}),(0,It.jsx)(\\\"tbody\\\",{children:a.nodes.map(n=>(0,It.jsxs)(\\\"tr\\\",{className:\\\"border-t border-border align-top\\\",children:[(0,It.jsxs)(\\\"th\\\",{scope:\\\"row\\\",className:\\\"py-1.5 pr-4 font-mono text-xs font-normal\\\",children:[n.id,(0,It.jsx)(Kq,{node:n})]}),(0,It.jsx)(\\\"td\\\",{className:\\\"py-1.5 pr-4 text-xs text-muted-foreground\\\",children:Xq[n.kind]}),(0,It.jsx)(\\\"td\\\",{className:\\\"py-1.5\\\",children:(0,It.jsx)(\\\"ul\\\",{className:\\\"flex flex-col gap-0.5\\\",children:n.scenarioIds.map(r=>(0,It.jsx)(\\\"li\\\",{children:(0,It.jsx)(\\\"a\\\",{href:`#${r}`,className:\\\"text-xs text-link underline underline-offset-2 hover:text-foreground\\\",children:o.get(r)??r})},r))})})]},n.id))})]})]})}var Boe=v(A(),1);var Tf={};Ya(Tf,{Root:()=>eD,Thumb:()=>aD});var Ls=v(A(),1);var Kg=v(A(),1),jC=Kg.createContext(void 0);function UO(){let e=Kg.useContext(jC);if(e===void 0)throw new Error(Ne(63));return e}var qO=\\\"data-valid\\\",VO=\\\"data-invalid\\\";var GO={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},$q={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},XO={disabled:!1,...$q},jO={valid(e){return e===null?null:e?{[qO]:\\\"\\\"}:{[VO]:\\\"\\\"}}};var YO=\\\"data-checked\\\",KO=\\\"data-unchecked\\\";var Zg={...jO,checked(e){return e?{[YO]:\\\"\\\"}:{[KO]:\\\"\\\"}}};var $g=v(A(),1);var Wq={invalid:void 0,name:void 0,validityData:{state:GO,errors:[],error:\\\"\\\",value:\\\"\\\",initialValue:null},setValidityData:He,disabled:void 0,setTouched:He,setDirty:He,setFilled:He,setFocused:He,validationMode:\\\"onSubmit\\\",shouldValidateOnChange:()=>!1,state:XO,registerFieldControl:He,validation:{getValidationProps:(e,t=Ae)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:He,getInputControl:()=>null,commit:async()=>{},change:He}},Jq=$g.createContext(Wq);function Qg(e=!0){let t=$g.useContext(Jq);if(t.setValidityData===He&&!e)throw new Error(Ne(28));return t}function ZO(e,t,a,o,n=!0,r){let{registerFieldControl:l}=Qg(),s=We(()=>Symbol());V(()=>{let i=s.current;if(!n){l(i,void 0);return}l(i,{controlRef:e,getValue:o,id:t,name:r,value:a})},[e,n,o,t,r,l,s,a]),V(()=>{let i=s.current;return()=>{l(i,void 0)}},[l,s])}var Wg=v(A(),1);var eV=Wg.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:He,validationMode:\\\"onSubmit\\\",submitCountRef:{current:0}});function $O(){return Wg.useContext(eV)}var Jg=v(A(),1);var tV=Jg.createContext({controlId:void 0,registerControlId:He,resetControlId:He,labelId:void 0,setLabelId:He,messageIds:[],setMessageIds:He,getDescriptionProps:e=>e});function eh(){return Jg.useContext(tV)}var QO=v(A(),1);function WO(e,t,a,o=!0,n){let[r,l]=QO.useState(),s=lt(n?`${n}-label`:void 0),i=e??t??r;return V(()=>{let u=e||t||!o?void 0:aV(a.current,s);r!==u&&l(u)}),i}function aV(e,t){let a=oV(e);if(a)return!a.id&&t&&(a.id=t),a.id||void 0}function oV(e){if(!e)return;let t=e.parentElement;if(t&&t.tagName===\\\"LABEL\\\")return t;let a=e.id;if(a){let n=e.nextElementSibling;if(n&&n.htmlFor===a)return n}let o=e.labels;return o&&o[0]}var YC=v(A(),1);function JO(e={}){let{id:t,enabled:a=!0}=e,{controlId:o,registerControlId:n,resetControlId:r}=eh(),l=lt(),s=We(()=>Symbol()),i=YC.useRef(!1),u=YC.useRef(!1),c=Z(()=>{!i.current||n===He||(i.current=!1,n(s.current,void 0))});return V(()=>{if(!a||n===He){c();return}let d;if(t!==void 0)u.current=!0,d=t;else if(u.current)d=l;else{r();return}if(d===void 0){c();return}i.current=!0,n(s.current,d)},[t,a,n,r,l,s,c]),V(()=>c,[c]),(a?o:void 0)??t??l}var wf=v(O(),1),eD=Ls.forwardRef(function(t,a){let{checked:o,className:n,defaultChecked:r,\\\"aria-labelledby\\\":l,form:s,id:i,inputRef:u,name:c,nativeButton:d=!1,onCheckedChange:f,readOnly:p=!1,required:h=!1,disabled:b=!1,render:S,uncheckedValue:g,value:m,style:x,...y}=t,{clearErrors:L}=$O(),{state:I,setTouched:R,setDirty:C,validityData:k,setFilled:E,setFocused:T,validationMode:w,disabled:P,name:D,validation:M}=Qg(),{labelId:_}=eh(),U=P||b,B=D??c,z=Ls.useRef(null),N=Ha(z,u,M.inputRef),j=Ls.useRef(null),ae=lt(),oe=JO({id:i}),q=d?void 0:oe,[Y,G]=bn({controlled:o,default:!!r,name:\\\"Switch\\\",state:\\\"checked\\\"});ZO(j,ae,Y,void 0,!U,c),V(()=>{E(Y)},[Y,E]),_g(Y,()=>{L(B),C(Y!==k.initialValue),M.change(Y)});let{getButtonProps:xe,buttonRef:Q}=Ta({disabled:U,native:d}),W=WO(l,_,z,!d,q),ge={id:d?oe:ae,role:\\\"switch\\\",\\\"aria-checked\\\":Y,\\\"aria-readonly\\\":p||void 0,\\\"aria-required\\\":h||void 0,\\\"aria-labelledby\\\":W,onFocus(){U||T(!0)},onBlur(){let me=z.current;!me||U||(R(!0),T(!1),w===\\\"onBlur\\\"&&M.commit(me.checked))},onClick(me){if(p||U)return;me.preventDefault();let Le=z.current;Le&&ol(Le,me)}},ye={...M.getValidationProps(U),checked:Y,disabled:U,form:s,id:q,name:B,required:h,style:B?mM:km,tabIndex:-1,type:\\\"checkbox\\\",\\\"aria-hidden\\\":!0,ref:N,onChange(me){if(me.nativeEvent.defaultPrevented)return;if(p){me.preventDefault();return}let Le=me.currentTarget.checked,Ee=de($.none,me.nativeEvent);f?.(Le,Ee),!Ee.isCanceled&&G(Le)},onClick(me){me.stopPropagation()},onFocus(){j.current?.focus()},...m!==void 0?{value:m}:Ae},ee=Ls.useMemo(()=>({...I,checked:Y,disabled:U,readOnly:p,required:h}),[I,Y,U,p,h]),be=se(\\\"span\\\",t,{state:ee,ref:[a,j,Q],props:[ge,y,xe,me=>M.getValidationProps(U,me)],stateAttributesMapping:Zg});return(0,wf.jsxs)(jC.Provider,{value:ee,children:[be,!Y&&B&&g!==void 0&&(0,wf.jsx)(\\\"input\\\",{type:\\\"hidden\\\",form:s,name:B,value:g,disabled:U}),(0,wf.jsx)(\\\"input\\\",{...ye,suppressHydrationWarning:!0})]})});var tD=v(A(),1);var aD=tD.forwardRef(function(t,a){let{render:o,className:n,style:r,...l}=t,s=UO();return se(\\\"span\\\",t,{state:s,ref:a,stateAttributesMapping:Zg,props:l})});var KC=v(O(),1);function ZC({className:e,...t}){return(0,KC.jsx)(Tf.Root,{\\\"data-slot\\\":\\\"switch\\\",className:J(\\\"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[checked]:bg-primary data-[unchecked]:bg-input\\\",e),...t,children:(0,KC.jsx)(Tf.Thumb,{\\\"data-slot\\\":\\\"switch-thumb\\\",className:\\\"pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-[checked]:translate-x-[calc(100%-2px)] data-[unchecked]:translate-x-0\\\"})})}var rh=v(A(),1);var oh=v(A(),1);var nD=v(A(),1);var Rs=v(A(),1);var $C=\\\"data-composite-item-active\\\";function oD(e){let{loopFocus:t=!0,orientation:a=\\\"both\\\",grid:o,onLoop:n,direction:r,highlightedIndex:l,onHighlightedIndexChange:s,rootRef:i,enableHomeAndEndKeys:u=!1,stopEventPropagation:c,disabledIndices:d,modifierKeys:f=ca}=e,[p,h]=Rs.useState(0),b=o!=null,S=Rs.useRef(null),g=Ha(S,i),m=Rs.useRef([]),x=Rs.useRef(!1),y=Rs.useRef(null),L=l??p,I=Z((T,w=!1)=>{if(y.current=m.current[T]??null,(s??h)(T),w){let P=m.current[T];EC(S.current,P,r,a)}}),R=Z(T=>{if(T.size===0)return;if(x.current){let M=m.current,_=M.indexOf(y.current);if(_===-1){let U=M[L];!U||or(M,L,d)?I(nV(M,d)):y.current=U}else _!==L&&I(_);return}x.current=!0;let w=Array.from(T.keys()),P=w.find(M=>M?.hasAttribute($C))??null,D=P?T.get(P)?.index??-1:-1;if(D!==-1)I(D);else if(or(w,L,d)){let M=Mo(w,{disabledIndices:d});cl(w,M)||I(M)}EC(S.current,P,r,a)});V(()=>{if(d==null||l!=null||!x.current)return;let T=m.current;if(or(T,L,d)){let w=Mo(T,{disabledIndices:d});cl(T,w)||I(w)}},[d,l,L,m,I]);let C=Z((T,w,P)=>n?n(T,w,P,m):P),k=Z(T=>{let w=T.key===yg||T.key===Sg;if(!su.has(T.key)||!u&&w||rV(T,f)||!S.current)return;let D=r===\\\"rtl\\\",M=D?xg:bg,_=D?bg:xg,U=a===\\\"vertical\\\"?hg:M,B=a===\\\"vertical\\\"?gg:_,z=ft(T.nativeEvent);if(z!=null&&TC(z)&&!dO(z)){let Y=z.selectionStart,G=z.selectionEnd,xe=z.value;if(Y==null||T.shiftKey||Y!==G||T.key!==B&&Y<xe.length||T.key!==U&&Y>0)return}let N=L,j=hs(m,d),ae=Qi(m,d);o!=null&&(N=o({disabledIndices:d,elementsRef:m,event:T,highlightedIndex:L,loopFocus:t,maxIndex:ae,minIndex:j,onLoop:C,orientation:a,rtl:D}));let oe=a!==\\\"vertical\\\"&&T.key===M||a!==\\\"horizontal\\\"&&T.key===hg,q=a!==\\\"vertical\\\"&&T.key===_||a!==\\\"horizontal\\\"&&T.key===gg;u&&(T.key===yg?N=j:T.key===Sg&&(N=ae)),N===L&&(oe||q)&&(t&&N===ae&&oe?(N=j,n&&(N=n(T,L,N,m))):t&&N===j&&q?(N=ae,n&&(N=n(T,L,N,m))):N=Mo(m.current,{startingIndex:N,decrement:q,disabledIndices:d})),N!==L&&!cl(m.current,N)&&(c&&T.stopPropagation(),(b||w||oe||q)&&T.preventDefault(),I(N,!0),queueMicrotask(()=>{m.current[N]?.focus()}))});return{props:{ref:g,onFocus(T){let w=S.current,P=ft(T.nativeEvent);!w||P==null||!TC(P)||P.setSelectionRange(0,P.value.length)},onKeyDown:k},highlightedIndex:L,onHighlightedIndexChange:I,elementsRef:m,onMapChange:R,relayKeyboardEvent:k}}function nV(e,t){let a=-1;for(let o=0;o<e.length;o+=1){let n=e[o];if(!(!n||or(e,o,t))){if(n.hasAttribute($C))return o;a===-1&&(a=o)}}return Math.max(a,0)}function rV(e,t){for(let a of QA)if(!t.includes(a)&&e.getModifierState(a))return!0;return!1}var QC=v(O(),1);function rD(e){let{render:t,className:a,style:o,refs:n=ca,props:r=ca,state:l=Ae,stateAttributesMapping:s,highlightedIndex:i,onHighlightedIndexChange:u,orientation:c,grid:d,loopFocus:f,onLoop:p,enableHomeAndEndKeys:h,onMapChange:b,stopEventPropagation:S=!0,rootRef:g,disabledIndices:m,modifierKeys:x,highlightItemOnHover:y=!1,tag:L=\\\"div\\\",...I}=e,R=Tn(),{props:C,highlightedIndex:k,onHighlightedIndexChange:E,elementsRef:T,onMapChange:w,relayKeyboardEvent:P}=oD({grid:d,loopFocus:f,onLoop:p,orientation:c,highlightedIndex:i,onHighlightedIndexChange:u,rootRef:g,stopEventPropagation:S,enableHomeAndEndKeys:h,direction:R,disabledIndices:m,modifierKeys:x}),D=se(L,e,{state:l,ref:n,props:[C,...r,I],stateAttributesMapping:s}),M=nD.useMemo(()=>({highlightedIndex:k,onHighlightedIndexChange:E,highlightItemOnHover:y,relayKeyboardEvent:P}),[k,E,y,P]);return(0,QC.jsx)(SS.Provider,{value:M,children:(0,QC.jsx)(Tg,{elementsRef:T,onMapChange:_=>{b?.(_),w(_)},children:D})})}var th=v(A(),1),lV=th.createContext(void 0);function lD(){return th.useContext(lV)}var ah=v(A(),1),WC=ah.createContext(void 0);function sD(){return ah.useContext(WC)}var JC=v(O(),1),ev=oh.forwardRef(function(t,a){let{defaultValue:o,disabled:n=!1,loopFocus:r=!0,onValueChange:l,orientation:s=\\\"horizontal\\\",multiple:i=!1,value:u,className:c,render:d,style:f,...p}=t,h=pg(!0),b=lD(),S=o??ca,g=u!==void 0||o!==void 0,m=(h?.disabled??!1)||(b?.disabled??!1)||n,[x,y]=bn({controlled:u,default:S,name:\\\"ToggleGroup\\\",state:\\\"value\\\"}),L=Z((E,T,w)=>{let P;i?(P=x.slice(),T?P.push(E):P.splice(x.indexOf(E),1)):P=T?[E]:[],l?.(P,w),!w.isCanceled&&y(P)}),I={disabled:m,multiple:i,orientation:s},R=oh.useMemo(()=>({disabled:m,setGroupValue:L,value:x,isValueInitialized:g}),[m,L,x,g]),C={role:\\\"group\\\"},k=se(\\\"div\\\",t,{enabled:!!h,state:I,ref:a,props:[C,p]});return(0,JC.jsx)(WC.Provider,{value:R,children:h?k:(0,JC.jsx)(rD,{render:d,className:c,style:f,state:I,refs:[a],props:[C,p],loopFocus:r,enableHomeAndEndKeys:!0,orientation:s})})});var Ef=v(A(),1);var iD=v(O(),1),tv=Ef.forwardRef(function(t,a){let{className:o,defaultPressed:n=!1,disabled:r=!1,form:l,onPressedChange:s,pressed:i,render:u,type:c,value:d,nativeButton:f=!0,style:p,...h}=t,b=lt(d||void 0),S=sD(),g=S?.value??[],m=(r||S?.disabled)??!1,[x,y]=bn({controlled:S?b!==void 0&&g.indexOf(b)>-1:i,default:n,name:\\\"Toggle\\\",state:\\\"pressed\\\"}),{getButtonProps:L,buttonRef:I}=Ta({disabled:m,native:f}),R={disabled:m,pressed:x},C=[I,a],k=[{\\\"aria-pressed\\\":x,onClick(w){let P=!x,D=de($.none,w.nativeEvent);s?.(P,D),!D.isCanceled&&(b&&S?.setGroupValue?.(b,P,D),!D.isCanceled&&y(P))}},h,L],E=se(\\\"button\\\",t,{enabled:!S,state:R,ref:C,props:k}),T=Ef.useMemo(()=>({disabled:m,focusableWhenDisabled:!1}),[m]);return S?(0,iD.jsx)(Vg,{tag:\\\"button\\\",render:u,className:o,style:p,metadata:T,state:R,refs:C,props:k}):E});var nh=v(O(),1),sV=Yr(\\\"inline-flex items-center justify-center gap-1.5 rounded-md font-medium whitespace-nowrap text-muted-foreground transition-[color,background-color,box-shadow] outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[pressed]:bg-background data-[pressed]:text-foreground data-[pressed]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\\\",{variants:{size:{default:\\\"h-9 px-3 text-sm\\\",sm:\\\"h-8 px-2.5 text-[0.82rem]\\\"}},defaultVariants:{size:\\\"default\\\"}}),uD=rh.createContext({size:\\\"default\\\"});function cD({className:e,size:t,children:a,...o}){return(0,nh.jsx)(ev,{\\\"data-slot\\\":\\\"toggle-group\\\",className:J(\\\"flex w-fit items-center gap-0.5 rounded-lg bg-muted p-0.5\\\",e),...o,children:(0,nh.jsx)(uD.Provider,{value:{size:t},children:a})})}function fD({className:e,children:t,size:a,...o}){let n=rh.useContext(uD);return(0,nh.jsx)(tv,{\\\"data-slot\\\":\\\"toggle-group-item\\\",className:J(sV({size:n.size??a}),\\\"flex-1 shrink-0\\\",e),...o,children:t})}var bD=v(A(),1);var Pe=v(O(),1),iV=\\\"file-tree\\\",uV=\\\"data-model\\\";function dD(e){return e===\\\"added\\\"||e===\\\"modified\\\"||e===\\\"removed\\\"||e===\\\"renamed\\\"}function lh(e){return typeof e==\\\"object\\\"&&e!==null&&!Array.isArray(e)}function kn(e){return typeof e==\\\"string\\\"&&e!==\\\"\\\"?e:void 0}function cV({authored:e}){return e!==\\\"agent\\\"?null:(0,Pe.jsx)(fa,{variant:\\\"outline\\\",className:\\\"border-border text-[10px] text-muted-foreground\\\",children:\\\"AI-authored, not verified by a run\\\"})}function pD({title:e,authored:t,children:a}){return(0,Pe.jsxs)(\\\"figure\\\",{className:\\\"my-3\\\",children:[e||t===\\\"agent\\\"?(0,Pe.jsxs)(\\\"figcaption\\\",{className:\\\"mb-1.5 flex flex-wrap items-center gap-2\\\",children:[e?(0,Pe.jsx)(\\\"span\\\",{className:\\\"text-xs font-medium text-muted-foreground\\\",children:e}):null,(0,Pe.jsx)(cV,{authored:t})]}):null,a]})}function mD({change:e}){return(0,Pe.jsx)(fa,{variant:\\\"tag\\\",className:\\\"text-[10px]\\\",children:e})}function fV(e){if(!lh(e)||!Array.isArray(e.files))return;let t=[];for(let a of e.files){if(typeof a==\\\"string\\\"){a&&t.push({path:a});continue}if(!lh(a))continue;let o=kn(a.path);o&&t.push({path:o,change:dD(a.change)?a.change:void 0,note:kn(a.note)})}if(t.length!==0)return{title:kn(e.title),authored:kn(e.authored),files:t}}function dV(e){let t={name:\\\"\\\",children:new Map};for(let a of e){let o=a.path.split(\\\"/\\\").filter(Boolean),n=t;o.forEach((r,l)=>{let s=n.children.get(r);s||(s={name:r,children:new Map},n.children.set(r,s)),l===o.length-1&&(s.file=a),n=s})}return t}function pV(e){return[...e.children.values()].sort((t,a)=>{let o=t.children.size>0,n=a.children.size>0;return o!==n?o?-1:1:t.name.localeCompare(a.name)})}function gD({node:e,depth:t}){let a=pV(e);return(0,Pe.jsx)(\\\"ul\\\",{className:J(\\\"space-y-0.5\\\",t>0&&\\\"ml-3 border-l border-border/60 pl-3\\\"),children:a.map(o=>{let n=o.children.size>0;return(0,Pe.jsxs)(\\\"li\\\",{children:[(0,Pe.jsxs)(\\\"div\\\",{className:\\\"flex flex-wrap items-baseline gap-2\\\",children:[(0,Pe.jsx)(\\\"span\\\",{className:J(\\\"font-mono text-xs\\\",n?\\\"text-muted-foreground\\\":\\\"text-foreground\\\"),children:n?`${o.name}/`:o.name}),o.file?.change?(0,Pe.jsx)(mD,{change:o.file.change}):null,o.file?.note?(0,Pe.jsx)(\\\"span\\\",{className:\\\"text-xs text-muted-foreground\\\",children:o.file.note}):null]}),n?(0,Pe.jsx)(gD,{node:o,depth:t+1}):null]},o.name)})})}function mV({entry:e}){let t=fV(e.data);return t?(0,Pe.jsx)(pD,{title:t.title??\\\"Files changed\\\",authored:t.authored,children:(0,Pe.jsx)(\\\"div\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md border border-border bg-card p-3\\\",children:(0,Pe.jsx)(gD,{node:dV(t.files),depth:0})})}):(0,Pe.jsx)(hD,{entry:e})}function gV(e){if(!lh(e)||!Array.isArray(e.fields))return;let t=[];for(let a of e.fields){if(!lh(a))continue;let o=kn(a.name);o&&t.push({name:o,type:kn(a.type),note:kn(a.note),change:dD(a.change)?a.change:void 0})}if(t.length!==0)return{title:kn(e.title),authored:kn(e.authored),name:kn(e.name),fields:t}}function hV({entry:e}){let t=gV(e.data);if(!t)return(0,Pe.jsx)(hD,{entry:e});let a=t.fields.some(o=>o.note);return(0,Pe.jsx)(pD,{title:t.title??t.name??\\\"Data model\\\",authored:t.authored,children:(0,Pe.jsx)(\\\"div\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md border border-border\\\",children:(0,Pe.jsxs)(\\\"table\\\",{className:\\\"w-full border-collapse text-sm\\\",children:[(0,Pe.jsx)(\\\"thead\\\",{children:(0,Pe.jsxs)(\\\"tr\\\",{className:\\\"bg-muted/50\\\",children:[(0,Pe.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"border-b border-border px-3 py-2 text-left font-semibold\\\",children:\\\"Field\\\"}),(0,Pe.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"border-b border-border px-3 py-2 text-left font-semibold\\\",children:\\\"Type\\\"}),a?(0,Pe.jsx)(\\\"th\\\",{scope:\\\"col\\\",className:\\\"border-b border-border px-3 py-2 text-left font-semibold\\\",children:\\\"Note\\\"}):null]})}),(0,Pe.jsx)(\\\"tbody\\\",{children:t.fields.map(o=>(0,Pe.jsxs)(\\\"tr\\\",{children:[(0,Pe.jsx)(\\\"td\\\",{className:\\\"border-b border-border px-3 py-2\\\",children:(0,Pe.jsxs)(\\\"span\\\",{className:\\\"flex flex-wrap items-center gap-2\\\",children:[(0,Pe.jsx)(\\\"span\\\",{className:\\\"font-mono text-xs text-foreground\\\",children:o.name}),o.change?(0,Pe.jsx)(mD,{change:o.change}):null]})}),(0,Pe.jsx)(\\\"td\\\",{className:\\\"border-b border-border px-3 py-2 font-mono text-xs text-muted-foreground\\\",children:o.type??\\\"\\\"}),a?(0,Pe.jsx)(\\\"td\\\",{className:\\\"border-b border-border px-3 py-2 text-foreground\\\",children:o.note??\\\"\\\"}):null]},o.name))})]})})})}function hD({entry:e}){return(0,Pe.jsxs)(\\\"div\\\",{className:\\\"my-2\\\",\\\"data-type\\\":e.type,children:[(0,Pe.jsxs)(\\\"p\\\",{className:\\\"mb-1 text-xs font-medium text-muted-foreground\\\",children:[e.type,\\\" (unrecognised shape)\\\"]}),(0,Pe.jsx)(\\\"pre\\\",{tabIndex:0,className:\\\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs text-foreground\\\",children:xV(e.data)})]})}function xV(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}var xD={[iV]:e=>(0,Pe.jsx)(mV,{entry:e}),[uV]:e=>(0,Pe.jsx)(hV,{entry:e})};var SD=v(O(),1),bV={};function yD({report:e,customRenderers:t,renderers:a,children:o}){let n=(0,bD.useMemo)(()=>({report:e,customRenderers:{...xD,...t},renderers:a??bV}),[e,t,a]);return(0,SD.jsx)(Jl.Provider,{value:n,children:o})}var sh={query:\\\"\\\",status:\\\"all\\\",tags:[],detail:\\\"full\\\"},yV=[\\\"all\\\",\\\"passed\\\",\\\"failed\\\",\\\"skipped\\\",\\\"pending\\\"];function Is(e){let t=e.replace(/^#/,\\\"\\\"),a=t.indexOf(\\\"?\\\");return a===-1?{anchor:t,params:new URLSearchParams}:{anchor:t.slice(0,a),params:new URLSearchParams(t.slice(a+1))}}function CD(e){let t=e.get(\\\"status\\\"),a=e.get(\\\"tags\\\");return{query:e.get(\\\"q\\\")??sh.query,status:yV.includes(t)?t:sh.status,tags:a?a.split(\\\",\\\").filter(Boolean):[],detail:e.get(\\\"docs\\\")===\\\"0\\\"?\\\"minimal\\\":\\\"full\\\"}}function vD(e){let t=new URLSearchParams;return e.query&&t.set(\\\"q\\\",e.query),e.status!==\\\"all\\\"&&t.set(\\\"status\\\",e.status),e.tags.length>0&&t.set(\\\"tags\\\",e.tags.join(\\\",\\\")),e.detail===\\\"minimal\\\"&&t.set(\\\"docs\\\",\\\"0\\\"),t.toString()}function SV(e,t){return t?`#${e}?${t}`:e?`#${e}`:\\\"\\\"}function ih(e,t){if(typeof window>\\\"u\\\")return;let a=SV(e,t);if(a===window.location.hash)return;let o=a||window.location.href.split(\\\"#\\\")[0];try{window.history.replaceState(window.history.state,\\\"\\\",o)}catch{window.location.hash=a.slice(1)}}function CV(){return typeof window>\\\"u\\\"||typeof window.matchMedia!=\\\"function\\\"?!1:window.matchMedia(\\\"(prefers-reduced-motion: reduce)\\\").matches}function Cl(e,t={}){if(typeof document>\\\"u\\\")return;let a=document.getElementById(e);a&&(a.scrollIntoView({behavior:CV()?\\\"auto\\\":\\\"smooth\\\",block:\\\"start\\\"}),t.updateHash!==!1&&ih(e,Is(window.location.hash).params.toString()))}var av=e=>({ok:!0,data:e}),ov=e=>({ok:!1,error:e});function LD(e){return typeof e==\\\"object\\\"&&e!==null&&\\\"ok\\\"in e&&typeof e.ok==\\\"boolean\\\"?e:av(e)}function vV(e){return e.trim().toLowerCase()}function RD(e){let t=new Set;for(let a of e.features)for(let o of a.scenarios)for(let n of o.tags)t.add(n);return[...t]}function LV(e,t,a){if(t===\\\"\\\"||e.title.toLowerCase().includes(t)||a?.toLowerCase().includes(t)||e.errorMessage?.toLowerCase().includes(t))return!0;for(let o of e.tags)if(o.toLowerCase().includes(t))return!0;for(let o of e.tickets??[])if(o.id.toLowerCase().includes(t))return!0;for(let o of e.steps)if(o.text.toLowerCase().includes(t))return!0;return!1}function RV(e,t,a,o,n){return a!==\\\"all\\\"&&e.status!==a||o.length>0&&!o.some(r=>e.tags.includes(r))?!1:LV(e,t,n)}function IV(e){let t=0,a=0,o=0,n=0,r=0,l=0;for(let s of e)t+=1,l+=s.durationMs,s.status===\\\"passed\\\"?a+=1:s.status===\\\"failed\\\"?o+=1:s.status===\\\"skipped\\\"?n+=1:r+=1;return{total:t,passed:a,failed:o,skipped:n,pending:r,durationMs:l}}function uh(e,t){let a=typeof t==\\\"string\\\"?{query:t}:t,o=vV(a.query??\\\"\\\"),n=a.status??\\\"all\\\",r=a.tags??[];if(o===\\\"\\\"&&n===\\\"all\\\"&&r.length===0)return e;let l=[],s=0,i=0,u=0,c=0,d=0,f=0;for(let p of e.features){let h=p.scenarios.filter(S=>RV(S,o,n,r,p.sourceFile));if(h.length===0)continue;let b=IV(h);l.push({...p,summary:b,scenarios:h}),s+=b.total,i+=b.passed,u+=b.failed,c+=b.skipped,d+=b.pending,f+=b.durationMs}return{...e,summary:{total:s,passed:i,failed:u,skipped:c,pending:d,durationMs:f},features:l}}function ID(e){return e.features.flatMap(t=>t.scenarios.filter(a=>a.status===\\\"failed\\\"))}function wD(e){let t=[];for(let a of e.features)for(let o of a.scenarios)if(o.status===\\\"failed\\\"){let n={featureId:a.id,scenarioId:o.id,scenarioTitle:o.title};o.errorMessage!==void 0&&(n.errorMessage=o.errorMessage),t.push(n)}return t}var Oo=v(O(),1);function TD({applied:e,onReset:t,onDismiss:a}){let o=[];return e.search&&o.push(`matching \\\\u201C${e.search}\\\\u201D`),e.status!==\\\"all\\\"&&o.push(e.status),e.tags.length>0&&o.push(e.tags.join(\\\", \\\")),(0,Oo.jsxs)(\\\"div\\\",{role:\\\"status\\\",\\\"aria-live\\\":\\\"polite\\\",className:\\\"flex flex-wrap items-center gap-x-3 gap-y-1 rounded-md border border-primary/40 bg-primary/5 px-3 py-2 text-sm\\\",children:[(0,Oo.jsx)(Lc,{\\\"aria-hidden\\\":!0,className:\\\"size-4 shrink-0 text-primary\\\"}),(0,Oo.jsxs)(\\\"span\\\",{className:\\\"min-w-0 flex-1\\\",children:[\\\"An agent filtered this report\\\",o.length>0?(0,Oo.jsxs)(Oo.Fragment,{children:[\\\" to \\\",o.join(\\\" \\\\xB7 \\\")]}):null,\\\" \\\\u2014\\\",\\\" \\\",(0,Oo.jsxs)(\\\"span\\\",{className:\\\"tabular-nums\\\",children:[e.matched,\\\" of \\\",e.total,\\\" scenarios\\\"]}),\\\".\\\"]}),(0,Oo.jsx)(\\\"button\\\",{type:\\\"button\\\",onClick:t,className:\\\"cursor-pointer rounded-md border border-border px-2 py-1 text-xs hover:bg-muted\\\",children:\\\"Show all\\\"}),(0,Oo.jsx)(\\\"button\\\",{type:\\\"button\\\",onClick:a,\\\"aria-label\\\":\\\"Dismiss\\\",className:\\\"cursor-pointer rounded-md p-1 text-muted-foreground hover:text-foreground\\\",children:(0,Oo.jsx)(Zl,{\\\"aria-hidden\\\":!0,className:\\\"size-4\\\"})})]})}var ED=v(A(),1);var ws=v(O(),1);function kD({failures:e,onCopyAll:t}){let a=e[0],o=(0,ED.useCallback)(()=>{a&&Cl(a.scenarioId)},[a]);return e.length===0?null:(0,ws.jsxs)(\\\"div\\\",{className:\\\"es-failure-banner\\\",role:\\\"status\\\",\\\"aria-live\\\":\\\"polite\\\",\\\"aria-label\\\":\\\"Failure summary\\\",children:[(0,ws.jsxs)(\\\"span\\\",{className:\\\"es-failure-banner-text\\\",children:[(0,ws.jsx)(\\\"strong\\\",{children:e.length}),\\\" \\\",\\\"failure\\\",e.length===1?\\\"\\\":\\\"s\\\"]}),(0,ws.jsx)(\\\"button\\\",{type:\\\"button\\\",className:\\\"es-failure-banner-jump\\\",onClick:o,\\\"aria-label\\\":\\\"View first failure\\\",children:\\\"View first failure \\\\u2193\\\"}),t?(0,ws.jsxs)(\\\"button\\\",{type:\\\"button\\\",className:\\\"es-failure-banner-jump\\\",onClick:t,\\\"aria-label\\\":\\\"Copy failures for an agent\\\",children:[\\\"Copy \\\",e.length,\\\" failure\\\",e.length===1?\\\"\\\":\\\"s\\\",\\\" for an agent\\\"]}):null]})}var MD=v(A(),1);var Do=v(O(),1),ch=12;function AD({statuses:e,status:t,onStatus:a,tags:o,activeTags:n,onToggleTag:r}){let[l,s]=(0,MD.useState)(!1);if(e.length===0&&o.length===0)return null;let i=o.length>ch&&!l,u=i?o.slice(0,ch):o;return(0,Do.jsxs)(\\\"div\\\",{className:\\\"flex flex-col gap-2\\\",children:[e.length>0?(0,Do.jsx)(\\\"div\\\",{role:\\\"group\\\",\\\"aria-label\\\":\\\"Filter by status\\\",className:\\\"flex flex-wrap gap-1\\\",children:e.map(c=>{let d=t===c.key;return(0,Do.jsxs)(\\\"button\\\",{type:\\\"button\\\",\\\"aria-pressed\\\":d,onClick:()=>a(d&&c.key!==\\\"all\\\"?\\\"all\\\":c.key),className:J(\\\"cursor-pointer rounded-md border px-2 py-1 text-xs transition-colors\\\",d?\\\"border-primary bg-primary text-primary-foreground\\\":\\\"border-border text-muted-foreground hover:bg-muted hover:text-foreground\\\"),children:[c.label,(0,Do.jsx)(\\\"span\\\",{className:\\\"ml-1 font-mono opacity-70\\\",children:c.count})]},c.key)})}):null,o.length>0?(0,Do.jsxs)(\\\"ul\\\",{\\\"aria-label\\\":\\\"Filter by tag\\\",className:\\\"flex flex-wrap items-center gap-1.5\\\",children:[u.map(c=>{let d=n.includes(c);return(0,Do.jsx)(\\\"li\\\",{children:(0,Do.jsx)(\\\"button\\\",{type:\\\"button\\\",\\\"aria-pressed\\\":d,onClick:()=>r(c),className:\\\"cursor-pointer\\\",children:(0,Do.jsx)(fa,{variant:\\\"tag\\\",className:J(d&&\\\"border-primary bg-primary text-primary-foreground\\\"),children:c})})},c)}),o.length>ch?(0,Do.jsx)(\\\"li\\\",{children:(0,Do.jsx)(\\\"button\\\",{type:\\\"button\\\",\\\"aria-expanded\\\":l,onClick:()=>s(c=>!c),className:\\\"cursor-pointer rounded-full px-2 py-0.5 text-xs font-medium text-muted-foreground hover:text-foreground\\\",children:i?`+${o.length-ch} more`:\\\"Show fewer\\\"})}):null]}):null]})}var fh=v(A(),1);var Mn=v(O(),1);function OD({lastRunMs:e,ciUrl:t,staleAfterDays:a,nowMs:o}){let[n,r]=(0,fh.useState)(o);if((0,fh.useEffect)(()=>{o===void 0&&r(Date.now())},[o]),e===void 0||n===void 0)return null;let l=zi(e,n),s=t?(0,Mn.jsx)(\\\"a\\\",{href:t,target:\\\"_blank\\\",rel:\\\"noreferrer noopener\\\",className:\\\"underline underline-offset-2\\\",children:\\\"View CI run\\\"}):null;return Zp(e,a,n)?(0,Mn.jsxs)(\\\"div\\\",{className:\\\"es-stale-banner\\\",role:\\\"status\\\",\\\"aria-label\\\":\\\"Report freshness\\\",children:[(0,Mn.jsxs)(\\\"span\\\",{children:[(0,Mn.jsxs)(\\\"strong\\\",{children:[\\\"Last verified \\\",l,\\\".\\\"]}),\\\" This report may no longer match the current behavior. Look for a newer run.\\\"]}),s]}):(0,Mn.jsxs)(\\\"p\\\",{className:\\\"es-freshness\\\",\\\"aria-label\\\":\\\"Report freshness\\\",children:[\\\"Verified \\\",l,s?(0,Mn.jsxs)(Mn.Fragment,{children:[\\\" \\\\xB7 \\\",s]}):null]})}var Sa=v(O(),1),nv=5;function DD({scenarios:e,tone:t}){return(0,Sa.jsxs)(Sa.Fragment,{children:[e.slice(0,nv).map((a,o)=>(0,Sa.jsxs)(\\\"span\\\",{children:[o>0?\\\", \\\":\\\"\\\",(0,Sa.jsx)(\\\"a\\\",{href:`#${a.id}`,className:J(\\\"underline underline-offset-2 hover:no-underline\\\",t),children:a.title})]},a.id)),e.length>nv?(0,Sa.jsxs)(\\\"span\\\",{children:[\\\" and \\\",e.length-nv,\\\" more\\\"]}):null]})}function PD({history:e,report:t}){if(!e)return null;let a=t.features.flatMap(s=>s.scenarios.map(i=>({id:i.id,title:i.title}))),o=ak(e,a);if(!o)return null;let{newlyFailing:n,newlyPassing:r,added:l}=o;return n.length===0&&r.length===0&&l.length===0?(0,Sa.jsx)(\\\"p\\\",{className:\\\"text-xs text-muted-foreground\\\",\\\"data-testid\\\":\\\"es-last-run-delta\\\",children:\\\"Since last run: no behavior changes.\\\"}):(0,Sa.jsxs)(\\\"p\\\",{className:\\\"text-xs text-muted-foreground\\\",\\\"data-testid\\\":\\\"es-last-run-delta\\\",children:[(0,Sa.jsx)(\\\"span\\\",{className:\\\"font-medium text-foreground\\\",children:\\\"Since last run:\\\"}),n.length>0?(0,Sa.jsxs)(\\\"span\\\",{className:\\\"ml-2 text-fail\\\",children:[n.length,\\\" newly failing (\\\",(0,Sa.jsx)(DD,{scenarios:n,tone:\\\"text-fail\\\"}),\\\")\\\"]}):null,r.length>0?(0,Sa.jsxs)(\\\"span\\\",{className:\\\"ml-2 text-pass\\\",children:[r.length,\\\" fixed (\\\",(0,Sa.jsx)(DD,{scenarios:r,tone:\\\"text-pass\\\"}),\\\")\\\"]}):null,l.length>0?(0,Sa.jsxs)(\\\"span\\\",{className:\\\"ml-2\\\",children:[l.length,\\\" new\\\"]}):null]})}var dh=v(A(),1);var tre=v(A(),1);var BD=v(O(),1);function ND({className:e,type:t,...a}){return(0,BD.jsx)(\\\"input\\\",{type:t,\\\"data-slot\\\":\\\"input\\\",className:J(\\\"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\\\",\\\"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\\\",\\\"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\\\",e),...a})}var vl=v(O(),1),_D=(0,dh.forwardRef)(function(t,a){let{value:o,onChange:n,matchedCount:r,totalCount:l,placeholder:s=\\\"Search scenarios, tags, tickets, errors\\\\u2026\\\",className:i}=t,u=(0,dh.useId)(),c=o.trim().length>0&&typeof r==\\\"number\\\"&&typeof l==\\\"number\\\";function d(p){n(p.target.value)}function f(p){p.key===\\\"Escape\\\"&&o!==\\\"\\\"&&(n(\\\"\\\"),p.preventDefault())}return(0,vl.jsxs)(\\\"div\\\",{className:J(\\\"es-search flex flex-col gap-1\\\",i),children:[(0,vl.jsx)(\\\"label\\\",{htmlFor:u,className:\\\"sr-only\\\",children:\\\"Search\\\"}),(0,vl.jsxs)(\\\"div\\\",{className:\\\"relative w-full sm:w-72\\\",children:[(0,vl.jsx)(kc,{\\\"aria-hidden\\\":!0,className:\\\"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground\\\"}),(0,vl.jsx)(ND,{ref:a,id:u,type:\\\"search\\\",value:o,onChange:d,onKeyDown:f,placeholder:s,autoComplete:\\\"off\\\",spellCheck:!1,\\\"aria-keyshortcuts\\\":\\\"/\\\",className:\\\"pl-8\\\"})]}),c?(0,vl.jsxs)(\\\"span\\\",{className:\\\"text-xs tabular-nums text-muted-foreground\\\",\\\"aria-live\\\":\\\"polite\\\",children:[r,\\\" of \\\",l,\\\" scenarios\\\"]}):null]})});var gu=v(A(),1);var ire=v(A(),1);var wV=Yr(\\\"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,background-color,border-color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\\\",{variants:{variant:{default:\\\"bg-primary text-primary-foreground hover:bg-primary/90\\\",destructive:\\\"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\\\",outline:\\\"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\\\",secondary:\\\"bg-secondary text-secondary-foreground hover:bg-secondary/80\\\",ghost:\\\"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\\\",link:\\\"text-primary underline-offset-4 hover:underline\\\"},size:{default:\\\"h-9 px-4 py-2 has-[>svg]:px-3\\\",xs:\\\"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\\\",sm:\\\"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\\\",lg:\\\"h-10 rounded-md px-6 has-[>svg]:px-4\\\",icon:\\\"size-9\\\",\\\"icon-xs\\\":\\\"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\\\",\\\"icon-sm\\\":\\\"size-8\\\",\\\"icon-lg\\\":\\\"size-10\\\"}},defaultVariants:{variant:\\\"default\\\",size:\\\"default\\\"}});function mu({className:e,variant:t=\\\"default\\\",size:a=\\\"default\\\",render:o,...n}){return Dp({defaultTagName:\\\"button\\\",render:o,props:{\\\"data-slot\\\":\\\"button\\\",\\\"data-variant\\\":t,\\\"data-size\\\":a,className:J(wV({variant:t,size:a,className:e})),...n}})}var Zt=v(O(),1),TV=\\\"npx executable-stories share reports/\\\";function FD({command:e=TV,onCopy:t}){let[a,o]=(0,gu.useState)(!1),n=(0,gu.useRef)(null);return(0,gu.useEffect)(()=>{let r=n.current;r&&(a&&!r.open?r.showModal():!a&&r.open&&r.close())},[a]),(0,Zt.jsxs)(Zt.Fragment,{children:[(0,Zt.jsxs)(mu,{type:\\\"button\\\",variant:\\\"ghost\\\",size:\\\"sm\\\",\\\"aria-label\\\":\\\"Share this report\\\",title:\\\"Share this report\\\",onClick:()=>o(!0),children:[(0,Zt.jsx)(Mc,{\\\"aria-hidden\\\":\\\"true\\\",className:\\\"size-4\\\"}),(0,Zt.jsx)(\\\"span\\\",{className:\\\"sr-only sm:not-sr-only\\\",children:\\\"Share\\\"})]}),(0,Zt.jsxs)(\\\"dialog\\\",{ref:n,className:\\\"es-report-share m-auto w-[min(90vw,32rem)] rounded-lg border border-border bg-card p-6 text-card-foreground shadow-lg [overscroll-behavior:contain] backdrop:bg-black/40\\\",\\\"aria-label\\\":\\\"Share this report\\\",onClose:()=>o(!1),children:[(0,Zt.jsx)(\\\"h2\\\",{className:\\\"text-base font-semibold\\\",children:\\\"Share this report\\\"}),(0,Zt.jsx)(\\\"p\\\",{className:\\\"mt-2 text-sm text-muted-foreground\\\",children:\\\"Publish it to Executable Stories Cloud and send a link. Screenshots and videos go with it. Run this from your project:\\\"}),(0,Zt.jsxs)(\\\"div\\\",{className:\\\"mt-4 flex items-center gap-2\\\",children:[(0,Zt.jsx)(\\\"code\\\",{className:\\\"min-w-0 flex-1 truncate rounded border border-border bg-muted px-3 py-2 font-mono text-xs\\\",children:e}),(0,Zt.jsx)(mu,{type:\\\"button\\\",size:\\\"sm\\\",onClick:()=>t(e,\\\"Command copied\\\"),children:\\\"Copy\\\"})]}),(0,Zt.jsx)(\\\"p\\\",{className:\\\"mt-3 text-xs text-muted-foreground\\\",children:\\\"The file you are reading cannot upload itself, so the command does it: only the CLI can read the assets this report links to.\\\"}),(0,Zt.jsxs)(\\\"div\\\",{className:\\\"mt-6 flex items-center justify-between gap-4\\\",children:[(0,Zt.jsx)(\\\"a\\\",{className:\\\"text-xs underline underline-offset-2\\\",href:\\\"https://docs.executablestories.com/guides/sharing-reports/\\\",target:\\\"_blank\\\",rel:\\\"noreferrer\\\",children:\\\"How sharing works\\\"}),(0,Zt.jsx)(mu,{type:\\\"button\\\",variant:\\\"outline\\\",size:\\\"sm\\\",onClick:()=>o(!1),children:\\\"Close\\\"})]})]})]})}var kf=v(A(),1);function HD(e,t){let a={};for(let o of e.features)for(let n of o.scenarios)a[n.id]=n.status;return{runId:e.runId,atMs:t,statuses:a}}function zD(e,t){if(!e||e.runId===t.runId)return null;let a=[],o=[],n=[];for(let r of t.features)for(let l of r.scenarios){let s={id:l.id,title:l.title},i=e.statuses[l.id];i===void 0?n.push(s):i!==\\\"failed\\\"&&l.status===\\\"failed\\\"?a.push(s):i===\\\"failed\\\"&&l.status===\\\"passed\\\"&&o.push(s)}return a.length===0&&o.length===0&&n.length===0?null:{sinceMs:e.atMs,newlyFailing:a,newlyPassing:o,added:n}}var ka=v(O(),1),qD=\\\"es-last-visit\\\",rv=5;function EV(){try{let e=localStorage.getItem(qD);if(!e)return null;let t=JSON.parse(e);if(typeof t!=\\\"object\\\"||t===null)return null;let a=t;return typeof a.runId!=\\\"string\\\"||typeof a.atMs!=\\\"number\\\"||typeof a.statuses!=\\\"object\\\"?null:{runId:a.runId,atMs:a.atMs,statuses:a.statuses}}catch{return null}}function kV(e){try{localStorage.setItem(qD,JSON.stringify(e))}catch{}}function UD({scenarios:e,tone:t}){return(0,ka.jsxs)(ka.Fragment,{children:[e.slice(0,rv).map((a,o)=>(0,ka.jsxs)(\\\"span\\\",{children:[o>0?\\\", \\\":\\\"\\\",(0,ka.jsx)(\\\"a\\\",{href:`#${a.id}`,className:J(\\\"underline underline-offset-2 hover:no-underline\\\",t),children:a.title})]},a.id)),e.length>rv?(0,ka.jsxs)(\\\"span\\\",{children:[\\\" and \\\",e.length-rv,\\\" more\\\"]}):null]})}function VD({report:e}){let[t,a]=(0,kf.useState)(null),[o,n]=(0,kf.useState)(0);if((0,kf.useEffect)(()=>{let i=Date.now();a(zD(EV(),e)),n(i),kV(HD(e,i))},[e]),!t)return null;let{newlyFailing:r,newlyPassing:l,added:s}=t;return(0,ka.jsxs)(\\\"p\\\",{className:\\\"text-xs text-muted-foreground\\\",\\\"data-testid\\\":\\\"es-since-last-visit\\\",children:[(0,ka.jsxs)(\\\"span\\\",{className:\\\"font-medium text-foreground\\\",children:[\\\"Since your last visit (\\\",zi(t.sinceMs,o),\\\"):\\\"]}),r.length>0?(0,ka.jsxs)(\\\"span\\\",{className:\\\"ml-2 text-fail\\\",children:[r.length,\\\" started failing (\\\",(0,ka.jsx)(UD,{scenarios:r,tone:\\\"text-fail\\\"}),\\\")\\\"]}):null,l.length>0?(0,ka.jsxs)(\\\"span\\\",{className:\\\"ml-2 text-pass\\\",children:[l.length,\\\" fixed (\\\",(0,ka.jsx)(UD,{scenarios:l,tone:\\\"text-pass\\\"}),\\\")\\\"]}):null,s.length>0?(0,ka.jsxs)(\\\"span\\\",{className:\\\"ml-2\\\",children:[s.length,\\\" new\\\"]}):null]})}var ph=v(A(),1);var Ma=v(O(),1),MV=[{keys:\\\"/\\\",description:\\\"Focus search\\\"},{keys:\\\"f\\\",description:\\\"Jump to next failure\\\"},{keys:\\\"Shift F\\\",description:\\\"Jump to previous failure\\\"},{keys:\\\"e\\\",description:\\\"Expand all\\\"},{keys:\\\"c\\\",description:\\\"Collapse all\\\"},{keys:\\\"?\\\",description:\\\"Toggle this help\\\"},{keys:\\\"Esc\\\",description:\\\"Clear search / close\\\"}];function AV({keys:e}){let t=e.split(\\\" \\\");return(0,Ma.jsx)(\\\"span\\\",{className:\\\"inline-flex items-center gap-1\\\",children:t.map((a,o)=>(0,Ma.jsxs)(\\\"span\\\",{className:\\\"inline-flex items-center gap-1\\\",children:[o>0?(0,Ma.jsx)(\\\"span\\\",{className:\\\"text-xs text-muted-foreground\\\",children:\\\"+\\\"}):null,(0,Ma.jsx)(\\\"kbd\\\",{className:\\\"inline-flex h-6 min-w-6 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-xs font-medium text-muted-foreground\\\",children:a})]},a))})}function GD({open:e,onClose:t}){let a=(0,ph.useRef)(null);return(0,ph.useEffect)(()=>{let o=a.current;o&&(e&&!o.open?o.showModal():!e&&o.open&&o.close())},[e]),(0,Ma.jsxs)(\\\"dialog\\\",{ref:a,className:\\\"es-shortcuts-help m-auto w-[min(90vw,28rem)] rounded-lg border border-border bg-card p-6 text-card-foreground shadow-lg [overscroll-behavior:contain] backdrop:bg-black/40\\\",\\\"aria-label\\\":\\\"Keyboard shortcuts\\\",onClose:t,children:[(0,Ma.jsx)(\\\"h2\\\",{className:\\\"text-base font-semibold\\\",children:\\\"Keyboard shortcuts\\\"}),(0,Ma.jsx)(\\\"dl\\\",{className:\\\"mt-4 grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-2.5\\\",children:MV.map(o=>(0,Ma.jsxs)(\\\"div\\\",{className:\\\"col-span-2 grid grid-cols-subgrid items-center\\\",children:[(0,Ma.jsx)(\\\"dt\\\",{className:\\\"justify-self-start\\\",children:(0,Ma.jsx)(AV,{keys:o.keys})}),(0,Ma.jsx)(\\\"dd\\\",{className:\\\"text-sm text-muted-foreground\\\",children:o.description})]},o.keys))}),(0,Ma.jsx)(\\\"form\\\",{method:\\\"dialog\\\",className:\\\"mt-6\\\",children:(0,Ma.jsx)(mu,{type:\\\"submit\\\",variant:\\\"outline\\\",size:\\\"sm\\\",children:\\\"Close\\\"})})]})}var hu=v(A(),1);var co=v(O(),1),OV={passed:\\\"bg-pass\\\",failed:\\\"bg-fail\\\",skipped:\\\"bg-skip\\\",pending:\\\"bg-pend\\\"};function lv({onNavigate:e}){let t=ro(),[a,o]=(0,hu.useState)(null),n=(0,hu.useMemo)(()=>t.features.flatMap(r=>r.scenarios.map(l=>l.id)),[t]);return(0,hu.useEffect)(()=>{if(typeof window>\\\"u\\\")return;let r=n.map(u=>document.getElementById(u)).filter(u=>u!==null);if(r.length===0)return;let l=0,s=()=>{l=0;let c=window.scrollY+window.innerHeight>=document.documentElement.scrollHeight-2?window.innerHeight:window.innerHeight*.2,d=r[0],f=-1/0;for(let p of r){let h=p.getBoundingClientRect().top;h<=c&&h>f&&(f=h,d=p)}o(d.id)},i=()=>{l===0&&(l=requestAnimationFrame(s))};return s(),window.addEventListener(\\\"scroll\\\",i,{passive:!0}),window.addEventListener(\\\"resize\\\",i),()=>{window.removeEventListener(\\\"scroll\\\",i),window.removeEventListener(\\\"resize\\\",i),l!==0&&cancelAnimationFrame(l)}},[n]),t.features.length===0?null:(0,co.jsx)(\\\"ul\\\",{className:\\\"flex list-none flex-col gap-4 pl-0\\\",children:t.features.map(r=>(0,co.jsxs)(\\\"li\\\",{children:[(0,co.jsx)(\\\"p\\\",{className:\\\"mb-1.5 font-semibold leading-snug text-foreground\\\",children:r.title}),(0,co.jsx)(\\\"ul\\\",{className:\\\"flex list-none flex-col gap-0.5 pl-0\\\",children:r.scenarios.map(l=>{let s=a===l.id;return(0,co.jsx)(\\\"li\\\",{children:(0,co.jsxs)(\\\"a\\\",{href:`#${l.id}`,onClick:i=>{i.preventDefault(),Cl(l.id,{updateHash:!0}),e?.()},\\\"aria-current\\\":s?\\\"true\\\":void 0,className:J(\\\"flex items-start gap-2 border-l-2 py-1 pl-2.5 leading-snug hover:text-foreground\\\",s?\\\"border-primary font-medium text-foreground\\\":\\\"border-border text-muted-foreground\\\"),children:[(0,co.jsx)(\\\"span\\\",{\\\"aria-hidden\\\":!0,className:J(\\\"mt-1 size-1.5 shrink-0 rounded-full\\\",OV[l.status])}),(0,co.jsx)(\\\"span\\\",{className:\\\"break-words\\\",children:l.title})]})},l.id)})})]},r.id))})}function XD(){return ro().features.length===0?null:(0,co.jsxs)(\\\"nav\\\",{\\\"aria-label\\\":\\\"Table of contents\\\",className:\\\"sticky top-4 hidden h-fit w-64 shrink-0 self-start text-xs lg:block\\\",children:[(0,co.jsx)(\\\"p\\\",{className:\\\"mb-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground\\\",children:\\\"Contents\\\"}),(0,co.jsx)(lv,{})]})}var SP=v(A(),1);var An={};Ya(An,{Backdrop:()=>YD,Close:()=>ZD,Description:()=>QD,Handle:()=>Of,Popup:()=>aP,Portal:()=>nP,Root:()=>dP,Title:()=>hP,Trigger:()=>bP,Viewport:()=>mP,createHandle:()=>yP});var jD=v(A(),1);var mh=v(A(),1),sv=mh.createContext(void 0);function $t(e){let t=mh.useContext(sv);if(!e&&t===void 0)throw new Error(Ne(27));return t}var YD=jD.forwardRef(function(t,a){let{render:o,className:n,style:r,forceRender:l=!1,...s}=t,i=$t(),u=i.useState(\\\"open\\\"),c=i.useState(\\\"nested\\\"),d=i.useState(\\\"mounted\\\"),f=i.useState(\\\"transitionStatus\\\");return se(\\\"div\\\",t,{state:{open:u,transitionStatus:f},ref:[i.context.backdropRef,a],stateAttributesMapping:Vi,props:[{role:\\\"presentation\\\",hidden:!d,style:{userSelect:\\\"none\\\",WebkitUserSelect:\\\"none\\\"}},s],enabled:l||!c})});var KD=v(A(),1);var ZD=KD.forwardRef(function(t,a){let{render:o,className:n,style:r,disabled:l=!1,nativeButton:s=!0,...i}=t,u=$t(),c=u.useState(\\\"open\\\"),{getButtonProps:d,buttonRef:f}=Ta({disabled:l,native:s}),p={disabled:l};function h(b){c&&u.setOpen(!1,de($.closePress,b.nativeEvent))}return se(\\\"button\\\",t,{state:p,ref:[a,f],props:[{onClick:h},i,d]})});var $D=v(A(),1);var QD=$D.forwardRef(function(t,a){let{render:o,className:n,style:r,id:l,...s}=t,i=$t(),u=lt(l);return i.useSyncedValueWithCleanup(\\\"descriptionElementId\\\",u),se(\\\"p\\\",t,{ref:a,props:[{id:u},s]})});var eP=v(A(),1);var gh=v(A(),1),iv=gh.createContext(void 0);function hh(){let e=gh.useContext(iv);if(e===void 0)throw new Error(Ne(26));return e}var WD=\\\"--nested-dialogs\\\";var jre=ls.open,Yre=ls.closed,Kre=ls.startingStyle,Zre=ls.endingStyle;var JD=\\\"data-nested-dialog-open\\\";var xh={...ss,...qi,nestedDialogOpen(e){return e?{[JD]:\\\"\\\"}:null}};var tP=v(O(),1),aP=eP.forwardRef(function(t,a){let{render:o,className:n,style:r,finalFocus:l,initialFocus:s,...i}=t,u=$t(),c=u.useState(\\\"descriptionElementId\\\"),d=u.useState(\\\"disablePointerDismissal\\\"),f=u.useState(\\\"floatingRootContext\\\"),p=u.useState(\\\"popupProps\\\"),h=u.useState(\\\"modal\\\"),b=u.useState(\\\"mounted\\\"),S=u.useState(\\\"nested\\\"),g=u.useState(\\\"nestedOpenDialogCount\\\"),m=u.useState(\\\"open\\\"),x=u.useState(\\\"openMethod\\\"),y=u.useState(\\\"titleElementId\\\"),L=u.useState(\\\"transitionStatus\\\"),I=u.useState(\\\"role\\\"),R=f.useState(\\\"floatingId\\\");hh(),vn({open:m,ref:u.context.popupRef,onComplete(){m&&u.context.onOpenChangeComplete?.(!0)}});let C=s===void 0?NA(u.context.popupRef):s,k=g>0,E=u.useStateSetter(\\\"popupElement\\\"),w=se(\\\"div\\\",t,{state:{open:m,nested:S,transitionStatus:L,nestedDialogOpen:k},props:[p,{id:R,\\\"aria-labelledby\\\":y,\\\"aria-describedby\\\":c,role:I,...Km,hidden:!b,onKeyDown(P){su.has(P.key)&&P.stopPropagation()},style:{[WD]:g}},i],ref:[a,u.context.popupRef,E],stateAttributesMapping:xh});return(0,tP.jsx)(sf,{context:f,openInteractionType:x,disabled:!b,closeOnFocusOut:!d,initialFocus:C,returnFocus:l,modal:h!==!1,restoreFocus:\\\"popup\\\",children:w})});var oP=v(A(),1);var Mf=v(O(),1),nP=oP.forwardRef(function(t,a){let{keepMounted:o=!1,...n}=t,r=$t(),l=r.useState(\\\"mounted\\\"),s=r.useState(\\\"modal\\\"),i=r.useState(\\\"open\\\");return l||o?(0,Mf.jsx)(iv.Provider,{value:o,children:(0,Mf.jsxs)(nf,{ref:a,...n,children:[l&&s===!0&&(0,Mf.jsx)(Eg,{ref:r.context.internalBackdropRef,inert:iu(!i)}),t.children]})}):null});var cP=v(A(),1);var uv=v(A(),1);function rP({store:e,parentContext:t,isDrawer:a}){let o=e.useState(\\\"open\\\"),n=e.useState(\\\"disablePointerDismissal\\\"),r=e.useState(\\\"modal\\\"),l=e.useState(\\\"popupElement\\\"),s=e.useState(\\\"floatingRootContext\\\"),[i,u]=uv.useState(0),[c,d]=uv.useState(0),f=i===0,p=cf(s,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?\\\"intentional\\\":{mouse:r===\\\"trap-focus\\\"?\\\"sloppy\\\":\\\"intentional\\\",touch:\\\"sloppy\\\"}},outsidePress(h){if(!e.context.outsidePressEnabledRef.current||\\\"button\\\"in h&&h.button!==0)return!1;if(\\\"touches\\\"in h){if(h.type===\\\"touchend\\\"){if(h.changedTouches.length!==1||h.touches.length!==0)return!1}else if(h.touches.length!==1)return!1}let b=ft(h);if(f&&!n){if(r){let S=e.context.internalBackdropRef.current,g=e.context.backdropRef.current;return S||g?S===b||g===b||ie(b,l)&&!b?.hasAttribute(\\\"data-base-ui-portal\\\"):!0}return!0}return!1},escapeKey:f});return Mg(o&&r===!0,l),e.useContextCallback(\\\"onNestedDialogOpen\\\",(h,b)=>{u(h),d(b)}),V(()=>(t?.onNestedDialogOpen&&(o?t.onNestedDialogOpen(i+1,c+(a?1:0)):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&o&&t.onNestedDialogOpen(0,0)}),[a,o,i,c,t]),eg(e,{activeTriggerProps:p.reference,inactiveTriggerProps:p.trigger,popupProps:p.floating,nestedOpenDialogCount:i,nestedOpenDrawerCount:c}),null}var bh=v(A(),1);var lP={...ag,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role},yh=class extends In{constructor(t,a,o){let n=new ml,r=iP(t,n,a,o);super(r,uP(n),lP)}setOpen=(t,a)=>{a.preventUnmountOnClose=()=>{this.set(\\\"preventUnmountingOnClose\\\",!0)},!t&&a.trigger==null&&this.state.activeTriggerId!=null&&(a.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(t,a),!a.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(t,a),this.update($m(this.state,t,a.trigger)))}};function sP(){let e=new ml;return new fu(Object.freeze(iP(void 0,e)),Object.freeze(uP(e)),lP)}function iP(e,t,a,o=!1){return{...tg(t,a,o),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:\\\"dialog\\\",...e}}function uP(e){return{popupRef:bh.createRef(),backdropRef:bh.createRef(),internalBackdropRef:bh.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}var Af=v(O(),1);function fP(e,t){let{children:a,open:o,defaultOpen:n=!1,onOpenChange:r,onOpenChangeComplete:l,disablePointerDismissal:s=!1,modal:i=!0,actionsRef:u,handle:c,triggerId:d,defaultTriggerId:f=null}=t,p=e===\\\"drawer\\\",h=e===\\\"alert-dialog\\\",b=h?!0:i,S=h||s,g=h?\\\"alertdialog\\\":\\\"dialog\\\",m=$t(!0),x=m!=null,y={modal:b,disablePointerDismissal:S,nested:x,role:g},L=BA((T,w)=>new yh({open:n,openProp:o,activeTriggerId:f,triggerIdProp:d,...y},T,w),!0);L.useControlledProp(\\\"openProp\\\",o),L.useControlledProp(\\\"triggerIdProp\\\",d),L.useSyncedValues(y),L.useContextCallback(\\\"onOpenChange\\\",r),L.useContextCallback(\\\"onOpenChangeComplete\\\",l);let I=L.useState(\\\"open\\\"),R=L.useState(\\\"mounted\\\"),C=L.useState(\\\"payload\\\");FA(L,I),Wm(L);let{forceUnmount:k}=Jm(I,L);cP.useImperativeHandle(u,()=>({unmount:k,close:()=>L.setOpen(!1,de($.imperativeAction))}),[k,L]);let E=I||R;return(0,Af.jsxs)(sv.Provider,{value:L,children:[c&&(0,Af.jsx)(Zm,{handle:c,store:L}),E&&(0,Af.jsx)(rP,{store:L,parentContext:m?.context,isDrawer:p}),typeof a==\\\"function\\\"?a({payload:C}):a]})}var dP=df(function(t){return fP(\\\"dialog\\\",t)});var pP=v(A(),1);var mP=pP.forwardRef(function(t,a){let{render:o,className:n,style:r,children:l,...s}=t,i=hh(),u=$t(),c=u.useState(\\\"open\\\"),d=u.useState(\\\"nested\\\"),f=u.useState(\\\"transitionStatus\\\"),p=u.useState(\\\"nestedOpenDialogCount\\\"),h=u.useState(\\\"mounted\\\"),b=u.useStateSetter(\\\"viewportElement\\\"),S=p>0;return se(\\\"div\\\",t,{enabled:i||h,state:{open:c,nested:d,transitionStatus:f,nestedDialogOpen:S},ref:[a,b],stateAttributesMapping:xh,props:[{role:\\\"presentation\\\",hidden:!h,style:{pointerEvents:c?void 0:\\\"none\\\"},children:l},s]})});var gP=v(A(),1);var hP=gP.forwardRef(function(t,a){let{render:o,className:n,style:r,id:l,...s}=t,i=$t(),u=lt(l);return i.useSyncedValueWithCleanup(\\\"titleElementId\\\",u),se(\\\"h2\\\",t,{ref:a,props:[{id:u},s]})});var xP=v(A(),1);var bP=Xm(function(t,a){let{render:o,className:n,style:r,disabled:l=!1,nativeButton:s=!0,id:i,payload:u,handle:c,...d}=t,f=$t(!0),h=og(c)??f;if(!h)throw new Error(Ne(79));let b=lt(i),S=h.useState(\\\"floatingRootContext\\\"),g=h.useState(\\\"isOpenedByTrigger\\\",b),m=h.useState(\\\"triggerPopupId\\\",b),x=xP.useRef(null),{registerTrigger:y,isMountedByThisTrigger:L}=Qm(b,x,h,{payload:u}),{getButtonProps:I,buttonRef:R}=Ta({disabled:l,native:s}),C=ys(S),k=NC(()=>h.select(\\\"open\\\"),w=>{h.set(\\\"openMethod\\\",w)}),E={disabled:l,open:g},T=h.useState(\\\"triggerProps\\\",L);return se(\\\"button\\\",t,{state:E,ref:[R,a,y,x],props:[C.reference,T,k,{[Fm]:\\\"\\\",id:b,\\\"aria-haspopup\\\":\\\"dialog\\\",\\\"aria-expanded\\\":g,\\\"aria-controls\\\":m},d,I],stateAttributesMapping:lm})});var Of=class extends au{constructor(){super(sP(),\\\"Dialog\\\",!1)}open(t){this.openByTrigger(t)}openWithPayload(t){let a=this.attachedStore;a!==null&&(a.set(\\\"payload\\\",t),a.setOpen(!0,de($.imperativeAction)))}close(){this.closePopup()}get isOpen(){return this.attachedStore?.select(\\\"open\\\")??!1}};function yP(){return new Of}var fo=v(O(),1);function CP(){let e=ro(),[t,a]=(0,SP.useState)(!1);return e.features.length===0?null:(0,fo.jsxs)(An.Root,{open:t,onOpenChange:a,children:[(0,fo.jsxs)(An.Trigger,{className:\\\"flex cursor-pointer items-center gap-1 rounded-md border border-border px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground lg:hidden [&_svg]:size-3.5\\\",children:[(0,fo.jsx)(wc,{\\\"aria-hidden\\\":!0}),\\\" Contents\\\"]}),(0,fo.jsxs)(An.Portal,{children:[(0,fo.jsx)(An.Backdrop,{className:\\\"fixed inset-0 z-50 bg-black/50 transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0\\\"}),(0,fo.jsxs)(An.Popup,{className:\\\"fixed inset-y-0 left-0 z-50 flex w-72 max-w-[80vw] flex-col gap-3 overflow-y-auto border-r border-border bg-background p-4 font-sans text-xs shadow-lg outline-none transition-transform duration-200 data-[ending-style]:-translate-x-full data-[starting-style]:-translate-x-full\\\",children:[(0,fo.jsxs)(\\\"div\\\",{className:\\\"flex items-center justify-between\\\",children:[(0,fo.jsx)(An.Title,{className:\\\"text-xs font-semibold tracking-wide text-muted-foreground uppercase\\\",children:\\\"Contents\\\"}),(0,fo.jsx)(An.Close,{\\\"aria-label\\\":\\\"Close contents\\\",className:\\\"cursor-pointer rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-4\\\",children:(0,fo.jsx)(Zl,{\\\"aria-hidden\\\":!0})})]}),(0,fo.jsx)(lv,{onNavigate:()=>a(!1)})]})]})]})}function cv(e){return e===\\\"failed\\\"}function vP(e){let t=new Set;if(e.summary.failed===0)return t;for(let a of e.features){a.scenarios.some(n=>cv(n.status))||t.add(a.id);for(let n of a.scenarios)cv(n.status)||t.add(n.id)}return t}function LP(e){if(e.summary.failed===0)return e;let t=[],a=[];for(let o of e.features)(o.scenarios.some(n=>cv(n.status))?t:a).push(o);return t.length===0?e:{...e,features:[...t,...a]}}var Sh=v(A(),1);function RP(){let e=(0,Sh.useRef)(null);(0,Sh.useEffect)(()=>{function t(){let{anchor:a}=Is(window.location.hash);!a||a===e.current||(e.current=a,requestAnimationFrame(()=>{Cl(a,{updateHash:!1})}))}return t(),window.addEventListener(\\\"hashchange\\\",t),()=>window.removeEventListener(\\\"hashchange\\\",t)},[])}var Ch=v(A(),1);function NV(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return!!(t===\\\"INPUT\\\"||t===\\\"TEXTAREA\\\"||t===\\\"SELECT\\\"||e.isContentEditable)}function IP(e){let t=(0,Ch.useRef)(e);t.current=e,(0,Ch.useEffect)(()=>{function a(o){let n=t.current;if(o.key===\\\"Escape\\\"){n.onEscape?.();return}if(!NV(o.target)&&!(o.metaKey||o.ctrlKey||o.altKey))switch(o.key){case\\\"/\\\":n.onFocusSearch?.(),o.preventDefault();return;case\\\"?\\\":n.onToggleHelp?.(),o.preventDefault();return;case\\\"f\\\":n.onNextFailure?.(),o.preventDefault();return;case\\\"F\\\":n.onPrevFailure?.(),o.preventDefault();return;case\\\"e\\\":n.onExpandAll?.(),o.preventDefault();return;case\\\"c\\\":n.onCollapseAll?.(),o.preventDefault();return;default:return}}return window.addEventListener(\\\"keydown\\\",a),()=>window.removeEventListener(\\\"keydown\\\",a)},[])}var Ts=v(A(),1),wP=\\\"es-theme\\\";function BV(){return typeof matchMedia<\\\"u\\\"&&matchMedia(\\\"(prefers-color-scheme: dark)\\\").matches}function _V(e){return e===\\\"system\\\"?BV()?\\\"dark\\\":\\\"light\\\":e}function fv(e){typeof document<\\\"u\\\"&&document.documentElement.setAttribute(\\\"data-theme\\\",_V(e))}function FV(){if(typeof localStorage<\\\"u\\\"){let e=localStorage.getItem(wP);if(e===\\\"light\\\"||e===\\\"dark\\\"||e===\\\"system\\\")return e}return\\\"system\\\"}function TP(){let[e,t]=(0,Ts.useState)(\\\"system\\\");(0,Ts.useEffect)(()=>{let o=FV();t(o),fv(o)},[]),(0,Ts.useEffect)(()=>{if(typeof matchMedia>\\\"u\\\")return;let o=matchMedia(\\\"(prefers-color-scheme: dark)\\\"),n=()=>{e===\\\"system\\\"&&fv(\\\"system\\\")};return o.addEventListener(\\\"change\\\",n),()=>o.removeEventListener(\\\"change\\\",n)},[e]);let a=(0,Ts.useCallback)(o=>{t(o),fv(o);try{localStorage.setItem(wP,o)}catch{}},[]);return{pref:e,setPref:a}}var ur=v(A(),1);var HV=250;function EP(){let[e,t]=(0,ur.useState)(sh),a=(0,ur.useRef)(!1);(0,ur.useEffect)(()=>{let n=()=>t(CD(Is(window.location.hash).params));return n(),a.current=!0,window.addEventListener(\\\"hashchange\\\",n),()=>window.removeEventListener(\\\"hashchange\\\",n)},[]),(0,ur.useEffect)(()=>{if(!a.current)return;let n=setTimeout(()=>ih(Is(window.location.hash).anchor,vD(e)),HV);return()=>clearTimeout(n)},[e]);let o=(0,ur.useCallback)(n=>t(r=>({...r,...n})),[]);return[e,o]}var Rh=[\\\"passed\\\",\\\"failed\\\",\\\"skipped\\\",\\\"pending\\\"],kP=[\\\"all\\\",...Rh],Es=class extends Error{};function dv(e){return typeof e==\\\"object\\\"&&e!==null?e:{}}function mv(e,t){let a=e[t];if(a!=null){if(typeof a!=\\\"string\\\")throw new Es(`\\\"${t}\\\" must be a string, received ${typeof a}.`);return a}}function Lh(e,t){let a=e[t];if(a!=null){if(typeof a==\\\"string\\\")return[a];if(!Array.isArray(a)||a.some(o=>typeof o!=\\\"string\\\"))throw new Es(`\\\"${t}\\\" must be an array of strings.`);return a}}function zV(e,t,a){let o=mv(e,t);if(o!==void 0){if(!a.includes(o))throw new Es(`\\\"${t}\\\" must be one of: ${a.join(\\\", \\\")}. Received \\\"${o}\\\".`);return o}}function UV(e){let t=Lh(e,\\\"statuses\\\");if(t===void 0)return;let a=t.filter(o=>!Rh.includes(o));if(a.length>0)throw new Es(`\\\"statuses\\\" must contain only: ${Rh.join(\\\", \\\")}. Received \\\"${a.join('\\\", \\\"')}\\\".`);return t}function pv(e){try{return e()}catch(t){if(t instanceof Es)return`Invalid input \\\\u2014 ${t.message}`;throw t}}var qV={type:\\\"object\\\",properties:{statuses:{type:\\\"array\\\",items:{type:\\\"string\\\",enum:[...Rh]},description:\\\"Keep only scenarios with any of these statuses.\\\"},tags:{type:\\\"array\\\",items:{type:\\\"string\\\"},description:\\\"Keep only scenarios carrying any of these tags.\\\"},sourceFiles:{type:\\\"array\\\",items:{type:\\\"string\\\"},description:\\\"Keep only scenarios whose source file path contains any of these.\\\"}}},vh={readOnlyHint:!0,untrustedContentHint:!0};function MP(e){let{report:t,setView:a,onAgentFilter:o}=e,n=e.now??Date.now,r=()=>({run:EO(t,n())}),l=s=>{let i=IO(t,s);return{...r(),total:i.length,scenarios:i}};return{list_scenarios:{title:\\\"List scenarios\\\",description:\\\"List the behaviour scenarios in this report, optionally filtered by status, tag, or source file. Returns each scenario with its steps, tags, timing and failure message.\\\",annotations:vh,input:qV,execute:s=>pv(()=>{let i=dv(s),u={},c=UV(i),d=Lh(i,\\\"tags\\\"),f=Lh(i,\\\"sourceFiles\\\");return c&&(u.statuses=c),d&&(u.tags=d),f&&(u.sourceFiles=f),l(u)})},get_failing_scenarios:{title:\\\"Get failing scenarios\\\",description:\\\"List only the scenarios that failed in this run, each with the step that failed and its error message. Use this first when asked what is broken.\\\",annotations:vh,execute:()=>l({statuses:[\\\"failed\\\"]})},get_feature_summary:{title:\\\"Get feature summary\\\",description:'Summarise each feature in the report with its scenario counts by status. Use this for \\\"how are we doing\\\" questions rather than listing every scenario.',annotations:vh,execute:()=>({...r(),summary:t.summary,features:TO(t)})},get_scenario:{title:\\\"Get scenario\\\",description:\\\"Get one scenario by its id or its exact title, with every step and any failure detail. Attachment and document bodies are omitted \\\\u2014 `docKinds` names what the page shows.\\\",annotations:vh,input:{type:\\\"object\\\",properties:{idOrTitle:{type:\\\"string\\\",description:\\\"The scenario id, or its exact title as shown in the report.\\\"}},required:[\\\"idOrTitle\\\"]},execute:s=>pv(()=>{let i=mv(dv(s),\\\"idOrTitle\\\")??\\\"\\\",u=wO(t,i);return u?{...r(),feature:{id:u.feature.id,title:u.feature.title,sourceFile:u.feature.sourceFile},scenario:GC(u.feature,u.scenario)}:{...r(),error:`No scenario found with id or title \\\"${i}\\\". Call list_scenarios to see what this report contains.`}})},filter_scenarios:{title:\\\"Filter the report\\\",description:`Change what the reader is looking at: set the report's search text, status filter and tag filter. Omitted fields are left as they are; pass an empty string, \\\"all\\\", or an empty array to clear one.`,input:{type:\\\"object\\\",properties:{search:{type:\\\"string\\\",description:\\\"Free text matched against scenario titles, tags and step text. Empty string clears it.\\\"},status:{type:\\\"string\\\",enum:[...kP],description:'Show only scenarios with this status. \\\"all\\\" clears the filter.'},tags:{type:\\\"array\\\",items:{type:\\\"string\\\"},description:\\\"Show only scenarios carrying any of these tags. Empty array clears the filter.\\\"}}},execute:s=>pv(()=>{let i=dv(s),u=mv(i,\\\"search\\\"),c=zV(i,\\\"status\\\",kP),d=Lh(i,\\\"tags\\\"),f={search:u??e.view.query,status:c??e.view.status,tags:d??e.view.tags},p={};u!==void 0&&(p.query=u),c!==void 0&&(p.status=c),d!==void 0&&(p.tags=d),a(p);let h=uh(t,{query:f.search,status:f.status,tags:f.tags}).summary.total,b={...f,matched:h,total:t.summary.total};return o?.(b),{...r(),applied:b}})}}}var Se=v(O(),1);function AP(e){let{report:t,className:a,title:o,dataTheme:n}=e,r=LD(t);return r.ok?(0,Se.jsx)(XV,{...e,report:r.data}):(0,Se.jsx)(OO,{error:r.error,className:a,title:o,dataTheme:n})}var VV=[{value:\\\"light\\\",label:\\\"Light\\\",Icon:Ac},{value:\\\"system\\\",label:\\\"System\\\",Icon:Tc},{value:\\\"dark\\\",label:\\\"Dark\\\",Icon:Ec}];function GV({pref:e,onPref:t}){return(0,Se.jsx)(cD,{size:\\\"sm\\\",value:[e],onValueChange:a=>{let o=a[0];o&&t(o)},\\\"aria-label\\\":\\\"Color theme\\\",children:VV.map(({value:a,label:o,Icon:n})=>(0,Se.jsx)(fD,{value:a,\\\"aria-label\\\":o,title:o,className:\\\"px-2\\\",children:(0,Se.jsx)(n,{})},a))})}function XV({report:e,customRenderers:t,renderers:a,className:o,title:n,dataTheme:r,hideHeader:l=!1,hideToc:s=!1,staleAfterDays:i=7,scenarioHistory:u,share:c=!1,architecture:d=!1,shareCommand:f}){let[p,h]=EP(),{query:b,status:S,tags:g,detail:m}=p,x=(0,ze.useCallback)(X=>h({query:X}),[h]),y=(0,ze.useCallback)(X=>h({status:X}),[h]),L=(0,ze.useCallback)(X=>h({detail:X}),[h]),[I,R]=(0,ze.useState)(!1),{pref:C,setPref:k}=TP(),E=(0,ze.useRef)(null),T=(0,ze.useId)(),w=(0,ze.useId)(),P=(0,ze.useDeferredValue)(b),D=(0,ze.useMemo)(()=>wD(e),[e]),M=(0,ze.useMemo)(()=>LP(uh(e,{query:P,status:S,tags:g})),[e,P,S,g]),_=b!==P,U=(0,ze.useMemo)(()=>{let X=e.summary,Re=[{key:\\\"all\\\",label:\\\"All\\\",count:X.total}];return X.passed&&Re.push({key:\\\"passed\\\",label:\\\"Passed\\\",count:X.passed}),X.failed&&Re.push({key:\\\"failed\\\",label:\\\"Failed\\\",count:X.failed}),X.skipped&&Re.push({key:\\\"skipped\\\",label:\\\"Skipped\\\",count:X.skipped}),X.pending&&Re.push({key:\\\"pending\\\",label:\\\"Pending\\\",count:X.pending}),Re},[e]),B=(0,ze.useMemo)(()=>RD(e),[e]),z=(0,ze.useCallback)(X=>h({tags:g.includes(X)?g.filter(Re=>Re!==X):[...g,X]}),[g,h]),[N,j]=(0,ze.useState)(null),ae=(0,ze.useRef)(null),oe=(0,ze.useCallback)(X=>{j(X),ae.current&&clearTimeout(ae.current),ae.current=setTimeout(()=>j(null),1800)},[]),q=(0,ze.useCallback)((X,Re)=>{typeof navigator<\\\"u\\\"&&navigator.clipboard&&navigator.clipboard.writeText(X).then(()=>oe(Re),()=>oe(\\\"Copy failed\\\"))},[oe]),Y=(0,ze.useMemo)(()=>({copyLink:X=>q(Rk(X),\\\"Link copied\\\"),copyMarkdown:X=>q(Ck(X),\\\"Markdown copied\\\"),copyPrompt:X=>q(vk(X),\\\"Prompt copied\\\")}),[q]),G=(0,ze.useCallback)(()=>q(Lk(ID(M)),\\\"Failures copied\\\"),[q,M]),xe=(0,ze.useRef)(0),Q=(0,ze.useMemo)(()=>e.features.flatMap(X=>[X.id,...X.scenarios.map(Re=>Re.id)]),[e]),W=gk((0,ze.useCallback)(()=>vP(e),[e])),ge=P.trim()!==\\\"\\\"||S!==\\\"all\\\"||g.length>0,ye=(0,ze.useMemo)(()=>ge?{...W.api,isCollapsed:()=>!1}:W.api,[W.api,ge]),ee=(0,ze.useCallback)(()=>W.collapseAll(Q),[W,Q]),[be,me]=(0,ze.useState)(()=>e.summary.failed===0),Le=(0,ze.useCallback)(X=>{X?W.expandAll():ee(),me(X)},[W,ee]),[Ee,le]=(0,ze.useState)(null);fT(MP({report:e,view:p,setView:h,onAgentFilter:le}));let Te=Ee!==null&&Ee.search===b&&Ee.status===S&&Ee.tags.length===g.length&&Ee.tags.every(X=>g.includes(X)),ue=(0,ze.useCallback)(()=>h({query:\\\"\\\",status:\\\"all\\\",tags:[]}),[h]),ce=(0,ze.useCallback)(()=>{E.current?.focus()},[]),pe=(0,ze.useCallback)(X=>{if(D.length===0)return;xe.current=(xe.current+X+D.length)%D.length;let Re=D[xe.current];Re&&Cl(Re.scenarioId)},[D]),Ve=(0,ze.useCallback)(()=>{R(X=>!X)},[]),wt=(0,ze.useCallback)(()=>{I?R(!1):b!==\\\"\\\"&&x(\\\"\\\")},[I,b,x]);IP({onFocusSearch:ce,onNextFailure:()=>pe(1),onPrevFailure:()=>pe(-1),onToggleHelp:Ve,onEscape:wt,onExpandAll:()=>Le(!0),onCollapseAll:()=>Le(!1)}),RP();let te=M.features.length>0,fe=e.summary.total,K=M.summary.total,H=!s&&fe>3;return(0,Se.jsx)(pk,{value:ye,children:(0,Se.jsx)(yk,{value:Y,children:(0,Se.jsx)(JE,{value:u??null,children:(0,Se.jsx)(ik,{value:{staleAfterDays:i,report:e},children:(0,Se.jsx)(yD,{report:M,customRenderers:t,renderers:a,children:(0,Se.jsxs)(\\\"main\\\",{className:J(\\\"es-report\\\",\\\"es-report-interactive\\\",o),\\\"aria-label\\\":n??\\\"Test report\\\",\\\"aria-busy\\\":_,\\\"data-theme\\\":r,\\\"data-detail-level\\\":m,children:[(0,Se.jsxs)(\\\"header\\\",{className:\\\"es-report-header\\\",children:[(0,Se.jsxs)(\\\"div\\\",{\\\"data-es-navbar\\\":!0,className:J(\\\"flex flex-wrap items-center gap-4\\\",l?\\\"justify-end\\\":\\\"justify-between\\\"),children:[l?null:(0,Se.jsx)(\\\"h1\\\",{className:\\\"min-w-0\\\",children:n??\\\"Story Report\\\"}),(0,Se.jsxs)(\\\"div\\\",{className:\\\"flex items-center gap-2\\\",children:[(0,Se.jsx)(_D,{ref:E,value:b,onChange:x,matchedCount:K,totalCount:fe}),c?(0,Se.jsx)(FD,{command:f,onCopy:q}):null,(0,Se.jsx)(GV,{pref:C,onPref:k})]})]}),l?null:(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(MO,{}),(0,Se.jsx)(kO,{})]}),d?(0,Se.jsx)(zO,{}):null,(0,Se.jsx)(OD,{lastRunMs:nk(e),ciUrl:e.ci?.url,staleAfterDays:i}),(0,Se.jsx)(PD,{history:u,report:e}),(0,Se.jsx)(VD,{report:e}),(0,Se.jsx)(AD,{statuses:U,status:S,onStatus:y,tags:B,activeTags:g,onToggleTag:z}),(0,Se.jsxs)(\\\"div\\\",{className:\\\"flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-border/60 pt-3\\\",children:[H?(0,Se.jsx)(CP,{}):null,(0,Se.jsxs)(\\\"div\\\",{className:\\\"flex items-center gap-2\\\",children:[(0,Se.jsx)(ZC,{id:T,checked:be,onCheckedChange:Le}),(0,Se.jsx)(\\\"label\\\",{htmlFor:T,className:\\\"cursor-pointer text-sm text-muted-foreground select-none\\\",children:\\\"Expand all\\\"})]}),(0,Se.jsxs)(\\\"div\\\",{className:\\\"flex items-center gap-2\\\",children:[(0,Se.jsx)(ZC,{id:w,checked:m===\\\"full\\\",onCheckedChange:X=>L(X?\\\"full\\\":\\\"minimal\\\")}),(0,Se.jsx)(\\\"label\\\",{htmlFor:w,className:\\\"cursor-pointer text-sm text-muted-foreground select-none\\\",children:\\\"Show documentation\\\"})]})]})]}),Te?(0,Se.jsx)(TD,{applied:Ee,onReset:ue,onDismiss:()=>le(null)}):null,(0,Se.jsx)(kD,{failures:D,onCopyAll:G}),te?H?(0,Se.jsxs)(\\\"div\\\",{className:\\\"flex gap-6\\\",children:[(0,Se.jsx)(XD,{}),(0,Se.jsx)(\\\"div\\\",{className:\\\"flex min-w-0 flex-1 flex-col gap-4\\\",children:(0,Se.jsx)(VC,{})})]}):(0,Se.jsx)(\\\"div\\\",{className:\\\"flex flex-col gap-4\\\",children:(0,Se.jsx)(VC,{})}):(0,Se.jsx)(UT,{message:b?\\\"No scenarios match the search.\\\":void 0}),(0,Se.jsx)(\\\"button\\\",{type:\\\"button\\\",className:\\\"es-shortcuts-trigger fixed right-4 bottom-4 z-40 flex size-9 items-center justify-center rounded-full border border-border bg-card text-muted-foreground shadow-sm transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50\\\",\\\"aria-label\\\":\\\"Keyboard shortcuts\\\",\\\"aria-keyshortcuts\\\":\\\"?\\\",onClick:Ve,children:\\\"?\\\"}),(0,Se.jsx)(GD,{open:I,onClose:()=>R(!1)}),N?(0,Se.jsx)(\\\"div\\\",{role:\\\"status\\\",\\\"aria-live\\\":\\\"polite\\\",className:\\\"fixed bottom-4 left-1/2 -translate-x-1/2 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background shadow-lg\\\",children:N}):null]})})})})})})}var Ms=v(A(),1);var ks=v(A(),1);var On=v(O(),1);function jV(e){let t=e?.closest(\\\"[data-theme]\\\");return t?.dataset.theme===\\\"dark\\\"?!0:t?.dataset.theme===\\\"light\\\"?!1:typeof window<\\\"u\\\"&&!!window.matchMedia?.(\\\"(prefers-color-scheme: dark)\\\").matches}function OP({entry:e,load:t}){let a=(0,ks.useRef)(null),[o,n]=(0,ks.useState)(null),[r,l]=(0,ks.useState)(null);return(0,ks.useEffect)(()=>{let s=!1,i=async()=>{let d;try{d=await t()}catch{s||(n(null),l(null));return}try{d.initialize({startOnLoad:!1,securityLevel:\\\"strict\\\",theme:jV(a.current)?\\\"dark\\\":\\\"neutral\\\"}),await d.parse(e.code);let f=`es-mermaid-${Math.random().toString(36).slice(2)}`,{svg:p}=await d.render(f,e.code);s||(n(p),l(null))}catch(f){s||(n(null),l(f instanceof Error?f.message:String(f)))}};i();let u=a.current?.closest(\\\"[data-theme]\\\"),c=u?new MutationObserver(()=>{i()}):void 0;return c?.observe(u,{attributes:!0,attributeFilter:[\\\"data-theme\\\"]}),()=>{s=!0,c?.disconnect()}},[e.code,t]),o?(0,On.jsxs)(\\\"figure\\\",{ref:a,className:\\\"my-3\\\",children:[e.title?(0,On.jsx)(\\\"figcaption\\\",{className:\\\"mb-1.5 text-xs font-medium text-muted-foreground\\\",children:e.title}):null,(0,On.jsx)(\\\"div\\\",{role:\\\"img\\\",\\\"aria-label\\\":e.title??\\\"Mermaid diagram\\\",className:\\\"overflow-x-auto rounded-md border border-border bg-card p-3 [&_svg]:mx-auto [&_svg]:h-auto [&_svg]:max-w-full\\\",dangerouslySetInnerHTML:{__html:o}})]}):(0,On.jsxs)(On.Fragment,{children:[r?(0,On.jsxs)(\\\"p\\\",{role:\\\"alert\\\",\\\"data-es-mermaid-error\\\":!0,className:\\\"mt-3 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\\\",children:[\\\"Diagram failed to render: \\\",r]}):null,(0,On.jsx)(Jy,{entry:e,ref:a})]})}var Ih=v(O(),1),YV=\\\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/highlight.min.js\\\",KV=\\\"https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs\\\";function DP(e){let t;return()=>(t??=import(e).then(a=>a.default??a),t)}var ZV=DP(KV),$V=DP(YV);function QV({entry:e}){let[t,a]=(0,Ms.useState)(null);return(0,Ms.useEffect)(()=>{let o=!1;return(async()=>{try{let n=await $V(),r=e.lang&&n.getLanguage(e.lang)?e.lang:void 0,l=r?n.highlight(e.content,{language:r,ignoreIllegals:!0}):n.highlightAuto(e.content);o||a(l.value)}catch{o||a(null)}})(),()=>{o=!0}},[e.content,e.lang]),(0,Ih.jsx)(Bc,{label:e.label,children:t!==null?(0,Ih.jsx)(\\\"code\\\",{className:J(\\\"hljs font-mono text-xs\\\",e.lang&&`language-${e.lang}`),dangerouslySetInnerHTML:{__html:t}}):(0,Ih.jsx)(\\\"code\\\",{className:J(\\\"font-mono text-xs\\\",e.lang&&`language-${e.lang}`),children:e.content})})}function PP(e){let t={};return e.mermaid&&(t.mermaid=a=>(0,Ms.createElement)(OP,{entry:a,load:ZV})),e.syntaxHighlighting&&(t.code=a=>(0,Ms.createElement)(QV,{entry:a})),t}function NP(e){if(e===null||typeof e!=\\\"object\\\")return ov({message:\\\"Expected a StoryReport object.\\\",code:\\\"INVALID_INPUT\\\"});let t=e.schemaVersion;if(typeof t==\\\"string\\\"){let a=t.split(\\\".\\\")[0];if(a!==String(1))return ov({message:`Schema major ${a} is not supported by this version of executable-stories-react (expected ${1}.x). Upgrade the package.`,code:\\\"SCHEMA_VERSION_MISMATCH\\\"})}return av(e)}var JV=\\\"es-report-root\\\",e4=\\\"es-report-data\\\",t4=\\\"es-report-history\\\";function a4(){let e=document.getElementById(t4);if(e?.textContent)try{let t=JSON.parse(e.textContent);return typeof t!=\\\"object\\\"||t===null||Array.isArray(t)?void 0:t}catch{return}}function gv(){let e=document.getElementById(JV),t=document.getElementById(e4);if(!e||!t?.textContent)return;let a;try{a=JSON.parse(t.textContent)}catch{return}let o=NP(a),n=e.getAttribute(\\\"data-title\\\")??void 0,r=PP({syntaxHighlighting:e.getAttribute(\\\"data-es-syntax\\\")!==\\\"false\\\",mermaid:e.getAttribute(\\\"data-es-mermaid\\\")!==\\\"false\\\"}),l=e.getAttribute(\\\"data-es-share\\\")===\\\"true\\\",s=e.getAttribute(\\\"data-es-architecture\\\")===\\\"true\\\",i=e.getAttribute(\\\"data-es-share-cmd\\\")??void 0,u=e.getAttribute(\\\"data-es-stale-days\\\"),c=u===null?Number.NaN:Number(u),d=Number.isFinite(c)&&c>=0?c:7;(0,_P.createRoot)(e).render((0,BP.createElement)(AP,{report:o,title:n,renderers:r,staleAfterDays:d,scenarioHistory:a4(),share:l,shareCommand:i,architecture:s}))}typeof document<\\\"u\\\"&&(document.readyState===\\\"loading\\\"?document.addEventListener(\\\"DOMContentLoaded\\\",gv):gv());return XP(o4);})();\\n/*! Bundled license information:\\n\\nreact/cjs/react.production.js:\\n  (**\\n   * @license React\\n   * react.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nscheduler/cjs/scheduler.production.js:\\n  (**\\n   * @license React\\n   * scheduler.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nreact-dom/cjs/react-dom.production.js:\\n  (**\\n   * @license React\\n   * react-dom.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nreact-dom/cjs/react-dom-client.production.js:\\n  (**\\n   * @license React\\n   * react-dom-client.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nreact/cjs/react-jsx-runtime.production.js:\\n  (**\\n   * @license React\\n   * react-jsx-runtime.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nuse-sync-external-store/cjs/use-sync-external-store-shim.production.js:\\nuse-sync-external-store/cjs/use-sync-external-store-shim.production.js:\\n  (**\\n   * @license React\\n   * use-sync-external-store-shim.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nuse-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js:\\n  (**\\n   * @license React\\n   * use-sync-external-store-shim/with-selector.production.js\\n   *\\n   * Copyright (c) Meta Platforms, Inc. and affiliates.\\n   *\\n   * This source code is licensed under the MIT license found in the\\n   * LICENSE file in the root directory of this source tree.\\n   *)\\n\\nlucide-react/dist/esm/shared/src/utils/toKebabCase.mjs:\\nlucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs:\\nlucide-react/dist/esm/shared/src/utils/toCamelCase.mjs:\\nlucide-react/dist/esm/shared/src/utils/toPascalCase.mjs:\\nlucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:\\nlucide-react/dist/esm/shared/src/build/defaultAttributes.mjs:\\nlucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs:\\nlucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs:\\nlucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs:\\nlucide-react/dist/esm/context.mjs:\\nlucide-react/dist/esm/Icon.mjs:\\nlucide-react/dist/esm/createLucideIcon.mjs:\\nlucide-react/dist/esm/icons/bot.mjs:\\nlucide-react/dist/esm/icons/ellipsis.mjs:\\nlucide-react/dist/esm/icons/file-text.mjs:\\nlucide-react/dist/esm/icons/link.mjs:\\nlucide-react/dist/esm/icons/list.mjs:\\nlucide-react/dist/esm/icons/monitor.mjs:\\nlucide-react/dist/esm/icons/moon.mjs:\\nlucide-react/dist/esm/icons/search.mjs:\\nlucide-react/dist/esm/icons/share-2.mjs:\\nlucide-react/dist/esm/icons/sparkles.mjs:\\nlucide-react/dist/esm/icons/sun.mjs:\\nlucide-react/dist/esm/icons/x.mjs:\\nlucide-react/dist/esm/lucide-react.mjs:\\n  (**\\n   * @license lucide-react v1.46.0 - ISC\\n   *\\n   * This source code is licensed under the ISC license.\\n   * See the LICENSE file in the root directory of this source tree.\\n   *)\\n*/\\n\";\n","/**\n * Span Graph Formatter - Layer 3.\n *\n * The architecture a run exercised, drawn from its OTel spans: a Mermaid\n * diagram, then the scenarios behind every component. The second half is what\n * separates this from an architecture diagram someone drew, so it is not\n * optional decoration.\n *\n * Empty output for a run with no spans. The generator writes no file in that\n * case, because a page saying \"no diagram\" in every report of every\n * uninstrumented suite is worse than the format not firing.\n */\n\nimport {\n  deriveSpanGraph,\n  spanGraphNodeMark,\n  spanGraphToMermaid,\n} from \"executable-stories-core/span-graph\";\nimport type { SpanGraphDelta, SpanGraphScenario } from \"executable-stories-core/span-graph\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nconst MARKERS = {\n  failing: \" 🔴\",\n  added: \" 🟢\",\n  changed: \" 🟡\",\n  none: \"\",\n} as const;\n\nexport interface SpanGraphFormatterOptions {\n  /** Heading for the page. Default: \"Architecture, as it ran\" */\n  title?: string;\n  /**\n   * Scenario ids from a behavioural diff, which colour the components the\n   * change is really about. Build it with `spanGraphDeltaFromRuns`, which\n   * pairs a retitled scenario by behaviour fingerprint: a scenario id hashes\n   * its title, so a rename would otherwise read as one removal plus one\n   * addition and turn a long-standing component green.\n   */\n  delta?: SpanGraphDelta;\n}\n\nexport class SpanGraphFormatter {\n  private title: string;\n  private delta?: SpanGraphDelta;\n\n  constructor(options: SpanGraphFormatterOptions = {}) {\n    this.title = options.title ?? \"Architecture, as it ran\";\n    this.delta = options.delta;\n  }\n\n  format(run: TestRunResult): string {\n    const scenarios: SpanGraphScenario[] = run.testCases.map((tc) => ({\n      id: tc.id,\n      title: tc.story.scenario,\n      ...(tc.story.otelSpans ? { otelSpans: tc.story.otelSpans } : {}),\n    }));\n    const titleById = new Map(run.testCases.map((tc) => [tc.id, tc.story.scenario]));\n\n    const graph = deriveSpanGraph(scenarios, this.delta);\n    const mermaid = spanGraphToMermaid(graph);\n    if (mermaid === \"\") return \"\";\n\n    const lines: string[] = [`# ${this.title}`, \"\"];\n    lines.push(\n      \"Every component below is here because a span named it while a scenario ran, and\",\n      \"every arrow is a call one scenario actually made. Nothing on this diagram is\",\n      \"inferred from the code. It covers instrumented, exercised paths only: a component\",\n      \"no scenario reaches does not appear, and that absence is itself worth reading.\",\n      \"\",\n    );\n    lines.push(\"```mermaid\", mermaid, \"```\", \"\");\n\n    lines.push(\"## What each component is covered by\", \"\");\n    lines.push(\"| Component | Lane | Scenarios | Covered by |\");\n    lines.push(\"| --- | --- | --- | --- |\");\n    for (const node of graph.nodes) {\n      // Same precedence as the diagram, from the same function, so the table\n      // and the picture cannot describe one component two different ways.\n      const marker = MARKERS[spanGraphNodeMark(node) ?? \"none\"];\n      const covered = node.scenarioIds\n        .map((id) => titleById.get(id) ?? id)\n        .join(\"<br>\");\n      lines.push(\n        `| \\`${node.id}\\`${marker} | ${node.kind} | ${node.scenarioIds.length} | ${covered} |`,\n      );\n    }\n    lines.push(\"\");\n\n    return lines.join(\"\\n\");\n  }\n}\n","/**\n * JUnit XML Formatter - Layer 3.\n *\n * Transforms canonical TestRunResult into JUnit XML format\n * for CI system integration.\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport type { DocEntry, StoryStep } from \"executable-stories-core/types/story\";\nimport type { TestRunResult, TestCaseResult } from \"executable-stories-core/types/test-result\";\n\n/** Options for JUnit XML formatting */\nexport interface JUnitOptions {\n  /** Test suite name. Default: \"Test Suite\" */\n  suiteName?: string;\n  /** Include system-out/system-err. Default: true */\n  includeOutput?: boolean;\n  /** Pretty-print XML output. Default: true */\n  pretty?: boolean;\n}\n\n/**\n * JUnit XML Formatter.\n *\n * Transforms TestRunResult into JUnit XML format for CI integrations.\n * Compatible with Jenkins, GitHub Actions, and other CI systems.\n */\nexport class JUnitFormatter {\n  private options: Required<JUnitOptions>;\n\n  constructor(options: JUnitOptions = {}) {\n    this.options = {\n      suiteName: options.suiteName ?? \"Test Suite\",\n      includeOutput: options.includeOutput ?? true,\n      pretty: options.pretty ?? true,\n    };\n  }\n\n  /**\n   * Format a test run into JUnit XML.\n   *\n   * @param run - Canonical test run result\n   * @returns JUnit XML string\n   */\n  format(run: TestRunResult): string {\n    const indent = this.options.pretty ? \"  \" : \"\";\n    const newline = this.options.pretty ? \"\\n\" : \"\";\n\n    // Calculate totals\n    const tests = run.testCases.length;\n    const failures = run.testCases.filter((tc) => tc.status === \"failed\").length;\n    const skipped = run.testCases.filter(\n      (tc) => tc.status === \"skipped\" || tc.status === \"pending\"\n    ).length;\n    const errors = 0; // We don't distinguish errors from failures\n    const time = (run.durationMs / 1000).toFixed(3);\n\n    // Build XML\n    const lines: string[] = [];\n    lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n    lines.push(\n      `<testsuites name=\"${escapeXml(this.options.suiteName)}\" tests=\"${tests}\" failures=\"${failures}\" errors=\"${errors}\" skipped=\"${skipped}\" time=\"${time}\">`\n    );\n\n    // Group test cases by source file (one testsuite per file)\n    const byFile = groupBy(run.testCases, (tc) => tc.sourceFile);\n\n    for (const [file, testCases] of byFile) {\n      lines.push(...this.buildTestSuite(file, testCases, indent));\n    }\n\n    lines.push(\"</testsuites>\");\n\n    return lines.join(newline);\n  }\n\n  /**\n   * Build a testsuite element for a file.\n   */\n  private buildTestSuite(\n    file: string,\n    testCases: TestCaseResult[],\n    indent: string\n  ): string[] {\n    const lines: string[] = [];\n\n    const tests = testCases.length;\n    const failures = testCases.filter((tc) => tc.status === \"failed\").length;\n    const skipped = testCases.filter(\n      (tc) => tc.status === \"skipped\" || tc.status === \"pending\"\n    ).length;\n    const time = testCases\n      .reduce((sum, tc) => sum + tc.durationMs, 0) / 1000;\n\n    // Normalize path separators for consistent output across platforms\n    const normalizedFile = file.replace(/\\\\/g, \"/\");\n\n    lines.push(\n      `${indent}<testsuite name=\"${escapeXml(normalizedFile)}\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" skipped=\"${skipped}\" time=\"${time.toFixed(3)}\">`\n    );\n\n    for (const tc of testCases) {\n      lines.push(...this.buildTestCase(tc, indent + indent));\n    }\n\n    lines.push(`${indent}</testsuite>`);\n\n    return lines;\n  }\n\n  /**\n   * Build a testcase element.\n   */\n  private buildTestCase(tc: TestCaseResult, indent: string): string[] {\n    const lines: string[] = [];\n\n    // Build classname from titlePath or sourceFile\n    // Normalize path separators (Windows backslashes and Unix forward slashes)\n    const classname = tc.titlePath.length > 0\n      ? tc.titlePath.join(\".\")\n      : tc.sourceFile\n          .replace(/[\\\\/]+/g, \".\") // Replace path separators with dots\n          .replace(/\\.[^.]+$/, \"\"); // Remove file extension\n\n    const name = tc.story.scenario;\n    const time = (tc.durationMs / 1000).toFixed(3);\n\n    const hasFailure = tc.status === \"failed\";\n    const hasSkipped = tc.status === \"skipped\" || tc.status === \"pending\";\n    const hasOutput = this.options.includeOutput && tc.story.steps.length > 0;\n\n    // Use full form if there's any content to include\n    if (hasFailure || hasSkipped || hasOutput) {\n      lines.push(\n        `${indent}<testcase classname=\"${escapeXml(classname)}\" name=\"${escapeXml(name)}\" time=\"${time}\">`\n      );\n\n      if (hasFailure) {\n        const message = tc.errorMessage\n          ? escapeXml(tc.errorMessage.split(\"\\n\")[0])\n          : \"Test failed\";\n        lines.push(`${indent}${indent}<failure message=\"${message}\">`);\n        if (tc.errorMessage) {\n          lines.push(escapeXml(tc.errorMessage));\n        }\n        if (tc.errorStack) {\n          lines.push(\"\");\n          lines.push(escapeXml(tc.errorStack));\n        }\n        lines.push(`${indent}${indent}</failure>`);\n      } else if (hasSkipped) {\n        const message = tc.status === \"pending\" ? \"Test pending\" : \"Test skipped\";\n        lines.push(`${indent}${indent}<skipped message=\"${message}\"/>`);\n      }\n\n      // Include system-out with step info and docs if requested\n      if (hasOutput) {\n        const output = this.buildSystemOut(tc);\n        lines.push(`${indent}${indent}<system-out>${escapeXml(output)}</system-out>`);\n      }\n\n      lines.push(`${indent}</testcase>`);\n    } else {\n      // Self-closing tag for tests without content\n      lines.push(\n        `${indent}<testcase classname=\"${escapeXml(classname)}\" name=\"${escapeXml(name)}\" time=\"${time}\"/>`\n      );\n    }\n\n    return lines;\n  }\n\n  /**\n   * Build system-out content with steps and docs.\n   */\n  private buildSystemOut(tc: TestCaseResult): string {\n    const outputLines: string[] = [];\n\n    // Story-level docs\n    if (tc.story.docs && tc.story.docs.length > 0) {\n      for (const doc of tc.story.docs) {\n        outputLines.push(this.renderDocEntry(doc));\n      }\n      outputLines.push(\"\");\n    }\n\n    // Steps with their docs\n    for (const step of tc.story.steps) {\n      outputLines.push(this.renderStep(step));\n    }\n\n    return outputLines.join(\"\\n\").trim();\n  }\n\n  /**\n   * Render a step with its docs.\n   */\n  private renderStep(step: StoryStep): string {\n    const lines: string[] = [];\n    lines.push(`${step.keyword} ${step.text}`);\n\n    // Step docs\n    if (step.docs && step.docs.length > 0) {\n      for (const doc of step.docs) {\n        const rendered = this.renderDocEntry(doc, \"  \");\n        if (rendered) {\n          lines.push(rendered);\n        }\n      }\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  /**\n   * Render a doc entry as plain text.\n   */\n  private renderDocEntry(entry: DocEntry, indent = \"\"): string {\n    switch (entry.kind) {\n      case \"note\":\n        return `${indent}> ${entry.text}`;\n\n      case \"tag\":\n        return `${indent}Tags: ${entry.names.join(\", \")}`;\n\n      case \"kv\": {\n        const val = typeof entry.value === \"string\"\n          ? entry.value\n          : JSON.stringify(entry.value);\n        return `${indent}${entry.label}: ${val}`;\n      }\n\n      case \"code\": {\n        const langLabel = entry.lang ? ` (${entry.lang})` : \"\";\n        const header = entry.label ? `${indent}${entry.label}${langLabel}:\\n` : \"\";\n        const codeLines = entry.content.split(\"\\n\").map((l) => `${indent}  ${l}`).join(\"\\n\");\n        return `${header}${codeLines}`;\n      }\n\n      case \"table\": {\n        const lines: string[] = [];\n        if (entry.label) {\n          lines.push(`${indent}${entry.label}:`);\n        }\n        lines.push(`${indent}| ${entry.columns.join(\" | \")} |`);\n        lines.push(`${indent}| ${entry.columns.map(() => \"---\").join(\" | \")} |`);\n        for (const row of entry.rows) {\n          lines.push(`${indent}| ${row.join(\" | \")} |`);\n        }\n        return lines.join(\"\\n\");\n      }\n\n      case \"link\":\n        return `${indent}${entry.label}: ${entry.url}`;\n\n      case \"section\": {\n        const lines: string[] = [];\n        lines.push(`${indent}${entry.title}:`);\n        for (const line of entry.markdown.split(\"\\n\")) {\n          lines.push(`${indent}  ${line}`);\n        }\n        return lines.join(\"\\n\");\n      }\n\n      case \"mermaid\": {\n        const lines: string[] = [];\n        if (entry.title) {\n          lines.push(`${indent}${entry.title}:`);\n        }\n        for (const line of entry.code.split(\"\\n\")) {\n          lines.push(`${indent}  ${line}`);\n        }\n        return lines.join(\"\\n\");\n      }\n\n      case \"screenshot\":\n        // Both halves: the alt is what a reader wants, the path is what they\n        // open. Dropping the path when an alt exists left the artifact\n        // unreachable from the one output CI actually parses.\n        return `${indent}Screenshot: ${entry.alt ? `${entry.alt} (${entry.path})` : entry.path}`;\n\n      case \"video\":\n        return `${indent}Video: ${entry.caption ? `${entry.caption} (${entry.path})` : entry.path}`;\n\n      case \"state\":\n        return `${indent}State${entry.label ? ` (${entry.label})` : \"\"}: ${JSON.stringify(entry.value) ?? \"null\"}`;\n\n      case \"html\":\n        return `${indent}HTML: ${entry.title ?? \"Embedded HTML\"} (${entry.url ?? entry.path ?? \"inline\"})`;\n\n      case \"custom\": {\n        const dataStr = JSON.stringify(entry.data, null, 2);\n        const lines: string[] = [];\n        lines.push(`${indent}[${entry.type}]:`);\n        for (const line of dataStr.split(\"\\n\")) {\n          lines.push(`${indent}  ${line}`);\n        }\n        return lines.join(\"\\n\");\n      }\n    }\n\n    return assertNever(entry, \"JUnit XML: unhandled doc kind\");\n  }\n}\n\n/**\n * Escape special XML characters.\n */\nfunction escapeXml(str: string): string {\n  return str\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\n/**\n * Group array items by a key function.\n */\nfunction groupBy<T, K>(items: T[], keyFn: (item: T) => K): Map<K, T[]> {\n  const map = new Map<K, T[]>();\n  for (const item of items) {\n    const key = keyFn(item);\n    const existing = map.get(key);\n    if (existing) {\n      existing.push(item);\n    } else {\n      map.set(key, [item]);\n    }\n  }\n  return map;\n}\n","/**\n * Markdown Formatter - Layer 3.\n *\n * Transforms canonical TestRunResult into Markdown documentation.\n * Compatible with existing markdown output from framework reporters.\n */\n\nimport { diffStateValues, summarizeStateChanges } from \"executable-stories-core\";\nimport { summarizeAccumulation } from \"executable-stories-core/utils/accumulation\";\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport { assertionState, assertiveSteps } from \"executable-stories-core/utils/assertive-steps\";\nimport type { StoryStep, DocEntry } from \"executable-stories-core/types/story\";\nimport type { FeatureDeclaration, TestRunResult, TestCaseResult, TestStatus } from \"executable-stories-core/types/test-result\";\nimport type { MarkdownRenderers } from \"../types/options\";\nimport { bySourcePosition, earliestSourceLine } from \"./source-order\";\nimport { failingComparison } from \"../scenario-failure\";\n\n/**\n * True for a local filesystem path (`/foo`, `\\foo`, `C:\\foo`) rather than a\n * URL. Screenshot/video paths are meant to be rewritten to a relative\n * `assets/...` path (or embedded as a `data:` URI) by capture-time inlining\n * or the report's asset bundler; a path that's still absolute by the time it\n * reaches this formatter means that never happened — most often because the\n * bundler doesn't run at all in this pipeline (e.g. Markdown posted straight\n * to a GitHub PR comment, with no asset-copy step in between). Embedding it\n * verbatim (`![alt](path)` / `<source src=\"path\">`) would be a\n * guaranteed-broken reference wherever the Markdown ends up rendered.\n */\nfunction isLocalFsPath(value: string): boolean {\n  return /^(?:[/\\\\]|[A-Za-z]:[/\\\\])/.test(value);\n}\n\n/** Options for Markdown formatting */\nexport interface MarkdownOptions {\n  /** Report title. Default: \"User Stories\" */\n  title?: string;\n  /** Include status icons on scenarios. Default: true */\n  includeStatusIcons?: boolean;\n  /** Include metadata table (date, version). Default: true */\n  includeMetadata?: boolean;\n  /** Include error details for failed scenarios. Default: true */\n  includeErrors?: boolean;\n  /** Scenario heading level. Default: 3 */\n  scenarioHeadingLevel?: 2 | 3 | 4;\n  /** Step rendering style. Default: \"bullets\" */\n  stepStyle?: \"bullets\" | \"gherkin\";\n  /** Group scenarios by. Default: \"file\" */\n  groupBy?: \"file\" | \"suite\" | \"none\";\n  /** Sort scenarios. Default: \"source\" */\n  sortScenarios?: \"alpha\" | \"source\" | \"none\";\n  /** Suite path separator. Default: \" - \" */\n  suiteSeparator?: string;\n  /** Include YAML front-matter for machine parsing. Default: false */\n  includeFrontMatter?: boolean;\n  /** Include summary table (counts, duration). Default: false */\n  includeSummaryTable?: boolean;\n  /** Base URL for source permalinks. E.g., \"https://github.com/user/repo/blob\" */\n  permalinkBaseUrl?: string;\n  /** URL template for ticket links. Use {ticket} as placeholder */\n  ticketUrlTemplate?: string;\n  /** URL template for trace links. Use {traceId} as placeholder. E.g. \"https://grafana.example.com/explore?traceId={traceId}\" */\n  traceUrlTemplate?: string;\n  /** Include source links when permalinkBaseUrl is set. Default: true */\n  includeSourceLinks?: boolean;\n  /** Custom renderers for doc entries */\n  customRenderers?: MarkdownRenderers;\n  /**\n   * Write a local screenshot/video path as an ordinary markdown reference\n   * instead of the \"unavailable\" line. Only for markdown handed to\n   * `gh pr comment|create|edit --attach <path>` (GitHub CLI 2.99+), which\n   * uploads the file and rewrites the reference. Anywhere else the reference\n   * is dead, which is why this is off by default. Default: false\n   */\n  attachImages?: boolean;\n  /**\n   * Emit a stable in-page anchor before each scenario heading, so external tools\n   * can deep-link to a scenario by fragment. Given a test case, return the anchor\n   * id (without `#`), or undefined to skip. Off by default — only the living-docs\n   * site opts in, so plain markdown output is unchanged.\n   */\n  scenarioAnchor?: (tc: TestCaseResult) => string | undefined;\n  /**\n   * Render a short badge line directly under a scenario heading (e.g. a\n   * what's-changed marker like \"🆕 New\" / \"⚠️ Regressed\"). Return the markdown\n   * line, or undefined to skip. Off by default — only the living-docs site opts in.\n   */\n  scenarioBadge?: (tc: TestCaseResult) => string | undefined;\n  /**\n   * Render a link line under a scenario heading pointing at hand-written context\n   * (the scenario's note page). Return the markdown line, or undefined to skip.\n   * Off by default — only the living-docs site opts in.\n   */\n  scenarioNoteLink?: (tc: TestCaseResult) => string | undefined;\n}\n\n/** Resolved options with all defaults */\ntype ResolvedMarkdownOptions = {\n  title: string;\n  includeStatusIcons: boolean;\n  includeMetadata: boolean;\n  includeErrors: boolean;\n  scenarioHeadingLevel: 2 | 3 | 4;\n  stepStyle: \"bullets\" | \"gherkin\";\n  groupBy: \"file\" | \"suite\" | \"none\";\n  sortScenarios: \"alpha\" | \"source\" | \"none\";\n  suiteSeparator: string;\n  includeFrontMatter: boolean;\n  includeSummaryTable: boolean;\n  permalinkBaseUrl?: string;\n  ticketUrlTemplate?: string;\n  traceUrlTemplate?: string;\n  includeSourceLinks: boolean;\n  customRenderers?: MarkdownRenderers;\n  attachImages: boolean;\n  scenarioAnchor?: (tc: TestCaseResult) => string | undefined;\n  scenarioBadge?: (tc: TestCaseResult) => string | undefined;\n  scenarioNoteLink?: (tc: TestCaseResult) => string | undefined;\n};\n\n/**\n * Markdown Formatter.\n *\n * Transforms TestRunResult into Markdown documentation that matches\n * the output format of existing framework reporters.\n */\nexport class MarkdownFormatter {\n  private options: ResolvedMarkdownOptions;\n  /**\n   * Previous `state` snapshot per label lane (label ?? \"\") — reset per\n   * scenario, mirroring storyboard lane semantics, so repeat captures render\n   * a diff summary against the prior same-label snapshot.\n   */\n  private stateLanes = new Map<string, unknown>();\n\n  constructor(options: MarkdownOptions = {}) {\n    this.options = {\n      title: options.title ?? \"User Stories\",\n      includeStatusIcons: options.includeStatusIcons ?? true,\n      includeMetadata: options.includeMetadata ?? true,\n      includeErrors: options.includeErrors ?? true,\n      scenarioHeadingLevel: options.scenarioHeadingLevel ?? 3,\n      stepStyle: options.stepStyle ?? \"bullets\",\n      groupBy: options.groupBy ?? \"file\",\n      sortScenarios: options.sortScenarios ?? \"source\",\n      suiteSeparator: options.suiteSeparator ?? \" - \",\n      includeFrontMatter: options.includeFrontMatter ?? false,\n      includeSummaryTable: options.includeSummaryTable ?? false,\n      permalinkBaseUrl: options.permalinkBaseUrl,\n      ticketUrlTemplate: options.ticketUrlTemplate,\n      traceUrlTemplate: options.traceUrlTemplate,\n      includeSourceLinks: options.includeSourceLinks ?? true,\n      customRenderers: options.customRenderers,\n      attachImages: options.attachImages ?? false,\n      scenarioAnchor: options.scenarioAnchor,\n      scenarioBadge: options.scenarioBadge,\n      scenarioNoteLink: options.scenarioNoteLink,\n    };\n  }\n\n  /**\n   * Format a test run into Markdown.\n   *\n   * @param run - Canonical test run result\n   * @returns Markdown string\n   */\n  format(run: TestRunResult): string {\n    const lines: string[] = [];\n\n    // Front-matter\n    if (this.options.includeFrontMatter) {\n      this.renderFrontMatter(lines, run);\n    }\n\n    // Title\n    lines.push(`# ${this.options.title}`);\n    lines.push(\"\");\n\n    // Metadata\n    if (this.options.includeMetadata) {\n      this.renderMetadata(lines, run);\n      lines.push(\"\");\n    }\n\n    // Summary table\n    if (this.options.includeSummaryTable) {\n      this.renderSummaryTable(lines, run);\n      lines.push(\"\");\n    }\n\n    // Render scenarios based on grouping\n    switch (this.options.groupBy) {\n      case \"none\":\n        this.renderFlatList(lines, run.testCases);\n        break;\n      case \"suite\":\n        this.renderBySuite(lines, run.testCases);\n        break;\n      case \"file\":\n      default:\n        this.renderByFile(lines, run.testCases, run.features);\n        break;\n    }\n\n    // Custom footer\n    if (this.options.customRenderers?.renderFooter) {\n      const footer = this.options.customRenderers.renderFooter(run);\n      if (footer) {\n        lines.push(\"\");\n        lines.push(footer);\n      }\n    }\n\n    return lines.join(\"\\n\").trimEnd();\n  }\n\n  /**\n   * Render YAML front-matter.\n   */\n  private renderFrontMatter(lines: string[], run: TestRunResult): void {\n    const data: Record<string, unknown> = {\n      title: this.options.title,\n      generatedAt: new Date(run.startedAtMs).toISOString(),\n      durationMs: run.durationMs,\n      scenarios: run.testCases.length,\n      passed: run.testCases.filter((tc) => tc.status === \"passed\").length,\n      failed: run.testCases.filter((tc) => tc.status === \"failed\").length,\n      skipped: run.testCases.filter((tc) => tc.status === \"skipped\").length,\n      pending: run.testCases.filter((tc) => tc.status === \"pending\").length,\n    };\n\n    if (run.packageVersion) data.version = run.packageVersion;\n    if (run.gitSha) data.gitSha = run.gitSha.length > 7 ? run.gitSha.slice(0, 7) : run.gitSha;\n    if (run.coverage) data.coverage = run.coverage;\n\n    lines.push(\"---\");\n    for (const [key, value] of Object.entries(data)) {\n      if (value === undefined) continue;\n      if (typeof value === \"object\") {\n        lines.push(`${key}:`);\n        for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n          lines.push(`  ${k}: ${v}`);\n        }\n      } else {\n        lines.push(`${key}: ${value}`);\n      }\n    }\n    lines.push(\"---\");\n    lines.push(\"\");\n  }\n\n  /**\n   * Render summary table.\n   */\n  private renderSummaryTable(lines: string[], run: TestRunResult): void {\n    const totalScenarios = run.testCases.length;\n    const totalSteps = run.testCases.reduce((acc, tc) => acc + tc.story.steps.length, 0);\n    const passed = run.testCases.filter((tc) => tc.status === \"passed\").length;\n    const failed = run.testCases.filter((tc) => tc.status === \"failed\").length;\n    const skipped = run.testCases.filter((tc) => tc.status === \"skipped\").length;\n    const pending = run.testCases.filter((tc) => tc.status === \"pending\").length;\n\n    lines.push(\"| Scenarios | Steps | Passed | Failed | Skipped | Pending | Duration |\");\n    lines.push(\"| ---: | ---: | ---: | ---: | ---: | ---: | ---: |\");\n    lines.push(`| ${totalScenarios} | ${totalSteps} | ${passed} | ${failed} | ${skipped} | ${pending} | ${this.formatDuration(run.durationMs)} |`);\n\n    // Coverage summary if available\n    if (run.coverage) {\n      lines.push(\"\");\n      lines.push(\"| Coverage | % |\");\n      lines.push(\"| --- | ---: |\");\n      if (run.coverage.statementsPct !== undefined) {\n        lines.push(`| Statements | ${run.coverage.statementsPct}% |`);\n      }\n      if (run.coverage.branchesPct !== undefined) {\n        lines.push(`| Branches | ${run.coverage.branchesPct}% |`);\n      }\n      if (run.coverage.functionsPct !== undefined) {\n        lines.push(`| Functions | ${run.coverage.functionsPct}% |`);\n      }\n      if (run.coverage.linesPct !== undefined) {\n        lines.push(`| Lines | ${run.coverage.linesPct}% |`);\n      }\n    }\n  }\n\n  /**\n   * Format duration in human-readable form.\n   */\n  private formatDuration(ms: number): string {\n    if (ms < 1000) return `${ms}ms`;\n    return `${(ms / 1000).toFixed(2)}s`;\n  }\n\n  /**\n   * Render metadata table.\n   */\n  private renderMetadata(lines: string[], run: TestRunResult): void {\n    const rows: Array<[string, string]> = [];\n\n    const startDate = new Date(run.startedAtMs);\n    rows.push([\"Date\", startDate.toISOString()]);\n\n    if (run.packageVersion) {\n      rows.push([\"Version\", run.packageVersion]);\n    }\n\n    if (run.gitSha) {\n      const shortSha = run.gitSha.length > 7 ? run.gitSha.slice(0, 7) : run.gitSha;\n      rows.push([\"Git SHA\", shortSha]);\n    }\n\n    // Say so when this is a composite. Without it the only explanation for a\n    // scenario that did not just run lives in state the reader cannot see.\n    const accumulated = summarizeAccumulation(run.testCases);\n    if (accumulated) {\n      const oldest = new Date(accumulated.oldestRunAtMs).toISOString();\n      const newest = new Date(accumulated.newestRunAtMs).toISOString();\n      rows.push([\n        \"Source\",\n        `accumulated from ${accumulated.runs} runs (${oldest} to ${newest})`,\n      ]);\n    }\n\n    if (rows.length > 0) {\n      lines.push(\"| Key | Value |\");\n      lines.push(\"| --- | --- |\");\n      for (const [key, value] of rows) {\n        lines.push(`| ${key} | ${value} |`);\n      }\n    }\n  }\n\n  /**\n   * Render scenarios grouped by file.\n   */\n  private renderByFile(\n    lines: string[],\n    testCases: TestCaseResult[],\n    features?: FeatureDeclaration[]\n  ): void {\n    const byFile = groupBy(testCases, (tc) => tc.sourceFile);\n    const declarations = new Map((features ?? []).map((f) => [f.sourceFile, f]));\n\n    for (const [file, fileTestCases] of byFile) {\n      const declared = declarations.get(file);\n      lines.push(`## ${declared ? formatFeatureHeading(declared) : file}`);\n      lines.push(\"\");\n\n      if (declared) {\n        this.renderFeatureDeclaration(lines, declared, file);\n      }\n\n      // Group by suite path within file\n      this.renderSuiteGroups(lines, fileTestCases, 3);\n    }\n  }\n\n  /**\n   * Render what a feature is for, ahead of the scenarios that prove it.\n   */\n  private renderFeatureDeclaration(\n    lines: string[],\n    declared: FeatureDeclaration,\n    file: string\n  ): void {\n    lines.push(`_${file}_`);\n    lines.push(\"\");\n\n    if (declared.narrative) {\n      lines.push(dedentNarrative(declared.narrative));\n      lines.push(\"\");\n    }\n\n    if (declared.glossary?.length) {\n      for (const { term, definition } of declared.glossary) {\n        lines.push(`- **${term}** — ${definition}`);\n      }\n      lines.push(\"\");\n    }\n  }\n\n  /**\n   * Render scenarios grouped by suite path.\n   */\n  private renderBySuite(lines: string[], testCases: TestCaseResult[]): void {\n    this.renderSuiteGroups(lines, testCases, 2);\n  }\n\n  /**\n   * Render suite groups.\n   */\n  private renderSuiteGroups(\n    lines: string[],\n    testCases: TestCaseResult[],\n    baseLevel: number\n  ): void {\n    const bySuite = groupBy(testCases, (tc) =>\n      tc.titlePath.join(this.options.suiteSeparator)\n    );\n\n    // Sort suite groups\n    const sortedSuites = this.sortSuiteGroups([...bySuite.entries()]);\n\n    for (const [suitePath, suiteTestCases] of sortedSuites) {\n      if (suitePath) {\n        lines.push(`${\"#\".repeat(baseLevel)} ${suitePath}`);\n        lines.push(\"\");\n      }\n\n      const sorted = this.sortScenarios(suiteTestCases);\n      for (const tc of sorted) {\n        this.renderScenario(lines, tc);\n      }\n    }\n  }\n\n  /**\n   * Render flat list of scenarios.\n   */\n  private renderFlatList(lines: string[], testCases: TestCaseResult[]): void {\n    const sorted = this.sortScenarios(testCases);\n    for (const tc of sorted) {\n      this.renderScenario(lines, tc);\n    }\n  }\n\n  /**\n   * Render a single scenario.\n   */\n  private renderScenario(lines: string[], tc: TestCaseResult): void {\n    // Stable deep-link target — an explicit anchor just above the heading, so a\n    // fragment like `#scenario-foo` resolves regardless of how the renderer slugs\n    // heading text. Opt-in (living-docs site only); see `scenarioAnchor` option.\n    const anchorId = this.options.scenarioAnchor?.(tc);\n    if (anchorId) {\n      lines.push(`<a id=\"${anchorId}\"></a>`);\n      lines.push(\"\");\n    }\n\n    // Check for custom scenario header renderer\n    if (this.options.customRenderers?.renderScenarioHeader) {\n      const custom = this.options.customRenderers.renderScenarioHeader(tc);\n      if (custom !== null) {\n        lines.push(custom);\n        lines.push(\"\");\n        // Still render steps and docs after custom header\n        this.renderScenarioBody(lines, tc);\n        return;\n      }\n    }\n\n    const headingPrefix = \"#\".repeat(this.options.scenarioHeadingLevel);\n\n    // Status icon\n    let icon = \"\";\n    if (this.options.includeStatusIcons) {\n      icon = this.getStatusIcon(tc.status) + \" \";\n    }\n\n    // Scenario heading. Planned scenarios (it.todo) say so — canonical\n    // status is \"pending\" but the reader should see intent, not limbo.\n    const plannedSuffix = tc.rawStatus === \"todo\" ? \" _(planned)_\" : \"\";\n    lines.push(`${headingPrefix} ${icon}${tc.story.scenario}${plannedSuffix}`);\n\n    // What's-changed badge (opt-in) — sits directly under the heading.\n    const badge = this.options.scenarioBadge?.(tc);\n    if (badge) {\n      lines.push(badge);\n    }\n\n    // Business-context link (opt-in) — points to the scenario's hand-written note.\n    const noteLink = this.options.scenarioNoteLink?.(tc);\n    if (noteLink) {\n      lines.push(noteLink);\n    }\n\n    // Source link\n    if (this.options.includeSourceLinks && this.options.permalinkBaseUrl && tc.sourceFile !== \"unknown\") {\n      const permalink = this.buildPermalink(tc);\n      lines.push(`Source: [${tc.sourceFile}](${permalink})`);\n    }\n\n    // Tags and tickets\n    const meta: string[] = [];\n    if (tc.tags.length > 0) {\n      meta.push(`Tags: ${tc.tags.map((t) => `\\`${t}\\``).join(\", \")}`);\n    }\n    if (tc.story.tickets && tc.story.tickets.length > 0) {\n      const ticketTemplate = this.options.ticketUrlTemplate;\n      const ticketLinks = tc.story.tickets.map((t) => {\n        if (t.url) {\n          return `[${t.id}](${t.url})`;\n        }\n        if (ticketTemplate) {\n          return `[${t.id}](${ticketTemplate.replace(\"{ticket}\", t.id)})`;\n        }\n        return `\\`${t.id}\\``;\n      });\n      meta.push(`Tickets: ${ticketLinks.join(\", \")}`);\n    }\n    if (tc.rawStatus === \"timeout\" || tc.rawStatus === \"interrupted\") {\n      meta.push(`Outcome: \\`${tc.rawStatus}\\``);\n    }\n    // Trace context (injected by OTel bridge in story.init())\n    const otelMeta = (tc.story.meta as Record<string, unknown> | undefined)\n      ?.otel as { traceId?: string } | undefined;\n    if (otelMeta?.traceId) {\n      const traceTemplate = this.options.traceUrlTemplate;\n      if (traceTemplate) {\n        const url = traceTemplate.replace(/\\{traceId\\}/g, otelMeta.traceId);\n        meta.push(\n          `Trace: [${otelMeta.traceId.slice(0, 16)}…](${url})`,\n        );\n      } else {\n        meta.push(`Trace: \\`${otelMeta.traceId}\\``);\n      }\n    }\n\n    if (meta.length > 0) {\n      lines.push(meta.join(\" | \"));\n    }\n\n    lines.push(\"\");\n\n    this.renderScenarioBody(lines, tc);\n  }\n\n  /**\n   * Render scenario body (docs, steps, errors).\n   */\n  private renderScenarioBody(lines: string[], tc: TestCaseResult): void {\n    // State diffs are scoped to one scenario.\n    this.stateLanes = new Map();\n\n    // Story-level docs\n    if (tc.story.docs && tc.story.docs.length > 0) {\n      for (const doc of tc.story.docs) {\n        this.renderDocEntry(lines, doc);\n      }\n    }\n\n    // Steps\n    // A scenario whose claim checked nothing is flagged in the prose, on the\n    // steps that make the claim. Judged per scenario rather than per step: a\n    // marker credits its trailing assertion to one step, so a scenario that\n    // declares two claims and checks once would otherwise flag the first for\n    // nothing. Same rule the grade and the CLI summary use, so the report tells\n    // one story.\n    const unasserted = new Set(\n      assertionState(tc.story.steps) === \"unasserted\"\n        ? assertiveSteps(tc.story.steps)\n        : []\n    );\n    for (const step of tc.story.steps) {\n      this.renderStep(lines, step, unasserted.has(step));\n    }\n\n    // Error\n    if (tc.status === \"failed\" && tc.errorMessage && this.options.includeErrors) {\n      lines.push(\"**Failure**\");\n      lines.push(\"\");\n      lines.push(\"```text\");\n      lines.push(tc.errorMessage);\n      if (tc.errorStack) {\n        lines.push(\"\");\n        lines.push(tc.errorStack);\n      }\n      lines.push(\"```\");\n      lines.push(\"\");\n      const { expected, actual } = failingComparison(tc);\n      if (expected !== undefined) lines.push(\"Expected:\", \"\", \"```text\", expected, \"```\", \"\");\n      if (actual !== undefined) lines.push(\"Actual:\", \"\", \"```text\", actual, \"```\", \"\");\n    }\n\n    lines.push(\"\");\n  }\n\n  /**\n   * Build permalink URL for a test case.\n   */\n  private buildPermalink(tc: TestCaseResult): string {\n    const base = this.options.permalinkBaseUrl!.replace(/\\/$/, \"\");\n    const file = tc.sourceFile;\n    const line = tc.sourceLine > 0 ? `#L${tc.sourceLine}` : \"\";\n    return `${base}/${file}${line}`;\n  }\n\n  /**\n   * Render a step.\n   */\n  private renderStep(lines: string[], step: StoryStep, unasserted = false): void {\n    // Check for custom step renderer\n    if (this.options.customRenderers?.renderStep) {\n      const custom = this.options.customRenderers.renderStep(step);\n      if (custom !== null) {\n        lines.push(custom);\n        // Still render step docs\n        if (step.docs && step.docs.length > 0) {\n          const indent = this.options.stepStyle === \"gherkin\" ? \"\" : \"    \";\n          for (const doc of step.docs) {\n            this.renderDocEntry(lines, doc, indent);\n          }\n        }\n        return;\n      }\n    }\n\n    // Mode indicator\n    let modeIndicator = \"\";\n    if (step.mode === \"skip\") {\n      modeIndicator = \" _(skipped)_\";\n    } else if (step.mode === \"todo\") {\n      modeIndicator = \" _(todo)_\";\n    } else if (step.mode === \"fails\") {\n      modeIndicator = \" _(expected to fail)_\";\n    }\n    // Reads as part of the sentence rather than a badge: the claim itself has\n    // to look unbacked, or the reader takes it at face value.\n    if (unasserted) modeIndicator += \" _(no assertion)_\";\n\n    if (this.options.stepStyle === \"gherkin\") {\n      lines.push(`**${step.keyword}** ${step.text}${modeIndicator}`);\n    } else {\n      lines.push(`- **${step.keyword}** ${step.text}${modeIndicator}`);\n    }\n\n    // Render step docs\n    if (step.docs && step.docs.length > 0) {\n      const indent = this.options.stepStyle === \"gherkin\" ? \"\" : \"    \";\n      for (const doc of step.docs) {\n        this.renderDocEntry(lines, doc, indent);\n      }\n    }\n  }\n\n  /**\n   * Render a documentation entry.\n   */\n  private renderDocEntry(lines: string[], entry: DocEntry, indent = \"\"): void {\n    // Check for custom doc entry renderer\n    if (this.options.customRenderers?.renderDocEntry) {\n      const custom = this.options.customRenderers.renderDocEntry(entry);\n      if (custom !== null) {\n        lines.push(`${indent}${custom}`);\n        return;\n      }\n    }\n\n    switch (entry.kind) {\n      case \"note\":\n        lines.push(`${indent}> ${entry.text}`);\n        break;\n\n      case \"tag\":\n        lines.push(`${indent}${entry.names.map((n) => `\\`${n}\\``).join(\" \")}`);\n        break;\n\n      case \"kv\": {\n        const val = typeof entry.value === \"string\"\n          ? entry.value\n          : JSON.stringify(entry.value);\n        lines.push(`${indent}- **${entry.label}:** ${val}`);\n        break;\n      }\n\n      case \"code\":\n        if (entry.label) {\n          lines.push(`${indent}**${entry.label}**`);\n          lines.push(`${indent}`);\n        }\n        lines.push(`${indent}\\`\\`\\`${entry.lang ?? \"\"}`);\n        for (const line of (entry.content ?? \"\").split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}\\`\\`\\``);\n        lines.push(`${indent}`);\n        break;\n\n      case \"table\":\n        if (entry.label) {\n          lines.push(`${indent}**${entry.label}**`);\n          lines.push(`${indent}`);\n        }\n        lines.push(`${indent}| ${entry.columns.join(\" | \")} |`);\n        lines.push(`${indent}| ${entry.columns.map(() => \"---\").join(\" | \")} |`);\n        for (const row of entry.rows) {\n          lines.push(`${indent}| ${row.join(\" | \")} |`);\n        }\n        lines.push(`${indent}`);\n        break;\n\n      case \"link\":\n        lines.push(`${indent}[${entry.label}](${entry.url})`);\n        break;\n\n      case \"section\":\n        lines.push(`${indent}**${entry.title}**`);\n        lines.push(`${indent}`);\n        for (const line of dedentNarrative(entry.markdown ?? \"\").split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}`);\n        break;\n\n      case \"mermaid\":\n        if (entry.title) {\n          lines.push(`${indent}**${entry.title}**`);\n        }\n        lines.push(`${indent}\\`\\`\\`mermaid`);\n        for (const line of (entry.code ?? \"\").split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}\\`\\`\\``);\n        break;\n\n      case \"screenshot\":\n        // Only `data:`/`http(s):` sources, or a relative path a bundler is\n        // meant to resolve, render as an embedded image.\n        if (isLocalFsPath(entry.path) && !this.options.attachImages) {\n          lines.push(`${indent}*Screenshot unavailable${entry.alt ? ` — ${entry.alt}` : \"\"} (\\`${entry.path}\\` was not readable when the report was generated)*`);\n        } else {\n          lines.push(`${indent}![${entry.alt ?? \"Screenshot\"}](${entry.path})`);\n        }\n        break;\n\n      case \"video\": {\n        // Raw HTML so a real, playable clip renders inline — Markdown and\n        // Astro/Starlight MDX both pass <video> through untouched. The asset\n        // bundler scans <source src> and copies the file into the docs site.\n        // Video is never inlined as a data URI (bytes are too large), so an\n        // absolute path here — unlike screenshot, which at least sometimes\n        // inlines successfully — means it will *always* be broken wherever\n        // Markdown reaches an audience without that bundling step in between\n        // (e.g. posted straight to a GitHub PR comment).\n        if (isLocalFsPath(entry.path)) {\n          if (!this.options.attachImages) {\n            lines.push(`${indent}*Video unavailable${entry.caption ? ` — ${entry.caption}` : \"\"} (\\`${entry.path}\\` was not readable when the report was generated)*`);\n            break;\n          }\n          // gh rewrites markdown image syntax, and GitHub plays an uploaded\n          // clip from that same reference, so `<video>` is not the shape to\n          // write here.\n          lines.push(`${indent}![${entry.caption ?? \"Video\"}](${entry.path})`);\n          break;\n        }\n        const poster = entry.poster ? ` poster=\"${entry.poster}\"` : \"\";\n        lines.push(`${indent}`);\n        lines.push(`${indent}<video controls preload=\"metadata\"${poster} class=\"doc-video\">`);\n        lines.push(`${indent}  <source src=\"${entry.path}\" />`);\n        lines.push(`${indent}</video>`);\n        if (entry.caption) {\n          lines.push(`${indent}`);\n          lines.push(`${indent}*${entry.caption}*`);\n        }\n        lines.push(`${indent}`);\n        break;\n      }\n\n      case \"html\": {\n        // The sandboxed iframe is HTML-report-only. Markdown degrades to a\n        // link for url/path sources; inline content goes in a collapsible\n        // fenced block (dumping live HTML into MD is unpredictable across\n        // renderers, and GitHub strips iframes anyway).\n        const htmlLabel = entry.title ?? \"Embedded HTML\";\n        if (entry.url !== undefined || entry.path !== undefined) {\n          lines.push(`${indent}[${htmlLabel}](${entry.url ?? entry.path})`);\n          break;\n        }\n        lines.push(`${indent}<details>`);\n        lines.push(`${indent}<summary>${htmlLabel}</summary>`);\n        lines.push(`${indent}`);\n        lines.push(`${indent}\\`\\`\\`html`);\n        for (const line of (entry.content ?? \"\").split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}\\`\\`\\``);\n        lines.push(`${indent}`);\n        lines.push(`${indent}</details>`);\n        lines.push(`${indent}`);\n        break;\n      }\n\n      case \"state\": {\n        const lane = entry.label ?? \"\";\n        lines.push(`${indent}**${entry.label ?? \"State\"}**`);\n        if (this.stateLanes.has(lane)) {\n          const summary = summarizeStateChanges(diffStateValues(this.stateLanes.get(lane), entry.value));\n          for (const line of summary) lines.push(`${indent}- ${line}`);\n        }\n        this.stateLanes.set(lane, entry.value);\n        lines.push(`${indent}`);\n        lines.push(`${indent}<details>`);\n        lines.push(`${indent}<summary>snapshot</summary>`);\n        lines.push(`${indent}`);\n        lines.push(`${indent}\\`\\`\\`json`);\n        for (const line of JSON.stringify(entry.value ?? null, null, 2).split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}\\`\\`\\``);\n        lines.push(`${indent}`);\n        lines.push(`${indent}</details>`);\n        lines.push(`${indent}`);\n        break;\n      }\n\n      case \"custom\":\n        if (entry.type === \"visual\" && entry.data && typeof entry.data === \"object\") {\n          const data = entry.data as Record<string, unknown>;\n          const status = typeof data.status === \"string\" ? data.status : \"unknown\";\n          lines.push(`${indent}**Visual Check** (${status})`);\n          if (typeof data.baseline === \"string\") lines.push(`${indent}- Baseline: ${data.baseline}`);\n          if (typeof data.actual === \"string\") lines.push(`${indent}- Actual: ${data.actual}`);\n          if (typeof data.diff === \"string\") lines.push(`${indent}- Diff: ${data.diff}`);\n          lines.push(`${indent}`);\n          break;\n        }\n        lines.push(`${indent}**[${entry.type}]**`);\n        lines.push(`${indent}`);\n        lines.push(`${indent}\\`\\`\\`json`);\n        for (const line of JSON.stringify(entry.data ?? null, null, 2).split(\"\\n\")) {\n          lines.push(`${indent}${line}`);\n        }\n        lines.push(`${indent}\\`\\`\\``);\n        lines.push(`${indent}`);\n        break;\n\n      default:\n        assertNever(entry, \"Markdown: unhandled doc kind\");\n    }\n\n    // Render children with increased indentation\n    if (Array.isArray(entry.children) && entry.children.length > 0) {\n      const childIndent = indent + \"  \";\n      for (const child of entry.children) {\n        this.renderDocEntry(lines, child, childIndent);\n      }\n    }\n  }\n\n  /**\n   * Get status icon for a status.\n   */\n  private getStatusIcon(status: TestStatus): string {\n    switch (status) {\n      case \"passed\":\n        return \"✅\";\n      case \"failed\":\n        return \"❌\";\n      case \"skipped\":\n        return \"⏩\";\n      case \"pending\":\n        return \"📝\";\n      default:\n        return \"⚠️\";\n    }\n  }\n\n  /**\n   * Sort scenarios based on options.\n   */\n  private sortScenarios(testCases: TestCaseResult[]): TestCaseResult[] {\n    if (this.options.sortScenarios === \"alpha\") {\n      return [...testCases].sort((a, b) =>\n        a.story.scenario.localeCompare(b.story.scenario)\n      );\n    }\n    if (this.options.sortScenarios === \"source\") {\n      return [...testCases].sort(bySourcePosition);\n    }\n    return testCases;\n  }\n\n  /**\n   * Sort suite groups.\n   */\n  private sortSuiteGroups(\n    entries: [string, TestCaseResult[]][]\n  ): [string, TestCaseResult[]][] {\n    if (this.options.sortScenarios === \"alpha\") {\n      return entries.sort(([a], [b]) => a.localeCompare(b));\n    }\n    if (this.options.sortScenarios === \"source\") {\n      return entries.sort(([, a], [, b]) => {\n        return earliestSourceLine(a) - earliestSourceLine(b);\n      });\n    }\n    return entries;\n  }\n}\n\n/**\n * Group array items by a key function.\n */\nfunction groupBy<T, K>(items: T[], keyFn: (item: T) => K): Map<K, T[]> {\n  const map = new Map<K, T[]>();\n  for (const item of items) {\n    const key = keyFn(item);\n    const existing = map.get(key);\n    if (existing) {\n      existing.push(item);\n    } else {\n      map.set(key, [item]);\n    }\n  }\n  return map;\n}\n\n/**\n * Label the feature the way it was declared.\n *\n * An ability reads as something a person can now do; a business need covers the\n * cross-cutting concerns nobody asks for by name, like security or performance.\n * Naming the kind in the heading keeps that distinction visible to a reader who\n * never sees the test code.\n */\nfunction formatFeatureHeading(declared: FeatureDeclaration): string {\n  const label =\n    declared.kind === \"ability\"\n      ? \"Ability\"\n      : declared.kind === \"business-need\"\n        ? \"Business Need\"\n        : \"Feature\";\n  return `${label}: ${declared.title}`;\n}\n\n/**\n * Strip the leading indentation a template literal picks up from its source.\n *\n * Narratives are written inline in test files, so they arrive indented to match\n * the surrounding code. Left alone, four spaces would make Markdown render the\n * whole paragraph as a code block.\n */\nfunction dedentNarrative(narrative: string): string {\n  const lines = narrative.replace(/\\t/g, \"  \").split(\"\\n\");\n  const indents = lines\n    .filter((line) => line.trim().length > 0)\n    .map((line) => line.length - line.trimStart().length);\n  const shortest = indents.length > 0 ? Math.min(...indents) : 0;\n  return lines\n    .map((line) => line.slice(shortest))\n    .join(\"\\n\")\n    .trim();\n}\n","import type { TestCaseResult } from \"executable-stories-core\";\n\n/**\n * Order two scenarios by where they sit in their source file.\n *\n * `story.sourceOrder` counts `story.init()` calls, so it records the order\n * tests *ran*. Under parallel workers that is not the order they were written:\n * each worker is its own process and restarts the counter at zero, so the\n * numbers both scramble and collide. `sourceLine` comes from the framework's\n * own location for the test and says where it actually is.\n *\n * Scenarios from different files are grouped by file before this runs, so\n * comparing bare line numbers is safe; the file name breaks ties only when a\n * caller sorts across files.\n */\nexport function bySourcePosition(a: TestCaseResult, b: TestCaseResult): number {\n  if (a.sourceLine !== b.sourceLine) return a.sourceLine - b.sourceLine;\n  if (a.sourceFile !== b.sourceFile) return a.sourceFile < b.sourceFile ? -1 : 1;\n  return (a.story.sourceOrder ?? 0) - (b.story.sourceOrder ?? 0);\n}\n\n/** Earliest source line in a group, for ordering the groups themselves. */\nexport function earliestSourceLine(cases: TestCaseResult[]): number {\n  return Math.min(...cases.map((c) => c.sourceLine));\n}\n","import type { TestCaseResult } from \"executable-stories-core/types/test-result\";\n\n/**\n * The error message a reader should see for a failed scenario: the failing\n * step's message when one is isolated (most specific), otherwise the\n * scenario-level error. Shared by the agent-facing commands (`check`,\n * `triage`) so the choice stays consistent between them.\n */\nexport function failingScenarioMessage(tc: TestCaseResult): string | undefined {\n  const failingStep = tc.stepResults.find((s) => s.status === \"failed\" && s.errorMessage);\n  return failingStep?.errorMessage ?? tc.errorMessage;\n}\n\n/** The failed assertion's expected and actual values, from the step that carries them. */\nexport function failingComparison(tc: TestCaseResult): { expected?: string; actual?: string } {\n  const step = tc.stepResults.find((s) => s.expected !== undefined || s.actual !== undefined);\n  return {\n    ...(step?.expected !== undefined ? { expected: step.expected } : {}),\n    ...(step?.actual !== undefined ? { actual: step.actual } : {}),\n  };\n}\n","import { createHash } from \"node:crypto\";\n\nimport type { TestCaseResult, TestRunResult } from \"executable-stories-core/types/test-result\";\n\nexport interface ReleaseManifest {\n  schemaVersion: \"1.0\";\n  generatedAt: string;\n  run: {\n    startedAt: string;\n    finishedAt: string;\n    gitSha?: string;\n    branch?: string;\n    total: number;\n    passed: number;\n    failed: number;\n    skipped: number;\n    pending: number;\n  };\n  testedTogetherHash: string;\n  scenarios: Array<{\n    id: string;\n    title: string;\n    status: string;\n    sourceFile: string;\n    sourceLine: number;\n    tags: string[];\n  }>;\n}\n\nexport class ReleaseManifestFormatter {\n  format(run: TestRunResult): string {\n    const manifest = toReleaseManifest(run);\n    const lines: string[] = [];\n\n    lines.push(\"# Release Manifest\");\n    lines.push(\"\");\n    lines.push(`Generated: ${manifest.generatedAt}`);\n    lines.push(`Run: ${manifest.run.startedAt} to ${manifest.run.finishedAt}`);\n    if (manifest.run.branch) lines.push(`Branch: ${manifest.run.branch}`);\n    if (manifest.run.gitSha) lines.push(`Commit: ${manifest.run.gitSha}`);\n    lines.push(`Tested-together hash: \\`${manifest.testedTogetherHash}\\``);\n    lines.push(\"\");\n    lines.push(\"| Scenarios | Passed | Failed | Skipped | Pending |\");\n    lines.push(\"| ---: | ---: | ---: | ---: | ---: |\");\n    lines.push(`| ${manifest.run.total} | ${manifest.run.passed} | ${manifest.run.failed} | ${manifest.run.skipped} | ${manifest.run.pending} |`);\n    lines.push(\"\");\n    lines.push(\"## Scenarios\");\n    lines.push(\"\");\n    lines.push(\"| Status | Scenario | Source | Tags |\");\n    lines.push(\"| --- | --- | --- | --- |\");\n    for (const scenario of manifest.scenarios) {\n      const source = `${scenario.sourceFile}:${scenario.sourceLine}`;\n      const tags = scenario.tags.length > 0 ? scenario.tags.map((tag) => `\\`${tag}\\``).join(\", \") : \"\";\n      lines.push(`| ${renderStatus(scenario.status)} | ${escapePipe(scenario.title)} | \\`${source}\\` | ${tags} |`);\n    }\n\n    return lines.join(\"\\n\");\n  }\n}\n\nexport function toReleaseManifest(run: TestRunResult): ReleaseManifest {\n  const scenarios = [...run.testCases]\n    .sort((a, b) => a.id.localeCompare(b.id))\n    .map((tc) => ({\n      id: tc.id,\n      title: tc.story.scenario,\n      status: tc.status,\n      sourceFile: tc.sourceFile,\n      sourceLine: tc.sourceLine,\n      tags: tc.tags,\n    }));\n\n  const fingerprint = scenarios.map((scenario) => `${scenario.id}:${scenario.status}`).join(\"\\n\");\n\n  return {\n    schemaVersion: \"1.0\",\n    generatedAt: new Date().toISOString(),\n    run: {\n      startedAt: new Date(run.startedAtMs).toISOString(),\n      finishedAt: new Date(run.finishedAtMs).toISOString(),\n      gitSha: run.gitSha,\n      branch: getBranch(run),\n      total: run.testCases.length,\n      passed: count(run.testCases, \"passed\"),\n      failed: count(run.testCases, \"failed\"),\n      skipped: count(run.testCases, \"skipped\"),\n      pending: count(run.testCases, \"pending\"),\n    },\n    testedTogetherHash: createHash(\"sha256\").update(fingerprint).digest(\"hex\"),\n    scenarios,\n  };\n}\n\nfunction getBranch(run: TestRunResult): string | undefined {\n  return run.ci?.branch;\n}\n\nfunction count(testCases: TestCaseResult[], status: TestCaseResult[\"status\"]): number {\n  return testCases.filter((tc) => tc.status === status).length;\n}\n\nfunction renderStatus(status: string): string {\n  switch (status) {\n    case \"passed\":\n      return \"passed\";\n    case \"failed\":\n      return \"failed\";\n    case \"skipped\":\n      return \"skipped\";\n    case \"pending\":\n      return \"pending\";\n    default:\n      return status;\n  }\n}\n\nfunction escapePipe(value: string): string {\n  return value.replace(/\\|/g, \"\\\\|\");\n}\n","/**\n * Review domain — `buildReview(run, context)` mirrors `diffRuns(baseline, current)`.\n *\n * A pure function that enriches a canonical run into a {@link ReviewResult}:\n * each test case becomes a graded claim, and (when diff context is supplied)\n * changed source files are correlated to claims and banded\n * uncovered → weak → covered. The review formatters render the result.\n */\n\nimport type { DocEntry } from \"executable-stories-core/types/story\";\nimport { assertionState } from \"executable-stories-core\";\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type {\n  ChangeType,\n  ChangedFileReview,\n  CodeDiffEvidence,\n  CodeDiffInput,\n  EvidenceStrength,\n  ReviewAudience,\n  ReviewClaim,\n  ReviewContext,\n  ReviewResult,\n  ReviewSummary,\n} from \"../types/review\";\nimport { parseUnifiedDiff, relocateAnchor } from \"./diff-anchor\";\nimport {\n  VALID_CHANGE_TYPES,\n  deriveAudience,\n  deriveChangeType,\n  isReviewableSource,\n  sourceBaseKey,\n  testBaseKey,\n} from \"./conventions\";\nimport { asChoice, type JevClient } from \"../jev\";\n\nconst STRENGTH_RANK: Record<EvidenceStrength, number> = {\n  none: 0,\n  weak: 1,\n  moderate: 2,\n  strong: 3,\n};\n\nconst INTENT_SECTION_TITLE = /\\b(why|intent|approach|rationale|reasoning)\\b/i;\n\n/** Recursively find the first doc entry (including children) matching a predicate. */\nfunction findDoc(\n  docs: DocEntry[] | undefined,\n  predicate: (doc: DocEntry) => boolean\n): DocEntry | undefined {\n  if (!docs) return undefined;\n  for (const doc of docs) {\n    if (predicate(doc)) return doc;\n    const nested = findDoc(doc.children, predicate);\n    if (nested) return nested;\n  }\n  return undefined;\n}\n\nfunction anyDoc(\n  docs: DocEntry[] | undefined,\n  predicate: (doc: DocEntry) => boolean\n): boolean {\n  return findDoc(docs, predicate) !== undefined;\n}\n\n/** Pull the intent/approach narrative from a \"Why\"-style section, falling back to a note. */\nfunction extractIntent(testCase: TestCaseResult): string | undefined {\n  const docs = testCase.story.docs;\n  const section = findDoc(\n    docs,\n    (d): d is Extract<DocEntry, { kind: \"section\" }> =>\n      d.kind === \"section\" && INTENT_SECTION_TITLE.test(d.title)\n  );\n  if (section && section.kind === \"section\") return section.markdown;\n\n  const note = findDoc(docs, (d) => d.kind === \"note\");\n  if (note && note.kind === \"note\") return note.text;\n  return undefined;\n}\n\n/** True when the test case carries a screenshot (attachment or `screenshot` doc). */\nfunction hasScreenshot(testCase: TestCaseResult): boolean {\n  if (testCase.attachments.some((a) => a.mediaType.startsWith(\"image/\"))) {\n    return true;\n  }\n  if (anyDoc(testCase.story.docs, (d) => d.kind === \"screenshot\")) return true;\n  return testCase.story.steps.some((step) =>\n    anyDoc(step.docs, (d) => d.kind === \"screenshot\")\n  );\n}\n\nfunction hasOtelTrace(testCase: TestCaseResult): boolean {\n  return (testCase.story.otelSpans?.length ?? 0) > 0;\n}\n\n/**\n * Grade how credible a claim's proof is.\n *\n * A passing self-authored test is the weakest evidence. Strength climbs as\n * tamper-resistant or constraint-proving signals appear: a screenshot/trace, a\n * decent mutation score, and — strongest — failing-first verification.\n */\nexport function gradeEvidence(\n  testCase: TestCaseResult,\n  audience: ReviewAudience\n): { strength: EvidenceStrength; reasons: string[] } {\n  if (testCase.status !== \"passed\") {\n    return {\n      strength: \"none\",\n      reasons: [`test is ${testCase.status} — the proof does not hold`],\n    };\n  }\n\n  // A scenario that asserted nothing cannot fail, so it proves nothing, and no\n  // attached artifact changes that. This floor sits above every other signal:\n  // mutation score and failing-first are unreachable for a test that is green\n  // by construction.\n  if (assertionState(testCase.story.steps) === \"unasserted\") {\n    return {\n      strength: \"none\",\n      reasons: [\"the scenario passed without asserting anything\"],\n    };\n  }\n\n  const ev = testCase.evidence;\n  const screenshot = hasScreenshot(testCase);\n  const otel = hasOtelTrace(testCase);\n  const isIntegration = /\\.int\\.test\\./i.test(testCase.sourceFile);\n  const mutation = ev?.mutationScorePct;\n  const changedCov = ev?.changedLineCoveragePct;\n\n  const strong: string[] = [];\n  if (ev?.failingFirstVerified) {\n    strong.push(\"failing-first verified (red on base ref, green on head)\");\n  }\n  if (typeof mutation === \"number\" && mutation >= 80) {\n    strong.push(`mutation score ${mutation}% (≥80%)`);\n  }\n  if (screenshot && otel) {\n    strong.push(\"backed by screenshot + OTEL trace\");\n  } else if (audience === \"stakeholder\" && (screenshot || otel)) {\n    strong.push(`stakeholder proof: ${screenshot ? \"screenshot\" : \"OTEL trace\"}`);\n  }\n  if (strong.length > 0) return { strength: \"strong\", reasons: strong };\n\n  const moderate: string[] = [];\n  if (screenshot) moderate.push(\"screenshot attached\");\n  if (otel) moderate.push(\"OTEL trace attached\");\n  if (typeof mutation === \"number\" && mutation >= 50) {\n    moderate.push(`mutation score ${mutation}%`);\n  }\n  if (typeof changedCov === \"number\" && changedCov >= 80) {\n    moderate.push(`changed-line coverage ${changedCov}%`);\n  }\n  if (isIntegration) moderate.push(\"integration-level test\");\n  if (moderate.length > 0) return { strength: \"moderate\", reasons: moderate };\n\n  return {\n    strength: \"weak\",\n    reasons: [\n      \"passing test only — no corroborating evidence (add e2e proof, mutation score, or failing-first)\",\n    ],\n  };\n}\n\nfunction toClaim(\n  testCase: TestCaseResult,\n  changedSourcePaths: string[]\n): ReviewClaim {\n  const audience = deriveAudience(testCase.sourceFile, testCase.tags);\n  const changeType = deriveChangeType(testCase.tags);\n  const { strength, reasons } = gradeEvidence(testCase, audience);\n\n  // Colocated-filename correlation: a test covers a changed source file when the\n  // test's base path (infix stripped) matches the source file's base path.\n  const key = testBaseKey(testCase.sourceFile);\n  const coversFiles = changedSourcePaths.filter(\n    (path) => sourceBaseKey(path) === key\n  );\n\n  return {\n    id: testCase.id,\n    scenario: testCase.story.scenario,\n    sourceFile: testCase.sourceFile,\n    sourceLine: testCase.sourceLine,\n    status: testCase.status,\n    audience,\n    changeType,\n    strength,\n    strengthReasons: reasons,\n    intent: extractIntent(testCase),\n    coversFiles,\n    testCase,\n  };\n}\n\nfunction bandFor(claims: ReviewClaim[]): ChangedFileReview[\"band\"] {\n  if (claims.length === 0) return \"uncovered\";\n  const maxRank = Math.max(...claims.map((c) => STRENGTH_RANK[c.strength]));\n  return maxRank >= STRENGTH_RANK.moderate ? \"covered\" : \"weak\";\n}\n\nconst AUDIENCE_ORDER: Record<ReviewAudience, number> = {\n  stakeholder: 0,\n  engineer: 1,\n};\n\n/**\n * Resolve one Code Diff evidence group: parse the patch, relocate each\n * annotation's content anchor, and resolve cited scenario IDs against the\n * run. Ambiguous/orphaned anchors and unresolved scenario IDs stay visible\n * in the result — they are never dropped or silently reattached.\n */\nfunction buildCodeDiff(\n  input: CodeDiffInput,\n  run: ReviewResult[\"run\"],\n  context: ReviewContext\n): CodeDiffEvidence {\n  const files = parseUnifiedDiff(input.patch);\n  const byId = new Map(run.testCases.map((tc) => [tc.id, tc]));\n  return {\n    title: input.title,\n    patch: input.patch,\n    patchUrl: input.patchUrl,\n    baseLabel: input.baseLabel ?? context.baseRef,\n    headLabel: input.headLabel ?? context.headRef,\n    files,\n    annotations: input.annotations.map((annotation) => ({\n      anchorHash: annotation.anchor?.hash,\n      text: annotation.text,\n      label: annotation.label,\n      resolution: annotation.anchor\n        ? relocateAnchor(annotation.anchor, files)\n        : { state: annotation.unresolved ?? (\"orphaned\" as const) },\n      scenarios: (annotation.scenarioIds ?? []).map((id) => {\n        const testCase = byId.get(id);\n        return testCase\n          ? {\n              id,\n              resolved: true,\n              scenario: testCase.story.scenario,\n              status: testCase.status,\n            }\n          : { id, resolved: false };\n      }),\n    })),\n  };\n}\n\n/**\n * Build the review model from a canonical run and optional diff context.\n *\n * With no `changedFiles`, the report degrades gracefully to \"claims only\"\n * (no banding). With diff context, changed source files are correlated and\n * banded — the 🔴 uncovered band being the reviewer's first stop.\n */\nexport function buildReview(\n  run: ReviewResult[\"run\"],\n  context: ReviewContext = { changedFiles: [] }\n): ReviewResult {\n  const changedSource = context.changedFiles.filter((f) =>\n    isReviewableSource(f.path)\n  );\n  const changedSourcePaths = changedSource.map((f) => f.path);\n\n  const claims = run.testCases.map((tc) => toClaim(tc, changedSourcePaths));\n\n  const changedFiles: ChangedFileReview[] = changedSource.map((file) => {\n    const covering = claims.filter((c) => c.coversFiles.includes(file.path));\n    return {\n      path: file.path,\n      changeKind: file.changeKind,\n      band: bandFor(covering),\n      claims: covering.map((c) => ({\n        id: c.id,\n        scenario: c.scenario,\n        strength: c.strength,\n      })),\n    };\n  });\n\n  // Claims: stakeholder first, then weakest evidence first (surface risk), then stable.\n  const sortedClaims = [...claims].sort((a, b) => {\n    if (AUDIENCE_ORDER[a.audience] !== AUDIENCE_ORDER[b.audience]) {\n      return AUDIENCE_ORDER[a.audience] - AUDIENCE_ORDER[b.audience];\n    }\n    if (STRENGTH_RANK[a.strength] !== STRENGTH_RANK[b.strength]) {\n      return STRENGTH_RANK[a.strength] - STRENGTH_RANK[b.strength];\n    }\n    if (a.sourceFile !== b.sourceFile) {\n      return a.sourceFile.localeCompare(b.sourceFile);\n    }\n    return a.scenario.localeCompare(b.scenario);\n  });\n\n  const bandRank = { uncovered: 0, weak: 1, covered: 2 } as const;\n  const sortedFiles = [...changedFiles].sort((a, b) => {\n    if (bandRank[a.band] !== bandRank[b.band]) {\n      return bandRank[a.band] - bandRank[b.band];\n    }\n    return a.path.localeCompare(b.path);\n  });\n\n  const summary = buildSummary(sortedClaims, sortedFiles);\n\n  return {\n    run,\n    context,\n    summary,\n    claims: sortedClaims,\n    changedFiles: sortedFiles,\n    codeDiffs: (context.codeDiffs ?? []).map((d) => buildCodeDiff(d, run, context)),\n  };\n}\n\n/**\n * Code Diff integrity diagnostics: orphaned/ambiguous anchors and unverified\n * scenario references. The CLI prints these as warnings; `--strict-code-diff`\n * turns them into review-gate failures so CI catches explainers that lost\n * their grounding.\n */\n/** Below this confidence the claim stays `unknown`. */\nexport const REVIEW_CHANGE_TYPE_MIN_CONFIDENCE = 0.6;\n/** Enough patch to classify; a claim rarely covers more than a few hunks. */\nconst PATCH_EXCERPT_CHARS = 4000;\n\nconst CHANGE_TYPE_CRITERIA: Record<Exclude<ChangeType, \"unknown\">, string> = {\n  feature: \"new user-visible behaviour or capability\",\n  bugfix: \"corrects behaviour that was wrong\",\n  refactor: \"restructures code without changing behaviour\",\n  perf: \"same behaviour, faster or cheaper\",\n  deps: \"dependency, toolchain, or lockfile change\",\n};\n\n/**\n * For claims with no `change:*` tag, ask Jev to pick the change-type from the\n * scenario plus the hunks of the files it covers. Confident answers are\n * written back with their confidence so every renderer can say \"inferred\";\n * the rest stay `unknown`.\n */\nexport async function enrichReview(review: ReviewResult, jev: JevClient): Promise<ReviewResult> {\n  const untagged = review.claims.filter((c) => c.changeType === \"unknown\" && c.coversFiles.length > 0);\n  if (untagged.length === 0) return review;\n\n  const hunksByPath = new Map<string, string[]>();\n  for (const group of review.context.codeDiffs ?? []) {\n    for (const file of parseUnifiedDiff(group.patch)) {\n      const path = file.newPath ?? file.oldPath;\n      if (!path) continue;\n      const text = file.hunks.flatMap((h) => h.lines.map((l) => (l.kind === \"add\" ? \"+\" : l.kind === \"del\" ? \"-\" : \" \") + l.text));\n      hunksByPath.set(path, [...(hunksByPath.get(path) ?? []), ...text]);\n    }\n  }\n\n  const inferred = new Map<string, { changeType: ChangeType; confidence: number }>();\n  await Promise.all(\n    untagged.map(async (claim) => {\n      const patch = claim.coversFiles.flatMap((f) => hunksByPath.get(f) ?? []).join(\"\\n\").slice(0, PATCH_EXCERPT_CHARS);\n      const answers = await jev.ask(\n        {\n          scenario: claim.scenario,\n          steps: claim.testCase.story.steps.map((s) => `${s.keyword} ${s.text}`),\n          ...(claim.intent ? { intent: claim.intent } : {}),\n          changedFiles: claim.coversFiles,\n          ...(patch ? { patch } : {}),\n        },\n        {\n          changeType: {\n            type: \"choice\",\n            instructions: \"What kind of change does this scenario prove?\",\n            criteria: CHANGE_TYPE_CRITERIA,\n          },\n        },\n      );\n      const answer = asChoice(answers.changeType);\n      if (!answer || answer.confidence < REVIEW_CHANGE_TYPE_MIN_CONFIDENCE) return;\n      const changeType = answer.choice as ChangeType;\n      if (VALID_CHANGE_TYPES.has(changeType)) inferred.set(claim.id, { changeType, confidence: answer.confidence });\n    }),\n  );\n\n  return {\n    ...review,\n    claims: review.claims.map((claim) => {\n      const hit = inferred.get(claim.id);\n      return hit ? { ...claim, changeType: hit.changeType, changeTypeConfidence: hit.confidence } : claim;\n    }),\n  };\n}\n\nexport function codeDiffDiagnostics(review: ReviewResult): string[] {\n  const issues: string[] = [];\n  for (const evidence of review.codeDiffs) {\n    evidence.annotations.forEach((annotation, i) => {\n      const name = annotation.label ?? `annotation ${i + 1}`;\n      if (annotation.resolution.state !== \"anchored\") {\n        issues.push(\n          `\"${evidence.title}\" ${name}: anchor is ${annotation.resolution.state} in the current patch`\n        );\n      }\n      for (const ref of annotation.scenarios) {\n        if (!ref.resolved) {\n          issues.push(\n            `\"${evidence.title}\" ${name}: cites scenario \"${ref.id}\" which is not in this run`\n          );\n        }\n      }\n    });\n  }\n  return issues;\n}\n\nfunction buildSummary(\n  claims: ReviewClaim[],\n  changedFiles: ChangedFileReview[]\n): ReviewSummary {\n  const byAudience: Record<ReviewAudience, number> = {\n    stakeholder: 0,\n    engineer: 0,\n  };\n  const byStrength: Record<EvidenceStrength, number> = {\n    none: 0,\n    weak: 0,\n    moderate: 0,\n    strong: 0,\n  };\n  for (const claim of claims) {\n    byAudience[claim.audience] += 1;\n    byStrength[claim.strength] += 1;\n  }\n\n  return {\n    totalClaims: claims.length,\n    byAudience,\n    byStrength,\n    changedSourceFiles: changedFiles.length,\n    uncovered: changedFiles.filter((f) => f.band === \"uncovered\").length,\n    weaklyCovered: changedFiles.filter((f) => f.band === \"weak\").length,\n    covered: changedFiles.filter((f) => f.band === \"covered\").length,\n  };\n}\n","/**\n * Diff anchoring — content-anchored annotation targets for Code Diff evidence.\n *\n * An annotation must stay attached to the right hunk after the patch is\n * regenerated (which, for AI-authored changes, happens constantly). Line\n * numbers are the wrong key: they detach on rebase/force-push. This module\n * anchors by content instead, the way `patch(1)` does — the anchor is the\n * changed lines plus a bounded window of surrounding context, and relocation\n * matches that content in the new patch with progressive fuzz (outermost\n * context lines are dropped first; the changed lines are never dropped).\n *\n * Resolution states:\n * - `anchored`  — exactly one match above the fuzz threshold.\n * - `ambiguous` — multiple matches (e.g. duplicate identical lines); the\n *                 annotation must render visibly un-located, never guessed.\n * - `orphaned`  — no match; the annotation renders with a \"could not locate\n *                 in current patch\" notice, never silently reattached.\n *\n * Pure functions, no I/O — patches are generated at the CLI/Action layer\n * (with `git diff --histogram` for hunk stability), never by adapters.\n */\n\nimport { createHash } from \"node:crypto\";\n\nimport type {\n  AnchorResolution,\n  DiffAnchor,\n  DiffHunk,\n  DiffLine,\n  FileDiff,\n} from \"../types/diff\";\n\n/** Context lines captured per side when creating an anchor (git's default context size). */\nexport const CONTEXT_WINDOW = 3;\n/** Maximum outermost context lines dropped per side during relocation (patch(1)'s default max fuzz). */\nexport const MAX_FUZZ = 2;\n\n/** Whitespace-normalize a line for anchor identity and matching. */\nconst normalize = (line: string): string => line.trim();\n\nconst HUNK_HEADER = /^@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@ ?(.*)$/;\n\nfunction stripPathPrefix(raw: string): string | undefined {\n  const path = raw.split(\"\\t\")[0].trim();\n  if (path === \"/dev/null\") return undefined;\n  return path.replace(/^[ab]\\//, \"\");\n}\n\n/**\n * Parse a unified diff into files and hunks. Hunk bodies are consumed by\n * line count from the `@@` header, so content lines that look like file\n * headers (e.g. a context line starting with `--- `) parse correctly.\n */\nexport function parseUnifiedDiff(patch: string): FileDiff[] {\n  const files: FileDiff[] = [];\n  let current: FileDiff | undefined;\n  let hunk: DiffHunk | undefined;\n  let oldRemaining = 0;\n  let newRemaining = 0;\n\n  for (const line of patch.split(\"\\n\")) {\n    if (hunk && (oldRemaining > 0 || newRemaining > 0)) {\n      if (line.startsWith(\"\\\\\")) continue; // \"\\ No newline at end of file\"\n      const kind = line.startsWith(\"+\") ? \"add\" : line.startsWith(\"-\") ? \"del\" : \"context\";\n      hunk.lines.push({ kind, text: line.slice(1) });\n      if (kind !== \"add\") oldRemaining--;\n      if (kind !== \"del\") newRemaining--;\n      continue;\n    }\n    hunk = undefined;\n\n    if (line.startsWith(\"diff --git \")) {\n      current = { hunks: [] };\n      files.push(current);\n      continue;\n    }\n    if (line.startsWith(\"--- \")) {\n      // Plain patches have no \"diff --git\" line; \"---\" starts a new file then.\n      if (!current || current.oldPath !== undefined || current.hunks.length > 0) {\n        current = { hunks: [] };\n        files.push(current);\n      }\n      current.oldPath = stripPathPrefix(line.slice(4));\n      continue;\n    }\n    if (line.startsWith(\"+++ \") && current) {\n      current.newPath = stripPathPrefix(line.slice(4));\n      continue;\n    }\n    const match = HUNK_HEADER.exec(line);\n    if (match && current) {\n      hunk = {\n        oldStart: Number(match[1]),\n        newStart: Number(match[3]),\n        header: match[5] ?? \"\",\n        lines: [],\n      };\n      oldRemaining = match[2] === undefined ? 1 : Number(match[2]);\n      newRemaining = match[4] === undefined ? 1 : Number(match[4]);\n      current.hunks.push(hunk);\n    }\n  }\n  return files;\n}\n\n/**\n * Create an anchor for the contiguous run of changed lines starting at\n * `lines[lineIndex]` in the given hunk (the authoring seam — used by the\n * CLI/sidecar assembly helper, not by hand).\n */\nexport function createAnchor(args: {\n  file: FileDiff;\n  hunkIndex: number;\n  lineIndex: number;\n}): DiffAnchor {\n  const { file, hunkIndex, lineIndex } = args;\n  const lines = file.hunks[hunkIndex].lines;\n  if (lines[lineIndex].kind === \"context\") {\n    throw new Error(`Line ${lineIndex} is a context line; anchors target changed lines`);\n  }\n  const changed: DiffAnchor[\"changed\"] = [];\n  let end = lineIndex;\n  while (end < lines.length && lines[end].kind !== \"context\") {\n    changed.push({ kind: lines[end].kind as \"add\" | \"del\", text: lines[end].text });\n    end++;\n  }\n  const contextBefore = lines\n    .slice(Math.max(0, lineIndex - CONTEXT_WINDOW), lineIndex)\n    .map((l) => l.text);\n  const contextAfter = lines.slice(end, end + CONTEXT_WINDOW).map((l) => l.text);\n\n  const hash = createHash(\"sha256\")\n    .update(\n      JSON.stringify({\n        changed: changed.map((l) => `${l.kind}:${normalize(l.text)}`),\n        before: contextBefore.map(normalize),\n        after: contextAfter.map(normalize),\n      })\n    )\n    .digest(\"hex\");\n\n  return {\n    hash,\n    file: file.newPath ?? file.oldPath ?? \"\",\n    changed,\n    contextBefore,\n    contextAfter,\n  };\n}\n\ninterface Candidate {\n  fileIndex: number;\n  file: string;\n  hunkIndex: number;\n  lineIndex: number;\n  lines: DiffLine[];\n}\n\n/** All positions in a file where the anchor's changed run matches (kind + normalized text). */\nfunction changedRunCandidates(\n  anchor: DiffAnchor,\n  file: FileDiff,\n  fileIndex: number\n): Candidate[] {\n  const path = file.newPath ?? file.oldPath ?? \"\";\n  const out: Candidate[] = [];\n  file.hunks.forEach((hunk, hunkIndex) => {\n    outer: for (let i = 0; i + anchor.changed.length <= hunk.lines.length; i++) {\n      for (let j = 0; j < anchor.changed.length; j++) {\n        const line = hunk.lines[i + j];\n        const want = anchor.changed[j];\n        if (line.kind !== want.kind || normalize(line.text) !== normalize(want.text)) {\n          continue outer;\n        }\n      }\n      out.push({ fileIndex, file: path, hunkIndex, lineIndex: i, lines: hunk.lines });\n    }\n  });\n  return out;\n}\n\n/**\n * Does the candidate's surrounding context match the anchor's, ignoring the\n * `fuzz` outermost lines per side? A required context line falling outside\n * the hunk counts as a mismatch (higher fuzz recovers boundary cases).\n */\nfunction contextMatches(anchor: DiffAnchor, candidate: Candidate, fuzz: number): boolean {\n  const before = anchor.contextBefore.slice(Math.min(fuzz, anchor.contextBefore.length));\n  const after = anchor.contextAfter.slice(\n    0,\n    Math.max(0, anchor.contextAfter.length - fuzz)\n  );\n  for (let i = 0; i < before.length; i++) {\n    const line = candidate.lines[candidate.lineIndex - before.length + i];\n    if (line === undefined || normalize(line.text) !== normalize(before[i])) return false;\n  }\n  const end = candidate.lineIndex + anchor.changed.length;\n  for (let i = 0; i < after.length; i++) {\n    const line = candidate.lines[end + i];\n    if (line === undefined || normalize(line.text) !== normalize(after[i])) return false;\n  }\n  return true;\n}\n\nfunction resolveCandidates(\n  anchor: DiffAnchor,\n  candidates: Candidate[]\n): AnchorResolution | undefined {\n  for (let fuzz = 0; fuzz <= MAX_FUZZ; fuzz++) {\n    const matches = candidates.filter((c) => contextMatches(anchor, c, fuzz));\n    if (matches.length === 1) {\n      const m = matches[0];\n      return {\n        state: \"anchored\",\n        fileIndex: m.fileIndex,\n        file: m.file,\n        hunkIndex: m.hunkIndex,\n        lineIndex: m.lineIndex,\n        lineCount: anchor.changed.length,\n        fuzz,\n      };\n    }\n    if (matches.length > 1) return { state: \"ambiguous\" };\n  }\n  return undefined;\n}\n\n/**\n * Relocate an anchor in a (re)generated patch. The anchor's own file is\n * searched first so a duplicate block elsewhere in the repo cannot make an\n * exact in-file match ambiguous; other files are the rename fallback.\n */\nexport function relocateAnchor(anchor: DiffAnchor, files: FileDiff[]): AnchorResolution {\n  const own: Candidate[] = [];\n  const others: Candidate[] = [];\n  files.forEach((file, fileIndex) => {\n    const isOwn = file.newPath === anchor.file || file.oldPath === anchor.file;\n    (isOwn ? own : others).push(...changedRunCandidates(anchor, file, fileIndex));\n  });\n  return (\n    resolveCandidates(anchor, own) ??\n    resolveCandidates(anchor, others) ?? { state: \"orphaned\" }\n  );\n}\n","/**\n * Convention-based derivation for the review report.\n *\n * Audience and change-type are derived with ZERO authoring burden: audience\n * from the test file's name/location, change-type from a `change:*` tag. This\n * keeps the review capability a formatter concern — no new story API, no\n * adapter changes (see the Evidence-Driven Review design).\n */\n\nimport type { ChangeType, ReviewAudience } from \"../types/review\";\n\n/** Tag prefix that declares a claim's change-type, e.g. `change:bugfix`. */\nconst CHANGE_TAG_PREFIX = \"change:\";\n/** Tag prefix that explicitly overrides the derived audience, e.g. `audience:stakeholder`. */\nconst AUDIENCE_TAG_PREFIX = \"audience:\";\n\nexport const VALID_CHANGE_TYPES: ReadonlySet<ChangeType> = new Set<ChangeType>([\n  \"feature\",\n  \"bugfix\",\n  \"refactor\",\n  \"perf\",\n  \"deps\",\n]);\n\n/**\n * Tests whose name/location marks them as end-to-end / behavioural, and so\n * addressed to the stakeholder audience. Matches `*.e2e.*`, an `e2e/` path\n * segment, and Playwright specs (`.spec.` — Playwright is the e2e tier here).\n */\nconst STAKEHOLDER_FILE = /(?:\\.e2e\\.)|(?:^|\\/)e2e\\/|(?:\\.spec\\.)/i;\n\n/** Source-file extensions we treat as reviewable code. */\nconst CODE_EXTENSIONS = new Set([\n  \"ts\",\n  \"tsx\",\n  \"js\",\n  \"jsx\",\n  \"mjs\",\n  \"cjs\",\n  \"py\",\n  \"go\",\n  \"rs\",\n  \"kt\",\n  \"kts\",\n  \"java\",\n  \"cs\",\n  \"rb\",\n]);\n\n/** Infixes that mark a file as a test, stripped to recover the source base key. */\nconst TEST_INFIX = /\\.(?:story\\.)?(?:int\\.|e2e\\.|unit\\.)?(?:test|spec|cy)\\.[a-z]+$/i;\n\n/**\n * Derive the audience for a claim.\n *\n * An explicit `audience:<value>` tag always wins; otherwise the file convention\n * decides (e2e/spec → stakeholder, everything else → engineer).\n */\nexport function deriveAudience(sourceFile: string, tags: string[]): ReviewAudience {\n  const override = tags\n    .map((t) => t.toLowerCase())\n    .find((t) => t.startsWith(AUDIENCE_TAG_PREFIX));\n  if (override) {\n    const value = override.slice(AUDIENCE_TAG_PREFIX.length);\n    if (value === \"stakeholder\" || value === \"engineer\") return value;\n  }\n  return STAKEHOLDER_FILE.test(sourceFile) ? \"stakeholder\" : \"engineer\";\n}\n\n/** Derive the change-type from a `change:*` tag (defaults to `unknown`). */\nexport function deriveChangeType(tags: string[]): ChangeType {\n  for (const tag of tags) {\n    const lower = tag.toLowerCase();\n    if (lower.startsWith(CHANGE_TAG_PREFIX)) {\n      const value = lower.slice(CHANGE_TAG_PREFIX.length) as ChangeType;\n      if (VALID_CHANGE_TYPES.has(value)) return value;\n    }\n  }\n  return \"unknown\";\n}\n\n/** The file extension (lower-case, no dot), or \"\" if none. */\nfunction extensionOf(path: string): string {\n  const base = path.split(\"/\").pop() ?? path;\n  const dot = base.lastIndexOf(\".\");\n  return dot === -1 ? \"\" : base.slice(dot + 1).toLowerCase();\n}\n\n/** Whether a path looks like a test file. */\nexport function isTestFile(path: string): boolean {\n  return TEST_INFIX.test(path);\n}\n\n/**\n * Whether a changed file is reviewable application code — i.e. code we expect a\n * claim to back. Excludes test files, type decls, and non-code (docs, config,\n * locks). Only these files are eligible for the 🔴 uncovered alarm.\n */\nexport function isReviewableSource(path: string): boolean {\n  if (isTestFile(path)) return false;\n  if (path.endsWith(\".d.ts\")) return false;\n  return CODE_EXTENSIONS.has(extensionOf(path));\n}\n\n/**\n * The correlation key for a test file: its path with the test infix stripped,\n * so `src/foo/bar.int.test.ts` → `src/foo/bar`. Used to match colocated tests\n * to the source file they sit next to (the v1 correlation heuristic).\n */\nexport function testBaseKey(testFile: string): string {\n  return testFile.replace(TEST_INFIX, \"\");\n}\n\n/** The correlation key for a source file: its path with the extension stripped. */\nexport function sourceBaseKey(sourceFile: string): string {\n  const dot = sourceFile.lastIndexOf(\".\");\n  const slash = sourceFile.lastIndexOf(\"/\");\n  return dot > slash ? sourceFile.slice(0, dot) : sourceFile;\n}\n","/**\n * Jev (TypeSafe AI \"System One\"): bounded semantic judgments behind the\n * deterministic agent commands. Rules run first and stay authoritative. Jev\n * fills what rules leave blank (`triage` failures with no `covers`, `goal`\n * scenarios rewritten without shrinking, `review` claims with no `change:*`\n * tag). Every answer carries its probability, so each threshold lives in code\n * next to its consequence.\n *\n * Without `JEV_API_KEY` there is no client and every command produces its\n * deterministic output. With it, Jev adds suggestions and advisories; exit\n * codes stay rule-driven.\n */\n\nexport const JEV_ENDPOINT = \"https://api.typesafe.ai/v1/systemone\";\nexport const JEV_MODEL = \"jev-latest\";\n\nexport type JevQuestion =\n  | { type: \"noul\"; instructions: string }\n  | { type: \"choice\"; instructions: string; criteria: Record<string, string | null> }\n  | { type: \"score\"; instructions: string; criteria: string[] };\n\nexport type JevAnswer =\n  | { type: \"noul\"; noul: number }\n  | { type: \"choice\"; choice: string; probabilities: Record<string, number>; confidence: number }\n  | { type: \"score\"; score: number; probabilities: Record<string, number>; confidence: number };\n\nexport interface JevClient {\n  model: string;\n  ask(state: unknown, questions: Record<string, JevQuestion>): Promise<Record<string, JevAnswer>>;\n}\n\nexport interface JevClientOptions {\n  apiKey: string;\n  model?: string;\n  endpoint?: string;\n  fetch?: typeof globalThis.fetch;\n  timeoutMs?: number;\n}\n\nexport function createJevClient(options: JevClientOptions): JevClient {\n  const {\n    apiKey,\n    model = JEV_MODEL,\n    endpoint = JEV_ENDPOINT,\n    fetch = globalThis.fetch,\n    timeoutMs = 10_000,\n  } = options;\n  return {\n    model,\n    // One attempt per question set; add backoff on 429/529 if a loop hits rate limits.\n    async ask(state, questions) {\n      const response = await fetch(endpoint, {\n        method: \"POST\",\n        headers: { Authorization: `Bearer ${apiKey}`, \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ model, state, questions }),\n        signal: AbortSignal.timeout(timeoutMs),\n      });\n      if (!response.ok) throw new Error(`Jev ${response.status}: ${(await response.text()).slice(0, 200)}`);\n      const body = (await response.json()) as { answers?: Record<string, JevAnswer> };\n      if (!body.answers) throw new Error(\"Jev response has no answers\");\n      return body.answers;\n    },\n  };\n}\n\n/** A client when `JEV_API_KEY` is set, else undefined (deterministic output only). */\nexport function jevFromEnv(env: NodeJS.ProcessEnv = process.env): JevClient | undefined {\n  const apiKey = env.JEV_API_KEY;\n  if (!apiKey) return undefined;\n  return createJevClient({\n    apiKey,\n    ...(env.JEV_MODEL ? { model: env.JEV_MODEL } : {}),\n    ...(env.JEV_ENDPOINT ? { endpoint: env.JEV_ENDPOINT } : {}),\n  });\n}\n\n/** Answer as a choice, or undefined when Jev returned a different shape. */\nexport function asChoice(answer: JevAnswer | undefined): Extract<JevAnswer, { type: \"choice\" }> | undefined {\n  return answer?.type === \"choice\" ? answer : undefined;\n}\n\nexport function asNoul(answer: JevAnswer | undefined): number | undefined {\n  return answer?.type === \"noul\" ? answer.noul : undefined;\n}\n","import type { TestCaseResult, TestRunResult, TestStatus } from \"executable-stories-core/types/test-result\";\n\nimport { gradeEvidence } from \"../review/build-review\";\nimport { deriveAudience } from \"../review/conventions\";\nimport type { EvidenceStrength } from \"../types/review\";\n\n/**\n * Requirement-first view of a run. Groups scenarios under the ticket/user-story\n * they verify, rolls up the code each requirement covers and whether it passed,\n * and surfaces two gaps a scenario-keyed index hides: requirements with a failing\n * scenario, and scenarios linked to no requirement at all (untraced behavior).\n *\n * The set of requirements is derived from the tickets found on scenarios — the\n * tests are the source of truth, so a requirement only appears once a scenario\n * claims it.\n */\nexport interface TraceabilityRequirement {\n  /** Ticket / user-story id (e.g. \"US-101\", \"JIRA-42\"). */\n  ticket: string;\n  /** Direct URL when a scenario supplied one. */\n  url?: string;\n  /** \"verified\" = every scenario passed; \"failing\" = at least one failed; \"incomplete\" = only skipped/pending. */\n  status: \"verified\" | \"failing\" | \"incomplete\";\n  scenarios: Array<{\n    id: string;\n    title: string;\n    status: TestStatus;\n    sourceFile: string;\n    sourceLine: number;\n    covers: string[];\n  }>;\n  /** Union of every covered path across this requirement's scenarios. */\n  covers: string[];\n}\n\nexport interface TraceabilityMatrix {\n  schemaVersion: \"1.0\";\n  generatedAt: string;\n  run: {\n    startedAt: string;\n    finishedAt: string;\n    gitSha?: string;\n    branch?: string;\n  };\n  summary: {\n    requirements: number;\n    requirementsVerified: number;\n    requirementsFailing: number;\n    scenarios: number;\n    untracedScenarios: number;\n  };\n  requirements: TraceabilityRequirement[];\n  /** Scenarios with no ticket — behavior verified but not linked to a requirement. */\n  untraced: Array<{\n    id: string;\n    title: string;\n    status: TestStatus;\n    sourceFile: string;\n    sourceLine: number;\n  }>;\n}\n\nexport class TraceabilityMatrixFormatter {\n  format(run: TestRunResult): string {\n    const matrix = toTraceabilityMatrix(run);\n    const lines: string[] = [];\n\n    lines.push(\"# Traceability Matrix\");\n    lines.push(\"\");\n    lines.push(`Generated: ${matrix.generatedAt}`);\n    lines.push(`Run: ${matrix.run.startedAt} to ${matrix.run.finishedAt}`);\n    if (matrix.run.branch) lines.push(`Branch: ${matrix.run.branch}`);\n    if (matrix.run.gitSha) lines.push(`Commit: ${matrix.run.gitSha}`);\n    lines.push(\"\");\n    lines.push(\"| Requirements | Verified | Failing | Scenarios | Untraced |\");\n    lines.push(\"| ---: | ---: | ---: | ---: | ---: |\");\n    lines.push(\n      `| ${matrix.summary.requirements} | ${matrix.summary.requirementsVerified} | ${matrix.summary.requirementsFailing} | ${matrix.summary.scenarios} | ${matrix.summary.untracedScenarios} |`,\n    );\n    lines.push(\"\");\n\n    for (const req of matrix.requirements) {\n      const heading = req.url ? `[${req.ticket}](${req.url})` : req.ticket;\n      lines.push(`## ${heading}`);\n      lines.push(\"\");\n      lines.push(`Status: ${renderRequirementStatus(req.status)}`);\n      if (req.covers.length > 0) {\n        lines.push(`Covers: ${req.covers.map((path) => `\\`${path}\\``).join(\", \")}`);\n      }\n      lines.push(\"\");\n      lines.push(\"| Status | Scenario | Source | Covers |\");\n      lines.push(\"| --- | --- | --- | --- |\");\n      for (const scenario of req.scenarios) {\n        const source = `${scenario.sourceFile}:${scenario.sourceLine}`;\n        const covers = scenario.covers.length > 0 ? scenario.covers.map((path) => `\\`${path}\\``).join(\", \") : \"\";\n        lines.push(`| ${scenario.status} | ${escapePipe(scenario.title)} | \\`${source}\\` | ${covers} |`);\n      }\n      lines.push(\"\");\n    }\n\n    if (matrix.untraced.length > 0) {\n      lines.push(\"## Untraced scenarios\");\n      lines.push(\"\");\n      lines.push(\"Behavior with no requirement link. Add a `ticket` to each so it appears against a requirement.\");\n      lines.push(\"\");\n      lines.push(\"| Status | Scenario | Source |\");\n      lines.push(\"| --- | --- | --- |\");\n      for (const scenario of matrix.untraced) {\n        const source = `${scenario.sourceFile}:${scenario.sourceLine}`;\n        lines.push(`| ${scenario.status} | ${escapePipe(scenario.title)} | \\`${source}\\` |`);\n      }\n      lines.push(\"\");\n    }\n\n    return lines.join(\"\\n\").trimEnd();\n  }\n}\n\n/**\n * Flat CSV projection of the traceability matrix for auditors and\n * spreadsheets: one row per (requirement, scenario) pair, plus one row per\n * untraced scenario with an empty ticket column. Same derivation as the\n * Markdown matrix, so the two can never disagree.\n */\nexport class TraceabilityCsvFormatter {\n  format(run: TestRunResult): string {\n    const matrix = toTraceabilityMatrix(run);\n    // Evidence grade per scenario, same grading the Evidence Review uses\n    // (screenshot/trace/mutation/failing-first signals), so the audit CSV says\n    // not just \"passed\" but how credible the proof is. Duplicate scenario ids\n    // keep the WEAKEST grade — an audit column must never overstate.\n    const RANK: Record<EvidenceStrength, number> = { none: 0, weak: 1, moderate: 2, strong: 3 };\n    const gradeById = new Map<string, EvidenceStrength>();\n    for (const tc of run.testCases) {\n      const strength = gradeEvidence(tc, deriveAudience(tc.sourceFile, tc.tags)).strength;\n      const prior = gradeById.get(tc.id);\n      if (prior === undefined || RANK[strength] < RANK[prior]) gradeById.set(tc.id, strength);\n    }\n    const rows: string[][] = [\n      [\"ticket\", \"ticket_url\", \"requirement_status\", \"scenario_id\", \"scenario_title\", \"scenario_status\", \"evidence_grade\", \"source\", \"covers\"],\n    ];\n    for (const req of matrix.requirements) {\n      for (const s of req.scenarios) {\n        rows.push([\n          req.ticket,\n          req.url ?? \"\",\n          req.status,\n          s.id,\n          s.title,\n          s.status,\n          gradeById.get(s.id) ?? \"\",\n          `${s.sourceFile}:${s.sourceLine}`,\n          s.covers.join(\"; \"),\n        ]);\n      }\n    }\n    for (const s of matrix.untraced) {\n      rows.push([\"\", \"\", \"untraced\", s.id, s.title, s.status, gradeById.get(s.id) ?? \"\", `${s.sourceFile}:${s.sourceLine}`, \"\"]);\n    }\n    return rows.map((row) => row.map(csvCell).join(\",\")).join(\"\\r\\n\");\n  }\n}\n\n/**\n * RFC 4180 quoting, plus formula-injection neutralization: a cell starting\n * with = + - @ (or tab/CR) executes as a formula when the audit CSV is opened\n * in Excel/Sheets, and every cell here is adapter-supplied (ticket ids,\n * titles, URLs, paths). Prefix a leading ' so it renders as text (OWASP CSV\n * injection guidance). No cell in this export is numeric, so the guard never\n * corrupts a legitimate value.\n */\nfunction csvCell(value: string): string {\n  const guarded = /^[=+\\-@\\t\\r]/.test(value) ? `'${value}` : value;\n  return /[\",\\r\\n]/.test(guarded) ? `\"${guarded.replace(/\"/g, '\"\"')}\"` : guarded;\n}\n\nexport function toTraceabilityMatrix(run: TestRunResult): TraceabilityMatrix {\n  const sorted = [...run.testCases].sort((a, b) => a.id.localeCompare(b.id));\n\n  const byTicket = new Map<string, { url?: string; cases: TestCaseResult[] }>();\n  const untraced: TraceabilityMatrix[\"untraced\"] = [];\n\n  for (const tc of sorted) {\n    const tickets = tc.story.tickets ?? [];\n    if (tickets.length === 0) {\n      untraced.push({\n        id: tc.id,\n        title: tc.story.scenario,\n        status: tc.status,\n        sourceFile: tc.sourceFile,\n        sourceLine: tc.sourceLine,\n      });\n      continue;\n    }\n    for (const ticket of tickets) {\n      const entry = byTicket.get(ticket.id) ?? { url: ticket.url, cases: [] };\n      if (!entry.url && ticket.url) entry.url = ticket.url;\n      entry.cases.push(tc);\n      byTicket.set(ticket.id, entry);\n    }\n  }\n\n  const requirements: TraceabilityRequirement[] = [...byTicket.entries()]\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([ticket, entry]) => {\n      const scenarios = entry.cases.map((tc) => ({\n        id: tc.id,\n        title: tc.story.scenario,\n        status: tc.status,\n        sourceFile: tc.sourceFile,\n        sourceLine: tc.sourceLine,\n        covers: tc.story.covers ?? [],\n      }));\n      const covers = [...new Set(scenarios.flatMap((s) => s.covers))].sort();\n      return { ticket, url: entry.url, status: requirementStatus(entry.cases), scenarios, covers };\n    });\n\n  return {\n    schemaVersion: \"1.0\",\n    generatedAt: new Date().toISOString(),\n    run: {\n      startedAt: new Date(run.startedAtMs).toISOString(),\n      finishedAt: new Date(run.finishedAtMs).toISOString(),\n      gitSha: run.gitSha,\n      branch: run.ci?.branch,\n    },\n    summary: {\n      requirements: requirements.length,\n      requirementsVerified: requirements.filter((r) => r.status === \"verified\").length,\n      requirementsFailing: requirements.filter((r) => r.status === \"failing\").length,\n      scenarios: run.testCases.length,\n      untracedScenarios: untraced.length,\n    },\n    requirements,\n    untraced,\n  };\n}\n\nfunction requirementStatus(cases: TestCaseResult[]): TraceabilityRequirement[\"status\"] {\n  if (cases.some((tc) => tc.status === \"failed\")) return \"failing\";\n  if (cases.some((tc) => tc.status === \"passed\")) return \"verified\";\n  return \"incomplete\";\n}\n\nfunction renderRequirementStatus(status: TraceabilityRequirement[\"status\"]): string {\n  switch (status) {\n    case \"verified\":\n      return \"verified (all scenarios passed)\";\n    case \"failing\":\n      return \"failing (a scenario failed)\";\n    default:\n      return \"incomplete (no scenario passed yet)\";\n  }\n}\n\nfunction escapePipe(value: string): string {\n  return value.replace(/\\|/g, \"\\\\|\");\n}\n","/**\n * Synthesize .feature file text and a line map from TestCaseResult[].\n *\n * Used to produce Source and GherkinDocument messages when real .feature\n * files don't exist (all test cases come from e.g. Jest/Vitest/Playwright).\n */\n\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\n\n/** Map from scenario name → { scenarioLine, stepLines: Map<stepIndex, line> } */\nexport interface LineMap {\n  featureLine: number;\n  scenarios: Map<\n    string,\n    { scenarioLine: number; stepLines: Map<number, number> }\n  >;\n  /** Tag lines for each scenario, keyed by scenario name */\n  scenarioTagLines: Map<string, number>;\n  /** Feature-level tag line (if any) */\n  featureTagLine?: number;\n}\n\nexport interface SynthesizedFeature {\n  /** The synthesized .feature text */\n  text: string;\n  /** Line map for building the GherkinDocument AST */\n  lineMap: LineMap;\n  /** Extracted feature name */\n  featureName: string;\n  /** Feature-level tags (union of all scenario tags) */\n  featureTags: string[];\n}\n\n/**\n * Extract a feature name from grouped test cases.\n *\n * Uses the first element of the first titlePath, or derives from the URI.\n */\nexport function extractFeatureName(\n  testCases: TestCaseResult[],\n  uri: string\n): string {\n  for (const tc of testCases) {\n    if (tc.titlePath.length > 0) {\n      return tc.titlePath[0];\n    }\n  }\n  // Fallback: derive from filename\n  const basename = uri.replace(/^.*[\\\\/]/, \"\").replace(/\\.[^.]+$/, \"\");\n  return basename\n    .replace(/[-_]+/g, \" \")\n    .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n/**\n * Synthesize a .feature file from a group of test cases belonging to the same source file.\n */\nexport function synthesizeFeature(\n  uri: string,\n  testCases: TestCaseResult[]\n): SynthesizedFeature {\n  const featureName = extractFeatureName(testCases, uri);\n\n  // Collect feature-level tags (union of all scenario tags)\n  const featureTagSet = new Set<string>();\n  for (const tc of testCases) {\n    for (const tag of tc.tags) {\n      featureTagSet.add(tag);\n    }\n  }\n  const featureTags = [...featureTagSet].sort();\n\n  const lines: string[] = [];\n  const lineMap: LineMap = {\n    featureLine: 0,\n    scenarios: new Map(),\n    scenarioTagLines: new Map(),\n  };\n\n  let currentLine = 1;\n\n  // Feature-level tags\n  if (featureTags.length > 0) {\n    lines.push(featureTags.map((t) => `@${t}`).join(\" \"));\n    lineMap.featureTagLine = currentLine;\n    currentLine++;\n  }\n\n  // Feature declaration\n  lines.push(`Feature: ${featureName}`);\n  lineMap.featureLine = currentLine;\n  currentLine++;\n\n  // Blank line after feature\n  lines.push(\"\");\n  currentLine++;\n\n  for (const tc of testCases) {\n    const scenario = tc.story.scenario;\n\n    // Scenario tags\n    if (tc.tags.length > 0) {\n      lines.push(`  ${tc.tags.map((t) => `@${t}`).join(\" \")}`);\n      lineMap.scenarioTagLines.set(scenario, currentLine);\n      currentLine++;\n    }\n\n    // Scenario declaration\n    const scenarioLine = currentLine;\n    lines.push(`  Scenario: ${scenario}`);\n    currentLine++;\n\n    // Steps\n    const stepLines = new Map<number, number>();\n    for (let i = 0; i < tc.story.steps.length; i++) {\n      const step = tc.story.steps[i];\n      stepLines.set(i, currentLine);\n      lines.push(`    ${step.keyword} ${step.text}`);\n      currentLine++;\n    }\n\n    lineMap.scenarios.set(scenario, { scenarioLine, stepLines });\n\n    // Blank line between scenarios\n    lines.push(\"\");\n    currentLine++;\n  }\n\n  return {\n    text: lines.join(\"\\n\"),\n    lineMap,\n    featureName,\n    featureTags,\n  };\n}\n","/**\n * Build a GherkinDocument envelope from synthesized feature data.\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type { DocEntry, StepKeyword, StoryStep } from \"executable-stories-core/types/story\";\nimport type {\n  GherkinDocument,\n  Feature,\n  FeatureChild,\n  Scenario,\n  Step,\n  Tag,\n  Envelope,\n  DocString,\n  DataTable,\n  TableRow,\n} from \"executable-stories-core/types/cucumber-messages\";\nimport type { SynthesizedFeature } from \"./synthesize-feature\";\nimport { deterministicId, keywordToKeywordType } from \"../../utils/cucumber-messages\";\n\n/**\n * Build GherkinDocument + Source envelopes for a group of test cases from one file.\n */\nexport function buildGherkinDocumentEnvelopes(\n  uri: string,\n  testCases: TestCaseResult[],\n  synthesized: SynthesizedFeature,\n  salt: string\n): { sourceEnvelope: Envelope; gherkinDocumentEnvelope: Envelope } {\n  const { lineMap, featureName, featureTags, text } = synthesized;\n\n  // Build feature-level tags\n  const featureTagNodes: Tag[] = featureTags.map((tag) => ({\n    location: {\n      line: lineMap.featureTagLine ?? 1,\n      column: undefined,\n    },\n    name: `@${tag}`,\n    id: deterministicId(\"featureTag\", salt, uri, tag),\n  }));\n\n  // Build children (scenarios)\n  const children: FeatureChild[] = [];\n\n  for (const tc of testCases) {\n    const scenarioName = tc.story.scenario;\n    const scenarioInfo = lineMap.scenarios.get(scenarioName);\n    if (!scenarioInfo) continue;\n\n    const scenarioId = deterministicId(\"scenario\", salt, uri, scenarioName);\n\n    // Build scenario tags\n    const scenarioTags: Tag[] = tc.tags.map((tag) => ({\n      location: {\n        line: lineMap.scenarioTagLines.get(scenarioName) ?? scenarioInfo.scenarioLine,\n      },\n      name: `@${tag}`,\n      id: deterministicId(\"scenarioTag\", salt, uri, scenarioName, tag),\n    }));\n\n    // An AST step keeps its own keyword type: And/But stay \"Conjunction\" here,\n    // as they do in Gherkin's own parser. Inheriting the previous non-\n    // conjunction type is a pickle concern, and resolvePickleStepTypes does it.\n    const steps: Step[] = tc.story.steps.map((step, i) => {\n      const keyword = step.keyword as StepKeyword;\n\n      const stepLine = scenarioInfo.stepLines.get(i) ?? 0;\n      const astStep: Step = {\n        location: { line: stepLine },\n        keyword: `${keyword} `,\n        keywordType: keywordToKeywordType(keyword),\n        text: step.text,\n        id: deterministicId(\"astStep\", salt, uri, scenarioName, String(i)),\n      };\n\n      // Convert doc entries to DocString/DataTable\n      const { docString, dataTable } = buildStepArguments(step, stepLine);\n      if (docString) astStep.docString = docString;\n      if (dataTable) astStep.dataTable = dataTable;\n\n      return astStep;\n    });\n\n    const scenario: Scenario = {\n      location: { line: scenarioInfo.scenarioLine },\n      tags: scenarioTags,\n      keyword: \"Scenario\",\n      name: scenarioName,\n      description: \"\",\n      steps,\n      id: scenarioId,\n    };\n\n    children.push({ scenario });\n  }\n\n  const feature: Feature = {\n    location: { line: lineMap.featureLine },\n    tags: featureTagNodes,\n    language: \"en\",\n    keyword: \"Feature\",\n    name: featureName,\n    description: \"\",\n    children,\n  };\n\n  const gherkinDocument: GherkinDocument = { uri, feature };\n\n  return {\n    sourceEnvelope: {\n      source: {\n        uri,\n        data: text,\n        mediaType: \"text/x.cucumber.gherkin+plain\",\n      },\n    },\n    gherkinDocumentEnvelope: { gherkinDocument },\n  };\n}\n\n/**\n * Convert step doc entries to DocString or DataTable for the GherkinDocument AST.\n *\n * Priority: first \"table\" doc → DataTable, else first \"code\"/\"note\"/\"section\"/\"mermaid\" → DocString.\n * Screenshots are handled as attachments, not arguments.\n */\nfunction buildStepArguments(\n  step: StoryStep,\n  stepLine: number\n): { docString?: DocString; dataTable?: DataTable } {\n  if (!step.docs || step.docs.length === 0) return {};\n\n  // Look for table first (takes priority)\n  const tableDocs = step.docs.filter((d): d is Extract<DocEntry, { kind: \"table\" }> => d.kind === \"table\");\n  if (tableDocs.length > 0) {\n    const table = tableDocs[0];\n    return { dataTable: buildDataTable(table, stepLine + 1) };\n  }\n\n  // Look for doc-string-like entries\n  for (const doc of step.docs) {\n    const ds = docEntryToDocString(doc, stepLine + 1);\n    if (ds) return { docString: ds };\n  }\n\n  return {};\n}\n\nfunction docEntryToDocString(doc: DocEntry, line: number): DocString | undefined {\n  switch (doc.kind) {\n    case \"code\":\n      return {\n        location: { line },\n        mediaType: doc.lang,\n        content: doc.content,\n        delimiter: '\"\"\"',\n      };\n    case \"note\":\n      return {\n        location: { line },\n        mediaType: \"text/plain\",\n        content: doc.text,\n        delimiter: '\"\"\"',\n      };\n    case \"section\":\n      return {\n        location: { line },\n        mediaType: \"text/markdown\",\n        content: doc.markdown,\n        delimiter: '\"\"\"',\n      };\n    case \"mermaid\":\n      return {\n        location: { line },\n        mediaType: \"text/x-mermaid\",\n        content: doc.code,\n        delimiter: '\"\"\"',\n      };\n    case \"kv\":\n      return {\n        location: { line },\n        mediaType: \"text/plain\",\n        content: `${doc.label}: ${typeof doc.value === \"string\" ? doc.value : JSON.stringify(doc.value)}`,\n        delimiter: '\"\"\"',\n      };\n    case \"link\":\n      return {\n        location: { line },\n        mediaType: \"text/markdown\",\n        content: `[${doc.label}](${doc.url})`,\n        delimiter: '\"\"\"',\n      };\n    case \"custom\":\n      return {\n        location: { line },\n        mediaType: \"application/json\",\n        content: JSON.stringify(doc.data, null, 2),\n        delimiter: '\"\"\"',\n      };\n    case \"state\":\n      return {\n        location: { line },\n        mediaType: \"application/json\",\n        content: JSON.stringify({ state: doc.label ?? \"State\", value: doc.value ?? null }, null, 2),\n        delimiter: '\"\"\"',\n      };\n    case \"tag\":\n      return {\n        location: { line },\n        mediaType: \"text/plain\",\n        content: doc.names.map((n) => `@${n}`).join(\" \"),\n        delimiter: '\"\"\"',\n      };\n    // Deliberately not doc strings: a table becomes a DataTable, and an image,\n    // clip or html fragment has no textual body a Gherkin doc string could\n    // carry. Listed rather than left to a `default` so doc kind fourteen is a\n    // decision someone makes.\n    case \"table\":\n    case \"screenshot\":\n    case \"video\":\n    case \"html\":\n      return undefined;\n  }\n\n  return assertNever(doc, \"Gherkin document: unhandled doc kind\");\n}\n\nfunction buildDataTable(\n  table: Extract<DocEntry, { kind: \"table\" }>,\n  line: number\n): DataTable {\n  const rows: TableRow[] = [];\n\n  // Header row\n  rows.push({\n    location: { line },\n    cells: table.columns.map((col) => ({\n      location: { line },\n      value: col,\n    })),\n    id: \"\",\n  });\n\n  // Data rows\n  for (let r = 0; r < table.rows.length; r++) {\n    const rowLine = line + 1 + r;\n    rows.push({\n      location: { line: rowLine },\n      cells: table.rows[r].map((cell) => ({\n        location: { line: rowLine },\n        value: cell,\n      })),\n      id: \"\",\n    });\n  }\n\n  return {\n    location: { line },\n    rows,\n  };\n}\n","/**\n * Utility functions for Cucumber Messages NDJSON format.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type {\n  Timestamp,\n  Duration,\n  KeywordType,\n  PickleStepType,\n  TestStepResultStatus,\n} from \"executable-stories-core/types/cucumber-messages\";\nimport type { TestStatus } from \"executable-stories-core/types/test-result\";\nimport type { StepKeyword } from \"executable-stories-core/types/story\";\n\n/**\n * Convert epoch milliseconds to protobuf Timestamp.\n */\nexport function msToTimestamp(ms: number): Timestamp {\n  const seconds = Math.floor(ms / 1000);\n  const nanos = Math.round((ms % 1000) * 1_000_000);\n  return { seconds, nanos };\n}\n\n/**\n * Convert milliseconds to protobuf Duration.\n */\nexport function msToDuration(ms: number): Duration {\n  const seconds = Math.floor(ms / 1000);\n  const nanos = Math.round((ms % 1000) * 1_000_000);\n  return { seconds, nanos };\n}\n\n/**\n * Map a StepKeyword to a Cucumber KeywordType.\n *\n * And/But/* inherit from the previous non-conjunction keyword type.\n */\nexport function keywordToKeywordType(keyword: StepKeyword): KeywordType {\n  switch (keyword) {\n    case \"Given\":\n      return \"Context\";\n    case \"When\":\n      return \"Action\";\n    case \"Then\":\n      return \"Outcome\";\n    case \"And\":\n    case \"But\":\n      return \"Conjunction\";\n    default:\n      return \"Unknown\";\n  }\n}\n\n/**\n * Resolve the effective PickleStepType for a sequence of steps,\n * inheriting the previous non-conjunction type for And/But.\n *\n * Returns an array of resolved types, one per step.\n */\nexport function resolvePickleStepTypes(\n  keywords: StepKeyword[]\n): PickleStepType[] {\n  let lastNonConjunction: PickleStepType = \"Unknown\";\n  return keywords.map((kw) => {\n    const kt = keywordToKeywordType(kw);\n    if (kt === \"Conjunction\") {\n      return lastNonConjunction;\n    }\n    const resolved = keywordTypeToPickleStepType(kt);\n    lastNonConjunction = resolved;\n    return resolved;\n  });\n}\n\n/**\n * Convert a non-conjunction KeywordType to PickleStepType.\n */\nfunction keywordTypeToPickleStepType(kt: KeywordType): PickleStepType {\n  switch (kt) {\n    case \"Context\":\n      return \"Context\";\n    case \"Action\":\n      return \"Action\";\n    case \"Outcome\":\n      return \"Outcome\";\n    default:\n      return \"Unknown\";\n  }\n}\n\n/**\n * Map TestStatus to Cucumber TestStepResultStatus.\n */\nexport function statusToCucumberStatus(\n  status: TestStatus\n): TestStepResultStatus {\n  switch (status) {\n    case \"passed\":\n      return \"PASSED\";\n    case \"failed\":\n      return \"FAILED\";\n    case \"skipped\":\n      return \"SKIPPED\";\n    case \"pending\":\n      return \"PENDING\";\n    default:\n      return \"UNKNOWN\";\n  }\n}\n\n/**\n * Generate a deterministic ID using SHA-1.\n *\n * @param kind - Namespace to prevent collisions between entity types (e.g., \"pickle\", \"testCase\")\n * @param salt - Optional salt from options (idSalt)\n * @param parts - Strings to hash\n * @returns 36-character hex string (UUID-length without dashes)\n */\nexport function deterministicId(\n  kind: string,\n  salt: string,\n  ...parts: string[]\n): string {\n  const input = [salt, kind, ...parts].join(\"::\");\n  return createHash(\"sha1\").update(input).digest(\"hex\").slice(0, 36);\n}\n","/**\n * Build Pickle envelopes from test cases and GherkinDocument data.\n *\n * Each TestCaseResult becomes one Pickle (the compiled, runnable scenario).\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type { DocEntry, StepKeyword, StoryStep } from \"executable-stories-core/types/story\";\nimport type {\n  Pickle,\n  PickleStep,\n  PickleTag,\n  PickleStepArgument,\n  PickleDocString,\n  PickleTable,\n  PickleTableRow,\n  Envelope,\n} from \"executable-stories-core/types/cucumber-messages\";\nimport {\n  deterministicId,\n  resolvePickleStepTypes,\n} from \"../../utils/cucumber-messages\";\n\n/**\n * Build Pickle envelopes for a group of test cases from one file.\n */\nexport function buildPickleEnvelopes(\n  uri: string,\n  testCases: TestCaseResult[],\n  salt: string\n): Envelope[] {\n  const envelopes: Envelope[] = [];\n\n  for (const tc of testCases) {\n    const scenarioName = tc.story.scenario;\n    const pickleId = deterministicId(\"pickle\", salt, uri, scenarioName);\n    const scenarioAstId = deterministicId(\"scenario\", salt, uri, scenarioName);\n\n    // Resolve step types with And/But inheritance\n    const keywords = tc.story.steps.map((s) => s.keyword as StepKeyword);\n    const resolvedTypes = resolvePickleStepTypes(keywords);\n\n    const pickleSteps: PickleStep[] = tc.story.steps.map((step, i) => {\n      const ps: PickleStep = {\n        astNodeIds: [\n          deterministicId(\"astStep\", salt, uri, scenarioName, String(i)),\n        ],\n        id: deterministicId(\"pickleStep\", salt, uri, scenarioName, String(i)),\n        type: resolvedTypes[i],\n        text: step.text,\n      };\n\n      const argument = buildPickleStepArgument(step);\n      if (argument) ps.argument = argument;\n\n      return ps;\n    });\n\n    const pickleTags: PickleTag[] = tc.tags.map((tag) => ({\n      name: `@${tag}`,\n      astNodeId: deterministicId(\"scenarioTag\", salt, uri, scenarioName, tag),\n    }));\n\n    const pickle: Pickle = {\n      id: pickleId,\n      uri,\n      name: scenarioName,\n      language: \"en\",\n      steps: pickleSteps,\n      tags: pickleTags,\n      astNodeIds: [scenarioAstId],\n    };\n\n    envelopes.push({ pickle });\n  }\n\n  return envelopes;\n}\n\n/**\n * Build a PickleStepArgument from step docs.\n * Priority: first table → PickleTable, else first doc-string-like → PickleDocString.\n */\nfunction buildPickleStepArgument(step: StoryStep): PickleStepArgument | undefined {\n  if (!step.docs || step.docs.length === 0) return undefined;\n\n  // Table takes priority\n  const tableDocs = step.docs.filter(\n    (d): d is Extract<DocEntry, { kind: \"table\" }> => d.kind === \"table\"\n  );\n  if (tableDocs.length > 0) {\n    return { dataTable: buildPickleTable(tableDocs[0]) };\n  }\n\n  // Doc-string-like entries\n  for (const doc of step.docs) {\n    const ds = docEntryToPickleDocString(doc);\n    if (ds) return { docString: ds };\n  }\n\n  return undefined;\n}\n\nfunction docEntryToPickleDocString(doc: DocEntry): PickleDocString | undefined {\n  switch (doc.kind) {\n    case \"code\":\n      return { mediaType: doc.lang, content: doc.content };\n    case \"note\":\n      return { mediaType: \"text/plain\", content: doc.text };\n    case \"section\":\n      return { mediaType: \"text/markdown\", content: doc.markdown };\n    case \"mermaid\":\n      return { mediaType: \"text/x-mermaid\", content: doc.code };\n    case \"kv\":\n      return {\n        mediaType: \"text/plain\",\n        content: `${doc.label}: ${typeof doc.value === \"string\" ? doc.value : JSON.stringify(doc.value)}`,\n      };\n    case \"link\":\n      return { mediaType: \"text/markdown\", content: `[${doc.label}](${doc.url})` };\n    case \"custom\":\n      return { mediaType: \"application/json\", content: JSON.stringify(doc.data, null, 2) };\n    case \"state\":\n      return {\n        mediaType: \"application/json\",\n        content: JSON.stringify({ state: doc.label ?? \"State\", value: doc.value ?? null }, null, 2),\n      };\n    case \"tag\":\n      return { mediaType: \"text/plain\", content: doc.names.map((n) => `@${n}`).join(\" \") };\n    // See build-gherkin-document.ts: these carry no textual body.\n    case \"table\":\n    case \"screenshot\":\n    case \"video\":\n    case \"html\":\n      return undefined;\n  }\n\n  return assertNever(doc, \"Pickle: unhandled doc kind\");\n}\n\nfunction buildPickleTable(\n  table: Extract<DocEntry, { kind: \"table\" }>\n): PickleTable {\n  const rows: PickleTableRow[] = [];\n\n  // Header row\n  rows.push({\n    cells: table.columns.map((col) => ({ value: col })),\n  });\n\n  // Data rows\n  for (const row of table.rows) {\n    rows.push({\n      cells: row.map((cell) => ({ value: cell })),\n    });\n  }\n\n  return { rows };\n}\n","/**\n * Build execution envelopes: TestCase, TestCaseStarted/Finished,\n * TestStepStarted/Finished, and Attachment messages.\n *\n * Attachment placement:\n * - Step-level doc screenshots → Attachment tied to that specific step\n * - Test-case level attachments → Attachment tied to failed step or last step\n * - All Attachment envelopes appear after the relevant TestStepFinished\n */\n\nimport type { TestCaseResult, TestRunResult } from \"executable-stories-core/types/test-result\";\nimport type { StoryStep } from \"executable-stories-core/types/story\";\nimport type {\n  Envelope,\n  TestCase,\n  TestStep,\n  AttachmentContentEncoding,\n} from \"executable-stories-core/types/cucumber-messages\";\nimport {\n  deterministicId,\n  msToTimestamp,\n  msToDuration,\n  statusToCucumberStatus,\n} from \"../../utils/cucumber-messages\";\n\n/**\n * Build TestRunStarted envelope.\n */\nexport function buildTestRunStarted(run: TestRunResult): Envelope {\n  return {\n    testRunStarted: {\n      timestamp: msToTimestamp(run.startedAtMs),\n    },\n  };\n}\n\n/**\n * Build TestRunFinished envelope.\n */\nexport function buildTestRunFinished(run: TestRunResult): Envelope {\n  const allPassed = run.testCases.every((tc) => tc.status === \"passed\");\n  return {\n    testRunFinished: {\n      timestamp: msToTimestamp(run.finishedAtMs),\n      success: allPassed,\n    },\n  };\n}\n\n/**\n * Build all execution envelopes for a single test case:\n * TestCase, then for each attempt:\n *   TestCaseStarted, [TestStepStarted + TestStepFinished + Attachment*]*, TestCaseFinished\n *\n * When tc.attempts exists with multiple entries, prior attempts are emitted\n * with willBeRetried=true, and the final attempt with willBeRetried=false.\n */\nexport function buildTestCaseExecutionEnvelopes(\n  uri: string,\n  tc: TestCaseResult,\n  salt: string\n): Envelope[] {\n  const envelopes: Envelope[] = [];\n  const scenarioName = tc.story.scenario;\n\n  const pickleId = deterministicId(\"pickle\", salt, uri, scenarioName);\n  const testCaseId = deterministicId(\"testCase\", salt, uri, scenarioName);\n\n  // Build test steps (shared across all attempts — the TestCase is the same)\n  const testSteps: TestStep[] = tc.story.steps.map((_step, i) => ({\n    id: deterministicId(\"testStep\", salt, uri, scenarioName, String(i)),\n    pickleStepId: deterministicId(\n      \"pickleStep\",\n      salt,\n      uri,\n      scenarioName,\n      String(i)\n    ),\n    stepDefinitionIds: [],\n  }));\n\n  // TestCase envelope (emitted once, before all attempts)\n  const testCase: TestCase = {\n    id: testCaseId,\n    pickleId,\n    testSteps,\n  };\n  envelopes.push({ testCase });\n\n  // If there are explicit attempts, emit each one\n  if (tc.attempts && tc.attempts.length > 1) {\n    for (let a = 0; a < tc.attempts.length; a++) {\n      const attempt = tc.attempts[a];\n      const isLastAttempt = a === tc.attempts.length - 1;\n\n      const attemptEnvelopes = buildAttemptEnvelopes({\n        testCaseId,\n        testSteps,\n        tc,\n        uri,\n        scenarioName,\n        salt,\n        attemptNumber: attempt.attempt,\n        attemptStatus: attempt.status,\n        attemptDurationMs: attempt.durationMs,\n        attemptErrorMessage: attempt.errorMessage,\n        willBeRetried: !isLastAttempt,\n        // Only emit attachments and doc screenshots on the final attempt\n        emitAttachments: isLastAttempt,\n      });\n      envelopes.push(...attemptEnvelopes);\n    }\n  } else {\n    // Single attempt (normal case)\n    const attemptEnvelopes = buildAttemptEnvelopes({\n      testCaseId,\n      testSteps,\n      tc,\n      uri,\n      scenarioName,\n      salt,\n      attemptNumber: tc.retry,\n      attemptStatus: undefined, // Use tc.stepResults\n      attemptDurationMs: undefined,\n      attemptErrorMessage: undefined,\n      willBeRetried: false,\n      emitAttachments: true,\n    });\n    envelopes.push(...attemptEnvelopes);\n  }\n\n  return envelopes;\n}\n\ninterface AttemptParams {\n  testCaseId: string;\n  testSteps: TestStep[];\n  tc: TestCaseResult;\n  uri: string;\n  scenarioName: string;\n  salt: string;\n  attemptNumber: number;\n  attemptStatus: import(\"executable-stories-core/types/test-result\").TestStatus | undefined;\n  attemptDurationMs: number | undefined;\n  attemptErrorMessage: string | undefined;\n  willBeRetried: boolean;\n  emitAttachments: boolean;\n}\n\n/**\n * Build envelopes for a single attempt:\n * TestCaseStarted, [TestStepStarted, TestStepFinished, Attachment*]*, TestCaseFinished\n */\nfunction buildAttemptEnvelopes(params: AttemptParams): Envelope[] {\n  const {\n    testCaseId, testSteps, tc, uri, scenarioName, salt,\n    attemptNumber, attemptStatus, attemptDurationMs, attemptErrorMessage,\n    willBeRetried, emitAttachments,\n  } = params;\n\n  const envelopes: Envelope[] = [];\n  const testCaseStartedId = deterministicId(\n    \"testCaseStarted\",\n    salt,\n    uri,\n    scenarioName,\n    String(attemptNumber)\n  );\n\n  // TestCaseStarted\n  envelopes.push({\n    testCaseStarted: {\n      id: testCaseStartedId,\n      testCaseId,\n      timestamp: msToTimestamp(0),\n      attempt: attemptNumber,\n    },\n  });\n\n  // Determine which step receives test-case-level attachments\n  const tcAttachmentStepIndex = emitAttachments\n    ? findTestCaseAttachmentStepIndex(tc)\n    : -1;\n\n  // Step execution envelopes\n  let cumulativeMs = 0;\n\n  for (let i = 0; i < testSteps.length; i++) {\n    const testStep = testSteps[i];\n    const storyStep = tc.story.steps[i];\n\n    // Determine step status for this attempt\n    let stepStatus: import(\"executable-stories-core/types/test-result\").TestStatus;\n    let stepDurationMs: number;\n    let stepErrorMessage: string | undefined;\n\n    if (attemptStatus !== undefined) {\n      // For prior attempts, derive step statuses from attempt-level status\n      // (we don't have per-step data for prior attempts)\n      stepStatus = attemptStatus === \"failed\" && i === tc.story.steps.length - 1\n        ? \"failed\"\n        : attemptStatus === \"failed\" && i < tc.story.steps.length - 1\n          ? \"passed\"\n          : attemptStatus;\n      stepDurationMs = attemptDurationMs !== undefined\n        ? attemptDurationMs / tc.story.steps.length\n        : 0;\n      stepErrorMessage = stepStatus === \"failed\" ? attemptErrorMessage : undefined;\n    } else {\n      // Final/only attempt: use actual step results\n      const stepResult = tc.stepResults[i];\n      stepStatus = stepResult?.status ?? \"passed\";\n      stepDurationMs = stepResult?.durationMs ?? 0;\n      // Include stack trace from test case if this is the failed step\n      stepErrorMessage = stepResult?.errorMessage;\n      if (stepStatus === \"failed\" && tc.errorStack && stepErrorMessage) {\n        stepErrorMessage = stepErrorMessage + \"\\n\" + tc.errorStack;\n      } else if (stepStatus === \"failed\" && tc.errorStack && !stepErrorMessage) {\n        stepErrorMessage = tc.errorStack;\n      }\n    }\n\n    // TestStepStarted\n    envelopes.push({\n      testStepStarted: {\n        testCaseStartedId,\n        testStepId: testStep.id,\n        timestamp: msToTimestamp(cumulativeMs),\n      },\n    });\n\n    // TestStepFinished\n    cumulativeMs += stepDurationMs;\n    envelopes.push({\n      testStepFinished: {\n        testCaseStartedId,\n        testStepId: testStep.id,\n        testStepResult: {\n          duration: msToDuration(stepDurationMs),\n          status: statusToCucumberStatus(stepStatus),\n          message: stepErrorMessage,\n        },\n        timestamp: msToTimestamp(cumulativeMs),\n      },\n    });\n\n    // Per-step doc screenshots (only on final attempt)\n    if (emitAttachments) {\n      const docAttachments = extractDocAttachments(storyStep);\n      for (const att of docAttachments) {\n        envelopes.push({\n          attachment: {\n            testCaseStartedId,\n            testStepId: testStep.id,\n            body: att.body,\n            mediaType: att.mediaType,\n            contentEncoding: att.contentEncoding,\n          },\n        });\n      }\n    }\n\n    // Test-case level attachments (only on final attempt, on failed/last step)\n    if (i === tcAttachmentStepIndex) {\n      for (const att of tc.attachments) {\n        envelopes.push({\n          attachment: {\n            testCaseStartedId,\n            testStepId: testStep.id,\n            body: att.body,\n            mediaType: att.mediaType,\n            contentEncoding: att.contentEncoding,\n          },\n        });\n      }\n    }\n  }\n\n  // TestCaseFinished\n  envelopes.push({\n    testCaseFinished: {\n      testCaseStartedId,\n      timestamp: msToTimestamp(cumulativeMs),\n      willBeRetried,\n    },\n  });\n\n  return envelopes;\n}\n\n/**\n * Extract attachments from a step's doc entries.\n *\n * Handles:\n * - screenshot docs with data: URIs → BASE64 attachment\n * - screenshot docs with other paths → IDENTITY attachment\n */\nfunction extractDocAttachments(\n  step: StoryStep\n): Array<{ body: string; mediaType: string; contentEncoding: AttachmentContentEncoding }> {\n  if (!step.docs) return [];\n\n  const attachments: Array<{\n    body: string;\n    mediaType: string;\n    contentEncoding: AttachmentContentEncoding;\n  }> = [];\n\n  for (const doc of step.docs) {\n    if (doc.kind !== \"screenshot\") continue;\n\n    // Parse data URI: data:image/png;base64,ABC123...\n    const match = doc.path.match(/^data:([^;]+);base64,(.+)$/);\n    if (match) {\n      attachments.push({\n        body: match[2],\n        mediaType: match[1],\n        contentEncoding: \"BASE64\",\n      });\n    } else {\n      // Non-data-URI screenshot (file path or URL) → IDENTITY\n      attachments.push({\n        body: doc.path,\n        mediaType: guessMediaType(doc.path),\n        contentEncoding: \"IDENTITY\",\n      });\n    }\n  }\n\n  return attachments;\n}\n\n/**\n * Guess media type from a file path or URL.\n */\nfunction guessMediaType(path: string): string {\n  const lower = path.toLowerCase();\n  if (lower.endsWith(\".png\")) return \"image/png\";\n  if (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) return \"image/jpeg\";\n  if (lower.endsWith(\".gif\")) return \"image/gif\";\n  if (lower.endsWith(\".webp\")) return \"image/webp\";\n  if (lower.endsWith(\".svg\")) return \"image/svg+xml\";\n  return \"image/png\"; // Default assumption for screenshots\n}\n\n/**\n * Determine which step index should receive test-case-level attachments.\n * Attach to the failed step if one exists, otherwise the last step.\n * Returns -1 if there are no attachments.\n */\nfunction findTestCaseAttachmentStepIndex(tc: TestCaseResult): number {\n  if (tc.attachments.length === 0) return -1;\n\n  const failedIndex = tc.stepResults.findIndex((sr) => sr.status === \"failed\");\n  if (failedIndex >= 0) return failedIndex;\n\n  return tc.stepResults.length - 1;\n}\n","/**\n * CucumberMessagesFormatter — produces NDJSON compatible with @cucumber/html-formatter.\n *\n * Message stream order:\n * Meta → Source* → GherkinDocument* → Pickle* → TestRunStarted →\n * [TestCase, TestCaseStarted, TestStep*, TestCaseFinished]* → TestRunFinished\n */\n\nimport type { TestRunResult, TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type { Envelope, Meta } from \"executable-stories-core/types/cucumber-messages\";\nimport { synthesizeFeature } from \"./synthesize-feature\";\nimport { buildGherkinDocumentEnvelopes } from \"./build-gherkin-document\";\nimport { buildPickleEnvelopes } from \"./build-pickles\";\nimport {\n  buildTestRunStarted,\n  buildTestRunFinished,\n  buildTestCaseExecutionEnvelopes,\n} from \"./build-execution\";\n\nexport interface CucumberMessagesOptions {\n  /** Strategy for deriving Source.uri. Default: \"sourceFile\" */\n  uriStrategy?: \"sourceFile\" | \"virtual\";\n  /** Whether to emit Source/GherkinDocument for synthesized features. Default: true */\n  includeSynthetics?: boolean;\n  /** Salt for deterministic IDs. Default: \"\" */\n  idSalt?: string;\n  /** Tool metadata for Meta envelope */\n  meta?: { toolName?: string; toolVersion?: string };\n}\n\nexport class CucumberMessagesFormatter {\n  private options: Required<\n    Pick<CucumberMessagesOptions, \"uriStrategy\" | \"includeSynthetics\" | \"idSalt\">\n  > & { meta?: CucumberMessagesOptions[\"meta\"] };\n\n  constructor(options: CucumberMessagesOptions = {}) {\n    this.options = {\n      uriStrategy: options.uriStrategy ?? \"sourceFile\",\n      includeSynthetics: options.includeSynthetics ?? true,\n      idSalt: options.idSalt ?? \"\",\n      meta: options.meta,\n    };\n  }\n\n  /**\n   * Format a TestRunResult into an array of Envelope objects.\n   */\n  format(run: TestRunResult): Envelope[] {\n    const envelopes: Envelope[] = [];\n    const salt = this.options.idSalt;\n\n    // 1. Meta envelope\n    envelopes.push(this.buildMetaEnvelope(run));\n\n    // Group test cases by source file\n    const grouped = this.groupBySourceFile(run.testCases);\n\n    // 2. Source + GherkinDocument + Pickle envelopes (definition phase)\n    const allPickleEnvelopes: Envelope[] = [];\n\n    for (const [uri, testCases] of grouped) {\n      const synthesized = synthesizeFeature(uri, testCases);\n\n      if (this.options.includeSynthetics) {\n        const { sourceEnvelope, gherkinDocumentEnvelope } =\n          buildGherkinDocumentEnvelopes(uri, testCases, synthesized, salt);\n        envelopes.push(sourceEnvelope);\n        envelopes.push(gherkinDocumentEnvelope);\n      }\n\n      const pickles = buildPickleEnvelopes(uri, testCases, salt);\n      allPickleEnvelopes.push(...pickles);\n    }\n\n    // All pickles after all source/gherkin documents\n    envelopes.push(...allPickleEnvelopes);\n\n    // 3. TestRunStarted\n    envelopes.push(buildTestRunStarted(run));\n\n    // 4. Execution envelopes per test case\n    for (const [uri, testCases] of grouped) {\n      for (const tc of testCases) {\n        const executionEnvelopes = buildTestCaseExecutionEnvelopes(\n          uri,\n          tc,\n          salt\n        );\n        envelopes.push(...executionEnvelopes);\n      }\n    }\n\n    // 5. TestRunFinished (always last)\n    envelopes.push(buildTestRunFinished(run));\n\n    return envelopes;\n  }\n\n  /**\n   * Format as NDJSON string (one JSON line per envelope).\n   */\n  formatToString(run: TestRunResult): string {\n    const envelopes = this.format(run);\n    return envelopes.map((e) => JSON.stringify(e)).join(\"\\n\") + \"\\n\";\n  }\n\n  /**\n   * Build the Meta envelope.\n   */\n  private buildMetaEnvelope(run: TestRunResult): Envelope {\n    const meta: Meta = {\n      protocolVersion: \"25.0.1\",\n      implementation: {\n        name: this.options.meta?.toolName ?? \"executable-stories\",\n        version:\n          this.options.meta?.toolVersion ?? run.packageVersion ?? \"0.0.0\",\n      },\n      runtime: {\n        name: \"node.js\",\n        version: process.version,\n      },\n      os: {\n        name: process.platform,\n      },\n      cpu: {\n        name: process.arch,\n      },\n    };\n\n    return { meta };\n  }\n\n  /**\n   * Group test cases by source file, preserving order.\n   */\n  private groupBySourceFile(\n    testCases: TestCaseResult[]\n  ): Map<string, TestCaseResult[]> {\n    const grouped = new Map<string, TestCaseResult[]>();\n    for (const tc of testCases) {\n      const uri = tc.sourceFile;\n      const existing = grouped.get(uri);\n      if (existing) {\n        existing.push(tc);\n      } else {\n        grouped.set(uri, [tc]);\n      }\n    }\n    return grouped;\n  }\n}\n","/**\n * CucumberHtmlFormatter — produces the official Cucumber HTML report.\n *\n * Thin wrapper: reuses CucumberMessagesFormatter to generate NDJSON envelopes,\n * then pipes them through @cucumber/html-formatter's CucumberHtmlStream.\n */\n\nimport { Writable } from \"node:stream\";\nimport { CucumberHtmlStream } from \"@cucumber/html-formatter\";\nimport { CucumberMessagesFormatter } from \"./cucumber-messages/formatter\";\nimport type { CucumberMessagesOptions } from \"./cucumber-messages/formatter\";\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nexport interface CucumberHtmlOptions {\n  /** Options forwarded to the underlying CucumberMessagesFormatter */\n  messages?: CucumberMessagesOptions;\n}\n\nexport class CucumberHtmlFormatter {\n  private messagesFormatter: CucumberMessagesFormatter;\n\n  constructor(options: CucumberHtmlOptions = {}) {\n    this.messagesFormatter = new CucumberMessagesFormatter(options.messages);\n  }\n\n  /**\n   * Format a TestRunResult into official Cucumber HTML.\n   *\n   * Returns a Promise because CucumberHtmlStream is a Node.js Transform stream.\n   */\n  async format(run: TestRunResult): Promise<string> {\n    return this.formatToString(run);\n  }\n\n  /**\n   * Format a TestRunResult into official Cucumber HTML string.\n   */\n  async formatToString(run: TestRunResult): Promise<string> {\n    // 1. Generate NDJSON envelopes as plain objects\n    const envelopes = this.messagesFormatter.format(run);\n\n    // 2. Create the Cucumber HTML stream\n    const htmlStream = new CucumberHtmlStream();\n\n    // 3. Collect output chunks\n    const chunks: Buffer[] = [];\n    const collector = new Writable({\n      write(chunk, _encoding, callback) {\n        chunks.push(Buffer.from(chunk));\n        callback();\n      },\n    });\n\n    // 4. Pipe HTML stream output to collector\n    htmlStream.pipe(collector);\n\n    // 5. Write each envelope through the stream\n    for (const envelope of envelopes) {\n      const accepted = htmlStream.write(envelope);\n      if (!accepted) {\n        await new Promise<void>((resolve) => htmlStream.once(\"drain\", resolve));\n      }\n    }\n\n    // 6. End the stream and wait for completion\n    await new Promise<void>((resolve, reject) => {\n      collector.on(\"finish\", resolve);\n      collector.on(\"error\", reject);\n      htmlStream.end();\n    });\n\n    return Buffer.concat(chunks).toString(\"utf8\");\n  }\n}\n","/**\n * Entry point for a colocated report tree.\n *\n * Colocated/mirrored output writes one report per source file, which is great\n * for reading a single suite's docs next to its code — but leaves a directory\n * of files with no front door. Someone handed the output folder has nothing to\n * open. This generates a small `index.html` listing every report that was\n * written, with per-file status counts, so the tree is navigable.\n *\n * Only for colocated mode: aggregated output already writes a single file that\n * IS the entry point.\n */\nimport path from \"node:path\";\n\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport { REPORT_FAVICON_LINK } from \"executable-stories-core/utils/report-favicon\";\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nexport interface ColocatedIndexEntry {\n  /** Report path, relative to the index file. */\n  href: string;\n  /** Source file the report documents. */\n  sourceFile: string;\n  counts: { passed: number; failed: number; skipped: number; pending: number };\n}\n\n/** Map a canonical status onto the four buckets the index counts. */\nfunction bucket(status: string): keyof ColocatedIndexEntry[\"counts\"] | undefined {\n  if (status === \"passed\" || status === \"pass\") return \"passed\";\n  if (status === \"failed\" || status === \"fail\") return \"failed\";\n  if (status === \"skipped\" || status === \"skip\") return \"skipped\";\n  if (status === \"pending\" || status === \"todo\") return \"pending\";\n  return undefined;\n}\n\n/**\n * Pair each written report with the source file it documents and the status\n * counts for that file. `reportPaths` are the paths the generator wrote, in the\n * same order as the source files it grouped by.\n */\nexport function buildIndexEntries(\n  run: TestRunResult,\n  reportsBySourceFile: ReadonlyMap<string, string>,\n  indexDir: string,\n): ColocatedIndexEntry[] {\n  const entries: ColocatedIndexEntry[] = [];\n  for (const [sourceFile, reportPath] of reportsBySourceFile) {\n    const counts = { passed: 0, failed: 0, skipped: 0, pending: 0 };\n    for (const tc of run.testCases) {\n      if (tc.sourceFile !== sourceFile) continue;\n      const key = bucket(tc.status as string);\n      if (key) counts[key] += 1;\n    }\n    // Posix separators: this is an href, not a filesystem path.\n    const href = path.relative(indexDir, reportPath).split(path.sep).join(\"/\");\n    entries.push({ href, sourceFile, counts });\n  }\n  return entries.sort((a, b) => {\n    // Files with failures first — the index is a triage surface too.\n    if (a.counts.failed !== b.counts.failed) return b.counts.failed - a.counts.failed;\n    return a.sourceFile.localeCompare(b.sourceFile);\n  });\n}\n\n/** Total the per-file counts for the header line. */\nfunction totals(entries: ColocatedIndexEntry[]): ColocatedIndexEntry[\"counts\"] {\n  const t = { passed: 0, failed: 0, skipped: 0, pending: 0 };\n  for (const e of entries) {\n    t.passed += e.counts.passed;\n    t.failed += e.counts.failed;\n    t.skipped += e.counts.skipped;\n    t.pending += e.counts.pending;\n  }\n  return t;\n}\n\n/**\n * Render the index page. Self-contained (inline CSS, no scripts, no CDN) so it\n * works from a file:// path or any static host, matching the standalone report.\n */\nexport function renderColocatedIndex(entries: ColocatedIndexEntry[], title = \"Test Reports\"): string {\n  const t = totals(entries);\n  const total = t.passed + t.failed + t.skipped + t.pending;\n  const rows = entries\n    .map((e) => {\n      const pills = ([\"failed\", \"passed\", \"skipped\", \"pending\"] as const)\n        .filter((k) => e.counts[k] > 0)\n        .map((k) => `<span class=\"pill ${k}\">${e.counts[k]} ${k}</span>`)\n        .join(\" \");\n      return (\n        `<li class=\"${e.counts.failed > 0 ? \"has-failures\" : \"\"}\">` +\n        `<a href=\"${escapeHtml(e.href)}\">${escapeHtml(e.sourceFile)}</a>` +\n        `<span class=\"counts\">${pills}</span></li>`\n      );\n    })\n    .join(\"\\n      \");\n\n  return `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n${REPORT_FAVICON_LINK}\n<title>${escapeHtml(title)}</title>\n<style>\n  :root { color-scheme: light dark; --fg: #1c1e21; --muted: #6b7280; --border: #d9dbe0; --bg: #fff;\n    --pass: #0f5a23; --fail: #c11d28; --warn: #8a3f06; --pending: #6b27c9; }\n  @media (prefers-color-scheme: dark) {\n    :root { --fg: #e6e6e6; --muted: #9aa0a6; --border: #33373d; --bg: #16181d;\n      --pass: #4ade80; --fail: #f87171; --warn: #fbbf24; --pending: #c4b5fd; }\n  }\n  body { margin: 0; padding: 2rem 1.25rem; background: var(--bg); color: var(--fg);\n    font: 16px/1.5 \"IBM Plex Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\n  main { max-width: 60rem; margin: 0 auto; }\n  h1 { font-size: 1.4rem; margin: 0 0 .25rem; }\n  .summary { color: var(--muted); font-size: .9rem; margin: 0 0 1.5rem; }\n  ul { list-style: none; margin: 0; padding: 0; border: 1px solid var(--border); border-radius: .6rem; overflow: hidden; }\n  li { display: flex; align-items: center; justify-content: space-between; gap: 1rem;\n    padding: .7rem 1rem; border-bottom: 1px solid var(--border); }\n  li:last-child { border-bottom: 0; }\n  li.has-failures { background: color-mix(in srgb, var(--fail) 8%, transparent); }\n  a { color: inherit; font-family: \"IBM Plex Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n    font-size: .9rem; text-decoration: none; }\n  a:hover { text-decoration: underline; }\n  .counts { display: flex; gap: .4rem; flex-wrap: wrap; }\n  .pill { font-size: .75rem; padding: .1rem .5rem; border-radius: 999px; white-space: nowrap;\n    border: 1px solid currentColor; }\n  .pill.passed { color: var(--pass); } .pill.failed { color: var(--fail); }\n  .pill.skipped { color: var(--warn); } .pill.pending { color: var(--pending); }\n  .empty { color: var(--muted); padding: 1rem; }\n</style>\n</head>\n<body>\n<main>\n  <h1>${escapeHtml(title)}</h1>\n  <p class=\"summary\">${entries.length} file${entries.length === 1 ? \"\" : \"s\"} · ${total} scenario${total === 1 ? \"\" : \"s\"} · ${t.passed} passed${t.failed > 0 ? `, ${t.failed} failed` : \"\"}${t.skipped > 0 ? `, ${t.skipped} skipped` : \"\"}${t.pending > 0 ? `, ${t.pending} pending` : \"\"}</p>\n  ${\n    entries.length === 0\n      ? '<p class=\"empty\">No reports were written.</p>'\n      : `<ul>\n      ${rows}\n    </ul>`\n  }\n</main>\n</body>\n</html>\n`;\n}\n","/**\n * One report per test source file.\n *\n * A test run reports only what it ran. `vitest run one-file`, `vitest -t \"one\n * scenario\"` and the MCP `run_scenario` tool all cover a fraction of the suite,\n * so rendering a run directly would drop every scenario it skipped out of the\n * docs.\n *\n * So the unit of storage is the test source file, not the run: each one owns a\n * canonical report, and running a file rewrites that report and leaves the rest\n * alone. One writer per file, nothing merged across files, and nothing hidden —\n * these are ordinary reports you can list, read and delete. Combined views are\n * derived from them (see aggregate-reports), never accumulated into a store\n * that could fall out of step with what is on disk.\n *\n * Retiring anything is the one destructive act here, so it takes certainty: only\n * a run that positively determined it covered a whole file may drop that file's\n * scenarios, and it says so in the log when it does.\n */\nimport path from \"node:path\";\nimport * as fsPromises from \"node:fs/promises\";\n\nimport type {\n  FeatureDeclaration,\n  RunScope,\n  TestCaseResult,\n  TestRunResult,\n} from \"executable-stories-core/types/test-result\";\n\n/**\n * Directory under `outputDir` holding one canonical run per test source file.\n *\n * Visible on purpose. These are reports, not hidden state: you can list them,\n * read one, delete one, and the effect is obvious. The alternative — a hidden\n * merge database whose contents change what the aggregate says — makes \"why is\n * this scenario still here\" unanswerable without knowing a secret.\n */\nexport const BY_FILE_DIR = \"by-file\";\n\nexport interface FileReportDeps {\n  readFile: (filePath: string) => string;\n  listDir: (dir: string) => string[] | undefined;\n  fileExists: (filePath: string) => boolean;\n  writeFile: (filePath: string, contents: string) => Promise<void>;\n  removeFile: (filePath: string) => Promise<void>;\n  logger: { warn(msg: string): void };\n}\n\n/**\n * What one file's report holds: a complete canonical run covering a single\n * source file. Shaping it as a run rather than a bespoke envelope means anything\n * that already reads a run JSON reads one of these too — the Astro loader points\n * straight at the directory with no special-casing.\n */\ntype FileReport = TestRunResult;\n\n/** The source file a report covers. Every case in it shares one. */\nfunction reportSourceFile(report: FileReport): string | undefined {\n  return report.testCases[0]?.sourceFile;\n}\n\n/**\n * Report filename for a source file: the flattened path, the test extension\n * stripped, and a short digest of the full path — `src/pay.story.test.ts`\n * becomes `src-pay-1a2b3c.story-report.json`.\n *\n * The digest is always there rather than only on collision. Adding it lazily\n * made ownership depend on history: two paths that flatten alike would share a\n * name until one existed, and deleting the first owner left the second writing\n * a fresh plain-named file while its digested one lingered, unreachable by\n * pruning. Always digesting makes a source file's report name a pure function\n * of its path.\n */\nexport function reportFileNameFor(sourceFile: string): string {\n  const stem = toPosix(sourceFile)\n    .replace(/\\.(story\\.)?(test|spec)\\.[cm]?[jt]sx?$/i, \"\")\n    .replace(/\\.[^/.]+$/, \"\")\n    .replace(/\\//g, \"-\");\n  return `${stem}-${shortDigest(sourceFile)}.story-report.json`;\n}\n\n/** Stable short digest, used only to separate two files that flatten alike. */\nfunction shortDigest(value: string): string {\n  let hash = 5381;\n  for (let i = 0; i < value.length; i++) hash = ((hash << 5) + hash + value.charCodeAt(i)) >>> 0;\n  return hash.toString(36).slice(0, 6);\n}\n\n/** Posix-normalise a path. */\nfunction toPosix(p: string): string {\n  return p.replace(/\\\\/g, \"/\");\n}\n\nexport function byFileDirFor(outputDir: string): string {\n  return path.posix.join(outputDir.replace(/\\\\/g, \"/\"), BY_FILE_DIR);\n}\n\n/** Read every report in the directory. An unreadable one is skipped, not fatal. */\nfunction readFileReports(dir: string, deps: FileReportDeps): FileReport[] {\n  const names = deps.listDir(dir);\n  if (!names) return [];\n\n  const reports: FileReport[] = [];\n  for (const name of names.filter((n) => n.endsWith(\".json\")).sort()) {\n    const filePath = path.posix.join(dir, name);\n    try {\n      const parsed = JSON.parse(deps.readFile(filePath)) as FileReport;\n      if (Array.isArray(parsed?.testCases) && reportSourceFile(parsed)) {\n        reports.push(parsed);\n      }\n    } catch {\n      // A corrupt report must not take the rest down with it: the run in hand\n      // is still renderable, and the next run of that file rewrites it.\n      deps.logger.warn(`Ignoring unreadable report: ${filePath}`);\n    }\n  }\n  return reports;\n}\n\n/**\n * Fold this run into the stored per-file reports and return the run as it now\n * stands across every source file seen so far.\n *\n * Scenarios this run produced win over the stored copies of the same id.\n * Scenarios in a report that this run did not produce are kept as they were.\n */\nexport async function updateFileReports(\n  args: { run: TestRunResult; outputDir: string },\n  deps: FileReportDeps\n): Promise<TestRunResult> {\n  const dir = byFileDirFor(args.outputDir);\n\n  // Stamp before storing. A report outlives the run that wrote it, so without\n  // this a result carried forward would look as fresh as the run rendering it.\n  const bySource = new Map<string, TestCaseResult[]>();\n  for (const testCase of args.run.testCases) {\n    const stamped: TestCaseResult = {\n      ...testCase,\n      lastRunAtMs: args.run.finishedAtMs,\n      ...(args.run.gitSha ? { lastRunGitSha: args.run.gitSha } : {}),\n    };\n    const existing = bySource.get(stamped.sourceFile);\n    if (existing) existing.push(stamped);\n    else bySource.set(stamped.sourceFile, [stamped]);\n  }\n\n  // A file the run covered but that produced nothing still has to be visited,\n  // or its previous scenarios outlive their deletion.\n  for (const sourceFile of args.run.coveredSourceFiles ?? []) {\n    if (!bySource.has(sourceFile)) bySource.set(sourceFile, []);\n  }\n\n  const stored = new Map(\n    readFileReports(dir, deps).map((report) => [reportSourceFile(report)!, report])\n  );\n\n  // Same as the report writes: create the directory before writing into it.\n  // Skipped for an empty run so a read-only render never makes a directory.\n  if (bySource.size > 0) await fsPromises.mkdir(dir, { recursive: true });\n\n  const scope = args.run.runScope;\n  // A file whose collection broke cannot speak for itself, whatever the rest of\n  // the run managed. Retiring its scenarios would delete documentation because\n  // a hook threw.\n  const incomplete = new Set(args.run.incompleteSourceFiles ?? []);\n\n  for (const [sourceFile, testCases] of bySource) {\n    const previous = stored.get(sourceFile)?.testCases ?? [];\n    const reported = new Set(testCases.map((tc) => tc.id));\n    const unreported = previous.filter((tc) => !reported.has(tc.id));\n\n    // Only a run that positively claims full coverage of its files may retire a\n    // scenario. Anything less keeps what it did not report, because deleting on\n    // a guess is destructive and silent while keeping on a guess is merely\n    // stale and visible.\n    const retires = scope === \"full\" && !incomplete.has(sourceFile);\n    const merged = new Map(\n      retires ? [] : previous.map((tc) => [tc.id, tc] as const)\n    );\n    for (const testCase of testCases) merged.set(testCase.id, testCase);\n\n    if (unreported.length > 0) warnAboutUnreported(\n      { sourceFile, unreported, scope, incomplete: incomplete.has(sourceFile) },\n      deps\n    );\n\n    // Sorting by id makes a report's bytes a function of its contents alone, so\n    // an unchanged file rewrites to an identical report.\n    const declared = args.run.features?.find((f) => f.sourceFile === sourceFile);\n    // A declaration follows the same rule as a scenario: only a run that claims\n    // the whole file may drop one. A filtered run never mentioned the file's\n    // declaration, so it is in no position to say it is gone.\n    const kept = declared ?? (retires ? undefined : stored.get(sourceFile)?.features?.[0]);\n    const report: FileReport = {\n      ...args.run,\n      testCases: [...merged.values()].sort((a, b) => a.id.localeCompare(b.id)),\n      ...(kept ? { features: [kept] } : { features: undefined }),\n    };\n    // An emptied report has nothing to own it and nothing to say; remove it\n    // rather than leave a file claiming a suite that no longer has scenarios.\n    if (report.testCases.length === 0) {\n      stored.delete(sourceFile);\n      await removeReportsFor({ dir, sourceFile }, deps);\n      continue;\n    }\n\n    stored.set(sourceFile, report);\n    await removeOtherReportsFor(\n      { dir, sourceFile, keep: reportFileNameFor(sourceFile) },\n      deps\n    );\n    await deps.writeFile(\n      path.posix.join(dir, reportFileNameFor(sourceFile)),\n      `${JSON.stringify(report, null, 2)}\\n`\n    );\n  }\n\n  for (const sourceFile of prunable(\n    { stored: [...stored.keys()], ran: [...bySource.keys()], projectRoot: args.run.projectRoot },\n    deps\n  )) {\n    stored.delete(sourceFile);\n    await removeReportsFor({ dir, sourceFile }, deps);\n  }\n\n  const sourceFiles = [...stored.keys()].sort();\n  const testCases = sourceFiles.flatMap(\n    (sourceFile) => stored.get(sourceFile)?.testCases ?? []\n  );\n  // Declarations are per source file, so they accumulate exactly as scenarios\n  // do. Without this a filtered run strips every other file's feature heading\n  // and narrative out of the docs.\n  const features = sourceFiles\n    .flatMap((sourceFile) => stored.get(sourceFile)?.features ?? [])\n    .filter((f): f is FeatureDeclaration => f !== undefined);\n\n  return {\n    ...args.run,\n    testCases,\n    ...(features.length > 0 ? { features } : {}),\n  };\n}\n\n/**\n * Delete any other file in the directory that claims this source file.\n *\n * One test file owns one report. A second claiming the same file — left behind\n * by an older naming scheme, or copied by hand — would be counted again by\n * everything that reads the directory whole.\n */\nasync function removeReportsFor(\n  args: { dir: string; sourceFile: string },\n  deps: FileReportDeps\n): Promise<void> {\n  return removeOtherReportsFor({ ...args, keep: undefined }, deps);\n}\n\nasync function removeOtherReportsFor(\n  args: { dir: string; sourceFile: string; keep?: string },\n  deps: FileReportDeps\n): Promise<void> {\n  for (const name of deps.listDir(args.dir) ?? []) {\n    if (!name.endsWith(\".json\") || name === args.keep) continue;\n    const filePath = path.posix.join(args.dir, name);\n    try {\n      const other = JSON.parse(deps.readFile(filePath)) as FileReport;\n      if (reportSourceFile(other) !== args.sourceFile) continue;\n    } catch {\n      continue; // Unreadable: leave it alone and let the reader report it.\n    }\n    if (args.keep) {\n      deps.logger.warn(\n        `Removing ${filePath}: ${args.sourceFile} already has a report at ${args.keep}.`\n      );\n    }\n    await deps.removeFile(filePath);\n  }\n}\n\n/**\n * Say what happened to scenarios a run did not report.\n *\n * Removal is the one destructive act in the pipeline, so it leaves evidence\n * naming the file and every scenario dropped: an adapter that wrongly claims\n * full coverage then shows up in the log instead of quietly shrinking the docs.\n * Unknown scope keeps them and says so, which is how incomplete detection fails\n * stale rather than destructive.\n */\nfunction warnAboutUnreported(\n  args: {\n    sourceFile: string;\n    unreported: TestCaseResult[];\n    scope?: RunScope;\n    incomplete: boolean;\n  },\n  deps: FileReportDeps\n): void {\n  const { sourceFile, unreported, scope, incomplete } = args;\n  if (scope === \"filtered\") return; // Expected: the run said it saw only part of the file.\n\n  const names = unreported\n    .map((tc) => tc.story.scenario?.trim() || tc.id)\n    .sort()\n    .join(\", \");\n  const count = `${unreported.length} previously recorded scenario${unreported.length === 1 ? \"\" : \"s\"}`;\n\n  if (incomplete) {\n    deps.logger.warn(\n      `Run for ${sourceFile} could not collect its scenarios in full, so ${count} ` +\n        `were kept rather than retired. Fix the failure and rerun to confirm they are gone: ${names}`\n    );\n    return;\n  }\n\n  if (scope === \"full\") {\n    deps.logger.warn(\n      `Authoritative run for ${sourceFile} omitted ${count}; removing them from the accumulated report: ${names}`\n    );\n    return;\n  }\n\n  deps.logger.warn(\n    `Run for ${sourceFile} did not report ${count} and did not state its scope; keeping them. ` +\n      `If this run covered the whole file they are stale: ${names}`\n  );\n}\n\n/**\n * Shards whose test file is gone from the working tree. Deleting a test deletes\n * its scenarios, otherwise a renamed file shows up twice and a removed feature\n * documents itself forever.\n *\n * Guarded on the run's own files resolving on disk first. A run whose\n * `projectRoot` does not line up with the recorded source paths makes every\n * lookup miss, and pruning on that would wipe the accumulated history instead\n * of the one file the author actually deleted.\n */\nfunction prunable(\n  args: { stored: string[]; ran: string[]; projectRoot: string },\n  deps: FileReportDeps\n): string[] {\n  const resolve = (sourceFile: string) =>\n    path.resolve(args.projectRoot, sourceFile);\n\n  const canResolveSources = args.ran.some((sourceFile) =>\n    deps.fileExists(resolve(sourceFile))\n  );\n  if (!canResolveSources) return [];\n\n  const ran = new Set(args.ran);\n  return args.stored.filter(\n    (sourceFile) => !ran.has(sourceFile) && !deps.fileExists(resolve(sourceFile))\n  );\n}\n","/**\n * Astro Formatter - Layer 3.\n *\n * Wraps the MarkdownFormatter to produce .md files with YAML frontmatter\n * (title, description, sidebar.badge) for Starlight content collections.\n * The scaffolded docs site uses themed CSS matching the HTML report design system.\n */\n\nimport { MarkdownFormatter } from \"./markdown\";\nimport type { MarkdownOptions } from \"./markdown\";\nimport type { TestRunResult, TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport { humanizeSourceFile } from \"executable-stories-core/utils/source-file\";\n\nexport interface StarlightBadge {\n  text: string;\n  variant: \"success\" | \"danger\" | \"caution\" | \"note\" | \"tip\";\n}\n\nexport interface AstroFormatterOptions {\n  assetsBaseUrl?: string;\n  /**\n   * Title each page by its own suite/file rather than the configured title.\n   * Set by colocated mode (one page per file) so the docs nav reads with\n   * distinct, meaningful labels.\n   */\n  perFileTitle?: boolean;\n  markdown?: Omit<MarkdownOptions, \"includeFrontMatter\" | \"includeSummaryTable\" | \"includeMetadata\" | \"stepStyle\">;\n}\n\nexport class AstroFormatter {\n  private markdownFormatter: MarkdownFormatter;\n  private title: string;\n  private perFileTitle: boolean;\n\n  constructor(options: AstroFormatterOptions = {}) {\n    this.title = options.markdown?.title ?? \"User Stories\";\n    this.perFileTitle = options.perFileTitle ?? false;\n    this.markdownFormatter = new MarkdownFormatter({\n      ...options.markdown,\n      title: this.title,\n      stepStyle: \"gherkin\",\n      includeFrontMatter: false,\n      includeSummaryTable: false,\n      includeMetadata: false,\n      // A per-file page is one file already — group by suite/describe so the\n      // body shows clean section headings, not the redundant source path.\n      groupBy: this.perFileTitle ? \"suite\" : (options.markdown?.groupBy ?? \"file\"),\n    });\n  }\n\n  format(run: TestRunResult): string {\n    const markdown = this.markdownFormatter.format(run);\n    // Strip the h1 title — Starlight renders its own from frontmatter\n    const body = markdown.replace(/^# .+\\n\\n?/, \"\");\n    const frontmatter = this.buildFrontmatter(run);\n    return `${frontmatter}\\n${body}`;\n  }\n\n  /**\n   * Title for the page. A per-file page (one source file — i.e. colocated mode)\n   * is titled by its suite/describe name, falling back to a humanized filename,\n   * so the docs nav reads \"Convert Currency\" not \"User Stories\" six times over.\n   * Multi-file (aggregated) pages keep the configured title.\n   */\n  private deriveTitle(run: TestRunResult): string {\n    if (!this.perFileTitle) return this.title;\n    const sourceFiles = new Set(\n      run.testCases.map((tc) => tc.sourceFile).filter((f) => f && f !== \"unknown\"),\n    );\n    if (sourceFiles.size !== 1) return this.title;\n\n    const suites = new Set(\n      run.testCases.map((tc) => tc.titlePath?.[0]).filter((s): s is string => Boolean(s)),\n    );\n    if (suites.size === 1) return [...suites][0];\n    return humanizeSourceFile([...sourceFiles][0]) || this.title;\n  }\n\n  private buildFrontmatter(run: TestRunResult): string {\n    const badge = AstroFormatter.computeBadge(run.testCases);\n    const count = run.testCases.length;\n    const description = `${count} scenario${count !== 1 ? \"s\" : \"\"} — ${badge.text.toLowerCase()}`;\n    const lines = [\n      \"---\",\n      `title: ${yamlScalar(this.deriveTitle(run))}`,\n      `description: ${description}`,\n      \"sidebar:\",\n      \"  badge:\",\n      `    text: ${badge.text}`,\n      `    variant: ${badge.variant}`,\n      \"---\",\n    ];\n    return lines.join(\"\\n\");\n  }\n\n  static computeBadge(testCases: Pick<TestCaseResult, \"status\">[]): StarlightBadge {\n    const statuses = new Set(testCases.map((tc) => tc.status));\n    if (statuses.has(\"failed\")) return { text: \"Failed\", variant: \"danger\" };\n    if (statuses.has(\"pending\")) return { text: \"Pending\", variant: \"caution\" };\n    if (statuses.has(\"skipped\") && !statuses.has(\"passed\")) return { text: \"Skipped\", variant: \"caution\" };\n    return { text: \"Passed\", variant: \"success\" };\n  }\n}\n\n/** Single-quote a YAML scalar when it could otherwise be misparsed (colons, etc.). */\nfunction yamlScalar(value: string): string {\n  if (/[:#[\\]{}&*!|>'\"%@`]|^[\\s-]|\\s$/.test(value)) {\n    return `'${value.replace(/'/g, \"''\")}'`;\n  }\n  return value;\n}\n","/**\n * Confluence (ADF) Formatter — Layer 3.\n *\n * Emits Atlassian Document Format JSON. Suitable for Confluence pages\n * and Jira issue descriptions via the REST API. Built directly from\n * TestRunResult so code blocks, tables, links, and mermaid all round-trip\n * with higher fidelity than converting markdown → ADF.\n */\n\nimport { assertNever } from \"executable-stories-core/utils/assert-never\";\nimport type { StoryStep, DocEntry } from \"executable-stories-core/types/story\";\nimport type { TestRunResult, TestCaseResult, TestStatus } from \"executable-stories-core/types/test-result\";\nimport { bySourcePosition, earliestSourceLine } from \"./source-order\";\n\n/** Options for ConfluenceFormatter */\nexport interface ConfluenceFormatterOptions {\n  /** Page title. Default: \"User Stories\" */\n  title?: string;\n  /** Include status icons (emoji) in scenario headings. Default: true */\n  includeStatusIcons?: boolean;\n  /** Include metadata table (date, version). Default: true */\n  includeMetadata?: boolean;\n  /** Include summary table (counts, duration). Default: true */\n  includeSummaryTable?: boolean;\n  /** Include error details for failed scenarios. Default: true */\n  includeErrors?: boolean;\n  /** Scenario heading level (1-6). Default: 3 */\n  scenarioHeadingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n  /** Group scenarios by. Default: \"file\" */\n  groupBy?: \"file\" | \"suite\" | \"none\";\n  /** Sort scenarios. Default: \"source\" */\n  sortScenarios?: \"alpha\" | \"source\" | \"none\";\n  /** Pretty-print JSON output. Default: true */\n  pretty?: boolean;\n  /** Base URL for source permalinks (Git). Rendered as link marks */\n  permalinkBaseUrl?: string;\n  /** URL template for ticket links. Use {ticket} as placeholder */\n  ticketUrlTemplate?: string;\n}\n\ntype ResolvedOptions = Required<\n  Omit<ConfluenceFormatterOptions, \"permalinkBaseUrl\" | \"ticketUrlTemplate\">\n> & {\n  permalinkBaseUrl?: string;\n  ticketUrlTemplate?: string;\n};\n\n// ============================================================================\n// ADF node types (minimal — just what we emit)\n// ============================================================================\n\ninterface AdfMark {\n  type: string;\n  attrs?: Record<string, unknown>;\n}\n\ninterface AdfNode {\n  type: string;\n  attrs?: Record<string, unknown>;\n  content?: AdfNode[];\n  marks?: AdfMark[];\n  text?: string;\n  /** Only on the root doc node */\n  version?: number;\n}\n\n/**\n * Confluence / Atlassian Document Format formatter.\n *\n * Emits a top-level `{ version: 1, type: \"doc\", content: [...] }` tree that\n * can be posted to the Confluence or Jira REST API.\n */\nexport class ConfluenceFormatter {\n  private options: ResolvedOptions;\n\n  constructor(options: ConfluenceFormatterOptions = {}) {\n    this.options = {\n      title: options.title ?? \"User Stories\",\n      includeStatusIcons: options.includeStatusIcons ?? true,\n      includeMetadata: options.includeMetadata ?? true,\n      includeSummaryTable: options.includeSummaryTable ?? true,\n      includeErrors: options.includeErrors ?? true,\n      scenarioHeadingLevel: options.scenarioHeadingLevel ?? 3,\n      groupBy: options.groupBy ?? \"file\",\n      sortScenarios: options.sortScenarios ?? \"source\",\n      pretty: options.pretty ?? true,\n      permalinkBaseUrl: options.permalinkBaseUrl,\n      ticketUrlTemplate: options.ticketUrlTemplate,\n    };\n  }\n\n  /** Build the ADF document tree. Returns the JS object (not stringified). */\n  formatToAdf(run: TestRunResult): AdfNode {\n    const content: AdfNode[] = [];\n\n    content.push(heading(1, [text(this.options.title)]));\n\n    if (this.options.includeMetadata) {\n      const metaTable = this.renderMetadataTable(run);\n      if (metaTable) content.push(metaTable);\n    }\n\n    if (this.options.includeSummaryTable) {\n      content.push(this.renderSummaryTable(run));\n    }\n\n    switch (this.options.groupBy) {\n      case \"none\":\n        this.renderFlat(content, run.testCases);\n        break;\n      case \"suite\":\n        this.renderBySuite(content, run.testCases);\n        break;\n      case \"file\":\n      default:\n        this.renderByFile(content, run.testCases);\n        break;\n    }\n\n    return { version: 1, type: \"doc\", content };\n  }\n\n  /** Format a test run as an ADF JSON string. */\n  format(run: TestRunResult): string {\n    const adf = this.formatToAdf(run);\n    return this.options.pretty\n      ? JSON.stringify(adf, null, 2)\n      : JSON.stringify(adf);\n  }\n\n  // --------------------------------------------------------------------------\n  // Metadata / summary tables\n  // --------------------------------------------------------------------------\n\n  private renderMetadataTable(run: TestRunResult): AdfNode | null {\n    const rows: Array<[string, string]> = [];\n    rows.push([\"Date\", new Date(run.startedAtMs).toISOString()]);\n    if (run.packageVersion) rows.push([\"Version\", run.packageVersion]);\n    if (run.gitSha) {\n      const shortSha = run.gitSha.length > 7 ? run.gitSha.slice(0, 7) : run.gitSha;\n      rows.push([\"Git SHA\", shortSha]);\n    }\n    if (rows.length === 0) return null;\n    return table([\n      tableRow([tableHeader(\"Key\"), tableHeader(\"Value\")]),\n      ...rows.map(([k, v]) => tableRow([tableCell(k), tableCell(v)])),\n    ]);\n  }\n\n  private renderSummaryTable(run: TestRunResult): AdfNode {\n    const total = run.testCases.length;\n    const steps = run.testCases.reduce(\n      (acc, tc) => acc + tc.story.steps.length,\n      0,\n    );\n    const passed = run.testCases.filter((tc) => tc.status === \"passed\").length;\n    const failed = run.testCases.filter((tc) => tc.status === \"failed\").length;\n    const skipped = run.testCases.filter((tc) => tc.status === \"skipped\").length;\n    const pending = run.testCases.filter((tc) => tc.status === \"pending\").length;\n\n    return table([\n      tableRow([\n        tableHeader(\"Scenarios\"),\n        tableHeader(\"Steps\"),\n        tableHeader(\"Passed\"),\n        tableHeader(\"Failed\"),\n        tableHeader(\"Skipped\"),\n        tableHeader(\"Pending\"),\n        tableHeader(\"Duration\"),\n      ]),\n      tableRow([\n        tableCell(String(total)),\n        tableCell(String(steps)),\n        tableCell(String(passed)),\n        tableCell(String(failed)),\n        tableCell(String(skipped)),\n        tableCell(String(pending)),\n        tableCell(formatDuration(run.durationMs)),\n      ]),\n    ]);\n  }\n\n  // --------------------------------------------------------------------------\n  // Grouping\n  // --------------------------------------------------------------------------\n\n  private renderByFile(content: AdfNode[], testCases: TestCaseResult[]): void {\n    const byFile = groupBy(testCases, (tc) => tc.sourceFile);\n    for (const [file, fileCases] of byFile) {\n      content.push(heading(2, [codeInline(file)]));\n      this.renderSuiteGroups(content, fileCases, 3);\n    }\n  }\n\n  private renderBySuite(content: AdfNode[], testCases: TestCaseResult[]): void {\n    this.renderSuiteGroups(content, testCases, 2);\n  }\n\n  private renderFlat(content: AdfNode[], testCases: TestCaseResult[]): void {\n    const sorted = this.sortCases(testCases);\n    for (const tc of sorted) this.renderScenario(content, tc);\n  }\n\n  private renderSuiteGroups(\n    content: AdfNode[],\n    testCases: TestCaseResult[],\n    baseLevel: number,\n  ): void {\n    const bySuite = groupBy(testCases, (tc) => tc.titlePath.join(\" - \"));\n    const entries = this.sortSuiteGroups([...bySuite.entries()]);\n    for (const [suitePath, cases] of entries) {\n      if (suitePath) {\n        content.push(\n          heading(clampHeadingLevel(baseLevel), [text(suitePath)]),\n        );\n      }\n      for (const tc of this.sortCases(cases)) {\n        this.renderScenario(content, tc);\n      }\n    }\n  }\n\n  // --------------------------------------------------------------------------\n  // Scenario\n  // --------------------------------------------------------------------------\n\n  private renderScenario(content: AdfNode[], tc: TestCaseResult): void {\n    const level = clampHeadingLevel(this.options.scenarioHeadingLevel);\n    const headingNodes: AdfNode[] = [];\n    if (this.options.includeStatusIcons) {\n      headingNodes.push(text(`${statusIcon(tc.status)} `));\n    }\n    headingNodes.push(text(tc.story.scenario));\n    content.push(heading(level, headingNodes));\n\n    const metaChildren: AdfNode[] = [];\n    if (tc.tags.length > 0) {\n      metaChildren.push(text(\"Tags: \", strong()));\n      tc.tags.forEach((t, i) => {\n        if (i > 0) metaChildren.push(text(\", \"));\n        metaChildren.push(codeInline(t));\n      });\n    }\n    if (tc.story.tickets && tc.story.tickets.length > 0) {\n      if (metaChildren.length > 0) metaChildren.push(text(\" | \"));\n      metaChildren.push(text(\"Tickets: \", strong()));\n      tc.story.tickets.forEach((ticket, i) => {\n        if (i > 0) metaChildren.push(text(\", \"));\n        const url =\n          ticket.url ??\n          (this.options.ticketUrlTemplate\n            ? this.options.ticketUrlTemplate.replace(\"{ticket}\", ticket.id)\n            : undefined);\n        metaChildren.push(\n          url ? link(ticket.id, url) : codeInline(ticket.id),\n        );\n      });\n    }\n    if (\n      this.options.permalinkBaseUrl &&\n      tc.sourceFile !== \"unknown\" &&\n      tc.sourceFile\n    ) {\n      if (metaChildren.length > 0) metaChildren.push(text(\" | \"));\n      metaChildren.push(text(\"Source: \", strong()));\n      const base = this.options.permalinkBaseUrl.replace(/\\/$/, \"\");\n      const url = `${base}/${tc.sourceFile}${\n        tc.sourceLine > 0 ? `#L${tc.sourceLine}` : \"\"\n      }`;\n      metaChildren.push(link(tc.sourceFile, url));\n    }\n    if (metaChildren.length > 0) {\n      content.push(paragraph(metaChildren));\n    }\n\n    if (tc.story.docs && tc.story.docs.length > 0) {\n      for (const doc of tc.story.docs) this.renderDocEntry(content, doc);\n    }\n\n    if (tc.story.steps.length > 0) {\n      content.push(this.renderStepsList(tc.story.steps));\n      for (const step of tc.story.steps) {\n        if (step.docs && step.docs.length > 0) {\n          for (const doc of step.docs) this.renderDocEntry(content, doc);\n        }\n      }\n    }\n\n    if (\n      tc.status === \"failed\" &&\n      tc.errorMessage &&\n      this.options.includeErrors\n    ) {\n      const errorContent =\n        (tc.errorMessage ?? \"\") +\n        (tc.errorStack ? `\\n\\n${tc.errorStack}` : \"\");\n      content.push(\n        panel(\"warning\", [paragraph([text(\"Failure\", strong())])]),\n      );\n      content.push(codeBlock(errorContent, \"text\"));\n    }\n  }\n\n  private renderStepsList(steps: StoryStep[]): AdfNode {\n    return {\n      type: \"bulletList\",\n      content: steps.map((step) => {\n        const children: AdfNode[] = [text(`${step.keyword} `, strong()), text(step.text)];\n        if (step.mode && step.mode !== \"normal\") {\n          children.push(text(` (${step.mode})`, em()));\n        }\n        return {\n          type: \"listItem\",\n          content: [paragraph(children)],\n        };\n      }),\n    };\n  }\n\n  // --------------------------------------------------------------------------\n  // Doc entries\n  // --------------------------------------------------------------------------\n\n  private renderDocEntry(content: AdfNode[], entry: DocEntry): void {\n    switch (entry.kind) {\n      case \"note\":\n        content.push(panel(\"info\", [paragraph([text(entry.text)])]));\n        break;\n\n      case \"tag\": {\n        const kids: AdfNode[] = [];\n        entry.names.forEach((name, i) => {\n          if (i > 0) kids.push(text(\" \"));\n          kids.push(codeInline(name));\n        });\n        if (kids.length > 0) content.push(paragraph(kids));\n        break;\n      }\n\n      case \"kv\": {\n        const val =\n          typeof entry.value === \"string\"\n            ? entry.value\n            : JSON.stringify(entry.value);\n        content.push(\n          paragraph([text(`${entry.label}: `, strong()), codeInline(val)]),\n        );\n        break;\n      }\n\n      case \"code\":\n        if (entry.label) {\n          content.push(paragraph([text(entry.label, strong())]));\n        }\n        content.push(codeBlock(entry.content ?? \"\", entry.lang));\n        break;\n\n      case \"table\":\n        if (entry.label) {\n          content.push(paragraph([text(entry.label, strong())]));\n        }\n        content.push(\n          table([\n            tableRow(entry.columns.map((c) => tableHeader(c))),\n            ...entry.rows.map((row) =>\n              tableRow(row.map((cell) => tableCell(cell))),\n            ),\n          ]),\n        );\n        break;\n\n      case \"link\":\n        content.push(paragraph([link(entry.label, entry.url)]));\n        break;\n\n      case \"section\":\n        if (entry.title) {\n          content.push(paragraph([text(entry.title, strong())]));\n        }\n        // Section markdown is rendered as a plain-text paragraph; deep markdown\n        // parsing inside sections is out of scope for the ADF formatter.\n        if (entry.markdown) {\n          for (const para of entry.markdown.split(/\\n{2,}/)) {\n            const trimmed = para.trim();\n            if (trimmed) content.push(paragraph([text(trimmed)]));\n          }\n        }\n        break;\n\n      case \"mermaid\":\n        if (entry.title) {\n          content.push(paragraph([text(entry.title, strong())]));\n        }\n        content.push(codeBlock(entry.code ?? \"\", \"mermaid\"));\n        break;\n\n      case \"screenshot\":\n        content.push(\n          paragraph([\n            text(entry.alt ?? \"Screenshot\", strong()),\n            text(\": \"),\n            link(entry.path, entry.path),\n          ]),\n        );\n        break;\n\n      case \"video\":\n        // ADF has no inline video node, so surface a captioned link.\n        content.push(\n          paragraph([\n            text(entry.caption ?? \"Video\", strong()),\n            text(\": \"),\n            link(entry.path, entry.path),\n          ]),\n        );\n        break;\n\n      case \"html\":\n        // ADF has no iframe node — surface a captioned link for url/path,\n        // a code block for inline content.\n        if (entry.url !== undefined || entry.path !== undefined) {\n          const target = entry.url ?? entry.path ?? \"\";\n          content.push(\n            paragraph([\n              text(entry.title ?? \"Embedded HTML\", strong()),\n              text(\": \"),\n              link(target, target),\n            ]),\n          );\n          break;\n        }\n        content.push(paragraph([text(entry.title ?? \"Embedded HTML\", strong())]));\n        content.push(codeBlock(entry.content ?? \"\", \"html\"));\n        break;\n\n      case \"state\":\n        content.push(paragraph([text(entry.label ?? \"State\", strong())]));\n        content.push(codeBlock(JSON.stringify(entry.value ?? null, null, 2), \"json\"));\n        break;\n\n      case \"custom\":\n        content.push(paragraph([text(`[${entry.type}]`, strong())]));\n        content.push(codeBlock(JSON.stringify(entry.data ?? null, null, 2), \"json\"));\n        break;\n\n      default:\n        assertNever(entry, \"Confluence ADF: unhandled doc kind\");\n    }\n\n    if (Array.isArray(entry.children) && entry.children.length > 0) {\n      for (const child of entry.children) {\n        this.renderDocEntry(content, child);\n      }\n    }\n  }\n\n  // --------------------------------------------------------------------------\n  // Sorting\n  // --------------------------------------------------------------------------\n\n  private sortCases(cases: TestCaseResult[]): TestCaseResult[] {\n    if (this.options.sortScenarios === \"alpha\") {\n      return [...cases].sort((a, b) =>\n        a.story.scenario.localeCompare(b.story.scenario),\n      );\n    }\n    if (this.options.sortScenarios === \"source\") {\n      return [...cases].sort(bySourcePosition);\n    }\n    return cases;\n  }\n\n  private sortSuiteGroups(\n    entries: [string, TestCaseResult[]][],\n  ): [string, TestCaseResult[]][] {\n    if (this.options.sortScenarios === \"alpha\") {\n      return entries.sort(([a], [b]) => a.localeCompare(b));\n    }\n    if (this.options.sortScenarios === \"source\") {\n      return entries.sort(([, a], [, b]) => {\n        return earliestSourceLine(a) - earliestSourceLine(b);\n      });\n    }\n    return entries;\n  }\n}\n\n// ============================================================================\n// ADF node builders\n// ============================================================================\n\nfunction text(value: string, mark?: AdfMark | AdfMark[]): AdfNode {\n  const node: AdfNode = { type: \"text\", text: value };\n  if (mark) {\n    node.marks = Array.isArray(mark) ? mark : [mark];\n  }\n  return node;\n}\n\nfunction strong(): AdfMark {\n  return { type: \"strong\" };\n}\n\nfunction em(): AdfMark {\n  return { type: \"em\" };\n}\n\nfunction codeMark(): AdfMark {\n  return { type: \"code\" };\n}\n\nfunction codeInline(value: string): AdfNode {\n  return text(value, codeMark());\n}\n\nfunction link(label: string, href: string): AdfNode {\n  return text(label, { type: \"link\", attrs: { href } });\n}\n\nfunction paragraph(content: AdfNode[]): AdfNode {\n  return { type: \"paragraph\", content };\n}\n\nfunction heading(level: number, content: AdfNode[]): AdfNode {\n  return {\n    type: \"heading\",\n    attrs: { level: clampHeadingLevel(level) },\n    content,\n  };\n}\n\nfunction codeBlock(content: string, lang?: string): AdfNode {\n  return {\n    type: \"codeBlock\",\n    attrs: lang ? { language: lang } : {},\n    content: content ? [{ type: \"text\", text: content }] : [],\n  };\n}\n\nfunction panel(\n  panelType: \"info\" | \"note\" | \"warning\" | \"success\" | \"error\",\n  content: AdfNode[],\n): AdfNode {\n  return { type: \"panel\", attrs: { panelType }, content };\n}\n\nfunction table(rows: AdfNode[]): AdfNode {\n  return {\n    type: \"table\",\n    attrs: { isNumberColumnEnabled: false, layout: \"default\" },\n    content: rows,\n  };\n}\n\nfunction tableRow(cells: AdfNode[]): AdfNode {\n  return { type: \"tableRow\", content: cells };\n}\n\nfunction tableHeader(value: string): AdfNode {\n  return { type: \"tableHeader\", content: [paragraph([text(value)])] };\n}\n\nfunction tableCell(value: string): AdfNode {\n  return { type: \"tableCell\", content: [paragraph([text(value)])] };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction clampHeadingLevel(level: number): 1 | 2 | 3 | 4 | 5 | 6 {\n  if (level < 1) return 1;\n  if (level > 6) return 6;\n  return level as 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nfunction statusIcon(status: TestStatus): string {\n  switch (status) {\n    case \"passed\":\n      return \"✅\";\n    case \"failed\":\n      return \"❌\";\n    case \"skipped\":\n      return \"⏩\";\n    case \"pending\":\n      return \"📝\";\n    default:\n      return \"⚠️\";\n  }\n}\n\nfunction formatDuration(ms: number): string {\n  if (ms < 1000) return `${ms}ms`;\n  return `${(ms / 1000).toFixed(2)}s`;\n}\n\nfunction groupBy<T, K>(items: T[], keyFn: (item: T) => K): Map<K, T[]> {\n  const map = new Map<K, T[]>();\n  for (const item of items) {\n    const key = keyFn(item);\n    const existing = map.get(key);\n    if (existing) existing.push(item);\n    else map.set(key, [item]);\n  }\n  return map;\n}\n","import * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { copyAsset } from \"../bundler/copy-asset\";\n\nexport interface AstroAssetResult {\n  markdown: string;\n  copiedCount: number;\n  missingCount: number;\n  missing: string[];\n}\n\nexport interface CopyMarkdownAssetsOptions {\n  markdown: string;\n  markdownDir: string;\n  assetsDir: string;\n  assetsBaseUrl: string;\n  allowMissing?: boolean;\n}\n\nconst SKIP_PREFIXES = [\"http://\", \"https://\", \"data:\", \"#\"];\n\n/** Remote (http/data) or in-page anchor refs — never copied or rewritten. */\nfunction isRemoteRef(src: string): boolean {\n  const trimmed = src.trim();\n  return SKIP_PREFIXES.some((prefix) => trimmed.startsWith(prefix));\n}\n\n/** An absolute filesystem path (posix or windows). */\nfunction isAbsoluteRef(src: string): boolean {\n  const trimmed = src.trim();\n  return path.posix.isAbsolute(trimmed) || path.win32.isAbsolute(trimmed);\n}\n\n/**\n * A path that should be copied from `markdownDir` — i.e. a relative local ref.\n * Absolute paths are handled separately (resolved as-is, and only bundled when\n * they point at a real file) because story doc entries — notably Playwright\n * videos — frequently carry absolute paths, while served URLs like\n * `/stories/assets/x` are also absolute but must be left untouched.\n */\nfunction isRelativeLocalPath(src: string): boolean {\n  return !isRemoteRef(src) && !isAbsoluteRef(src);\n}\n\n/** Strip fenced code blocks and inline code spans so their contents aren't treated as real references. */\nfunction stripCodeContent(markdown: string): string {\n  // Strip fenced code blocks (allow leading whitespace for indented fences in lists/quotes)\n  let result = markdown.replace(/^[ \\t]*(`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^[ \\t]*\\1\\s*$/gm, \"\");\n  // Strip inline code spans — backreference ensures opening and closing delimiters match\n  result = result.replace(/(`+)(?:(?!\\1).)+\\1/g, \"\");\n  // Strip HTML code/pre blocks so literal snippets are not scanned as assets\n  result = result.replace(/<pre\\b[^>]*>[\\s\\S]*?<\\/pre>/gi, \"\");\n  result = result.replace(/<code\\b[^>]*>[\\s\\S]*?<\\/code>/gi, \"\");\n  return result;\n}\n\n/**\n * Scan markdown for local asset references (images, videos).\n * Returns an array of unique local paths found.\n * Ignores references inside fenced code blocks.\n */\nexport function scanMarkdownAssets(markdown: string): string[] {\n  const found = new Set<string>();\n  const stripped = stripCodeContent(markdown);\n\n  // Markdown image syntax: ![alt](path) or ![alt](path \"title\")\n  const mdImageRe = /!\\[[^\\]]*\\]\\(([^)\"'\\s]+)(?:\\s+[\"'][^\"']*[\"'])?\\s*\\)/g;\n  let match: RegExpExecArray | null;\n  while ((match = mdImageRe.exec(stripped)) !== null) {\n    const src = match[1].trim();\n    if (!isRemoteRef(src)) {\n      found.add(src);\n    }\n  }\n\n  // HTML tags: <img src=\"...\">, <source src=\"...\">, <video src=\"...\">\n  const htmlSrcRe = /<(?:img|source|video)[^>]+\\bsrc=[\"']([^\"']+)[\"'][^>]*>/gi;\n  while ((match = htmlSrcRe.exec(stripped)) !== null) {\n    const src = match[1].trim();\n    if (!isRemoteRef(src)) {\n      found.add(src);\n    }\n  }\n\n  // Video poster frames: <video ... poster=\"...\">\n  const posterRe = /<video[^>]+\\bposter=[\"']([^\"']+)[\"'][^>]*>/gi;\n  while ((match = posterRe.exec(stripped)) !== null) {\n    const src = match[1].trim();\n    if (!isRemoteRef(src)) {\n      found.add(src);\n    }\n  }\n\n  return Array.from(found);\n}\n\n/**\n * Split markdown into alternating [prose, code, prose, code, ...] segments.\n * Fenced code blocks and inline code spans are returned verbatim;\n * only prose segments are rewritten.\n */\nfunction splitByCode(markdown: string): string[] {\n  // Match fenced code blocks (with optional indentation), HTML code blocks, or inline code spans.\n  const codeRe =\n    /^[ \\t]*(`{3,}|~{3,})[^\\n]*\\n[\\s\\S]*?^[ \\t]*\\1\\s*$|<pre\\b[^>]*>[\\s\\S]*?<\\/pre>|<code\\b[^>]*>[\\s\\S]*?<\\/code>|(`+)(?:(?!\\2).)+\\2/gim;\n  const segments: string[] = [];\n  let lastIndex = 0;\n\n  for (const match of markdown.matchAll(codeRe)) {\n    if (match.index! > lastIndex) {\n      segments.push(markdown.slice(lastIndex, match.index!));\n    }\n    segments.push(match[0]); // code — preserved as-is\n    lastIndex = match.index! + match[0].length;\n  }\n  if (lastIndex < markdown.length) {\n    segments.push(markdown.slice(lastIndex));\n  }\n  return segments;\n}\n\n/** Returns true if segment is a code block or inline code span. */\nfunction isCode(segment: string): boolean {\n  // Case-insensitive, matching splitByCode.\n  return /^(?:`|~|<pre\\b|<code\\b)/i.test(segment.trimStart());\n}\n\n/**\n * Resolve a single asset ref to its served path, or null when it should be left\n * unchanged. Remote/anchor refs are skipped. With a pathMap (the copy pipeline),\n * only refs that were actually copied are rewritten — so absolute paths bundle\n * correctly and unknown served URLs pass through. Without a pathMap, only\n * relative local refs get the base-url prefix.\n */\nfunction resolveRewrite(\n  trimmed: string,\n  assetsBaseUrl: string,\n  pathMap?: Map<string, string>,\n): string | null {\n  if (isRemoteRef(trimmed)) return null;\n  if (pathMap) {\n    const mapped = pathMap.get(trimmed);\n    return mapped === undefined ? null : `${assetsBaseUrl}/${mapped}`;\n  }\n  if (!isRelativeLocalPath(trimmed)) return null;\n  return `${assetsBaseUrl}/${trimmed}`;\n}\n\n/** Rewrite asset paths in a single prose (non-fenced) segment. */\nfunction rewriteProseSegment(\n  prose: string,\n  assetsBaseUrl: string,\n  pathMap?: Map<string, string>,\n): string {\n  const rewrite = (full: string, pre: string, src: string, post: string): string => {\n    const target = resolveRewrite(src.trim(), assetsBaseUrl, pathMap);\n    return target === null ? full : `${pre}${target}${post}`;\n  };\n\n  return prose\n    // Markdown image syntax: ![alt](path) or ![alt](path \"title\")\n    .replace(/(!\\[[^\\]]*\\]\\()([^)\"'\\s]+)((?:\\s+[\"'][^\"']*[\"'])?\\s*\\))/g, rewrite)\n    // HTML src attributes in img/source/video tags\n    .replace(/(<(?:img|source|video)[^>]+\\bsrc=[\"'])([^\"']+)([\"'][^>]*>)/gi, rewrite)\n    // poster attributes on video tags\n    .replace(/(<video[^>]+\\bposter=[\"'])([^\"']+)([\"'][^>]*>)/gi, rewrite);\n}\n\n/**\n * Rewrite local asset paths in markdown using a path map or a base URL.\n * Paths not present in the pathMap are left unchanged.\n * Content inside fenced code blocks and inline code spans is never rewritten.\n */\nexport function rewriteAssetPaths(\n  markdown: string,\n  assetsBaseUrl: string,\n  pathMap?: Map<string, string>,\n): string {\n  return splitByCode(markdown)\n    .map((seg) => (isCode(seg) ? seg : rewriteProseSegment(seg, assetsBaseUrl, pathMap)))\n    .join(\"\");\n}\n\nconst INLINE_IMAGE_RE = /data:image\\/(png|jpeg|gif|webp);base64,([A-Za-z0-9+/=]+)/g;\n\n/**\n * Write each base64 image in markdown prose to assetsDir (content-hashed, so\n * repeats share one file) and point the markdown at it. Code is left alone.\n */\nexport function extractInlineImages(\n  markdown: string,\n  assetsDir: string,\n  assetsBaseUrl: string,\n): { markdown: string; refs: Set<string> } {\n  const refs = new Set<string>();\n  const out = splitByCode(markdown)\n    .map((seg) =>\n      isCode(seg)\n        ? seg\n        : seg.replace(INLINE_IMAGE_RE, (_match, type: string, base64: string) => {\n            const bytes = Buffer.from(base64, \"base64\");\n            const hash = crypto.createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 8);\n            const name = `screenshot-${hash}.${type === \"jpeg\" ? \"jpg\" : type}`;\n            const ref = `${assetsBaseUrl}/${name}`;\n            if (!refs.has(ref)) {\n              fs.mkdirSync(assetsDir, { recursive: true });\n              fs.writeFileSync(path.join(assetsDir, name), bytes);\n              refs.add(ref);\n            }\n            return ref;\n          }),\n    )\n    .join(\"\");\n  return { markdown: out, refs };\n}\n\n/**\n * Full pipeline: scan markdown for local asset refs, copy them to assetsDir\n * with content-hashed names, and rewrite the paths in the markdown.\n */\nexport function copyMarkdownAssets(options: CopyMarkdownAssetsOptions): AstroAssetResult {\n  const {\n    markdown,\n    markdownDir,\n    assetsDir,\n    assetsBaseUrl,\n    allowMissing = false,\n  } = options;\n\n  // Inline screenshots (story.screenshot({ page }) captures) become files too,\n  // which keeps docs pages small and lets them cache and diff.\n  const { markdown: extracted, refs: inlined } = extractInlineImages(markdown, assetsDir, assetsBaseUrl);\n  // Already written above.\n  const refs = scanMarkdownAssets(extracted).filter((ref) => !inlined.has(ref));\n  const pathMap = new Map<string, string>();\n  const missing: string[] = [];\n\n  for (const ref of refs) {\n    const absPath = isAbsoluteRef(ref) ? ref : path.resolve(markdownDir, ref);\n    if (!fs.existsSync(absPath)) {\n      // An absolute path that isn't a real file is an already-served URL\n      // (e.g. /stories/assets/x, /demo-assets/x) — leave it untouched, never error.\n      if (isAbsoluteRef(ref)) continue;\n      if (!allowMissing) {\n        throw new Error(`Asset not found: ${absPath}`);\n      }\n      missing.push(ref);\n      continue;\n    }\n    // copyAsset returns \"assets/<hashed-name>\"\n    const relativeCopied = copyAsset(absPath, assetsDir);\n    // Strip leading \"assets/\" prefix since assetsBaseUrl already points there\n    const fileName = relativeCopied.replace(/^assets\\//, \"\");\n    pathMap.set(ref, fileName);\n  }\n\n  const rewritten = rewriteAssetPaths(extracted, assetsBaseUrl, pathMap);\n\n  return {\n    markdown: rewritten,\n    copiedCount: pathMap.size + inlined.size,\n    missingCount: missing.length,\n    missing,\n  };\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as crypto from \"node:crypto\";\n\n/**\n * Copy a source file into assetsDir with a content-hashed filename.\n *\n * Returns the relative path from the HTML file's directory to the copied asset\n * (e.g. \"assets/video-3f2c1a7b.webm\").\n *\n * Idempotent: if the destination already exists, skips the copy.\n */\nexport function copyAsset(sourcePath: string, assetsDir: string): string {\n  if (!fs.existsSync(assetsDir)) {\n    fs.mkdirSync(assetsDir, { recursive: true });\n  }\n\n  const content = fs.readFileSync(sourcePath);\n  const hash = crypto.createHash(\"sha256\").update(content).digest(\"hex\").slice(0, 8);\n\n  const ext = path.extname(sourcePath);\n  const baseName = sanitize(path.basename(sourcePath, ext));\n  const destName = `${baseName}-${hash}${ext}`;\n  const destPath = path.join(assetsDir, destName);\n\n  if (!fs.existsSync(destPath)) {\n    fs.copyFileSync(sourcePath, destPath);\n  }\n\n  return `assets/${destName}`;\n}\n\n/** Replace non-alphanumeric/hyphen/dot characters with hyphens, collapse runs. */\nfunction sanitize(name: string): string {\n  return name\n    .replace(/[^a-zA-Z0-9._-]/g, \"-\")\n    .replace(/-{2,}/g, \"-\")\n    .replace(/^-|-$/g, \"\");\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { scanHtmlAssets } from \"./scan-html-assets\";\nimport { copyAsset } from \"./copy-asset\";\n\nexport interface BundleOptions {\n  /** If true, warn about missing assets instead of throwing. Default: false. */\n  allowMissing?: boolean;\n}\n\nexport interface BundleResult {\n  /** Number of assets successfully copied */\n  copiedCount: number;\n  /** Number of missing assets */\n  missingCount: number;\n  /** Paths of missing assets (original references) */\n  missing: string[];\n}\n\n/**\n * Post-process an HTML report file: copy referenced local assets into\n * an `assets/` directory beside it and rewrite paths in the HTML.\n */\nexport function bundleAssets(\n  htmlPath: string,\n  options: BundleOptions = {},\n): BundleResult {\n  const htmlDir = path.dirname(htmlPath);\n  const assetsDir = path.join(htmlDir, \"assets\");\n\n  let html = fs.readFileSync(htmlPath, \"utf8\");\n  const refs = scanHtmlAssets(html);\n\n  let copiedCount = 0;\n  const missing: string[] = [];\n\n  for (const ref of refs) {\n    const absolutePath = path.resolve(htmlDir, ref);\n\n    if (!fs.existsSync(absolutePath)) {\n      missing.push(ref);\n      continue;\n    }\n\n    const newRelPath = copyAsset(absolutePath, assetsDir);\n    html = replaceAssetRef(html, ref, newRelPath);\n    // Also point the embedded report JSON at the bundled asset: the interactive\n    // island re-renders doc entries (screenshots, video) from that JSON, so\n    // without this a bundled-and-interactive report would 404 its media on\n    // client takeover. No-op for non-interactive reports (no data script).\n    html = replaceAssetRefInData(html, ref, newRelPath);\n    copiedCount++;\n  }\n\n  if (missing.length > 0 && !options.allowMissing) {\n    throw new Error(\n      `Missing asset${missing.length > 1 ? \"s\" : \"\"}: ${missing.join(\", \")}`,\n    );\n  }\n\n  fs.writeFileSync(htmlPath, html, \"utf8\");\n\n  return {\n    copiedCount,\n    missingCount: missing.length,\n    missing,\n  };\n}\n\n/**\n * Replace an asset reference only in bundleable contexts:\n * - src=\"...\" on <img>/<video>/<iframe> elements\n * - href=\"...\" on <a class=\"attachment\"> elements\n *\n * Ordinary doc links sharing the same path are left untouched.\n */\nfunction replaceAssetRef(html: string, original: string, replacement: string): string {\n  const escaped = original.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n  // Rewrite src= on <img>, <video>, and <iframe>\n  const srcPattern = new RegExp(\n    `(<(?:img|video|iframe)\\\\b[^>]*?\\\\bsrc=[\"'])${escaped}([\"'])`,\n    \"g\",\n  );\n  html = html.replace(srcPattern, `$1${replacement}$2`);\n\n  // Rewrite href= on <a class=\"attachment\"> (class before href)\n  const hrefClassFirst = new RegExp(\n    `(<a\\\\b[^>]*?\\\\bclass=[\"']attachment[\"'][^>]*?\\\\bhref=[\"'])${escaped}([\"'])`,\n    \"g\",\n  );\n  html = html.replace(hrefClassFirst, `$1${replacement}$2`);\n\n  // Rewrite href= on <a class=\"attachment\"> (href before class)\n  const hrefHrefFirst = new RegExp(\n    `(<a\\\\b[^>]*?\\\\bhref=[\"'])${escaped}([\"'][^>]*?\\\\bclass=[\"']attachment[\"'])`,\n    \"g\",\n  );\n  html = html.replace(hrefHrefFirst, `$1${replacement}$2`);\n\n  return html;\n}\n\n/**\n * Rewrite a path inside the embedded report JSON (`<script\n * type=\"application/json\">…</script>`) so the interactive island, which\n * re-renders doc entries from that JSON, resolves the bundled asset. Scoped to\n * the data script (like replaceAssetRef is scoped to attributes) so ordinary\n * text that happens to match a path is left alone. Returns html unchanged when\n * there is no data script (a non-interactive report).\n */\nfunction replaceAssetRefInData(html: string, original: string, replacement: string): string {\n  const escaped = original.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  const quoted = new RegExp(`\"${escaped}\"`, \"g\");\n  return html.replace(\n    /(<script\\b[^>]*\\btype=[\"']application\\/json[\"'][^>]*>)([\\s\\S]*?)(<\\/script>)/g,\n    (_full, open: string, body: string, close: string) =>\n      open + body.replace(quoted, `\"${replacement}\"`) + close,\n  );\n}\n","/**\n * Scan generated HTML for local asset references.\n *\n * Targets: src=\"...\" on img/video/iframe, href=\"...\" on a.attachment.\n * Skips: data: URIs, http/https URLs, empty strings, fragment-only refs.\n * Returns deduplicated list of local path strings.\n */\nexport function scanHtmlAssets(html: string): string[] {\n  const seen = new Set<string>();\n\n  // Strip <script> and <style> blocks before matching: an interactive report\n  // inlines the hydration island (minified JS) and the report JSON, both of\n  // which contain src=-like text (e.g. `src=\"${e}\"`) that is code/data, not a\n  // real element. The actual <img>/<video> elements live in the markup outside\n  // these blocks; the embedded JSON is rewritten separately in bundle-assets.\n  const scannable = html\n    .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n    .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\");\n\n  // Only match src=\"...\" on <img>, <video>, and <iframe> elements, and\n  // href=\"...\" on <a class=\"attachment\"> elements.\n  // This avoids treating ordinary doc links as bundleable assets.\n  const patterns: RegExp[] = [\n    /<(?:img|video|iframe)\\b[^>]*?\\bsrc=[\"']([^\"']+)[\"']/g,\n    /<a\\b[^>]*?\\bclass=[\"']attachment[\"'][^>]*?\\bhref=[\"']([^\"']+)[\"']/g,\n    /<a\\b[^>]*?\\bhref=[\"']([^\"']+)[\"'][^>]*?\\bclass=[\"']attachment[\"']/g,\n  ];\n\n  for (const pattern of patterns) {\n    let match: RegExpExecArray | null;\n    while ((match = pattern.exec(scannable)) !== null) {\n      const ref = match[1];\n      if (isLocalAssetRef(ref) && !seen.has(ref)) {\n        seen.add(ref);\n      }\n    }\n  }\n\n  return [...seen];\n}\n\nfunction isLocalAssetRef(ref: string): boolean {\n  if (!ref) return false;\n  if (ref.startsWith(\"data:\")) return false;\n  if (ref.startsWith(\"http://\") || ref.startsWith(\"https://\")) return false;\n  if (ref.startsWith(\"#\")) return false;\n  return true;\n}\n","/**\n * Build one run from the per-file reports.\n *\n * Each test source file owns a report; the combined view people read is derived\n * from those, explicitly. That keeps the storage model and the presentation\n * model separate: running one test file replaces one report, and any aggregate\n * is a pure function over whatever reports exist at the time.\n *\n * Deriving rather than accumulating is the point. There is no state here to get\n * out of step with the files on disk, because the files on disk are the state.\n */\nimport path from \"node:path\";\n\nimport type {\n  FeatureDeclaration,\n  TestCaseResult,\n  TestRunResult,\n} from \"executable-stories-core/types/test-result\";\n\nexport interface AggregateDeps {\n  readFile: (filePath: string) => string;\n  listDir: (dir: string) => string[] | undefined;\n  logger: { warn(msg: string): void };\n}\n\nexport interface AggregateResult {\n  run: TestRunResult;\n  /** How many per-file reports went into it. */\n  files: number;\n  /** Reports that could not be parsed. Named, never silently skipped. */\n  unreadable: string[];\n  /** Scenario ids claimed by more than one report. */\n  duplicateIds: string[];\n}\n\n/** Files this treats as a per-file report. */\nfunction isReportFile(name: string): boolean {\n  return name.endsWith(\".json\");\n}\n\n/**\n * Read every per-file report in `dir` and combine them into one run.\n *\n * Returns undefined when the directory holds no reports, so a caller can tell\n * \"nothing here yet\" from \"here is an empty run\".\n */\nexport function aggregateReports(\n  args: { dir: string },\n  deps: AggregateDeps\n): AggregateResult | undefined {\n  const names = (deps.listDir(args.dir) ?? []).filter(isReportFile);\n  if (names.length === 0) return undefined;\n\n  const runs: TestRunResult[] = [];\n  const unreadable: string[] = [];\n\n  for (const name of [...names].sort()) {\n    const filePath = path.posix.join(args.dir, name);\n    try {\n      const parsed = JSON.parse(deps.readFile(filePath)) as TestRunResult;\n      if (!Array.isArray(parsed?.testCases)) throw new Error(\"no testCases\");\n      runs.push(parsed);\n    } catch {\n      // One unreadable report must not take the aggregate down with it, but it\n      // must not vanish either: the reader needs to know their view is partial.\n      unreadable.push(filePath);\n      deps.logger.warn(\n        `Ignoring unreadable report ${filePath}; the combined report is missing whatever it held.`\n      );\n    }\n  }\n\n  if (runs.length === 0 && unreadable.length === 0) return undefined;\n\n  const testCases: TestCaseResult[] = [];\n  const seenIds = new Set<string>();\n  const duplicateIds: string[] = [];\n\n  // Sorted by source file so the same reports always produce the same document,\n  // whatever order the filesystem hands them back.\n  const ordered = runs\n    .flatMap((run) => run.testCases)\n    .sort(\n      (a, b) => a.sourceFile.localeCompare(b.sourceFile) || a.id.localeCompare(b.id)\n    );\n\n  for (const testCase of ordered) {\n    if (seenIds.has(testCase.id)) {\n      duplicateIds.push(testCase.id);\n      continue;\n    }\n    seenIds.add(testCase.id);\n    testCases.push(testCase);\n  }\n\n  if (duplicateIds.length > 0) {\n    deps.logger.warn(\n      `${duplicateIds.length} scenario id(s) claimed by more than one report; keeping the first of each: ${duplicateIds.join(\", \")}`\n    );\n  }\n\n  const features: FeatureDeclaration[] = [];\n  const seenFeatureFiles = new Set<string>();\n  for (const run of runs) {\n    for (const feature of run.features ?? []) {\n      if (seenFeatureFiles.has(feature.sourceFile)) continue;\n      seenFeatureFiles.add(feature.sourceFile);\n      features.push(feature);\n    }\n  }\n  features.sort((a, b) => a.sourceFile.localeCompare(b.sourceFile));\n\n  // The aggregate spans its inputs rather than claiming a single moment: these\n  // reports were produced by different runs at different times.\n  const starts = runs.map((r) => r.startedAtMs).filter((n) => typeof n === \"number\" && n > 0);\n  const finishes = runs.map((r) => r.finishedAtMs).filter((n) => typeof n === \"number\" && n > 0);\n  const startedAtMs = starts.length > 0 ? Math.min(...starts) : 0;\n  const finishedAtMs = finishes.length > 0 ? Math.max(...finishes) : startedAtMs;\n\n  const newest = runs.reduce<TestRunResult | undefined>(\n    (best, run) => (!best || run.finishedAtMs > best.finishedAtMs ? run : best),\n    undefined\n  );\n\n  const run: TestRunResult = {\n    testCases,\n    ...(features.length > 0 ? { features } : {}),\n    startedAtMs,\n    finishedAtMs,\n    durationMs: Math.max(0, finishedAtMs - startedAtMs),\n    projectRoot: newest?.projectRoot ?? runs[0]?.projectRoot ?? \"\",\n    runId: newest?.runId ?? \"aggregate\",\n    ...(newest?.packageVersion ? { packageVersion: newest.packageVersion } : {}),\n    ...(newest?.gitSha ? { gitSha: newest.gitSha } : {}),\n    ...(newest?.ci ? { ci: newest.ci } : {}),\n  };\n\n  return { run, files: runs.length, unreadable, duplicateIds };\n}\n","/**\n * Lifecycle for the per-file reports under `<outputDir>/by-file/`.\n *\n * The directory is plain and visible, so `ls` and `rm` already answer most\n * questions about it. What a listing cannot show is how old each file's results\n * are, and that is the question behind \"why does the combined report still say\n * this passes\" — the file is right there, its contents are simply from a run\n * three weeks ago.\n *\n * Neither command changes how a report is produced.\n */\nimport path from \"node:path\";\n\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\n\nimport { byFileDirFor } from \"./file-reports\";\n\nexport interface RunsLifecycleDeps {\n  readFile: (filePath: string) => string;\n  listDir: (dir: string) => string[] | undefined;\n  removeFile: (filePath: string) => void;\n  logger: { warn(msg: string): void };\n}\n\n/** What one test file's report looks like from the outside. */\nexport interface AccumulatedFile {\n  sourceFile: string;\n  scenarios: number;\n  /** When this file's newest scenario last ran, or undefined if none say. */\n  lastRunAtMs?: number;\n  lastRunGitSha?: string;\n}\n\nexport interface RunsStatusReport {\n  /** Path of the reports directory, for the reader to go look. */\n  directory: string;\n  exists: boolean;\n  files: AccumulatedFile[];\n  totalScenarios: number;\n  /** Reports that could not be parsed. Named, never silently skipped. */\n  unreadable: string[];\n  /** Human-readable rendering, what the CLI prints. */\n  text: string;\n}\n\n/** Human-readable age. Mirrors the report's own wording. */\nfunction relativeAge(thenMs: number, nowMs: number): string {\n  const deltaMs = Math.max(0, nowMs - thenMs);\n  const minutes = Math.floor(deltaMs / 60_000);\n  if (minutes < 1) return \"just now\";\n  if (minutes < 60) return `${minutes} minute${minutes === 1 ? \"\" : \"s\"} ago`;\n  const hours = Math.floor(minutes / 60);\n  if (hours < 24) return `${hours} hour${hours === 1 ? \"\" : \"s\"} ago`;\n  const days = Math.floor(hours / 24);\n  return `${days} day${days === 1 ? \"\" : \"s\"} ago`;\n}\n\nfunction readFileReports(\n  dir: string,\n  deps: RunsLifecycleDeps\n): { files: AccumulatedFile[]; unreadable: string[]; names: string[] } {\n  const names = (deps.listDir(dir) ?? []).filter((n) => n.endsWith(\".json\")).sort();\n  const files: AccumulatedFile[] = [];\n  const unreadable: string[] = [];\n\n  for (const name of names) {\n    const filePath = path.posix.join(dir, name);\n    try {\n      const run = JSON.parse(deps.readFile(filePath)) as TestRunResult;\n      const testCases = run.testCases ?? [];\n      const sourceFile = testCases[0]?.sourceFile;\n      if (!sourceFile) {\n        unreadable.push(filePath);\n        continue;\n      }\n      const stamps = testCases\n        .map((tc) => tc.lastRunAtMs)\n        .filter((ms): ms is number => typeof ms === \"number\");\n      files.push({\n        sourceFile,\n        scenarios: testCases.length,\n        ...(stamps.length > 0 ? { lastRunAtMs: Math.max(...stamps) } : {}),\n        ...(testCases[0]?.lastRunGitSha ? { lastRunGitSha: testCases[0].lastRunGitSha } : {}),\n      });\n    } catch {\n      unreadable.push(filePath);\n    }\n  }\n\n  files.sort((a, b) => a.sourceFile.localeCompare(b.sourceFile));\n  return { files, unreadable, names };\n}\n\n/**\n * What the report would be built from right now: every test file the state\n * holds, how many scenarios each contributes, and how old those results are.\n */\nexport function runsStatus(\n  args: { outputDir: string; nowMs: number },\n  deps: RunsLifecycleDeps\n): RunsStatusReport {\n  const directory = byFileDirFor(args.outputDir);\n  const { files, unreadable, names } = readFileReports(directory, deps);\n  const exists = names.length > 0 || unreadable.length > 0;\n  const totalScenarios = files.reduce((sum, f) => sum + f.scenarios, 0);\n\n  const lines: string[] = [];\n  if (!exists) {\n    lines.push(\n      `No per-file reports in ${directory}.`,\n      \"Your next test run writes them, one per test source file.\"\n    );\n  } else {\n    lines.push(`Reports in ${directory}, one per test source file:`, \"\");\n    for (const file of files) {\n      const age =\n        file.lastRunAtMs === undefined\n          ? \"age unknown\"\n          : relativeAge(file.lastRunAtMs, args.nowMs);\n      const sha = file.lastRunGitSha ? ` @ ${file.lastRunGitSha.slice(0, 8)}` : \"\";\n      const count = `${file.scenarios} scenario${file.scenarios === 1 ? \"\" : \"s\"}`;\n      lines.push(`  ${file.sourceFile}  ${count}, last ran ${age}${sha}`);\n    }\n    lines.push(\n      \"\",\n      `${totalScenarios} scenario${totalScenarios === 1 ? \"\" : \"s\"} across ${files.length} file${files.length === 1 ? \"\" : \"s\"}.`\n    );\n    if (unreadable.length > 0) {\n      lines.push(\"\", \"Unreadable, and therefore not in the report:\");\n      for (const file of unreadable) lines.push(`  ${file}`);\n    }\n    lines.push(\n      \"\",\n      `Combine them with: executable-stories format ${directory} --format html`,\n      \"Start over with: executable-stories runs reset\"\n    );\n  }\n\n  return { directory, exists, files, totalScenarios, unreadable, text: lines.join(\"\\n\") };\n}\n\nexport interface RunsResetResult {\n  directory: string;\n  removed: number;\n  text: string;\n}\n\n/**\n * Delete every per-file report. The next full test run writes them again.\n *\n * Removes only this directory's reports; anything rendered beside it in the\n * output folder is the user's own output and is left alone.\n */\nexport function runsReset(\n  args: { outputDir: string },\n  deps: RunsLifecycleDeps\n): RunsResetResult {\n  const directory = byFileDirFor(args.outputDir);\n  const names = (deps.listDir(directory) ?? []).filter((n) => n.endsWith(\".json\"));\n\n  for (const name of names) deps.removeFile(path.posix.join(directory, name));\n\n  const text =\n    names.length === 0\n      ? `Nothing to reset: no per-file reports in ${directory}.`\n      : `Removed ${names.length} per-file report${names.length === 1 ? \"\" : \"s\"} from ${directory}.\\n` +\n        \"Run your full test suite to write them again.\";\n\n  return { directory, removed: names.length, text };\n}\n","import type { ScenarioChangeKind } from \"./types/compare\";\nimport type { ReportScenario, StoryReport, TestStatus } from \"executable-stories-core/types/story-report\";\n\nexport interface BehaviorDiffEntry {\n  id: string;\n  title: string;\n  sourceFile: string;\n  kind: ScenarioChangeKind;\n  baselineStatus?: TestStatus;\n  currentStatus?: TestStatus;\n}\n\nexport interface BehaviorDiff {\n  schemaVersion: \"1.0\";\n  summary: {\n    added: number;\n    removed: number;\n    regressed: number;\n    fixed: number;\n    changed: number;\n    unchanged: number;\n  };\n  scenarios: BehaviorDiffEntry[];\n}\n\n/**\n * Classify a single scenario's status transition between two runs.\n * Shares the `ScenarioChangeKind` vocabulary with the full compare engine.\n */\nexport function classifyStatusChange(\n  baseline: TestStatus | undefined,\n  current: TestStatus | undefined,\n): ScenarioChangeKind {\n  if (baseline === undefined) return \"added\";\n  if (current === undefined) return \"removed\";\n  if (baseline === current) return \"unchanged\";\n  if (baseline === \"passed\" && current === \"failed\") return \"regressed\";\n  if (baseline === \"failed\" && current === \"passed\") return \"fixed\";\n  return \"changed\";\n}\n\nfunction scenarioMap(\n  report: StoryReport,\n): Map<string, { scenario: ReportScenario; sourceFile: string }> {\n  const map = new Map<string, { scenario: ReportScenario; sourceFile: string }>();\n  for (const feature of report.features) {\n    for (const scenario of feature.scenarios) {\n      map.set(scenario.id, { scenario, sourceFile: feature.sourceFile });\n    }\n  }\n  return map;\n}\n\n/**\n * Scenario-level diff of two StoryReports, keyed by scenario id. Reports status\n * transitions (the agent triage signal), not the full field-by-field diff that\n * the human-facing compare engine produces.\n */\nexport function diffStoryReports(baseline: StoryReport, current: StoryReport): BehaviorDiff {\n  const base = scenarioMap(baseline);\n  const curr = scenarioMap(current);\n  const ids = [...new Set([...base.keys(), ...curr.keys()])];\n\n  const scenarios: BehaviorDiffEntry[] = ids.map((id) => {\n    const b = base.get(id);\n    const c = curr.get(id);\n    const kind = classifyStatusChange(b?.scenario.status, c?.scenario.status);\n    const meta = c ?? b!;\n    return {\n      id,\n      title: meta.scenario.title,\n      sourceFile: meta.sourceFile,\n      kind,\n      baselineStatus: b?.scenario.status,\n      currentStatus: c?.scenario.status,\n    };\n  });\n\n  const summary = { added: 0, removed: 0, regressed: 0, fixed: 0, changed: 0, unchanged: 0 };\n  for (const s of scenarios) {\n    // This status-only diff is keyed by scenario id and never re-identifies renames/moves\n    // (that is the full compare engine's job), so those kinds cannot occur here.\n    if (s.kind === \"renamed\" || s.kind === \"moved\") continue;\n    summary[s.kind] += 1;\n  }\n\n  return { schemaVersion: \"1.0\", summary, scenarios };\n}\n","/**\n * Confluence publisher.\n *\n * Pushes an ADF JSON document to a Confluence Cloud page via the REST API v2.\n * - If `pageId` is provided, the page is updated in place (title + body + version).\n * - If `spaceId` is provided instead, a new page is created (optionally under `parentId`).\n *\n * Authentication: Basic auth with an Atlassian email + API token.\n * Generate tokens at https://id.atlassian.com/manage-profile/security/api-tokens.\n */\n\n/** HTTP fetch function (injectable for tests). Matches global fetch signature. */\nexport type FetchFn = (\n  url: string,\n  init: {\n    method: string;\n    headers: Record<string, string>;\n    body?: string;\n  },\n) => Promise<{\n  ok: boolean;\n  status: number;\n  statusText: string;\n  text(): Promise<string>;\n  json(): Promise<unknown>;\n}>;\n\nexport interface ConfluenceAuth {\n  /** Atlassian account email */\n  email: string;\n  /** Atlassian API token */\n  token: string;\n}\n\nexport interface PublishConfluenceArgs {\n  /** ADF document JSON string (the `{ version, type: \"doc\", content }` envelope) */\n  adf: string;\n  /** Page ID to update (mutually exclusive with spaceId for create) */\n  pageId?: string;\n  /** Space ID required when creating a new page */\n  spaceId?: string;\n  /** Parent page ID (optional, for new pages) */\n  parentId?: string;\n  /** Page title. Required for create; updates existing title if provided on update */\n  title?: string;\n  /** Base URL of the Confluence instance, e.g. https://acme.atlassian.net/wiki */\n  baseUrl: string;\n}\n\nexport interface PublishConfluenceDeps {\n  auth: ConfluenceAuth;\n  /** Defaults to globalThis.fetch */\n  fetch?: FetchFn;\n}\n\nexport interface PublishConfluenceResult {\n  id: string;\n  version: number;\n  title: string;\n  /** Canonical URL to view the page in Confluence */\n  url: string;\n  action: \"created\" | \"updated\";\n}\n\n/**\n * Validate that the supplied string parses to a valid ADF document envelope.\n * Returns the parsed object, or throws with a descriptive error.\n */\nfunction parseAdf(adf: string): {\n  version: number;\n  type: string;\n  content: unknown[];\n} {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(adf);\n  } catch (err) {\n    throw new Error(`ADF payload is not valid JSON: ${(err as Error).message}`, {\n      cause: err,\n    });\n  }\n  if (\n    !parsed ||\n    typeof parsed !== \"object\" ||\n    (parsed as { type?: unknown }).type !== \"doc\" ||\n    !Array.isArray((parsed as { content?: unknown }).content)\n  ) {\n    throw new Error(\n      `ADF payload must be an object with { version, type: \"doc\", content: [...] }`,\n    );\n  }\n  return parsed as { version: number; type: string; content: unknown[] };\n}\n\nfunction basicAuthHeader(auth: ConfluenceAuth): string {\n  const raw = `${auth.email}:${auth.token}`;\n  const encoded =\n    typeof Buffer !== \"undefined\"\n      ? Buffer.from(raw, \"utf8\").toString(\"base64\")\n      : btoa(raw);\n  return `Basic ${encoded}`;\n}\n\nasync function parseErrorBody(\n  response: { text(): Promise<string> },\n): Promise<string> {\n  try {\n    const body = await response.text();\n    return body ? body.slice(0, 800) : \"\";\n  } catch {\n    return \"\";\n  }\n}\n\n/**\n * Publish an ADF document to Confluence. Creates a new page if `pageId` is\n * omitted, otherwise updates the existing page.\n */\nexport async function publishConfluencePage(\n  args: PublishConfluenceArgs,\n  deps: PublishConfluenceDeps,\n): Promise<PublishConfluenceResult> {\n  // Validate ADF up front so we fail fast with a clear message.\n  parseAdf(args.adf);\n\n  if (!args.pageId && !args.spaceId) {\n    throw new Error(\n      \"publishConfluencePage requires either pageId (update) or spaceId (create)\",\n    );\n  }\n  if (!args.pageId && !args.title) {\n    throw new Error(\"Creating a new page requires a title\");\n  }\n\n  const base = args.baseUrl.replace(/\\/$/, \"\");\n  const fetchFn: FetchFn = deps.fetch ?? (globalThis.fetch as unknown as FetchFn);\n  if (!fetchFn) {\n    throw new Error(\"No fetch implementation available (Node >= 22 expected)\");\n  }\n\n  const headers = {\n    Authorization: basicAuthHeader(deps.auth),\n    Accept: \"application/json\",\n    \"Content-Type\": \"application/json\",\n  };\n\n  if (args.pageId) {\n    return updatePage(args, base, headers, fetchFn);\n  }\n  return createPage(args, base, headers, fetchFn);\n}\n\nasync function updatePage(\n  args: PublishConfluenceArgs,\n  base: string,\n  headers: Record<string, string>,\n  fetchFn: FetchFn,\n): Promise<PublishConfluenceResult> {\n  // Look up current page to get version and default title.\n  const getUrl = `${base}/api/v2/pages/${encodeURIComponent(args.pageId!)}`;\n  const getResp = await fetchFn(getUrl, { method: \"GET\", headers });\n  if (!getResp.ok) {\n    const body = await parseErrorBody(getResp);\n    throw new Error(\n      `GET ${getUrl} failed with ${getResp.status} ${getResp.statusText}${body ? `: ${body}` : \"\"}`,\n    );\n  }\n  const current = (await getResp.json()) as {\n    id: string;\n    title: string;\n    version: { number: number };\n    _links?: { webui?: string; base?: string };\n  };\n  const nextVersion = current.version.number + 1;\n  const title = args.title ?? current.title;\n\n  const putUrl = `${base}/api/v2/pages/${encodeURIComponent(args.pageId!)}`;\n  const putResp = await fetchFn(putUrl, {\n    method: \"PUT\",\n    headers,\n    body: JSON.stringify({\n      id: args.pageId,\n      status: \"current\",\n      title,\n      body: {\n        representation: \"atlas_doc_format\",\n        value: args.adf,\n      },\n      version: { number: nextVersion },\n    }),\n  });\n  if (!putResp.ok) {\n    const body = await parseErrorBody(putResp);\n    throw new Error(\n      `PUT ${putUrl} failed with ${putResp.status} ${putResp.statusText}${body ? `: ${body}` : \"\"}`,\n    );\n  }\n  const updated = (await putResp.json()) as {\n    id: string;\n    title: string;\n    version: { number: number };\n    _links?: { webui?: string; base?: string };\n  };\n\n  return {\n    id: updated.id,\n    title: updated.title,\n    version: updated.version.number,\n    url: buildPageUrl(base, updated._links?.webui, updated.id),\n    action: \"updated\",\n  };\n}\n\nasync function createPage(\n  args: PublishConfluenceArgs,\n  base: string,\n  headers: Record<string, string>,\n  fetchFn: FetchFn,\n): Promise<PublishConfluenceResult> {\n  const body: Record<string, unknown> = {\n    spaceId: args.spaceId,\n    status: \"current\",\n    title: args.title,\n    body: {\n      representation: \"atlas_doc_format\",\n      value: args.adf,\n    },\n  };\n  if (args.parentId) body.parentId = args.parentId;\n\n  const postUrl = `${base}/api/v2/pages`;\n  const resp = await fetchFn(postUrl, {\n    method: \"POST\",\n    headers,\n    body: JSON.stringify(body),\n  });\n  if (!resp.ok) {\n    const errBody = await parseErrorBody(resp);\n    throw new Error(\n      `POST ${postUrl} failed with ${resp.status} ${resp.statusText}${errBody ? `: ${errBody}` : \"\"}`,\n    );\n  }\n  const created = (await resp.json()) as {\n    id: string;\n    title: string;\n    version: { number: number };\n    _links?: { webui?: string; base?: string };\n  };\n\n  return {\n    id: created.id,\n    title: created.title,\n    version: created.version.number,\n    url: buildPageUrl(base, created._links?.webui, created.id),\n    action: \"created\",\n  };\n}\n\nfunction buildPageUrl(base: string, webui: string | undefined, id: string): string {\n  if (webui) {\n    return webui.startsWith(\"http\") ? webui : `${base}${webui}`;\n  }\n  return `${base}/pages/${id}`;\n}\n","/**\n * Jira publisher.\n *\n * Pushes an ADF JSON document to a Jira Cloud issue via the REST API v3.\n * - mode \"comment\"     adds the ADF as a new comment (default, non-destructive)\n * - mode \"description\" replaces the issue description field with the ADF\n *\n * Authentication: Basic auth with an Atlassian email + API token (same token\n * system as Confluence — create one at id.atlassian.com).\n *\n * Note: unlike Confluence v2 (which expects the ADF as a stringified value),\n * Jira v3 accepts ADF as a native JSON object in the request body.\n */\n\nimport type { FetchFn, ConfluenceAuth } from \"./confluence\";\n\n/** Reuses the same auth + fetch shape as the Confluence publisher */\nexport type JiraAuth = ConfluenceAuth;\n\n/** Update mode — default \"comment\" is non-destructive and append-only */\nexport type JiraPublishMode = \"comment\" | \"description\";\n\nexport interface PublishJiraArgs {\n  /** ADF document JSON string (the `{ version, type: \"doc\", content }` envelope) */\n  adf: string;\n  /** Issue key, e.g. \"PROJ-123\" */\n  issueKey: string;\n  /** Base URL of the Jira instance, e.g. https://acme.atlassian.net */\n  baseUrl: string;\n  /** Defaults to \"comment\" */\n  mode?: JiraPublishMode;\n}\n\nexport interface PublishJiraDeps {\n  auth: JiraAuth;\n  /** Defaults to globalThis.fetch */\n  fetch?: FetchFn;\n}\n\nexport interface PublishJiraResult {\n  issueKey: string;\n  action: \"description-updated\" | \"comment-added\";\n  /** Canonical URL to view the issue (and comment, if applicable) */\n  url: string;\n  /** Set only when mode = \"comment\" */\n  commentId?: string;\n}\n\n/** Parse ADF and return the object (Jira accepts the full JSON object, not a string). */\nfunction parseAdf(adf: string): Record<string, unknown> {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(adf);\n  } catch (err) {\n    throw new Error(`ADF payload is not valid JSON: ${(err as Error).message}`, {\n      cause: err,\n    });\n  }\n  if (\n    !parsed ||\n    typeof parsed !== \"object\" ||\n    (parsed as { type?: unknown }).type !== \"doc\" ||\n    !Array.isArray((parsed as { content?: unknown }).content)\n  ) {\n    throw new Error(\n      `ADF payload must be an object with { version, type: \"doc\", content: [...] }`,\n    );\n  }\n  return parsed as Record<string, unknown>;\n}\n\nfunction basicAuthHeader(auth: JiraAuth): string {\n  const raw = `${auth.email}:${auth.token}`;\n  const encoded =\n    typeof Buffer !== \"undefined\"\n      ? Buffer.from(raw, \"utf8\").toString(\"base64\")\n      : btoa(raw);\n  return `Basic ${encoded}`;\n}\n\nasync function parseErrorBody(resp: {\n  text(): Promise<string>;\n}): Promise<string> {\n  try {\n    const body = await resp.text();\n    return body ? body.slice(0, 800) : \"\";\n  } catch {\n    return \"\";\n  }\n}\n\n/**\n * Publish an ADF document to a Jira issue. Defaults to adding a new comment.\n * Use mode: \"description\" to replace the issue's description field.\n */\nexport async function publishJiraIssue(\n  args: PublishJiraArgs,\n  deps: PublishJiraDeps,\n): Promise<PublishJiraResult> {\n  const adfObject = parseAdf(args.adf);\n  if (!args.issueKey) {\n    throw new Error(\"publishJiraIssue requires an issueKey, e.g. PROJ-123\");\n  }\n\n  const base = args.baseUrl.replace(/\\/$/, \"\");\n  const fetchFn: FetchFn = deps.fetch ?? (globalThis.fetch as unknown as FetchFn);\n  if (!fetchFn) {\n    throw new Error(\"No fetch implementation available (Node >= 22 expected)\");\n  }\n\n  const headers = {\n    Authorization: basicAuthHeader(deps.auth),\n    Accept: \"application/json\",\n    \"Content-Type\": \"application/json\",\n  };\n\n  const mode = args.mode ?? \"comment\";\n  if (mode === \"description\") {\n    return updateDescription(args.issueKey, base, adfObject, headers, fetchFn);\n  }\n  return addComment(args.issueKey, base, adfObject, headers, fetchFn);\n}\n\nasync function addComment(\n  issueKey: string,\n  base: string,\n  adf: Record<string, unknown>,\n  headers: Record<string, string>,\n  fetchFn: FetchFn,\n): Promise<PublishJiraResult> {\n  const url = `${base}/rest/api/3/issue/${encodeURIComponent(issueKey)}/comment`;\n  const resp = await fetchFn(url, {\n    method: \"POST\",\n    headers,\n    body: JSON.stringify({ body: adf }),\n  });\n  if (!resp.ok) {\n    const body = await parseErrorBody(resp);\n    throw new Error(\n      `POST ${url} failed with ${resp.status} ${resp.statusText}${body ? `: ${body}` : \"\"}`,\n    );\n  }\n  const comment = (await resp.json()) as { id: string };\n  const issueUrl = `${base}/browse/${encodeURIComponent(issueKey)}`;\n  return {\n    issueKey,\n    action: \"comment-added\",\n    url: `${issueUrl}?focusedCommentId=${encodeURIComponent(comment.id)}`,\n    commentId: comment.id,\n  };\n}\n\nasync function updateDescription(\n  issueKey: string,\n  base: string,\n  adf: Record<string, unknown>,\n  headers: Record<string, string>,\n  fetchFn: FetchFn,\n): Promise<PublishJiraResult> {\n  const url = `${base}/rest/api/3/issue/${encodeURIComponent(issueKey)}`;\n  const resp = await fetchFn(url, {\n    method: \"PUT\",\n    headers,\n    body: JSON.stringify({ fields: { description: adf } }),\n  });\n  // Jira returns 204 No Content on a successful PUT.\n  if (!resp.ok) {\n    const body = await parseErrorBody(resp);\n    throw new Error(\n      `PUT ${url} failed with ${resp.status} ${resp.statusText}${body ? `: ${body}` : \"\"}`,\n    );\n  }\n  return {\n    issueKey,\n    action: \"description-updated\",\n    url: `${base}/browse/${encodeURIComponent(issueKey)}`,\n  };\n}\n","/**\n * Git information utilities.\n *\n * Read git SHA and other info from the local repository.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\n/**\n * Read the current git SHA.\n *\n * Checks environment variables first (for CI), then reads from .git directory.\n *\n * @param cwd - Working directory to start search from\n * @returns Git SHA or undefined if not in a git repo\n */\nexport function readGitSha(cwd: string = process.cwd()): string | undefined {\n  // Check CI environment variables first\n  const envSha = process.env.GITHUB_SHA || process.env.GIT_COMMIT || process.env.CI_COMMIT_SHA;\n  if (envSha) return envSha;\n\n  // Find .git directory\n  const gitDir = findGitDir(cwd);\n  if (!gitDir) return undefined;\n\n  try {\n    const headPath = path.join(gitDir, \"HEAD\");\n    const head = fs.readFileSync(headPath, \"utf8\").trim();\n\n    // If HEAD is a direct SHA (detached HEAD state)\n    if (!head.startsWith(\"ref:\")) {\n      return head;\n    }\n\n    // HEAD points to a ref, resolve it\n    const refPath = head.replace(\"ref:\", \"\").trim();\n    const refFile = path.join(gitDir, refPath);\n\n    if (fs.existsSync(refFile)) {\n      return fs.readFileSync(refFile, \"utf8\").trim();\n    }\n\n    // Check packed-refs\n    const packedRefs = path.join(gitDir, \"packed-refs\");\n    if (fs.existsSync(packedRefs)) {\n      const content = fs.readFileSync(packedRefs, \"utf8\");\n      for (const line of content.split(\"\\n\")) {\n        if (!line || line.startsWith(\"#\") || line.startsWith(\"^\")) continue;\n        const [sha, ref] = line.split(\" \");\n        if (ref === refPath) return sha;\n      }\n    }\n\n    return undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Find the .git directory starting from a given directory.\n *\n * @param start - Directory to start search from\n * @returns Path to .git directory or undefined if not found\n */\nexport function findGitDir(start: string): string | undefined {\n  let current = start;\n  while (true) {\n    const candidate = path.join(current, \".git\");\n    if (fs.existsSync(candidate)) {\n      // Handle git worktrees where .git is a file\n      const stat = fs.statSync(candidate);\n      if (stat.isFile()) {\n        const content = fs.readFileSync(candidate, \"utf8\").trim();\n        const match = content.match(/^gitdir: (.+)$/);\n        if (match) {\n          return path.resolve(current, match[1]);\n        }\n      }\n      return candidate;\n    }\n    const parent = path.dirname(current);\n    if (parent === current) return undefined;\n    current = parent;\n  }\n}\n\n/**\n * Read the current branch name.\n *\n * @param cwd - Working directory\n * @returns Branch name or undefined\n */\nexport function readBranchName(cwd: string = process.cwd()): string | undefined {\n  // Check CI environment variables first\n  const envBranch = process.env.GITHUB_REF_NAME || process.env.CI_COMMIT_REF_NAME;\n  if (envBranch) return envBranch;\n\n  const gitDir = findGitDir(cwd);\n  if (!gitDir) return undefined;\n\n  try {\n    const headPath = path.join(gitDir, \"HEAD\");\n    const head = fs.readFileSync(headPath, \"utf8\").trim();\n\n    if (head.startsWith(\"ref:\")) {\n      const refPath = head.replace(\"ref:\", \"\").trim();\n      // Extract branch name from refs/heads/branch-name\n      const match = refPath.match(/^refs\\/heads\\/(.+)$/);\n      return match ? match[1] : refPath;\n    }\n\n    // Detached HEAD\n    return undefined;\n  } catch {\n    return undefined;\n  }\n}\n","/**\n * Metadata utilities for reading package information.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\n/** Cache for package versions by root directory */\nconst versionCache = new Map<string, string | undefined>();\n\n/**\n * Read the package version from the closest package.json.\n *\n * Results are cached by root directory.\n *\n * @param root - Directory to start searching from\n * @returns Package version string or undefined if not found\n */\nexport function readPackageVersion(root: string): string | undefined {\n  if (versionCache.has(root)) {\n    return versionCache.get(root);\n  }\n\n  const version = findPackageVersion(root);\n  versionCache.set(root, version);\n  return version;\n}\n\n/**\n * Find package.json version by walking up the directory tree.\n */\nfunction findPackageVersion(startDir: string): string | undefined {\n  let current = path.resolve(startDir);\n\n  while (true) {\n    const pkgPath = path.join(current, \"package.json\");\n    try {\n      if (fs.existsSync(pkgPath)) {\n        const raw = fs.readFileSync(pkgPath, \"utf8\");\n        const parsed = JSON.parse(raw) as { version?: string };\n        return parsed.version;\n      }\n    } catch {\n      // Continue searching\n    }\n\n    const parent = path.dirname(current);\n    if (parent === current) {\n      // Reached root\n      return undefined;\n    }\n    current = parent;\n  }\n}\n\n/**\n * Clear the package version cache.\n * Useful for testing.\n */\nexport function clearVersionCache(): void {\n  versionCache.clear();\n}\n","/**\n * No-dependency ANSI escape sequence stripper.\n */\n\n/** Strip ANSI escape sequences. Regex: \\x1B\\[[0-?]*[ -/]*[@-~] */\nexport function stripAnsi(text: string): string {\n  // eslint-disable-next-line no-control-regex\n  return text.replace(/\\x1B\\[[0-?]*[ -/]*[@-~]/g, \"\");\n}\n","/**\n * Slack webhook notifier using Block Kit.\n *\n * Follows the fn(args, deps) pattern.\n * Never logs the webhook URL.\n */\n\nimport type { NotificationSummary } from \"./types\";\nimport { stripAnsi } from \"./ansi-strip\";\n\n/** Arguments for sendSlackNotification. */\nexport interface SlackNotificationArgs {\n  summary: NotificationSummary;\n  webhookUrl: string;\n  maxFailedTests?: number;\n}\n\n/** Injectable dependencies for sendSlackNotification. */\nexport interface SlackNotificationDeps {\n  fetch: typeof globalThis.fetch;\n  logger: { warn(msg: string): void };\n}\n\n/** Result of a notification send attempt. */\nexport interface NotificationResult {\n  ok: boolean;\n  error?: string;\n}\n\n/** Truncate text to a maximum length, appending ellipsis if needed. */\nfunction truncate(text: string, maxLen: number): string {\n  if (text.length <= maxLen) return text;\n  return text.slice(0, maxLen - 3) + \"...\";\n}\n\n/** Format milliseconds as a human-readable duration string. */\nfunction formatDuration(ms: number): string {\n  const seconds = ms / 1000;\n  if (seconds < 60) return `${seconds.toFixed(1)}s`;\n  const minutes = Math.floor(seconds / 60);\n  const remainingSeconds = seconds % 60;\n  return `${minutes}m ${remainingSeconds.toFixed(0)}s`;\n}\n\n/** Build Slack Block Kit payload from a notification summary. */\nfunction buildSlackPayload(\n  summary: NotificationSummary,\n  maxFailedTests: number,\n): Record<string, unknown> {\n  const allPassed = summary.failed === 0;\n  const emoji = allPassed ? \":white_check_mark:\" : \":x:\";\n  const statusText = allPassed ? \"Passed\" : \"Failed\";\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const blocks: any[] = [];\n\n  // Header block\n  blocks.push({\n    type: \"header\",\n    text: {\n      type: \"plain_text\",\n      text: `${emoji} Test Results: ${summary.passed} passed, ${summary.failed} failed`,\n      emoji: true,\n    },\n  });\n\n  // Summary fields section\n  blocks.push({\n    type: \"section\",\n    fields: [\n      { type: \"mrkdwn\", text: `*Total:* ${summary.total}` },\n      { type: \"mrkdwn\", text: `*Passed:* ${summary.passed}` },\n      { type: \"mrkdwn\", text: `*Failed:* ${summary.failed}` },\n      { type: \"mrkdwn\", text: `*Skipped:* ${summary.skipped}` },\n      { type: \"mrkdwn\", text: `*Duration:* ${formatDuration(summary.durationMs)}` },\n      { type: \"mrkdwn\", text: `*Status:* ${statusText}` },\n    ],\n  });\n\n  // Failed tests section\n  if (summary.failedTests.length > 0) {\n    const displayedTests = summary.failedTests.slice(0, maxFailedTests);\n    const lines = displayedTests.map((t) => {\n      const name = t.name;\n      if (t.error) {\n        const cleanError = truncate(stripAnsi(t.error), 500);\n        return `*${name}*\\n\\`\\`\\`${cleanError}\\`\\`\\``;\n      }\n      return `*${name}*`;\n    });\n\n    let text = lines.join(\"\\n\\n\");\n    if (summary.failedTests.length > maxFailedTests) {\n      text += `\\n\\n_...and ${summary.failedTests.length - maxFailedTests} more_`;\n    }\n\n    blocks.push({\n      type: \"section\",\n      text: {\n        type: \"mrkdwn\",\n        text,\n      },\n    });\n  }\n\n  // CI context block\n  if (summary.ci) {\n    const elements: Array<{ type: string; text: string }> = [];\n\n    if (summary.ci.displayName) {\n      elements.push({ type: \"mrkdwn\", text: `*CI:* ${summary.ci.displayName}` });\n    }\n    if (summary.ci.branch) {\n      elements.push({ type: \"mrkdwn\", text: `*Branch:* ${summary.ci.branch}` });\n    }\n    if (summary.ci.commitSha) {\n      elements.push({ type: \"mrkdwn\", text: `*Commit:* ${summary.ci.commitSha.slice(0, 7)}` });\n    }\n    if (summary.ci.buildNumber) {\n      elements.push({ type: \"mrkdwn\", text: `*Build:* #${summary.ci.buildNumber}` });\n    }\n\n    if (elements.length > 0) {\n      blocks.push({\n        type: \"context\",\n        elements,\n      });\n    }\n  }\n\n  // Actions block with \"View Report\" button\n  if (summary.reportUrl) {\n    blocks.push({\n      type: \"actions\",\n      elements: [\n        {\n          type: \"button\",\n          text: {\n            type: \"plain_text\",\n            text: \"View Report\",\n            emoji: true,\n          },\n          url: summary.reportUrl,\n          action_id: \"view_report\",\n        },\n      ],\n    });\n  }\n\n  return { blocks };\n}\n\n/**\n * Send a Slack notification via incoming webhook.\n *\n * Never throws. Returns `{ ok, error? }`.\n * Never logs the webhook URL.\n */\nexport async function sendSlackNotification(\n  args: SlackNotificationArgs,\n  deps: SlackNotificationDeps,\n): Promise<NotificationResult> {\n  const { summary, webhookUrl, maxFailedTests = 5 } = args;\n  const { fetch, logger } = deps;\n\n  const payload = buildSlackPayload(summary, maxFailedTests);\n\n  try {\n    const response = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n      let bodyText = \"\";\n      try {\n        bodyText = await response.text();\n      } catch {\n        // ignore body read errors\n      }\n      const truncatedBody = truncate(bodyText, 200);\n      const idPart = requestId ? ` x-request-id=${requestId}` : \"\";\n      const errorMsg = `Slack notifier failed: HTTP ${response.status}${idPart} ${truncatedBody}`;\n      logger.warn(errorMsg);\n      return { ok: false, error: errorMsg };\n    }\n\n    return { ok: true };\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    const errorMsg = `Slack notifier failed: ${msg}`;\n    logger.warn(errorMsg);\n    return { ok: false, error: errorMsg };\n  }\n}\n","/**\n * Microsoft Teams webhook notifier using Adaptive Cards.\n *\n * Follows the fn(args, deps) pattern.\n * Never logs the webhook URL.\n */\n\nimport type { NotificationSummary } from \"./types\";\nimport { stripAnsi } from \"./ansi-strip\";\n\n/** Arguments for sendTeamsNotification. */\nexport interface TeamsNotificationArgs {\n  summary: NotificationSummary;\n  webhookUrl: string;\n  maxFailedTests?: number;\n}\n\n/** Injectable dependencies for sendTeamsNotification. */\nexport interface TeamsNotificationDeps {\n  fetch: typeof globalThis.fetch;\n  logger: { warn(msg: string): void };\n}\n\n/** Result of a notification send attempt. */\nexport interface TeamsNotificationResult {\n  ok: boolean;\n  error?: string;\n}\n\n/** Truncate text to a maximum length, appending ellipsis if needed. */\nfunction truncate(text: string, maxLen: number): string {\n  if (text.length <= maxLen) return text;\n  return text.slice(0, maxLen - 3) + \"...\";\n}\n\n/** Format milliseconds as a human-readable duration string. */\nfunction formatDuration(ms: number): string {\n  const seconds = ms / 1000;\n  if (seconds < 60) return `${seconds.toFixed(1)}s`;\n  const minutes = Math.floor(seconds / 60);\n  const remainingSeconds = seconds % 60;\n  return `${minutes}m ${remainingSeconds.toFixed(0)}s`;\n}\n\n/** Build an Adaptive Card payload from a notification summary. */\nfunction buildTeamsPayload(\n  summary: NotificationSummary,\n  maxFailedTests: number,\n): Record<string, unknown> {\n  const allPassed = summary.failed === 0;\n  const statusEmoji = allPassed ? \"\\u2705\" : \"\\u274C\"; // check mark / cross mark\n  const statusColor = allPassed ? \"good\" : \"attention\";\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const bodyItems: any[] = [];\n\n  // Header with status\n  bodyItems.push({\n    type: \"TextBlock\",\n    size: \"Large\",\n    weight: \"Bolder\",\n    text: `${statusEmoji} Test Results`,\n    color: statusColor,\n  });\n\n  // FactSet with summary\n  bodyItems.push({\n    type: \"FactSet\",\n    facts: [\n      { title: \"Total\", value: String(summary.total) },\n      { title: \"Passed\", value: String(summary.passed) },\n      { title: \"Failed\", value: String(summary.failed) },\n      { title: \"Skipped\", value: String(summary.skipped) },\n      { title: \"Duration\", value: formatDuration(summary.durationMs) },\n    ],\n  });\n\n  // Failed tests container\n  if (summary.failedTests.length > 0) {\n    const displayedTests = summary.failedTests.slice(0, maxFailedTests);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const failedItems: any[] = [\n      {\n        type: \"TextBlock\",\n        text: \"Failed Tests\",\n        weight: \"Bolder\",\n        spacing: \"Medium\",\n      },\n    ];\n\n    for (const t of displayedTests) {\n      failedItems.push({\n        type: \"TextBlock\",\n        text: `**${t.name}**`,\n        wrap: true,\n      });\n      if (t.error) {\n        const cleanError = truncate(stripAnsi(t.error), 500);\n        failedItems.push({\n          type: \"TextBlock\",\n          text: cleanError,\n          wrap: true,\n          fontType: \"Monospace\",\n          size: \"Small\",\n          color: \"Attention\",\n        });\n      }\n    }\n\n    if (summary.failedTests.length > maxFailedTests) {\n      failedItems.push({\n        type: \"TextBlock\",\n        text: `...and ${summary.failedTests.length - maxFailedTests} more`,\n        isSubtle: true,\n        spacing: \"Small\",\n      });\n    }\n\n    bodyItems.push({\n      type: \"Container\",\n      items: failedItems,\n    });\n  }\n\n  // CI info facts\n  if (summary.ci) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const ciFacts: any[] = [];\n\n    if (summary.ci.displayName) {\n      ciFacts.push({ title: \"CI\", value: summary.ci.displayName });\n    }\n    if (summary.ci.branch) {\n      ciFacts.push({ title: \"Branch\", value: summary.ci.branch });\n    }\n    if (summary.ci.commitSha) {\n      ciFacts.push({ title: \"Commit\", value: summary.ci.commitSha.slice(0, 7) });\n    }\n    if (summary.ci.buildNumber) {\n      ciFacts.push({ title: \"Build\", value: `#${summary.ci.buildNumber}` });\n    }\n\n    if (ciFacts.length > 0) {\n      bodyItems.push({\n        type: \"FactSet\",\n        facts: ciFacts,\n        separator: true,\n      });\n    }\n  }\n\n  // Build the Adaptive Card\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const card: Record<string, any> = {\n    type: \"AdaptiveCard\",\n    $schema: \"http://adaptivecards.io/schemas/adaptive-card.json\",\n    version: \"1.4\",\n    body: bodyItems,\n  };\n\n  // \"View Report\" action\n  if (summary.reportUrl) {\n    card.actions = [\n      {\n        type: \"Action.OpenUrl\",\n        title: \"View Report\",\n        url: summary.reportUrl,\n      },\n    ];\n  }\n\n  return {\n    type: \"message\",\n    attachments: [\n      {\n        contentType: \"application/vnd.microsoft.card.adaptive\",\n        content: card,\n      },\n    ],\n  };\n}\n\n/**\n * Send a Teams notification via incoming webhook.\n *\n * Never throws. Returns `{ ok, error? }`.\n * Never logs the webhook URL.\n */\nexport async function sendTeamsNotification(\n  args: TeamsNotificationArgs,\n  deps: TeamsNotificationDeps,\n): Promise<TeamsNotificationResult> {\n  const { summary, webhookUrl, maxFailedTests = 5 } = args;\n  const { fetch, logger } = deps;\n\n  const payload = buildTeamsPayload(summary, maxFailedTests);\n\n  try {\n    const response = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n      let bodyText = \"\";\n      try {\n        bodyText = await response.text();\n      } catch {\n        // ignore body read errors\n      }\n      const truncatedBody = truncate(bodyText, 200);\n      const idPart = requestId ? ` x-request-id=${requestId}` : \"\";\n      const errorMsg = `Teams notifier failed: HTTP ${response.status}${idPart} ${truncatedBody}`;\n      logger.warn(errorMsg);\n      return { ok: false, error: errorMsg };\n    }\n\n    return { ok: true };\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    const errorMsg = `Teams notifier failed: ${msg}`;\n    logger.warn(errorMsg);\n    return { ok: false, error: errorMsg };\n  }\n}\n","/**\n * HMAC-SHA256 signing for generic webhook payloads.\n *\n * Pure function, isolated for testing.\n * Uses node:crypto — zero new dependencies.\n */\n\nimport { createHmac } from \"node:crypto\";\n\n/** Result of HMAC signing. */\nexport interface HmacSignResult {\n  /** Signature in format \"sha256=<hex>\" (GitHub-style, widely recognized) */\n  signature: string;\n  /** ISO 8601 timestamp, only present when includeTimestamp is true */\n  timestamp?: string;\n}\n\n/**\n * Compute HMAC-SHA256 signature for a request body.\n *\n * When `includeTimestamp` is true, the signed input is `\"<timestamp>.<body>\"` and the\n * timestamp is returned for the caller to emit as a header.\n */\nexport function signBody(args: {\n  body: string;\n  secret: string;\n  includeTimestamp?: boolean;\n  /** Injectable for deterministic testing */\n  timestamp?: string;\n}): HmacSignResult {\n  let input: string;\n  let timestamp: string | undefined;\n\n  if (args.includeTimestamp) {\n    timestamp = args.timestamp ?? new Date().toISOString();\n    input = `${timestamp}.${args.body}`;\n  } else {\n    input = args.body;\n  }\n\n  const hex = createHmac(\"sha256\", args.secret)\n    .update(input, \"utf8\")\n    .digest(\"hex\");\n\n  return {\n    signature: `sha256=${hex}`,\n    timestamp,\n  };\n}\n","/**\n * Generic webhook notifier.\n *\n * Sends a versioned JSON envelope to arbitrary HTTP endpoints with optional\n * HMAC-SHA256 signing. Follows the fn(args, deps) pattern.\n *\n * Never throws. Never logs the webhook URL.\n */\n\nimport type { NotificationSummary } from \"./types\";\nimport type { GenericWebhookNotifierOptions, WebhookPayload } from \"./types\";\nimport { signBody } from \"./hmac\";\n\n/** Arguments for sendWebhookNotification. */\nexport interface WebhookNotificationArgs {\n  summary: NotificationSummary;\n  options: GenericWebhookNotifierOptions;\n  maxFailedTests?: number;\n}\n\n/** Injectable dependencies for sendWebhookNotification. */\nexport interface WebhookNotificationDeps {\n  fetch: typeof globalThis.fetch;\n  logger: { warn(msg: string): void };\n}\n\n/** Result of a webhook send attempt. */\nexport interface WebhookNotificationResult {\n  ok: boolean;\n  error?: string;\n}\n\n/**\n * Send a notification to a generic webhook endpoint.\n *\n * Never throws. Returns `{ ok, error? }`.\n * Never logs the webhook URL.\n */\nexport async function sendWebhookNotification(\n  args: WebhookNotificationArgs,\n  deps: WebhookNotificationDeps,\n): Promise<WebhookNotificationResult> {\n  const { summary, options } = args;\n  const { fetch, logger } = deps;\n\n  // Build versioned envelope\n  const payload: WebhookPayload = {\n    schemaVersion: 1,\n    event: \"test_run_finished\",\n    summary,\n  };\n  const body = JSON.stringify(payload);\n\n  // Build headers\n  const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n\n  // Apply user-provided headers (can override Content-Type)\n  if (options.headers) {\n    for (const [key, value] of Object.entries(options.headers)) {\n      headers[key] = value;\n    }\n  }\n\n  // HMAC signing — headers always override user-supplied values\n  if (options.signer) {\n    const { secret, header, includeTimestamp, timestampHeader } = options.signer;\n    const result = signBody({ body, secret, includeTimestamp });\n    headers[header] = result.signature;\n    if (result.timestamp) {\n      headers[timestampHeader ?? \"X-Timestamp\"] = result.timestamp;\n    }\n  }\n\n  try {\n    const response = await fetch(options.url, {\n      method: options.method ?? \"POST\",\n      headers,\n      body,\n    });\n\n    if (!response.ok) {\n      const requestId = response.headers.get(\"x-request-id\") ?? undefined;\n      let snippet = \"\";\n      try {\n        snippet = (await response.text()).slice(0, 200);\n      } catch {\n        /* ignore */\n      }\n      const idPart = requestId ? ` x-request-id=${requestId}` : \"\";\n      const errorMsg = `webhook: HTTP ${response.status}${idPart} ${snippet}`;\n      logger.warn(errorMsg);\n      return { ok: false, error: errorMsg };\n    }\n\n    return { ok: true };\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    const errorMsg = `webhook: ${msg}`;\n    logger.warn(errorMsg);\n    return { ok: false, error: errorMsg };\n  }\n}\n","/**\n * Notification orchestrator.\n *\n * Builds a NotificationSummary from a TestRunResult and dispatches\n * to configured notifiers (Slack, Teams, generic webhooks) based on condition.\n *\n * Env fallback and defaults are resolved internally so CLI and reporters\n * behave identically with zero duplication.\n *\n * Follows the fn(args, deps) pattern.\n * Never throws. Never logs webhook URLs.\n */\n\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport type { CIInfo } from \"executable-stories-core/types/ci\";\nimport type { RawCIInfo } from \"executable-stories-core/types/raw\";\nimport type { NotificationSummary, NotifyCondition, GenericWebhookNotifierOptions } from \"./types\";\nimport { sendSlackNotification } from \"./slack\";\nimport { sendTeamsNotification } from \"./teams\";\nimport { sendWebhookNotification } from \"./webhook\";\n\n/** Arguments for sendNotifications. */\nexport interface SendNotificationsArgs {\n  run: TestRunResult;\n  /** Notification config from FormatterOptions.notification (or CLI-assembled equivalent) */\n  notification?: {\n    slackWebhookUrl?: string;\n    teamsWebhookUrl?: string;\n    condition?: NotifyCondition;\n    reportUrl?: string;\n    maxFailedTests?: number;\n    webhooks?: GenericWebhookNotifierOptions[];\n  };\n}\n\n/** Injectable dependencies for sendNotifications. */\nexport interface SendNotificationsDeps {\n  fetch?: typeof globalThis.fetch;\n  logger: { warn(msg: string): void };\n  toCIInfo: (raw?: RawCIInfo) => CIInfo | undefined;\n  env?: Record<string, string | undefined>;\n}\n\n/** Build a NotificationSummary from a TestRunResult. */\nfunction buildSummary(\n  run: TestRunResult,\n  reportUrl: string | undefined,\n  toCIInfo: SendNotificationsDeps[\"toCIInfo\"],\n): NotificationSummary {\n  let passed = 0;\n  let failed = 0;\n  let skipped = 0;\n\n  const failedTests: NotificationSummary[\"failedTests\"] = [];\n\n  for (const tc of run.testCases) {\n    switch (tc.status) {\n      case \"passed\":\n        passed++;\n        break;\n      case \"failed\":\n        failed++;\n        failedTests.push({\n          testId: tc.id,\n          name: tc.story.scenario,\n          error: tc.errorMessage,\n        });\n        break;\n      case \"skipped\":\n      case \"pending\":\n        skipped++;\n        break;\n    }\n  }\n\n  // Derive CI info: use typed CIInfo from run.ci if available\n  // run.ci is the legacy CIInfo shape { name, url?, buildNumber? }\n  // Cast to RawCIInfo to pass through the converter\n  let ci: CIInfo | undefined;\n  if (run.ci) {\n    ci = toCIInfo(run.ci as unknown as RawCIInfo);\n  }\n\n  return {\n    total: run.testCases.length,\n    passed,\n    failed,\n    skipped,\n    durationMs: run.durationMs,\n    failedTests,\n    ci,\n    reportUrl,\n  };\n}\n\n/** Check if a notifier should fire given condition and failure count. */\nfunction shouldNotify(condition: NotifyCondition, failedCount: number): boolean {\n  if (condition === \"never\") return false;\n  if (condition === \"on-failure\" && failedCount === 0) return false;\n  return true;\n}\n\n/**\n * Send notifications to all configured channels.\n *\n * Resolves env fallbacks and defaults internally.\n * Never throws. Logs warnings for failures.\n * Never logs webhook URLs.\n */\nexport async function sendNotifications(\n  args: SendNotificationsArgs,\n  deps: SendNotificationsDeps,\n): Promise<void> {\n  const { run, notification } = args;\n  const { logger, toCIInfo } = deps;\n  const env = deps.env ?? process.env;\n\n  // Guard: if fetch is unavailable, warn and bail\n  if (!deps.fetch) {\n    logger.warn(\"notifications: skipped (fetch unavailable)\");\n    return;\n  }\n  const fetch = deps.fetch;\n\n  // Resolve env fallbacks + defaults\n  const slackWebhookUrl = notification?.slackWebhookUrl ?? env.SLACK_WEBHOOK_URL;\n  const teamsWebhookUrl = notification?.teamsWebhookUrl ?? env.TEAMS_WEBHOOK_URL;\n  const globalCondition: NotifyCondition = notification?.condition ?? \"on-failure\";\n  const reportUrl = notification?.reportUrl;\n  const maxFailedTests = notification?.maxFailedTests ?? 5;\n  const webhooks = notification?.webhooks ?? [];\n\n  // Nothing configured → early return\n  if (!slackWebhookUrl && !teamsWebhookUrl && webhooks.length === 0) {\n    return;\n  }\n\n  const summary = buildSummary(run, reportUrl, toCIInfo);\n\n  // Dispatch to configured notifiers concurrently\n  const promises: Promise<void>[] = [];\n\n  if (slackWebhookUrl && shouldNotify(globalCondition, summary.failed)) {\n    promises.push(\n      sendSlackNotification(\n        { summary, webhookUrl: slackWebhookUrl, maxFailedTests },\n        { fetch, logger },\n      ).then(() => undefined),\n    );\n  }\n\n  if (teamsWebhookUrl && shouldNotify(globalCondition, summary.failed)) {\n    promises.push(\n      sendTeamsNotification(\n        { summary, webhookUrl: teamsWebhookUrl, maxFailedTests },\n        { fetch, logger },\n      ).then(() => undefined),\n    );\n  }\n\n  // Generic webhooks — per-webhook condition override\n  for (const webhook of webhooks) {\n    const effectiveCondition = webhook.condition ?? globalCondition;\n    if (!shouldNotify(effectiveCondition, summary.failed)) continue;\n\n    promises.push(\n      sendWebhookNotification(\n        { summary, options: webhook, maxFailedTests },\n        { fetch, logger },\n      ).then(() => undefined),\n    );\n  }\n\n  // Wait for all, never throw\n  await Promise.allSettled(promises);\n}\n","/**\n * History store: load, save, update (fn(args, deps) pattern).\n */\n\nimport type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport type { HistoryEntry, HistoryStore, TestHistory } from \"./types\";\n\n// ============================================================================\n// Load\n// ============================================================================\n\nexport interface LoadHistoryArgs {\n  filePath: string;\n}\n\nexport interface LoadHistoryDeps {\n  readFile: (path: string) => string | undefined;\n  logger: { warn(msg: string): void };\n}\n\nfunction emptyStore(): HistoryStore {\n  return { version: 1, maxRuns: 10, tests: {}, lastUpdated: 0 };\n}\n\nexport function loadHistory(args: LoadHistoryArgs, deps: LoadHistoryDeps): HistoryStore {\n  const content = deps.readFile(args.filePath);\n  if (content === undefined) {\n    return emptyStore();\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(content);\n  } catch {\n    deps.logger.warn(`Failed to parse history file: ${args.filePath}`);\n    return emptyStore();\n  }\n\n  if (\n    typeof parsed !== \"object\" ||\n    parsed === null ||\n    (parsed as Record<string, unknown>).version !== 1\n  ) {\n    deps.logger.warn(\n      `Unknown history version in ${args.filePath}, expected version 1`,\n    );\n    return emptyStore();\n  }\n\n  const obj = parsed as Record<string, unknown>;\n  if (typeof obj.tests !== \"object\" || obj.tests === null || Array.isArray(obj.tests)) {\n    deps.logger.warn(\n      `Malformed history store in ${args.filePath}: tests must be a non-null object`,\n    );\n    return emptyStore();\n  }\n\n  return parsed as HistoryStore;\n}\n\n// ============================================================================\n// Save\n// ============================================================================\n\nexport interface SaveHistoryArgs {\n  filePath: string;\n  store: HistoryStore;\n}\n\nexport interface SaveHistoryDeps {\n  writeFile: (path: string, content: string) => void;\n}\n\nexport function saveHistory(args: SaveHistoryArgs, deps: SaveHistoryDeps): void {\n  deps.writeFile(args.filePath, JSON.stringify(args.store, null, 2));\n}\n\n// ============================================================================\n// Update (pure function, no deps)\n// ============================================================================\n\nexport interface UpdateHistoryArgs {\n  store: HistoryStore;\n  run: TestRunResult;\n  maxRuns: number;\n}\n\nexport function updateHistory(args: UpdateHistoryArgs): HistoryStore {\n  const { store, run, maxRuns } = args;\n  const newTests: Record<string, TestHistory> = { ...store.tests };\n\n  for (const tc of run.testCases) {\n    const entry: HistoryEntry = {\n      runId: run.runId,\n      timestamp: run.startedAtMs,\n      status: tc.status,\n      durationMs: tc.durationMs,\n      ci: run.ci\n        ? {\n            provider: undefined,\n            branch: run.ci.branch,\n            commitSha: run.ci.commitSha,\n          }\n        : undefined,\n    };\n\n    const existing = newTests[tc.id];\n    if (existing) {\n      const updatedEntries = [...existing.entries, entry];\n      // Trim per-test entries to maxRuns (keep latest)\n      const trimmed =\n        updatedEntries.length > maxRuns\n          ? updatedEntries.slice(updatedEntries.length - maxRuns)\n          : updatedEntries;\n      newTests[tc.id] = {\n        ...existing,\n        testName: tc.story.scenario,\n        sourceFile: tc.sourceFile,\n        sourceLine: tc.sourceLine,\n        entries: trimmed,\n      };\n    } else {\n      newTests[tc.id] = {\n        testId: tc.id,\n        testName: tc.story.scenario,\n        sourceFile: tc.sourceFile,\n        sourceLine: tc.sourceLine,\n        entries: [entry],\n      };\n    }\n  }\n\n  return {\n    version: 1,\n    maxRuns,\n    tests: newTests,\n    lastUpdated: Date.now(),\n  };\n}\n","/**\n * Centralized sample-size policy for history metrics.\n *\n * Easy to tune without hunting across files.\n */\n\n/** Minimum duration-bearing entries for performance trend analysis. */\nexport const MIN_PERF_SAMPLES = 6;\n\n/** Minimum entries before showing badges/metrics in reports. */\nexport const MIN_METRIC_SAMPLES = 5;\n\n/** Minimum entries for flakiness calculation (below this → \"stable\"). */\nexport const MIN_FLAKINESS_SAMPLES = 3;\n\n/** Check whether an array meets the minimum sample threshold. */\nexport function hasSufficientHistory(\n  entries: unknown[],\n  min: number,\n): boolean {\n  return entries.length >= min;\n}\n","/**\n * Flakiness calculation based on status transitions.\n */\n\nimport type { HistoryEntry, FlakinessLevel } from \"./types\";\nimport { MIN_FLAKINESS_SAMPLES } from \"./sample-policy\";\n\nexport interface FlakinessResult {\n  flakinessLevel: FlakinessLevel;\n  flakinessScore: number;\n  failureRate: number;\n  longestPassStreak: number;\n  longestFailStreak: number;\n}\n\nexport function calculateFlakiness(args: {\n  entries: HistoryEntry[];\n}): FlakinessResult {\n  const { entries } = args;\n\n  // Only count pass/fail entries (exclude skipped/pending)\n  const countable = entries.filter(\n    (e) => e.status === \"passed\" || e.status === \"failed\",\n  );\n\n  const failures = countable.filter((e) => e.status === \"failed\").length;\n  const failureRate = countable.length > 0 ? failures / countable.length : 0;\n\n  // Calculate streaks\n  let longestPassStreak = 0;\n  let longestFailStreak = 0;\n  let currentPassStreak = 0;\n  let currentFailStreak = 0;\n\n  for (const e of countable) {\n    if (e.status === \"passed\") {\n      currentPassStreak++;\n      currentFailStreak = 0;\n      if (currentPassStreak > longestPassStreak) {\n        longestPassStreak = currentPassStreak;\n      }\n    } else {\n      currentFailStreak++;\n      currentPassStreak = 0;\n      if (currentFailStreak > longestFailStreak) {\n        longestFailStreak = currentFailStreak;\n      }\n    }\n  }\n\n  // The sample threshold gates the *classification* only: two runs cannot tell\n  // you a scenario is flaky. The counts above are plain arithmetic and stay\n  // honest at any sample size — reporting failureRate 0 for a scenario that has\n  // only ever failed is worse than reporting nothing.\n  if (countable.length < MIN_FLAKINESS_SAMPLES) {\n    return {\n      flakinessLevel: \"stable\",\n      flakinessScore: 0,\n      failureRate,\n      longestPassStreak,\n      longestFailStreak,\n    };\n  }\n\n  // Count transitions (consecutive entries with different status)\n  let transitions = 0;\n  for (let i = 1; i < countable.length; i++) {\n    if (countable[i].status !== countable[i - 1].status) {\n      transitions++;\n    }\n  }\n\n  const transitionScore = transitions / (countable.length - 1);\n\n  // Classification\n  let flakinessLevel: FlakinessLevel;\n  if (\n    transitionScore > 0.5 ||\n    (transitionScore > 0.3 && failureRate > 0.2)\n  ) {\n    flakinessLevel = \"flaky\";\n  } else if (transitionScore > 0.2 || failureRate > 0.3) {\n    flakinessLevel = \"unstable\";\n  } else {\n    flakinessLevel = \"stable\";\n  }\n\n  return {\n    flakinessLevel,\n    flakinessScore: transitionScore,\n    failureRate,\n    longestPassStreak,\n    longestFailStreak,\n  };\n}\n","/**\n * Performance trend detection via half-split comparison.\n */\n\nimport type { HistoryEntry, PerformanceTrend } from \"./types\";\nimport { MIN_PERF_SAMPLES } from \"./sample-policy\";\n\nexport interface PerformanceResult {\n  trend: PerformanceTrend;\n  avgDurationMs: number;\n}\n\nexport function detectPerformanceTrend(args: {\n  entries: HistoryEntry[];\n}): PerformanceResult {\n  const { entries } = args;\n\n  // Filter out entries with no meaningful duration data\n  const countable = entries.filter(\n    (e) => e.status !== \"skipped\" && e.status !== \"pending\",\n  );\n\n  if (countable.length === 0) {\n    return { trend: \"stable\", avgDurationMs: 0 };\n  }\n\n  const avgAll =\n    countable.reduce((sum, e) => sum + e.durationMs, 0) / countable.length;\n\n  if (countable.length < MIN_PERF_SAMPLES) {\n    return { trend: \"stable\", avgDurationMs: avgAll };\n  }\n\n  // Split into earlier half and recent half\n  const mid = Math.floor(countable.length / 2);\n  const earlier = countable.slice(0, mid);\n  const recent = countable.slice(mid);\n\n  const earlierAvg =\n    earlier.reduce((sum, e) => sum + e.durationMs, 0) / earlier.length;\n  const recentAvg =\n    recent.reduce((sum, e) => sum + e.durationMs, 0) / recent.length;\n\n  let trend: PerformanceTrend;\n  if (earlierAvg === 0) {\n    trend = \"stable\";\n  } else {\n    const change = (recentAvg - earlierAvg) / earlierAvg;\n    if (change > 0.1) {\n      trend = \"regressing\";\n    } else if (change < -0.1) {\n      trend = \"improving\";\n    } else {\n      trend = \"stable\";\n    }\n  }\n\n  return { trend, avgDurationMs: avgAll };\n}\n","/**\n * Stability grade calculation (composite score).\n */\n\nimport type { StabilityGrade } from \"./types\";\n\nexport interface CalculateStabilityArgs {\n  passRate: number;\n  flakinessScore: number;\n  longestPassStreak: number;\n  sampleSize: number;\n}\n\nexport function calculateStability(args: CalculateStabilityArgs): StabilityGrade {\n  const { passRate, flakinessScore, longestPassStreak, sampleSize } = args;\n\n  const inverseFlakiness = 1 - flakinessScore;\n  const streakNorm = longestPassStreak / Math.min(sampleSize, 10);\n\n  const score = passRate * 0.6 + inverseFlakiness * 0.3 + streakNorm * 0.1;\n\n  if (score >= 0.95) return \"A\";\n  if (score >= 0.85) return \"B\";\n  if (score >= 0.70) return \"C\";\n  if (score >= 0.50) return \"D\";\n  return \"F\";\n}\n","/**\n * Composite test metrics from history entries.\n */\n\nimport type { HistoryEntry, TestMetrics } from \"./types\";\nimport { calculateFlakiness } from \"./flakiness\";\nimport { detectPerformanceTrend } from \"./performance\";\nimport { calculateStability } from \"./stability\";\n\nexport function computeTestMetrics(args: {\n  testId: string;\n  entries: HistoryEntry[];\n}): TestMetrics {\n  const { testId, entries } = args;\n\n  const flakiness = calculateFlakiness({ entries });\n  const perf = detectPerformanceTrend({ entries });\n\n  // Calculate pass rate (excluding skipped/pending)\n  const countable = entries.filter(\n    (e) => e.status === \"passed\" || e.status === \"failed\",\n  );\n  const passRate =\n    countable.length > 0\n      ? countable.filter((e) => e.status === \"passed\").length / countable.length\n      : 1;\n\n  const stabilityGrade = calculateStability({\n    passRate,\n    flakinessScore: flakiness.flakinessScore,\n    longestPassStreak: flakiness.longestPassStreak,\n    sampleSize: entries.length,\n  });\n\n  // Calculate consecutive failures from the tail end\n  let consecutiveFailures = 0;\n  for (let i = entries.length - 1; i >= 0; i--) {\n    if (entries[i].status === \"failed\") {\n      consecutiveFailures++;\n    } else {\n      break;\n    }\n  }\n\n  return {\n    testId,\n    flakinessLevel: flakiness.flakinessLevel,\n    flakinessScore: flakiness.flakinessScore,\n    failureRate: flakiness.failureRate,\n    stabilityGrade,\n    performanceTrend: perf.trend,\n    avgDurationMs: perf.avgDurationMs,\n    passRate,\n    longestPassStreak: flakiness.longestPassStreak,\n    consecutiveFailures,\n    sampleSize: entries.length,\n  };\n}\n","/**\n * List scenarios from a test run (fn(args, deps) pattern).\n * Produces text table or JSON output.\n */\n\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport type { StoryStep } from \"executable-stories-core/types/story\";\nimport { assertionState } from \"executable-stories-core/utils/assertive-steps\";\n\nexport interface ListScenariosArgs {\n  testCases: TestCaseResult[];\n  format: \"text\" | \"json\" | \"csv\" | \"markdown-table\";\n  /** Emit compact (single-line) JSON for agent consumption. Only affects \"json\". Default false. */\n  minify?: boolean;\n}\n\nexport type ListScenariosDeps = Record<string, never>;\n\nconst STATUS_ICONS: Record<string, string> = {\n  passed: \"\\u2705\",\n  failed: \"\\u274C\",\n  skipped: \"\\u23ED\\uFE0F\",\n  pending: \"\\u23F3\",\n};\n\nexport function listScenarios(\n  args: ListScenariosArgs,\n  _deps: ListScenariosDeps,\n): string {\n  const { testCases, format, minify = false } = args;\n\n  if (format === \"json\") {\n    const items = testCases.map((tc) => ({\n      id: tc.id,\n      scenario: tc.story.scenario,\n      status: tc.status,\n      sourceFile: tc.sourceFile,\n      sourceLine: tc.sourceLine,\n      suitePath: tc.story.suitePath ?? tc.titlePath.slice(0, -1),\n      tags: tc.tags,\n      tickets: tc.story.tickets ?? [],\n      covers: tc.story.covers ?? [],\n      durationMs: tc.durationMs,\n      error: tc.errorMessage\n        ? {\n            message: tc.errorMessage,\n            stack: tc.errorStack,\n          }\n        : undefined,\n      steps: tc.story.steps.map((step, index) => toScenarioStep(step, index, tc)),\n      docKinds: collectDocKinds(tc),\n      // \"unasserted\": its Then steps ran and checked nothing. \"unobserved\": the adapter can't count, not zero.\n      assertion: assertionState(tc.story.steps),\n    }));\n    return minify ? JSON.stringify(items) : JSON.stringify(items, null, 2);\n  }\n\n  if (format === \"csv\") {\n    const header = \"id,scenario,status,sourceFile,sourceLine,tags\";\n    const rows = testCases.map((tc) => {\n      const fields = [\n        tc.id,\n        tc.story.scenario,\n        tc.status,\n        tc.sourceFile,\n        String(tc.sourceLine),\n        tc.tags.join(\" \"),\n      ];\n      return fields\n        .map((f) => {\n          if (f.includes(\",\") || f.includes('\"') || f.includes(\"\\n\")) {\n            return `\"${f.replace(/\"/g, '\"\"')}\"`;\n          }\n          return f;\n        })\n        .join(\",\");\n    });\n    return [header, ...rows].join(\"\\n\");\n  }\n\n  if (format === \"markdown-table\") {\n    const header = \"| Status | Scenario | Location | Tags |\";\n    const divider = \"|--------|----------|----------|------|\";\n    const rows = testCases.map((tc) => {\n      const icon = STATUS_ICONS[tc.status] ?? \"?\";\n      const location = `${tc.sourceFile}:${tc.sourceLine}`;\n      const tags = tc.tags.map((t) => `@${t}`).join(\" \");\n      return `| ${icon} | ${tc.story.scenario} | ${location} | ${tags} |`;\n    });\n    return [header, divider, ...rows].join(\"\\n\");\n  }\n\n  // Text format\n  if (testCases.length === 0) {\n    return \"No scenarios found.\";\n  }\n\n  const sorted = [...testCases].sort((a, b) => {\n    const rank = { failed: 0, pending: 1, skipped: 2, passed: 3 };\n    if (rank[a.status] !== rank[b.status]) {\n      return rank[a.status] - rank[b.status];\n    }\n    if (a.sourceFile !== b.sourceFile) {\n      return a.sourceFile.localeCompare(b.sourceFile);\n    }\n    if (a.sourceLine !== b.sourceLine) {\n      return a.sourceLine - b.sourceLine;\n    }\n    return a.story.scenario.localeCompare(b.story.scenario);\n  });\n\n  const summary = {\n    total: sorted.length,\n    failed: sorted.filter((tc) => tc.status === \"failed\").length,\n    pending: sorted.filter((tc) => tc.status === \"pending\").length,\n    skipped: sorted.filter((tc) => tc.status === \"skipped\").length,\n    passed: sorted.filter((tc) => tc.status === \"passed\").length,\n  };\n\n  const lines = [\n    `Review summary: ${summary.failed} failed, ${summary.pending} pending, ${summary.skipped} skipped, ${summary.passed} passed (${summary.total} total)`,\n    summary.failed > 0\n      ? \"Priority: failed scenarios are listed first for review.\"\n      : \"Priority: no failed scenarios detected.\",\n    \"\",\n    ...sorted.map((tc) => {\n    const icon = STATUS_ICONS[tc.status] ?? \"?\";\n    const status = tc.status.padEnd(7);\n    const scenario = tc.story.scenario;\n    const location = `${tc.sourceFile}:${tc.sourceLine}`;\n    const tags = tc.tags.length > 0 ? tc.tags.join(\", \") : \"\";\n    return `${icon} ${status}  ${scenario}  ${location}${tags ? `  ${tags}` : \"\"}`;\n    }),\n  ];\n\n  return lines.join(\"\\n\");\n}\n\nfunction toScenarioStep(\n  step: StoryStep,\n  index: number,\n  testCase: TestCaseResult,\n): {\n  id?: string;\n  index: number;\n  keyword: StoryStep[\"keyword\"];\n  text: string;\n  status: TestCaseResult[\"status\"];\n  durationMs: number;\n  errorMessage?: string;\n  mode?: StoryStep[\"mode\"];\n  docKinds: string[];\n} {\n  const result = testCase.stepResults.find(\n    (candidate) => candidate.index === index || candidate.stepId === step.id,\n  );\n\n  return {\n    id: step.id,\n    index,\n    keyword: step.keyword,\n    text: step.text,\n    status: result?.status ?? testCase.status,\n    durationMs: result?.durationMs ?? step.durationMs ?? 0,\n    errorMessage: result?.errorMessage,\n    mode: step.mode,\n    docKinds: (step.docs ?? []).map((doc) => doc.kind),\n  };\n}\n\nfunction collectDocKinds(testCase: TestCaseResult): string[] {\n  const kinds = new Set<string>();\n\n  for (const doc of testCase.story.docs ?? []) {\n    kinds.add(doc.kind);\n  }\n\n  for (const step of testCase.story.steps) {\n    for (const doc of step.docs ?? []) {\n      kinds.add(doc.kind);\n    }\n  }\n\n  return [...kinds].sort();\n}\n","/**\n * `check` — context-efficient backpressure for coding agents.\n *\n * The principle (from \"Stop Babysitting Your Coding Agent. Give It Backpressure.\"):\n * compress success, expand failure. Passing scenarios collapse to a single count\n * line. Each failing scenario expands to its Given/When/Then narrative, the step\n * that broke, the error, and the product code it `covers` — so the agent gets an\n * actionable, intent-carrying signal instead of a wall of green.\n *\n * When a baseline run is supplied, the report also folds in what *regressed* and\n * what got *fixed* since the last run — the \"retained\" property of effective\n * feedback. Reuses the same status-transition vocabulary as {@link classifyStatusChange}.\n */\n\nimport type { TestCaseResult, TestStatus } from \"executable-stories-core/types/test-result\";\nimport type { StepKeyword } from \"executable-stories-core/types/story\";\nimport { formatDuration } from \"executable-stories-core/utils/duration\";\nimport { failingComparison, failingScenarioMessage } from \"./scenario-failure\";\n\nexport interface CheckArgs {\n  testCases: TestCaseResult[];\n  /** Baseline scenario statuses keyed by scenario id, for regressed/fixed deltas. */\n  baseline?: Map<string, TestStatus>;\n  /** Per-scenario time budget. Scenarios above it are named (see {@link CheckSlow}). */\n  maxDurationMs?: number;\n  format: \"text\" | \"json\";\n}\n\nexport type CheckDeps = Record<string, never>;\n\n/** A single rendered step inside a failing scenario. */\nexport interface CheckStep {\n  keyword: StepKeyword;\n  text: string;\n  /** True when this step is the one that failed. */\n  failed: boolean;\n}\n\n/** Expanded detail for one failing scenario — the actionable payload. */\nexport interface CheckFailure {\n  id: string;\n  scenario: string;\n  /** `sourceFile:sourceLine` */\n  location: string;\n  steps: CheckStep[];\n  /** Failing step's error if isolated, else the scenario-level error. */\n  errorMessage?: string;\n  /** Expected value of the failed assertion, when the host reports one. */\n  expected?: string;\n  /** Actual value of the failed assertion, when the host reports one. */\n  actual?: string;\n  /** Product-code paths/globs this scenario exercises (what to fix). */\n  covers: string[];\n  tickets: string[];\n  /** True when this scenario was passing in the baseline run. */\n  regressed: boolean;\n}\n\n/**\n * A scenario that is switched off: skipped or pending, but not `it.todo`.\n * A planned scenario is a spec waiting for code; a turned-off one is a spec\n * you stopped validating, and the pack forgets it exists unless it is named.\n */\nexport interface CheckTurnedOff {\n  id: string;\n  scenario: string;\n  /** `sourceFile:sourceLine` */\n  location: string;\n  status: \"skipped\" | \"pending\";\n  tickets: string[];\n}\n\n/**\n * A scenario that took longer than the budget. A slow suite is usually two or\n * three scenarios, and nobody knows which until something names them.\n */\nexport interface CheckSlow {\n  id: string;\n  scenario: string;\n  /** `sourceFile:sourceLine` */\n  location: string;\n  durationMs: number;\n}\n\nexport interface CheckReport {\n  summary: {\n    total: number;\n    passed: number;\n    failed: number;\n    skipped: number;\n    pending: number;\n  };\n  failures: CheckFailure[];\n  /** Scenarios switched off — named, not just counted (see {@link CheckTurnedOff}). */\n  turnedOff: CheckTurnedOff[];\n  /** Scenarios over `--max-duration`, longest first. Empty without a budget. */\n  overBudget: CheckSlow[];\n  /** The budget those scenarios broke, for the message that names it. */\n  maxDurationMs?: number;\n  /** Count of scenarios that went passed → failed vs. the baseline. */\n  regressed: number;\n  /** Count of scenarios that went failed → passed vs. the baseline. */\n  fixed: number;\n  /** Whether a baseline was supplied (so callers know if deltas are meaningful). */\n  comparedToBaseline: boolean;\n}\n\nconst ICON_PASS = \"✓\"; // ✓\nconst ICON_FAIL = \"✗\"; // ✗\nconst ICON_SKIP = \"⊘\"; // ⊘\nconst ICON_PENDING = \"⏳\"; // ⏳\nconst ICON_WARN = \"⚠\"; // ⚠\n\n/**\n * Build a structured check report from canonical test cases.\n * Pure: no IO. Callers render it as text or JSON and decide the exit code.\n */\nexport function buildCheck(args: CheckArgs, _deps: CheckDeps = {}): CheckReport {\n  const { testCases, baseline, maxDurationMs } = args;\n\n  const summary = {\n    total: testCases.length,\n    passed: testCases.filter((tc) => tc.status === \"passed\").length,\n    failed: testCases.filter((tc) => tc.status === \"failed\").length,\n    skipped: testCases.filter((tc) => tc.status === \"skipped\").length,\n    pending: testCases.filter((tc) => tc.status === \"pending\").length,\n  };\n\n  let regressed = 0;\n  let fixed = 0;\n  if (baseline) {\n    for (const tc of testCases) {\n      const before = baseline.get(tc.id);\n      if (before === \"passed\" && tc.status === \"failed\") regressed += 1;\n      if (before === \"failed\" && tc.status === \"passed\") fixed += 1;\n    }\n  }\n\n  const failures: CheckFailure[] = testCases\n    .filter((tc) => tc.status === \"failed\")\n    .map((tc) => toFailure(tc, baseline))\n    // Regressions first (most actionable: an edit just broke a green scenario),\n    // then stable by source location for deterministic output.\n    .sort((a, b) => {\n      if (a.regressed !== b.regressed) return a.regressed ? -1 : 1;\n      return a.location.localeCompare(b.location);\n    });\n\n  const turnedOff: CheckTurnedOff[] = testCases\n    .filter(\n      (tc) =>\n        (tc.status === \"skipped\" || tc.status === \"pending\") && tc.rawStatus !== \"todo\",\n    )\n    .map((tc) => ({\n      id: tc.id,\n      scenario: tc.story.scenario,\n      location: `${tc.sourceFile}:${tc.sourceLine}`,\n      status: tc.status as \"skipped\" | \"pending\",\n      tickets: (tc.story.tickets ?? []).map((t) => t.id),\n    }))\n    .sort((a, b) => a.location.localeCompare(b.location));\n\n  const overBudget: CheckSlow[] =\n    maxDurationMs === undefined\n      ? []\n      : testCases\n          .filter((tc) => tc.durationMs > maxDurationMs)\n          .map((tc) => ({\n            id: tc.id,\n            scenario: tc.story.scenario,\n            location: `${tc.sourceFile}:${tc.sourceLine}`,\n            durationMs: tc.durationMs,\n          }))\n          .sort((a, b) => b.durationMs - a.durationMs);\n\n  return {\n    summary,\n    failures,\n    turnedOff,\n    overBudget,\n    ...(maxDurationMs === undefined ? {} : { maxDurationMs }),\n    regressed,\n    fixed,\n    comparedToBaseline: baseline !== undefined,\n  };\n}\n\nfunction toFailure(\n  tc: TestCaseResult,\n  baseline?: Map<string, TestStatus>,\n): CheckFailure {\n  const failedIndexes = new Set(\n    tc.stepResults.filter((s) => s.status === \"failed\").map((s) => s.index),\n  );\n\n  const steps: CheckStep[] = tc.story.steps.map((step, index) => ({\n    keyword: step.keyword,\n    text: step.text,\n    failed: failedIndexes.has(index),\n  }));\n\n  return {\n    id: tc.id,\n    scenario: tc.story.scenario,\n    location: `${tc.sourceFile}:${tc.sourceLine}`,\n    steps,\n    errorMessage: failingScenarioMessage(tc),\n    ...failingComparison(tc),\n    covers: tc.story.covers ?? [],\n    tickets: (tc.story.tickets ?? []).map((t) => t.id),\n    regressed: baseline?.get(tc.id) === \"passed\",\n  };\n}\n\n/**\n * Render the check report. Text is the default agent/human surface\n * (compressed success, expanded failure); JSON is the machine contract.\n */\nexport function renderCheck(report: CheckReport, format: \"text\" | \"json\"): string {\n  return format === \"json\"\n    ? JSON.stringify(report, null, 2)\n    : renderCheckText(report);\n}\n\nfunction renderCheckText(report: CheckReport): string {\n  const { summary, failures } = report;\n\n  // One-line headline. Success is compressed to counts — no per-scenario noise.\n  const headlineParts = [`${ICON_PASS} ${summary.passed} passed`];\n  if (summary.failed > 0) headlineParts.push(`${ICON_FAIL} ${summary.failed} failed`);\n  if (summary.skipped > 0) headlineParts.push(`${ICON_SKIP} ${summary.skipped} skipped`);\n  if (summary.pending > 0) headlineParts.push(`${ICON_PENDING} ${summary.pending} pending`);\n  const headline = `${headlineParts.join(\"   \")}   (${summary.total} scenarios)`;\n\n  if (failures.length === 0) {\n    const lines = [headline];\n    if (report.comparedToBaseline && report.fixed > 0) {\n      lines.push(`${ICON_PASS} ${report.fixed} fixed since baseline.`);\n    }\n    // \"Green\" has to mean the whole pack ran. A run with scenarios switched\n    // off is green about less than it looks, so say which ones.\n    lines.push(\n      report.turnedOff.length === 0\n        ? \"All scenarios green.\"\n        : \"All running scenarios green.\",\n    );\n    lines.push(...turnedOffLines(report.turnedOff));\n    lines.push(...overBudgetLines(report));\n    return lines.join(\"\\n\").trimEnd();\n  }\n\n  const lines = [headline, \"\"];\n\n  for (const f of failures) {\n    lines.push(`${ICON_FAIL} ${f.scenario}${f.regressed ? \"  (regressed)\" : \"\"}`);\n    lines.push(`  ${f.location}`);\n    for (const step of f.steps) {\n      const marker = step.failed ? `  ${ICON_FAIL} ` : \"    \";\n      lines.push(`${marker}${step.keyword} ${step.text}`);\n    }\n    if (f.errorMessage) {\n      // Keep the error to its first line in text mode; full detail lives in JSON.\n      const firstLine = f.errorMessage.split(\"\\n\")[0];\n      lines.push(`    → ${firstLine}`);\n    }\n    if (f.expected !== undefined) lines.push(`      expected: ${f.expected.split(\"\\n\")[0]}`);\n    if (f.actual !== undefined) lines.push(`      actual:   ${f.actual.split(\"\\n\")[0]}`);\n    if (f.covers.length > 0) {\n      lines.push(`  covers: ${f.covers.join(\", \")}`);\n    }\n    if (f.tickets.length > 0) {\n      lines.push(`  ticket: ${f.tickets.join(\", \")}`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(...turnedOffLines(report.turnedOff));\n  if (report.turnedOff.length > 0) lines.push(\"\");\n  lines.push(...overBudgetLines(report));\n\n  // Retained signal: what changed since the baseline.\n  if (report.comparedToBaseline) {\n    if (report.regressed > 0) {\n      lines.push(`${ICON_WARN} ${report.regressed} regressed since baseline (was passing).`);\n    }\n    if (report.fixed > 0) {\n      lines.push(`${ICON_PASS} ${report.fixed} fixed since baseline.`);\n    }\n    if (report.regressed === 0 && report.fixed === 0) {\n      lines.push(\"No status changes vs. baseline.\");\n    }\n  }\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\n/**\n * Name every switched-off scenario. Counting them is how a pack quietly rots:\n * someone turns one off for a decision that never comes back, and the headline\n * still reads green. A ticket next to each one is what makes the list\n * reviewable; missing tickets are called out rather than left blank.\n */\nfunction overBudgetLines(report: CheckReport): string[] {\n  if (report.overBudget.length === 0 || report.maxDurationMs === undefined) return [];\n  const budget = formatDuration(report.maxDurationMs);\n  const lines = [\n    `${ICON_WARN} ${report.overBudget.length} scenario${report.overBudget.length === 1 ? \" is\" : \"s are\"} over the ${budget} budget:`,\n  ];\n  for (const s of report.overBudget) {\n    lines.push(`  ${formatDuration(s.durationMs)}  ${s.scenario}  (${s.location})`);\n  }\n  return lines;\n}\n\nfunction turnedOffLines(turnedOff: CheckTurnedOff[]): string[] {\n  if (turnedOff.length === 0) return [];\n  const lines = [\"\", `${ICON_WARN} ${turnedOff.length} turned off (not validated):`];\n  for (const t of turnedOff) {\n    const icon = t.status === \"skipped\" ? ICON_SKIP : ICON_PENDING;\n    lines.push(`  ${icon} ${t.scenario}`);\n    lines.push(\n      `    ${t.location}  ${t.tickets.length > 0 ? `ticket: ${t.tickets.join(\", \")}` : \"no ticket\"}`,\n    );\n  }\n  return lines;\n}\n","/**\n * `goal` — a behavioral definition-of-done for autonomous agent loops.\n *\n * A `/goal`-style loop keeps working until a verifiable condition holds. This\n * expresses that condition in behavior, not \"tests green and lint clean\": the\n * required scenarios pass, nothing regressed, and nobody weakened a scenario to\n * fake done (the ratchet). It returns a clear met / not-met verdict and what is\n * left, so the loop and the human reading after it can both trust \"done\".\n */\n\nimport type { TestCaseResult, TestRunResult, TestStatus } from \"executable-stories-core/types/test-result\";\nimport { asNoul, type JevClient } from \"./jev\";\n\n/** Result of one required selector (a tag, ticket, or scenario that must pass). */\nexport interface GoalRequirementResult {\n  /** Human-readable selector, e.g. \"tag:US-101\", \"ticket:CART-9\", \"all scenarios\". */\n  selector: string;\n  matched: number;\n  passed: number;\n  /** Titles of matched scenarios that did not pass. */\n  failing: string[];\n  /** matched > 0 and every matched scenario passed. */\n  met: boolean;\n}\n\n/** A scenario that was removed or weakened versus the baseline (anti-fake-done). */\nexport interface RatchetViolation {\n  id: string;\n  title: string;\n  kind: \"removed\" | \"disabled\" | \"weakened\";\n  detail: string;\n}\n\nexport interface GoalReport {\n  /** True only when every requirement is met and no enforced guard fired. */\n  met: boolean;\n  requirements: GoalRequirementResult[];\n  /** Scenarios that went passed -> failed versus baseline (when --no-regressions). */\n  regressions: Array<{ id: string; title: string }>;\n  regressionsEnforced: boolean;\n  /** Files where a test failed before declaring its scenario. Any of them blocks `met`. */\n  incompleteFiles: string[];\n  ratchet: {\n    enforced: boolean;\n    violations: RatchetViolation[];\n    /** Jev's read of scenarios that changed without shrinking. Never affects `met`. */\n    advisories: RatchetViolation[];\n    /**\n     * Baseline scenarios this run could not have seen: absent from a `filtered`\n     * run, or from an incomplete file. Any of them blocks `met`: only a full run\n     * proves a scenario is still there.\n     */\n    unchecked: Array<{ id: string; title: string }>;\n  };\n}\n\nexport interface GoalArgs {\n  run: TestRunResult;\n  baseline?: TestRunResult;\n  requireTags: string[];\n  requireTickets: string[];\n  requireScenarios: string[];\n  enforceNoRegressions: boolean;\n  enforceRatchet: boolean;\n  format: \"text\" | \"json\";\n}\n\nexport type GoalDeps = Record<string, never>;\n\nconst ACTIVE: TestStatus[] = [\"passed\", \"failed\"];\n\nexport function buildGoal(args: GoalArgs, _deps: GoalDeps = {}): GoalReport {\n  const { run, baseline } = args;\n  const cases = run.testCases;\n\n  // Each required tag/ticket/scenario becomes a selector that must resolve to\n  // at least one passing scenario. With none declared, the goal is \"all pass\".\n  const selectors: Array<{ label: string; match: (tc: TestCaseResult) => boolean }> = [\n    ...args.requireTags.map((tag) => ({ label: `tag:${tag}`, match: (tc: TestCaseResult) => tc.tags.includes(tag) })),\n    ...args.requireTickets.map((id) => ({ label: `ticket:${id}`, match: (tc: TestCaseResult) => (tc.story.tickets ?? []).some((t) => t.id === id) })),\n    ...args.requireScenarios.map((sel) => ({ label: `scenario:${sel}`, match: (tc: TestCaseResult) => tc.id === sel || tc.story.scenario === sel })),\n  ];\n\n  const requirements: GoalRequirementResult[] =\n    selectors.length === 0\n      ? [evaluate(\"all scenarios\", cases)]\n      : selectors.map((s) => evaluate(s.label, cases.filter(s.match)));\n\n  const regressions: GoalReport[\"regressions\"] = [];\n  if (baseline && args.enforceNoRegressions) {\n    const before = statusMap(baseline);\n    for (const tc of cases) {\n      if (before.get(tc.id) === \"passed\" && tc.status === \"failed\") {\n        regressions.push({ id: tc.id, title: tc.story.scenario });\n      }\n    }\n  }\n\n  const violations: RatchetViolation[] = [];\n  const unchecked: GoalReport[\"ratchet\"][\"unchecked\"] = [];\n  if (baseline && args.enforceRatchet) {\n    const current = new Map(cases.map((tc) => [tc.id, tc]));\n    // A focused run lacks everything it did not target, so its absences prove\n    // nothing. An unknown scope still counts, so the guard stays strict for\n    // adapters that cannot tell.\n    const incomplete = new Set(run.incompleteSourceFiles ?? []);\n    for (const base of baseline.testCases) {\n      const now = current.get(base.id);\n      if (!now && (run.runScope === \"filtered\" || incomplete.has(base.sourceFile))) {\n        unchecked.push({ id: base.id, title: base.story.scenario });\n        continue;\n      }\n      if (!now) {\n        violations.push({ id: base.id, title: base.story.scenario, kind: \"removed\", detail: \"scenario no longer present\" });\n        continue;\n      }\n      if (ACTIVE.includes(base.status) && (now.status === \"skipped\" || now.status === \"pending\")) {\n        violations.push({ id: base.id, title: base.story.scenario, kind: \"disabled\", detail: `${base.status} -> ${now.status}` });\n      }\n      const baseSteps = base.story.steps.length;\n      const nowSteps = now.story.steps.length;\n      if (nowSteps < baseSteps) {\n        violations.push({ id: base.id, title: base.story.scenario, kind: \"weakened\", detail: `${baseSteps} steps -> ${nowSteps} steps` });\n      }\n    }\n  }\n\n  // A file that broke before declaring its scenarios hides them from every check above.\n  const incompleteFiles = [...(run.incompleteSourceFiles ?? [])].sort();\n  const met =\n    requirements.every((r) => r.met) &&\n    regressions.length === 0 &&\n    violations.length === 0 &&\n    unchecked.length === 0 &&\n    incompleteFiles.length === 0;\n\n  return {\n    met,\n    requirements,\n    regressions,\n    regressionsEnforced: Boolean(baseline && args.enforceNoRegressions),\n    incompleteFiles,\n    ratchet: { enforced: Boolean(baseline && args.enforceRatchet), violations, advisories: [], unchecked },\n  };\n}\n\n/** Jev must be this sure before a rewrite is called out as weakening. */\nexport const GOAL_WEAKENED_MIN_PROBABILITY = 0.75;\n\nconst stepText = (tc: TestCaseResult) => tc.story.steps.map((s) => `${s.keyword} ${s.text}`);\n\n/**\n * The step-count ratchet sees counts, so merging two steps keeps it clean.\n * When a baseline scenario's steps were rewritten without shrinking, ask Jev\n * whether the new version checks less. Advisory only: `met` is decided by\n * the rules above, and this is a judgment.\n */\nexport async function enrichGoal(report: GoalReport, args: GoalArgs, jev: JevClient): Promise<GoalReport> {\n  const { baseline } = args;\n  if (!baseline || !report.ratchet.enforced) return report;\n  const current = new Map(args.run.testCases.map((tc) => [tc.id, tc]));\n  const flagged = new Set(report.ratchet.violations.map((v) => v.id));\n\n  const rewritten = baseline.testCases.flatMap((base) => {\n    const now = current.get(base.id);\n    if (!now || flagged.has(base.id)) return [];\n    const before = stepText(base);\n    const after = stepText(now);\n    return before.join(\"\\n\") === after.join(\"\\n\") ? [] : [{ base, before, after }];\n  });\n\n  const advisories = (\n    await Promise.all(\n      rewritten.map(async ({ base, before, after }) => {\n        const answers = await jev.ask(\n          { baseline: before, now: after },\n          {\n            weakened: {\n              type: \"noul\",\n              instructions:\n                \"Does the NOW scenario check less than the BASELINE scenario: fewer or weaker assertions, looser expectations, or a removed check?\",\n            },\n          },\n        );\n        const p = asNoul(answers.weakened);\n        if (p === undefined || p < GOAL_WEAKENED_MIN_PROBABILITY) return [];\n        return [{ id: base.id, title: base.story.scenario, kind: \"weakened\" as const, detail: `jev ${p.toFixed(2)}: steps rewritten, checks less` }];\n      }),\n    )\n  ).flat();\n\n  return { ...report, ratchet: { ...report.ratchet, advisories } };\n}\n\nfunction evaluate(selector: string, matched: TestCaseResult[]): GoalRequirementResult {\n  const passed = matched.filter((tc) => tc.status === \"passed\").length;\n  const failing = matched.filter((tc) => tc.status !== \"passed\").map((tc) => tc.story.scenario);\n  return {\n    selector,\n    matched: matched.length,\n    passed,\n    failing,\n    met: matched.length > 0 && failing.length === 0,\n  };\n}\n\nfunction statusMap(run: TestRunResult): Map<string, TestStatus> {\n  return new Map(run.testCases.map((tc) => [tc.id, tc.status]));\n}\n\nexport function renderGoal(report: GoalReport, format: \"text\" | \"json\"): string {\n  if (format === \"json\") return JSON.stringify(report, null, 2);\n\n  const lines = [`GOAL: ${report.met ? \"met\" : \"not met\"}`];\n\n  for (const req of report.requirements) {\n    if (req.matched === 0) {\n      lines.push(`  ${req.selector}: no matching scenario (no proof)`);\n      continue;\n    }\n    const tail = req.failing.length > 0 ? ` (${req.failing.length} failing)` : \"\";\n    lines.push(`  ${req.selector}: ${req.passed}/${req.matched} scenarios pass${tail}`);\n  }\n\n  if (report.regressionsEnforced) {\n    if (report.regressions.length === 0) {\n      lines.push(\"  regressions: 0\");\n    } else {\n      lines.push(`  regressions: ${report.regressions.length} (${report.regressions.map((r) => r.title).join(\", \")})`);\n    }\n  }\n\n  if (report.incompleteFiles.length > 0) {\n    lines.push(`  incomplete: ${report.incompleteFiles.length} file(s) failed before declaring scenarios (${report.incompleteFiles.join(\", \")})`);\n  }\n\n  if (report.ratchet.enforced) {\n    if (report.ratchet.violations.length === 0) {\n      lines.push(\"  ratchet: clean (0 scenarios removed/weakened)\");\n    } else {\n      lines.push(`  ratchet: ${report.ratchet.violations.length} removed/weakened`);\n      for (const v of report.ratchet.violations) {\n        lines.push(`    ${v.kind}: ${v.title} (${v.detail})`);\n      }\n    }\n    if (report.ratchet.unchecked.length > 0) {\n      lines.push(`  not checked for removal: ${report.ratchet.unchecked.length} baseline scenarios this run did not cover; run the full suite, or pass --no-ratchet for a focused run`);\n    }\n    for (const v of report.ratchet.advisories) {\n      lines.push(`    advisory ${v.kind}: ${v.title} (${v.detail})`);\n    }\n  }\n\n  return lines.join(\"\\n\");\n}\n","/**\n * CODEOWNERS parsing, so a failing scenario can name the team that fixes it.\n *\n * A red run that belongs to everyone belongs to nobody until someone\n * volunteers. `triage --by-owner` groups the worklist the way the repo already\n * divides responsibility, using the file every GitHub repo already has.\n *\n * Supports the common CODEOWNERS subset — leading `/`, trailing `/`,\n * `*`, `**`, and bare extension globs. Character classes, `?`, and negation are\n * not implemented; swap in a gitignore-grade matcher if a repo needs them.\n */\n\nexport interface CodeownersRule {\n  pattern: string;\n  owners: string[];\n}\n\nexport function parseCodeowners(text: string): CodeownersRule[] {\n  const rules: CodeownersRule[] = [];\n  for (const raw of text.split(\"\\n\")) {\n    const line = raw.split(\"#\")[0]!.trim();\n    if (line === \"\") continue;\n    const [pattern, ...owners] = line.split(/\\s+/);\n    if (!pattern || owners.length === 0) continue;\n    rules.push({ pattern, owners });\n  }\n  return rules;\n}\n\nfunction toRegExp(pattern: string): RegExp {\n  // A pattern with no slash (except a trailing one) matches at any depth, the\n  // way `*.md` does in gitignore; anything anchored with `/` matches from root.\n  const anchored = pattern.startsWith(\"/\");\n  const body = anchored ? pattern.slice(1) : pattern;\n  const floating = !body.replace(/\\/$/, \"\").includes(\"/\");\n\n  // `**` crosses directory boundaries, a single `*` does not. Split on the\n  // double star first so each half can be globbed without a sentinel.\n  const globbed = body\n    .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n    .split(\"**\")\n    .map((part) => part.replace(/\\*/g, \"[^/]*\"))\n    .join(\".*\");\n\n  // A directory pattern owns everything under it; a file pattern owns itself.\n  const tail = body.endsWith(\"/\") ? \".*\" : \"(/.*)?\";\n  return new RegExp(`^${floating ? \"(.*/)?\" : \"\"}${globbed}${tail}$`);\n}\n\n/** Owners of a path — last matching rule wins, as git resolves CODEOWNERS. */\nexport function ownersFor(rules: readonly CodeownersRule[], path: string): string[] {\n  const clean = path.replace(/^\\.\\//, \"\").replace(/^\\//, \"\");\n  let owners: string[] = [];\n  for (const rule of rules) {\n    if (toRegExp(rule.pattern).test(clean)) owners = rule.owners;\n  }\n  return owners;\n}\n","/**\n * `triage` — the discovery-phase worklist for an agent loop.\n *\n * The automation that runs on a schedule needs a ranked queue of what to work\n * on, not a full report. This emits failing scenarios, regressions first, each\n * carrying the product code it `covers` (where to send the fixer), the error,\n * and its tickets. Failures with no `covers` are flagged: the loop can't route\n * them to code, so a human or a covers annotation is needed first.\n */\n\nimport type { TestCaseResult, TestStatus } from \"executable-stories-core/types/test-result\";\nimport { failingScenarioMessage } from \"./scenario-failure\";\nimport { ownersFor, type CodeownersRule } from \"./codeowners\";\nimport { asChoice, type JevClient } from \"./jev\";\n\nexport interface TriageItem {\n  rank: number;\n  id: string;\n  scenario: string;\n  status: TestStatus;\n  /** `sourceFile:sourceLine` */\n  location: string;\n  /** Product-code paths to fix. Empty when the scenario declared no `covers`. */\n  covers: string[];\n  tickets: string[];\n  /** CODEOWNERS entries for the code this scenario covers. Empty = unclaimed. */\n  owners: string[];\n  errorMessage?: string;\n  /** Passed in the baseline, failing now. Ranked first. */\n  regressed: boolean;\n  reason: \"regression\" | \"failing\";\n  /** Jev's pick when `covers` is empty: a path the run already routes to, with its probability. */\n  suggestedCovers?: { path: string; probability: number };\n  /** Jev's read of what failed: the product, the test itself, or the environment. */\n  failureKind?: { kind: FailureKind; confidence: number };\n}\n\nexport type FailureKind = \"product\" | \"test\" | \"infra\";\n\nexport interface TriageReport {\n  total: number;\n  failing: number;\n  regressions: number;\n  /** Failing scenarios with no `covers` — the loop can't route them to code. */\n  needsCovers: number;\n  items: TriageItem[];\n}\n\nexport interface TriageArgs {\n  testCases: TestCaseResult[];\n  /** Baseline statuses by scenario id, to flag regressions and rank them first. */\n  baseline?: Map<string, TestStatus>;\n  format: \"text\" | \"json\";\n  /** Parsed CODEOWNERS. Without it every item is unowned. */\n  codeowners?: readonly CodeownersRule[];\n  /** Keep only the first n ranked items, e.g. 1 for a scheduled loop's next target. Counts still cover every failure. */\n  limit?: number;\n}\n\nexport type TriageDeps = Record<string, never>;\n\nexport function buildTriage(args: TriageArgs, _deps: TriageDeps = {}): TriageReport {\n  const { testCases, baseline, codeowners } = args;\n\n  // Route by the product code the scenario covers — that is where the fix\n  // lands. A scenario with no `covers` falls back to its own test file, which\n  // is at least in the right neighbourhood.\n  const ownersOf = (tc: TestCaseResult): string[] => {\n    if (!codeowners) return [];\n    const paths = tc.story.covers?.length ? tc.story.covers : [tc.sourceFile];\n    const found = new Set<string>();\n    for (const path of paths) {\n      for (const owner of ownersFor(codeowners, path)) found.add(owner);\n    }\n    return [...found];\n  };\n\n  const failing = testCases.filter((tc) => tc.status === \"failed\");\n\n  const ranked = failing\n    .map((tc) => {\n      const regressed = baseline?.get(tc.id) === \"passed\";\n      return {\n        tc,\n        regressed,\n        covers: tc.story.covers ?? [],\n      };\n    })\n    // Regressions first (an edit just broke a green scenario), then by location.\n    .sort((a, b) => {\n      if (a.regressed !== b.regressed) return a.regressed ? -1 : 1;\n      const la = `${a.tc.sourceFile}:${a.tc.sourceLine}`;\n      const lb = `${b.tc.sourceFile}:${b.tc.sourceLine}`;\n      // Id breaks ties (two scenarios on one line, e.g. it.each), so the same run always ranks the same.\n      return la.localeCompare(lb) || a.tc.id.localeCompare(b.tc.id);\n    });\n\n  const items: TriageItem[] = ranked.map((entry, index) => ({\n    rank: index + 1,\n    id: entry.tc.id,\n    scenario: entry.tc.story.scenario,\n    status: entry.tc.status,\n    location: `${entry.tc.sourceFile}:${entry.tc.sourceLine}`,\n    covers: entry.covers,\n    tickets: (entry.tc.story.tickets ?? []).map((t) => t.id),\n    owners: ownersOf(entry.tc),\n    errorMessage: failingScenarioMessage(entry.tc),\n    regressed: entry.regressed,\n    reason: entry.regressed ? \"regression\" : \"failing\",\n  }));\n\n  return {\n    total: testCases.length,\n    failing: failing.length,\n    regressions: items.filter((i) => i.regressed).length,\n    needsCovers: items.filter((i) => i.covers.length === 0).length,\n    items: args.limit === undefined ? items : items.slice(0, args.limit),\n  };\n}\n\n/** Below this probability no path is suggested. */\nexport const TRIAGE_SUGGEST_MIN_PROBABILITY = 0.5;\n\nconst FAILURE_KIND_CRITERIA: Record<FailureKind, string> = {\n  product: \"the application code under test behaves wrongly\",\n  test: \"the scenario, assertion, fixture, or test data is wrong or stale\",\n  infra: \"environment, network, timeout, resource, or flaky-timing failure\",\n};\n\n/**\n * For each failing scenario with no `covers`, ask Jev to pick from the paths\n * this run already routes to (every declared `covers`, plus CODEOWNERS\n * patterns), and to say whether the product, the test, or the environment\n * failed. The declared-`covers` count stays as declared: a suggestion is not\n * a declaration.\n */\nexport async function enrichTriage(\n  report: TriageReport,\n  testCases: TestCaseResult[],\n  jev: JevClient,\n  codeowners?: readonly CodeownersRule[],\n): Promise<TriageReport> {\n  const candidates = new Set<string>(testCases.flatMap((tc) => tc.story.covers ?? []));\n  for (const rule of codeowners ?? []) candidates.add(rule.pattern);\n  const criteria = Object.fromEntries([...candidates].map((path) => [path, null]));\n\n  const byId = new Map(testCases.map((tc) => [tc.id, tc]));\n  const items = await Promise.all(\n    report.items.map(async (item) => {\n      if (item.covers.length > 0) return item;\n      const tc = byId.get(item.id);\n      const answers = await jev.ask(\n        {\n          scenario: item.scenario,\n          steps: tc?.story.steps.map((s) => `${s.keyword} ${s.text}`) ?? [],\n          testFile: item.location,\n          error: item.errorMessage ?? null,\n        },\n        {\n          kind: {\n            type: \"choice\",\n            instructions: \"What is most likely broken, given this failing scenario and its error?\",\n            criteria: FAILURE_KIND_CRITERIA,\n          },\n          ...(candidates.size > 0\n            ? {\n                covers: {\n                  type: \"choice\" as const,\n                  instructions: \"Which of these product paths does the fix for this failure most likely land in?\",\n                  criteria,\n                },\n              }\n            : {}),\n        },\n      );\n      const kind = asChoice(answers.kind);\n      const covers = asChoice(answers.covers);\n      const probability = covers ? (covers.probabilities[covers.choice] ?? 0) : 0;\n      return {\n        ...item,\n        ...(kind && kind.choice in FAILURE_KIND_CRITERIA\n          ? { failureKind: { kind: kind.choice as FailureKind, confidence: kind.confidence } }\n          : {}),\n        ...(covers && probability >= TRIAGE_SUGGEST_MIN_PROBABILITY\n          ? { suggestedCovers: { path: covers.choice, probability } }\n          : {}),\n      };\n    }),\n  );\n  return { ...report, items };\n}\n\nexport interface RenderTriageOptions {\n  /** Group the text worklist under each CODEOWNERS owner. */\n  byOwner?: boolean;\n}\n\nexport function renderTriage(\n  report: TriageReport,\n  format: \"text\" | \"json\",\n  options: RenderTriageOptions = {},\n): string {\n  if (format === \"json\") return JSON.stringify(report, null, 2);\n\n  if (report.items.length === 0) {\n    return \"Nothing to triage. No failing scenarios.\";\n  }\n\n  if (options.byOwner) return renderByOwner(report);\n\n  const header =\n    report.regressions > 0\n      ? `${report.items.length} items to triage (${report.regressions} regression${report.regressions === 1 ? \"\" : \"s\"})`\n      : `${report.items.length} items to triage`;\n  const lines = [header, \"\"];\n\n  for (const item of report.items) {\n    const tag = item.regressed ? \"[regression] \" : \"\";\n    lines.push(`${item.rank}. ${tag}${item.scenario}`);\n    lines.push(`   ${item.location}`);\n    if (item.errorMessage) {\n      lines.push(`   → ${item.errorMessage.split(\"\\n\")[0]}`);\n    }\n    if (item.covers.length > 0) {\n      lines.push(`   fix: ${item.covers.join(\", \")}`);\n    } else if (item.suggestedCovers) {\n      lines.push(`   fix: ${item.suggestedCovers.path}? (jev ${item.suggestedCovers.probability.toFixed(2)}, no covers declared)`);\n    } else {\n      lines.push(\"   fix: (no covers declared — add `covers` to route this to code)\");\n    }\n    if (item.failureKind) {\n      lines.push(`   kind: ${item.failureKind.kind} (jev ${item.failureKind.confidence.toFixed(2)})`);\n    }\n    if (item.tickets.length > 0) {\n      lines.push(`   ticket: ${item.tickets.join(\", \")}`);\n    }\n    if (item.owners.length > 0) {\n      lines.push(`   owner: ${item.owners.join(\", \")}`);\n    }\n    lines.push(\"\");\n  }\n\n  if (report.needsCovers > 0) {\n    lines.push(`${report.needsCovers} failing scenario(s) have no covers and can't be routed to code automatically.`);\n  }\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\nconst UNOWNED = \"Unowned\";\n\n/**\n * The same worklist, split the way the repo already splits responsibility.\n * Unowned work sorts last: it needs a decision about who takes it, not a fix.\n */\nfunction renderByOwner(report: TriageReport): string {\n  const groups = new Map<string, TriageItem[]>();\n  for (const item of report.items) {\n    for (const owner of item.owners.length > 0 ? item.owners : [UNOWNED]) {\n      const bucket = groups.get(owner);\n      if (bucket) bucket.push(item);\n      else groups.set(owner, [item]);\n    }\n  }\n\n  const owners = [...groups.keys()].sort((a, b) => {\n    if (a === UNOWNED) return 1;\n    if (b === UNOWNED) return -1;\n    return a.localeCompare(b);\n  });\n\n  const lines: string[] = [\n    `${report.items.length} items to triage across ${owners.length} owner${owners.length === 1 ? \"\" : \"s\"}`,\n    \"\",\n  ];\n  for (const owner of owners) {\n    const items = groups.get(owner)!;\n    lines.push(`${owner} (${items.length})`);\n    for (const item of items) {\n      const tag = item.regressed ? \"[regression] \" : \"\";\n      lines.push(`  ${item.rank}. ${tag}${item.scenario}`);\n      lines.push(`     ${item.location}`);\n      if (item.errorMessage) {\n        lines.push(`     → ${item.errorMessage.split(\"\\n\")[0]}`);\n      }\n    }\n    lines.push(\"\");\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n","import type { RunDiffResult, ScenarioDiff } from \"../types/compare\";\n\nfunction titleFor(kind: ScenarioDiff[\"kind\"]): string {\n  switch (kind) {\n    case \"regressed\":\n      return \"Regressed\";\n    case \"fixed\":\n      return \"Fixed\";\n    case \"added\":\n      return \"Added\";\n    case \"removed\":\n      return \"Removed\";\n    case \"renamed\":\n      return \"Renamed\";\n    case \"moved\":\n      return \"Moved\";\n    case \"changed\":\n      return \"Changed\";\n    default:\n      return \"Unchanged\";\n  }\n}\n\nfunction summarizeScenario(scenario: ScenarioDiff): string {\n  const before = scenario.baseline?.status;\n  const after = scenario.current?.status;\n  const statusPart =\n    before && after\n      ? `status \\`${before}\\` -> \\`${after}\\``\n      : before\n        ? `removed from \\`${before}\\``\n        : `new \\`${after}\\``;\n  const fields =\n    scenario.changedFields.length > 0\n      ? `; changed ${scenario.changedFields.map((field) => `\\`${field}\\``).join(\", \")}`\n      : \"\";\n  return `- ${scenario.scenario} (\\`${scenario.sourceFile}:${scenario.sourceLine}\\`): ${statusPart}${fields}`;\n}\n\nfunction addSection(\n  lines: string[],\n  diff: RunDiffResult,\n  kind: ScenarioDiff[\"kind\"],\n  maxScenarios: number\n): void {\n  const scenarios = diff.scenarios.filter((scenario) => scenario.kind === kind);\n  if (scenarios.length === 0) return;\n\n  lines.push(`### ${titleFor(kind)} (${scenarios.length})`);\n  lines.push(\"\");\n  for (const scenario of scenarios.slice(0, maxScenarios)) {\n    lines.push(summarizeScenario(scenario));\n  }\n  if (scenarios.length > maxScenarios) {\n    lines.push(`- ...and ${scenarios.length - maxScenarios} more`);\n  }\n  lines.push(\"\");\n}\n\nexport function createPrCommentSummary(\n  diff: RunDiffResult,\n  maxScenarios = 10\n): string {\n  const lines: string[] = [];\n\n  lines.push(\"## Executable Stories Review Summary\");\n  lines.push(\"\");\n  lines.push(\n    `Priority signal: ${diff.summary.regressed} regressed, ${diff.summary.fixed} fixed, ${diff.summary.added} added, ${diff.summary.removed} removed, ${diff.summary.changed} changed.`\n  );\n  lines.push(\"\");\n\n  if (diff.summary.notRun > 0) {\n    lines.push(\n      `Partial run: ${diff.summary.notRun} baseline scenario(s) in files this run did not cover are excluded.`\n    );\n    lines.push(\"\");\n  }\n\n  if (diff.summary.regressed > 0) {\n    lines.push(\"> Regressions detected. Review these first.\");\n    lines.push(\"\");\n  } else if (diff.summary.fixed > 0) {\n    lines.push(\"> No regressions detected. Review fixed scenarios next.\");\n    lines.push(\"\");\n  } else {\n    lines.push(\"> No regressions or fixes detected. Remaining changes are neutral.\");\n    lines.push(\"\");\n  }\n\n  addSection(lines, diff, \"regressed\", maxScenarios);\n  addSection(lines, diff, \"fixed\", maxScenarios);\n  addSection(lines, diff, \"added\", maxScenarios);\n  addSection(lines, diff, \"removed\", maxScenarios);\n  addSection(lines, diff, \"renamed\", maxScenarios);\n  addSection(lines, diff, \"moved\", maxScenarios);\n  addSection(lines, diff, \"changed\", maxScenarios);\n\n  return lines.join(\"\\n\").trimEnd();\n}\n","/**\n * Code Diff sidecar assembly — the authoring seam for Code Diff evidence.\n *\n * Authors (normally the `explain-change` skill) never hand-write content\n * anchors. The sidecar names a file and a unique substring of one changed\n * line; assembly locates that line in the `git diff --histogram` patch and\n * builds the real content anchor from it. A match that fails to locate still\n * produces an annotation, explicitly marked `unresolved` (orphaned or\n * ambiguous), so authoring mistakes surface visibly instead of disappearing.\n */\n\nimport type { CodeDiffAnnotationInput, CodeDiffInput } from \"../types/review\";\nimport type { FileDiff } from \"../types/diff\";\nimport { createAnchor, parseUnifiedDiff } from \"./diff-anchor\";\n\n/** Hand-authored (or agent-authored) annotation entry in the sidecar file. */\nexport interface CodeDiffSidecarAnnotation {\n  /** Repo-relative path of the changed file. */\n  file: string;\n  /** Substring of exactly one changed line in the patch. */\n  match: string;\n  /** Explanatory prose (plain text — rendered verbatim). */\n  text: string;\n  label?: string;\n  scenarioIds?: string[];\n}\n\n/** The sidecar document (JSON). The patch itself is supplied separately. */\nexport interface CodeDiffSidecar {\n  title: string;\n  /** Canonical HTTPS patch URL — audit provenance only. */\n  patchUrl?: string;\n  baseLabel?: string;\n  headLabel?: string;\n  /** Ordered by concept, not Git file order. */\n  annotations: CodeDiffSidecarAnnotation[];\n}\n\n/** Locate the changed lines containing `match` in the file's hunks. */\nfunction locateMatches(\n  file: FileDiff,\n  match: string\n): Array<{ hunkIndex: number; lineIndex: number }> {\n  const out: Array<{ hunkIndex: number; lineIndex: number }> = [];\n  file.hunks.forEach((hunk, hunkIndex) => {\n    hunk.lines.forEach((line, lineIndex) => {\n      if (line.kind !== \"context\" && line.text.includes(match)) {\n        out.push({ hunkIndex, lineIndex });\n      }\n    });\n  });\n  return out;\n}\n\n/** Walk back to the start of the contiguous changed run containing `lineIndex`. */\nfunction runStart(file: FileDiff, hunkIndex: number, lineIndex: number): number {\n  const lines = file.hunks[hunkIndex].lines;\n  let start = lineIndex;\n  while (start > 0 && lines[start - 1].kind !== \"context\") start--;\n  return start;\n}\n\n/**\n * Assemble a {@link CodeDiffInput} from a sidecar and a unified patch.\n * Returns authoring warnings alongside — a located match gets a real content\n * anchor; a missed or non-unique match gets a bare anchor that resolves\n * orphaned, plus a warning saying why.\n */\nexport function assembleCodeDiff(args: {\n  sidecar: CodeDiffSidecar;\n  patch: string;\n}): { input: CodeDiffInput; warnings: string[] } {\n  const { sidecar, patch } = args;\n  const files = parseUnifiedDiff(patch);\n  const warnings: string[] = [];\n\n  if (sidecar.patchUrl !== undefined && !sidecar.patchUrl.startsWith(\"https://\")) {\n    warnings.push(\n      `patchUrl \"${sidecar.patchUrl}\" is not https: — it will render as inert text, not a link`\n    );\n  }\n\n  const annotations: CodeDiffAnnotationInput[] = sidecar.annotations.map(\n    (entry) => {\n      const base = {\n        text: entry.text,\n        label: entry.label,\n        scenarioIds: entry.scenarioIds,\n      };\n      const file = files.find(\n        (f) => f.newPath === entry.file || f.oldPath === entry.file\n      );\n      const matches = file ? locateMatches(file, entry.match) : [];\n\n      if (file && matches.length === 1) {\n        const { hunkIndex, lineIndex } = matches[0];\n        const anchor = createAnchor({\n          file,\n          hunkIndex,\n          lineIndex: runStart(file, hunkIndex, lineIndex),\n        });\n        return { ...base, anchor };\n      }\n\n      warnings.push(\n        !file\n          ? `annotation \"${entry.label ?? entry.match}\": file \"${entry.file}\" is not in the patch`\n          : matches.length === 0\n            ? `annotation \"${entry.label ?? entry.match}\": no changed line in \"${entry.file}\" contains \"${entry.match}\"`\n            : `annotation \"${entry.label ?? entry.match}\": \"${entry.match}\" matches ${matches.length} changed lines in \"${entry.file}\" — make it unique`\n      );\n      return {\n        ...base,\n        unresolved: (file && matches.length > 1 ? \"ambiguous\" : \"orphaned\") as\n          | \"ambiguous\"\n          | \"orphaned\",\n      };\n    }\n  );\n\n  return {\n    input: {\n      title: sidecar.title,\n      patch,\n      patchUrl: sidecar.patchUrl,\n      baseLabel: sidecar.baseLabel,\n      headLabel: sidecar.headLabel,\n      annotations,\n    },\n    warnings,\n  };\n}\n","/**\n * Review markdown formatter — renders a {@link ReviewResult} as a PR-comment-friendly\n * review of AI-authored changes.\n *\n * Reading order matches reviewer attention: the 🔴 uncovered-change band first\n * (what changed with no evidence), then 🟡 weak evidence, then claims grouped by\n * audience (stakeholder behaviour, then engineer detail), each showing graded\n * proof. Mirrors {@link RunDiffMarkdownFormatter}.\n */\n\nimport type {\n  ChangedFileReview,\n  CodeDiffEvidence,\n  EvidenceStrength,\n  ReviewClaim,\n  ReviewResult,\n} from \"../types/review\";\n\nexport interface ReviewMarkdownOptions {\n  title?: string;\n}\n\nconst STRENGTH_BADGE: Record<EvidenceStrength, string> = {\n  strong: \"🟢 strong\",\n  moderate: \"🟡 moderate\",\n  weak: \"🟠 weak\",\n  none: \"🔴 none\",\n};\n\nfunction statusIcon(status: ReviewClaim[\"status\"]): string {\n  switch (status) {\n    case \"passed\":\n      return \"✅\";\n    case \"failed\":\n      return \"❌\";\n    case \"skipped\":\n      return \"⊘\";\n    default:\n      return \"•\";\n  }\n}\n\nfunction escapeCell(value: string): string {\n  return value.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\n/** First line of an intent narrative, for the at-a-glance summary. */\nfunction intentSummary(intent: string): string {\n  const firstLine = intent.split(\"\\n\").find((l) => l.trim().length > 0) ?? \"\";\n  const trimmed = firstLine.trim();\n  return trimmed.length > 200 ? `${trimmed.slice(0, 197)}…` : trimmed;\n}\n\nfunction renderTicket(ticket: { id: string; url?: string }): string {\n  return ticket.url ? `[${ticket.id}](${ticket.url})` : `\\`${ticket.id}\\``;\n}\n\nfunction renderUncoveredBand(lines: string[], files: ChangedFileReview[]): void {\n  const uncovered = files.filter((f) => f.band === \"uncovered\");\n  if (uncovered.length === 0) return;\n  lines.push(`## 🔴 Changed code with no evidence (${uncovered.length})`);\n  lines.push(\"\");\n  lines.push(\"Start here — these changed source files have no claim or test behind them.\");\n  lines.push(\"\");\n  for (const file of uncovered) {\n    lines.push(`- \\`${file.path}\\` _(${file.changeKind})_`);\n  }\n  lines.push(\"\");\n}\n\nfunction renderWeakBand(lines: string[], files: ChangedFileReview[]): void {\n  const weak = files.filter((f) => f.band === \"weak\");\n  if (weak.length === 0) return;\n  lines.push(`## 🟡 Changed code with weak evidence (${weak.length})`);\n  lines.push(\"\");\n  for (const file of weak) {\n    const covered = file.claims\n      .map((c) => `${escapeCell(c.scenario)} (${c.strength})`)\n      .join(\", \");\n    lines.push(`- \\`${file.path}\\` _(${file.changeKind})_ — only: ${covered}`);\n  }\n  lines.push(\"\");\n}\n\nfunction renderClaim(lines: string[], claim: ReviewClaim): void {\n  lines.push(`### ${statusIcon(claim.status)} ${claim.scenario}`);\n  lines.push(\"\");\n  lines.push(`- File: \\`${claim.sourceFile}:${claim.sourceLine}\\``);\n  if (claim.changeType !== \"unknown\") {\n    const inferred = claim.changeTypeConfidence === undefined ? \"\" : ` _(inferred, jev ${claim.changeTypeConfidence.toFixed(2)})_`;\n    lines.push(`- Change: \\`${claim.changeType}\\`${inferred}`);\n  }\n  const tickets = claim.testCase.story.tickets ?? [];\n  if (tickets.length > 0) {\n    lines.push(`- Tickets: ${tickets.map(renderTicket).join(\", \")}`);\n  }\n  lines.push(\n    `- Evidence: ${STRENGTH_BADGE[claim.strength]} — ${claim.strengthReasons.join(\"; \")}`\n  );\n  if (claim.coversFiles.length > 0) {\n    lines.push(\n      `- Covers: ${claim.coversFiles.map((f) => `\\`${f}\\``).join(\", \")}`\n    );\n  }\n  if (claim.intent) {\n    lines.push(`- Why: ${escapeCell(intentSummary(claim.intent))}`);\n  }\n  lines.push(\"\");\n}\n\nfunction renderAudienceSection(\n  lines: string[],\n  title: string,\n  claims: ReviewClaim[]\n): void {\n  if (claims.length === 0) return;\n  lines.push(`## ${title} (${claims.length})`);\n  lines.push(\"\");\n  for (const claim of claims) {\n    renderClaim(lines, claim);\n  }\n}\n\n/** Patches above this render as a link/notice instead of a fenced block. */\nconst MAX_PATCH_EMBED_BYTES = 64 * 1024;\n\n/**\n * A fence longer than the longest backtick run in the content, so a patch\n * containing ``` (e.g. a diff of a Markdown file) cannot close the block early.\n */\nfunction fenceFor(content: string): string {\n  const runs = content.match(/`{3,}/g);\n  const length = runs ? Math.max(...runs.map((r) => r.length)) + 1 : 3;\n  return \"`\".repeat(length);\n}\n\n/**\n * Static Code Diff fallback: comparison metadata, ordered annotations with\n * scenario references and anchor-state notices, and the patch (fenced when\n * small, linked otherwise). No pretence of an interactive viewer.\n */\nfunction renderCodeDiff(lines: string[], evidence: CodeDiffEvidence): void {\n  lines.push(`## Code diff evidence: ${evidence.title}`);\n  lines.push(\"\");\n  if (evidence.baseLabel || evidence.headLabel) {\n    lines.push(\n      `Comparing \\`${evidence.baseLabel ?? \"base\"}\\` → \\`${evidence.headLabel ?? \"head\"}\\`.`\n    );\n    lines.push(\"\");\n  }\n  if (evidence.patchUrl !== undefined) {\n    // Only https: is presented as a linkable URL; anything else stays inert code text.\n    lines.push(\n      evidence.patchUrl.startsWith(\"https://\")\n        ? `Canonical patch: ${evidence.patchUrl}`\n        : `Canonical patch: \\`${evidence.patchUrl.replace(/`/g, \"\")}\\``\n    );\n    lines.push(\"\");\n  }\n\n  evidence.annotations.forEach((annotation, i) => {\n    lines.push(`### ${annotation.label ?? `Annotation ${i + 1}`}`);\n    lines.push(\"\");\n    lines.push(annotation.text);\n    lines.push(\"\");\n    if (annotation.resolution.state === \"orphaned\") {\n      lines.push(\n        \"> ⚠️ Orphaned annotation — could not locate these lines in the current patch.\"\n      );\n      lines.push(\"\");\n    } else if (annotation.resolution.state === \"ambiguous\") {\n      lines.push(\n        \"> ⚠️ Ambiguous anchor — these lines appear in more than one place in the current patch.\"\n      );\n      lines.push(\"\");\n    } else if (annotation.resolution.file !== undefined) {\n      lines.push(`Location: \\`${annotation.resolution.file}\\``);\n      lines.push(\"\");\n    }\n    if (annotation.scenarios.length === 0) {\n      lines.push(\"_Not covered by a scenario._\");\n    } else {\n      for (const ref of annotation.scenarios) {\n        lines.push(\n          ref.resolved && ref.status\n            ? `- ${statusIcon(ref.status)} ${escapeCell(ref.scenario ?? ref.id)} (\\`${ref.id}\\`)`\n            : `- ⚠️ \\`${ref.id}\\` — unverified reference (scenario not in this run)`\n        );\n      }\n    }\n    lines.push(\"\");\n  });\n\n  if (Buffer.byteLength(evidence.patch, \"utf8\") <= MAX_PATCH_EMBED_BYTES) {\n    const fence = fenceFor(evidence.patch);\n    lines.push(\"<details><summary>Raw patch (audit)</summary>\");\n    lines.push(\"\");\n    lines.push(`${fence}diff`);\n    lines.push(evidence.patch.trimEnd());\n    lines.push(fence);\n    lines.push(\"\");\n    lines.push(\"</details>\");\n  } else {\n    lines.push(\n      `_Patch too large to embed${evidence.patchUrl ? \" — see the canonical patch link above\" : \"\"}._`\n    );\n  }\n  lines.push(\"\");\n}\n\nexport class ReviewMarkdownFormatter {\n  private title: string;\n\n  constructor(options: ReviewMarkdownOptions = {}) {\n    this.title = options.title ?? \"Evidence Review\";\n  }\n\n  format(review: ReviewResult): string {\n    const lines: string[] = [];\n    const { summary, context } = review;\n\n    lines.push(`# ${this.title}`);\n    lines.push(\"\");\n    if (context.baseRef || context.headRef) {\n      lines.push(\n        `Comparing \\`${context.baseRef ?? \"base\"}\\` → \\`${context.headRef ?? \"head\"}\\`.`\n      );\n      lines.push(\"\");\n    }\n\n    lines.push(\"## Review priority\");\n    lines.push(\"\");\n    if (summary.changedSourceFiles === 0) {\n      lines.push(\n        \"No changed source files supplied — showing claims and evidence only.\"\n      );\n    } else if (summary.uncovered > 0) {\n      lines.push(\n        `Review the ${summary.uncovered} unaccounted-for file(s) first: changed code with no evidence behind it.`\n      );\n    } else if (summary.weaklyCovered > 0) {\n      lines.push(\n        `No unaccounted-for changes. Review ${summary.weaklyCovered} weakly-covered file(s) next.`\n      );\n    } else {\n      lines.push(\"Every changed source file is backed by at least moderate evidence.\");\n    }\n    lines.push(\"\");\n\n    if (summary.changedSourceFiles > 0) {\n      lines.push(\"| 🔴 Uncovered | 🟡 Weak | 🟢 Covered | Changed files |\");\n      lines.push(\"| ---: | ---: | ---: | ---: |\");\n      lines.push(\n        `| ${summary.uncovered} | ${summary.weaklyCovered} | ${summary.covered} | ${summary.changedSourceFiles} |`\n      );\n      lines.push(\"\");\n    }\n\n    lines.push(\"| Claims | Stakeholder | Engineer | Strong | Moderate | Weak | None |\");\n    lines.push(\"| ---: | ---: | ---: | ---: | ---: | ---: | ---: |\");\n    lines.push(\n      `| ${summary.totalClaims} | ${summary.byAudience.stakeholder} | ${summary.byAudience.engineer} | ${summary.byStrength.strong} | ${summary.byStrength.moderate} | ${summary.byStrength.weak} | ${summary.byStrength.none} |`\n    );\n    lines.push(\"\");\n\n    renderUncoveredBand(lines, review.changedFiles);\n    renderWeakBand(lines, review.changedFiles);\n\n    renderAudienceSection(\n      lines,\n      \"Stakeholder behaviour\",\n      review.claims.filter((c) => c.audience === \"stakeholder\")\n    );\n    renderAudienceSection(\n      lines,\n      \"Engineer changes\",\n      review.claims.filter((c) => c.audience === \"engineer\")\n    );\n\n    for (const evidence of review.codeDiffs) {\n      renderCodeDiff(lines, evidence);\n    }\n\n    return lines.join(\"\\n\").trimEnd();\n  }\n}\n","/**\n * Review HTML formatter — the audience-segmented deep-dive artifact for an\n * Evidence Review. Standalone themed HTML (mirrors {@link RunDiffHtmlFormatter}):\n * a banded changed-files list (uncovered → weak → covered), then claim cards\n * grouped by audience with graded evidence, intent, inline screenshots, and a\n * filter toolbar. No CDN dependencies required.\n */\n\nimport type {\n  ChangedFileReview,\n  CodeDiffAnnotation,\n  CodeDiffEvidence,\n  CodeDiffScenarioRef,\n  EvidenceStrength,\n  ReviewClaim,\n  ReviewResult,\n} from \"../types/review\";\nimport type { DiffHunk, FileDiff } from \"../types/diff\";\nimport type { DocEntry, StoryStep } from \"executable-stories-core/types/story\";\nimport type { TestCaseResult } from \"executable-stories-core/types/test-result\";\nimport { REPORT_THEME_CSS } from \"./report-theme-css\";\nimport { REPORT_FAVICON_LINK } from \"executable-stories-core/utils/report-favicon\";\n\nexport interface ReviewHtmlOptions {\n  title?: string;\n  /** Enable dark mode toggle. Default: true */\n  darkMode?: boolean;\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nconst STRENGTH_LABEL: Record<EvidenceStrength, string> = {\n  strong: \"Strong\",\n  moderate: \"Moderate\",\n  weak: \"Weak\",\n  none: \"None\",\n};\n\nfunction statusIcon(status: ReviewClaim[\"status\"]): string {\n  switch (status) {\n    case \"passed\":\n      return \"✅\";\n    case \"failed\":\n      return \"❌\";\n    case \"skipped\":\n      return \"⊘\";\n    default:\n      return \"•\";\n  }\n}\n\nfunction formatStep(step: StoryStep): string {\n  return `<li><strong>${escapeHtml(step.keyword)}</strong> ${escapeHtml(step.text)}</li>`;\n}\n\nfunction inlineDoc(doc: DocEntry): string {\n  switch (doc.kind) {\n    case \"note\":\n      return escapeHtml(doc.text);\n    case \"section\":\n      return `<strong>${escapeHtml(doc.title)}</strong>: ${escapeHtml(doc.markdown)}`;\n    case \"kv\":\n      return `${escapeHtml(doc.label)}: ${escapeHtml(String(doc.value))}`;\n    case \"code\":\n      return `${escapeHtml(doc.label)}: <code>${escapeHtml(doc.content)}</code>`;\n    case \"link\":\n      return `${escapeHtml(doc.label)}: ${escapeHtml(doc.url)}`;\n    default:\n      return escapeHtml(doc.kind);\n  }\n}\n\n/** Inline screenshots: embed image attachments, list screenshot-doc paths. */\nfunction renderEvidenceArtifacts(testCase: TestCaseResult): string {\n  const parts: string[] = [];\n  for (const att of testCase.attachments) {\n    if (att.mediaType.startsWith(\"image/\") && att.contentEncoding === \"BASE64\") {\n      parts.push(\n        `<img class=\"shot\" alt=\"${escapeHtml(att.name)}\" src=\"data:${escapeHtml(att.mediaType)};base64,${att.body}\" />`\n      );\n    }\n  }\n  if ((testCase.story.otelSpans?.length ?? 0) > 0) {\n    parts.push(\n      `<p class=\"trace-note\">📡 ${testCase.story.otelSpans!.length} OTEL span(s) captured</p>`\n    );\n  }\n  return parts.length > 0 ? `<div class=\"artifacts\">${parts.join(\"\")}</div>` : \"\";\n}\n\nfunction renderTicketPills(claim: ReviewClaim): string {\n  const tickets = claim.testCase.story.tickets ?? [];\n  if (tickets.length === 0) return \"\";\n  return `<div class=\"ticket-row\">${tickets\n    .map((ticket) => {\n      const label = escapeHtml(ticket.id);\n      if (ticket.url) {\n        return `<a class=\"ticket-pill\" href=\"${escapeHtml(ticket.url)}\" target=\"_blank\" rel=\"noopener noreferrer\">${label}</a>`;\n      }\n      return `<span class=\"ticket-pill\">${label}</span>`;\n    })\n    .join(\"\")}</div>`;\n}\n\nfunction renderClaimCard(claim: ReviewClaim): string {\n  const ticketSearch = (claim.testCase.story.tickets ?? [])\n    .map((ticket) => ticket.id)\n    .join(\" \");\n  const search = escapeHtml(\n    `${claim.scenario} ${claim.sourceFile} ${claim.changeType} ${claim.audience} ${claim.strength} ${ticketSearch}`\n  ).toLowerCase();\n\n  const steps =\n    claim.testCase.story.steps.length > 0\n      ? `<ul class=\"step-list\">${claim.testCase.story.steps.map(formatStep).join(\"\")}</ul>`\n      : \"\";\n\n  const reasons = `<ul class=\"reasons\">${claim.strengthReasons\n    .map((r) => `<li>${escapeHtml(r)}</li>`)\n    .join(\"\")}</ul>`;\n\n  const intent =\n    claim.intent !== undefined\n      ? `<div class=\"intent\"><span class=\"intent-label\">Why</span> ${escapeHtml(claim.intent)}</div>`\n      : \"\";\n\n  const covers =\n    claim.coversFiles.length > 0\n      ? `<p class=\"covers\">Covers ${claim.coversFiles\n          .map((f) => `<code>${escapeHtml(f)}</code>`)\n          .join(\", \")}</p>`\n      : \"\";\n\n  const docs = (claim.testCase.story.docs ?? []).filter(\n    (d) => d.kind === \"section\" || d.kind === \"note\"\n  );\n  const extraDocs =\n    docs.length > 0 && claim.intent === undefined\n      ? `<div class=\"intent\">${docs.map(inlineDoc).join(\"<br>\")}</div>`\n      : \"\";\n\n  return `\n    <article class=\"claim-card\" id=\"claim-${escapeHtml(claim.id)}\" data-audience=\"${claim.audience}\" data-strength=\"${claim.strength}\" data-search=\"${search}\">\n      <header class=\"claim-header\">\n        <div>\n          <span class=\"strength-badge strength-${claim.strength}\">${STRENGTH_LABEL[claim.strength]}</span>\n          ${claim.changeType !== \"unknown\" ? `<span class=\"change-pill\">${escapeHtml(claim.changeType)}</span>` : \"\"}\n          <h3>${statusIcon(claim.status)} ${escapeHtml(claim.scenario)}</h3>\n          <p class=\"source\">${escapeHtml(`${claim.sourceFile}:${claim.sourceLine}`)}</p>\n          ${renderTicketPills(claim)}\n        </div>\n      </header>\n      ${intent}${extraDocs}\n      <div class=\"evidence-block\">\n        <span class=\"evidence-label\">Evidence</span>\n        ${reasons}\n      </div>\n      ${covers}\n      ${renderEvidenceArtifacts(claim.testCase)}\n      ${steps}\n    </article>`;\n}\n\nfunction renderChangedFileRow(file: ChangedFileReview): string {\n  const claims =\n    file.claims.length > 0\n      ? file.claims\n          .map((c) => `${escapeHtml(c.scenario)} <em>(${c.strength})</em>`)\n          .join(\", \")\n      : \"—\";\n  return `<tr data-band=\"${file.band}\">\n    <td><span class=\"band-dot band-${file.band}\"></span></td>\n    <td><code>${escapeHtml(file.path)}</code></td>\n    <td>${escapeHtml(file.changeKind)}</td>\n    <td>${claims}</td>\n  </tr>`;\n}\n\n/** Raw patches above this embed as a \"too large\" notice instead of inline text. */\nconst MAX_PATCH_EMBED_BYTES = 256 * 1024;\n\nfunction renderScenarioRef(ref: CodeDiffScenarioRef): string {\n  if (!ref.resolved) {\n    return `<span class=\"scenario-ref unverified\">⚠️ ${escapeHtml(ref.id)} (unverified reference)</span>`;\n  }\n  const icon = ref.status === \"passed\" ? \"✅\" : ref.status === \"failed\" ? \"❌\" : \"⊘\";\n  return `<a class=\"scenario-ref\" href=\"#claim-${escapeHtml(ref.id)}\">${icon} ${escapeHtml(ref.scenario ?? ref.id)}</a>`;\n}\n\n/** One hunk as escaped table rows; the anchored changed run gets a highlight class. */\nfunction renderDiffHunk(\n  file: FileDiff,\n  hunk: DiffHunk,\n  anchoredStart?: number,\n  anchoredCount?: number\n): string {\n  let oldLn = hunk.oldStart;\n  let newLn = hunk.newStart;\n  const rows = hunk.lines.map((line, i) => {\n    const anchored =\n      anchoredStart !== undefined &&\n      anchoredCount !== undefined &&\n      i >= anchoredStart &&\n      i < anchoredStart + anchoredCount;\n    const cls = `diff-${line.kind}${anchored ? \" diff-anchored\" : \"\"}`;\n    const o = line.kind === \"add\" ? \"\" : String(oldLn++);\n    const n = line.kind === \"del\" ? \"\" : String(newLn++);\n    const sign = line.kind === \"add\" ? \"+\" : line.kind === \"del\" ? \"-\" : \" \";\n    return `<tr class=\"${cls}\"><td class=\"diff-ln\">${o}</td><td class=\"diff-ln\">${n}</td><td class=\"diff-sign\">${sign}</td><td class=\"diff-code\">${escapeHtml(line.text)}</td></tr>`;\n  });\n  const path = file.newPath ?? file.oldPath ?? \"\";\n  return `<div class=\"diff-hunk\">\n    <div class=\"diff-file-header\"><code>${escapeHtml(path)}</code> <span class=\"subtle\">@@ -${hunk.oldStart} +${hunk.newStart} @@ ${escapeHtml(hunk.header)}</span></div>\n    <table class=\"diff-table\"><tbody>${rows.join(\"\")}</tbody></table>\n  </div>`;\n}\n\nfunction renderAnnotation(\n  evidence: CodeDiffEvidence,\n  annotation: CodeDiffAnnotation,\n  diffIndex: number,\n  index: number\n): string {\n  const scenarios =\n    annotation.scenarios.length > 0\n      ? `<div class=\"scenario-row\">${annotation.scenarios.map(renderScenarioRef).join(\"\")}</div>`\n      : `<p class=\"no-scenario\">Not covered by a scenario — implementation claim without behavioural evidence.</p>`;\n\n  const res = annotation.resolution;\n  let body: string;\n  if (res.state === \"anchored\" && res.fileIndex !== undefined && res.hunkIndex !== undefined) {\n    const file = evidence.files[res.fileIndex];\n    body = renderDiffHunk(file, file.hunks[res.hunkIndex], res.lineIndex, res.lineCount);\n  } else if (res.state === \"ambiguous\") {\n    body = `<p class=\"anchor-notice\">⚠️ Ambiguous anchor — these lines appear in more than one place in the current patch, so the annotation is not attached to any of them.</p>`;\n  } else {\n    body = `<p class=\"anchor-notice\">⚠️ Orphaned annotation — could not locate these lines in the current patch. The prose below may describe code that has since changed.</p>`;\n  }\n\n  return `<article class=\"annotation\" id=\"code-diff-${diffIndex}-a${index}\" data-anchor-state=\"${res.state}\">\n    <h4>${escapeHtml(annotation.label ?? `Annotation ${index + 1}`)}</h4>\n    <p class=\"annotation-text\">${escapeHtml(annotation.text)}</p>\n    ${scenarios}\n    ${body}\n  </article>`;\n}\n\n/** Code Diff evidence: annotations in conceptual order, then the raw patch on demand. */\nfunction renderCodeDiffSection(evidence: CodeDiffEvidence, diffIndex: number): string {\n  const comparing =\n    evidence.baseLabel || evidence.headLabel\n      ? `<p class=\"subtle\">Comparing ${escapeHtml(evidence.baseLabel ?? \"base\")} → ${escapeHtml(evidence.headLabel ?? \"head\")}</p>`\n      : \"\";\n  // Only https: renders as a link; anything else (javascript:, file:, ...) stays inert text.\n  const audit =\n    evidence.patchUrl === undefined\n      ? \"\"\n      : evidence.patchUrl.startsWith(\"https://\")\n        ? `<p class=\"subtle\">Canonical patch: <a href=\"${escapeHtml(evidence.patchUrl)}\" rel=\"noopener noreferrer\">${escapeHtml(evidence.patchUrl)}</a></p>`\n        : `<p class=\"subtle\">Canonical patch: <code>${escapeHtml(evidence.patchUrl)}</code></p>`;\n  const outline =\n    evidence.annotations.length > 1\n      ? `<ol class=\"diff-outline\">${evidence.annotations\n          .map(\n            (a, i) =>\n              `<li><a href=\"#code-diff-${diffIndex}-a${i}\">${escapeHtml(a.label ?? `Annotation ${i + 1}`)}</a></li>`\n          )\n          .join(\"\")}</ol>`\n      : \"\";\n  const rawPatch =\n    Buffer.byteLength(evidence.patch, \"utf8\") <= MAX_PATCH_EMBED_BYTES\n      ? `<details class=\"raw-patch\"><summary>Raw patch (audit)</summary><pre><code>${escapeHtml(evidence.patch)}</code></pre></details>`\n      : `<p class=\"anchor-notice\">Patch too large to embed${evidence.patchUrl ? \" — use the canonical patch link above\" : \"\"}.</p>`;\n\n  return `<section class=\"panel code-diff\" id=\"code-diff-${diffIndex}\">\n    <h2>Code diff: ${escapeHtml(evidence.title)}</h2>\n    ${comparing}\n    ${audit}\n    ${outline}\n    ${evidence.annotations.map((a, i) => renderAnnotation(evidence, a, diffIndex, i)).join(\"\\n\")}\n    ${rawPatch}\n  </section>`;\n}\n\nfunction renderAudienceSection(title: string, claims: ReviewClaim[]): string {\n  if (claims.length === 0) return \"\";\n  return `<section class=\"audience-section\">\n    <h2>${escapeHtml(title)} <span class=\"count\">${claims.length}</span></h2>\n    <div class=\"claim-list\">${claims.map(renderClaimCard).join(\"\\n\")}</div>\n  </section>`;\n}\n\nconst REVIEW_CSS = `\n  * { box-sizing: border-box; }\n  body { margin: 0; font-family: var(--font-sans, system-ui, sans-serif); background: var(--background); color: var(--foreground); }\n  main { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n  h1, h2, h3, p { margin: 0; }\n  .review-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }\n  .subtle { color: var(--muted-foreground); margin-top: 6px; }\n  .theme-toggle { background: var(--secondary); border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px; cursor: pointer; font-size: 1.1rem; color: var(--foreground); }\n  .card, .claim-card, .summary-card, .panel { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius, 16px); }\n  .hero-card { padding: 24px; margin-bottom: 20px; }\n  .summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 12px; margin-bottom: 20px; }\n  .summary-card { padding: 14px 16px; }\n  .summary-card strong { display: block; font-size: 1.8rem; }\n  .priority-banner { padding: 18px 20px; margin-bottom: 20px; background: linear-gradient(135deg, color-mix(in srgb, var(--destructive) 10%, transparent), var(--card)); }\n  .panel { padding: 18px; margin-bottom: 24px; }\n  table { width: 100%; border-collapse: collapse; }\n  th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }\n  th { color: var(--muted-foreground); font-weight: 600; }\n  .band-dot { display: inline-block; width: 12px; height: 12px; border-radius: 50%; }\n  .band-uncovered { background: var(--destructive); }\n  .band-weak { background: var(--warning, #b58900); }\n  .band-covered { background: var(--success, #2e7d32); }\n  .toolbar { position: sticky; top: 12px; z-index: 2; display: flex; flex-wrap: wrap; gap: 10px; padding: 14px; margin-bottom: 20px; }\n  .toolbar input { flex: 1 1 240px; border: 1px solid var(--border); border-radius: 999px; padding: 10px 14px; font: inherit; background: var(--background); color: var(--foreground); }\n  .toolbar button { border: 1px solid var(--border); background: var(--secondary); border-radius: 999px; padding: 10px 14px; font: inherit; cursor: pointer; color: var(--foreground); }\n  .toolbar button.active { background: var(--foreground); color: var(--background); }\n  .audience-section { margin-bottom: 28px; }\n  .audience-section h2 { margin-bottom: 12px; }\n  .count { color: var(--muted-foreground); font-weight: 400; }\n  .claim-list { display: grid; gap: 14px; }\n  .claim-card { padding: 18px; }\n  .claim-header h3 { margin-top: 8px; }\n  .source { color: var(--muted-foreground); font-family: var(--font-mono, ui-monospace, monospace); font-size: 0.85rem; margin-top: 4px; }\n  .ticket-row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }\n  .ticket-pill { display: inline-flex; align-items: center; border: 1px solid var(--border); border-radius: 999px; padding: 3px 9px; color: var(--muted-foreground); background: var(--background); font-size: 0.78rem; text-decoration: none; }\n  .ticket-pill:hover { color: var(--foreground); border-color: var(--muted-foreground); }\n  .strength-badge, .change-pill { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; font-size: 0.8rem; margin-right: 6px; }\n  .change-pill { background: var(--secondary); }\n  .strength-strong { background: color-mix(in srgb, var(--success, #2e7d32) 18%, transparent); color: var(--success, #2e7d32); }\n  .strength-moderate { background: color-mix(in srgb, var(--warning, #b58900) 20%, transparent); color: var(--warning, #b58900); }\n  .strength-weak { background: color-mix(in srgb, #d2691e 20%, transparent); color: #b5530a; }\n  .strength-none { background: color-mix(in srgb, var(--destructive) 16%, transparent); color: var(--destructive); }\n  .intent { margin: 12px 0; padding: 10px 12px; border-left: 3px solid var(--border); background: color-mix(in srgb, var(--card) 60%, var(--background)); border-radius: 6px; }\n  .intent-label { font-weight: 700; margin-right: 6px; }\n  .evidence-block { margin-top: 10px; }\n  .evidence-label { font-weight: 600; color: var(--muted-foreground); }\n  .reasons { margin: 6px 0 0; padding-left: 18px; }\n  .covers { color: var(--muted-foreground); margin-top: 8px; font-size: 0.9rem; }\n  .artifacts { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }\n  .shot { max-width: 280px; max-height: 200px; border: 1px solid var(--border); border-radius: 8px; }\n  .trace-note { color: var(--muted-foreground); }\n  .step-list { margin: 12px 0 0; padding-left: 18px; color: var(--muted-foreground); }\n  .code-diff h2 { margin-bottom: 6px; }\n  .code-diff a { color: var(--foreground); }\n  .diff-outline { margin: 12px 0; padding-left: 20px; }\n  .annotation { margin: 18px 0; padding: 14px 16px; border: 1px solid var(--border); border-radius: 10px; background: color-mix(in srgb, var(--card) 60%, var(--background)); }\n  .annotation h4 { margin: 0 0 6px; }\n  .annotation-text { margin: 0 0 10px; }\n  .scenario-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }\n  .scenario-ref { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--border); border-radius: 999px; padding: 3px 10px; font-size: 0.82rem; text-decoration: none; color: var(--foreground); background: var(--background); }\n  .scenario-ref.unverified { color: var(--warning, #b58900); border-color: var(--warning, #b58900); }\n  .no-scenario { color: var(--warning, #b58900); font-size: 0.9rem; margin: 0 0 10px; }\n  .anchor-notice { color: var(--warning, #b58900); background: color-mix(in srgb, var(--warning, #b58900) 10%, transparent); border-radius: 6px; padding: 8px 10px; margin: 0; }\n  .diff-hunk { border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }\n  .diff-file-header { padding: 6px 10px; background: var(--secondary); border-bottom: 1px solid var(--border); font-size: 0.85rem; }\n  .diff-table { font-family: var(--font-mono, ui-monospace, monospace); font-size: 0.82rem; }\n  .diff-table td { padding: 1px 8px; border-bottom: none; }\n  .diff-code { white-space: pre-wrap; word-break: break-all; }\n  .diff-ln { color: var(--muted-foreground); text-align: right; user-select: none; width: 1%; white-space: nowrap; }\n  .diff-sign { user-select: none; width: 1%; }\n  .diff-add { background: color-mix(in srgb, var(--success, #2e7d32) 12%, transparent); }\n  .diff-del { background: color-mix(in srgb, var(--destructive) 10%, transparent); }\n  .diff-anchored .diff-code { box-shadow: inset 3px 0 0 var(--primary, #2e7d32); }\n  .raw-patch { margin-top: 16px; }\n  .raw-patch pre { overflow-x: auto; background: var(--secondary); border-radius: 8px; padding: 12px; }\n`;\n\nconst JS_THEME_TOGGLE = `\nfunction getSystemTheme() { return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; }\nfunction getEffectiveTheme() { var s = localStorage.getItem('review-theme'); return (s === 'dark' || s === 'light') ? s : getSystemTheme(); }\nfunction toggleTheme() { var n = getEffectiveTheme() === 'dark' ? 'light' : 'dark'; localStorage.setItem('review-theme', n); applyTheme(n); }\nfunction applyTheme(t) {\n  document.documentElement.setAttribute('data-theme', t);\n  var b = document.querySelector('.theme-toggle');\n  if (b) { b.textContent = t === 'dark' ? '\\\\u2600\\\\ufe0f' : '\\\\ud83c\\\\udf19'; }\n}\n`;\n\nexport class ReviewHtmlFormatter {\n  private title: string;\n  private darkMode: boolean;\n\n  constructor(options: ReviewHtmlOptions = {}) {\n    this.title = options.title ?? \"Evidence Review\";\n    this.darkMode = options.darkMode ?? true;\n  }\n\n  format(review: ReviewResult): string {\n    const { summary, context } = review;\n\n    const priority =\n      summary.changedSourceFiles === 0\n        ? \"No changed source files supplied — showing claims and evidence only.\"\n        : summary.uncovered > 0\n          ? `${summary.uncovered} changed file(s) have no evidence. Review them first.`\n          : summary.weaklyCovered > 0\n            ? `No unaccounted-for changes. ${summary.weaklyCovered} file(s) are weakly covered.`\n            : \"Every changed source file is backed by at least moderate evidence.\";\n\n    const changedFilesPanel =\n      summary.changedSourceFiles > 0\n        ? `<section class=\"panel\">\n            <h2>Changed files</h2>\n            <table>\n              <thead><tr><th></th><th>File</th><th>Change</th><th>Evidence</th></tr></thead>\n              <tbody>${review.changedFiles.map(renderChangedFileRow).join(\"\")}</tbody>\n            </table>\n          </section>`\n        : \"\";\n\n    const themeToggleHtml = this.darkMode\n      ? `<button type=\"button\" class=\"theme-toggle\" onclick=\"toggleTheme()\" aria-label=\"Toggle theme\"></button>`\n      : \"\";\n    const themeInitJs = this.darkMode\n      ? `${JS_THEME_TOGGLE}\\napplyTheme(getEffectiveTheme());`\n      : \"\";\n    const themeAttr = this.darkMode ? ' data-theme=\"light\"' : \"\";\n\n    const refsLine =\n      context.baseRef || context.headRef\n        ? `<p class=\"subtle\">Comparing ${escapeHtml(context.baseRef ?? \"base\")} → ${escapeHtml(context.headRef ?? \"head\")}</p>`\n        : \"\";\n\n    return `<!doctype html>\n<html lang=\"en\"${themeAttr}>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    ${REPORT_FAVICON_LINK}\n    <title>${escapeHtml(this.title)}</title>\n    <style>\n      ${REPORT_THEME_CSS}\n      ${REVIEW_CSS}\n    </style>\n  </head>\n  <body>\n    <main>\n      <div class=\"hero-card card\">\n        <div class=\"review-header\">\n          <h1>${escapeHtml(this.title)}</h1>\n          ${themeToggleHtml}\n        </div>\n        ${refsLine}\n      </div>\n      <section class=\"summary-grid\">\n        <div class=\"summary-card\"><strong>${summary.uncovered}</strong><span>🔴 Uncovered</span></div>\n        <div class=\"summary-card\"><strong>${summary.weaklyCovered}</strong><span>🟡 Weak</span></div>\n        <div class=\"summary-card\"><strong>${summary.covered}</strong><span>🟢 Covered</span></div>\n        <div class=\"summary-card\"><strong>${summary.totalClaims}</strong><span>Claims</span></div>\n        <div class=\"summary-card\"><strong>${summary.byStrength.strong}</strong><span>Strong</span></div>\n        <div class=\"summary-card\"><strong>${summary.byStrength.weak + summary.byStrength.none}</strong><span>Weak/None</span></div>\n      </section>\n      <section class=\"card priority-banner\">\n        <h2>Review priority</h2>\n        <p class=\"subtle\">${escapeHtml(priority)}</p>\n      </section>\n      ${changedFilesPanel}\n      <div class=\"claims-region\">\n        <section class=\"toolbar\">\n          <input type=\"search\" placeholder=\"Filter claims by scenario, file, change-type\" aria-label=\"Filter claims\" />\n          <button type=\"button\" class=\"active\" data-filter=\"all\">All</button>\n          <button type=\"button\" data-filter=\"stakeholder\">Stakeholder</button>\n          <button type=\"button\" data-filter=\"engineer\">Engineer</button>\n          <button type=\"button\" data-filter=\"weak\">Weak/None</button>\n        </section>\n        ${renderAudienceSection(\"Stakeholder behaviour\", review.claims.filter((c) => c.audience === \"stakeholder\"))}\n        ${renderAudienceSection(\"Engineer changes\", review.claims.filter((c) => c.audience === \"engineer\"))}\n      </div>\n      ${review.codeDiffs.map((d, i) => renderCodeDiffSection(d, i)).join(\"\\n\")}\n    </main>\n    <script>\n      ${themeInitJs}\n      const input = document.querySelector('input[type=\"search\"]');\n      const buttons = Array.from(document.querySelectorAll('[data-filter]'));\n      const cards = Array.from(document.querySelectorAll('.claim-card'));\n      let activeFilter = 'all';\n      function applyFilters() {\n        const query = (input.value || '').trim().toLowerCase();\n        cards.forEach((card) => {\n          const audience = card.getAttribute('data-audience');\n          const strength = card.getAttribute('data-strength');\n          const haystack = card.getAttribute('data-search') || '';\n          let matchesFilter = activeFilter === 'all'\n            || audience === activeFilter\n            || (activeFilter === 'weak' && (strength === 'weak' || strength === 'none'));\n          const matchesSearch = !query || haystack.includes(query);\n          card.style.display = matchesFilter && matchesSearch ? '' : 'none';\n        });\n      }\n      input.addEventListener('input', applyFilters);\n      buttons.forEach((button) => {\n        button.addEventListener('click', () => {\n          activeFilter = button.getAttribute('data-filter');\n          buttons.forEach((b) => b.classList.toggle('active', b === button));\n          applyFilters();\n        });\n      });\n      applyFilters();\n    </script>\n  </body>\n</html>`;\n  }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport interface DeploymentEntry {\n  environment: string;\n  tag?: string;\n  sha?: string;\n  runFile: string;\n  scenarioIds: string[];\n  scenarioStatuses?: Record<string, string>;\n  timestamp: string;\n  summary: {\n    total: number;\n    passed: number;\n    failed: number;\n    skipped: number;\n    pending: number;\n  };\n}\n\nexport interface DeploymentLedger {\n  deployments: DeploymentEntry[];\n  schemaVersion: 1;\n}\n\nexport function createEmptyLedger(): DeploymentLedger {\n  return {\n    deployments: [],\n    schemaVersion: 1,\n  };\n}\n\nexport function loadLedger(ledgerPath: string): DeploymentLedger {\n  const resolved = path.resolve(ledgerPath);\n  if (!fs.existsSync(resolved)) {\n    return createEmptyLedger();\n  }\n  try {\n    const raw = JSON.parse(fs.readFileSync(resolved, \"utf8\"));\n    if (raw.schemaVersion !== 1) {\n      throw new Error(`Unsupported ledger schemaVersion: ${raw.schemaVersion}`);\n    }\n    return raw as DeploymentLedger;\n  } catch (err) {\n    const msg = err instanceof Error ? err.message : String(err);\n    throw new Error(`Failed to load deployment ledger at ${resolved}: ${msg}`, { cause: err });\n  }\n}\n\nexport function saveLedger(ledger: DeploymentLedger, ledgerPath: string): void {\n  const resolved = path.resolve(ledgerPath);\n  const dir = path.dirname(resolved);\n  fs.mkdirSync(dir, { recursive: true });\n  fs.writeFileSync(resolved, JSON.stringify(ledger, null, 2), \"utf8\");\n}\n\nexport function getLatestDeployment(\n  ledger: DeploymentLedger,\n  environment: string,\n): DeploymentEntry | undefined {\n  return [...ledger.deployments]\n    .reverse()\n    .find((d) => d.environment === environment);\n}\n","import type { TestRunResult } from \"executable-stories-core/types/test-result\";\nimport {\n  type DeploymentEntry,\n  getLatestDeployment,\n  loadLedger,\n  saveLedger,\n} from \"./ledger\";\n\nexport interface RecordDeploymentArgs {\n  run: TestRunResult;\n  environment: string;\n  tag?: string;\n  ledgerPath: string;\n  runFilePath: string;\n}\n\nexport interface RecordDeploymentResult {\n  entry: DeploymentEntry;\n  ledgerPath: string;\n}\n\nexport function recordDeployment(args: RecordDeploymentArgs): RecordDeploymentResult {\n  const ledger = loadLedger(args.ledgerPath);\n\n  const previous = getLatestDeployment(ledger, args.environment);\n\n  const entry: DeploymentEntry = {\n    environment: args.environment,\n    tag: args.tag,\n    sha: args.run.gitSha,\n    runFile: args.runFilePath,\n    scenarioIds: args.run.testCases.map((tc) => tc.id),\n    scenarioStatuses: Object.fromEntries(args.run.testCases.map((tc) => [tc.id, tc.status])),\n    timestamp: new Date(args.run.finishedAtMs).toISOString(),\n    summary: countStatuses(args.run),\n  };\n\n  ledger.deployments.push(entry);\n\n  if (previous) {\n    const previousIds = new Set(previous.scenarioIds);\n    const added = entry.scenarioIds.filter((id) => !previousIds.has(id)).length;\n    const removed = previous.scenarioIds.filter((id) => !entry.scenarioIds.includes(id)).length;\n    if (added > 0 || removed > 0) {\n      // Log drift info but don't block — informative only\n    }\n  }\n\n  saveLedger(ledger, args.ledgerPath);\n\n  return { entry, ledgerPath: args.ledgerPath };\n}\n\nexport interface DeploymentStatus {\n  environments: Record<\n    string,\n    {\n      latest: DeploymentEntry;\n      previousDeployment?: DeploymentEntry;\n    }\n  >;\n  ledgerPath: string;\n}\n\nexport function getDeploymentStatus(ledgerPath: string): DeploymentStatus {\n  const ledger = loadLedger(ledgerPath);\n  const environments: DeploymentStatus[\"environments\"] = {};\n\n  for (const entry of ledger.deployments) {\n    environments[entry.environment] = {\n      latest: entry,\n      previousDeployment: environments[entry.environment]?.latest,\n    };\n  }\n\n  return { environments, ledgerPath };\n}\n\nexport interface EnvironmentDrift {\n  environmentA: string;\n  environmentB: string;\n  onlyInA: string[];\n  onlyInB: string[];\n  inBoth: string[];\n  statusChanged: Array<{\n    id: string;\n    statusA: string;\n    statusB: string;\n  }>;\n  aEntry: DeploymentEntry;\n  bEntry: DeploymentEntry;\n}\n\nexport function getEnvironmentDrift(\n  ledgerPath: string,\n  envA: string,\n  envB: string,\n): EnvironmentDrift {\n  const ledger = loadLedger(ledgerPath);\n  const aEntry = getLatestDeployment(ledger, envA);\n  const bEntry = getLatestDeployment(ledger, envB);\n\n  if (!aEntry) {\n    throw new Error(`No deployment found for environment \"${envA}\"`);\n  }\n  if (!bEntry) {\n    throw new Error(`No deployment found for environment \"${envB}\"`);\n  }\n\n  const aIds = new Set(aEntry.scenarioIds);\n  const bIds = new Set(bEntry.scenarioIds);\n\n  const onlyInA = aEntry.scenarioIds.filter((id) => !bIds.has(id));\n  const onlyInB = bEntry.scenarioIds.filter((id) => !aIds.has(id));\n  const inBoth = aEntry.scenarioIds.filter((id) => bIds.has(id));\n  const statusChanged = inBoth\n    .map((id) => ({\n      id,\n      statusA: aEntry.scenarioStatuses?.[id] ?? \"unknown\",\n      statusB: bEntry.scenarioStatuses?.[id] ?? \"unknown\",\n    }))\n    .filter((item) => item.statusA !== item.statusB);\n\n  return { environmentA: envA, environmentB: envB, onlyInA, onlyInB, inBoth, statusChanged, aEntry, bEntry };\n}\n\nfunction countStatuses(run: TestRunResult): DeploymentEntry[\"summary\"] {\n  const summary = { total: 0, passed: 0, failed: 0, skipped: 0, pending: 0 };\n  for (const tc of run.testCases) {\n    summary.total++;\n    if (tc.status in summary) {\n      summary[tc.status as keyof typeof summary]++;\n    }\n  }\n  return summary;\n}\n"],"mappings":"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","names":["path","fsPromises","import_canonicalize","text","formatSteps","formatDocs","formatStep","formatDocEntry","import_ids","text","remote","count","bucket","escapeCell","text","link","resolve","text","DEFAULT_MAX_ATTACHMENT_BYTES","PAGE_LIMIT","text","config","provider","import_story_report","import_tokens","import_canonicalize","import_ids","import_assert_never","import_ids","scenarioLine","statusMap","import_story_report","summarize","import_story_report","pad","text","import_story_report","path","fs","path","path","fs","fsPromises","import_story_report","import_assert_never","indent","import_executable_stories_core","import_assert_never","import_assertive_steps","isLocalFsPath","groupBy","indent","import_node_crypto","import_executable_stories_core","import_node_crypto","path","path","strong","path","text","heading","path","escapePipe","basename","scenarioLine","import_assert_never","import_node_crypto","text","table","import_assert_never","table","path","resolve","import_report_favicon","escapeHtml","path","import_node_path","path","testCases","count","resolve","count","import_source_file","import_assert_never","groupBy","crypto","fs","path","fs","path","fs","path","toPosix","htmlPaths","import_executable_stories_core","import_node_path","path","run","import_node_path","readFileReports","path","count","text","import_story_report","parseAdf","basicAuthHeader","parseErrorBody","fs","path","import_duration","fs","path","text","text","formatDuration","truncate","text","formatDuration","import_node_crypto","buildSummary","toCIInfo","import_assertive_steps","lines","firstLine","path","path","bucket","statusIcon","escapeCell","firstLine","import_report_favicon","escapeHtml","statusIcon","formatStep","MAX_PATCH_EMBED_BYTES","path","renderAudienceSection","JS_THEME_TOGGLE","fs","path","toPosix"]}